Theme-Erstellung

Die Facade verfasst ein PrimeVue-Theme. Module konsumieren dieses Theme; sie schaffen keine parallelen Mini-Designsysteme.

Wippy betreibt PrimeVue derzeit mit theme: 'none'. Das Erscheinungsbild der Komponenten liefern Wippys mit Tailwind verfasstes PrimeVue-CSS, öffentliche Laufzeitvariablen und die Facade-Anpassung.

Wo Styling hingehört

Styling-Anliegen Zuständig
Produktweit geteiltes Erscheinungsbild von PrimeVue-Komponenten PrimeVue-Theme der Facade in custom_css und öffentliche Theme-Variablen
Nur das Chrome der Host-Hülle Facade-CSS mit Scope .wippy-host-app
Eine geteilte .p-*-Regel für Host- und Kind-Roots Globales custom_css der Facade; kein Host-Scope nötig
Theme-Override nur für eine Seite Seitenkonfiguration mit der unterstützten Frontend-Schreibweise
Domänenlayout oder neuartige Struktur Modul-CSS oder Tailwind
Ein notwendiger Nicht-PrimeVue-Custom-Baustein Modul-CSS, das öffentliche Tokens und dokumentierte invariante Utilities wiederverwendet
Derselbe Nicht-PrimeVue-Baustein für mehrere eigene Module Ein gemeinsames Paket — siehe Die Design-Schicht
Eine beliebige Klasse, die von einer bestimmten Facade erwartet wird Nicht portabel; durch FE-STYLE-001 untersagt

Eine globale .p-drawer-content-Regel ist eine gültige Theme-Implementierung, wenn sie für jeden Drawer in Host- und Kind-Roots gedacht ist. .wippy-host-app .p-drawer-content ist nur angemessen, wenn die Regel host-spezifisch ist.

Dupliziertes Modul-CSS in Facade-CSS zu verschieben beseitigt die Abhängigkeit nicht. Ist der Selektor nicht Teil des geteilten PrimeVue-Theme-Vokabulars, entsteht ein privater Facade-Vertrag. Der Ort für Vokabular, das Ihre eigenen Module teilen, das aber im Theme fehlt, ist ein veröffentlichtes Paket: siehe Die Design-Schicht.

Semantische Gleichheit

Semantisch gleichwertige Steuerelemente sollten gleichwertig aussehen. Bevorzugen Sie PrimeVue-Komponenten direkt. Wenn ein wirklich eigenes Steuerelement nötig ist, bestimmen Sie sein visuelles PrimeVue-Geschwister und verwenden Sie dieselben öffentlichen Laufzeit-Properties für Farbe, Rahmen, Fokus, Zustand und jede als theme-variable eingestufte Geometrie.

Der eigene Baustein darf nur die neuartige Struktur besitzen, die das Geschwister nicht bietet. Verwenden Sie dokumentierte Theme-Verträge für Padding, Abmessungen, Typografie, Radius, Schatten, Fokus und Bewegung wieder, wo es sie gibt. Kopieren Sie kein aktuelles Literal aus generiertem Komponenten-CSS und nennen es Vererbung.

Laufzeit- versus invariante Properties

Jede geteilte Erscheinungs-Property hat genau eine Policy:

  • theme-variable: Sie muss über eine dokumentierte öffentliche Laufzeitvariable aufgelöst werden.
  • platform-invariant: Der geteilte kompilierte Tailwind-Wert ist über jedes konforme Theme hinweg bewusst stabil.

Fügen Sie keine Laufzeit-Tokens für theoretische Flexibilität hinzu. Ergänzen oder übernehmen Sie ein Token erst, nachdem das Hauptbuch des effektiven Vertrags eine reale Laufzeitlücke, einen exakten unterstützten Pfad, einen realen Konsumenten und einen Mutationsnachweis belegt.

CSS-Transport ist keine Erlaubnis

Seiten erhalten Styles in einem iframe. Web Components können Styles innerhalb eines Shadow Root erhalten. Das erklärt, wo CSS wirken kann; es berechtigt ein Modul nicht dazu, von beliebigen Facade-Selektoren abzuhängen.

Moduswechsel zur Laufzeit

Der öffentliche Vertrag für den Theme-Modus ist AppConfig plus @wippy-fe/proxy:

import { host, on } from '@wippy-fe/proxy'

async function setThemeMode(mode: 'auto' | 'light' | 'dark') {
  await new Promise<void>((resolve, reject) => {
    const stop = on('@theme', (appliedMode) => {
      if (appliedMode !== mode) return
      stop()
      const currentMode = host.getThemeMode()
      if (currentMode !== mode) {
        reject(new Error(`Theme propagation mismatch: ${currentMode}`))
        return
      }
      resolve()
    })
    host.setThemeMode(mode)
  })
}

await setThemeMode('dark')

Verwenden Sie ausschließlich auto, light oder dark. Der Host besitzt die Anwendung und die rekursive Weitergabe an Kinder; die Facade bzw. der Einbetter besitzt die Persistenz. w-theme-dark / w-theme-light direkt zu bearbeiten, interne Theme-Hilfsfunktionen aufzurufen, AppConfig-Globals zu schreiben oder Host-Nachrichten zu posten umgeht diesen Vertrag und ist nicht konform. Visuelle Nachweise sind erst gültig, nachdem die öffentliche API den weitergegebenen Modus meldet.

Siehe Tailwind-Vertrag, Token-Katalog und Portabler UI-Vertrag.