Headless-Komponentensystem · Neue Ressource

Oruga UI Designsystem.

Ein nativer Oruga-Katalogeditor mit durchsuchbaren, entfernbaren Themen-Tags, festgelegten Vokabulargrenzen, den tatsächlichen Tokens eines optionalen Themes und einer Live-Karte, die die ausgewählten Bezeichnungen widerspiegelt.

OpenDesign-Leitfaden9 Kapitel25 ReferenzeinträgeOriginaler Anwendungsleitfaden
01

Vorschau der Oruga UI-Designsystemoberfläche

Durchsuchen Sie ein kontrolliertes Vokabular, fügen Sie bis zu drei Themen hinzu, entfernen Sie ein Tag und speichern Sie eine lokale Notizbeschreibung.

Katalog für ForschungsnotizenVollständiges Beispiel öffnen
@oruga-ui/oruga-next 0.14.4 mit @oruga-ui/theme-oruga 0.10.0 und lokalen MDI-Icons. · Implementierungsreferenz
02

Gestaltungsreferenz für das Oruga UI-Designsystem

Oruga Vue 3-Paket 0.14.4 mit @oruga-ui/theme-oruga 0.10.0. Die folgenden Werte gehören zu diesem optionalen Standard-Theme, nicht zu einem unveränderlichen Headless-Kern. MDI-Icons 7.4.47 werden lokal bereitgestellt. Die umgebende Kataloggestaltung und die Ordnergrafik sind eigens erstellt.

Semantische Farben des optionalen Oruga-Themes

Quelle
Name / RegelWert / KonfigurationVerwendung
--oruga-primary#445e00 Ausgewählte Tags und primäre Aktion.
--oruga-primary-invert#fffText auf primären Tags.
--oruga-success#006724 Erfolgsvariante.
--oruga-info#005c98 Informationsvariante.
--oruga-warning#f4c300 Warnvariante.
--oruga-danger#b60000 Fehlervariante für Felder.
--oruga-control-border-color#dbdbdb Standardbegrenzung für Felder.

Typografie, Abstände und Geometrie des optionalen Themes

Quelle
Name / RegelWert / KonfigurationVerwendung
--oruga-font-size1remStandardtextgröße.
--oruga-line-height1.5Standard-Zeilenhöhenverhältnis.
--oruga-border-radius4pxStandard-Eckenradius für Steuerelemente.
--oruga-control-spacer.5emGemeinsamer Abstand für Steuerelemente.
--oruga-control-height2.25emHöhe des Steuerelements relativ zur Schriftgröße.
--oruga-control-padding-verticalcalc(.375em - 1px)Vertikaler Innenabstand unter Berücksichtigung des Rahmens.
--oruga-control-padding-horizontalcalc(.8em - 1px)Horizontaler Innenabstand unter Berücksichtigung des Rahmens.
--oruga-control-disabled-opacity.5Visueller Zustand bei Deaktivierung.
--oruga-animation-speed-fast.15sKurze Übergangsdauer.
--oruga-animation-speed.3sStandard-Übergangsdauer.

Explizite Skalierungen der ursprünglichen Anwendung

Quelle
Name / RegelWert / KonfigurationVerwendung
Font stacksystem-ui, sans-serifText der äußeren Anwendung; das optionale Theme verwendet ebenfalls einen plattformübergreifenden Schriftstapel.
Page title34px / 1.15; 29px narrowUrsprüngliche Hierarchie.
Catalog card titleGeorgia, serif; 29px / 1.25Ursprünglicher redaktioneller Kontrast, kein Oruga-Standard.
Supporting type10 / 11 / 12 / 13 / 14 / 15pxExplizite ursprüngliche Bildunterschriften, Definitionen und Fließtexte.
Spacing4 / 5 / 7 / 12 / 13 / 14 / 16 / 20 / 22 / 24 / 28 / 32pxTatsächliche Layoutwerte; die Headless-Bibliothek stellt keine Raster-Skalierung bereit.
LayoutFlexible editor + 330px catalog card; stack at 760pxUrsprüngliches Raster.
Topic constraints1–3 unique existing labelsallow-new=false, allow-duplicates=false, maxitems=3.
Title constraint5–80 characters; minimum evaluated after trimAnwendungsvalidierung plus native Längenbegrenzung.
03

