Seiten
Inhalt
Guide
Installation
| npm install @xpulse/theme --registry=https://npm.xpulse.one |
Nutzung
Wenn @xpulse/theme installiert und von @xpulse/app gestartet wurde,
wird ein einzelnes minifiziertes CSS-Bundle unter /_theme/css/xpulse.css
bereitgestellt. Alle Themes (dark, light sowie App-Overrides) sind darin enthalten.
Empfohlen – Template-Methods im Layout:
| {% themeAssets() %} |
Das rendert automatisch den Bundle-Link, das Anti-FOUC-Script und das Browser-Runtime-Script. Für Theme-Switching zusätzlich:
| {% themeSwitcher() %} |
JavaScript
@xpulse/theme ist ohne verpflichtendes Runtime-JavaScript nutzbar.
Die meisten Anwendungsfälle basieren nur auf:
- HTML-Struktur
- CSS-Klassen (
xpulse-*) --xpulse-*Custom Properties
JavaScript ist nur für optionale Verhaltensschichten sinnvoll:
- Theme-Switching via
/_theme/theme.js - Live-Demo für
:root-Tokens viathemeTokenEditor() - Aktiven TOC-Eintrag beim Scrollen markieren
- Copy-to-Clipboard bei Code-Blöcken
Was das Package liefert
- Built-in Themes unter
public/css/themes/(dark, light) - Basis-CSS unter
public/css/base.css - Komponenten-CSS unter
public/css/components/ - Ein einzelnes HTTP-Bundle:
GET /_theme/css/xpulse.css - Browser-Runtime:
GET /_theme/theme.js - Kein manuelles Registrieren von Themes nötig
Eigenes App-Theme
Lege in deiner App eine Datei unter src/themes/ an:
| /* src/themes/app.css */ |
| .xpulse-shell { |
| width: min(1100px, calc(100% - 32px)); |
| margin: 32px auto; |
| } |
Wichtig:
- Kein
@importdes Basis-Themes –app.cssenthält nur lokale Overrides - Die Datei wird ans Ende des Bundles angehängt
themeAssets()bindetapp.csszusätzlich als separaten<link>ein, damit Änderungen in Entwicklung ohne Cache-Rebuild wirksam werden
Theme Switcher
| {% themeAssets() %} |
| {% themeSwitcher() %} |
theme.allow und theme.default in xpulse.json steuern den Switcher:
| { |
| "theme": { |
| "default": "dark", |
| "allow": ["dark", "light"] |
| } |
| } |
allow |
Ergebnis |
|---|---|
[] oder nicht gesetzt |
Alle entdeckten Themes erlaubt |
["dark", "light"] |
Kompakter Mond/Sonne-Toggle |
["dark", "light", "high-contrast"] |
Select-Dropdown |
["dark"] |
Kein Switcher sichtbar |
Caching
Das CSS-Bundle wird beim ersten Start in var/cache/theme/xpulse.css
gecacht und bei Folgestarts direkt von dort geladen.
- Im Dev-Mode (
NODE_ENV !== 'production') wird der Cache automatisch übersprungen - Mit
theme.init({ force: true })kann der Cache manuell umgangen werden - TTL und aktivierter Status sind über
xpulse.jsonkonfigurierbar:
| { |
| "theme": { |
| "cache": { |
| "enabled": true, |
| "ttl": 0 |
| } |
| } |
| } |
ttl: 0 bedeutet kein Ablauf. ttl: 3600 = Cache nach 1 Stunde ungültig.
Komponenten-Klassen
Die CSS-Klassen aus @xpulse/theme folgen dem xpulse-*-Prefix und BEM:
.xpulse-box/.xpulse-box--header/.xpulse-box--content.xpulse-brand/.xpulse-brand__title.xpulse-nav__item--depth-1.xpulse-button--primary/.xpulse-button--secondary
Die zugehörigen CSS-Variablen folgen dem Prefix --xpulse-*.