Tailwind-Komponentensystem · Neue Ressource

Preline UI-Designsystem.

Ein nativer Preline-Sitzungsplaner mit verknüpften Tabs, einem eingeschränkten Input-Number-Plugin, installierten Theme-Aliasen, echten Tailwind-Skalen und einer lokalen Materialkostenschätzung, die sich mit der ausgewählten Sitzung aktualisiert.

OpenDesign-Leitfaden9 Kapitel31 ReferenzeinträgeOriginaler Anwendungsleitfaden
01

Preline UI Vorschau der Designsystem-Oberfläche

Vergleichen Sie drei eigens entwickelte Kreativsitzungen, ändern Sie die Gruppengröße und speichern Sie eine ausdrücklich lokale Materialkostenschätzung.

Planer für den Studio-SamstagVollständiges Beispiel öffnen
Preline 4.2.0 HSTabs und HSInputNumber mit Tailwind CSS 4.3.3 und dem mitgelieferten Standard-Theme. · Implementierungsreferenz
02

Preline UI Designsystem-Referenz

Preline npm 4.2.0 mit Tailwind CSS 4.3.3; Standard-Theme aus dem installierten Paket. Auf der Marketing-/Dokumentationswebsite kann ein Banner für eine neuere Version erscheinen; das ausführbare Beispiel ist daher ausdrücklich auf eine Version festgelegt. Theme-Aliase bleiben Aliase; es werden keine Hexadezimalwerte geschätzt.

Standardmäßiges helles semantisches Theme

Quelle
Name / RegelWert / KonfigurationVerwendung
--backgroundvar(--color-white)Standardrolle für den Hintergrund.
--foregroundvar(--color-gray-800)Rolle für den Haupttext.
--bordervar(--color-gray-200)Gemeinsame Rahmenrolle.
--primaryvar(--color-primary-600)Aktiver Tab und Hauptaktion.
--primary-foregroundvar(--color-white)Text auf der primären Schaltfläche.
--primary-hovervar(--color-primary-700)Hover-Zustand.
--primary-focusvar(--color-primary-700)Fokusstatus.
--primary-activevar(--color-primary-700)Aktiver Status.
--layervar(--color-white)Oberfläche des Mengensteuerelements.
--layer-linevar(--color-gray-200)Begrenzung des Mengensteuerelements.
--layer-hovervar(--color-gray-50)Hover-Oberfläche.
--cardvar(--color-white)Karten für Sitzungen und Gruppen.
--card-linevar(--color-gray-200)Kartengrenze.
--muted-foreground-1var(--color-gray-500)Unterstützender Text.

Tatsächlich verwendete Tailwind-Skalen

Quelle
Name / RegelWert / KonfigurationVerwendung
p-2 / gap-20.5remAbstände zwischen Mengenfeld und Tabs.
px-3 / gap-30.75remTab-Innenabstand und Abstände im Zahlensteuerelement.
p-51.25remKarten und standardmäßiger Seiteninnenabstand.
sm:p-82rem from 640pxSeiteninnenabstand am kleinen Breakpoint.
mt-71.75remAbstand vor dem Planer.
text-xs0.75rem / 1remErgänzende Beschriftungen.
text-sm0.875rem / 1.25remSteuerelemente und erläuternder Text.
text-lg1.125rem / 1.75remGruppenüberschrift.
text-2xl1.5rem / 2remSitzungstitel.
text-3xl1.875rem / 2.25remSeitenüberschrift und Gesamtsumme.
rounded-lg / rounded-xl0.5rem / 0.75remSteuerelemente / Karten; standardmäßige Tailwind-Radiuswerte.

Vorgaben für die eigene Anwendung und Plugin-Beschränkungen

Quelle
Name / RegelWert / KonfigurationVerwendung
Group sizemin 1 / max 6 / step 1Die Datenoptionen von HSInputNumber und die Eingabebeschränkungen von HTML stimmen überein.
Print studio allowance$12 per participantFiktive Materialkostenschätzung.
Clay workshop allowance$18 per participantFiktive Materialkostenschätzung.
Drawing walk allowance$5 per participantFiktive Materialkostenschätzung.
LayoutFlexible session + 280px group card; stack at 760pxEigene responsive Gestaltung.
Theme mappingbg-primary → --color-primary → --primaryDie semantische Tailwind-Utility wird über den Preline-Alias aufgelöst.
03

