Interaktiv & Mobiliar
Eine live laufende Canvas-Demo und der Vertrag dahinter, dann die stillen Komponenten, die jede Notiz rahmen – die, die du seit der ersten Seite vor dir hast.
§3.1DemoMount – live
Die Arbeitsteilung ist die übliche des Pakets: Das Mount-Markup (Bühne, Controls-Slot, Bildunterschrift-Slot) kommt aus dem Paket; Demo-Modul und Loader gehören der Site. Diese Site hält ihren Loader in src/lib/demo-loader.ts und ruft mountAllDemos() einmal aus dem Layout auf; der Aufruf läuft auf jeder Seite, aber der Chunk eines Demo-Moduls wird nur für eine Seite geladen, die einen [data-demo]-Mount trägt.
Eine Demo, die Zeigereingaben auf ihrem Canvas entgegennimmt, übergibt interactive – die Bühne beansprucht dann Touch-Gesten und zeigt ein Fadenkreuz. Diese hier ist passiv (nur Rendern), lässt das Flag also weg, und ein Wisch über den Canvas scrollt weiterhin die Seite. Sie zeichnet die Interferenz zweier Wellenquellen mit dem Tusche-Token der Seite selbst und folgt damit dem Theme:
Zwei Punktquellen senden Kreiswellen aus; wo Berg auf Berg trifft, sammelt sich die Tusche, wo Berg auf Tal trifft, scheint das Papier durch. Schalte das Theme um – die Demo tuscht sich aus den lebenden Tokens neu ein.
Der Modulvertrag ist ein einziger Default-Export, mount(ctx), der eine Aufräumfunktion zurückgibt; wie der Loader Modul-ids wie waves/interference auflöst, ist Sache der Site (hier: import.meta.glob).
§3.2Seitenmobiliar
Die übrigen Komponenten rahmen eine Notiz, statt sie zu füllen:
Heroeröffnet eine Notiz: Kicker, Display-Titel, eine Einleitung, die durch die volle Markdown-Pipeline geht, eine Meta-Zeile und ein optionalestocLabel, das der Seitenleiste eine unnummerierte „Intro“-Zeile hinzufügt. Das Frontmatter-titleder Notiz bleibt der kurze kanonische Name für<title>und Karten; der Titel des Heros darf lang sein.PartHeroeröffnet ein Kapitel eines Hubs – der Kopf dieser Seite. Sein Kicker wird nie getippt: Die Route reicht die Kapitelbeschriftung „Teil III · …“ alsprops.partLabelherein.Partteilt eine lange einseitige Notiz in Teile; das Nummerierungspreset macht daraus die Gruppenzeilen „PART II · …“ der Seitenleiste. Das volle Programm ist so geschnitten.HubCardund.hub-gridsind die Startkarten eines Hubs,.pathsein Lesepfad-Kasten – beide auf der Übersicht dieser Galerie.LocalTocrendert eine Sprungliste in der Seite; es akzeptiert beide ToC-Formen, die die zwei Nummerierungspresets erzeugen, und versteckt sich unterhalb eines konfigurierbaren Minimums. Unten live, am ToC dieses Kapitels.SidebarMemoryhält eine scrollende Seitenleiste über Seitenwechsel hinweg dort, wo der Leser sie gelassen hat, und zentriert den aktuellen Eintrag (per Default[aria-current="page"]), wann immer er sonst aus dem Blick geriete. In die Scrollbox der Seitenleiste legen, nach dem Navigations-Markup; es läuft vor dem ersten Paint, die Leiste blitzt also nie oben auf. Die Seitenleiste dieser Demo trägt es.LineageSvgrahmt eine handgezeichnete SVG (eine Methoden-Ahnentafel, ein Taxonomiebaum) als Karte – eine steht unten.PageFooterist das Kleingedruckte am Fuß einer Notiz – die Zeile unter jeder Notiz hier.- Die Stöber-Bausteine stehen im Wiki-Kapitel; die Markdown-Seite der Galerie ist Das volle Programm.
§3.3LocalToc und LineageSvg, live
LocalToc, gefüttert mit dem Build-Zeit-ToC dieser Seite – dieselben Daten, die die Seitenleiste konsumiert, der Notiz als props.toc übergeben:
Und LineageSvg um ein handgesetztes Diagramm, vollständig in semantischen Tokens getuscht, sodass es auf beiden Themes sitzt:
§3.4Mobiliar ohne Komponente
Ein paar Stücke sind schlichte Klassen in base.css, für Sites, die sie aus dem eigenen Layout rendern oder als HTML in den Fließtext schreiben:
| Klasse | Was es ist |
|---|---|
.page-head + .kicker, .page-desc, .page-date | ein vom Frontmatter getriebener Seitenkopf (Kicker, h1, Beschreibung, Datum), gerendert von einem Layout statt von einem <Hero> |
.banner, .banner-fallback | ein einzeiliger Hinweis unter dem Kopf; die Fallback-Variante ist die gedämpfte |
.page-foot | eine zweispaltige Kleingedruckt-Fußzeile (Slot links, Slot rechts) |
.speak | die Klartext-Glosse unter einer Tiefgang-Überschrift; ihr Label ist --speak-label |
.path + .title, .route, .arrow | ein Lesepfad-Kasten auf einem Hub |
.ref-tag | ein kleines Monospace-Tag in einer Literaturliste (eine Venue, ein Jahr) |
.tag, .tag.teal / .mustard / .violet | die Abzeichen der Papierkarten, überall verwendbar |
.measured + .measured-head, .measured-body, .measured-pane (.doc), .measured-tag | die Vergleichskarte „dokumentiert vs. gemessen“: eine massive Petrol-Titelleiste über zwei Feldern, das .doc-Feld trägt die Behauptung, das andere die Messung – eine Silhouette, die sich von jedem Callout unterscheidet |
.paper .idea-label | das kleine Kernidee-Label in Versalien im Rumpf einer PaperCard, z. B. <span class="idea-label">Kernidee</span> |