@nldd/design-system 0.8.82 → 0.8.84

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 (487) hide show
  1. package/custom-elements.json +3849 -542
  2. package/dist/components/actions/button/button.d.ts +9 -2
  3. package/dist/components/actions/button/button.d.ts.map +1 -1
  4. package/dist/components/actions/button/button.js +15 -2
  5. package/dist/components/actions/button/button.js.map +1 -1
  6. package/dist/components/actions/button/button.template.d.ts.map +1 -1
  7. package/dist/components/actions/button/button.template.js +2 -0
  8. package/dist/components/actions/button/button.template.js.map +1 -1
  9. package/dist/components/actions/icon-button/icon-button.d.ts +2 -2
  10. package/dist/components/actions/icon-button/icon-button.js +2 -2
  11. package/dist/components/actions/menu/menu.d.ts +3 -1
  12. package/dist/components/actions/menu/menu.d.ts.map +1 -1
  13. package/dist/components/actions/menu/menu.js +22 -11
  14. package/dist/components/actions/menu/menu.js.map +1 -1
  15. package/dist/components/actions/toolbar/toolbar.styles.js +2 -2
  16. package/dist/components/components.js +2911 -1157
  17. package/dist/components/content/avatar/avatar.d.ts +6 -0
  18. package/dist/components/content/avatar/avatar.d.ts.map +1 -1
  19. package/dist/components/content/avatar/avatar.js +9 -0
  20. package/dist/components/content/avatar/avatar.js.map +1 -1
  21. package/dist/components/content/avatar/avatar.styles.d.ts.map +1 -1
  22. package/dist/components/content/avatar/avatar.styles.js +5 -1
  23. package/dist/components/content/avatar/avatar.styles.js.map +1 -1
  24. package/dist/components/content/avatar/avatar.template.d.ts.map +1 -1
  25. package/dist/components/content/avatar/avatar.template.js +2 -0
  26. package/dist/components/content/avatar/avatar.template.js.map +1 -1
  27. package/dist/components/content/avatar-group/avatar-group.styles.d.ts.map +1 -1
  28. package/dist/components/content/avatar-group/avatar-group.styles.js +6 -16
  29. package/dist/components/content/avatar-group/avatar-group.styles.js.map +1 -1
  30. package/dist/components/content/blockquote/blockquote.d.ts +3 -4
  31. package/dist/components/content/blockquote/blockquote.d.ts.map +1 -1
  32. package/dist/components/content/blockquote/blockquote.js +3 -4
  33. package/dist/components/content/blockquote/blockquote.js.map +1 -1
  34. package/dist/components/content/icon/icon-aliases.d.ts.map +1 -1
  35. package/dist/components/content/icon/icon-aliases.js +80 -6
  36. package/dist/components/content/icon/icon-aliases.js.map +1 -1
  37. package/dist/components/content/icon/icon-gallery-status.d.ts.map +1 -1
  38. package/dist/components/content/icon/icon-gallery-status.js +57 -94
  39. package/dist/components/content/icon/icon-gallery-status.js.map +1 -1
  40. package/dist/components/content/icon/icon-registry.d.ts.map +1 -1
  41. package/dist/components/content/icon/icon-registry.js +36 -4
  42. package/dist/components/content/icon/icon-registry.js.map +1 -1
  43. package/dist/components/content/icon/icon.d.ts +8 -2
  44. package/dist/components/content/icon/icon.d.ts.map +1 -1
  45. package/dist/components/content/icon/icon.js +17 -2
  46. package/dist/components/content/icon/icon.js.map +1 -1
  47. package/dist/components/content/icon/icon.styles.d.ts.map +1 -1
  48. package/dist/components/content/icon/icon.styles.js +8 -0
  49. package/dist/components/content/icon/icon.styles.js.map +1 -1
  50. package/dist/components/content/image/image.d.ts +1 -1
  51. package/dist/components/content/image/image.js +1 -1
  52. package/dist/components/content/image/image.styles.d.ts.map +1 -1
  53. package/dist/components/content/image/image.styles.js +11 -0
  54. package/dist/components/content/image/image.styles.js.map +1 -1
  55. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.d.ts +30 -30
  56. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.js +30 -30
  57. package/dist/components/content/rich-text/rich-text.d.ts +20 -20
  58. package/dist/components/content/rich-text/rich-text.js +20 -20
  59. package/dist/components/content/text/text.d.ts +50 -0
  60. package/dist/components/content/text/text.d.ts.map +1 -0
  61. package/dist/components/content/text/text.js +81 -0
  62. package/dist/components/content/text/text.js.map +1 -0
  63. package/dist/components/content/text/text.styles.d.ts +2 -0
  64. package/dist/components/content/text/text.styles.d.ts.map +1 -0
  65. package/dist/components/content/text/text.styles.js +116 -0
  66. package/dist/components/content/text/text.styles.js.map +1 -0
  67. package/dist/components/content/text/text.template.d.ts +3 -0
  68. package/dist/components/content/text/text.template.d.ts.map +1 -0
  69. package/dist/components/content/text/text.template.js +7 -0
  70. package/dist/components/content/text/text.template.js.map +1 -0
  71. package/dist/components/content/title/title.d.ts +4 -4
  72. package/dist/components/content/title/title.js +4 -4
  73. package/dist/components/content/title/title.styles.d.ts.map +1 -1
  74. package/dist/components/content/title/title.styles.js +9 -13
  75. package/dist/components/content/title/title.styles.js.map +1 -1
  76. package/dist/components/content/tooltip/tooltip.d.ts +1 -1
  77. package/dist/components/content/tooltip/tooltip.js +1 -1
  78. package/dist/components/{decorate-BKn10QQi.js → decorate-lwt_OrAG.js} +1 -1
  79. package/dist/components/{dist-TpIL8G4G.js → dist-762GHPyH.js} +3 -3
  80. package/dist/components/{dist-OBifyiJS.js → dist-BB7TxeMK.js} +2 -2
  81. package/dist/components/{dist-CJR_Rwhh.js → dist-BJI4-6iQ.js} +1 -1
  82. package/dist/components/{dist-C400RcFU.js → dist-B_3OW7pC.js} +1 -1
  83. package/dist/components/{dist-afrAoubg.js → dist-C09E9-dJ.js} +34 -34
  84. package/dist/components/{dist-Ccw7ZfsU.js → dist-C6gnorjP.js} +4 -3
  85. package/dist/components/{dist-bO14jlsr.js → dist-CRsR6ckU.js} +1 -1
  86. package/dist/components/{dist-C0PiB1dr.js → dist-CjaG8dOI.js} +2 -2
  87. package/dist/components/{dist-CCg5Mso_.js → dist-DZoFKUO-.js} +1 -1
  88. package/dist/components/{dist-Bq4xc7Bm.js → dist-DaavuU6W.js} +14 -3
  89. package/dist/components/{dist-BYVOPNHp.js → dist-la_b3ZSq.js} +1 -1
  90. package/dist/components/forms/form/form.d.ts +76 -22
  91. package/dist/components/forms/form/form.d.ts.map +1 -1
  92. package/dist/components/forms/form/form.js +127 -22
  93. package/dist/components/forms/form/form.js.map +1 -1
  94. package/dist/components/forms/form-actions/form-actions.d.ts +14 -15
  95. package/dist/components/forms/form-actions/form-actions.d.ts.map +1 -1
  96. package/dist/components/forms/form-actions/form-actions.js +14 -15
  97. package/dist/components/forms/form-actions/form-actions.js.map +1 -1
  98. package/dist/components/forms/form-field/form-field.d.ts +42 -39
  99. package/dist/components/forms/form-field/form-field.d.ts.map +1 -1
  100. package/dist/components/forms/form-field/form-field.js +79 -111
  101. package/dist/components/forms/form-field/form-field.js.map +1 -1
  102. package/dist/components/forms/form-field/form-field.styles.d.ts +0 -1
  103. package/dist/components/forms/form-field/form-field.styles.d.ts.map +1 -1
  104. package/dist/components/forms/form-field/form-field.styles.js +7 -73
  105. package/dist/components/forms/form-field/form-field.styles.js.map +1 -1
  106. package/dist/components/forms/form-field/form-field.template.d.ts +0 -2
  107. package/dist/components/forms/form-field/form-field.template.d.ts.map +1 -1
  108. package/dist/components/forms/form-field/form-field.template.js +0 -15
  109. package/dist/components/forms/form-field/form-field.template.js.map +1 -1
  110. package/dist/components/forms/form-section/form-section.d.ts +26 -28
  111. package/dist/components/forms/form-section/form-section.d.ts.map +1 -1
  112. package/dist/components/forms/form-section/form-section.js +27 -29
  113. package/dist/components/forms/form-section/form-section.js.map +1 -1
  114. package/dist/components/forms/validation-list/validation-list.d.ts +193 -0
  115. package/dist/components/forms/validation-list/validation-list.d.ts.map +1 -0
  116. package/dist/components/forms/validation-list/validation-list.js +358 -0
  117. package/dist/components/forms/validation-list/validation-list.js.map +1 -0
  118. package/dist/components/forms/validation-list/validation-list.styles.d.ts +3 -0
  119. package/dist/components/forms/validation-list/validation-list.styles.d.ts.map +1 -0
  120. package/dist/components/forms/validation-list/validation-list.styles.js +58 -0
  121. package/dist/components/forms/validation-list/validation-list.styles.js.map +1 -0
  122. package/dist/components/forms/validation-list/validation-list.template.d.ts +5 -0
  123. package/dist/components/forms/validation-list/validation-list.template.d.ts.map +1 -0
  124. package/dist/components/forms/validation-list/validation-list.template.js +16 -0
  125. package/dist/components/forms/validation-list/validation-list.template.js.map +1 -0
  126. package/dist/components/{icon-CIpJq_cf.js → icon-VTLbdcvZ.js} +104 -11
  127. package/dist/components/{icon-button-BAkUJTn6.js → icon-button-Sne5TwRG.js} +6 -6
  128. package/dist/components/index.d.ts +3 -1
  129. package/dist/components/index.d.ts.map +1 -1
  130. package/dist/components/index.js +3 -1
  131. package/dist/components/index.js.map +1 -1
  132. package/dist/components/inputs/checkbox/checkbox.d.ts +20 -1
  133. package/dist/components/inputs/checkbox/checkbox.d.ts.map +1 -1
  134. package/dist/components/inputs/checkbox/checkbox.js +32 -2
  135. package/dist/components/inputs/checkbox/checkbox.js.map +1 -1
  136. package/dist/components/inputs/checkbox/checkbox.template.d.ts.map +1 -1
  137. package/dist/components/inputs/checkbox/checkbox.template.js +2 -0
  138. package/dist/components/inputs/checkbox/checkbox.template.js.map +1 -1
  139. package/dist/components/inputs/checkbox-field/checkbox-field.d.ts +16 -1
  140. package/dist/components/inputs/checkbox-field/checkbox-field.d.ts.map +1 -1
  141. package/dist/components/inputs/checkbox-field/checkbox-field.js +27 -2
  142. package/dist/components/inputs/checkbox-field/checkbox-field.js.map +1 -1
  143. package/dist/components/inputs/checkbox-field/checkbox-field.template.d.ts.map +1 -1
  144. package/dist/components/inputs/checkbox-field/checkbox-field.template.js +2 -0
  145. package/dist/components/inputs/checkbox-field/checkbox-field.template.js.map +1 -1
  146. package/dist/components/inputs/code-editor/code-editor.d.ts +14 -1
  147. package/dist/components/inputs/code-editor/code-editor.d.ts.map +1 -1
  148. package/dist/components/inputs/code-editor/code-editor.js +21 -2
  149. package/dist/components/inputs/code-editor/code-editor.js.map +1 -1
  150. package/dist/components/inputs/combo-box/combo-box.d.ts +15 -2
  151. package/dist/components/inputs/combo-box/combo-box.d.ts.map +1 -1
  152. package/dist/components/inputs/combo-box/combo-box.js +54 -5
  153. package/dist/components/inputs/combo-box/combo-box.js.map +1 -1
  154. package/dist/components/inputs/combo-box/combo-box.styles.d.ts.map +1 -1
  155. package/dist/components/inputs/combo-box/combo-box.styles.js +14 -0
  156. package/dist/components/inputs/combo-box/combo-box.styles.js.map +1 -1
  157. package/dist/components/inputs/combo-box/combo-box.template.d.ts.map +1 -1
  158. package/dist/components/inputs/combo-box/combo-box.template.js +27 -20
  159. package/dist/components/inputs/combo-box/combo-box.template.js.map +1 -1
  160. package/dist/components/inputs/date-field/date-field.d.ts +29 -31
  161. package/dist/components/inputs/date-field/date-field.d.ts.map +1 -1
  162. package/dist/components/inputs/date-field/date-field.js +40 -37
  163. package/dist/components/inputs/date-field/date-field.js.map +1 -1
  164. package/dist/components/inputs/date-field/date-field.styles.d.ts.map +1 -1
  165. package/dist/components/inputs/date-field/date-field.styles.js +11 -0
  166. package/dist/components/inputs/date-field/date-field.styles.js.map +1 -1
  167. package/dist/components/inputs/date-field/date-field.template.d.ts.map +1 -1
  168. package/dist/components/inputs/date-field/date-field.template.js +7 -2
  169. package/dist/components/inputs/date-field/date-field.template.js.map +1 -1
  170. package/dist/components/inputs/date-picker/date-picker.d.ts +34 -21
  171. package/dist/components/inputs/date-picker/date-picker.d.ts.map +1 -1
  172. package/dist/components/inputs/date-picker/date-picker.js +42 -22
  173. package/dist/components/inputs/date-picker/date-picker.js.map +1 -1
  174. package/dist/components/inputs/dropdown/dropdown.d.ts +23 -2
  175. package/dist/components/inputs/dropdown/dropdown.d.ts.map +1 -1
  176. package/dist/components/inputs/dropdown/dropdown.js +36 -3
  177. package/dist/components/inputs/dropdown/dropdown.js.map +1 -1
  178. package/dist/components/inputs/file-field/file-field.d.ts +4 -3
  179. package/dist/components/inputs/file-field/file-field.d.ts.map +1 -1
  180. package/dist/components/inputs/file-field/file-field.js +8 -7
  181. package/dist/components/inputs/file-field/file-field.js.map +1 -1
  182. package/dist/components/inputs/file-field/file-field.template.d.ts.map +1 -1
  183. package/dist/components/inputs/file-field/file-field.template.js +0 -1
  184. package/dist/components/inputs/file-field/file-field.template.js.map +1 -1
  185. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.d.ts +15 -4
  186. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.d.ts.map +1 -1
  187. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.js +20 -8
  188. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.js.map +1 -1
  189. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.template.d.ts.map +1 -1
  190. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.template.js +4 -1
  191. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.template.js.map +1 -1
  192. package/dist/components/inputs/number-field/number-field.d.ts +12 -1
  193. package/dist/components/inputs/number-field/number-field.d.ts.map +1 -1
  194. package/dist/components/inputs/number-field/number-field.js +18 -3
  195. package/dist/components/inputs/number-field/number-field.js.map +1 -1
  196. package/dist/components/inputs/number-field/number-field.styles.d.ts.map +1 -1
  197. package/dist/components/inputs/number-field/number-field.styles.js +8 -16
  198. package/dist/components/inputs/number-field/number-field.styles.js.map +1 -1
  199. package/dist/components/inputs/password-field/password-field.d.ts +10 -3
  200. package/dist/components/inputs/password-field/password-field.d.ts.map +1 -1
  201. package/dist/components/inputs/password-field/password-field.js +18 -8
  202. package/dist/components/inputs/password-field/password-field.js.map +1 -1
  203. package/dist/components/inputs/password-field/password-field.template.d.ts.map +1 -1
  204. package/dist/components/inputs/password-field/password-field.template.js +3 -1
  205. package/dist/components/inputs/password-field/password-field.template.js.map +1 -1
  206. package/dist/components/inputs/radio-button/radio-button.d.ts +18 -1
  207. package/dist/components/inputs/radio-button/radio-button.d.ts.map +1 -1
  208. package/dist/components/inputs/radio-button/radio-button.js +27 -2
  209. package/dist/components/inputs/radio-button/radio-button.js.map +1 -1
  210. package/dist/components/inputs/radio-button/radio-button.template.d.ts.map +1 -1
  211. package/dist/components/inputs/radio-button/radio-button.template.js +1 -0
  212. package/dist/components/inputs/radio-button/radio-button.template.js.map +1 -1
  213. package/dist/components/inputs/radio-button-field/radio-button-field.d.ts +14 -1
  214. package/dist/components/inputs/radio-button-field/radio-button-field.d.ts.map +1 -1
  215. package/dist/components/inputs/radio-button-field/radio-button-field.js +22 -2
  216. package/dist/components/inputs/radio-button-field/radio-button-field.js.map +1 -1
  217. package/dist/components/inputs/radio-button-field/radio-button-field.template.d.ts.map +1 -1
  218. package/dist/components/inputs/radio-button-field/radio-button-field.template.js +1 -0
  219. package/dist/components/inputs/radio-button-field/radio-button-field.template.js.map +1 -1
  220. package/dist/components/inputs/radio-button-group/radio-button-group.d.ts +11 -0
  221. package/dist/components/inputs/radio-button-group/radio-button-group.d.ts.map +1 -1
  222. package/dist/components/inputs/radio-button-group/radio-button-group.js +21 -0
  223. package/dist/components/inputs/radio-button-group/radio-button-group.js.map +1 -1
  224. package/dist/components/inputs/search-field/search-field.d.ts +23 -1
  225. package/dist/components/inputs/search-field/search-field.d.ts.map +1 -1
  226. package/dist/components/inputs/search-field/search-field.js +37 -3
  227. package/dist/components/inputs/search-field/search-field.js.map +1 -1
  228. package/dist/components/inputs/search-field/search-field.template.d.ts.map +1 -1
  229. package/dist/components/inputs/search-field/search-field.template.js +4 -0
  230. package/dist/components/inputs/search-field/search-field.template.js.map +1 -1
  231. package/dist/components/inputs/segmented-control/segmented-control.d.ts +28 -0
  232. package/dist/components/inputs/segmented-control/segmented-control.d.ts.map +1 -1
  233. package/dist/components/inputs/segmented-control/segmented-control.js +52 -2
  234. package/dist/components/inputs/segmented-control/segmented-control.js.map +1 -1
  235. package/dist/components/inputs/segmented-control/segmented-control.template.d.ts.map +1 -1
  236. package/dist/components/inputs/segmented-control/segmented-control.template.js +1 -0
  237. package/dist/components/inputs/segmented-control/segmented-control.template.js.map +1 -1
  238. package/dist/components/inputs/stepper/stepper.d.ts +14 -1
  239. package/dist/components/inputs/stepper/stepper.d.ts.map +1 -1
  240. package/dist/components/inputs/stepper/stepper.js +21 -2
  241. package/dist/components/inputs/stepper/stepper.js.map +1 -1
  242. package/dist/components/inputs/switch/switch.d.ts +20 -1
  243. package/dist/components/inputs/switch/switch.d.ts.map +1 -1
  244. package/dist/components/inputs/switch/switch.js +31 -2
  245. package/dist/components/inputs/switch/switch.js.map +1 -1
  246. package/dist/components/inputs/switch/switch.template.d.ts.map +1 -1
  247. package/dist/components/inputs/switch/switch.template.js +2 -0
  248. package/dist/components/inputs/switch/switch.template.js.map +1 -1
  249. package/dist/components/inputs/switch-field/switch-field.d.ts +18 -1
  250. package/dist/components/inputs/switch-field/switch-field.d.ts.map +1 -1
  251. package/dist/components/inputs/switch-field/switch-field.js +25 -1
  252. package/dist/components/inputs/switch-field/switch-field.js.map +1 -1
  253. package/dist/components/inputs/switch-field/switch-field.template.d.ts.map +1 -1
  254. package/dist/components/inputs/switch-field/switch-field.template.js +2 -0
  255. package/dist/components/inputs/switch-field/switch-field.template.js.map +1 -1
  256. package/dist/components/inputs/text-editor/text-editor.d.ts +14 -1
  257. package/dist/components/inputs/text-editor/text-editor.d.ts.map +1 -1
  258. package/dist/components/inputs/text-editor/text-editor.js +21 -2
  259. package/dist/components/inputs/text-editor/text-editor.js.map +1 -1
  260. package/dist/components/inputs/text-field/text-field.d.ts +31 -3
  261. package/dist/components/inputs/text-field/text-field.d.ts.map +1 -1
  262. package/dist/components/inputs/text-field/text-field.js +65 -7
  263. package/dist/components/inputs/text-field/text-field.js.map +1 -1
  264. package/dist/components/inputs/text-field/text-field.template.d.ts.map +1 -1
  265. package/dist/components/inputs/text-field/text-field.template.js +5 -1
  266. package/dist/components/inputs/text-field/text-field.template.js.map +1 -1
  267. package/dist/components/inputs/time-field/time-field.d.ts +33 -35
  268. package/dist/components/inputs/time-field/time-field.d.ts.map +1 -1
  269. package/dist/components/inputs/time-field/time-field.js +43 -40
  270. package/dist/components/inputs/time-field/time-field.js.map +1 -1
  271. package/dist/components/inputs/time-field/time-field.styles.d.ts.map +1 -1
  272. package/dist/components/inputs/time-field/time-field.styles.js +12 -0
  273. package/dist/components/inputs/time-field/time-field.styles.js.map +1 -1
  274. package/dist/components/inputs/time-field/time-field.template.d.ts.map +1 -1
  275. package/dist/components/inputs/time-field/time-field.template.js +7 -2
  276. package/dist/components/inputs/time-field/time-field.template.js.map +1 -1
  277. package/dist/components/inputs/time-picker/time-picker.d.ts +34 -19
  278. package/dist/components/inputs/time-picker/time-picker.d.ts.map +1 -1
  279. package/dist/components/inputs/time-picker/time-picker.js +42 -22
  280. package/dist/components/inputs/time-picker/time-picker.js.map +1 -1
  281. package/dist/components/inputs/toggle-button/toggle-button.d.ts +22 -1
  282. package/dist/components/inputs/toggle-button/toggle-button.d.ts.map +1 -1
  283. package/dist/components/inputs/toggle-button/toggle-button.js +35 -2
  284. package/dist/components/inputs/toggle-button/toggle-button.js.map +1 -1
  285. package/dist/components/inputs/toggle-button/toggle-button.template.d.ts.map +1 -1
  286. package/dist/components/inputs/toggle-button/toggle-button.template.js +3 -0
  287. package/dist/components/inputs/toggle-button/toggle-button.template.js.map +1 -1
  288. package/dist/components/inputs/toggle-button-group/toggle-button-group.d.ts +27 -0
  289. package/dist/components/inputs/toggle-button-group/toggle-button-group.d.ts.map +1 -1
  290. package/dist/components/inputs/toggle-button-group/toggle-button-group.js +46 -0
  291. package/dist/components/inputs/toggle-button-group/toggle-button-group.js.map +1 -1
  292. package/dist/components/inputs/token-field/token-field.d.ts +7 -1
  293. package/dist/components/inputs/token-field/token-field.d.ts.map +1 -1
  294. package/dist/components/inputs/token-field/token-field.js +14 -1
  295. package/dist/components/inputs/token-field/token-field.js.map +1 -1
  296. package/dist/components/layout/app-view/app-view.d.ts.map +1 -1
  297. package/dist/components/layout/app-view/app-view.js +12 -0
  298. package/dist/components/layout/app-view/app-view.js.map +1 -1
  299. package/dist/components/layout/box/box.d.ts +4 -4
  300. package/dist/components/layout/box/box.d.ts.map +1 -1
  301. package/dist/components/layout/box/box.js +4 -4
  302. package/dist/components/layout/box/box.js.map +1 -1
  303. package/dist/components/layout/box/box.styles.d.ts.map +1 -1
  304. package/dist/components/layout/box/box.styles.js +4 -6
  305. package/dist/components/layout/box/box.styles.js.map +1 -1
  306. package/dist/components/layout/card/card.d.ts +18 -19
  307. package/dist/components/layout/card/card.d.ts.map +1 -1
  308. package/dist/components/layout/card/card.js +18 -19
  309. package/dist/components/layout/card/card.js.map +1 -1
  310. package/dist/components/layout/card/card.styles.d.ts.map +1 -1
  311. package/dist/components/layout/card/card.styles.js +1 -0
  312. package/dist/components/layout/card/card.styles.js.map +1 -1
  313. package/dist/components/layout/collection/collection.d.ts.map +1 -1
  314. package/dist/components/layout/collection/collection.js +6 -2
  315. package/dist/components/layout/collection/collection.js.map +1 -1
  316. package/dist/components/layout/divider/divider.d.ts +1 -1
  317. package/dist/components/layout/divider/divider.js +1 -1
  318. package/dist/components/layout/popover/popover.d.ts +1 -1
  319. package/dist/components/layout/popover/popover.d.ts.map +1 -1
  320. package/dist/components/layout/popover/popover.js +15 -2
  321. package/dist/components/layout/popover/popover.js.map +1 -1
  322. package/dist/components/layout/sheet/sheet.d.ts +1 -1
  323. package/dist/components/layout/sheet/sheet.js +2 -2
  324. package/dist/components/layout/sheet/sheet.js.map +1 -1
  325. package/dist/components/layout/sheet/sheet.styles.d.ts.map +1 -1
  326. package/dist/components/layout/sheet/sheet.styles.js +15 -3
  327. package/dist/components/layout/sheet/sheet.styles.js.map +1 -1
  328. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.d.ts +8 -0
  329. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.d.ts.map +1 -1
  330. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.js +29 -11
  331. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.js.map +1 -1
  332. package/dist/components/layout/window/window.d.ts +20 -21
  333. package/dist/components/layout/window/window.d.ts.map +1 -1
  334. package/dist/components/layout/window/window.js +21 -22
  335. package/dist/components/layout/window/window.js.map +1 -1
  336. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.d.ts +41 -12
  337. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.d.ts.map +1 -1
  338. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.js +47 -17
  339. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.js.map +1 -1
  340. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.styles.d.ts.map +1 -1
  341. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.styles.js +42 -13
  342. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.styles.js.map +1 -1
  343. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.template.d.ts.map +1 -1
  344. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.template.js +12 -4
  345. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.template.js.map +1 -1
  346. package/dist/components/lists-and-tables/list/list.d.ts +168 -61
  347. package/dist/components/lists-and-tables/list/list.d.ts.map +1 -1
  348. package/dist/components/lists-and-tables/list/list.i18n.d.ts +0 -1
  349. package/dist/components/lists-and-tables/list/list.i18n.d.ts.map +1 -1
  350. package/dist/components/lists-and-tables/list/list.i18n.js +0 -1
  351. package/dist/components/lists-and-tables/list/list.i18n.js.map +1 -1
  352. package/dist/components/lists-and-tables/list/list.js +361 -122
  353. package/dist/components/lists-and-tables/list/list.js.map +1 -1
  354. package/dist/components/lists-and-tables/list/list.styles.d.ts.map +1 -1
  355. package/dist/components/lists-and-tables/list/list.styles.js +5 -0
  356. package/dist/components/lists-and-tables/list/list.styles.js.map +1 -1
  357. package/dist/components/lists-and-tables/list/list.template.d.ts +1 -3
  358. package/dist/components/lists-and-tables/list/list.template.d.ts.map +1 -1
  359. package/dist/components/lists-and-tables/list/list.template.js +2 -7
  360. package/dist/components/lists-and-tables/list/list.template.js.map +1 -1
  361. package/dist/components/lists-and-tables/list-item/list-item.d.ts +134 -23
  362. package/dist/components/lists-and-tables/list-item/list-item.d.ts.map +1 -1
  363. package/dist/components/lists-and-tables/list-item/list-item.js +354 -61
  364. package/dist/components/lists-and-tables/list-item/list-item.js.map +1 -1
  365. package/dist/components/lists-and-tables/list-item/list-item.styles.d.ts.map +1 -1
  366. package/dist/components/lists-and-tables/list-item/list-item.styles.js +116 -34
  367. package/dist/components/lists-and-tables/list-item/list-item.styles.js.map +1 -1
  368. package/dist/components/lists-and-tables/list-item/list-item.template.d.ts +1 -1
  369. package/dist/components/lists-and-tables/list-item/list-item.template.d.ts.map +1 -1
  370. package/dist/components/lists-and-tables/list-item/list-item.template.js +5 -2
  371. package/dist/components/lists-and-tables/list-item/list-item.template.js.map +1 -1
  372. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.d.ts +116 -0
  373. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.d.ts.map +1 -0
  374. package/dist/components/lists-and-tables/{list-item-action/list-item-action.js → list-item-segment/list-item-segment.js} +85 -56
  375. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.js.map +1 -0
  376. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.d.ts +2 -0
  377. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.d.ts.map +1 -0
  378. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.js +179 -0
  379. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.js.map +1 -0
  380. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.d.ts +3 -0
  381. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.d.ts.map +1 -0
  382. package/dist/components/lists-and-tables/{list-item-action/list-item-action.template.js → list-item-segment/list-item-segment.template.js} +5 -4
  383. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.js.map +1 -0
  384. package/dist/components/lists-and-tables/table/table.d.ts +12 -9
  385. package/dist/components/lists-and-tables/table/table.d.ts.map +1 -1
  386. package/dist/components/lists-and-tables/table/table.i18n.d.ts +0 -1
  387. package/dist/components/lists-and-tables/table/table.i18n.d.ts.map +1 -1
  388. package/dist/components/lists-and-tables/table/table.i18n.js +0 -1
  389. package/dist/components/lists-and-tables/table/table.i18n.js.map +1 -1
  390. package/dist/components/lists-and-tables/table/table.js +26 -16
  391. package/dist/components/lists-and-tables/table/table.js.map +1 -1
  392. package/dist/components/lists-and-tables/table/table.styles.d.ts.map +1 -1
  393. package/dist/components/lists-and-tables/table/table.styles.js +5 -0
  394. package/dist/components/lists-and-tables/table/table.styles.js.map +1 -1
  395. package/dist/components/lists-and-tables/table/table.template.d.ts +1 -1
  396. package/dist/components/lists-and-tables/table/table.template.d.ts.map +1 -1
  397. package/dist/components/lists-and-tables/table/table.template.js +5 -9
  398. package/dist/components/lists-and-tables/table/table.template.js.map +1 -1
  399. package/dist/components/navigation/link/link.d.ts +30 -24
  400. package/dist/components/navigation/link/link.d.ts.map +1 -1
  401. package/dist/components/navigation/link/link.js +33 -24
  402. package/dist/components/navigation/link/link.js.map +1 -1
  403. package/dist/components/navigation/link/link.template.js +1 -1
  404. package/dist/components/navigation/link/link.template.js.map +1 -1
  405. package/dist/components/navigation/menu-bar/menu-bar.d.ts +7 -7
  406. package/dist/components/navigation/menu-bar/menu-bar.js +7 -7
  407. package/dist/components/navigation/menu-bar-item/menu-bar-item.d.ts +23 -23
  408. package/dist/components/navigation/menu-bar-item/menu-bar-item.js +23 -23
  409. package/dist/components/navigation/pagination/pagination.d.ts +4 -4
  410. package/dist/components/navigation/pagination/pagination.js +4 -4
  411. package/dist/components/navigation/skip-link/skip-link.d.ts +7 -7
  412. package/dist/components/navigation/skip-link/skip-link.js +7 -7
  413. package/dist/components/navigation/tab-bar/tab-bar.d.ts +5 -3
  414. package/dist/components/navigation/tab-bar/tab-bar.d.ts.map +1 -1
  415. package/dist/components/navigation/tab-bar/tab-bar.js +18 -13
  416. package/dist/components/navigation/tab-bar/tab-bar.js.map +1 -1
  417. package/dist/components/navigation/tab-bar/tab-bar.styles.js +8 -8
  418. package/dist/components/navigation/tab-bar/tab-bar.template.js +5 -5
  419. package/dist/components/navigation/tab-bar/tab-bar.template.js.map +1 -1
  420. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.d.ts +15 -15
  421. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.js +15 -15
  422. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.d.ts.map +1 -1
  423. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.js +14 -2
  424. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.js.map +1 -1
  425. package/dist/components/navigation/top-title-bar/top-title-bar.d.ts +2 -2
  426. package/dist/components/navigation/top-title-bar/top-title-bar.js +2 -2
  427. package/dist/components/navigation/top-title-bar/top-title-bar.styles.js +2 -2
  428. package/dist/components/status-and-feedback/badge/badge.d.ts +8 -2
  429. package/dist/components/status-and-feedback/badge/badge.d.ts.map +1 -1
  430. package/dist/components/status-and-feedback/badge/badge.js +17 -1
  431. package/dist/components/status-and-feedback/badge/badge.js.map +1 -1
  432. package/dist/components/status-and-feedback/badge/badge.styles.d.ts.map +1 -1
  433. package/dist/components/status-and-feedback/badge/badge.styles.js +41 -10
  434. package/dist/components/status-and-feedback/badge/badge.styles.js.map +1 -1
  435. package/dist/components/status-and-feedback/badge/badge.template.js +1 -1
  436. package/dist/components/status-and-feedback/badge/badge.template.js.map +1 -1
  437. package/dist/components/status-and-feedback/banner/banner.styles.js +2 -2
  438. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.d.ts +37 -36
  439. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.d.ts.map +1 -1
  440. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.js +37 -36
  441. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.js.map +1 -1
  442. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.d.ts +1 -1
  443. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.js +2 -2
  444. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.js.map +1 -1
  445. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.d.ts.map +1 -1
  446. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.js +7 -0
  447. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.js.map +1 -1
  448. package/dist/components/status-and-feedback/notification/notification-region.js +1 -1
  449. package/dist/components/status-and-feedback/status-bar/status-bar.d.ts +29 -28
  450. package/dist/components/status-and-feedback/status-bar/status-bar.d.ts.map +1 -1
  451. package/dist/components/status-and-feedback/status-bar/status-bar.js +29 -28
  452. package/dist/components/status-and-feedback/status-bar/status-bar.js.map +1 -1
  453. package/dist/components/status-and-feedback/step-indicator/step-indicator.styles.js +1 -1
  454. package/dist/components/{visibility-mixin-GxbwkBb1.js → visibility-mixin-vbfhyo7f.js} +1 -1
  455. package/dist/components/{with-translations-DzAdFTK8.js → with-translations-CqUV9S5g.js} +1 -1
  456. package/dist/css/form-section.css +28 -46
  457. package/dist/css/form.css +7 -13
  458. package/dist/css/rich-text.css +5 -5
  459. package/dist/css/variables.css +133 -8
  460. package/dist/nldd.min.js +1382 -875
  461. package/dist/types/vue.d.ts +530 -336
  462. package/dist/utilities/codemirror/codemirror-element.d.ts.map +1 -1
  463. package/dist/utilities/codemirror/codemirror-element.js +5 -0
  464. package/dist/utilities/codemirror/codemirror-element.js.map +1 -1
  465. package/dist/utilities/described-by-mixin.d.ts +49 -0
  466. package/dist/utilities/described-by-mixin.d.ts.map +1 -0
  467. package/dist/utilities/described-by-mixin.js +109 -0
  468. package/dist/utilities/described-by-mixin.js.map +1 -0
  469. package/dist/utilities/form-associated-mixin.d.ts +5 -0
  470. package/dist/utilities/form-associated-mixin.d.ts.map +1 -1
  471. package/dist/utilities/form-associated-mixin.js +69 -0
  472. package/dist/utilities/form-associated-mixin.js.map +1 -1
  473. package/dist/utilities/scroll-mode-controller.d.ts +9 -1
  474. package/dist/utilities/scroll-mode-controller.d.ts.map +1 -1
  475. package/dist/utilities/scroll-mode-controller.js +10 -2
  476. package/dist/utilities/scroll-mode-controller.js.map +1 -1
  477. package/package.json +21 -9
  478. package/dist/components/lists-and-tables/list-item-action/list-item-action.d.ts +0 -108
  479. package/dist/components/lists-and-tables/list-item-action/list-item-action.d.ts.map +0 -1
  480. package/dist/components/lists-and-tables/list-item-action/list-item-action.js.map +0 -1
  481. package/dist/components/lists-and-tables/list-item-action/list-item-action.styles.d.ts +0 -2
  482. package/dist/components/lists-and-tables/list-item-action/list-item-action.styles.d.ts.map +0 -1
  483. package/dist/components/lists-and-tables/list-item-action/list-item-action.styles.js +0 -145
  484. package/dist/components/lists-and-tables/list-item-action/list-item-action.styles.js.map +0 -1
  485. package/dist/components/lists-and-tables/list-item-action/list-item-action.template.d.ts +0 -3
  486. package/dist/components/lists-and-tables/list-item-action/list-item-action.template.d.ts.map +0 -1
  487. package/dist/components/lists-and-tables/list-item-action/list-item-action.template.js.map +0 -1