Preline UI-Designsystem – vollständiger Leitfaden

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

DESIGN-preline-ui.md

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

Leitfaden herunterladen

Preline UI-Designsystem: Preline verbindet Utility-Markup mit Verhaltens-Plugins

Preline verbindet Utility-Markup mit Verhaltens-Plugins

Der Planer verwendet zwei native Preline-Plugins: HSTabs wählt ein Sitzungspanel aus, und HSInputNumber steuert begrenzte Schaltflächen zum Erhöhen und Verringern. Tailwind-Klassen übernehmen den Großteil der visuellen Gestaltung. Die Illustration der Sitzung und die Budgetberechnung sind Teil der Anwendung und gehören nicht zu einer fiktiven All-in-one-Buchungskomponente.

Aus diesem OpenDesign-Leitfaden

Diese Unterscheidung ist wichtig, wenn Sie das Beispiel übernehmen. Allein durch die Installation des Pakets JavaScript werden weder die Utility-Klassen kompiliert noch das Markup der Anwendung bereitgestellt. Umgekehrt bleibt das Verhalten von Tabs und Zahlenfeldern unvollständig, wenn Sie nur HTML kopieren, ohne die Plugins zu initialisieren. Die vollständige Integration weiter unten führt alle Teile ausdrücklich auf.

Unterstützende Spezifikation lesen

Preline UI-Designsystem: Semantische Aliase bis zu ihren Palettenrollen nachvollziehen

Semantische Aliase bis zu ihren Palettenrollen nachvollziehen

Im mitgelieferten standardmäßigen hellen Theme verweist --primary auf --color-primary-600, dessen zugrunde liegende Primärfarbpalette blau ist. Die primäre Vordergrundfarbe wird zu Weiß aufgelöst; für Hover, Fokus und den aktiven Status wird die Rolle der Stufe 700 verwendet. Der ausgewählte Tab und die Schaltfläche „Speichern“ greifen über semantische Utility-Klassen auf dieselbe Farbfamilie zurück.

Für Karten werden --card und --card-line verwendet, für das Mengenfeld --layer und --layer-line. Die Trennung dieser Rollen macht zukünftige Theme-Änderungen besser vorhersehbar, als überall feste weiße und graue Klassen zu verteilen. Die Tabelle behält die offiziellen Aliase bei, statt berechnete Näherungswerte als Quell-Tokens auszugeben.

Unterstützende Spezifikation lesen

Preline UI-Designsystem: Die tatsächliche Tailwind-Skala verwenden und eigene Ausnahmen kennzeichnen

Die tatsächliche Tailwind-Skala verwenden und eigene Ausnahmen kennzeichnen

Seitentitel und Kostenschätzung verwenden text-3xl, der Sitzungstitel text-2xl und der Formulartext text-sm. Der Karteninnenabstand p-5 entspricht bei der standardmäßigen Abstandseinheit 1.25rem. Der größere Seiteninnenabstand sm:p-8 beginnt am kleinen Tailwind-Breakpoint bei 640px, während das ursprüngliche Raster bei 760px auf eine Spalte wechselt.

Das lokale Stylesheet verwendet system-ui und lädt die optionalen, in der Preline-Theme-Datei benannten Schriftarten nicht. Bei 280px umbrechen die Tabs in zwei Zeilen und die Gruppenkarte wird unter die Sitzung verschoben. Dies sind bewusste Entscheidungen zur Gestaltung der Anwendung und keine Behauptung, dass jedes Preline-Layout dieselbe Geometrie aufweist.

Unterstützende Spezifikation lesen

Preline UI-Designsystem: Tab-Steuerelemente und Panels über stabile IDs miteinander verknüpfen

Tab-Steuerelemente und Panels über stabile IDs miteinander verknüpfen

Jeder Tab enthält in data-hs-tab einen Verweis auf ein eindeutiges Panel. aria-controls des Tabs und aria-labelledby des Panels wiederholen diese Verknüpfung für unterstützende Technologien. Genau ein initialer Tab trägt active und aria-selected=true; die übrigen Panels sind anfangs ausgeblendet. HSTabs aktualisiert diese Zustände bei der Navigation durch die Nutzenden.

