import '@jungherz-de/notionkit-elements/components/nk-btn.js';
<!-- build-free: map NotionKit's sheet once, the files import it -->
<scripttype="importmap">{ "imports": { "@jungherz-de/notionkit/notionkit-styles.js": "/node_modules/@jungherz-de/notionkit/notionkit-styles.js" } }</script>
Voraussetzungen
notionkit.css auf dem Dokument laden und class="nk-body" auf <body> setzen. Die Shadow Roots erben Schrift, Farbe und den Scoped Reset von dort; die Elemente bringen kein eigenes visuelles CSS mit. Das Bundle injiziert zusätzlich die Design-Tokens als Cascade Layer (@layer notionkit-defaults): Eine Seite ohne Stylesheet rendert trotzdem, und jedes eigene, unlayered :root { --nk-* } gewinnt.
Jeder <nk-*>-Host ist display: contents: Er erzeugt keine eigene Box, das innere .nk-*-Element nimmt also genau dort am Eltern-Layout teil, wo es das Klassen-Markup täte – ein Button bleibt inline, eine Sidebar ist direktes Flex-Kind der App, Baumzeile und Kinder-Box sind Geschwister. Das ist der Grund, warum die Pixel-Parität hält. Konsequenz: das Elternelement (oder die Tokens) stylen, nicht den Host; hidden am Host funktioniert weiter; getBoundingClientRect() eines Hosts ist leer.
<!-- ✓ spacing on a wrapper you own -->
<divstyle="margin-top:16px"><nk-btnvariant="primary">Speichern</nk-btn></div>
<!-- ✗ the host has no box; this margin does nothing -->
<nk-btnstyle="margin-top:16px" variant="primary">Speichern</nk-btn>
Theming & Branding
data-theme="light|dark" auf <html> setzen – nirgends sonst. Ein Observer spiegelt es in jedes Element. Zum Rebranding Tokens auf :root in einem normalen Stylesheet deklarieren: Jedes Element folgt, in beiden Themes.
Die Texte, die die Elemente mitbringen – Button-Beschriftungen, Platzhalter, die Namen, die ein Screenreader ansagt –, gibt es auf Englisch und Deutsch. Die Sprache ist die des Elements: sein nächstes lang-Attribut, auch über Shadow Roots hinweg, sonst <html lang>. Ein Attribut am Element gewinnt, für eine Beschriftung mit eigenem Sinn. setStrings() ergänzt oder ersetzt Texte, für alle Sprachen oder eine, und die Elemente auf der Seite übernehmen sie sofort; ein eigenes NkElement liest sie mit this.str(key). Prozente folgen der Sprache, wie Intl sie schreibt – 45 % auf Deutsch.
<htmllang="de"> <!-- the elements speak German: Kopieren, Heute, + Neue Seite … -->
<scripttype="module">
import { setStrings } from '@jungherz-de/notionkit-elements';
setStrings({ newPage: '+ New course' }); // every language
setStrings({ copy: 'Copier' }, 'fr'); // a language of its own
</script>
<!-- an attribute wins -->
<nk-copy-fieldvalue="https://…" copy-label="Link kopieren"></nk-copy-field>
Formulare
Formular-Controls sind form-associated Custom Elements: In einem <form> erscheinen sie in FormData, folgen reset, respektieren required und <fieldset disabled>. Außerhalb eines Formulars funktionieren value und Events weiter, aber nichts wird abgeschickt.
Elemente, die ihre Kinder kopieren (nk-select-Optionen, Breadcrumb-Einträge), beobachten sie per MutationObserver – ein Framework, das Kinder austauscht, hält das Element synchron. element.refresh() ist der Notausgang. Der leere String ist ein gültiger Wert.
const sel = document.querySelector('nk-select');
sel.innerHTML = roles.map(r => `<optionvalue="${r.id}">${r.name}</option>`).join('');
// the shadow <select> follows; sel.value is preserved when the option still exists
Icons übergeben
::slotted() trifft nur den zugewiesenen Knoten selbst. Ein Icon als direktes Kind mit Slot-Namen übergeben – nie in einen Container verpackt.
<!-- ✓ the icon is the slotted node -->
<nk-callout><spanslot="icon">📌</span>…</nk-callout>
<!-- ✗ wrapped: ::slotted() cannot reach the inner node -->
<nk-callout><spanslot="icon"><em>📌</em></span>…</nk-callout>
Overlays
nk-modal, nk-sheet, nk-peek, nk-cmdk, nk-toast und ein schwebendes nk-menu direkt unter <body> platzieren. In einem transformierten oder clippenden Container ist ein fixed Overlay gefangen. Ein Overlay, das über einen URL-Hash aufgeht, braucht eine andere id als den Hash: Der Browser scrollt zum Fragment-Ziel und nimmt dem Overlay den Fokus, den es gerade gesetzt hat.
Editor
NotionKit liefert keinen Editor. nk-block-host ist die optische Hülle; TipTap wird mit dem Rezept unten in ein Light-DOM-.nk-block-host gemountet (die Demo-App nutzt genau diese Datei). <nk-editor>, ein dünner TipTap-Wrapper, folgt in v1.1 als optionaler Import – nie Teil des Core-Bundles.
<!-- the shell: hover wash, focus ring, drag handle -->
<divclass="nk-block-host" id="editor">
<p>Server-rendered content becomes the initial document.</p>
</div>
<!-- the recipe: TipTap + slash menu + bubble menu + block handle (docs-editor.js) -->
<scripttype="module" src="../docs-editor.js"></script>
Rendert button.nk-btn, mit href ein a.nk-btn. Modifikator-Klassen werden Attribute. Ein geslottetes <svg> bekommt seine Größe aus dem Stylesheet – direkt übergeben, nie verpackt. Über eine Spalte gestreckt – ein Button über die volle Breite auf einer Anmeldeseite – bleibt seine Beschriftung mittig.
Optische Variante. topbar und share rendern .nk-topbar-btn für die Topbar. tool rendert .nk-db-tool, ein Werkzeug der Datenbank-Leiste (slot="tools" von nk-database). sidebar ist das ☰ .nk-topbar-btn.nk-sidebar-toggle: nur unter 860px sichtbar, ein Klick öffnet die nk-sidebar seiner App als Schublade und setzt aria-expanded.
active
boolean
–
Ein wirkendes Werkzeug – ein gesetzter Filter – bekommt den Akzent (variant="tool").
small
boolean
–
Kompaktes Padding und 12,5px Text.
disabled
boolean
–
Deaktiviert; Klicks werden verschluckt.
type
button | submit | reset
button
Bei submit/reset wird das umgebende <form> abgeschickt bzw. zurückgesetzt.
href
URL
–
Rendert einen Link statt eines Buttons.
Slots
Slot
Beschreibung
(default)
Beschriftung und optionales <svg>-Icon.
Events
Event
detail
Beschreibung
click
(native, composed)
Der native Klick bubbelt aus dem Shadow Root.
Auf kleinem Schirm:Unverändert. Der Button wächst mit seiner Beschriftung; in dichten Leisten small setzen.
Ein natives <input> im Shadow Root, per ElementInternals ins umgebende Formular eingebunden: FormData, Reset und required-Validierung funktionieren wie beim nackten Input.
Auf kleinem Schirm:Mindestbreite 210px – in einem Panel nie breiter als die Kachel; wide füllt die Zeile.
Ersetzt.nk-input.wide
<nk-copy-field> Kopierfeld
Ein Wert zum Mitnehmen – ein Link, eine Adresse, ein Schlüssel –, so hoch wie ein Eingabefeld, mit Kopieren rechts darin: Es schreibt die Zwischenablage und sagt kurz „Kopiert“ in Grün; wo die Zwischenablage nicht erlaubt ist, wird der Wert gezeigt und für ⌘C markiert. secret verbirgt ihn hinter Zeigen/Verbergen, Kopieren kopiert trotzdem den echten Wert. Als Property gesetzt, wird value nicht gespiegelt, ein Schlüssel landet also nie im Markup. Jeder Button trägt neben seinem Wort ein Symbol: Auf dem Telefon und mit icons überall steht das Symbol für das Wort – zwei überlappende Quadrate, ein Auge, ein grüner Haken für den Moment danach –, und ein verdeckter Schlüssel behält ein Dutzend Zeichen mehr. Das Wort bleibt der Name des Buttons und, solange die Symbole stehen, sein Tooltip für nk-tooltip.
Symbole statt Wörter in jeder Breite, nicht nur auf dem Telefon.
mono
boolean
–
Monospace – Adressen, Schlüssel, Code.
wrap
boolean
–
Ein langer Wert bricht um statt Auslassungspunkten.
wide
boolean
–
Füllt die Zeile.
copy-label
string
Copy · Kopieren
Button-Text.
copied-label
string
Copied · Kopiert
Text für den Moment danach.
show-label
string
Show · Zeigen
Zeigen (secret).
hide-label
string
Hide · Verbergen
Wieder verbergen.
Slots
keine
Events
Event
detail
Beschreibung
nk-action
{ action: 'copy', value, ok }
Kopieren geklickt; ok ist false, wenn die Zwischenablage ablehnte.
Properties:valuesecreticons
Methoden:copy()
Auf kleinem Schirm:Bleibt in seiner Spalte – in einem Panel auch unter seinen 210px: Gekürzt wird der Wert, nie die Aktionen. Die Aktionen sind Symbole, mit den Wörtern als Namen und Tooltips.
Ein Bild für eine Person oder einen Workspace, auf NotionKits Profilzeile: rund, oder square für ein Workspace-Icon, mit Hochladen / Ändern und Entfernen daneben. Aus GlassKit Elements: Die Datei wird mit ihrer EXIF-Drehung dekodiert, nicht größer als max gezeichnet und als Data-URL in nk-change übergeben – hochladen übernimmst du; eine unlesbare Datei feuert nk-error. JPEG wird auf Weiß gezeichnet; type="image/png" behält Transparenz. src als Property wird nicht gespiegelt, Megabytes landen also nie im DOM.
Notions Datumsauswahl als ein Element (NotionKit 1.9.0): ein Monat mit Heute und ‹ ›, Tasten, Grenzen und einem Formularwert. Der Wert ist ein Tag (YYYY-MM-DD); mit range ein Zeitraum start/ende, in zwei Klicks in beliebiger Reihenfolge gewählt; mit time ein Tag mit Uhrzeit (YYYY-MM-DDTHH:MM). weeks stellt jeder Reihe die ISO-Kalenderwoche voran („KW“ auf Deutsch), weekend graut die Tage ohne Arbeit, die Property days ergänzt Feiertage (off mit label) und bis zu drei marks je Tag in den neun Farben – Fristen, Meilensteine. Tage außerhalb von min/max werden als nicht verfügbar angesagt und lassen sich nicht wählen. Pfeile gehen einen Tag oder eine Woche weiter, Pos1/Ende an die Enden der Woche, Bild↑/Bild↓ einen Monat (mit Umschalt ein Jahr), Enter oder Leertaste wählt; ein Tag steht in der Tab-Reihenfolge. Monatsnamen, Wochentage und den ersten Wochentag liefert die Sprache der Seite; week-start="1" legt Montag fest. Mit floating sheet ist es ein Popover, das show(anchor) unter einer Eigenschaft oder Zelle öffnet, und auf dem Telefon ein Bottom Sheet; eine Wahl schließt es. Einen schwebenden direkt unter <body> legen: Ein offener nk-dialog, nk-modal oder nk-sheet lässt ihn bedienbar, er öffnet also auch aus einem Feld im Dialog.
Auf kleinem Schirm:Schwebend mit sheet: ein Bottom Sheet mit 44px-Zellen, eine Daumenbreite; sieben Tage und die Wochenspalte passen weiter auf einen 390px-Schirm.
Mehrzeiliges Geschwister von nk-input. Startwert ist das value-Attribut oder der Textinhalt des Elements.
Welle 1
<nk-textareaname="bio" rows="3" placeholder="Ein Satz über dich"></nk-textarea>
<textareaclass="nk-textarea" name="bio" rows="3" placeholder="Ein Satz über dich"></textarea>
Attribute
Attribut
Typ
Standard
Beschreibung
value
string
–
Aktueller Wert.
placeholder
string
–
Platzhaltertext.
rows
number
–
Sichtbare Zeilen.
name
string
–
Name des Formularfelds (FormData-Schlüssel).
disabled
boolean
–
Deaktiviert das Control.
required
boolean
–
Pflichtfeld.
wide
boolean
–
Volle Breite.
Slots
Slot
Beschreibung
(default)
Starttext (wenn kein value gesetzt ist).
Events
Event
detail
Beschreibung
nk-change
{ value, name }
Beim Übernehmen.
nk-input
{ value, name }
Bei jedem Tastendruck.
Auf kleinem Schirm:Nur vertikal veränderbar; wide füllt die Zeile.
Ersetzt.nk-textarea.wide
<nk-select> Auswahlfeld
Light-DOM-<option>- und <optgroup>-Kinder werden in das Shadow-<select> kopiert und bleiben synchron, wenn ein Framework sie austauscht. Der leere String ist ein gültiger Wert; ein value ohne passende Option lässt die Auswahl unangetastet. Ein value – Attribut oder Property –, dessen Option noch fehlt, wartet und wird angewendet, sobald die Option da ist, vor der Vorauswahl der ersten Option durch den Browser, es sei denn, jemand hat inzwischen eine andere gewählt; das Einrasten feuert kein nk-change.
120px Mindestbreite (.compact), z. B. in einer Mitgliederzeile.
wide
boolean
–
Volle Breite (.nk-select.wide).
Slots
Slot
Beschreibung
(default)
<option>-/<optgroup>-Kinder – nur direkte Kinder.
Events
Event
detail
Beschreibung
nk-change
{ value, name }
Bei Auswahl.
Properties:valueselectedIndexoptions
Methoden:refresh()
Auf kleinem Schirm:Nutzt den nativen Picker der Plattform (color-scheme folgt dem Theme).
Ersetzt.nk-select.compact
<nk-switch> Schalter
Rendert button.nk-switch[role=switch]; das Stylesheet steuert den Knopf über aria-checked, das Element übernimmt das Umschalten. Sendet value (Standard on) wenn eingeschaltet, sonst nichts – wie eine Checkbox.
Sichtbarer Text neben dem Schalter (alternativ zum Default-Slot).
label
string
–
Barrierefreier Name (aria-label), wenn es keinen sichtbaren Text gibt.
Slots
Slot
Beschreibung
(default)
Sichtbarer Text neben dem Schalter; gehört zur Trefferfläche. Ohne ihn rendert das Element den nackten Button.
Events
Event
detail
Beschreibung
nk-change
{ checked, value, name }
Beim Umschalten.
Methoden:toggle()
Auf kleinem Schirm:34×20px – unter dem 44px-Touch-Ziel. In einer Label-Zeile (nk-field) wächst die Trefferfläche.
Ersetzt.nk-switch.nk-switch-label
<nk-check> Checkbox
Ein label.nk-check mit selbst gezeichneter Checkbox; der Text wird geslottet, ein Klick darauf schaltet um. indeterminate zeigt einen Strich (NotionKit 1.21.0) – für eine Box über einer teilweise gewählten Gruppe.
Auf kleinem Schirm:Zeilenhöhe ~24px; die ganze Beschriftung ist Trefferfläche.
Ersetzt.nk-check
<nk-radio> Radio
Gleiche Optik wie nk-check mit rundem Mark. Radios mit gleichem name im selben Tree und Formular bilden eine Gruppe – auch über Shadow-Grenzen, was native Radios nicht können. Ein Tab-Stop pro Gruppe; Pfeiltasten wandern, springen um und überspringen deaktivierte. Ein nk-radio-group gibt es bewusst nicht.
Auf kleinem Schirm:210px breit; der native Griff ist plattformseitig touch-tauglich.
Ersetzt.nk-slider.nk-slider-value
<nk-field> Feldzeile
Die Einstellungszeile: Label und Beschreibung links, Control rechts. Ins Default-Slot gehört ein beliebiges Control – nk-input, nk-switch, nk-select. stacked setzt das Label über ein vollbreites Control (Textareas, lange Beschreibungen) und setzt wide am Control selbst; compact verkleinert das Label auf 12px tertiären Text. In nk-fields sind beide Standard.
Welle 1
Anzeigename
Erscheint neben deinen Kommentaren.
E-Mail-Benachrichtigungen
Kurzprofil
<nk-fieldlabel="Anzeigename" desc="Erscheint neben deinen Kommentaren.">
<nk-inputvalue="Ada Lovelace"></nk-input>
</nk-field>
<nk-fieldlabel="E-Mail-Benachrichtigungen">
<nk-switch checked></nk-switch>
</nk-field>
<nk-fieldlabel="Kurzprofil" stacked>
<nk-textarearows="2" placeholder="Ein Satz über dich"></nk-textarea>
</nk-field>
Mehrere kurze Felder in einer Zeile: ein Raster aus minmax(150px, 1fr)-Spalten, das umbricht, wie es die Breite erlaubt. Jedes nk-field darin rendert sich gestapelt und kompakt – ein 12px-Label über einem vollbreiten Control –, damit nichts kollidiert.
Die Felder teilen die Zeile, statt 150px-Spalten zu halten – zwei Felder in einem breiten Dialog sind zwei Hälften.
Slots
Slot
Beschreibung
(default)
nk-field-Kinder.
Events
keine
Auf kleinem Schirm:Bricht von selbst auf ein oder zwei Spalten um; kein Breakpoint nötig.
Ersetzt.nk-fields.fit
Inhalts-Elemente
Welle 1
<nk-tag> Tag
Die Select-Option, wie Notion sie zeichnet, in ihren neun Farben. Die Farb-Modifikator-Klasse wird zum color-Attribut; ohne ist es der graue Tag. Jedes Paar ist pro Theme abgestimmt.
Welle 1
Nicht begonnenArchivGeplantReviewErledigtIn ArbeitDesignIdeeBlockiert
Nicht begonnenArchivGeplantReviewErledigtIn ArbeitDesignIdeeBlockiert
Ein 60px-Balken mit optionalem Label. value/max setzen die Füllung; der Balken trägt role="progressbar". wide füllt seine Zeile und bleibt in einer Flex-Spalte – einem Panel – ein 6px-Balken. Mit label bilden Balken und Label eine .nk-progress-row: Das Label steht neben dem Balken, auf seiner Mitte, auch in einem Panel, wo der Host – display: contents – sie sonst untereinander stellen würde.
Ein Gedanke, der nicht untergehen darf. Das Icon kommt aus dem icon-Attribut oder einem slot="icon"-Knoten – der Knoten selbst, nie verpackt.
Welle 1
Core idea: Ein Callout trägt einen Gedanken, der nicht untergehen darf.
💡
Core idea: Ein Callout trägt einen Gedanken, der nicht untergehen darf.
<nk-callouticon="💡"><b>Core idea:</b> Ein Callout trägt einen Gedanken, der nicht untergehen darf.</nk-callout>
<divclass="nk-callout"><spanclass="c-icon">💡</span><div><b>Core idea:</b> Ein Callout trägt einen Gedanken, der nicht untergehen darf.</div></div>
Attribute
Attribut
Typ
Standard
Beschreibung
icon
string
💡
Emoji- oder Text-Icon.
Slots
Slot
Beschreibung
(default)
Inhalt.
icon
Icon-Knoten (z. B. <span slot="icon">📌</span>).
Events
keine
Auf kleinem Schirm:Unverändert; bricht mit dem Text um.
Ersetzt.nk-callout.c-icon
<nk-bookmark> Bookmark
Notions Link-Block, gefüllt aus dem, was man über die Seite weiß – og:title, og:description, og:image: Titel, zwei Zeilen Beschreibung und die Adresse mit ihrem Icon links, das Bild rechts in einem Drittel, höchstens 240px. title ist die Überschrift, nie ein Tooltip; ohne ihn steht der Hostname. url zeigt eine andere Adresse als href. Öffnet in einem neuen Tab, außer target sagt anderes; ein Teil ohne Wert entfällt.
<divstyle="max-width:600px"><nk-bookmarkhref="https://notionkit.jungherz.com" title="NotionKit – der ruhige Workspace-Look als CSS" desc="NotionKit ist eine reine CSS-Komponentenbibliothek im Notion-Look: Sidebar, Seitenbaum, Dokument-Shell, Datenbank-Views, Einstellungen und KI-Flächen." favicon="/favicon.svg" cover="/covers/notionkit-og.jpg"></nk-bookmark></div>
<divstyle="max-width:600px"><aclass="nk-bookmark" href="https://notionkit.jungherz.com" target="_blank" rel="noopener"><spanclass="bm-text"><spanclass="bm-title">NotionKit – der ruhige Workspace-Look als CSS</span><spanclass="bm-desc">NotionKit ist eine reine CSS-Komponentenbibliothek im Notion-Look: Sidebar, Seitenbaum, Dokument-Shell, Datenbank-Views, Einstellungen und KI-Flächen.</span><spanclass="bm-url"><imgclass="bm-favicon" src="/favicon.svg" alt=""><span>https://notionkit.jungherz.com</span></span></span><spanclass="bm-cover"><imgsrc="/covers/notionkit-og.jpg" alt=""></span></a></div>
Attribute
Attribut
Typ
Standard
Beschreibung
href
URL
–
Der Link.
title
string
–
Titel – og:title.
desc
string
–
Beschreibung, zwei Zeilen – og:description.
favicon
URL
–
Das Icon der Seite, 16px.
cover
URL
–
Vorschaubild – og:image.
url
string
–
Die angezeigte Adresse (Standard: href).
target
string
_blank
Link-Ziel.
Slots
keine
Events
Event
detail
Beschreibung
click
(native)
Der Link ist ein einfaches <a>.
Properties:titlehref
Auf kleinem Schirm:Das Bild behält sein Drittel und wird mittig beschnitten; Titel und Adresse enden mit Auslassungspunkten.
Eine Abschnittsüberschrift. level wählt das echte Heading-Element (h1–h4), damit die Dokumentstruktur stimmt.
Welle 1
Abschnittsüberschrift
Abschnittsüberschrift
<nk-heading>Abschnittsüberschrift</nk-heading>
<h2class="nk-heading">Abschnittsüberschrift</h2>
Attribute
Attribut
Typ
Standard
Beschreibung
level
1 | 2 | 3 | 4
2
Überschriften-Ebene.
Slots
Slot
Beschreibung
(default)
Text.
Events
keine
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-heading
<nk-toggle> Toggle-Block
Ein <details>-Block. Die Summary wird im Element gerendert (ihr Marker ist ein Pseudo-Element und auf geslottetem Inhalt nicht stylbar); der Inhalt wird geslottet.
Welle 1
Hier steht der eingeklappte Inhalt.
Details
Hier steht der eingeklappte Inhalt.
<nk-togglelabel="Details" open>Hier steht der eingeklappte Inhalt.</nk-toggle>
<detailsclass="nk-toggle" open><summary>Details</summary><divclass="toggle-body">Hier steht der eingeklappte Inhalt.</div></details>
Attribute
Attribut
Typ
Standard
Beschreibung
label
string
–
Summary-Text.
open
boolean
–
Aufgeklappt, in beide Richtungen gespiegelt.
Slots
Slot
Beschreibung
(default)
Eingeklappter Inhalt.
label
Formatierte Summary.
Events
Event
detail
Beschreibung
nk-toggle
{ open }
Beim Auf-/Zuklappen.
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-toggle.toggle-body
<nk-todo> To-do
Checkbox-Zeile, durchgestrichen wenn erledigt. Formular-fähig wie nk-check.
Vorformatierter Block mit Sprach-Badge. Whitespace bleibt wie geschrieben; < als < maskieren. Mit highlight werden HTML-Tags und -Attribute eingefärbt.
Auf kleinem Schirm:Scrollt horizontal statt umzubrechen.
Ersetzt.nk-code.lang.tag.attr
<nk-quote> Zitat
Ein Blockzitat mit optionaler Quellenzeile.
Welle 1
Die beste Oberfläche ist die, die aus dem Weg geht.
Die beste Oberfläche ist die, die aus dem Weg geht.Unbekannt
<nk-quotecite="Unbekannt">Die beste Oberfläche ist die, die aus dem Weg geht.</nk-quote>
<blockquoteclass="nk-quote">Die beste Oberfläche ist die, die aus dem Weg geht.<citeclass="q-cite">Unbekannt</cite></blockquote>
Attribute
Attribut
Typ
Standard
Beschreibung
cite
string
–
Quellenangabe.
Slots
Slot
Beschreibung
(default)
Zitattext.
Events
keine
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-quote.q-cite
App-Gerüst & Navigation
Welle 2
<nk-app> App-Shell
Das äußerste Element einer Workspace-App: eine flex-Zeile über die volle Höhe mit dem Sidebar-Slot links und main.nk-main rechts. Alles im Default-Slot – nk-topbar, nk-page – wird Flex-Kind der Hauptspalte.
Die Hauptspalte macht dem Side Peek Platz – <nk-peek inset> setzt es, solange er offen ist.
Slots
Slot
Beschreibung
sidebar
Eine nk-sidebar.
(default)
Topbar, Seite – die Hauptspalte.
Events
keine
Auf kleinem Schirm:Unter 860px ist die Sidebar verborgen; als Schublade öffnen mit sidebar.open = true.
Ersetzt.nk-app.nk-main.peek-inset
<nk-sidebar> Sidebar
Die linke Leiste: Workspace-Slot oben, ein scrollender Default-Slot für den Baum, ein fixierter Footer-Slot. Footer-Einträge bekommen automatisch compact (26px-Zeilen). Der Host ist display: contents, das aside also direktes Flex-Kind der App – wie im Klassen-Markup. collapsible ergänzt Notions « neben der Workspace-Zeile, sichtbar, solange der Zeiger über der Sidebar ist: Auf dem Desktop klappt es die Sidebar ein – sie gleitet hinaus, die Hauptspalte nimmt die Breite, nichts darin nimmt Fokus –, und <nk-btn variant="sidebar"> in der Topbar erscheint und holt sie zurück; ⌘\ oder Strg+\ schaltet um. collapsed ist der Zustand, nk-collapse der Moment, ihn zu speichern.
Auf kleinem Schirm:Unter 860px verborgen. open zeigt sie als Schublade über der Seite mit Scrim – NotionKits eigene Regeln seit 1.7.0 (.nk-sidebar.open, .nk-sidebar-backdrop), dieselben wie im Klassen-Markup; <nk-btn variant="sidebar"> in der Topbar ist das ☰, das sie öffnet. Escape und der Scrim schließen sie. Die Schublade gleitet in 240ms herein, der Scrim blendet ein, das Schließen läuft rückwärts – nur CSS (transition-behavior: allow-discrete + @starting-style; ältere Browser schalten hart, reduzierte Bewegung springt). Im Querformat wächst die Schublade um den linken Safe-Area-Inset, ihre Zeilen weichen der Dynamic Island aus.
Die Zeile ganz oben in der Sidebar. Ein Klick schaltet open und zeigt den Inhalt des menu-Slots darunter (ein nk-menu ab Welle 4); Klick außerhalb und Escape schließen.
Container für nk-tree-items: hält genau einen Eintrag active (hört nk-select in jeder Tiefe), gibt dem Baum einen Tab-Stop mit Pfeiltasten-Navigation (↑↓ bewegen, → klappt auf oder steigt ein, ← klappt zu oder steigt aus, Home/End) und rendert Einträge aus tree.data. tree.value ist nur lesbar – programmatisch wählen mit item.select() oder dem active-Attribut. Abschnittsbeschriftungen dürfen zwischen den Einträgen stehen; ihr + feuert nk-action { action: 'add' } ohne Wert.
Auf kleinem Schirm:Zeilen sind 28px; in einer Touch-Schublade die Trefferfläche selbst vergrößern.
Ersetzt
<nk-tree-item> Baum-Eintrag
Eine Zeile des Seitenbaums – samt Kinder-Box. Textinhalt ist das Label, verschachtelte nk-tree-items sind die Kinder (nur dann erscheint der Pfeil), slot="icon" und slot="end" landen dort. Hover-Aktionen +/⋯ melden sich über nk-action; ein Klick feuert nk-select (abbrechbar). Außerhalb eines nk-tree (Sidebar-Footer) setzt sich ein Eintrag beim Klick selbst active, sofern das Event nicht abgebrochen wird.
Die 44px-Leiste über der Seite: Breadcrumb im Default-Slot, Buttons im actions-Slot (rechtsbündig). Dort nk-btn variant="topbar" / "share" und nk-theme-toggle verwenden, für reinen Text wie „Bearbeitet vor 2 Min.“ <span class="nk-topbar-meta">.
Welle 2
📊 Projektübersicht🚀 NotionKit MVPZuletzt bearbeitet vor 2 Min.Teilen⭐
Auf kleinem Schirm:Unter 860px bleibt nur der letzte Crumb und endet mit Auslassungspunkten, nk-topbar-meta wird ausgeblendet, die Aktionen bleiben einzeilig – wie in Notions Mobil-App.
Als Kinder einfache <span> oder <a>; sie werden mit Trennern in die Leiste geklont, das letzte (oder das Kind mit current-Attribut) ist das aktuelle. Textänderungen sowie neue oder entfernte Kinder werden automatisch übernommen (refresh() nur für das, was der Observer nicht sieht). Ein Klick feuert nk-select und reicht den Klick an das Original weiter – Links navigieren genau einmal.
Crumb-Kinder (nur direkte Kinder, ohne slot-Attribut).
Events
Event
detail
Beschreibung
nk-select
{ index, value, label, href, current }
Crumb geklickt; preventDefault() unterbindet den weitergereichten Klick.
Methoden:refresh()
Auf kleinem Schirm:Bleibt einzeilig; Einträge kurz halten.
Ersetzt.nk-breadcrumb.crumb.sep.current
<nk-theme-toggle> Theme-Umschalter
Der ☀️/🌙-Button. Schaltet data-theme auf <html>, merkt sich die Wahl in localStorage, wendet beim ersten Connect eine gespeicherte oder die System-Präferenz an, wenn <html> noch kein Theme trägt, und akzeptiert postMessage({ nkTheme }) einer Elternseite. apply(mode) tut alles, was ein Klick tut: setzen, merken, nk-change feuern. modes="auto light dark" ergänzt einen dritten Zustand: auto folgt prefers-color-scheme, auch während die Seite offen ist, und ist, was kein gespeicherter Wert bedeutet – so wirkt das Inline-Skript vor dem ersten Paint weiter, und eine ohne modes getroffene Wahl gilt weiter. Ein Klick geht dann von auto in das Theme, das nicht zu sehen ist, dann in das andere, dann zurück zu auto, jeder Klick bis auf den letzten ändert also sichtbar etwas. Die Glyphe zeigt den Modus (nk-theme-glyph, für auto Sonne und Mond diagonal) statt des nächsten Themes, der Titel nennt Modus und nächsten Schritt, und die Wahl aus einem anderen Tab kommt über das storage-Ereignis an. Zwei Zustände bleiben die Vorgabe, dort ändert sich an diesem Element nichts.
Modus gesetzt; theme ist das Sichtbare (ohne auto sind beide das Theme).
Properties:valuethememodemodes
Methoden:apply(mode)nextMode()themeFor(mode)
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-theme-toggle.nk-theme-glyph
<nk-tab-bar> Tab-Bar (mobil)
Der daumenfreundliche Zwilling der Sidebar für Telefone und installierte PWAs. Als letztes Kind von nk-app landet sie in der Hauptspalte unter der scrollenden Seite – sie bewegt sich nie, ein unteres Padding ist nirgends nötig. Hält das nk-tab-bar-item aktiv, dessen Wert value ist (hört nk-select); ein drawer-Eintrag öffnet stattdessen die Sidebar. Ein Wert, den kein Eintrag hat – eine Seite ohne eigenen Tab, aus der Schublade geöffnet –, markiert den drawer-Eintrag, wie iOS „Mehr“ markiert; ohne ihn ist keiner aktiv. Braucht NotionKit CSS 1.2.0.
Aktiver Wert (Standard: Eintrag mit active, sonst der erste); ein Wert, den kein Eintrag hat, markiert den drawer-Eintrag.
always
boolean
–
In jeder Breite sichtbar, nicht nur unter 860px.
fixed
boolean
–
An den unteren Viewport-Rand geheftet statt in der Spalte – für Standalone-PWAs; ein Platzhalter hält ihre Höhe (--nk-tab-bar-height + Safe-Area) im Fluss frei.
floating
boolean
–
Eine fixierte Kapsel mit runden Ecken statt der vollbreiten Leiste.
label
string
–
aria-label des nav.
Slots
Slot
Beschreibung
(default)
nk-tab-bar-item-Kinder, bis zu fünf.
Events
Event
detail
Beschreibung
nk-change
{ value }
Aktiver Eintrag gewechselt.
nk-select
{ value, label, href, item, drawer }
Bubbelt vom getippten Eintrag; abbrechbar.
Properties:valueitems
Auf kleinem Schirm:Hier ist ihr Platz: über 860px verborgen (dort ist die Sidebar die Navigation), darunter sichtbar. always zeigt sie in jeder Breite – Vorschauen, Telefon-Rahmen. Das untere Padding ist das Größere aus 6px und env(safe-area-inset-bottom); im Querformat wächst das seitliche Padding auf die linken/rechten Insets.
Ein Ziel von nk-tab-bar: ein Icon über einer kurzen Beschriftung. Ein Tipp feuert nk-select (abbrechbar) und setzt dann den value der Bar; mit href navigiert er danach. drawer macht ihn zum „Mehr“-Eintrag, der die nächste nk-sidebar als Schublade öffnet und nie aktiv wird. Alleinstehend schaltet er sein eigenes active.
Öffnet die Sidebar-Schublade, statt aktiv zu werden.
disabled
boolean
–
Nicht wählbar.
Slots
Slot
Beschreibung
(default)
Beschriftung.
icon
Icon-Knoten statt des Attributs.
Events
Event
detail
Beschreibung
nk-select
{ value, label, href, item, drawer }
Getippt; abbrechbar.
Methoden:select()focus()
Auf kleinem Schirm:Für den Daumen gemacht: 20px-Icon, 10,5px-Beschriftung, die ganze Spalte ist Trefferfläche.
Ersetzt.nk-tab-bar-item.icon.label.active
Seiten-Shell & Bausteine
Welle 3
<nk-page> Seite
Die Dokumentspalte: scrollender Wrapper, optionales Cover, die 760px-Seite mit 64px Seitenabstand und das Seiten-Icon (hier gerendert, weil sein Slot-Zwilling am Elternelement hängt). narrow lässt den Scroll-Wrapper weg, wenn die Seite selbst das Dokument ist. Mit Cover überlappt das Icon dessen Unterkante; ein Cover ohne Icon lässt der Seite ihren oberen Abstand, der Titel stößt also nie an das Bild.
Welle 3
<divstyle="display:flex;flex-direction:column;height:100%"><nk-pageicon="🚀" cover>
<nk-page-title>NotionKit MVP</nk-page-title>
<nk-page-actions><span>👤 Marcel Karas</span><span>📅 Erstellt am 12. Mai 2026</span><span>🏷️ <nk-tagcolor="purple">Designsystem</nk-tag></span></nk-page-actions>
<pclass="lead">Eine ruhige, dokumentzentrierte Workspace-App – nur aus Elementen gebaut.</p>
</nk-page></div>
<divstyle="display:flex;flex-direction:column;height:100%"><divclass="nk-page-scroll"><divclass="nk-cover"></div><divclass="nk-page">
<divclass="nk-page-icon">🚀</div>
<h1class="nk-page-title">NotionKit MVP</h1>
<divclass="nk-page-meta"><span>👤 Marcel Karas</span><span>📅 Erstellt am 12. Mai 2026</span><span>🏷️ <spanclass="nk-tag purple">Designsystem</span></span></div>
<pclass="lead">Eine ruhige, dokumentzentrierte Workspace-App – nur aus Elementen gebaut.</p>
</div></div></div>
Attribute
Attribut
Typ
Standard
Beschreibung
icon
string
–
Seiten-Emoji; Klick feuert nk-action.
full
boolean
–
Seitenoption „Volle Breite“: Die Spalte füllt das Fenster, statt bei 760px zu enden.
Zeigt den Cover-Streifen; das Icon überlappt dann dessen Unterkante und die Seite verliert ihr oberes Padding (der covered-Zustand des Stylesheets, auch bei geslottetem nk-page-cover). Ohne Cover sitzt das Icon in 24px oberem Padding, ganz sichtbar.
narrow
boolean
–
Ohne Scroll-Wrapper (Landing-/Doku-Seite).
Slots
Slot
Beschreibung
(default)
Titel, Meta, Blöcke – ein <p class="lead"> wird zum Vorspann.
cover
Ein nk-page-cover (statt des cover-Attributs).
icon
Eigener Icon-Knoten.
Events
Event
detail
Beschreibung
nk-action
{ action: 'icon', value }
Icon geklickt (Emoji-Picker öffnen).
Auf kleinem Schirm:Seitenabstand sinkt unter 860px auf 24px.
Das Cover-Band, so hoch wie das Token --nk-cover-height (200px) – auf :root oder am Element für ein einzelnes Cover: style="--nk-cover-height: clamp(200px, 30vh, 300px)" kommt Notions 30vh nahe. Ohne src der Token-Gradient, mit src ein Bild – ein <img> im Band, beschnitten statt verzerrt. position verschiebt den Ausschnitt wie Notions „Neu positionieren“.
Auf kleinem Schirm:Unverändert; lange Titel brechen um.
Ersetzt.nk-page-title
<nk-page-actions> Seiten-Metazeile
Die ruhige Zeile unter dem Titel: Besitzer, Datum, Tags – beliebiger Inline-Inhalt mit 16px Abstand.
Welle 3
👤 Marcel Karas📅 Erstellt am 12. Mai 2026🏷️ Designsystem
👤 Marcel Karas📅 Erstellt am 12. Mai 2026🏷️ Designsystem
<nk-page-actions><span>👤 Marcel Karas</span><span>📅 Erstellt am 12. Mai 2026</span><span>🏷️ <nk-tagcolor="purple">Designsystem</nk-tag></span></nk-page-actions>
<divclass="nk-page-meta"><span>👤 Marcel Karas</span><span>📅 Erstellt am 12. Mai 2026</span><span>🏷️ <spanclass="nk-tag purple">Designsystem</span></span></div>
Attribute
keine
Slots
Slot
Beschreibung
(default)
Meta-Einträge.
Events
keine
Auf kleinem Schirm:Bricht natürlich um.
Ersetzt.nk-page-meta
<nk-props> Seiteneigenschaften
Die Eigenschaften unter dem Titel einer Datenbankseite, das Muster, für das Notion bekannt ist: eine Liste von nk-prop-Zeilen. Die Zeilen sind Hosts mit display: contents und erscheinen deshalb als Zeilen dieser Liste – ohne eigenes Markup drumherum. flush nimmt den Außenabstand für den Fluss unter einem Titel weg, für eine Liste in einem Panel oder einer Flex-Spalte.
Welle 3
In ArbeitALAda Lovelace2. Juni 2026DesignsystemCSS
<dlclass="nk-props" style="max-width:520px">
<divclass="nk-prop"><dtclass="p-name"><spanclass="p-icon">◉</span>Status</dt><ddclass="p-value"><spanclass="nk-tag blue">In Arbeit</span></dd></div>
<divclass="nk-prop"><dtclass="p-name"><spanclass="p-icon">👤</span>Verantwortlich</dt><ddclass="p-value"><spanclass="nk-avatar small purple">AL</span>Ada Lovelace</dd></div>
<divclass="nk-prop"><dtclass="p-name"><spanclass="p-icon">📅</span>Fällig</dt><ddclass="p-value">2. Juni 2026</dd></div>
<divclass="nk-prop"><dtclass="p-name"><spanclass="p-icon">🏷️</span>Tags</dt><ddclass="p-value"><spanclass="nk-tag purple">Designsystem</span><spanclass="nk-tag">CSS</span></dd></div>
<divclass="nk-prop"><dtclass="p-name"><spanclass="p-icon">▰</span>Fortschritt</dt><ddclass="p-value"><spanclass="nk-progress wide"><istyle="width:65%"></i></span><spanclass="nk-progress-label">65 %</span></dd></div>
</dl>
Attribute
Attribut
Typ
Standard
Beschreibung
flush
boolean
–
Kein Außenabstand.
Slots
Slot
Beschreibung
(default)
nk-prop-Kinder.
Events
keine
Auf kleinem Schirm:Unter 860px stapelt sich jede Eigenschaft: der Name über seinem Wert. In einer Spalte unter 380px rutscht der Wert ebenfalls unter seinen Namen.
Ersetzt.nk-props.flush
<nk-prop> Seiteneigenschaft
Eine Eigenschaft: der Name mit seinem Typ-Icon in einer 160px-Spalte, daneben der Wert, 34px hoch mit Hover-Hauch auf beiden Hälften. Der Wert ist der Inhalt des Elements – Tags, ein Avatar mit Namen, ein Datum, <nk-progress wide>. Ein Klick feuert nk-action mit der getroffenen Hälfte – der Moment, in dem Notion den Editor der Eigenschaft öffnet. text lässt einen Wert, der Text ist – ein Satz, eine Adresse, ein Modellname mit Etikett –, als Text fließen, statt seine Teile untereinander zu setzen. Der Wert behält mindestens 220px: In einer Spalte unter 380px rutscht er unter seinen Namen.
Welle 3
2. Juni 2026support+design@notionkit.example.com · Bestätigt
📅Fällig
2. Juni 2026
✉️Adresse
support+design@notionkit.example.com · Bestätigt
<nk-propsstyle="max-width:520px"><nk-proplabel="Fällig" icon="📅">2. Juni 2026</nk-prop><nk-proplabel="Adresse" icon="✉️" text>support+design@notionkit.example.com · <nk-tagcolor="green">Bestätigt</nk-tag></nk-prop></nk-props>
<dlclass="nk-props" style="max-width:520px"><divclass="nk-prop"><dtclass="p-name"><spanclass="p-icon">📅</span>Fällig</dt><ddclass="p-value">2. Juni 2026</dd></div><divclass="nk-prop"><dtclass="p-name"><spanclass="p-icon">✉️</span>Adresse</dt><ddclass="p-value text">support+design@notionkit.example.com · <spanclass="nk-tag green">Bestätigt</span></dd></div></dl>
Attribute
Attribut
Typ
Standard
Beschreibung
label
string
–
Name der Eigenschaft.
icon
string
–
Typ-Icon.
text
boolean
–
Der Wert fließt als Text.
Slots
Slot
Beschreibung
(default)
Der Wert.
icon
Icon-Knoten.
Events
Event
detail
Beschreibung
nk-action
{ action: 'name' | 'value', label }
Name oder Wert geklickt.
Auf kleinem Schirm:Stapelt sich unter 860px und in einer Spalte unter 380px.
Ersetzt.nk-prop.p-name.p-icon.p-value.text
<nk-panels> Panels
Ein Raster aus nk-panels: Spalten von mindestens 200px, die sich die Zeile teilen. Die Panels sind Hosts mit display: contents und damit Zellen dieses Rasters. flush nimmt den Außenabstand weg, für ein Raster in einer Flex-Spalte mit eigenem Abstand.
Welle 3
vor 2 Min.
Gestern
Drei Seiten haben sich geändert, ein Kommentar wartet auf Antwort.
Drei Seiten haben sich geändert, ein Kommentar wartet auf Antwort.
<nk-panels>
<nk-panelhref="#" cover="/covers/aurora.svg" icon="🚀" title="NotionKit MVP"><p>vor 2 Min.</p></nk-panel>
<nk-panelhref="#" cover="/covers/dunes.svg" icon="📚" title="Wissensbasis"><p>Gestern</p></nk-panel>
<nk-paneltitle="Wochenrückblick"><p>Drei Seiten haben sich geändert, ein Kommentar wartet auf Antwort.</p></nk-panel>
</nk-panels>
<divclass="nk-panels">
<aclass="nk-panel" href="#"><divclass="nk-cover"><imgsrc="/covers/aurora.svg" alt=""></div><divclass="nk-page-icon">🚀</div><h3>NotionKit MVP</h3><p>vor 2 Min.</p></a>
<aclass="nk-panel" href="#"><divclass="nk-cover"><imgsrc="/covers/dunes.svg" alt=""></div><divclass="nk-page-icon">📚</div><h3>Wissensbasis</h3><p>Gestern</p></a>
<divclass="nk-panel"><h3>Wochenrückblick</h3><p>Drei Seiten haben sich geändert, ein Kommentar wartet auf Antwort.</p></div>
</div>
Attribute
Attribut
Typ
Standard
Beschreibung
flush
boolean
–
Kein Außenabstand.
Slots
Slot
Beschreibung
(default)
nk-panel-Kinder.
Events
keine
Auf kleinem Schirm:Fällt auf eine Spalte, sobald zwei 200px-Spalten nicht mehr passen.
Ersetzt.nk-panels.flush
<nk-panel> Panel
Eine neutrale Fläche für Inhalt, der zusammengehört – die Karten auf Notions Startseite, die Kästen in seinen Einstellungen. title ist die Überschrift (nie ein Tooltip); der Inhalt kommt als <p>s und Blöcke hinein. cover ohne Wert zeichnet das Verlaufsband, mit URL ein Bild; icon überlappt das Cover wie auf einer Seite – eine Seitenkachel. Mit href ist das Panel ein Link. slot="end" sitzt am rechten Rand des Titels – ein Zustand als Tag, ein Button –, wie Notions Einstellungskästen eine Verbindung zeigen, und rutscht unter den Titel, wo beides nicht nebeneinander passt. Das Cover ist --nk-panel-cover-height hoch (64px) – auf :root oder an einem Panel setzen. Inputs, Selects und Kopierfelder darin ragen nie über den Rand des Panels, wie schmal die Kachel auch ist.
Welle 3
vor 2 Min.
In Arbeit
Drei Seiten haben sich geändert, ein Kommentar wartet auf Antwort.
Drei Seiten haben sich geändert, ein Kommentar wartet auf Antwort.
<divstyle="max-width:360px;display:grid;gap:12px"><nk-panelhref="#" cover icon="🚀" title="NotionKit MVP"><p>vor 2 Min.</p></nk-panel>
<nk-paneltitle="Wochenrückblick"><nk-tagslot="end" color="blue">In Arbeit</nk-tag><p>Drei Seiten haben sich geändert, ein Kommentar wartet auf Antwort.</p></nk-panel></div>
<divstyle="max-width:360px;display:grid;gap:12px"><aclass="nk-panel" href="#"><divclass="nk-cover"></div><divclass="nk-page-icon">🚀</div><h3>NotionKit MVP</h3><p>vor 2 Min.</p></a>
<divclass="nk-panel"><divclass="p-head"><h3>Wochenrückblick</h3><spanclass="p-end"><spanclass="nk-tag blue">In Arbeit</span></span></div><p>Drei Seiten haben sich geändert, ein Kommentar wartet auf Antwort.</p></div></div>
Attribute
Attribut
Typ
Standard
Beschreibung
title
string
–
Überschrift.
icon
string
–
Seiten-Icon.
cover
URL | empty
–
Cover-Band: leer für den Verlauf, eine URL für ein Bild.
href
URL
–
Macht das Panel zum Link.
target
string
–
Link-Ziel.
Slots
Slot
Beschreibung
(default)
Inhalt: <p>, ein Prosa-Block, ein Fortschrittsbalken.
end
Neben dem Titel, an seinem rechten Rand: ein Tag, ein Button.
Events
keine
Auf kleinem Schirm:Nimmt die Breite seiner Rasterzelle.
Die optische Hülle für Editor-Inhalt: Hover-Fläche, Fokusring, Drop-Target-Linie, optionaler Drag-Griff. Verhaltensneutral – den Editor ins Light DOM mounten; nk-editor (v1.1) übernimmt das für TipTap.
Welle 3
Hier steht Block-Inhalt – klicken zum Fokussieren.
⠿
Hier steht Block-Inhalt – klicken zum Fokussieren.
<nk-block-host handle><pstyle="margin:0" contenteditable="true">Hier steht Block-Inhalt – klicken zum Fokussieren.</p></nk-block-host>
<divclass="nk-block-host"><spanclass="nk-block-handle">⠿</span><pstyle="margin:0" contenteditable="true">Hier steht Block-Inhalt – klicken zum Fokussieren.</p></div>
Attribute
Attribut
Typ
Standard
Beschreibung
handle
boolean
–
Drag-Griff ⠿ rendern (bei Hover sichtbar).
drop-target
boolean
–
Drop-Indikator-Linie über dem Block.
Slots
Slot
Beschreibung
(default)
Block-Inhalt / Editor-Wurzel.
Events
keine
Auf kleinem Schirm:Der Griff sitzt 26px links der Spalte und ist ohne Platz verborgen.
Eine getönte Hinweiszeile. Der Farb-Modifikator wird variant; die Aktion – ein <button> – kommt in slot="action" und sitzt am rechten Rand.
Welle 3
ℹ️ Diese Seite ist eine Komponenten-Vorschau – jedes Element folgt denselben Design-Tokens.⚠️ Die Datenbank „Projektübersicht“ hat 2 überfällige Einträge.✓ Alle Änderungen wurden synchronisiert.⛔ Die Verbindung zu Notion ist abgerissen.
ℹ️ Diese Seite ist eine Komponenten-Vorschau – jedes Element folgt denselben Design-Tokens.
⚠️ Die Datenbank „Projektübersicht“ hat 2 überfällige Einträge.
✓ Alle Änderungen wurden synchronisiert.
⛔ Die Verbindung zu Notion ist abgerissen.
<nk-bannervariant="info">ℹ️ <span>Diese Seite ist eine <b>Komponenten-Vorschau</b> – jedes Element folgt denselben Design-Tokens.</span><buttonslot="action" type="button">Palette öffnen</button></nk-banner>
<nk-bannervariant="warning">⚠️ <span>Die Datenbank „Projektübersicht“ hat 2 überfällige Einträge.</span><buttonslot="action" type="button">Ansehen</button></nk-banner>
<nk-bannervariant="success">✓ <span>Alle Änderungen wurden synchronisiert.</span></nk-banner>
<nk-bannervariant="danger">⛔ <span>Die Verbindung zu Notion ist abgerissen.</span></nk-banner>
<divclass="nk-banner info">ℹ️ <span>Diese Seite ist eine <b>Komponenten-Vorschau</b> – jedes Element folgt denselben Design-Tokens.</span><buttonclass="b-action" type="button">Palette öffnen</button></div>
<divclass="nk-banner warning">⚠️ <span>Die Datenbank „Projektübersicht“ hat 2 überfällige Einträge.</span><buttonclass="b-action" type="button">Ansehen</button></div>
<divclass="nk-banner success">✓ <span>Alle Änderungen wurden synchronisiert.</span></div>
<divclass="nk-banner danger">⛔ <span>Die Verbindung zu Notion ist abgerissen.</span></div>
Attribute
Attribut
Typ
Standard
Beschreibung
variant
info | success | warning | danger
–
Tönung.
Slots
Slot
Beschreibung
(default)
Icon und Text.
action
Die Aktion – ein <button>, als unterstrichener Text rechts.
Events
keine
Auf kleinem Schirm:Unter 860px rutscht die Aktion unter den Text, statt ihn in eine schmale Spalte zu drücken.
Gestrichelte Box mit Icon, Titel, Beschreibung und der Aktion, die du hineinslottest.
Welle 3
+ Neuer EintragImportieren
🗂️
Noch keine Einträge
Lege den ersten Eintrag an oder importiere Daten.
<nk-emptyicon="🗂️" title="Noch keine Einträge" desc="Lege den ersten Eintrag an oder importiere Daten."><nk-btnvariant="primary" small>+ Neuer Eintrag</nk-btn><nk-btnvariant="secondary" small>Importieren</nk-btn></nk-empty>
<divclass="nk-empty"><divclass="e-icon">🗂️</div><divclass="e-title">Noch keine Einträge</div><divclass="e-desc">Lege den ersten Eintrag an oder importiere Daten.</div><divclass="e-actions"><buttonclass="nk-btn primary small">+ Neuer Eintrag</button><buttonclass="nk-btn secondary small">Importieren</button></div></div>
Attribute
Attribut
Typ
Standard
Beschreibung
icon
string
–
Emoji.
title
string
–
Titel. Wird einmal gelesen und vom Host genommen, erscheint also nie als Tooltip.
desc
string
–
Beschreibung.
Slots
Slot
Beschreibung
(default)
Handlungsaufforderung – mehrere Knöpfe stehen in einer zentrierten Zeile, 8px auseinander.
icon
Formatiertes Icon.
title
Formatierter Titel.
desc
Formatierte Beschreibung.
Events
keine
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-empty.e-icon.e-title.e-desc.e-actions
<nk-skeleton> Skelett
Schimmernde Platzhalterzeilen. lines rendert mehrere; widths gibt jeder ihre Breite.
Eine Tab-Leiste mit Panels. nk-tab-Kinder sind die Tabs; Elemente mit slot="panel" und passendem data-tab die Panels – die Tabs verbergen per hidden alle bis auf das aktive. Pfeiltasten wechseln. scroll hält viele Tabs in einer Zeile, die seitlich scrollt, ohne sichtbare Scrollleiste, und behält den aktiven Tab im Blick – nach dem ersten Layout, bei jedem Wechsel und wenn sich die Breite der Zeile ändert.
Welle 3
📝 Notizen✅ Aufgaben📎 Dateien
Freie Notizen zum Projekt – Protokolle, Ideen, Entwürfe.
Aufgaben zu diesem Projekt, verknüpft mit der Datenbank.
Angehängte Dateien und Exporte.
📝 Notizen✅ Aufgaben📎 Dateien
Freie Notizen zum Projekt – Protokolle, Ideen, Entwürfe.
<nk-tabsvalue="notes">
<nk-tabvalue="notes">📝 Notizen</nk-tab>
<nk-tabvalue="tasks">✅ Aufgaben</nk-tab>
<nk-tabvalue="files">📎 Dateien</nk-tab>
<divslot="panel" data-tab="notes" class="nk-tab-panel">Freie Notizen zum Projekt – Protokolle, Ideen, Entwürfe.</div>
<divslot="panel" data-tab="tasks" class="nk-tab-panel">Aufgaben zu diesem Projekt, verknüpft mit der Datenbank.</div>
<divslot="panel" data-tab="files" class="nk-tab-panel">Angehängte Dateien und Exporte.</div>
</nk-tabs>
<divclass="nk-tabs">
<spanclass="nk-tab active">📝 Notizen</span>
<spanclass="nk-tab">✅ Aufgaben</span>
<spanclass="nk-tab">📎 Dateien</span>
</div>
<divclass="nk-tab-panel">Freie Notizen zum Projekt – Protokolle, Ideen, Entwürfe.</div>
Attribute
Attribut
Typ
Standard
Beschreibung
value
string
–
Aktiver Tab-Wert (Standard: Tab mit active, sonst der erste).
scroll
boolean
–
Eine Zeile, die seitlich scrollt und den aktiven Tab im Blick hält.
Slots
Slot
Beschreibung
(default)
nk-tab-Kinder.
panel
Panels mit data-tab.
Events
Event
detail
Beschreibung
nk-change
{ value }
Aktiver Tab gewechselt.
nk-select
{ value, label }
Vom geklickten Tab.
Properties:valuescroll
Auf kleinem Schirm:Die Leiste bleibt einzeilig; eine, die länger ist als der Bildschirm, bekommt scroll.
Ersetzt.nk-tabs.nk-tab.active.nk-tab-panel.scroll
<nk-tab> Tab
Ein Tab von nk-tabs. Alleinstehend schaltet er sein eigenes active.
Einfache <button value>-Kinder bleiben im Light DOM (die Slot-Zwillinge des Stylesheets formen sie); das Element bewegt .active, behandelt Pfeiltasten und sendet value mit dem Formular. Mit scroll bleibt die gewählte Option im Blick: nach dem ersten Layout, bei jeder Änderung und wenn sich die Breite der Zeile ändert, scrollt die Zeile – nie die Seite – den kürzesten Weg, auch von rechts nach links.
Auf kleinem Schirm:Standard ist eine Zeile, die fünf Filteroptionen auf dem Telefon sprengen: scroll hält eine wischbare Zeile, begrenzt auf die Elternbreite (Scrollleiste versteckt), wrap bricht um.
Ersetzt.nk-segmented.active.scroll.wrap
<nk-steps> Schritte
Ein kurzer Ablauf – ein Konto verbinden, ein Modell einrichten –, ruhig und vertikal: ein nummerierter Kreis pro Schritt, verbunden durch eine Haarlinie, erledigte Schritte mit Haken auf dem grünen Tag, der aktuelle im Akzent umrandet und mit aria-current="step" markiert. current zählt ab 1; einer hinter dem letzten markiert alle Schritte als erledigt, next() geht weiter. Das Attribut steps ist eine kommagetrennte Liste; die Property nimmt auch { label, desc }-Objekte für eine Zeile unter dem Label. Ein state in so einem Objekt – done, skipped oder open – geht der Reihenfolge vor, für einen Assistenten, der einen Schritt überspringen lässt, während ein späterer erledigt ist; ein übersprungener Schritt zeigt einen gestrichelten Ring um einen Strich. selectable macht jedes Label zum Button: Ein Klick oder Enter feuert nk-select { index, value, step } – index zählt ab 1 wie current – und macht diesen Schritt aktuell, sofern nicht abgebrochen. Ein Schritt mit href zeigt sein Label als Link, mit oder ohne selectable – um ein Kapitel in einem neuen Tab zu öffnen oder seine Adresse zu kopieren. Ein einfacher Klick und Enter feuern dasselbe nk-select; bricht man es ab, bleibt der Browser, für einen eigenen Router. Ein Mittelklick oder einer mit Cmd, Strg, Umschalt oder Alt feuert nichts und tut, was ein Link tut. horizontal setzt die Schritte in eine Zeile über einem Assistenten.
Labels sind Buttons, die zu ihrem Schritt springen.
horizontal
boolean
–
Eine Zeile über einem Assistenten.
Slots
keine
Events
Event
detail
Beschreibung
nk-select
{ index, value, step }
Ein Schritt geklickt (mit selectable, oder sein Link mit einfachem Klick oder Enter); abbrechen, um zu bleiben.
Properties:stepscurrentselectablehorizontal
Methoden:next()select(index)
Auf kleinem Schirm:Vertikale Schritte bleiben, wie sie sind. horizontal behält unter 860px seine Zeile, mit jeder Marke, aber nur dem Label des aktuellen Schritts.
<nk-stats><nk-statlabel="Aktive Seiten" value="128" delta="▲ 12 diese Woche" trend="up"></nk-stat></nk-stats>
<divclass="nk-stats"><divclass="nk-stat"><divclass="s-label">Aktive Seiten</div><divclass="s-value">128</div><divclass="s-delta up">▲ 12 diese Woche</div></div></div>
Attribute
Attribut
Typ
Standard
Beschreibung
label
string
–
Label.
value
string
–
Wert.
delta
string
–
Trendtext.
trend
up | down
–
Delta-Farbe.
Slots
Slot
Beschreibung
label
Formatiertes Label.
value
Formatierter Wert.
delta
Formatiertes Delta (mit class="up" / "down").
Events
keine
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-stat
<nk-avatar-group> Avatar-Gruppe
Überlappende .mini-avatar-Kinder (Light DOM, gestylt durch die Slot-Zwillinge) plus eine „Mehr“-Blase aus dem Attribut. .mini-avatar übergeben, nicht .nk-avatar: Die Dokumentregel von .nk-avatar setzt eigene 24px, und bei geslotteten Knoten gewinnt das Dokument gegen die 26px der Gruppe.
Welle 3
MKSLTW5 Personen haben Zugriff
MKSLTW+2
5 Personen haben Zugriff
<divstyle="display:flex;align-items:center;gap:12px"><nk-avatar-groupmore="+2"><spanclass="mini-avatar" style="background:linear-gradient(135deg,var(--nk-decor-purple),var(--nk-decor-blue))">MK</span><spanclass="mini-avatar" style="background:var(--nk-color-green)">SL</span><spanclass="mini-avatar" style="background:var(--nk-color-orange)">TW</span></nk-avatar-group><spanstyle="font-size:12.5px;color:var(--nk-text-tertiary)">5 Personen haben Zugriff</span></div>
<divstyle="display:flex;align-items:center;gap:12px"><divclass="nk-avatar-group"><spanclass="nk-avatar">MK</span><spanclass="nk-avatar green">SL</span><spanclass="nk-avatar orange">TW</span><spanclass="mini-avatar more">+2</span></div><spanstyle="font-size:12.5px;color:var(--nk-text-tertiary)">5 Personen haben Zugriff</span></div>
Eine Person oder ein Workspace: Initialen, ein Emoji oder ein Foto im Kreis. size small (20px), Standard 24px, large (32px), xlarge (56px); color einer der neun Notion-Namen oder ein beliebiger CSS-Hintergrund, ohne ihn der Avatar-Verlauf; square für ein Workspace-Icon. Ohne Inhalt kommen die Initialen aus name; mit src füllt ein Foto den Kreis und name wird sein Alt-Text. Initialen aus name sind der erste Buchstabe oder die erste Ziffer jedes Worts: „Planer (Dev)“ → PD, „Anna-Lena Groß“ → AG.
<divstyle="display:flex;align-items:center;gap:10px"><spanclass="nk-avatar small blue">TW</span><spanclass="nk-avatar">AL</span><spanclass="nk-avatar green">SL</span><spanclass="nk-avatar large orange">MK</span><spanclass="nk-avatar xlarge purple">AL</span><spanclass="nk-avatar large square">A</span></div>
Attribute
Attribut
Typ
Standard
Beschreibung
size
small | large | xlarge
–
Größe; Standard 24px.
color
colour name | CSS
–
gray, brown, orange, yellow, green, blue, purple, pink, red – oder ein beliebiger CSS-Hintergrund.
square
boolean
–
Ecken statt Kreis.
name
string
–
Initialen, wenn leer; Alt-Text des Fotos.
src
URL
–
Foto.
Slots
Slot
Beschreibung
(default)
Initialen oder ein Emoji.
Events
keine
Auf kleinem Schirm:Unverändert. Eine feste Größe, eine Reihe von Avataren fließt also nie um.
Eine Radio-artige Karte. Karten mit gleichem name bilden eine Gruppe; die gewählte sendet value mit dem Formular.
Welle 3
Mona Pro
Am besten für lange Dokumente und Recherche.
Mona Fast
Schnelle Antworten, geringere Kosten.
<nk-model-cardname="model" value="pro" title="Mona Pro" desc="Am besten für lange Dokumente und Recherche." selected></nk-model-card>
<nk-model-cardname="model" value="fast" title="Mona Fast" desc="Schnelle Antworten, geringere Kosten."></nk-model-card>
<divclass="nk-model-card selected"><divclass="m-radio"></div><div><divclass="m-name">Mona Pro</div><divclass="m-desc">Am besten für lange Dokumente und Recherche.</div></div></div>
<divclass="nk-model-card"><divclass="m-radio"></div><div><divclass="m-name">Mona Fast</div><divclass="m-desc">Schnelle Antworten, geringere Kosten.</div></div></div>
Attribute
Attribut
Typ
Standard
Beschreibung
title
string
–
Namenszeile. Wird einmal gelesen und vom Host genommen, erscheint also nie als Tooltip.
<nk-danger-zonetitle="Gefahrenzone"><nk-fieldlabel="Workspace löschen" desc="Das Löschen des Workspace entfernt alle Seiten."><nk-btnvariant="danger-solid" small>Löschen</nk-btn></nk-field></nk-danger-zone>
<divclass="nk-danger-zone"><divclass="dz-title">Gefahrenzone</div><divclass="nk-field"><div><divclass="f-label">Workspace löschen</div><divclass="f-desc">Das Löschen des Workspace entfernt alle Seiten.</div></div><divclass="f-control"><buttonclass="nk-btn danger-solid small">Löschen</button></div></div></div>
Attribute
Attribut
Typ
Standard
Beschreibung
title
string
–
Rote Überschrift. Wird einmal gelesen und vom Host genommen, erscheint also nie als Tooltip.
Slots
Slot
Beschreibung
(default)
Felder und Buttons.
Events
keine
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-danger-zone.dz-title
<nk-member-list> Mitgliederliste
Zeilen aus nk-member-row; die Liste markiert die letzte Zeile, damit ihr unterer Rand entfällt. Jede Zeile zeigt Avatar (Initialen + color), Name, Mail und ein slot="role"-Control rechts.
Avatar-Farbe: einer der neun Namen (gray … red) oder ein beliebiger CSS-Hintergrund; ohne sie der Avatar-Verlauf.
last
boolean
–
Kein unterer Rand.
Slots
Slot
Beschreibung
role
Control rechts.
avatar
Eigener Avatar.
(default)
Zusatzinhalt.
Events
keine
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-member-row
Overlays
Welle 4
<nk-modal> Einstellungs-Modal
Das Einstellungs-Overlay: Backdrop, ein 960×640-Dialog mit Nav- und Inhaltsspalte. Die Nav-Zeilen rendert das Modal aus label/icon/group der Panes, sodass 27px-Zeilen und die 860px-Icon-Leiste direkt aus dem Stylesheet kommen. Escape und Backdrop schließen; der Fokus wandert hinein und zurück; die Seite dahinter ist scroll-gesperrt und inert. Direkt unter <body> platzieren.
Notions Mobil-Fläche für Menüs, Eigenschaften und mehr – der Telefon-Zwilling des Modals, mit dessen Vertrag: show(), close(), toggle(); Escape und der Backdrop schließen es; der Fokus wandert hinein und zurück; die Seite dahinter ist scroll-gesperrt und inert. Das Panel steigt mit einem Griff von der Unterkante auf, title steht darunter und benennt den Dialog. Zeilen darin sind 40px hoch, eine Daumenhöhe. Eine gewählte Zeile schließt das Sheet nicht – nk-select bubbelt hinaus, die App entscheidet. Für ein Menü, das auf dem Desktop Popover und auf dem Telefon Sheet ist, <nk-menu floating sheet> nehmen. Direkt unter <body> platzieren.
Überschrift unter dem Griff und Name des Dialogs – nie ein Tooltip.
Slots
Slot
Beschreibung
(default)
Der Inhalt: ein nk-tree, Menüeinträge, Felder.
Events
Event
detail
Beschreibung
nk-toggle
{ open }
Geöffnet / geschlossen.
Properties:opentitle
Methoden:show()close()toggle()
Auf kleinem Schirm:Fürs Telefon gemacht: volle Breite, über der Tab-Leiste, unteres Padding aus der Safe Area; der Inhalt scrollt im Sheet. Auf größeren Schirmen höchstens 640px breit, zentriert.
Notions Side Peek: Eine Datenbankzeile öffnet sich am rechten Rand, in voller Höhe, neben der Tabelle, die bedienbar bleibt – keine Abdunklung, nichts inert. Die Leiste trägt » zum Schließen und deine Aktionen (slot="actions"); der Body ist die Seite – nk-page-title (hier 32px), nk-props, eine .nk-prose, nk-comments. show() schiebt es herein und setzt den Fokus hinein; », Escape und ein Klick daneben schließen es, und ein Klick, der show() erneut aufruft – eine andere Zeile –, tauscht nur den Inhalt. Klicks in anderen Overlays lassen es offen. Direkt unter <body> platzieren. resizable gibt ihm Notions Ziehen am linken Rand, inset rückt die Seite zur Seite, statt sie zu überdecken.
Welle 4
<nk-peek open resizable resize-label="Breite ändern" label="Database Table-View">
<nk-btnslot="actions" variant="topbar" aria-label="Als Seite öffnen"><svgviewBox="0 0 24 24" aria-hidden="true"><pathd="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/></svg></nk-btn>
<nk-page-title>🗃️ Database Table-View</nk-page-title>
<nk-props>
<nk-proplabel="Status" icon="◉"><nk-tagcolor="blue">In Arbeit</nk-tag></nk-prop>
<nk-proplabel="Fällig" icon="📅">20.05.2026</nk-prop>
</nk-props>
<divclass="nk-prose"><p>Tabelle, Board und Liste lesen dieselben Zeilen; Filter und Sortierung wirken auf alle drei.</p></div>
</nk-peek>
<divclass="nk-peek-backdrop open"><asideclass="nk-peek" role="dialog" aria-label="Database Table-View">
<divclass="pk-resize" role="separator" aria-orientation="vertical" aria-label="Breite ändern" tabindex="0"></div>
<divclass="pk-bar"><buttonclass="nk-topbar-btn" aria-label="Close"><svgviewBox="0 0 24 24" aria-hidden="true"><pathd="m6 17 5-5-5-5M13 17l5-5-5-5"/></svg></button><buttonclass="nk-topbar-btn" aria-label="Als Seite öffnen"><svgviewBox="0 0 24 24" aria-hidden="true"><pathd="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/></svg></button></div>
<divclass="pk-body">
<h1class="nk-page-title">🗃️ Database Table-View</h1>
<dlclass="nk-props">
<divclass="nk-prop"><dtclass="p-name"><spanclass="p-icon">◉</span>Status</dt><ddclass="p-value"><spanclass="nk-tag blue">In Arbeit</span></dd></div>
<divclass="nk-prop"><dtclass="p-name"><spanclass="p-icon">📅</span>Fällig</dt><ddclass="p-value">20.05.2026</dd></div>
</dl>
<divclass="nk-prose"><p>Tabelle, Board und Liste lesen dieselben Zeilen; Filter und Sortierung wirken auf alle drei.</p></div>
</div>
</aside></div>
Attribute
Attribut
Typ
Standard
Beschreibung
open
boolean
–
Sichtbar.
label
string
–
Der Name des Dialogs – der Titel des Eintrags.
close-label
string
Close · Schließen
Name von ».
resizable
boolean
–
Der linke Rand macht es breiter oder schmaler – Zeiger und Pfeiltasten; die Breite ist das Token --nk-peek-width auf :root.
width
px
560
Setzt die Breite, innerhalb von min und max.
min
px
380
Am schmalsten.
max
px
window − 320
Am breitesten.
resize-label
string
Resize · Breite ändern
Name des Randes.
inset
boolean
–
Solange offen auf dem Desktop, macht die nk-app der Seite Platz, statt darunter zu liegen – für ein Diagramm, dessen Balken sichtbar bleiben müssen.
Slots
Slot
Beschreibung
(default)
Die Seite: Titel, Eigenschaften, Prosa, Kommentare.
actions
Buttons neben » – als Seite öffnen, teilen.
Events
Event
detail
Beschreibung
nk-toggle
{ open }
Geöffnet / geschlossen.
nk-resize
{ width }
Ziehen oder eine Taste hat die Breite geändert – der Moment, sie zu speichern.
Properties:openwidth
Methoden:show()close()toggle()
Auf kleinem Schirm:Unter 860px ein Bottom Sheet über abgedunkelter Seite, Titel in 28px – und dort modal: Die Seite ist inert und scroll-gesperrt, ein Tipp auf die abgedunkelte Seite schließt es.
Eine Frage oder ein kurzes Formular – „In den Papierkorb?“, der Name einer neuen Ansicht, die Verknüpfung zweier Vorgänge – mit dem Vertrag von nk-modal und nk-sheet: show(), close(), toggle(), nk-toggle; Escape – in der Capture-Phase, vor einem Peek, Menü oder Modal dahinter – und der Backdrop schließen ihn; der Fokus wandert hinein, zu einem [autofocus]-Element oder dem ersten Feld oder Button, und zurück; die Seite dahinter ist inert und scroll-gesperrt. Er liegt über Modal und Sheet. title ist die Überschrift, der Default-Slot der Text oder die Felder, slot="actions" die Buttons, der bestätigende zuletzt. Ein Button in slot="actions" mit value schließt ihn mit diesem Wert, einer mit data-close an beliebiger Stelle ebenso – ein anderer Button mit Wert, etwa eine Option von nk-segmented, lässt ihn offen –, ebenso das Absenden eines <form method="dialog"> darin; vor dem Schließen feuert nk-close und lässt sich abbrechen – die Stelle, eine Eingabe zu prüfen. alert für eine Frage, wide (560px) für ein Formular. show(from) gibt den Fokus an from zurück – das ⋯ eines Menüs, das sich geschlossen hat. Direkt unter <body> platzieren. Solange er offen ist, ist die Seite dahinter inert, schwebende Menüs und Datumsauswahlen unter <body> – und Tooltip und Toast – bleiben aber bedienbar, ein Feld im Dialog kann also eines öffnen.
Welle 4
<nk-dialog open alert title="„NotionKit MVP“ in den Papierkorb verschieben?">
Die Seite und ihre Unterseiten lassen sich 30 Tage lang aus dem Papierkorb wiederherstellen.
<nk-btnslot="actions" variant="secondary" value="">Abbrechen</nk-btn>
<nk-btnslot="actions" variant="danger-solid" value="trash">In den Papierkorb</nk-btn>
</nk-dialog>
<divclass="nk-dialog-backdrop open"><divclass="nk-dialog" role="alertdialog" aria-modal="true" aria-label="In den Papierkorb">
<divclass="dl-title">„NotionKit MVP“ in den Papierkorb verschieben?</div>
<divclass="dl-body">Die Seite und ihre Unterseiten lassen sich 30 Tage lang aus dem Papierkorb wiederherstellen.</div>
<divclass="dl-actions"><buttonclass="nk-btn secondary">Abbrechen</button><buttonclass="nk-btn danger-solid">In den Papierkorb</button></div>
</div></div>
Attribute
Attribut
Typ
Standard
Beschreibung
open
boolean
–
Sichtbar.
title
string
–
Überschrift und Name des Dialogs – nie ein Tooltip.
alert
boolean
–
Ein Alertdialog, beschrieben durch seinen Text.
wide
boolean
–
560px statt 440px.
Slots
Slot
Beschreibung
(default)
Der Text oder die Felder.
actions
Die Buttons, rechts; ein value schließt damit.
Events
Event
detail
Beschreibung
nk-close
{ value }
Schließt gleich – abbrechen hält ihn offen.
nk-toggle
{ open }
Geöffnet / geschlossen.
Properties:openreturnValuetitle
Methoden:show(from)close(value)toggle()
Auf kleinem Schirm:Unter 860px ein Bottom Sheet mit Griff, die Buttons über die Breite gestapelt, der bestätigende oben.
Ein Pane des Einstellungs-Modals. label, icon und group speisen die Nav des Modals; title rendert die Pane-Überschrift. Geslottete <h2>/<h3> werden ebenfalls gestylt.
Auf kleinem Schirm:Unter 860px bleibt nur der Avatar.
Ersetzt.nk-settings-user.avatar.u-text.name.mail
<nk-cmdk> Befehlspalette
⌘K. Befüllen mit palette.commands = [{ group, items: [{ id, icon, label, shortcut, keywords, action }] }]; es sucht unscharf über Label und Keywords, behält die Gruppenreihenfolge, bewegt die Auswahl mit ↑↓, wählt mit Enter oder Klick (nk-command plus action des Eintrags) und schließt mit Escape oder Backdrop. Der Hotkey ist mod+k, sofern nicht geändert. Direkt unter <body> platzieren.
Ein 230px-Kontextmenü. Einträge sind nk-menu-items (type="separator" / "label" für den Rest); ↑↓ bewegen, Enter wählt, nk-select bubbelt hoch. In nk-pop oder im Workspace-Umschalter ist es Teil ihrer Fläche. Mit floating ist es ein eigenes Menü über der Seite, NotionKits .nk-pop.floating: menu.show(button) öffnet es unter dem Button, rechte Kanten bündig (align="start": linke Kanten), und es blendet ein wie die Palette. Ein Tipp daneben schließt es und erreicht sonst nichts; Escape und ein gewählter Eintrag schließen es, eine Schalter-Zeile lässt es offen. Per Tastatur geöffnet, wandert der Fokus zum ersten Eintrag und beim Schließen zurück. Direkt unter <body> platzieren, wie die anderen Overlays. Schwebend klappt es nach oben, wo das Fenster unten endet und oben mehr Platz ist, und ein Menü, das länger als der Platz ist, scrollt in sich; in einem nk-modal oder nk-dialog sitzt es ebenfalls richtig und bleibt, daraus geöffnet, bedienbar – ein offener Dialog, ein Modal oder Sheet lässt schwebende Menüs in Ruhe.
Welle 4
SeiteUmbenennenDuplizierenVerschieben nach …Löschen
Auf kleinem Schirm:Mit sheet ist das schwebende Menü unter 860px ein Bottom Sheet – volle Breite, ein Griff, 40px-Zeilen, die Seite abgedunkelt –, egal welche Position show() geschrieben hat: ein Markup, zwei Darstellungen, wie Notions Mobil-App jedes Menü öffnet.
Eine Zeile von nk-menu: Icon, Label, Shortcut; danger für Destruktives. type macht daraus Trenner oder Gruppenlabel oder eine Zeile mit Schalter rechts – „Kleiner Text“ in Notions Seitenmenü: Ein Klick kippt checked und feuert nk-change, das Menü bleibt also offen. type="check" setzt ein ✓, wo der Shortcut steht, wie in einem Filtermenü – für eine Mehrfachauswahl: Ein Klick kippt checked und feuert nk-change { value, checked } statt nk-select, das Menü bleibt offen.
Verankert eine schwebende Fläche an einem Auslöser. Der Auslöser kommt in slot="trigger" und schaltet open; Klick außerhalb, Escape und ein nk-select von innen schließen. Inhalt wird in .nk-pop gehüllt, außer er bringt seine eigene Fläche mit (nk-menu, nk-emoji-picker) oder bare ist gesetzt.
Eine invertierte Pille unten mittig, über jedem Overlay; über einer Tab-Leiste am unteren Bildschirmrand steigt sie 12px über die Leiste. toast.show("Gespeichert") zeigt sie und blendet nach duration ms aus; open ist der Zustand. Mit einer Aktion – show("In den Papierkorb verschoben", { action: { label: "Rückgängig", value: "undo" } }) oder einem <button slot="action"> – ist sie Notions Toast mit Button und ×: Sie bleibt, bis einer davon benutzt wird, außer show() nennt eine Dauer, und wartet, solange Zeiger oder Fokus auf ihr sind. Die Aktion feuert nk-action und schließt sie, sofern nicht abgebrochen; Escape schließt sie, solange der Fokus in ihr ist.
Welle 4
<nk-toast open duration="0" icon="🗑️">In den Papierkorb verschoben<buttonslot="action" value="undo">Rückgängig</button></nk-toast>
Ausblend-Verzögerung (0 = bleibt); ein Toast mit Aktion bleibt, außer show() nennt eine.
icon
string
✓
Zeichen vorn.
Slots
Slot
Beschreibung
(default)
Statischer Inhalt (wenn show() keine Nachricht bekommt).
action
Ein Button für die Aktion; sein value geht mit nk-action hinaus.
Events
Event
detail
Beschreibung
nk-toggle
{ open }
Gezeigt / verborgen.
nk-action
{ action, value, label }
Die Aktion benutzt; abbrechen, um den Toast zu behalten.
Properties:openmessage
Methoden:show(message?, { duration, action: { label, value } })close()
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-toast.show.t-action.t-close
<nk-tooltip> Tooltip
Notions Hover-Hinweis in den Farben des Toasts, ein Kürzel gedämpft daneben. Ein <nk-tooltip> ohne for bedient jedes Element mit data-tooltip (und data-tooltip-key) auf der Seite, auch in Shadow Roots – eine ganze Werkzeugleiste mit einem Element, und er folgt Zeiger und Tastatur von einem solchen Element zum nächsten in derselben Shadow Root; mit for gehört er zu einem Element und zeigt seinen eigenen Inhalt und shortcut. Er erscheint nach delay ms (400) unter dem Zeiger und sofort bei Tastaturfokus, nie bei Berührung; Verlassen – auch des Fensters –, ein Druck, Blur, Scrollen und Escape blenden ihn aus. Er sitzt 6px unter seinem Ziel und zentriert, darüber, wo das Fenster endet, 8px innerhalb des Fensters – placeNear in util/floating.js. show(target, text, shortcut) nimmt ein Element oder ein Rechteck, für das, was kein eigenes Element hat: die Balken eines Diagramms. Das aria-describedby des Ziels nennt ihn, solange er sichtbar ist. Die Buttons überfahren. Ein mit show(rect, …) gezeigter Tooltip bleibt bis hide(), bis der Zeiger auf ein anderes [data-tooltip] geht, bis zu einem Druck oder Escape; das Mausrad blendet ihn ebenfalls aus, auch in einem Shadow Root. Ein Zeilenumbruch im Text bleibt erhalten.
Das eine Element, zu dem er gehört; ohne, jedes [data-tooltip].
shortcut
string
–
Mit for: das Kürzel neben dem Text.
delay
ms
400
Warten unter dem Zeiger.
placement
bottom | top
bottom
Bevorzugte Seite.
Slots
Slot
Beschreibung
(default)
Mit for: der Text.
Events
keine
Properties:open
Methoden:show(target, text, shortcut)hide()
Auf kleinem Schirm:Kein Hover auf dem Telefon: Bei Berührung zeigt er nichts.
Ersetzt.nk-tooltip.open.tt-key
Daten & Kollaboration
Welle 5
<nk-database> Datenbank
Der Ansichts-Umschalter mit Notions Werkzeugleiste: Kind-Views (nk-table-view, nk-board-view, nk-list-view) werden die Reiter links, slot="tools" hält rechts die Werkzeuge der Ansicht – <nk-btn variant="tool"> für Filter, Sortieren und Suche, dann „Neu“ – und slot="filters" die nk-filter-bar darunter. columns und rows werden in jede View gepusht. view wählt die aktive; count an einer View zeigt die Zeilenzahl als Badge. Kein Fetching: Daten reingeben, Events hören.
Die Werkzeuge rechts der Reiter: <nk-btn variant="tool">, ein kleines primäres „Neu“.
filters
Unter der Leiste: nk-filter-bar.
Events
Event
detail
Beschreibung
nk-view-change
{ view }
Tab gewechselt.
nk-action
{ action: 'add-view' }
+ geklickt.
nk-select / nk-change / nk-action
(from the views)
Bubbeln aus der aktiven View hoch.
Properties:columnsrowsviewviews
Methoden:refresh()
Auf kleinem Schirm:Wird die Zeile schmal, scrollen die Reiter seitwärts; die Werkzeuge behalten ihren Platz. Tabellen und Boards scrollen horizontal; nichts bricht.
Rendert columns × rows als NotionKit-Tabelle. Zellen sind polymorph (text, select, multi-select, date, person, checkbox, url, number, progress) und werden vom exportierten renderPropertyCell() als Klassen-Markup gerendert – jede Zellregel beginnt mit .nk-table, ein eigenes Zellen-Element würde nie gestylt. Kopfklicks sortieren mit sortable. Eine Spalte vom Typ actions (NotionKit 1.12.0) setzt Knöpfe in jede Zeile aus column.actions – [{ action, label, icon, danger, disabled, tooltip }] –, und der Wert einer Zeile – eine Liste von Aktionsnamen – wählt, welche sie zeigt; ein Klick feuert nk-action { action, row, id, anchor }, statt die Zeile zu wählen. Ein url-Wert darf { href, label, target } sein: ein eigener Link, zu einer anderen Seite der App, mit eigenem Text. Ein Textwert darf { text, desc, color, tooltip } sein (NotionKit 1.15.0): eine leise zweite Zeile, eine von Notions neun Textfarben – orange für einen Fehler –, der ganze Text im Tooltip. Sortiert wird nach dem Wert, nicht nach dem angezeigten Text: Daten nach ihrer Zeit, Auswahlen nach der Reihenfolge ihrer Optionen, leere Zellen zuletzt; sortKey an einer Spalte sortiert nach einem anderen Feld der Zeile, ein sort im Objekt einer Zelle nach diesem Wert. Eine date-Spalte mit format – 'short', 'relative' oder den Optionen von Intl.DateTimeFormat – zeigt ISO-Daten und -Zeitpunkte formatiert in ihrer locale. Eine checkbox-Spalte mit selectAll: true (1.21.0) ist eine Auswahlspalte: Ihr Kopf ist eine Checkbox – leer, ein Strich für einige Zeilen, ein Haken für alle –, die nichts sortiert; ein Klick oder die Leertaste setzt die Spalte für jede Zeile der Ansicht (ein Strich wählt alle, wie in Notion) und feuert einmal nk-change { key, value, all: true, rows }. Was „alle“ über diese Zeilen hinaus heißt – weitere Seiten, ein Filter auf dem Server –, bleibt bei der App. Ihr Name kommt aus den Texten (selectAll).
Gruppiert Zeilen über eine Select-Spalte (group-by, Standard: die erste Select-Spalte) in eine Spalte je Option. Karten zeigen die Titelspalte und die meta-keys (Standard: Datum und Fortschritt). Karte auf eine andere Spalte ziehen: Der Wert der Zeile ändert sich, nk-change feuert.
Die dritte Datenbank-Ansicht: eine Zeile pro Eintrag – Icon und Titel, rechts die meta-keys (Standard: die Select- und Datumsspalten, in Spaltenreihenfolge). Datum und Text stehen als Text, Selects als Tags, eine Person als Avatar mit Namen. Zeilen feuern nk-select; new-row ergänzt die Hinzufügen-Zeile.
Die vierte Datenbank-Ansicht (NotionKit 1.9.0): ein Monat, die Zeilen als Karten an ihren Tagen. date-key nennt die Datumsspalte (Standard: die erste) – YYYY-MM-DD oder D.M.YYYY, ein Zeitraum an seinem Anfang. Heute steht auf einer roten Pille, Tage anderer Monate sind hinterlegt; weeks stellt die Kalenderwoche voran, weekend hinterlegt die Tage ohne Arbeit. Eine Karte feuert nk-select wie eine Tabellenzeile; Heute und ‹ › wechseln den Monat (nk-month). In nk-database ist sie ein Tab wie die anderen und zeigt dieselben Zeilen.
Die fünfte Datenbank-Ansicht: die Einträge als Karten mit einem Bild oben, in einem Raster, das die Zeile füllt – Notions Galerie, für einen Kurskatalog oder eine Leseliste. cover-key nennt das Feld mit der URL des Bilds (Standard: cover); ein Eintrag ohne Bild zeigt den Cover-Verlauf, no-cover lässt die Bilder weg. Das Bild steht in 2:1 und wird beschnitten; fit zeigt es ganz, für Logos. size small, medium oder large setzt die Kartengröße – Spalten ab 180, 260 oder 340px. Karten zeigen den Titel und die meta-keys (Standard: die Select- und Datumsspalten) und feuern nk-select bei Klick, Enter oder Leertaste; new-row ergänzt die Hinzufügen-Karte. href-key nennt das Feld mit der Adresse einer Karte: Solch eine Karte ist ein Link, <a class="nk-card" href> in einem .card-item, das die Rolle des Listeneintrags trägt – um einen Kurs in einem neuen Tab zu öffnen oder seine Adresse zu kopieren. Ein einfacher Klick und Enter feuern dasselbe nk-select; bricht man es ab, bleibt der Browser. Ein Mittelklick oder einer mit Cmd, Strg, Umschalt oder Alt feuert nichts und tut, was ein Link tut.
Die wirkenden Filter als NotionKits Filter-Pills – .active mit Akzent-Tönung, je ein × zum Entfernen, am Ende eine ruhige add-Pill –, ohne Inline-Style. In slot="filters" von nk-database steht die Zeile unter der Werkzeugleiste. Das Label einer Pill feuert nk-action { action: "edit" }, die Add-Pill { action: "add" }, jeweils mit dem geklickten Button als anchor für menu.show(anchor). bar.apply(rows) behält Zeilen, bei denen jeder Filter strikt gleich ist (row[key] === value, also den Options-Wert nutzen) – oder mit op: "is-not" verschieden – und der Suchtext in einem String-Feld vorkommt (bei Personen der name); die Datenlogik bleibt deine. Eigene Filter- und Sortier-Werkzeuge und das Suchfeld sind für eine Leiste ohne Datenbank-Werkzeugleiste da. Es hält eine eigene Kopie von filters: Das übergebene Array bleibt unverändert, eine entfernte Pill wird in nk-change gemeldet.
Ein links gerahmter Faden aus nk-comments mit Eingabezeile. Enter oder der Button feuert nk-submit { text }; das Anhängen übernimmst du.
Welle 5
Die Board-Ansicht fühlt sich schon sehr nah am Original an. 👍AIIch habe die überfälligen Einträge markiert und eine Zusammenfassung vorbereitet.
SL
Sara Lindt · 1 hr ago
Die Board-Ansicht fühlt sich schon sehr nah am Original an. 👍
✨
MonaAI · 20 min ago
Ich habe die überfälligen Einträge markiert und eine Zusammenfassung vorbereitet.
<nk-commentsplaceholder="Kommentieren …" send-label="Senden">
<nk-commentauthor="Sara Lindt" time="1 hr ago" color="#448361">Die Board-Ansicht fühlt sich schon sehr nah am Original an. 👍</nk-comment>
<nk-commentauthor="Mona" time="20 min ago" avatar="✨" color="var(--nk-text-tertiary)"><spanslot="head" class="nk-tag blue" style="font-size:10.5px">AI</span>Ich habe die überfälligen Einträge markiert und eine Zusammenfassung vorbereitet.</nk-comment>
</nk-comments>
<divclass="nk-comments">
<divclass="nk-comment"><spanclass="mini-avatar" style="background:#448361">SL</span><div><divclass="c-head"><b>Sara Lindt</b> · 1 hr ago</div><divclass="c-body">Die Board-Ansicht fühlt sich schon sehr nah am Original an. 👍</div></div></div>
<divclass="nk-comment"><spanclass="mini-avatar" style="background:var(--nk-text-tertiary)">✨</span><div><divclass="c-head"><b>Mona</b><spanclass="nk-tag blue" style="font-size:10.5px">AI</span> · 20 min ago</div><divclass="c-body">Ich habe die überfälligen Einträge markiert und eine Zusammenfassung vorbereitet.</div></div></div>
<divclass="nk-comment-input"><inputclass="nk-input" placeholder="Kommentieren …"><buttonclass="nk-btn primary small">Senden</button></div>
</div>
Attribute
Attribut
Typ
Standard
Beschreibung
placeholder
string
–
Platzhalter.
send-label
string
Send · Senden
Button-Text.
no-input
boolean
–
Nur lesen.
disabled
boolean
–
Eingabe deaktiviert.
Slots
Slot
Beschreibung
(default)
nk-comment-Kinder.
Events
Event
detail
Beschreibung
nk-submit
{ text }
Neuer Kommentar; preventDefault() behält den Text.
Ein Kommentar: Avatar (Initialen + color), fetter Autor, Zeit, Text. slot="head" ergänzt Inhalt hinter dem Namen.
Welle 5
Die Board-Ansicht fühlt sich schon sehr nah am Original an. 👍
SL
Sara Lindt · 1 hr ago
Die Board-Ansicht fühlt sich schon sehr nah am Original an. 👍
<nk-comments no-input><nk-commentauthor="Sara Lindt" time="1 hr ago" color="green">Die Board-Ansicht fühlt sich schon sehr nah am Original an. 👍</nk-comment></nk-comments>
<divclass="nk-comments"><divclass="nk-comment"><spanclass="nk-avatar green">SL</span><div><divclass="c-head"><b>Sara Lindt</b> · 1 hr ago</div><divclass="c-body">Die Board-Ansicht fühlt sich schon sehr nah am Original an. 👍</div></div></div></div>
Attribute
Attribut
Typ
Standard
Beschreibung
author
string
–
Name.
time
string
–
Relative Zeit.
avatar
string
–
Initialen/Emoji (Standard: aus dem Autor).
color
colour name | CSS
–
Avatar-Farbe: einer der neun Namen oder ein beliebiger CSS-Hintergrund; ohne sie der Avatar-Verlauf.
Slots
Slot
Beschreibung
(default)
Text.
head
Hinter dem Namen (Tag, Badge).
avatar
Eigener Avatar.
Events
keine
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-comment.c-head.c-body
<nk-ai-thread> KI-Thread
Die Konversationsspalte: nk-ai-msg-Kinder (role="user" bekommt den Gradient-Avatar), gefolgt von einer nk-ai-input-row. Action-Buttons in slot="actions" feuern nk-action { action, value } – beide tragen das value des Buttons (oder seinen Text).
Welle 5
Fasse die offenen Aufgaben dieses Projekts zusammen.Zwei Aufgaben sind offen: die Tabellenansicht steht bei 65 % (fällig 20. Mai), das Board mit Drag-and-Drop ist geplant.
MK
Du
Fasse die offenen Aufgaben dieses Projekts zusammen.
✨
Mona · KI
Zwei Aufgaben sind offen: die Tabellenansicht steht bei 65 % (fällig 20. Mai), das Board mit Drag-and-Drop ist geplant.
✨
<nk-ai-thread>
<nk-ai-msgrole="user" name="Du" avatar="MK">Fasse die offenen Aufgaben dieses Projekts zusammen.</nk-ai-msg>
<nk-ai-msgrole="assistant" name="Mona" badge="· KI">Zwei Aufgaben sind offen: die <b>Tabellenansicht</b> steht bei 65 % (fällig 20. Mai), das <b>Board mit Drag-and-Drop</b> ist geplant.
<buttonslot="actions" value="copy">📋 Kopieren</button><buttonslot="actions" value="rephrase">↻ Umformulieren</button><buttonslot="actions" value="like">👍</button>
</nk-ai-msg>
</nk-ai-thread>
<nk-ai-input-rowplaceholder="Frag Mona etwas …"></nk-ai-input-row>
<divclass="nk-ai-thread">
<divclass="nk-ai-msg user"><spanclass="mini-avatar">MK</span><divclass="a-body"><divclass="a-name">Du</div>Fasse die offenen Aufgaben dieses Projekts zusammen.</div></div>
<divclass="nk-ai-msg"><spanclass="mini-avatar">✨</span><divclass="a-body"><divclass="a-name">Mona <span>· KI</span></div>Zwei Aufgaben sind offen: die <b>Tabellenansicht</b> steht bei 65 % (fällig 20. Mai), das <b>Board mit Drag-and-Drop</b> ist geplant.<divclass="nk-ai-actions"><button>📋 Kopieren</button><button>↻ Umformulieren</button><button>👍</button></div></div></div>
</div>
<divclass="nk-ai-input-row"><spanstyle="font-size:14px">✨</span><inputplaceholder="Frag Mona etwas …"><buttonclass="nk-ai-send">↑</button></div>
Eine Nachricht. role="user" schaltet den Avatar auf den Gradient; badge ist das graue Suffix hinter dem Namen („· KI“); einfache <button slot="actions">s bilden die Aktionszeile.
Welle 5
Was ist auf dieser Seite noch offen?Zwei Aufgaben sind offen: die Tabellenansicht steht bei 65 % (fällig 20. Mai), das Board mit Drag-and-Drop ist geplant.
Was ist auf dieser Seite noch offen?
✨
Mona · KI
Zwei Aufgaben sind offen: die Tabellenansicht steht bei 65 % (fällig 20. Mai), das Board mit Drag-and-Drop ist geplant.
<nk-ai-thread><nk-ai-msgrole="user" bubble>Was ist auf dieser Seite noch offen?</nk-ai-msg><nk-ai-msgrole="assistant" name="Mona" badge="· KI">Zwei Aufgaben sind offen: die <b>Tabellenansicht</b> steht bei 65 % (fällig 20. Mai), das <b>Board mit Drag-and-Drop</b> ist geplant.<buttonslot="actions" value="copy">📋 Kopieren</button></nk-ai-msg></nk-ai-thread>
<divclass="nk-ai-thread"><divclass="nk-ai-msg user bubble"><divclass="a-body">Was ist auf dieser Seite noch offen?</div></div><divclass="nk-ai-msg"><spanclass="mini-avatar">✨</span><divclass="a-body"><divclass="a-name">Mona <span>· KI</span></div>Zwei Aufgaben sind offen: die <b>Tabellenansicht</b> steht bei 65 % (fällig 20. Mai), das <b>Board mit Drag-and-Drop</b> ist geplant.<divclass="nk-ai-actions"><button>📋 Kopieren</button></div></div></div></div>
Attribute
Attribut
Typ
Standard
Beschreibung
role
user | assistant
assistant
Wer spricht.
name
string
–
Namenszeile.
badge
string
–
Graues Suffix.
avatar
string
–
Initialen/Emoji.
color
CSS color
–
Avatar-Hintergrund.
bubble
boolean
–
Die Nachricht als graue Blase ohne Avatar und Namen; mit role="user" rechts, wie Notions KI-Chat die eigene Frage zeigt.