@@ -46,7 +46,6 @@ import type { NLDDFileField } from '@nldd/design-system/file-field';
46
46
  import type { NLDDForm } from '@nldd/design-system/form';
47
47
  import type { NLDDFormActions } from '@nldd/design-system/form-actions';
48
48
  import type { NLDDFormField } from '@nldd/design-system/form-field';
49
- import type { NLDDFormFieldErrorText } from '@nldd/design-system/form-field';
50
49
  import type { NLDDFormFieldHelpText } from '@nldd/design-system/form-field';
51
50
  import type { NLDDFormSection } from '@nldd/design-system/form-section';
52
51
  import type { NLDDFullBleedSection } from '@nldd/design-system/full-bleed-section';
@@ -62,7 +61,7 @@ import type { NLDDKeyboardShortcut } from '@nldd/design-system/keyboard-shortcut
62
61
  import type { NLDDLink } from '@nldd/design-system/link';
63
62
  import type { NLDDList } from '@nldd/design-system/list';
64
63
  import type { NLDDListItem } from '@nldd/design-system/list-item';
65
- import type { NLDDListItemAction } from '@nldd/design-system/list-item-action';
64
+ import type { NLDDListItemSegment } from '@nldd/design-system/list-item-segment';
66
65
  import type { NLDDMenu } from '@nldd/design-system/menu';
67
66
  import type { NLDDMenuBar } from '@nldd/design-system/menu-bar';
68
67
  import type { NLDDMenuBarItem } from '@nldd/design-system/menu-bar-item';
@@ -116,6 +115,7 @@ import type { NLDDTabBarItem } from '@nldd/design-system/tab-bar';
116
115
  import type { NLDDTable } from '@nldd/design-system/table';
117
116
  import type { NLDDTableRow } from '@nldd/design-system/table';
118
117
  import type { NLDDTag } from '@nldd/design-system/tag';
118
+ import type { NLDDText } from '@nldd/design-system/text';
119
119
  import type { NLDDTextCell } from '@nldd/design-system/text-cell';
120
120
  import type { NLDDTextEditor } from '@nldd/design-system/text-editor';
121
121
  import type { NLDDTextField } from '@nldd/design-system/text-field';
@@ -135,6 +135,8 @@ import type { NLDDTooltip } from '@nldd/design-system/tooltip';
135
135
  import type { NLDDTopNavigationBar } from '@nldd/design-system/top-navigation-bar';
136
136
  import type { NLDDTopTitleBar } from '@nldd/design-system/top-title-bar';
137
137
  import type { NLDDTwoThirdsOneThirdSection } from '@nldd/design-system/two-thirds-one-third-section';
138
+ import type { NLDDValidationItem } from '@nldd/design-system/validation-list';
139
+ import type { NLDDValidationList } from '@nldd/design-system/validation-list';
138
140
  import type { NLDDWindow } from '@nldd/design-system/window';
139
141
 