Oruga UI Designsystem – vollständiger Leitfaden

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

DESIGN-oruga-ui.md

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

Leitfaden herunterladen

Oruga UI-Designsystem: Komponentenverhalten von Oruga vom optionalen Theme trennen

Komponentenverhalten von Oruga vom optionalen Theme trennen

Oruga stellt Vue-Komponenten bereit, ohne ein bestimmtes CSS-Framework vorauszusetzen. Dieses Beispiel kombiniert das Vue 3-Paket mit dem separaten Oruga-Standard-Theme. Die ausgewählten grünen Tags und umrandeten Felder stammen aus diesem Theme; Suche, Auswahl und Entfernen gehören hingegen zum nativen Komponentenverhalten.

Aus diesem OpenDesign-Leitfaden

Diese Abgrenzung ist bei der Bewertung der Bibliothek hilfreich. Ein Team kann die Komponenten-API beibehalten und die Klassenkonfiguration ersetzen oder ein anderes unterstütztes Theme wählen. In der Referenztabelle werden daher das Theme-Paket und seine Version genannt, statt die grüne Primärfarbe als allgemeingültige Vorgabe für jede Oruga-Anwendung darzustellen.

Unterstützende Spezifikation lesen

Oruga UI-Designsystem: Die tatsächlichen Variablen des Standard-Themes verwenden

Die tatsächlichen Variablen des Standard-Themes verwenden

Das installierte optionale Theme definiert --oruga-primary als #445e00 und --oruga-primary-invert als white. Die Gefahrenfarbe ist #b60000, Feldrahmen verwenden #dbdbdb. Die Komponenten-Prop variant wählt die passende semantische Farbgruppe aus. Dadurch ist keine separate CSS-Regel für jedes Feld oder Tag erforderlich.

Dasselbe Theme definiert einen Standard-Eckenradius von vier Pixeln, eine Steuerelementhöhe von 2.25em sowie Innenabstandsformeln, die den ein Pixel breiten Rahmen berücksichtigen. Da diese Werte relativ zur Schriftgröße des Steuerelements sind, wirkt sich eine Änderung der Schriftgröße auf die Geometrie aus. Der halbe em-Abstand des Themes beschreibt eine Beziehung zwischen Komponenten und ist kein Beleg für ein vollständiges Layout-Abstandsraster.

Unterstützende Spezifikation lesen

Oruga UI-Designsystem: Das Layout bereitstellen, das Oruga bewusst nicht vorgibt

Das Layout bereitstellen, das Oruga bewusst nicht vorgibt

Der Katalog verwendet eine flexible Editor-Spalte und eine 330px breite Kartenspalte; unterhalb von 760px werden sie untereinander angeordnet. Für den Seitentitel kommt eine serifenlose Systemschrift zum Einsatz, während der Kartentitel in Georgia gesetzt ist, um an einen redaktionellen Eintrag zu erinnern. Beides sind eigenständige Gestaltungsentscheidungen; externe Schriftdateien sind dafür nicht erforderlich.

Oruga schreibt weder ein Raster noch ein Utility-Framework vor. Das vollständige Stylesheet macht daher Panel-Innenabstände, Einzüge auf schmalen Bildschirmen und Umbruchregeln sichtbar. Der Tag-Zähler hält Zähler und Nenner zusammen. Der Kartentitel kann umbrechen, wenn Notiznamen lang sind, statt die eingebettete Seite seitlich zu verschieben.

Unterstützende Spezifikation lesen

Oruga UI-Designsystem: Ausgewählte Werte von der Suchanfrage trennen

Ausgewählte Werte von der Suchanfrage trennen

OTaginput bindet das Array der ausgewählten Themen über v-model. Der interne Autocomplete-Suchtext filtert die möglichen Bezeichnungen, ohne dieses Array zu ersetzen. Das Vokabular umfasst sechs eigens erstellte Themen mit konkreten Definitionen. Die Live-Karte zeigt Definitionen nur für ausgewählte Themen an.