Der aktive visuelle Stil verwendet hs-tab-active:bg-primary und hs-tab-active:text-primary-foreground. Diese Varianten stammen aus Prelines variants.css. Fehlt dieser Import, kann der ausgewählte Zustand visuell uneindeutig sein, selbst wenn JavaScript die Klassen korrekt ändert. Die Anwendung erkennt Änderungen der Auswahl, um die angrenzende Zusammenfassung zu aktualisieren.

  1. Wähle den Ton-Workshop aus und überprüfe Titel, Materialien und Dauer.
  2. Erhöhe die Teilnehmerzahl von zwei auf drei und überprüfe die Schätzung von 54 $.
  3. Speichere den lokalen Plan und ändere dann einen Tab, um die vorherige Bestätigung zurückzusetzen.

Unterstützende Spezifikation lesen

Preline UI Designsystem: Plugin-Optionen und Eingabebeschränkungen müssen übereinstimmen

Plugin-Optionen und Eingabebeschränkungen müssen übereinstimmen

Der Mengen-Wrapper legt in data-hs-input-number min auf eins, max auf sechs und step auf eins fest. Das native Zahlenfeld wiederholt diese Beschränkungen. So gilt für die Schaltflächen des Plugins und die Browser-Validierung derselbe zulässige Wertebereich. Eine eingegebene Zahl kann also keine Beschränkung umgehen, die nur im Schaltflächen-Handler vorhanden ist.

Die Zusammenfassung reagiert auf input, change und den change-Callback des Plugins. Bei ungültiger manueller Eingabe wird der Gesamtbetrag durch einen Gedankenstrich ersetzt und „Speichern“ deaktiviert. Vor dem Auslesen des Werts ruft der Speicher-Handler außerdem reportValidity auf. Die Begrenzung auf sechs Personen ist eine beispielhafte Planungsbeschränkung und keine Aussage zur tatsächlichen Verfügbarkeit.

Unterstützende Spezifikation lesen

Preline UI Designsystem: Aus dem aktiven Panel statt aus veralteten Beschriftungen berechnen

Mit dem aktiven Panel statt mit veralteten Beschriftungen rechnen

Jedes Panel speichert einen stabilen Sitzungsnamen, Preis und Dauer als Datenattribute. Die Aktualisierungsfunktion liest das sichtbare Panel aus und multipliziert dessen Materialkosten mit der gültigen Gruppengröße. So sind Druckstudio, Ton-Workshop und Zeichenspaziergang tatsächlich unterschiedliche Angebote und nicht bloß Tabs, die dieselbe Platzhalterkarte anzeigen.

Die angezeigte Schätzung umfasst nur die Materialien. In den ursprünglichen Beschreibungen wird erläutert, wofür dieser Betrag steht. Außerdem weist die Seite ausdrücklich darauf hin, dass damit kein Platz gebucht wird. Hinter den Zahlen stehen weder eine Zahlung noch eine Verfügbarkeitsprüfung oder ein externer Zeitplan. Ein echter Buchungsablauf würde separate Systeme und eine serverseitige Validierung erfordern.

Unterstützende Spezifikation lesen

Preline UI Designsystem: Den exportierten manuellen Einstiegspunkt dieser Paketversion verwenden

Den exportierten manuellen Eintrag dieser Paketversion verwenden

Das geprüfte Paket in Version 4.2.0 stellt die benannten Exporte HSTabs und HSInputNumber aus preline/non-auto bereit. Das Beispiel importiert sie und ruft ihre autoInit-Methoden auf, sobald das Markup vorhanden ist. Trotz des Namens ist autoInit hier ein expliziter, von der Anwendung ausgelöster Suchlauf und kein impliziter Hook, der beim Laden der Seite das gesamte Paket initialisiert.

Bei der Überprüfung stellten die .mjs-Pfade der einzelnen Plugins keine Standardklasse bereit. Außerdem konnten direkte Importe aus diesen Pfaden aufgrund der Paketmetadaten zu Nebenwirkungen entfernt werden. Mit dem exportierten manuellen Einstiegspunkt ließ sich dieses konkrete Build-Problem beheben. Die Einrichtung zeigt daher den funktionierenden Import für die angegebene Version statt eines ungeprüften generischen Plugin-Imports.

Unterstützende Spezifikation lesen

