Headless-Komponentensystem · Neue Ressource

Bits UI-Designsystem.

Bits UI stellt Headless-Svelte-Komponenten bereit, die sich über native Bestandteile und den Zustand von Svelte 5 zusammensetzen lassen. Das Beispiel kombiniert eine aus dem Gesamtzustand abgeleitete Checkbox mit gemischtem Zustand, unabhängig voneinander ausklappbare Akkordeonbereiche und einen Dialog für Bewertungen auf Basis eines Portals. Die vollständige Konfiguration der Gestaltung ist ebenfalls enthalten.

OpenDesign-Leitfaden9 Kapitel28 ReferenzeinträgeOriginaler Anwendungsleitfaden
01

Bits UI-Designsystem: Vorschau der Benutzeroberfläche

Markieren Sie eine einzelne Prüfung, untersuchen Sie den gemischten Status der Gesamtprüfung, sehen Sie sich den unvollständigen Fortschritt an und schließen Sie anschließend die lokale Checkliste ab und speichern Sie sie.

Manuelle Prüfung der BenutzeroberflächeVollständiges Beispiel öffnen
Bits UI 2.19.5 Checkbox, Accordion und Dialog mit Svelte 5.57.1. Alle visuellen Styles sind eigens gestaltet. · Implementierungsreferenz
02

Bits UI-Designsystem: Designreferenz

Bits UI 2.19.5 mit Svelte 5.57.1. Bits UI ist headless: Alle Farben, Typografie- und Abstandsangaben unter --app-* sind Teil der expliziten, eigens gestalteten Konfiguration dieses Beispiels und keine offiziellen Bits UI-Design-Tokens. Native Datenattribute und Komponenten-Props sind separat gekennzeichnet.

Eigene semantische CSS-Konfiguration

Quelle
Name / RegelWert / KonfigurationVerwendung
--app-canvas#f4f3f8 Seitenhintergrund.
--app-surface#ffffff Oberfläche des Bedienfelds und Dialogs.
--app-ink#2d2938 Haupttext.
--app-muted#746d80 Unterstützender Text.
--app-line#e3dfeb Trennlinien und Rahmen.
--app-action#604c88 Markierte Steuerelemente und Hauptaktionen.
--app-on-action#fffText auf Aktionen.
--app-focus#9a80ce Sichtbarer Tastaturfokus.
--app-soft#eee8f7 Optionale dezente Oberflächenrolle.

Eigene Abstände und Geometrie

Quelle
Name / RegelWert / KonfigurationVerwendung
--app-space-14pxKleinste benannte Abstandseinheit.
--app-space-28pxKompakter Abstand.
--app-space-312pxAbstand zwischen Steuerelement und Beschriftung.
--app-space-416pxInnenabstand des schmalen Bedienfelds.
--app-space-624pxInnenabstand des Bedienfelds und Spaltenabstand auf dem Desktop.
--app-space-832pxSeitenabstand auf dem Desktop.
Checkbox geometry22×22px; 5px radius; 1px borderExplizites, eigens gestaltetes Steuerelement-Styling.
Focus ring3px solid #9a80ce; 3px offsetWird auf den Tastaturfokus einer Schaltfläche angewendet.
Dialog widthmin(440px, 100% − 28px)Explizite Geometrie der responsiven Überlagerung.
Dialog maximum height100vh − 28px with overflow:autoAnsichtsfensterbegrenzung nur für die Überlagerung; keine Rückkopplung über die Seitenhöhe.
Type hierarchy34px title / 29px mobile; 16px accordion; 13px checks; 12px guidanceEigene Hierarchie mit Systemschriften.

Verträge nativer Komponenten

Quelle
Name / RegelWert / KonfigurationVerwendung
Checkbox.Root checkedbooleanAbgeschlossener oder unvollständiger Status.
Checkbox.Root indeterminatebooleanDas Steuerelement für die Gesamtmarkierung zeigt einen gemischten Status an, wenn einige Prüfungen markiert sind.
Checkbox data-statechecked / unchecked / indeterminateWird direkt vom Stylesheet verwendet.
Accordion.Root typemultipleMehrere Prüfungsabschnitte können gleichzeitig geöffnet bleiben.
Accordion valuestring[]Svelte-gebundene Liste der IDs aufgeklappter Gruppen.
Dialog.Root openboolean, two-way boundSteuert die Sichtbarkeit der Prüfung.
Dialog.Title / DescriptionNative title and description relationshipsManuelle doppelte ARIA-IDs sind nicht erforderlich.
Dialog.PortalOverlay and content rendered outside the normal panelVerhindert Abschneiden durch den Dokumentfluss des Bedienfelds.
03

