Zum Hauptinhalt springen
VelinStyle v1.2.0
⌂ Home
  1. Docs
  2. Guides
  3. Vite & React

Vite-Starter & React 1.2.0

Der Vite + statisches HTML-Starter im VelinStyle-Repo plus das offizielle Paket @velinstyle/react — ein Workflow für plain Sites und React-Apps. English: Vite starter & React

Reifegrad: In VelinStyle 1.2.0 als stable dokumentiert. Design Intelligence (plan / review / Agent-Meta) ist davon getrennt und dort, wo vermerkt, beta / foundation.

Wann sinnvoll

Wann nicht

Vite-Starter-Template

Pfad: templates/vite-velinstyle. VelinStyle wird mit "velinstyle": "file:../.." gepinnt, damit Framework-Änderungen sofort sichtbar sind.

git clone https://github.com/SkyliteDesign/velinstyle
cd velinstyle/templates/vite-velinstyle
npm install
npm run dev

npm run build für ein Production-Bundle nutzen.

Dieses Template als Referenz für Core-CSS, optionale Theme-Stylesheets und das Components-Bundle.

React-Integration

Paket: @velinstyle/react (packages/react). Das React-Paket ist ein dünner Wrapper um native Web Components — keine Re-Implementierung, keine doppelte Logik; typisierte Props und JSX-Ergonomie auf denselben Elementen wie in HTML.

Wrapper existieren für jedes kanonische velin-*-Element. Die Exportliste wird aus der Component Registry generiert; CI schlägt bei Drift fehl — ein neues Element kann nicht ohne Wrapper shippen. Deprecated *-wc-Aliase sind bewusst ausgenommen.

Lokal bauen (vom Repository-Root, nach git clone; Peer react):

npm run build:react

Verwendung — VelinStyle-CSS und Components-Bundle einmal importieren; Wrapper wie native Elemente nutzen. Props werden auf die Form gemappt, die das Custom Element erwartet; Handler und Refs hängen am DOM-Knoten.

import { useRef } from 'react';
import { VelinDialog, VelinThemeToggle } from '@velinstyle/react';
import '@birdapi/velinstyle/css';
import '@birdapi/velinstyle/bundle';

export function App() {
  const dialogRef = useRef(null);
  return (
    <>
      <VelinThemeToggle target="html" />
      <VelinDialog ref={dialogRef} />
      <button type="button" onClick={() => dialogRef.current?.confirm('Continue?', { title: 'Settings' })}>
        Open dialog
      </button>
    </>
  );
}

Runtime-Boot in React

Tree-Shaking bleibt möglich: bootFromDOM(document, { attributes: true }) einmal beim App-Start oder register([...]) für bekannte Tags. Die React-Wrapper setzen voraus, dass das Custom Element definiert ist (via Bundle-Import oder Runtime).

Prop-Mapping

React 18 macht aus unbekannten Props String-Attribute — open={false} würde open="false" rendern (für hasAttribute trotzdem truthy), Objekte würden stringifiziert. Die Wrapper leiten jedes Prop in die vom Custom Element erwartete Form:

Prop-WertAngewendet als
string, numberAttribut
booleanPresence-Attribut (setzen oder entfernen)
object, array, functionElement-Property
onVelin* functionaddEventListener für das passende Custom Event
null / undefinedweggelassen
onClick und andere React-Eventsunverändert an React

Custom-Event-Namen folgen dem Prop-Namen: onVelinSearchSelect bindet velin-search-select.

<VelinSearch
  entries={entries}                    // element property, not stringified
  open={isOpen}                        // presence attribute
  onVelinSearchSelect={handleSelect}   // custom event listener
  onClick={handleClick}                // regular React handler
/>

Für eigene Custom Elements liefert createVelinComponent('my-widget') einen Wrapper mit demselben Verhalten.

React-Hinweise:

Siehe auch