Preline UI Designsystem: Die Bestätigung bei einer Planänderung ungültig machen

Die Bestätigung bei einer Planänderung ungültig machen

„Lokalen Plan speichern“ schreibt einen Statustext mit der genauen Sitzung, der Personenzahl und den Materialkosten und deaktiviert sich anschließend. Jede Änderung der Menge oder des ausgewählten Tabs ruft update auf. Dadurch wird die übliche Erklärung wieder angezeigt und neu berechnet, ob der Plan gespeichert werden kann. Ein zuvor gespeicherter Text kann so nicht einem neuen Plan zugeordnet bleiben.

Beim lokalen Test wurde der Ton-Workshop ausgewählt, die Personenzahl auf drei erhöht und der daraus resultierende Status mit 54 $ überprüft. Außerdem wurde die tatsächlich gerenderte Seite bei 280 px untersucht. Eine statische Gesamtsumme oder eine Schaltfläche, die lediglich ihre Beschriftung ändert, würde nicht belegen, dass die beiden nativen Plugins und der Anwendungsstatus miteinander verbunden sind.

  • Verwende für das genaue lokale Ergebnis einen Statusbereich.
  • Ungültige Werte dürfen nicht in die berechnete Summe einfließen.
  • Behalte beim Anpassen des Markups stabile Tab- und Panel-IDs bei.

Unterstützende Spezifikation lesen

Preline UI Designsystem: Theme, Varianten und tatsächliches Quell-Markup kompilieren

Theme, Varianten und tatsächliches Quell-Markup kompilieren

Das Stylesheet importiert zuerst Tailwind, anschließend die Preline-Varianten und das mitgelieferte Standard-Theme. Explizite Quellpfade umfassen das lokale HTML, die Anwendungs-JavaScript und die Preline-Distributionsdateien. Dadurch stehen zustandsabhängige Hilfsklassen im generierten CSS zur Verfügung. Das ursprüngliche Layout-Stylesheet wird nach diesen Importen eingebunden.

Die eigenständige Vorschau bettet das kompilierte CSS und das gebündelte JavaScript ein und stellt keine CDN-Anfrage. In einem Produktionsprojekt können dieselben Ausgabedateien separat bereitgestellt werden. Beziehe Dateipfade relativ zum tatsächlichen CSS-Einstiegspunkt. Im reproduzierbaren Beispiel unten liegen alle Quelldateien im Projektstamm, damit keine versteckten Abhängigkeiten von temporären Arbeitsverzeichnissen entstehen.

Unterstützende Spezifikation lesen

Preline UI Designsystem: Komponentenbeispiele

Vollständiges semantisches Markup des Planers

Tab-IDs, Panel-Beziehungen, Hooks für die Zahleneingabe und ein expliziter lokaler Statusbereich.

