@nldd/design-system 0.8.95 → 0.8.97

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 (468) hide show
  1. package/README.md +20 -19
  2. package/custom-elements.json +781 -379
  3. package/dist/assets/styles/shadow-resets.d.ts +1 -1
  4. package/dist/assets/styles/shadow-resets.js +1 -1
  5. package/dist/components/actions/button/button.js +3 -3
  6. package/dist/components/actions/button/button.js.map +1 -1
  7. package/dist/components/actions/button/button.styles.js +273 -273
  8. package/dist/components/actions/button-bar/button-bar.styles.js +34 -34
  9. package/dist/components/actions/button-group/button-group.styles.js +11 -11
  10. package/dist/components/actions/icon-button/icon-button.js +3 -3
  11. package/dist/components/actions/icon-button/icon-button.js.map +1 -1
  12. package/dist/components/actions/icon-button/icon-button.styles.js +203 -203
  13. package/dist/components/actions/menu/menu.d.ts +3 -3
  14. package/dist/components/actions/menu/menu.js +15 -15
  15. package/dist/components/actions/menu/menu.js.map +1 -1
  16. package/dist/components/actions/menu/menu.styles.d.ts.map +1 -1
  17. package/dist/components/actions/menu/menu.styles.js +46 -41
  18. package/dist/components/actions/menu/menu.styles.js.map +1 -1
  19. package/dist/components/actions/split-button/split-button.js +3 -3
  20. package/dist/components/actions/split-button/split-button.js.map +1 -1
  21. package/dist/components/actions/split-button/split-button.styles.js +30 -30
  22. package/dist/components/actions/toolbar/toolbar.d.ts +5 -0
  23. package/dist/components/actions/toolbar/toolbar.d.ts.map +1 -1
  24. package/dist/components/actions/toolbar/toolbar.js +28 -18
  25. package/dist/components/actions/toolbar/toolbar.js.map +1 -1
  26. package/dist/components/actions/toolbar/toolbar.styles.js +55 -55
  27. package/dist/components/components.js +4682 -4158
  28. package/dist/components/content/avatar/avatar.d.ts +1 -1
  29. package/dist/components/content/avatar/avatar.js +3 -3
  30. package/dist/components/content/avatar/avatar.js.map +1 -1
  31. package/dist/components/content/avatar/avatar.styles.js +39 -39
  32. package/dist/components/content/avatar-group/avatar-group.styles.js +36 -36
  33. package/dist/components/content/blockquote/blockquote.styles.js +14 -14
  34. package/dist/components/content/code-viewer/code-viewer.js +1 -1
  35. package/dist/components/content/code-viewer/code-viewer.styles.js +36 -36
  36. package/dist/components/content/icon/icon-aliases.d.ts.map +1 -1
  37. package/dist/components/content/icon/icon-aliases.js +17 -1
  38. package/dist/components/content/icon/icon-aliases.js.map +1 -1
  39. package/dist/components/content/icon/icon-gallery-status.d.ts.map +1 -1
  40. package/dist/components/content/icon/icon-gallery-status.js +25 -42
  41. package/dist/components/content/icon/icon-gallery-status.js.map +1 -1
  42. package/dist/components/content/icon/icon-registry.d.ts.map +1 -1
  43. package/dist/components/content/icon/icon-registry.js +24 -12
  44. package/dist/components/content/icon/icon-registry.js.map +1 -1
  45. package/dist/components/content/icon/icon.js +2 -2
  46. package/dist/components/content/icon/icon.js.map +1 -1
  47. package/dist/components/content/icon/icon.styles.js +48 -48
  48. package/dist/components/content/identity/identity.styles.js +17 -17
  49. package/dist/components/content/image/image.d.ts +19 -3
  50. package/dist/components/content/image/image.d.ts.map +1 -1
  51. package/dist/components/content/image/image.js +28 -7
  52. package/dist/components/content/image/image.js.map +1 -1
  53. package/dist/components/content/image/image.styles.d.ts.map +1 -1
  54. package/dist/components/content/image/image.styles.js +189 -153
  55. package/dist/components/content/image/image.styles.js.map +1 -1
  56. package/dist/components/content/image/image.template.d.ts.map +1 -1
  57. package/dist/components/content/image/image.template.js +13 -1
  58. package/dist/components/content/image/image.template.js.map +1 -1
  59. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.styles.d.ts.map +1 -1
  60. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.styles.js +42 -40
  61. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.styles.js.map +1 -1
  62. package/dist/components/content/rich-text/rich-text.d.ts +25 -12
  63. package/dist/components/content/rich-text/rich-text.d.ts.map +1 -1
  64. package/dist/components/content/rich-text/rich-text.js +25 -12
  65. package/dist/components/content/rich-text/rich-text.js.map +1 -1
  66. package/dist/components/content/tag/tag.styles.js +95 -95
  67. package/dist/components/content/text/text.styles.js +23 -23
  68. package/dist/components/content/title/title.styles.js +38 -38
  69. package/dist/components/content/token/token.styles.js +4 -4
  70. package/dist/components/content/tooltip/tooltip.js +5 -5
  71. package/dist/components/content/tooltip/tooltip.js.map +1 -1
  72. package/dist/components/content/tooltip/tooltip.styles.d.ts.map +1 -1
  73. package/dist/components/content/tooltip/tooltip.styles.js +21 -18
  74. package/dist/components/content/tooltip/tooltip.styles.js.map +1 -1
  75. package/dist/components/forms/form-field/form-field.styles.js +5 -5
  76. package/dist/components/forms/validation-list/validation-list.styles.js +7 -7
  77. package/dist/components/{icon-Typdp4av.js → icon-D_ZGezHx.js} +83 -63
  78. package/dist/components/{icon-button-9mo3oIyL.js → icon-button-NN0SrgS3.js} +278 -275
  79. package/dist/components/index.d.ts +3 -3
  80. package/dist/components/index.d.ts.map +1 -1
  81. package/dist/components/index.js +3 -3
  82. package/dist/components/index.js.map +1 -1
  83. package/dist/components/inputs/checkbox/checkbox.styles.d.ts.map +1 -1
  84. package/dist/components/inputs/checkbox/checkbox.styles.js +31 -16
  85. package/dist/components/inputs/checkbox/checkbox.styles.js.map +1 -1
  86. package/dist/components/inputs/code-editor/code-editor.js +2 -2
  87. package/dist/components/inputs/code-editor/code-editor.js.map +1 -1
  88. package/dist/components/inputs/code-editor/code-editor.styles.js +30 -30
  89. package/dist/components/inputs/combo-box/combo-box.js +2 -2
  90. package/dist/components/inputs/combo-box/combo-box.js.map +1 -1
  91. package/dist/components/inputs/combo-box/combo-box.styles.js +30 -30
  92. package/dist/components/inputs/date-field/date-field.js +4 -4
  93. package/dist/components/inputs/date-field/date-field.js.map +1 -1
  94. package/dist/components/inputs/date-field/date-field.styles.js +46 -46
  95. package/dist/components/inputs/date-picker/date-picker.js +3 -3
  96. package/dist/components/inputs/date-picker/date-picker.js.map +1 -1
  97. package/dist/components/inputs/date-picker/date-picker.styles.js +65 -65
  98. package/dist/components/inputs/dropdown/dropdown.js +2 -2
  99. package/dist/components/inputs/dropdown/dropdown.js.map +1 -1
  100. package/dist/components/inputs/dropdown/dropdown.styles.js +66 -66
  101. package/dist/components/inputs/file-field/file-field.styles.d.ts.map +1 -1
  102. package/dist/components/inputs/file-field/file-field.styles.js +33 -30
  103. package/dist/components/inputs/file-field/file-field.styles.js.map +1 -1
  104. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.js +3 -3
  105. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.js.map +1 -1
  106. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.styles.js +30 -30
  107. package/dist/components/inputs/number-field/number-field.js +3 -3
  108. package/dist/components/inputs/number-field/number-field.js.map +1 -1
  109. package/dist/components/inputs/number-field/number-field.styles.js +18 -18
  110. package/dist/components/inputs/password-field/password-field.js +2 -2
  111. package/dist/components/inputs/password-field/password-field.js.map +1 -1
  112. package/dist/components/inputs/password-field/password-field.styles.js +37 -37
  113. package/dist/components/inputs/radio-button/radio-button.styles.d.ts.map +1 -1
  114. package/dist/components/inputs/radio-button/radio-button.styles.js +29 -13
  115. package/dist/components/inputs/radio-button/radio-button.styles.js.map +1 -1
  116. package/dist/components/inputs/search-field/search-field.js +2 -2
  117. package/dist/components/inputs/search-field/search-field.js.map +1 -1
  118. package/dist/components/inputs/search-field/search-field.styles.js +30 -30
  119. package/dist/components/inputs/segmented-control/segmented-control.js +4 -4
  120. package/dist/components/inputs/segmented-control/segmented-control.js.map +1 -1
  121. package/dist/components/inputs/segmented-control/segmented-control.styles.js +108 -108
  122. package/dist/components/inputs/stepper/stepper.styles.js +10 -10
  123. package/dist/components/inputs/switch/switch.styles.d.ts.map +1 -1
  124. package/dist/components/inputs/switch/switch.styles.js +39 -31
  125. package/dist/components/inputs/switch/switch.styles.js.map +1 -1
  126. package/dist/components/inputs/text-editor/text-editor.js +2 -2
  127. package/dist/components/inputs/text-editor/text-editor.js.map +1 -1
  128. package/dist/components/inputs/text-editor/text-editor.markdown.js +2 -2
  129. package/dist/components/inputs/text-editor/text-editor.markdown.js.map +1 -1
  130. package/dist/components/inputs/text-editor/text-editor.mentions.js +7 -7
  131. package/dist/components/inputs/text-editor/text-editor.mentions.js.map +1 -1
  132. package/dist/components/inputs/text-editor/text-editor.styles.js +138 -138
  133. package/dist/components/inputs/text-field/text-field.js +2 -2
  134. package/dist/components/inputs/text-field/text-field.js.map +1 -1
  135. package/dist/components/inputs/text-field/text-field.styles.js +27 -27
  136. package/dist/components/inputs/time-field/time-field.js +4 -4
  137. package/dist/components/inputs/time-field/time-field.js.map +1 -1
  138. package/dist/components/inputs/time-field/time-field.styles.js +40 -40
  139. package/dist/components/inputs/time-picker/time-picker.js +4 -4
  140. package/dist/components/inputs/time-picker/time-picker.js.map +1 -1
  141. package/dist/components/inputs/time-picker/time-picker.styles.js +30 -30
  142. package/dist/components/inputs/toggle-button/toggle-button.d.ts +1 -1
  143. package/dist/components/inputs/toggle-button/toggle-button.js +1 -1
  144. package/dist/components/inputs/toggle-button/toggle-button.styles.js +145 -145
  145. package/dist/components/inputs/toggle-button-group/toggle-button-group.styles.d.ts.map +1 -1
  146. package/dist/components/inputs/toggle-button-group/toggle-button-group.styles.js +7 -3
  147. package/dist/components/inputs/toggle-button-group/toggle-button-group.styles.js.map +1 -1
  148. package/dist/components/inputs/token-field/token-field.styles.js +28 -28
  149. package/dist/components/layout/box/box.d.ts +1 -1
  150. package/dist/components/layout/box/box.js +1 -1
  151. package/dist/components/layout/box/box.styles.js +13 -13
  152. package/dist/components/layout/card/card.styles.d.ts.map +1 -1
  153. package/dist/components/layout/card/card.styles.js +24 -21
  154. package/dist/components/layout/card/card.styles.js.map +1 -1
  155. package/dist/components/layout/collection/collection.js +6 -6
  156. package/dist/components/layout/collection/collection.js.map +1 -1
  157. package/dist/components/layout/collection/collection.styles.js +19 -19
  158. package/dist/components/layout/container/container.d.ts +2 -2
  159. package/dist/components/layout/container/container.d.ts.map +1 -1
  160. package/dist/components/layout/container/container.js +32 -31
  161. package/dist/components/layout/container/container.js.map +1 -1
  162. package/dist/components/layout/container/container.styles.js +125 -125
  163. package/dist/components/layout/page/page.d.ts +9 -3
  164. package/dist/components/layout/page/page.d.ts.map +1 -1
  165. package/dist/components/layout/page/page.js +41 -18
  166. package/dist/components/layout/page/page.js.map +1 -1
  167. package/dist/components/layout/page/page.styles.js +21 -21
  168. package/dist/components/layout/page-footer/page-footer.js +4 -4
  169. package/dist/components/layout/page-footer/page-footer.js.map +1 -1
  170. package/dist/components/layout/page-footer/page-footer.styles.d.ts.map +1 -1
  171. package/dist/components/layout/page-footer/page-footer.styles.js +26 -26
  172. package/dist/components/layout/page-footer/page-footer.styles.js.map +1 -1
  173. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.d.ts +2 -0
  174. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.d.ts.map +1 -1
  175. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.js +6 -4
  176. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.js.map +1 -1
  177. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.styles.d.ts.map +1 -1
  178. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.styles.js +22 -17
  179. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.styles.js.map +1 -1
  180. package/dist/components/layout/page-sections/hero/hero.d.ts +57 -11
  181. package/dist/components/layout/page-sections/hero/hero.d.ts.map +1 -1
  182. package/dist/components/layout/page-sections/hero/hero.js +164 -21
  183. package/dist/components/layout/page-sections/hero/hero.js.map +1 -1
  184. package/dist/components/layout/page-sections/hero/hero.styles.d.ts.map +1 -1
  185. package/dist/components/layout/page-sections/hero/hero.styles.js +159 -105
  186. package/dist/components/layout/page-sections/hero/hero.styles.js.map +1 -1
  187. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.d.ts +4 -0
  188. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.d.ts.map +1 -1
  189. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.js +11 -4
  190. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.js.map +1 -1
  191. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.styles.d.ts.map +1 -1
  192. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.styles.js +30 -17
  193. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.styles.js.map +1 -1
  194. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.d.ts +4 -0
  195. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.d.ts.map +1 -1
  196. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.js +11 -4
  197. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.js.map +1 -1
  198. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.styles.d.ts.map +1 -1
  199. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.styles.js +34 -17
  200. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.styles.js.map +1 -1
  201. package/dist/components/layout/page-sections/page-section-controls.d.ts +11 -1
  202. package/dist/components/layout/page-sections/page-section-controls.d.ts.map +1 -1
  203. package/dist/components/layout/page-sections/page-section-controls.js +11 -2
  204. package/dist/components/layout/page-sections/page-section-controls.js.map +1 -1
  205. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.d.ts +5 -1
  206. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.d.ts.map +1 -1
  207. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.js +11 -7
  208. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.js.map +1 -1
  209. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.styles.d.ts.map +1 -1
  210. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.styles.js +37 -34
  211. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.styles.js.map +1 -1
  212. package/dist/components/layout/page-sections/simple-section/simple-section.d.ts +2 -0
  213. package/dist/components/layout/page-sections/simple-section/simple-section.d.ts.map +1 -1
  214. package/dist/components/layout/page-sections/simple-section/simple-section.js +6 -5
  215. package/dist/components/layout/page-sections/simple-section/simple-section.js.map +1 -1
  216. package/dist/components/layout/page-sections/simple-section/simple-section.styles.js +19 -19
  217. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.d.ts +4 -0
  218. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.d.ts.map +1 -1
  219. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.js +11 -4
  220. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.js.map +1 -1
  221. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.styles.d.ts.map +1 -1
  222. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.styles.js +34 -17
  223. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.styles.js.map +1 -1
  224. package/dist/components/layout/popover/popover.d.ts +1 -1
  225. package/dist/components/layout/popover/popover.js +5 -5
  226. package/dist/components/layout/popover/popover.js.map +1 -1
  227. package/dist/components/layout/popover/popover.styles.d.ts.map +1 -1
  228. package/dist/components/layout/popover/popover.styles.js +4 -3
  229. package/dist/components/layout/popover/popover.styles.js.map +1 -1
  230. package/dist/components/layout/sheet/sheet.js +5 -5
  231. package/dist/components/layout/sheet/sheet.js.map +1 -1
  232. package/dist/components/layout/sheet/sheet.styles.js +8 -8
  233. package/dist/components/layout/{app-view/app-view.d.ts → shell/shell.d.ts} +11 -11
  234. package/dist/components/layout/shell/shell.d.ts.map +1 -0
  235. package/dist/components/layout/{app-view/app-view.js → shell/shell.js} +24 -24
  236. package/dist/components/layout/shell/shell.js.map +1 -0
  237. package/dist/components/layout/shell/shell.styles.d.ts +2 -0
  238. package/dist/components/layout/shell/shell.styles.d.ts.map +1 -0
  239. package/dist/components/layout/{app-view/app-view.styles.js → shell/shell.styles.js} +8 -8
  240. package/dist/components/layout/shell/shell.styles.js.map +1 -0
  241. package/dist/components/layout/shell/shell.template.d.ts +4 -0
  242. package/dist/components/layout/shell/shell.template.d.ts.map +1 -0
  243. package/dist/components/layout/shell/shell.template.js +9 -0
  244. package/dist/components/layout/shell/shell.template.js.map +1 -0
  245. package/dist/components/layout/spacer/spacer.styles.js +76 -76
  246. package/dist/components/layout/split-views/bar-split-view/bar-split-view.js +1 -1
  247. package/dist/components/layout/split-views/bar-split-view/bar-split-view.js.map +1 -1
  248. package/dist/components/layout/split-views/bar-split-view/bar-split-view.styles.js +5 -5
  249. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.d.ts +1 -1
  250. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.js +5 -5
  251. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.js.map +1 -1
  252. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.styles.js +12 -12
  253. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.d.ts +1 -1
  254. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.js +2 -2
  255. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.js.map +1 -1
  256. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.styles.js +6 -6
  257. package/dist/components/layout/split-views/split-view-divider/split-view-divider.styles.js +4 -4
  258. package/dist/components/layout/split-views/split-view-pane/split-view-pane.styles.js +4 -4
  259. package/dist/components/layout/split-views/stacked-split-view/stacked-split-view.js +1 -1
  260. package/dist/components/layout/split-views/stacked-split-view/stacked-split-view.js.map +1 -1
  261. package/dist/components/layout/split-views/stacked-split-view/stacked-split-view.styles.js +6 -6
  262. package/dist/components/layout/window/window.d.ts +1 -1
  263. package/dist/components/layout/window/window.js +1 -1
  264. package/dist/components/layout/window/window.styles.d.ts.map +1 -1
  265. package/dist/components/layout/window/window.styles.js +3 -1
  266. package/dist/components/layout/window/window.styles.js.map +1 -1
  267. package/dist/components/lists-and-tables/cells/cell/cell.js +8 -8
  268. package/dist/components/lists-and-tables/cells/cell/cell.js.map +1 -1
  269. package/dist/components/lists-and-tables/cells/cell/cell.styles.js +9 -9
  270. package/dist/components/lists-and-tables/cells/description-cell/description-cell.js +8 -8
  271. package/dist/components/lists-and-tables/cells/description-cell/description-cell.js.map +1 -1
  272. package/dist/components/lists-and-tables/cells/description-cell/description-cell.styles.js +10 -10
  273. package/dist/components/lists-and-tables/cells/drag-handle-cell/drag-handle-cell.styles.js +9 -9
  274. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.styles.js +14 -14
  275. package/dist/components/lists-and-tables/cells/spacer-cell/spacer-cell.styles.js +20 -20
  276. package/dist/components/lists-and-tables/cells/{timeline-track-cell/timeline-track-cell.d.ts → step-cell/step-cell.d.ts} +18 -17
  277. package/dist/components/lists-and-tables/cells/step-cell/step-cell.d.ts.map +1 -0
  278. package/dist/components/lists-and-tables/cells/{timeline-track-cell/timeline-track-cell.js → step-cell/step-cell.js} +33 -32
  279. package/dist/components/lists-and-tables/cells/step-cell/step-cell.js.map +1 -0
  280. package/dist/components/lists-and-tables/cells/step-cell/step-cell.styles.d.ts +2 -0
  281. package/dist/components/lists-and-tables/cells/step-cell/step-cell.styles.d.ts.map +1 -0
  282. package/dist/components/lists-and-tables/cells/step-cell/step-cell.styles.js +184 -0
  283. package/dist/components/lists-and-tables/cells/step-cell/step-cell.styles.js.map +1 -0
  284. package/dist/components/lists-and-tables/cells/step-cell/step-cell.template.d.ts +4 -0
  285. package/dist/components/lists-and-tables/cells/step-cell/step-cell.template.d.ts.map +1 -0
  286. package/dist/components/lists-and-tables/cells/{timeline-track-cell/timeline-track-cell.template.js → step-cell/step-cell.template.js} +10 -10
  287. package/dist/components/lists-and-tables/cells/step-cell/step-cell.template.js.map +1 -0
  288. package/dist/components/lists-and-tables/cells/text-cell/text-cell.js +9 -9
  289. package/dist/components/lists-and-tables/cells/text-cell/text-cell.js.map +1 -1
  290. package/dist/components/lists-and-tables/cells/text-cell/text-cell.styles.d.ts.map +1 -1
  291. package/dist/components/lists-and-tables/cells/text-cell/text-cell.styles.js +39 -37
  292. package/dist/components/lists-and-tables/cells/text-cell/text-cell.styles.js.map +1 -1
  293. package/dist/components/lists-and-tables/cells/title-cell/title-cell.js +8 -8
  294. package/dist/components/lists-and-tables/cells/title-cell/title-cell.js.map +1 -1
  295. package/dist/components/lists-and-tables/cells/title-cell/title-cell.styles.d.ts.map +1 -1
  296. package/dist/components/lists-and-tables/cells/title-cell/title-cell.styles.js +39 -37
  297. package/dist/components/lists-and-tables/cells/title-cell/title-cell.styles.js.map +1 -1
  298. package/dist/components/lists-and-tables/list/list.js +7 -7
  299. package/dist/components/lists-and-tables/list/list.js.map +1 -1
  300. package/dist/components/lists-and-tables/list/list.styles.d.ts.map +1 -1
  301. package/dist/components/lists-and-tables/list/list.styles.js +49 -48
  302. package/dist/components/lists-and-tables/list/list.styles.js.map +1 -1
  303. package/dist/components/lists-and-tables/list-item/list-item.d.ts +16 -6
  304. package/dist/components/lists-and-tables/list-item/list-item.d.ts.map +1 -1
  305. package/dist/components/lists-and-tables/list-item/list-item.js +29 -16
  306. package/dist/components/lists-and-tables/list-item/list-item.js.map +1 -1
  307. package/dist/components/lists-and-tables/list-item/list-item.styles.d.ts.map +1 -1
  308. package/dist/components/lists-and-tables/list-item/list-item.styles.js +69 -67
  309. package/dist/components/lists-and-tables/list-item/list-item.styles.js.map +1 -1
  310. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.d.ts +4 -1
  311. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.d.ts.map +1 -1
  312. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.js +8 -2
  313. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.js.map +1 -1
  314. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.js +30 -30
  315. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.d.ts +1 -1
  316. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.d.ts.map +1 -1
  317. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.js +1 -1
  318. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.js.map +1 -1
  319. package/dist/components/lists-and-tables/table/table.js +2 -2
  320. package/dist/components/lists-and-tables/table/table.js.map +1 -1
  321. package/dist/components/lists-and-tables/table/table.styles.js +21 -21
  322. package/dist/components/navigation/breadcrumbs/breadcrumbs.styles.js +3 -3
  323. package/dist/components/navigation/breadcrumbs/breadcrumbs.styles.js.map +1 -1
  324. package/dist/components/navigation/document-tab-bar/document-tab-bar.d.ts +1 -1
  325. package/dist/components/navigation/document-tab-bar/document-tab-bar.js +12 -12
  326. package/dist/components/navigation/document-tab-bar/document-tab-bar.js.map +1 -1
  327. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.d.ts.map +1 -1
  328. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.js +51 -49
  329. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.js.map +1 -1
  330. package/dist/components/navigation/menu-bar-item/menu-bar-item.d.ts +5 -0
  331. package/dist/components/navigation/menu-bar-item/menu-bar-item.d.ts.map +1 -1
  332. package/dist/components/navigation/menu-bar-item/menu-bar-item.js +13 -1
  333. package/dist/components/navigation/menu-bar-item/menu-bar-item.js.map +1 -1
  334. package/dist/components/navigation/menu-bar-item/menu-bar-item.styles.d.ts.map +1 -1
  335. package/dist/components/navigation/menu-bar-item/menu-bar-item.styles.js +35 -19
  336. package/dist/components/navigation/menu-bar-item/menu-bar-item.styles.js.map +1 -1
  337. package/dist/components/navigation/menu-bar-item/menu-bar-item.template.d.ts.map +1 -1
  338. package/dist/components/navigation/menu-bar-item/menu-bar-item.template.js +11 -10
  339. package/dist/components/navigation/menu-bar-item/menu-bar-item.template.js.map +1 -1
  340. package/dist/components/navigation/pagination/pagination.styles.js +29 -29
  341. package/dist/components/navigation/skip-link/skip-link.styles.js +8 -8
  342. package/dist/components/navigation/tab-bar/tab-bar.styles.js +53 -53
  343. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.js +3 -3
  344. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.js.map +1 -1
  345. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.d.ts.map +1 -1
  346. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.js +35 -32
  347. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.js.map +1 -1
  348. package/dist/components/navigation/top-title-bar/top-title-bar.js +1 -1
  349. package/dist/components/navigation/top-title-bar/top-title-bar.js.map +1 -1
  350. package/dist/components/navigation/top-title-bar/top-title-bar.styles.d.ts.map +1 -1
  351. package/dist/components/navigation/top-title-bar/top-title-bar.styles.js +3 -1
  352. package/dist/components/navigation/top-title-bar/top-title-bar.styles.js.map +1 -1
  353. package/dist/components/{shadow-resets-aG-rgyNQ.js → shadow-resets-CPa58rmc.js} +1 -1
  354. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.styles.js +46 -46
  355. package/dist/components/status-and-feedback/badge/badge.js +2 -2
  356. package/dist/components/status-and-feedback/badge/badge.js.map +1 -1
  357. package/dist/components/status-and-feedback/badge/badge.styles.d.ts.map +1 -1
  358. package/dist/components/status-and-feedback/badge/badge.styles.js +120 -119
  359. package/dist/components/status-and-feedback/badge/badge.styles.js.map +1 -1
  360. package/dist/components/status-and-feedback/banner/banner.styles.js +49 -49
  361. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.styles.js +19 -19
  362. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.js +12 -12
  363. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.js.map +1 -1
  364. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.styles.js +58 -58
  365. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.js +6 -6
  366. package/dist/components/status-and-feedback/notification/notification.styles.d.ts.map +1 -1
  367. package/dist/components/status-and-feedback/notification/notification.styles.js +45 -39
  368. package/dist/components/status-and-feedback/notification/notification.styles.js.map +1 -1
  369. package/dist/components/status-and-feedback/notification/notifications-area.js +2 -2
  370. package/dist/components/status-and-feedback/notification/notifications-area.js.map +1 -1
  371. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.d.ts.map +1 -1
  372. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.js +121 -119
  373. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.js.map +1 -1
  374. package/dist/components/status-and-feedback/progress-circle/progress-circle.styles.js +58 -58
  375. package/dist/components/status-and-feedback/progress-circle/progress-circle.template.js +1 -1
  376. package/dist/components/status-and-feedback/progress-circle/progress-circle.template.js.map +1 -1
  377. package/dist/components/status-and-feedback/status-bar/status-bar.d.ts +10 -0
  378. package/dist/components/status-and-feedback/status-bar/status-bar.d.ts.map +1 -1
  379. package/dist/components/status-and-feedback/status-bar/status-bar.js +21 -0
  380. package/dist/components/status-and-feedback/status-bar/status-bar.js.map +1 -1
  381. package/dist/components/status-and-feedback/status-bar/status-bar.styles.js +36 -36
  382. package/dist/components/status-and-feedback/{step-indicator/step-indicator.d.ts → step-bar/step-bar.d.ts} +32 -32
  383. package/dist/components/status-and-feedback/step-bar/step-bar.d.ts.map +1 -0
  384. package/dist/components/status-and-feedback/step-bar/step-bar.i18n.d.ts +9 -0
  385. package/dist/components/status-and-feedback/step-bar/step-bar.i18n.d.ts.map +1 -0
  386. package/dist/components/status-and-feedback/step-bar/step-bar.i18n.js +8 -0
  387. package/dist/components/status-and-feedback/step-bar/step-bar.i18n.js.map +1 -0
  388. package/dist/components/status-and-feedback/{step-indicator/step-indicator.js → step-bar/step-bar.js} +46 -46
  389. package/dist/components/status-and-feedback/step-bar/step-bar.js.map +1 -0
  390. package/dist/components/status-and-feedback/step-bar/step-bar.styles.d.ts +3 -0
  391. package/dist/components/status-and-feedback/step-bar/step-bar.styles.d.ts.map +1 -0
  392. package/dist/components/status-and-feedback/step-bar/step-bar.styles.js +294 -0
  393. package/dist/components/status-and-feedback/step-bar/step-bar.styles.js.map +1 -0
  394. package/dist/components/status-and-feedback/step-bar/step-bar.template.d.ts +5 -0
  395. package/dist/components/status-and-feedback/step-bar/step-bar.template.d.ts.map +1 -0
  396. package/dist/components/status-and-feedback/step-bar/step-bar.template.js +69 -0
  397. package/dist/components/status-and-feedback/step-bar/step-bar.template.js.map +1 -0
  398. package/dist/css/document-reset.css +3 -3
  399. package/dist/css/rich-text.css +71 -122
  400. package/dist/css/variables.css +54 -410
  401. package/dist/nldd.min.js +4607 -4331
  402. package/dist/translations/en-US.js +5 -5
  403. package/dist/translations/en-US.js.map +1 -1
  404. package/dist/translations/fy.js +5 -5
  405. package/dist/translations/fy.js.map +1 -1
  406. package/dist/translations/nl.generated.d.ts +5 -5
  407. package/dist/translations/nl.generated.js +2 -2
  408. package/dist/translations/nl.generated.js.map +1 -1
  409. package/dist/translations/pap-AW.js +5 -5
  410. package/dist/translations/pap-AW.js.map +1 -1
  411. package/dist/translations/pap-CW.js +5 -5
  412. package/dist/translations/pap-CW.js.map +1 -1
  413. package/dist/types/vue.d.ts +125 -82
  414. package/dist/utilities/codemirror/theme.js +17 -17
  415. package/dist/utilities/codemirror/theme.js.map +1 -1
  416. package/dist/utilities/page-section-mixin.d.ts +5 -0
  417. package/dist/utilities/page-section-mixin.d.ts.map +1 -1
  418. package/dist/utilities/page-section-mixin.js +13 -4
  419. package/dist/utilities/page-section-mixin.js.map +1 -1
  420. package/dist/utilities/scroll-mode-controller.d.ts +29 -13
  421. package/dist/utilities/scroll-mode-controller.d.ts.map +1 -1
  422. package/dist/utilities/scroll-mode-controller.js +48 -13
  423. package/dist/utilities/scroll-mode-controller.js.map +1 -1
  424. package/dist/utilities/spacing-scale.d.ts +1 -1
  425. package/dist/utilities/spacing-scale.js +1 -1
  426. package/package.json +13 -11
  427. package/dist/components/layout/app-view/app-view.d.ts.map +0 -1
  428. package/dist/components/layout/app-view/app-view.js.map +0 -1
  429. package/dist/components/layout/app-view/app-view.styles.d.ts +0 -2
  430. package/dist/components/layout/app-view/app-view.styles.d.ts.map +0 -1
  431. package/dist/components/layout/app-view/app-view.styles.js.map +0 -1
  432. package/dist/components/layout/app-view/app-view.template.d.ts +0 -4
  433. package/dist/components/layout/app-view/app-view.template.d.ts.map +0 -1
  434. package/dist/components/layout/app-view/app-view.template.js +0 -9
  435. package/dist/components/layout/app-view/app-view.template.js.map +0 -1
  436. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.d.ts.map +0 -1
  437. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.js.map +0 -1
  438. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.styles.d.ts +0 -2
  439. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.styles.d.ts.map +0 -1
  440. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.styles.js +0 -184
  441. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.styles.js.map +0 -1
  442. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.template.d.ts +0 -4
  443. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.template.d.ts.map +0 -1
  444. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.template.js.map +0 -1
  445. package/dist/components/palettes.html +0 -245
  446. package/dist/components/sample-images/butterfly-1200.jpg +0 -0
  447. package/dist/components/sample-images/butterfly-1600.jpg +0 -0
  448. package/dist/components/sample-images/butterfly-480.jpg +0 -0
  449. package/dist/components/sample-images/butterfly-960.jpg +0 -0
  450. package/dist/components/status-and-feedback/step-indicator/step-indicator.d.ts.map +0 -1
  451. package/dist/components/status-and-feedback/step-indicator/step-indicator.i18n.d.ts +0 -9
  452. package/dist/components/status-and-feedback/step-indicator/step-indicator.i18n.d.ts.map +0 -1
  453. package/dist/components/status-and-feedback/step-indicator/step-indicator.i18n.js +0 -8
  454. package/dist/components/status-and-feedback/step-indicator/step-indicator.i18n.js.map +0 -1
  455. package/dist/components/status-and-feedback/step-indicator/step-indicator.js.map +0 -1
  456. package/dist/components/status-and-feedback/step-indicator/step-indicator.styles.d.ts +0 -3
  457. package/dist/components/status-and-feedback/step-indicator/step-indicator.styles.d.ts.map +0 -1
  458. package/dist/components/status-and-feedback/step-indicator/step-indicator.styles.js +0 -294
  459. package/dist/components/status-and-feedback/step-indicator/step-indicator.styles.js.map +0 -1
  460. package/dist/components/status-and-feedback/step-indicator/step-indicator.template.d.ts +0 -5
  461. package/dist/components/status-and-feedback/step-indicator/step-indicator.template.d.ts.map +0 -1
  462. package/dist/components/status-and-feedback/step-indicator/step-indicator.template.js +0 -69
  463. package/dist/components/status-and-feedback/step-indicator/step-indicator.template.js.map +0 -1
  464. package/dist/palettes.html +0 -245
  465. package/dist/sample-images/butterfly-1200.jpg +0 -0
  466. package/dist/sample-images/butterfly-1600.jpg +0 -0
  467. package/dist/sample-images/butterfly-480.jpg +0 -0
  468. package/dist/sample-images/butterfly-960.jpg +0 -0