Der standardmäßige Suchvergleich ignoriert Groß- und Kleinschreibung. Beim lokalen Test wurde Color eingegeben; anschließend wurde gewartet, bis die Filterung abgeschlossen war, bevor die Option ausgewählt wurde. Eine sofortige Prüfung während der Entprellung der Eingabe würde fälschlich den Eindruck erwecken, die Filterung sei fehlgeschlagen. Nach der Auswahl wird die Suchanfrage geleert, während bereits ausgewählte Tags erhalten bleiben.

  1. Nach Color suchen und die passende Option auswählen.
  2. Forms hinzufügen, sodass zusammen mit Navigation drei Themen ausgewählt sind.
  3. Ein Tag entfernen, die Änderung auf der Karte bestätigen und vor dem Speichern einen Ersatz auswählen.

Unterstützende Spezifikation lesen

Oruga UI-Designsystem: Vokabular, Duplikate und Anzahl unabhängig voneinander steuern

Vokabular, Duplikate und Anzahl unabhängig voneinander steuern

allow-new=false verhindert, dass beliebige eingegebene Formulierungen zu Bezeichnungen werden. allow-duplicates=false verhindert, dass dieselbe vorhandene Bezeichnung mehrfach hinzugefügt wird. maxitems=3 begrenzt die Gesamtzahl der ausgewählten Einträge und zeigt den Zähler an. Jede Einstellung schützt einen anderen Aspekt eines kontrollierten Vokabulars.

Die Anwendung prüft weiterhin, ob mindestens ein Thema ausgewählt ist, wenn Speichern versucht wird. Die Begrenzung der maximalen Auswahl bedeutet nicht, dass eine Mindestauswahl erforderlich ist. Außerdem prüft sie, ob der gekürzte Titel mindestens fünf aussagekräftige Zeichen enthält, während das maxlength-Attribut des nativen Eingabefelds die Länge auf höchstens achtzig Zeichen begrenzt.

Unterstützende Spezifikation lesen

Oruga UI-Designsystem: OField für Beschriftungen und spezifische Validierungsmeldungen verwenden

OField für Beschriftungen und spezifische Validierungsmeldungen verwenden

OField stellt die sichtbaren Beschriftungen „Notiztitel“ und „Themen“ sowie die zugehörigen Meldungen bereit. Nach einem ungültigen Speicherversuch erhält das betreffende Feld eine Gefahrenvariante und eine konkrete Korrekturmeldung. Der Hinweis zu den Themen erläutert den zulässigen Bereich und die Vokabularbeschränkung, bevor ein Fehler auftritt.

Das Dropdown des nativen Tag-Eingabefelds folgt dem Combobox-/Listbox-Muster. In dieser Version gehört die Combobox-Rolle zu einem Wrapper, in dem das bearbeitbare Textfeld verschachtelt ist. Die Qualitätssicherung füllt daher das tatsächliche Eingabefeld „Themen durchsuchen“ aus, statt anzunehmen, dass das Element mit der Combobox-Rolle selbst ein Eingabefeld ist.

Unterstützende Spezifikation lesen

Oruga UI-Designsystem: Auch ein Standard-Icon-Paket benötigt seine Schriftdatei

Auch ein Standard-Icon-Paket benötigt seine Schriftdatei

Das Steuerelement zum Entfernen eines Tags verwendet das standardmäßige MDI-Icon-Paket von Oruga. Durch das Laden des Komponententhemes wird diese Schrift nicht automatisch geladen; daher gehört @mdi/font zur vollständigen Einrichtung. Die eigenständige Vorschau verwendet ein lokales WOFF2-Asset und die erforderlichen Icon-Regeln, sodass keine externe Schriftabhängigkeit entsteht.

Das Entfernen erfolgt weiterhin über eine echte Schaltfläche mit der barrierefreien Beschriftung „Thema entfernen“. Die dekorative Ordnerillustration hat nichts mit diesen Steuerelement-Icons zu tun und ist für assistive Technologien ausgeblendet. So wird verhindert, dass ein Schmuckelement für ein interaktives Steuerelement gehalten wird.

