Dokumentation

Attribute, Slots, Events und das Klassen-Markup, das jedes Element ersetzt.

Installation

CDN

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.21.0/notionkit.min.css">
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.21.0/dist/notionkit-elements.min.js"></script>

npm

npm install @jungherz-de/notionkit-elements @jungherz-de/notionkit

import '@jungherz-de/notionkit/notionkit.css';
import '@jungherz-de/notionkit-elements';

Einzelne Komponente

import '@jungherz-de/notionkit-elements/components/nk-btn.js';

<!-- build-free: map NotionKit's sheet once, the files import it -->
<script type="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.

<html lang="en" data-theme="light">
  <head>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.21.0/notionkit.min.css">
    <script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.21.0/dist/notionkit-elements.min.js"></script>
  </head>
  <body class="nk-body">
    <nk-btn variant="primary">Speichern</nk-btn>
  </body>
</html>

Hosts sind display: contents

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 -->
<div style="margin-top:16px"><nk-btn variant="primary">Speichern</nk-btn></div>

<!-- ✗ the host has no box; this margin does nothing -->
<nk-btn style="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.

<style>
  :root { --nk-accent: #16a34a; }
  [data-theme="dark"] { --nk-accent: #4ade80; }
</style>
<script>document.documentElement.dataset.theme = 'dark';</script>

Sprachen

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.

<html lang="de">  <!-- the elements speak German: Kopieren, Heute, + Neue Seite … -->

<script type="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-field value="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.

<form id="f">
  <nk-field label="Anzeigename"><nk-input name="name" required></nk-input></nk-field>
  <nk-field label="E-Mail-Benachrichtigungen"><nk-switch name="notify" checked></nk-switch></nk-field>
  <nk-btn type="submit" variant="primary">Speichern</nk-btn>
</form>
<script>
  f.addEventListener('submit', e => { e.preventDefault(); console.log([...new FormData(f)]); });
</script>

Light-DOM-Kinder

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 => `<option value="${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><span slot="icon">📌</span>…</nk-callout>

<!-- ✗ wrapped: ::slotted() cannot reach the inner node -->
<nk-callout><span slot="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 -->
<div class="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) -->
<script type="module" src="../docs-editor.js"></script>

docs-editor.js · live in the demo app

Formulare & Controls

Welle 1

<nk-btn> Button

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.

Welle 1
Speichern Abbrechen Löschen
<nk-btn variant="primary">Speichern</nk-btn>
<nk-btn variant="secondary">Abbrechen</nk-btn>
<nk-btn variant="danger" small>Löschen</nk-btn>

Attribute

AttributTypStandardBeschreibung
variantprimary | secondary | danger | danger-solid | topbar | share | tool | sidebar–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.
activeboolean–Ein wirkendes Werkzeug – ein gesetzter Filter – bekommt den Akzent (variant="tool").
smallboolean–Kompaktes Padding und 12,5px Text.
disabledboolean–Deaktiviert; Klicks werden verschluckt.
typebutton | submit | resetbuttonBei submit/reset wird das umgebende <form> abgeschickt bzw. zurückgesetzt.
hrefURL–Rendert einen Link statt eines Buttons.

Slots

SlotBeschreibung
(default)Beschriftung und optionales <svg>-Icon.

Events

EventdetailBeschreibung
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.
Ersetzt.nk-btn.primary.secondary.danger.danger-solid.small.nk-topbar-btn.nk-share-btn.nk-db-tool.active.nk-sidebar-toggle

<nk-input> Eingabefeld

Ein natives <input> im Shadow Root, per ElementInternals ins umgebende Formular eingebunden: FormData, Reset und required-Validierung funktionieren wie beim nackten Input.

Welle 1
<nk-input name="name" value="Ada Lovelace" placeholder="Anzeigename"></nk-input>

Attribute

AttributTypStandardBeschreibung
valuestring–Aktueller Wert; zugleich der Reset-Wert.
typetext | email | password | number | date | …textWird an das native Input durchgereicht.
placeholderstring–Platzhaltertext.
namestring–Name des Formularfelds (FormData-Schlüssel).
disabledboolean–Deaktiviert das Control.
requiredboolean–Pflichtfeld; die Validität wird auf den Host gespiegelt.
readonlyboolean–Nur lesen.
wideboolean–Volle Breite (.wide).

Slots

keine

Events

EventdetailBeschreibung
nk-change{ value, name }Beim Übernehmen (Blur/Enter), wie das native change-Event.
nk-input{ value, name }Bei jedem Tastendruck.

Properties: value name disabled required form validity

Methoden: focus() blur() select() checkValidity() reportValidity()

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.

Welle 1
<div style="max-width:340px"><nk-copy-field value="https://monahilft.notionkit.app" copy-label="Kopieren"></nk-copy-field></div>
<div style="max-width:340px;margin-top:10px"><nk-copy-field value="ntn_4f2a9c1e8b7d6a5f3e2c" secret mono copy-label="Kopieren" show-label="Zeigen"></nk-copy-field></div>
<div style="max-width:340px;margin-top:10px"><nk-copy-field value="ntn_4f2a9c1e8b7d6a5f3e2c" secret mono icons copy-label="Kopieren" show-label="Zeigen"></nk-copy-field></div>

Attribute

AttributTypStandardBeschreibung
valuestring–Der Wert.
secretboolean–Verborgen, mit Zeigen/Verbergen.
iconsboolean–Symbole statt Wörter in jeder Breite, nicht nur auf dem Telefon.
monoboolean–Monospace – Adressen, Schlüssel, Code.
wrapboolean–Ein langer Wert bricht um statt Auslassungspunkten.
wideboolean–Füllt die Zeile.
copy-labelstringCopy · KopierenButton-Text.
copied-labelstringCopied · KopiertText für den Moment danach.
show-labelstringShow · ZeigenZeigen (secret).
hide-labelstringHide · VerbergenWieder verbergen.

Slots

keine

Events

EventdetailBeschreibung
nk-action{ action: 'copy', value, ok }Kopieren geklickt; ok ist false, wenn die Zwischenablage ablehnte.

Properties: value secret icons

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.
Ersetzt.nk-copy-field.cf-value.cf-btn.copied.mono.wrap.wide.icons

<nk-image-picker> Bildauswahl

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.

Welle 1
<nk-image-picker initials="AL" choose-label="Bild hochladen"></nk-image-picker>
<nk-image-picker square src="/favicon.svg" change-label="Bild ändern" remove-label="Entfernen"></nk-image-picker>

Attribute

AttributTypStandardBeschreibung
srcURL / data URL–Startbild.
initialsstring–Ohne Bild angezeigt.
squareboolean–Abgerundetes Quadrat – ein Workspace-Icon.
maxpx512Längste Kante nach dem Skalieren.
typeMIMEimage/jpegAusgabeformat.
quality0–10.82JPEG-/WebP-Qualität.
acceptstringimage/*Filter des Dateidialogs.
labelstring–Benennt die Gruppe.
choose-labelstringUpload image · Bild hochladenOhne Bild.
change-labelstringChange image · Bild ändernMit Bild.
remove-labelstringRemove · EntfernenEntfernen-Button.

Slots

keine

Events

EventdetailBeschreibung
nk-change{ dataUrl, width, height, size }Ein Bild gewählt – oder entfernt, mit leerer dataUrl.
nk-error{ message, name }Die Datei lässt sich nicht dekodieren.

Properties: src square

Methoden: choose()

Auf kleinem Schirm:Unverändert; die Aktionen bleiben neben dem Bild.
Ersetzt.nk-profile-row.big-avatar.square.pr-actions.pr-remove

<nk-calendar> Datumsauswahl

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.

Welle 1
<div style="display:flex;gap:16px;flex-wrap:wrap;align-items:flex-start">
<div class="nk-pop"><nk-calendar name="due" value="2026-06-02T09:30" time clearable weeks week-start="1" weekend="6,0" today="2026-06-17" today-label="Heute" time-label="Uhrzeit" clear-label="Löschen" days='{"2026-06-04":{"off":true,"label":"Fronleichnam"},"2026-06-02":{"marks":["blue"]},"2026-06-11":{"marks":["orange","red"]},"2026-06-24":{"marks":["green"]}}'></nk-calendar></div>
<div class="nk-pop"><nk-calendar name="sprint" range value="2026-06-08/2026-06-12" weeks week-start="1" weekend="6,0" today="2026-06-17" today-label="Heute" days='{"2026-06-04":{"off":true,"label":"Fronleichnam"}}'></nk-calendar></div>
</div>

Attribute

AttributTypStandardBeschreibung
valueYYYY-MM-DD | start/end | …THH:MM–Der Tag, der Zeitraum oder Tag und Uhrzeit; zugleich der Reset-Wert.
monthYYYY-MM–Der zuerst gezeigte Monat; Standard der des Werts, sonst der heutige.
minYYYY-MM-DD–Erster wählbarer Tag.
maxYYYY-MM-DD–Letzter wählbarer Tag.
rangeboolean–Zwei Klicks ergeben einen Zeitraum start/ende.
timeboolean–Ein Zeitfeld unter dem Monat – nur für einzelne Tage.
clearableboolean–Ein Löschen-Button unter dem Monat.
weeksboolean–Die ISO-Kalenderwoche vor jeder Reihe.
week-start0–6IntlErster Wochentag: 0 Sonntag, 1 Montag …
weekendlist–Wochentage ohne Arbeit, gegraut – 6,0.
daysJSON–Je Tag { off, label, marks }; auch als Property.
todayYYYY-MM-DD–Ein anderes Heute – für Tests und Doku.
localeBCP 47langSprache der Namen und der Woche.
floatingboolean–Ein Popover über der Seite: show(anchor), close().
sheetboolean–Schwebend: ein Bottom Sheet auf dem Telefon.
openboolean–Schwebend: gezeigt.
alignend | startendSchwebend: rechte oder linke Kante an der des Ankers.
labelstring–Benennt die Monatsgruppe für Screenreader.
today-labelstringToday · HeuteHeute-Button.
prev-labelstringPrevious month · Voriger MonatBenennt ‹.
next-labelstringNext month · Nächster MonatBenennt ›.
week-labelstringW · KWKopf der Wochenspalte.
time-labelstringTime · UhrzeitBenennt das Zeitfeld.
clear-labelstringClear · LeerenLöschen-Button.
namestring–Name des Formularfelds (FormData-Schlüssel).
disabledboolean–Deaktiviert das Control.
requiredboolean–Ein Wert ist Pflicht; die Validität steht am Host.

Slots

keine

Events

EventdetailBeschreibung
nk-change{ value, start, end, time }Der Wert hat sich geändert: ein Tag gewählt – beim Zeitraum der zweite –, eine neue Uhrzeit oder Löschen. Derselbe Tag noch einmal ist keine Änderung.
nk-month{ month }Ein anderer Monat gezeigt.
nk-toggle{ open }Schwebend: geöffnet oder geschlossen.

Properties: value start end month days open form validity

Methoden: show(anchor) close() toggle(anchor) focusDay() checkValidity()

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.
Ersetzt.nk-calendar.weeks.cal-head.cal-title.cal-nav.cal-grid.cal-wd.cal-week.cal-day.out.off.today.selected.start.end.in-range.cal-marks.cal-foot.nk-pop.floating.sheet.open

<nk-textarea> Textbereich

Mehrzeiliges Geschwister von nk-input. Startwert ist das value-Attribut oder der Textinhalt des Elements.

Welle 1
<nk-textarea name="bio" rows="3" placeholder="Ein Satz über dich"></nk-textarea>

Attribute

AttributTypStandardBeschreibung
valuestring–Aktueller Wert.
placeholderstring–Platzhaltertext.
rowsnumber–Sichtbare Zeilen.
namestring–Name des Formularfelds (FormData-Schlüssel).
disabledboolean–Deaktiviert das Control.
requiredboolean–Pflichtfeld.
wideboolean–Volle Breite.

Slots

SlotBeschreibung
(default)Starttext (wenn kein value gesetzt ist).

Events

EventdetailBeschreibung
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.

Welle 1
<nk-select name="role" value="editor">
  <option value="viewer">Betrachter</option>
  <option value="editor">Bearbeiter</option>
  <option value="admin">Admin</option>
</nk-select>

Attribute

AttributTypStandardBeschreibung
valuestring–Ausgewählter Wert.
namestring–Name des Formularfelds (FormData-Schlüssel).
disabledboolean–Deaktiviert das Control.
requiredboolean–Pflichtfeld.
compactboolean–120px Mindestbreite (.compact), z. B. in einer Mitgliederzeile.
wideboolean–Volle Breite (.nk-select.wide).

Slots

SlotBeschreibung
(default)<option>-/<optgroup>-Kinder – nur direkte Kinder.

Events

EventdetailBeschreibung
nk-change{ value, name }Bei Auswahl.

Properties: value selectedIndex options

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.

Welle 1
GeplantIn Arbeit
<div style="display:flex;gap:20px;flex-wrap:wrap;align-items:center"><nk-switch name="notify" checked label="E-Mail-Benachrichtigungen"></nk-switch>
<nk-switch name="planned" checked>Geplant</nk-switch><nk-switch name="progress">In Arbeit</nk-switch><nk-switch name="done" text="Erledigt" checked></nk-switch></div>

Attribute

AttributTypStandardBeschreibung
checkedboolean–Ein/Aus-Zustand.
namestring–Name des Formularfelds (FormData-Schlüssel).
disabledboolean–Deaktiviert das Control.
valuestringonGesendeter Wert, wenn eingeschaltet.
textstring–Sichtbarer Text neben dem Schalter (alternativ zum Default-Slot).
labelstring–Barrierefreier Name (aria-label), wenn es keinen sichtbaren Text gibt.

Slots

SlotBeschreibung
(default)Sichtbarer Text neben dem Schalter; gehört zur Trefferfläche. Ohne ihn rendert das Element den nackten Button.

Events

EventdetailBeschreibung
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.

Welle 1
Alle Wöchentliche Zusammenfassung Nur Erwähnungen
<nk-check indeterminate>Alle</nk-check>
<nk-check name="digest" value="weekly" checked>Wöchentliche Zusammenfassung</nk-check>
<nk-check name="digest" value="mentions">Nur Erwähnungen</nk-check>

Attribute

AttributTypStandardBeschreibung
checkedboolean–Angehakt.
indeterminateboolean–Teilzustand (beim nächsten Klick aufgehoben).
namestring–Name des Formularfelds (FormData-Schlüssel).
disabledboolean–Deaktiviert das Control.
valuestringonGesendeter Wert.
requiredboolean–Muss zum Absenden angehakt sein.
textstring–Beschriftung (alternativ zum Default-Slot).

Slots

SlotBeschreibung
(default)Beschriftung.

Events

EventdetailBeschreibung
nk-change{ checked, value, name }Beim Umschalten.
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.

Welle 1
Knapp Ausgewogen Ausführlich
<nk-radio name="style" value="concise">Knapp</nk-radio>
<nk-radio name="style" value="balanced" checked>Ausgewogen</nk-radio>
<nk-radio name="style" value="detailed">Ausführlich</nk-radio>

Attribute

AttributTypStandardBeschreibung
checkedboolean–Ausgewählt; das letzte checked im Markup gewinnt.
namestring–Name des Formularfelds (FormData-Schlüssel).
disabledboolean–Deaktiviert das Control.
valuestring–Gesendeter Wert.
requiredboolean–Eines der Gruppe muss gewählt sein.
textstring–Beschriftung (alternativ zum Default-Slot).

Slots

SlotBeschreibung
(default)Beschriftung.

Events

EventdetailBeschreibung
nk-change{ checked, value, name }Bei Auswahl, auch per Pfeiltaste.
Auf kleinem Schirm:Wie nk-check.
Ersetzt.nk-check

<nk-slider> Schieberegler

Ein Range-Input mit accent-color aus den Tokens, optional mit Wertanzeige darunter.

Welle 1
<nk-slider name="size" min="12" max="18" value="14" unit="px" show-value></nk-slider>

Attribute

AttributTypStandardBeschreibung
valuenumber–Aktueller Wert.
minnumber–Minimum.
maxnumber–Maximum.
stepnumber–Schrittweite.
namestring–Name des Formularfelds (FormData-Schlüssel).
disabledboolean–Deaktiviert das Control.
show-valueboolean–Zeigt den Wert unter dem Regler.
unitstring–Suffix für die Anzeige (z. B. px).

Slots

keine

Events

EventdetailBeschreibung
nk-change{ value, name }Beim Loslassen.
nk-input{ value, name }Während des Ziehens.
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
<nk-field label="Anzeigename" desc="Erscheint neben deinen Kommentaren.">
  <nk-input value="Ada Lovelace"></nk-input>
</nk-field>
<nk-field label="E-Mail-Benachrichtigungen">
  <nk-switch checked></nk-switch>
</nk-field>
<nk-field label="Kurzprofil" stacked>
  <nk-textarea rows="2" placeholder="Ein Satz über dich"></nk-textarea>
</nk-field>

Attribute

AttributTypStandardBeschreibung
labelstring–Beschriftung.
descstring–Erläuterung.
stackedboolean–Label über einem vollbreiten Control.
compactboolean–Kleines tertiäres Label, kein Zeilen-Padding.

Slots

SlotBeschreibung
(default)Das Control.
labelFormatierte Beschriftung (statt Attribut).
descFormatierte Erläuterung.

Events

keine

Auf kleinem Schirm:Bleibt eine Zeile; lange Beschreibungen brechen unter dem Label um. stacked, wo das Control die ganze Breite braucht.
Ersetzt.nk-field.f-label.f-desc.f-control.stacked.compact

<nk-fields> Feldraster

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.

Welle 1
<nk-fields>
  <nk-field label="Anzeigename"><nk-input value="Ada Lovelace"></nk-input></nk-field>
  <nk-field label="E-Mail"><nk-input value="ada@acme.com"></nk-input></nk-field>
  <nk-field label="Rolle"><nk-select value="editor"><option value="viewer">Betrachter</option><option value="editor">Bearbeiter</option></nk-select></nk-field>
</nk-fields>

Attribute

AttributTypStandardBeschreibung
fitboolean–Die Felder teilen die Zeile, statt 150px-Spalten zu halten – zwei Felder in einem breiten Dialog sind zwei Hälften.

Slots

SlotBeschreibung
(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 begonnen Archiv Geplant Review Erledigt In Arbeit Design Idee Blockiert
<nk-tag>Nicht begonnen</nk-tag> <nk-tag color="brown">Archiv</nk-tag> <nk-tag color="orange">Geplant</nk-tag> <nk-tag color="yellow">Review</nk-tag> <nk-tag color="green">Erledigt</nk-tag> <nk-tag color="blue">In Arbeit</nk-tag> <nk-tag color="purple">Design</nk-tag> <nk-tag color="pink">Idee</nk-tag> <nk-tag color="red">Blockiert</nk-tag>

Attribute

AttributTypStandardBeschreibung
colorgray | brown | orange | yellow | green | blue | purple | pink | red–Farbpaar; ohne grau.

Slots

SlotBeschreibung
(default)Tag-Text.

Events

keine

Auf kleinem Schirm:Unverändert.
Ersetzt.nk-tag.gray.brown.orange.yellow.green.blue.purple.pink.red

<nk-progress> Fortschritt

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.

Welle 1

Fortschritt

<nk-progress value="72" label="72%"></nk-progress>
<div class="nk-panel" style="margin-top:12px"><h3>Fortschritt</h3><nk-progress value="40" label="40 %" wide></nk-progress></div>

Attribute

AttributTypStandardBeschreibung
valuenumber0Aktueller Wert.
maxnumber100Maximum.
labelstring–Text hinter dem Balken.
wideboolean–Füllt seine Zeile – ein Eigenschaftswert, ein Panel; in einer flex-Zeile bleibt das Label daneben.

Slots

keine

Events

keine

Auf kleinem Schirm:Unverändert.
Ersetzt.nk-progress.nk-progress-label.wide.nk-progress-row

<nk-callout> Callout

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.
<nk-callout icon="💡"><b>Core idea:</b> Ein Callout trägt einen Gedanken, der nicht untergehen darf.</nk-callout>

Attribute

AttributTypStandardBeschreibung
iconstring💡Emoji- oder Text-Icon.

Slots

SlotBeschreibung
(default)Inhalt.
iconIcon-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.

Welle 1
<div style="max-width:600px"><nk-bookmark href="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>

Attribute

AttributTypStandardBeschreibung
hrefURL–Der Link.
titlestring–Titel – og:title.
descstring–Beschreibung, zwei Zeilen – og:description.
faviconURL–Das Icon der Seite, 16px.
coverURL–Vorschaubild – og:image.
urlstring–Die angezeigte Adresse (Standard: href).
targetstring_blankLink-Ziel.

Slots

keine

Events

EventdetailBeschreibung
click(native)Der Link ist ein einfaches <a>.

Properties: title href

Auf kleinem Schirm:Das Bild behält sein Drittel und wird mittig beschnitten; Titel und Adresse enden mit Auslassungspunkten.
Ersetzt.nk-bookmark.bm-text.bm-title.bm-desc.bm-url.bm-favicon.bm-cover

<nk-divider> Trennlinie

Eine Haarlinie als <hr> mit Blockabstand.

Welle 1
<nk-divider></nk-divider>

Attribute

keine

Slots

keine

Events

keine

Auf kleinem Schirm:Unverändert.
Ersetzt.nk-divider

<nk-heading> Überschrift

Eine Abschnittsüberschrift. level wählt das echte Heading-Element (h1–h4), damit die Dokumentstruktur stimmt.

Welle 1
Abschnittsüberschrift
<nk-heading>Abschnittsüberschrift</nk-heading>

Attribute

AttributTypStandardBeschreibung
level1 | 2 | 3 | 42Überschriften-Ebene.

Slots

SlotBeschreibung
(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.
<nk-toggle label="Details" open>Hier steht der eingeklappte Inhalt.</nk-toggle>

Attribute

AttributTypStandardBeschreibung
labelstring–Summary-Text.
openboolean–Aufgeklappt, in beide Richtungen gespiegelt.

Slots

SlotBeschreibung
(default)Eingeklappter Inhalt.
labelFormatierte Summary.

Events

EventdetailBeschreibung
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.

Welle 1
Doku schreiben Ausliefern
<nk-todo checked>Doku schreiben</nk-todo>
<nk-todo>Ausliefern</nk-todo>

Attribute

AttributTypStandardBeschreibung
checkedboolean–Erledigt.
namestring–Name des Formularfelds (FormData-Schlüssel).
disabledboolean–Deaktiviert das Control.
valuestringonGesendeter Wert.

Slots

SlotBeschreibung
(default)Aufgabentext.

Events

EventdetailBeschreibung
nk-change{ checked, value, name }Beim Umschalten.
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-todo

<nk-kbd> Tastenkappe

Eine Tastaturtaste, z. B. in Shortcut-Hinweisen.

Welle 1
⌘ K
<nk-kbd>⌘</nk-kbd> <nk-kbd>K</nk-kbd>

Attribute

keine

Slots

SlotBeschreibung
(default)Tastenbeschriftung.

Events

keine

Auf kleinem Schirm:Unverändert.
Ersetzt.nk-kbd

<nk-code> Code-Block

Vorformatierter Block mit Sprach-Badge. Whitespace bleibt wie geschrieben; < als &lt; maskieren. Mit highlight werden HTML-Tags und -Attribute eingefärbt.

Welle 1
<nk-btn variant="primary">Speichern</nk-btn>
<nk-code lang="html" highlight>&lt;nk-btn variant="primary"&gt;Speichern&lt;/nk-btn&gt;</nk-code>

Attribute

AttributTypStandardBeschreibung
langstring–Sprach-Badge oben rechts.
highlightboolean–HTML-Tags/-Attribute einfärben.

Slots

SlotBeschreibung
(default)Der Code, als Text.

Events

keine

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.
<nk-quote cite="Unbekannt">Die beste Oberfläche ist die, die aus dem Weg geht.</nk-quote>

Attribute

AttributTypStandardBeschreibung
citestring–Quellenangabe.

Slots

SlotBeschreibung
(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.

Welle 2
<nk-app>
  <nk-sidebar slot="sidebar">
    <nk-workspace-switcher slot="workspace" name="MonaHilft"></nk-workspace-switcher>
    <nk-tree>
      <nk-tree-item icon="🔍">Suche<span slot="end" class="nk-kbd-hint"><nk-kbd>⌘</nk-kbd><nk-kbd>K</nk-kbd></span></nk-tree-item>
      <nk-tree-item icon="🏠" active>Start</nk-tree-item>
      <nk-tree-item icon="📥">Eingang</nk-tree-item>
    </nk-tree>
    <nk-tree-item slot="footer" icon="⚙️">Einstellungen</nk-tree-item>
  </nk-sidebar>
  <nk-topbar>
    <nk-breadcrumb><span>📊 Projektübersicht</span></nk-breadcrumb>
    <nk-btn slot="actions" variant="share">Teilen</nk-btn>
    <nk-theme-toggle slot="actions"></nk-theme-toggle>
  </nk-topbar>
  <div class="nk-page-scroll"><div class="nk-page" style="padding-top:16px">
    <h1 class="nk-page-title" style="font-size:28px">NotionKit MVP</h1>
    <p class="lead">Eine ruhige, dokumentzentrierte Workspace-App – nur aus Elementen gebaut.</p>
  </div></div>
</nk-app>

Attribute

AttributTypStandardBeschreibung
peek-insetboolean–Die Hauptspalte macht dem Side Peek Platz – <nk-peek inset> setzt es, solange er offen ist.

Slots

SlotBeschreibung
sidebarEine 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.

Welle 2
<div style="display:flex;height:100%"><nk-sidebar collapsible collapse-label="Seitenleiste schließen">
  <nk-workspace-switcher slot="workspace" name="MonaHilft"></nk-workspace-switcher>
  <nk-tree>
    <nk-tree-item icon="🏠" active>Start</nk-tree-item>
    <nk-tree-item icon="📥">Eingang</nk-tree-item>
  </nk-tree>
  <nk-tree-item slot="footer" icon="⚙️">Einstellungen</nk-tree-item>
  <nk-tree-item slot="footer" icon="🗑️">Papierkorb</nk-tree-item>
</nk-sidebar></div>

Attribute

AttributTypStandardBeschreibung
openboolean–Schubladen-Zustand auf kleinen Schirmen (ohne Wirkung am Desktop).
collapsibleboolean–Zeigt das «, das sie auf dem Desktop einklappt, und ⌘\.
collapsedboolean–Auf dem Desktop eingeklappt (ohne Wirkung auf dem Telefon).
collapse-labelstringClose sidebar · Seitenleiste schließenName und Tooltip des «.

Slots

SlotBeschreibung
workspacenk-workspace-switcher.
(default)Der Baum (scrollt).
footerFixierte Zeilen unten (Einstellungen, Papierkorb).

Events

EventdetailBeschreibung
nk-toggle{ open }Schublade geöffnet/geschlossen.
nk-collapse{ collapsed }Auf dem Desktop ein-/ausgeklappt.

Properties: open collapsed

Methoden: show() close() toggle() collapse() expand() toggleCollapsed()

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.
Ersetzt.nk-sidebar.nk-sidebar-head.nk-sidebar-collapse.nk-sidebar-scroll.nk-sidebar-footer.nk-sidebar-backdrop.open.collapsed

<nk-workspace-switcher> Workspace-Umschalter

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.

Welle 2
<div style="background:var(--nk-bg-sidebar);border-radius:8px;max-width:260px"><nk-workspace-switcher name="MonaHilft"></nk-workspace-switcher></div>

Attribute

AttributTypStandardBeschreibung
namestring–Workspace-Name.
avatarstring–Avatar-Text (Standard: erster Buchstabe des Namens).
openboolean–Menü sichtbar.

Slots

SlotBeschreibung
avatarEigener Avatar-Knoten.
menuDer Popover-Inhalt.

Events

EventdetailBeschreibung
nk-toggle{ open }Menü geöffnet/geschlossen.
nk-select(from the menu)Bubbelt aus einem Menüeintrag hoch; das Menü schließt.

Methoden: show() close() toggle()

Auf kleinem Schirm:Unverändert.
Ersetzt.nk-workspace.avatar.chev

<nk-section-label> Abschnittsbeschriftung

Kleine Überschrift zwischen Baum-Abschnitten. Mit addable erscheint beim Hovern ein +, das nk-action feuert.

Welle 2
FavoritenProjektübersicht
<div style="background:var(--nk-bg-sidebar);border-radius:8px;max-width:244px;padding:0 8px 6px"><nk-section-label addable>Favoriten</nk-section-label><nk-tree-item icon="📊">Projektübersicht</nk-tree-item></div>

Attribute

AttributTypStandardBeschreibung
addableboolean–Zeigt das + beim Hovern.
labelstring–Text (alternativ zum Slot).

Slots

SlotBeschreibung
(default)Beschriftung.

Events

EventdetailBeschreibung
nk-action{ action: 'add' }+ geklickt.
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-section-label.plus

<nk-tree> Baum

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.

Welle 2
Favoriten Projektübersicht NotionKit MVP Voice-Office-Hub Wissensbasis Onboarding Designsystem
<div style="background:var(--nk-bg-sidebar);border-radius:8px;max-width:244px;padding:6px 8px"><nk-tree>
  <nk-section-label addable>Favoriten</nk-section-label>
  <nk-tree-item icon="📊" open>Projektübersicht
    <nk-tree-item icon="🚀" active>NotionKit MVP</nk-tree-item>
    <nk-tree-item icon="🎙️">Voice-Office-Hub</nk-tree-item>
  </nk-tree-item>
  <nk-tree-item icon="🧠">Wissensbasis
    <nk-tree-item icon="📄">Onboarding</nk-tree-item>
  </nk-tree-item>
  <nk-tree-item icon="🎨">Designsystem</nk-tree-item>
</nk-tree></div>

Attribute

AttributTypStandardBeschreibung
manualboolean–active nicht automatisch setzen.

Slots

SlotBeschreibung
(default)nk-tree-item- und nk-section-label-Kinder.

Events

EventdetailBeschreibung
nk-select{ value, label, href, item }Bubbelt vom gewählten Eintrag.
nk-toggle{ open, value }Ein Ast auf-/zugeklappt.
nk-action{ action, value }Hover-Aktion eines Eintrags.

Properties: data activeItem value

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.

Welle 2
Suche⌘K Projektübersicht Designsystem
<div style="background:var(--nk-bg-sidebar);border-radius:8px;max-width:244px;padding:6px 8px">
  <nk-tree-item icon="🔍" value="search">Suche<span slot="end" class="nk-kbd-hint"><nk-kbd>⌘</nk-kbd><nk-kbd>K</nk-kbd></span></nk-tree-item>
  <nk-tree-item icon="📊" active>Projektübersicht</nk-tree-item>
  <nk-tree-item icon="🎨">Designsystem</nk-tree-item>
</div>

Attribute

AttributTypStandardBeschreibung
iconstring–Emoji-/Text-Icon (oder slot="icon").
labelstring–Label (alternativ zum Textinhalt).
valuestring–Wert in Events (Standard: Label).
hrefURL–Navigiert bei Auswahl.
activeboolean–Aktueller Eintrag.
openboolean–Kinder aufgeklappt.
compactboolean–26px-Zeile (Footer, Settings-Nav).
no-actionsboolean–Hover-Aktionen +/⋯ ausblenden.

Slots

SlotBeschreibung
(default)Label-Text und verschachtelte nk-tree-items.
iconIcon-Knoten.
endInhalt am Zeilenende, z. B. <span slot="end" class="nk-kbd-hint"> mit nk-kbds (blendet die Aktionen aus).

Events

EventdetailBeschreibung
nk-select{ value, label, href, item }Zeile geklickt / Enter. preventDefault() verhindert das Aktivieren.
nk-toggle{ open, value }Pfeil geklickt.
nk-action{ action: 'add' | 'more', value }Hover-Aktion geklickt.

Properties: label value active open hasChildren

Methoden: select() toggle() focus()

Auf kleinem Schirm:28px-Zeilen (26px mit compact) – unter dem 44px-Touch-Ziel; der Baum erzwingt keine Höhe.
Ersetzt.nk-tree-item.icon.label.actions.active.compact.nk-tree-children.collapsed.nk-toggle-arrow.open.nk-kbd-hint

<nk-topbar> Topbar

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 MVP Zuletzt bearbeitet vor 2 Min. Teilen ⭐
<div style="border:1px solid var(--nk-border);border-radius:8px;display:flex;flex-direction:column"><nk-topbar>
  <nk-breadcrumb><span>📊 Projektübersicht</span><span>🚀 NotionKit MVP</span></nk-breadcrumb>
  <span slot="actions" class="nk-topbar-meta">Zuletzt bearbeitet vor 2 Min.</span>
  <nk-btn slot="actions" variant="share">Teilen</nk-btn>
  <nk-btn slot="actions" variant="topbar">⭐</nk-btn>
  <nk-theme-toggle slot="actions"></nk-theme-toggle>
</nk-topbar></div>

Attribute

keine

Slots

SlotBeschreibung
(default)Breadcrumb / Titel.
actionsButtons rechts.

Events

keine

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.
Ersetzt.nk-topbar.nk-topbar-actions.nk-topbar-btn.nk-topbar-meta.nk-share-btn

<nk-breadcrumb> Breadcrumb

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.

Welle 2
📊 Projektübersicht🚀 NotionKit MVP
<nk-breadcrumb><a href="#">📊 Projektübersicht</a><span>🚀 NotionKit MVP</span></nk-breadcrumb>

Attribute

AttributTypStandardBeschreibung
separatorstring/Trennzeichen.

Slots

SlotBeschreibung
(default)Crumb-Kinder (nur direkte Kinder, ohne slot-Attribut).

Events

EventdetailBeschreibung
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.

Welle 2
<nk-theme-toggle></nk-theme-toggle>

Attribute

AttributTypStandardBeschreibung
modesstringlight darkDie angebotenen Zustände, etwa auto light dark; ohne auto darin ändert sich nichts.
storage-keystringnk-themelocalStorage-Schlüssel; auto ist kein Eintrag.
theme-colorboolean–Hält <meta name="theme-color"> mit: solange ein Theme fest gewählt ist, tragen alle Leisten dessen Farbe – die der Seite, nie eine erfundene.
titlestring–Tooltip; ersetzt den eingebauten Text.

Slots

keine

Events

EventdetailBeschreibung
nk-change{ value: 'auto' | 'light' | 'dark', theme: 'light' | 'dark' }Modus gesetzt; theme ist das Sichtbare (ohne auto sind beide das Theme).

Properties: value theme mode modes

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.

Welle 2
Start Eingang Suche Einstellungen Mehr
<div style="max-width:390px;border:1px solid var(--nk-border);border-radius:12px;overflow:hidden"><nk-tab-bar always value="inbox">
  <nk-tab-bar-item icon="🏠" value="home">Start</nk-tab-bar-item>
  <nk-tab-bar-item icon="📥" value="inbox">Eingang</nk-tab-bar-item>
  <nk-tab-bar-item icon="🔍" value="search">Suche</nk-tab-bar-item>
  <nk-tab-bar-item icon="⚙️" value="settings">Einstellungen</nk-tab-bar-item>
  <nk-tab-bar-item icon="☰" drawer>Mehr</nk-tab-bar-item>
</nk-tab-bar></div>

Attribute

AttributTypStandardBeschreibung
valuestring–Aktiver Wert (Standard: Eintrag mit active, sonst der erste); ein Wert, den kein Eintrag hat, markiert den drawer-Eintrag.
alwaysboolean–In jeder Breite sichtbar, nicht nur unter 860px.
fixedboolean–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.
floatingboolean–Eine fixierte Kapsel mit runden Ecken statt der vollbreiten Leiste.
labelstring–aria-label des nav.

Slots

SlotBeschreibung
(default)nk-tab-bar-item-Kinder, bis zu fünf.

Events

EventdetailBeschreibung
nk-change{ value }Aktiver Eintrag gewechselt.
nk-select{ value, label, href, item, drawer }Bubbelt vom getippten Eintrag; abbrechbar.

Properties: value items

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.
Ersetzt.nk-tab-bar.nk-tab-bar-spacer.always.fixed.floating

<nk-tab-bar-item> Tab-Bar-Eintrag

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.

Welle 2
StartEingang
<div style="max-width:390px;border:1px solid var(--nk-border);border-radius:12px;overflow:hidden"><nk-tab-bar always><nk-tab-bar-item icon="🏠" value="home" active>Start</nk-tab-bar-item><nk-tab-bar-item icon="📥" value="inbox">Eingang</nk-tab-bar-item></nk-tab-bar></div>

Attribute

AttributTypStandardBeschreibung
iconstring–Emoji oder Glyphe (Alternative: slot="icon").
valuestring–Wert (Standard: die Beschriftung).
labelstring–Beschriftung (alternativ zum Default-Slot).
hrefstring–Navigiert nach nk-select.
activeboolean–Das aktuelle Ziel (aria-current="page").
drawerboolean–Öffnet die Sidebar-Schublade, statt aktiv zu werden.
disabledboolean–Nicht wählbar.

Slots

SlotBeschreibung
(default)Beschriftung.
iconIcon-Knoten statt des Attributs.

Events

EventdetailBeschreibung
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
<div style="display:flex;flex-direction:column;height:100%"><nk-page icon="🚀" 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-tag color="purple">Designsystem</nk-tag></span></nk-page-actions>
  <p class="lead">Eine ruhige, dokumentzentrierte Workspace-App – nur aus Elementen gebaut.</p>
</nk-page></div>

Attribute

AttributTypStandardBeschreibung
iconstring–Seiten-Emoji; Klick feuert nk-action.
fullboolean–Seitenoption „Volle Breite“: Die Spalte füllt das Fenster, statt bei 760px zu enden.
smallboolean–Seitenoption „Kleiner Text“: Dokumenttext 14px statt 16px; Überschriften, Lead, Prosa und Editor ziehen mit.
coverboolean–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.
narrowboolean–Ohne Scroll-Wrapper (Landing-/Doku-Seite).

Slots

SlotBeschreibung
(default)Titel, Meta, Blöcke – ein <p class="lead"> wird zum Vorspann.
coverEin nk-page-cover (statt des cover-Attributs).
iconEigener Icon-Knoten.

Events

EventdetailBeschreibung
nk-action{ action: 'icon', value }Icon geklickt (Emoji-Picker öffnen).
Auf kleinem Schirm:Seitenabstand sinkt unter 860px auf 24px.
Ersetzt.nk-page-scroll.nk-page.nk-page-icon.nk-cover.lead.full.small

<nk-page-cover> Seiten-Cover

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“.

Welle 3
<nk-page-cover src="/covers/meadow.svg"></nk-page-cover>

Attribute

AttributTypStandardBeschreibung
srcURL–Cover-Bild.
positionCSS object-positioncenterWo der Ausschnitt sitzt.

Slots

keine

Events

keine

Auf kleinem Schirm:Unverändert; --nk-cover-height senken, wenn das Band zu viel eines kurzen Schirms frisst.
Ersetzt.nk-cover

<nk-page-title> Seitentitel

Die 40px-Überschrift. Mit editable ein Klartext-Feld: Enter übernimmt, Blur feuert nk-change.

Welle 3
NotionKit MVP
<nk-page-title editable>NotionKit MVP</nk-page-title>

Attribute

AttributTypStandardBeschreibung
editableboolean–Direkt bearbeitbar.
placeholderstring–Wird angezeigt, wenn leer (editable).
valuestring–Titeltext (alternativ zum Inhalt).

Slots

SlotBeschreibung
(default)Titeltext.

Events

EventdetailBeschreibung
nk-change{ value }Bearbeiteter Titel übernommen.

Properties: value

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
<nk-page-actions><span>👤 Marcel Karas</span><span>📅 Erstellt am 12. Mai 2026</span><span>🏷️ <nk-tag color="purple">Designsystem</nk-tag></span></nk-page-actions>

Attribute

keine

Slots

SlotBeschreibung
(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 Arbeit ALAda Lovelace 2. Juni 2026 DesignsystemCSS
<nk-props style="max-width:520px">
  <nk-prop label="Status" icon="◉"><nk-tag color="blue">In Arbeit</nk-tag></nk-prop>
  <nk-prop label="Verantwortlich" icon="👤"><nk-avatar size="small" color="purple">AL</nk-avatar>Ada Lovelace</nk-prop>
  <nk-prop label="Fällig" icon="📅">2. Juni 2026</nk-prop>
  <nk-prop label="Tags" icon="🏷️"><nk-tag color="purple">Designsystem</nk-tag><nk-tag>CSS</nk-tag></nk-prop>
  <nk-prop label="Fortschritt" icon="▰"><nk-progress value="65" label="65 %" wide></nk-progress></nk-prop>
</nk-props>

Attribute

AttributTypStandardBeschreibung
flushboolean–Kein Außenabstand.

Slots

SlotBeschreibung
(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
<nk-props style="max-width:520px"><nk-prop label="Fällig" icon="📅">2. Juni 2026</nk-prop><nk-prop label="Adresse" icon="✉️" text>support+design@notionkit.example.com · <nk-tag color="green">Bestätigt</nk-tag></nk-prop></nk-props>

Attribute

AttributTypStandardBeschreibung
labelstring–Name der Eigenschaft.
iconstring–Typ-Icon.
textboolean–Der Wert fließt als Text.

Slots

SlotBeschreibung
(default)Der Wert.
iconIcon-Knoten.

Events

EventdetailBeschreibung
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.

<nk-panels>
  <nk-panel href="#" cover="/covers/aurora.svg" icon="🚀" title="NotionKit MVP"><p>vor 2 Min.</p></nk-panel>
  <nk-panel href="#" cover="/covers/dunes.svg" icon="📚" title="Wissensbasis"><p>Gestern</p></nk-panel>
  <nk-panel title="Wochenrückblick"><p>Drei Seiten haben sich geändert, ein Kommentar wartet auf Antwort.</p></nk-panel>
</nk-panels>

Attribute

AttributTypStandardBeschreibung
flushboolean–Kein Außenabstand.

Slots

SlotBeschreibung
(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.

<div style="max-width:360px;display:grid;gap:12px"><nk-panel href="#" cover icon="🚀" title="NotionKit MVP"><p>vor 2 Min.</p></nk-panel>
<nk-panel title="Wochenrückblick"><nk-tag slot="end" color="blue">In Arbeit</nk-tag><p>Drei Seiten haben sich geändert, ein Kommentar wartet auf Antwort.</p></nk-panel></div>

Attribute

AttributTypStandardBeschreibung
titlestring–Überschrift.
iconstring–Seiten-Icon.
coverURL | empty–Cover-Band: leer für den Verlauf, eine URL für ein Bild.
hrefURL–Macht das Panel zum Link.
targetstring–Link-Ziel.

Slots

SlotBeschreibung
(default)Inhalt: <p>, ein Prosa-Block, ein Fortschrittsbalken.
endNeben dem Titel, an seinem rechten Rand: ein Tag, ein Button.

Events

keine

Auf kleinem Schirm:Nimmt die Breite seiner Rasterzelle.
Ersetzt.nk-panel.nk-cover.nk-page-icon.p-head.p-end

<nk-block-host> Block-Hülle

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.

<nk-block-host handle><p style="margin:0" contenteditable="true">Hier steht Block-Inhalt – klicken zum Fokussieren.</p></nk-block-host>

Attribute

AttributTypStandardBeschreibung
handleboolean–Drag-Griff ⠿ rendern (bei Hover sichtbar).
drop-targetboolean–Drop-Indikator-Linie über dem Block.

Slots

SlotBeschreibung
(default)Block-Inhalt / Editor-Wurzel.

Events

keine

Auf kleinem Schirm:Der Griff sitzt 26px links der Spalte und ist ohne Platz verborgen.
Ersetzt.nk-block-host.nk-block-handle.nk-drop-target

<nk-banner> Banner

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.
<nk-banner variant="info">ℹ️ <span>Diese Seite ist eine <b>Komponenten-Vorschau</b> – jedes Element folgt denselben Design-Tokens.</span><button slot="action" type="button">Palette öffnen</button></nk-banner>
<nk-banner variant="warning">⚠️ <span>Die Datenbank „Projektübersicht“ hat 2 überfällige Einträge.</span><button slot="action" type="button">Ansehen</button></nk-banner>
<nk-banner variant="success">✓ <span>Alle Änderungen wurden synchronisiert.</span></nk-banner>
<nk-banner variant="danger">⛔ <span>Die Verbindung zu Notion ist abgerissen.</span></nk-banner>

Attribute

AttributTypStandardBeschreibung
variantinfo | success | warning | danger–Tönung.

Slots

SlotBeschreibung
(default)Icon und Text.
actionDie 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.
Ersetzt.nk-banner.info.success.warning.danger.b-action

<nk-empty> Leerzustand

Gestrichelte Box mit Icon, Titel, Beschreibung und der Aktion, die du hineinslottest.

Welle 3
+ Neuer EintragImportieren
<nk-empty icon="🗂️" title="Noch keine Einträge" desc="Lege den ersten Eintrag an oder importiere Daten."><nk-btn variant="primary" small>+ Neuer Eintrag</nk-btn><nk-btn variant="secondary" small>Importieren</nk-btn></nk-empty>

Attribute

AttributTypStandardBeschreibung
iconstring–Emoji.
titlestring–Titel. Wird einmal gelesen und vom Host genommen, erscheint also nie als Tooltip.
descstring–Beschreibung.

Slots

SlotBeschreibung
(default)Handlungsaufforderung – mehrere Knöpfe stehen in einer zentrierten Zeile, 8px auseinander.
iconFormatiertes Icon.
titleFormatierter Titel.
descFormatierte 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.

Welle 3
<nk-skeleton height="18" width="60%"></nk-skeleton>
<nk-skeleton lines="3" widths="100%,85%,40%"></nk-skeleton>

Attribute

AttributTypStandardBeschreibung
linesnumber1Anzahl Zeilen.
heightpx | CSS length13Zeilenhöhe.
widthCSS length–Breite für jede Zeile.
widthslist–Kommagetrennte Breite je Zeile.

Slots

keine

Events

keine

Auf kleinem Schirm:Unverändert; respektiert Reduced Motion.
Ersetzt.nk-skeleton

<nk-synced> Synchronisierter Block

Inhalt, der an mehreren Orten erscheint, gerahmt mit Badge.

Welle 3
Unsere Mission: Dem Arbeitstag echtes Gewicht nehmen – ruhig, klar, wirksam.
<nk-synced badge="⟳ 3 Orte"><div style="font-size:14px;line-height:1.55"><b>Unsere Mission:</b> Dem Arbeitstag echtes Gewicht nehmen – ruhig, klar, wirksam.</div></nk-synced>

Attribute

AttributTypStandardBeschreibung
badgestring⟳ synced · ⟳ synchronisiertBadge-Text.

Slots

SlotBeschreibung
(default)Inhalt.

Events

keine

Auf kleinem Schirm:Unverändert.
Ersetzt.nk-synced.synced-badge

<nk-tabs> Tabs

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.
<nk-tabs value="notes">
  <nk-tab value="notes">📝 Notizen</nk-tab>
  <nk-tab value="tasks">✅ Aufgaben</nk-tab>
  <nk-tab value="files">📎 Dateien</nk-tab>
  <div slot="panel" data-tab="notes" class="nk-tab-panel">Freie Notizen zum Projekt – Protokolle, Ideen, Entwürfe.</div>
  <div slot="panel" data-tab="tasks" class="nk-tab-panel">Aufgaben zu diesem Projekt, verknüpft mit der Datenbank.</div>
  <div slot="panel" data-tab="files" class="nk-tab-panel">Angehängte Dateien und Exporte.</div>
</nk-tabs>

Attribute

AttributTypStandardBeschreibung
valuestring–Aktiver Tab-Wert (Standard: Tab mit active, sonst der erste).
scrollboolean–Eine Zeile, die seitlich scrollt und den aktiven Tab im Blick hält.

Slots

SlotBeschreibung
(default)nk-tab-Kinder.
panelPanels mit data-tab.

Events

EventdetailBeschreibung
nk-change{ value }Aktiver Tab gewechselt.
nk-select{ value, label }Vom geklickten Tab.

Properties: value scroll

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.

Welle 3
📝 Notizen✅ Aufgaben
<nk-tabs><nk-tab value="a" active>📝 Notizen</nk-tab><nk-tab value="b">✅ Aufgaben</nk-tab></nk-tabs>

Attribute

AttributTypStandardBeschreibung
valuestring–Wert (Standard: Text).
activeboolean–Aktiv.
disabledboolean–Nicht wählbar.

Slots

SlotBeschreibung
(default)Beschriftung.

Events

EventdetailBeschreibung
nk-select{ value, label }Geklickt / Enter.
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-tab.active

<nk-segmented> Segment-Schalter

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.

Welle 3
<nk-segmented name="range" value="week"><button value="week">Woche</button><button value="month">Monat</button><button value="quarter">Quartal</button></nk-segmented>
<div style="max-width:300px;margin-top:12px"><nk-segmented name="filter" value="all" scroll><button value="all">Alle</button><button value="attention">⚠️ Aufmerksamkeit</button><button value="failed">Fehlgeschlagen</button><button value="read">Gelesen</button><button value="ignored">Ignoriert</button></nk-segmented></div>
<div style="max-width:300px;margin-top:12px"><nk-segmented name="filter2" value="all" wrap><button value="all">Alle</button><button value="attention">⚠️ Aufmerksamkeit</button><button value="failed">Fehlgeschlagen</button><button value="read">Gelesen</button><button value="ignored">Ignoriert</button></nk-segmented></div>

Attribute

AttributTypStandardBeschreibung
valuestring–Gewählter Wert (Standard: Button mit .active, sonst der erste).
scrollboolean–Horizontal scrollbare Zeile, Scrollleiste versteckt.
wrapboolean–Segmente brechen in weitere Zeilen um.
namestring–Name des Formularfelds (FormData-Schlüssel).
disabledboolean–Deaktiviert das Control.

Slots

SlotBeschreibung
(default)<button value="…">-Kinder.

Events

EventdetailBeschreibung
nk-change{ value, name }Auswahl geändert.
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.

Welle 3
<nk-steps label="Eigenes Modell verbinden" current="2"></nk-steps>
<script>{ document.currentScript.previousElementSibling.steps = [{ label: 'Anbieter wählen', desc: 'Anthropic' }, 'API-Schlüssel eintragen', 'Verbindung testen']; }</script>
<div style="margin-top:16px"><nk-steps id="stepsWizard" label="Eigenes Modell verbinden" current="3" horizontal selectable></nk-steps></div>
<script>{ document.getElementById('stepsWizard').steps = [{ label: 'Anbieter wählen', state: 'done', href: '#nk-steps' }, { label: 'API-Schlüssel eintragen', desc: 'übersprungen', state: 'skipped' }, 'Verbindung testen']; }</script>

Attribute

AttributTypStandardBeschreibung
stepslist–Kommagetrennte Schritt-Labels.
currentnumber1Der aktuelle Schritt, ab 1.
labelstring–Der zugängliche Name der Liste.
selectableboolean–Labels sind Buttons, die zu ihrem Schritt springen.
horizontalboolean–Eine Zeile über einem Assistenten.

Slots

keine

Events

EventdetailBeschreibung
nk-select{ index, value, step }Ein Schritt geklickt (mit selectable, oder sein Link mit einfachem Klick oder Enter); abbrechen, um zu bleiben.

Properties: steps current selectable horizontal

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.
Ersetzt.nk-steps.nk-step.st-mark.st-desc.done.current.skipped.st-label.horizontal

<nk-stats> Kennzahl-Karten

nk-stats ist die Zeile; jede nk-stat zeigt Label, Wert und eine Trendzeile, gefärbt über trend.

Welle 3
<nk-stats>
  <nk-stat label="Aktive Seiten" value="128" delta="▲ 12 diese Woche" trend="up"></nk-stat>
  <nk-stat label="KI-Anfragen" value="847" delta="▲ 23 %" trend="up"></nk-stat>
  <nk-stat label="Offene Aufgaben" value="14" delta="▼ 5 seit gestern" trend="down"></nk-stat>
</nk-stats>

Attribute

AttributTypStandardBeschreibung
labelstring–(nk-stat) Label.
valuestring–(nk-stat) Große Zahl.
deltastring–(nk-stat) Trendtext.
trendup | down–(nk-stat) Färbt das Delta.

Slots

SlotBeschreibung
(default)(nk-stats) nk-stat-Kinder; (nk-stat) Slots label, value, delta für formatierten Inhalt.

Events

keine

Auf kleinem Schirm:Die Zeile bricht unter 860px um.
Ersetzt.nk-stats.nk-stat.s-label.s-value.s-delta.up.down

<nk-stat> Kennzahl-Karte

Eine Karte; siehe nk-stats für die Zeile.

Welle 3
<nk-stats><nk-stat label="Aktive Seiten" value="128" delta="▲ 12 diese Woche" trend="up"></nk-stat></nk-stats>

Attribute

AttributTypStandardBeschreibung
labelstring–Label.
valuestring–Wert.
deltastring–Trendtext.
trendup | down–Delta-Farbe.

Slots

SlotBeschreibung
labelFormatiertes Label.
valueFormatierter Wert.
deltaFormatiertes 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
<div style="display:flex;align-items:center;gap:12px"><nk-avatar-group more="+2"><span class="mini-avatar" style="background:linear-gradient(135deg,var(--nk-decor-purple),var(--nk-decor-blue))">MK</span><span class="mini-avatar" style="background:var(--nk-color-green)">SL</span><span class="mini-avatar" style="background:var(--nk-color-orange)">TW</span></nk-avatar-group><span style="font-size:12.5px;color:var(--nk-text-tertiary)">5 Personen haben Zugriff</span></div>

Attribute

AttributTypStandardBeschreibung
morestring–Text der letzten Blase, z. B. +2.

Slots

SlotBeschreibung
(default)<span class="mini-avatar" style="background:…">-Kinder.

Events

keine

Auf kleinem Schirm:Unverändert.
Ersetzt.nk-avatar-group.mini-avatar.more

<nk-avatar> Avatar

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.

Welle 3
TWALSLMKA
<div style="display:flex;align-items:center;gap:10px"><nk-avatar size="small" color="blue">TW</nk-avatar><nk-avatar>AL</nk-avatar><nk-avatar color="green">SL</nk-avatar><nk-avatar size="large" color="orange">MK</nk-avatar><nk-avatar size="xlarge" color="purple" name="Ada Lovelace"></nk-avatar><nk-avatar size="large" square>A</nk-avatar></div>

Attribute

AttributTypStandardBeschreibung
sizesmall | large | xlarge–Größe; Standard 24px.
colorcolour name | CSS–gray, brown, orange, yellow, green, blue, purple, pink, red – oder ein beliebiger CSS-Hintergrund.
squareboolean–Ecken statt Kreis.
namestring–Initialen, wenn leer; Alt-Text des Fotos.
srcURL–Foto.

Slots

SlotBeschreibung
(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.
Ersetzt.nk-avatar.small.large.xlarge.square.green.blue.orange.purple

<nk-mention> Erwähnung

Inline-Chip für eine Person (mit Avatar-Slot), eine Seite oder ein Datum.

Welle 3

SLSara Lindt · 📄 Onboarding · 📅 20. Mai

<p style="margin:0;line-height:1.7"><nk-mention type="person"><span slot="avatar" class="mini-avatar" style="background:#448361">SL</span>Sara Lindt</nk-mention> · <nk-mention type="page">📄 Onboarding</nk-mention> · <nk-mention type="date">📅 20. Mai</nk-mention></p>

Attribute

AttributTypStandardBeschreibung
typeperson | page | date–Art der Erwähnung.

Slots

SlotBeschreibung
avatar.mini-avatar für Personen.
(default)Text.

Events

keine

Auf kleinem Schirm:Unverändert; bricht nie um.
Ersetzt.nk-mention.person.page.date.mini-avatar

<nk-template-btn> Vorlagen-Button

Button in voller Breite, linksbündig, auf Callout-Hintergrund – „Vorlage einfügen“. Feuert nk-select mit value.

Welle 3
Wochenplan einfügen Meeting-Protokoll einfügen Retro-Board einfügen
<nk-template-btn icon="📅" value="week-plan">Wochenplan einfügen</nk-template-btn>
<nk-template-btn icon="🤝" value="minutes">Meeting-Protokoll einfügen</nk-template-btn>
<nk-template-btn icon="🔁" value="retro">Retro-Board einfügen</nk-template-btn>

Attribute

AttributTypStandardBeschreibung
iconstring–Emoji vorn.
valuestring–Gemeldeter Wert (Standard: Text).
disabledboolean–Deaktiviert.

Slots

SlotBeschreibung
(default)Beschriftung.

Events

EventdetailBeschreibung
nk-select{ value, label }Geklickt.
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-template-btn

<nk-model-card> Modell-Karte

Eine Radio-artige Karte. Karten mit gleichem name bilden eine Gruppe; die gewählte sendet value mit dem Formular.

Welle 3
<nk-model-card name="model" value="pro" title="Mona Pro" desc="Am besten für lange Dokumente und Recherche." selected></nk-model-card>
<nk-model-card name="model" value="fast" title="Mona Fast" desc="Schnelle Antworten, geringere Kosten."></nk-model-card>

Attribute

AttributTypStandardBeschreibung
titlestring–Namenszeile. Wird einmal gelesen und vom Host genommen, erscheint also nie als Tooltip.
descstring–Beschreibung.
namestring–Name des Formularfelds (FormData-Schlüssel).
disabledboolean–Deaktiviert das Control.
valuestring–Gesendeter Wert.
selectedboolean–Ausgewählt.

Slots

SlotBeschreibung
titleFormatierte Namenszeile (z. B. mit nk-tag).
descFormatierte Beschreibung.

Events

EventdetailBeschreibung
nk-change{ value, name, checked }Ausgewählt.
nk-select{ value, label }Ausgewählt.
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-model-card.selected.m-radio.m-name.m-desc

<nk-profile-row> Profilzeile

Ein 56px-Gradient-Avatar mit dem, was du daneben slottest – meist zwei Buttons.

Welle 3
Foto ändern Entfernen
<nk-profile-row avatar="MK"><nk-btn variant="secondary" small>Foto ändern</nk-btn> <nk-btn variant="danger" small>Entfernen</nk-btn></nk-profile-row>

Attribute

AttributTypStandardBeschreibung
avatarstring–Initialen.

Slots

SlotBeschreibung
avatarEigener Avatar (z. B. ein Bild).
(default)Inhalt neben dem Avatar.

Events

keine

Auf kleinem Schirm:Unverändert.
Ersetzt.nk-profile-row.big-avatar

<nk-danger-zone> Gefahrenzone

Rot gerahmte Box für destruktive Einstellungen.

Welle 3
Löschen
<nk-danger-zone title="Gefahrenzone"><nk-field label="Workspace löschen" desc="Das Löschen des Workspace entfernt alle Seiten."><nk-btn variant="danger-solid" small>Löschen</nk-btn></nk-field></nk-danger-zone>

Attribute

AttributTypStandardBeschreibung
titlestring–Rote Überschrift. Wird einmal gelesen und vom Host genommen, erscheint also nie als Tooltip.

Slots

SlotBeschreibung
(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.

Welle 3
<nk-member-list>
  <nk-member-row name="Sara Lindt" mail="sara@example.com" color="#448361"><nk-select slot="role" compact value="editor"><option value="viewer">Betrachter</option><option value="editor">Bearbeiter</option><option value="admin">Admin</option></nk-select></nk-member-row>
  <nk-member-row name="Tom Weber" mail="tom@example.com" color="#d9730d"><nk-select slot="role" compact value="viewer"><option value="viewer">Betrachter</option><option value="editor">Bearbeiter</option><option value="admin">Admin</option></nk-select></nk-member-row>
</nk-member-list>

Attribute

AttributTypStandardBeschreibung
namestring–(row) Name.
mailstring–(row) Mail-Zeile.
avatarstring–(row) Initialen (Standard: aus dem Namen).
colorCSS color–(row) Avatar-Hintergrund.
lastboolean–(row) Kein unterer Rand – setzt die Liste.

Slots

SlotBeschreibung
(default)(list) Zeilen; (row) Zusatzinhalt.
role(row) Ein Control rechts, z. B. nk-select compact.
avatar(row) Eigener Avatar.

Events

keine

Auf kleinem Schirm:Unverändert; das Rollen-Select schrumpft auf 120px.
Ersetzt.nk-member-list.nk-member-row.last.m-mail.mini-avatar

<nk-member-row> Mitgliederzeile

Eine Zeile; siehe nk-member-list.

Welle 3
<nk-member-row name="Sara Lindt" mail="sara@example.com" color="green" last></nk-member-row>

Attribute

AttributTypStandardBeschreibung
namestring–Name.
mailstring–Mail.
avatarstring–Initialen.
colorcolour name | CSS–Avatar-Farbe: einer der neun Namen (gray … red) oder ein beliebiger CSS-Hintergrund; ohne sie der Avatar-Verlauf.
lastboolean–Kein unterer Rand.

Slots

SlotBeschreibung
roleControl rechts.
avatarEigener 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.

Welle 4
<nk-modal open>
  <nk-settings-user slot="user" name="Marcel Karas" mail="marcel@monahilft.de"></nk-settings-user>
  <nk-settings-pane name="profile" group="Konto" icon="👤" label="Mein Profil" title="Mein Profil" active>
    <nk-profile-row avatar="MK"><nk-btn variant="secondary" small>Foto ändern</nk-btn></nk-profile-row>
    <nk-field label="Anzeigename" desc="Erscheint neben deinen Kommentaren."><nk-input value="Marcel Karas"></nk-input></nk-field>
    <nk-field label="E-Mail"><nk-input type="email" value="marcel@monahilft.de"></nk-input></nk-field>
  </nk-settings-pane>
  <nk-settings-pane name="appearance" group="Konto" icon="🎨" label="Darstellung" title="Darstellung">
    <nk-field label="Theme"><nk-select><option>Hell</option><option>Dunkel</option><option>System</option></nk-select></nk-field>
  </nk-settings-pane>
  <nk-settings-pane name="members" group="Workspace" icon="👥" label="Mitglieder" title="Mitglieder">
    <nk-member-list><nk-member-row name="Sara Lindt" mail="sara@example.com" color="#448361"></nk-member-row></nk-member-list>
  </nk-settings-pane>
</nk-modal>

Attribute

AttributTypStandardBeschreibung
openboolean–Sichtbar.
panestring–Name des aktiven Panes (Standard: Pane mit active, sonst das erste).

Slots

SlotBeschreibung
(default)nk-settings-pane-Kinder.
usernk-settings-user oben in der Nav.
navZusätzlicher Nav-Inhalt unter den generierten Zeilen (860px-Regeln erreichen geslottete Elemente nicht).

Events

EventdetailBeschreibung
nk-toggle{ open }Geöffnet / geschlossen.
nk-select{ value, label }Pane gewechselt.

Properties: open pane panes

Methoden: show(pane?) close() toggle()

Auf kleinem Schirm:Unter 860px wird die Nav zur 60px-Icon-Leiste; der Dialog nimmt 92vw × 86vh.
Ersetzt.nk-modal-backdrop.open.nk-modal.nk-settings-nav.nk-settings-content

<nk-sheet> Sheet

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.

Welle 4
<nk-sheet open title="Mehr">
  <nk-tree manual>
    <nk-section-label>Favoriten</nk-section-label>
    <nk-tree-item icon="🚀">NotionKit MVP</nk-tree-item>
    <nk-tree-item icon="🎙️">Voice-Office-Hub</nk-tree-item>
    <nk-section-label>Workspace</nk-section-label>
    <nk-tree-item icon="🧠">Wissensbasis</nk-tree-item>
    <nk-tree-item icon="🗑️">Papierkorb</nk-tree-item>
  </nk-tree>
</nk-sheet>

Attribute

AttributTypStandardBeschreibung
openboolean–Sichtbar.
titlestring–Überschrift unter dem Griff und Name des Dialogs – nie ein Tooltip.

Slots

SlotBeschreibung
(default)Der Inhalt: ein nk-tree, Menüeinträge, Felder.

Events

EventdetailBeschreibung
nk-toggle{ open }Geöffnet / geschlossen.

Properties: open title

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.
Ersetzt.nk-sheet-backdrop.open.nk-sheet.sh-grabber.sh-title

<nk-peek> Side Peek

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-btn slot="actions" variant="topbar" aria-label="Als Seite öffnen"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/></svg></nk-btn>
  <nk-page-title>🗃️ Database Table-View</nk-page-title>
  <nk-props>
    <nk-prop label="Status" icon="◉"><nk-tag color="blue">In Arbeit</nk-tag></nk-prop>
    <nk-prop label="Fällig" icon="📅">20.05.2026</nk-prop>
  </nk-props>
  <div class="nk-prose"><p>Tabelle, Board und Liste lesen dieselben Zeilen; Filter und Sortierung wirken auf alle drei.</p></div>
</nk-peek>

Attribute

AttributTypStandardBeschreibung
openboolean–Sichtbar.
labelstring–Der Name des Dialogs – der Titel des Eintrags.
close-labelstringClose · SchließenName von ».
resizableboolean–Der linke Rand macht es breiter oder schmaler – Zeiger und Pfeiltasten; die Breite ist das Token --nk-peek-width auf :root.
widthpx560Setzt die Breite, innerhalb von min und max.
minpx380Am schmalsten.
maxpxwindow − 320Am breitesten.
resize-labelstringResize · Breite ändernName des Randes.
insetboolean–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

SlotBeschreibung
(default)Die Seite: Titel, Eigenschaften, Prosa, Kommentare.
actionsButtons neben » – als Seite öffnen, teilen.

Events

EventdetailBeschreibung
nk-toggle{ open }Geöffnet / geschlossen.
nk-resize{ width }Ziehen oder eine Taste hat die Breite geändert – der Moment, sie zu speichern.

Properties: open width

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.
Ersetzt.nk-peek-backdrop.open.nk-peek.pk-resize.active.pk-bar.pk-body

<nk-dialog> Dialog

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-btn slot="actions" variant="secondary" value="">Abbrechen</nk-btn>
  <nk-btn slot="actions" variant="danger-solid" value="trash">In den Papierkorb</nk-btn>
</nk-dialog>

Attribute

AttributTypStandardBeschreibung
openboolean–Sichtbar.
titlestring–Überschrift und Name des Dialogs – nie ein Tooltip.
alertboolean–Ein Alertdialog, beschrieben durch seinen Text.
wideboolean–560px statt 440px.

Slots

SlotBeschreibung
(default)Der Text oder die Felder.
actionsDie Buttons, rechts; ein value schließt damit.

Events

EventdetailBeschreibung
nk-close{ value }Schließt gleich – abbrechen hält ihn offen.
nk-toggle{ open }Geöffnet / geschlossen.

Properties: open returnValue title

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.
Ersetzt.nk-dialog-backdrop.open.nk-dialog.wide.dl-title.dl-body.dl-actions

<nk-settings-pane> Einstellungs-Pane

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.

Welle 4

E-Mail

<nk-settings-pane title="Benachrichtigungen" active><h3>E-Mail</h3><nk-field label="E-Mail-Benachrichtigungen"><nk-switch checked></nk-switch></nk-field></nk-settings-pane>

Attribute

AttributTypStandardBeschreibung
namestring–Kennung für pane.
labelstring–Nav-Beschriftung (ohne Label keine Nav-Zeile).
iconstring–Nav-Icon.
groupstring–Abschnittsbeschriftung über den Nav-Zeilen.
titlestring–Pane-Überschrift. Wird einmal gelesen und vom Host genommen, erscheint also nie als Tooltip.
activeboolean–Sichtbar (vom Modal verwaltet).

Slots

SlotBeschreibung
(default)Felder, Überschriften, alles.

Events

keine

Auf kleinem Schirm:Inhalts-Padding sinkt unter 860px auf 24px.
Ersetzt.nk-settings-pane.active

<nk-settings-user> Einstellungs-Benutzer

Die Benutzerkarte oben in der Einstellungs-Nav.

Welle 4
<div style="background:var(--nk-bg-sidebar);border-radius:8px;max-width:230px;padding:10px 8px"><nk-settings-user name="Marcel Karas" mail="marcel@monahilft.de"></nk-settings-user></div>

Attribute

AttributTypStandardBeschreibung
namestring–Name.
mailstring–Mail.
avatarstring–Initialen (Standard: aus dem Namen).

Slots

SlotBeschreibung
avatarEigener Avatar.

Events

keine

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.

Welle 4
<nk-cmdk open placeholder="Suchen oder Befehl eingeben …"></nk-cmdk>
<script>
  document.querySelector('nk-cmdk').commands = [
    { group: 'Seiten', items: [
      { id: 'mvp', icon: '🚀', label: 'NotionKit MVP' },
      { id: 'voh', icon: '🎙️', label: 'Voice-Office-Hub' },
      { id: 'kb', icon: '🧠', label: 'Wissensbasis' },
    ]},
    { group: 'Aktionen', items: [
      { id: 'new', icon: '+', label: 'Neue Seite anlegen', shortcut: '⌘N' },
      { id: 'theme', icon: '🌙', label: 'Theme wechseln', shortcut: '⌘⇧L' },
      { id: 'settings', icon: '⚙️', label: 'Einstellungen öffnen', shortcut: '⌘,' },
    ]},
  ];
</script>

Attribute

AttributTypStandardBeschreibung
openboolean–Sichtbar.
hotkeystringmod+kGlobaler Shortcut, z. B. mod+k, mod+shift+p.
placeholderstring–Platzhalter des Eingabefelds.

Slots

SlotBeschreibung
footerErsetzt die Standard-Tastenhinweise.

Events

EventdetailBeschreibung
nk-command{ id, item, query }Ein Eintrag wurde gewählt; preventDefault() überspringt item.action.
nk-toggle{ open }Geöffnet / geschlossen.

Properties: commands open query

Methoden: show() close() toggle() results() pick(index?)

Auf kleinem Schirm:Unter 860px volle Breite (96vw) und näher am oberen Rand.
Ersetzt.nk-cmdk-backdrop.open.nk-cmdk.nk-cmdk-input-row.nk-cmdk-list.nk-cmdk-group.nk-cmdk-item.selected.m-icon.m-shortcut.nk-cmdk-empty.nk-cmdk-footer

<nk-menu> Menü

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
Seite Umbenennen Duplizieren Verschieben nach … Löschen
<nk-menu>
  <nk-menu-item type="label">Seite</nk-menu-item>
  <nk-menu-item icon="✏️" shortcut="⌘E" value="rename">Umbenennen</nk-menu-item>
  <nk-menu-item icon="📄" shortcut="⌘D" value="duplicate">Duplizieren</nk-menu-item>
  <nk-menu-item icon="📁" value="move">Verschieben nach …</nk-menu-item>
  <nk-menu-item type="separator"></nk-menu-item>
  <nk-menu-item icon="🗑️" danger value="delete">Löschen</nk-menu-item>
</nk-menu>

Attribute

AttributTypStandardBeschreibung
floatingboolean–Ein Menü über der Seite: fixiert, geschlossen bis open, blendet ein.
sheetboolean–Unter 860px ein Bottom Sheet (mit floating).
openboolean–Sichtbar (mit floating).
alignend | startendWelche Kanten show(anchor) bündig setzt.

Slots

SlotBeschreibung
(default)nk-menu-item-Kinder.

Events

EventdetailBeschreibung
nk-select{ value, label, item }Vom gewählten Eintrag.
nk-toggle{ open }Ein schwebendes Menü geöffnet / geschlossen.

Properties: open items

Methoden: show(anchor?) close() toggle(anchor?) focusFirst()

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.
Ersetzt.nk-pop.nk-menu.nk-menu-item.m-icon.m-shortcut.danger.nk-menu-sep.nk-menu-label.floating.sheet.open

<nk-menu-item> Menüeintrag

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.

Welle 4
UmbenennenKleiner Text
<nk-menu><nk-menu-item icon="✏️" shortcut="⌘E" value="rename">Umbenennen</nk-menu-item><nk-menu-item type="switch" icon="🔡" value="small" checked>Kleiner Text</nk-menu-item></nk-menu>

Attribute

AttributTypStandardBeschreibung
iconstring–Icon vorn.
shortcutstring–Shortcut-Text hinten.
valuestring–Gemeldeter Wert (Standard: Text).
dangerboolean–Roter Text.
typeitem | separator | label | switch | checkitemZeilenart.
checkedboolean–Der Schalter ist an, das Häkchen steht (type="switch" / "check").
disabledboolean–Nicht wählbar.

Slots

SlotBeschreibung
(default)Beschriftung.
iconIcon-Knoten.

Events

EventdetailBeschreibung
nk-select{ value, label, item }Geklickt / Enter.
nk-change{ value, checked, item }Eine Schalter- oder Häkchen-Zeile gekippt.
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-menu-item.danger.nk-menu-sep.nk-menu-label

<nk-pop> Popover

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.

Welle 4
Optionen ▾ UmbenennenDuplizierenLöschen
<div style="min-height:220px"><nk-pop open>
  <nk-btn slot="trigger" variant="secondary">Optionen ▾</nk-btn>
  <nk-menu><nk-menu-item icon="✏️" value="rename">Umbenennen</nk-menu-item><nk-menu-item icon="📄" value="duplicate">Duplizieren</nk-menu-item><nk-menu-item type="separator"></nk-menu-item><nk-menu-item icon="🗑️" danger value="delete">Löschen</nk-menu-item></nk-menu>
</nk-pop></div>

Attribute

AttributTypStandardBeschreibung
openboolean–Sichtbar.
placementbottom-start | bottom-end | top-start | top-endbottom-startWo die Fläche aufgeht.
bareboolean–Kein .nk-pop-Wrapper.

Slots

SlotBeschreibung
triggerDer Button.
(default)Der schwebende Inhalt.

Events

EventdetailBeschreibung
nk-toggle{ open }Geöffnet / geschlossen.

Methoden: show() close() toggle()

Auf kleinem Schirm:Relativ zum Auslöser positioniert; Viewport-Rand im Blick behalten.
Ersetzt.nk-pop

<nk-emoji-picker> Emoji-Auswahl

Suchfeld, 8-spaltiges Raster, Kategorieleiste. Bringt einen eingebauten Satz mit (Namen für die Suche); picker.emojis = [{ char, name, cat }] ersetzt ihn. Ein Klick feuert nk-select { emoji }.

Welle 4
<nk-emoji-picker placeholder="Suche…"></nk-emoji-picker>

Attribute

AttributTypStandardBeschreibung
placeholderstring–Such-Platzhalter.
valuestring–Zuletzt gewähltes Emoji.

Slots

keine

Events

EventdetailBeschreibung
nk-select{ emoji, value }Emoji gewählt.

Properties: emojis value

Auf kleinem Schirm:296px breit; passt auf jedes Telefon.
Ersetzt.nk-pop.nk-emoji-search.nk-emoji-grid.nk-emoji-cats.active

<nk-toast> Toast

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<button slot="action" value="undo">Rückgängig</button></nk-toast>

Attribute

AttributTypStandardBeschreibung
openboolean–Sichtbar.
durationms2200Ausblend-Verzögerung (0 = bleibt); ein Toast mit Aktion bleibt, außer show() nennt eine.
iconstring✓Zeichen vorn.

Slots

SlotBeschreibung
(default)Statischer Inhalt (wenn show() keine Nachricht bekommt).
actionEin Button für die Aktion; sein value geht mit nk-action hinaus.

Events

EventdetailBeschreibung
nk-toggle{ open }Gezeigt / verborgen.
nk-action{ action, value, label }Die Aktion benutzt; abbrechen, um den Toast zu behalten.

Properties: open message

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.

⋯ ⭐ ☰
Seitenleiste öffnen
<div style="display:flex;gap:16px;align-items:center;padding:4px 0 44px">
  <nk-btn variant="topbar" aria-label="Stil, Export und mehr" data-tooltip="Stil, Export und mehr">⋯</nk-btn>
  <nk-btn variant="topbar" aria-label="Zu Favoriten hinzufügen" data-tooltip="Zu Favoriten hinzufügen">⭐</nk-btn>
  <nk-btn variant="topbar" id="ttSidebar" aria-label="Seitenleiste öffnen">☰</nk-btn>
</div>
<nk-tooltip></nk-tooltip>
<nk-tooltip for="ttSidebar" shortcut="⌘\">Seitenleiste öffnen</nk-tooltip>

Attribute

AttributTypStandardBeschreibung
forid–Das eine Element, zu dem er gehört; ohne, jedes [data-tooltip].
shortcutstring–Mit for: das Kürzel neben dem Text.
delayms400Warten unter dem Zeiger.
placementbottom | topbottomBevorzugte Seite.

Slots

SlotBeschreibung
(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.

Welle 5
Filter Sortieren Neu
<nk-database view="table" add-view>
  <nk-btn slot="tools" variant="tool" active>Filter</nk-btn>
  <nk-btn slot="tools" variant="tool">Sortieren</nk-btn>
  <nk-btn slot="tools" variant="primary" small>Neu</nk-btn>
  <nk-table-view name="table" label="▦ Tabelle" count new-row sortable></nk-table-view>
  <nk-board-view name="board" label="▤ Board" group-by="status" new-row></nk-board-view>
</nk-database>
<script>{
  const db = document.currentScript.previousElementSibling;
  db.columns = [
    { key: 'name', label: 'Name', type: 'text', icon: '📄', title: true },
    { key: 'status', label: 'Status', type: 'select', icon: '◉', options: [
      { value: 'planned', label: 'Geplant', color: 'orange' }, { value: 'progress', label: 'In Arbeit', color: 'blue' }, { value: 'done', label: 'Erledigt', color: 'green' } ] },
    { key: 'owner', label: 'Verantwortlich', type: 'person', icon: '👤' },
    { key: 'due', label: 'Fällig', type: 'date', icon: '📅' },
    { key: 'progress', label: 'Fortschritt', type: 'progress', icon: '▰' },
    { key: 'effort', label: 'Aufwand (h)', type: 'number', icon: '#', locale: 'en', format: { minimumFractionDigits: 1 } },
  ];
  db.rows = [
    { id: 1, icon: '🧭', name: 'App-Shell & Sidebar', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '08.05.2026', progress: 100, effort: 6, cover: '/covers/aurora.svg' },
    { id: 2, icon: '📄', name: 'Seiten-Shell & Typografie', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '10.05.2026', progress: 100, effort: 4.5, cover: '/covers/dunes.svg' },
    { id: 3, icon: '🗃️', name: 'Datenbank-Tabellenansicht', status: 'progress', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '20.05.2026', progress: 65, effort: 12.5, cover: '/covers/meadow.svg' },
    { id: 4, icon: '▤', name: 'Board-Ansicht & Drag-and-Drop', status: 'planned', due: '02.06.2026', progress: 0, effort: 8, cover: '/covers/tide.svg' },
  ];
}</script>

Attribute

AttributTypStandardBeschreibung
viewstring–Name der aktiven View.
add-viewboolean–Ein +-Tab zeigen (feuert nk-action).

Slots

SlotBeschreibung
(default)View-Elemente.
toolsDie Werkzeuge rechts der Reiter: <nk-btn variant="tool">, ein kleines primäres „Neu“.
filtersUnter der Leiste: nk-filter-bar.

Events

EventdetailBeschreibung
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: columns rows view views

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.
Ersetzt.nk-database.nk-db-toolbar.nk-db-tabs.nk-db-tab.active.badge.add.tools

<nk-table-view> Tabellenansicht

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).

Welle 5
<nk-table-view new-row sortable></nk-table-view>
<script>{
  const db = document.currentScript.previousElementSibling;
  db.columns = [
    { key: 'selected', type: 'checkbox', selectAll: true },
    { key: 'name', label: 'Name', type: 'text', icon: '📄', title: true },
    { key: 'status', label: 'Status', type: 'select', icon: '◉', options: [
      { value: 'planned', label: 'Geplant', color: 'orange' }, { value: 'progress', label: 'In Arbeit', color: 'blue' }, { value: 'done', label: 'Erledigt', color: 'green' } ] },
    { key: 'owner', label: 'Verantwortlich', type: 'person', icon: '👤' },
    { key: 'due', label: 'Fällig', type: 'date', icon: '📅' },
    { key: 'progress', label: 'Fortschritt', type: 'progress', icon: '▰' },
    { key: 'effort', label: 'Aufwand (h)', type: 'number', icon: '#', locale: 'en', format: { minimumFractionDigits: 1 } },
    { key: 'actions', type: 'actions', actions: [{ action: 'open', label: 'Öffnen' }, { action: 'archive', label: 'Archivieren', danger: true }] },
  ];
  db.rows = [
    { id: 1, icon: '🧭', name: { text: 'App-Shell & Sidebar', desc: 'Drei offene Fragen' }, status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '08.05.2026', progress: 100, effort: 6, cover: '/covers/aurora.svg', selected: true },
    { id: 2, icon: '📄', name: 'Seiten-Shell & Typografie', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '10.05.2026', progress: 100, effort: 4.5, cover: '/covers/dunes.svg' },
    { id: 3, icon: '🗃️', name: 'Datenbank-Tabellenansicht', status: 'progress', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '20.05.2026', progress: 65, effort: 12.5, cover: '/covers/meadow.svg', selected: true },
    { id: 4, icon: '▤', name: 'Board-Ansicht & Drag-and-Drop', status: 'planned', due: '02.06.2026', progress: 0, effort: 8, actions: ['open'], cover: '/covers/tide.svg' },
  ];
}</script>

Attribute

AttributTypStandardBeschreibung
namestring–View-Name (Tab-Kennung).
labelstring–Tab-Beschriftung.
badgestring–Tab-Badge.
countboolean–Zeilenzahl als Badge.
new-rowboolean–Hinzufügen-Zeile zeigen.
new-row-labelstring+ New page · + Neue SeiteDeren Text.
sortableboolean–Kopfklick sortiert lokal.
sort-keystring–Sortierte Spalte.
sort-dirasc | desc–Richtung.
wrapboolean–Zellentext darf umbrechen (Notions „Spalte umbrechen“).

Slots

keine

Events

EventdetailBeschreibung
nk-select{ row, id, key, cell }Zeile geklickt.
nk-change{ row, key, value } · selectAll: { key, value, all: true, rows }Checkbox-Zelle umgeschaltet (Zeile direkt aktualisiert); aus einem selectAll-Kopf einmal für alle Zeilen.
nk-action{ action: 'sort' | 'new-row' | an actions column's action, key?, value?, row?, id?, anchor? }Kopf, Hinzufügen-Zeile oder ein Knopf einer Zeile geklickt.

Properties: columns rows data

Methoden: refresh()

Auf kleinem Schirm:Scrollt horizontal in .nk-table-wrap.
Ersetzt.nk-table-wrap.nk-table.wrap.th-icon.row-title.date-cell.person-cell.nk-avatar.num.row-actions.actions.select-all.nk-check.td-text.td-desc.nk-new-row

<nk-board-view> Board-Ansicht

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.

Welle 5
<nk-board-view group-by="status" new-row></nk-board-view>
<script>{
  const db = document.currentScript.previousElementSibling;
  db.columns = [
    { key: 'name', label: 'Name', type: 'text', icon: '📄', title: true },
    { key: 'status', label: 'Status', type: 'select', icon: '◉', options: [
      { value: 'planned', label: 'Geplant', color: 'orange' }, { value: 'progress', label: 'In Arbeit', color: 'blue' }, { value: 'done', label: 'Erledigt', color: 'green' } ] },
    { key: 'owner', label: 'Verantwortlich', type: 'person', icon: '👤' },
    { key: 'due', label: 'Fällig', type: 'date', icon: '📅' },
    { key: 'progress', label: 'Fortschritt', type: 'progress', icon: '▰' },
    { key: 'effort', label: 'Aufwand (h)', type: 'number', icon: '#', locale: 'en', format: { minimumFractionDigits: 1 } },
  ];
  db.rows = [
    { id: 1, icon: '🧭', name: 'App-Shell & Sidebar', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '08.05.2026', progress: 100, effort: 6, cover: '/covers/aurora.svg' },
    { id: 2, icon: '📄', name: 'Seiten-Shell & Typografie', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '10.05.2026', progress: 100, effort: 4.5, cover: '/covers/dunes.svg' },
    { id: 3, icon: '🗃️', name: 'Datenbank-Tabellenansicht', status: 'progress', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '20.05.2026', progress: 65, effort: 12.5, cover: '/covers/meadow.svg' },
    { id: 4, icon: '▤', name: 'Board-Ansicht & Drag-and-Drop', status: 'planned', due: '02.06.2026', progress: 0, effort: 8, cover: '/covers/tide.svg' },
  ];
}</script>

Attribute

AttributTypStandardBeschreibung
namestring–View-Name.
labelstring–Tab-Beschriftung.
group-bystring–Schlüssel der Select-Spalte.
title-keystring–Titelspalte der Karte.
meta-keyslist–Kommagetrennte Meta-Spalten.
new-rowboolean–+ je Spalte zeigen.

Slots

keine

Events

EventdetailBeschreibung
nk-select{ row, id }Karte geklickt.
nk-change{ row, key, value }Karte in andere Spalte gezogen.
nk-action{ action: 'new-row', value }+ geklickt (value = Spalte).

Properties: columns rows data

Methoden: move(id, value) refresh()

Auf kleinem Schirm:Spalten scrollen horizontal.
Ersetzt.nk-board.active.nk-board-col.nk-board-col-header.count.nk-card.card-title.card-meta

<nk-list-view> Listenansicht

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.

Welle 5
<nk-list-view meta-keys="due,status"></nk-list-view>
<script>{
  const db = document.currentScript.previousElementSibling;
  db.columns = [
    { key: 'name', label: 'Name', type: 'text', icon: '📄', title: true },
    { key: 'status', label: 'Status', type: 'select', icon: '◉', options: [
      { value: 'planned', label: 'Geplant', color: 'orange' }, { value: 'progress', label: 'In Arbeit', color: 'blue' }, { value: 'done', label: 'Erledigt', color: 'green' } ] },
    { key: 'owner', label: 'Verantwortlich', type: 'person', icon: '👤' },
    { key: 'due', label: 'Fällig', type: 'date', icon: '📅' },
    { key: 'progress', label: 'Fortschritt', type: 'progress', icon: '▰' },
    { key: 'effort', label: 'Aufwand (h)', type: 'number', icon: '#', locale: 'en', format: { minimumFractionDigits: 1 } },
  ];
  db.rows = [
    { id: 1, icon: '🧭', name: 'App-Shell & Sidebar', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '08.05.2026', progress: 100, effort: 6, cover: '/covers/aurora.svg' },
    { id: 2, icon: '📄', name: 'Seiten-Shell & Typografie', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '10.05.2026', progress: 100, effort: 4.5, cover: '/covers/dunes.svg' },
    { id: 3, icon: '🗃️', name: 'Datenbank-Tabellenansicht', status: 'progress', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '20.05.2026', progress: 65, effort: 12.5, cover: '/covers/meadow.svg' },
    { id: 4, icon: '▤', name: 'Board-Ansicht & Drag-and-Drop', status: 'planned', due: '02.06.2026', progress: 0, effort: 8, cover: '/covers/tide.svg' },
  ];
}</script>

Attribute

AttributTypStandardBeschreibung
namestring–View-Name.
labelstring–Tab-Beschriftung.
title-keystring–Titelspalte.
meta-keyslist–Kommagetrennte Spalten rechts.
new-rowboolean–Hinzufügen-Zeile zeigen.
new-row-labelstring+ New page · + Neue SeiteDeren Text.

Slots

keine

Events

EventdetailBeschreibung
nk-select{ row, id }Zeile geklickt oder Enter.
nk-action{ action: 'new-row' }Hinzufügen-Zeile geklickt.

Properties: columns rows data

Methoden: refresh()

Auf kleinem Schirm:Bleibt eine Zeile pro Eintrag: Der Titel endet mit Auslassungspunkten, die Eigenschaften behalten ihren Platz.
Ersetzt.nk-list.nk-list-item.l-icon.l-title.l-meta

<nk-calendar-view> Kalenderansicht

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.

Welle 5
<nk-calendar-view date-key="due" month="2026-05" today="2026-05-20" weeks week-start="1" today-label="Heute"></nk-calendar-view>
<script>{
  const db = document.currentScript.previousElementSibling;
  db.columns = [
    { key: 'name', label: 'Name', type: 'text', icon: '📄', title: true },
    { key: 'status', label: 'Status', type: 'select', icon: '◉', options: [
      { value: 'planned', label: 'Geplant', color: 'orange' }, { value: 'progress', label: 'In Arbeit', color: 'blue' }, { value: 'done', label: 'Erledigt', color: 'green' } ] },
    { key: 'owner', label: 'Verantwortlich', type: 'person', icon: '👤' },
    { key: 'due', label: 'Fällig', type: 'date', icon: '📅' },
    { key: 'progress', label: 'Fortschritt', type: 'progress', icon: '▰' },
    { key: 'effort', label: 'Aufwand (h)', type: 'number', icon: '#', locale: 'en', format: { minimumFractionDigits: 1 } },
  ];
  db.rows = [
    { id: 1, icon: '🧭', name: 'App-Shell & Sidebar', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '08.05.2026', progress: 100, effort: 6, cover: '/covers/aurora.svg' },
    { id: 2, icon: '📄', name: 'Seiten-Shell & Typografie', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '10.05.2026', progress: 100, effort: 4.5, cover: '/covers/dunes.svg' },
    { id: 3, icon: '🗃️', name: 'Datenbank-Tabellenansicht', status: 'progress', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '20.05.2026', progress: 65, effort: 12.5, cover: '/covers/meadow.svg' },
    { id: 4, icon: '▤', name: 'Board-Ansicht & Drag-and-Drop', status: 'planned', due: '02.06.2026', progress: 0, effort: 8, cover: '/covers/tide.svg' },
  ];
}</script>

Attribute

AttributTypStandardBeschreibung
namestringcalendarView-Name.
labelstring–Tab-Beschriftung.
date-keystring–Datumsspalte.
title-keystring–Titelspalte.
monthYYYY-MM–Der gezeigte Monat; Standard der heutige.
weeksboolean–Die ISO-Kalenderwoche vor jeder Reihe.
week-start0–6IntlErster Wochentag: 0 Sonntag, 1 Montag …
weekendlist–Wochentage ohne Arbeit, hinterlegt – 6,0.
todayYYYY-MM-DD–Ein anderes Heute – für Tests und Doku.
localeBCP 47langSprache der Namen und der Woche.
today-labelstringToday · HeuteHeute-Button.
prev-labelstringPrevious month · Voriger MonatBenennt ‹.
next-labelstringNext month · Nächster MonatBenennt ›.
week-labelstringW · KWKopf der Wochenspalte.

Slots

keine

Events

EventdetailBeschreibung
nk-select{ row, id }Karte geklickt oder Enter.
nk-month{ month }Ein anderer Monat gezeigt.

Properties: columns rows data month

Methoden: refresh()

Auf kleinem Schirm:Behält sieben Spalten; die Tage werden niedriger (64px), die Karten kleiner.
Ersetzt.nk-calendar-view.weeks.cv-head.cv-title.cal-nav.cv-grid.cv-wd.cv-week.cv-day.out.off.today.cv-num.cv-item

<nk-gallery-view> Galerieansicht

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.

Welle 5
<nk-gallery-view meta-keys="status,due" new-row></nk-gallery-view>
<script>{
  const db = document.currentScript.previousElementSibling;
  db.columns = [
    { key: 'name', label: 'Name', type: 'text', icon: '📄', title: true },
    { key: 'status', label: 'Status', type: 'select', icon: '◉', options: [
      { value: 'planned', label: 'Geplant', color: 'orange' }, { value: 'progress', label: 'In Arbeit', color: 'blue' }, { value: 'done', label: 'Erledigt', color: 'green' } ] },
    { key: 'owner', label: 'Verantwortlich', type: 'person', icon: '👤' },
    { key: 'due', label: 'Fällig', type: 'date', icon: '📅' },
    { key: 'progress', label: 'Fortschritt', type: 'progress', icon: '▰' },
    { key: 'effort', label: 'Aufwand (h)', type: 'number', icon: '#', locale: 'en', format: { minimumFractionDigits: 1 } },
  ];
  db.rows = [
    { id: 1, icon: '🧭', name: 'App-Shell & Sidebar', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '08.05.2026', progress: 100, effort: 6, cover: '/covers/aurora.svg' },
    { id: 2, icon: '📄', name: 'Seiten-Shell & Typografie', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '10.05.2026', progress: 100, effort: 4.5, cover: '/covers/dunes.svg' },
    { id: 3, icon: '🗃️', name: 'Datenbank-Tabellenansicht', status: 'progress', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '20.05.2026', progress: 65, effort: 12.5, cover: '/covers/meadow.svg' },
    { id: 4, icon: '▤', name: 'Board-Ansicht & Drag-and-Drop', status: 'planned', due: '02.06.2026', progress: 0, effort: 8, cover: '/covers/tide.svg' },
  ];
}</script>

Attribute

AttributTypStandardBeschreibung
namestring–View-Name.
labelstring–Tab-Beschriftung.
cover-keystringcoverFeld mit der URL des Bilds.
no-coverboolean–Karten ohne Bilder.
sizesmall | medium | largemediumKartengröße.
fitboolean–Ein Bild ganz zeigen statt beschnitten.
title-keystring–Titelspalte.
meta-keyslist–Kommagetrennte Spalten unter dem Titel.
href-keystring–Feld mit der Adresse der Karte; solch eine Karte ist ein Link.
new-rowboolean–Hinzufügen-Karte zeigen.
new-row-labelstring+ New page · + Neue SeiteDeren Text.

Slots

keine

Events

EventdetailBeschreibung
nk-select{ row, id, value }Karte geklickt, Enter oder Leertaste; eine Link-Karte mit einfachem Klick oder Enter – abbrechen, um zu bleiben.
nk-action{ action: 'new-row' }Hinzufügen-Karte geklickt.

Properties: columns rows data

Methoden: refresh()

Auf kleinem Schirm:Das Raster verliert Spalten von selbst – auf dem Telefon eine Karte pro Zeile, ganz ohne Breakpoint.
Ersetzt.nk-gallery.small.large.fit.nk-card.card-item.nk-cover.card-title.card-meta.nk-new-row

<nk-filter-bar> Filterleiste

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.

Welle 5
<nk-filter-bar add no-filter no-sort remove-label="Filter entfernen"></nk-filter-bar>
<script>{ document.currentScript.previousElementSibling.filters = [{ key: 'status', value: 'done', op: 'is-not', label: 'Status: Offen' }]; }</script>

Attribute

AttributTypStandardBeschreibung
addboolean–Die Add-Pill zeigen.
add-labelstring+ FilterDeren Text.
no-filterboolean–Das Filter-Werkzeug ausblenden.
no-sortboolean–Das Sortier-Werkzeug ausblenden.
filter-labelstringFilterText des Filter-Werkzeugs.
sort-labelstringSort · SortierenText des Sortier-Werkzeugs.
remove-labelstringRemove filter · Filter entfernenName des ×, gefolgt vom Text der Pill.
searchboolean–Suchfeld zeigen.
placeholderstring–Such-Platzhalter.

Slots

SlotBeschreibung
(default)Zusätzliche Pills oder Controls zwischen Pills und Suche.

Events

EventdetailBeschreibung
nk-change{ filters, search }Ein Filter entfernt oder gesucht.
nk-action{ action: 'edit' | 'add' | 'filter' | 'sort', index?, filter?, anchor }Eine Pill oder ein Werkzeug geklickt.

Properties: filters value

Methoden: apply(rows)

Auf kleinem Schirm:Die Pills brechen in weitere Zeilen um.
Ersetzt.nk-filter-row.nk-filter-pill.active.add.fp-remove.nk-db-tool.nk-input

<nk-comments> Kommentar-Faden

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.
<nk-comments placeholder="Kommentieren …" send-label="Senden">
  <nk-comment author="Sara Lindt" time="1 hr ago" color="#448361">Die Board-Ansicht fühlt sich schon sehr nah am Original an. 👍</nk-comment>
  <nk-comment author="Mona" time="20 min ago" avatar="✨" color="var(--nk-text-tertiary)"><span slot="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>

Attribute

AttributTypStandardBeschreibung
placeholderstring–Platzhalter.
send-labelstringSend · SendenButton-Text.
no-inputboolean–Nur lesen.
disabledboolean–Eingabe deaktiviert.

Slots

SlotBeschreibung
(default)nk-comment-Kinder.

Events

EventdetailBeschreibung
nk-submit{ text }Neuer Kommentar; preventDefault() behält den Text.

Properties: value

Methoden: submit() focus()

Auf kleinem Schirm:Unverändert.
Ersetzt.nk-comments.nk-comment.mini-avatar.c-head.c-body.nk-comment-input

<nk-comment> Kommentar

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. 👍
<nk-comments no-input><nk-comment author="Sara Lindt" time="1 hr ago" color="green">Die Board-Ansicht fühlt sich schon sehr nah am Original an. 👍</nk-comment></nk-comments>

Attribute

AttributTypStandardBeschreibung
authorstring–Name.
timestring–Relative Zeit.
avatarstring–Initialen/Emoji (Standard: aus dem Autor).
colorcolour name | CSS–Avatar-Farbe: einer der neun Namen oder ein beliebiger CSS-Hintergrund; ohne sie der Avatar-Verlauf.

Slots

SlotBeschreibung
(default)Text.
headHinter dem Namen (Tag, Badge).
avatarEigener 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.
<nk-ai-thread>
  <nk-ai-msg role="user" name="Du" avatar="MK">Fasse die offenen Aufgaben dieses Projekts zusammen.</nk-ai-msg>
  <nk-ai-msg role="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.
    <button slot="actions" value="copy">📋 Kopieren</button><button slot="actions" value="rephrase">↻ Umformulieren</button><button slot="actions" value="like">👍</button>
  </nk-ai-msg>
</nk-ai-thread>
<nk-ai-input-row placeholder="Frag Mona etwas …"></nk-ai-input-row>

Attribute

keine

Slots

SlotBeschreibung
(default)nk-ai-msg-Kinder.

Events

EventdetailBeschreibung
nk-action{ action }Action-Button einer Nachricht.
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-ai-thread.nk-ai-msg.user.a-body.a-name.nk-ai-actions.nk-ai-input-row.nk-ai-send

<nk-ai-msg> KI-Nachricht

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.
<nk-ai-thread><nk-ai-msg role="user" bubble>Was ist auf dieser Seite noch offen?</nk-ai-msg><nk-ai-msg role="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.<button slot="actions" value="copy">📋 Kopieren</button></nk-ai-msg></nk-ai-thread>

Attribute

AttributTypStandardBeschreibung
roleuser | assistantassistantWer spricht.
namestring–Namenszeile.
badgestring–Graues Suffix.
avatarstring–Initialen/Emoji.
colorCSS color–Avatar-Hintergrund.
bubbleboolean–Die Nachricht als graue Blase ohne Avatar und Namen; mit role="user" rechts, wie Notions KI-Chat die eigene Frage zeigt.

Slots

SlotBeschreibung
(default)Nachrichtentext (HTML erlaubt).
actions<button value>-Kinder.
avatarEigener Avatar.

Events

EventdetailBeschreibung
nk-action{ action, value }Action-Button geklickt.
Auf kleinem Schirm:Unverändert.
Ersetzt.nk-ai-msg.user.bubble.a-body.a-name.nk-ai-actions

<nk-ai-input-row> KI-Eingabezeile

Das Prompt-Feld mit ✨ und Sende-Button. Enter oder der Button feuert nk-submit { text } und leert das Feld.

Welle 5
<nk-ai-input-row placeholder="Frag Mona etwas …"></nk-ai-input-row>

Attribute

AttributTypStandardBeschreibung
placeholderstring–Platzhalter.
valuestring–Vorbelegter Text.
disabledboolean–Deaktiviert, während der Assistent antwortet.
iconstring✨Zeichen vorn.

Slots

keine

Events

EventdetailBeschreibung
nk-submit{ text }Prompt gesendet.

Properties: value

Methoden: submit() focus()

Auf kleinem Schirm:Unverändert.
Ersetzt.nk-ai-input-row.nk-ai-send