@nldd/design-system 0.8.91 → 0.8.93

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 (521) hide show
  1. package/NOTICES.md +9 -27
  2. package/README.md +39 -26
  3. package/custom-elements.json +1936 -1460
  4. package/dist/components/actions/button/button.d.ts +22 -5
  5. package/dist/components/actions/button/button.d.ts.map +1 -1
  6. package/dist/components/actions/button/button.js +48 -12
  7. package/dist/components/actions/button/button.js.map +1 -1
  8. package/dist/components/actions/button/button.styles.d.ts.map +1 -1
  9. package/dist/components/actions/button/button.styles.js +3 -1
  10. package/dist/components/actions/button/button.styles.js.map +1 -1
  11. package/dist/components/actions/button/button.template.d.ts.map +1 -1
  12. package/dist/components/actions/button/button.template.js +5 -4
  13. package/dist/components/actions/button/button.template.js.map +1 -1
  14. package/dist/components/actions/button-group/button-group.d.ts +48 -3
  15. package/dist/components/actions/button-group/button-group.d.ts.map +1 -1
  16. package/dist/components/actions/button-group/button-group.js +104 -11
  17. package/dist/components/actions/button-group/button-group.js.map +1 -1
  18. package/dist/components/actions/button-group/button-group.styles.d.ts.map +1 -1
  19. package/dist/components/actions/button-group/button-group.styles.js +64 -4
  20. package/dist/components/actions/button-group/button-group.styles.js.map +1 -1
  21. package/dist/components/actions/icon-button/icon-button.d.ts +7 -6
  22. package/dist/components/actions/icon-button/icon-button.d.ts.map +1 -1
  23. package/dist/components/actions/icon-button/icon-button.js +7 -12
  24. package/dist/components/actions/icon-button/icon-button.js.map +1 -1
  25. package/dist/components/actions/icon-button/icon-button.template.d.ts.map +1 -1
  26. package/dist/components/actions/icon-button/icon-button.template.js +9 -5
  27. package/dist/components/actions/icon-button/icon-button.template.js.map +1 -1
  28. package/dist/components/actions/menu/menu.d.ts +29 -29
  29. package/dist/components/actions/menu/menu.d.ts.map +1 -1
  30. package/dist/components/actions/menu/menu.js +53 -53
  31. package/dist/components/actions/menu/menu.js.map +1 -1
  32. package/dist/components/actions/menu/menu.styles.d.ts.map +1 -1
  33. package/dist/components/actions/menu/menu.styles.js +4 -0
  34. package/dist/components/actions/menu/menu.styles.js.map +1 -1
  35. package/dist/components/actions/menu/menu.template.d.ts.map +1 -1
  36. package/dist/components/actions/menu/menu.template.js +8 -2
  37. package/dist/components/actions/menu/menu.template.js.map +1 -1
  38. package/dist/components/actions/toolbar/toolbar.d.ts +24 -10
  39. package/dist/components/actions/toolbar/toolbar.d.ts.map +1 -1
  40. package/dist/components/actions/toolbar/toolbar.js +57 -26
  41. package/dist/components/actions/toolbar/toolbar.js.map +1 -1
  42. package/dist/components/actions/toolbar/toolbar.styles.js +7 -7
  43. package/dist/components/actions/toolbar/toolbar.template.d.ts.map +1 -1
  44. package/dist/components/actions/toolbar/toolbar.template.js +5 -3
  45. package/dist/components/actions/toolbar/toolbar.template.js.map +1 -1
  46. package/dist/components/components.js +2060 -1065
  47. package/dist/components/content/avatar/avatar.d.ts +25 -10
  48. package/dist/components/content/avatar/avatar.d.ts.map +1 -1
  49. package/dist/components/content/avatar/avatar.js +25 -18
  50. package/dist/components/content/avatar/avatar.js.map +1 -1
  51. package/dist/components/content/avatar/avatar.template.d.ts.map +1 -1
  52. package/dist/components/content/avatar/avatar.template.js +7 -3
  53. package/dist/components/content/avatar/avatar.template.js.map +1 -1
  54. package/dist/components/content/avatar-group/avatar-group.d.ts +1 -1
  55. package/dist/components/content/avatar-group/avatar-group.js +1 -1
  56. package/dist/components/content/avatar-group/avatar-group.template.d.ts.map +1 -1
  57. package/dist/components/content/avatar-group/avatar-group.template.js +6 -2
  58. package/dist/components/content/avatar-group/avatar-group.template.js.map +1 -1
  59. package/dist/components/content/code-viewer/code-viewer.d.ts.map +1 -1
  60. package/dist/components/content/code-viewer/code-viewer.js +12 -2
  61. package/dist/components/content/code-viewer/code-viewer.js.map +1 -1
  62. package/dist/components/content/icon/icon.d.ts +20 -8
  63. package/dist/components/content/icon/icon.d.ts.map +1 -1
  64. package/dist/components/content/icon/icon.js +32 -12
  65. package/dist/components/content/icon/icon.js.map +1 -1
  66. package/dist/components/content/identity/identity.d.ts +1 -1
  67. package/dist/components/content/identity/identity.js +1 -1
  68. package/dist/components/content/identity/identity.template.d.ts.map +1 -1
  69. package/dist/components/content/identity/identity.template.js +4 -1
  70. package/dist/components/content/identity/identity.template.js.map +1 -1
  71. package/dist/components/content/image/image.template.d.ts.map +1 -1
  72. package/dist/components/content/image/image.template.js +7 -2
  73. package/dist/components/content/image/image.template.js.map +1 -1
  74. package/dist/components/content/rich-text/rich-text.d.ts +18 -9
  75. package/dist/components/content/rich-text/rich-text.d.ts.map +1 -1
  76. package/dist/components/content/rich-text/rich-text.js +24 -15
  77. package/dist/components/content/rich-text/rich-text.js.map +1 -1
  78. package/dist/components/content/tag/tag.d.ts +2 -2
  79. package/dist/components/content/tag/tag.d.ts.map +1 -1
  80. package/dist/components/content/tag/tag.js +5 -5
  81. package/dist/components/content/tag/tag.js.map +1 -1
  82. package/dist/components/content/tag/tag.template.js +2 -2
  83. package/dist/components/content/title/title.d.ts +30 -6
  84. package/dist/components/content/title/title.d.ts.map +1 -1
  85. package/dist/components/content/title/title.js +72 -8
  86. package/dist/components/content/title/title.js.map +1 -1
  87. package/dist/components/content/title/title.styles.d.ts.map +1 -1
  88. package/dist/components/content/title/title.styles.js +41 -4
  89. package/dist/components/content/title/title.styles.js.map +1 -1
  90. package/dist/components/content/title/title.template.d.ts +2 -1
  91. package/dist/components/content/title/title.template.d.ts.map +1 -1
  92. package/dist/components/content/title/title.template.js +33 -5
  93. package/dist/components/content/title/title.template.js.map +1 -1
  94. package/dist/components/content/token/token.d.ts +15 -5
  95. package/dist/components/content/token/token.d.ts.map +1 -1
  96. package/dist/components/content/token/token.i18n.d.ts +7 -0
  97. package/dist/components/content/token/token.i18n.d.ts.map +1 -0
  98. package/dist/components/content/token/token.i18n.js +6 -0
  99. package/dist/components/content/token/token.i18n.js.map +1 -0
  100. package/dist/components/content/token/token.js +55 -14
  101. package/dist/components/content/token/token.js.map +1 -1
  102. package/dist/components/content/token/token.template.js +4 -4
  103. package/dist/components/content/token/token.template.js.map +1 -1
  104. package/dist/components/{dist-CENYEz7C.js → dist-B5ie2Bo9.js} +1 -1
  105. package/dist/components/{dist-D_ckX1sK.js → dist-BUu-NW5O.js} +1 -1
  106. package/dist/components/{dist-Y54Lma86.js → dist-CGOykrJw.js} +2 -2
  107. package/dist/components/{dist-CYLM5ciE.js → dist-CQzaKTa8.js} +1 -1
  108. package/dist/components/{dist-yyE8P2O6.js → dist-CSYXsT7W.js} +2 -2
  109. package/dist/components/{dist-BLaE_n_F.js → dist-CoUVHSu-.js} +1 -1
  110. package/dist/components/{dist-DHA-0RyT.js → dist-Dn3c5gfb.js} +7 -1
  111. package/dist/components/{dist-BeymuiGt.js → dist-Dxn9Up8K.js} +3 -3
  112. package/dist/components/{dist-Dh_b9r4M.js → dist-M6GKopqu.js} +1 -1
  113. package/dist/components/{dist-TCqV9dho.js → dist-OlffRM7-.js} +1 -1
  114. package/dist/components/{dist-DkZlotgT.js → dist-RPaf2J9c.js} +2 -2
  115. package/dist/components/forms/form/form.d.ts +18 -7
  116. package/dist/components/forms/form/form.d.ts.map +1 -1
  117. package/dist/components/forms/form/form.js +18 -7
  118. package/dist/components/forms/form/form.js.map +1 -1
  119. package/dist/components/forms/form-actions/form-actions.d.ts +1 -1
  120. package/dist/components/forms/form-actions/form-actions.js +1 -1
  121. package/dist/components/forms/form-field/form-field.d.ts +12 -1
  122. package/dist/components/forms/form-field/form-field.d.ts.map +1 -1
  123. package/dist/components/forms/form-field/form-field.js +12 -1
  124. package/dist/components/forms/form-field/form-field.js.map +1 -1
  125. package/dist/components/forms/form-section/form-section.d.ts +3 -3
  126. package/dist/components/forms/form-section/form-section.js +8 -8
  127. package/dist/components/forms/form-section/form-section.js.map +1 -1
  128. package/dist/components/forms/validation-list/validation-list.d.ts +7 -4
  129. package/dist/components/forms/validation-list/validation-list.d.ts.map +1 -1
  130. package/dist/components/forms/validation-list/validation-list.js +7 -4
  131. package/dist/components/forms/validation-list/validation-list.js.map +1 -1
  132. package/dist/components/{icon-C_zwJZ_g.js → icon-DWNVcttg.js} +4 -4
  133. package/dist/components/{icon-button-CEz4MB9H.js → icon-button-hO6k8W63.js} +20 -20
  134. package/dist/components/index.d.ts +1 -1
  135. package/dist/components/index.js +1 -1
  136. package/dist/components/inputs/checkbox/checkbox.template.d.ts.map +1 -1
  137. package/dist/components/inputs/checkbox/checkbox.template.js +11 -5
  138. package/dist/components/inputs/checkbox/checkbox.template.js.map +1 -1
  139. package/dist/components/inputs/combo-box/combo-box.d.ts +4 -1
  140. package/dist/components/inputs/combo-box/combo-box.d.ts.map +1 -1
  141. package/dist/components/inputs/combo-box/combo-box.js +4 -1
  142. package/dist/components/inputs/combo-box/combo-box.js.map +1 -1
  143. package/dist/components/inputs/combo-box/combo-box.template.js +2 -2
  144. package/dist/components/inputs/date-field/date-field.d.ts +1 -1
  145. package/dist/components/inputs/date-field/date-field.js +1 -1
  146. package/dist/components/inputs/date-field/date-field.template.d.ts.map +1 -1
  147. package/dist/components/inputs/date-field/date-field.template.js +5 -3
  148. package/dist/components/inputs/date-field/date-field.template.js.map +1 -1
  149. package/dist/components/inputs/date-picker/date-picker.d.ts +1 -1
  150. package/dist/components/inputs/date-picker/date-picker.js +1 -1
  151. package/dist/components/inputs/date-picker/date-picker.template.js +1 -1
  152. package/dist/components/inputs/dropdown/dropdown.template.js +3 -3
  153. package/dist/components/inputs/file-field/file-field.template.js +1 -1
  154. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.template.js +2 -2
  155. package/dist/components/inputs/number-field/number-field.styles.js +4 -4
  156. package/dist/components/inputs/password-field/password-field.template.js +2 -2
  157. package/dist/components/inputs/radio-button/radio-button.styles.d.ts.map +1 -1
  158. package/dist/components/inputs/radio-button/radio-button.styles.js +0 -10
  159. package/dist/components/inputs/radio-button/radio-button.styles.js.map +1 -1
  160. package/dist/components/inputs/radio-button/radio-button.template.d.ts.map +1 -1
  161. package/dist/components/inputs/radio-button/radio-button.template.js +6 -4
  162. package/dist/components/inputs/radio-button/radio-button.template.js.map +1 -1
  163. package/dist/components/inputs/radio-button-field/radio-button-field.styles.d.ts.map +1 -1
  164. package/dist/components/inputs/radio-button-field/radio-button-field.styles.js +0 -10
  165. package/dist/components/inputs/radio-button-field/radio-button-field.styles.js.map +1 -1
  166. package/dist/components/inputs/radio-button-field/radio-button-field.template.d.ts.map +1 -1
  167. package/dist/components/inputs/radio-button-field/radio-button-field.template.js +4 -3
  168. package/dist/components/inputs/radio-button-field/radio-button-field.template.js.map +1 -1
  169. package/dist/components/inputs/search-field/search-field.d.ts +24 -24
  170. package/dist/components/inputs/search-field/search-field.d.ts.map +1 -1
  171. package/dist/components/inputs/search-field/search-field.js +40 -40
  172. package/dist/components/inputs/search-field/search-field.js.map +1 -1
  173. package/dist/components/inputs/search-field/search-field.template.d.ts.map +1 -1
  174. package/dist/components/inputs/search-field/search-field.template.js +4 -2
  175. package/dist/components/inputs/search-field/search-field.template.js.map +1 -1
  176. package/dist/components/inputs/segmented-control/segmented-control.d.ts +3 -0
  177. package/dist/components/inputs/segmented-control/segmented-control.d.ts.map +1 -1
  178. package/dist/components/inputs/segmented-control/segmented-control.js +6 -0
  179. package/dist/components/inputs/segmented-control/segmented-control.js.map +1 -1
  180. package/dist/components/inputs/segmented-control/segmented-control.styles.d.ts.map +1 -1
  181. package/dist/components/inputs/segmented-control/segmented-control.styles.js +0 -10
  182. package/dist/components/inputs/segmented-control/segmented-control.styles.js.map +1 -1
  183. package/dist/components/inputs/segmented-control/segmented-control.template.js +5 -5
  184. package/dist/components/inputs/segmented-control/segmented-control.template.js.map +1 -1
  185. package/dist/components/inputs/switch/switch.template.js +1 -1
  186. package/dist/components/inputs/text-editor/text-editor.links.js +1 -1
  187. package/dist/components/inputs/text-editor/text-editor.markdown.js +1 -1
  188. package/dist/components/inputs/text-editor/text-editor.mentions.d.ts.map +1 -1
  189. package/dist/components/inputs/text-editor/text-editor.mentions.js +78 -2
  190. package/dist/components/inputs/text-editor/text-editor.mentions.js.map +1 -1
  191. package/dist/components/inputs/text-field/text-field.template.js +2 -2
  192. package/dist/components/inputs/time-field/time-field.d.ts +1 -1
  193. package/dist/components/inputs/time-field/time-field.js +1 -1
  194. package/dist/components/inputs/time-field/time-field.template.d.ts.map +1 -1
  195. package/dist/components/inputs/time-field/time-field.template.js +5 -3
  196. package/dist/components/inputs/time-field/time-field.template.js.map +1 -1
  197. package/dist/components/inputs/time-picker/time-picker.d.ts +1 -1
  198. package/dist/components/inputs/time-picker/time-picker.js +1 -1
  199. package/dist/components/inputs/toggle-button/toggle-button.styles.d.ts.map +1 -1
  200. package/dist/components/inputs/toggle-button/toggle-button.styles.js +0 -9
  201. package/dist/components/inputs/toggle-button/toggle-button.styles.js.map +1 -1
  202. package/dist/components/inputs/toggle-button/toggle-button.template.d.ts.map +1 -1
  203. package/dist/components/inputs/toggle-button/toggle-button.template.js +7 -6
  204. package/dist/components/inputs/toggle-button/toggle-button.template.js.map +1 -1
  205. package/dist/components/inputs/token-field/token-field.i18n.js +1 -1
  206. package/dist/components/inputs/token-field/token-field.i18n.js.map +1 -1
  207. package/dist/components/inputs/token-field/token-field.styles.d.ts.map +1 -1
  208. package/dist/components/inputs/token-field/token-field.styles.js +2 -1
  209. package/dist/components/inputs/token-field/token-field.styles.js.map +1 -1
  210. package/dist/components/inputs/token-field/token-field.template.d.ts.map +1 -1
  211. package/dist/components/inputs/token-field/token-field.template.js +6 -4
  212. package/dist/components/inputs/token-field/token-field.template.js.map +1 -1
  213. package/dist/components/layout/app-view/app-view.d.ts +8 -0
  214. package/dist/components/layout/app-view/app-view.d.ts.map +1 -1
  215. package/dist/components/layout/app-view/app-view.js +8 -0
  216. package/dist/components/layout/app-view/app-view.js.map +1 -1
  217. package/dist/components/layout/card/card.d.ts +5 -8
  218. package/dist/components/layout/card/card.d.ts.map +1 -1
  219. package/dist/components/layout/card/card.js +8 -19
  220. package/dist/components/layout/card/card.js.map +1 -1
  221. package/dist/components/layout/card/card.template.d.ts.map +1 -1
  222. package/dist/components/layout/card/card.template.js +6 -3
  223. package/dist/components/layout/card/card.template.js.map +1 -1
  224. package/dist/components/layout/collection/collection.d.ts +11 -6
  225. package/dist/components/layout/collection/collection.d.ts.map +1 -1
  226. package/dist/components/layout/collection/collection.js +19 -14
  227. package/dist/components/layout/collection/collection.js.map +1 -1
  228. package/dist/components/layout/collection/collection.template.d.ts.map +1 -1
  229. package/dist/components/layout/collection/collection.template.js +4 -1
  230. package/dist/components/layout/collection/collection.template.js.map +1 -1
  231. package/dist/components/layout/container/container.d.ts +13 -8
  232. package/dist/components/layout/container/container.d.ts.map +1 -1
  233. package/dist/components/layout/container/container.js +19 -14
  234. package/dist/components/layout/container/container.js.map +1 -1
  235. package/dist/components/layout/page/page.d.ts +52 -2
  236. package/dist/components/layout/page/page.d.ts.map +1 -1
  237. package/dist/components/layout/page/page.js +94 -3
  238. package/dist/components/layout/page/page.js.map +1 -1
  239. package/dist/components/layout/page/page.template.d.ts +6 -0
  240. package/dist/components/layout/page/page.template.d.ts.map +1 -1
  241. package/dist/components/layout/page/page.template.js +21 -6
  242. package/dist/components/layout/page/page.template.js.map +1 -1
  243. package/dist/components/layout/page-footer/page-footer.d.ts +2 -2
  244. package/dist/components/layout/page-footer/page-footer.d.ts.map +1 -1
  245. package/dist/components/layout/page-footer/page-footer.js +4 -4
  246. package/dist/components/layout/page-footer/page-footer.js.map +1 -1
  247. package/dist/components/layout/page-footer/page-footer.template.d.ts.map +1 -1
  248. package/dist/components/layout/page-footer/page-footer.template.js +16 -4
  249. package/dist/components/layout/page-footer/page-footer.template.js.map +1 -1
  250. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.d.ts +4 -6
  251. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.d.ts.map +1 -1
  252. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.js +4 -5
  253. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.js.map +1 -1
  254. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.template.d.ts.map +1 -1
  255. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.template.js +8 -2
  256. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.template.js.map +1 -1
  257. package/dist/components/layout/page-sections/hero/hero.d.ts +13 -15
  258. package/dist/components/layout/page-sections/hero/hero.d.ts.map +1 -1
  259. package/dist/components/layout/page-sections/hero/hero.js +20 -21
  260. package/dist/components/layout/page-sections/hero/hero.js.map +1 -1
  261. package/dist/components/layout/page-sections/hero/hero.template.d.ts.map +1 -1
  262. package/dist/components/layout/page-sections/hero/hero.template.js +6 -2
  263. package/dist/components/layout/page-sections/hero/hero.template.js.map +1 -1
  264. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.d.ts +6 -8
  265. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.d.ts.map +1 -1
  266. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.js +6 -7
  267. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.js.map +1 -1
  268. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.template.d.ts.map +1 -1
  269. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.template.js +8 -2
  270. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.template.js.map +1 -1
  271. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.d.ts +6 -8
  272. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.d.ts.map +1 -1
  273. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.js +6 -7
  274. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.js.map +1 -1
  275. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.template.d.ts.map +1 -1
  276. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.template.js +8 -2
  277. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.template.js.map +1 -1
  278. package/dist/components/layout/page-sections/page-section-controls.d.ts +139 -44
  279. package/dist/components/layout/page-sections/page-section-controls.d.ts.map +1 -1
  280. package/dist/components/layout/page-sections/page-section-controls.js +44 -47
  281. package/dist/components/layout/page-sections/page-section-controls.js.map +1 -1
  282. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.d.ts +11 -12
  283. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.d.ts.map +1 -1
  284. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.js +19 -19
  285. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.js.map +1 -1
  286. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.template.d.ts.map +1 -1
  287. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.template.js +8 -2
  288. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.template.js.map +1 -1
  289. package/dist/components/layout/page-sections/simple-section/simple-section.d.ts +14 -8
  290. package/dist/components/layout/page-sections/simple-section/simple-section.d.ts.map +1 -1
  291. package/dist/components/layout/page-sections/simple-section/simple-section.js +14 -7
  292. package/dist/components/layout/page-sections/simple-section/simple-section.js.map +1 -1
  293. package/dist/components/layout/page-sections/simple-section/simple-section.template.d.ts.map +1 -1
  294. package/dist/components/layout/page-sections/simple-section/simple-section.template.js +8 -2
  295. package/dist/components/layout/page-sections/simple-section/simple-section.template.js.map +1 -1
  296. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.d.ts +6 -8
  297. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.d.ts.map +1 -1
  298. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.js +6 -7
  299. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.js.map +1 -1
  300. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.template.d.ts.map +1 -1
  301. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.template.js +8 -2
  302. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.template.js.map +1 -1
  303. package/dist/components/layout/popover/popover.d.ts +12 -8
  304. package/dist/components/layout/popover/popover.d.ts.map +1 -1
  305. package/dist/components/layout/popover/popover.js +38 -18
  306. package/dist/components/layout/popover/popover.js.map +1 -1
  307. package/dist/components/layout/sheet/sheet.d.ts +26 -11
  308. package/dist/components/layout/sheet/sheet.d.ts.map +1 -1
  309. package/dist/components/layout/sheet/sheet.js +59 -20
  310. package/dist/components/layout/sheet/sheet.js.map +1 -1
  311. package/dist/components/layout/sheet/sheet.styles.d.ts.map +1 -1
  312. package/dist/components/layout/sheet/sheet.styles.js +8 -4
  313. package/dist/components/layout/sheet/sheet.styles.js.map +1 -1
  314. package/dist/components/layout/sheet/sheet.template.js +1 -1
  315. package/dist/components/layout/sheet/sheet.template.js.map +1 -1
  316. package/dist/components/layout/spacer/spacer.d.ts +15 -2
  317. package/dist/components/layout/spacer/spacer.d.ts.map +1 -1
  318. package/dist/components/layout/spacer/spacer.js +15 -2
  319. package/dist/components/layout/spacer/spacer.js.map +1 -1
  320. package/dist/components/layout/split-views/bar-split-view/bar-split-view.d.ts +4 -1
  321. package/dist/components/layout/split-views/bar-split-view/bar-split-view.d.ts.map +1 -1
  322. package/dist/components/layout/split-views/bar-split-view/bar-split-view.js +4 -1
  323. package/dist/components/layout/split-views/bar-split-view/bar-split-view.js.map +1 -1
  324. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.d.ts +11 -6
  325. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.d.ts.map +1 -1
  326. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.js +17 -12
  327. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.js.map +1 -1
  328. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.styles.d.ts.map +1 -1
  329. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.styles.js +4 -0
  330. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.styles.js.map +1 -1
  331. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.d.ts +3 -1
  332. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.d.ts.map +1 -1
  333. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.js +3 -1
  334. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.js.map +1 -1
  335. package/dist/components/layout/split-views/split-view-pane/split-view-pane.d.ts +4 -4
  336. package/dist/components/layout/split-views/split-view-pane/split-view-pane.d.ts.map +1 -1
  337. package/dist/components/layout/split-views/split-view-pane/split-view-pane.js +8 -8
  338. package/dist/components/layout/split-views/split-view-pane/split-view-pane.js.map +1 -1
  339. package/dist/components/layout/window/window.d.ts +30 -18
  340. package/dist/components/layout/window/window.d.ts.map +1 -1
  341. package/dist/components/layout/window/window.js +66 -31
  342. package/dist/components/layout/window/window.js.map +1 -1
  343. package/dist/components/lists-and-tables/cells/cell/cell.d.ts +4 -2
  344. package/dist/components/lists-and-tables/cells/cell/cell.d.ts.map +1 -1
  345. package/dist/components/lists-and-tables/cells/cell/cell.js +7 -5
  346. package/dist/components/lists-and-tables/cells/cell/cell.js.map +1 -1
  347. package/dist/components/lists-and-tables/cells/drag-handle-cell/drag-handle-cell.template.d.ts.map +1 -1
  348. package/dist/components/lists-and-tables/cells/drag-handle-cell/drag-handle-cell.template.js +88 -16
  349. package/dist/components/lists-and-tables/cells/drag-handle-cell/drag-handle-cell.template.js.map +1 -1
  350. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.d.ts +4 -2
  351. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.d.ts.map +1 -1
  352. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.js +7 -5
  353. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.js.map +1 -1
  354. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.styles.d.ts.map +1 -1
  355. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.styles.js +23 -0
  356. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.styles.js.map +1 -1
  357. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.template.d.ts.map +1 -1
  358. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.template.js +11 -2
  359. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.template.js.map +1 -1
  360. package/dist/components/lists-and-tables/cells/text-cell/text-cell.d.ts +2 -2
  361. package/dist/components/lists-and-tables/cells/text-cell/text-cell.d.ts.map +1 -1
  362. package/dist/components/lists-and-tables/cells/text-cell/text-cell.js +5 -5
  363. package/dist/components/lists-and-tables/cells/text-cell/text-cell.js.map +1 -1
  364. package/dist/components/lists-and-tables/cells/text-cell/text-cell.template.d.ts.map +1 -1
  365. package/dist/components/lists-and-tables/cells/text-cell/text-cell.template.js +8 -2
  366. package/dist/components/lists-and-tables/cells/text-cell/text-cell.template.js.map +1 -1
  367. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.d.ts +5 -5
  368. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.d.ts.map +1 -1
  369. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.js +8 -8
  370. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.js.map +1 -1
  371. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.template.js +1 -1
  372. package/dist/components/lists-and-tables/cells/title-cell/title-cell.d.ts +3 -3
  373. package/dist/components/lists-and-tables/cells/title-cell/title-cell.d.ts.map +1 -1
  374. package/dist/components/lists-and-tables/cells/title-cell/title-cell.js +6 -6
  375. package/dist/components/lists-and-tables/cells/title-cell/title-cell.js.map +1 -1
  376. package/dist/components/lists-and-tables/cells/title-cell/title-cell.template.d.ts.map +1 -1
  377. package/dist/components/lists-and-tables/cells/title-cell/title-cell.template.js +8 -2
  378. package/dist/components/lists-and-tables/cells/title-cell/title-cell.template.js.map +1 -1
  379. package/dist/components/lists-and-tables/list/list.d.ts +3 -3
  380. package/dist/components/lists-and-tables/list/list.d.ts.map +1 -1
  381. package/dist/components/lists-and-tables/list/list.js +6 -6
  382. package/dist/components/lists-and-tables/list/list.js.map +1 -1
  383. package/dist/components/lists-and-tables/list/list.styles.d.ts.map +1 -1
  384. package/dist/components/lists-and-tables/list/list.styles.js +4 -0
  385. package/dist/components/lists-and-tables/list/list.styles.js.map +1 -1
  386. package/dist/components/lists-and-tables/list/list.template.d.ts.map +1 -1
  387. package/dist/components/lists-and-tables/list/list.template.js +25 -8
  388. package/dist/components/lists-and-tables/list/list.template.js.map +1 -1
  389. package/dist/components/lists-and-tables/list-item/list-item.d.ts +61 -38
  390. package/dist/components/lists-and-tables/list-item/list-item.d.ts.map +1 -1
  391. package/dist/components/lists-and-tables/list-item/list-item.js +106 -37
  392. package/dist/components/lists-and-tables/list-item/list-item.js.map +1 -1
  393. package/dist/components/lists-and-tables/list-item/list-item.styles.d.ts.map +1 -1
  394. package/dist/components/lists-and-tables/list-item/list-item.styles.js +4 -14
  395. package/dist/components/lists-and-tables/list-item/list-item.styles.js.map +1 -1
  396. package/dist/components/lists-and-tables/list-item/list-item.template.d.ts.map +1 -1
  397. package/dist/components/lists-and-tables/list-item/list-item.template.js +2 -1
  398. package/dist/components/lists-and-tables/list-item/list-item.template.js.map +1 -1
  399. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.d.ts +36 -11
  400. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.d.ts.map +1 -1
  401. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.js +46 -19
  402. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.js.map +1 -1
  403. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.d.ts.map +1 -1
  404. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.js +4 -14
  405. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.js.map +1 -1
  406. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.d.ts +1 -1
  407. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.d.ts.map +1 -1
  408. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.js +13 -3
  409. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.js.map +1 -1
  410. package/dist/components/lists-and-tables/table/table.d.ts +2 -2
  411. package/dist/components/lists-and-tables/table/table.d.ts.map +1 -1
  412. package/dist/components/lists-and-tables/table/table.js +5 -5
  413. package/dist/components/lists-and-tables/table/table.js.map +1 -1
  414. package/dist/components/navigation/breadcrumbs/breadcrumbs.template.js +1 -1
  415. package/dist/components/navigation/document-tab-bar/document-tab-bar.js +6 -6
  416. package/dist/components/navigation/document-tab-bar/document-tab-bar.js.map +1 -1
  417. package/dist/components/navigation/document-tab-bar/document-tab-bar.template.d.ts.map +1 -1
  418. package/dist/components/navigation/document-tab-bar/document-tab-bar.template.js +9 -3
  419. package/dist/components/navigation/document-tab-bar/document-tab-bar.template.js.map +1 -1
  420. package/dist/components/navigation/link/link.d.ts +1 -3
  421. package/dist/components/navigation/link/link.d.ts.map +1 -1
  422. package/dist/components/navigation/link/link.js +1 -11
  423. package/dist/components/navigation/link/link.js.map +1 -1
  424. package/dist/components/navigation/link/link.template.d.ts.map +1 -1
  425. package/dist/components/navigation/link/link.template.js +4 -3
  426. package/dist/components/navigation/link/link.template.js.map +1 -1
  427. package/dist/components/navigation/menu-bar-item/menu-bar-item.template.js +4 -4
  428. package/dist/components/navigation/pagination/pagination.styles.js +4 -4
  429. package/dist/components/navigation/pagination/pagination.template.js +1 -1
  430. package/dist/components/navigation/skip-link/skip-link.styles.d.ts.map +1 -1
  431. package/dist/components/navigation/skip-link/skip-link.styles.js +10 -4
  432. package/dist/components/navigation/skip-link/skip-link.styles.js.map +1 -1
  433. package/dist/components/navigation/tab-bar/tab-bar.template.js +2 -2
  434. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.template.d.ts.map +1 -1
  435. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.template.js +4 -2
  436. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.template.js.map +1 -1
  437. package/dist/components/navigation/top-title-bar/top-title-bar.d.ts +6 -2
  438. package/dist/components/navigation/top-title-bar/top-title-bar.d.ts.map +1 -1
  439. package/dist/components/navigation/top-title-bar/top-title-bar.js +7 -2
  440. package/dist/components/navigation/top-title-bar/top-title-bar.js.map +1 -1
  441. package/dist/components/navigation/top-title-bar/top-title-bar.styles.js +2 -2
  442. package/dist/components/navigation/top-title-bar/top-title-bar.template.d.ts.map +1 -1
  443. package/dist/components/navigation/top-title-bar/top-title-bar.template.js +18 -3
  444. package/dist/components/navigation/top-title-bar/top-title-bar.template.js.map +1 -1
  445. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.styles.js +4 -4
  446. package/dist/components/status-and-feedback/badge/badge.d.ts +1 -1
  447. package/dist/components/status-and-feedback/badge/badge.js +1 -1
  448. package/dist/components/status-and-feedback/badge/badge.template.js +1 -1
  449. package/dist/components/status-and-feedback/banner/banner.template.js +1 -1
  450. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.template.js +1 -1
  451. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.d.ts +14 -5
  452. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.d.ts.map +1 -1
  453. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.js +43 -13
  454. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.js.map +1 -1
  455. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.js +1 -1
  456. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.template.d.ts.map +1 -1
  457. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.template.js +4 -1
  458. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.template.js.map +1 -1
  459. package/dist/components/status-and-feedback/notification/notification.d.ts +8 -8
  460. package/dist/components/status-and-feedback/notification/notification.d.ts.map +1 -1
  461. package/dist/components/status-and-feedback/notification/notification.js +13 -13
  462. package/dist/components/status-and-feedback/notification/notification.js.map +1 -1
  463. package/dist/components/status-and-feedback/notification/notification.template.d.ts.map +1 -1
  464. package/dist/components/status-and-feedback/notification/notification.template.js +5 -2
  465. package/dist/components/status-and-feedback/notification/notification.template.js.map +1 -1
  466. package/dist/components/status-and-feedback/notification/{notification-region.d.ts → notifications-area.d.ts} +3 -3
  467. package/dist/components/status-and-feedback/notification/notifications-area.d.ts.map +1 -0
  468. package/dist/components/status-and-feedback/notification/{notification-region.js → notifications-area.js} +137 -140
  469. package/dist/components/status-and-feedback/notification/notifications-area.js.map +1 -0
  470. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.d.ts.map +1 -1
  471. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.js +4 -0
  472. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.js.map +1 -1
  473. package/dist/components/status-and-feedback/progress-bar/progress-bar.template.d.ts.map +1 -1
  474. package/dist/components/status-and-feedback/progress-bar/progress-bar.template.js +2 -1
  475. package/dist/components/status-and-feedback/progress-bar/progress-bar.template.js.map +1 -1
  476. package/dist/components/status-and-feedback/progress-circle/progress-circle.template.d.ts.map +1 -1
  477. package/dist/components/status-and-feedback/progress-circle/progress-circle.template.js +106 -18
  478. package/dist/components/status-and-feedback/progress-circle/progress-circle.template.js.map +1 -1
  479. package/dist/components/status-and-feedback/status-bar/status-bar.d.ts +2 -4
  480. package/dist/components/status-and-feedback/status-bar/status-bar.d.ts.map +1 -1
  481. package/dist/components/status-and-feedback/status-bar/status-bar.js +2 -8
  482. package/dist/components/status-and-feedback/status-bar/status-bar.js.map +1 -1
  483. package/dist/components/status-and-feedback/status-bar/status-bar.styles.js +1 -1
  484. package/dist/components/status-and-feedback/status-bar/status-bar.template.d.ts.map +1 -1
  485. package/dist/components/status-and-feedback/status-bar/status-bar.template.js +3 -2
  486. package/dist/components/status-and-feedback/status-bar/status-bar.template.js.map +1 -1
  487. package/dist/components/status-and-feedback/step-indicator/step-indicator.d.ts +4 -1
  488. package/dist/components/status-and-feedback/step-indicator/step-indicator.d.ts.map +1 -1
  489. package/dist/components/status-and-feedback/step-indicator/step-indicator.js +4 -1
  490. package/dist/components/status-and-feedback/step-indicator/step-indicator.js.map +1 -1
  491. package/dist/components/status-and-feedback/step-indicator/step-indicator.template.js +2 -2
  492. package/dist/components/{with-translations-CqUV9S5g.js → with-translations-BAKFoEKy.js} +22 -1
  493. package/dist/css/form-section.css +4 -4
  494. package/dist/css/form.css +4 -0
  495. package/dist/css/fouc.css +1 -1
  496. package/dist/css/rich-text.css +26 -11
  497. package/dist/css/rijksoverheid-fonts.css +1 -1
  498. package/dist/css/variables.css +4 -15
  499. package/dist/favicon.svg +3 -8
  500. package/dist/nldd.min.js +1336 -898
  501. package/dist/touch-icon.png +0 -0
  502. package/dist/types/vue.d.ts +325 -278
  503. package/dist/utilities/form-associated-mixin.d.ts +2 -0
  504. package/dist/utilities/form-associated-mixin.d.ts.map +1 -1
  505. package/dist/utilities/form-associated-mixin.js +15 -1
  506. package/dist/utilities/form-associated-mixin.js.map +1 -1
  507. package/dist/utilities/link-rel.d.ts +13 -0
  508. package/dist/utilities/link-rel.d.ts.map +1 -0
  509. package/dist/utilities/link-rel.js +21 -0
  510. package/dist/utilities/link-rel.js.map +1 -0
  511. package/dist/utilities/page-section-mixin.d.ts +3 -8
  512. package/dist/utilities/page-section-mixin.d.ts.map +1 -1
  513. package/dist/utilities/page-section-mixin.js +4 -84
  514. package/dist/utilities/page-section-mixin.js.map +1 -1
  515. package/dist/utilities/title-bar-label-controller.d.ts +25 -0
  516. package/dist/utilities/title-bar-label-controller.d.ts.map +1 -0
  517. package/dist/utilities/title-bar-label-controller.js +52 -0
  518. package/dist/utilities/title-bar-label-controller.js.map +1 -0
  519. package/package.json +9 -7
  520. package/dist/components/status-and-feedback/notification/notification-region.d.ts.map +0 -1
  521. package/dist/components/status-and-feedback/notification/notification-region.js.map +0 -1