Vollständige Anleitung zum Bits UI-Designsystem

Ein praktischer Leitfaden zur Auswahl, Anwendung und Überprüfung dieses Systems für ein echtes Interface.

DESIGN-bits-ui.md

Umfassende Anleitung, Einstieg in die Implementierung und Links zu den Quellen.

Leitfaden herunterladen

Bits UI-Designsystem: Native Teile mit dem Svelte-5-Status zusammensetzen

Native Teile mit dem Svelte-5-Status zusammensetzen

Die Checkliste verwendet $state für die einzelnen Antworten, die IDs der aufgeklappten Abschnitte und die Sichtbarkeit des Dialogs. Ein mit $derived berechneter Abschlusszähler speist sowohl den sichtbaren Fortschritt als auch das Kontrollkästchen für die Gesamtmarkierung. So liegt die maßgebliche Datenquelle in einem einzigen Svelte-Modell, während Bits UI die native Interaktion für jede Komponente bereitstellt.

Aus diesem OpenDesign-Leitfaden

Checkbox, Accordion und Dialog werden aus ihren jeweiligen Teilen zusammengesetzt. Der Prüfungsdialog muss die Antworten der Checkliste nicht verwalten, und ein Accordion muss diese Antworten beim Schließen nicht verwerfen. Diese Trennung ist ein guter Ausgangspunkt für ein Formular mit mehreren Abschnitten: Das Modell bleibt erhalten, auch wenn sich ändert, welche Teile der Benutzeroberfläche sichtbar sind.

Unterstützende Spezifikation lesen

Bits UI-Designsystem: Svelte-5-Komponenten und Styling-Quellen gemeinsam verwenden

Svelte-5-Komponenten und Styling-Quellen gemeinsam verwenden

Das Beispiel verwendet Svelte-5-Runen: $state für Gruppen, aufgeklappte Abschnitte, Dialogsichtbarkeit und Speicherstatus; $derived für den Abschlusszähler. Bits UI 2.19.5 wird direkt importiert. Für dieses eigens gestaltete Erscheinungsbild sind weder ein Tailwind-Plugin noch ein Theme-Provider oder eine Symbolbibliothek erforderlich.

Die vollständigen Dateien App.svelte und style.css funktionieren in einem standardmäßigen Vite-Svelte-Projekt. Der Einstiegspunkt verwendet mount aus Svelte anstelle des älteren Konstruktors new App. Behalten Sie beim Übertragen des Beispiels die Runen-Syntax der Komponente und die Abhängigkeit von Bits UI 2.19.5 zusammen; die hier gezeigten Bindings und Callbacks gehören nicht zu einer älteren Svelte-Komponenten-API.

Unterstützende Spezifikation lesen

Bits UI-Designsystem: Einen echten gemischten Status aus den einzelnen Kontrollkästchen ableiten

Einen echten gemischten Status aus den einzelnen Kontrollkästchen ableiten

Sechs boolesche Prüfungen sind in drei Gruppen unterteilt. Das übergeordnete Kontrollkästchen ist nur dann aktiviert, wenn alle sechs Prüfungen erledigt sind, und im Zwischenzustand, wenn eine bis fünf Prüfungen erledigt sind. Sein onCheckedChange-Callback aktualisiert alle Prüfungen. Dadurch wird der Mischzustand berechnet, statt als separates Flag gespeichert zu werden, das nicht mehr mit den Prüfungen übereinstimmen könnte.

