lintje 0.2.0 → 0.3.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.
Files changed (276) hide show
  1. package/README.md +2 -2
  2. package/dist-elements/actions.js +1 -1
  3. package/dist-elements/chunks/{base-Bg-IFOPG.js → base-CbmWxUig.js} +444 -272
  4. package/dist-elements/chunks/{controls-B1455oPG.js → controls-DxmnDSBr.js} +6 -0
  5. package/dist-elements/chunks/dialog-DChINFxD.js +28 -0
  6. package/dist-elements/chunks/{disclosure-BXTX04gM.js → disclosure-D39vAR5q.js} +1 -1
  7. package/dist-elements/chunks/{disclosure-CMXhX-Vb.js → disclosure-DLkXPUpV.js} +6 -6
  8. package/dist-elements/chunks/download-Ct9q2anY.js +206 -0
  9. package/dist-elements/chunks/{focus-trap-9BnE-xWv.js → focus-trap-BwOxE5BX.js} +1 -1
  10. package/dist-elements/chunks/input-CRW_exv_.js +195 -0
  11. package/dist-elements/chunks/{player-DXOZEyEy.js → player-B8QXJ0Z5.js} +26 -26
  12. package/dist-elements/chunks/{sentence-BI3lwEuT.js → sentence-B19AyZBS.js} +3 -3
  13. package/dist-elements/chunks/{stagger-qGD3wmhg.js → stagger-BHoOgy0g.js} +81 -75
  14. package/dist-elements/core.js +1 -1
  15. package/dist-elements/custom-elements.json +980 -670
  16. package/dist-elements/data-types.json +6798 -0
  17. package/dist-elements/feedback.js +2 -1
  18. package/dist-elements/frame.js +0 -2
  19. package/dist-elements/guides/dashboard.md +8 -0
  20. package/dist-elements/guides/events.md +4 -5
  21. package/dist-elements/guides/loading.md +8 -7
  22. package/dist-elements/guides/page-contents.md +110 -0
  23. package/dist-elements/guides/start.md +12 -0
  24. package/dist-elements/inputs.js +2 -1
  25. package/dist-elements/layout.js +1 -1
  26. package/dist-elements/lintje.js +6975 -6120
  27. package/dist-elements/overlays.js +2 -2
  28. package/dist-elements/skills/lintje/SKILL.md +1 -1
  29. package/dist-elements/tables.js +1 -1
  30. package/dist-elements/tag/activity-log.js +15 -15
  31. package/dist-elements/tag/ai-label.js +10 -10
  32. package/dist-elements/tag/announcement.js +36 -76
  33. package/dist-elements/tag/app-search.js +49 -49
  34. package/dist-elements/tag/audio-player.js +57 -57
  35. package/dist-elements/tag/badge.js +1 -1
  36. package/dist-elements/tag/breadcrumbs.js +15 -15
  37. package/dist-elements/tag/button.js +1 -1
  38. package/dist-elements/tag/card-list.js +12 -12
  39. package/dist-elements/tag/card.js +39 -44
  40. package/dist-elements/tag/chart.js +1050 -795
  41. package/dist-elements/tag/chat-answer.js +49 -49
  42. package/dist-elements/tag/chat-composer.js +75 -71
  43. package/dist-elements/tag/chat-message.js +8 -8
  44. package/dist-elements/tag/chat-strip.js +22 -22
  45. package/dist-elements/tag/chat-suggestions.js +12 -12
  46. package/dist-elements/tag/chat.js +56 -56
  47. package/dist-elements/tag/checkbox-group.d.ts +1 -0
  48. package/dist-elements/tag/checkbox-group.js +59 -0
  49. package/dist-elements/tag/checkbox.js +8 -8
  50. package/dist-elements/tag/code.js +9 -9
  51. package/dist-elements/tag/combobox.js +18 -18
  52. package/dist-elements/tag/conflict-alert.js +12 -12
  53. package/dist-elements/tag/copy-button.js +14 -14
  54. package/dist-elements/tag/data-table.js +878 -530
  55. package/dist-elements/tag/date-input.js +30 -30
  56. package/dist-elements/tag/date-range.js +37 -37
  57. package/dist-elements/tag/description-list.js +29 -32
  58. package/dist-elements/tag/dialog.d.ts +1 -0
  59. package/dist-elements/tag/dialog.js +144 -0
  60. package/dist-elements/tag/document-viewer.js +23 -23
  61. package/dist-elements/tag/drawer.js +28 -32
  62. package/dist-elements/tag/empty-state.js +19 -30
  63. package/dist-elements/tag/error-page.d.ts +1 -0
  64. package/dist-elements/tag/error-page.js +109 -0
  65. package/dist-elements/tag/error-summary.js +10 -10
  66. package/dist-elements/tag/expander.js +8 -8
  67. package/dist-elements/tag/explainer.js +11 -11
  68. package/dist-elements/tag/field.js +5 -5
  69. package/dist-elements/tag/file-upload.js +34 -34
  70. package/dist-elements/tag/filter-bar.js +56 -56
  71. package/dist-elements/tag/filter-sheet.js +11 -11
  72. package/dist-elements/tag/filter-zone.js +31 -31
  73. package/dist-elements/tag/footer.js +21 -21
  74. package/dist-elements/tag/form-actions.js +29 -25
  75. package/dist-elements/tag/form-section.js +6 -6
  76. package/dist-elements/tag/form.js +12 -12
  77. package/dist-elements/tag/gallery.js +14 -14
  78. package/dist-elements/tag/grid-item.js +1 -1
  79. package/dist-elements/tag/grid.js +1 -1
  80. package/dist-elements/tag/hero.js +12 -12
  81. package/dist-elements/tag/highlight.js +5 -5
  82. package/dist-elements/tag/icon-button.js +1 -1
  83. package/dist-elements/tag/icon.js +1 -1
  84. package/dist-elements/tag/job-list.js +22 -44
  85. package/dist-elements/tag/kpi-row.js +12 -10
  86. package/dist-elements/tag/kpi.js +146 -137
  87. package/dist-elements/tag/level-meter.js +11 -11
  88. package/dist-elements/tag/list.js +55 -55
  89. package/dist-elements/tag/logo.js +30 -30
  90. package/dist-elements/tag/map.js +690 -665
  91. package/dist-elements/tag/menu-button.js +70 -69
  92. package/dist-elements/tag/modal.js +28 -37
  93. package/dist-elements/tag/multiselect.js +34 -34
  94. package/dist-elements/tag/note.js +5 -5
  95. package/dist-elements/tag/notifications.js +36 -36
  96. package/dist-elements/tag/number-input.js +12 -12
  97. package/dist-elements/tag/page-header.js +140 -37
  98. package/dist-elements/tag/pagination.js +53 -48
  99. package/dist-elements/tag/popover.js +1 -1
  100. package/dist-elements/tag/progress-bar.js +1 -1
  101. package/dist-elements/tag/prose.js +6 -6
  102. package/dist-elements/tag/qr-code.js +7 -7
  103. package/dist-elements/tag/radio-group.js +12 -12
  104. package/dist-elements/tag/range.js +22 -22
  105. package/dist-elements/tag/recording-status.js +14 -14
  106. package/dist-elements/tag/repeater.js +10 -10
  107. package/dist-elements/tag/segmented.js +13 -13
  108. package/dist-elements/tag/select.js +10 -10
  109. package/dist-elements/tag/shell.js +356 -339
  110. package/dist-elements/tag/skeleton.js +1 -1
  111. package/dist-elements/tag/slot-picker.js +14 -14
  112. package/dist-elements/tag/sortable-list.js +14 -14
  113. package/dist-elements/tag/spinner.js +1 -1
  114. package/dist-elements/tag/split-pane.js +12 -12
  115. package/dist-elements/tag/status-dot.js +1 -1
  116. package/dist-elements/tag/stepper.js +21 -21
  117. package/dist-elements/tag/streaming-text.js +13 -13
  118. package/dist-elements/tag/sub-nav.js +39 -38
  119. package/dist-elements/tag/tabs.js +38 -38
  120. package/dist-elements/tag/tag-input.js +19 -19
  121. package/dist-elements/tag/text-editor.js +24 -24
  122. package/dist-elements/tag/text-input.js +14 -14
  123. package/dist-elements/tag/textarea.js +14 -14
  124. package/dist-elements/tag/tile.js +1 -1
  125. package/dist-elements/tag/time-input.js +19 -19
  126. package/dist-elements/tag/toast.js +32 -23
  127. package/dist-elements/tag/toggle.js +8 -8
  128. package/dist-elements/tag/toggletip.js +27 -27
  129. package/dist-elements/tag/tooltip.js +1 -1
  130. package/dist-elements/tag/transcript.js +48 -48
  131. package/dist-elements/tag/translator.js +13 -13
  132. package/dist-elements/tag/tree-view.js +13 -13
  133. package/dist-elements/tag/user-menu.js +37 -37
  134. package/dist-elements/tag/video-player.js +21 -21
  135. package/dist-elements/tokens.css +120 -96
  136. package/dist-elements/types/bundle/feedback.d.ts +1 -0
  137. package/dist-elements/types/bundle/frame.d.ts +0 -2
  138. package/dist-elements/types/bundle/inputs.d.ts +1 -0
  139. package/dist-elements/types/bundle/overlays.d.ts +1 -1
  140. package/dist-elements/types/components/actions/copy-button/copy-button.d.ts +6 -7
  141. package/dist-elements/types/components/actions/menu-button/menu-button.d.ts +13 -15
  142. package/dist-elements/types/components/actions/qr-code/qr-code.d.ts +9 -9
  143. package/dist-elements/types/components/charts/chart/chart.d.ts +5 -4
  144. package/dist-elements/types/components/charts/kpi/kpi.d.ts +16 -8
  145. package/dist-elements/types/components/charts/kpi-row/kpi-row.d.ts +1 -7
  146. package/dist-elements/types/components/charts/note/note.d.ts +1 -1
  147. package/dist-elements/types/components/chat/chat/chat.d.ts +8 -10
  148. package/dist-elements/types/components/chat/chat-answer/chat-answer.d.ts +7 -8
  149. package/dist-elements/types/components/chat/chat-composer/chat-composer.d.ts +8 -10
  150. package/dist-elements/types/components/chat/chat-message/chat-message.d.ts +6 -7
  151. package/dist-elements/types/components/chat/chat-strip/chat-strip.d.ts +5 -5
  152. package/dist-elements/types/components/chat/chat-suggestions/chat-suggestions.d.ts +9 -10
  153. package/dist-elements/types/components/content/audio-player/audio-player.d.ts +10 -12
  154. package/dist-elements/types/components/content/code/code.d.ts +2 -3
  155. package/dist-elements/types/components/content/document-viewer/document-viewer.d.ts +8 -9
  156. package/dist-elements/types/components/content/gallery/gallery.d.ts +5 -4
  157. package/dist-elements/types/components/content/highlight/highlight.d.ts +4 -3
  158. package/dist-elements/types/components/content/prose/prose.d.ts +2 -3
  159. package/dist-elements/types/components/content/transcript/transcript.d.ts +12 -25
  160. package/dist-elements/types/components/content/translator/translator.d.ts +11 -15
  161. package/dist-elements/types/components/content/video-player/video-player.d.ts +11 -13
  162. package/dist-elements/types/components/feedback/ai-label/ai-label.d.ts +3 -4
  163. package/dist-elements/types/components/feedback/announcement/announcement.d.ts +3 -7
  164. package/dist-elements/types/components/feedback/conflict-alert/conflict-alert.d.ts +3 -4
  165. package/dist-elements/types/components/feedback/empty-state/empty-state.d.ts +5 -8
  166. package/dist-elements/types/components/feedback/error-page/error-page.d.ts +52 -0
  167. package/dist-elements/types/components/feedback/job-list/job-list.d.ts +9 -12
  168. package/dist-elements/types/components/feedback/level-meter/level-meter.d.ts +4 -6
  169. package/dist-elements/types/components/feedback/recording-status/recording-status.d.ts +5 -6
  170. package/dist-elements/types/components/feedback/streaming-text/streaming-text.d.ts +10 -7
  171. package/dist-elements/types/components/feedback/toast/toast.d.ts +8 -9
  172. package/dist-elements/types/components/filters/filter-bar/filter-bar.d.ts +9 -4
  173. package/dist-elements/types/components/filters/filter-sheet/filter-sheet.d.ts +5 -5
  174. package/dist-elements/types/components/filters/filter-zone/filter-zone.d.ts +4 -4
  175. package/dist-elements/types/components/forms/error-summary/error-summary.d.ts +5 -6
  176. package/dist-elements/types/components/forms/form/form.d.ts +5 -5
  177. package/dist-elements/types/components/forms/form-actions/form-actions.d.ts +9 -7
  178. package/dist-elements/types/components/forms/form-section/form-section.d.ts +6 -5
  179. package/dist-elements/types/components/forms/repeater/repeater.d.ts +13 -7
  180. package/dist-elements/types/components/forms/stepper/stepper.d.ts +5 -4
  181. package/dist-elements/types/components/frame/app-search/app-search.d.ts +6 -7
  182. package/dist-elements/types/components/frame/breadcrumbs/breadcrumbs.d.ts +2 -2
  183. package/dist-elements/types/components/frame/footer/footer.d.ts +3 -2
  184. package/dist-elements/types/components/frame/hero/hero.d.ts +7 -9
  185. package/dist-elements/types/components/frame/notifications/notifications.d.ts +5 -9
  186. package/dist-elements/types/components/frame/page-header/page-header.d.ts +12 -15
  187. package/dist-elements/types/components/frame/shell/shell.d.ts +14 -13
  188. package/dist-elements/types/components/frame/sub-nav/sub-nav.d.ts +10 -6
  189. package/dist-elements/types/components/frame/user-menu/user-menu.d.ts +11 -10
  190. package/dist-elements/types/components/index.d.ts +8 -9
  191. package/dist-elements/types/components/inputs/checkbox/checkbox.d.ts +4 -4
  192. package/dist-elements/types/components/inputs/checkbox-group/checkbox-group.d.ts +33 -0
  193. package/dist-elements/types/components/inputs/combobox/combobox.d.ts +12 -6
  194. package/dist-elements/types/components/inputs/date-input/date-input.d.ts +5 -5
  195. package/dist-elements/types/components/inputs/date-range/date-range.d.ts +11 -6
  196. package/dist-elements/types/components/inputs/field/field.d.ts +5 -3
  197. package/dist-elements/types/components/inputs/file-upload/file-upload.d.ts +6 -8
  198. package/dist-elements/types/components/inputs/multiselect/multiselect.d.ts +4 -6
  199. package/dist-elements/types/components/inputs/number-input/number-input.d.ts +8 -7
  200. package/dist-elements/types/components/inputs/radio-group/radio-group.d.ts +2 -4
  201. package/dist-elements/types/components/inputs/range/range.d.ts +5 -6
  202. package/dist-elements/types/components/inputs/segmented/segmented.d.ts +7 -4
  203. package/dist-elements/types/components/inputs/select/select.d.ts +6 -3
  204. package/dist-elements/types/components/inputs/slot-picker/slot-picker.d.ts +6 -5
  205. package/dist-elements/types/components/inputs/tag-input/tag-input.d.ts +7 -5
  206. package/dist-elements/types/components/inputs/text-editor/text-editor.d.ts +6 -6
  207. package/dist-elements/types/components/inputs/text-input/text-input.d.ts +11 -6
  208. package/dist-elements/types/components/inputs/textarea/textarea.d.ts +12 -11
  209. package/dist-elements/types/components/inputs/time-input/time-input.d.ts +7 -8
  210. package/dist-elements/types/components/inputs/toggle/toggle.d.ts +3 -1
  211. package/dist-elements/types/components/layout/expander/expander.d.ts +9 -10
  212. package/dist-elements/types/components/layout/split-pane/split-pane.d.ts +6 -6
  213. package/dist-elements/types/components/layout/tabs/tabs.d.ts +11 -9
  214. package/dist-elements/types/components/map/map/map.d.ts +10 -9
  215. package/dist-elements/types/components/overlays/dialog/dialog.d.ts +49 -0
  216. package/dist-elements/types/components/overlays/drawer/drawer.d.ts +6 -5
  217. package/dist-elements/types/components/overlays/modal/modal.d.ts +7 -12
  218. package/dist-elements/types/components/overlays/toggletip/toggletip.d.ts +3 -7
  219. package/dist-elements/types/components/shared/charts/index.d.ts +4 -1
  220. package/dist-elements/types/components/shared/charts/kinds.d.ts +86 -0
  221. package/dist-elements/types/components/shared/charts/line-chart/line-chart.d.ts +2 -2
  222. package/dist-elements/types/components/shared/charts/map-chart/leaflet.d.ts +5 -0
  223. package/dist-elements/types/components/shared/charts/shared/chart-states.d.ts +8 -19
  224. package/dist-elements/types/components/shared/charts/shared/controller.d.ts +7 -0
  225. package/dist-elements/types/components/shared/charts/shared/types.d.ts +29 -0
  226. package/dist-elements/types/components/shared/charts/stacked-area-chart/stacked-area-chart.d.ts +13 -0
  227. package/dist-elements/types/components/shared/dialog.d.ts +9 -0
  228. package/dist-elements/types/components/shared/overflow.d.ts +58 -0
  229. package/dist-elements/types/components/tables/activity-log/activity-log.d.ts +2 -3
  230. package/dist-elements/types/components/tables/card/card.d.ts +14 -20
  231. package/dist-elements/types/components/tables/card-list/card-list.d.ts +9 -11
  232. package/dist-elements/types/components/tables/data-table/data-table.d.ts +85 -16
  233. package/dist-elements/types/components/tables/data-table/filters.d.ts +13 -4
  234. package/dist-elements/types/components/tables/description-list/description-list.d.ts +12 -11
  235. package/dist-elements/types/components/tables/list/list.d.ts +9 -20
  236. package/dist-elements/types/components/tables/pagination/pagination.d.ts +12 -11
  237. package/dist-elements/types/components/tables/sortable-list/sortable-list.d.ts +5 -6
  238. package/dist-elements/types/components/tables/tree-view/tree-view.d.ts +4 -4
  239. package/dist-elements/types/core/media.d.ts +2 -2
  240. package/dist-elements/types/core/motion.d.ts +5 -0
  241. package/dist-elements/types/core/print.d.ts +15 -0
  242. package/dist-elements/types/core/shortcuts.d.ts +2 -2
  243. package/dist-elements/types/icons/icon/icon.d.ts +2 -3
  244. package/dist-elements/types/icons/register.d.ts +1 -1
  245. package/dist-elements/types/primitives/badge/badge.d.ts +9 -5
  246. package/dist-elements/types/primitives/button/button.d.ts +12 -9
  247. package/dist-elements/types/primitives/grid/grid.d.ts +3 -3
  248. package/dist-elements/types/primitives/grid-item/grid-item.d.ts +1 -1
  249. package/dist-elements/types/primitives/icon-button/icon-button.d.ts +7 -5
  250. package/dist-elements/types/primitives/index.d.ts +3 -1
  251. package/dist-elements/types/primitives/popover/popover.d.ts +5 -4
  252. package/dist-elements/types/primitives/progress-bar/progress-bar.d.ts +8 -6
  253. package/dist-elements/types/primitives/shared/announcement-block.d.ts +38 -0
  254. package/dist-elements/types/primitives/shared/empty-state-block.d.ts +26 -0
  255. package/dist-elements/types/primitives/shared/tone.d.ts +18 -0
  256. package/dist-elements/types/primitives/skeleton/skeleton.d.ts +1 -1
  257. package/dist-elements/types/primitives/spinner/spinner.d.ts +1 -2
  258. package/dist-elements/types/primitives/status-dot/status-dot.d.ts +4 -5
  259. package/dist-elements/types/primitives/tile/tile.d.ts +17 -5
  260. package/dist-elements/types/primitives/tooltip/tooltip.d.ts +6 -6
  261. package/dist-elements/types/types.d.ts +70 -10
  262. package/dist-icons/functioneel-kolommen.svg +1 -0
  263. package/dist-icons/functioneel-trechter.svg +1 -0
  264. package/package.json +1 -1
  265. package/dist-elements/chunks/confirm-dialog-D5EVGuil.js +0 -4
  266. package/dist-elements/chunks/download-y528pIHP.js +0 -230
  267. package/dist-elements/chunks/input-BtuNFSWk.js +0 -195
  268. package/dist-elements/tag/confirm-dialog.d.ts +0 -1
  269. package/dist-elements/tag/confirm-dialog.js +0 -118
  270. package/dist-elements/tag/session-expiry.d.ts +0 -1
  271. package/dist-elements/tag/session-expiry.js +0 -184
  272. package/dist-elements/tag/shortcuts.d.ts +0 -1
  273. package/dist-elements/tag/shortcuts.js +0 -104
  274. package/dist-elements/types/components/frame/session-expiry/session-expiry.d.ts +0 -55
  275. package/dist-elements/types/components/frame/shortcuts/shortcuts.d.ts +0 -41
  276. package/dist-elements/types/components/overlays/confirm-dialog/confirm-dialog.d.ts +0 -41