@@ -207,7 +207,7 @@ declare module 'vue' {
207
207
  'button'?: NLDDAvatar['button'];
208
208
  /** Link target for href (e.g. '_blank'); completes rel and announces "Opens in a new tab" */
209
209
  'target'?: NLDDAvatar['target'];
210
- /** Link rel for href; defaults to 'noopener noreferrer' when target='_blank' */
210
+ /** Link rel for href; with target '_blank', 'noopener noreferrer' is added to whatever you set */
211
211
  'rel'?: NLDDAvatar['rel'];
212
212
  /** Override translation keys; unset keys fall back to Dutch */
213
213
  'translations'?: NLDDAvatar['translations'];
@@ -236,9 +236,9 @@ declare module 'vue' {
236
236
  'size'?: NLDDBadge['size'];
237
237
  /** Semantic ('critical' | 'accent' | 'neutral' | 'warning' | 'success'), a Rijkshuisstijl color ('lintblauw' | 'hemelblauw' | 'oranje' | …), or 'inherit' to fill in the content color around it: the `--context-content-color` channel a list item, table row or menu sets, falling back to `currentColor`. Default: 'critical' */
238
238
  'color'?: NLDDBadge['color'];
239
- /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the design system cannot know: the jacket of a cable, a color someone picked. It wins over `color`. Whatever it paints, the text and icon on top become white or black, whichever contrasts. The text on it is black or white, picked on the relative luminance of the fill, so it clears 4.5:1 whatever color you hand it. */
239
+ /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the system cannot know: the jacket of a cable, a color someone picked. It wins over `color`. Whatever it paints, the text and icon on top become white or black, whichever contrasts. The text on it is black or white, picked on the relative luminance of the fill, so it clears 4.5:1 whatever color you hand it. */
240
240
  'custom-color'?: NLDDBadge['customColor'];
241
- /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the design system cannot know: the jacket of a cable, a color someone picked. It wins over `color`. Whatever it paints, the text and icon on top become white or black, whichever contrasts. The text on it is black or white, picked on the relative luminance of the fill, so it clears 4.5:1 whatever color you hand it. */
241
+ /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the system cannot know: the jacket of a cable, a color someone picked. It wins over `color`. Whatever it paints, the text and icon on top become white or black, whichever contrasts. The text on it is black or white, picked on the relative luminance of the fill, so it clears 4.5:1 whatever color you hand it. */
242
242
  'customColor'?: NLDDBadge['customColor'];
243
243
  /** Grows a ring out of the badge and fades it, for something happening right now (a live connection, an outage). Respects `prefers-reduced-motion`. */
244
244
  'pulse'?: NLDDBadge['pulse'];
@@ -340,9 +340,9 @@ declare module 'vue' {
340
340
  'expandable'?: NLDDButton['expandable'];
341
341
  /** Whether the popover/menu controlled by this button is currently open. Forwarded as aria-expanded on the inner button; toggles the is-expanded visual state. */
342
342
  'expanded'?: NLDDButton['expanded'];
343
- /** Type of popup container this button opens: 'menu' | 'listbox' | 'dialog' | 'tree' | 'grid'. Sets aria-haspopup on the inner button and forces aria-expanded to always be present (true/false) so screen readers know the popup state. */
343
+ /** Type of popup container this button opens: 'menu' | 'listbox' | 'dialog' | 'tree' | 'grid'. Sets aria-haspopup on the inner button and forces aria-expanded to always be present (true/false) so screen readers know the popup state. An nldd-menu or nldd-popover in the `popup` slot, or anchored to this button, sets it itself from the first render; set it only for another kind of popup. */
344
344
  'popup-type'?: NLDDButton['popupType'];
345
- /** Type of popup container this button opens: 'menu' | 'listbox' | 'dialog' | 'tree' | 'grid'. Sets aria-haspopup on the inner button and forces aria-expanded to always be present (true/false) so screen readers know the popup state. */
345
+ /** Type of popup container this button opens: 'menu' | 'listbox' | 'dialog' | 'tree' | 'grid'. Sets aria-haspopup on the inner button and forces aria-expanded to always be present (true/false) so screen readers know the popup state. An nldd-menu or nldd-popover in the `popup` slot, or anchored to this button, sets it itself from the first render; set it only for another kind of popup. */
346
346
  'popupType'?: NLDDButton['popupType'];
347
347
  /** Button type for form submission: 'button' | 'submit' | 'reset' (ignored when href is set) */
348
348
  'type'?: NLDDButton['type'];
@@ -382,7 +382,7 @@ declare module 'vue' {
382
382
  'href'?: NLDDButton['href'];
383
383
  /** Link target (e.g. '_blank'); only used when href is set. With '_blank' the button adds a visually hidden "opens in new tab" announcement for screen readers (WCAG 2.1 SC 3.2.2). */
384
384
  'target'?: NLDDButton['target'];
385
- /** Link rel attribute; defaults to 'noopener noreferrer' when target is '_blank' */
385
+ /** Link rel attribute, used with href; with target '_blank', 'noopener noreferrer' is added to whatever you set */
386
386
  'rel'?: NLDDButton['rel'];
387
387
  /** Override translation keys (e.g. the "opens in new tab" announcement); unset keys fall back to Dutch. */
388
388
  'translations'?: NLDDButton['translations'];
@@ -411,7 +411,7 @@ declare module 'vue' {
411
411
  type NLDDButtonGroupProps = {
412
412
  /** Button group size: 'sm' | 'md' (default: 'md') */
413
413
  'size'?: NLDDButtonGroup['size'];
414
- /** Layout direction: 'horizontal' | 'vertical' (default: 'vertical') */
414
+ /** Layout direction: 'auto' | 'horizontal' | 'vertical' (default: 'auto') */
415
415
  'orientation'?: NLDDButtonGroup['orientation'];
416
416
  };
417
417
 
@@ -424,12 +424,12 @@ declare module 'vue' {
424
424
  'accessibleLabel'?: NLDDCard['accessibleLabel'];
425
425
  /** Makes the whole card a link to this URL (empty = no link) */
426
426
  'href'?: NLDDCard['href'];
427
- /** Makes the whole card a button; ignored when `href` is set */
428
- 'button'?: NLDDCard['button'];
429
427
  /** Link target for href (e.g. '_blank'); adjusts rel automatically and adds an "Opent in nieuw tabblad" announcement for '_blank' */
430
428
  'target'?: NLDDCard['target'];
431
- /** Link rel for href; defaults to 'noopener noreferrer' with target='_blank' */
429
+ /** Link rel for href; with target '_blank', 'noopener noreferrer' is added to whatever you set */
432
430
  'rel'?: NLDDCard['rel'];
431
+ /** Makes the whole card a button; ignored when `href` is set */
432
+ 'button'?: NLDDCard['button'];
433
433
  /** Override translation keys (e.g. the "Opent in nieuw tabblad" announcement) */
434
434
  'translations'?: NLDDCard['translations'];
435
435
  };
@@ -449,14 +449,14 @@ declare module 'vue' {
449
449
  'min-height'?: NLDDCell['minHeight'];
450
450
  /** Minimum height as CSS length (e.g. '44px', '3rem') */
451
451
  'minHeight'?: NLDDCell['minHeight'];
452
- /** Vertical alignment of slotted content (default: 'center') */
453
- 'vertical-alignment'?: NLDDCell['verticalAlignment'];
454
- /** Vertical alignment of slotted content (default: 'center') */
455
- 'verticalAlignment'?: NLDDCell['verticalAlignment'];
456
452
  /** Horizontal alignment of slotted content (default: 'left') */
457
453
  'horizontal-alignment'?: NLDDCell['horizontalAlignment'];
458
454
  /** Horizontal alignment of slotted content (default: 'left') */
459
455
  'horizontalAlignment'?: NLDDCell['horizontalAlignment'];
456
+ /** Vertical alignment of slotted content (default: 'center') */
457
+ 'vertical-alignment'?: NLDDCell['verticalAlignment'];
458
+ /** Vertical alignment of slotted content (default: 'center') */
459
+ 'verticalAlignment'?: NLDDCell['verticalAlignment'];
460
460
  'hide-below'?: NLDDCell['hideBelow'];
461
461
  'hideBelow'?: NLDDCell['hideBelow'];
462
462
  'hide-above'?: NLDDCell['hideAbove'];
@@ -585,18 +585,6 @@ declare module 'vue' {
585
585
  type NLDDCollectionProps = {
586
586
  /** Layout mode: 'grid' | 'stack' | 'lanes' | 'horizontal-scroll' (default: 'grid') */
587
587
  'layout'?: NLDDCollection['layout'];
588
- /** Show load-more button in grid/stack (default: false) */
589
- 'show-load-more'?: NLDDCollection['showLoadMore'];
590
- /** Show load-more button in grid/stack (default: false) */
591
- 'showLoadMore'?: NLDDCollection['showLoadMore'];
592
- /** Number of visible items per page (default: 24) */
593
- 'max-items'?: NLDDCollection['maxItems'];
594
- /** Number of visible items per page (default: 24) */
595
- 'maxItems'?: NLDDCollection['maxItems'];
596
- /** Automatically load more items when the button becomes visible */
597
- 'lazy-load'?: NLDDCollection['lazyLoad'];
598
- /** Automatically load more items when the button becomes visible */
599
- 'lazyLoad'?: NLDDCollection['lazyLoad'];
600
588
  /** Preferred width for each item (e.g. '280px', '20rem'). In grid and lanes layouts used as the minimum column width (columns will be at least this wide; 1fr if container allows more). In horizontal scroll used as flex-basis. Never forces horizontal overflow — the value is clamped to container width. */
601
589
  'item-width'?: NLDDCollection['itemWidth'];
602
590
  /** Preferred width for each item (e.g. '280px', '20rem'). In grid and lanes layouts used as the minimum column width (columns will be at least this wide; 1fr if container allows more). In horizontal scroll used as flex-basis. Never forces horizontal overflow — the value is clamped to container width. */
@@ -615,8 +603,20 @@ declare module 'vue' {
615
603
  'lg-gap'?: NLDDCollection['lgGap'];
616
604
  /** Gap at lg, overriding `gap` there */
617
605
  'lgGap'?: NLDDCollection['lgGap'];
606
+ /** Number of visible items per page (default: 24) */
607
+ 'max-items'?: NLDDCollection['maxItems'];
608
+ /** Number of visible items per page (default: 24) */
609
+ 'maxItems'?: NLDDCollection['maxItems'];
618
610
  /** Translation overrides; unset keys fall back to Dutch. Available keys: 'components.collection.previous-action', 'components.collection.next-action', 'components.collection.load-more-action' */
619
611
  'translations'?: NLDDCollection['translations'];
612
+ /** Show load-more button in grid/stack (default: false) */
613
+ 'show-load-more'?: NLDDCollection['showLoadMore'];
614
+ /** Show load-more button in grid/stack (default: false) */
615
+ 'showLoadMore'?: NLDDCollection['showLoadMore'];
616
+ /** Automatically load more items when the button becomes visible */
617
+ 'lazy-load'?: NLDDCollection['lazyLoad'];
618
+ /** Automatically load more items when the button becomes visible */
619
+ 'lazyLoad'?: NLDDCollection['lazyLoad'];
620
620
  /** When the load-more button is clicked */
621
621
  'onLoadMore'?: (event: CustomEvent) => void;
622
622
  };
@@ -708,15 +708,7 @@ declare module 'vue' {
708
708
  'max-width'?: NLDDContainer['maxWidth'];
709
709
  /** Maximum width as a CSS length (e.g. '480px') */
710
710
  'maxWidth'?: NLDDContainer['maxWidth'];
711
- /** 'left' | 'center' | 'right' */
712
- 'horizontal-alignment'?: NLDDContainer['horizontalAlignment'];
713
- /** 'left' | 'center' | 'right' */
714
- 'horizontalAlignment'?: NLDDContainer['horizontalAlignment'];
715
- /** 'top' | 'center' | 'bottom' */
716
- 'vertical-alignment'?: NLDDContainer['verticalAlignment'];
717
- /** 'top' | 'center' | 'bottom' */
718
- 'verticalAlignment'?: NLDDContainer['verticalAlignment'];
719
- /** Gap between children */
711
+ /** Gap between children. One distance for all of them, so it fits children of one kind; for a stack of different kinds, space each seam with nldd-spacer instead. */
720
712
  'gap'?: NLDDContainer['gap'];
721
713
  /** Gap at sm breakpoint */
722
714
  'sm-gap'?: NLDDContainer['smGap'];
@@ -840,6 +832,14 @@ declare module 'vue' {
840
832
  'lg-padding-left'?: NLDDContainer['lgPaddingLeft'];
841
833
  /** Padding left at lg */
842
834
  'lgPaddingLeft'?: NLDDContainer['lgPaddingLeft'];
835
+ /** 'left' | 'center' | 'right' */
836
+ 'horizontal-alignment'?: NLDDContainer['horizontalAlignment'];
837
+ /** 'left' | 'center' | 'right' */
838
+ 'horizontalAlignment'?: NLDDContainer['horizontalAlignment'];
839
+ /** 'top' | 'center' | 'bottom' */
840
+ 'vertical-alignment'?: NLDDContainer['verticalAlignment'];
841
+ /** 'top' | 'center' | 'bottom' */
842
+ 'verticalAlignment'?: NLDDContainer['verticalAlignment'];
843
843
  };
844
844
 
845
845
  type NLDDDateFieldProps = {
@@ -1128,8 +1128,8 @@ declare module 'vue' {
1128
1128
  'width'?: NLDDFullBleedSection['width'];
1129
1129
  /** Surface background ('inherit' default; 'base'/'tinted' paint and cascade a surface). */
1130
1130
  'background'?: NLDDFullBleedSection['background'];
1131
- /** Color scheme ('inherit' default; 'inverted' = opposite of the surrounding page scheme). */
1132
- 'scheme'?: NLDDFullBleedSection['scheme'];
1131
+ /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
1132
+ 'height'?: NLDDFullBleedSection['height'];
1133
1133
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
1134
1134
  'padding-block'?: NLDDFullBleedSection['paddingBlock'];
1135
1135
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
@@ -1162,29 +1162,27 @@ declare module 'vue' {
1162
1162
  'lgPaddingTop'?: NLDDFullBleedSection['lgPaddingTop'];
1163
1163
  'lg-padding-bottom'?: NLDDFullBleedSection['lgPaddingBottom'];
1164
1164
  'lgPaddingBottom'?: NLDDFullBleedSection['lgPaddingBottom'];
1165
- /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
1166
- 'height'?: NLDDFullBleedSection['height'];
1167
1165
  };
1168
1166
 
1169
1167
  type NLDDHeroProps = {
1170
- /** Position of the text panel (default: 'bottom-left'); 'left'/'right' span the full height */
1171
- 'main-position'?: NLDDHero['mainPosition'];
1172
- /** Position of the text panel (default: 'bottom-left'); 'left'/'right' span the full height */
1173
- 'mainPosition'?: NLDDHero['mainPosition'];
1174
- /** Width of the panel (default: '1/2'); 'full' makes a full top or bottom strip and is ignored with 'left'/'right' */
1175
- 'main-width'?: NLDDHero['mainWidth'];
1176
- /** Width of the panel (default: '1/2'); 'full' makes a full top or bottom strip and is ignored with 'left'/'right' */
1177
- 'mainWidth'?: NLDDHero['mainWidth'];
1168
+ /** Body max-width; 'full' removes the bound (section API) */
1169
+ 'width'?: NLDDHero['width'];
1178
1170
  /** 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
1171
  'main-background'?: NLDDHero['mainBackground'];
1180
1172
  /** 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
1173
  'mainBackground'?: NLDDHero['mainBackground'];
1174
+ /** Width of the panel (default: '1/2'); 'full' makes a full top or bottom strip and is ignored with 'left'/'right' */
1175
+ 'main-width'?: NLDDHero['mainWidth'];
1176
+ /** Width of the panel (default: '1/2'); 'full' makes a full top or bottom strip and is ignored with 'left'/'right' */
1177
+ 'mainWidth'?: NLDDHero['mainWidth'];
1178
+ /** Position of the text panel (default: 'bottom-left'); 'left'/'right' span the full height */
1179
+ 'main-position'?: NLDDHero['mainPosition'];
1180
+ /** Position of the text panel (default: 'bottom-left'); 'left'/'right' span the full height */
1181
+ 'mainPosition'?: NLDDHero['mainPosition'];
1182
1182
  /** 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 */
1183
1183
  'media-aspect-ratio'?: NLDDHero['mediaAspectRatio'];
1184
1184
  /** 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 */
1185
1185
  'mediaAspectRatio'?: NLDDHero['mediaAspectRatio'];
1186
- /** Body max-width; 'full' removes the bound (section API) */
1187
- 'width'?: NLDDHero['width'];
1188
1186
  /** Source of the media area (an alternative to the media slot); ignored as soon as the media slot is filled */
1189
1187
  'media-src'?: NLDDHero['mediaSrc'];
1190
1188
  /** Source of the media area (an alternative to the media slot); ignored as soon as the media slot is filled */
@@ -1203,8 +1201,8 @@ declare module 'vue' {
1203
1201
  'mediaAlt'?: NLDDHero['mediaAlt'];
1204
1202
  /** Surface behind the hero (section API) */
1205
1203
  'background'?: NLDDHero['background'];
1206
- /** Color scheme (section API) */
1207
- 'scheme'?: NLDDHero['scheme'];
1204
+ /** Minimum height of the section (section API) */
1205
+ 'height'?: NLDDHero['height'];
1208
1206
  /** Block padding override, also per edge and responsive (section API) */
1209
1207
  'padding-block'?: NLDDHero['paddingBlock'];
1210
1208
  /** Block padding override, also per edge and responsive (section API) */
@@ -1231,20 +1229,18 @@ declare module 'vue' {
1231
1229
  'lgPaddingTop'?: NLDDHero['lgPaddingTop'];
1232
1230
  'lg-padding-bottom'?: NLDDHero['lgPaddingBottom'];
1233
1231
  'lgPaddingBottom'?: NLDDHero['lgPaddingBottom'];
1234
- /** Minimum height of the section (section API) */
1235
- 'height'?: NLDDHero['height'];
1236
1232
  };
1237
1233
 
1238
1234
  type NLDDIconProps = {
1239
- /** The name of the icon to display */
1240
- 'name'?: NLDDIcon['name'];
1235
+ /** The name of the icon to display. The same attribute every other component that renders an icon takes. */
1236
+ 'icon'?: NLDDIcon['icon'];
1241
1237
  /** `full` (the default) fills the container. `inherit` sizes the icon to the surrounding text (1em) and drops it onto that text's own line, for an icon set in a line of running text. Or a fixed spacer-aligned size in px (16, 20, 24, 28, 32, 40, 44, 48, 56, 64, 80, 96). */
1242
1238
  'size'?: NLDDIcon['size'];
1243
1239
  /** Functional (`primary-content`, `secondary-content`, `accent`, `critical`, `warning`, `success`) or rijkskleur (`lintblauw`, `donkerblauw`, `hemelblauw`, `lichtblauw`, `paars`, `violet`, `robijnrood`, `roze`, `rood`, `oranje`, `donkergeel`, `geel`, `donkerbruin`, `bruin`, `donkergroen`, `groen`, `mosgroen`, `mintgroen`). Empty = inherit `color` from parent. */
1244
1240
  'color'?: NLDDIcon['color'];
1245
- /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the design system cannot know. It wins over `color`. */
1241
+ /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the system cannot know. It wins over `color`. */
1246
1242
  'custom-color'?: NLDDIcon['customColor'];
1247
- /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the design system cannot know. It wins over `color`. */
1243
+ /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the system cannot know. It wins over `color`. */
1248
1244
  'customColor'?: NLDDIcon['customColor'];
1249
1245
  /** Draw the icon on a filled square. `color` and `custom-color` then paint the box and the glyph takes the contrasting color, and `size` measures the box: the glyph is four fifths of it, the corner radius a fifth. */
1250
1246
  'box'?: NLDDIcon['box'];
@@ -1277,9 +1273,9 @@ declare module 'vue' {
1277
1273
  'no-tab'?: NLDDIconButton['noTab'];
1278
1274
  /** Takes the button out of the tab order (tabindex="-1"), for a control owned by a roving container (an nldd-token in nldd-token-field, a button in a row of an nldd-list) that manages focus itself. Still mouse- and script-focusable. */
1279
1275
  'noTab'?: NLDDIconButton['noTab'];
1280
- /** Type of popup container this button opens: 'menu' | 'listbox' | 'dialog' | 'tree' | 'grid'. Sets aria-haspopup on the inner button and forces aria-expanded to always be present (true/false) so screen readers know the popup state. */
1276
+ /** Type of popup container this button opens: 'menu' | 'listbox' | 'dialog' | 'tree' | 'grid'. Sets aria-haspopup on the inner button and forces aria-expanded to always be present (true/false) so screen readers know the popup state. An nldd-menu or nldd-popover in the `popup` slot, or anchored to this button, sets it itself from the first render; set it only for another kind of popup. */
1281
1277
  'popup-type'?: NLDDIconButton['popupType'];
1282
- /** Type of popup container this button opens: 'menu' | 'listbox' | 'dialog' | 'tree' | 'grid'. Sets aria-haspopup on the inner button and forces aria-expanded to always be present (true/false) so screen readers know the popup state. */
1278
+ /** Type of popup container this button opens: 'menu' | 'listbox' | 'dialog' | 'tree' | 'grid'. Sets aria-haspopup on the inner button and forces aria-expanded to always be present (true/false) so screen readers know the popup state. An nldd-menu or nldd-popover in the `popup` slot, or anchored to this button, sets it itself from the first render; set it only for another kind of popup. */
1283
1279
  'popupType'?: NLDDIconButton['popupType'];
1284
1280
  /** Width mode: 'full' (stretches to container) or any CSS length (e.g. '240px') */
1285
1281
  'width'?: NLDDIconButton['width'];
@@ -1301,7 +1297,7 @@ declare module 'vue' {
1301
1297
  'href'?: NLDDIconButton['href'];
1302
1298
  /** Link target (e.g. '_blank'); only used when href is set. With '_blank' the "opens in new tab" announcement is folded into the aria-label for screen readers (WCAG 2.1 SC 3.2.2). */
1303
1299
  'target'?: NLDDIconButton['target'];
1304
- /** Link rel attribute; defaults to 'noopener noreferrer' when target is '_blank' */
1300
+ /** Link rel attribute, used with href; with target '_blank', 'noopener noreferrer' is added to whatever you set */
1305
1301
  'rel'?: NLDDIconButton['rel'];
1306
1302
  /** Override translation keys (e.g. the "opens in new tab" announcement); unset keys fall back to Dutch. */
1307
1303
  'translations'?: NLDDIconButton['translations'];
@@ -1314,14 +1310,14 @@ declare module 'vue' {
1314
1310
  };
1315
1311
 
1316
1312
  type NLDDIconCellProps = {
1317
- /** Vertical alignment: 'top' | 'center' | 'bottom' (default: 'center') */
1318
- 'vertical-alignment'?: NLDDIconCell['verticalAlignment'];
1319
- /** Vertical alignment: 'top' | 'center' | 'bottom' (default: 'center') */
1320
- 'verticalAlignment'?: NLDDIconCell['verticalAlignment'];
1321
1313
  /** Size: '16' | '20' | '24' | '32' (default: '24') */
1322
1314
  'size'?: NLDDIconCell['size'];
1323
1315
  /** Color variant of the icon (default: 'content') */
1324
1316
  'color'?: NLDDIconCell['color'];
1317
+ /** Vertical alignment: 'top' | 'center' | 'bottom' (default: 'center') */
1318
+ 'vertical-alignment'?: NLDDIconCell['verticalAlignment'];
1319
+ /** Vertical alignment: 'top' | 'center' | 'bottom' (default: 'center') */
1320
+ 'verticalAlignment'?: NLDDIconCell['verticalAlignment'];
1325
1321
  /** Icon name (renders `<nldd-icon>`). Takes precedence over the default slot. */
1326
1322
  'icon'?: NLDDIconCell['icon'];
1327
1323
  'hide-below'?: NLDDIconCell['hideBelow'];
@@ -1483,7 +1479,7 @@ declare module 'vue' {
1483
1479
  'href'?: NLDDLink['href'];
1484
1480
  /** Link target (e.g. '_blank'); adjusts rel automatically. With '_blank' the link adds a visually hidden "Opent in nieuw tabblad" announcement for screen readers (WCAG 2.1 SC 3.2.2). */
1485
1481
  'target'?: NLDDLink['target'];
1486
- /** Link rel attribute; defaults to 'noopener noreferrer' with target='_blank' */
1482
+ /** Link rel attribute; with target '_blank', 'noopener noreferrer' is added to whatever you set */
1487
1483
  'rel'?: NLDDLink['rel'];
1488
1484
  /** Text size: 'inherit' (the default) follows the surrounding text and lays the link out inline, so it wraps in running prose. 'xs' | 'sm' | 'md' | 'lg' pin a size and switch to inline-flex, which baseline-aligns a start or end icon with an explicit gap. */
1489
1485
  'size'?: NLDDLink['size'];
@@ -1516,8 +1512,6 @@ declare module 'vue' {
1516
1512
  'variant'?: NLDDList['variant'];
1517
1513
  /** A11y role and behavior (default 'list'). See the docblock above. */
1518
1514
  'type'?: NLDDList['type'];
1519
- /** Enables drag-to-reorder and pushes `reorderable` onto the items. Only valid with `type="list"`; there the arrow keys move rows instead of focus. */
1520
- 'reorderable'?: NLDDList['reorderable'];
1521
1515
  /** When to draw the lines between the items (default 'always'). `on-touch` draws them only where the primary input is touch, under `(pointer: coarse)`: a pointer has the hover highlight to tell one row from the next and a finger has nothing, so the line earns its place in the one case and is clutter in the other. `never` hides them everywhere */
1522
1516
  'dividers'?: NLDDList['dividers'];
1523
1517
  /** Listbox only: caps the options' scroll region at this CSS length (e.g. '320px'). Unset means no cap. */
@@ -1528,6 +1522,8 @@ declare module 'vue' {
1528
1522
  'accessibleLabel'?: NLDDList['accessibleLabel'];
1529
1523
  /** Override translation keys; unset keys fall back to Dutch */
1530
1524
  'translations'?: NLDDList['translations'];
1525
+ /** Enables drag-to-reorder and pushes `reorderable` onto the items. Only valid with `type="list"`; there the arrow keys move rows instead of focus. */
1526
+ 'reorderable'?: NLDDList['reorderable'];
1531
1527
  /** Reorderable `type="list"`: `{ fromIndex, toIndex }` on drop */
1532
1528
  'onNlddReorder'?: (event: CustomEvent) => void;
1533
1529
  /** `type="listbox"`: search value changed; `{ value }`. Toggle `[hidden]` on items to filter. */
@@ -1537,30 +1533,38 @@ declare module 'vue' {
1537
1533
  type NLDDListItemProps = {
1538
1534
  /** Row size (default: 'md'). Pushed onto the cells whose `size` means the same scale (nldd-text-cell, nldd-drag-handle-cell), so it is written once per row instead of once per cell. A size set on the cell itself wins. Cells where `size` means something else — pixels on nldd-icon-cell / nldd-spacer-cell, a heading scale on nldd-title-cell — are left alone. */
1539
1535
  'size'?: NLDDListItem['size'];
1540
- /** 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`. */
1541
- 'selected'?: NLDDListItem['selected'];
1542
- /** 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. */
1543
- 'current'?: NLDDListItem['current'];
1536
+ /** Renders the item as an `<a>` with this URL. Wins over `checkbox` and `button`; without any of the three the item is a plain container with no action. */
1537
+ 'href'?: NLDDListItem['href'];
1538
+ /** Link target forwarded to the `<a>` (e.g. '_blank'); only applies with `href`. With '_blank' a visually hidden "opens in new tab" announcement is added for assistive technology. */
1539
+ 'target'?: NLDDListItem['target'];
1540
+ /** Link rel forwarded to the `<a>`, only with `href`; with target '_blank', 'noopener noreferrer' is added to whatever you set */
1541
+ 'rel'?: NLDDListItem['rel'];
1544
1542
  /** Renders the item as a `<button>`. Last of the three: `href` and `checkbox` both win over it. */
1545
1543
  'button'?: NLDDListItem['button'];
1546
1544
  /** Makes the whole row a `role="checkbox"` control. Wins over `button`, loses to `href`. */
1547
1545
  'checkbox'?: NLDDListItem['checkbox'];
1548
1546
  /** Makes the whole row one radio of a group: the action becomes a `role="radio"` button carrying `aria-checked`, and activation sets `checked` (never clears it) and fires `change`. Put the rows in an `nldd-list type="radiogroup"`, which is what makes them a set. Wins over `button`, loses to `href` and `checkbox`. The arrow keys move focus without checking, where a native radio group and `nldd-radio-button-group` check as they go: a row can carry more than a label, so stepping past one should not commit it. */
1549
1547
  'radio'?: NLDDListItem['radio'];
1548
+ /** 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. */
1549
+ 'reorderable'?: NLDDListItem['reorderable'];
1550
+ /** 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`. */
1551
+ 'selected'?: NLDDListItem['selected'];
1550
1552
  /** Checked state of a `checkbox` or `radio` row. A checkbox row toggles it on activation, a radio row only ever sets it */
1551
1553
  'checked'?: NLDDListItem['checked'];
1552
- /** 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. */
1553
- 'disabled'?: NLDDListItem['disabled'];
1554
1554
  /** 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. */
1555
1555
  'expanded'?: NLDDListItem['expanded'];
1556
- /** Renders the item as an `<a>` with this URL. Wins over `checkbox` and `button`; without any of the three the item is a plain container with no action. */
1557
- 'href'?: NLDDListItem['href'];
1558
- /** Link target forwarded to the `<a>` (e.g. '_blank'); only applies with `href`. With '_blank' a visually hidden "opens in new tab" announcement is added for assistive technology. */
1559
- 'target'?: NLDDListItem['target'];
1560
- /** Link rel forwarded to the `<a>` (e.g. 'noopener noreferrer'); only applies with `href` */
1561
- 'rel'?: NLDDListItem['rel'];
1562
- /** 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. */
1563
- 'reorderable'?: NLDDListItem['reorderable'];
1556
+ /** 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. */
1557
+ 'current'?: NLDDListItem['current'];
1558
+ /** 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. */
1559
+ 'disabled'?: NLDDListItem['disabled'];
1560
+ /** 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. */
1561
+ 'divider-start'?: NLDDListItem['dividerStart'];
1562
+ /** 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. */
1563
+ 'dividerStart'?: NLDDListItem['dividerStart'];
1564
+ /** The divider stops after this cell. With several markers the line runs from the first start to the last end. */
1565
+ 'divider-end'?: NLDDListItem['dividerEnd'];
1566
+ /** The divider stops after this cell. With several markers the line runs from the first start to the last end. */
1567
+ 'dividerEnd'?: NLDDListItem['dividerEnd'];
1564
1568
  'translations'?: NLDDListItem['translations'];
1565
1569
  /** Nested rows sit in this item's `children` slot, not the list's, so a plain `querySelector` from the list walks past them. */
1566
1570
  'childRows'?: NLDDListItem['childRows'];
@@ -1571,41 +1575,65 @@ declare module 'vue' {
1571
1575
  };
1572
1576
 
1573
1577
  type NLDDListItemSegmentProps = {
1574
- /** Renders the segment as a `<button>`. Last of the three: `href` and `checkbox` both win over it. */
1575
- 'button'?: NLDDListItemSegment['button'];
1578
+ /** `full` lets the segment grow to fill the row (default: 'fit-content') */
1579
+ 'width'?: NLDDListItemSegment['width'];
1576
1580
  /** Renders the segment as an `<a>` with this URL. Wins over `checkbox` and `button`. */
1577
1581
  'href'?: NLDDListItemSegment['href'];
1578
1582
  /** Link target forwarded to the `<a>`; only applies with `href` */
1579
1583
  'target'?: NLDDListItemSegment['target'];
1580
- /** Link rel forwarded to the `<a>`; only applies with `href` */
1584
+ /** Link rel forwarded to the `<a>`, only with `href`; with target '_blank', 'noopener noreferrer' is added to whatever you set */
1581
1585
  'rel'?: NLDDListItemSegment['rel'];
1586
+ /** Renders the segment as a `<button>`. Last of the three: `href` and `checkbox` both win over it. */
1587
+ 'button'?: NLDDListItemSegment['button'];
1582
1588
  /** Makes the segment a `role="checkbox"` control. Wins over `button`, loses to `href`. */
1583
1589
  'checkbox'?: NLDDListItemSegment['checkbox'];
1590
+ /** Marks the segment as the row's disclosure control: `aria-expanded` comes from the parent item's `expanded`, so the state lives in one place. A slotted `nldd-icon-cell` rotates a quarter turn while the row is open */
1591
+ 'disclosure'?: NLDDListItemSegment['disclosure'];
1592
+ /** Accessible name for the control. Set it when the segment holds only an icon, or when the cell text does not describe the action. */
1593
+ 'accessible-label'?: NLDDListItemSegment['accessibleLabel'];
1594
+ /** Accessible name for the control. Set it when the segment holds only an icon, or when the cell text does not describe the action. */
1595
+ 'accessibleLabel'?: NLDDListItemSegment['accessibleLabel'];
1584
1596
  /** Checked state of a `checkbox` segment; it toggles on activation */
1585
1597
  'checked'?: NLDDListItemSegment['checked'];
1586
1598
  /** Disclosure state, reflected as `aria-expanded` on the control, and painted: the segment stays lit a step above hover for as long as what it opened is on screen, so a menu reads as hanging off this row rather than floating over the list. Set it on the segment that opens something (a tree row's chevron, a menu). Leave it off entirely when the segment discloses nothing — an absent attribute emits no aria-expanded. */
1587
1599
  'expanded'?: NLDDListItemSegment['expanded'];
1588
- /** Marks the segment as the row's disclosure control: `aria-expanded` comes from the parent item's `expanded`, so the state lives in one place. A slotted `nldd-icon-cell` rotates a quarter turn while the row is open */
1589
- 'disclosure'?: NLDDListItemSegment['disclosure'];
1600
+ /** Type of popup this segment opens: 'menu' | 'listbox' | 'dialog' | 'tree' | 'grid'. Becomes aria-haspopup on the control and makes aria-expanded permanent, so a row of identical "more" segments says what it opens before anything is open. An nldd-menu or nldd-popover anchored here sets it itself from the first render. */
1601
+ 'popup-type'?: NLDDListItemSegment['popupType'];
1602
+ /** Type of popup this segment opens: 'menu' | 'listbox' | 'dialog' | 'tree' | 'grid'. Becomes aria-haspopup on the control and makes aria-expanded permanent, so a row of identical "more" segments says what it opens before anything is open. An nldd-menu or nldd-popover anchored here sets it itself from the first render. */
1603
+ 'popupType'?: NLDDListItemSegment['popupType'];
1604
+ /** 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. */
1605
+ 'popovertarget'?: NLDDListItemSegment['popovertarget'];
1590
1606
  /** 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. */
1591
1607
  'current'?: NLDDListItemSegment['current'];
1592
1608
  /** 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. */
1593
1609
  'disabled'?: NLDDListItemSegment['disabled'];
1594
- /** `full` lets the segment grow to fill the row (default: 'fit-content') */
1595
- 'width'?: NLDDListItemSegment['width'];
1596
- /** Accessible name for the control. Set it when the segment holds only an icon, or when the cell text does not describe the action. */
1597
- 'accessible-label'?: NLDDListItemSegment['accessibleLabel'];
1598
- /** Accessible name for the control. Set it when the segment holds only an icon, or when the cell text does not describe the action. */
1599
- 'accessibleLabel'?: NLDDListItemSegment['accessibleLabel'];
1610
+ /** The row's divider starts at this cell instead of at its first text or title cell. */
1611
+ 'divider-start'?: NLDDListItemSegment['dividerStart'];
1612
+ /** The row's divider starts at this cell instead of at its first text or title cell. */
1613
+ 'dividerStart'?: NLDDListItemSegment['dividerStart'];
1614
+ /** The row's divider stops after this cell. */
1615
+ 'divider-end'?: NLDDListItemSegment['dividerEnd'];
1616
+ /** The row's divider stops after this cell. */
1617
+ 'dividerEnd'?: NLDDListItemSegment['dividerEnd'];
1618
+ /** Direct element reference to that popover, for one living in another tree (an nldd-menu reparented to the body). IDL-only, like the counterpart on nldd-icon-button, so the browser still treats this segment's button as the popover's invoker. */
1619
+ 'popoverTargetElement'?: NLDDListItemSegment['popoverTargetElement'];
1620
+ /** Action the browser performs on click, mirroring popovertargetaction. */
1621
+ 'popoverTargetAction'?: NLDDListItemSegment['popoverTargetAction'];
1600
1622
  /** On a `checkbox` segment after it toggles; detail: { checked: boolean } */
1601
1623
  'onChange'?: (event: CustomEvent) => void;
1602
1624
  };
1603
1625
 
1604
1626
  type NLDDMenuProps = {
1627
+ /** 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). */
1628
+ 'width'?: NLDDMenu['width'];
1605
1629
  /** 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. */
1606
1630
  'anchor'?: NLDDMenu['anchor'];
1607
1631
  /** Floating UI placement. Default: 'bottom-start'. */
1608
1632
  'placement'?: NLDDMenu['placement'];
1633
+ /** Maximum number of visible items before the menu scrolls. Sets --_max-items internally. Default: 0 (no limit). */
1634
+ 'max-items'?: NLDDMenu['maxItems'];
1635
+ /** Maximum number of visible items before the menu scrolls. Sets --_max-items internally. Default: 0 (no limit). */
1636
+ 'maxItems'?: NLDDMenu['maxItems'];
1609
1637
  /** Text of the default empty-state dialog. Falls back to Dutch i18n "Geen opties beschikbaar". */
1610
1638
  'empty-text'?: NLDDMenu['emptyText'];
1611
1639
  /** Text of the default empty-state dialog. Falls back to Dutch i18n "Geen opties beschikbaar". */
@@ -1614,12 +1642,6 @@ declare module 'vue' {
1614
1642
  'empty-supporting-text'?: NLDDMenu['emptySupportingText'];
1615
1643
  /** Supporting text of the default empty-state dialog. */
1616
1644
  'emptySupportingText'?: NLDDMenu['emptySupportingText'];
1617
- /** 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). */
1618
- 'width'?: NLDDMenu['width'];
1619
- /** Maximum number of visible items before the menu scrolls. Sets --_max-items internally. Default: 0 (no limit). */
1620
- 'max-items'?: NLDDMenu['maxItems'];
1621
- /** Maximum number of visible items before the menu scrolls. Sets --_max-items internally. Default: 0 (no limit). */
1622
- 'maxItems'?: NLDDMenu['maxItems'];
1623
1645
  /** Override one or more translation keys. Unset keys fall back to the Dutch default. */
1624
1646
  'translations'?: NLDDMenu['translations'];
1625
1647
  /** Custom filter function (query, item) => boolean. */
@@ -1696,32 +1718,32 @@ declare module 'vue' {
1696
1718
  };
1697
1719
 
1698
1720
  type NLDDMenuItemProps = {
1721
+ /** Marks the item as destructive (red text; red highlight bg). Use for irreversible actions like "Delete". Color is the only built-in signal, so per WCAG 1.4.1 the item's own label must convey the destructive nature (e.g. "Verwijder") — don't rely on the red alone. Confirming the action (e.g. a follow-up dialog) is the consumer's responsibility. */
1722
+ 'destructive'?: NLDDMenuItem['destructive'];
1699
1723
  /** Display text. Supports **bold** markdown syntax. */
1700
1724
  'text'?: NLDDMenuItem['text'];
1701
- /** A value of the item's own, read off the item in a `select` handler. The default filter matches on it as well as on `text` and `aliases`. Not a form value: this component is not form-associated. */
1702
- 'value'?: NLDDMenuItem['value'];
1703
- /** Optional link target. A plain button item with an href renders as an `<a>` so it is a real link (middle-click, open in new tab, copy link). Ignored for submenu openers, checkbox/radio items, and while disabled. */
1704
- 'href'?: NLDDMenuItem['href'];
1705
- /** Space-separated alternative search terms. */
1706
- 'aliases'?: NLDDMenuItem['aliases'];
1707
1725
  /** Secondary label shown on the right side. */
1708
1726
  'details'?: NLDDMenuItem['details'];
1727
+ /** Icon name rendered before the text. */
1728
+ 'icon'?: NLDDMenuItem['icon'];
1709
1729
  /** Keyboard shortcut hint shown on the right, e.g. 'Cmd+E'. Display only (rendered via nldd-keyboard-shortcut) — it does not bind the key; wire up the handling in your app. Hidden on touch-only devices, where it isn't invokable. */
1710
1730
  'shortcut'?: NLDDMenuItem['shortcut'];
1711
1731
  /** / shortcut-windows / shortcut-linux - Per-OS overrides for `shortcut`, picked by detected OS (falls back to `shortcut`). */
1712
1732
  'shortcut-mac'?: NLDDMenuItem['shortcutMac'];
1713
1733
  /** / shortcut-windows / shortcut-linux - Per-OS overrides for `shortcut`, picked by detected OS (falls back to `shortcut`). */
1714
1734
  'shortcutMac'?: NLDDMenuItem['shortcutMac'];
1715
- /** Icon name rendered before the text (nldd-icon name). */
1716
- 'icon'?: NLDDMenuItem['icon'];
1735
+ /** Optional link target. A plain button item with an href renders as an `<a>` so it is a real link (middle-click, open in new tab, copy link). Ignored for submenu openers, checkbox/radio items, and while disabled. */
1736
+ 'href'?: NLDDMenuItem['href'];
1717
1737
  /** Item type: 'button' | 'checkbox' | 'radio'. Default: 'button'. */
1718
1738
  'type'?: NLDDMenuItem['type'];
1719
1739
  /** Selected state for checkbox and radio types. */
1720
1740
  'selected'?: NLDDMenuItem['selected'];
1721
- /** Marks the item as destructive (red text; red highlight bg). Use for irreversible actions like "Delete". Color is the only built-in signal, so per WCAG 1.4.1 the item's own label must convey the destructive nature (e.g. "Verwijder") — don't rely on the red alone. Confirming the action (e.g. a follow-up dialog) is the consumer's responsibility. */
1722
- 'destructive'?: NLDDMenuItem['destructive'];
1723
1741
  /** Disabled state. */
1724
1742
  'disabled'?: NLDDMenuItem['disabled'];
1743
+ /** A value of the item's own, read off the item in a `select` handler. The default filter matches on it as well as on `text` and `aliases`. Not a form value: this component is not form-associated. */
1744
+ 'value'?: NLDDMenuItem['value'];
1745
+ /** Space-separated alternative search terms. */
1746
+ 'aliases'?: NLDDMenuItem['aliases'];
1725
1747
  /** Query substring to bold-highlight in text. Set by menu's filter(); also settable by consumers. */
1726
1748
  'query'?: NLDDMenuItem['query'];
1727
1749
  /** 'match' | 'predictive' (default: 'predictive'). See text-cell for details. */
@@ -1743,25 +1765,27 @@ declare module 'vue' {
1743
1765
  type NLDDModalDialogProps = {
1744
1766
  /** Forwarded to nldd-inline-dialog; 'alert' forces icon and color */
1745
1767
  'variant'?: NLDDModalDialog['variant'];
1746
- /** Forwarded to nldd-inline-dialog; absent when not set */
1747
- 'icon'?: NLDDModalDialog['icon'];
1768
+ /** Forwarded to nldd-inline-dialog. Unset derives it there: slotted content aligns left, a bare message stays centered. */
1769
+ 'horizontal-alignment'?: NLDDModalDialog['horizontalAlignment'];
1770
+ /** Forwarded to nldd-inline-dialog. Unset derives it there: slotted content aligns left, a bare message stays centered. */
1771
+ 'horizontalAlignment'?: NLDDModalDialog['horizontalAlignment'];
1748
1772
  /** Forwarded to nldd-inline-dialog; main text */
1749
1773
  'text'?: NLDDModalDialog['text'];
1750
1774
  /** Forwarded to nldd-inline-dialog; supporting text */
1751
1775
  'supporting-text'?: NLDDModalDialog['supportingText'];
1752
1776
  /** Forwarded to nldd-inline-dialog; supporting text */
1753
1777
  'supportingText'?: NLDDModalDialog['supportingText'];
1754
- /** Forwarded to nldd-inline-dialog. Unset derives it there: slotted content aligns left, a bare message stays centered. */
1755
- 'horizontal-alignment'?: NLDDModalDialog['horizontalAlignment'];
1756
- /** Forwarded to nldd-inline-dialog. Unset derives it there: slotted content aligns left, a bare message stays centered. */
1757
- 'horizontalAlignment'?: NLDDModalDialog['horizontalAlignment'];
1778
+ /** Forwarded to nldd-inline-dialog; absent when not set */
1779
+ 'icon'?: NLDDModalDialog['icon'];
1758
1780
  /** Accessible name for the dialog (aria-label); falls back to text */
1759
1781
  'accessible-label'?: NLDDModalDialog['accessibleLabel'];
1760
1782
  /** Accessible name for the dialog (aria-label); falls back to text */
1761
1783
  'accessibleLabel'?: NLDDModalDialog['accessibleLabel'];
1784
+ /** Whether the dialog is open. Set it to open or close the dialog, as an alternative to show() and hide(). The dialog clears it itself when it closes another way (Escape, the backdrop), so bind it together with the close event. */
1785
+ 'open'?: NLDDModalDialog['open'];
1762
1786
  /** When the dialog is opened */
1763
1787
  'onOpen'?: (event: CustomEvent) => void;
1764
- /** When the dialog is fully closed. Does not bubble: overlays nest, and a listener on one dialog asking about that dialog should not also hear the form it opened. */
1788
+ /** When the dialog is fully closed. Does not bubble: overlays nest, and a listener on one dialog asking about that dialog should not also hear the form it opened. The dismiss button of an nldd-top-title-bar inside it fires `dismiss`, which bubbles; this component catches that itself, closes and fires `close`. Listen to `close` alone, or one click runs your handler twice. */
1765
1789
  'onClose'?: (event: CustomEvent) => void;
1766
1790
  };
1767
1791
 
@@ -1824,10 +1848,6 @@ declare module 'vue' {
1824
1848
  };
1825
1849
 
1826
1850
  type NLDDNavigationSplitViewProps = {
1827
- /** Inspector hidden to free up space for other panes (read-only, set by the split view) */
1828
- 'inspector-auto-hidden'?: NLDDNavigationSplitView['inspectorAutoHidden'];
1829
- /** Inspector hidden to free up space for other panes (read-only, set by the split view) */
1830
- 'inspectorAutoHidden'?: NLDDNavigationSplitView['inspectorAutoHidden'];
1831
1851
  /** Always show the inspector as a sheet regardless of available space */
1832
1852
  'inspector-as-sheet'?: NLDDNavigationSplitView['inspectorAsSheet'];
1833
1853
  /** Always show the inspector as a sheet regardless of available space */
@@ -1836,10 +1856,6 @@ declare module 'vue' {
1836
1856
  'primary-sidebar-as-sheet'?: NLDDNavigationSplitView['primarySidebarAsSheet'];
1837
1857
  /** Always show the primary sidebar as a sheet, keeping main visible at full width */
1838
1858
  'primarySidebarAsSheet'?: NLDDNavigationSplitView['primarySidebarAsSheet'];
1839
- /** @deprecated alias for primary-sidebar-as-sheet (kept for backwards compatibility) */
1840
- 'sidebar-as-sheet'?: NLDDNavigationSplitView['sidebarAsSheet'];
1841
- /** @deprecated alias for primary-sidebar-as-sheet (kept for backwards compatibility) */
1842
- 'sidebarAsSheet'?: NLDDNavigationSplitView['sidebarAsSheet'];
1843
1859
  /** Accessible name for the inspector sheet dialog (default: 'Details') */
1844
1860
  'inspector-accessible-label'?: NLDDNavigationSplitView['inspectorAccessibleLabel'];
1845
1861
  /** Accessible name for the inspector sheet dialog (default: 'Details') */
@@ -1848,6 +1864,14 @@ declare module 'vue' {
1848
1864
  'primary-sidebar-accessible-label'?: NLDDNavigationSplitView['primarySidebarAccessibleLabel'];
1849
1865
  /** Accessible name for the primary sidebar sheet dialog (default: 'Navigatie') */
1850
1866
  'primarySidebarAccessibleLabel'?: NLDDNavigationSplitView['primarySidebarAccessibleLabel'];
1867
+ /** Inspector hidden to free up space for other panes (read-only, set by the split view) */
1868
+ 'inspector-auto-hidden'?: NLDDNavigationSplitView['inspectorAutoHidden'];
1869
+ /** Inspector hidden to free up space for other panes (read-only, set by the split view) */
1870
+ 'inspectorAutoHidden'?: NLDDNavigationSplitView['inspectorAutoHidden'];
1871
+ /** @deprecated alias for primary-sidebar-as-sheet (kept for backwards compatibility) */
1872
+ 'sidebar-as-sheet'?: NLDDNavigationSplitView['sidebarAsSheet'];
1873
+ /** @deprecated alias for primary-sidebar-as-sheet (kept for backwards compatibility) */
1874
+ 'sidebarAsSheet'?: NLDDNavigationSplitView['sidebarAsSheet'];
1851
1875
  /** @deprecated alias for primary-sidebar-accessible-label (kept for backwards compatibility) */
1852
1876
  'sidebar-accessible-label'?: NLDDNavigationSplitView['sidebarAccessibleLabel'];
1853
1877
  /** @deprecated alias for primary-sidebar-accessible-label (kept for backwards compatibility) */
@@ -1917,8 +1941,8 @@ declare module 'vue' {
1917
1941
  'width'?: NLDDOneHalfOneHalfSection['width'];
1918
1942
  /** Surface background ('inherit' default; 'base'/'tinted' paint and cascade a surface). */
1919
1943
  'background'?: NLDDOneHalfOneHalfSection['background'];
1920
- /** Color scheme ('inherit' default; 'inverted' = opposite of the surrounding page scheme). */
1921
- 'scheme'?: NLDDOneHalfOneHalfSection['scheme'];
1944
+ /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
1945
+ 'height'?: NLDDOneHalfOneHalfSection['height'];
1922
1946
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
1923
1947
  'padding-block'?: NLDDOneHalfOneHalfSection['paddingBlock'];
1924
1948
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
@@ -1951,8 +1975,6 @@ declare module 'vue' {
1951
1975
  'lgPaddingTop'?: NLDDOneHalfOneHalfSection['lgPaddingTop'];
1952
1976
  'lg-padding-bottom'?: NLDDOneHalfOneHalfSection['lgPaddingBottom'];
1953
1977
  'lgPaddingBottom'?: NLDDOneHalfOneHalfSection['lgPaddingBottom'];
1954
- /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
1955
- 'height'?: NLDDOneHalfOneHalfSection['height'];
1956
1978
  };
1957
1979
 
1958
1980
  type NLDDOneThirdTwoThirdsSectionProps = {
@@ -1960,8 +1982,8 @@ declare module 'vue' {
1960
1982
  'width'?: NLDDOneThirdTwoThirdsSection['width'];
1961
1983
  /** Surface background ('inherit' default; 'base'/'tinted' paint and cascade a surface). */
1962
1984
  'background'?: NLDDOneThirdTwoThirdsSection['background'];
1963
- /** Color scheme ('inherit' default; 'inverted' = opposite of the surrounding page scheme). */
1964
- 'scheme'?: NLDDOneThirdTwoThirdsSection['scheme'];
1985
+ /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
1986
+ 'height'?: NLDDOneThirdTwoThirdsSection['height'];
1965
1987
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
1966
1988
  'padding-block'?: NLDDOneThirdTwoThirdsSection['paddingBlock'];
1967
1989
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
@@ -1994,11 +2016,15 @@ declare module 'vue' {
1994
2016
  'lgPaddingTop'?: NLDDOneThirdTwoThirdsSection['lgPaddingTop'];
1995
2017
  'lg-padding-bottom'?: NLDDOneThirdTwoThirdsSection['lgPaddingBottom'];
1996
2018
  'lgPaddingBottom'?: NLDDOneThirdTwoThirdsSection['lgPaddingBottom'];
1997
- /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
1998
- 'height'?: NLDDOneThirdTwoThirdsSection['height'];
1999
2019
  };
2000
2020
 
2001
2021
  type NLDDPageProps = {
2022
+ /** Use a gray background instead of white */
2023
+ 'background'?: NLDDPage['background'];
2024
+ /** Name of the landmark this page is: the region it becomes beside another page, or its main landmark */
2025
+ 'accessible-label'?: NLDDPage['accessibleLabel'];
2026
+ /** Name of the landmark this page is: the region it becomes beside another page, or its main landmark */
2027
+ 'accessibleLabel'?: NLDDPage['accessibleLabel'];
2002
2028
  /** Sticky header */
2003
2029
  'sticky-header'?: NLDDPage['stickyHeader'];
2004
2030
  /** Sticky header */
@@ -2007,8 +2033,8 @@ declare module 'vue' {
2007
2033
  'sticky-footer'?: NLDDPage['stickyFooter'];
2008
2034
  /** Sticky footer */
2009
2035
  'stickyFooter'?: NLDDPage['stickyFooter'];
2010
- /** Use a gray background instead of white */
2011
- 'background'?: NLDDPage['background'];
2036
+ /** Whether this page carries the document's landmarks: 'auto' (default) derives it from where the page sits, 'page' keeps banner, main and contentinfo, 'region' drops all three */
2037
+ 'landmarks'?: NLDDPage['landmarks'];
2012
2038
  'scrollTarget'?: NLDDPage['scrollTarget'];
2013
2039
  };
2014
2040
 
@@ -2027,10 +2053,10 @@ declare module 'vue' {
2027
2053
  };
2028
2054
 
2029
2055
  type NLDDPageFooterLegalBarItemProps = {
2030
- /** Link target. When omitted, the item renders as plain text. */
2031
- 'href'?: NLDDPageFooterLegalBarItem['href'];
2032
2056
  /** Item label. Falls back to the default slot. */
2033
2057
  'text'?: NLDDPageFooterLegalBarItem['text'];
2058
+ /** Link target. When omitted, the item renders as plain text. */
2059
+ 'href'?: NLDDPageFooterLegalBarItem['href'];
2034
2060
  };
2035
2061
 
2036
2062
  type NLDDPaginationProps = {
@@ -2117,34 +2143,35 @@ declare module 'vue' {
2117
2143
  };
2118
2144
 
2119
2145
  type NLDDPopoverProps = {
2146
+ /** 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. */
2147
+ 'width'?: NLDDPopover['width'];
2148
+ /** 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. */
2149
+ 'sm-full-height'?: NLDDPopover['smFullHeight'];
2150
+ /** 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. */
2151
+ 'smFullHeight'?: NLDDPopover['smFullHeight'];
2120
2152
  /** ID of the trigger element, used for positioning */
2121
2153
  'anchor'?: NLDDPopover['anchor'];
2122
2154
  /** Floating UI placement (default: 'bottom-start') */
2123
2155
  'placement'?: NLDDPopover['placement'];
2124
- /** 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. */
2125
- 'width'?: NLDDPopover['width'];
2126
2156
  /** CSS top position. When set (on its own, or together with other edge attributes or `centered`) Floating UI's anchor positioning is skipped and the popover stands free on the screen. The `anchor` is still needed for the ARIA link on the trigger. No effect on sm, where the bottom sheet wins. */
2127
2157
  'top'?: NLDDPopover['top'];
2128
- /** CSS left position. See `top` for the semantics. */
2129
- 'left'?: NLDDPopover['left'];
2130
2158
  /** CSS right position. See `top` for the semantics. */
2131
2159
  'right'?: NLDDPopover['right'];
2132
2160
  /** CSS bottom position. See `top` for the semantics. */
2133
2161
  'bottom'?: NLDDPopover['bottom'];
2162
+ /** CSS left position. See `top` for the semantics. */
2163
+ 'left'?: NLDDPopover['left'];
2134
2164
  /** Centers both axes on the viewport. Overridable per axis: `centered top="0"` is centered horizontally, aligned to the top. Mirrors CSS `place-items: center` with `align-items`/`justify-items` overrides. */
2135
2165
  'centered'?: NLDDPopover['centered'];
2136
- /** 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. */
2137
- 'sm-full-height'?: NLDDPopover['smFullHeight'];
2138
- /** 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. */
2139
- 'smFullHeight'?: NLDDPopover['smFullHeight'];
2140
2166
  /** (required) Accessible name (aria-label). Falls back to the i18n default ('Popover') when unset — always give a unique, describing name. */
2141
2167
  'accessible-label'?: NLDDPopover['accessibleLabel'];
2142
2168
  /** (required) Accessible name (aria-label). Falls back to the i18n default ('Popover') when unset — always give a unique, describing name. */
2143
2169
  'accessibleLabel'?: NLDDPopover['accessibleLabel'];
2144
2170
  /** Override translation keys; unset keys fall back to the Dutch default. */
2145
2171
  'translations'?: NLDDPopover['translations'];
2146
- 'anchorElement'?: NLDDPopover['anchorElement'];
2172
+ /** Whether the popover is open. Set it to open or close the popover, as an alternative to show() and hide(); opening needs an anchor, and without one it stays unset. The popover clears it itself when it closes another way (Escape, a click outside), so bind it together with the close event. */
2147
2173
  'open'?: NLDDPopover['open'];
2174
+ 'anchorElement'?: NLDDPopover['anchorElement'];
2148
2175
  /** When the popover opens */
2149
2176
  'onOpen'?: (event: CustomEvent) => void;
2150
2177
  /** When the popover closes. Does not bubble: overlays nest, and a listener on the sheet or window around this one should not hear it close. */
@@ -2321,55 +2348,55 @@ declare module 'vue' {
2321
2348
  };
2322
2349
 
2323
2350
  type NLDDRichTextProps = {
2351
+ /** 'content' (the default) takes the system's own content colors, each element its own. 'inherit' lets all text follow the color of the surface instead (for colored areas such as the filled categories). Links stay underlined as an affordance; secondary text (figcaption) gets the same color at a lowered opacity. Known v1 gaps: inline code, mark, tables and hr keep their own surfaces. */
2352
+ 'color'?: NLDDRichText['color'];
2324
2353
  /** Spacing between elements: 'flat' | 'tight' | 'snug' (default) | 'loose' */
2325
2354
  'spacing'?: NLDDRichText['spacing'];
2326
2355
  /** Centers the main column inside the container; without it, content is left-aligned */
2327
2356
  'centered'?: NLDDRichText['centered'];
2328
- /** 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. */
2329
- 'hyphens'?: NLDDRichText['hyphens'];
2330
- /** 'content' (the default) takes the system's own content colors, each element its own. 'inherit' lets all text follow the color of the surface instead (for colored areas such as the filled categories). Links stay underlined as an affordance; secondary text (figcaption) gets the same color at a lowered opacity. Known v1 gaps: inline code, mark, tables and hr keep their own surfaces. */
2331
- 'color'?: NLDDRichText['color'];
2332
2357
  /** Override translation keys; unset keys fall back to Dutch */
2333
2358
  'translations'?: NLDDRichText['translations'];
2359
+ /** 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. */
2360
+ 'hyphens'?: NLDDRichText['hyphens'];
2334
2361
  };
2335
2362
 
2336
2363
  type NLDDSearchFieldProps = {
2337
- /** The search value */
2338
- 'value'?: NLDDSearchField['value'];
2364
+ /** Field size: 'sm' | 'md' (default: 'md') */
2365
+ 'size'?: NLDDSearchField['size'];
2366
+ /** Optional fixed width (any CSS length, e.g. "240px"). Default: stretches to fill container. */
2367
+ 'width'?: NLDDSearchField['width'];
2339
2368
  /** Placeholder text for the input */
2340
2369
  'placeholder'?: NLDDSearchField['placeholder'];
2341
- /** Accessible label (aria-label) for the native input. Falls back to placeholder when not set. Set explicitly when a value is already present and the placeholder is no longer visible. */
2370
+ /** Accessible name (aria-label) of the native input. Falls back to `placeholder`, and keeps it when a value is typed. That works while the placeholder names the field ('Zoek een gebruiker'); set this when the placeholder is an example instead ('bijv. Jansen'). */
2342
2371
  'accessible-label'?: NLDDSearchField['accessibleLabel'];
2343
- /** Accessible label (aria-label) for the native input. Falls back to placeholder when not set. Set explicitly when a value is already present and the placeholder is no longer visible. */
2372
+ /** Accessible name (aria-label) of the native input. Falls back to `placeholder`, and keeps it when a value is typed. That works while the placeholder names the field ('Zoek een gebruiker'); set this when the placeholder is an example instead ('bijv. Jansen'). */
2344
2373
  'accessibleLabel'?: NLDDSearchField['accessibleLabel'];
2345
- /** Field size: 'sm' | 'md' (default: 'md') */
2346
- 'size'?: NLDDSearchField['size'];
2347
- /** Disabled state */
2348
- 'disabled'?: NLDDSearchField['disabled'];
2349
- /** Input name for form submission */
2350
- 'name'?: NLDDSearchField['name'];
2351
2374
  /** When set, shows a search button on the right */
2352
2375
  'show-search-button'?: NLDDSearchField['showSearchButton'];
2353
2376
  /** When set, shows a search button on the right */
2354
2377
  'showSearchButton'?: NLDDSearchField['showSearchButton'];
2355
2378
  /** Override translation keys; unset keys fall back to Dutch */
2356
2379
  'translations'?: NLDDSearchField['translations'];
2357
- /** Disables browser spellchecking on the inner input */
2358
- 'no-spellcheck'?: NLDDSearchField['noSpellcheck'];
2359
- /** Disables browser spellchecking on the inner input */
2360
- 'noSpellcheck'?: NLDDSearchField['noSpellcheck'];
2361
- /** Optional fixed width (any CSS length, e.g. "240px"). Default: stretches to fill container. */
2362
- 'width'?: NLDDSearchField['width'];
2380
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
2381
+ 'invalid'?: NLDDSearchField['invalid'];
2382
+ /** Disabled state */
2383
+ 'disabled'?: NLDDSearchField['disabled'];
2384
+ /** Input name for form submission */
2385
+ 'name'?: NLDDSearchField['name'];
2386
+ /** The search value */
2387
+ 'value'?: NLDDSearchField['value'];
2363
2388
  /** Required state */
2364
2389
  'required'?: NLDDSearchField['required'];
2365
- /** Regular expression the value has to match, as the native `pattern`. */
2366
- 'pattern'?: NLDDSearchField['pattern'];
2367
2390
  /** Fewest characters the value may have. */
2368
2391
  'minlength'?: NLDDSearchField['minlength'];
2369
2392
  /** Most characters the value may have. */
2370
2393
  'maxlength'?: NLDDSearchField['maxlength'];
2371
- /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
2372
- 'invalid'?: NLDDSearchField['invalid'];
2394
+ /** Regular expression the value has to match, as the native `pattern`. */
2395
+ 'pattern'?: NLDDSearchField['pattern'];
2396
+ /** Disables browser spellchecking on the inner input */
2397
+ 'no-spellcheck'?: NLDDSearchField['noSpellcheck'];
2398
+ /** Disables browser spellchecking on the inner input */
2399
+ 'noSpellcheck'?: NLDDSearchField['noSpellcheck'];
2373
2400
  /** Set by nldd-form-field. A consumer never writes this. */
2374
2401
  'describedByElements'?: NLDDSearchField['describedByElements'];
2375
2402
  'internals'?: NLDDSearchField['internals'];
@@ -2445,19 +2472,21 @@ declare module 'vue' {
2445
2472
  };
2446
2473
 
2447
2474
  type NLDDSheetProps = {
2448
- /** Sheet position: 'left' | 'right' | 'bottom' (default: 'right') */
2449
- 'placement'?: NLDDSheet['placement'];
2475
+ /** Custom width for side sheets (left/right) as a CSS length (e.g. '480px', '32rem'). Applied from the md breakpoint up; ignored on sm (bottom sheet) and for `placement="bottom"`. Clamped to `100vw - 2 * inset` so the sheet always fits. */
2476
+ 'width'?: NLDDSheet['width'];
2450
2477
  /** Custom height for bottom sheets (and for any sheet on sm viewports, where all placements collapse to bottom). Accepts: `'full'` (default — viewport minus top-inset, identical to omitting the attribute), `'fit-content'` (collapse to content size), or any CSS length/percentage (e.g. `'50dvh'`, `'480px'`, `'50%'`). Always clamped to `100dvh - top-inset` so the sheet can't extend past the dismiss-tap area. No effect on side sheets at md+. */
2451
2478
  'height'?: NLDDSheet['height'];
2452
- /** Accessible name for the dialog, forwarded as aria-label (default: 'Venster') */
2479
+ /** Sheet position: 'left' | 'right' | 'bottom' (default: 'right') */
2480
+ 'placement'?: NLDDSheet['placement'];
2481
+ /** Accessible name for the dialog, forwarded as aria-label. Unset, the sheet takes the text of the nldd-top-title-bar inside it, and without one it is called 'Venster'. */
2453
2482
  'accessible-label'?: NLDDSheet['accessibleLabel'];
2454
- /** Accessible name for the dialog, forwarded as aria-label (default: 'Venster') */
2483
+ /** Accessible name for the dialog, forwarded as aria-label. Unset, the sheet takes the text of the nldd-top-title-bar inside it, and without one it is called 'Venster'. */
2455
2484
  'accessibleLabel'?: NLDDSheet['accessibleLabel'];
2456
- /** Custom width for side sheets (left/right) as a CSS length (e.g. '480px', '32rem'). Applied from the md breakpoint up; ignored on sm (bottom sheet) and for `placement="bottom"`. Clamped to `100vw - 2 * inset` so the sheet always fits. */
2457
- 'width'?: NLDDSheet['width'];
2485
+ /** Whether the sheet is open. Set it to open or close the sheet, as an alternative to show() and hide(). The sheet clears it itself when it closes another way (Escape, the backdrop, the close button of its title bar), so bind it together with the close event. */
2486
+ 'open'?: NLDDSheet['open'];
2458
2487
  /** Fired when the sheet is opened */
2459
2488
  'onOpen'?: (event: CustomEvent) => void;
2460
- /** Fired when the sheet is fully closed. Does not bubble: overlays nest, and a listener on one sheet asking about that sheet should not also hear the form it opened. */
2489
+ /** Fired when the sheet is fully closed. Does not bubble: overlays nest, and a listener on one sheet asking about that sheet should not also hear the form it opened. The dismiss button of an nldd-top-title-bar inside it fires `dismiss`, which bubbles; this component catches that itself, closes and fires `close`. Listen to `close` alone, or one click runs your handler twice. */
2461
2490
  'onClose'?: (event: CustomEvent) => void;
2462
2491
  };
2463
2492
 
@@ -2472,28 +2501,28 @@ declare module 'vue' {
2472
2501
  type NLDDSidebarSectionProps = {
2473
2502
  /** Body max-width: 'full' removes the constraint; any CSS length overrides the default. */
2474
2503
  'width'?: NLDDSidebarSection['width'];
2475
- /** Sticky top inset on lg (CSS length; default = 16px). */
2476
- 'sticky-top'?: NLDDSidebarSection['stickyTop'];
2477
- /** Sticky top inset on lg (CSS length; default = 16px). */
2478
- 'stickyTop'?: NLDDSidebarSection['stickyTop'];
2479
- /** Sticky bottom inset on lg (CSS length; default = 16px). */
2480
- 'sticky-bottom'?: NLDDSidebarSection['stickyBottom'];
2481
- /** Sticky bottom inset on lg (CSS length; default = 16px). */
2482
- 'stickyBottom'?: NLDDSidebarSection['stickyBottom'];
2483
2504
  /** Accessible name for the sidebar (the aside landmark on lg and the sheet on sm/md). Default 'Zijbalk'. */
2484
2505
  'sidebar-label'?: NLDDSidebarSection['sidebarLabel'];
2485
2506
  /** Accessible name for the sidebar (the aside landmark on lg and the sheet on sm/md). Default 'Zijbalk'. */
2486
2507
  'sidebarLabel'?: NLDDSidebarSection['sidebarLabel'];
2508
+ /** Override translation keys (sheet title fallback, dismiss label); unset keys fall back to Dutch. */
2509
+ 'translations'?: NLDDSidebarSection['translations'];
2487
2510
  /** Opt out of the sheet: a narrow section stacks the sidebar above the main instead of collapsing. `collapsed` then stays false. */
2488
2511
  'no-collapse'?: NLDDSidebarSection['noCollapse'];
2489
2512
  /** Opt out of the sheet: a narrow section stacks the sidebar above the main instead of collapsing. `collapsed` then stays false. */
2490
2513
  'noCollapse'?: NLDDSidebarSection['noCollapse'];
2491
- /** Override translation keys (sheet title fallback, dismiss label); unset keys fall back to Dutch. */
2492
- 'translations'?: NLDDSidebarSection['translations'];
2514
+ /** Sticky top inset on lg (CSS length; default = 16px). */
2515
+ 'sticky-top'?: NLDDSidebarSection['stickyTop'];
2516
+ /** Sticky top inset on lg (CSS length; default = 16px). */
2517
+ 'stickyTop'?: NLDDSidebarSection['stickyTop'];
2518
+ /** Sticky bottom inset on lg (CSS length; default = 16px). */
2519
+ 'sticky-bottom'?: NLDDSidebarSection['stickyBottom'];
2520
+ /** Sticky bottom inset on lg (CSS length; default = 16px). */
2521
+ 'stickyBottom'?: NLDDSidebarSection['stickyBottom'];
2493
2522
  /** Read-only, reflected: true while the sidebar is a sheet (the section is narrower than lg). Target it via CSS to reveal sheet-only chrome. */
2494
2523
  'collapsed'?: NLDDSidebarSection['collapsed'];
2495
2524
  'background'?: NLDDSidebarSection['background'];
2496
- 'scheme'?: NLDDSidebarSection['scheme'];
2525
+ 'height'?: NLDDSidebarSection['height'];
2497
2526
  'padding-block'?: NLDDSidebarSection['paddingBlock'];
2498
2527
  'paddingBlock'?: NLDDSidebarSection['paddingBlock'];
2499
2528
  'padding-top'?: NLDDSidebarSection['paddingTop'];
@@ -2518,7 +2547,6 @@ declare module 'vue' {
2518
2547
  'lgPaddingTop'?: NLDDSidebarSection['lgPaddingTop'];
2519
2548
  'lg-padding-bottom'?: NLDDSidebarSection['lgPaddingBottom'];
2520
2549
  'lgPaddingBottom'?: NLDDSidebarSection['lgPaddingBottom'];
2521
- 'height'?: NLDDSidebarSection['height'];
2522
2550
  /** The sidebar sheet opened. */
2523
2551
  'onOpen'?: (event: CustomEvent) => void;
2524
2552
  /** The sidebar sheet closed. */
@@ -2540,8 +2568,8 @@ declare module 'vue' {
2540
2568
  'verticalAlignment'?: NLDDSimpleSection['verticalAlignment'];
2541
2569
  /** Surface background ('inherit' default; 'base'/'tinted' paint and cascade a surface). */
2542
2570
  'background'?: NLDDSimpleSection['background'];
2543
- /** Color scheme ('inherit' default; 'inverted' = opposite of the surrounding page scheme). */
2544
- 'scheme'?: NLDDSimpleSection['scheme'];
2571
+ /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
2572
+ 'height'?: NLDDSimpleSection['height'];
2545
2573
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
2546
2574
  'padding-block'?: NLDDSimpleSection['paddingBlock'];
2547
2575
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
@@ -2574,8 +2602,6 @@ declare module 'vue' {
2574
2602
  'lgPaddingTop'?: NLDDSimpleSection['lgPaddingTop'];
2575
2603
  'lg-padding-bottom'?: NLDDSimpleSection['lgPaddingBottom'];
2576
2604
  'lgPaddingBottom'?: NLDDSimpleSection['lgPaddingBottom'];
2577
- /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
2578
- 'height'?: NLDDSimpleSection['height'];
2579
2605
  };
2580
2606
 
2581
2607
  type NLDDSkipLinkProps = {
@@ -2645,16 +2671,16 @@ declare module 'vue' {
2645
2671
  };
2646
2672
 
2647
2673
  type NLDDSplitViewPaneProps = {
2648
- /** The pane has content (default: false) */
2649
- 'has-content'?: NLDDSplitViewPane['hasContent'];
2650
- /** The pane has content (default: false) */
2651
- 'hasContent'?: NLDDSplitViewPane['hasContent'];
2674
+ /** Use a tinted background color (cascades to descendants) */
2675
+ 'background'?: NLDDSplitViewPane['background'];
2652
2676
  /** Hide the back button (set automatically by the split view) */
2653
2677
  'hide-back'?: NLDDSplitViewPane['hideBack'];
2654
2678
  /** Hide the back button (set automatically by the split view) */
2655
2679
  'hideBack'?: NLDDSplitViewPane['hideBack'];
2656
- /** Use a tinted background color (cascades to descendants) */
2657
- 'background'?: NLDDSplitViewPane['background'];
2680
+ /** The pane has content (default: false) */
2681
+ 'has-content'?: NLDDSplitViewPane['hasContent'];
2682
+ /** The pane has content (default: false) */
2683
+ 'hasContent'?: NLDDSplitViewPane['hasContent'];
2658
2684
  };
2659
2685
 
2660
2686
  type NLDDStackedSplitViewProps = {
@@ -2673,7 +2699,7 @@ declare module 'vue' {
2673
2699
  'href'?: NLDDStatusBar['href'];
2674
2700
  /** Link target (e.g. '_blank'); only used with href */
2675
2701
  'target'?: NLDDStatusBar['target'];
2676
- /** Link rel; defaults to 'noopener noreferrer' with target='_blank' */
2702
+ /** Link rel, used with href; with target '_blank', 'noopener noreferrer' is added to whatever you set */
2677
2703
  'rel'?: NLDDStatusBar['rel'];
2678
2704
  /** Makes the whole bar a button; ignored when href is set */
2679
2705
  'button'?: NLDDStatusBar['button'];
@@ -2847,10 +2873,10 @@ declare module 'vue' {
2847
2873
  'accessible-label'?: NLDDTable['accessibleLabel'];
2848
2874
  /** Accessible name for the table. Strongly recommended — role="table" needs a name. A missing label is DEV-warned and a generic fallback name is used. */
2849
2875
  'accessibleLabel'?: NLDDTable['accessibleLabel'];
2850
- /** Opt into row selection: body rows expose aria-selected (true/false). Without it, rows omit aria-selected so a non-selectable table isn't announced as selectable. */
2851
- 'selectable'?: NLDDTable['selectable'];
2852
2876
  /** Override translation keys; unset keys fall back to Dutch */
2853
2877
  'translations'?: NLDDTable['translations'];
2878
+ /** Opt into row selection: body rows expose aria-selected (true/false). Without it, rows omit aria-selected so a non-selectable table isn't announced as selectable. */
2879
+ 'selectable'?: NLDDTable['selectable'];
2854
2880
  };
2855
2881
 
2856
2882
  type NLDDTableRowProps = {
@@ -2859,6 +2885,8 @@ declare module 'vue' {
2859
2885
  };
2860
2886
 
2861
2887
  type NLDDTagProps = {
2888
+ /** What is visible: 'text' | 'icon' | 'icon-and-text'. Unset → detected from which of text/icon is present. */
2889
+ 'variant'?: NLDDTag['variant'];
2862
2890
  /** Color variant. Semantic: 'neutral' | 'accent' | 'success' | 'warning' | 'critical'. Rijkshuisstijl colors: 'lintblauw' | 'donkerblauw' | 'hemelblauw' | 'lichtblauw' | 'paars' | 'violet' | 'robijnrood' | 'roze' | 'rood' | 'oranje' | 'donkergeel' | 'geel' | 'donkerbruin' | 'bruin' | 'donkergroen' | 'groen' | 'mosgroen' | 'mintgroen'. (default: 'neutral') */
2863
2891
  'color'?: NLDDTag['color'];
2864
2892
  /** Tag size: 'sm' | 'md' (default: 'md') */
@@ -2867,8 +2895,6 @@ declare module 'vue' {
2867
2895
  'text'?: NLDDTag['text'];
2868
2896
  /** Icon before the text */
2869
2897
  'icon'?: NLDDTag['icon'];
2870
- /** What is visible: 'text' | 'icon' | 'icon-and-text'. Unset → detected from which of text/icon is present. */
2871
- 'variant'?: NLDDTag['variant'];
2872
2898
  /** Accessible label for screen readers. Use this on icon-only tags without visible text. */
2873
2899
  'accessible-label'?: NLDDTag['accessibleLabel'];
2874
2900
  /** Accessible label for screen readers. Use this on icon-only tags without visible text. */
@@ -2921,12 +2947,12 @@ declare module 'vue' {
2921
2947
  'verticalAlignment'?: NLDDTextCell['verticalAlignment'];
2922
2948
  /** Main text content. Supports **bold** syntax for inline bold segments. Falls back to default slot. */
2923
2949
  'text'?: NLDDTextCell['text'];
2924
- /** Optional overline text displayed above the main content. Supports **bold**. Falls back to `overline` slot. */
2925
- 'overline'?: NLDDTextCell['overline'];
2926
2950
  /** Optional supporting text displayed below the main content. Supports **bold**. Falls back to `supporting-text` slot. */
2927
2951
  'supporting-text'?: NLDDTextCell['supportingText'];
2928
2952
  /** Optional supporting text displayed below the main content. Supports **bold**. Falls back to `supporting-text` slot. */
2929
2953
  'supportingText'?: NLDDTextCell['supportingText'];
2954
+ /** Optional overline text displayed above the main content. Supports **bold**. Falls back to `overline` slot. */
2955
+ 'overline'?: NLDDTextCell['overline'];
2930
2956
  /** Query substring to bold-highlight across text fields. Empty = no marking. */
2931
2957
  'query'?: NLDDTextCell['query'];
2932
2958
  /** 'match' | 'predictive' (default: 'predictive') */
@@ -3137,12 +3163,12 @@ declare module 'vue' {
3137
3163
  };
3138
3164
 
3139
3165
  type NLDDTimelineTrackCellProps = {
3166
+ /** 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 */
3167
+ 'variant'?: NLDDTimelineTrackCell['variant'];
3140
3168
  /** 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 */
3141
3169
  'status'?: NLDDTimelineTrackCell['status'];
3142
3170
  /** 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 */
3143
3171
  'size'?: NLDDTimelineTrackCell['size'];
3144
- /** 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 */
3145
- 'variant'?: NLDDTimelineTrackCell['variant'];
3146
3172
  /** 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 */
3147
3173
  'direction'?: NLDDTimelineTrackCell['direction'];
3148
3174
  /** Place in the series (default 'between'): decides whether the line continues above the dot, below it, or on both sides. `only` is the single row in the series and gets a line on neither side: a track of one dot leads nowhere. On a `variant="none"` row, which is nothing but line, `only` leaves it out altogether: the track ends above it */
@@ -3164,8 +3190,20 @@ declare module 'vue' {
3164
3190
  type NLDDTitleProps = {
3165
3191
  /** Visual size of the title: 1–6 (default: 3) */
3166
3192
  'size'?: NLDDTitle['size'];
3167
- /** 'content' (the default) takes the system's own content colors. 'inherit' lets the title follow the text color of the surface instead (for colored areas such as the filled categories); overline and subtitle get the same color at a lowered opacity. */
3193
+ /** 'content' (the default) takes the system's own content colors. 'inherit' lets the title follow the text color of the surface instead (for colored areas such as the filled categories); overline and supporting-text get the same color at a lowered opacity. */
3168
3194
  'color'?: NLDDTitle['color'];
3195
+ /** Title text. Content in the default slot takes its place. */
3196
+ 'text'?: NLDDTitle['text'];
3197
+ /** Text below the title. Content in the supporting-text slot takes its place. */
3198
+ 'supporting-text'?: NLDDTitle['supportingText'];
3199
+ /** Text below the title. Content in the supporting-text slot takes its place. */
3200
+ 'supportingText'?: NLDDTitle['supportingText'];
3201
+ /** Text above the title. Content in the overline slot takes its place. */
3202
+ 'overline'?: NLDDTitle['overline'];
3203
+ /** Renders text as h1–h6; absent renders a p, for a title that is not a heading. */
3204
+ 'heading-level'?: NLDDTitle['headingLevel'];
3205
+ /** Renders text as h1–h6; absent renders a p, for a title that is not a heading. */
3206
+ 'headingLevel'?: NLDDTitle['headingLevel'];
3169
3207
  };
3170
3208
 
3171
3209
  type NLDDTitleCellProps = {
@@ -3197,12 +3235,12 @@ declare module 'vue' {
3197
3235
  'verticalAlignment'?: NLDDTitleCell['verticalAlignment'];
3198
3236
  /** Title text content. Supports **bold** syntax for inline bold segments. Falls back to default slot. */
3199
3237
  'text'?: NLDDTitleCell['text'];
3200
- /** Optional overline text displayed above the title. Supports **bold**. Falls back to `overline` slot. */
3201
- 'overline'?: NLDDTitleCell['overline'];
3202
3238
  /** Optional supporting text displayed below the title. Supports **bold**. Falls back to `supporting-text` slot. */
3203
3239
  'supporting-text'?: NLDDTitleCell['supportingText'];
3204
3240
  /** Optional supporting text displayed below the title. Supports **bold**. Falls back to `supporting-text` slot. */
3205
3241
  'supportingText'?: NLDDTitleCell['supportingText'];
3242
+ /** Optional overline text displayed above the title. Supports **bold**. Falls back to `overline` slot. */
3243
+ 'overline'?: NLDDTitleCell['overline'];
3206
3244
  /** Heading level for the title element: 1–6 (default: none, renders a <p>) */
3207
3245
  'heading-level'?: NLDDTitleCell['headingLevel'];
3208
3246
  /** Heading level for the title element: 1–6 (default: none, renders a <p>) */
@@ -3287,20 +3325,22 @@ declare module 'vue' {
3287
3325
  'text'?: NLDDToken['text'];
3288
3326
  /** Control type (default: 'none') */
3289
3327
  'control'?: NLDDToken['control'];
3290
- /** Reflects whether the token's menu is open (control="menu"); managed by the token. */
3291
- 'expanded'?: NLDDToken['expanded'];
3292
- /** Disabled state */
3293
- 'disabled'?: NLDDToken['disabled'];
3294
- /** Accessible label for the dismiss button (default: 'Verwijder') */
3328
+ /** Accessible label for the dismiss button. Unset, it names the token: `Verwijder "{text}"`, so a row of tokens does not read as a row of identical buttons. */
3295
3329
  'dismiss-text'?: NLDDToken['dismissText'];
3296
- /** Accessible label for the dismiss button (default: 'Verwijder') */
3330
+ /** Accessible label for the dismiss button. Unset, it names the token: `Verwijder "{text}"`, so a row of tokens does not read as a row of identical buttons. */
3297
3331
  'dismissText'?: NLDDToken['dismissText'];
3298
- /** Accessible label for the menu button (default: 'Toon opties') */
3332
+ /** Accessible label for the menu button. Unset, it is `Toon opties voor "{text}"`. */
3299
3333
  'menu-text'?: NLDDToken['menuText'];
3300
- /** Accessible label for the menu button (default: 'Toon opties') */
3334
+ /** Accessible label for the menu button. Unset, it is `Toon opties voor "{text}"`. */
3301
3335
  'menuText'?: NLDDToken['menuText'];
3336
+ /** Override translation keys; unset keys fall back to Dutch */
3337
+ 'translations'?: NLDDToken['translations'];
3302
3338
  /** Inside a roving-focus container (e.g. nldd-token-field): the host is the single tab stop, so the trailing control is not separately tabbable. */
3303
3339
  'roving'?: NLDDToken['roving'];
3340
+ /** Reflects whether the token's menu is open (control="menu"); managed by the token. */
3341
+ 'expanded'?: NLDDToken['expanded'];
3342
+ /** Disabled state */
3343
+ 'disabled'?: NLDDToken['disabled'];
3304
3344
  /** When the dismiss button is clicked */
3305
3345
  'onDismiss'?: (event: CustomEvent) => void;
3306
3346
  };
@@ -3386,18 +3426,6 @@ declare module 'vue' {
3386
3426
  };
3387
3427
 
3388
3428
  type NLDDToolbarTitleProps = {
3389
- /** Makes the mark and the name one link, for the place this window belongs to (usually the app's own start). The `action` slot stays outside it: a control inside a link is a control you cannot reach without following the link. */
3390
- 'href'?: NLDDToolbarTitle['href'];
3391
- /** Where the link opens; only meaningful with `href`. `_blank` adds rel="noopener noreferrer" and a visually hidden "opens in a new tab" announcement. */
3392
- 'target'?: NLDDToolbarTitle['target'];
3393
- /** Title text. */
3394
- 'text'?: NLDDToolbarTitle['text'];
3395
- /** Secondary supporting text shown below the title. */
3396
- 'supporting-text'?: NLDDToolbarTitle['supportingText'];
3397
- /** Secondary supporting text shown below the title. */
3398
- 'supportingText'?: NLDDToolbarTitle['supportingText'];
3399
- /** Text alignment: 'left' | 'center' (default: 'left'). */
3400
- 'align'?: NLDDToolbarTitle['align'];
3401
3429
  /** Preferred (fluid) width as a CSS length or percentage; the title grows toward it and shrinks to min-width. */
3402
3430
  'width'?: NLDDToolbarTitle['width'];
3403
3431
  /** Minimum width as a CSS length (default: '0', so the title shrink-wraps its content and the next element sits against it). */
@@ -3408,6 +3436,18 @@ declare module 'vue' {
3408
3436
  'max-width'?: NLDDToolbarTitle['maxWidth'];
3409
3437
  /** Maximum width as a CSS length (default: '240px'); the title text truncates with an ellipsis beyond it. The cap is lifted while the title is the sole toolbar element (it then stretches to fill the row). */
3410
3438
  'maxWidth'?: NLDDToolbarTitle['maxWidth'];
3439
+ /** Text alignment: 'left' | 'center' (default: 'left'). */
3440
+ 'align'?: NLDDToolbarTitle['align'];
3441
+ /** Title text. */
3442
+ 'text'?: NLDDToolbarTitle['text'];
3443
+ /** Secondary supporting text shown below the title. */
3444
+ 'supporting-text'?: NLDDToolbarTitle['supportingText'];
3445
+ /** Secondary supporting text shown below the title. */
3446
+ 'supportingText'?: NLDDToolbarTitle['supportingText'];
3447
+ /** Makes the mark and the name one link, for the place this window belongs to (usually the app's own start). The `action` slot stays outside it: a control inside a link is a control you cannot reach without following the link. */
3448
+ 'href'?: NLDDToolbarTitle['href'];
3449
+ /** Where the link opens; only meaningful with `href`. `_blank` adds rel="noopener noreferrer" and a visually hidden "opens in a new tab" announcement. */
3450
+ 'target'?: NLDDToolbarTitle['target'];
3411
3451
  /** Override translation keys (the new-tab announcement); unset keys fall back to Dutch. */
3412
3452
  'translations'?: NLDDToolbarTitle['translations'];
3413
3453
  };
@@ -3472,12 +3512,16 @@ declare module 'vue' {
3472
3512
  };
3473
3513
 
3474
3514
  type NLDDTopTitleBarProps = {
3475
- /** Title of the bar, rendered as the h1 in the title group. */
3515
+ /** Title of the bar, rendered as the heading in the title group. */
3476
3516
  'text'?: NLDDTopTitleBar['text'];
3477
- /** Subtitle under the title. */
3517
+ /** Text under the title. */
3478
3518
  'supporting-text'?: NLDDTopTitleBar['supportingText'];
3479
- /** Subtitle under the title. */
3519
+ /** Text under the title. */
3480
3520
  'supportingText'?: NLDDTopTitleBar['supportingText'];
3521
+ /** Heading level of the title: 1–6 (default: 1). Lower it where the bar is not the top of the page, such as a pane beside content that already has its h1. */
3522
+ 'heading-level'?: NLDDTopTitleBar['headingLevel'];
3523
+ /** Heading level of the title: 1–6 (default: 1). Lower it where the bar is not the top of the page, such as a pane beside content that already has its h1. */
3524
+ 'headingLevel'?: NLDDTopTitleBar['headingLevel'];
3481
3525
  /** Id of the element whose top edge triggers the compact state on scroll. Without it the state is static (see above). */
3482
3526
  'collapse-anchor'?: NLDDTopTitleBar['collapseAnchor'];
3483
3527
  /** Id of the element whose top edge triggers the compact state on scroll. Without it the state is static (see above). */
@@ -3505,8 +3549,8 @@ declare module 'vue' {
3505
3549
  'width'?: NLDDTwoThirdsOneThirdSection['width'];
3506
3550
  /** Surface background ('inherit' default; 'base'/'tinted' paint and cascade a surface). */
3507
3551
  'background'?: NLDDTwoThirdsOneThirdSection['background'];
3508
- /** Color scheme ('inherit' default; 'inverted' = opposite of the surrounding page scheme). */
3509
- 'scheme'?: NLDDTwoThirdsOneThirdSection['scheme'];
3552
+ /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
3553
+ 'height'?: NLDDTwoThirdsOneThirdSection['height'];
3510
3554
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
3511
3555
  'padding-block'?: NLDDTwoThirdsOneThirdSection['paddingBlock'];
3512
3556
  /** Block (top and bottom) padding override (token 0-96; '0' strips it). */
@@ -3539,8 +3583,6 @@ declare module 'vue' {
3539
3583
  'lgPaddingTop'?: NLDDTwoThirdsOneThirdSection['lgPaddingTop'];
3540
3584
  'lg-padding-bottom'?: NLDDTwoThirdsOneThirdSection['lgPaddingBottom'];
3541
3585
  'lgPaddingBottom'?: NLDDTwoThirdsOneThirdSection['lgPaddingBottom'];
3542
- /** Minimum section height (any CSS length, e.g. '400px', '100dvh') (mirrors width, which sets the body max-width). */
3543
- 'height'?: NLDDTwoThirdsOneThirdSection['height'];
3544
3586
  };
3545
3587
 
3546
3588
  type NLDDValidationItemProps = {
@@ -3576,42 +3618,44 @@ declare module 'vue' {
3576
3618
  };
3577
3619
 
3578
3620
  type NLDDWindowProps = {
3579
- /** A click on the backdrop does not close the window. For windows where dismissing by accident costs work: a wizard, a form with filled-in fields. Escape and the dismiss button keep working. */
3580
- 'no-light-dismiss'?: NLDDWindow['noLightDismiss'];
3581
- /** A click on the backdrop does not close the window. For windows where dismissing by accident costs work: a wizard, a form with filled-in fields. Escape and the dismiss button keep working. */
3582
- 'noLightDismiss'?: NLDDWindow['noLightDismiss'];
3583
- /** (required) Accessible name (aria-label). Falls back to the i18n default ('Venster') when unset. Always pass a unique, descriptive name per window. */
3584
- 'accessible-label'?: NLDDWindow['accessibleLabel'];
3585
- /** (required) Accessible name (aria-label). Falls back to the i18n default ('Venster') when unset. Always pass a unique, descriptive name per window. */
3586
- 'accessibleLabel'?: NLDDWindow['accessibleLabel'];
3587
- /** Override translation keys; unset keys fall back to the Dutch default. */
3588
- 'translations'?: NLDDWindow['translations'];
3621
+ /** Color scheme (default 'inherit'). */
3622
+ 'scheme'?: NLDDWindow['scheme'];
3623
+ /** CSS width (default: var(--components-window-default-width)) */
3624
+ 'width'?: NLDDWindow['width'];
3625
+ /** CSS height (default: content height) */
3626
+ 'height'?: NLDDWindow['height'];
3589
3627
  /** CSS top position of the top edge (e.g. '0', '100px') */
3590
3628
  'top'?: NLDDWindow['top'];
3591
- /** CSS left position of the left edge */
3592
- 'left'?: NLDDWindow['left'];
3593
3629
  /** CSS right value */
3594
3630
  'right'?: NLDDWindow['right'];
3595
3631
  /** CSS bottom value */
3596
3632
  'bottom'?: NLDDWindow['bottom'];
3633
+ /** CSS left position of the left edge */
3634
+ 'left'?: NLDDWindow['left'];
3597
3635
  /** Centers both axes on the viewport. Overridable per axis: `centered top="0"` is horizontally centered, top aligned. Mirrors CSS `place-items: center` with `align-items`/`justify-items` overrides. */
3598
3636
  'centered'?: NLDDWindow['centered'];
3599
- /** CSS width (default: var(--components-window-default-width)) */
3600
- 'width'?: NLDDWindow['width'];
3601
- /** CSS height (default: content height) */
3602
- 'height'?: NLDDWindow['height'];
3603
- /** Color scheme (default 'inherit'). */
3604
- 'scheme'?: NLDDWindow['scheme'];
3637
+ /** Accessible name (aria-label). Unset, the window takes the text of the nldd-top-title-bar inside it, and without one the i18n default ('Venster'). Each window needs a unique, descriptive name, from either. */
3638
+ 'accessible-label'?: NLDDWindow['accessibleLabel'];
3639
+ /** Accessible name (aria-label). Unset, the window takes the text of the nldd-top-title-bar inside it, and without one the i18n default ('Venster'). Each window needs a unique, descriptive name, from either. */
3640
+ 'accessibleLabel'?: NLDDWindow['accessibleLabel'];
3641
+ /** Override translation keys; unset keys fall back to the Dutch default. */
3642
+ 'translations'?: NLDDWindow['translations'];
3643
+ /** A click on the backdrop does not close the window. For windows where dismissing by accident costs work: a wizard, a form with filled-in fields. Escape and the dismiss button keep working. */
3644
+ 'no-light-dismiss'?: NLDDWindow['noLightDismiss'];
3645
+ /** A click on the backdrop does not close the window. For windows where dismissing by accident costs work: a wizard, a form with filled-in fields. Escape and the dismiss button keep working. */
3646
+ 'noLightDismiss'?: NLDDWindow['noLightDismiss'];
3647
+ /** Whether the window is open. Set it to open or close the window, as an alternative to show() and hide(). The window clears it itself when it closes another way (Escape, the backdrop, the close button of its title bar), so bind it together with the close event. */
3648
+ 'open'?: NLDDWindow['open'];
3605
3649
  /** When the window opens */
3606
3650
  'onOpen'?: (event: CustomEvent) => void;
3607
- /** When the window has fully closed. Does not bubble: overlays can sit inside each other, and a listener on one window should not also hear the form that opened it. */
3651
+ /** When the window has fully closed. Does not bubble: overlays can sit inside each other, and a listener on one window should not also hear the form that opened it. The dismiss button of an nldd-top-title-bar inside it fires `dismiss`, which bubbles; this component catches that itself, closes and fires `close`. Listen to `close` alone, or one click runs your handler twice. */
3608
3652
  'onClose'?: (event: CustomEvent) => void;
3609
3653
  };
3610
3654
 
3611
3655
  export interface GlobalComponents {
3612
3656
  /** 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. */
3613
3657
  'nldd-activity-indicator': DefineComponent<NLDDActivityIndicatorProps>;
3614
- /** The required root shell of a Nederlandse Digitale Dienst application. Always contains a split view or an nldd-page as direct content. 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. */
3658
+ /** 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. */
3615
3659
  'nldd-app-view': DefineComponent<NLDDAppViewProps>;
3616
3660
  /** 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. */
3617
3661
  'nldd-avatar': DefineComponent<NLDDAvatarProps>;
@@ -3635,11 +3679,11 @@ declare module 'vue' {
3635
3679
  /** A horizontal container for grouping buttons with a neutral background. Automatically propagates its size and variant to all child nldd-button and nldd-icon-button elements. Renders nldd-button-bar-divider elements as internal dividers — no separate component needed. */
3636
3680
  'nldd-button-bar': DefineComponent<NLDDButtonBarProps>;
3637
3681
  'nldd-button-bar-divider': DefineComponent<anonymous_0Props>;
3638
- /** A container for grouping related buttons together, either horizontally or vertically. */
3682
+ /** A container for grouping related buttons together, in a row or stacked. `auto`, the default, is a row on a container wide enough for one and a stack over the full width below the sm breakpoint, where two labels beside each other leave no room for either. The group is its own container, so it follows the width it was given rather than the width of the window: the same group is a row in a page and a stack in a sheet beside it. Being a container has one consequence to know: the width has to come from the parent, since a container may not size itself from what is inside it. In a parent that shrink-wraps its content (an inline-flex box, a float, a table cell, a flex item at `width: auto`) the group measures zero and its buttons are invisible. It says so once in development. Give the group or that parent a width. A stack fills the width with its buttons, except an `nldd-icon-button`, which keeps its own size: a bar with a single glyph in the middle is not a bigger target, only a wider one. */
3639
3683
  'nldd-button-group': DefineComponent<NLDDButtonGroupProps>;
3640
3684
  /** A visually bounded card with optional header, body and footer sections. The card is elevated by default. Padding is left to nested containers. With `href` the whole card becomes a link (an overlay anchor across the card), with `button` a button (an overlay button that fires a plain, composed `click`, so a click listener or htmx attribute on the card itself works directly, and Enter/Space work natively). `href` wins when both are set. Nested interactive content, footer buttons for instance, has to be lifted above it with `position: relative; z-index: 1` to stay clickable. */
3641
3685
  'nldd-card': DefineComponent<NLDDCardProps>;
3642
- /** A generic cell for wrapping arbitrary content in a list item. Controls vertical alignment and sizing without imposing content opinions. `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"`. */
3686
+ /** A generic cell for wrapping arbitrary content in a list item. Controls vertical alignment and sizing without imposing content opinions. For more than a line of text, such as paragraphs or markup, put an `nldd-rich-text` in it rather than loose text in the row. `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"`. */
3643
3687
  'nldd-cell': DefineComponent<NLDDCellProps>;
3644
3688
  'nldd-checkbox': DefineComponent<NLDDCheckboxProps>;
3645
3689
  /** A checkbox with an inline label for use in forms. Form-associated: participates in native form submission under `name` with `value` when checked (the inner nldd-checkbox sits in the shadow root and never joins the consumer's form; the field submits on its behalf). */
@@ -3648,11 +3692,11 @@ declare module 'vue' {
3648
3692
  'nldd-code-editor': DefineComponent<NLDDCodeEditorProps>;
3649
3693
  /** 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. */
3650
3694
  'nldd-code-viewer': DefineComponent<NLDDCodeViewerProps>;
3651
- /** A container for displaying collections of items. Supports grid, stack, lanes and horizontal scroll layouts. 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. */
3695
+ /** 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. */
3652
3696
  'nldd-collection': DefineComponent<NLDDCollectionProps>;
3653
3697
  /** 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. */
3654
3698
  'nldd-combo-box': DefineComponent<NLDDComboBoxProps>;
3655
- /** 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. 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. */
3699
+ /** 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. */
3656
3700
  'nldd-container': DefineComponent<NLDDContainerProps>;
3657
3701
  /** 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. */
3658
3702
  'nldd-date-field': DefineComponent<NLDDDateFieldProps>;
@@ -3671,19 +3715,20 @@ declare module 'vue' {
3671
3715
  'nldd-dropdown': DefineComponent<NLDDDropdownProps>;
3672
3716
  /** A file picker that reads as one control: an nldd-button flush in the corner of a tinted surface, the chosen file next to it, and a dismiss button to clear it again. It wraps a hidden native `<input type="file">`, which is what makes the picker open at all — a file dialog only opens from a user gesture on a real input. The surface deliberately does not look like an input field. A border with field semantics promises you can type into it; here you can only press a button, so it uses button and surface colors instead of `--semantics-input-fields-*`. The button keeps its own tinted background and therefore sits a shade darker in the surface, which is what marks it as the thing to press. Several files are summarized, not listed: "3 bestanden" with a single cross that clears all of them. Every pick replaces the whole FileList, and rebuilding it to add or drop one file means going through DataTransfer, which does not deduplicate (even the same File object twice yields two entries) — and a File has no id, so deduplicating would come down to guessing from name, size and last-modified. A list with a cross per file would promise an edit the platform does not support. A page that does want to show the files renders its own list from the `File[]` in the change event. */
3673
3717
  'nldd-file-field': DefineComponent<NLDDFileFieldProps>;
3674
- /** Nederlandse Digitale Dienst Form Component Plain custom element (extends HTMLElement, no Lit), required for light-DOM autofill. Renders a real <form> element in the LIGHT DOM around its children. Chrome's autofill engine looks for native <input> elements that have a <form> ancestor in the light DOM; with shadow-DOM inputs it can't find them, so we keep this component shadow-less. **Differs from other nldd-* components:** - No shadowRoot: all children live in the light DOM (inside the inner <form>) - No Lit: a plain HTMLElement with manual attribute mirroring - **Requires a global stylesheet import**: the vertical rhythm rules live in `dist/css/form.css` (or `global.css`), not in a component-specific shadow stylesheet. Import it as part of your app's global CSS bundle. **Two usage modes:** 1. **Auto-wrap** (default): write children directly. Component creates a `<form>` element and migrates children into it via MutationObserver. Simplest API. 2. **User-provided form** (framework-friendly): write your own `<form>` as direct child. Component detects it, takes over attribute mirroring, and skips the migration. Children stay where your framework puts them, so there is no DOM shuffling to conflict with React/Vue/Angular reconciliation. **Framework interop:** In auto-wrap mode every direct child is moved into the inner form through a MutationObserver. That works fine for most React/Vue use cases, because frameworks only mutate the DOM when their virtual DOM changes. For edge cases (animation libraries that track DOM position, SSR hydration mismatches, frameworks that actively check sibling positions) use **user-provided form** mode instead. For programmatic manipulation, use the `form` getter so you work with the inner `<form>` element directly: const inner = document.querySelector('nldd-form').form; inner.checkValidity(); inner.appendChild(myInput); // skips the migration overhead */
3718
+ /** Nederlandse Digitale Dienst Form Component Plain custom element (extends HTMLElement, no Lit), required for light-DOM autofill. Renders a real <form> element in the LIGHT DOM around its children. Chrome's autofill engine looks for native <input> elements that have a <form> ancestor in the light DOM; with shadow-DOM inputs it can't find them, so we keep this component shadow-less. **Differs from other nldd-* components:** - No shadowRoot: all children live in the light DOM (inside the inner <form>) - No Lit: a plain HTMLElement with manual attribute mirroring - **Requires a global stylesheet import**: the vertical rhythm rules live in `dist/css/form.css` (or `global.css`), not in a component-specific shadow stylesheet. Import it as part of your app's global CSS bundle. **When a field turns red:** on submit the form marks every control the browser rejects with `invalid`, and clears it again once the value passes. Setting `invalid` yourself is fine, but do it on submit, not while someone is still typing, or a field turns red over a value that is not finished yet. **Two usage modes:** 1. **Auto-wrap** (default): write children directly. Component creates a `<form>` element and migrates children into it via MutationObserver. Simplest API. 2. **User-provided form** (framework-friendly): write your own `<form>` as direct child. Component detects it, takes over attribute mirroring, and skips the migration. Children stay where your framework puts them, so there is no DOM shuffling to conflict with React/Vue/Angular reconciliation. **Framework interop:** In auto-wrap mode every direct child is moved into the inner form through a MutationObserver. That works fine for most React/Vue use cases, because frameworks only mutate the DOM when their virtual DOM changes. For edge cases (animation libraries that track DOM position, SSR hydration mismatches, frameworks that actively check sibling positions) use **user-provided form** mode instead. For programmatic manipulation, use the `form` getter so you work with the inner `<form>` element directly: const inner = document.querySelector('nldd-form').form; inner.checkValidity(); inner.appendChild(myInput); // skips the migration overhead */
3675
3719
  'nldd-form': DefineComponent<NLDDFormProps>;
3676
- /** A layout wrapper for the action buttons at the bottom of a form (typically a submit button or a button group). Follows the same responsive layout as `nldd-form-field`: with `label-alignment="right"` or `"left"` the content gets the same indent as the fields above it, thanks to a `::before` pseudo-element that acts as the spacer column where the label would sit. Inherits `label-alignment` automatically from a wrapping `<nldd-form>`: the form propagates its own `label-alignment` as `form-label-alignment` to descendant `nldd-form-actions` (and `nldd-form-field`) through a MutationObserver. An explicit `label-alignment` on the form-actions itself wins through the CSS cascade, and the form code never touches the `label-alignment` attribute of the descendant. <nldd-form label-alignment="right"> <nldd-form-field>...</nldd-form-field> <nldd-form-actions> <nldd-button-group> <nldd-button variant="primary" type="submit" text="Opslaan"></nldd-button> </nldd-button-group> </nldd-form-actions> </nldd-form> */
3720
+ /** A layout wrapper for the action buttons at the bottom of a form (typically a submit button or a button group). Follows the same responsive layout as `nldd-form-field`: with `label-alignment="right"` or `"left"` the content gets the same indent as the fields above it, thanks to a `::before` pseudo-element that acts as the spacer column where the label would sit. Inherits `label-alignment` automatically from a wrapping `<nldd-form>`: the form propagates its own `label-alignment` as `form-label-alignment` to descendant `nldd-form-actions` (and `nldd-form-field`) through a MutationObserver. An explicit `label-alignment` on the form-actions itself wins through the CSS cascade, and the form code never touches the `label-alignment` attribute of the descendant. <nldd-form label-alignment="right"> <nldd-form-field>...</nldd-form-field> <nldd-form-actions> <nldd-button-group> <nldd-button variant="primary" type="submit" text="Bewaar"></nldd-button> </nldd-button-group> </nldd-form-actions> </nldd-form> */
3677
3721
  'nldd-form-actions': DefineComponent<NLDDFormActionsProps>;
3722
+ /** A field around one input: its label, supporting label, optional badge, validation and help text. It finds the input among its children, hands it the label as its accessible name and gives it an id, so you write no `for` or `id` yourself. Mark the optional fields with `optional`, not the required ones; the design guidelines say why. Put the requirements on a value in an nldd-validation-list inside the same field. What only your server knows, such as a password found in a breach, the app names in `unmet` on the input itself: see nldd-validation-list. */
3678
3723
  'nldd-form-field': DefineComponent<NLDDFormFieldProps>;
3679
3724
  'nldd-form-field-help-text': DefineComponent<NLDDFormFieldHelpTextProps>;
3680
- /** Nederlandse Digitale Dienst Form Section Component Plain custom element (extends HTMLElement, no Lit). The light-DOM render works around an NVDA + Firefox a11y bug where a shadow-DOM <fieldset> + <legend> is not reliably announced as the group label for slotted controls. A native fieldset/legend in the light DOM works correctly across all AT/browser combinations. **Differs from shadow components:** - No shadowRoot: all children live in the light DOM (inside the rendered <fieldset>). - No Lit: a plain HTMLElement with manual DOM mutation. - **Requires a global stylesheet import**: `dist/css/form-section.css` (or `global.css`). Form-section has no shadow stylesheet. Renders to: <nldd-form-section> <fieldset class="form-section"> <legend class="form-section__header"> <span class="form-section__title">Title</span> <span class="form-section__subtitle">Subtitle</span> </legend> <div class="form-section__main"> [user's children] </div> </fieldset> </nldd-form-section> **Accessibility note**: the title renders as a `<legend>`. Semantically that is a **group label**, not a heading. Screen readers announce it when the user enters the fieldset, but users jumping through headings with the H key skip it. Visually it looks like a heading, so use this component for *form grouping*, not as page structure. For real page headings, use a separate heading element above the form. **Supporting-text length**: the subtitle sits as a `<span>` inside the `<legend>` so a screen reader reads it along as the group label. Side effect: on every field entry within the section, the whole legend (title + subtitle) is spoken again. Keep `supporting-text` short (roughly 80 characters or less) and use it to introduce the group ("Vul je adresgegevens in"), not for detailed instructions. For a longer explanation on one specific field, use `nldd-form-field-help-text` on that field. <nldd-form> <nldd-form-section text="Persoonsgegevens" supporting-text="Vul je gegevens in."> <nldd-form-field label="Voornaam">...</nldd-form-field> <nldd-form-field label="Achternaam">...</nldd-form-field> </nldd-form-section> <nldd-form-section text="Adres"> <nldd-form-field label="Straat">...</nldd-form-field> </nldd-form-section> <nldd-form-actions>...</nldd-form-actions> </nldd-form> */
3725
+ /** Nederlandse Digitale Dienst Form Section Component Plain custom element (extends HTMLElement, no Lit). The light-DOM render works around an NVDA + Firefox a11y bug where a shadow-DOM <fieldset> + <legend> is not reliably announced as the group label for slotted controls. A native fieldset/legend in the light DOM works correctly across all AT/browser combinations. **Differs from shadow components:** - No shadowRoot: all children live in the light DOM (inside the rendered <fieldset>). - No Lit: a plain HTMLElement with manual DOM mutation. - **Requires a global stylesheet import**: `dist/css/form-section.css` (or `global.css`). Form-section has no shadow stylesheet. Renders to: <nldd-form-section> <fieldset class="form-section"> <legend class="form-section__header"> <span class="form-section__title">Title</span> <span class="form-section__supporting-text">Supporting text</span> </legend> <div class="form-section__main"> [user's children] </div> </fieldset> </nldd-form-section> **Accessibility note**: the title renders as a `<legend>`. Semantically that is a **group label**, not a heading. Screen readers announce it when the user enters the fieldset, but users jumping through headings with the H key skip it. Visually it looks like a heading, so use this component for *form grouping*, not as page structure. For real page headings, use a separate heading element above the form. **Supporting-text length**: the supporting text sits as a `<span>` inside the `<legend>` so a screen reader reads it along as the group label. Side effect: on every field entry within the section, the whole legend (title + supporting text) is spoken again. Keep `supporting-text` short (roughly 80 characters or less) and use it to introduce the group ("Vul je adresgegevens in"), not for detailed instructions. For a longer explanation on one specific field, use `nldd-form-field-help-text` on that field. <nldd-form> <nldd-form-section text="Persoonsgegevens" supporting-text="Vul je gegevens in."> <nldd-form-field label="Voornaam">...</nldd-form-field> <nldd-form-field label="Achternaam">...</nldd-form-field> </nldd-form-section> <nldd-form-section text="Adres"> <nldd-form-field label="Straat">...</nldd-form-field> </nldd-form-section> <nldd-form-actions>...</nldd-form-actions> </nldd-form> */
3681
3726
  'nldd-form-section': DefineComponent<NLDDFormSectionProps>;
3682
3727
  /** 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. */
3683
3728
  'nldd-full-bleed-section': DefineComponent<NLDDFullBleedSectionProps>;
3684
3729
  /** 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. */
3685
3730
  'nldd-hero': DefineComponent<NLDDHeroProps>;
3686
- /** 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 design system cannot know — the jacket of a cable, a color someone picked — set `custom-color` to any CSS color. */
3731
+ /** 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. */
3687
3732
  'nldd-icon': DefineComponent<NLDDIconProps>;
3688
3733
  'nldd-icon-button': DefineComponent<NLDDIconButtonProps>;
3689
3734
  /** A cell component for displaying icons in lists with configurable alignment and size. Set `icon` to render an `nldd-icon` by name, or slot custom content as an escape hatch for non-standard iconography. */
@@ -3702,7 +3747,7 @@ declare module 'vue' {
3702
3747
  'nldd-link': DefineComponent<NLDDLinkProps>;
3703
3748
  /** 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. */
3704
3749
  'nldd-list': DefineComponent<NLDDListProps>;
3705
- /** 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. 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 a visual `nldd-checkbox` (or any glyph) before the text and mark it `aria-hidden` + non-focusable — 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`). */
3750
+ /** 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`). */
3706
3751
  'nldd-list-item': DefineComponent<NLDDListItemProps>;
3707
3752
  /** 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. */
3708
3753
  'nldd-list-item-segment': DefineComponent<NLDDListItemSegmentProps>;
@@ -3718,12 +3763,12 @@ declare module 'vue' {
3718
3763
  'nldd-menu-group': DefineComponent<NLDDMenuGroupProps>;
3719
3764
  /** A single item within an nldd-menu. */
3720
3765
  'nldd-menu-item': DefineComponent<NLDDMenuItemProps>;
3721
- /** A modal window with overlay backdrop, based on the native <dialog> element. Internally renders an <nldd-inline-dialog> for the visual structure. */
3766
+ /** A modal window with overlay backdrop, based on the native <dialog> element. Internally renders an <nldd-inline-dialog> for the visual structure. Open and close it with `open`, bound to your state together with the close event: the dialog clears `open` itself when the user closes it. show() and hide() do the same for code without a binding. Keep the dialog in the DOM rather than mounting it when it opens, or the animations are skipped. */
3722
3767
  'nldd-modal-dialog': DefineComponent<NLDDModalDialogProps>;
3723
3768
  'nldd-multi-line-text-field': DefineComponent<NLDDMultiLineTextFieldProps>;
3724
- /** A four-column layout with a primary sidebar, secondary sidebar, main content area, and inspector. The sidebars show navigation or lists, the main area shows primary content, and the inspector shows additional details or properties of the selection. Panes are shown automatically when content is slotted into them. */
3769
+ /** A four-column layout with a primary sidebar, secondary sidebar, main content area, and inspector. The sidebars show navigation or lists, the main area shows primary content, and the inspector shows additional details or properties of the selection. Panes are shown automatically when content is slotted into them. When they stop fitting, panes drop in a fixed order: the inspector goes first, then the primary sidebar collapses into the secondary sidebar. If that still does not fit, the view stacks and shows one pane at a time: main when it has content, otherwise the secondary sidebar, otherwise the primary sidebar. Use <code>nldd-split-view-pane</code> as direct children for automatic back button handling. */
3725
3770
  'nldd-navigation-split-view': DefineComponent<NLDDNavigationSplitViewProps>;
3726
- /** A short message that arrives over the interface and leaves on its own: a save that worked, a request that failed. Not a banner, which stands in the page and stays there — this one floats, stacks, and goes away. It places itself. Write it wherever it belongs in your code and it moves to one shared region: top right from md, full width across the top below that. Nothing about the position is settable, so notifications from anywhere in an application land in the same place and stack in the same order. A modal overlay is the one thing that moves it. An nldd-sheet, nldd-window or nldd-modal-dialog paints in the browser's top layer, above the whole page and out of reach of any z-index, and while one is open everything outside it is inert. So the region goes in: into the topmost overlay that is open, and back down as they close. A notification already on screen travels with it, and one raised from inside a sheet is readable and reachable where it is raised. More than one is a deck, not a list: the front one is readable and the older ones peek out below it, so a burst of messages takes the room of roughly one. The newest is in front. Behind it a notification is a bare surface, cut to the height of the one in front; dismiss the front and it slides up into the place that came free while its message fades in, because it was standing there all along. Under the front notification sits a strip as wide as the deck and as tall as the deck is when it fans out. Pointing at it fans the deck out to fill it, which is the only hint that there is more here than the message you can read; clicking it, or moving focus into the region, lays the whole deck out as a list. Clicking or tabbing away puts it back. The notification itself is not a button: a click on the message you are reading does nothing. Only the front of the deck counts down, and only while the deck is closed: open means someone is reading. The rest wait, so nothing disappears from under the one you are reading. `critical` never leaves on its own: a failure is worth reading, and the count-down would take it away while you were. That also keeps this within WCAG 2.2.1, which allows a time limit when what disappears is not essential. The clock pauses while a pointer moves over the notification and while focus is inside it, and resumes where it left off rather than starting over. A pointer that merely happens to rest where the notification appears does not count: it never moved, so nobody is reading. role follows the variant: `critical` becomes role="alert", the rest role="status". Focus never moves on its own. Escape dismisses the notification that focus is in. */
3771
+ /** A short message that arrives over the interface and leaves on its own: a save that worked, a request that failed. Not a banner, which stands in the page and stays there — this one floats, stacks, and goes away. It places itself. Write it wherever it belongs in your code and it moves to one shared area: top right from md, full width across the top below that. Nothing about the position is settable, so notifications from anywhere in an application land in the same place and stack in the same order. A modal overlay is the one thing that moves it. An nldd-sheet, nldd-window or nldd-modal-dialog paints in the browser's top layer, above the whole page and out of reach of any z-index, and while one is open everything outside it is inert. So the area goes in: into the topmost overlay that is open, and back down as they close. A notification already on screen travels with it, and one raised from inside a sheet is readable and reachable where it is raised. More than one is a deck, not a list: the front one is readable and the older ones peek out below it, so a burst of messages takes the room of roughly one. The newest is in front. Behind it a notification is a bare surface, cut to the height of the one in front; dismiss the front and it slides up into the place that came free while its message fades in, because it was standing there all along. Under the front notification sits a strip as wide as the deck and as tall as the deck is when it fans out. Pointing at it fans the deck out to fill it, which is the only hint that there is more here than the message you can read; clicking it, or moving focus into the area, lays the whole deck out as a list. Clicking or tabbing away puts it back. The notification itself is not a button: a click on the message you are reading does nothing. Only the front of the deck counts down, and only while the deck is closed: open means someone is reading. The rest wait, so nothing disappears from under the one you are reading. `critical` never leaves on its own: a failure is worth reading, and the count-down would take it away while you were. That also keeps this within WCAG 2.2.1, which allows a time limit when what disappears is not essential. The clock pauses while a pointer moves over the notification and while focus is inside it, and resumes where it left off rather than starting over. A pointer that merely happens to rest where the notification appears does not count: it never moved, so nobody is reading. role follows the variant: `critical` becomes role="alert", the rest role="status". Focus never moves on its own. Escape dismisses the notification that focus is in. */
3727
3772
  'nldd-notification': DefineComponent<NLDDNotificationProps>;
3728
3773
  /** A numeric input field with decrement and increment buttons. */
3729
3774
  'nldd-number-field': DefineComponent<NLDDNumberFieldProps>;
@@ -3731,7 +3776,7 @@ declare module 'vue' {
3731
3776
  'nldd-one-half-one-half-section': DefineComponent<NLDDOneHalfOneHalfSectionProps>;
3732
3777
  /** 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. */
3733
3778
  'nldd-one-third-two-thirds-section': DefineComponent<NLDDOneThirdTwoThirdsSectionProps>;
3734
- /** 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. */
3779
+ /** 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. */
3735
3780
  'nldd-page': DefineComponent<NLDDPageProps>;
3736
3781
  /** 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. */
3737
3782
  'nldd-page-footer': DefineComponent<NLDDPageFooterProps>;
@@ -3743,7 +3788,7 @@ declare module 'vue' {
3743
3788
  'nldd-pagination': DefineComponent<NLDDPaginationProps>;
3744
3789
  /** A password input field with visibility toggle and validation states. */
3745
3790
  'nldd-password-field': DefineComponent<NLDDPasswordFieldProps>;
3746
- /** A non-modal floating panel anchored to a trigger element. Built on the native Popover API (popover="auto") with Floating UI for positioning. The browser handles opening, toggling and light dismiss; this component only handles positioning and focus. The recommended use is through popovertarget, so the browser owns the toggle: <nldd-button id="info-trigger" popovertarget="info-popover">Info</nldd-button> <nldd-popover id="info-popover" anchor="info-trigger" accessible-label="Info"> <nldd-container> <p>Content of the popover.</p> </nldd-container> </nldd-popover> For a custom focus target inside the popover, put `autofocus` on the child you want. Without it the popover host itself takes focus. */
3791
+ /** A non-modal floating panel anchored to a trigger element. Built on the native Popover API (popover="auto") with Floating UI for positioning. The browser handles opening, toggling and light dismiss; this component only handles positioning and focus. The recommended use is through popovertarget, so the browser owns the toggle: <nldd-button id="info-trigger" popovertarget="info-popover">Info</nldd-button> <nldd-popover id="info-popover" anchor="info-trigger" accessible-label="Info"> <nldd-container> <p>Content of the popover.</p> </nldd-container> </nldd-popover> To open it from your own state instead, bind `open` together with the close event: the popover clears `open` itself on light dismiss, Escape or a click on its anchor. It needs that anchor to open against. For a custom focus target inside the popover, put `autofocus` on the child you want. Without it the popover host itself takes focus. */
3747
3792
  'nldd-popover': DefineComponent<NLDDPopoverProps>;
3748
3793
  /** Exports both NLDDProgressBar and NLDDProgressBarSegmentIndicator. A progress bar that supports a single value (loading-style) or multiple segments (multi-stage progress, or distribution like storage usage). The consumer provides raw values; the component computes percentages from `max`. Two modes: - `progress` (default): segments sum toward `max`; remaining space is empty track. ARIA reads "X% voltooid". - `distribution`: segments fill the bar; ARIA enumerates segments. If the sum of segment values exceeds `max`, segments are normalized proportionally to fit and a warning is logged. */
3749
3794
  'nldd-progress-bar': DefineComponent<NLDDProgressBarProps>;
@@ -3757,24 +3802,24 @@ declare module 'vue' {
3757
3802
  'nldd-radio-button-field': DefineComponent<NLDDRadioButtonFieldProps>;
3758
3803
  /** 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. */
3759
3804
  'nldd-radio-button-group': DefineComponent<NLDDRadioButtonGroupProps>;
3760
- /** 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. 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. */
3805
+ /** 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. */
3761
3806
  'nldd-rich-text': DefineComponent<NLDDRichTextProps>;
3762
3807
  /** A search input with a leading search icon, an optional dismiss button, and an optional search button. */
3763
3808
  'nldd-search-field': DefineComponent<NLDDSearchFieldProps>;
3764
3809
  /** A horizontal group of mutually exclusive (radio) or multi-select (checkbox) options. Exports both NLDDSegmentedControl and NLDDSegmentedControlItem. */
3765
3810
  'nldd-segmented-control': DefineComponent<NLDDSegmentedControlProps>;
3766
3811
  'nldd-segmented-control-item': DefineComponent<NLDDSegmentedControlItemProps>;
3767
- /** 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`). */
3812
+ /** 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. */
3768
3813
  'nldd-sheet': DefineComponent<NLDDSheetProps>;
3769
- /** 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. */
3814
+ /** 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. */
3770
3815
  'nldd-side-by-side-split-view': DefineComponent<NLDDSideBySideSplitViewProps>;
3771
3816
  /** 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. */
3772
3817
  'nldd-sidebar-section': DefineComponent<NLDDSidebarSectionProps>;
3773
- /** 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. */
3818
+ /** 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. */
3774
3819
  'nldd-simple-section': DefineComponent<NLDDSimpleSectionProps>;
3775
3820
  /** Accessibility pattern that lets keyboard users skip past content. Wraps content in a default slot. Without href it focuses the first element after the skip link in the DOM (nextElementSibling). Make sure a focusable element follows the component, otherwise the skip link has no effect. */
3776
3821
  'nldd-skip-link': DefineComponent<NLDDSkipLinkProps>;
3777
- /** Add explicit space between elements. Components in this design system have no margins of their own — all whitespace is set by a spacer. Use a single `size` attribute for whitespace that's the same at every viewport. Combine with `sm-size`, `md-size` and/or `lg-size` to override the size at specific breakpoints (mobile-first cascade is intentionally avoided — each breakpoint that needs a different value declares it explicitly): - `size` applies at every breakpoint that has no per-viewport override. - `sm-size` overrides at sm (max-width: 640px). - `md-size` overrides at md (641px–1007px). - `lg-size` overrides at lg (min-width: 1008px). Use `flexible` (in any of the four attributes) to fill the remaining space in a flex container. */
3822
+ /** Add explicit space between elements. Components here have no margins of their own — all whitespace is set by a spacer. A spacer is fixed space between two different things. For padding around an area, or the gaps between the children of one area, use `nldd-container` with `padding` and `gap` instead. A `gap` sets one distance for every child, which is right while the children are of one kind: a row of buttons, a set of cards, the fields of a form. Put different kinds under each other and the right distance differs per seam, so set each one where it happens with a spacer. A heading over a list is the common case: the space under the heading should be smaller than the space above it, which keeps the heading with what it labels. A gap cannot tell the two apart, and evening them out reads as a strip of loose lines. Use a single `size` attribute for whitespace that's the same at every viewport. Combine with `sm-size`, `md-size` and/or `lg-size` to override the size at specific breakpoints (mobile-first cascade is intentionally avoided — each breakpoint that needs a different value declares it explicitly): - `size` applies at every breakpoint that has no per-viewport override. - `sm-size` overrides at sm (max-width: 640px). - `md-size` overrides at md (641px–1007px). - `lg-size` overrides at lg (min-width: 1008px). Use `flexible` (in any of the four attributes) to fill the remaining space in a flex container. */
3778
3823
  'nldd-spacer': DefineComponent<NLDDSpacerProps>;
3779
3824
  /** A cell component that provides fixed horizontal spacing within list items. */
3780
3825
  'nldd-spacer-cell': DefineComponent<NLDDSpacerCellProps>;
@@ -3819,9 +3864,9 @@ declare module 'vue' {
3819
3864
  'nldd-time-picker': DefineComponent<NLDDTimePickerProps>;
3820
3865
  /** 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 `variant="step"` 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 variant rather than to the content: every dot in a list is the same size, or the track would jump. */
3821
3866
  'nldd-timeline-track-cell': DefineComponent<NLDDTimelineTrackCellProps>;
3822
- /** A title bar with an optional overline, title, and subtitle on the left, and a slot at the end of the title line on the right. */
3867
+ /** 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. */
3823
3868
  'nldd-title': DefineComponent<NLDDTitleProps>;
3824
- /** A cell component for displaying a title with optional overline and subtitle 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. */
3869
+ /** 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. */
3825
3870
  'nldd-title-cell': DefineComponent<NLDDTitleCellProps>;
3826
3871
  /** A selectable button that toggles between selected and unselected. Available as a button (aria-pressed), a checkbox, or a radio. In radio mode the button itself is the radio: it carries the role, the state and its place in the group. A native radio in a shadow root of its own would be a group of one, counted as "1 of 1" and stopped at by Tab. */
3827
3872
  'nldd-toggle-button': DefineComponent<NLDDToggleButtonProps>;
@@ -3831,6 +3876,7 @@ declare module 'vue' {
3831
3876
  'nldd-token': DefineComponent<NLDDTokenProps>;
3832
3877
  /** A multi-select input that looks like a normal input field: chosen values show as dismissible tokens in a wrapping row, followed by an inline text input that stretches to fill the remaining space and wraps to a new line (growing the field) when it no longer fits. Options are supplied as a slotted nldd-menu, exactly like nldd-combo-box; the menu filters as you type, with a chevron picker button, arrow-key roving across the tokens and ElementInternals form participation. */
3833
3878
  'nldd-token-field': DefineComponent<NLDDTokenFieldProps>;
3879
+ /** A row of controls that belong to a whole screen or pane, with an overflow menu for what does not fit. The toolbar measures itself: as the row runs out of room, items move into that menu, the lowest `priority` first, and items that share a priority move together. So the order in the HTML says where an item sits, and `priority` says how long it stays. Every item carries its own alternative for the menu, an nldd-menu-item in its `overflow` slot. Without one the action is simply gone once the item overflows, which on a wide screen you never see; the item warns about it in development. The toolbar's own `overflow` slot holds the actions that live in the menu at every width. */
3834
3880
  'nldd-toolbar': DefineComponent<NLDDToolbarProps>;
3835
3881
  'nldd-toolbar-item': DefineComponent<NLDDToolbarItemProps>;
3836
3882
  'nldd-toolbar-title': DefineComponent<NLDDToolbarTitleProps>;
@@ -3842,10 +3888,11 @@ declare module 'vue' {
3842
3888
  'nldd-top-title-bar': DefineComponent<NLDDTopTitleBarProps>;
3843
3889
  /** A section with 2/3 main content on the left and a 1/3 sidebar on the right. The columns wrap automatically when they become smaller than 280px. Padding and gap adjust via container queries. */
3844
3890
  'nldd-two-thirds-one-third-section': DefineComponent<NLDDTwoThirdsOneThirdSectionProps>;
3891
+ /** One requirement of a value, with the rule that checks it. Give every item an id that names its field as well as its rule: an id has to be unique in the whole document, and `length` is the first thing three fields in one form will all reach for. Write the text as the requirement ("Minimaal 8 tekens"), not as the command ("Gebruik minimaal 8 tekens"): before a verdict it stands there as what the field wants, after one as what the value does not meet. */
3845
3892
  'nldd-validation-item': DefineComponent<NLDDValidationItemProps>;
3846
3893
  /** Nederlandse Digitale Dienst Validation List (Lit + TypeScript) Everything a value has to satisfy, in one list. A requirement you can state up front is an item with a rule, and it checks itself while you type. One only a server can decide is an item without a rule, and the app names it in `unmet` on the control. The list has two modes and `judging` is the switch. Before a verdict it shows its hints, which are the requirements of the field. After one it shows everything the value does not satisfy, and the hints are gone. It throws that switch itself the moment its control turns `invalid`, so when the field is judged is the consumer's decision, and the right moment is on submit. Hints are off by default. A phone number does not need its format spelled out before anyone has typed, while the rules for a password do. There are no checkmarks. The control already shows a validation icon of its own, and repeating that per line says the same thing three times. */
3847
3894
  'nldd-validation-list': DefineComponent<NLDDValidationListProps>;
3848
- /** A floating window based on the native <dialog> element, positionable through CSS values. Always modal. No header of its own: consumers use nldd-page with a sticky header inside for a title bar. */
3895
+ /** A floating window based on the native <dialog> element, positionable through CSS values. Always modal. No header of its own: consumers use nldd-page with a sticky header inside for a title bar. The text of the nldd-top-title-bar in that header is also the window's accessible name. Open and close it with `open`, bound to your state together with the close event: the window clears `open` itself when the user closes it. show() and hide() do the same for code without a binding. Keep the window in the DOM rather than mounting it when it opens, or the animations are skipped. */
3849
3896
  'nldd-window': DefineComponent<NLDDWindowProps>;
3850
3897
  }
3851
3898
  }