140
142
  declare module 'vue' {
@@ -197,6 +199,10 @@ declare module 'vue' {
197
199
  'tooltipTiming'?: NLDDAvatar['tooltipTiming'];
198
200
  /** Makes the avatar a link to this URL; the shape itself becomes the link, so the hit area and the focus ring follow it */
199
201
  'href'?: NLDDAvatar['href'];
202
+ /** Takes the control out of the tab order (tabindex="-1"), for an avatar that is a link or a button inside a roving container (a row of an nldd-list). Does nothing on a decorative avatar. */
203
+ 'no-tab'?: NLDDAvatar['noTab'];
204
+ /** Takes the control out of the tab order (tabindex="-1"), for an avatar that is a link or a button inside a roving container (a row of an nldd-list). Does nothing on a decorative avatar. */
205
+ 'noTab'?: NLDDAvatar['noTab'];
200
206
  /** Makes the avatar a button; ignored when `href` is set */
201
207
  'button'?: NLDDAvatar['button'];
202
208
  /** Link target for href (e.g. '_blank'); completes rel and announces "Opens in a new tab" */
@@ -228,8 +234,12 @@ declare module 'vue' {
228
234
  type NLDDBadgeProps = {
229
235
  /** Size: 'sm' | 'md' (default: 'md') */
230
236
  'size'?: NLDDBadge['size'];
231
- /** Semantic ('critical' | 'accent' | 'neutral' | 'warning' | 'success') or a Rijkshuisstijl color ('lintblauw' | 'hemelblauw' | 'oranje' | …). Default: 'critical' */
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' */
232
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. */
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. */
242
+ 'customColor'?: NLDDBadge['customColor'];
233
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`. */
234
244
  'pulse'?: NLDDBadge['pulse'];
235
245
  /** Text (takes precedence over number) */
@@ -285,8 +295,8 @@ declare module 'vue' {
285
295
  };
286
296
 
287
297
  type NLDDBoxProps = {
288
- /** Which surface this box draws. - `tinted` (default): a box on a plain page background. - `base`: a box on an already-tinted parent (the border ring gets +2 palette steps so it still reads against a card-on-card). - `critical`: a region whose actions are destructive or irreversible (a "danger zone"), tinted and outlined in critical. It carries no ARIA of its own: unlike nldd-banner this is not an announcement but a permanent part of the page, so the heading and the button labels have to name the danger — colour is a reinforcement, never the only signal (WCAG 1.4.1). The box draws the surface and nothing else: it has no padding of its own, the same way nldd-card has none. Put an nldd-container inside it and let that set the inset, so one component owns spacing wherever it is used. */
289
- 'variant'?: NLDDBox['variant'];
298
+ /** Which surface this box draws, named as it is on nldd-app-view, nldd-page, nldd-split-view-pane and nldd-card. It starts tinted where a card starts base: a box is there to stand out from the page, a card to sit on it. - `tinted` (default): a box on a plain page background. - `base`: a box on an already-tinted parent (the border ring gets +2 palette steps so it still reads against a card-on-card). - `critical`: a region whose actions are destructive or irreversible (a "danger zone"), tinted and outlined in critical. It carries no ARIA of its own: unlike nldd-banner this is not an announcement but a permanent part of the page, so the heading and the button labels have to name the danger — color is a reinforcement, never the only signal (WCAG 1.4.1). The box draws the surface and nothing else: it has no padding of its own, the same way nldd-card has none. Put an nldd-container inside it and let that set the inset, so one component owns spacing wherever it is used. */
299
+ 'background'?: NLDDBox['background'];
290
300
  };
291
301
 
292
302
  type NLDDBreadcrumbsProps = {
@@ -308,7 +318,7 @@ declare module 'vue' {
308
318
  };
309
319
 
310
320
  type NLDDButtonProps = {
311
- /** Button variant: 'primary' | 'secondary' | 'destructive' | 'accent-filled' | 'accent-transparent' | 'neutral-tinted' | 'neutral-base' | 'neutral-transparent' | 'critical-tinted' | 'critical-transparent' | 'inherit-filled' | 'inherit-tinted'. De inherit-varianten leiden hun kleuren af van currentColor, voor knoppen op gekleurde vlakken; inherit-filled gebruikt de vlakkleur (--context-parent-background-color) als labelkleur met een wit/zwart-contrastflip als fallback. */
321
+ /** Button variant: 'primary' | 'secondary' | 'destructive' | 'accent-filled' | 'accent-transparent' | 'neutral-tinted' | 'neutral-base' | 'neutral-transparent' | 'critical-tinted' | 'critical-transparent' | 'inherit-filled' | 'inherit-tinted'. The inherit variants derive their colors from currentColor, for buttons on colored surfaces; inherit-filled uses the surface color (--context-parent-background-color) as the label color, with a white/black contrast flip as a fallback. */
312
322
  'variant'?: NLDDButton['variant'];
313
323
  /** Button size: 'xs' | 'sm' | 'md' | 'lg' (default: 'md'). 'lg' uses larger text and 24px start/end icons. */
314
324
  'size'?: NLDDButton['size'];
@@ -322,6 +332,10 @@ declare module 'vue' {
322
332
  'max-width'?: NLDDButton['maxWidth'];
323
333
  /** Caps the width at this CSS length (e.g. '320px'). Combines with `width="full"`: the button follows its container up to the cap. A label that doesn't fit is truncated with an ellipsis — a cap only means something if the content respects it. */
324
334
  'maxWidth'?: NLDDButton['maxWidth'];
335
+ /** Takes the button out of the tab order (tabindex="-1"), for a control owned by a roving container (e.g. a button in a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
336
+ 'no-tab'?: NLDDButton['noTab'];
337
+ /** Takes the button out of the tab order (tabindex="-1"), for a control owned by a roving container (e.g. a button in a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
338
+ 'noTab'?: NLDDButton['noTab'];
325
339
  /** Whether the button has a icon to indicate it opens a menu or popover */
326
340
  'expandable'?: NLDDButton['expandable'];
327
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. */
@@ -376,6 +390,8 @@ declare module 'vue' {
376
390
  'popoverTargetElement'?: NLDDButton['popoverTargetElement'];
377
391
  /** Action the browser performs when the button is clicked, mirroring the standard `popovertargetaction` attribute. Defaults to `'toggle'`. Use `'show'` when a separate handler owns the close path (e.g. the consumer toggles the popover programmatically) so the browser's default action doesn't double-fire. */
378
392
  'popoverTargetAction'?: NLDDButton['popoverTargetAction'];
393
+ /** Set by nldd-form-field. A consumer never writes this. */
394
+ 'describedByElements'?: NLDDButton['describedByElements'];
379
395
  /** When button is clicked (not fired when disabled) */
380
396
  'onClick'?: (event: CustomEvent) => void;
381
397
  };
@@ -400,21 +416,21 @@ declare module 'vue' {
400
416
  };
401
417
 
402
418
  type NLDDCardProps = {
403
- /** Vlakkleur van de kaart: `base` (standaard) op een gewone pagina-achtergrond, `tinted` wanneer de kaart juist mag opvallen tegen een base-surface */
419
+ /** Surface color of the card: `base` (default) on a plain page background, `tinted` when the card should stand out against a base surface */
404
420
  'background'?: NLDDCard['background'];
405
- /** Toegankelijke naam van de kaart; bij `href`/`button` benoemt deze de link of knop, anders de kaart-region */
421
+ /** Accessible name of the card; with `href`/`button` it names the link or button, otherwise the card region */
406
422
  'accessible-label'?: NLDDCard['accessibleLabel'];
407
- /** Toegankelijke naam van de kaart; bij `href`/`button` benoemt deze de link of knop, anders de kaart-region */
423
+ /** Accessible name of the card; with `href`/`button` it names the link or button, otherwise the card region */
408
424
  'accessibleLabel'?: NLDDCard['accessibleLabel'];
409
- /** Maakt de hele kaart een link naar deze URL (leeg = geen link) */
425
+ /** Makes the whole card a link to this URL (empty = no link) */
410
426
  'href'?: NLDDCard['href'];
411
- /** Maakt de hele kaart een knop; genegeerd wanneer `href` is gezet */
427
+ /** Makes the whole card a button; ignored when `href` is set */
412
428
  'button'?: NLDDCard['button'];
413
- /** Link target voor href (bijv. '_blank'); stelt rel automatisch bij en voegt bij '_blank' een "Opent in nieuw tabblad"-melding toe */
429
+ /** Link target for href (e.g. '_blank'); adjusts rel automatically and adds an "Opent in nieuw tabblad" announcement for '_blank' */
414
430
  'target'?: NLDDCard['target'];
415
- /** Link rel voor href; standaard 'noopener noreferrer' bij target='_blank' */
431
+ /** Link rel for href; defaults to 'noopener noreferrer' with target='_blank' */
416
432
  'rel'?: NLDDCard['rel'];
417
- /** Overschrijf vertaalsleutels (bijv. de "Opent in nieuw tabblad"-melding) */
433
+ /** Override translation keys (e.g. the "Opent in nieuw tabblad" announcement) */
418
434
  'translations'?: NLDDCard['translations'];
419
435
  };
420
436
 
@@ -454,16 +470,26 @@ declare module 'vue' {
454
470
  'decorative'?: NLDDCheckbox['decorative'];
455
471
  /** Disabled state */
456
472
  'disabled'?: NLDDCheckbox['disabled'];
473
+ /** Takes the control out of the tab order (tabindex="-1"), for a control owned by a roving container (a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
474
+ 'no-tab'?: NLDDCheckbox['noTab'];
475
+ /** Takes the control out of the tab order (tabindex="-1"), for a control owned by a roving container (a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
476
+ 'noTab'?: NLDDCheckbox['noTab'];
457
477
  /** Indeterminate state (takes precedence over checked visually) */
458
478
  'indeterminate'?: NLDDCheckbox['indeterminate'];
459
479
  /** Value for form submission */
460
480
  'value'?: NLDDCheckbox['value'];
461
481
  /** Name for form submission */
462
482
  'name'?: NLDDCheckbox['name'];
463
- /** Accessible label forwarded as aria-label to the native input. Note: aria-labelledby is not supported as IDREF resolution cannot cross shadow DOM boundaries. */
483
+ /** Accessible label forwarded as aria-label to the native input. */
464
484
  'accessible-label'?: NLDDCheckbox['accessibleLabel'];
465
- /** Accessible label forwarded as aria-label to the native input. Note: aria-labelledby is not supported as IDREF resolution cannot cross shadow DOM boundaries. */
485
+ /** Accessible label forwarded as aria-label to the native input. */
466
486
  'accessibleLabel'?: NLDDCheckbox['accessibleLabel'];
487
+ /** Required state */
488
+ 'required'?: NLDDCheckbox['required'];
489
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. Note: aria-labelledby is not supported as IDREF resolution cannot cross shadow DOM boundaries. */
490
+ 'invalid'?: NLDDCheckbox['invalid'];
491
+ /** Set by nldd-form-field. A consumer never writes this. */
492
+ 'describedByElements'?: NLDDCheckbox['describedByElements'];
467
493
  'internals'?: NLDDCheckbox['internals'];
468
494
  /** Fired when the checkbox state changes; detail: { checked: boolean, value: string } */
469
495
  'onChange'?: (event: CustomEvent) => void;
@@ -482,6 +508,12 @@ declare module 'vue' {
482
508
  'name'?: NLDDCheckboxField['name'];
483
509
  /** Label text for the checkbox */
484
510
  'label'?: NLDDCheckboxField['label'];
511
+ /** Required state */
512
+ 'required'?: NLDDCheckboxField['required'];
513
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
514
+ 'invalid'?: NLDDCheckboxField['invalid'];
515
+ /** Set by nldd-form-field. A consumer never writes this. */
516
+ 'describedByElements'?: NLDDCheckboxField['describedByElements'];
485
517
  'internals'?: NLDDCheckboxField['internals'];
486
518
  /** When checked state changes; detail: { checked: boolean, value: string } */
487
519
  'onChange'?: (event: CustomEvent) => void;
@@ -522,6 +554,10 @@ declare module 'vue' {
522
554
  'accessible-label'?: NLDDCodeEditor['accessibleLabel'];
523
555
  /** Accessible label forwarded to the editor. Set automatically by nldd-form-field. */
524
556
  'accessibleLabel'?: NLDDCodeEditor['accessibleLabel'];
557
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
558
+ 'invalid'?: NLDDCodeEditor['invalid'];
559
+ /** Set by nldd-form-field. A consumer never writes this. */
560
+ 'describedByElements'?: NLDDCodeEditor['describedByElements'];
525
561
  'internals'?: NLDDCodeEditor['internals'];
526
562
  /** When the content changes (detail: { value }) */
527
563
  'onInput'?: (event: CustomEvent) => void;
@@ -588,6 +624,8 @@ declare module 'vue' {
588
624
  'invalid'?: NLDDComboBox['invalid'];
589
625
  /** Disabled state */
590
626
  'disabled'?: NLDDComboBox['disabled'];
627
+ /** Read-only state: the value stays readable, selectable and in the tab order, but the menu does not open and there is nothing to clear. The input drops its combobox role and the aria that goes with it, so assistive technology is not told about a list it cannot open. Use this where the value belongs to the record rather than to the form, e.g. the product an asset is an instance of. */
628
+ 'readonly'?: NLDDComboBox['readonly'];
591
629
  /** Allow committing free-typed values that match no option (Enter/blur). Default false: only menu options are accepted. */
592
630
  'allow-custom'?: NLDDComboBox['allowCustom'];
593
631
  /** Allow committing free-typed values that match no option (Enter/blur). Default false: only menu options are accepted. */
@@ -612,6 +650,16 @@ declare module 'vue' {
612
650
  'noSpellcheck'?: NLDDComboBox['noSpellcheck'];
613
651
  /** Optional fixed width (any CSS length, e.g. "240px"). Default: stretches to fill container. */
614
652
  'width'?: NLDDComboBox['width'];
653
+ /** Required state */
654
+ 'required'?: NLDDComboBox['required'];
655
+ /** Regular expression the value has to match, as the native `pattern`. */
656
+ 'pattern'?: NLDDComboBox['pattern'];
657
+ /** Fewest characters the value may have. */
658
+ 'minlength'?: NLDDComboBox['minlength'];
659
+ /** Most characters the value may have. */
660
+ 'maxlength'?: NLDDComboBox['maxlength'];
661
+ /** Set by nldd-form-field. A consumer never writes this. */
662
+ 'describedByElements'?: NLDDComboBox['describedByElements'];
615
663
  'internals'?: NLDDComboBox['internals'];
616
664
  /** When the input value changes; detail: { value: string } */
617
665
  'onInput'?: (event: CustomEvent) => void;
@@ -783,93 +831,95 @@ declare module 'vue' {
783
831
  };
784
832
 
785
833
  type NLDDDateFieldProps = {
786
- /** 'md' (standaard) | 'sm'. Wordt automatisch gezet door nldd-form-field. */
834
+ /** 'md' (default) | 'sm'. Set automatically by nldd-form-field. */
787
835
  'size'?: NLDDDateField['size'];
788
- /** De datum als ISO (jjjj-mm-dd). Met `range` een ISO 8601-interval: `jjjj-mm-dd/jjjj-mm-dd`. Leeg wanneer er geen geldige datum staat. */
836
+ /** The date as ISO (yyyy-mm-dd). With `range` an ISO 8601 interval: `yyyy-mm-dd/yyyy-mm-dd`. Empty when there is no valid date. */
789
837
  'value'?: NLDDDateField['value'];
790
- /** Kies een periode: twee invoervelden en een kalender in bereikmodus. */
838
+ /** Pick a period: two inputs and a calendar in range mode. */
791
839
  'range'?: NLDDDateField['range'];
792
- /** Vroegst toegestane datum als ISO (jjjj-mm-dd). */
840
+ /** Earliest allowed date as ISO (yyyy-mm-dd). */
793
841
  'min'?: NLDDDateField['min'];
794
- /** Laatst toegestane datum als ISO (jjjj-mm-dd). */
842
+ /** Latest allowed date as ISO (yyyy-mm-dd). */
795
843
  'max'?: NLDDDateField['max'];
796
- /** Verbergt de kalenderknop. Standaard staat die knop er wel. */
844
+ /** Hides the calendar button. It is shown by default. */
797
845
  'no-picker'?: NLDDDateField['noPicker'];
798
- /** Verbergt de kalenderknop. Standaard staat die knop er wel. */
846
+ /** Hides the calendar button. It is shown by default. */
799
847
  'noPicker'?: NLDDDateField['noPicker'];
800
- /** Zet het id op de interne input. Wordt automatisch gezet door nldd-form-field. */
848
+ /** Sets the id on the internal input. Set automatically by nldd-form-field. */
801
849
  'input-id'?: NLDDDateField['inputId'];
802
- /** Zet het id op de interne input. Wordt automatisch gezet door nldd-form-field. */
850
+ /** Sets the id on the internal input. Set automatically by nldd-form-field. */
803
851
  'inputId'?: NLDDDateField['inputId'];
804
- /** Placeholdertekst. Zet hier geen formaat in; gebruik daarvoor de supporting-label van nldd-form-field. */
852
+ /** Placeholder text. Do not put a format here; use the supporting label of nldd-form-field for that. */
805
853
  'placeholder'?: NLDDDateField['placeholder'];
806
- /** Markeert het veld als ongeldig. */
854
+ /** Marks the field as invalid. */
807
855
  'invalid'?: NLDDDateField['invalid'];
808
- /** Markeert het veld als geldig. */
856
+ /** Marks the field as valid. */
809
857
  'valid'?: NLDDDateField['valid'];
810
- /** Uitgeschakelde staat. */
858
+ /** Disabled state. */
811
859
  'disabled'?: NLDDDateField['disabled'];
812
- /** Alleen-lezen staat. */
860
+ /** Read-only state. */
813
861
  'readonly'?: NLDDDateField['readonly'];
814
- /** Verplichte staat. */
862
+ /** Required state. */
815
863
  'required'?: NLDDDateField['required'];
816
- /** Naam voor formulierverzending. */
864
+ /** Name for form submission. */
817
865
  'name'?: NLDDDateField['name'];
818
- /** Autocomplete-hint, bijvoorbeeld 'bday'. */
866
+ /** Autocomplete hint, for example 'bday'. */
819
867
  'autocomplete'?: NLDDDateField['autocomplete'];
820
- /** Toegankelijk label voor de interne input. Wordt automatisch gezet door nldd-form-field. */
868
+ /** Accessible label for the internal input. Set automatically by nldd-form-field. */
821
869
  'accessible-label'?: NLDDDateField['accessibleLabel'];
822
- /** Toegankelijk label voor de interne input. Wordt automatisch gezet door nldd-form-field. */
870
+ /** Accessible label for the internal input. Set automatically by nldd-form-field. */
823
871
  'accessibleLabel'?: NLDDDateField['accessibleLabel'];
824
- /** Ids voor aria-describedby. Wordt automatisch gezet door nldd-form-field. */
825
- 'error-message-ids'?: NLDDDateField['errorMessageIds'];
826
- /** Ids voor aria-describedby. Wordt automatisch gezet door nldd-form-field. */
827
- 'errorMessageIds'?: NLDDDateField['errorMessageIds'];
828
- /** Breedte. Standaard precies breed genoeg voor een datum plus de iconen; 'full' vult de container, of geef een eigen CSS-lengte. */
872
+ /** Width. By default exactly wide enough for a date plus the icons; 'full' fills the container; 'fit-content' drops the room for the validation icon and grows again as soon as the field turns valid or invalid; or pass your own CSS length. */
829
873
  'width'?: NLDDDateField['width'];
830
- /** Vertalingen; niet opgegeven sleutels vallen terug op het Nederlands. */
874
+ /** Translations; unspecified keys fall back to Dutch. */
831
875
  'translations'?: NLDDDateField['translations'];
876
+ /** Set by nldd-form-field. A consumer never writes this. */
877
+ 'describedByElements'?: NLDDDateField['describedByElements'];
832
878
  'internals'?: NLDDDateField['internals'];
833
- /** Bij elke wijziging. detail: { value } met de ISO-datum, of '' zolang er geen geldige datum staat. */
879
+ /** On every change. detail: { value } with the ISO date, or '' while there is no valid date. */
834
880
  'onInput'?: (event: CustomEvent) => void;
835
- /** Wanneer de waarde is vastgelegd. detail: { value } met de ISO-datum, of ''. */
881
+ /** When the value is committed. detail: { value } with the ISO date, or ''. */
836
882
  'onChange'?: (event: CustomEvent) => void;
837
883
  };
838
884
 
839
885
  type NLDDDatePickerProps = {
840
- /** De gekozen datum als ISO (jjjj-mm-dd). Alleen zonder `range`. */
886
+ /** The chosen date as ISO (yyyy-mm-dd). Only without `range`. */
841
887
  'value'?: NLDDDatePicker['value'];
842
- /** Begin van de periode als ISO. Alleen met `range`. */
888
+ /** Start of the period as ISO. Only with `range`. */
843
889
  'start'?: NLDDDatePicker['start'];
844
- /** Einde van de periode als ISO. Alleen met `range`. */
890
+ /** End of the period as ISO. Only with `range`. */
845
891
  'end'?: NLDDDatePicker['end'];
846
- /** Breedte: `full` (vult de container) of een CSS-lengte (bv. `560px`). Leeg (standaard) is de intrinsieke breedte van zeven dagcellen; de cellen rekken mee met de opgegeven breedte. */
892
+ /** Width: `full` (fills the container) or a CSS length (e.g. `560px`). Empty (default) is the intrinsic width of seven day cells; the cells stretch along with the width you pass. */
847
893
  'width'?: NLDDDatePicker['width'];
848
- /** Kies een periode in plaats van één datum. */
894
+ /** Pick a period instead of a single date. */
849
895
  'range'?: NLDDDatePicker['range'];
850
- /** Vroegst toegestane datum: ISO, of `today` met een verschuiving (`today-18y`). */
896
+ /** Earliest allowed date: ISO, or `today` with an offset (`today-18y`). */
851
897
  'min'?: NLDDDatePicker['min'];
852
- /** Laatst toegestane datum: ISO, of `today` met een verschuiving (`today+1y`). */
898
+ /** Latest allowed date: ISO, or `today` with an offset (`today+1y`). */
853
899
  'max'?: NLDDDatePicker['max'];
854
- /** Eerste dag van de week, 0 is zondag. Standaard 1 (maandag). */
900
+ /** First day of the week, 0 is Sunday. Default 1 (Monday). */
855
901
  'first-day-of-week'?: NLDDDatePicker['firstDayOfWeek'];
856
- /** Eerste dag van de week, 0 is zondag. Standaard 1 (maandag). */
902
+ /** First day of the week, 0 is Sunday. Default 1 (Monday). */
857
903
  'firstDayOfWeek'?: NLDDDatePicker['firstDayOfWeek'];
858
- /** Toont ISO-weeknummers in een kolom links. */
904
+ /** Shows ISO week numbers in a column on the left. */
859
905
  'week-numbers'?: NLDDDatePicker['weekNumbers'];
860
- /** Toont ISO-weeknummers in een kolom links. */
906
+ /** Shows ISO week numbers in a column on the left. */
861
907
  'weekNumbers'?: NLDDDatePicker['weekNumbers'];
862
- /** Toegankelijke naam van de kalender. */
908
+ /** Accessible name of the calendar. */
863
909
  'accessible-label'?: NLDDDatePicker['accessibleLabel'];
864
- /** Toegankelijke naam van de kalender. */
910
+ /** Accessible name of the calendar. */
865
911
  'accessibleLabel'?: NLDDDatePicker['accessibleLabel'];
866
- /** Vertalingen; niet opgegeven sleutels vallen terug op het Nederlands. */
912
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
913
+ 'invalid'?: NLDDDatePicker['invalid'];
914
+ /** Translations; unspecified keys fall back to Dutch. */
867
915
  'translations'?: NLDDDatePicker['translations'];
868
916
  /** Marks individual dates as unselectable - weekends, holidays, dates already booked. */
869
917
  'isDateUnavailable'?: NLDDDatePicker['isDateUnavailable'];
870
- /** Wanneer een datum of een volledige periode is gekozen. detail: { value } of { start, end }. */
918
+ /** Set by nldd-form-field. A consumer never writes this. */
919
+ 'describedByElements'?: NLDDDatePicker['describedByElements'];
920
+ /** When a date or a complete period has been chosen. detail: { value } or { start, end }. */
871
921
  'onChange'?: (event: CustomEvent) => void;
872
- /** Ook bij de tussenstap van een periode, wanneer alleen de begindatum staat. */
922
+ /** Also on the intermediate step of a period, when only the start date is set. */
873
923
  'onInput'?: (event: CustomEvent) => void;
874
924
  };
875
925
 
@@ -969,6 +1019,10 @@ declare module 'vue' {
969
1019
  'accessible-label'?: NLDDDropdown['accessibleLabel'];
970
1020
  /** Accessible name, forwarded as aria-label to the slotted select */
971
1021
  'accessibleLabel'?: NLDDDropdown['accessibleLabel'];
1022
+ /** Required state, handed to the slotted <select>. A `required` on the <select> itself is left alone. */
1023
+ 'required'?: NLDDDropdown['required'];
1024
+ /** Set by nldd-form-field. A consumer never writes this. */
1025
+ 'describedByElements'?: NLDDDropdown['describedByElements'];
972
1026
  /** Bubbles up from the slotted select; detail: { value: string } */
973
1027
  'onChange'?: (event: CustomEvent) => void;
974
1028
  };
@@ -988,10 +1042,6 @@ declare module 'vue' {
988
1042
  'input-id'?: NLDDFileField['inputId'];
989
1043
  /** Sets the id on the native input. Set automatically by nldd-form-field. */
990
1044
  'inputId'?: NLDDFileField['inputId'];
991
- /** Ids for aria-describedby on the inner input. Set automatically by nldd-form-field. */
992
- 'error-message-ids'?: NLDDFileField['errorMessageIds'];
993
- /** Ids for aria-describedby on the inner input. Set automatically by nldd-form-field. */
994
- 'errorMessageIds'?: NLDDFileField['errorMessageIds'];
995
1045
  /** Marks the field as valid; shows a check icon on the right, like nldd-dropdown */
996
1046
  'valid'?: NLDDFileField['valid'];
997
1047
  /** Marks the field as invalid; shows an alert icon on the right, like nldd-dropdown */
@@ -1005,15 +1055,17 @@ declare module 'vue' {
1005
1055
  /** Override translation keys; unset keys fall back to Dutch */
1006
1056
  'translations'?: NLDDFileField['translations'];
1007
1057
  'files'?: NLDDFileField['files'];
1058
+ /** Set by nldd-form-field. A consumer never writes this. */
1059
+ 'describedByElements'?: NLDDFileField['describedByElements'];
1008
1060
  'internals'?: NLDDFileField['internals'];
1009
1061
  /** When the chosen files change, including a clear; detail: { files: File[] } */
1010
1062
  'onChange'?: (event: CustomEvent) => void;
1011
1063
  };
1012
1064
 
1013
1065
  type NLDDFormProps = {
1014
- /** Default `label-alignment` voor descendant nldd-form-field en nldd-form-actions ('top' | 'right' | 'left'). Wordt naar descendants gepropageerd als `form-label-alignment`. Een eigen `label-alignment` op de descendant heeft voorrang via CSS-cascade. */
1066
+ /** Default `label-alignment` for descendant nldd-form-field and nldd-form-actions ('top' | 'right' | 'left'). Propagated to descendants as `form-label-alignment`. A `label-alignment` of its own on the descendant takes precedence through the CSS cascade. */
1015
1067
  'label-alignment'?: NLDDForm['labelAlignment'];
1016
- /** Default `label-alignment` voor descendant nldd-form-field en nldd-form-actions ('top' | 'right' | 'left'). Wordt naar descendants gepropageerd als `form-label-alignment`. Een eigen `label-alignment` op de descendant heeft voorrang via CSS-cascade. */
1068
+ /** Default `label-alignment` for descendant nldd-form-field and nldd-form-actions ('top' | 'right' | 'left'). Propagated to descendants as `form-label-alignment`. A `label-alignment` of its own on the descendant takes precedence through the CSS cascade. */
1017
1069
  'labelAlignment'?: NLDDForm['labelAlignment'];
1018
1070
  /** The inner <form> element. Useful for `form.checkValidity()` etc. */
1019
1071
  'form'?: NLDDForm['form'];
@@ -1022,16 +1074,16 @@ declare module 'vue' {
1022
1074
  };
1023
1075
 
1024
1076
  type NLDDFormActionsProps = {
1025
- /** 'top' (default) | 'right' | 'left'. Een eigen waarde wint altijd over de inherited form-label-alignment. */
1077
+ /** 'top' (default) | 'right' | 'left'. A value of its own always wins over the inherited form-label-alignment. */
1026
1078
  'label-alignment'?: NLDDFormActions['labelAlignment'];
1027
- /** 'top' (default) | 'right' | 'left'. Een eigen waarde wint altijd over de inherited form-label-alignment. */
1079
+ /** 'top' (default) | 'right' | 'left'. A value of its own always wins over the inherited form-label-alignment. */
1028
1080
  'labelAlignment'?: NLDDFormActions['labelAlignment'];
1029
1081
  };
1030
1082
 
1031
1083
  type NLDDFormFieldProps = {
1032
- /** 'top' (default) | 'right' | 'left'. Een eigen waarde wint altijd over de inherited form-label-alignment. */
1084
+ /** 'top' (default) | 'right' | 'left'. A value of its own always wins over the inherited form-label-alignment. */
1033
1085
  'label-alignment'?: NLDDFormField['labelAlignment'];
1034
- /** 'top' (default) | 'right' | 'left'. Een eigen waarde wint altijd over de inherited form-label-alignment. */
1086
+ /** 'top' (default) | 'right' | 'left'. A value of its own always wins over the inherited form-label-alignment. */
1035
1087
  'labelAlignment'?: NLDDFormField['labelAlignment'];
1036
1088
  /** Field label text. Omit for no-label layout. */
1037
1089
  'label'?: NLDDFormField['label'];
@@ -1047,20 +1099,15 @@ declare module 'vue' {
1047
1099
  'optionalLabel'?: NLDDFormField['optionalLabel'];
1048
1100
  };
1049
1101
 
1050
- type NLDDFormFieldErrorTextProps = {
1051
- /** Visibility managed automatically by nldd-form-field. */
1052
- 'invalid'?: NLDDFormFieldErrorText['invalid'];
1053
- };
1054
-
1055
1102
  type NLDDFormFieldHelpTextProps = {
1056
1103
  };
1057
1104
 
1058
1105
  type NLDDFormSectionProps = {
1059
- /** Heading-tekst (gerenderd in `<legend>`). */
1106
+ /** Heading text (rendered in the `<legend>`). */
1060
1107
  'text'?: NLDDFormSection['text'];
1061
- /** Korte beschrijving onder de heading. Houd ~80 tekens (zie a11y-note). */
1108
+ /** Short description under the heading. Keep it to roughly 80 characters or less (see the a11y note). */
1062
1109
  'supporting-text'?: NLDDFormSection['supportingText'];
1063
- /** Korte beschrijving onder de heading. Houd ~80 tekens (zie a11y-note). */
1110
+ /** Short description under the heading. Keep it to roughly 80 characters or less (see the a11y note). */
1064
1111
  'supportingText'?: NLDDFormSection['supportingText'];
1065
1112
  };
1066
1113
 
@@ -1183,10 +1230,14 @@ declare module 'vue' {
1183
1230
  'size'?: NLDDIcon['size'];
1184
1231
  /** 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. */
1185
1232
  'color'?: NLDDIcon['color'];
1233
+ /** 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`. */
1234
+ 'custom-color'?: NLDDIcon['customColor'];
1235
+ /** 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`. */
1236
+ 'customColor'?: NLDDIcon['customColor'];
1186
1237
  };
1187
1238
 
1188
1239
  type NLDDIconButtonProps = {
1189
- /** Button variant: 'accent-filled' | 'accent-transparent' | 'neutral-tinted' | 'neutral-transparent' | 'critical-tinted' | 'critical-transparent' | 'inherit-filled' | 'inherit-tinted' | 'primary' | 'secondary' | 'destructive'. De inherit-varianten leiden hun kleuren af van currentColor, voor knoppen op gekleurde vlakken. */
1240
+ /** Button variant: 'accent-filled' | 'accent-transparent' | 'neutral-tinted' | 'neutral-transparent' | 'critical-tinted' | 'critical-transparent' | 'inherit-filled' | 'inherit-tinted' | 'primary' | 'secondary' | 'destructive'. The inherit variants derive their colors from currentColor, for buttons on colored surfaces. */
1190
1241
  'variant'?: NLDDIconButton['variant'];
1191
1242
  /** Button size: 'xs' | 'sm' | 'md' | 'lg' (default: 'md') */
1192
1243
  'size'?: NLDDIconButton['size'];
@@ -1208,9 +1259,9 @@ declare module 'vue' {
1208
1259
  'expandable'?: NLDDIconButton['expandable'];
1209
1260
  /** 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. */
1210
1261
  'expanded'?: NLDDIconButton['expanded'];
1211
- /** Takes the button out of the tab order (tabindex="-1"), for a control owned by a roving container (e.g. an nldd-token in nldd-token-field) that manages focus itself. Still mouse- and script-focusable. */
1262
+ /** 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. */
1212
1263
  'no-tab'?: NLDDIconButton['noTab'];
1213
- /** Takes the button out of the tab order (tabindex="-1"), for a control owned by a roving container (e.g. an nldd-token in nldd-token-field) that manages focus itself. Still mouse- and script-focusable. */
1264
+ /** 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. */
1214
1265
  'noTab'?: NLDDIconButton['noTab'];
1215
1266
  /** 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. */
1216
1267
  'popup-type'?: NLDDIconButton['popupType'];
@@ -1357,84 +1408,88 @@ declare module 'vue' {
1357
1408
  };
1358
1409
 
1359
1410
  type NLDDJustInTimeEducationProps = {
1360
- /** Toon de coach-mark. App-gestuurd; standaard false. */
1411
+ /** Show the coach mark. Driven by the app; false by default. */
1361
1412
  'active'?: NLDDJustInTimeEducation['active'];
1362
- /** Titel van de callout. */
1413
+ /** Title of the callout. */
1363
1414
  'text'?: NLDDJustInTimeEducation['text'];
1364
- /** Ondersteunende tekst onder de titel. */
1415
+ /** Supporting text under the title. */
1365
1416
  'supporting-text'?: NLDDJustInTimeEducation['supportingText'];
1366
- /** Ondersteunende tekst onder de titel. */
1417
+ /** Supporting text under the title. */
1367
1418
  'supportingText'?: NLDDJustInTimeEducation['supportingText'];
1368
- /** 'auto' | 'top' | 'bottom' | 'left' | 'right' (standaard 'auto'). */
1419
+ /** 'auto' | 'top' | 'bottom' | 'left' | 'right' (default 'auto'). */
1369
1420
  'placement'?: NLDDJustInTimeEducation['placement'];
1370
- /** Toon de dismiss-knop en sta sluiten toe via 1 klik/toets buiten de coach-mark. Standaard false: dan beheert de consumer het sluiten zelf. */
1421
+ /** Show the dismiss button and allow closing with one click or key press outside the coach mark. False by default: the consumer then manages closing itself. */
1371
1422
  'dismissable'?: NLDDJustInTimeEducation['dismissable'];
1372
- /** Pijllengte en dus de afstand tussen card en control, als CSS-lengte (bijv. \`333px\`, \`30vh\`). Leeg = DS-standaard; onder 40px wordt geklemd. */
1423
+ /** Arrow length, and therefore the distance between card and control, as a CSS length (e.g. `333px`, `30vh`). Empty = the DS default; anything under 40px is clamped. */
1373
1424
  'arrow-length'?: NLDDJustInTimeEducation['arrowLength'];
1374
- /** Pijllengte en dus de afstand tussen card en control, als CSS-lengte (bijv. \`333px\`, \`30vh\`). Leeg = DS-standaard; onder 40px wordt geklemd. */
1425
+ /** Arrow length, and therefore the distance between card and control, as a CSS length (e.g. `333px`, `30vh`). Empty = the DS default; anything under 40px is clamped. */
1375
1426
  'arrowLength'?: NLDDJustInTimeEducation['arrowLength'];
1376
- /** Verberg de pijl; de card staat dan dicht tegen het control. */
1427
+ /** Hide the arrow; the card then sits close against the control. */
1377
1428
  'no-arrow'?: NLDDJustInTimeEducation['noArrow'];
1378
- /** Verberg de pijl; de card staat dan dicht tegen het control. */
1429
+ /** Hide the arrow; the card then sits close against the control. */
1379
1430
  'noArrow'?: NLDDJustInTimeEducation['noArrow'];
1380
1431
  'translations'?: NLDDJustInTimeEducation['translations'];
1381
- /** Wanneer de coach-mark sluit. detail: { reason: 'completed' | 'dismissed' | 'ignored' }. */
1432
+ /** When the coach mark closes. detail: { reason: 'completed' | 'dismissed' | 'ignored' }. */
1382
1433
  'onNlddClose'?: (event: CustomEvent) => void;
1383
1434
  };
1384
1435
 
1385
1436
  type NLDDKeyboardShortcutProps = {
1386
- /** Toetsen gescheiden door '+' (bijv. 'Cmd+K' of 'Ctrl+Shift+P'). Gebruik '+++' voor een letterlijke '+' toets: 'Ctrl+++' wordt 'Ctrl' + '+'. Voor complexere scenario's (bijv. combo met meerdere '+' keys) kun je in plaats van het keys-attribuut de default slot gebruiken met eigen <kbd> elementen. */
1437
+ /** Keys separated by '+' (e.g. 'Cmd+K' or 'Ctrl+Shift+P'). Use '+++' for a literal '+' key: 'Ctrl+++' becomes 'Ctrl' + '+'. For more complex cases (a combo with several '+' keys, for instance) use the default slot with your own <kbd> elements instead of the keys attribute. */
1387
1438
  'keys'?: NLDDKeyboardShortcut['keys'];
1388
- /** Optionele override voor macOS (incl. iPhone/iPad/iPod). */
1439
+ /** Optional override for macOS (iPhone/iPad/iPod included). */
1389
1440
  'mac-keys'?: NLDDKeyboardShortcut['macKeys'];
1390
- /** Optionele override voor macOS (incl. iPhone/iPad/iPod). */
1441
+ /** Optional override for macOS (iPhone/iPad/iPod included). */
1391
1442
  'macKeys'?: NLDDKeyboardShortcut['macKeys'];
1392
- /** Optionele override voor Windows. */
1443
+ /** Optional override for Windows. */
1393
1444
  'windows-keys'?: NLDDKeyboardShortcut['windowsKeys'];
1394
- /** Optionele override voor Windows. */
1445
+ /** Optional override for Windows. */
1395
1446
  'windowsKeys'?: NLDDKeyboardShortcut['windowsKeys'];
1396
- /** Optionele override voor Linux/ChromeOS. */
1447
+ /** Optional override for Linux/ChromeOS. */
1397
1448
  'linux-keys'?: NLDDKeyboardShortcut['linuxKeys'];
1398
- /** Optionele override voor Linux/ChromeOS. */
1449
+ /** Optional override for Linux/ChromeOS. */
1399
1450
  'linuxKeys'?: NLDDKeyboardShortcut['linuxKeys'];
1400
- /** Grootte: 'sm' | 'md' | 'inherit' (default: 'md'). 'inherit' neemt de font-size over van de container; bij de box-variant schalen de keycaps dan mee in em. */
1451
+ /** Size: 'sm' | 'md' | 'inherit' (default: 'md'). 'inherit' takes the font-size from the container; in the box variant the keycaps then scale along in em. */
1401
1452
  'size'?: NLDDKeyboardShortcut['size'];
1402
- /** 'box' (default) toont elke toets als keycap met vulling en highlight-rand; 'simple' toont de toetsen als platte tekst met scheidingstekens — lichter, voor inline gebruik zoals in een menu-item. */
1453
+ /** 'box' (default) shows each key as a keycap with a fill and a highlight edge. 'simple' shows the keys as plain text with separators: lighter, for inline use such as in a menu item. */
1403
1454
  'variant'?: NLDDKeyboardShortcut['variant'];
1404
- /** 'neutral' (default) gebruikt de eigen component-kleuren. 'inherit' laat de toetsen en scheidingstekens de omringende tekstkleur (currentColor) volgen, met een doorschijnende contrast-vulling en highlight-rand handig op een gevulde vlakkleur of een gemarkeerde rij. */
1455
+ /** 'neutral' (default) uses the component colors of its own. 'inherit' lets the keys and separators follow the surrounding text color (currentColor), with a translucent contrast fill and highlight edge. Useful on a filled surface color or a highlighted row. */
1405
1456
  'color'?: NLDDKeyboardShortcut['color'];
1406
- /** Toon ook op touch-only devices waar shortcuts niet aanroepbaar zijn. */
1457
+ /** Show on touch-only devices too, where shortcuts cannot be invoked. */
1407
1458
  'always-visible'?: NLDDKeyboardShortcut['alwaysVisible'];
1408
- /** Toon ook op touch-only devices waar shortcuts niet aanroepbaar zijn. */
1459
+ /** Show on touch-only devices too, where shortcuts cannot be invoked. */
1409
1460
  'alwaysVisible'?: NLDDKeyboardShortcut['alwaysVisible'];
1410
1461
  };
1411
1462
 
1412
1463
  type NLDDLinkProps = {
1413
- /** Link doel */
1464
+ /** Link target */
1414
1465
  'href'?: NLDDLink['href'];
1415
- /** Link target (bijv. '_blank'); stelt rel automatisch bij. Bij '_blank' voegt de link een visueel verborgen "Opent in nieuw tabblad"-melding toe voor screenreaders (WCAG 2.1 SC 3.2.2). */
1466
+ /** 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). */
1416
1467
  'target'?: NLDDLink['target'];
1417
- /** Link rel attribuut; standaard 'noopener noreferrer' bij target='_blank' */
1468
+ /** Link rel attribute; defaults to 'noopener noreferrer' with target='_blank' */
1418
1469
  'rel'?: NLDDLink['rel'];
1419
- /** Tekstgrootte: 'xs' | 'sm' | 'md' | 'lg' | 'inherit'. Leeg = inherit. */
1470
+ /** Text size: 'xs' | 'sm' | 'md' | 'lg' | 'inherit'. Empty = inherit. */
1420
1471
  'size'?: NLDDLink['size'];
1421
- /** Link tekst (alternatief voor default slot) */
1472
+ /** Link text (alternative to the default slot) */
1422
1473
  'text'?: NLDDLink['text'];
1423
- /** Icoon voor de tekst */
1474
+ /** Icon before the text */
1424
1475
  'start-icon'?: NLDDLink['startIcon'];
1425
- /** Icoon voor de tekst */
1476
+ /** Icon before the text */
1426
1477
  'startIcon'?: NLDDLink['startIcon'];
1427
- /** Icoon na de tekst */
1478
+ /** Icon after the text */
1428
1479
  'end-icon'?: NLDDLink['endIcon'];
1429
- /** Icoon na de tekst */
1480
+ /** Icon after the text */
1430
1481
  'endIcon'?: NLDDLink['endIcon'];
1431
- /** Toegankelijk label voor screen readers */
1482
+ /** Accessible label for screen readers */
1432
1483
  'accessible-label'?: NLDDLink['accessibleLabel'];
1433
- /** Toegankelijk label voor screen readers */
1484
+ /** Accessible label for screen readers */
1434
1485
  'accessibleLabel'?: NLDDLink['accessibleLabel'];
1435
- /** Uitgeschakelde staat */
1486
+ /** Disabled state */
1436
1487
  'disabled'?: NLDDLink['disabled'];
1437
- /** Overschrijf vertaalsleutels (bijv. de "Opent in nieuw tabblad"-melding); niet-gezette sleutels vallen terug op Nederlands. */
1488
+ /** Takes the control out of the tab order (tabindex="-1"), for a control owned by a roving container (a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
1489
+ 'no-tab'?: NLDDLink['noTab'];
1490
+ /** Takes the control out of the tab order (tabindex="-1"), for a control owned by a roving container (a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
1491
+ 'noTab'?: NLDDLink['noTab'];
1492
+ /** Override translation keys (e.g. the "Opent in nieuw tabblad" announcement); unset keys fall back to Dutch. */
1438
1493
  'translations'?: NLDDLink['translations'];
1439
1494
  };
1440
1495
 
@@ -1443,24 +1498,12 @@ declare module 'vue' {
1443
1498
  'variant'?: NLDDList['variant'];
1444
1499
  /** A11y role and behavior (default 'list'). See the docblock above. */
1445
1500
  'type'?: NLDDList['type'];
1446
- /** Enables drag-to-reorder and pushes `reorderable` onto the items. Only valid with `type="list"`; wins over `arrow-navigation` when both are set. */
1501
+ /** Enables drag-to-reorder and pushes `reorderable` onto the items. Only valid with `type="list"`; there the arrow keys move rows instead of focus. */
1447
1502
  'reorderable'?: NLDDList['reorderable'];
1448
1503
  /** 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 */
1449
1504
  'dividers'?: NLDDList['dividers'];
1450
- /** Roving-tabindex arrow-key navigation: ArrowUp/ArrowDown move focus between the rows, Home/End jump to first/last, and the list becomes a single tab stop. Implied by `type="tree"` (which adds ArrowLeft/ArrowRight, see above). Ignored when `reorderable` is active on a `type="list"`, and in listbox mode. */
1451
- 'arrow-navigation'?: NLDDList['arrowNavigation'];
1452
- /** Roving-tabindex arrow-key navigation: ArrowUp/ArrowDown move focus between the rows, Home/End jump to first/last, and the list becomes a single tab stop. Implied by `type="tree"` (which adds ArrowLeft/ArrowRight, see above). Ignored when `reorderable` is active on a `type="list"`, and in listbox mode. */
1453
- 'arrowNavigation'?: NLDDList['arrowNavigation'];
1454
1505
  /** Listbox only: caps the options' scroll region at this CSS length (e.g. '320px'). Unset means no cap. */
1455
1506
  'height'?: NLDDList['height'];
1456
- /** Text for the default empty-state dialog (falls back to the Dutch i18n default). Ignored when `[slot=empty]` is filled. */
1457
- 'empty-text'?: NLDDList['emptyText'];
1458
- /** Text for the default empty-state dialog (falls back to the Dutch i18n default). Ignored when `[slot=empty]` is filled. */
1459
- 'emptyText'?: NLDDList['emptyText'];
1460
- /** Supporting text for the default empty-state dialog. Ignored when `[slot=empty]` is filled. */
1461
- 'empty-supporting-text'?: NLDDList['emptySupportingText'];
1462
- /** Supporting text for the default empty-state dialog. Ignored when `[slot=empty]` is filled. */
1463
- 'emptySupportingText'?: NLDDList['emptySupportingText'];
1464
1507
  /** Accessible name, forwarded to the list in `type="list"` and to the search field in `type="listbox"`. For `type="navigation"` set `aria-label` / `aria-labelledby` on the element itself. Falls back to the i18n default. */
1465
1508
  'accessible-label'?: NLDDList['accessibleLabel'];
1466
1509
  /** Accessible name, forwarded to the list in `type="list"` and to the search field in `type="listbox"`. For `type="navigation"` set `aria-label` / `aria-labelledby` on the element itself. Falls back to the i18n default. */
@@ -1476,17 +1519,21 @@ declare module 'vue' {
1476
1519
  type NLDDListItemProps = {
1477
1520
  /** 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. */
1478
1521
  'size'?: NLDDListItem['size'];
1479
- /** Marks the item as selected. 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`. */
1522
+ /** 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`. */
1480
1523
  'selected'?: NLDDListItem['selected'];
1481
- /** Renders the item as a `<button>`; ignored when `href` is set (a link wins) */
1524
+ /** 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. */
1525
+ 'current'?: NLDDListItem['current'];
1526
+ /** Renders the item as a `<button>`. Last of the three: `href` and `checkbox` both win over it. */
1482
1527
  'button'?: NLDDListItem['button'];
1483
- /** Makes the whole row a `role="checkbox"` control; ignored when `href` is set */
1528
+ /** Makes the whole row a `role="checkbox"` control. Wins over `button`, loses to `href`. */
1484
1529
  'checkbox'?: NLDDListItem['checkbox'];
1485
1530
  /** Checked state of a `checkbox` row; the item toggles it on activation */
1486
1531
  'checked'?: NLDDListItem['checked'];
1487
- /** 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 segmented action marked `disclosure`. Written once either way; the item DEV-warns when there is nowhere for it to live. */
1532
+ /** 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. */
1533
+ 'disabled'?: NLDDListItem['disabled'];
1534
+ /** 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. */
1488
1535
  'expanded'?: NLDDListItem['expanded'];
1489
- /** Renders the item as an `<a>` with this URL. Takes precedence over `button`; without either the item is a plain container with no action. */
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. */
1490
1537
  'href'?: NLDDListItem['href'];
1491
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. */
1492
1539
  'target'?: NLDDListItem['target'];
@@ -1503,34 +1550,34 @@ declare module 'vue' {
1503
1550
  'onChange'?: (event: CustomEvent) => void;
1504
1551
  };
1505
1552
 
1506
- type NLDDListItemActionProps = {
1507
- /** Renders the segmented action as a `<button>`; ignored when `href` is set */
1508
- 'button'?: NLDDListItemAction['button'];
1509
- /** Renders the segmented action as an `<a>` with this URL; wins over `button` and `checkbox` */
1510
- 'href'?: NLDDListItemAction['href'];
1553
+ type NLDDListItemSegmentProps = {
1554
+ /** Renders the segment as a `<button>`. Last of the three: `href` and `checkbox` both win over it. */
1555
+ 'button'?: NLDDListItemSegment['button'];
1556
+ /** Renders the segment as an `<a>` with this URL. Wins over `checkbox` and `button`. */
1557
+ 'href'?: NLDDListItemSegment['href'];
1511
1558
  /** Link target forwarded to the `<a>`; only applies with `href` */
1512
- 'target'?: NLDDListItemAction['target'];
1559
+ 'target'?: NLDDListItemSegment['target'];
1513
1560
  /** Link rel forwarded to the `<a>`; only applies with `href` */
1514
- 'rel'?: NLDDListItemAction['rel'];
1515
- /** Makes the segmented action a `role="checkbox"` control; ignored when `href` is set */
1516
- 'checkbox'?: NLDDListItemAction['checkbox'];
1517
- /** Checked state of a `checkbox` action; it toggles on activation */
1518
- 'checked'?: NLDDListItemAction['checked'];
1519
- /** Disclosure state, reflected as `aria-expanded` on the control. Set it on the segmented action that opens something (e.g. a tree row's chevron). Leave it off entirely when the segmented action discloses nothing — an absent attribute emits no aria-expanded. */
1520
- 'expanded'?: NLDDListItemAction['expanded'];
1521
- /** Marks the segmented action 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 */
1522
- 'disclosure'?: NLDDListItemAction['disclosure'];
1523
- /** Marks the segmented action as the current page (`aria-current="page"`) */
1524
- 'current'?: NLDDListItemAction['current'];
1525
- /** Disabled state; only applies to button and checkbox segmented actions */
1526
- 'disabled'?: NLDDListItemAction['disabled'];
1527
- /** `full` lets the segmented action grow to fill the row (default: 'fit-content') */
1528
- 'width'?: NLDDListItemAction['width'];
1529
- /** Accessible name for the control. Set it when the segmented action holds only an icon, or when the cell text does not describe the action. */
1530
- 'accessible-label'?: NLDDListItemAction['accessibleLabel'];
1531
- /** Accessible name for the control. Set it when the segmented action holds only an icon, or when the cell text does not describe the action. */
1532
- 'accessibleLabel'?: NLDDListItemAction['accessibleLabel'];
1533
- /** On a `checkbox` action after it toggles; detail: { checked: boolean } */
1561
+ 'rel'?: NLDDListItemSegment['rel'];
1562
+ /** Makes the segment a `role="checkbox"` control. Wins over `button`, loses to `href`. */
1563
+ 'checkbox'?: NLDDListItemSegment['checkbox'];
1564
+ /** Checked state of a `checkbox` segment; it toggles on activation */
1565
+ 'checked'?: NLDDListItemSegment['checked'];
1566
+ /** 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. */
1567
+ 'expanded'?: NLDDListItemSegment['expanded'];
1568
+ /** 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 */
1569
+ 'disclosure'?: NLDDListItemSegment['disclosure'];
1570
+ /** 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. */
1571
+ 'current'?: NLDDListItemSegment['current'];
1572
+ /** 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. */
1573
+ 'disabled'?: NLDDListItemSegment['disabled'];
1574
+ /** `full` lets the segment grow to fill the row (default: 'fit-content') */
1575
+ 'width'?: NLDDListItemSegment['width'];
1576
+ /** Accessible name for the control. Set it when the segment holds only an icon, or when the cell text does not describe the action. */
1577
+ 'accessible-label'?: NLDDListItemSegment['accessibleLabel'];
1578
+ /** Accessible name for the control. Set it when the segment holds only an icon, or when the cell text does not describe the action. */
1579
+ 'accessibleLabel'?: NLDDListItemSegment['accessibleLabel'];
1580
+ /** On a `checkbox` segment after it toggles; detail: { checked: boolean } */
1534
1581
  'onChange'?: (event: CustomEvent) => void;
1535
1582
  };
1536
1583
 
@@ -1564,59 +1611,59 @@ declare module 'vue' {
1564
1611
  };
1565
1612
 
1566
1613
  type NLDDMenuBarProps = {
1567
- /** Tekst voor de overflow button (standaard via i18n) */
1614
+ /** Text for the overflow button (default through i18n) */
1568
1615
  'overflow-text'?: NLDDMenuBar['overflowText'];
1569
- /** Tekst voor de overflow button (standaard via i18n) */
1616
+ /** Text for the overflow button (default through i18n) */
1570
1617
  'overflowText'?: NLDDMenuBar['overflowText'];
1571
- /** aria-label voor de nav landmark */
1618
+ /** aria-label for the nav landmark */
1572
1619
  'accessible-label'?: NLDDMenuBar['accessibleLabel'];
1573
- /** aria-label voor de nav landmark */
1620
+ /** aria-label for the nav landmark */
1574
1621
  'accessibleLabel'?: NLDDMenuBar['accessibleLabel'];
1575
- /** Propageert compact attribuut naar slotted items (activeert content-priority) */
1622
+ /** Propagates the compact attribute to slotted items (activates content priority) */
1576
1623
  'compact'?: NLDDMenuBar['compact'];
1577
1624
  'translations'?: NLDDMenuBar['translations'];
1578
1625
  };
1579
1626
 
1580
1627
  type NLDDMenuBarItemProps = {
1581
- /** Tekst van het item */
1628
+ /** Text of the item */
1582
1629
  'text'?: NLDDMenuBarItem['text'];
1583
- /** Markeer als actief/huidig item */
1630
+ /** Mark as the active or current item */
1584
1631
  'current'?: NLDDMenuBarItem['current'];
1585
- /** aria-current waarde als current is true ('page', 'step', 'location', 'true'). Standaard: 'page' */
1632
+ /** aria-current value when current is true ('page', 'step', 'location', 'true'). Default: 'page' */
1586
1633
  'current-type'?: NLDDMenuBarItem['currentType'];
1587
- /** aria-current waarde als current is true ('page', 'step', 'location', 'true'). Standaard: 'page' */
1634
+ /** aria-current value when current is true ('page', 'step', 'location', 'true'). Default: 'page' */
1588
1635
  'currentType'?: NLDDMenuBarItem['currentType'];
1589
- /** Optionele link URL. Zonder href rendert als button. */
1636
+ /** Optional link URL. Without href it renders as a button. */
1590
1637
  'href'?: NLDDMenuBarItem['href'];
1591
- /** Optioneel icon naam (nldd-icon) */
1638
+ /** Optional icon name (nldd-icon) */
1592
1639
  'icon'?: NLDDMenuBarItem['icon'];
1593
- /** Toon disclosure icon en open de geslotte `<nldd-menu>` bij klik */
1640
+ /** Show the disclosure icon and open the slotted `<nldd-menu>` on click */
1594
1641
  'expandable'?: NLDDMenuBarItem['expandable'];
1595
- /** Verberg tekst visueel (altijd) */
1642
+ /** Hide the text visually (always) */
1596
1643
  'icon-only'?: NLDDMenuBarItem['iconOnly'];
1597
- /** Verberg tekst visueel (altijd) */
1644
+ /** Hide the text visually (always) */
1598
1645
  'iconOnly'?: NLDDMenuBarItem['iconOnly'];
1599
- /** Bepaalt wat zichtbaar blijft in compact modus: 'icon' verbergt tekst, 'text' verbergt icon */
1646
+ /** Decides what stays visible in compact mode: 'icon' hides the text, 'text' hides the icon */
1600
1647
  'content-priority'?: NLDDMenuBarItem['contentPriority'];
1601
- /** Bepaalt wat zichtbaar blijft in compact modus: 'icon' verbergt tekst, 'text' verbergt icon */
1648
+ /** Decides what stays visible in compact mode: 'icon' hides the text, 'text' hides the icon */
1602
1649
  'contentPriority'?: NLDDMenuBarItem['contentPriority'];
1603
- /** Activeert content-priority gedrag (gezet door parent nldd-menu-bar) */
1650
+ /** Activates content-priority behavior (set by the parent nldd-menu-bar) */
1604
1651
  'compact'?: NLDDMenuBarItem['compact'];
1605
- /** Schakel interactie uit */
1652
+ /** Turn interaction off */
1606
1653
  'disabled'?: NLDDMenuBarItem['disabled'];
1607
- /** Overschrijf aria-label */
1654
+ /** Override aria-label */
1608
1655
  'accessible-label'?: NLDDMenuBarItem['accessibleLabel'];
1609
- /** Overschrijf aria-label */
1656
+ /** Override aria-label */
1610
1657
  'accessibleLabel'?: NLDDMenuBarItem['accessibleLabel'];
1611
- /** aria-haspopup waarde (bijv. "menu", "dialog") */
1658
+ /** aria-haspopup value (e.g. "menu", "dialog") */
1612
1659
  'haspopup'?: NLDDMenuBarItem['haspopup'];
1613
- /** Of de bijbehorende popover open is; zet aria-expanded op de knop wanneer expandable of haspopup is gezet. Wordt automatisch bijgehouden voor een geslotte `<nldd-menu>`. */
1660
+ /** Whether the matching popover is open; sets aria-expanded on the button when expandable or haspopup is set. Tracked automatically for a slotted `<nldd-menu>`. */
1614
1661
  'expanded'?: NLDDMenuBarItem['expanded'];
1615
1662
  /** Direct element reference to the popover this item invokes — IDL-only counterpart to `popovertarget` that works across shadow boundaries. Set by `nldd-menu` when this item is wired up as the menu's anchor so the browser recognizes the inner button as the menu's invoker and excludes the click from popover light-dismiss. */
1616
1663
  'popoverTargetElement'?: NLDDMenuBarItem['popoverTargetElement'];
1617
1664
  /** Action the browser performs when the inner button is clicked, mirroring the standard `popovertargetaction` attribute. The menu keeps this in sync with its open state — `'hide'` while open, `'show'` while closed — so the browser's native invoker action always matches the intent of the click without racing. */
1618
1665
  'popoverTargetAction'?: NLDDMenuBarItem['popoverTargetAction'];
1619
- /** Bij klik op non-expandable button item (bubbles, composed) */
1666
+ /** On a click on a non-expandable button item (bubbles, composed) */
1620
1667
  'onSelect'?: (event: CustomEvent) => void;
1621
1668
  };
1622
1669
 
@@ -1631,7 +1678,7 @@ declare module 'vue' {
1631
1678
  type NLDDMenuItemProps = {
1632
1679
  /** Display text. Supports **bold** markdown syntax. */
1633
1680
  'text'?: NLDDMenuItem['text'];
1634
- /** Form value. Falls back to text when not set. */
1681
+ /** 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. */
1635
1682
  'value'?: NLDDMenuItem['value'];
1636
1683
  /** 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. */
1637
1684
  'href'?: NLDDMenuItem['href'];
@@ -1690,7 +1737,7 @@ declare module 'vue' {
1690
1737
  'accessibleLabel'?: NLDDModalDialog['accessibleLabel'];
1691
1738
  /** When the dialog is opened */
1692
1739
  'onOpen'?: (event: CustomEvent) => void;
1693
- /** When the dialog is fully closed */
1740
+ /** 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. */
1694
1741
  'onClose'?: (event: CustomEvent) => void;
1695
1742
  };
1696
1743
 
@@ -1719,6 +1766,12 @@ declare module 'vue' {
1719
1766
  'required'?: NLDDMultiLineTextField['required'];
1720
1767
  /** Autocomplete hint */
1721
1768
  'autocomplete'?: NLDDMultiLineTextField['autocomplete'];
1769
+ /** Which virtual keyboard a phone or tablet raises, forwarded as `inputmode`: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url'. It changes nothing about what the field accepts, and nothing at all on a desktop. */
1770
+ 'keyboard'?: NLDDMultiLineTextField['keyboard'];
1771
+ /** What the Enter key of the virtual keyboard says, forwarded as `enterkeyhint`: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send'. In a field where Enter starts a new line, leave it alone. */
1772
+ 'enter-key'?: NLDDMultiLineTextField['enterKey'];
1773
+ /** What the Enter key of the virtual keyboard says, forwarded as `enterkeyhint`: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send'. In a field where Enter starts a new line, leave it alone. */
1774
+ 'enterKey'?: NLDDMultiLineTextField['enterKey'];
1722
1775
  /** Initial visible rows (minimum height). Default: 3. */
1723
1776
  'rows'?: NLDDMultiLineTextField['rows'];
1724
1777
  /** 'none' | 'vertical' | 'auto' (default). 'auto' grows with content (native field-sizing), no manual handle. */
@@ -1727,16 +1780,18 @@ declare module 'vue' {
1727
1780
  'accessible-label'?: NLDDMultiLineTextField['accessibleLabel'];
1728
1781
  /** Accessible label forwarded to the inner textarea. Set automatically by nldd-form-field. */
1729
1782
  'accessibleLabel'?: NLDDMultiLineTextField['accessibleLabel'];
1730
- /** Ids for aria-describedby on the inner textarea. Set automatically by nldd-form-field. */
1731
- 'error-message-ids'?: NLDDMultiLineTextField['errorMessageIds'];
1732
- /** Ids for aria-describedby on the inner textarea. Set automatically by nldd-form-field. */
1733
- 'errorMessageIds'?: NLDDMultiLineTextField['errorMessageIds'];
1734
1783
  /** Disables browser spellchecking on the inner textarea */
1735
1784
  'no-spellcheck'?: NLDDMultiLineTextField['noSpellcheck'];
1736
1785
  /** Disables browser spellchecking on the inner textarea */
1737
1786
  'noSpellcheck'?: NLDDMultiLineTextField['noSpellcheck'];
1738
1787
  /** Optional fixed width (any CSS length, e.g. "240px"). Default: stretches to fill container. */
1739
1788
  'width'?: NLDDMultiLineTextField['width'];
1789
+ /** Fewest characters the value may have. */
1790
+ 'minlength'?: NLDDMultiLineTextField['minlength'];
1791
+ /** Most characters the value may have. */
1792
+ 'maxlength'?: NLDDMultiLineTextField['maxlength'];
1793
+ /** Set by nldd-form-field. A consumer never writes this. */
1794
+ 'describedByElements'?: NLDDMultiLineTextField['describedByElements'];
1740
1795
  'internals'?: NLDDMultiLineTextField['internals'];
1741
1796
  /** When value changes */
1742
1797
  'onInput'?: (event: CustomEvent) => void;
@@ -1822,6 +1877,10 @@ declare module 'vue' {
1822
1877
  'accessibleLabel'?: NLDDNumberField['accessibleLabel'];
1823
1878
  /** Translations; unspecified keys fall back to Dutch */
1824
1879
  'translations'?: NLDDNumberField['translations'];
1880
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
1881
+ 'invalid'?: NLDDNumberField['invalid'];
1882
+ /** Set by nldd-form-field. A consumer never writes this. */
1883
+ 'describedByElements'?: NLDDNumberField['describedByElements'];
1825
1884
  'internals'?: NLDDNumberField['internals'];
1826
1885
  /** When the value changes (typing, +/- button, or on-commit correction); detail: { value: number } */
1827
1886
  'onInput'?: (event: CustomEvent) => void;
@@ -1957,15 +2016,15 @@ declare module 'vue' {
1957
2016
  'total'?: NLDDPagination['total'];
1958
2017
  /** Disabled state */
1959
2018
  'disabled'?: NLDDPagination['disabled'];
1960
- /** Centreert de pagination in de container (host fills row, items grouped in the middle) */
2019
+ /** Centers the pagination in the container (host fills row, items grouped in the middle) */
1961
2020
  'centered'?: NLDDPagination['centered'];
1962
- /** URL patroon met {page} placeholder, rendert links in plaats van buttons */
2021
+ /** URL pattern with a {page} placeholder, renders links instead of buttons */
1963
2022
  'href-pattern'?: NLDDPagination['hrefPattern'];
1964
- /** URL patroon met {page} placeholder, rendert links in plaats van buttons */
2023
+ /** URL pattern with a {page} placeholder, renders links instead of buttons */
1965
2024
  'hrefPattern'?: NLDDPagination['hrefPattern'];
1966
- /** Vertalingen; niet opgegeven sleutels vallen terug op het Nederlands */
2025
+ /** Translations; unspecified keys fall back to Dutch */
1967
2026
  'translations'?: NLDDPagination['translations'];
1968
- /** Bij paginawisseling (detail: { page: number, href?: string }). Alleen cancelable in href-mode: preventDefault() voorkomt navigatie (SPA). */
2027
+ /** On a page change (detail: { page: number, href?: string }). Only cancelable in href mode: preventDefault() blocks navigation (SPA). */
1969
2028
  'onPageChange'?: (event: CustomEvent) => void;
1970
2029
  };
1971
2030
 
@@ -2016,12 +2075,16 @@ declare module 'vue' {
2016
2075
  'accessible-label'?: NLDDPasswordField['accessibleLabel'];
2017
2076
  /** Accessible label forwarded to the inner input. Set automatically by nldd-form-field. */
2018
2077
  'accessibleLabel'?: NLDDPasswordField['accessibleLabel'];
2019
- /** Ids for aria-describedby on the inner input. Set automatically by nldd-form-field. */
2020
- 'error-message-ids'?: NLDDPasswordField['errorMessageIds'];
2021
- /** Ids for aria-describedby on the inner input. Set automatically by nldd-form-field. */
2022
- 'errorMessageIds'?: NLDDPasswordField['errorMessageIds'];
2023
2078
  /** Optional fixed width (any CSS length, e.g. "240px"). Default: stretches to fill container. */
2024
2079
  'width'?: NLDDPasswordField['width'];
2080
+ /** Regular expression the value has to match, as the native `pattern`. */
2081
+ 'pattern'?: NLDDPasswordField['pattern'];
2082
+ /** Fewest characters the value may have. */
2083
+ 'minlength'?: NLDDPasswordField['minlength'];
2084
+ /** Most characters the value may have. */
2085
+ 'maxlength'?: NLDDPasswordField['maxlength'];
2086
+ /** Set by nldd-form-field. A consumer never writes this. */
2087
+ 'describedByElements'?: NLDDPasswordField['describedByElements'];
2025
2088
  'internals'?: NLDDPasswordField['internals'];
2026
2089
  /** When the input value changes ({ detail: { value } }) */
2027
2090
  'onInput'?: (event: CustomEvent) => void;
@@ -2060,7 +2123,7 @@ declare module 'vue' {
2060
2123
  'open'?: NLDDPopover['open'];
2061
2124
  /** When the popover opens */
2062
2125
  'onOpen'?: (event: CustomEvent) => void;
2063
- /** When the popover closes */
2126
+ /** 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. */
2064
2127
  'onClose'?: (event: CustomEvent) => void;
2065
2128
  };
2066
2129
 
@@ -2163,16 +2226,24 @@ declare module 'vue' {
2163
2226
  'decorative'?: NLDDRadioButton['decorative'];
2164
2227
  /** Disabled state */
2165
2228
  'disabled'?: NLDDRadioButton['disabled'];
2229
+ /** Takes the control out of the tab order (tabindex="-1"), for a control owned by a roving container (a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
2230
+ 'no-tab'?: NLDDRadioButton['noTab'];
2231
+ /** Takes the control out of the tab order (tabindex="-1"), for a control owned by a roving container (a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
2232
+ 'noTab'?: NLDDRadioButton['noTab'];
2166
2233
  /** Required state */
2167
2234
  'required'?: NLDDRadioButton['required'];
2168
2235
  /** Radio group name for form submission; ties the buttons of one group together */
2169
2236
  'name'?: NLDDRadioButton['name'];
2170
2237
  /** Value submitted with the form when this radio button is checked */
2171
2238
  'value'?: NLDDRadioButton['value'];
2172
- /** Accessible label forwarded as aria-label to the native input. Note: aria-labelledby is not supported as IDREF resolution cannot cross shadow DOM boundaries. */
2239
+ /** Accessible label forwarded as aria-label to the native input. */
2173
2240
  'accessible-label'?: NLDDRadioButton['accessibleLabel'];
2174
- /** Accessible label forwarded as aria-label to the native input. Note: aria-labelledby is not supported as IDREF resolution cannot cross shadow DOM boundaries. */
2241
+ /** Accessible label forwarded as aria-label to the native input. */
2175
2242
  'accessibleLabel'?: NLDDRadioButton['accessibleLabel'];
2243
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. Note: aria-labelledby is not supported as IDREF resolution cannot cross shadow DOM boundaries. */
2244
+ 'invalid'?: NLDDRadioButton['invalid'];
2245
+ /** Set by nldd-form-field. A consumer never writes this. */
2246
+ 'describedByElements'?: NLDDRadioButton['describedByElements'];
2176
2247
  'internals'?: NLDDRadioButton['internals'];
2177
2248
  /** When checked state changes; detail: { checked: boolean, value: string, name: string } */
2178
2249
  'onChange'?: (event: CustomEvent) => void;
@@ -2191,6 +2262,10 @@ declare module 'vue' {
2191
2262
  'required'?: NLDDRadioButtonField['required'];
2192
2263
  /** Label text for the radio button */
2193
2264
  'label'?: NLDDRadioButtonField['label'];
2265
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
2266
+ 'invalid'?: NLDDRadioButtonField['invalid'];
2267
+ /** Set by nldd-form-field. A consumer never writes this. */
2268
+ 'describedByElements'?: NLDDRadioButtonField['describedByElements'];
2194
2269
  'internals'?: NLDDRadioButtonField['internals'];
2195
2270
  /** When checked state changes; detail: { checked: boolean, value: string } */
2196
2271
  'onChange'?: (event: CustomEvent) => void;
@@ -2211,6 +2286,8 @@ declare module 'vue' {
2211
2286
  'accessible-labeled-by'?: NLDDRadioButtonGroup['accessibleLabeledBy'];
2212
2287
  /** Id of an external label element, set as aria-labelledby on the group */
2213
2288
  'accessibleLabeledBy'?: NLDDRadioButtonGroup['accessibleLabeledBy'];
2289
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
2290
+ 'invalid'?: NLDDRadioButtonGroup['invalid'];
2214
2291
  /** Bubbles up from the checked field; detail: { checked: boolean, value: string } */
2215
2292
  'onChange'?: (event: CustomEvent) => void;
2216
2293
  };
@@ -2220,9 +2297,9 @@ declare module 'vue' {
2220
2297
  'spacing'?: NLDDRichText['spacing'];
2221
2298
  /** Centers the main column inside the container; without it, content is left-aligned */
2222
2299
  'centered'?: NLDDRichText['centered'];
2223
- /** Opt-in automatische woordafbreking voor doorlopende tekst (p, li, dd). Vereist een correcte `lang` op de pagina (bijv. `lang="nl"` op `<html>`): zonder taalinfo breekt de browser niet af. Een `overflow-wrap: break-word`-vangnet op p/li staat altijd aan, los van dit attribuut, zodat lange URLs en samenstellingen ook zonder woordenboek netjes breken in plaats van te overlopen. */
2300
+ /** 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. */
2224
2301
  'hyphens'?: NLDDRichText['hyphens'];
2225
- /** 'inherit' laat alle tekst de kleur van de ondergrond volgen (voor gekleurde vlakken zoals de filled-categories). Links blijven onderstreept als affordance; secundaire tekst (figcaption) krijgt dezelfde kleur op verlaagde dekking. Bekende v1-gaten: inline code, mark, tabellen en hr behouden hun eigen surfaces. Leeg = standaard contentkleuren. */
2302
+ /** 'inherit' lets all text follow the color of the surface (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. Empty = the default content colors. */
2226
2303
  'color'?: NLDDRichText['color'];
2227
2304
  /** Override translation keys; unset keys fall back to Dutch */
2228
2305
  'translations'?: NLDDRichText['translations'];
@@ -2255,6 +2332,18 @@ declare module 'vue' {
2255
2332
  'noSpellcheck'?: NLDDSearchField['noSpellcheck'];
2256
2333
  /** Optional fixed width (any CSS length, e.g. "240px"). Default: stretches to fill container. */
2257
2334
  'width'?: NLDDSearchField['width'];
2335
+ /** Required state */
2336
+ 'required'?: NLDDSearchField['required'];
2337
+ /** Regular expression the value has to match, as the native `pattern`. */
2338
+ 'pattern'?: NLDDSearchField['pattern'];
2339
+ /** Fewest characters the value may have. */
2340
+ 'minlength'?: NLDDSearchField['minlength'];
2341
+ /** Most characters the value may have. */
2342
+ 'maxlength'?: NLDDSearchField['maxlength'];
2343
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
2344
+ 'invalid'?: NLDDSearchField['invalid'];
2345
+ /** Set by nldd-form-field. A consumer never writes this. */
2346
+ 'describedByElements'?: NLDDSearchField['describedByElements'];
2258
2347
  'internals'?: NLDDSearchField['internals'];
2259
2348
  /** When the input value changes; detail: { value: string } */
2260
2349
  'onInput'?: (event: CustomEvent) => void;
@@ -2265,6 +2354,10 @@ declare module 'vue' {
2265
2354
  };
2266
2355
 
2267
2356
  type NLDDSegmentedControlProps = {
2357
+ /** Marks the group as required. Enforced in radio mode; in checkbox mode only announced. */
2358
+ 'required'?: NLDDSegmentedControl['required'];
2359
+ /** Marks the group as invalid. Announced with aria-invalid; nothing is drawn for it. */
2360
+ 'invalid'?: NLDDSegmentedControl['invalid'];
2268
2361
  /** Selected value for radio type */
2269
2362
  'value'?: NLDDSegmentedControl['value'];
2270
2363
  /** Control size: 'sm' | 'md' | 'lg' (default: 'md') */
@@ -2295,6 +2388,8 @@ declare module 'vue' {
2295
2388
  };
2296
2389
 
2297
2390
  type NLDDSegmentedControlItemProps = {
2391
+ /** Required state. Set by nldd-segmented-control. */
2392
+ 'required'?: NLDDSegmentedControlItem['required'];
2298
2393
  /** Value for this item */
2299
2394
  'value'?: NLDDSegmentedControlItem['value'];
2300
2395
  /** Whether this item is selected (set by parent) */
@@ -2336,7 +2431,7 @@ declare module 'vue' {
2336
2431
  'width'?: NLDDSheet['width'];
2337
2432
  /** Fired when the sheet is opened */
2338
2433
  'onOpen'?: (event: CustomEvent) => void;
2339
- /** Fired when the sheet is fully closed */
2434
+ /** 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. */
2340
2435
  'onClose'?: (event: CustomEvent) => void;
2341
2436
  };
2342
2437
 
@@ -2458,9 +2553,9 @@ declare module 'vue' {
2458
2553
  };
2459
2554
 
2460
2555
  type NLDDSkipLinkProps = {
2461
- /** Tekst van de skip-link. Fallback naar i18n default. */
2556
+ /** Text of the skip link. Falls back to the i18n default. */
2462
2557
  'text'?: NLDDSkipLink['text'];
2463
- /** Optioneel extern doel-ID. Zonder href springt naar eind van eigen content. */
2558
+ /** Optional external target id. Without href it jumps to the end of its own content. */
2464
2559
  'href'?: NLDDSkipLink['href'];
2465
2560
  'translations'?: NLDDSkipLink['translations'];
2466
2561
  };
@@ -2544,17 +2639,17 @@ declare module 'vue' {
2544
2639
  };
2545
2640
 
2546
2641
  type NLDDStatusBarProps = {
2547
- /** Kleur van de balk (standaard: 'neutral') */
2642
+ /** Color of the bar (default: 'neutral') */
2548
2643
  'variant'?: NLDDStatusBar['variant'];
2549
- /** De statustekst (één regel; afgekapt met ellipsis) */
2644
+ /** The status text (one line; truncated with an ellipsis) */
2550
2645
  'text'?: NLDDStatusBar['text'];
2551
- /** Maakt de hele balk een link (rendert een <a>) */
2646
+ /** Makes the whole bar a link (renders an <a>) */
2552
2647
  'href'?: NLDDStatusBar['href'];
2553
- /** Link target (bijv. '_blank'); alleen gebruikt bij href */
2648
+ /** Link target (e.g. '_blank'); only used with href */
2554
2649
  'target'?: NLDDStatusBar['target'];
2555
- /** Link rel; standaard 'noopener noreferrer' bij target='_blank' */
2650
+ /** Link rel; defaults to 'noopener noreferrer' with target='_blank' */
2556
2651
  'rel'?: NLDDStatusBar['rel'];
2557
- /** Maakt de hele balk een button; genegeerd als href is gezet */
2652
+ /** Makes the whole bar a button; ignored when href is set */
2558
2653
  'button'?: NLDDStatusBar['button'];
2559
2654
  };
2560
2655
 
@@ -2609,6 +2704,10 @@ declare module 'vue' {
2609
2704
  'accessibleLabel'?: NLDDStepper['accessibleLabel'];
2610
2705
  /** Translations; unspecified keys fall back to Dutch */
2611
2706
  'translations'?: NLDDStepper['translations'];
2707
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
2708
+ 'invalid'?: NLDDStepper['invalid'];
2709
+ /** Set by nldd-form-field. A consumer never writes this. */
2710
+ 'describedByElements'?: NLDDStepper['describedByElements'];
2612
2711
  'internals'?: NLDDStepper['internals'];
2613
2712
  /** When the value changes; detail: { value: number } */
2614
2713
  'onChange'?: (event: CustomEvent) => void;
@@ -2621,6 +2720,10 @@ declare module 'vue' {
2621
2720
  'checked'?: NLDDSwitch['checked'];
2622
2721
  /** Disabled state */
2623
2722
  'disabled'?: NLDDSwitch['disabled'];
2723
+ /** Takes the control out of the tab order (tabindex="-1"), for a control owned by a roving container (a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
2724
+ 'no-tab'?: NLDDSwitch['noTab'];
2725
+ /** Takes the control out of the tab order (tabindex="-1"), for a control owned by a roving container (a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
2726
+ 'noTab'?: NLDDSwitch['noTab'];
2624
2727
  /** Switch size: 'xs' | 'sm' (default: 'sm') */
2625
2728
  'size'?: NLDDSwitch['size'];
2626
2729
  /** Accessible label forwarded as aria-label to the native input. Required when using nldd-switch without nldd-switch-field. */
@@ -2629,6 +2732,12 @@ declare module 'vue' {
2629
2732
  'accessibleLabel'?: NLDDSwitch['accessibleLabel'];
2630
2733
  /** Value submitted with the form when the switch is on (default: 'on') */
2631
2734
  'value'?: NLDDSwitch['value'];
2735
+ /** Required state */
2736
+ 'required'?: NLDDSwitch['required'];
2737
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
2738
+ 'invalid'?: NLDDSwitch['invalid'];
2739
+ /** Set by nldd-form-field. A consumer never writes this. */
2740
+ 'describedByElements'?: NLDDSwitch['describedByElements'];
2632
2741
  'internals'?: NLDDSwitch['internals'];
2633
2742
  /** When the switch state changes; detail: { checked: boolean, value: string } */
2634
2743
  'onChange'?: (event: CustomEvent) => void;
@@ -2645,6 +2754,12 @@ declare module 'vue' {
2645
2754
  'name'?: NLDDSwitchField['name'];
2646
2755
  /** Label text for the switch */
2647
2756
  'label'?: NLDDSwitchField['label'];
2757
+ /** Required state */
2758
+ 'required'?: NLDDSwitchField['required'];
2759
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
2760
+ 'invalid'?: NLDDSwitchField['invalid'];
2761
+ /** Set by nldd-form-field. A consumer never writes this. */
2762
+ 'describedByElements'?: NLDDSwitchField['describedByElements'];
2648
2763
  /** When checked state changes; detail: { checked: boolean, value: string } */
2649
2764
  'onChange'?: (event: CustomEvent) => void;
2650
2765
  };
@@ -2669,8 +2784,8 @@ declare module 'vue' {
2669
2784
  };
2670
2785
 
2671
2786
  type NLDDTabBarItemProps = {
2672
- /** Selected state (managed by nldd-tab-bar) */
2673
- 'selected'?: NLDDTabBarItem['selected'];
2787
+ /** The item you are on. A tab bar switching content manages it itself and renders it as `aria-selected`; a `navigation` bar leaves it to the consumer, since it follows the route, and renders it as `aria-current="page"`. Unlike a list row, which separates `current` from `selected` because it can be both at once, a tab bar has exactly one active item. */
2788
+ 'current'?: NLDDTabBarItem['current'];
2674
2789
  /** Optional link URL; renders an anchor instead of a button */
2675
2790
  'href'?: NLDDTabBarItem['href'];
2676
2791
  /** Set by nldd-tab-bar. Not part of the public API. */
@@ -2708,14 +2823,6 @@ declare module 'vue' {
2708
2823
  'accessibleLabel'?: NLDDTable['accessibleLabel'];
2709
2824
  /** 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. */
2710
2825
  'selectable'?: NLDDTable['selectable'];
2711
- /** Text for the default empty-state dialog (falls back to the Dutch i18n default). Ignored when `[slot=empty]` is filled */
2712
- 'empty-text'?: NLDDTable['emptyText'];
2713
- /** Text for the default empty-state dialog (falls back to the Dutch i18n default). Ignored when `[slot=empty]` is filled */
2714
- 'emptyText'?: NLDDTable['emptyText'];
2715
- /** Supporting text for the default empty-state dialog. Ignored when `[slot=empty]` is filled */
2716
- 'empty-supporting-text'?: NLDDTable['emptySupportingText'];
2717
- /** Supporting text for the default empty-state dialog. Ignored when `[slot=empty]` is filled */
2718
- 'emptySupportingText'?: NLDDTable['emptySupportingText'];
2719
2826
  /** Override translation keys; unset keys fall back to Dutch */
2720
2827
  'translations'?: NLDDTable['translations'];
2721
2828
  };
@@ -2742,6 +2849,23 @@ declare module 'vue' {
2742
2849
  'accessibleLabel'?: NLDDTag['accessibleLabel'];
2743
2850
  };
2744
2851
 
2852
+ type NLDDTextProps = {
2853
+ /** Text size on the body scale: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' (default: 'md') */
2854
+ 'size'?: NLDDText['size'];
2855
+ /** Font weight: 'regular' | 'medium' | 'bold' (default: 'regular'). With 'bold' a slotted `<strong>` no longer stands out: there is nothing bolder in the scale. */
2856
+ 'weight'?: NLDDText['weight'];
2857
+ /** Line height: 'flat' | 'tight' | 'snug' | 'loose' (default: 'snug') */
2858
+ 'line-height'?: NLDDText['lineHeight'];
2859
+ /** Line height: 'flat' | 'tight' | 'snug' | 'loose' (default: 'snug') */
2860
+ 'lineHeight'?: NLDDText['lineHeight'];
2861
+ /** Text color: 'default' | 'secondary' | 'accent' | 'success' | 'warning' | 'critical' | 'inherit' (default: 'default'). 'default' and 'secondary' follow the surrounding content channel; 'inherit' takes the color it inherits, for text on a painted surface. */
2862
+ 'color'?: NLDDText['color'];
2863
+ /** Alignment of the text within the block: 'left' | 'center' | 'right' (default: 'left'). Aligns the words; `horizontal-alignment` on nldd-container moves the box. */
2864
+ 'horizontal-alignment'?: NLDDText['horizontalAlignment'];
2865
+ /** Alignment of the text within the block: 'left' | 'center' | 'right' (default: 'left'). Aligns the words; `horizontal-alignment` on nldd-container moves the box. */
2866
+ 'horizontalAlignment'?: NLDDText['horizontalAlignment'];
2867
+ };
2868
+
2745
2869
  type NLDDTextCellProps = {
2746
2870
  /** Cell size: 'sm' | 'md' (default: 'md') */
2747
2871
  'size'?: NLDDTextCell['size'];
@@ -2822,10 +2946,14 @@ declare module 'vue' {
2822
2946
  'annotatable'?: NLDDTextEditor['annotatable'];
2823
2947
  /** Override the editor's assistive-tech strings (the open-in-new-tab link badge and the annotation count badge). Unset keys fall back to Dutch. */
2824
2948
  'translations'?: NLDDTextEditor['translations'];
2949
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
2950
+ 'invalid'?: NLDDTextEditor['invalid'];
2825
2951
  /** Consumer-supplied */
2826
2952
  'mentionSource'?: NLDDTextEditor['mentionSource'];
2827
2953
  /** Consumer-supplied annotations (W3C-style overlay). Property only (set via JS). Render only when `annotatable` is on. The text stays clean; these render as a light tint and a count badge, anchored by offset and mapped through edits. IMPORTANT: assign a NEW array to apply changes. Lit dirty-checks this property by identity, so mutating the existing array in place (`editor.annotations.push(next)`, `editor.annotations[0].end = 9`, …) does NOT trigger a re-render. Always replace it: `editor.annotations = [...editor.annotations, next]`. */
2828
2954
  'annotations'?: NLDDTextEditor['annotations'];
2955
+ /** Set by nldd-form-field. A consumer never writes this. */
2956
+ 'describedByElements'?: NLDDTextEditor['describedByElements'];
2829
2957
  'internals'?: NLDDTextEditor['internals'];
2830
2958
  /** When the content changes (detail: { value }) */
2831
2959
  'onInput'?: (event: CustomEvent) => void;
@@ -2858,6 +2986,12 @@ declare module 'vue' {
2858
2986
  'disabled'?: NLDDTextField['disabled'];
2859
2987
  /** Input type: 'text' | 'email' | 'tel' | 'url' */
2860
2988
  'type'?: NLDDTextField['type'];
2989
+ /** Which virtual keyboard a phone or tablet raises, forwarded as `inputmode`: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url'. It changes nothing about what the field accepts, and nothing at all on a desktop. Reach for it where the value is digits but not a quantity you would step (a house number, a postcode, a rack unit): 'numeric'. The keyboard for 'tel', 'email' and 'url' already follows from `type`. */
2990
+ 'keyboard'?: NLDDTextField['keyboard'];
2991
+ /** What the Enter key of the virtual keyboard says, forwarded as `enterkeyhint`: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send'. It only labels the key; what Enter does is still up to the form, and on a desktop it changes nothing. */
2992
+ 'enter-key'?: NLDDTextField['enterKey'];
2993
+ /** What the Enter key of the virtual keyboard says, forwarded as `enterkeyhint`: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send'. It only labels the key; what Enter does is still up to the form, and on a desktop it changes nothing. */
2994
+ 'enterKey'?: NLDDTextField['enterKey'];
2861
2995
  /** Input name for form submission */
2862
2996
  'name'?: NLDDTextField['name'];
2863
2997
  /** Readonly state */
@@ -2870,16 +3004,20 @@ declare module 'vue' {
2870
3004
  'accessible-label'?: NLDDTextField['accessibleLabel'];
2871
3005
  /** Accessible label forwarded to the inner input. Set automatically by nldd-form-field. */
2872
3006
  'accessibleLabel'?: NLDDTextField['accessibleLabel'];
2873
- /** Ids for aria-describedby on the inner input. Set automatically by nldd-form-field. */
2874
- 'error-message-ids'?: NLDDTextField['errorMessageIds'];
2875
- /** Ids for aria-describedby on the inner input. Set automatically by nldd-form-field. */
2876
- 'errorMessageIds'?: NLDDTextField['errorMessageIds'];
2877
3007
  /** Disables browser spellchecking on the inner input */
2878
3008
  'no-spellcheck'?: NLDDTextField['noSpellcheck'];
2879
3009
  /** Disables browser spellchecking on the inner input */
2880
3010
  'noSpellcheck'?: NLDDTextField['noSpellcheck'];
2881
3011
  /** Optional fixed width (any CSS length, e.g. "240px"). Default: stretches to fill container. */
2882
3012
  'width'?: NLDDTextField['width'];
3013
+ /** Regular expression the value has to match, as the native `pattern`. */
3014
+ 'pattern'?: NLDDTextField['pattern'];
3015
+ /** Fewest characters the value may have. */
3016
+ 'minlength'?: NLDDTextField['minlength'];
3017
+ /** Most characters the value may have. */
3018
+ 'maxlength'?: NLDDTextField['maxlength'];
3019
+ /** Set by nldd-form-field. A consumer never writes this. */
3020
+ 'describedByElements'?: NLDDTextField['describedByElements'];
2883
3021
  'internals'?: NLDDTextField['internals'];
2884
3022
  /** When input value changes */
2885
3023
  'onInput'?: (event: CustomEvent) => void;
@@ -2888,95 +3026,99 @@ declare module 'vue' {
2888
3026
  };
2889
3027
 
2890
3028
  type NLDDTimeFieldProps = {
2891
- /** 'md' (standaard) | 'sm'. Wordt automatisch gezet door nldd-form-field. */
3029
+ /** 'md' (default) | 'sm'. Set automatically by nldd-form-field. */
2892
3030
  'size'?: NLDDTimeField['size'];
2893
- /** De tijd als `HH:mm` (24-uurs). Leeg wanneer er geen geldige tijd staat. */
3031
+ /** The time as `HH:mm` (24-hour). Empty when there is no valid time. */
2894
3032
  'value'?: NLDDTimeField['value'];
2895
- /** Vroegst toegestane tijd als `HH:mm`. Is tevens de basis waarvandaan `step` telt. */
3033
+ /** Earliest allowed time as `HH:mm`. Also the base that `step` counts from. */
2896
3034
  'min'?: NLDDTimeField['min'];
2897
- /** Laatst toegestane tijd als `HH:mm`. */
3035
+ /** Latest allowed time as `HH:mm`. */
2898
3036
  'max'?: NLDDTimeField['max'];
2899
- /** Minutenstap (standaard 1). Bepaalt welke tijden geldig zijn, waarop wordt afgerond en hoe ver de pijltjestoetsen verspringen. */
3037
+ /** Step in minutes (default 1). Decides which times are valid, what rounding snaps to, and how far the arrow keys jump. */
2900
3038
  'step'?: NLDDTimeField['step'];
2901
- /** Verbergt de picker-knop. Standaard staat die knop er wel. */
3039
+ /** Hides the picker button. It is shown by default. */
2902
3040
  'no-picker'?: NLDDTimeField['noPicker'];
2903
- /** Verbergt de picker-knop. Standaard staat die knop er wel. */
3041
+ /** Hides the picker button. It is shown by default. */
2904
3042
  'noPicker'?: NLDDTimeField['noPicker'];
2905
- /** Zet het id op de interne input. Wordt automatisch gezet door nldd-form-field. */
3043
+ /** Sets the id on the internal input. Set automatically by nldd-form-field. */
2906
3044
  'input-id'?: NLDDTimeField['inputId'];
2907
- /** Zet het id op de interne input. Wordt automatisch gezet door nldd-form-field. */
3045
+ /** Sets the id on the internal input. Set automatically by nldd-form-field. */
2908
3046
  'inputId'?: NLDDTimeField['inputId'];
2909
- /** Placeholdertekst. Zet hier geen formaat in; gebruik daarvoor de supporting-label van nldd-form-field. */
3047
+ /** Placeholder text. Do not put a format here; use the supporting label of nldd-form-field for that. */
2910
3048
  'placeholder'?: NLDDTimeField['placeholder'];
2911
- /** Markeert het veld als ongeldig. */
3049
+ /** Marks the field as invalid. */
2912
3050
  'invalid'?: NLDDTimeField['invalid'];
2913
- /** Markeert het veld als geldig. */
3051
+ /** Marks the field as valid. */
2914
3052
  'valid'?: NLDDTimeField['valid'];
2915
- /** Uitgeschakelde staat. */
3053
+ /** Disabled state. */
2916
3054
  'disabled'?: NLDDTimeField['disabled'];
2917
- /** Alleen-lezen staat. */
3055
+ /** Read-only state. */
2918
3056
  'readonly'?: NLDDTimeField['readonly'];
2919
- /** Verplichte staat. */
3057
+ /** Required state. */
2920
3058
  'required'?: NLDDTimeField['required'];
2921
- /** Naam voor formulierverzending. */
3059
+ /** Name for form submission. */
2922
3060
  'name'?: NLDDTimeField['name'];
2923
- /** Autocomplete-hint. */
3061
+ /** Autocomplete hint. */
2924
3062
  'autocomplete'?: NLDDTimeField['autocomplete'];
2925
- /** Toegankelijk label voor de interne input. Wordt automatisch gezet door nldd-form-field. */
3063
+ /** Accessible label for the internal input. Set automatically by nldd-form-field. */
2926
3064
  'accessible-label'?: NLDDTimeField['accessibleLabel'];
2927
- /** Toegankelijk label voor de interne input. Wordt automatisch gezet door nldd-form-field. */
3065
+ /** Accessible label for the internal input. Set automatically by nldd-form-field. */
2928
3066
  'accessibleLabel'?: NLDDTimeField['accessibleLabel'];
2929
- /** Ids voor aria-describedby. Wordt automatisch gezet door nldd-form-field. */
2930
- 'error-message-ids'?: NLDDTimeField['errorMessageIds'];
2931
- /** Ids voor aria-describedby. Wordt automatisch gezet door nldd-form-field. */
2932
- 'errorMessageIds'?: NLDDTimeField['errorMessageIds'];
2933
- /** Breedte. Standaard precies breed genoeg voor een tijd plus het validatie-icoon; 'full' vult de container, of geef een eigen CSS-lengte. */
3067
+ /** Width. By default exactly wide enough for a time plus the validation icon; 'full' fills the container; 'fit-content' drops the room for the validation icon and grows again as soon as the field turns valid or invalid; or pass your own CSS length. */
2934
3068
  'width'?: NLDDTimeField['width'];
2935
- /** Vertalingen; niet opgegeven sleutels vallen terug op het Nederlands. */
3069
+ /** Translations; unspecified keys fall back to Dutch. */
2936
3070
  'translations'?: NLDDTimeField['translations'];
3071
+ /** Set by nldd-form-field. A consumer never writes this. */
3072
+ 'describedByElements'?: NLDDTimeField['describedByElements'];
2937
3073
  'internals'?: NLDDTimeField['internals'];
2938
- /** Bij elke wijziging. detail: { value } met `HH:mm`, of '' zolang er geen geldige tijd staat. */
3074
+ /** On every change. detail: { value } with `HH:mm`, or '' while there is no valid time. */
2939
3075
  'onInput'?: (event: CustomEvent) => void;
2940
- /** Wanneer de waarde is vastgelegd: bij het verlaten van het veld, en bij het sluiten van de picker op een manier die de keuze houdt. detail: { value } met `HH:mm`, of ''. */
3076
+ /** When the value is committed: on leaving the field, and on closing the picker in a way that keeps the choice. detail: { value } with `HH:mm`, or ''. */
2941
3077
  'onChange'?: (event: CustomEvent) => void;
2942
3078
  };
2943
3079
 
2944
3080
  type NLDDTimePickerProps = {
2945
- /** De gekozen tijd als `HH:mm` (24-uurs). */
3081
+ /** The chosen time as `HH:mm` (24-hour). */
2946
3082
  'value'?: NLDDTimePicker['value'];
2947
- /** Vroegst toegestane tijd als `HH:mm`. Is tevens de basis waarvandaan `step` telt. */
3083
+ /** Earliest allowed time as `HH:mm`. Also the base that `step` counts from. */
2948
3084
  'min'?: NLDDTimePicker['min'];
2949
- /** Laatst toegestane tijd als `HH:mm`. */
3085
+ /** Latest allowed time as `HH:mm`. */
2950
3086
  'max'?: NLDDTimePicker['max'];
2951
- /** Minutenstap (standaard 1). Bepaalt welke minuten in de kolom staan. */
3087
+ /** Step in minutes (default 1). Decides which minutes are in the column. */
2952
3088
  'step'?: NLDDTimePicker['step'];
2953
- /** Hoogte van de kolommen in rijen (standaard 7, minimaal 3). De gekozen waarde staat altijd in het midden, dus een oneven aantal toont hele rijen en een even aantal kapt boven en onder een halve rij af. */
3089
+ /** Height of the columns in rows (default 7, minimum 3). The chosen value always sits in the middle, so an odd number shows whole rows and an even number cuts off half a row at the top and bottom. */
2954
3090
  'rows'?: NLDDTimePicker['rows'];
2955
- /** Breedte: `full` vult de container, of geef een eigen CSS-lengte. */
3091
+ /** Width: `full` fills the container, or pass your own CSS length. */
2956
3092
  'width'?: NLDDTimePicker['width'];
2957
- /** Toegankelijke naam van de picker. */
3093
+ /** Accessible name of the picker. */
2958
3094
  'accessible-label'?: NLDDTimePicker['accessibleLabel'];
2959
- /** Toegankelijke naam van de picker. */
3095
+ /** Accessible name of the picker. */
2960
3096
  'accessibleLabel'?: NLDDTimePicker['accessibleLabel'];
2961
- /** Vertalingen; niet opgegeven sleutels vallen terug op het Nederlands. */
3097
+ /** Translations; unspecified keys fall back to Dutch. */
2962
3098
  'translations'?: NLDDTimePicker['translations'];
2963
- /** Bij elke wijziging: scrollen, de pijltjestoetsen. detail: { value } met `HH:mm`. */
3099
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
3100
+ 'invalid'?: NLDDTimePicker['invalid'];
3101
+ /** Set by nldd-form-field. A consumer never writes this. */
3102
+ 'describedByElements'?: NLDDTimePicker['describedByElements'];
3103
+ /** On every change: scrolling, the arrow keys. detail: { value } with `HH:mm`. */
2964
3104
  'onInput'?: (event: CustomEvent) => void;
2965
- /** Wanneer de keuze is bevestigd: een klik op een waarde of op de selectie, of Enter. detail: { value } met `HH:mm`. Scrollen geeft alleen `input`, want anders zou een veld dat de picker in een popover toont al vastleggen zodra je stopt met scrollen. */
3105
+ /** When the choice is confirmed: a click on a value or on the selection, or Enter. detail: { value } with `HH:mm`. Scrolling only fires `input`, because otherwise a field showing the picker in a popover would commit as soon as you stopped scrolling. */
2966
3106
  'onChange'?: (event: CustomEvent) => void;
2967
3107
  };
2968
3108
 
2969
3109
  type NLDDTimelineTrackCellProps = {
2970
- /** Status of this step (default 'past'); the same values as `nldd-step-indicator-item`. `none` draws the line only, without a dot */
3110
+ /** 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 */
2971
3111
  'status'?: NLDDTimelineTrackCell['status'];
2972
- /** What this row is: a `dot` (default) on a timeline of events, a 16px dot, or a `step` in a list of steps, a 24px dot with room for a number or an icon */
3112
+ /** 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 */
3113
+ 'size'?: NLDDTimelineTrackCell['size'];
3114
+ /** 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 */
2973
3115
  'variant'?: NLDDTimelineTrackCell['variant'];
2974
- /** This row belongs under the previous one: a smaller dot in the same lane, so the track runs straight on and nothing indents. The dot stays empty (a number or an icon would not fit, and would make the row a step of its own); carry the hierarchy in the row itself instead, with an `nldd-text-cell` rather than an `nldd-title-cell` for example */
2975
- 'minor'?: NLDDTimelineTrackCell['minor'];
2976
3116
  /** 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 */
2977
3117
  'direction'?: NLDDTimelineTrackCell['direction'];
2978
- /** 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 */
3118
+ /** 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 */
2979
3119
  'position'?: NLDDTimelineTrackCell['position'];
3120
+ /** Which halves of the track you have covered, when `status` and `direction` get it wrong (default 'auto', which is what those two say). The halves you name are drawn as covered and the other one as still ahead, so `none` covers neither. Which halves are drawn at all stays with `position`, except that naming a half draws it: `line="both"` on a `first` row draws one above too. A row that opens a group of its own is the case for `both`, since the going carries on below it. A `variant="none"` row has one line rather than two halves, and no point where a fill could change over, so there the status colors the whole of it and `line` overrules the whole of it. On a `current` row that leans the way the timeline runs: what belongs to a point usually comes after it, so going `down` the stretch reads as still ahead and going `up` as behind you */
3121
+ 'line'?: NLDDTimelineTrackCell['line'];
2980
3122
  /** Number or short text in the dot */
2981
3123
  'text'?: NLDDTimelineTrackCell['text'];
2982
3124
  /** Icon name in the dot; wins over `text` */
@@ -2985,14 +3127,14 @@ declare module 'vue' {
2985
3127
  'hideBelow'?: NLDDTimelineTrackCell['hideBelow'];
2986
3128
  'hide-above'?: NLDDTimelineTrackCell['hideAbove'];
2987
3129
  'hideAbove'?: NLDDTimelineTrackCell['hideAbove'];
2988
- /** Only a step marker has room to read a number in, and a minor row is smaller still -- besides, a number would claim it is a step of its own. */
3130
+ /** Only a whole dot in a wide lane has room to read a number in: a minor one is smaller still, and would claim to be a step of its own. */
2989
3131
  'showsContent'?: NLDDTimelineTrackCell['showsContent'];
2990
3132
  };
2991
3133
 
2992
3134
  type NLDDTitleProps = {
2993
3135
  /** Visual size of the title: 1–6 (default: 3) */
2994
3136
  'size'?: NLDDTitle['size'];
2995
- /** 'inherit' lets the title take the text color of the ondergrond volgen (voor gekleurde vlakken zoals de filled-categories); overline en subtitle krijgen dezelfde kleur op verlaagde dekking. Leeg = standaard contentkleuren. */
3137
+ /** 'inherit' lets the title follow the text color of the surface (for colored areas such as the filled categories); overline and subtitle get the same color at a lowered opacity. Empty = the default content colors. */
2996
3138
  'color'?: NLDDTitle['color'];
2997
3139
  };
2998
3140
 
@@ -3048,6 +3190,8 @@ declare module 'vue' {
3048
3190
  };
3049
3191
 
3050
3192
  type NLDDToggleButtonProps = {
3193
+ /** Required state. Set by nldd-toggle-button-group. */
3194
+ 'required'?: NLDDToggleButton['required'];
3051
3195
  /** Underlying element (default: 'button') */
3052
3196
  'type'?: NLDDToggleButton['type'];
3053
3197
  /** Button size (default: 'md') */
@@ -3056,6 +3200,10 @@ declare module 'vue' {
3056
3200
  'selected'?: NLDDToggleButton['selected'];
3057
3201
  /** Disabled state */
3058
3202
  'disabled'?: NLDDToggleButton['disabled'];
3203
+ /** Takes the control out of the tab order (tabindex="-1"), for a control owned by a roving container (a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
3204
+ 'no-tab'?: NLDDToggleButton['noTab'];
3205
+ /** Takes the control out of the tab order (tabindex="-1"), for a control owned by a roving container (a row of an nldd-list, where the arrow keys move between rows) that manages focus itself. Still mouse- and script-focusable. */
3206
+ 'noTab'?: NLDDToggleButton['noTab'];
3059
3207
  /** Value for form submission (checkbox/radio) */
3060
3208
  'value'?: NLDDToggleButton['value'];
3061
3209
  /** Name for form submission (checkbox/radio) */
@@ -3070,12 +3218,18 @@ declare module 'vue' {
3070
3218
  'accessible-label'?: NLDDToggleButton['accessibleLabel'];
3071
3219
  /** Accessible label; required for icon-only usage */
3072
3220
  'accessibleLabel'?: NLDDToggleButton['accessibleLabel'];
3221
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
3222
+ 'invalid'?: NLDDToggleButton['invalid'];
3223
+ /** Set by nldd-form-field. A consumer never writes this. */
3224
+ 'describedByElements'?: NLDDToggleButton['describedByElements'];
3073
3225
  'internals'?: NLDDToggleButton['internals'];
3074
3226
  /** When selection changes; detail: { selected: boolean, value: string } */
3075
3227
  'onChange'?: (event: CustomEvent) => void;
3076
3228
  };
3077
3229
 
3078
3230
  type NLDDToggleButtonGroupProps = {
3231
+ /** Marks the group as required. Enforced in radio mode; in checkbox mode only announced. */
3232
+ 'required'?: NLDDToggleButtonGroup['required'];
3079
3233
  /** Selection mode (default: 'checkbox') */
3080
3234
  'type'?: NLDDToggleButtonGroup['type'];
3081
3235
  /** Forwarded to all buttons */
@@ -3092,6 +3246,8 @@ declare module 'vue' {
3092
3246
  'accessible-labeled-by'?: NLDDToggleButtonGroup['accessibleLabeledBy'];
3093
3247
  /** ID of an external label element (aria-labelledby) */
3094
3248
  'accessibleLabeledBy'?: NLDDToggleButtonGroup['accessibleLabeledBy'];
3249
+ /** Marks the control as invalid. Announced with aria-invalid; nothing is drawn for it. */
3250
+ 'invalid'?: NLDDToggleButtonGroup['invalid'];
3095
3251
  /** Bubbles up from the changed button; detail: { selected: boolean, value: string } */
3096
3252
  'onChange'?: (event: CustomEvent) => void;
3097
3253
  };
@@ -3158,6 +3314,8 @@ declare module 'vue' {
3158
3314
  'name'?: NLDDTokenField['name'];
3159
3315
  /** Override translation keys; unset keys fall back to Dutch */
3160
3316
  'translations'?: NLDDTokenField['translations'];
3317
+ /** Set by nldd-form-field. A consumer never writes this. */
3318
+ 'describedByElements'?: NLDDTokenField['describedByElements'];
3161
3319
  'internals'?: NLDDTokenField['internals'];
3162
3320
  /** When the selected values change; detail: { values: string[] } */
3163
3321
  'onChange'?: (event: CustomEvent) => void;
@@ -3227,7 +3385,7 @@ declare module 'vue' {
3227
3385
  type NLDDTooltipProps = {
3228
3386
  /** Tooltip text */
3229
3387
  'text'?: NLDDTooltip['text'];
3230
- /** Forces the tooltip visible, whatever hover or focus does. Use it for programmatic feedback ("Copied", for instance). Reset it to false to restore the hover behaviour. */
3388
+ /** Forces the tooltip visible, whatever hover or focus does. Use it for programmatic feedback ("Copied", for instance). Reset it to false to restore the hover behavior. */
3231
3389
  'open'?: NLDDTooltip['open'];
3232
3390
  /** Position: 'top' | 'bottom' | 'left' | 'right' (default: 'bottom'; automatically 'top' on touch devices) */
3233
3391
  'placement'?: NLDDTooltip['placement'];
@@ -3238,47 +3396,47 @@ declare module 'vue' {
3238
3396
  };
3239
3397
 
3240
3398
  type NLDDTopNavigationBarProps = {
3241
- /** Naam van de website of applicatie, boven de menubalk. Leeg laat de titelregel weg. */
3399
+ /** Name of the website or application, above the menu bar. Empty leaves the title line out. */
3242
3400
  'website-title'?: NLDDTopNavigationBar['websiteTitle'];
3243
- /** Naam van de website of applicatie, boven de menubalk. Leeg laat de titelregel weg. */
3401
+ /** Name of the website or application, above the menu bar. Empty leaves the title line out. */
3244
3402
  'websiteTitle'?: NLDDTopNavigationBar['websiteTitle'];
3245
- /** Verbergt de hele logobalk, inclusief woordmerk. */
3403
+ /** Hides the whole logo bar, wordmark included. */
3246
3404
  'no-logo'?: NLDDTopNavigationBar['noLogo'];
3247
- /** Verbergt de hele logobalk, inclusief woordmerk. */
3405
+ /** Hides the whole logo bar, wordmark included. */
3248
3406
  'noLogo'?: NLDDTopNavigationBar['noLogo'];
3249
- /** Begrenst de bar-content tot een max-width zodat die uitlijnt met de page-sections. 'full' vult de volle breedte, of geef een eigen CSS-lengte. */
3407
+ /** Limits the bar content to a max-width so it lines up with the page sections. 'full' fills the entire width, or pass your own CSS length. */
3250
3408
  'width'?: NLDDTopNavigationBar['width'];
3251
- /** Titel van het woordmerk naast het logo. Zonder deze waarde staat het logo er alleen. */
3409
+ /** Title of the wordmark next to the logo. Without it the logo stands alone. */
3252
3410
  'logo-title'?: NLDDTopNavigationBar['logoTitle'];
3253
- /** Titel van het woordmerk naast het logo. Zonder deze waarde staat het logo er alleen. */
3411
+ /** Title of the wordmark next to the logo. Without it the logo stands alone. */
3254
3412
  'logoTitle'?: NLDDTopNavigationBar['logoTitle'];
3255
- /** Subtitel onder de woordmerktitel. Alleen zichtbaar als er een woordmerk is. */
3413
+ /** Subtitle under the wordmark title. Only visible when there is a wordmark. */
3256
3414
  'logo-subtitle'?: NLDDTopNavigationBar['logoSubtitle'];
3257
- /** Subtitel onder de woordmerktitel. Alleen zichtbaar als er een woordmerk is. */
3415
+ /** Subtitle under the wordmark title. Only visible when there is a wordmark. */
3258
3416
  'logoSubtitle'?: NLDDTopNavigationBar['logoSubtitle'];
3259
- /** Eerste ondersteunende regel onder de woordmerktitel. Alleen zichtbaar als er een woordmerk is. */
3417
+ /** First supporting line under the wordmark title. Only visible when there is a wordmark. */
3260
3418
  'logo-supporting-text-1'?: NLDDTopNavigationBar['logoSupportingText1'];
3261
- /** Eerste ondersteunende regel onder de woordmerktitel. Alleen zichtbaar als er een woordmerk is. */
3419
+ /** First supporting line under the wordmark title. Only visible when there is a wordmark. */
3262
3420
  'logoSupportingText1'?: NLDDTopNavigationBar['logoSupportingText1'];
3263
- /** Tweede ondersteunende regel onder de woordmerktitel. Alleen zichtbaar als er een woordmerk is. */
3421
+ /** Second supporting line under the wordmark title. Only visible when there is a wordmark. */
3264
3422
  'logo-supporting-text-2'?: NLDDTopNavigationBar['logoSupportingText2'];
3265
- /** Tweede ondersteunende regel onder de woordmerktitel. Alleen zichtbaar als er een woordmerk is. */
3423
+ /** Second supporting line under the wordmark title. Only visible when there is a wordmark. */
3266
3424
  'logoSupportingText2'?: NLDDTopNavigationBar['logoSupportingText2'];
3267
- /** URL voor logo en woordmerk. Zonder deze waarde zijn ze geen link, maar een afbeelding met een toegankelijk label. */
3425
+ /** URL for the logo and wordmark. Without it they are not a link but an image with an accessible label. */
3268
3426
  'logo-href'?: NLDDTopNavigationBar['logoHref'];
3269
- /** URL voor logo en woordmerk. Zonder deze waarde zijn ze geen link, maar een afbeelding met een toegankelijk label. */
3427
+ /** URL for the logo and wordmark. Without it they are not a link but an image with an accessible label. */
3270
3428
  'logoHref'?: NLDDTopNavigationBar['logoHref'];
3271
- /** URL voor de websitetitel. Zonder deze waarde blijft de titel gewone tekst. */
3429
+ /** URL for the website title. Without it the title stays plain text. */
3272
3430
  'website-href'?: NLDDTopNavigationBar['websiteHref'];
3273
- /** URL voor de websitetitel. Zonder deze waarde blijft de titel gewone tekst. */
3431
+ /** URL for the website title. Without it the title stays plain text. */
3274
3432
  'websiteHref'?: NLDDTopNavigationBar['websiteHref'];
3275
- /** URL van de terugknop. Zonder deze waarde vuurt een klik het `back-click`-event, zodat de consument zelf navigeert. */
3433
+ /** URL of the back button. Without it a click fires the `back-click` event, so the consumer navigates itself. */
3276
3434
  'back-href'?: NLDDTopNavigationBar['backHref'];
3277
- /** URL van de terugknop. Zonder deze waarde vuurt een klik het `back-click`-event, zodat de consument zelf navigeert. */
3435
+ /** URL of the back button. Without it a click fires the `back-click` event, so the consumer navigates itself. */
3278
3436
  'backHref'?: NLDDTopNavigationBar['backHref'];
3279
- /** Tekst van de terugknop. De knop verschijnt zodra back-text of back-href is gezet; zonder tekst valt hij terug op de vertaling ("Terug"). */
3437
+ /** Text of the back button. The button appears as soon as back-text or back-href is set; without text it falls back to the translation ("Terug"). */
3280
3438
  'back-text'?: NLDDTopNavigationBar['backText'];
3281
- /** Tekst van de terugknop. De knop verschijnt zodra back-text of back-href is gezet; zonder tekst valt hij terug op de vertaling ("Terug"). */
3439
+ /** Text of the back button. The button appears as soon as back-text or back-href is set; without text it falls back to the translation ("Terug"). */
3282
3440
  'backText'?: NLDDTopNavigationBar['backText'];
3283
3441
  'translations'?: NLDDTopNavigationBar['translations'];
3284
3442
  };
@@ -3306,9 +3464,9 @@ declare module 'vue' {
3306
3464
  'dismiss-text'?: NLDDTopTitleBar['dismissText'];
3307
3465
  /** Text of the dismiss button. Empty hides that button. */
3308
3466
  'dismissText'?: NLDDTopTitleBar['dismissText'];
3309
- /** Fired when the back button is clicked (not fired when back-href is set) */
3467
+ /** Fired when the back button is clicked (not fired when back-href is set). It bubbles and is composed, so an ancestor hears it too, which is how nldd-navigation-split-view lets a consumer catch the back of any pane in one place. Listen in one place then: bound to both this bar and an ancestor, a single press runs the handler twice. */
3310
3468
  'onBack'?: (event: CustomEvent) => void;
3311
- /** Fired when the dismiss button is clicked */
3469
+ /** Fired when the dismiss button is clicked. Bubbles and is composed, with the same caveat as `back`. */
3312
3470
  'onDismiss'?: (event: CustomEvent) => void;
3313
3471
  };
3314
3472
 
@@ -3355,38 +3513,70 @@ declare module 'vue' {
3355
3513
  'height'?: NLDDTwoThirdsOneThirdSection['height'];
3356
3514
  };
3357
3515
 
3516
+ type NLDDValidationItemProps = {
3517
+ /** Regular expression the value has to contain. Not anchored, unlike the native `pattern`: `[A-Z]` means "has a capital in it". */
3518
+ 'match'?: NLDDValidationItem['match'];
3519
+ /** Fewest characters the value may have. */
3520
+ 'minlength'?: NLDDValidationItem['minlength'];
3521
+ /** Most characters the value may have. */
3522
+ 'maxlength'?: NLDDValidationItem['maxlength'];
3523
+ /** The value may not be empty. Use it on a field whose other rules would pass an empty value. */
3524
+ 'required'?: NLDDValidationItem['required'];
3525
+ /** Show this item before there is a verdict, whatever the list says. */
3526
+ 'hint'?: NLDDValidationItem['hint'];
3527
+ /** Whether the value fails this item. Managed by the list; do not set it yourself. */
3528
+ 'unmet'?: NLDDValidationItem['unmet'];
3529
+ /** Whether the item is on screen. Managed by the list. */
3530
+ 'visible'?: NLDDValidationItem['visible'];
3531
+ /** Whether this item judges itself, or waits for the app to name it. */
3532
+ 'hasRule'?: NLDDValidationItem['hasRule'];
3533
+ };
3534
+
3535
+ type NLDDValidationListProps = {
3536
+ /** Id of the control this list is about. Not needed inside an nldd-form-field, which hands its own control over. */
3537
+ 'for'?: NLDDValidationList['for'];
3538
+ /** Show every item before there is a verdict, as the requirements of the field. Overridable per item. */
3539
+ 'hint'?: NLDDValidationList['hint'];
3540
+ /** Drop the hints, because this field has been judged. Turned on by the list itself once its control is `invalid`, and settable by hand. What turns red follows `invalid`, not this. */
3541
+ 'judging'?: NLDDValidationList['judging'];
3542
+ /** The control this list is about. Set by the wrapping nldd-form-field, which already answers "which control is this field about" for the label and the description. A `for` of its own wins, and setting this property directly is what a test or a story does. */
3543
+ 'control'?: NLDDValidationList['control'];
3544
+ /** The value to check, when there is no control to read it from. */
3545
+ 'value'?: NLDDValidationList['value'];
3546
+ };
3547
+
3358
3548
  type NLDDWindowProps = {
3359
- /** Niet-modaal (geen backdrop of focusvergrendeling); standaard is het venster modaal */
3549
+ /** Modeless (no backdrop or focus trap); the window is modal by default */
3360
3550
  'modeless'?: NLDDWindow['modeless'];
3361
- /** Een klik op de backdrop sluit het venster niet. Voor vensters waar per ongeluk wegklikken werk kost: een wizard, een formulier met ingevulde velden. Escape en de dismiss-knop blijven werken. */
3551
+ /** 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. */
3362
3552
  'no-light-dismiss'?: NLDDWindow['noLightDismiss'];
3363
- /** Een klik op de backdrop sluit het venster niet. Voor vensters waar per ongeluk wegklikken werk kost: een wizard, een formulier met ingevulde velden. Escape en de dismiss-knop blijven werken. */
3553
+ /** 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. */
3364
3554
  'noLightDismiss'?: NLDDWindow['noLightDismiss'];
3365
- /** (verplicht) Toegankelijke naam (aria-label). Valt terug op de i18n default ('Venster') als niet gezet geef altijd een unieke, beschrijvende naam per venster. */
3555
+ /** (required) Accessible name (aria-label). Falls back to the i18n default ('Venster') when unset. Always pass a unique, descriptive name per window. */
3366
3556
  'accessible-label'?: NLDDWindow['accessibleLabel'];
3367
- /** (verplicht) Toegankelijke naam (aria-label). Valt terug op de i18n default ('Venster') als niet gezet geef altijd een unieke, beschrijvende naam per venster. */
3557
+ /** (required) Accessible name (aria-label). Falls back to the i18n default ('Venster') when unset. Always pass a unique, descriptive name per window. */
3368
3558
  'accessibleLabel'?: NLDDWindow['accessibleLabel'];
3369
- /** Override translation keys; unset keys vallen terug op de Nederlandse default. */
3559
+ /** Override translation keys; unset keys fall back to the Dutch default. */
3370
3560
  'translations'?: NLDDWindow['translations'];
3371
- /** CSS top positie van de bovenrand (bijv. '0', '100px') */
3561
+ /** CSS top position of the top edge (e.g. '0', '100px') */
3372
3562
  'top'?: NLDDWindow['top'];
3373
- /** CSS left positie van de linkerrand */
3563
+ /** CSS left position of the left edge */
3374
3564
  'left'?: NLDDWindow['left'];
3375
- /** CSS right waarde */
3565
+ /** CSS right value */
3376
3566
  'right'?: NLDDWindow['right'];
3377
- /** CSS bottom waarde */
3567
+ /** CSS bottom value */
3378
3568
  'bottom'?: NLDDWindow['bottom'];
3379
- /** Centreert beide assen op de viewport. Per as overrideable: `centered top="0"` = horizontaal gecentreerd, top-aligned. Mirrort CSS `place-items: center` met `align-items`/`justify-items` overrides. */
3569
+ /** 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. */
3380
3570
  'centered'?: NLDDWindow['centered'];
3381
- /** CSS width (standaard: var(--components-window-default-width)) */
3571
+ /** CSS width (default: var(--components-window-default-width)) */
3382
3572
  'width'?: NLDDWindow['width'];
3383
- /** CSS height (standaard: content height) */
3573
+ /** CSS height (default: content height) */
3384
3574
  'height'?: NLDDWindow['height'];
3385
3575
  /** Color scheme (default 'inherit'). */
3386
3576
  'scheme'?: NLDDWindow['scheme'];
3387
- /** Wanneer het venster wordt geopend */
3577
+ /** When the window opens */
3388
3578
  'onOpen'?: (event: CustomEvent) => void;
3389
- /** Wanneer het venster volledig is gesloten */
3579
+ /** 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. */
3390
3580
  'onClose'?: (event: CustomEvent) => void;
3391
3581
  };
3392
3582
 
@@ -3405,7 +3595,7 @@ declare module 'vue' {
3405
3595
  'nldd-banner': DefineComponent<NLDDBannerProps>;
3406
3596
  /** A vertical split view with a main area and an unlimited number of bar panels. Each child determines its order per breakpoint via sm-order, md-order, and lg-order. Children without order attributes are sorted by DOM order. All bars are in normal flow at every breakpoint and stack vertically. A divider is drawn only where the main pane meets an adjacent bar — directly above and/or below main — at every breakpoint (including sm). Two stacked bars on the same side never get a divider between them, so a toolbar and a tab-bar read as one visual unit. Consumers never manage dividers themselves. Give each bar a unique slot name (e.g. slot="toolbar", slot="status-bar"). Use slot="bar-1", slot="bar-2" if no meaningful name applies. The main panel always uses slot="main". Sets --context-parent-background-color, which cascades to all descendants. */
3407
3597
  'nldd-bar-split-view': DefineComponent<NLDDBarSplitViewProps>;
3408
- /** Toont een citaat met optionele bron-attributie. */
3598
+ /** Shows a quote with an optional source attribution. */
3409
3599
  'nldd-blockquote': DefineComponent<NLDDBlockquoteProps>;
3410
3600
  /** Use a box to visually group related components in a distinct, contained region. Boxes draw attention to a set of controls or content that belong together, helping users understand their relationship at a glance. */
3411
3601
  'nldd-box': DefineComponent<NLDDBoxProps>;
@@ -3419,7 +3609,7 @@ declare module 'vue' {
3419
3609
  'nldd-button-bar-divider': DefineComponent<anonymous_0Props>;
3420
3610
  /** A container for grouping related buttons together, either horizontally or vertically. */
3421
3611
  'nldd-button-group': DefineComponent<NLDDButtonGroupProps>;
3422
- /** Een visueel afgebakende kaart met optionele header, body en footer secties. De kaart heeft een elevated look als standaard. Padding wordt overgelaten aan geneste containers. Met `href` wordt de hele kaart een link (een overlay-anchor over de kaart); met `button` een knop (een overlay-button die een gewone, composed `click` geeft een klik-listener of htmx-attribuut op de kaart zelf werkt dus direct, en Enter/Space doen het native). `href` wint als beide gezet zijn. Geneste interactieve content (bijv. footer-knoppen) moet je erboven tillen met `position: relative; z-index: 1` om klikbaar te blijven. */
3612
+ /** 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. */
3423
3613
  'nldd-card': DefineComponent<NLDDCardProps>;
3424
3614
  /** 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"`. */
3425
3615
  'nldd-cell': DefineComponent<NLDDCellProps>;
@@ -3436,13 +3626,13 @@ declare module 'vue' {
3436
3626
  'nldd-combo-box': DefineComponent<NLDDComboBoxProps>;
3437
3627
  /** 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`. */
3438
3628
  'nldd-container': DefineComponent<NLDDContainerProps>;
3439
- /** Een tekstveld voor een datum, met een optionele kalender in een popover. De waarde is altijd ISO (jjjj-mm-dd); op het scherm staat de Nederlandse notatie (dd-mm-jjjj). Er wordt niet gemaskerd tijdens het typen: invoer wordt royaal geaccepteerd en pas bij het verlaten van het veld genormaliseerd. Foutmeldingen horen bij nldd-form-field, niet hier. Dit veld reflecteert alleen `invalid` / `valid`, net als nldd-text-field. */
3629
+ /** 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. */
3440
3630
  'nldd-date-field': DefineComponent<NLDDDateFieldProps>;
3441
- /** Een kalender waarin een datum of een periode wordt gekozen. Het component is zelfstandig bruikbaar - inline op een pagina, in een filterpaneel - en zit ook in de popover van nldd-date-field. Waarden zijn altijd ISO (jjjj-mm-dd). Met `range` kiest de gebruiker in twee stappen een begin- en einddatum. */
3631
+ /** A calendar for picking a date or a period. The component works on its own (inline on a page, in a filter panel) and also sits in the popover of nldd-date-field. Values are always ISO (yyyy-mm-dd). With `range` the user picks a start and an end date in two steps. */
3442
3632
  'nldd-date-picker': DefineComponent<NLDDDatePickerProps>;
3443
3633
  /** A cell component for displaying a title-description pair 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"`. */
3444
3634
  'nldd-description-cell': DefineComponent<NLDDDescriptionCellProps>;
3445
- /** Een scheidingslijn die secties van inhoud visueel van elkaar scheidt. */
3635
+ /** A rule that visually separates sections of content. */
3446
3636
  'nldd-divider': DefineComponent<NLDDDividerProps>;
3447
3637
  /** A horizontal tab bar for document tabs with an automatic overflow button and an end slot for action buttons. Exports both NLDDDocumentTabBar and NLDDDocumentTabBarItem. */
3448
3638
  'nldd-document-tab-bar': DefineComponent<NLDDDocumentTabBarProps>;
@@ -3453,20 +3643,19 @@ declare module 'vue' {
3453
3643
  'nldd-dropdown': DefineComponent<NLDDDropdownProps>;
3454
3644
  /** 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. */
3455
3645
  'nldd-file-field': DefineComponent<NLDDFileFieldProps>;
3456
- /** 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:** - Geen shadowRoot alle children leven in light DOM (binnen het inner <form>) - Geen Lit pure HTMLElement met handmatige attribute-mirroring - **Vereist global stylesheet import** vertical rhythm en form-section divider-suppression regels staan in `dist/css/form.css` (of `global.css`), niet in een component-specifieke shadow stylesheet. Import deze als deel van je app's globale 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, en skipt de migration. Children blijven waar je framework ze plaatst geen DOM-shuffling die met React/Vue/Angular reconciliation conflicteert. **Framework interop:** In auto-wrap mode wordt elke direct child verplaatst naar het inner form via een MutationObserver. Voor de meeste React/Vue use cases werkt dit prima omdat frameworks alleen DOM-mutaties doen wanneer hun virtual DOM verandert. Voor edge cases (animatie-libs die DOM-positie tracken, SSR-hydration mismatches, frameworks die actief sibling-positions controleren) gebruik dan **user-provided form** mode. Voor programmatische manipulatie: gebruik de `form` getter zodat je direct met het inner `<form>` element werkt: const inner = document.querySelector('nldd-form').form; inner.checkValidity(); inner.appendChild(myInput); // skipt migration-overhead */
3646
+ /** 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 */
3457
3647
  'nldd-form': DefineComponent<NLDDFormProps>;
3458
- /** Een layout-wrapper voor de actie-knoppen onderaan een formulier (typisch een submit-button of button-group). Volgt dezelfde responsive layout als `nldd-form-field`: met `label-alignment="right"` of `"left"` krijgt de inhoud dezelfde insprong als de invoervelden boven, dankzij een `::before`-pseudo-element dat fungeert als spacer-kolom waar de label zou staan. Erft `label-alignment` automatisch over van een wrappende `<nldd-form>`: de form propageert z'n eigen `label-alignment` als `form-label-alignment` naar descendant `nldd-form-actions` (en `nldd-form-field`) via een MutationObserver. Een expliciete eigen `label-alignment` op de form-actions wint via CSS-cascade de form-code raakt het `label-alignment` attribuut van de descendant nooit aan. <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> */
3648
+ /** 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> */
3459
3649
  'nldd-form-actions': DefineComponent<NLDDFormActionsProps>;
3460
3650
  'nldd-form-field': DefineComponent<NLDDFormFieldProps>;
3461
- 'nldd-form-field-error-text': DefineComponent<NLDDFormFieldErrorTextProps>;
3462
3651
  'nldd-form-field-help-text': DefineComponent<NLDDFormFieldHelpTextProps>;
3463
- /** Nederlandse Digitale Dienst Form Section Component Plain custom element (extends HTMLElement, no Lit) light-DOM render lost een NVDA + Firefox a11y-bug op waar shadow-DOM <fieldset> + <legend> niet betrouwbaar als group-label aangekondigd worden voor slotted controls. Native fieldset/legend in light DOM werkt correct over alle AT/browser-combinaties. **Differs from shadow components:** - Geen shadowRoot alle children leven in light DOM (binnen het gerenderde <fieldset>). - Geen Lit pure HTMLElement met handmatige DOM-mutation. - **Vereist global stylesheet import** `dist/css/form-section.css` (of `global.css`). Form-section heeft geen 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**: de title rendert als `<legend>`. Dat is semantisch een **groep-label**, geen heading. Screenreaders kondigen 't aan wanneer de gebruiker in de fieldset komt, maar gebruikers die met de H-toets door headings springen slaan 'm over. Visueel lijkt 't op een heading; gebruik dit component dus voor *form-grouping*, niet als pagina-structuur. Voor echte page-headings: gebruik een apart heading-element boven het form. **Supporting-text lengte**: de subtitle staat als `<span>` binnen de `<legend>` zodat SR 'm meeleest als group label. Bijwerking: bij elke field-entry binnen de sectie wordt de hele legend (titel + subtitel) opnieuw uitgesproken. Houd `supporting-text` daarom kort (richtlijn: ≤ ~80 tekens) en gebruik 'm voor groep-introductie ("Vul je adresgegevens in"), niet voor uitgebreide instructies. Voor langere uitleg op een specifiek veld: gebruik `nldd-form-field-help-text` op dat veld. <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> */
3652
+ /** 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> */
3464
3653
  'nldd-form-section': DefineComponent<NLDDFormSectionProps>;
3465
3654
  /** 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. */
3466
3655
  'nldd-full-bleed-section': DefineComponent<NLDDFullBleedSectionProps>;
3467
3656
  /** 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. */
3468
3657
  'nldd-hero': DefineComponent<NLDDHeroProps>;
3469
- /** 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 arbitrary one-off colors, set `style="color: …"` on the hostthe inherited `color` still drives the SVG fill/stroke. */
3658
+ /** 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. */
3470
3659
  'nldd-icon': DefineComponent<NLDDIconProps>;
3471
3660
  'nldd-icon-button': DefineComponent<NLDDIconButtonProps>;
3472
3661
  /** 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. */
@@ -3477,23 +3666,23 @@ declare module 'vue' {
3477
3666
  'nldd-image': DefineComponent<NLDDImageProps>;
3478
3667
  /** An inline status component for empty state, confirmations and feedback. Fills the container and has no minimum width. */
3479
3668
  'nldd-inline-dialog': DefineComponent<NLDDInlineDialogProps>;
3480
- /** Een guided-discovery coach-mark. Plaats een control (bijv. nldd-search-field) in de default slot; zolang `active` is gezet tilt het component een callout (titel + supporting text + dismiss) in de top layer via de Popover API (`popover="manual"`), geankerd aan het control met Floating UI. Geen backdrop, non-modaal: de achtergrond blijft interactief. Het control zelf blijft op zijn plek in de flow staan. Met `dismissable` beheert het component het sluiten en vuurt het nldd-close: - de gebruiker voert de geadviseerde interactie uit op het control -> close{completed} - de dismiss-knop -> close{dismissed} - een klik/toets BUITEN de coach-mark -> close{ignored} Zonder `dismissable` sluit niets vanzelf (geen knop, geen buiten- of slot-klik); dan bepaalt de consumer het sluiten zelf via `active` of `complete()`. `complete()` werkt altijd en sluit met close{completed} (bijv. pas bij een echte zoekopdracht). */
3669
+ /** A guided-discovery coach mark. Put a control (nldd-search-field, for instance) in the default slot. While `active` is set, the component lifts a callout (title + supporting text + dismiss) into the top layer through the Popover API (`popover="manual"`), anchored to the control with Floating UI. No backdrop, non-modal: the background stays interactive. The control itself stays where it is in the flow. With `dismissable` the component manages closing and fires nldd-close: - the user performs the suggested interaction on the control -> close{completed} - the dismiss button -> close{dismissed} - a click or key press OUTSIDE the coach mark -> close{ignored} Without `dismissable` nothing closes by itself (no button, no outside or slot click); the consumer then decides when to close through `active` or `complete()`. `complete()` always works and closes with close{completed}, for example only once a real search has been submitted. */
3481
3670
  'nldd-just-in-time-education': DefineComponent<NLDDJustInTimeEducationProps>;
3482
- /** Toont een toetsencombinatie (zoals Cmd+K of Ctrl+Shift+P) in één gecombineerde container met semantische <kbd>-elementen per toets. Op touch-only devices (geen hover-capable input) wordt de shortcut standaard verborgen omdat hij niet aanroepbaar is. Gebruik het `always-visible` attribuut wanneer de shortcut puur informatief is en altijd zichtbaar moet blijven. Voor cross-platform shortcuts kunnen `mac-keys`, `windows-keys` en `linux-keys` worden gezet — het component picks de juiste op basis van de gedetecteerde OS, met `keys` als fallback voor onbekende platforms. */
3671
+ /** Shows a key combination (such as Cmd+K or Ctrl+Shift+P) in one combined container with a semantic <kbd> element per key. On touch-only devices (no hover-capable input) the shortcut is hidden by default, because it cannot be invoked there. Use the `always-visible` attribute when the shortcut is purely informative and should stay visible. For cross-platform shortcuts you can set `mac-keys`, `windows-keys` and `linux-keys`. The component picks the right one from the detected OS, with `keys` as the fallback for unknown platforms. */
3483
3672
  'nldd-keyboard-shortcut': DefineComponent<NLDDKeyboardShortcutProps>;
3484
- /** Hyperlink component met twee modi: 1. **Standalone (sized)** set `size="xs"|"sm"|"md"|"lg"` voor menu's, actiegebieden of overzichten. Vaste tekstgrootte, `display: inline-flex` met `gap` voor icon-spacing. 2. **Inline (inherit)** laat `size` weg of zet expliciet `size="inherit"`. De link erft `font-size`, `line-height` en `font-family` van zijn omgeving. Tekst wraps natuurlijk over regels (`display: inline`). Icons werken ook hier; de natuurlijke whitespace tussen icon en tekst zorgt voor de spacing. Voor links in CMS/markdown-output (waar de `<a>` als HTML binnenkomt) blijft `<nldd-rich-text>` met raw `<a>` de aangewezen route. */
3673
+ /** Hyperlink component with two modes: 1. **Standalone (sized)**: set `size="xs"|"sm"|"md"|"lg"` for menus, action areas or overviews. Fixed text size, `display: inline-flex` with `gap` for icon spacing. 2. **Inline (inherit)**: leave `size` out or set `size="inherit"` explicitly. The link inherits `font-size`, `line-height` and `font-family` from its surroundings. Text wraps naturally across lines (`display: inline`). Icons work here too; the natural whitespace between icon and text provides the spacing. For links in CMS or markdown output, where the `<a>` arrives as HTML, `<nldd-rich-text>` with a raw `<a>` remains the route to take. */
3485
3674
  'nldd-link': DefineComponent<NLDDLinkProps>;
3486
- /** 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. - `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>`. - `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. 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 `arrow-navigation` are ignored in listbox mode (listbox has its own keyboard). A tree is a composite widget, so it brings its own keyboard — `arrow-navigation` is implied and needn't be set: - ArrowDown / ArrowUp — move between the rows in the order they appear on screen, the rows of an open branch included. - Home / End first / last row. - 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 / 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 segmented action 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. */
3675
+ /** 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. - `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. */
3487
3676
  'nldd-list': DefineComponent<NLDDListProps>;
3488
- /** 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 action segmented actions 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 segmented actions 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-action` 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-action[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`). */
3677
+ /** 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`). */
3489
3678
  'nldd-list-item': DefineComponent<NLDDListItemProps>;
3490
- /** A segmented action 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 action — 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 segmented action 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 an action 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 segmented action 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 segmented action 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. */
3491
- 'nldd-list-item-action': DefineComponent<NLDDListItemActionProps>;
3679
+ /** 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. */
3680
+ 'nldd-list-item-segment': DefineComponent<NLDDListItemSegmentProps>;
3492
3681
  /** A floating menu component using the Popover API. Positioned relative to an anchor element using Floating UI. Supports filtering, keyboard navigation, and highlight management. Use nldd-menu-item and nldd-menu-divider as children. Note: Only type="button" items are supported when used inside nldd-combo-box-field. Radio and checkbox types may be used in standalone menus. */
3493
3682
  'nldd-menu': DefineComponent<NLDDMenuProps>;
3494
- /** Horizontale rij van nldd-menu-bar-item elementen met automatische overflow detectie. Items die niet passen worden verborgen achter een overflow button met een popover menu. */
3683
+ /** Horizontal row of nldd-menu-bar-item elements with automatic overflow detection. Items that do not fit are hidden behind an overflow button with a popover menu. */
3495
3684
  'nldd-menu-bar': DefineComponent<NLDDMenuBarProps>;
3496
- /** Interactief bouwblok voor gebruik in een menu bar. Rendert als <a> (met href) of <button> (zonder href). Ondersteunt icon, text, disclosure indicator, en een expandable popover via een geslotte `<nldd-menu>` (of ander popover-element). */
3685
+ /** Interactive building block for use in a menu bar. Renders as an <a> (with href) or a <button> (without href). Supports an icon, text, a disclosure indicator, and an expandable popover through a slotted `<nldd-menu>` (or another popover element). */
3497
3686
  'nldd-menu-bar-item': DefineComponent<NLDDMenuBarItemProps>;
3498
3687
  /** A horizontal rule between groups of items in an `nldd-menu`. */
3499
3688
  'nldd-menu-divider': DefineComponent<NLDDMenuDividerProps>;
@@ -3540,7 +3729,7 @@ declare module 'vue' {
3540
3729
  'nldd-radio-button-field': DefineComponent<NLDDRadioButtonFieldProps>;
3541
3730
  /** 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. */
3542
3731
  'nldd-radio-button-group': DefineComponent<NLDDRadioButtonGroupProps>;
3543
- /** 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. Kinderen worden in drie zones geplaatst: tekst (headings, paragrafen, lijsten, blockquote, div/section) leest op de `main`-maat; media en tabellen (img, figure, video, iframe, table) krijgen het `wide`-accent; al het overige codeblokken en élke component krijgt de volledige `full`-span met `justify-self: start`, zodat de ruimte beschikbaar is maar niet geforceerd wordt. Per kind te overschrijven met `data-width="main" | "wide" | "full"`. In de linkse layout lezen wide en full als bleed naar rechts; met `centered` zijn ze symmetrisch. */
3732
+ /** 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. */
3544
3733
  'nldd-rich-text': DefineComponent<NLDDRichTextProps>;
3545
3734
  /** A search input with a leading search icon, an optional dismiss button, and an optional search button. */
3546
3735
  'nldd-search-field': DefineComponent<NLDDSearchFieldProps>;
@@ -3555,7 +3744,7 @@ declare module 'vue' {
3555
3744
  'nldd-sidebar-section': DefineComponent<NLDDSidebarSectionProps>;
3556
3745
  /** 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. */
3557
3746
  'nldd-simple-section': DefineComponent<NLDDSimpleSectionProps>;
3558
- /** Accessibility-patroon dat keyboard-gebruikers toestaat om content over te slaan. Wraps content in een default slot zonder href focust het het eerste element na de skip-link in het DOM (nextElementSibling). Zorg dat er een focusbaar element na het component staat, anders heeft de skip-link geen effect. */
3747
+ /** 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. */
3559
3748
  'nldd-skip-link': DefineComponent<NLDDSkipLinkProps>;
3560
3749
  /** 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. */
3561
3750
  'nldd-spacer': DefineComponent<NLDDSpacerProps>;
@@ -3569,7 +3758,7 @@ declare module 'vue' {
3569
3758
  'nldd-split-view-pane': DefineComponent<NLDDSplitViewPaneProps>;
3570
3759
  /** A vertical split view with multiple stacked panes. The number of panes is set via the `panes` attribute. Each pane automatically gets a numbered slot: pane-1, pane-2, etc. Panes that do not fit the available height are automatically hidden. */
3571
3760
  'nldd-stacked-split-view': DefineComponent<NLDDStackedSplitViewProps>;
3572
- /** Een smalle, paginabrede statusbalk (24px) met een diepe achtergrondkleur per variant. Gebruik voor persistente systeemtoestand: een storing, gepland onderhoud, een conceptweergave of een lopende opname. De balk toont bewust geen icoon en ondersteunt alleen tekst de tekst zelf moet de status benoemen ("Storing: …", "Gepland onderhoud …"), zodat de betekenis niet alleen uit kleur volgt (WCAG 1.4.1). Houd de tekst kort: de balk toont één regel en kapt af met ellipsis, zeker op smallere schermen. Bij een lang bericht met veel informatie hoort alleen de kern in de balk; verwijs voor de rest naar een losse pagina of sheet (bijvoorbeeld via `href` of `button`) waar de gebruiker verder kan lezen. De hele balk kan klikbaar zijn: zet `href` (rendert een `<a>`) of `button` (rendert een `<button>`; luister naar het native `click` event). Zonder beide is de balk statisch. Bij interactie verschijnt een chevron als affordance. Maximaal één actie per balk; meerdere acties of links in lopende tekst horen in nldd-banner. role en aria-live worden automatisch gezet op basis van de variant: - critical → role="alert" (impliceert aria-live="assertive"; onderbreekt de screen reader) - overige → role="status" aria-live="polite" Niet overschrijfbaar is een rustiger component nodig, kies dan een ander. Gebruik `critical` alleen voor een echte noodsituatie: role="alert" onderbreekt de screen reader bij élke wijziging van de inhoud, dus plaats er geen tekst in die regelmatig verandert (zoals een aftellende timer). */
3761
+ /** A narrow, page-wide status bar (24px) with a deep background color per variant. Use it for persistent system state: an outage, planned maintenance, a draft view or a recording in progress. The bar deliberately shows no icon and supports text only. The text itself has to name the status ("Storing: …", "Gepland onderhoud …"), so the meaning does not follow from color alone (WCAG 1.4.1). Keep the text short: the bar shows one line and truncates with an ellipsis, certainly on narrower screens. For a long message with a lot of information only the essence belongs in the bar. Point to a separate page or sheet for the rest (through `href` or `button`, for instance), where the user can read on. The whole bar can be clickable: set `href` (renders an `<a>`) or `button` (renders a `<button>`; listen for the native `click` event). Without either the bar is static. On interaction a chevron appears as an affordance. One action per bar at most; several actions, or links in running text, belong in nldd-banner. role and aria-live are set automatically from the variant: - critical → role="alert" (implies aria-live="assertive"; interrupts the screen reader) - others → role="status" aria-live="polite" Not overridable. If you need a quieter component, pick a different one. Use `critical` only for a real emergency: role="alert" interrupts the screen reader on every change of the content, so do not put text in it that changes regularly (a counting-down timer, for example). */
3573
3762
  'nldd-status-bar': DefineComponent<NLDDStatusBarProps>;
3574
3763
  /** Shows where you are in a process of several steps: a row of discs with a number (or a check mark on what is done), a label under each and a line connecting them. The parent holds the truth: `current` (1-based) derives the status of every child — `past` before it, `future` after. A child can override that with a `status` of its own, for flows that jump back or skip a step. Horizontal only. For steps under each other, build an `nldd-list` with an `nldd-timeline-track-cell` and an `nldd-title-cell` per row: vertical steps usually carry more than a title, and a list row already does that. Below the sm breakpoint (a container query, so measured on the component itself rather than on the viewport) it folds into one line of text plus a segmented bar. The full list of steps stays in the DOM, only visually hidden, so assistive software hears no less than a wide screen shows. Accessibility: a `nav` with a label, holding a `role="list"` with a `role="listitem"` per step. The current step gets `aria-current="step"`, the only notion WAI-ARIA has for this. "Done" and "still to do" do not exist as ARIA tokens and travel along as visually hidden text instead. */
3575
3764
  'nldd-step-indicator': DefineComponent<NLDDStepIndicatorProps>;
@@ -3589,14 +3778,16 @@ declare module 'vue' {
3589
3778
  'nldd-table-row': DefineComponent<NLDDTableRowProps>;
3590
3779
  /** A compact property that has been assigned to something: a category, a type, a role, a certification. What it says changes only when someone edits the content. A tag is not interactive. Do not use it for a state the system keeps itself, such as "Active" or "Expired", because that is `nldd-badge`. If the user can remove the thing or click it, it is `nldd-token`. */
3591
3780
  'nldd-tag': DefineComponent<NLDDTagProps>;
3781
+ /** One run of body text at a size from the type scale. It is what you reach for where an app would otherwise write a bare `<p>` and inherit whatever the page happens to set: a line under a title, a sentence in a panel, a caption. Every combination it offers exists as a token, so it cannot invent typography — it only names what the scale already has. The three axes are the same three the tokens carry: size, weight and line height. Not for headings, which is `nldd-title`, and not for a block of prose with its own rhythm, spacing and media widths, which is `nldd-rich-text`. This is one run of text and nothing around it. Color follows the context channel a list item, menu or table sets on its content, so text inside a row travels with that row as it is hovered or selected. Standalone that channel is unset and the semantic color answers. */
3782
+ 'nldd-text': DefineComponent<NLDDTextProps>;
3592
3783
  /** A cell component for displaying text content in lists with configurable alignment, size and color. This is the most fundamental list cell component. `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, main text, 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>`, `<a>` or `<nldd-icon>` mixed with text. Note that `query` highlighting and `**bold**` parsing only apply to the attribute path — slotted content is rendered as-is. */
3593
3784
  'nldd-text-cell': DefineComponent<NLDDTextCellProps>;
3594
3785
  /** A hybrid markdown editor built on CodeMirror 6 (via NLDDCodeMirrorElement): the document stays plain markdown text, but formatting is shown inline (bold is bold, headings are larger, links are colored) while the syntax markers stay visible, only dimmed — the iA Writer / Kirby approach. No WYSIWYG tree, so the data stays portable. Default `variant="simple"` is bare (no frame, no focus ring) for use inside a composition (e.g. a message field) that owns its chrome and focus; the caret is a prominent accent. `variant="input-field"` adds a framed surface + focus Headless: there is no built-in toolbar. A consumer drives formatting via the command methods (toggleBold/toggleItalic/toggleInlineCode/toggleStrikethrough/ toggleHeading/toggleBulletList/toggleQuote/toggleLink/runCommand to toggle, and setHeading/setList for picker-style "set" semantics), reads the active formats with getState(), listens to the nldd-text-editor-state event to render toggle states, and forwards padding clicks with focusFromPoint(). Cmd/Ctrl+B/I/E/K are bound out of the box. Commands keep focus on the editor. An @-mention typeahead (mentionSource) collapses to an atomic token, and a W3C-style annotation overlay (annotations) marks ranges with a dashed underline, light tint and a count badge without touching the underlying text. */
3595
3786
  'nldd-text-editor': DefineComponent<NLDDTextEditorProps>;
3596
3787
  'nldd-text-field': DefineComponent<NLDDTextFieldProps>;
3597
- /** Een tekstveld voor een tijd. De waarde is altijd 24-uurs `HH:mm`; dat is in het Nederlands ook de weergave, dus anders dan bij nldd-date-field valt er niets om te rekenen. Er wordt niet gemaskeerd tijdens het typen: invoer wordt royaal geaccepteerd en pas bij het verlaten van het veld genormaliseerd. Foutmeldingen horen bij nldd-form-field, niet hier. Dit veld reflecteert alleen `invalid` / `valid`, net als nldd-text-field. Wat je in de picker doet is een voorbeeld tot je hem verlaat: het veld toont de tijd meteen, maar legt hem pas vast bij het sluiten. "Klaar" en Enter houden de keuze, een klik ernaast ook zodra je iets gekozen hebt, en Annuleer en Escape zetten de oude tijd terug. Op een leeg veld openen de wielen op `min`, of anders op de huidige tijd afgerond op `step`; dat vult het veld nog niet in. */
3788
+ /** A text field for a time. The value is always 24-hour `HH:mm`, which is how Dutch shows it too, so unlike nldd-date-field there is nothing to convert. 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. What you do in the picker is a preview until you leave it. The field shows the time right away but commits it on close. "Klaar" and Enter keep the choice, and so does a click outside once you have picked something. Cancel and Escape put the old time back. On an empty field the wheels open at `min`, or otherwise at the current time rounded to `step`, which does not fill in the field yet. */
3598
3789
  'nldd-time-field': DefineComponent<NLDDTimeFieldProps>;
3599
- /** Twee kolommen, uren en minuten, die als een wiel langs de selectie in het midden schuiven. Het component is zelfstandig bruikbaar (inline op een pagina, in een filterpaneel) en zit ook in de popover van nldd-time-field. Waarden zijn altijd 24-uurs `HH:mm`. Scrollen ís kiezen: wat in het midden tot stilstand komt, is de waarde. Met het toetsenbord bedien je de selectie, want dat is wat een wiel is: uur en minuut zijn er elk een spinbutton. De kolommen eronder staan op aria-hidden, zodat dezelfde waarden niet twee keer worden voorgelezen. */
3790
+ /** Two columns, hours and minutes, that slide like a wheel past the selection in the middle. The component works on its own (inline on a page, in a filter panel) and also sits in the popover of nldd-time-field. Values are always 24-hour `HH:mm`. Scrolling is choosing: whatever comes to rest in the middle is the value. The keyboard drives that same selection, because that is what a wheel is: hour and minute are each a spinbutton. The columns underneath are aria-hidden, so the same values are not read out twice. */
3600
3791
  'nldd-time-picker': DefineComponent<NLDDTimePickerProps>;
3601
3792
  /** 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. */
3602
3793
  'nldd-timeline-track-cell': DefineComponent<NLDDTimelineTrackCellProps>;
@@ -3617,13 +3808,16 @@ declare module 'vue' {
3617
3808
  'nldd-toolbar-title': DefineComponent<NLDDToolbarTitleProps>;
3618
3809
  /** A wrapper that shows a tooltip on hover or focus of its child element. It uses `display: contents`, so it does not affect the child's layout. */
3619
3810
  'nldd-tooltip': DefineComponent<NLDDTooltipProps>;
3620
- /** De bovenste balk van een pagina: een logobalk met het Rijkslogo en een optioneel woordmerk, en daaronder de hoofdbalk met de websitetitel, een terugknop, de globale navigatie en de utility-navigatie. Op smalle breedtes verhuist de globale navigatie naar een menusheet achter de menuknop. */
3811
+ /** The top bar of a page: a logo bar with the Rijkslogo and an optional wordmark, and below it the main bar with the website title, a back button, the global navigation and the utility navigation. On narrow widths the global navigation moves into a menu sheet behind the menu button. */
3621
3812
  'nldd-top-navigation-bar': DefineComponent<NLDDTopNavigationBarProps>;
3622
3813
  /** A toolbar for page and container headings with optional navigation and action buttons. The component has two states: - Default: the back button shows the previous page title as a text button - Compact (class `is-compact`): the back button is an icon button, a divider and the toolbar title are visible When `collapse-anchor` is set, the `is-compact` class is automatically applied as soon as the top of the anchor element reaches this bar's own top edge (the sticky header line). Measuring the bar rather than the page keeps it correct in both nested and root scroll modes; it also re-points at the live scroll target when the page switches mode. Without `collapse-anchor` the bar takes a static state: compact when `text` is set (so the title shows in the title-group), non-compact otherwise (so the `back-text` button stays visible). An anchored bar hides its own title from assistive technology. The anchor is the heading the title swaps in for, so both carry the same words: once you scroll past the heading, a screen reader would otherwise find the same title twice. Sighted readers see one at a time, and this makes that true for everyone. Anchor at the heading, then, and not at some other element that happens to sit at the right height: the bar hands its title over to it. */
3623
3814
  'nldd-top-title-bar': DefineComponent<NLDDTopTitleBarProps>;
3624
3815
  /** 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. */
3625
3816
  'nldd-two-thirds-one-third-section': DefineComponent<NLDDTwoThirdsOneThirdSectionProps>;
3626
- /** Een zwevend venster gebaseerd op het native <dialog>-element. Kan modaal of niet-modaal worden weergegeven. Positioneerbaar via CSS-waarden. Geen eigen header — consumers gebruiken nldd-page met sticky-header binnenin voor een title bar. */
3817
+ 'nldd-validation-item': DefineComponent<NLDDValidationItemProps>;
3818
+ /** 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. */
3819
+ 'nldd-validation-list': DefineComponent<NLDDValidationListProps>;
3820
+ /** A floating window based on the native <dialog> element. Can be shown modal or modeless. Positionable through CSS values. No header of its own: consumers use nldd-page with a sticky header inside for a title bar. */
3627
3821
  'nldd-window': DefineComponent<NLDDWindowProps>;
3628
3822
  }
3629
3823
  }