Einzelne Steuerelemente rufen eine kleine Änderungsfunktion auf, die ihr Modell aktualisiert und gespeicherte Rückmeldungen verwirft. Das gerenderte native Kontrollkästchen des übergeordneten Elements setzt aria-checked=mixed, sobald eine Prüfung ausgewählt wurde. Das Stylesheet reagiert auf data-state=checked und data-state=indeterminate, sodass Verhalten und Darstellung an denselben nativen Zustand gekoppelt bleiben.

  1. Wähle die erste Prüfung zum Fokusindikator aus und untersuche den Strich im übergeordneten Kontrollkästchen.
  2. Öffne die Prüfliste und bestätige, dass „Abgeschlossene Prüfung speichern“ deaktiviert ist.
  3. Kehre zurück, markiere alle Prüfungen und speichere den vollständigen lokalen Stand.

Unterstützende Spezifikation lesen

Bits UI-Designsystem: Unabhängige Abschnitte ermöglichen, ohne ihre Antworten zu verlieren

Unabhängige Abschnitte ermöglichen, ohne ihre Antworten zu verlieren

Accordion.Root verwendet type=multiple und ein gebundenes Array mit den IDs der geöffneten Gruppen. Zu Beginn sind alle Abschnitte geöffnet. Die Bereiche zur Formularprüfung und zum Ergebnisfeedback lassen sich unabhängig voneinander öffnen. Beim Zuklappen eines Abschnitts bleiben seine Prüfungen erhalten, weil ihre Werte im übergeordneten Zustand gespeichert sind.

Jeder Trigger zeigt erneut die Anzahl der abgeschlossenen Prüfungen an, damit der Fortschritt auch bei zugeklappten Inhalten sichtbar bleibt. Die nativen Teile Header, Trigger und Content erhalten die erwartete Beziehung und das gewohnte Tastaturverhalten. Das Pluszeichen dreht sich entsprechend dem data-state des Triggers. Die Erweiterung wird nicht über einen separaten Click-Handler gesteuert, und Einstellungen für reduzierte Bewegung werden berücksichtigt.

Unterstützende Spezifikation lesen

Bits UI-Designsystem: Den vollständigen Dialogaufbau zusammensetzen und den Fokus verwalten lassen

Den vollständigen Dialogaufbau zusammensetzen und den Fokus dem Dialog überlassen

Die Prüfung verwendet Dialog.Root, Trigger, Portal, Overlay, Content, Title, Description und Close. Titel und Beschreibung sind tatsächliche native Teile, sodass Bits UI ihre barrierefreien Beziehungen herstellen kann. Das Portal platziert das Overlay außerhalb des normalen Layoutflusses der Prüfliste.

Der Inhalt hat eine begrenzte responsive Breite und für das Overlay eine maximale Höhe, bei deren Überschreitung ein Scrollbalken angezeigt wird. Mit Escape lässt sich der Dialog schließen, ohne die Prüfliste zu leeren. Belasse den Trigger als Fokus-Rücksprungziel, statt ihn beim Öffnen des Overlays zu entfernen.

Unterstützende Spezifikation lesen

Bits UI-Designsystem: Visuelle Regeln der Anwendung explizit festlegen und wiederverwenden

Die visuellen Regeln der Anwendung explizit und wiederverwendbar festlegen

CSS bildet die nativen Zustände „aktiviert“ und „Zwischenzustand“ auf dieselbe Aktionsrolle ab, verwendet dafür aber unterschiedliche Symbole. Eine eigene Fokusrolle kennzeichnet die aktuelle Tastaturposition. So kann ein Steuerelement sichtbar ausgewählt bleiben und zugleich anzeigen, wo die nächste Tastaturaktion ausgeführt wird.

Die benannte Abstandsskala umfasst vier, acht, zwölf, sechzehn, vierundzwanzig und zweiunddreißig Pixel. Auf Desktop-Bildschirmen verwenden Bereiche den Wert vierundzwanzig Pixel, auf schmalen Bildschirmen sechzehn Pixel. Die Spezifikationstabelle dokumentiert diese konkreten Werte als ursprüngliche Konfiguration, damit sie sich reproduzieren oder ersetzen lassen und nicht fälschlich als Garantie eines Pakets verstanden werden.

Unterstützende Spezifikation lesen

Bits UI-Designsystem: Eine manuelle Markierung von einem automatisierten Testergebnis unterscheiden

Eine manuelle Markierung von einem automatisierten Testergebnis unterscheiden