html
<main class="max-w-5xl mx-auto p-5 sm:p-8"><header><p class="text-xs font-semibold tracking-widest text-muted-foreground-1">STUDIO SATURDAY · SAMPLE PROGRAM</p><h1 class="text-3xl font-semibold tracking-tight mt-3">Choose a different kind of afternoon.</h1><p class="text-sm text-muted-foreground-1 leading-6 mt-3 max-w-2xl">Explore three creative sessions and calculate a sample materials budget for your group. This planner does not book a place.</p></header><div class="planner-grid mt-7"><section class="min-w-0"><nav class="flex flex-wrap gap-2 mb-5" role="tablist" aria-label="Creative sessions"><button type="button" id="tab-print" data-hs-tab="#panel-print" role="tab" aria-controls="panel-print" aria-selected="true" class="active hs-tab-active:bg-primary hs-tab-active:text-primary-foreground py-2 px-3 text-sm rounded-lg border border-border text-foreground hover:bg-layer-hover focus-visible:outline-2 focus-visible:outline-primary">Print studio</button><button type="button" id="tab-ceramics" data-hs-tab="#panel-ceramics" role="tab" aria-controls="panel-ceramics" aria-selected="false" class=" hs-tab-active:bg-primary hs-tab-active:text-primary-foreground py-2 px-3 text-sm rounded-lg border border-border text-foreground hover:bg-layer-hover focus-visible:outline-2 focus-visible:outline-primary">Clay workshop</button><button type="button" id="tab-drawing" data-hs-tab="#panel-drawing" role="tab" aria-controls="panel-drawing" aria-selected="false" class=" hs-tab-active:bg-primary hs-tab-active:text-primary-foreground py-2 px-3 text-sm rounded-lg border border-border text-foreground hover:bg-layer-hover focus-visible:outline-2 focus-visible:outline-primary">Drawing walk</button></nav><div id="panel-print" role="tabpanel" aria-labelledby="tab-print" class="" data-name="Print studio" data-price="12" data-duration="90 minutes"><div class="session-art print" aria-hidden="true"><i></i><b></b><span></span></div><div class="p-5 bg-card rounded-b-xl border border-card-line border-t-0"><p class="text-xs text-muted-foreground-1 font-medium">09:30–11:00 · 90 minutes</p><h2 class="text-2xl mt-3 font-semibold">Ink, paper, repeat.</h2><p class="text-sm leading-6 mt-3 text-muted-foreground-1">Make a two-color print from a simple cut-paper composition.</p><h3 class="text-sm font-semibold mt-5">Materials included in the estimate</h3><ul class="mt-3 space-y-2 text-sm"><li class="flex gap-2"><span aria-hidden="true">↗</span>Cobalt ink</li><li class="flex gap-2"><span aria-hidden="true">↗</span>Warm white stock</li><li class="flex gap-2"><span aria-hidden="true">↗</span>Registration guide</li></ul><p class="mt-5 text-sm font-medium">Sample materials allowance: $12 per person</p></div></div><div id="panel-ceramics" role="tabpanel" aria-labelledby="tab-ceramics" class="hidden" data-name="Clay workshop" data-price="18" data-duration="120 minutes"><div class="session-art ceramics" aria-hidden="true"><i></i><b></b><span></span></div><div class="p-5 bg-card rounded-b-xl border border-card-line border-t-0"><p class="text-xs text-muted-foreground-1 font-medium">13:00–15:00 · 120 minutes</p><h2 class="text-2xl mt-3 font-semibold">A shape held by hand.</h2><p class="text-sm leading-6 mt-3 text-muted-foreground-1">Build a small pinch vessel and explore three surface textures.</p><h3 class="text-sm font-semibold mt-5">Materials included in the estimate</h3><ul class="mt-3 space-y-2 text-sm"><li class="flex gap-2"><span aria-hidden="true">↗</span>Stoneware clay</li><li class="flex gap-2"><span aria-hidden="true">↗</span>Wooden modeling tool</li><li class="flex gap-2"><span aria-hidden="true">↗</span>Texture samples</li></ul><p class="mt-5 text-sm font-medium">Sample materials allowance: $18 per person</p></div></div><div id="panel-drawing" role="tabpanel" aria-labelledby="tab-drawing" class="hidden" data-name="Drawing walk" data-price="5" data-duration="60 minutes"><div class="session-art drawing" aria-hidden="true"><i></i><b></b><span></span></div><div class="p-5 bg-card rounded-b-xl border border-card-line border-t-0"><p class="text-xs text-muted-foreground-1 font-medium">16:00–17:00 · 60 minutes</p><h2 class="text-2xl mt-3 font-semibold">Notice the edges.</h2><p class="text-sm leading-6 mt-3 text-muted-foreground-1">Make a sequence of quick drawings along an original sample walking route.</p><h3 class="text-sm font-semibold mt-5">Materials included in the estimate</h3><ul class="mt-3 space-y-2 text-sm"><li class="flex gap-2"><span aria-hidden="true">↗</span>Pocket sketchbook</li><li class="flex gap-2"><span aria-hidden="true">↗</span>Soft graphite pencil</li><li class="flex gap-2"><span aria-hidden="true">↗</span>Portable drawing board</li></ul><p class="mt-5 text-sm font-medium">Sample materials allowance: $5 per person</p></div></div></section><aside class="bg-card border border-card-line rounded-xl p-5 self-start"><h2 class="text-lg font-semibold">Your group</h2><label for="people" class="block text-sm mt-5 mb-2">Participants</label><div id="quantity" data-hs-input-number='{"min":1,"max":6,"step":1}' class="flex items-center gap-3 border border-layer-line rounded-lg p-2 bg-layer"><button type="button" data-hs-input-number-decrement aria-label="Decrease participants" class="size-9 shrink-0 rounded-md border border-border disabled:opacity-40">−</button><input id="people" type="number" value="2" min="1" max="6" step="1" data-hs-input-number-input class="w-full min-w-0 text-center bg-transparent"/><button type="button" data-hs-input-number-increment aria-label="Increase participants" class="size-9 shrink-0 rounded-md border border-border disabled:opacity-40">+</button></div><p class="text-xs text-muted-foreground-1 mt-2">1–6 participants · sample planning limit</p><dl class="mt-6 space-y-3 text-sm"><div><dt class="text-muted-foreground-1">Selected session</dt><dd id="selected-name" class="font-semibold mt-1"></dd></div><div><dt class="text-muted-foreground-1">Duration</dt><dd id="selected-duration" class="font-semibold mt-1"></dd></div><div class="pt-4 border-t border-border"><dt class="text-muted-foreground-1">Materials estimate</dt><dd id="total" class="text-3xl font-semibold mt-1"></dd></div></dl><button id="save" class="mt-6 w-full py-3 px-4 bg-primary text-primary-foreground rounded-lg font-medium text-sm hover:bg-primary-hover disabled:opacity-50" type="button">Save local plan</button><p id="feedback" role="status" class="text-xs leading-5 mt-3 text-muted-foreground-1">No booking or payment is created.</p></aside></div></main>