@@ -11,7 +11,6 @@
11
11
 
12
12
  import type { DefineComponent } from 'vue';
13
13
  import type { NLDDActivityIndicator } from '@nldd/design-system/activity-indicator';
14
- import type { NLDDAppView } from '@nldd/design-system/app-view';
15
14
  import type { NLDDAvatar } from '@nldd/design-system/avatar';
16
15
  import type { NLDDAvatarGroup } from '@nldd/design-system/avatar-group';
17
16
  import type { NLDDBadge } from '@nldd/design-system/badge';
@@ -94,6 +93,7 @@ import type { NLDDSearchField } from '@nldd/design-system/search-field';
94
93
  import type { NLDDSegmentedControl } from '@nldd/design-system/segmented-control';
95
94
  import type { NLDDSegmentedControlItem } from '@nldd/design-system/segmented-control';
96
95
  import type { NLDDSheet } from '@nldd/design-system/sheet';
96
+ import type { NLDDShell } from '@nldd/design-system/shell';
97
97
  import type { NLDDSideBySideSplitView } from '@nldd/design-system/side-by-side-split-view';
98
98
  import type { NLDDSidebarSection } from '@nldd/design-system/sidebar-section';
99
99
  import type { NLDDSimpleSection } from '@nldd/design-system/simple-section';