Unterstützende Spezifikation lesen

Oruga UI-Designsystem: Einen gespeicherten Status verwerfen, wenn sich seine Eingaben ändern

Gespeicherten Snapshot ungültig machen, wenn sich Eingaben ändern

Die Aktion „Speichern“ hält einen Satz fest, der den gekürzten Titel und die Anzahl der ausgewählten Themen nennt. Ein Watcher beobachtet sowohl den Titel als auch das Themen-Array tiefgreifend; durch das Entfernen eines Eintrags wird die Bestätigung daher ebenso gelöscht wie durch eine Titeländerung. „Speichern“ ist nur deaktiviert, solange der aktuelle Stand gespeichert ist.

„Notiz löschen“ setzt den Titel, alle ausgewählten Themen, die Validierungsversuche und den Speicherstatus zurück. Auf der Karte steht anschließend „Unbenannte Forschungsnotiz“ und „Keine Themen ausgewählt“. Der gesamte Ablauf vom leeren Zustand über die Bearbeitung bis zum Speichern ist sichtbar, ohne dass sich hinter der Schaltfläche ein Backend, ein Upload oder eine Veröffentlichungsaktion verbirgt.

  • Das Modell mit dem ausgewählten Array beibehalten, wenn sich die Suchanfrage ändert.
  • Gespeicherte Rückmeldung bei verschachtelten Änderungen am Array löschen.
  • Das Ergebnis als lokalen Status beschreiben, nicht als Veröffentlichung.

Unterstützende Spezifikation lesen

Oruga UI-Designsystem: Komponenten gemäß der aktuellen Oruga-Registrierung explizit importieren

Komponenten mit der aktuellen Oruga-Registrierung explizit importieren

Die verifizierte Einrichtung mit Version 0.14.4 erstellt eine Oruga-Instanz und bindet sie in der Vue-App ein. App.vue importiert OField, OInput, OTaginput, OTag und OButton explizit. Dies entspricht dem aktuellen Registrierungsmodell. Wer sich auf ältere Beispiele verlässt, die eine globale Registrierung aller Komponenten voraussetzen, riskiert eine unvollständige Anwendung.

Die Theme-README erklärt, dass dieses Standardtheme die vorhandenen Klassennamen von Oruga verwendet und dessen Stylesheet benötigt, jedoch kein zusätzliches Theme-Konfigurationsobjekt. Der Einstiegspunkt importiert dieses Stylesheet, das MDI-Asset und das ursprüngliche Layout in der richtigen Reihenfolge. Die vollständigen Quellcodebeispiele oben und die Vite-Root-Datei weiter unten enthalten alle erforderlichen Bestandteile.

Unterstützende Spezifikation lesen

Oruga UI-Designsystem: Komponentenbeispiele

Vollständige SFC für den Themenkatalog

OTaginput, OField, OInput, OTag und OButton verbinden ein eingeschränktes Vokabular mit einer dynamischen Katalogkarte.

