@jungherz-de/notionkit-elements 1.11.1 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +6 -6
- package/SKILL.md +81 -61
- package/dist/components/nk-board-view.js +1 -1
- package/dist/components/nk-calendar.js +1 -1
- package/dist/components/nk-list-view.js +1 -1
- package/dist/components/nk-menu.js +1 -1
- package/dist/components/nk-panel.js +25 -3
- package/dist/components/nk-panels.js +13 -4
- package/dist/components/nk-prop.js +7 -2
- package/dist/components/nk-props.js +13 -4
- package/dist/components/nk-steps.js +50 -9
- package/dist/components/nk-table-view.js +14 -4
- package/dist/components/nk-tabs.js +24 -1
- package/dist/components/nk-tooltip.js +1 -1
- package/dist/components/shared/{floating-CtqV6MBj.js → floating-DOK73b_D.js} +1 -1
- package/dist/components/shared/{property-cell-Cddz5n2O.js → property-cell-DKvv6TIG.js} +31 -2
- package/dist/notionkit-elements.esm.js +243 -96
- package/dist/notionkit-elements.js +243 -96
- package/dist/notionkit-elements.min.js +1 -1
- package/package.json +3 -3
- package/src/components/data/nk-table-view.js +13 -3
- package/src/components/page/nk-panel.js +25 -3
- package/src/components/page/nk-panels.js +13 -4
- package/src/components/page/nk-prop.js +7 -2
- package/src/components/page/nk-props.js +13 -4
- package/src/components/page/nk-steps.js +50 -9
- package/src/components/page/nk-tabs.js +24 -1
- package/src/util/property-cell.js +31 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,25 @@ All notable changes to NotionKit Elements are documented here. The format follow
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [1.12.0] – 2026-09-25
|
|
8
|
+
|
|
9
|
+
Built against NotionKit CSS 1.12.0 (peer `>= 1.12.0`). Auxdesk moved from 1.5.1 to 1.11 and sent back eight findings; this release answers all of them.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **`<nk-panel>` `slot="end"`** sits at the right edge of the title – a state as a tag, a button – as Notion's settings boxes show a connection, and moves under the title where both do not fit. Until now nothing could stand beside the title, and an `<h3>` of one's own lost the panel's type as soon as it shared a row with a tag.
|
|
13
|
+
- **`flush` on `<nk-props>` and `<nk-panels>`** drops the outer margin meant for the flow under a title – for a list inside a panel, a grid inside a flex column with a gap of its own. The margin sat in the shadow root, out of reach from outside.
|
|
14
|
+
- **`<nk-prop text>`**: a value that is text – a sentence, an address, a model name with a tag – flows and wraps as text instead of setting its parts one under the other.
|
|
15
|
+
- **`<nk-steps>` with a state per step, `selectable` and `horizontal`.** A step object takes `state: 'done' | 'skipped' | 'open'`, which wins over `current`, so a wizard can show a skipped step before a done one; a skipped step shows a dashed ring around a dash. `selectable` makes each label a button: a click or Enter fires `nk-select { index, value, step }` – `index` counts from 1, like `current` – and, unless cancelled, makes that step current; `select(index)` does the same from a script. `horizontal` sets the steps in one row above a wizard.
|
|
16
|
+
- **`<nk-tabs scroll>`** keeps many tabs in one row that scrolls sideways and holds the active tab in view – after the first layout, on every change and when the row's width changes – as `<nk-segmented scroll>` does. Ten tabs in a mailbox editor no longer run out of a phone's page.
|
|
17
|
+
- **An `actions` column in `<nk-table-view>`.** `{ type: 'actions', actions: [{ action, label, icon, danger, disabled, tooltip }] }` sets small buttons in each row; a row's value – a list of action names – picks which of them it shows. A click fires `nk-action { action, row, id, anchor }` instead of selecting the row, and the column's header sorts nothing. `renderPropertyCell()` draws it for tables of one's own too.
|
|
18
|
+
- **A `url` value may be `{ href, label, target }`**: a link of one's own – to another page of the app, with its own text, in the same tab unless `target` says otherwise. A string is still an address outside, opened in a new tab.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- **A property value keeps at least 220px** (NotionKit 1.12.0): in a column narrower than 380px – the details beside a message, a third of the page – it moves under its name instead of shrinking until an address breaks into syllables.
|
|
22
|
+
- The docs example of `<nk-table-view>` shows the actions column, `<nk-steps>` a wizard row with a skipped step, `<nk-panel>` a tag beside the title and `<nk-prop>` a text value.
|
|
23
|
+
- `--nk-page-full-max` (NotionKit 1.12.0) caps `<nk-page full>` as well: the token reaches the shadow root.
|
|
24
|
+
- Peer `@jungherz-de/notionkit >= 1.12.0`.
|
|
25
|
+
|
|
7
26
|
## [1.11.1] – 2026-09-24
|
|
8
27
|
|
|
9
28
|
Built against NotionKit CSS 1.11.1 (peer `>= 1.11.0`).
|
|
@@ -620,6 +639,7 @@ built and tested against NotionKit CSS 1.1.1 (peer range `>= 1.0.0`).
|
|
|
620
639
|
import, never in the core bundle – shadow-less, adding `nk-block-host` to
|
|
621
640
|
itself so the foundation's editor adapter rules apply.
|
|
622
641
|
|
|
642
|
+
[1.12.0]: https://github.com/JUNGHERZ/NotionKit-Elements/releases/tag/v1.12.0
|
|
623
643
|
[1.11.1]: https://github.com/JUNGHERZ/NotionKit-Elements/releases/tag/v1.11.1
|
|
624
644
|
[1.11.0]: https://github.com/JUNGHERZ/NotionKit-Elements/releases/tag/v1.11.0
|
|
625
645
|
[1.10.1]: https://github.com/JUNGHERZ/NotionKit-Elements/releases/tag/v1.10.1
|
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<h1 align="center">🧩 NotionKit Elements</h1>
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<a href="https://www.npmjs.com/package/@jungherz-de/notionkit-elements"><img src="https://img.shields.io/badge/version-1.
|
|
4
|
+
<a href="https://www.npmjs.com/package/@jungherz-de/notionkit-elements"><img src="https://img.shields.io/badge/version-1.12.0-2383e2?style=flat-square" alt="Version"></a>
|
|
5
5
|
<a href="#"><img src="https://img.shields.io/badge/vanilla_JS-no_dependencies-448361?style=flat-square" alt="Vanilla JS"></a>
|
|
6
6
|
<a href="#"><img src="https://img.shields.io/badge/elements-87-529cca?style=flat-square" alt="87 Elements"></a>
|
|
7
7
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-9065b0?style=flat-square" alt="MIT License"></a>
|
|
8
|
-
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/changelog-v1.
|
|
8
|
+
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/changelog-v1.12.0-lightgrey?style=flat-square" alt="Changelog"></a>
|
|
9
9
|
<a href="https://www.npmjs.com/package/@jungherz-de/notionkit-elements"><img src="https://img.shields.io/badge/npm-%40jungherz--de%2Fnotionkit--elements-cb3837?style=flat-square&logo=npm" alt="npm"></a>
|
|
10
10
|
</p>
|
|
11
11
|
|
|
@@ -59,7 +59,7 @@ It is the **app layer** of the NotionKit family – three layers, one design lan
|
|
|
59
59
|
| 🧩 **87 Elements** | Forms with copy field, image picker and date picker, content blocks with bookmarks, app shell & tree with the ☰ drawer and the collapsing sidebar, page shell with properties, panels, avatars and steps, overlays (modal, sheet, dialog, resizable side peek, tooltip, ⌘K palette, menus that float in and become sheets on a phone, popover, emoji picker, toast), database table, board, list & calendar with toolbar and filter pills, comments, AI thread |
|
|
60
60
|
| 🎛️ **Form participation** | Input, textarea, select, switch, check, radio, slider, segmented and model card work natively with `<form>` via `ElementInternals`; radios group across shadow roots |
|
|
61
61
|
| 🌗 **Theme sync** | One observer mirrors `data-theme` on `<html>` into every element |
|
|
62
|
-
| 🪶 **Lightweight** |
|
|
62
|
+
| 🪶 **Lightweight** | 272 KB minified / 54 KB gzipped (IIFE, foundation sheet included), no external dependencies |
|
|
63
63
|
| 📦 **Four bundle shapes** | IIFE, minified IIFE, ESM, and per-component ESM entries on a stable `base.js`, which import NotionKit's sheet instead of carrying a copy |
|
|
64
64
|
| 🤖 **AI-ready** | `SKILL.md` with copy-paste markup, six app skeletons and the rules – an agent given only that file built a working app in the release test |
|
|
65
65
|
|
|
@@ -71,8 +71,8 @@ It is the **app layer** of the NotionKit family – three layers, one design lan
|
|
|
71
71
|
<!DOCTYPE html>
|
|
72
72
|
<html lang="en" data-theme="light">
|
|
73
73
|
<head>
|
|
74
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.
|
|
75
|
-
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.
|
|
74
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.12.0/notionkit.min.css">
|
|
75
|
+
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.12.0/dist/notionkit-elements.min.js"></script>
|
|
76
76
|
</head>
|
|
77
77
|
<body class="nk-body">
|
|
78
78
|
<nk-field label="Display name" desc="Shown next to your comments">
|
|
@@ -102,7 +102,7 @@ The per-component files import NotionKit's sheet as `@jungherz-de/notionkit/noti
|
|
|
102
102
|
|
|
103
103
|
Do not mix the full bundle with the per-component files: each brings its own `NkElement`. With the bundle, take `componentsSheet` and `NkElement` from the bundle (`NotionKitElements.componentsSheet` from the `<script>` build).
|
|
104
104
|
|
|
105
|
-
Two prerequisites, always: `notionkit.css` on the document (the peer dependency, `>= 1.
|
|
105
|
+
Two prerequisites, always: `notionkit.css` on the document (the peer dependency, `>= 1.12.0`; 1.12.0 brings a tag or button beside a panel's title, lists and grids without outer margin, text values, steps with states in any order and in a row, scrolling tabs, a cap for full pages and buttons per table row, 1.11.0 keeps a floating menu inside an open modal or dialog in place and inside the window and brings the banner's action as a button, fields that share a row and tooltips of several lines, 1.10.1 lets a disabled button show its tooltip, 1.10.0 brings the collapsing sidebar, the resizable side peek, the dialog and the tooltip, 1.9.0 the date picker and the calendar view, 1.8.0 the side peek, the bookmark, the copy field and pictures on the profile row, 1.7.0 the sheet, menus that float in and become sheets on a phone, the sidebar drawer, the database toolbar with filter pills and the steps, 1.7.1 minified files that carry all of it, 1.6.0 page properties, page options, list view, panels, prose and the avatar, 1.5.1 the safe areas, 1.5.0 the Notion-2025 tokens, the nine tag colours and the filled inputs; from 1.5.0 on, Elements and the foundation share one version number – the elements are built and tested against the same release) and `class="nk-body"` on `<body>`. The elements ship no visual CSS of their own – every rule comes from the foundation. The bundle injects the design tokens once as `@layer notionkit-defaults`, so any plain `:root { --nk-accent: … }` of yours re-brands every element in both themes.
|
|
106
106
|
|
|
107
107
|
## Elements
|
|
108
108
|
|
package/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: notionkit-elements
|
|
3
|
-
description: NotionKit Elements is a vanilla-JS Web Components library (v1.
|
|
3
|
+
description: NotionKit Elements is a vanilla-JS Web Components library (v1.12.0) wrapping NotionKit CSS v1.12.0 – the calm, document-centric design system in the Notion idiom. 87 custom elements with the `nk-` prefix, Shadow DOM, automatic light/dark sync via data-theme on <html>, and form-associated controls. Use this reference whenever generating HTML that uses <nk-*> tags to get attributes, slots, events and composition right.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# NotionKit Elements – AI Component Reference
|
|
@@ -21,8 +21,8 @@ description: NotionKit Elements is a vanilla-JS Web Components library (v1.11.1)
|
|
|
21
21
|
<head>
|
|
22
22
|
<meta charset="UTF-8">
|
|
23
23
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
24
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.
|
|
25
|
-
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.
|
|
24
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.12.0/notionkit.min.css">
|
|
25
|
+
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.12.0/dist/notionkit-elements.min.js"></script>
|
|
26
26
|
</head>
|
|
27
27
|
<body class="nk-body">
|
|
28
28
|
<nk-btn variant="primary">Save</nk-btn>
|
|
@@ -1386,7 +1386,7 @@ _No attributes._
|
|
|
1386
1386
|
|
|
1387
1387
|
### 3.40 `<nk-props>` – Page properties
|
|
1388
1388
|
|
|
1389
|
-
The properties under the title of a database page, the pattern Notion is known for: a list of `nk-prop` rows. The rows are hosts with `display: contents`, so each renders as a row of this list – no markup of their own around them.
|
|
1389
|
+
The properties under the title of a database page, the pattern Notion is known for: a list of `nk-prop` rows. The rows are hosts with `display: contents`, so each renders as a row of this list – no markup of their own around them. `flush` drops the outer margin meant for the flow under a title, for a list inside a panel or a flex column.
|
|
1390
1390
|
|
|
1391
1391
|
```html
|
|
1392
1392
|
<nk-props style="max-width:520px">
|
|
@@ -1398,11 +1398,13 @@ The properties under the title of a database page, the pattern Notion is known f
|
|
|
1398
1398
|
</nk-props>
|
|
1399
1399
|
```
|
|
1400
1400
|
|
|
1401
|
-
|
|
1401
|
+
| Attribute | Type | Default | Description |
|
|
1402
|
+
|---|---|---|---|
|
|
1403
|
+
| `flush` | boolean | – | No outer margin. |
|
|
1402
1404
|
|
|
1403
1405
|
**Slots:** `(default)` – `nk-prop` children.
|
|
1404
1406
|
|
|
1405
|
-
**Replaces:** `.nk-props`
|
|
1407
|
+
**Replaces:** `.nk-props`, `.flush`
|
|
1406
1408
|
|
|
1407
1409
|
```html
|
|
1408
1410
|
<!-- equivalent class markup -->
|
|
@@ -1415,37 +1417,38 @@ _No attributes._
|
|
|
1415
1417
|
</dl>
|
|
1416
1418
|
```
|
|
1417
1419
|
|
|
1418
|
-
**Small screens:** Below 860px each property stacks: the name above its value.
|
|
1420
|
+
**Small screens:** Below 860px each property stacks: the name above its value. In a column narrower than 380px the value moves under its name as well.
|
|
1419
1421
|
|
|
1420
1422
|
### 3.41 `<nk-prop>` – Page property
|
|
1421
1423
|
|
|
1422
|
-
One property: the name with its type icon in a 160px column, the value beside it, 34px with the hover wash on both halves. The value is the element’s content – tags, an avatar and a name, a date, `<nk-progress wide>`. A click fires `nk-action` with the half that was hit, the moment Notion opens the property’s editor.
|
|
1424
|
+
One property: the name with its type icon in a 160px column, the value beside it, 34px with the hover wash on both halves. The value is the element’s content – tags, an avatar and a name, a date, `<nk-progress wide>`. A click fires `nk-action` with the half that was hit, the moment Notion opens the property’s editor. `text` lets a value that is text – a sentence, an address, a model name with a tag – flow as text instead of setting its parts one under the other. The value keeps at least 220px: in a column narrower than 380px it moves under its name.
|
|
1423
1425
|
|
|
1424
1426
|
```html
|
|
1425
|
-
<nk-props style="max-width:520px"><nk-prop label="Due" icon="📅">2 June 2026</nk-prop></nk-props>
|
|
1427
|
+
<nk-props style="max-width:520px"><nk-prop label="Due" icon="📅">2 June 2026</nk-prop><nk-prop label="Address" icon="✉️" text>support+design@notionkit.example.com · <nk-tag color="green">Verified</nk-tag></nk-prop></nk-props>
|
|
1426
1428
|
```
|
|
1427
1429
|
|
|
1428
1430
|
| Attribute | Type | Default | Description |
|
|
1429
1431
|
|---|---|---|---|
|
|
1430
1432
|
| `label` | string | – | Property name. |
|
|
1431
1433
|
| `icon` | string | – | Type icon. |
|
|
1434
|
+
| `text` | boolean | – | The value flows as text. |
|
|
1432
1435
|
|
|
1433
1436
|
**Slots:** `(default)` – The value. · `icon` – Icon node.
|
|
1434
1437
|
|
|
1435
1438
|
**Events:** `nk-action` `{ action: 'name' | 'value', label }` – Name or value clicked.
|
|
1436
1439
|
|
|
1437
|
-
**Replaces:** `.nk-prop`, `.p-name`, `.p-icon`, `.p-value`
|
|
1440
|
+
**Replaces:** `.nk-prop`, `.p-name`, `.p-icon`, `.p-value`, `.text`
|
|
1438
1441
|
|
|
1439
1442
|
```html
|
|
1440
1443
|
<!-- equivalent class markup -->
|
|
1441
|
-
<dl class="nk-props" style="max-width:520px"><div class="nk-prop"><dt class="p-name"><span class="p-icon">📅</span>Due</dt><dd class="p-value">2 June 2026</dd></div></dl>
|
|
1444
|
+
<dl class="nk-props" style="max-width:520px"><div class="nk-prop"><dt class="p-name"><span class="p-icon">📅</span>Due</dt><dd class="p-value">2 June 2026</dd></div><div class="nk-prop"><dt class="p-name"><span class="p-icon">✉️</span>Address</dt><dd class="p-value text">support+design@notionkit.example.com · <span class="nk-tag green">Verified</span></dd></div></dl>
|
|
1442
1445
|
```
|
|
1443
1446
|
|
|
1444
|
-
**Small screens:** Stacks below 860px.
|
|
1447
|
+
**Small screens:** Stacks below 860px, and in a column narrower than 380px.
|
|
1445
1448
|
|
|
1446
1449
|
### 3.42 `<nk-panels>` – Panels
|
|
1447
1450
|
|
|
1448
|
-
A grid of `nk-panel`s: columns of at least 200px that share the row. The panels are hosts with `display: contents`, so each is a cell of this grid.
|
|
1451
|
+
A grid of `nk-panel`s: columns of at least 200px that share the row. The panels are hosts with `display: contents`, so each is a cell of this grid. `flush` drops the outer margin, for a grid inside a flex column with a gap of its own.
|
|
1449
1452
|
|
|
1450
1453
|
```html
|
|
1451
1454
|
<nk-panels>
|
|
@@ -1455,11 +1458,13 @@ A grid of `nk-panel`s: columns of at least 200px that share the row. The panels
|
|
|
1455
1458
|
</nk-panels>
|
|
1456
1459
|
```
|
|
1457
1460
|
|
|
1458
|
-
|
|
1461
|
+
| Attribute | Type | Default | Description |
|
|
1462
|
+
|---|---|---|---|
|
|
1463
|
+
| `flush` | boolean | – | No outer margin. |
|
|
1459
1464
|
|
|
1460
1465
|
**Slots:** `(default)` – `nk-panel` children.
|
|
1461
1466
|
|
|
1462
|
-
**Replaces:** `.nk-panels`
|
|
1467
|
+
**Replaces:** `.nk-panels`, `.flush`
|
|
1463
1468
|
|
|
1464
1469
|
```html
|
|
1465
1470
|
<!-- equivalent class markup -->
|
|
@@ -1474,10 +1479,11 @@ _No attributes._
|
|
|
1474
1479
|
|
|
1475
1480
|
### 3.43 `<nk-panel>` – Panel
|
|
1476
1481
|
|
|
1477
|
-
A neutral surface for content that belongs together – the cards on Notion’s Home, the boxes in its settings. `title` is the heading (never a tooltip); the content goes in as `<p>`s and blocks. `cover` without a value draws the gradient band, with a URL a picture; `icon` overlaps the cover as on a page – a page tile. With `href` the panel is a link.
|
|
1482
|
+
A neutral surface for content that belongs together – the cards on Notion’s Home, the boxes in its settings. `title` is the heading (never a tooltip); the content goes in as `<p>`s and blocks. `cover` without a value draws the gradient band, with a URL a picture; `icon` overlaps the cover as on a page – a page tile. With `href` the panel is a link. `slot="end"` sits at the right edge of the title – a state as a tag, a button – as Notion’s settings boxes show a connection, and moves under the title where both do not fit.
|
|
1478
1483
|
|
|
1479
1484
|
```html
|
|
1480
|
-
<div style="max-width:
|
|
1485
|
+
<div style="max-width:360px;display:grid;gap:12px"><nk-panel href="#" cover icon="🚀" title="NotionKit MVP"><p>2 min ago</p></nk-panel>
|
|
1486
|
+
<nk-panel title="Weekly review"><nk-tag slot="end" color="blue">In progress</nk-tag><p>Three pages changed, one comment is waiting for an answer.</p></nk-panel></div>
|
|
1481
1487
|
```
|
|
1482
1488
|
|
|
1483
1489
|
| Attribute | Type | Default | Description |
|
|
@@ -1488,13 +1494,14 @@ A neutral surface for content that belongs together – the cards on Notion’s
|
|
|
1488
1494
|
| `href` | URL | – | Makes the panel a link. |
|
|
1489
1495
|
| `target` | string | – | Link target. |
|
|
1490
1496
|
|
|
1491
|
-
**Slots:** `(default)` – Content: `<p>`, a prose block, a progress bar.
|
|
1497
|
+
**Slots:** `(default)` – Content: `<p>`, a prose block, a progress bar. · `end` – Beside the title, at its right edge: a tag, a button.
|
|
1492
1498
|
|
|
1493
|
-
**Replaces:** `.nk-panel`, `.nk-cover`, `.nk-page-icon`
|
|
1499
|
+
**Replaces:** `.nk-panel`, `.nk-cover`, `.nk-page-icon`, `.p-head`, `.p-end`
|
|
1494
1500
|
|
|
1495
1501
|
```html
|
|
1496
1502
|
<!-- equivalent class markup -->
|
|
1497
|
-
<div style="max-width:
|
|
1503
|
+
<div style="max-width:360px;display:grid;gap:12px"><a class="nk-panel" href="#"><div class="nk-cover"></div><div class="nk-page-icon">🚀</div><h3>NotionKit MVP</h3><p>2 min ago</p></a>
|
|
1504
|
+
<div class="nk-panel"><div class="p-head"><h3>Weekly review</h3><span class="p-end"><span class="nk-tag blue">In progress</span></span></div><p>Three pages changed, one comment is waiting for an answer.</p></div></div>
|
|
1498
1505
|
```
|
|
1499
1506
|
|
|
1500
1507
|
**Small screens:** Takes the width of its grid cell.
|
|
@@ -1632,7 +1639,7 @@ Content that appears in several places, framed with a badge.
|
|
|
1632
1639
|
|
|
1633
1640
|
### 3.49 `<nk-tabs>` – Tabs
|
|
1634
1641
|
|
|
1635
|
-
A tab strip with panels. `nk-tab` children are the tabs; elements with `slot="panel"` and a matching `data-tab` are the panels – the tabs hide every panel but the active one through `hidden`. Arrow keys move between tabs.
|
|
1642
|
+
A tab strip with panels. `nk-tab` children are the tabs; elements with `slot="panel"` and a matching `data-tab` are the panels – the tabs hide every panel but the active one through `hidden`. Arrow keys move between tabs. `scroll` keeps many tabs in one row that scrolls sideways, scrollbar hidden, and holds the active tab in view – after the first layout, on every change and when the row’s width changes.
|
|
1636
1643
|
|
|
1637
1644
|
```html
|
|
1638
1645
|
<nk-tabs value="notes">
|
|
@@ -1648,14 +1655,15 @@ A tab strip with panels. `nk-tab` children are the tabs; elements with `slot="pa
|
|
|
1648
1655
|
| Attribute | Type | Default | Description |
|
|
1649
1656
|
|---|---|---|---|
|
|
1650
1657
|
| `value` | string | – | Active tab value (default: the tab with `active`, else the first). |
|
|
1658
|
+
| `scroll` | boolean | – | One row that scrolls sideways and keeps the active tab in view. |
|
|
1651
1659
|
|
|
1652
1660
|
**Slots:** `(default)` – `nk-tab` children. · `panel` – Panels with `data-tab`.
|
|
1653
1661
|
|
|
1654
1662
|
**Events:** `nk-change` `{ value }` – Active tab changed. · `nk-select` `{ value, label }` – From the clicked tab.
|
|
1655
1663
|
|
|
1656
|
-
**Properties:** `value`
|
|
1664
|
+
**Properties:** `value`, `scroll`
|
|
1657
1665
|
|
|
1658
|
-
**Replaces:** `.nk-tabs`, `.nk-tab`, `.active`, `.nk-tab-panel`
|
|
1666
|
+
**Replaces:** `.nk-tabs`, `.nk-tab`, `.active`, `.nk-tab-panel`, `.scroll`
|
|
1659
1667
|
|
|
1660
1668
|
```html
|
|
1661
1669
|
<!-- equivalent class markup -->
|
|
@@ -1667,7 +1675,7 @@ A tab strip with panels. `nk-tab` children are the tabs; elements with `slot="pa
|
|
|
1667
1675
|
<div class="nk-tab-panel">Free-form notes on the project – meeting minutes, ideas, rough drafts.</div>
|
|
1668
1676
|
```
|
|
1669
1677
|
|
|
1670
|
-
**Small screens:**
|
|
1678
|
+
**Small screens:** The strip stays on one line; one longer than the screen takes `scroll`.
|
|
1671
1679
|
|
|
1672
1680
|
### 3.50 `<nk-tab>` – Tab
|
|
1673
1681
|
|
|
@@ -1731,11 +1739,13 @@ Plain `<button value>` children stay in the light DOM (the stylesheet’s slotte
|
|
|
1731
1739
|
|
|
1732
1740
|
### 3.52 `<nk-steps>` – Steps
|
|
1733
1741
|
|
|
1734
|
-
A short flow – connecting an account, setting up a model – calm and vertical: a numbered circle per step joined by a hairline, done steps with a check on the green tag, the current one ringed in the accent and marked `aria-current="step"`. `current` counts from 1; one past the last marks every step done, and `next()` moves on. The `steps` attribute is a comma-separated list; the property also takes `{ label, desc }` objects for a line under the label.
|
|
1742
|
+
A short flow – connecting an account, setting up a model – calm and vertical: a numbered circle per step joined by a hairline, done steps with a check on the green tag, the current one ringed in the accent and marked `aria-current="step"`. `current` counts from 1; one past the last marks every step done, and `next()` moves on. The `steps` attribute is a comma-separated list; the property also takes `{ label, desc }` objects for a line under the label. A `state` in such an object – `done`, `skipped` or `open` – wins over the order, for a wizard that lets a step be skipped while a later one is done; a skipped step shows a dashed ring around a dash. `selectable` makes each label a button: a click or Enter fires `nk-select { index, value, step }` – `index` counts from 1, like `current` – and, unless cancelled, makes that step current. `horizontal` sets the steps in one row above a wizard.
|
|
1735
1743
|
|
|
1736
1744
|
```html
|
|
1737
1745
|
<nk-steps label="Connect your own model" current="2"></nk-steps>
|
|
1738
1746
|
<script>{ document.currentScript.previousElementSibling.steps = [{ label: 'Choose a provider', desc: 'Anthropic' }, 'Enter the API key', 'Test the connection']; }</script>
|
|
1747
|
+
<div style="margin-top:16px"><nk-steps id="stepsWizard" label="Connect your own model" current="3" horizontal selectable></nk-steps></div>
|
|
1748
|
+
<script>{ document.getElementById('stepsWizard').steps = [{ label: 'Choose a provider', state: 'done' }, { label: 'Enter the API key', desc: 'skipped', state: 'skipped' }, 'Test the connection']; }</script>
|
|
1739
1749
|
```
|
|
1740
1750
|
|
|
1741
1751
|
| Attribute | Type | Default | Description |
|
|
@@ -1743,10 +1753,14 @@ A short flow – connecting an account, setting up a model – calm and vertical
|
|
|
1743
1753
|
| `steps` | list | – | Comma-separated step labels. |
|
|
1744
1754
|
| `current` | number | `1` | The current step, from 1. |
|
|
1745
1755
|
| `label` | string | – | The list’s accessible name. |
|
|
1756
|
+
| `selectable` | boolean | – | Labels are buttons that jump to their step. |
|
|
1757
|
+
| `horizontal` | boolean | – | One row above a wizard. |
|
|
1746
1758
|
|
|
1747
|
-
**
|
|
1759
|
+
**Events:** `nk-select` `{ index, value, step }` – A step clicked (with `selectable`); cancel it to stay.
|
|
1748
1760
|
|
|
1749
|
-
**
|
|
1761
|
+
**Properties:** `steps`, `current`, `selectable`, `horizontal` · **Methods:** `next()`, `select(index)`
|
|
1762
|
+
|
|
1763
|
+
**Replaces:** `.nk-steps`, `.nk-step`, `.st-mark`, `.st-desc`, `.done`, `.current`, `.skipped`, `.st-label`, `.horizontal`
|
|
1750
1764
|
|
|
1751
1765
|
```html
|
|
1752
1766
|
<!-- equivalent class markup -->
|
|
@@ -1755,9 +1769,14 @@ A short flow – connecting an account, setting up a model – calm and vertical
|
|
|
1755
1769
|
<li class="nk-step current" aria-current="step"><span class="st-mark">2</span><span>Enter the API key</span></li>
|
|
1756
1770
|
<li class="nk-step"><span class="st-mark">3</span><span>Test the connection</span></li>
|
|
1757
1771
|
</ol>
|
|
1772
|
+
<div style="margin-top:16px"><ol class="nk-steps horizontal" aria-label="Connect your own model">
|
|
1773
|
+
<li class="nk-step done"><span class="st-mark">✓</span><button type="button" class="st-label">Choose a provider</button></li>
|
|
1774
|
+
<li class="nk-step skipped"><span class="st-mark">–</span><button type="button" class="st-label">Enter the API key<span class="st-desc">skipped</span></button></li>
|
|
1775
|
+
<li class="nk-step current" aria-current="step"><span class="st-mark">3</span><button type="button" class="st-label">Test the connection</button></li>
|
|
1776
|
+
</ol></div>
|
|
1758
1777
|
```
|
|
1759
1778
|
|
|
1760
|
-
**Small screens:**
|
|
1779
|
+
**Small screens:** Vertical steps stay as they are. `horizontal` keeps its row below 860px, with every mark but only the current step’s label.
|
|
1761
1780
|
|
|
1762
1781
|
### 3.53 `<nk-stats>` – Stat cards
|
|
1763
1782
|
|
|
@@ -2631,7 +2650,7 @@ The view switcher with Notion’s toolbar: child views (`nk-table-view`, `nk-boa
|
|
|
2631
2650
|
|
|
2632
2651
|
### 3.78 `<nk-table-view>` – Table view
|
|
2633
2652
|
|
|
2634
|
-
Renders `columns` × `rows` as the NotionKit table. Cells are polymorphic (`text`, `select`, `multi-select`, `date`, `person`, `checkbox`, `url`, `number`, `progress`) and rendered as plain markup by the exported `renderPropertyCell()` – every cell rule starts with `.nk-table`, so a cell element of its own would never be styled. Header clicks sort with `sortable`. A `number` column stands right-aligned in figures of equal width, formatted by its `locale` and `format` (Intl.NumberFormat options); a person’s `color` takes one of the nine names.
|
|
2653
|
+
Renders `columns` × `rows` as the NotionKit table. Cells are polymorphic (`text`, `select`, `multi-select`, `date`, `person`, `checkbox`, `url`, `number`, `progress`) and rendered as plain markup by the exported `renderPropertyCell()` – every cell rule starts with `.nk-table`, so a cell element of its own would never be styled. Header clicks sort with `sortable`. A `number` column stands right-aligned in figures of equal width, formatted by its `locale` and `format` (Intl.NumberFormat options); a person’s `color` takes one of the nine names. A column of type `actions` (NotionKit 1.12.0) sets buttons in each row from `column.actions` – `[{ action, label, icon, danger, disabled, tooltip }]` –, and a row’s value – a list of action names – picks which of them it shows; a click fires `nk-action { action, row, id, anchor }` instead of selecting the row. A `url` value may be `{ href, label, target }`: a link of your own, to another page of the app, with its own text.
|
|
2635
2654
|
|
|
2636
2655
|
```html
|
|
2637
2656
|
<nk-table-view new-row sortable></nk-table-view>
|
|
@@ -2645,12 +2664,13 @@ Renders `columns` × `rows` as the NotionKit table. Cells are polymorphic (`text
|
|
|
2645
2664
|
{ key: 'due', label: 'Due', type: 'date', icon: '📅' },
|
|
2646
2665
|
{ key: 'progress', label: 'Progress', type: 'progress', icon: '▰' },
|
|
2647
2666
|
{ key: 'effort', label: 'Effort (h)', type: 'number', icon: '#', locale: 'en', format: { minimumFractionDigits: 1 } },
|
|
2667
|
+
{ key: 'actions', type: 'actions', actions: [{ action: 'open', label: 'Open' }, { action: 'archive', label: 'Archive', danger: true }] },
|
|
2648
2668
|
];
|
|
2649
2669
|
db.rows = [
|
|
2650
2670
|
{ id: 1, icon: '🧭', name: 'App shell & sidebar', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '08.05.2026', progress: 100, effort: 6 },
|
|
2651
2671
|
{ id: 2, icon: '📄', name: 'Page shell & typography', status: 'done', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '10.05.2026', progress: 100, effort: 4.5 },
|
|
2652
2672
|
{ id: 3, icon: '🗃️', name: 'Database table view', status: 'progress', owner: { name: 'Marcel', initials: 'MK', color: 'purple' }, due: '20.05.2026', progress: 65, effort: 12.5 },
|
|
2653
|
-
{ id: 4, icon: '▤', name: 'Board view & drag-and-drop', status: 'planned', due: '02.06.2026', progress: 0, effort: 8 },
|
|
2673
|
+
{ id: 4, icon: '▤', name: 'Board view & drag-and-drop', status: 'planned', due: '02.06.2026', progress: 0, effort: 8, actions: ['open'] },
|
|
2654
2674
|
];
|
|
2655
2675
|
}</script>
|
|
2656
2676
|
```
|
|
@@ -2668,21 +2688,21 @@ Renders `columns` × `rows` as the NotionKit table. Cells are polymorphic (`text
|
|
|
2668
2688
|
| `sort-dir` | asc | desc | – | Direction. |
|
|
2669
2689
|
| `wrap` | boolean | – | Cell text may break (Notion's "wrap column"). |
|
|
2670
2690
|
|
|
2671
|
-
**Events:** `nk-select` `{ row, id }` – Row clicked. · `nk-change` `{ row, key, value }` – Checkbox cell toggled (row updated in place). · `nk-action` `{ action: 'sort' | 'new-row', key?, value? }` – Header or
|
|
2691
|
+
**Events:** `nk-select` `{ row, id, key, cell }` – Row clicked. · `nk-change` `{ row, key, value }` – Checkbox cell toggled (row updated in place). · `nk-action` `{ action: 'sort' | 'new-row' | an actions column's action, key?, value?, row?, id?, anchor? }` – Header, add row or a row’s button clicked.
|
|
2672
2692
|
|
|
2673
2693
|
**Properties:** `columns`, `rows`, `data` · **Methods:** `refresh()`
|
|
2674
2694
|
|
|
2675
|
-
**Replaces:** `.nk-table-wrap`, `.nk-table`, `.wrap`, `.th-icon`, `.row-title`, `.date-cell`, `.person-cell`, `.nk-avatar`, `.num`, `.nk-new-row`
|
|
2695
|
+
**Replaces:** `.nk-table-wrap`, `.nk-table`, `.wrap`, `.th-icon`, `.row-title`, `.date-cell`, `.person-cell`, `.nk-avatar`, `.num`, `.row-actions`, `.actions`, `.nk-new-row`
|
|
2676
2696
|
|
|
2677
2697
|
```html
|
|
2678
2698
|
<!-- equivalent class markup -->
|
|
2679
2699
|
<div class="nk-table-wrap"><table class="nk-table">
|
|
2680
|
-
<thead><tr><th><span class="th-icon">📄</span>Name</th><th><span class="th-icon">◉</span>Status</th><th><span class="th-icon">👤</span>Owner</th><th><span class="th-icon">📅</span>Due</th><th><span class="th-icon">▰</span>Progress</th><th><span class="th-icon">#</span>Effort (h)</th></tr></thead>
|
|
2700
|
+
<thead><tr><th><span class="th-icon">📄</span>Name</th><th><span class="th-icon">◉</span>Status</th><th><span class="th-icon">👤</span>Owner</th><th><span class="th-icon">📅</span>Due</th><th><span class="th-icon">▰</span>Progress</th><th><span class="th-icon">#</span>Effort (h)</th><th class="actions"></th></tr></thead>
|
|
2681
2701
|
<tbody>
|
|
2682
|
-
<tr><td><span class="row-title">🧭 App shell & sidebar</span></td><td><span class="nk-tag green">Done</span></td><td><span class="person-cell"><span class="nk-avatar small purple">MK</span> Marcel</span></td><td><span class="date-cell">08.05.2026</span></td><td><span class="nk-progress"><i style="width:100%"></i></span><span class="nk-progress-label">100%</span></td><td class="num"><span>6.0</span></td></tr>
|
|
2683
|
-
<tr><td><span class="row-title">📄 Page shell & typography</span></td><td><span class="nk-tag green">Done</span></td><td><span class="person-cell"><span class="nk-avatar small purple">MK</span> Marcel</span></td><td><span class="date-cell">10.05.2026</span></td><td><span class="nk-progress"><i style="width:100%"></i></span><span class="nk-progress-label">100%</span></td><td class="num"><span>4.5</span></td></tr>
|
|
2684
|
-
<tr><td><span class="row-title">🗃️ Database table view</span></td><td><span class="nk-tag blue">In progress</span></td><td><span class="person-cell"><span class="nk-avatar small purple">MK</span> Marcel</span></td><td><span class="date-cell">20.05.2026</span></td><td><span class="nk-progress"><i style="width:65%"></i></span><span class="nk-progress-label">65%</span></td><td class="num"><span>12.5</span></td></tr>
|
|
2685
|
-
<tr><td><span class="row-title">▤ Board view & drag-and-drop</span></td><td><span class="nk-tag orange">Planned</span></td><td><span class="person-cell">—</span></td><td><span class="date-cell">02.06.2026</span></td><td><span class="nk-progress"><i style="width:0%"></i></span><span class="nk-progress-label">0%</span></td><td class="num"><span>8.0</span></td></tr>
|
|
2702
|
+
<tr><td><span class="row-title">🧭 App shell & sidebar</span></td><td><span class="nk-tag green">Done</span></td><td><span class="person-cell"><span class="nk-avatar small purple">MK</span> Marcel</span></td><td><span class="date-cell">08.05.2026</span></td><td><span class="nk-progress"><i style="width:100%"></i></span><span class="nk-progress-label">100%</span></td><td class="num"><span>6.0</span></td><td><span class="row-actions"><button class="nk-btn secondary small">Open</button><button class="nk-btn danger small">Archive</button></span></td></tr>
|
|
2703
|
+
<tr><td><span class="row-title">📄 Page shell & typography</span></td><td><span class="nk-tag green">Done</span></td><td><span class="person-cell"><span class="nk-avatar small purple">MK</span> Marcel</span></td><td><span class="date-cell">10.05.2026</span></td><td><span class="nk-progress"><i style="width:100%"></i></span><span class="nk-progress-label">100%</span></td><td class="num"><span>4.5</span></td><td><span class="row-actions"><button class="nk-btn secondary small">Open</button><button class="nk-btn danger small">Archive</button></span></td></tr>
|
|
2704
|
+
<tr><td><span class="row-title">🗃️ Database table view</span></td><td><span class="nk-tag blue">In progress</span></td><td><span class="person-cell"><span class="nk-avatar small purple">MK</span> Marcel</span></td><td><span class="date-cell">20.05.2026</span></td><td><span class="nk-progress"><i style="width:65%"></i></span><span class="nk-progress-label">65%</span></td><td class="num"><span>12.5</span></td><td><span class="row-actions"><button class="nk-btn secondary small">Open</button><button class="nk-btn danger small">Archive</button></span></td></tr>
|
|
2705
|
+
<tr><td><span class="row-title">▤ Board view & drag-and-drop</span></td><td><span class="nk-tag orange">Planned</span></td><td><span class="person-cell">—</span></td><td><span class="date-cell">02.06.2026</span></td><td><span class="nk-progress"><i style="width:0%"></i></span><span class="nk-progress-label">0%</span></td><td class="num"><span>8.0</span></td><td><span class="row-actions"><button class="nk-btn secondary small">Open</button></span></td></tr>
|
|
2686
2706
|
</tbody>
|
|
2687
2707
|
</table><div class="nk-new-row">+ New page</div></div>
|
|
2688
2708
|
```
|
|
@@ -3064,8 +3084,8 @@ Eight skeletons, one per app shape, mirroring the NotionKit CSS SKILL.md. Copy o
|
|
|
3064
3084
|
<html lang="en" data-theme="light">
|
|
3065
3085
|
<head>
|
|
3066
3086
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3067
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.
|
|
3068
|
-
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.
|
|
3087
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.12.0/notionkit.min.css">
|
|
3088
|
+
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.12.0/dist/notionkit-elements.min.js"></script>
|
|
3069
3089
|
</head>
|
|
3070
3090
|
<body class="nk-body">
|
|
3071
3091
|
<nk-app>
|
|
@@ -3146,8 +3166,8 @@ Rules of the shell: `nk-sidebar`, `nk-topbar` and `nk-page` are `display: conten
|
|
|
3146
3166
|
<html lang="en" data-theme="light">
|
|
3147
3167
|
<head>
|
|
3148
3168
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3149
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.
|
|
3150
|
-
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.
|
|
3169
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.12.0/notionkit.min.css">
|
|
3170
|
+
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.12.0/dist/notionkit-elements.min.js"></script>
|
|
3151
3171
|
</head>
|
|
3152
3172
|
<body class="nk-body">
|
|
3153
3173
|
<nk-app>
|
|
@@ -3254,8 +3274,8 @@ Data contract: `columns` describe the properties (`type`: text | select | multi-
|
|
|
3254
3274
|
<html lang="en" data-theme="light">
|
|
3255
3275
|
<head>
|
|
3256
3276
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3257
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.
|
|
3258
|
-
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.
|
|
3277
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.12.0/notionkit.min.css">
|
|
3278
|
+
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.12.0/dist/notionkit-elements.min.js"></script>
|
|
3259
3279
|
</head>
|
|
3260
3280
|
<body class="nk-body">
|
|
3261
3281
|
<nk-app>
|
|
@@ -3314,8 +3334,8 @@ Data contract: `columns` describe the properties (`type`: text | select | multi-
|
|
|
3314
3334
|
<html lang="en" data-theme="light">
|
|
3315
3335
|
<head>
|
|
3316
3336
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3317
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.
|
|
3318
|
-
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.
|
|
3337
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.12.0/notionkit.min.css">
|
|
3338
|
+
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.12.0/dist/notionkit-elements.min.js"></script>
|
|
3319
3339
|
</head>
|
|
3320
3340
|
<body class="nk-body">
|
|
3321
3341
|
<!-- your app -->
|
|
@@ -3392,8 +3412,8 @@ The open/close contract is one attribute: `settings.open = true`, `settings.show
|
|
|
3392
3412
|
<html lang="en" data-theme="light">
|
|
3393
3413
|
<head>
|
|
3394
3414
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3395
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.
|
|
3396
|
-
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.
|
|
3415
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.12.0/notionkit.min.css">
|
|
3416
|
+
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.12.0/dist/notionkit-elements.min.js"></script>
|
|
3397
3417
|
</head>
|
|
3398
3418
|
<body class="nk-body">
|
|
3399
3419
|
<div class="nk-page" style="padding-top:48px">
|
|
@@ -3439,8 +3459,8 @@ The open/close contract is one attribute: `settings.open = true`, `settings.show
|
|
|
3439
3459
|
<html lang="en" data-theme="light">
|
|
3440
3460
|
<head>
|
|
3441
3461
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3442
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.
|
|
3443
|
-
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.
|
|
3462
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.12.0/notionkit.min.css">
|
|
3463
|
+
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.12.0/dist/notionkit-elements.min.js"></script>
|
|
3444
3464
|
</head>
|
|
3445
3465
|
<body class="nk-body">
|
|
3446
3466
|
<nk-page narrow icon="📘" cover>
|
|
@@ -3484,8 +3504,8 @@ Note `narrow`: the page is the document, so there is no inner scroll wrapper –
|
|
|
3484
3504
|
<html lang="en" data-theme="light">
|
|
3485
3505
|
<head>
|
|
3486
3506
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3487
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.
|
|
3488
|
-
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.
|
|
3507
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.12.0/notionkit.min.css">
|
|
3508
|
+
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.12.0/dist/notionkit-elements.min.js"></script>
|
|
3489
3509
|
</head>
|
|
3490
3510
|
<body class="nk-body">
|
|
3491
3511
|
<nk-app>
|
|
@@ -3539,8 +3559,8 @@ Note `narrow`: the page is the document, so there is no inner scroll wrapper –
|
|
|
3539
3559
|
<html lang="en" data-theme="light">
|
|
3540
3560
|
<head>
|
|
3541
3561
|
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3542
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.
|
|
3543
|
-
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.
|
|
3562
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit@1.12.0/notionkit.min.css">
|
|
3563
|
+
<script src="https://cdn.jsdelivr.net/npm/@jungherz-de/notionkit-elements@1.12.0/dist/notionkit-elements.min.js"></script>
|
|
3544
3564
|
</head>
|
|
3545
3565
|
<body class="nk-body">
|
|
3546
3566
|
<!-- A narrow column, centred: layout is yours, so it is inline. -->
|
|
@@ -3672,19 +3692,19 @@ Form controls additionally re-dispatch a native, bubbling `change` event, so `fo
|
|
|
3672
3692
|
| `<nk-page-cover>` | page | `src`, `position` | – | – |
|
|
3673
3693
|
| `<nk-page-title>` | page | `editable`, `placeholder`, `value` | `(default)` | `nk-change` |
|
|
3674
3694
|
| `<nk-page-actions>` | page | – | `(default)` | – |
|
|
3675
|
-
| `<nk-props>` | page |
|
|
3676
|
-
| `<nk-prop>` | page | `label`, `icon` | `(default)`, `icon` | `nk-action` |
|
|
3677
|
-
| `<nk-panels>` | page |
|
|
3678
|
-
| `<nk-panel>` | page | `title`, `icon`, `cover`, `href` | `(default)` | – |
|
|
3695
|
+
| `<nk-props>` | page | `flush` | `(default)` | – |
|
|
3696
|
+
| `<nk-prop>` | page | `label`, `icon`, `text` | `(default)`, `icon` | `nk-action` |
|
|
3697
|
+
| `<nk-panels>` | page | `flush` | `(default)` | – |
|
|
3698
|
+
| `<nk-panel>` | page | `title`, `icon`, `cover`, `href` | `(default)`, `end` | – |
|
|
3679
3699
|
| `<nk-block-host>` | page | `handle`, `drop-target` | `(default)` | – |
|
|
3680
3700
|
| `<nk-banner>` | page | `variant` | `(default)`, `action` | – |
|
|
3681
3701
|
| `<nk-empty>` | page | `icon`, `title`, `desc` | `(default)`, `icon`, `title`, `desc` | – |
|
|
3682
3702
|
| `<nk-skeleton>` | page | `lines`, `height`, `width`, `widths` | – | – |
|
|
3683
3703
|
| `<nk-synced>` | page | `badge` | `(default)` | – |
|
|
3684
|
-
| `<nk-tabs>` | page | `value` | `(default)`, `panel` | `nk-change`, `nk-select` |
|
|
3704
|
+
| `<nk-tabs>` | page | `value`, `scroll` | `(default)`, `panel` | `nk-change`, `nk-select` |
|
|
3685
3705
|
| `<nk-tab>` | page | `value`, `active`, `disabled` | `(default)` | `nk-select` |
|
|
3686
3706
|
| `<nk-segmented>` | page | `value`, `scroll`, `wrap`, `name` | `(default)` | `nk-change` |
|
|
3687
|
-
| `<nk-steps>` | page | `steps`, `current`, `label` | – |
|
|
3707
|
+
| `<nk-steps>` | page | `steps`, `current`, `label`, `selectable` | – | `nk-select` |
|
|
3688
3708
|
| `<nk-stats>` | page | `label`, `value`, `delta`, `trend` | `(default)` | – |
|
|
3689
3709
|
| `<nk-stat>` | page | `label`, `value`, `delta`, `trend` | `label`, `value`, `delta` | – |
|
|
3690
3710
|
| `<nk-avatar-group>` | page | `more` | `(default)` | – |
|
|
@@ -3739,10 +3759,10 @@ Form controls additionally re-dispatch a native, bubbling `change` event, so `fo
|
|
|
3739
3759
|
| Theme sync | one `MutationObserver` on `<html>[data-theme]`, a `Set` of instances, `.nk-wrapper[data-theme]` inside each root |
|
|
3740
3760
|
| Components | `src/components/{forms,content,shell,page,overlays,data}/nk-*.js`, one tag per file, `customElements.define` at the bottom |
|
|
3741
3761
|
| Build | Rollup: IIFE, minified IIFE, ESM, and per-component ESM entries on a stable `dist/components/base.js` that import NotionKit's sheet (`@jungherz-de/notionkit/notionkit-styles.js`) instead of inlining it; the full bundles inline it and export `componentsSheet` |
|
|
3742
|
-
| Peer | `@jungherz-de/notionkit >= 1.
|
|
3762
|
+
| Peer | `@jungherz-de/notionkit >= 1.12.0` – from 1.5.0 on the elements and the foundation share one version number; the bundle embeds that release's stylesheet, so keep them in step |
|
|
3743
3763
|
|
|
3744
3764
|
Lifecycle: construct (attach shadow, adopt sheets) → first connect (wrapper + `render()`) → every connect (`setupEvents()`, theme registration, light-DOM observer) → `attributeChangedCallback` → `onAttributeChanged` → disconnect (`teardownEvents()`, unregister).
|
|
3745
3765
|
|
|
3746
3766
|
|
|
3747
3767
|
---
|
|
3748
|
-
*NotionKit Elements v1.
|
|
3768
|
+
*NotionKit Elements v1.12.0 · wrapping NotionKit CSS v1.12.0 · MIT · Jungherz GmbH*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NkElement } from './base.js';
|
|
2
|
-
import { t as tagFor, r as renderPropertyCell } from './shared/property-cell-
|
|
2
|
+
import { t as tagFor, r as renderPropertyCell } from './shared/property-cell-DKvv6TIG.js';
|
|
3
3
|
import '@jungherz-de/notionkit/notionkit-styles.js';
|
|
4
4
|
import './shared/avatar-CzPZN3uP.js';
|
|
5
5
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NkFormElement } from './base.js';
|
|
2
2
|
import { p as parseDay, i as isoOf, C as CHEVRONS, r as resolveLocale, f as firstWeekday, m as monthGrid, w as weekLabel, a as weekdayNames, b as isoWeek, s as stepMonth, c as addDays } from './shared/dates-a32DcW1l.js';
|
|
3
|
-
import { p as placeUnder } from './shared/floating-
|
|
3
|
+
import { p as placeUnder } from './shared/floating-DOK73b_D.js';
|
|
4
4
|
import { d as deepActiveElement } from './shared/focus-BNAChOXO.js';
|
|
5
5
|
import '@jungherz-de/notionkit/notionkit-styles.js';
|
|
6
6
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NkElement } from './base.js';
|
|
2
|
-
import { r as renderPropertyCell } from './shared/property-cell-
|
|
2
|
+
import { r as renderPropertyCell } from './shared/property-cell-DKvv6TIG.js';
|
|
3
3
|
import '@jungherz-de/notionkit/notionkit-styles.js';
|
|
4
4
|
import './shared/avatar-CzPZN3uP.js';
|
|
5
5
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NkElement } from './base.js';
|
|
2
2
|
import { d as deepActiveElement } from './shared/focus-BNAChOXO.js';
|
|
3
|
-
import { p as placeUnder } from './shared/floating-
|
|
3
|
+
import { p as placeUnder } from './shared/floating-DOK73b_D.js';
|
|
4
4
|
import '@jungherz-de/notionkit/notionkit-styles.js';
|
|
5
5
|
|
|
6
6
|
// <nk-menu>
|
|
@@ -5,9 +5,13 @@ import '@jungherz-de/notionkit/notionkit-styles.js';
|
|
|
5
5
|
// <nk-panel href="/roadmap" cover="covers/aurora.svg" icon="🚀" title="Roadmap"><p>2 min ago</p></nk-panel>
|
|
6
6
|
// → <a class="nk-panel" href="/roadmap"><div class="nk-cover"><img src="…" alt=""></div>
|
|
7
7
|
// <div class="nk-page-icon">🚀</div><h3>Roadmap</h3>…</a>
|
|
8
|
+
// <nk-panel title="Contacts database"><nk-tag slot="end" color="green">Connected</nk-tag>…</nk-panel>
|
|
9
|
+
// → … <div class="p-head"><h3>Contacts database</h3><span class="p-end">…</span></div>
|
|
8
10
|
// `cover` without a value draws the token gradient, with one a picture; `icon`
|
|
9
11
|
// overlaps the cover as on a page – a page tile, as on Notion's Home. With
|
|
10
12
|
// `href` the panel is a link. `title` is the heading, never a tooltip.
|
|
13
|
+
// slot="end" (NotionKit 1.12.0) sits at the right edge of the title – a state
|
|
14
|
+
// as a tag, a button – and moves under it where both do not fit.
|
|
11
15
|
class NkPanel extends NkElement {
|
|
12
16
|
static get observedAttributes() { return ['title', 'icon', 'cover', 'href', 'target']; }
|
|
13
17
|
|
|
@@ -16,6 +20,11 @@ class NkPanel extends NkElement {
|
|
|
16
20
|
this._img = this.createElement('img', [], { alt: '' });
|
|
17
21
|
this._icon = this.createElement('div', ['nk-page-icon']);
|
|
18
22
|
this._heading = document.createElement('h3');
|
|
23
|
+
this._endSlot = this.createElement('slot', [], { name: 'end' });
|
|
24
|
+
this._end = this.createElement('span', ['p-end']);
|
|
25
|
+
this._end.appendChild(this._endSlot);
|
|
26
|
+
this._head = this.createElement('div', ['p-head']);
|
|
27
|
+
this._head.append(this._heading, this._end);
|
|
19
28
|
this._slot = document.createElement('slot');
|
|
20
29
|
this.takeTitle();
|
|
21
30
|
this._build();
|
|
@@ -24,7 +33,7 @@ class NkPanel extends NkElement {
|
|
|
24
33
|
_build() {
|
|
25
34
|
const href = this.getAttribute('href');
|
|
26
35
|
const box = this.createElement(href ? 'a' : 'div', ['nk-panel']);
|
|
27
|
-
box.append(this._cover, this._icon, this.
|
|
36
|
+
box.append(this._cover, this._icon, this._head, this._slot);
|
|
28
37
|
this._wrapper.replaceChildren(box);
|
|
29
38
|
this._box = box;
|
|
30
39
|
this._sync();
|
|
@@ -40,10 +49,23 @@ class NkPanel extends NkElement {
|
|
|
40
49
|
const icon = this.getAttribute('icon');
|
|
41
50
|
this._icon.textContent = icon || '';
|
|
42
51
|
this._icon.style.display = icon ? '' : 'none';
|
|
43
|
-
|
|
44
|
-
this._heading.
|
|
52
|
+
const title = this._titleText || '';
|
|
53
|
+
if (this._heading.textContent !== title) this._heading.textContent = title;
|
|
54
|
+
this._heading.style.display = title ? '' : 'none';
|
|
55
|
+
// The end and the whole head leave the layout when they are empty, so a
|
|
56
|
+
// title alone lays out as it always did.
|
|
57
|
+
const end = this._endSlot.assignedNodes().some(n => n.nodeType === Node.ELEMENT_NODE || n.textContent.trim());
|
|
58
|
+
this._end.style.display = end ? '' : 'none';
|
|
59
|
+
this._head.style.display = title || end ? '' : 'none';
|
|
45
60
|
}
|
|
46
61
|
|
|
62
|
+
setupEvents() {
|
|
63
|
+
this._onEnd = () => this._sync();
|
|
64
|
+
this._endSlot.addEventListener('slotchange', this._onEnd);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
teardownEvents() { this._endSlot?.removeEventListener('slotchange', this._onEnd); }
|
|
68
|
+
|
|
47
69
|
onAttributeChanged(name, _old, value) {
|
|
48
70
|
if (name === 'title' && !this.takeTitle(value)) return;
|
|
49
71
|
if (name === 'href' && (value === null) !== (this._box.localName === 'div')) { this._build(); return; }
|