@@ -105,8 +105,9 @@ import type { NLDDSplitViewDivider } from '@nldd/design-system/split-view-divide
105
105
  import type { NLDDSplitViewPane } from '@nldd/design-system/split-view-pane';
106
106
  import type { NLDDStackedSplitView } from '@nldd/design-system/stacked-split-view';
107
107
  import type { NLDDStatusBar } from '@nldd/design-system/status-bar';
108
- import type { NLDDStepIndicator } from '@nldd/design-system/step-indicator';
109
- import type { NLDDStepIndicatorItem } from '@nldd/design-system/step-indicator';
108
+ import type { NLDDStepBar } from '@nldd/design-system/step-bar';
109
+ import type { NLDDStepBarItem } from '@nldd/design-system/step-bar';
110
+ import type { NLDDStepCell } from '@nldd/design-system/step-cell';
110
111
  import type { NLDDStepper } from '@nldd/design-system/stepper';
111
112
  import type { NLDDSwitch } from '@nldd/design-system/switch';
112
113
  import type { NLDDSwitchField } from '@nldd/design-system/switch-field';
@@ -121,7 +122,6 @@ import type { NLDDTextEditor } from '@nldd/design-system/text-editor';
121
122
  import type { NLDDTextField } from '@nldd/design-system/text-field';
122
123
  import type { NLDDTimeField } from '@nldd/design-system/time-field';
123
124
  import type { NLDDTimePicker } from '@nldd/design-system/time-picker';
124
- import type { NLDDTimelineTrackCell } from '@nldd/design-system/timeline-track-cell';
125
125
  import type { NLDDTitle } from '@nldd/design-system/title';
126
126
  import type { NLDDTitleCell } from '@nldd/design-system/title-cell';
127
127
  import type { NLDDToggleButton } from '@nldd/design-system/toggle-button';
@@ -161,11 +161,6 @@ declare module 'vue' {
161
161
  'translations'?: NLDDActivityIndicator['translations'];
162
162
  };
163
163
 