vue
<script setup>
import {ref,computed,watch} from 'vue';
import {OField,OInput,OTaginput,OButton,OTag} from '@oruga-ui/oruga-next';
const title=ref('Finding a calmer navigation'),topics=ref(['Navigation']),attempted=ref(false),saved=ref('');
const definitions={'Navigation':'Menus, wayfinding and the path through a product.','Typography':'Type hierarchy, reading rhythm and legibility.','Color':'Semantic roles, contrast and theme behavior.','Forms':'Input labels, validation and correction.','Motion':'Transitions, reduced motion and continuity.','Accessibility':'Keyboard flow, semantics and assistive technology.'};
const options=Object.keys(definitions),valid=computed(()=>title.value.trim().length>=5&&topics.value.length>=1&&topics.value.length<=3);
watch([title,topics],()=>saved.value='',{deep:true});
function save(){attempted.value=true;if(valid.value)saved.value=`Saved locally: “${title.value.trim()}” with ${topics.value.length} ${topics.value.length===1?'topic':'topics'}.`}
function reset(){title.value='';topics.value=[];attempted.value=false;saved.value=''}
</script>
<template><main class="catalog-shell"><header><p class="eyebrow">RESEARCH CATALOG · LABEL A NOTE</p><h1>Give the next reader a useful starting point.</h1><p>Name a research note and choose up to three topics from a controlled vocabulary.</p></header><div class="catalog-layout"><section class="editor"><h2>Note details</h2><OField label="Note title" :variant="attempted&&title.trim().length<5?'danger':undefined" :message="attempted&&title.trim().length<5?'Use at least five meaningful characters.':undefined"><OInput v-model="title" maxlength="80" expanded placeholder="What did you learn?"/></OField><OField label="Topics" :variant="attempted&&!topics.length?'danger':undefined" :message="attempted&&!topics.length?'Choose at least one topic.':'Choose 1–3 existing topics; duplicate and new labels are not added.'"><OTaginput v-model="topics" :options="options" :allow-new="false" :allow-duplicates="false" :maxitems="3" open-on-focus :keep-open="false" expanded variant="primary" placeholder="Search topics" aria-close-label="Remove topic"><template #empty>No matching topic. Try Color, Forms or Motion.</template></OTaginput></OField><div class="actions"><OButton variant="primary" @click="save" :disabled="!!saved">Save local note</OButton><OButton @click="reset">Clear note</OButton></div><p role="status" class="result">{{saved||'The preview keeps only local page state.'}}</p><h3>Vocabulary guide</h3><dl class="vocabulary"><div v-for="(meaning,name) in definitions" :key="name"><dt>{{name}}</dt><dd>{{meaning}}</dd></div></dl></section><aside class="note-card"><div class="folder-art" aria-hidden="true"><i></i><b></b><span></span></div><p class="eyebrow">CATALOG CARD PREVIEW</p><h2>{{title.trim()||'Untitled research note'}}</h2><div class="topic-tags"><OTag v-for="topic in topics" :key="topic" variant="primary">{{topic}}</OTag><span v-if="!topics.length" class="empty-topics">No topics selected</span></div><p class="card-label">This note will appear under</p><ul><li v-for="topic in topics" :key="topic"><strong>{{topic}}</strong><span>{{definitions[topic]}}</span></li></ul><p class="card-foot">Original sample note · no upload or publishing</p></aside></div></main></template>

Code-Referenz

  • Das Modell mit dem ausgewählten Array unterscheidet sich vom inneren Suchtext.
  • Die Auswahl ist auf vorhandene, nicht doppelte Bezeichnungen beschränkt.
  • Ein tiefgreifender Watcher löscht die Speicherbestätigung, wenn ein Thema entfernt wird.

Vollständiges ursprüngliches Kataloglayout

Responsives Raster für Editor und Karte, kontrollierter Zeilenumbruch und eine eigens gestaltete CSS-Ordnerillustration.