Code-Referenz

  • Die drei Sitzungen und Preise sind eigens erstellte Beispieldaten.
  • Für das native Eingabefeld gelten dieselben Beschränkungen wie für das Plugin.

Vollständige Initialisierung der Plugins und Berechnung

Manuelle Initialisierung über den exportierten non-auto-Einstiegspunkt; Auswahl und Menge fließen in dieselbe abgeleitete Zusammenfassung ein.

javascript
import {HSTabs,HSInputNumber} from 'preline/non-auto';
HSTabs.autoInit();HSInputNumber.autoInit();
const quantity=document.querySelector('#people'),save=document.querySelector('#save'),feedback=document.querySelector('#feedback');
function selected(){return document.querySelector('[role=tabpanel]:not(.hidden)')}
function update(){const panel=selected(),count=Number(quantity.value);document.querySelector('#selected-name').textContent=panel.dataset.name;document.querySelector('#selected-duration').textContent=panel.dataset.duration;document.querySelector('#total').textContent=quantity.checkValidity()&&count>=1?'$'+count*Number(panel.dataset.price):'—';save.disabled=!quantity.checkValidity()||count<1;feedback.textContent='No booking or payment is created.'}
document.querySelectorAll('[data-hs-tab]').forEach(button=>button.addEventListener('click',()=>queueMicrotask(update)));
new MutationObserver(update).observe(document.querySelector('nav'),{subtree:true,attributes:true,attributeFilter:['aria-selected']});
quantity.addEventListener('input',update);quantity.addEventListener('change',update);
const instance=HSInputNumber.getInstance('#quantity');instance.on('change',update);
save.addEventListener('click',()=>{if(!quantity.reportValidity())return;const panel=selected();feedback.textContent=`Saved locally: ${panel.dataset.name}, ${quantity.value} people, $${Number(quantity.value)*Number(panel.dataset.price)} materials estimate.`;save.disabled=true});update();

Code-Referenz

  • Verwende die benannten Exporte aus preline/non-auto.
  • Die versionierten .mjs-Dateien der Plugin-Unterpfade exportieren keine Standardklasse.
  • Eingabeänderungen und change-Callbacks des Plugins aktualisieren beide die Zusammenfassung.

Vollständige, eigens erstellte responsive Gestaltung

Dekorative Illustrationen zu Druck, Ton und Zeichnen rund um die nativen Tab- und Zahlen-Plugins.