164
- type NLDDAppViewProps = {
165
- /** Background color (cascades to descendants) */
166
- 'background'?: NLDDAppView['background'];
167
- };
168
-
169
164
  type NLDDAvatarProps = {
170
165
  /** `person` (circle, person icon) or `organization` (rounded, building icon); default `person` */
171
166
  'type'?: NLDDAvatar['type'];
@@ -295,7 +290,7 @@ declare module 'vue' {
295
290
  };
296
291
 
297
292
  type NLDDBoxProps = {
298
- /** Which surface this box draws, named as it is on nldd-app-view, nldd-page, nldd-split-view-pane and nldd-card. It starts tinted where a card starts base: a box is there to stand out from the page, a card to sit on it. - `tinted` (default): a box on a plain page background. - `base`: a box on an already-tinted parent (the border ring gets +2 palette steps so it still reads against a card-on-card). - `critical`: a region whose actions are destructive or irreversible (a "danger zone"), tinted and outlined in critical. It carries no ARIA of its own: unlike nldd-banner this is not an announcement but a permanent part of the page, so the heading and the button labels have to name the danger — color is a reinforcement, never the only signal (WCAG 1.4.1). The box draws the surface and nothing else: it has no padding of its own, the same way nldd-card has none. Put an nldd-container inside it and let that set the inset, so one component owns spacing wherever it is used. */
293
+ /** Which surface this box draws, named as it is on nldd-shell, nldd-page, nldd-split-view-pane and nldd-card. It starts tinted where a card starts base: a box is there to stand out from the page, a card to sit on it. - `tinted` (default): a box on a plain page background. - `base`: a box on an already-tinted parent (the border ring gets +2 palette steps so it still reads against a card-on-card). - `critical`: a region whose actions are destructive or irreversible (a "danger zone"), tinted and outlined in critical. It carries no ARIA of its own: unlike nldd-banner this is not an announcement but a permanent part of the page, so the heading and the button labels have to name the danger — color is a reinforcement, never the only signal (WCAG 1.4.1). The box draws the surface and nothing else: it has no padding of its own, the same way nldd-card has none. Put an nldd-container inside it and let that set the inset, so one component owns spacing wherever it is used. */
299
294
  'background'?: NLDDBox['background'];
300
295
  };
301
296
 
@@ -1138,6 +1133,8 @@ declare module 'vue' {
1138
1133
  'background'?: NLDDFullBleedSection['background'];
1139
1134
  /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
1140
1135
  'height'?: NLDDFullBleedSection['height'];
1136
+ /** Takes the height the page has left, so the footer sits at the bottom of a short page. Without it, nldd-page lets its last section grow. */
1137
+ 'grow'?: NLDDFullBleedSection['grow'];
1141
1138
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
1142
1139
  'padding-block'?: NLDDFullBleedSection['paddingBlock'];
1143
1140
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
@@ -1175,13 +1172,15 @@ declare module 'vue' {
1175
1172
  type NLDDHeroProps = {
1176
1173
  /** Body max-width; 'full' removes the bound (section API) */
1177
1174
  'width'?: NLDDHero['width'];
1175
+ /** How the panel relates to the image (default: 'overlap'). 'contained' keeps it on the image, in any of the eight positions; 'overlap' lets it fall `overlap-size` over the bottom of the image and run on below as far as its content needs, so the image keeps its height whatever the content. In 'overlap' the image has a fixed height (320px on md, 400px on lg) unless `media-height` or `media-aspect-ratio` is set, and only the horizontal side of `main-position` counts. A panel shorter than `overlap-size` ends inside the image and says so in development */
1176
+ 'layout'?: NLDDHero['layout'];
1178
1177
  /** Surface color of the panel: 'base' (the base surface) or a category color — 'accent' (default) or a Rijkshuisstijl color such as 'lintblauw'|'donkerblauw'|'oranje' */
1179
1178
  'main-background'?: NLDDHero['mainBackground'];
1180
1179
  /** Surface color of the panel: 'base' (the base surface) or a category color — 'accent' (default) or a Rijkshuisstijl color such as 'lintblauw'|'donkerblauw'|'oranje' */
1181
1180
  'mainBackground'?: NLDDHero['mainBackground'];
1182
- /** Width of the panel (default: '1/2'); 'full' makes a full top or bottom strip and is ignored with 'left'/'right' */
1181
+ /** Width of the panel (default: 'auto'). 'auto' follows the content, between 480px and 640px and never wider than the image allows: a short title gets a narrow panel, a paragraph runs on to a readable line length. 'full' makes a strip across the whole image, at the top or the bottom, and is ignored with 'left'/'right'. Any CSS width (e.g. '560px', '60%') sets it exactly on md and lg, still never wider than the image allows; an invalid value falls back to 'auto' */
1183
1182
  'main-width'?: NLDDHero['mainWidth'];
1184
- /** Width of the panel (default: '1/2'); 'full' makes a full top or bottom strip and is ignored with 'left'/'right' */
1183
+ /** Width of the panel (default: 'auto'). 'auto' follows the content, between 480px and 640px and never wider than the image allows: a short title gets a narrow panel, a paragraph runs on to a readable line length. 'full' makes a strip across the whole image, at the top or the bottom, and is ignored with 'left'/'right'. Any CSS width (e.g. '560px', '60%') sets it exactly on md and lg, still never wider than the image allows; an invalid value falls back to 'auto' */
1185
1184
  'mainWidth'?: NLDDHero['mainWidth'];
1186
1185
  /** Position of the text panel (default: 'bottom-left'); 'left'/'right' span the full height */
1187
1186
  'main-position'?: NLDDHero['mainPosition'];
@@ -1191,6 +1190,14 @@ declare module 'vue' {
1191
1190
  'media-aspect-ratio'?: NLDDHero['mediaAspectRatio'];
1192
1191
  /** Aspect ratio of the media area (CSS form, '16/9' or '16:9'); default '21/9'. On md/lg it sets the height of the hero, on sm the height of the media area */
1193
1192
  'mediaAspectRatio'?: NLDDHero['mediaAspectRatio'];
1193
+ /** With layout="overlap": how far the panel falls over the bottom of the image, any CSS length (default: 160px). The overlap stays the same whatever the height of the image; a panel shorter than this ends inside the image */
1194
+ 'overlap-size'?: NLDDHero['overlapSize'];
1195
+ /** With layout="overlap": how far the panel falls over the bottom of the image, any CSS length (default: 160px). The overlap stays the same whatever the height of the image; a panel shorter than this ends inside the image */
1196
+ 'overlapSize'?: NLDDHero['overlapSize'];
1197
+ /** Fixed height of the media area, any CSS length (e.g. '320px', '40vh'); wins over media-aspect-ratio. An invalid value falls back to the ratio */
1198
+ 'media-height'?: NLDDHero['mediaHeight'];
1199
+ /** Fixed height of the media area, any CSS length (e.g. '320px', '40vh'); wins over media-aspect-ratio. An invalid value falls back to the ratio */
1200
+ 'mediaHeight'?: NLDDHero['mediaHeight'];
1194
1201
  /** Source of the media area (an alternative to the media slot); ignored as soon as the media slot is filled */
1195
1202
  'media-src'?: NLDDHero['mediaSrc'];
1196
1203
  /** Source of the media area (an alternative to the media slot); ignored as soon as the media slot is filled */
@@ -1209,8 +1216,9 @@ declare module 'vue' {
1209
1216
  'mediaAlt'?: NLDDHero['mediaAlt'];
1210
1217
  /** Surface behind the hero (section API) */
1211
1218
  'background'?: NLDDHero['background'];
1212
- /** Minimum height of the section (section API) */
1213
1219
  'height'?: NLDDHero['height'];
1220
+ /** Takes the height the page has left, so the footer sits at the bottom of a short page. Without it, nldd-page lets its last section grow. */
1221
+ 'grow'?: NLDDHero['grow'];
1214
1222
  /** Block padding override, also per edge and responsive (section API) */
1215
1223
  'padding-block'?: NLDDHero['paddingBlock'];
1216
1224
  /** Block padding override, also per edge and responsive (section API) */
@@ -1400,7 +1408,7 @@ declare module 'vue' {
1400
1408
  'credit'?: NLDDImage['credit'];
1401
1409
  /** Decorative image: alt is forced empty + aria-hidden */
1402
1410
  'decorative'?: NLDDImage['decorative'];
1403
- /** Low-quality image placeholder as a CSV string `"base,c1,c2,c3,c4,c5,c6"` — seven 0-255 bytes, each packing an 8-bit Oklab triplet (2 bits L, 3 bits a, 3 bits b). The first is the base color shown outside the cell gradients; the other six are per-cell colors in row-major 3×2 order. Generate via the encoder in `lqip-encoder.ts` or via the "LQIP encoder tool" Storybook story. Extends Lean Rada's CSS-only LQIP (https://leanrada.com/notes/css-only-lqip/) with per-cell hue — Lean's original format encodes grayscale cells only; ours encodes a color per cell so multi-color subjects survive the placeholder. */
1411
+ /** Loading preview (LQIP, low-quality image placeholder) as a CSV string `"base,c1,c2,c3,c4,c5,c6"` — seven 0-255 bytes, each packing an 8-bit Oklab triplet (2 bits L, 3 bits a, 3 bits b). The first is the base color shown outside the cell gradients; the other six are per-cell colors in row-major 3×2 order. Generate via the encoder in `lqip-encoder.ts` or via the "LQIP encoder tool" Storybook story. Extends Lean Rada's CSS-only LQIP (https://leanrada.com/notes/css-only-lqip/) with per-cell hue — Lean's original format encodes grayscale cells only; ours encodes a color per cell so multi-color subjects survive the preview. */
1404
1412
  'lqip'?: NLDDImage['lqip'];
1405
1413
  /** Override translation keys (e.g. the message shown when the image fails to load); unset keys fall back to Dutch. */
1406
1414
  'translations'?: NLDDImage['translations'];
@@ -1559,14 +1567,18 @@ declare module 'vue' {
1559
1567
  'radio'?: NLDDListItem['radio'];
1560
1568
  /** Set by the parent `nldd-list` when its own `reorderable` is on (with `type="list"`); consumers do not set this. Serves as a CSS hook for drag handle visibility. */
1561
1569
  'reorderable'?: NLDDListItem['reorderable'];
1562
- /** Marks the item as selected: it is one of the rows you picked. Selection is consumer-managed; the list never sets it. In a `navigation` parent it puts `aria-current="page"` on the inner action, in a `listbox` parent it drives `aria-selected`. */
1570
+ /** Marks the item as selected: it is one of the rows you picked. Selection is consumer-managed; the list never sets it. In a `navigation` parent it puts `aria-current` on the inner action, with `current-type` as its value; in a `listbox` parent it drives `aria-selected`. */
1563
1571
  'selected'?: NLDDListItem['selected'];
1564
1572
  /** Checked state of a `checkbox` or `radio` row. A checkbox row toggles it on activation, a radio row only ever sets it */
1565
1573
  'checked'?: NLDDListItem['checked'];
1566
1574
  /** Disclosure state. Drives the `children` group's visibility AND supplies `aria-expanded` — to the row's own control when the row is interactive, or to the segment marked `disclosure`. Written once either way; the item DEV-warns when there is nowhere for it to live. */
1567
1575
  'expanded'?: NLDDListItem['expanded'];
1568
- /** Marks the item as the one you are on: the page a menu row points at, the record a list has open. Exactly one row in a list carries it, where `selected` may be on many. It paints like `selected` at rest, and takes the highlighted fill while focus is anywhere in the row — including inside a nested `nldd-list-item-segment`, which is what a segmented row needs: the focus never reaches the row's own control, because there is none. In a `navigation` parent it puts `aria-current="page"` on the inner action. On a segmented row set it on the segment that holds the link instead: the row reads `current` off its own segments and paints itself, so it is written once, where `aria-current` belongs. */
1576
+ /** Marks the item as the one you are on: the page a menu row points at, the record a list has open. Exactly one row in a list carries it, where `selected` may be on many. It paints like `selected` at rest, and takes the highlighted fill while focus is anywhere in the row — including inside a nested `nldd-list-item-segment`, which is what a segmented row needs: the focus never reaches the row's own control, because there is none. In a `navigation` parent it puts `aria-current` on the inner action, with `current-type` as its value. On a segmented row set it on the segment that holds the link instead: the row reads `current` off its own segments and paints itself, so it is written once, where `aria-current` belongs. */
1569
1577
  'current'?: NLDDListItem['current'];
1578
+ /** The `aria-current` value a `current` or `selected` row puts on its action in a `navigation` parent (default 'page'). Use 'location' for a table of contents, whose rows point at sections of the page you are on. */
1579
+ 'current-type'?: NLDDListItem['currentType'];
1580
+ /** The `aria-current` value a `current` or `selected` row puts on its action in a `navigation` parent (default 'page'). Use 'location' for a table of contents, whose rows point at sections of the page you are on. */
1581
+ 'currentType'?: NLDDListItem['currentType'];
1570
1582
  /** Switches the row's own control off: a `button` or `checkbox` row stops responding and dims, a `href` row gets `aria-disabled` and its click is blocked (a link cannot be disabled natively). A row without a control of its own has nothing to switch off, and segments carry their own `disabled`. The arrow keys skip a disabled row. */
1571
1583
  'disabled'?: NLDDListItem['disabled'];
1572
1584
  /** The divider starts at this cell instead of at the row's first text or title cell. On the leading cell it restores the full-width line. */
@@ -1615,8 +1627,12 @@ declare module 'vue' {
1615
1627
  'popupType'?: NLDDListItemSegment['popupType'];
1616
1628
  /** ID of a popover this segment toggles; forwarded to the inner button. The IDL counterparts `popoverTargetElement` and `popoverTargetAction` work across shadow boundaries, as on nldd-icon-button. */
1617
1629
  'popovertarget'?: NLDDListItemSegment['popovertarget'];
1618
- /** Marks the segment as the current page (`aria-current="page"`). The row it sits in paints itself as the current row from it, so on a segmented row this is the only place it has to be set. */
1630
+ /** Marks the segment as the current one, with `aria-current` set to `current-type`. The row it sits in paints itself as the current row from it, so on a segmented row this is the only place it has to be set. */
1619
1631
  'current'?: NLDDListItemSegment['current'];
1632
+ /** The `aria-current` value of a `current` segment (default 'page'). Use 'location' for a table of contents, whose rows point at sections of the page you are on. */
1633
+ 'current-type'?: NLDDListItemSegment['currentType'];
1634
+ /** The `aria-current` value of a `current` segment (default 'page'). Use 'location' for a table of contents, whose rows point at sections of the page you are on. */
1635
+ 'currentType'?: NLDDListItemSegment['currentType'];
1620
1636
  /** Switches the segment off: a `button` or `checkbox` segment stops responding and dims, a `href` segment gets `aria-disabled` and its click is blocked (a link cannot be disabled natively). The arrow keys skip a row whose only segment is off. */
1621
1637
  'disabled'?: NLDDListItemSegment['disabled'];
1622
1638
  /** The row's divider starts at this cell instead of at its first text or title cell. */
@@ -1636,15 +1652,15 @@ declare module 'vue' {
1636
1652
  };
1637
1653
 
1638
1654
  type NLDDMenuProps = {
1639
- /** Explicit width, pinned exactly (sets --_width and clamps min/max to it). Leave unset to let the menu size to its content between a minimum and a viewport-aware maximum of min(100vw - inset, 640px). */
1655
+ /** Explicit width, pinned exactly (sets --_menu-width and clamps min/max to it). Leave unset to let the menu size to its content between a minimum and a viewport-aware maximum of min(100vw - inset, 640px). */
1640
1656
  'width'?: NLDDMenu['width'];
1641
1657
  /** ID of the anchor element. Positions the menu against it AND makes it a toggle: the menu listens on document click and opens/closes itself when the click lands on the anchor. Use this for a menu hung off a button. For a menu you open yourself (a type-ahead under a text field, say), set the `anchorElement` property instead — same positioning, no toggle. */
1642
1658
  'anchor'?: NLDDMenu['anchor'];
1643
1659
  /** Floating UI placement. Default: 'bottom-start'. */
1644
1660
  'placement'?: NLDDMenu['placement'];
1645
- /** Maximum number of visible items before the menu scrolls. Sets --_max-items internally. Default: 0 (no limit). */
1661
+ /** Maximum number of visible items before the menu scrolls. Sets --_menu-max-items internally. Default: 0 (no limit). */
1646
1662
  'max-items'?: NLDDMenu['maxItems'];
1647
- /** Maximum number of visible items before the menu scrolls. Sets --_max-items internally. Default: 0 (no limit). */
1663
+ /** Maximum number of visible items before the menu scrolls. Sets --_menu-max-items internally. Default: 0 (no limit). */
1648
1664
  'maxItems'?: NLDDMenu['maxItems'];
1649
1665
  /** Text of the default empty-state dialog. Falls back to Dutch i18n "Geen opties beschikbaar". */
1650
1666
  'empty-text'?: NLDDMenu['emptyText'];
@@ -1953,10 +1969,16 @@ declare module 'vue' {
1953
1969
  type NLDDOneHalfOneHalfSectionProps = {
1954
1970
  /** Body max-width: 'full' removes the constraint so the section spans the full available width. Any CSS length (e.g. '480px') overrides the default max-width. */
1955
1971
  'width'?: NLDDOneHalfOneHalfSection['width'];
1972
+ /** Where the shorter column sits next to the longer one ('top' default). Only where the columns stand side by side; stacked, they follow each other. */
1973
+ 'vertical-alignment'?: NLDDOneHalfOneHalfSection['verticalAlignment'];
1974
+ /** Where the shorter column sits next to the longer one ('top' default). Only where the columns stand side by side; stacked, they follow each other. */
1975
+ 'verticalAlignment'?: NLDDOneHalfOneHalfSection['verticalAlignment'];
1956
1976
  /** Surface background ('inherit' default; 'base'/'tinted' paint and cascade a surface). */
1957
1977
  'background'?: NLDDOneHalfOneHalfSection['background'];
1958
1978
  /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
1959
1979
  'height'?: NLDDOneHalfOneHalfSection['height'];
1980
+ /** Takes the height the page has left, so the footer sits at the bottom of a short page. Without it, nldd-page lets its last section grow. */
1981
+ 'grow'?: NLDDOneHalfOneHalfSection['grow'];
1960
1982
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
1961
1983
  'padding-block'?: NLDDOneHalfOneHalfSection['paddingBlock'];
1962
1984
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
@@ -1994,10 +2016,16 @@ declare module 'vue' {
1994
2016
  type NLDDOneThirdTwoThirdsSectionProps = {
1995
2017
  /** Body max-width: 'full' removes the constraint so the section spans the full available width. Any CSS length (e.g. '480px') overrides the default max-width. */
1996
2018
  'width'?: NLDDOneThirdTwoThirdsSection['width'];
2019
+ /** Where the shorter column sits next to the longer one ('top' default). Only where the columns stand side by side; stacked, they follow each other. */
2020
+ 'vertical-alignment'?: NLDDOneThirdTwoThirdsSection['verticalAlignment'];
2021
+ /** Where the shorter column sits next to the longer one ('top' default). Only where the columns stand side by side; stacked, they follow each other. */
2022
+ 'verticalAlignment'?: NLDDOneThirdTwoThirdsSection['verticalAlignment'];
1997
2023
  /** Surface background ('inherit' default; 'base'/'tinted' paint and cascade a surface). */
1998
2024
  'background'?: NLDDOneThirdTwoThirdsSection['background'];
1999
2025
  /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
2000
2026
  'height'?: NLDDOneThirdTwoThirdsSection['height'];
2027
+ /** Takes the height the page has left, so the footer sits at the bottom of a short page. Without it, nldd-page lets its last section grow. */
2028
+ 'grow'?: NLDDOneThirdTwoThirdsSection['grow'];
2001
2029
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
2002
2030
  'padding-block'?: NLDDOneThirdTwoThirdsSection['paddingBlock'];
2003
2031
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
@@ -2157,7 +2185,7 @@ declare module 'vue' {
2157
2185
  };
2158
2186
 
2159
2187
  type NLDDPopoverProps = {
2160
- /** Width as a CSS length (default: 320px through --components-popover-default-width). A content-based size (`fit-content`, `min-content`, `max-content`, `auto`) is refused: the popover is an inline-size container so slotted components can adapt to it, and its width cannot then come from that same content. Such a value is ignored, with a warning in DEV. */
2188
+ /** Width as a CSS length (default: 320px). A content-based size (`fit-content`, `min-content`, `max-content`, `auto`) is refused: the popover is an inline-size container so slotted components can adapt to it, and its width cannot then come from that same content. Such a value is ignored, with a warning in DEV. */
2161
2189
  'width'?: NLDDPopover['width'];
2162
2190
  /** On an sm viewport (where the popover renders as a bottom sheet) fills the whole available height instead of shrinking to its content. No effect on md and up (anchored mode). Opt-in for content-heavy cases such as search results or long detail views; content-sized is the default, following the Apple and Material convention. */
2163
2191
  'sm-full-height'?: NLDDPopover['smFullHeight'];
@@ -2370,7 +2398,7 @@ declare module 'vue' {
2370
2398
  'centered'?: NLDDRichText['centered'];
2371
2399
  /** Override translation keys; unset keys fall back to Dutch */
2372
2400
  'translations'?: NLDDRichText['translations'];
2373
- /** Opt-in automatic hyphenation for running text (p, li, dd). Needs a correct `lang` on the page (`lang="nl"` on `<html>`, for instance): without language information the browser does not hyphenate. An `overflow-wrap: break-word` safety net on p/li is always on, independent of this attribute, so long URLs and compounds break neatly instead of overflowing even without a dictionary. */
2401
+ /** Opt-in automatic hyphenation for running text (p, li, dd). Needs a correct `lang` on the page (`lang="nl"` on `<html>`, for instance): without language information the browser does not hyphenate. An `overflow-wrap: break-word` safety net on headings, p and li is always on, independent of this attribute, so a word wider than the column breaks instead of overflowing, without a hyphen; headings never get one. */
2374
2402
  'hyphens'?: NLDDRichText['hyphens'];
2375
2403
  };
2376
2404
 
@@ -2508,6 +2536,11 @@ declare module 'vue' {
2508
2536
  'onClose'?: (event: CustomEvent) => void;
2509
2537
  };
2510
2538
 
2539
+ type NLDDShellProps = {
2540
+ /** Background color (cascades to descendants) */
2541
+ 'background'?: NLDDShell['background'];
2542
+ };
2543
+
2511
2544
  type NLDDSideBySideSplitViewProps = {
2512
2545
  /** Use a tinted background color (cascades to descendants) */
2513
2546
  'background'?: NLDDSideBySideSplitView['background'];
@@ -2541,6 +2574,8 @@ declare module 'vue' {
2541
2574
  'collapsed'?: NLDDSidebarSection['collapsed'];
2542
2575
  'background'?: NLDDSidebarSection['background'];
2543
2576
  'height'?: NLDDSidebarSection['height'];
2577
+ /** Takes the height the page has left, so the footer sits at the bottom of a short page. Without it, nldd-page lets its last section grow. */
2578
+ 'grow'?: NLDDSidebarSection['grow'];
2544
2579
  'padding-block'?: NLDDSidebarSection['paddingBlock'];
2545
2580
  'paddingBlock'?: NLDDSidebarSection['paddingBlock'];
2546
2581
  'padding-top'?: NLDDSidebarSection['paddingTop'];
@@ -2588,6 +2623,8 @@ declare module 'vue' {
2588
2623
  'background'?: NLDDSimpleSection['background'];
2589
2624
  /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
2590
2625
  'height'?: NLDDSimpleSection['height'];
2626
+ /** Takes the height the page has left, so the footer sits at the bottom of a short page. Without it, nldd-page lets its last section grow. */
2627
+ 'grow'?: NLDDSimpleSection['grow'];
2591
2628
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
2592
2629
  'padding-block'?: NLDDSimpleSection['paddingBlock'];
2593
2630
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
@@ -2723,33 +2760,58 @@ declare module 'vue' {
2723
2760
  'button'?: NLDDStatusBar['button'];
2724
2761
  };
2725
2762
 
2726
- type NLDDStepIndicatorProps = {
2727
- 'current'?: NLDDStepIndicator['current'];
2763
+ type NLDDStepBarProps = {
2764
+ 'current'?: NLDDStepBar['current'];
2728
2765
  /** Name of the nav; defaults to the i18n value ("Voortgang") */
2729
- 'accessible-label'?: NLDDStepIndicator['accessibleLabel'];
2766
+ 'accessible-label'?: NLDDStepBar['accessibleLabel'];
2730
2767
  /** Name of the nav; defaults to the i18n value ("Voortgang") */
2731
- 'accessibleLabel'?: NLDDStepIndicator['accessibleLabel'];
2768
+ 'accessibleLabel'?: NLDDStepBar['accessibleLabel'];
2732
2769
  /** Override translation keys; unset keys fall back to Dutch */
2733
- 'translations'?: NLDDStepIndicator['translations'];
2734
- 'total'?: NLDDStepIndicator['total'];
2770
+ 'translations'?: NLDDStepBar['translations'];
2771
+ 'total'?: NLDDStepBar['total'];
2735
2772
  /** 1-based position of the last item with `status="current"`, or 1 when none has it. */
2736
- 'resolvedCurrent'?: NLDDStepIndicator['resolvedCurrent'];
2737
- 'currentItem'?: NLDDStepIndicator['currentItem'];
2773
+ 'resolvedCurrent'?: NLDDStepBar['resolvedCurrent'];
2774
+ 'currentItem'?: NLDDStepBar['currentItem'];
2738
2775
  };
2739
2776
 
2740
- type NLDDStepIndicatorItemProps = {
2777
+ type NLDDStepBarItemProps = {
2741
2778
  /** How far along this step is. `current` marks the step you are on (`aria-current="step"`) and the parent derives the others from it: with none marked step 1 is current, with more than one the last wins. `past` and `future` override what is derived for this step only */
2742
- 'status'?: NLDDStepIndicatorItem['status'];
2779
+ 'status'?: NLDDStepBarItem['status'];
2743
2780
  /** Label under the disc */
2744
- 'text'?: NLDDStepIndicatorItem['text'];
2781
+ 'text'?: NLDDStepBarItem['text'];
2745
2782
  /** Icon in the disc instead of the number or the check mark */
2746
- 'icon'?: NLDDStepIndicatorItem['icon'];
2783
+ 'icon'?: NLDDStepBarItem['icon'];
2747
2784
  /** Makes the step a link (back to a completed step, for instance) */
2748
- 'href'?: NLDDStepIndicatorItem['href'];
2785
+ 'href'?: NLDDStepBarItem['href'];
2749
2786
  /** For flows without a URL per step (a wizard inside one window). Ignored once `href` is set: one step is one action, and a link outranks a button -- the same rule as nldd-card and nldd-avatar. */
2750
- 'button'?: NLDDStepIndicatorItem['button'];
2787
+ 'button'?: NLDDStepBarItem['button'];
2751
2788
  /** The status that counts. An own `past` or `future` wins over the derived one. An own `current` is what the parent derives from, so the derived status already says it, and on a step that lost to a later one it does not hold. */
2752
- 'resolvedStatus'?: NLDDStepIndicatorItem['resolvedStatus'];
2789
+ 'resolvedStatus'?: NLDDStepBarItem['resolvedStatus'];
2790
+ };
2791
+
2792
+ type NLDDStepCellProps = {
2793
+ /** What stands in the lane: a whole dot (`major`, the default), a smaller one for a row that belongs under the one above it (`minor`), or nothing at all (`none`) for a row that carries what a step holds rather than being a step. A `none` row keeps its `size` and its `status`, so it stays in the same lane and the track runs on in the right color */
2794
+ 'level'?: NLDDStepCell['level'];
2795
+ /** How far along this row is (default 'past'); the same values as `nldd-step-bar-item`. It colors the dot and the track around it: covered above where you are, still ahead below */
2796
+ 'status'?: NLDDStepCell['status'];
2797
+ /** How wide the lane is and so how big the dot: `sm` (default, 16px) for steps without a number, `md` (24px) where a number or an icon has to fit. Every row in one list takes the same size, or the track jumps */
2798
+ 'size'?: NLDDStepCell['size'];
2799
+ /** The direction the timeline moves forward in: `down` (default) puts the past above, `up` below. Only the current step has half a track, so this only has an effect there */
2800
+ 'direction'?: NLDDStepCell['direction'];
2801
+ /** Place of the row in the list as it stands on screen (default 'between'): decides whether the line continues above the dot, below it, or on both sides. `first` is the top row and only has a line below, `last` the bottom row and only has a line above, also with `direction="up"`: position is about where the row stands, `direction` about which way time runs. `only` is the single row in the series and gets a line on neither side: a track of one dot leads nowhere. On a `level="none"` row, which is nothing but line, `only` leaves it out altogether: the track ends above it */
2802
+ 'position'?: NLDDStepCell['position'];
2803
+ /** Which halves of the track you have covered, when `status` and `direction` get it wrong (default 'auto', which is what those two say). The halves you name are drawn as covered and the other one as still ahead, so `none` covers neither. Which halves are drawn at all stays with `position`, except that naming a half draws it: `line="both"` on a `first` row draws one above too. A row that opens a group of its own is the case for `both`, since the going carries on below it. A `level="none"` row has one line rather than two halves, and no point where a fill could change over, so there the status colors the whole of it and `line` overrules the whole of it. On a `current` row that leans the way the timeline runs: what belongs to a point usually comes after it, so going `down` the stretch reads as still ahead and going `up` as behind you */
2804
+ 'line'?: NLDDStepCell['line'];
2805
+ /** Number or short text in the dot */
2806
+ 'text'?: NLDDStepCell['text'];
2807
+ /** Icon name in the dot; wins over `text` */
2808
+ 'icon'?: NLDDStepCell['icon'];
2809
+ 'hide-below'?: NLDDStepCell['hideBelow'];
2810
+ 'hideBelow'?: NLDDStepCell['hideBelow'];
2811
+ 'hide-above'?: NLDDStepCell['hideAbove'];
2812
+ 'hideAbove'?: NLDDStepCell['hideAbove'];
2813
+ /** Only a whole dot in a wide lane has room to read a number in: a minor one is smaller still, and would claim to be a step of its own. */
2814
+ 'showsContent'?: NLDDStepCell['showsContent'];
2753
2815
  };
2754
2816
 
2755
2817
  type NLDDStepperProps = {
@@ -3187,31 +3249,6 @@ declare module 'vue' {
3187
3249
  'onChange'?: (event: CustomEvent) => void;
3188
3250
  };
3189
3251
 
3190
- type NLDDTimelineTrackCellProps = {
3191
- /** What stands in the lane: a whole dot (`major`, the default), a smaller one for a row that belongs under the one above it (`minor`), or nothing at all (`none`) for a row that carries what a step holds rather than being a step. A `none` row keeps its `size` and its `status`, so it stays in the same lane and the track runs on in the right color */
3192
- 'level'?: NLDDTimelineTrackCell['level'];
3193
- /** How far along this row is (default 'past'); the same values as `nldd-step-indicator-item`. It colors the dot and the track around it: covered above where you are, still ahead below */
3194
- 'status'?: NLDDTimelineTrackCell['status'];
3195
- /** How wide the lane is and so how big the dot: `sm` (default, 16px) for a timeline of events, `md` (24px) where a number or an icon has to fit. Every row in one list takes the same size, or the track jumps */
3196
- 'size'?: NLDDTimelineTrackCell['size'];
3197
- /** The direction the timeline moves forward in: `down` (default) puts the past above, `up` below. Only the current step has half a track, so this only has an effect there */
3198
- 'direction'?: NLDDTimelineTrackCell['direction'];
3199
- /** Place of the row in the list as it stands on screen (default 'between'): decides whether the line continues above the dot, below it, or on both sides. `first` is the top row and only has a line below, `last` the bottom row and only has a line above, also with `direction="up"`: position is about where the row stands, `direction` about which way time runs. `only` is the single row in the series and gets a line on neither side: a track of one dot leads nowhere. On a `level="none"` row, which is nothing but line, `only` leaves it out altogether: the track ends above it */
3200
- 'position'?: NLDDTimelineTrackCell['position'];
3201
- /** Which halves of the track you have covered, when `status` and `direction` get it wrong (default 'auto', which is what those two say). The halves you name are drawn as covered and the other one as still ahead, so `none` covers neither. Which halves are drawn at all stays with `position`, except that naming a half draws it: `line="both"` on a `first` row draws one above too. A row that opens a group of its own is the case for `both`, since the going carries on below it. A `level="none"` row has one line rather than two halves, and no point where a fill could change over, so there the status colors the whole of it and `line` overrules the whole of it. On a `current` row that leans the way the timeline runs: what belongs to a point usually comes after it, so going `down` the stretch reads as still ahead and going `up` as behind you */
3202
- 'line'?: NLDDTimelineTrackCell['line'];
3203
- /** Number or short text in the dot */
3204
- 'text'?: NLDDTimelineTrackCell['text'];
3205
- /** Icon name in the dot; wins over `text` */
3206
- 'icon'?: NLDDTimelineTrackCell['icon'];
3207
- 'hide-below'?: NLDDTimelineTrackCell['hideBelow'];
3208
- 'hideBelow'?: NLDDTimelineTrackCell['hideBelow'];
3209
- 'hide-above'?: NLDDTimelineTrackCell['hideAbove'];
3210
- 'hideAbove'?: NLDDTimelineTrackCell['hideAbove'];
3211
- /** Only a whole dot in a wide lane has room to read a number in: a minor one is smaller still, and would claim to be a step of its own. */
3212
- 'showsContent'?: NLDDTimelineTrackCell['showsContent'];
3213
- };
3214
-
3215
3252
  type NLDDTitleProps = {
3216
3253
  /** Visual size of the title: 1–6 (default: 3) */
3217
3254
  'size'?: NLDDTitle['size'];
@@ -3307,9 +3344,9 @@ declare module 'vue' {
3307
3344
  'text'?: NLDDToggleButton['text'];
3308
3345
  /** Icon name for nldd-icon */
3309
3346
  'icon'?: NLDDToggleButton['icon'];
3310
- /** Icon shown instead of `icon` while selected, such as `check-mark` for `plus` or `heart-filled` for `heart`. The appearances with a surface fill it when on, as without one. The transparent appearances have no surface to fill: with a selected-icon they stay quiet when on and the change of shape says it is on; without one they fill, so the state always shows. */
3347
+ /** Icon shown instead of `icon` while selected, such as `check-mark` for `plus` or `heart-filled` for `heart`. The appearances with a surface fill it when on, as without one. The transparent appearances have no surface to fill: with a selected-icon they stay quiet when on and the change of shape says it is on; without one, or with `variant="text"` where the icon does not render, they fill, so the state always shows. */
3311
3348
  'selected-icon'?: NLDDToggleButton['selectedIcon'];
3312
- /** Icon shown instead of `icon` while selected, such as `check-mark` for `plus` or `heart-filled` for `heart`. The appearances with a surface fill it when on, as without one. The transparent appearances have no surface to fill: with a selected-icon they stay quiet when on and the change of shape says it is on; without one they fill, so the state always shows. */
3349
+ /** Icon shown instead of `icon` while selected, such as `check-mark` for `plus` or `heart-filled` for `heart`. The appearances with a surface fill it when on, as without one. The transparent appearances have no surface to fill: with a selected-icon they stay quiet when on and the change of shape says it is on; without one, or with `variant="text"` where the icon does not render, they fill, so the state always shows. */
3313
3350
  'selectedIcon'?: NLDDToggleButton['selectedIcon'];
3314
3351
  /** What renders: text, icon, or both. Unset → auto-detect from text/icon attributes. */
3315
3352
  'variant'?: NLDDToggleButton['variant'];
@@ -3584,10 +3621,16 @@ declare module 'vue' {
3584
3621
  type NLDDTwoThirdsOneThirdSectionProps = {
3585
3622
  /** Body max-width: 'full' removes the constraint so the section spans the full available width. Any CSS length (e.g. '480px') overrides the default max-width. */
3586
3623
  'width'?: NLDDTwoThirdsOneThirdSection['width'];
3624
+ /** Where the shorter column sits next to the longer one ('top' default). Only where the columns stand side by side; stacked, they follow each other. */
3625
+ 'vertical-alignment'?: NLDDTwoThirdsOneThirdSection['verticalAlignment'];
3626
+ /** Where the shorter column sits next to the longer one ('top' default). Only where the columns stand side by side; stacked, they follow each other. */
3627
+ 'verticalAlignment'?: NLDDTwoThirdsOneThirdSection['verticalAlignment'];
3587
3628
  /** Surface background ('inherit' default; 'base'/'tinted' paint and cascade a surface). */
3588
3629
  'background'?: NLDDTwoThirdsOneThirdSection['background'];
3589
3630
  /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
3590
3631
  'height'?: NLDDTwoThirdsOneThirdSection['height'];
3632
+ /** Takes the height the page has left, so the footer sits at the bottom of a short page. Without it, nldd-page lets its last section grow. */
3633
+ 'grow'?: NLDDTwoThirdsOneThirdSection['grow'];
3591
3634
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
3592
3635
  'padding-block'?: NLDDTwoThirdsOneThirdSection['paddingBlock'];
3593
3636
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
@@ -3657,7 +3700,7 @@ declare module 'vue' {
3657
3700
  type NLDDWindowProps = {
3658
3701
  /** Color scheme (default 'inherit'). */
3659
3702
  'scheme'?: NLDDWindow['scheme'];
3660
- /** CSS width (default: var(--components-window-default-width)) */
3703
+ /** CSS width (default: 640px) */
3661
3704
  'width'?: NLDDWindow['width'];
3662
3705
  /** CSS height (default: content height) */
3663
3706
  'height'?: NLDDWindow['height'];
@@ -3692,8 +3735,6 @@ declare module 'vue' {
3692
3735
  export interface GlobalComponents {
3693
3736
  /** Layout placeholder that fills its parent and centers an indeterminate activity indicator. By default the indicator is held back for 1000ms so brief loading states don't flash; once the delay passes it fades in. Set `timing="instant"` to skip the delay (the fade-in still plays) — this is what embedding components such as `nldd-button` use for their loading state. The default indicator is a simple icon-sized circle that follows the shared `--context-content-color` channel (set by list-item / table / menu on their content), falling back to `currentColor` wherever that channel is unset (buttons, rich-text, standalone) — so a spinner inside a cell tracks the row's state-aware content color, while embedders relying on currentColor are unaffected. An optional label sits below (hidden unless `show-text` is set). Drop a `<nldd-progress-circle>`, `<nldd-progress-bar>` or any element in the `indicator` slot to override it. Icon alignment: the visible ring already sits at 5/6 of its box (the SVG's r=9 plus a 2-unit stroke in a 24 view-box, the same optical inset a filled icon glyph has), so a standalone spinner lines up with an icon or an `icon-aligned` `nldd-avatar` on the same grid — no extra option needed (unlike `nldd-avatar`, which fills edge-to-edge and opts in via `icon-aligned`). Overlay mode: put content in the default slot and the indicator wraps it — it becomes a `position: relative` container, renders the spinner over a dimming backdrop (opt out with `no-backdrop`), and makes the content `inert` so its controls can't be focused or clicked. Toggle loading with `complete` (`?complete=${!isLoading}`). With no slotted content it stays the standalone placeholder described above. Reconnect behavior: every `connectedCallback` resets the timer and hides the indicator again. If a consumer toggles the element via a conditional render (remove + re-insert) the indicator disappears and re-fades after another delay. Keep the element mounted and toggle visibility / `hidden` instead if you want the timer to run only once. Accessibility: while connected and not `complete` the host is a polite live region (`role="status"`). The label (`text`, or the translated "Laden" fallback) always renders as the region's content — visually hidden when `show-text` is off (the default) — so assistive tech announces the loading state when the indicator appears. Set `complete` (or unmount) to clear it. */
3694
3737
  'nldd-activity-indicator': DefineComponent<NLDDActivityIndicatorProps>;
3695
- /** The required root shell of a Nederlandse Digitale Dienst application. Always contains a split view or an nldd-page as direct content. The document font comes from the package stylesheet (`@nldd/design-system/styles`), not from this component: it gives `body` the body font and content color as soon as an app-view is on the page, inside `@layer reset` so any rule of your own wins. Import only the tokens (`/styles/tokens`) and text you write in the light DOM keeps the browser default. Set background="tinted" to give the whole application a tinted background. All descendants read --context-parent-background-color via --_background-color automatically. Individual components can override locally with their own background attribute. The same background color is forced on `document.body` so that browser- chrome surfaces (iOS overscroll bounce, status bar, page-margin areas) blend with the app instead of revealing the user-agent's default white. Cleared when the app-view disconnects. The app scrolls the DOCUMENT (root mode) or lets each `nldd-page` scroll inside its pane (nested mode). The mode is derived from the outermost horizontal split view: one column means the document scrolls, several columns mean the panes do. An app without such a split view is a single column at every width and therefore scrolls the document too — nested scrolling would cost it the rubber-band and the collapsing browser toolbar on iOS for nothing. Set `--context-scroll-mode` on the `nldd-app-view` itself to override the derived mode; an inherited value loses from it. In nested scroll mode `overscroll-behavior: none` is set on `document.documentElement` and `document.body` while the app-view is connected. Combined with `overscroll-behavior: contain` on `nldd-page`'s scroll target, this prevents iOS rubber-band on the viewport when scroll gestures land outside an `nldd-page` (e.g. on a top-bar). In root scroll mode the document itself is the scroller, so this is lifted to let the native rubber-band happen. Cleared on last disconnect. */
3696
- 'nldd-app-view': DefineComponent<NLDDAppViewProps>;
3697
3738
  /** Shows one person or organization as a compact, round (person) or rounded (organization) representation. The content follows a fixed fallback chain: an image when `src` loads, otherwise the initials (from `initials` or derived from `name`), and otherwise a fallback icon. `type` sets both the shape and the fallback icon: `person` gives a circle with a person icon, `organization` a rounded square with a building icon. The shape belongs to the meaning and cannot be set on its own. Override the fallback icon with `icon` where that helps. Without `size` the avatar scales with its container, like `nldd-icon`; a fixed size (the same spacer-aligned scale, 16 through 96) is the exception. The initials and the icon scale along. Wide initials (WW, MMM) are scaled down automatically so they stay inside the shape. Accessibility: the host element carries the meaning. With a `name` (and without `decorative`) it gets `role="img"` with the name as its label. When the name already stands beside it as text, in an identity for instance, set `decorative` so the avatar stays hidden from assistive software. A dead `src` falls back to the initials or the icon, never to a broken-image icon. */
3698
3739
  'nldd-avatar': DefineComponent<NLDDAvatarProps>;
3699
3740
  /** Shows several avatars as one group: they overlap, and each one gets a ring in the surface color so they stay apart where they meet. The ring uses the same mechanism as the badge, so on a colored surface you hand the color over through `--context-parent-background-color`. Slot `nldd-avatar` elements, not bare `img`. An avatar already knows what to do with a dead image, when to fall back to initials, and how to show its name as a tooltip; a loose image would have to reproduce all of that and cannot do the last one. Set `decorative` when the names already stand beside the group as text; otherwise give every avatar a name, because the group itself describes nobody. The size applies to the whole group: it is imposed on the avatars, a slotted `img` included. That keeps the row on one line whatever a consumer hands over. */
@@ -3727,13 +3768,13 @@ declare module 'vue' {
3727
3768
  'nldd-checkbox-field': DefineComponent<NLDDCheckboxFieldProps>;
3728
3769
  /** A monospace editor for code, YAML, JSON and other technical content, built on CodeMirror 6 (via NLDDCodeMirrorElement). Visually pairs with nldd-code-viewer for a matching read-only surface. Default `appearance="simple"` is a bare, flush editor (no frame, no focus ring) for use inside an nldd-form-field or a consumer composition that owns its own chrome and focus treatment; the caret is rendered as a prominent accent as the focus cue. `appearance="input-field"` adds the framed surface (border ring, tinted fill, inner padding, radius) and a focus ring for standalone use. The simple variant has no surrounding space of its own: let a layout container own the spacing and forward clicks with `focusFromPoint()` so clicking the padding still starts editing. Optional `language` enables lazy syntax highlighting; `line-numbers` adds a gutter (click a number to move the caret to that line). */
3729
3770
  'nldd-code-editor': DefineComponent<NLDDCodeEditorProps>;
3730
- /** A read-only block of code/text built on a non-editable CodeMirror 6 view. Visually pairs with nldd-code-editor (same engine, same token palette). Whitespace is preserved; long lines scroll horizontally by default. Set `wrap` to break long lines onto the next visual line. Set `language` to one of the supported grammars (yaml, json, javascript, typescript, css, html, xml, bash, markdown, rust, gherkin, toml, sql, python) to highlight the content. Without `language` the content renders plain. Grammars are loaded lazily on first use, so a page that never sets `language` ships zero grammar code. Token colors are the `--components-code-viewer-token-*` custom properties (shared with the editor via the CodeMirror highlight style). Override them per-instance to swap the theme. */
3771
+ /** A read-only block of code/text built on a non-editable CodeMirror 6 view. Visually pairs with nldd-code-editor (same engine, same token palette). Whitespace is preserved; long lines scroll horizontally by default. Set `wrap` to break long lines onto the next visual line. Set `language` to one of the supported grammars (yaml, json, javascript, typescript, css, html, xml, bash, markdown, rust, gherkin, toml, sql, python) to highlight the content. Without `language` the content renders plain. Grammars are loaded lazily on first use, so a page that never sets `language` ships zero grammar code. Token colors are the `--semantics-code-syntax-*` custom properties (shared with the editor via the CodeMirror highlight style). Override them per-instance to swap the theme. */
3731
3772
  'nldd-code-viewer': DefineComponent<NLDDCodeViewerProps>;
3732
3773
  /** A container for displaying collections of items. Supports grid, stack, lanes and horizontal scroll layouts. Use it for a set of equal blocks, usually `nldd-card`s, instead of a CSS grid of your own: the collection sets the columns from `item-width` and the available width, and the gap per breakpoint. In grid and stack modes, items are paginated via a load-more button. In horizontal scroll, the prev/next controls and the edge fade appear only when the items overflow the container. With `lazy-load`, the next items are automatically loaded when the load-more button comes into view. */
3733
3774
  'nldd-collection': DefineComponent<NLDDCollectionProps>;
3734
3775
  /** A text input with autocomplete dropdown via nldd-menu. Add a slotted nldd-menu with nldd-menu-item children to provide options. The slotted nldd-menu keeps its default focus behavior (menu container receives focus) so that typing keeps focus on the input. The picker button moves focus to the menu explicitly on activation. Note: Only nldd-menu-item type="button" is supported. Radio and checkbox types are not supported in this context. */
3735
3776
  'nldd-combo-box': DefineComponent<NLDDComboBoxProps>;
3736
- /** A simple layout primitive: pick a layout mode, give it a gap, optionally align contents, and add padding. Padding can be set for all sides, per axis (inline/block), or per individual side. Specificity: per side > per axis > all sides. The container owns the space around and between its children; use `nldd-spacer` only for a one-off gap between two different things. A block that is placed in more than one context gets no padding of its own: whoever places it wraps it in a container, so the inset is not counted twice. Responsive padding and gap have sm/md/lg variants. Each variant emits both an @media (viewport) and @container (layout-container) query. When inside a layout-container the @container query wins; otherwise the @media query provides the viewport-based fallback. Layout modes: - `stack` (default): block items, stacked vertically. The "what you expect from DOM flow" mode. - `row`: flex row, no wrapping. Items shrink or overflow. - `wrap`: flex row, items wrap to new lines. - `grid`: CSS grid, auto-fit columns at min 280px wide. - `columns`: CSS multi-column flow, 280px minimum column width, items don't split across column breaks. Alignment maps to the layout's natural axis: - `stack`: vertical = main-axis (justify-content), horizontal = cross-axis (align-items) - `row` / `wrap`: horizontal = main-axis, vertical = cross-axis - `grid`: horizontal = justify-items, vertical = align-items (per cell) - `columns`: alignment props have no effect (CSS multicol doesn't expose alignment) Item order is set per-child via attributes on the slotted children themselves: `<child order="3">` for a fixed position, or `<child sm-order="N">` / `<child md-order="N">` / `<child lg-order="N">` to override per breakpoint (resolved against THIS container's width via @container queries, same scope as the responsive padding/gap). The container observes slot changes and child attribute mutations and bridges these to `--_slot-order` / `--_slot-sm-order` / etc. custom properties on each child's inline style, which the container's CSS then reads via `::slotted(*)` inside @container queries. Cascade: `sm-order` falls back to `order` falls back to `0` at sm (and analogously for md/lg). No-op for `layout="columns"` (CSS multicol has no per-item ordering hook). The `column-count` attribute (1-8) forces an exact column count for `layout="grid"` (overrides auto-fit) and `layout="columns"` (overrides the natural width-driven count). `sm-column-count` / `md-column-count` / `lg-column-count` resolve against this container's OWN width via an `@container (...)` query on the host — not against the viewport. That lets a footer in a narrow sidebar choose its own column count independent of the surrounding page width. `layout="lanes"` packs items into balanced columns using native CSS grid lanes where supported, falling back to CSS multicol (column-order) elsewhere. CSS-only, no JS. Honours `gap` on both axes and `column-count`. Note that nldd-collection's lanes falls back to its own grid rather than to multicol: that component pages, and multicol redistributes the whole set every time load-more adds to it. */
3777
+ /** A simple layout primitive: pick a layout mode, give it a gap, optionally align contents, and add padding. Padding can be set for all sides, per axis (inline/block), or per individual side. Specificity: per side > per axis > all sides. The container owns the space around and between its children; use `nldd-spacer` only for a one-off gap between two different things. A block that is placed in more than one context gets no padding of its own: whoever places it wraps it in a container, so the inset is not counted twice. Responsive padding and gap have sm/md/lg variants. Each variant emits both an @media (viewport) and @container (layout-container) query. When inside a layout-container the @container query wins; otherwise the @media query provides the viewport-based fallback. Layout modes: - `stack` (default): block items, stacked vertically. The "what you expect from DOM flow" mode. - `row`: flex row, no wrapping. Items shrink or overflow. - `wrap`: flex row, items wrap to new lines. - `grid`: CSS grid, auto-fit columns at min 280px wide. - `columns`: CSS multi-column flow, 280px minimum column width, items don't split across column breaks. Alignment maps to the layout's natural axis: - `stack`: vertical = main-axis (justify-content), horizontal = cross-axis (align-items) - `row` / `wrap`: horizontal = main-axis, vertical = cross-axis - `grid`: horizontal = justify-items, vertical = align-items (per cell) - `columns`: alignment props have no effect (CSS multicol doesn't expose alignment) Item order is set per-child via attributes on the slotted children themselves: `<child order="3">` for a fixed position, or `<child sm-order="N">` / `<child md-order="N">` / `<child lg-order="N">` to override per breakpoint (resolved against THIS container's width via @container queries, same scope as the responsive padding/gap). The container observes slot changes and child attribute mutations and bridges these to `--_container-slot-order` / `--_container-slot-sm-order` / etc. custom properties on each child's inline style, which the container's CSS then reads via `::slotted(*)` inside @container queries. Cascade: `sm-order` falls back to `order` falls back to `0` at sm (and analogously for md/lg). No-op for `layout="columns"` (CSS multicol has no per-item ordering hook). The `column-count` attribute (1-8) forces an exact column count for `layout="grid"` (overrides auto-fit) and `layout="columns"` (overrides the natural width-driven count). `sm-column-count` / `md-column-count` / `lg-column-count` resolve against this container's OWN width via an `@container (...)` query on the host — not against the viewport. That lets a footer in a narrow sidebar choose its own column count independent of the surrounding page width. `layout="lanes"` packs items into balanced columns using native CSS grid lanes where supported, falling back to CSS multicol (column-order) elsewhere. CSS-only, no JS. Honours `gap` on both axes and `column-count`. Note that nldd-collection's lanes falls back to its own grid rather than to multicol: that component pages, and multicol redistributes the whole set every time load-more adds to it. */
3737
3778
  'nldd-container': DefineComponent<NLDDContainerProps>;
3738
3779
  /** A text field for a date, with an optional calendar in a popover. The value is always ISO (yyyy-mm-dd); on screen it shows the Dutch notation (dd-mm-yyyy). Typing is not masked: input is accepted generously and normalized only when the field is left. Error messages belong to nldd-form-field, not here. This field reflects only `invalid` / `valid`, like nldd-text-field. */
3739
3780
  'nldd-date-field': DefineComponent<NLDDDateFieldProps>;
@@ -3763,7 +3804,7 @@ declare module 'vue' {
3763
3804
  'nldd-form-section': DefineComponent<NLDDFormSectionProps>;
3764
3805
  /** A section that spans the full width without horizontal padding. Useful for background colors, images, or other content that runs edge to edge. Vertical padding and gap adjust via container queries. */
3765
3806
  'nldd-full-bleed-section': DefineComponent<NLDDFullBleedSectionProps>;
3766
- /** A page header with a media area and a text panel (the main) that can stand in six positions. Every area is rectangular. With `main-width="full"` the media area sits as its own strip above or below the panel rather than behind it. On mobile the media always stacks above the full-width panel. Without media the main fills the whole area; with `main-background="base"` that area gets a border so it stays visible on the base surface. `main-background` gives the panel a surface color from the filled categories. Those carry a pure white or black content color along, so components with `color="inherit"` (title, rich-text) are guaranteed to keep their contrast. */
3807
+ /** The section that says what a page is for: it names the main goal of what you can find there, draws the eye and is the visual welcome. It has a media area and a text panel (the main) that can stand in eight positions. Every area is rectangular. Use it on pages where a visitor first has to know where they are, such as a home or a topic page; where the title already does that, a section with a title is enough. The image in a hero sets the mood and is never the main content, so the panel always stands on it. Over an image the panel keeps a section gap from its edges, so it reads as a panel on the image rather than a frame cut out of it; with `main-width="full"` it is a strip across the whole image, the same gap from the sides. On mobile the image comes first and the panel below it, indented by the section gap and overlapping the image by 48px. For an image beside text without that relation, use a section with an image beside text instead. Without media the main fills the whole area; with `main-background="base"` that area gets a border so it stays visible on the base surface. The hero is the head of a page and sits right under the top bar, so its top padding is half that of the other page sections: the full distance is meant to separate two sections, and under the top bar it reads as a gap. The bottom keeps the full distance to the section below. Set `padding-top` to place a hero elsewhere. By default the panel falls over the bottom of the image and runs on below it (`layout="overlap"`), so the image keeps its height whatever the content. `layout="contained"` keeps the panel on the image, for a short panel or one that stands at the top or along a side. The height of a hero comes from its image: `media-aspect-ratio`, or a fixed `media-height`. The `height` of the other page sections is not used here: as a minimum height for the whole hero it stretched the panel once that sat below the image. A hero given `height` says so in development. `main-background` gives the panel a surface color from the filled categories. Those carry a pure white or black content color along, so components with `color="inherit"` (title, rich-text) are guaranteed to keep their contrast. */
3767
3808
  'nldd-hero': DefineComponent<NLDDHeroProps>;
3768
3809
  /** A customizable icon component that renders SVG icons from a predefined library. Icons are decorative by default: the host gets `aria-hidden="true"` automatically. If you want the icon to be announced by assistive tech, set `aria-hidden="false"` on the consumer side together with an `aria-label`. Sizing: the icon fills whatever sizes it — an `nldd-icon-cell`, a button, a menu item. `size="full"` names that default explicitly. `size="inherit"` makes it follow the surrounding text (1em), for an icon set inline in a sentence. Any spacer-aligned number (16–96) pins a fixed dimension. Reach for `inherit` rather than a global `nldd-icon { width: 1em }` rule in the consumer: such a rule wins over the component's own :host styling and so also shrinks the icons that a cell or button was already sizing correctly. Color: by default the icon inherits its parent's `color`. Set `color` to one of the functional semantics (`primary-content`, `secondary-content`, `accent`, `critical`, `warning`, `success`) or a rijkskleur (`lintblauw`, `paars`, `groen`, …). For a color the system cannot know — the jacket of a cable, a color someone picked — set `custom-color` to any CSS color. */
3769
3810
  'nldd-icon': DefineComponent<NLDDIconProps>;
@@ -3772,7 +3813,7 @@ declare module 'vue' {
3772
3813
  'nldd-icon-cell': DefineComponent<NLDDIconCellProps>;
3773
3814
  /** An editorial line that shows authors or editors: optional avatar or avatars, a name line and supporting text (a role or a date, for instance). Every part is optional. The name line and the supporting text come in as an attribute or as a slot. Use the slots for richer content, such as a `<time datetime="…">` for a machine-readable date or a link to the author's profile. Slotted content replaces the matching attribute: the attribute is the slot's fallback. One avatar you slot as it is, and identity gives it its size. For more than one, slot an `nldd-avatar-group`: that overlaps them and draws the ring in the surface color. Identity does not build that group itself, because the avatars are the consumer's light DOM and a group can only style what arrives as its own child. Set the avatars to decorative (or an `img` to `alt=""`) when the names already stand in the text. On narrow widths (an sm container, 640px and under) with more than one avatar the row of avatars moves above the names, so the text keeps the full width. With one avatar the identity stays on a single line. For a single avatar you can also hand over `avatar-src` (with an optional `avatar-srcset`) as an attribute instead of slotting; its size is fixed at 40px. Slotted avatars take precedence over `avatar-src`. */
3774
3815
  'nldd-identity': DefineComponent<NLDDIdentityProps>;
3775
- /** Wraps a native `<img>` with design-system styling: corner radius variants, aspect-ratio reservation, object-fit/position control, optional caption + credit. Renders as `<figure>` + `<figcaption>` only when a caption or credit is set — otherwise just the image, no extra wrapping. Hybrid source: the `src` attribute renders an internal `<img>`. To use a custom `<img>` or `<picture>` (e.g. with art-direction sources), slot it into the default slot and we'll style and wrap it like our own image. */
3816
+ /** Wraps a native `<img>` with design-system styling: corner radius variants, aspect-ratio reservation, object-fit/position control, optional caption + credit. Renders as `<figure>` + `<figcaption>` only when a caption or credit is set — otherwise just the image, no extra wrapping. Hybrid source: the `src` attribute renders an internal `<img>`. To use a custom `<img>` or `<picture>` (e.g. with art-direction sources), slot it into the default slot and we'll style and wrap it like our own image. Without an image (no `src`, `srcset`, `lqip` or slotted media) it shows a neutral area with an image icon, in the box, shape and caption a real image would get: a place where an image belongs, for a prototype or a pattern, or an image someone forgot. Without `aspect-ratio` that area is 16/9. While the built-in `<img>` loads without an `lqip`, the same area shows without the icon, and it goes once the image is in. */
3776
3817
  'nldd-image': DefineComponent<NLDDImageProps>;
3777
3818
  /** An inline status component for empty state, confirmations and feedback. Fills the container and has no minimum width. */
3778
3819
  'nldd-inline-dialog': DefineComponent<NLDDInlineDialogProps>;
@@ -3784,7 +3825,7 @@ declare module 'vue' {
3784
3825
  'nldd-link': DefineComponent<NLDDLinkProps>;
3785
3826
  /** A container for `nldd-list-item` elements. The `type` attribute switches the list's a11y role and behavior: - `list` (default) — `role="list"`, items `role="listitem"`. Reorderable allowed. - `radiogroup` — `role="radiogroup"`, for a set of `nldd-list-item radio` rows: one choice, laid out as rows so each option can carry a count or a second line. The rows step out of the accessibility tree themselves (`role="none"`), so the radios are the group's own children. The arrows move focus here and activation checks, rather than the selection following focus as it does in `nldd-radio-button-group`. - `tree` — `role="tree"`, items `role="treeitem"`. Branch rows put their child rows in their own `slot="children"`, which the item renders as a `role="group"`. Level, position and set size are NOT authored: the nesting represents the hierarchy, so assistive technology derives them. A branch row must carry `expanded`; the group is hidden while it is false. Visual indentation is the consumer's — repeat a spacer-cell per level. Comes with its own keyboard, see "Tree" below. - `navigation` — host `role="navigation"`, items with `selected` get `aria-current="page"` on their inner `<a>` or `<button>`. - `form` — rows that are not actions themselves: the controls inside them are. A row of a label and a field, a switch, a menu button, or a value you cannot change at all. Semantically the same as `list` (`role="list"`, `role="listitem"`), and everything visual is unchanged; what falls away is the keyboard of a list you walk through. No arrow navigation, so no promise of it either, and no tab stop on the row: Tab goes straight to the controls, in source order, the way it does in any form. Rows that ARE actions (`href`, `button`, `checkbox`, or a segment) contradict that and warn in development. SwiftUI draws the same line between `List` and `Form`, for the same reason. - `listbox` — an accessible, filterable listbox (combobox pattern). The list renders its OWN search input (`role="combobox"`) pinned above the options; `.list__items` becomes `role="listbox"` and items become `role="option"`. Focus stays in the input, the active option moves via `aria-activedescendant`, and filtering is consumer-managed via the `input` event (toggle `[hidden]` on items). See "Listbox" below. Selection state is consumer-managed: the list never mutates `selected` itself. A list you walk through answers to the arrow keys, and there is no attribute to switch that on. Whether the keys do something is not a property of one list: it is what a reader may assume about all of them, and a per-list setting made that unknowable from the outside. It follows the type, which you can see before you touch a key. - ArrowUp / ArrowDown — move focus between the rows there is something to do with. A row of nothing but text is skipped, because focus that leads nowhere is a dead end. - Home / End — the first / last of those rows. - Tab — the list is ONE tab stop, so Tab moves past it rather than through it. Within the current row Tab walks that row's own controls: a chevron beside a checkbox, a menu button at the end. The same controls in the other rows are held out of the tab order (`tabindex="-1"`, or `no-tab` on a design-system control that keeps its tab stop in its own shadow root), and so are this row's once focus leaves the list, so tabbing back in lands on the row again. - Escape — out of a control the row holds, back onto the row. One level up, where Shift+Tab is one step back. On the row itself the list claims nothing, so Escape carries on to whatever holds the list, and a control showing a menu keeps the first press for closing that menu. While focus sits in a control a row holds, the list stands down: those keys are the control's, and a list that took them anyway would pull focus out of a combo box or a text field mid-word. What the row IS — its own link, button or segments — keeps answering here. Arrows move focus only; selection stays consumer-managed. Three types answer differently, and all three say so on screen before you touch a key: a listbox runs its keyboard from its search field, a reorderable list moves rows with the arrows, and a form has no rows to move between at all. In `type="listbox"` the list owns a native `<input role="combobox">` (mirroring how `nldd-combo-box` wires an input to a slotted listbox). Keyboard, handled on the input so focus never leaves it: - ArrowDown / ArrowUp — move the active option among the VISIBLE (non-`[hidden]`) options (wrap around). - Home / End — first / last visible option. - Enter — activate the active option by triggering its inner action (a link navigates, a button fires the consumer's handler). Selection stays consumer-managed. - Escape — clear the search value (and refire `input`). On every active change the input's `aria-activedescendant` is set to the active option's id and the option is scrolled into view. The active option (`_highlighted` on the item, a highlight) is distinct from `selected`. Filtering is the consumer's job: listen to `input` (`{ detail: { value } }`) and toggle `[hidden]` on items; after the visible set changes the list resets the active option to the first visible one. `reorderable` and the roving arrow keys are ignored in listbox mode (listbox has its own keyboard). A tree adds to that keyboard, and counts the rows of an open branch as part of the order the arrows walk: - ArrowRight — opens a closed branch; on an open one it steps to its first child. - ArrowLeft — closes an open branch; on a leaf it steps out to the parent row. - Enter — follows the row: its own link or button, or on a segmented branch the first action that is not the chevron. A branch with only a chevron folds instead. - Space — open and close, the same as Right and Left. Only while focus sits on the row itself: a row that is its own control, and a segmented action you tabbed into, handle both keys themselves. Opening and closing runs through the row's own disclosure control — the segment marked `disclosure`, or the row itself when it is a button. The list activates that control rather than writing `expanded`, so the state keeps being set in one place: the consumer's handler. A row that is a link is never activated this way, since that would navigate away. The tree is one tab stop. Focus lands on the row itself when the row has no control of its own, because that is where `treeitem` sits and it makes assistive technology announce the row rather than a button inside it. Tab then walks the controls of THAT row (a chevron beside a checkbox, say) and leaves the list after the last one. A deliberate deviation: strictly speaking a row with several controls is a `treegrid`, not a `tree`. We keep the tree semantics — level and set size are what matters here, not rows and columns — and borrow the "Tab within the row" behavior from the grid pattern. Should a tree with real columns come up, that is when `treegrid` earns its own type. On reorder (type="list" + reorderable), the list dispatches `nldd-reorder` with `fromIndex` / `toIndex` and expects the consumer to mutate the DOM (or their data model that renders the DOM). Focus is restored to the moved item's drag handle via a single `requestAnimationFrame` — this assumes the consumer reorders **synchronously** in the event handler. Async renderers (React, Vue, …) that update the DOM on a later tick will miss the focus restore and should manage focus themselves after their render commits. */
3786
3827
  'nldd-list': DefineComponent<NLDDListProps>;
3787
- /** A row within an `nldd-list`. Renders as a link when `href` is set, as a checkbox when `checkbox` is set, as a button when `button` is set, or as a plain container otherwise. All cells and segments share one flat slot, in source order. With one action, make the row itself the control (`href`, `button`, `checkbox` or `radio`): the whole row is then one hit area. With two or more, give each its own `nldd-list-item-segment` and leave the row without an action of its own. Both at once nests a control inside a control, and the item warns about that in development. Two rules govern every row: 1. State fills always paint the WIDENED row geometry — the row box extended by the indicator inline inset on both sides — whether or not the row is interactive. Paint never differs between a selected plain row and a selected interactive row. 2. The widened strip belongs to the ROW, never to a segment. A row with any action (its own `href`/`button`/`checkbox`, or a slotted segment) pulls itself outward (`is-interactive` host class → negative inline margin) and pads the row block back by the same amount, so content stays on the grid. A row-wide action owns that padding itself, making the whole widened box one hit area; slotted segments stay in the grid, so their footprint is position-independent and tree columns line up at any depth. By default the divider starts at the row's first text or title cell, so the line lands on the words rather than on whatever leads up to them — an icon, an avatar, a checkbox, or the spacers a tree indents with. Rows of different shapes then still line their dividers up with each other, and a tree's dividers step inward with its indentation. Text inside an `nldd-list-item-segment` counts as the row's content, and the marker is that text cell rather than the action: the action carries its own inline padding, so its edge sits before the words. A row with no text or title cell keeps the full content width. Mark a cell with `divider-start` and/or `divider-end` to place it yourself instead — an explicit marker replaces the derived one entirely, so `divider-start` on the leading cell restores the full-width line. Multiple markers resolve as the union: first `divider-start` through last `divider-end`. A start past the last end is an authoring error — the item DEV-warns and falls back to the full content width. A branch row can disclose its children in two ways: a dedicated `nldd-list-item-segment[disclosure]` segment (only the chevron is clickable), or the row itself as the control (`button` + `expanded`, the whole row toggles). In the second case, mark the chevron's `nldd-icon-cell` with `disclosure` and the row turns it with `expanded` — the same affordance, without having to trade a clickable row for a turning chevron. `checkbox` makes the WHOLE row the control: the inner action becomes a `role="checkbox"` button carrying `aria-checked`, it toggles `checked` on activation and fires `change`. Slot an `nldd-checkbox decorative` (or any glyph) before the text: it only shows the state, since the row already conveys role and state, and a second focusable control would double the tab stops. Do NOT nest a real `<input type="checkbox">` in the action: interactive content inside a `<button>` is invalid HTML and AT announces the button, not the checked state. A `<label>` variant is not offered for the same reason it cannot work — label-to-input association walks the DOM tree, and a slotted input is not a descendant of a label in the shadow root. When it renders as a link, `target` and `rel` are forwarded to the inner `<a>` (e.g. `target="_blank" rel="noopener noreferrer"`). With `target="_blank"` the item also injects a visually hidden "opens in new tab" announcement for assistive technology (WCAG 2.1 SC 3.2.2). The item synchronizes its ARIA with its parent `nldd-list`'s `type`: - `list` parent → `role="listitem"` - `navigation` parent → `role="listitem"` + `aria-current="page"` on the inner `<a>` / `<button>` when `selected` - `listbox` parent → `role="option"` + `aria-selected` reflecting `selected`. The list points its search input's `aria-activedescendant` at the active option via `_highlighted` (separate from `selected`). */
3828
+ /** A row within an `nldd-list`. Renders as a link when `href` is set, as a checkbox when `checkbox` is set, as a button when `button` is set, or as a plain container otherwise. All cells and segments share one flat slot, in source order. With one action, make the row itself the control (`href`, `button`, `checkbox` or `radio`): the whole row is then one hit area. With two or more, give each its own `nldd-list-item-segment` and leave the row without an action of its own. Both at once nests a control inside a control, and the item warns about that in development. Two rules govern every row: 1. State fills always paint the WIDENED row geometry — the row box extended by the indicator inline inset on both sides — whether or not the row is interactive. Paint never differs between a selected plain row and a selected interactive row. 2. The widened strip belongs to the ROW, never to a segment. A row with any action (its own `href`/`button`/`checkbox`, or a slotted segment) pulls itself outward (`is-interactive` host class → negative inline margin) and pads the row block back by the same amount, so content stays on the grid. A row-wide action owns that padding itself, making the whole widened box one hit area; slotted segments stay in the grid, so their footprint is position-independent and tree columns line up at any depth. By default the divider starts at the row's first text or title cell, so the line lands on the words rather than on whatever leads up to them — an icon, an avatar, a checkbox, or the spacers a tree indents with. Rows of different shapes then still line their dividers up with each other, and a tree's dividers step inward with its indentation. Text inside an `nldd-list-item-segment` counts as the row's content, and the marker is that text cell rather than the action: the action carries its own inline padding, so its edge sits before the words. A row with no text or title cell keeps the full content width. Mark a cell with `divider-start` and/or `divider-end` to place it yourself instead — an explicit marker replaces the derived one entirely, so `divider-start` on the leading cell restores the full-width line. Multiple markers resolve as the union: first `divider-start` through last `divider-end`. A start past the last end is an authoring error — the item DEV-warns and falls back to the full content width. A branch row can disclose its children in two ways: a dedicated `nldd-list-item-segment[disclosure]` segment (only the chevron is clickable), or the row itself as the control (`button` + `expanded`, the whole row toggles). In the second case, mark the chevron's `nldd-icon-cell` with `disclosure` and the row turns it with `expanded` — the same affordance, without having to trade a clickable row for a turning chevron. `checkbox` makes the WHOLE row the control: the inner action becomes a `role="checkbox"` button carrying `aria-checked`, it toggles `checked` on activation and fires `change`. Slot an `nldd-checkbox decorative` (or any glyph) before the text: it only shows the state, since the row already conveys role and state, and a second focusable control would double the tab stops. Do NOT nest a real `<input type="checkbox">` in the action: interactive content inside a `<button>` is invalid HTML and AT announces the button, not the checked state. A `<label>` variant is not offered for the same reason it cannot work — label-to-input association walks the DOM tree, and a slotted input is not a descendant of a label in the shadow root. When it renders as a link, `target` and `rel` are forwarded to the inner `<a>` (e.g. `target="_blank" rel="noopener noreferrer"`). With `target="_blank"` the item also injects a visually hidden "opens in new tab" announcement for assistive technology (WCAG 2.1 SC 3.2.2). The item synchronizes its ARIA with its parent `nldd-list`'s `type`: - `list` parent → `role="listitem"` - `navigation` parent → `role="listitem"` + `aria-current` on the inner `<a>` / `<button>` when `current` or `selected`, with `current-type` as its value (`page` unless set) - `listbox` parent → `role="option"` + `aria-selected` reflecting `selected`. The list points its search input's `aria-activedescendant` at the active option via `_highlighted` (separate from `selected`). */
3788
3829
  'nldd-list-item': DefineComponent<NLDDListItemProps>;
3789
3830
  /** A segment inside an `nldd-list-item`: it groups a run of cells and makes just that run clickable. Use it when a row needs more than one segment — a tree row whose chevron expands while the label toggles a checkbox, or a row that navigates with a separate button beside it. Put it in the row where its cells would go: the item has one flat slot, and a segment takes the place of the cells it covers. Where the divider starts or stops is marked on the cells themselves (`divider-start` / `divider-end`), not by the slot a segment sits in. A row is EITHER row-level interactive (`href` / `button` / `checkbox` on the `nldd-list-item`) OR segmented (one or more of these). Both at once nests a control inside a control, which is invalid HTML; the item DEV-warns. Unlike the row-wide action this does not bleed outward: a segment sits between siblings, so an outward inset would overlap them. It owns its inline padding and never drops below the row's control size, so an icon-only one still meets the WCAG 2.5.8 target size — do not add spacer cells inside it for room or hit area, that doubles the space. In a `type="listbox"` list the segment renders as a plain container (no control, not focusable) and DEV-warns: an `option` may not contain interactive descendants. The cells render unchanged, so nothing shifts. */
3790
3831
  'nldd-list-item-segment': DefineComponent<NLDDListItemSegmentProps>;
@@ -3813,7 +3854,7 @@ declare module 'vue' {
3813
3854
  'nldd-one-half-one-half-section': DefineComponent<NLDDOneHalfOneHalfSectionProps>;
3814
3855
  /** A section with a 1/3 sidebar on the left and 2/3 main content on the right. The columns wrap automatically when they become smaller than 280px. Padding and gap adjust via container queries. */
3815
3856
  'nldd-one-third-two-thirds-section': DefineComponent<NLDDOneThirdTwoThirdsSectionProps>;
3816
- /** A page layout with optional sticky header and footer. Without sticky-header, the host is the scroll container and the header is in normal flow. With sticky-header, the header becomes absolute and .page__scroll takes over scrolling, padded by the measured header height. That padding freezes once you scroll, so a collapsing bar cannot drag the content up under the cursor. In root-scroll mode (--context-scroll-mode: root, derived upstream by nldd-app-view) the page stops owning a scroller: the document scrolls and the sticky header/footer stick against the document, offset by --context-inset-top/bottom. The mode is read on connect/resize and reflected to [data-scroll] so the CSS can branch. The page passes those insets on to its own content, with its sticky header and footer added: anything sticky inside (an nldd-sidebar-section, a sticky table head) reads --context-inset-top / --context-inset-bottom and clears every bar above and below it without being told a number. The heights are measured, because a top title bar shrinks as you scroll past its anchor. While the page owns the scroller, only its own bars count: the chrome above the page sits outside that scroller and does not push sticky content down. A page carries the landmarks of a document: its header is the banner, its content the main landmark, its footer the contentinfo. A document has one of each, so a page that sits beside another one cannot have them. Such a page renders a section and a plain div instead, which drops all three at once: a header inside sectioning content is no longer a banner. With `accessible-label` that section is a named region, so there is still one landmark to jump to; without a name it is no landmark at all, which beats an unnamed one. `landmarks` says which of the two a page is, and `auto` (the default) reads it off where the page sits: - in an overlay (nldd-sheet, nldd-modal-dialog, nldd-window, nldd-popover) a region, because the overlay is not the document; - in a pane of nldd-navigation-split-view, nldd-side-by-side-split-view or nldd-stacked-split-view a region, because those place pages beside each other; - anywhere else the page, including the `main` slot of an nldd-bar-split-view, which stacks bars around a single content area. So an app shell has no main until you say which pane holds the primary content, with `landmarks="page"` on that one page. Only the application knows which pane that is. Two pages that both render a main is invalid HTML, and the page says so in development. */
3857
+ /** A page layout with optional sticky header and footer. Without sticky-header, the host is the scroll container and the header is in normal flow. With sticky-header, the header becomes absolute and .page__scroll takes over scrolling, padded by the measured header height. That padding freezes once you scroll, so a collapsing bar cannot drag the content up under the cursor. In root-scroll mode (--context-scroll-mode: root, derived upstream by nldd-shell) the page stops owning a scroller: the document scrolls and the sticky header/footer stick against the document, offset by --context-inset-top/bottom. The mode is read on connect/resize and reflected to [data-scroll] so the CSS can branch. The page passes those insets on to its own content, with its sticky header and footer added: anything sticky inside (an nldd-sidebar-section, a sticky table head) reads --context-inset-top / --context-inset-bottom and clears every bar above and below it without being told a number. The heights are measured, because a top title bar shrinks as you scroll past its anchor. While the page owns the scroller, only its own bars count: the chrome above the page sits outside that scroller and does not push sticky content down. A page carries the landmarks of a document: its header is the banner, its content the main landmark, its footer the contentinfo. A document has one of each, so a page that sits beside another one cannot have them. Such a page renders a section and a plain div instead, which drops all three at once: a header inside sectioning content is no longer a banner. With `accessible-label` that section is a named region, so there is still one landmark to jump to; without a name it is no landmark at all, which beats an unnamed one. `landmarks` says which of the two a page is, and `auto` (the default) reads it off where the page sits: - in an overlay (nldd-sheet, nldd-modal-dialog, nldd-window, nldd-popover) a region, because the overlay is not the document; - in a pane of nldd-navigation-split-view, nldd-side-by-side-split-view or nldd-stacked-split-view a region, because those place pages beside each other; - anywhere else the page, including the `main` slot of an nldd-bar-split-view, which stacks bars around a single content area. So an app shell has no main until you say which pane holds the primary content, with `landmarks="page"` on that one page. Only the application knows which pane that is. Two pages that both render a main is invalid HTML, and the page says so in development. */
3817
3858
  'nldd-page': DefineComponent<NLDDPageProps>;
3818
3859
  /** The footer band at the bottom of a page. Hosts three optional rows in a fixed order: breadcrumbs (top), consumer-defined main content (middle), and a legal-bar (bottom). Dividers are drawn automatically between non-empty rows. Establishes its own container query (`page-footer-container`) so the responsive padding and gap react to the footer's own width, not the viewport. The host has `id="page-footer"` so a skip-link can target it directly. Use the sub-components `nldd-page-footer-legal-bar` and `nldd-page-footer-legal-bar-item` for the bottom row. */
3819
3860
  'nldd-page-footer': DefineComponent<NLDDPageFooterProps>;
@@ -3839,7 +3880,7 @@ declare module 'vue' {
3839
3880
  'nldd-radio-button-field': DefineComponent<NLDDRadioButtonFieldProps>;
3840
3881
  /** Groups nldd-radio-button-field elements, handles keyboard navigation, and forwards name and disabled state to all child fields. Use inside nldd-form-field which provides the group label. */
3841
3882
  'nldd-radio-button-group': DefineComponent<NLDDRadioButtonGroupProps>;
3842
- /** A container for rich text content that automatically applies responsive typography. Uses no shadow DOM so styles apply to all nested elements. Import nldd-rich-text.css globally in your application. The rich text lays out its direct children in a grid: the vertical rhythm between headings, paragraphs and lists, and the width zones below, apply to those children only. A single wrapper `div` without `class`, `style`, `role` or `data-width`, as a markdown renderer or a component root produces it, is passed through with `display: contents`, so its children count as direct. Any other wrapper becomes a single grid item, and the paragraphs inside it lose their spacing. Children are placed in three zones: text (headings, paragraphs, lists, blockquote, div/section) reads at the `main` size; media and tables (img, figure, video, iframe, table) get the `wide` accent; everything else, code blocks and every component, gets the full `full` span with `justify-self: start`, so the room is available without being forced. Overridable per child with `data-width="main" | "wide" | "full"`. In the left-aligned layout, wide and full read as a bleed to the right; with `centered` they are symmetrical. */
3883
+ /** A container for rich text content that automatically applies responsive typography. Uses no shadow DOM so styles apply to all nested elements. Import nldd-rich-text.css globally in your application. The rich text lays out its direct children in a grid: the vertical rhythm between headings, paragraphs and lists, and the width zones below, apply to those children only. A single wrapper `div` without `class`, `style`, `role` or `data-rich-text-width`, as a markdown renderer or a component root produces it, is passed through with `display: contents`, so its children count as direct. Any other wrapper becomes a single grid item, and the paragraphs inside it lose their spacing. The headings keep one size on every width, the one they have on a phone. A heading in running text sits in a column as wide as a line of reading, on any screen, so its relation to the text beside it does not change and it has no reason to grow. Growing, an h2 on a wide screen was more than twice the size of the text, and an article broke into blocks at every heading. Page and section titles do grow: use nldd-title for those. Children are placed in three zones. A child belongs to the text unless it is listed, so it reads at the `main` size and is never wider than a line: text (headings, paragraphs, lists, blockquote, div/section) and every component that is not named below, such as nldd-box, nldd-card, nldd-banner, nldd-list and a button, and code (pre, nldd-code-viewer), which scrolls inside its block when a line is longer. Media, tables and a step bar (img, figure, video, iframe, table, nldd-table, nldd-image, nldd-step-bar) get the `wide` accent. What needs the room gets the `full` span: hr, nldd-collection and nldd-container. A child takes the room it needs inside its zone (`justify-self: start`), so the room is available without being forced. Overridable per child with `data-rich-text-width="main" | "wide" | "full"`. In the left-aligned layout, wide and full read as a bleed to the right; with `centered` they are symmetrical. */
3843
3884
  'nldd-rich-text': DefineComponent<NLDDRichTextProps>;
3844
3885
  /** A search input with a leading search icon, an optional dismiss button, and an optional search button. */
3845
3886
  'nldd-search-field': DefineComponent<NLDDSearchFieldProps>;
@@ -3848,9 +3889,11 @@ declare module 'vue' {
3848
3889
  'nldd-segmented-control-item': DefineComponent<NLDDSegmentedControlItemProps>;
3849
3890
  /** An overlay component that slides in from the side or bottom of the screen. Based on the native <dialog> element for built-in accessibility, focus management, and Escape key support. On small (sm) viewports the sheet always renders as a bottom sheet, regardless of the configured placement. Render the sheet at the document root (teleport/portal it to `document.body`), never inside a split view's content flow: as a slotted flex child it would steal pane height (see `nldd-split-view-pane`). A sheet holds a whole nldd-page: an nldd-top-title-bar in its header slot, the content, and a footer when there are actions. The page behaves as it does anywhere else, with only the middle scrolling, and the text of the bar is also the sheet's accessible name. Do not build a header of your own. Open and close it with `open`, bound to your state together with the close event: the sheet clears `open` itself when the user closes it. show() and hide() do the same for code without a binding. Keep the sheet in the DOM rather than mounting it when it opens, or the animations are skipped. */
3850
3891
  'nldd-sheet': DefineComponent<NLDDSheetProps>;
3892
+ /** The required root shell of a Nederlandse Digitale Dienst application. Always contains a split view or an nldd-page as direct content. The document font comes from the package stylesheet (`@nldd/design-system/styles`), not from this component: it gives `body` the body font and content color as soon as a shell is on the page, inside `@layer reset` so any rule of your own wins. Import only the tokens (`/styles/tokens`) and text you write in the light DOM keeps the browser default. Set background="tinted" to give the whole application a tinted background. All descendants read --context-parent-background-color via --_shell-background-color automatically. Individual components can override locally with their own background attribute. The same background color is forced on `document.body` so that browser- chrome surfaces (iOS overscroll bounce, status bar, page-margin areas) blend with the app instead of revealing the user-agent's default white. Cleared when the shell disconnects. The app scrolls the DOCUMENT (root mode) or lets each `nldd-page` scroll inside its pane (nested mode). The mode is derived from the outermost horizontal split view: one column means the document scrolls, several columns mean the panes do. An app without such a split view is a single column at every width and therefore scrolls the document too — nested scrolling would cost it the rubber-band and the collapsing browser toolbar on iOS for nothing. Set `--context-scroll-mode` on the `nldd-shell` itself to override the derived mode; an inherited value loses from it. In nested scroll mode `overscroll-behavior: none` is set on `document.documentElement` and `document.body` while the shell is connected. Combined with `overscroll-behavior: contain` on `nldd-page`'s scroll target, this prevents iOS rubber-band on the viewport when scroll gestures land outside an `nldd-page` (e.g. on a top-bar). In root scroll mode the document itself is the scroller, so this is lifted to let the native rubber-band happen. Cleared on last disconnect. */
3893
+ 'nldd-shell': DefineComponent<NLDDShellProps>;
3851
3894
  /** A horizontal split view with multiple equal panes side by side. The number of panes is set via the `panes` attribute. Each pane automatically gets a numbered slot: pane-1, pane-2, etc. Panes that do not fit the available width are automatically hidden, from right to left: `pane-1` is the last to go. Put the main content in `pane-1` and an inspector or detail in the last pane. */
3852
3895
  'nldd-side-by-side-split-view': DefineComponent<NLDDSideBySideSplitViewProps>;
3853
- /** A page section with a left sidebar alongside the main content. - **Wide (section >= 1008px):** two columns. The sidebar is a sticky, scrollable tinted box (max-width 320px) beside the main content. Its sticky top/bottom insets default to 16px; override with `sticky-top` / `sticky-bottom` so it clears other sticky page elements (e.g. a sticky header). - **Narrow (section < 1008px):** the sidebar collapses behind a sheet (a left panel on md+ viewports, a bottom sheet on mobile), and the host reflects a `collapsed` attribute. The consumer owns the trigger: place any chrome (a button, a chosen-filters bar, …) wherever you want, show it only while collapsed (e.g. `nldd-sidebar-section[collapsed] .my-trigger { … }` or by reading `collapsed` / listening to `collapse-change`), and call `show()` / `toggle()` to open the sheet. Bind `aria-expanded` via the `open`/`close` events. The sheet gets a sticky title bar by default — the `sidebar-label` as title plus a "Sluit" button — overridable via the `sheet-top-title-bar` slot. The sidebar content lives in `slot="sidebar"`. Its slot outlet moves between the box (expanded) and the sheet (collapsed) so there is a single, never-duplicated copy — the light DOM (and its state) is preserved across the switch. The box <-> sheet switch follows the section's OWN width (a ResizeObserver on the host), not the viewport — so a sidebar-section in a narrow column or a split-view pane collapses to the sheet just like one in a narrow viewport, and the sidebar never stacks above or crowds the main. Set `no-collapse` to opt out: a narrow section then stacks the sidebar (full-width) above the main instead of using a sheet. Inherits block `padding` and `height` from PageSectionMixin. */
3896
+ /** A page section with a left sidebar alongside the main content. - **Wide (section >= 1008px):** two columns. The sidebar is a sticky, scrollable box (max-width 320px) beside the main content. It takes the surface of the section around it and is edged by a divider line, so it reads as a block without drawing the eye away from the main. Its sticky top/bottom insets default to 16px; override with `sticky-top` / `sticky-bottom` so it clears other sticky page elements (e.g. a sticky header). - **Narrow (section < 1008px):** the sidebar collapses behind a sheet (a left panel on md+ viewports, a bottom sheet on mobile), and the host reflects a `collapsed` attribute. The consumer owns the trigger: place any chrome (a button, a chosen-filters bar, …) wherever you want, show it only while collapsed (e.g. `nldd-sidebar-section[collapsed] .my-trigger { … }` or by reading `collapsed` / listening to `collapse-change`), and call `show()` / `toggle()` to open the sheet. Bind `aria-expanded` via the `open`/`close` events. The sheet gets a sticky title bar by default — the `sidebar-label` as title plus a "Sluit" button — overridable via the `sheet-top-title-bar` slot. The sidebar content lives in `slot="sidebar"`. Its slot outlet moves between the box (expanded) and the sheet (collapsed) so there is a single, never-duplicated copy — the light DOM (and its state) is preserved across the switch. The box <-> sheet switch follows the section's OWN width (a ResizeObserver on the host), not the viewport — so a sidebar-section in a narrow column or a split-view pane collapses to the sheet just like one in a narrow viewport, and the sidebar never stacks above or crowds the main. Set `no-collapse` to opt out: a narrow section then stacks the sidebar (full-width) above the main instead of using a sheet. Inherits block `padding` and `height` from PageSectionMixin. */
3854
3897
  'nldd-sidebar-section': DefineComponent<NLDDSidebarSectionProps>;
3855
3898
  /** A basic section with responsive padding and gap based on container size. Contains optional header and footer slots. The padding and spacing between slots adjust automatically via container queries. Use one section per content block and repeat the section rather than building columns inside one: the section sets the reading width and the padding itself. For two columns there are nldd-one-half-one-half-section, nldd-two-thirds-one-third-section, nldd-one-third-two-thirds-section and nldd-sidebar-section. Give a section its surface with `background` instead of a background color of your own; that is how the components inside know which surface they are on. */
3856
3899
  'nldd-simple-section': DefineComponent<NLDDSimpleSectionProps>;
@@ -3868,12 +3911,14 @@ declare module 'vue' {
3868
3911
  'nldd-split-view-pane': DefineComponent<NLDDSplitViewPaneProps>;
3869
3912
  /** A vertical split view with multiple stacked panes. The number of panes is set via the `panes` attribute. Each pane automatically gets a numbered slot: pane-1, pane-2, etc. Panes that do not fit the available height are automatically hidden. */
3870
3913
  'nldd-stacked-split-view': DefineComponent<NLDDStackedSplitViewProps>;
3871
- /** A narrow, page-wide status bar (24px) with a deep background color per variant. Use it for persistent system state: an outage, planned maintenance, a draft view or a recording in progress. The bar deliberately shows no icon and supports text only. The text itself has to name the status ("Storing: …", "Gepland onderhoud …"), so the meaning does not follow from color alone (WCAG 1.4.1). Keep the text short: the bar shows one line and truncates with an ellipsis, certainly on narrower screens. For a long message with a lot of information only the essence belongs in the bar. Point to a separate page or sheet for the rest (through `href` or `button`, for instance), where the user can read on. The whole bar can be clickable: set `href` (renders an `<a>`) or `button` (renders a `<button>`; listen for the native `click` event). Without either the bar is static. On interaction a chevron appears as an affordance. One action per bar at most; several actions, or links in running text, belong in nldd-banner. role and aria-live are set automatically from the variant: - critical → role="alert" (implies aria-live="assertive"; interrupts the screen reader) - others → role="status" aria-live="polite" Not overridable. If you need a quieter component, pick a different one. Use `critical` only for a real emergency: role="alert" interrupts the screen reader on every change of the content, so do not put text in it that changes regularly (a counting-down timer, for example). */
3914
+ /** A narrow, page-wide status bar (24px) with a deep background color per variant. Use it for persistent system state: an outage, planned maintenance, a draft view or a recording in progress. The bar deliberately shows no icon and supports text only. The text itself has to name the status ("Storing: …", "Gepland onderhoud …"), so the meaning does not follow from color alone (WCAG 1.4.1). Keep the text short: the bar shows one line and truncates with an ellipsis, certainly on narrower screens. For a long message with a lot of information only the essence belongs in the bar. Point to a separate page or sheet for the rest (through `href` or `button`, for instance), where the user can read on. The whole bar can be clickable: set `href` (renders an `<a>`) or `button` (renders a `<button>`; listen for the native `click` event). Without either the bar is static. On interaction a chevron appears as an affordance. One action per bar at most; several actions, or links in running text, belong in nldd-banner. The bar is the first thing on the screen: above nldd-top-navigation-bar or nldd-top-title-bar, across the whole app, also when a split view shows several panes. It reports the state of the service, not of one page, so it never sits inside the content or below a top bar. Below a top bar it says so in development. role and aria-live are set automatically from the variant: - critical → role="alert" (implies aria-live="assertive"; interrupts the screen reader) - others → role="status" aria-live="polite" Not overridable. If you need a quieter component, pick a different one. Use `critical` only for a real emergency: role="alert" interrupts the screen reader on every change of the content, so do not put text in it that changes regularly (a counting-down timer, for example). */
3872
3915
  'nldd-status-bar': DefineComponent<NLDDStatusBarProps>;
3873
- /** Shows where you are in a process of several steps: a row of discs with a number (or a check mark on what is done), a label under each and a line connecting them. Mark the step you are on with `status="current"`. The parent derives the rest from its position: `past` before it, `future` after. With none marked, step 1 is current. With more than one, the last one wins and a warning goes to the console in a dev build: a flow that forgets to clear the previous step still points at the furthest one. A `status="past"` or `status="future"` on another step overrides what is derived for that step, for flows that jump back or skip a step. One attribute, the same three values as `nldd-timeline-track-cell`, so a flow reads in one vocabulary whether it runs across or down. Horizontal only. For steps under each other, build an `nldd-list` with an `nldd-timeline-track-cell` and an `nldd-title-cell` per row: vertical steps usually carry more than a title, and a list row already does that. Below the sm breakpoint (a container query, so measured on the component itself rather than on the viewport) it folds into one line of text plus a segmented bar. The full list of steps stays in the DOM, only visually hidden, so assistive software hears no less than a wide screen shows. Accessibility: a `nav` with a label, holding a `role="list"` with a `role="listitem"` per step. The current step gets `aria-current="step"`, the only notion WAI-ARIA has for this. "Done" and "still to do" do not exist as ARIA tokens and travel along as visually hidden text instead. */
3874
- 'nldd-step-indicator': DefineComponent<NLDDStepIndicatorProps>;
3875
- /** One step in an `nldd-step-indicator`. `status="current"` marks the step you are on; the parent derives the status of the others and the number of each, which live here as internal state rather than as public API. `past` and `future` override what is derived for this step. */
3876
- 'nldd-step-indicator-item': DefineComponent<NLDDStepIndicatorItemProps>;
3916
+ /** Shows where you are in a process of several steps: a row of discs with a number (or a check mark on what is done), a label under each and a line connecting them. Other systems call this a stepper or a progress indicator. Mark the step you are on with `status="current"`. The parent derives the rest from its position: `past` before it, `future` after. With none marked, step 1 is current. With more than one, the last one wins and a warning goes to the console in a dev build: a flow that forgets to clear the previous step still points at the furthest one. A `status="past"` or `status="future"` on another step overrides what is derived for that step, for flows that jump back or skip a step. One attribute, the same three values as `nldd-step-cell`, so a flow reads in one vocabulary whether it runs across or down. Horizontal only. For steps under each other, build an `nldd-list` with an `nldd-step-cell` and an `nldd-title-cell` per row: vertical steps usually carry more than a title, and a list row already does that. Below the sm breakpoint (a container query, so measured on the component itself rather than on the viewport) it folds into one line of text plus a segmented bar. The full list of steps stays in the DOM, only visually hidden, so assistive software hears no less than a wide screen shows. Accessibility: a `nav` with a label, holding a `role="list"` with a `role="listitem"` per step. The current step gets `aria-current="step"`, the only notion WAI-ARIA has for this. "Done" and "still to do" do not exist as ARIA tokens and travel along as visually hidden text instead. */
3917
+ 'nldd-step-bar': DefineComponent<NLDDStepBarProps>;
3918
+ /** One step in an `nldd-step-bar`. `status="current"` marks the step you are on; the parent derives the status of the others and the number of each, which live here as internal state rather than as public API. `past` and `future` override what is derived for this step. */
3919
+ 'nldd-step-bar-item': DefineComponent<NLDDStepBarItemProps>;
3920
+ /** A cell that draws steps under each other in an `nldd-list`: a vertical track with a dot per row, colored by how far along each step is. It is the vertical counterpart of `nldd-step-bar`, with the same `status` values. Other systems call this a stepper, a progress list or a timeline. The row's block padding belongs to the cell itself (via `--context-cell-padding-block`), so the line spans the cell's own box edge to edge and consecutive steps connect without gaps. By default the dot is small and empty, for steps without a number, such as the moments in the history of a case. With `size="md"` it grows big enough for a number or an icon. The size belongs to the lane rather than to the content: every dot in a list is the same size, or the track would jump. */
3921
+ 'nldd-step-cell': DefineComponent<NLDDStepCellProps>;
3877
3922
  /** A numeric control with increment and decrement buttons. */
3878
3923
  'nldd-stepper': DefineComponent<NLDDStepperProps>;
3879
3924
  /** A toggle control for on/off settings. Prefer nldd-switch-field for labeled usage — it combines the switch with a visible label. Direct use of nldd-switch requires an accessible-label attribute for screen reader accessibility. */
@@ -3899,8 +3944,6 @@ declare module 'vue' {
3899
3944
  'nldd-time-field': DefineComponent<NLDDTimeFieldProps>;
3900
3945
  /** Two columns, hours and minutes, that slide like a wheel past the selection in the middle. The component works on its own (inline on a page, in a filter panel) and also sits in the popover of nldd-time-field. Values are always 24-hour `HH:mm`. Scrolling is choosing: whatever comes to rest in the middle is the value. The keyboard drives that same selection, because that is what a wheel is: hour and minute are each a spinbutton. The columns underneath are aria-hidden, so the same values are not read out twice. */
3901
3946
  'nldd-time-picker': DefineComponent<NLDDTimePickerProps>;
3902
- /** A cell component for displaying timeline track indicators in lists. Shows a vertical line with a dot indicating timeline position and state. The row's block padding belongs to the cell itself (via `--context-cell-padding-block`), so the line spans the cell's own box edge to edge and consecutive steps connect without gaps. By default the cell is a bare track: a line with a dot per row, for a timeline of events. With `size="md"` the dot grows big enough for a number or an icon and you have a list of steps under each other, the vertical counterpart of `nldd-step-indicator`. The size belongs to the lane rather than to the content: every dot in a list is the same size, or the track would jump. */
3903
- 'nldd-timeline-track-cell': DefineComponent<NLDDTimelineTrackCellProps>;
3904
3947
  /** A title bar with an optional overline, title, and supporting text on the left, and a slot at the end of the title line on the right. The title comes from `text`, with `heading-level` for its place in the heading structure. `size` is how it looks, `heading-level` what it is, and the two are set apart. `overline` and `supporting-text` go above and below it. Each of the three has a slot in the same place for content that is more than text, and a filled slot takes the place of the attribute. */
3905
3948
  'nldd-title': DefineComponent<NLDDTitleProps>;
3906
3949
  /** A cell component for displaying a title with optional overline and supporting text in lists. `vertical-alignment="center"` (default) stretches the cell to fill the full row height and centers its content within that space. Use `min-height` to set a minimum centered region. For strict top alignment without a minimum height, use `vertical-alignment="top"`. Each text region (overline, title, supporting text) accepts either a string attribute or slotted DOM content. The slot is the source of truth: if the consumer provides slotted content, it replaces the attribute-based render for that region. Use slots when you need inline elements like `<nldd-tag>`, `<nldd-icon>` or other components mixed with text. Note that `query` highlighting and `**bold**` parsing only apply to the attribute path — slotted content is rendered as-is. */