css
html,body,#app{height:auto;min-height:0;margin:0}*{box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#f4f4ed;color:#34392b}.catalog-shell{max-width:1100px;margin:auto;padding:32px}.eyebrow{font-size:10px;letter-spacing:.14em;font-weight:700;color:#6e775f}h1{font-size:34px;line-height:1.15;max-width:700px;margin:12px 0}header>p:last-child{font-size:15px;line-height:1.6;color:#727965;max-width:630px}.catalog-layout{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:24px;margin-top:28px}.editor,.note-card{background:white;border:1px solid #dfe3d4;border-radius:14px;padding:24px;min-width:0}.editor>h2{font-size:20px;margin:0 0 24px}.editor .o-field{margin-bottom:22px}.editor .o-field__message{font-size:12px;line-height:1.6}.actions{display:flex;gap:12px;flex-wrap:wrap}.result{font-size:12px;line-height:1.6;color:#596d2e;margin:16px 0 28px}.editor h3{font-size:14px}.vocabulary{margin:0}.vocabulary>div{padding:12px 0;border-bottom:1px solid #eaede3}.vocabulary dt{font-size:13px;font-weight:650}.vocabulary dd{font-size:12px;line-height:1.6;margin:4px 0 0;color:#707763}.note-card{align-self:start;background:#fcfcf5}.note-card h2{font-family:Georgia,serif;font-size:29px;line-height:1.25;font-weight:400;overflow-wrap:anywhere}.folder-art{height:145px;background:#e3e8cf;border-radius:8px;position:relative;overflow:hidden;margin-bottom:24px}.folder-art i{position:absolute;left:15%;top:40px;width:70%;height:100px;border-radius:7px;background:#7e8e52;transform:rotate(-8deg)}.folder-art b{position:absolute;left:21%;top:24px;width:60%;height:115px;background:#fffef5;transform:rotate(5deg);border-radius:4px}.folder-art span{position:absolute;left:16%;top:71px;width:70%;height:80px;background:#a6b57a;border-radius:7px}.topic-tags{display:flex;gap:7px;flex-wrap:wrap}.card-label{font-size:11px;color:#737b65;margin-top:24px}.note-card ul{list-style:none;padding:0}.note-card li{border-top:1px solid #e0e4d6;padding:13px 0}.note-card li strong{font-size:13px;display:block}.note-card li span{font-size:12px;color:#6c765b;line-height:1.6;display:block;margin-top:5px}.card-foot{font-size:10px;line-height:1.6;color:#7c846e;margin-top:20px}.empty-topics{font-size:12px;color:#7c846e}.o-taginput{max-width:100%}.o-taginput__container{min-width:0}.o-taginput .o-input{min-width:0}@media(max-width:760px){.catalog-layout{grid-template-columns:minmax(0,1fr)}.catalog-shell{padding:20px}h1{font-size:29px}}@media(max-width:360px){.catalog-shell{padding:14px}.editor,.note-card{padding:16px}.actions>*{width:100%}}
.o-taginput__counter{white-space:nowrap;flex-shrink:0}

Code-Referenz

  • Oruga stellt kein verbindliches Rastersystem bereit; dieses Layout ist explizit in der Anwendung definiert CSS.
  • Der Zählertext bleibt bei schmalen Ansichten einzeilig.
04

Oruga UI-Designsystem: Einrichtung des AI-Agenten

Ausgangspunkt für die Implementierung

Verifizierte Versionen: Oruga 0.14.4, optionales Standardtheme 0.10.0 und MDI 7.4.47. Die Komponenten werden explizit importiert; für das Standardtheme ist keine zusätzliche JavaScript-Theme-Konfiguration erforderlich.

javascript
// npm create vite@latest oruga-catalog -- --template vue
// cd oruga-catalog && npm install
// npm install @oruga-ui/[email protected] @oruga-ui/[email protected] @mdi/[email protected]
// Save the complete examples as src/App.vue and src/style.css.
// src/main.js:
import {createApp} from 'vue';
import {createOruga} from '@oruga-ui/oruga-next';
import '@oruga-ui/theme-oruga/style.css';
import '@mdi/font/css/materialdesignicons.css';
import './style.css';
import App from './App.vue';
createApp(App).use(createOruga()).mount('#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
Beginne mit dem Forschungnotiz-Katalog auf Oruga 0.14.4 und seinem Theme 0.10.0. Behalte die gesteuerte Auswahl von OTaginput aus dem Sechs-Themen-Vokabular, die Suche ohne Beachtung der Groß- und Kleinschreibung, deaktivierte neue und doppelte Tags sowie die Höchstzahl von drei Tags bei. Verknüpfe die dynamischen Themendefinitionen und die Titelvalidierung weiterhin mit dem gespeicherten Stand und lösche die Speicherbestätigung nach Änderungen. Beziehe createOruga, das Theme CSS und die Einrichtung des lokalen MDI-Assets mit ein. Setze den Entwurf auf einen leeren Zustand zurück; erfinde weder Produktvergleichsdaten noch eine Aktualisierung eines externen Katalogs.
05

Oruga UI-Designsystem: Quellen und Umfang

Oruga 0.14.4 mit optionalem Standardtheme 0.10.0. Eigenes Vokabular und eigene Katalogillustration. Beim Speichern werden nur lokale Seitenzustände geändert; es gibt keinen Upload, keine Veröffentlichung und keine Speicherung über das Neuladen hinaus.