css
html,body{margin:0;height:auto;min-height:0}body{background:#f7f8fb;font-family:ui-sans-serif,system-ui,sans-serif;color:var(--foreground)}button{cursor:pointer}button:disabled{cursor:default}.planner-grid{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:24px}.session-art{height:200px;position:relative;overflow:hidden;border-radius:12px 12px 0 0}.session-art i,.session-art b,.session-art span{display:block;position:absolute}.print{background:#e2e9f4}.print i{width:160px;height:140px;left:15%;top:45px;background:#2456a7;transform:rotate(-13deg)}.print b{width:150px;height:150px;right:14%;top:30px;background:#f0a979;border-radius:50%;mix-blend-mode:multiply}.print span{width:180px;height:8px;left:20%;top:160px;background:#f9f8ef;transform:rotate(-13deg)}.ceramics{background:#e8d9c8}.ceramics i{width:150px;height:100px;left:25%;top:65px;border-radius:15% 15% 50% 50%;background:#a87862}.ceramics b{width:150px;height:32px;border-radius:50%;left:25%;top:53px;background:#704a3d;box-shadow:inset 0 0 0 10px #bd8f78}.ceramics span{width:150px;height:12px;left:25%;top:171px;background:#c7b39e;border-radius:50%}.drawing{background:#e2e8de}.drawing i{width:160px;height:145px;left:23%;top:25px;background:#fffdf4;transform:rotate(8deg);border:1px solid #d6d8cb}.drawing b{height:90px;width:80px;left:33%;top:49px;border:2px solid #4d655b;transform:rotate(-18deg);border-radius:50% 50% 10% 10%}.drawing span{width:130px;height:7px;background:#ad754c;left:45%;top:145px;transform:rotate(-33deg)}@media(max-width:760px){.planner-grid{grid-template-columns:minmax(0,1fr)}.session-art{height:170px}}@media(max-width:360px){main{padding:14px!important}.session-art i,.session-art b,.session-art span{transform:scale(.8)}.session-art{height:150px}h1{font-size:26px!important}}

Code-Referenz

  • Die Grafik ist ein eigenes CSS und mit aria-hidden ausgeblendet.
  • Dieses Stylesheet folgt auf die Tailwind- und Preline-Importe.
04

Preline UI Designsystem Einrichtung des KI-Agenten

Ausgangspunkt für die Implementierung

Geprüft mit Preline 4.2.0. Das vollständige Markup, die Logik und das CSS sind oben enthalten. Die Quellpfade in input.css setzen voraus, dass sich alle vier Quelldateien im Projektstamm befinden.

bash
# Create an empty directory and run:
npm init -y
npm install [email protected] [email protected] @tailwindcss/[email protected] esbuild
# Save the complete examples above as body.html, app.js and style.css.
# Create input.css with exactly:
# @import "tailwindcss" source(none);
# @import "./node_modules/preline/variants.css";
# @import "./node_modules/preline/css/themes/theme.css";
# @source "./body.html";
# @source "./app.js";
# @source "./node_modules/preline/dist/*.js";
# @import "./style.css";
npx @tailwindcss/cli -i input.css -o bundle.css --minify
npx esbuild app.js --bundle --format=iife --outfile=bundle.js
# Assemble the actual root document without placeholder markup:
node -e 'const f=require("fs");f.writeFileSync("index.html",`<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Studio planner</title><link rel="stylesheet" href="bundle.css"></head><body>${f.readFileSync("body.html","utf8")}<script src="bundle.js"></script></body></html>`)'
# Serve this directory with your existing static server.

Ein Prompt für dein Projekt

Agenten-Prompt
Verwende Preline 4.2.0 mit den benannten Importen HSTabs und HSInputNumber aus preline/non-auto und initialisiere beide Plugins explizit. Behalte die drei Workshops am Studio-Samstag, den Mengenbereich von eins bis sechs und die Materialkosten des ausgewählten Workshops bei. Berechne den Gesamtbetrag anhand des aktiven Panels und der Menge, erkläre den gespeicherten Plan nach jeder Änderung für ungültig und prüfe vor dem lokalen Speichern den zulässigen Zahlenbereich. Binde die vorgegebene Tailwind-Theme- und Variantenkonfiguration sowie das ursprüngliche Layout ein. Mache aus dem lokalen Studioplan keine Buchungs- oder Zahlungsbestätigung.
05

Preline UI Designsystem: Quellen und Geltungsbereich

Native Preline npm 4.2.0 mit Tailwind CSS 4.3.3. Originale Beschreibungen der Sessions, Illustrationen und fiktive Angaben zum Materialbudget. Beim Speichern wird nur der lokale Seitenstatus gespeichert; es erfolgen weder Buchungen noch Zahlungen oder externe Nachrichten.