@@ -1,15 +1,14 @@
1
1
  /**
2
- * `<lintje-badge>` — a status as a word; two words at most (rule 13). `variant="count"` is the
3
- * quiet counter in a tab or button, `variant="unread"` the round counter of the menu.
2
+ * `<lintje-badge>` — a status as a word, two words at most; the word carries the meaning, also
3
+ * beside an `icon`.
4
4
  *
5
5
  * A root that draws a badge without the element calls `renderBadge()` and adopts `badgeStyles`,
6
6
  * as `renderIcon()` / `iconStyles` do.
7
7
  */
8
8
  import { type CSSResult, type PropertyDeclarations, type TemplateResult } from 'lit';
9
9
  import { LintjeElement } from '../../core/element.js';
10
- export type BadgeTone = 'neutral' | 'subtle' | 'busy' | 'success' | 'warning' | 'error' | 'info' | 'attention'
11
- /** A recording that runs now: the error fill with a dot before the word. */
12
- | 'live';
10
+ import type { Tone } from '../shared/tone.js';
11
+ export type BadgeTone = Tone;
13
12
  export type BadgeVariant = 'label' | 'count' | 'unread';
14
13
  export declare const badgeStyles: CSSResult;
15
14
  export interface BadgeOptions {
@@ -23,14 +22,19 @@ export interface BadgeOptions {
23
22
  muted?: boolean;
24
23
  /** BEM classes of the surrounding block, space-separated. */
25
24
  className?: string;
25
+ /** An icon file name before the word, in the word's colour; a label badge only. */
26
+ icon?: string;
26
27
  }
27
28
  export declare function renderBadge(options: BadgeOptions): TemplateResult;
28
29
  export declare class LintjeBadge extends LintjeElement {
29
30
  static styles: CSSResult[];
30
31
  static properties: PropertyDeclarations;
31
32
  tone: BadgeTone;
33
+ /** `count`: the quiet counter in a tab or button; `unread`: the round counter of the menu. */
32
34
  variant: BadgeVariant;
33
35
  label?: string;
36
+ /** An icon file name before the word. */
37
+ icon?: string;
34
38
  protected render(): TemplateResult;
35
39
  }
36
40
  declare global {
@@ -1,14 +1,9 @@
1
1
  /**
2
2
  * `<lintje-button>` — a button or, with `href`, a link with the same look.
3
3
  *
4
- * `disabled` and `busy` render `aria-disabled="true"`, never the native `disabled`: the button
5
- * stays in the tab order. A capturing `click` listener on the host swallows the activation, so
6
- * no host listener and no form sees it. `busy` keeps the variant's colours and the exact width.
7
- * A disabled or busy link renders no `href` and keeps `role="link"` and `tabindex="0"`.
8
- * `type="submit"|"reset"` acts on the nearest `<form>` itself: the inner `<button>` has no form
9
- * owner in a shadow root. ARIA on the host never reaches the inner control, so what a host needs
10
- * there (`expanded`, `pressed`, `haspopup`, `keyshortcuts`, `accessible-name`, `description`, `invalid`) is a
11
- * property; focusing the host focuses the inner control.
4
+ * `disabled` and `busy` keep it in the tab order but swallow the press: no listener on the host
5
+ * and no form sees it. ARIA on the host never reaches the inner control, so what a host needs
6
+ * there is a property; focusing the host focuses the inner control.
12
7
  */
13
8
  import { type PropertyDeclarations, type TemplateResult } from 'lit';
14
9
  import { LintjeElement } from '../../core/element.js';
@@ -26,9 +21,17 @@ export declare class LintjeButton extends LintjeElement {
26
21
  disabled: boolean;
27
22
  /** Why it is disabled, read with the button. Say it on the page as well: a mouse does not hear it. */
28
23
  reason?: string;
24
+ /** At work: `aria-disabled`, with the variant's colours and the exact width kept. */
29
25
  busy: boolean;
26
+ /**
27
+ * `submit` and `reset` act on the nearest `<form>` themselves: the inner `<button>` has no form
28
+ * owner in a shadow root.
29
+ */
30
30
  type: 'button' | 'submit' | 'reset';
31
- /** Makes the button an `<a>` with the same look; `type` is then ignored. */
31
+ /**
32
+ * Makes the button an `<a>` with the same look; `type` is then ignored. Disabled or busy, the
33
+ * link has no `href` but stays focusable, with `role="link"`.
34
+ */
32
35
  href?: string;
33
36
  /** The link's browsing context; `_blank` without a `rel` gets `noopener noreferrer`. */
34
37
  target?: string;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * `<lintje-grid>` — the 12-column grid. Its items are its own children; a tile carries `span`
3
- * itself and needs no wrapper.
4
- * Events: none.
2
+ * `<lintje-grid>` — the 12-column grid.
3
+ *
4
+ * Its items are its own children; a tile carries `span` itself and needs no wrapper.
5
5
  */
6
6
  import { type PropertyValues, type TemplateResult } from 'lit';
7
7
  import { LintjeElement } from '../../core/element.js';
@@ -1,4 +1,4 @@
1
- /** `<lintje-grid-item>` — a grid cell for non-`lintje-` content. Events: none. */
1
+ /** `<lintje-grid-item>` — a grid cell for non-`lintje-` content. */
2
2
  import { type TemplateResult } from 'lit';
3
3
  import { LintjeGridItemElement } from '../shared/grid-item-element.js';
4
4
  export declare class LintjeGridItem extends LintjeGridItemElement {
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * `<lintje-icon-button>` — a square button with one icon, or its Dutch label as text when the
3
- * icon has no file. `disabled` renders `aria-disabled="true"` and a capturing `click` listener
4
- * swallows the activation, so the button stays focusable but no host listener sees it.
5
- * `live` is for what listens or speaks now (dictating, reading aloud): the primary fill and
6
- * moving bars beside the icon; the host still sets `pressed` and the label that stops it.
3
+ * icon has no file.
4
+ *
5
+ * `disabled` keeps it focusable but swallows the press: no listener on the host sees it.
7
6
  */
8
7
  import { type TemplateResult } from 'lit';
9
8
  import { LintjeElement } from '../../core/element.js';
@@ -58,7 +57,10 @@ export declare class LintjeIconButton extends LintjeElement {
58
57
  expanded?: boolean;
59
58
  /** Extra description read after the name; a wrapping `lintje-tooltip` sets its text here. */
60
59
  description?: string;
61
- /** It listens or speaks now: the primary fill, with moving bars beside the icon. */
60
+ /**
61
+ * It listens or speaks now (dictating, reading aloud): the primary fill, with moving bars beside
62
+ * the icon. The host still sets `pressed` and the label that stops it.
63
+ */
62
64
  live: boolean;
63
65
  constructor();
64
66
  private refuseWhileDisabled;
@@ -16,6 +16,8 @@ export type { ButtonSize, ButtonVariant } from './button/button.js';
16
16
  export { LintjeIconButton } from './icon-button/icon-button.js';
17
17
  export type { IconButtonVariant } from './icon-button/icon-button.js';
18
18
  export { LintjeStatusDot, STATUS_LABEL } from './status-dot/status-dot.js';
19
+ export { TONE_ICON, TONE_WORD, WORK_STATE_LABEL, WORK_STATE_TONE } from './shared/tone.js';
20
+ export type { ContentStateKind, Tone, WorkState } from './shared/tone.js';
19
21
  export { LintjeSkeleton } from './skeleton/skeleton.js';
20
22
  export { LintjeGrid } from './grid/grid.js';
21
23
  export { LintjeGridItem } from './grid-item/grid-item.js';
@@ -26,7 +28,7 @@ export type { BadgeOptions, BadgeTone, BadgeVariant } from './badge/badge.js';
26
28
  export { LintjeSpinner } from './spinner/spinner.js';
27
29
  export type { SpinnerSize } from './spinner/spinner.js';
28
30
  export { LintjeProgressBar } from './progress-bar/progress-bar.js';
29
- export type { ProgressTone } from './progress-bar/progress-bar.js';
31
+ export type { ProgressState } from './progress-bar/progress-bar.js';
30
32
  export { LintjePopover } from './popover/popover.js';
31
33
  export { LintjeTooltip } from './tooltip/tooltip.js';
32
34
  export { place } from './shared/place.js';
@@ -1,9 +1,10 @@
1
1
  /**
2
- * `<lintje-popover>` — the floating panel: a surface fixed to the viewport under its anchor
3
- * (`.anchor`, or the previous sibling). Content and padding come through the slot.
2
+ * `<lintje-popover>` — the floating panel: a surface fixed to the viewport under its anchor.
4
3
  *
5
- * The owner holds `open`: the popover only asks to be closed. Events: `lintje-close`
6
- * `{ reason: 'escape' | 'outside' }`; a component drawing a popover in its own root stops it.
4
+ * Content and padding come through the slot. The host holds `open`: the popover only asks to be
5
+ * closed. A component that draws a popover in its own root stops its `lintje-close`.
6
+ *
7
+ * Events: `lintje-close` `{ reason: 'escape' | 'outside' }`.
7
8
  */
8
9
  import { nothing, type PropertyDeclarations, type PropertyValues, type TemplateResult } from 'lit';
9
10
  import { LintjeElement } from '../../core/element.js';
@@ -1,11 +1,13 @@
1
1
  /**
2
- * `<lintje-progress-bar>` — how far a task is. Without a `value` the duration is unknown and a
3
- * block slides along the track. The default slot takes one action right of the label line.
4
- * Done, error and paused are said in the value text and marked by a glyph before the label.
2
+ * `<lintje-progress-bar>` — how far a task is; without a `value` a block slides along the track.
3
+ *
4
+ * The default slot takes one action right of the label line. Done, error and paused are said in
5
+ * the value text and marked by a glyph.
5
6
  */
6
7
  import { type PropertyDeclarations, type TemplateResult } from 'lit';
7
8
  import { LintjeElement } from '../../core/element.js';
8
- export type ProgressTone = 'run' | 'done' | 'error' | 'paused';
9
+ import { type WorkState } from '../shared/tone.js';
10
+ export type ProgressState = Extract<WorkState, 'busy' | 'done' | 'error' | 'paused'>;
9
11
  export declare class LintjeProgressBar extends LintjeElement {
10
12
  static styles: import("lit").CSSResult[];
11
13
  static properties: PropertyDeclarations;
@@ -17,10 +19,10 @@ export declare class LintjeProgressBar extends LintjeElement {
17
19
  hideLabel: boolean;
18
20
  /** The figure on the right: "62% · nog ongeveer 3 min". */
19
21
  detail?: string;
20
- tone: ProgressTone;
22
+ state: ProgressState;
21
23
  private get known();
22
24
  private get percent();
23
- private get resolvedTone();
25
+ private get resolvedState();
24
26
  private valueText;
25
27
  protected render(): TemplateResult;
26
28
  }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * The announcement as a render function, so a tile draws its error with the same block as
3
+ * `<lintje-announcement>` draws itself. The element adds dismissal and focus; a tile adds
4
+ * nothing. A live block is drawn empty until `filled`: a region that arrives with its words is
5
+ * not announced.
6
+ */
7
+ import { nothing, type CSSResult, type TemplateResult } from 'lit';
8
+ import { type Tone } from './tone.js';
9
+ /** `outage` interrupts and cannot be closed; `error` is a failure the reader may put away. */
10
+ export type AnnouncementKind = 'warning' | 'outage' | 'error' | 'info' | 'ok';
11
+ /** A message's kind in the one tone set: a warning is drawn in the attention tone. */
12
+ export declare const ANNOUNCEMENT_TONE: Record<AnnouncementKind, Tone>;
13
+ /** Only an outage interrupts the reader; the others wait their turn. */
14
+ export declare const ANNOUNCEMENT_ROLE: Record<AnnouncementKind, 'alert' | 'status'>;
15
+ /** The word a screen reader hears before the text, since the tint says nothing to it. */
16
+ export declare const ANNOUNCEMENT_PREFIX: Record<AnnouncementKind, string>;
17
+ export declare const announcementBlockStyles: CSSResult;
18
+ export interface AnnouncementBlockOptions {
19
+ kind?: AnnouncementKind;
20
+ title?: string;
21
+ text?: string;
22
+ meta?: string;
23
+ link?: {
24
+ label: string;
25
+ href: string;
26
+ };
27
+ /** A live region: `role` from the kind, drawn empty until `filled`. */
28
+ live?: boolean;
29
+ /** Whether a live block shows its words yet; ignored when not live. */
30
+ filled?: boolean;
31
+ /** What stands under or beside the text: the element's `action` slot. */
32
+ action?: TemplateResult | typeof nothing;
33
+ /** What stands beside the body: the element's `media` slot. */
34
+ media?: TemplateResult | typeof nothing;
35
+ /** With a handler the block draws its close button. */
36
+ onClose?: () => void;
37
+ }
38
+ export declare function renderAnnouncementBlock(options: AnnouncementBlockOptions): TemplateResult;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The empty state as a render function, so a tile draws "nothing here" with the same block as
3
+ * `<lintje-empty-state>`. With `status` it is a region drawn empty until `filled`: a region that
4
+ * arrives with its words is not announced.
5
+ */
6
+ import { nothing, type CSSResult, type TemplateResult } from 'lit';
7
+ export type HeadingLevel = 2 | 3 | 4 | 5 | 6;
8
+ export declare const emptyStateBlockStyles: CSSResult;
9
+ export interface EmptyStateBlockOptions {
10
+ /** Not drawn when `compact`. */
11
+ heading?: string;
12
+ /** The one sentence below the heading, or the whole line when `compact`. */
13
+ text?: string;
14
+ /** An icon file name. Not drawn when `compact`. */
15
+ icon?: string;
16
+ level?: HeadingLevel;
17
+ /** One muted line with what follows it, for inside content. */
18
+ compact?: boolean;
19
+ /** A `role="status"` region, drawn empty until `filled`. */
20
+ status?: boolean;
21
+ filled?: boolean;
22
+ /** What the reader can do next: the element's default slot. Hidden while `actionShown` is off. */
23
+ action?: TemplateResult | typeof nothing;
24
+ actionShown?: boolean;
25
+ }
26
+ export declare function renderEmptyStateBlock(options: EmptyStateBlockOptions): TemplateResult;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The one set of tones, and the one set of work states, every element translates its own words
3
+ * into. A tone is a colour with its glyph; a state is what a task is doing. A host never maps:
4
+ * an element that speaks its own vocabulary (the table's delivery status, a message's kind)
5
+ * translates it here.
6
+ */
7
+ /** A status colour with its glyph. `subtle` and `live` are the quiet and the recording form. */
8
+ export type Tone = 'neutral' | 'subtle' | 'busy' | 'success' | 'warning' | 'error' | 'info' | 'attention' | 'live';
9
+ /** The glyph that says what the tone means; the colour is never the only carrier (rule 13). */
10
+ export declare const TONE_ICON: Partial<Record<Tone, string>>;
11
+ /** The word a tone stands for when an element has nothing more specific to say. */
12
+ export declare const TONE_WORD: Record<Tone, string>;
13
+ /** What a task is doing: the queue, a progress bar and a status word share it. */
14
+ export type WorkState = 'queued' | 'busy' | 'paused' | 'done' | 'error' | 'cancelled';
15
+ export declare const WORK_STATE_TONE: Record<WorkState, Tone>;
16
+ export declare const WORK_STATE_LABEL: Record<WorkState, string>;
17
+ /** How content stands: drawn, still coming, nothing to draw, or failed. */
18
+ export type ContentStateKind = 'ready' | 'loading' | 'empty' | 'error';
@@ -1,4 +1,4 @@
1
- /** `<lintje-skeleton>` — the shimmer that holds a box while its content loads. Events: none. */
1
+ /** `<lintje-skeleton>` — the shimmer that holds a box while its content loads. */
2
2
  import { type PropertyValues, type TemplateResult } from 'lit';
3
3
  import { LintjeElement } from '../../core/element.js';
4
4
  export declare class LintjeSkeleton extends LintjeElement {
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * `<lintje-spinner>` — the loading ring for content whose shape is not known; for a known shape
3
- * use `<lintje-skeleton>`. The label is what a screen reader hears (`role="status"`).
4
- * Events: none.
3
+ * use `<lintje-skeleton>`.
5
4
  */
6
5
  import { type PropertyDeclarations, type PropertyValues, type TemplateResult } from 'lit';
7
6
  import { LintjeElement } from '../../core/element.js';
@@ -1,9 +1,8 @@
1
- /**
2
- * `<lintje-status-dot>` — a status with its word; colour is never the only carrier (rule 13).
3
- * Events: none.
4
- */
1
+ /** `<lintje-status-dot>` — a status as a dot with its word; colour is never the only carrier. */
5
2
  import { type TemplateResult } from 'lit';
6
3
  import { LintjeElement } from '../../core/element.js';
4
+ import { type Tone } from '../shared/tone.js';
5
+ /** A source's delivery status: the element's own words, each a tone. */
7
6
  export type StatusTone = 'complete' | 'delayed' | 'outage' | 'no-data';
8
7
  export declare const STATUS_LABEL: Record<StatusTone, string>;
9
8
  export declare class LintjeStatusDot extends LintjeElement {
@@ -20,7 +19,7 @@ export declare class LintjeStatusDot extends LintjeElement {
20
19
  type: NumberConstructor;
21
20
  };
22
21
  };
23
- tone: StatusTone;
22
+ tone: Tone | StatusTone;
24
23
  /** Overrides the Dutch word for the tone. */
25
24
  label?: string;
26
25
  size: number;
@@ -1,9 +1,12 @@
1
1
  /**
2
- * `<lintje-tile>` — the frame around a chart, map or table. Top to bottom: header, notice, intro,
3
- * legend, content, legend (`legend-below`), footnote. `slot="aside"` puts a key figure beside the
4
- * content, above it below 768 px. Hover actions show on focus too, always on touch screens.
2
+ * `<lintje-tile>` — the frame around a chart, map or table.
5
3
  *
6
- * Events: `lintje-tile-expand` and `lintje-tile-download`; the host acts on them.
4
+ * Top to bottom: header, notice, intro, legend, content, legend (`legend-below`), footnote.
5
+ * `slot="aside"` puts a key figure beside the content, above it below 768 px. Hover actions show
6
+ * on focus too, and always on touch screens. The tile expands and downloads nothing itself: the
7
+ * host answers its events.
8
+ *
9
+ * Events: `lintje-tile-expand`, `lintje-tile-download`.
7
10
  */
8
11
  import { type PropertyValues, type TemplateResult } from 'lit';
9
12
  import { LintjeGridItemElement } from '../shared/grid-item-element.js';
@@ -11,7 +14,9 @@ import '../button/button.js';
11
14
  import '../icon-button/icon-button.js';
12
15
  import '../status-dot/status-dot.js';
13
16
  import '../skeleton/skeleton.js';
14
- export type ContentState = 'ready' | 'loading' | 'empty' | 'error';
17
+ import type { ContentStateKind } from '../shared/tone.js';
18
+ /** The same four as `ContentState` in the contract. */
19
+ export type ContentState = ContentStateKind;
15
20
  export declare class LintjeTile extends LintjeGridItemElement {
16
21
  #private;
17
22
  static styles: import("lit").CSSResult[];
@@ -70,6 +75,10 @@ export declare class LintjeTile extends LintjeGridItemElement {
70
75
  flush: {
71
76
  type: BooleanConstructor;
72
77
  };
78
+ breakable: {
79
+ type: BooleanConstructor;
80
+ reflect: boolean;
81
+ };
73
82
  filled: {
74
83
  state: boolean;
75
84
  };
@@ -97,6 +106,9 @@ export declare class LintjeTile extends LintjeGridItemElement {
97
106
  /** The content runs to the tile's edges and indents what it draws by the tile's padding: rows
98
107
  * whose lines reach the frame, as a work list's. */
99
108
  flush: boolean;
109
+ /** On paper the tile may break between two sheets, as a long table does; otherwise it moves to
110
+ * the next sheet whole where it fits. */
111
+ breakable: boolean;
100
112
  /** The words in the loading or error live region, or `null`; filled a frame after the region
101
113
  * is drawn, because a region that arrives with its text is not announced. */
102
114
  protected filled: string | null;
@@ -1,9 +1,9 @@
1
1
  /**
2
- * `<lintje-tooltip>` — one short sentence about the element it wraps. Shows 300 ms after the
3
- * pointer rests, at once on keyboard focus; the pointer can move onto it, and Escape anywhere
4
- * hides it. Never the only place for something
5
- * the reader must know. The text is the wrapped element's description; `no-describe` leaves
6
- * that out when it is already its name.
2
+ * `<lintje-tooltip>` — one short sentence about the element it wraps.
3
+ *
4
+ * It shows 300 ms after the pointer rests and at once on keyboard focus; Escape anywhere hides it.
5
+ * Never the only place for something the reader must know. The text becomes the wrapped element's
6
+ * description.
7
7
  */
8
8
  import { type PropertyDeclarations, type PropertyValues, type TemplateResult } from 'lit';
9
9
  import { LintjeElement } from '../../core/element.js';
@@ -16,7 +16,7 @@ export declare class LintjeTooltip extends LintjeElement {
16
16
  static styles: import("lit").CSSResult;
17
17
  static properties: PropertyDeclarations;
18
18
  text: string;
19
- /** The text is already the element's accessible name. */
19
+ /** The text is already the element's accessible name: it is not given as its description too. */
20
20
  noDescribe: boolean;
21
21
  /** Above the element, or `left` of it, level with it: for a column of buttons along an edge. */
22
22
  placement: 'top' | 'left';
@@ -5,30 +5,36 @@
5
5
  * names come from their one list, `tokens/colors.ts`.
6
6
  */
7
7
  import type { DataColor } from './tokens/colors.js';
8
+ import type { ContentStateKind, Tone } from './primitives/shared/tone.js';
9
+ import type { StatusTone } from './primitives/status-dot/status-dot.js';
10
+ import type { AnnouncementKind } from './primitives/shared/announcement-block.js';
8
11
  import type { ChartSpec, MapSpec } from './components/shared/charts/shared/types.js';
9
12
  import type { MenuEntry } from './components/actions/menu-button/menu-button.js';
10
13
  import type { NotificationItem } from './components/frame/notifications/notifications.js';
11
- export type { BarSeriesData, ChartColor, ChartKind, ChartSpec, LineSeriesData, MapSpec, MapValue, MapPlotData, MapPlotVariant, MapVariant, ScatterPoint, ScatterSeriesData, WmsBasemap, MapArea, MapControls, } from './components/shared/charts/shared/types.js';
14
+ export type { BarSeriesData, ChartColor, ChartEvent, ChartKind, ChartSpec, LineSeriesData, MapSpec, MapValue, MapPlotData, MapPlotVariant, MapVariant, ScatterPoint, ScatterSeriesData, WmsBasemap, MapArea, MapControls, } from './components/shared/charts/shared/types.js';
12
15
  export type { DataColor } from './tokens/colors.js';
16
+ export type { Tone, WorkState, ContentStateKind } from './primitives/shared/tone.js';
13
17
  /** Settings every view receives, taken from the URL by the host. */
14
18
  export interface FrameSettings {
15
19
  mode?: 'light' | 'dark';
16
20
  }
17
21
  export interface ContentState {
18
- state?: 'ready' | 'loading' | 'empty' | 'error';
22
+ state?: ContentStateKind;
19
23
  /** Empty: why there is nothing, and the way out. Error: what failed. */
20
24
  message?: string;
21
25
  /** Error: the last known value, shown in the warning. */
22
26
  lastKnown?: string;
23
27
  }
24
- export type StatusTone = 'complete' | 'delayed' | 'outage' | 'no-data';
28
+ /** A source's delivery status: the status column's and `lintje-status-dot`'s own words, each a `Tone`. */
29
+ export type { StatusTone } from './primitives/status-dot/status-dot.js';
25
30
  export type TrendDirection = 'up' | 'down' | 'flat';
26
31
  /**
27
32
  * One colour per variable, named after the Rijkshuisstijl colour it is: a `DataColor`, the
28
33
  * names of `tokens/colors.ts`. `coverage` is a role, not a variable: gray.
29
34
  */
30
35
  export type KpiVariable = DataColor | 'coverage';
31
- export type KpiState = 'ready' | 'loading' | 'empty' | 'error';
36
+ /** The same four as every tile's `ContentState`. */
37
+ export type KpiState = ContentStateKind;
32
38
  export interface KpiItem {
33
39
  /** A string or number with one number in it; counts up like `value`. */
34
40
  value: string | number;
@@ -67,7 +73,8 @@ export interface KpiGauge {
67
73
  /** The word before the target's number: "doel" (default) or "norm". */
68
74
  targetLabel?: string;
69
75
  }
70
- export interface KpiData {
76
+ /** `message` is the empty or error line under the figure, `lastKnown` the figure it had. */
77
+ export interface KpiData extends ContentState {
71
78
  label: string;
72
79
  /** An icon file name (`dist-icons/`, without `.svg`). Decorative. */
73
80
  icon?: string;
@@ -84,7 +91,6 @@ export interface KpiData {
84
91
  /** A single figure on its scale; ignored with `items`. */
85
92
  gauge?: KpiGauge;
86
93
  variable?: KpiVariable;
87
- state?: KpiState;
88
94
  }
89
95
  /** Events: none. */
90
96
  export interface KpiRowData extends FrameSettings {
@@ -155,8 +161,9 @@ export interface TableColumnData {
155
161
  * `change-compact`: only the ▲ ▼ ● of `change`; a screen reader hears the whole change, and
156
162
  * below 768 px the row's measure shows it whole.
157
163
  * `status`: a `StatusTone` (or mapped through `status.tones`) as the status dot with its label.
164
+ * `label`: the value as a badge with the word, tone and icon from `labels`.
158
165
  */
159
- format?: 'text' | 'number' | 'percent' | 'decimal' | 'change' | 'change-compact' | 'status';
166
+ format?: 'text' | 'number' | 'percent' | 'decimal' | 'change' | 'change-compact' | 'status' | 'label';
160
167
  decimals?: number;
161
168
  /** Suffix after the value, e.g. "min". */
162
169
  unit?: string;
@@ -172,6 +179,11 @@ export interface TableColumnData {
172
179
  tones?: Record<string, StatusTone>;
173
180
  labels?: Record<string, string>;
174
181
  };
182
+ /**
183
+ * `label` format: value → the word, the badge's tone and an icon file name before the word. A
184
+ * value without an entry stands as plain text. Sorting and the CSV use the word.
185
+ */
186
+ labels?: Record<string, TableLabel>;
175
187
  /** Shown muted instead of an exact 0, where 0 means "none" (e.g. "—"). Missing stays `null`. */
176
188
  zeroText?: string;
177
189
  mobileSubline?: boolean;
@@ -271,13 +283,58 @@ export interface DataTableData extends FrameSettings, TileData, ContentState {
271
283
  filters?: Record<string, string[] | string>;
272
284
  /** The number of rows before filtering: "14 van 131 rijen" while a filter is active. */
273
285
  totalRows?: number;
274
- /** A "Kolommen kiezen" button in the head of the actions column, to order and hide columns
275
- * (`lintje-columns-change`). Without row actions it adds that column. */
286
+ /**
287
+ * "Kolommen kiezen", a quiet icon in the head of the last column, to order and hide columns
288
+ * (`lintje-columns-change`). Without row actions it adds that column.
289
+ */
276
290
  columnChooser?: boolean;
277
291
  /** The keys of the columns not shown. The first column is always shown. */
278
292
  hiddenColumns?: string[];
293
+ /**
294
+ * The totals row under the rows, as the host computed it over every filtered row: the table
295
+ * never computes. A column without an entry stays empty.
296
+ */
297
+ totals?: Record<string, TableTotal>;
298
+ /** The first cell of the totals row; default "Totaal". */
299
+ totalsLabel?: string;
300
+ /**
301
+ * Fields shown under a row that opens, after the columns the chooser hides. With them, or with a
302
+ * hidden column, every row gets a button that opens its detail.
303
+ */
304
+ detailFields?: TableDetailField[];
305
+ /**
306
+ * Groups the rows on this column's value, in the order the groups first occur in `rows`. Rows
307
+ * sort within their group, a page holds whole groups, and the column itself is not shown.
308
+ */
309
+ groupBy?: string;
310
+ /** Per group value: its subtotal row, as the host computed it. */
311
+ groupTotals?: Record<string, Record<string, TableTotal>>;
312
+ /** With `groupBy`: groups per page, default 5; `pageSize` does not apply. */
313
+ groupsPerPage?: number;
314
+ }
315
+ /** A badge in a `label` column. */
316
+ export interface TableLabel {
317
+ label: string;
318
+ /** One of the shared tones, as `lintje-badge` draws it; default `neutral`. */
319
+ tone?: Tone;
320
+ /** An icon file name, drawn before the word. */
321
+ icon?: string;
279
322
  }
280
- export type AnnouncementKind = 'warning' | 'outage' | 'info' | 'ok';
323
+ /** A total: a value, or a value with the word that says how it was made ("gem."). */
324
+ export type TableTotal = CellValue | {
325
+ value: CellValue;
326
+ how?: string;
327
+ };
328
+ /** A field in a row's detail: a key of the row, with its label and how its value shows. */
329
+ export interface TableDetailField {
330
+ key: string;
331
+ label: string;
332
+ format?: TableColumnData['format'];
333
+ decimals?: number;
334
+ unit?: string;
335
+ }
336
+ /** `outage` interrupts and cannot be closed; `error` is a failure the reader may put away. */
337
+ export type { AnnouncementKind } from './primitives/shared/announcement-block.js';
281
338
  export interface AnnouncementData {
282
339
  kind?: AnnouncementKind;
283
340
  title?: string;
@@ -344,6 +401,8 @@ export interface FilterOption {
344
401
  * `lintje-segmented` the chosen option's, in a box under the options.
345
402
  */
346
403
  description?: string;
404
+ /** The number of items with this value, as a count badge after the label where the control draws one (`lintje-segmented`). */
405
+ count?: number;
347
406
  }
348
407
  /** The control a declaration draws in. `range` has two handles, `slider` one. */
349
408
  export type FilterKind = 'select' | 'segmented' | 'multiselect' | 'date-range' | 'range' | 'slider' | 'toggle' | 'text' | 'number';
@@ -628,6 +687,7 @@ export interface ChatData extends FrameSettings {
628
687
  }
629
688
  export type { FormValues, FormErrors, StoredDraft } from './components/forms/form/form.js';
630
689
  export type { ErrorSummaryItem } from './components/forms/error-summary/error-summary.js';
690
+ export type { ErrorPageLink } from './components/feedback/error-page/error-page.js';
631
691
  export type { UploadFile } from './components/inputs/file-upload/file-upload.js';
632
692
  export type { DateRange } from './components/inputs/date-range/date-range.js';
633
693
  export type { SlotDay, TimeSlot } from './components/inputs/slot-picker/slot-picker.js';
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M3.9 4h3a.9.9 0 0 1 .9.9v14.2a.9.9 0 0 1-.9.9h-3a.9.9 0 0 1-.9-.9V4.9a.9.9 0 0 1 .9-.9Zm.7 1.6v12.8h1.6V5.6ZM10.5 4h3a.9.9 0 0 1 .9.9v14.2a.9.9 0 0 1-.9.9h-3a.9.9 0 0 1-.9-.9V4.9a.9.9 0 0 1 .9-.9Zm.7 1.6v12.8h1.6V5.6ZM17.1 4h3a.9.9 0 0 1 .9.9v14.2a.9.9 0 0 1-.9.9h-3a.9.9 0 0 1-.9-.9V4.9a.9.9 0 0 1 .9-.9Zm.7 1.6v12.8h1.6V5.6Z" fill-rule="evenodd"/></svg>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M3.6 4h16.8a.9.9 0 0 1 .7 1.47l-6.5 7.83v5.6a.9.9 0 0 1-.5.8l-3 1.5a.9.9 0 0 1-1.3-.8v-7.1L2.9 5.47A.9.9 0 0 1 3.6 4Zm1.9 1.8 5.6 6.7a.9.9 0 0 1 .2.58v6.04l1.5-.75v-5.29a.9.9 0 0 1 .2-.58l5.6-6.7Z" fill-rule="evenodd"/></svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lintje",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "Lintje: the Rijkshuisstijl design system as Lit web components",
6
6
  "license": "EUPL-1.2",
@@ -1,4 +0,0 @@
1
- //#region src/components/overlays/confirm-dialog/confirm-dialog.css?inline
2
- var e = ":host { display: contents; }\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-confirm-dialog__scrim {\n position: fixed;\n z-index: 80;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--space-6);\n background: var(--color-overlay-page);\n animation: lintje-fade-in var(--dur-scrim) var(--ease-in-motion);\n}\n\n.lintje-confirm-dialog {\n width: min(440px, 100%);\n max-height: 100%;\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n padding: var(--space-6);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n border: 1px solid var(--color-border-strong);\n border-radius: var(--radius);\n box-shadow: var(--shadow-popover);\n animation: lintje-rise var(--dur-modal) var(--ease-in-motion);\n}\n/* The window takes focus only when the trap pulls stray focus back; it draws no ring. */\n.lintje-confirm-dialog:focus { outline: none; }\n.lintje-confirm-dialog__heading { font: var(--text-h2); }\n.lintje-confirm-dialog__text { font: var(--text-body); }\n\n.lintje-confirm-dialog__actions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--space-2);\n margin-top: var(--space-3);\n}\n\n/* Phone: the buttons stack, the confirm on top and the safe one at the bottom. */\n@media (max-width: 767px) {\n .lintje-confirm-dialog__scrim { padding: var(--space-4); }\n .lintje-confirm-dialog { width: 100%; }\n .lintje-confirm-dialog__actions { flex-direction: column; }\n .lintje-confirm-dialog__confirm { order: 1; }\n .lintje-confirm-dialog__action { order: 2; }\n .lintje-confirm-dialog__cancel { order: 3; }\n}\n";
3
- //#endregion
4
- export { e as t };