Die Prüfliste hält fest, was Leserinnen und Leser selbst markiert haben. Sie untersucht keine andere Seite, führt keine Tastaturtests aus und bestätigt keine Konformität mit Barrierefreiheitsstandards. Sowohl der Einführungstext als auch die Beschreibung der Prüfung machen diesen Umfang deutlich. Das ist wichtig, weil die sechs Prüfungen tatsächliche Aspekte der Barrierefreiheit betreffen.

Die Schaltfläche „Speichern“ ist deaktiviert, bis alle sechs Prüfungen markiert sind. Der gespeicherte Satz hält fest, dass die lesende Person alle sechs Prüfungen markiert hat und das Ergebnis lokal ist. Eine unvollständige Prüfung lässt sich weiterhin öffnen, um fehlende Punkte anzusehen, führt aber nicht zu einer Meldung über eine abgeschlossene Prüfung. So bleiben die Zustandsübergänge des Beispiels aussagekräftig.

Unterstützende Spezifikation lesen

Bits UI-Designsystem: Abschlussmeldungen löschen, sobald sich die zugrunde liegenden Angaben ändern

Abschlussmeldungen löschen, sobald sich die Nachweise ändern

Bei jeder Änderung eines einzelnen oder des übergeordneten Kontrollkästchens wird der gespeicherte Zustand gelöscht. So bleibt eine Abschlussbestätigung nicht erhalten, wenn eine Prüfung wieder abgewählt wird. Die Aktion „Alles löschen“ stellt außerdem den anfangs geöffneten Abschnitt wieder her und schließt den Prüfdialog. Damit kehren alle zugehörigen Zustände in einen bekannten Ausgangszustand zurück.

Der Statusbereich befindet sich außerhalb des Overlays. Daher bleibt die gespeicherte Meldung im Dokument, nachdem der Dialog geschlossen wurde. Sie beschreibt den lokalen Zustand der Seite und lässt nicht vermuten, dass ein Bericht übermittelt wurde. Beim Neuladen wird die Prüfliste verworfen – passend für diese in sich geschlossene Demonstration.

Unterstützende Spezifikation lesen

Bits UI-Designsystem: Komponentenbestandteile mit sichtbaren Beschriftungen verknüpfen

Komponentenbestandteile mit sichtbaren Beschriftungen verknüpfen

Jedes Kontrollkästchen hat eine stabile ID und eine zugehörige sichtbare Beschriftung. Der aktivierte Zustand oder Zwischenzustand wird durch das native Steuerelement dargestellt; Häkchen und Strich sind dekorativ. Verknüpfe sowohl den booleschen Wert „aktiviert“ als auch den abgeleiteten Zwischenzustand mit dem übergeordneten Kontrollkästchen, damit eine teilweise Auswahl nicht als gewöhnlich nicht ausgewählter Eintrag angesagt wird.

Dialog.Title und Dialog.Description stellen über den nativen Aufbau den Namen und die Beschreibung der Prüfung bereit. Das Portal trennt das Overlay vom Layout des Akkordeons, während Dialog.Close die ausdrückliche Schließaktion bleibt. Der Statusbereich außerhalb des Overlays enthält das gespeicherte Ergebnis auch nach dem Schließen des Overlays, sodass es nicht mit dem Dialoginhalt verloren geht.

  • Verknüpfe die sichtbare Beschriftung mit dem zugehörigen Steuerelement.
  • Behalte nach dem Anwenden eigener Stile einen deutlich sichtbaren Fokusrahmen bei.
  • Entferne beim Anpassen des Dialogstils weder Titel- noch Beschreibungselemente.

Unterstützende Spezifikation lesen

Bits UI-Designsystem: Komponentenbeispiele

Vollständige Prüfliste in Svelte 5

Native Bits UI-Zusammensetzung mit $state/$derived-Modellen, gesteuerten Kontrollkästchen und einem Prüfdialog auf Basis eines Portals.

svelte
<script>
import {Accordion,Checkbox,Dialog} from 'bits-ui';
let groups=$state([{id:'keyboard',name:'Keyboard flow',description:'Move through the interface without a pointer.',checks:[{id:'focus',label:'Every action has a visible focus indicator.',done:false},{id:'order',label:'Focus follows the visual reading order.',done:false}]},{id:'forms',name:'Form correction',description:'Make a mistake and recover from it.',checks:[{id:'labels',label:'Each input has a persistent visible label.',done:false},{id:'errors',label:'Errors identify the field and explain the correction.',done:false}]},{id:'feedback',name:'Result feedback',description:'Confirm that the outcome is understandable.',checks:[{id:'status',label:'A status message describes the completed action.',done:false},{id:'color',label:'Meaning remains clear without color alone.',done:false}]}]);
let expanded=$state(['keyboard']),open=$state(false),saved=$state(false);
const complete=$derived(groups.reduce((sum,g)=>sum+g.checks.filter(c=>c.done).length,0));
function change(check,value){check.done=value;saved=false}
function all(value){groups.forEach(g=>g.checks.forEach(c=>c.done=value));saved=false}
function reset(){all(false);expanded=['keyboard'];open=false}
</script>
<main class="check-shell"><header><p class="eyebrow">INTERFACE REVIEW · MANUAL CHECKLIST</p><h1>Check the experience between the screens.</h1><p>Work through six practical checks, then review what you have marked. This is a personal checklist, not an automated accessibility test.</p></header><div class="check-layout"><section class="check-panel"><div class="bulk"><Checkbox.Root id="all-checks" checked={complete===6} indeterminate={complete>0&&complete<6} onCheckedChange={all} class="checkbox"><span aria-hidden="true">{complete===6?'✓':complete>0?'−':''}</span></Checkbox.Root><label for="all-checks">Mark all checks</label><span class="count">{complete}/6</span></div><Accordion.Root type="multiple" bind:value={expanded} class="accordion">{#each groups as group}<Accordion.Item value={group.id} class="accordion-item"><Accordion.Header class="accordion-heading"><Accordion.Trigger class="accordion-trigger"><span>{group.name}<small>{group.checks.filter(c=>c.done).length} of 2 checked</small></span><span class="plus" aria-hidden="true">+</span></Accordion.Trigger></Accordion.Header><Accordion.Content class="accordion-content"><p class="group-description">{group.description}</p>{#each group.checks as check}<div class="check-row"><Checkbox.Root id={check.id} checked={check.done} onCheckedChange={value=>change(check,value)} class="checkbox"><span aria-hidden="true">{check.done?'✓':''}</span></Checkbox.Root><label for={check.id}>{check.label}</label></div>{/each}</Accordion.Content></Accordion.Item>{/each}</Accordion.Root><Dialog.Root bind:open><Dialog.Trigger class="primary">Review checklist</Dialog.Trigger><Dialog.Portal><Dialog.Overlay class="overlay"/><Dialog.Content class="dialog"><Dialog.Title class="dialog-title">Your review snapshot</Dialog.Title><Dialog.Description class="dialog-description">{complete} of 6 checks are marked. Saving records your own review state; it does not certify the interface.</Dialog.Description><ul class="review-summary">{#each groups as group}<li><strong>{group.name}</strong><span>{group.checks.filter(c=>c.done).length} / 2</span></li>{/each}</ul>{#if complete<6}<p class="remaining">Return to the checklist to finish the remaining {6-complete} checks.</p>{/if}<div class="dialog-actions"><Dialog.Close class="secondary">Back to checks</Dialog.Close><button class="primary" disabled={complete<6} onclick={()=>{saved=true;open=false}}>Save completed review</button></div></Dialog.Content></Dialog.Portal></Dialog.Root><button class="reset" onclick={reset}>Clear all checks</button><p class="result" role="status">{saved?'Completed review saved locally. All six checks were marked by you.':'Progress stays in this preview until you reload.'}</p></section><aside class="check-notes"><div class="focus-art" aria-hidden="true"><span></span><i></i><b></b></div><p class="eyebrow">WHAT TO LOOK FOR</p><h2>Make the next action clear.</h2><p>A good check leaves evidence: where focus moved, what an error said, or how a result was announced.</p><dl><div><dt>Keyboard</dt><dd>Tab, Shift+Tab, Enter and Escape should support the relevant task.</dd></div><div><dt>Correction</dt><dd>Keep the user’s input and point to a specific next step.</dd></div><div><dt>Feedback</dt><dd>Describe the outcome in words as well as visual styling.</dd></div></dl></aside></div></main>

Code-Referenz

  • Das übergeordnete Steuerelement leitet sowohl den aktivierten Zustand als auch den Zwischenzustand aus den sechs einzelnen Prüfungen ab.
  • Das Speichern setzt den Abschluss aller Prüfungen voraus, nicht das Öffnen des Dialogs.
  • Dieses manuelle Arbeitsblatt führt kein Barrierefreiheitsaudit aus.

Vollständige ursprüngliche visuelle Konfiguration

Benannte semantische Farben, Abstandsskala, native data-state-Selektoren und responsives Overlay-Styling.

css
:root{--app-canvas:#f4f3f8;--app-surface:#ffffff;--app-ink:#2d2938;--app-muted:#746d80;--app-line:#e3dfeb;--app-action:#604c88;--app-on-action:#fff;--app-focus:#9a80ce;--app-soft:#eee8f7;--app-radius:12px;--app-space-1:4px;--app-space-2:8px;--app-space-3:12px;--app-space-4:16px;--app-space-6:24px;--app-space-8:32px}html,body,#app{height:auto;min-height:0;margin:0}*{box-sizing:border-box}body{font-family:system-ui,sans-serif;background:var(--app-canvas);color:var(--app-ink)}button{font:inherit;cursor:pointer}button:disabled{opacity:.45;cursor:default}button:focus-visible{outline:3px solid var(--app-focus);outline-offset:3px}.check-shell{max-width:1080px;margin:auto;padding:var(--app-space-8)}.eyebrow{font-size:10px;letter-spacing:.14em;font-weight:700;color:var(--app-muted)}h1{font-size:34px;line-height:1.15;max-width:710px;margin:12px 0}header>p:last-child{font-size:14px;line-height:1.7;max-width:640px;color:var(--app-muted)}.check-layout{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:var(--app-space-6);margin-top:28px}.check-panel{background:var(--app-surface);border:1px solid var(--app-line);border-radius:16px;padding:var(--app-space-6);min-width:0}.bulk{display:flex;align-items:center;gap:12px;font-size:14px;font-weight:600;padding-bottom:24px}.count{margin-left:auto;color:var(--app-muted);font-size:12px}.checkbox{width:22px;height:22px;flex-shrink:0;border:1px solid #aaa1ba;background:white;border-radius:5px;display:inline-flex;align-items:center;justify-content:center;padding:0;line-height:1}.checkbox[data-state=checked],.checkbox[data-state=indeterminate]{background:var(--app-action);border-color:var(--app-action);color:var(--app-on-action)}.accordion{margin-bottom:24px}.accordion-item{border-top:1px solid var(--app-line)}.accordion-item:last-child{border-bottom:1px solid var(--app-line)}.accordion-heading{margin:0;font-size:16px}.accordion-trigger{width:100%;border:0;background:transparent;display:flex;align-items:center;justify-content:space-between;text-align:left;padding:20px 0;color:var(--app-ink);font-weight:600}.accordion-trigger small{display:block;font-weight:400;font-size:11px;color:var(--app-muted);margin-top:6px}.plus{font-size:23px;font-weight:400;transition:transform .15s}.accordion-trigger[data-state=open] .plus{transform:rotate(45deg)}.accordion-content{padding:0 0 20px}.group-description{font-size:12px;line-height:1.6;color:var(--app-muted);margin:0 0 16px}.check-row{display:flex;align-items:flex-start;gap:12px;margin-top:14px}.check-row label{font-size:13px;line-height:1.6;cursor:pointer}.primary,.secondary{border:1px solid transparent;border-radius:8px;padding:12px 16px;font-size:13px;font-weight:600}.primary{background:var(--app-action);color:var(--app-on-action)}.secondary{background:white;color:var(--app-ink);border-color:var(--app-line)}.reset{border:0;background:transparent;color:var(--app-muted);font-size:12px;padding:12px}.result{font-size:12px;line-height:1.6;color:var(--app-muted);margin:18px 0 0}.check-notes{min-width:0;padding:0 4px}.check-notes h2{font:400 29px/1.2 Georgia,serif}.check-notes>p:not(.eyebrow){font-size:13px;line-height:1.7;color:var(--app-muted)}.check-notes dl>div{padding:14px 0;border-top:1px solid var(--app-line)}.check-notes dt{font-size:13px;font-weight:600}.check-notes dd{font-size:12px;line-height:1.7;color:var(--app-muted);margin:5px 0 0}.focus-art{height:165px;background:#e6e0ef;border-radius:12px;position:relative;overflow:hidden;margin-bottom:24px}.focus-art span{position:absolute;width:140px;height:85px;left:35px;top:44px;background:white;border-radius:8px;transform:rotate(-9deg);box-shadow:0 0 0 6px #b3a3cd}.focus-art i{position:absolute;width:75px;height:13px;background:#b7adc6;left:60px;top:61px;transform:rotate(-9deg)}.focus-art b{position:absolute;width:72px;height:28px;background:#695587;left:87px;top:91px;border-radius:5px;transform:rotate(-9deg)}.overlay{position:fixed;inset:0;background:#21193180;z-index:20}.dialog{position:fixed;z-index:21;left:50%;top:50%;transform:translate(-50%,-50%);width:min(440px,calc(100% - 28px));max-height:calc(100vh - 28px);overflow:auto;background:white;padding:24px;border-radius:14px;box-shadow:0 20px 80px #23193640}.dialog-title{font-size:23px;margin:0 0 12px}.dialog-description,.remaining{font-size:13px;line-height:1.7;color:var(--app-muted)}.review-summary{padding:0;list-style:none}.review-summary li{display:flex;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid var(--app-line);font-size:13px}.dialog-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:22px}@media(max-width:740px){.check-layout{grid-template-columns:minmax(0,1fr)}.check-shell{padding:20px}h1{font-size:29px}}@media(max-width:360px){.check-shell{padding:14px}.check-panel,.dialog{padding:16px}.check-panel>.primary,.dialog-actions>*{width:100%}}@media(prefers-reduced-motion:reduce){.plus{transition:none}}

Code-Referenz

  • Dies sind selbst definierte Variablen --app-*, keine offizielle Bits-Farbpalette.
  • Stile für Fokus und reduzierte Bewegung sind enthalten.
  • Nur für das Overlay wird eine maximale Höhe relativ zum Ansichtsfenster festgelegt.
04

Bits UI-Designsystem: Agent einrichten

Ausgangspunkt für die Implementierung

Verifiziert mit Bits UI 2.19.5 und Svelte 5.57.1. Das vollständige ursprüngliche Stylesheet ist erforderlich; Bits UI liefert weder Standardfarben noch ein Seitenlayout.

javascript
// npm create vite@latest bits-review -- --template svelte
// cd bits-review && npm install
// npm install [email protected] [email protected]
// Save the complete examples as src/App.svelte and src/style.css.
// src/main.js:
import {mount} from 'svelte';
import App from './App.svelte';
import './style.css';
mount(App, {target:document.querySelector('#app')});
// index.html: <div id="app"></div><script type="module" src="/src/main.js"></script>
// npm run dev

Ein Prompt für dein Projekt

Agenten-Prompt
Verwende Bits UI 2.19.5 und Svelte 5, um die bereitgestellte manuelle Prüfung der Benutzeroberfläche umzusetzen. Behalte sechs Prüfpunkte in drei Accordion-Abschnitten bei, leite den Sammelstatus „aktiviert“/„teilweise aktiviert“ aus den einzelnen Antworten ab und bewahre Antworten beim Zuklappen von Abschnitten. Setze für die Überprüfung alle Dialog-Bestandteile zusammen. Eine unvollständige Prüfung soll möglich sein, während „Speichern“ deaktiviert bleibt, bis alle sechs Punkte markiert sind. Jede Antwortänderung macht gespeichertes Feedback ungültig; „Alle löschen“ setzt die anfängliche Abschnittsaufklappung wieder her und schließt die Überprüfung. Binde das vollständige CSS ein und beschreibe die Ergebnisse als lokal markierte Prüfungen durch die lesende Person, nicht als automatisierte Barrierefreiheitszertifizierung.
05

Quellen und Umfang des Bits UI-Designsystems

Bits UI 2.19.5 mit Svelte 5.57.1. Ursprüngliche Anwendungstokens und Illustrationen. Dies ist eine manuelle Checkliste mit lokalem Status, kein automatisiertes Barrierefreiheits-Audit und keine Zertifizierung.