@nldd/design-system 0.8.80 → 0.8.83

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 (302) hide show
  1. package/custom-elements.json +1138 -71
  2. package/dist/components/actions/button/button.d.ts +5 -0
  3. package/dist/components/actions/button/button.d.ts.map +1 -1
  4. package/dist/components/actions/button/button.js +8 -0
  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 +1 -1
  10. package/dist/components/actions/icon-button/icon-button.js +1 -1
  11. package/dist/components/actions/menu/menu.d.ts +25 -2
  12. package/dist/components/actions/menu/menu.d.ts.map +1 -1
  13. package/dist/components/actions/menu/menu.js +31 -8
  14. package/dist/components/actions/menu/menu.js.map +1 -1
  15. package/dist/components/actions/menu/menu.template.d.ts +1 -1
  16. package/dist/components/actions/menu/menu.template.d.ts.map +1 -1
  17. package/dist/components/actions/menu/menu.template.js +7 -3
  18. package/dist/components/actions/menu/menu.template.js.map +1 -1
  19. package/dist/components/actions/toolbar/toolbar.d.ts +20 -0
  20. package/dist/components/actions/toolbar/toolbar.d.ts.map +1 -1
  21. package/dist/components/actions/toolbar/toolbar.js +54 -0
  22. package/dist/components/actions/toolbar/toolbar.js.map +1 -1
  23. package/dist/components/breakpoints-CkxsiRgH.js +10 -0
  24. package/dist/components/components.js +52643 -117
  25. package/dist/components/content/avatar/avatar.styles.d.ts.map +1 -1
  26. package/dist/components/content/avatar/avatar.styles.js +5 -1
  27. package/dist/components/content/avatar/avatar.styles.js.map +1 -1
  28. package/dist/components/content/icon/icon-aliases.d.ts.map +1 -1
  29. package/dist/components/content/icon/icon-aliases.js +78 -6
  30. package/dist/components/content/icon/icon-aliases.js.map +1 -1
  31. package/dist/components/content/icon/icon-gallery-status.d.ts.map +1 -1
  32. package/dist/components/content/icon/icon-gallery-status.js +63 -92
  33. package/dist/components/content/icon/icon-gallery-status.js.map +1 -1
  34. package/dist/components/content/icon/icon-registry.d.ts.map +1 -1
  35. package/dist/components/content/icon/icon-registry.js +44 -6
  36. package/dist/components/content/icon/icon-registry.js.map +1 -1
  37. package/dist/components/content/icon/icon.d.ts +8 -2
  38. package/dist/components/content/icon/icon.d.ts.map +1 -1
  39. package/dist/components/content/icon/icon.js +17 -2
  40. package/dist/components/content/icon/icon.js.map +1 -1
  41. package/dist/components/content/icon/icon.styles.d.ts.map +1 -1
  42. package/dist/components/content/icon/icon.styles.js +8 -0
  43. package/dist/components/content/icon/icon.styles.js.map +1 -1
  44. package/dist/components/content/text/text.d.ts +50 -0
  45. package/dist/components/content/text/text.d.ts.map +1 -0
  46. package/dist/components/content/text/text.js +81 -0
  47. package/dist/components/content/text/text.js.map +1 -0
  48. package/dist/components/content/text/text.styles.d.ts +2 -0
  49. package/dist/components/content/text/text.styles.d.ts.map +1 -0
  50. package/dist/components/content/text/text.styles.js +116 -0
  51. package/dist/components/content/text/text.styles.js.map +1 -0
  52. package/dist/components/content/text/text.template.d.ts +3 -0
  53. package/dist/components/content/text/text.template.d.ts.map +1 -0
  54. package/dist/components/content/text/text.template.js +7 -0
  55. package/dist/components/content/text/text.template.js.map +1 -0
  56. package/dist/components/content/title/title.styles.d.ts.map +1 -1
  57. package/dist/components/content/title/title.styles.js +9 -13
  58. package/dist/components/content/title/title.styles.js.map +1 -1
  59. package/dist/components/decorate-BKn10QQi.js +9 -0
  60. package/dist/components/dist-BYVOPNHp.js +381 -0
  61. package/dist/components/dist-Bq4xc7Bm.js +624 -0
  62. package/dist/components/dist-C0PiB1dr.js +870 -0
  63. package/dist/components/dist-C400RcFU.js +1498 -0
  64. package/dist/components/dist-CCg5Mso_.js +390 -0
  65. package/dist/components/dist-CJR_Rwhh.js +464 -0
  66. package/dist/components/dist-Ccw7ZfsU.js +18481 -0
  67. package/dist/components/dist-OBifyiJS.js +887 -0
  68. package/dist/components/dist-TpIL8G4G.js +1480 -0
  69. package/dist/components/dist-afrAoubg.js +1181 -0
  70. package/dist/components/dist-bO14jlsr.js +78 -0
  71. package/dist/components/forms/form-field/form-field.d.ts +59 -2
  72. package/dist/components/forms/form-field/form-field.d.ts.map +1 -1
  73. package/dist/components/forms/form-field/form-field.js +120 -35
  74. package/dist/components/forms/form-field/form-field.js.map +1 -1
  75. package/dist/components/gherkin-uCVRxsGf.js +108 -0
  76. package/dist/components/icon-C1Kikpol.js +841 -0
  77. package/dist/components/icon-button-BYy6hnAY.js +1676 -0
  78. package/dist/components/index.d.ts +2 -1
  79. package/dist/components/index.d.ts.map +1 -1
  80. package/dist/components/index.js +2 -1
  81. package/dist/components/index.js.map +1 -1
  82. package/dist/components/input-modality-DhTeUxKi.js +43 -0
  83. package/dist/components/inputs/checkbox/checkbox.d.ts +8 -0
  84. package/dist/components/inputs/checkbox/checkbox.d.ts.map +1 -1
  85. package/dist/components/inputs/checkbox/checkbox.js +10 -0
  86. package/dist/components/inputs/checkbox/checkbox.js.map +1 -1
  87. package/dist/components/inputs/checkbox-field/checkbox-field.d.ts +9 -0
  88. package/dist/components/inputs/checkbox-field/checkbox-field.d.ts.map +1 -1
  89. package/dist/components/inputs/checkbox-field/checkbox-field.js +11 -0
  90. package/dist/components/inputs/checkbox-field/checkbox-field.js.map +1 -1
  91. package/dist/components/inputs/code-editor/code-editor.d.ts +3 -0
  92. package/dist/components/inputs/code-editor/code-editor.d.ts.map +1 -1
  93. package/dist/components/inputs/code-editor/code-editor.js +3 -0
  94. package/dist/components/inputs/code-editor/code-editor.js.map +1 -1
  95. package/dist/components/inputs/combo-box/combo-box.d.ts +8 -0
  96. package/dist/components/inputs/combo-box/combo-box.d.ts.map +1 -1
  97. package/dist/components/inputs/combo-box/combo-box.js +36 -0
  98. package/dist/components/inputs/combo-box/combo-box.js.map +1 -1
  99. package/dist/components/inputs/combo-box/combo-box.styles.d.ts.map +1 -1
  100. package/dist/components/inputs/combo-box/combo-box.styles.js +5 -0
  101. package/dist/components/inputs/combo-box/combo-box.styles.js.map +1 -1
  102. package/dist/components/inputs/combo-box/combo-box.template.d.ts.map +1 -1
  103. package/dist/components/inputs/combo-box/combo-box.template.js +23 -20
  104. package/dist/components/inputs/combo-box/combo-box.template.js.map +1 -1
  105. package/dist/components/inputs/date-field/date-field.d.ts +6 -0
  106. package/dist/components/inputs/date-field/date-field.d.ts.map +1 -1
  107. package/dist/components/inputs/date-field/date-field.js +11 -0
  108. package/dist/components/inputs/date-field/date-field.js.map +1 -1
  109. package/dist/components/inputs/date-field/date-field.template.d.ts.map +1 -1
  110. package/dist/components/inputs/date-field/date-field.template.js +7 -1
  111. package/dist/components/inputs/date-field/date-field.template.js.map +1 -1
  112. package/dist/components/inputs/date-picker/date-picker.d.ts +3 -0
  113. package/dist/components/inputs/date-picker/date-picker.d.ts.map +1 -1
  114. package/dist/components/inputs/date-picker/date-picker.js +4 -1
  115. package/dist/components/inputs/date-picker/date-picker.js.map +1 -1
  116. package/dist/components/inputs/dropdown/dropdown.d.ts +29 -0
  117. package/dist/components/inputs/dropdown/dropdown.d.ts.map +1 -1
  118. package/dist/components/inputs/dropdown/dropdown.js +44 -1
  119. package/dist/components/inputs/dropdown/dropdown.js.map +1 -1
  120. package/dist/components/inputs/file-field/file-field.d.ts +3 -0
  121. package/dist/components/inputs/file-field/file-field.d.ts.map +1 -1
  122. package/dist/components/inputs/file-field/file-field.js +3 -0
  123. package/dist/components/inputs/file-field/file-field.js.map +1 -1
  124. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.d.ts +11 -1
  125. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.d.ts.map +1 -1
  126. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.js +11 -0
  127. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.js.map +1 -1
  128. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.template.d.ts.map +1 -1
  129. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.template.js +2 -0
  130. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.template.js.map +1 -1
  131. package/dist/components/inputs/number-field/number-field.d.ts +9 -0
  132. package/dist/components/inputs/number-field/number-field.d.ts.map +1 -1
  133. package/dist/components/inputs/number-field/number-field.js +12 -0
  134. package/dist/components/inputs/number-field/number-field.js.map +1 -1
  135. package/dist/components/inputs/number-field/number-field.template.d.ts.map +1 -1
  136. package/dist/components/inputs/number-field/number-field.template.js +1 -0
  137. package/dist/components/inputs/number-field/number-field.template.js.map +1 -1
  138. package/dist/components/inputs/password-field/password-field.d.ts +9 -0
  139. package/dist/components/inputs/password-field/password-field.d.ts.map +1 -1
  140. package/dist/components/inputs/password-field/password-field.js +12 -0
  141. package/dist/components/inputs/password-field/password-field.js.map +1 -1
  142. package/dist/components/inputs/password-field/password-field.template.d.ts.map +1 -1
  143. package/dist/components/inputs/password-field/password-field.template.js +1 -0
  144. package/dist/components/inputs/password-field/password-field.template.js.map +1 -1
  145. package/dist/components/inputs/radio-button/radio-button.d.ts +8 -0
  146. package/dist/components/inputs/radio-button/radio-button.d.ts.map +1 -1
  147. package/dist/components/inputs/radio-button/radio-button.js +10 -0
  148. package/dist/components/inputs/radio-button/radio-button.js.map +1 -1
  149. package/dist/components/inputs/radio-button-field/radio-button-field.d.ts +9 -0
  150. package/dist/components/inputs/radio-button-field/radio-button-field.d.ts.map +1 -1
  151. package/dist/components/inputs/radio-button-field/radio-button-field.js +11 -0
  152. package/dist/components/inputs/radio-button-field/radio-button-field.js.map +1 -1
  153. package/dist/components/inputs/radio-button-group/radio-button-group.d.ts +16 -0
  154. package/dist/components/inputs/radio-button-group/radio-button-group.d.ts.map +1 -1
  155. package/dist/components/inputs/radio-button-group/radio-button-group.js +33 -0
  156. package/dist/components/inputs/radio-button-group/radio-button-group.js.map +1 -1
  157. package/dist/components/inputs/search-field/search-field.d.ts +6 -0
  158. package/dist/components/inputs/search-field/search-field.d.ts.map +1 -1
  159. package/dist/components/inputs/search-field/search-field.js +6 -0
  160. package/dist/components/inputs/search-field/search-field.js.map +1 -1
  161. package/dist/components/inputs/segmented-control/segmented-control.d.ts +16 -0
  162. package/dist/components/inputs/segmented-control/segmented-control.d.ts.map +1 -1
  163. package/dist/components/inputs/segmented-control/segmented-control.js +26 -7
  164. package/dist/components/inputs/segmented-control/segmented-control.js.map +1 -1
  165. package/dist/components/inputs/stepper/stepper.d.ts +17 -0
  166. package/dist/components/inputs/stepper/stepper.d.ts.map +1 -1
  167. package/dist/components/inputs/stepper/stepper.js +22 -0
  168. package/dist/components/inputs/stepper/stepper.js.map +1 -1
  169. package/dist/components/inputs/stepper/stepper.template.js +1 -1
  170. package/dist/components/inputs/stepper/stepper.template.js.map +1 -1
  171. package/dist/components/inputs/switch/switch.d.ts +3 -0
  172. package/dist/components/inputs/switch/switch.d.ts.map +1 -1
  173. package/dist/components/inputs/switch/switch.js +3 -0
  174. package/dist/components/inputs/switch/switch.js.map +1 -1
  175. package/dist/components/inputs/switch-field/switch-field.d.ts +3 -0
  176. package/dist/components/inputs/switch-field/switch-field.d.ts.map +1 -1
  177. package/dist/components/inputs/switch-field/switch-field.js +3 -0
  178. package/dist/components/inputs/switch-field/switch-field.js.map +1 -1
  179. package/dist/components/inputs/text-editor/text-editor.d.ts +3 -0
  180. package/dist/components/inputs/text-editor/text-editor.d.ts.map +1 -1
  181. package/dist/components/inputs/text-editor/text-editor.js +4 -1
  182. package/dist/components/inputs/text-editor/text-editor.js.map +1 -1
  183. package/dist/components/inputs/text-field/text-field.d.ts +30 -0
  184. package/dist/components/inputs/text-field/text-field.d.ts.map +1 -1
  185. package/dist/components/inputs/text-field/text-field.js +60 -0
  186. package/dist/components/inputs/text-field/text-field.js.map +1 -1
  187. package/dist/components/inputs/text-field/text-field.template.d.ts.map +1 -1
  188. package/dist/components/inputs/text-field/text-field.template.js +3 -0
  189. package/dist/components/inputs/text-field/text-field.template.js.map +1 -1
  190. package/dist/components/inputs/time-field/time-field.d.ts +6 -0
  191. package/dist/components/inputs/time-field/time-field.d.ts.map +1 -1
  192. package/dist/components/inputs/time-field/time-field.js +11 -0
  193. package/dist/components/inputs/time-field/time-field.js.map +1 -1
  194. package/dist/components/inputs/time-field/time-field.template.d.ts.map +1 -1
  195. package/dist/components/inputs/time-field/time-field.template.js +7 -1
  196. package/dist/components/inputs/time-field/time-field.template.js.map +1 -1
  197. package/dist/components/inputs/time-picker/time-picker.d.ts +3 -0
  198. package/dist/components/inputs/time-picker/time-picker.d.ts.map +1 -1
  199. package/dist/components/inputs/time-picker/time-picker.js +4 -1
  200. package/dist/components/inputs/time-picker/time-picker.js.map +1 -1
  201. package/dist/components/inputs/toggle-button/toggle-button.d.ts +10 -0
  202. package/dist/components/inputs/toggle-button/toggle-button.d.ts.map +1 -1
  203. package/dist/components/inputs/toggle-button/toggle-button.js +14 -0
  204. package/dist/components/inputs/toggle-button/toggle-button.js.map +1 -1
  205. package/dist/components/inputs/toggle-button-group/toggle-button-group.d.ts +11 -0
  206. package/dist/components/inputs/toggle-button-group/toggle-button-group.d.ts.map +1 -1
  207. package/dist/components/inputs/toggle-button-group/toggle-button-group.js +16 -6
  208. package/dist/components/inputs/toggle-button-group/toggle-button-group.js.map +1 -1
  209. package/dist/components/inputs/token-field/token-field.d.ts +6 -0
  210. package/dist/components/inputs/token-field/token-field.d.ts.map +1 -1
  211. package/dist/components/inputs/token-field/token-field.js +13 -0
  212. package/dist/components/inputs/token-field/token-field.js.map +1 -1
  213. package/dist/components/layout/box/box.d.ts +3 -3
  214. package/dist/components/layout/box/box.d.ts.map +1 -1
  215. package/dist/components/layout/box/box.js +3 -3
  216. package/dist/components/layout/box/box.js.map +1 -1
  217. package/dist/components/layout/box/box.styles.d.ts.map +1 -1
  218. package/dist/components/layout/box/box.styles.js +3 -6
  219. package/dist/components/layout/box/box.styles.js.map +1 -1
  220. package/dist/components/layout/sheet/sheet.styles.d.ts.map +1 -1
  221. package/dist/components/layout/sheet/sheet.styles.js +10 -3
  222. package/dist/components/layout/sheet/sheet.styles.js.map +1 -1
  223. package/dist/components/lists-and-tables/list/list.d.ts +60 -45
  224. package/dist/components/lists-and-tables/list/list.d.ts.map +1 -1
  225. package/dist/components/lists-and-tables/list/list.js +94 -80
  226. package/dist/components/lists-and-tables/list/list.js.map +1 -1
  227. package/dist/components/lists-and-tables/list-item/list-item.d.ts +94 -21
  228. package/dist/components/lists-and-tables/list-item/list-item.d.ts.map +1 -1
  229. package/dist/components/lists-and-tables/list-item/list-item.js +275 -48
  230. package/dist/components/lists-and-tables/list-item/list-item.js.map +1 -1
  231. package/dist/components/lists-and-tables/list-item/list-item.styles.d.ts.map +1 -1
  232. package/dist/components/lists-and-tables/list-item/list-item.styles.js +116 -34
  233. package/dist/components/lists-and-tables/list-item/list-item.styles.js.map +1 -1
  234. package/dist/components/lists-and-tables/list-item/list-item.template.d.ts +1 -1
  235. package/dist/components/lists-and-tables/list-item/list-item.template.d.ts.map +1 -1
  236. package/dist/components/lists-and-tables/list-item/list-item.template.js +5 -2
  237. package/dist/components/lists-and-tables/list-item/list-item.template.js.map +1 -1
  238. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.d.ts +116 -0
  239. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.d.ts.map +1 -0
  240. package/dist/components/lists-and-tables/{list-item-action/list-item-action.js → list-item-segment/list-item-segment.js} +77 -52
  241. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.js.map +1 -0
  242. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.d.ts +2 -0
  243. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.d.ts.map +1 -0
  244. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.js +179 -0
  245. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.styles.js.map +1 -0
  246. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.d.ts +3 -0
  247. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.d.ts.map +1 -0
  248. package/dist/components/lists-and-tables/{list-item-action/list-item-action.template.js → list-item-segment/list-item-segment.template.js} +5 -4
  249. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.js.map +1 -0
  250. package/dist/components/reflect-non-default-OLaK60rT.js +37 -0
  251. package/dist/components/rolldown-runtime-D7D4PA-g.js +13 -0
  252. package/dist/components/shadow-resets-aG-rgyNQ.js +61 -0
  253. package/dist/components/shell-C61GCsJA.js +223 -0
  254. package/dist/components/status-and-feedback/badge/badge.d.ts +8 -2
  255. package/dist/components/status-and-feedback/badge/badge.d.ts.map +1 -1
  256. package/dist/components/status-and-feedback/badge/badge.js +17 -1
  257. package/dist/components/status-and-feedback/badge/badge.js.map +1 -1
  258. package/dist/components/status-and-feedback/badge/badge.styles.d.ts.map +1 -1
  259. package/dist/components/status-and-feedback/badge/badge.styles.js +35 -6
  260. package/dist/components/status-and-feedback/badge/badge.styles.js.map +1 -1
  261. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.d.ts.map +1 -1
  262. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.js +7 -0
  263. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.js.map +1 -1
  264. package/dist/components/toml-C2HBbPgG.js +59 -0
  265. package/dist/components/visibility-mixin-GxbwkBb1.js +104 -0
  266. package/dist/components/with-translations-DzAdFTK8.js +48 -0
  267. package/dist/css/variables.css +25 -1
  268. package/dist/nldd.min.js +2797 -2355
  269. package/dist/types/vue.d.ts +106 -48
  270. package/dist/utilities/implicit-submission.d.ts +31 -0
  271. package/dist/utilities/implicit-submission.d.ts.map +1 -0
  272. package/dist/utilities/implicit-submission.js +65 -0
  273. package/dist/utilities/implicit-submission.js.map +1 -0
  274. package/dist/utilities/owned-attribute.d.ts +19 -0
  275. package/dist/utilities/owned-attribute.d.ts.map +1 -0
  276. package/dist/utilities/owned-attribute.js +32 -0
  277. package/dist/utilities/owned-attribute.js.map +1 -0
  278. package/dist/utilities/scroll-mode-controller.d.ts +9 -1
  279. package/dist/utilities/scroll-mode-controller.d.ts.map +1 -1
  280. package/dist/utilities/scroll-mode-controller.js +10 -2
  281. package/dist/utilities/scroll-mode-controller.js.map +1 -1
  282. package/package.json +10 -6
  283. package/dist/components/gherkin-DhZlEZiy.js +0 -115
  284. package/dist/components/index-8pDDdMeW.js +0 -384
  285. package/dist/components/index-C7QocEcT.js +0 -81
  286. package/dist/components/index-CDz7-C9c.js +0 -177
  287. package/dist/components/index-CWQunWUb.js +0 -75039
  288. package/dist/components/index-CoY3JfIy.js +0 -688
  289. package/dist/components/index-DP9dl7P7.js +0 -703
  290. package/dist/components/index-DV_2YpaH.js +0 -405
  291. package/dist/components/lists-and-tables/list-item-action/list-item-action.d.ts +0 -108
  292. package/dist/components/lists-and-tables/list-item-action/list-item-action.d.ts.map +0 -1
  293. package/dist/components/lists-and-tables/list-item-action/list-item-action.js.map +0 -1
  294. package/dist/components/lists-and-tables/list-item-action/list-item-action.styles.d.ts +0 -2
  295. package/dist/components/lists-and-tables/list-item-action/list-item-action.styles.d.ts.map +0 -1
  296. package/dist/components/lists-and-tables/list-item-action/list-item-action.styles.js +0 -145
  297. package/dist/components/lists-and-tables/list-item-action/list-item-action.styles.js.map +0 -1
  298. package/dist/components/lists-and-tables/list-item-action/list-item-action.template.d.ts +0 -3
  299. package/dist/components/lists-and-tables/list-item-action/list-item-action.template.d.ts.map +0 -1
  300. package/dist/components/lists-and-tables/list-item-action/list-item-action.template.js.map +0 -1
  301. package/dist/components/shell-BlsXDxCn.js +0 -222
  302. package/dist/components/toml-BOuWGMcf.js +0 -76
@@ -62,7 +62,7 @@ import type { NLDDKeyboardShortcut } from '@nldd/design-system/keyboard-shortcut
62
62
  import type { NLDDLink } from '@nldd/design-system/link';
63
63
  import type { NLDDList } from '@nldd/design-system/list';
64
64
  import type { NLDDListItem } from '@nldd/design-system/list-item';
65
- import type { NLDDListItemAction } from '@nldd/design-system/list-item-action';
65
+ import type { NLDDListItemSegment } from '@nldd/design-system/list-item-segment';
66
66
  import type { NLDDMenu } from '@nldd/design-system/menu';
67
67
  import type { NLDDMenuBar } from '@nldd/design-system/menu-bar';
68
68
  import type { NLDDMenuBarItem } from '@nldd/design-system/menu-bar-item';
@@ -116,6 +116,7 @@ import type { NLDDTabBarItem } from '@nldd/design-system/tab-bar';
116
116
  import type { NLDDTable } from '@nldd/design-system/table';
117
117
  import type { NLDDTableRow } from '@nldd/design-system/table';
118
118
  import type { NLDDTag } from '@nldd/design-system/tag';
119
+ import type { NLDDText } from '@nldd/design-system/text';
119
120
  import type { NLDDTextCell } from '@nldd/design-system/text-cell';
120
121
  import type { NLDDTextEditor } from '@nldd/design-system/text-editor';
121
122
  import type { NLDDTextField } from '@nldd/design-system/text-field';
@@ -228,8 +229,12 @@ declare module 'vue' {
228
229
  type NLDDBadgeProps = {
229
230
  /** Size: 'sm' | 'md' (default: 'md') */
230
231
  'size'?: NLDDBadge['size'];
231
- /** Semantic ('critical' | 'accent' | 'neutral' | 'warning' | 'success') or a Rijkshuisstijl color ('lintblauw' | 'hemelblauw' | 'oranje' | …). Default: 'critical' */
232
+ /** 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
233
  'color'?: NLDDBadge['color'];
234
+ /** 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. */
235
+ 'custom-color'?: NLDDBadge['customColor'];
236
+ /** 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. */
237
+ 'customColor'?: NLDDBadge['customColor'];
233
238
  /** 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
239
  'pulse'?: NLDDBadge['pulse'];
235
240
  /** Text (takes precedence over number) */
@@ -285,8 +290,8 @@ declare module 'vue' {
285
290
  };
286
291
 
287
292
  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'];
293
+ /** 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 — 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. */
294
+ 'background'?: NLDDBox['background'];
290
295
  };
291
296
 
292
297
  type NLDDBreadcrumbsProps = {
@@ -322,6 +327,10 @@ declare module 'vue' {
322
327
  'max-width'?: NLDDButton['maxWidth'];
323
328
  /** 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
329
  'maxWidth'?: NLDDButton['maxWidth'];
330
+ /** 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. */
331
+ 'no-tab'?: NLDDButton['noTab'];
332
+ /** 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. */
333
+ 'noTab'?: NLDDButton['noTab'];
325
334
  /** Whether the button has a icon to indicate it opens a menu or popover */
326
335
  'expandable'?: NLDDButton['expandable'];
327
336
  /** 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. */
@@ -588,6 +597,8 @@ declare module 'vue' {
588
597
  'invalid'?: NLDDComboBox['invalid'];
589
598
  /** Disabled state */
590
599
  'disabled'?: NLDDComboBox['disabled'];
600
+ /** 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. */
601
+ 'readonly'?: NLDDComboBox['readonly'];
591
602
  /** Allow committing free-typed values that match no option (Enter/blur). Default false: only menu options are accepted. */
592
603
  'allow-custom'?: NLDDComboBox['allowCustom'];
593
604
  /** Allow committing free-typed values that match no option (Enter/blur). Default false: only menu options are accepted. */
@@ -965,6 +976,10 @@ declare module 'vue' {
965
976
  'expanded'?: NLDDDropdown['expanded'];
966
977
  /** Optional fixed width (any CSS length, e.g. "240px"). Default: stretches to fill container. */
967
978
  'width'?: NLDDDropdown['width'];
979
+ /** Accessible name, forwarded as aria-label to the slotted select */
980
+ 'accessible-label'?: NLDDDropdown['accessibleLabel'];
981
+ /** Accessible name, forwarded as aria-label to the slotted select */
982
+ 'accessibleLabel'?: NLDDDropdown['accessibleLabel'];
968
983
  /** Bubbles up from the slotted select; detail: { value: string } */
969
984
  'onChange'?: (event: CustomEvent) => void;
970
985
  };
@@ -1179,6 +1194,10 @@ declare module 'vue' {
1179
1194
  'size'?: NLDDIcon['size'];
1180
1195
  /** 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. */
1181
1196
  'color'?: NLDDIcon['color'];
1197
+ /** 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`. */
1198
+ 'custom-color'?: NLDDIcon['customColor'];
1199
+ /** 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`. */
1200
+ 'customColor'?: NLDDIcon['customColor'];
1182
1201
  };
1183
1202
 
1184
1203
  type NLDDIconButtonProps = {
@@ -1204,9 +1223,9 @@ declare module 'vue' {
1204
1223
  'expandable'?: NLDDIconButton['expandable'];
1205
1224
  /** 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. */
1206
1225
  'expanded'?: NLDDIconButton['expanded'];
1207
- /** 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. */
1226
+ /** 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. */
1208
1227
  'no-tab'?: NLDDIconButton['noTab'];
1209
- /** 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. */
1228
+ /** 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. */
1210
1229
  'noTab'?: NLDDIconButton['noTab'];
1211
1230
  /** 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. */
1212
1231
  'popup-type'?: NLDDIconButton['popupType'];
@@ -1439,14 +1458,10 @@ declare module 'vue' {
1439
1458
  'variant'?: NLDDList['variant'];
1440
1459
  /** A11y role and behavior (default 'list'). See the docblock above. */
1441
1460
  'type'?: NLDDList['type'];
1442
- /** Enables drag-to-reorder and pushes `reorderable` onto the items. Only valid with `type="list"`; wins over `arrow-navigation` when both are set. */
1461
+ /** Enables drag-to-reorder and pushes `reorderable` onto the items. Only valid with `type="list"`; there the arrow keys move rows instead of focus. */
1443
1462
  'reorderable'?: NLDDList['reorderable'];
1444
1463
  /** 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 */
1445
1464
  'dividers'?: NLDDList['dividers'];
1446
- /** 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. */
1447
- 'arrow-navigation'?: NLDDList['arrowNavigation'];
1448
- /** 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. */
1449
- 'arrowNavigation'?: NLDDList['arrowNavigation'];
1450
1465
  /** Listbox only: caps the options' scroll region at this CSS length (e.g. '320px'). Unset means no cap. */
1451
1466
  'height'?: NLDDList['height'];
1452
1467
  /** Text for the default empty-state dialog (falls back to the Dutch i18n default). Ignored when `[slot=empty]` is filled. */
@@ -1472,17 +1487,21 @@ declare module 'vue' {
1472
1487
  type NLDDListItemProps = {
1473
1488
  /** 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. */
1474
1489
  'size'?: NLDDListItem['size'];
1475
- /** 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`. */
1490
+ /** 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`. */
1476
1491
  'selected'?: NLDDListItem['selected'];
1477
- /** Renders the item as a `<button>`; ignored when `href` is set (a link wins) */
1492
+ /** 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. */
1493
+ 'current'?: NLDDListItem['current'];
1494
+ /** Renders the item as a `<button>`. Last of the three: `href` and `checkbox` both win over it. */
1478
1495
  'button'?: NLDDListItem['button'];
1479
- /** Makes the whole row a `role="checkbox"` control; ignored when `href` is set */
1496
+ /** Makes the whole row a `role="checkbox"` control. Wins over `button`, loses to `href`. */
1480
1497
  'checkbox'?: NLDDListItem['checkbox'];
1481
1498
  /** Checked state of a `checkbox` row; the item toggles it on activation */
1482
1499
  'checked'?: NLDDListItem['checked'];
1483
- /** 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. */
1500
+ /** 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. */
1501
+ 'disabled'?: NLDDListItem['disabled'];
1502
+ /** 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. */
1484
1503
  'expanded'?: NLDDListItem['expanded'];
1485
- /** Renders the item as an `<a>` with this URL. Takes precedence over `button`; without either the item is a plain container with no action. */
1504
+ /** 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. */
1486
1505
  'href'?: NLDDListItem['href'];
1487
1506
  /** 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. */
1488
1507
  'target'?: NLDDListItem['target'];
@@ -1499,34 +1518,34 @@ declare module 'vue' {
1499
1518
  'onChange'?: (event: CustomEvent) => void;
1500
1519
  };
1501
1520
 
1502
- type NLDDListItemActionProps = {
1503
- /** Renders the segmented action as a `<button>`; ignored when `href` is set */
1504
- 'button'?: NLDDListItemAction['button'];
1505
- /** Renders the segmented action as an `<a>` with this URL; wins over `button` and `checkbox` */
1506
- 'href'?: NLDDListItemAction['href'];
1521
+ type NLDDListItemSegmentProps = {
1522
+ /** Renders the segment as a `<button>`. Last of the three: `href` and `checkbox` both win over it. */
1523
+ 'button'?: NLDDListItemSegment['button'];
1524
+ /** Renders the segment as an `<a>` with this URL. Wins over `checkbox` and `button`. */
1525
+ 'href'?: NLDDListItemSegment['href'];
1507
1526
  /** Link target forwarded to the `<a>`; only applies with `href` */
1508
- 'target'?: NLDDListItemAction['target'];
1527
+ 'target'?: NLDDListItemSegment['target'];
1509
1528
  /** Link rel forwarded to the `<a>`; only applies with `href` */
1510
- 'rel'?: NLDDListItemAction['rel'];
1511
- /** Makes the segmented action a `role="checkbox"` control; ignored when `href` is set */
1512
- 'checkbox'?: NLDDListItemAction['checkbox'];
1513
- /** Checked state of a `checkbox` action; it toggles on activation */
1514
- 'checked'?: NLDDListItemAction['checked'];
1515
- /** 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. */
1516
- 'expanded'?: NLDDListItemAction['expanded'];
1517
- /** 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 */
1518
- 'disclosure'?: NLDDListItemAction['disclosure'];
1519
- /** Marks the segmented action as the current page (`aria-current="page"`) */
1520
- 'current'?: NLDDListItemAction['current'];
1521
- /** Disabled state; only applies to button and checkbox segmented actions */
1522
- 'disabled'?: NLDDListItemAction['disabled'];
1523
- /** `full` lets the segmented action grow to fill the row (default: 'fit-content') */
1524
- 'width'?: NLDDListItemAction['width'];
1525
- /** 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. */
1526
- 'accessible-label'?: NLDDListItemAction['accessibleLabel'];
1527
- /** 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. */
1528
- 'accessibleLabel'?: NLDDListItemAction['accessibleLabel'];
1529
- /** On a `checkbox` action after it toggles; detail: { checked: boolean } */
1529
+ 'rel'?: NLDDListItemSegment['rel'];
1530
+ /** Makes the segment a `role="checkbox"` control. Wins over `button`, loses to `href`. */
1531
+ 'checkbox'?: NLDDListItemSegment['checkbox'];
1532
+ /** Checked state of a `checkbox` segment; it toggles on activation */
1533
+ 'checked'?: NLDDListItemSegment['checked'];
1534
+ /** 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. */
1535
+ 'expanded'?: NLDDListItemSegment['expanded'];
1536
+ /** 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 */
1537
+ 'disclosure'?: NLDDListItemSegment['disclosure'];
1538
+ /** 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. */
1539
+ 'current'?: NLDDListItemSegment['current'];
1540
+ /** 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. */
1541
+ 'disabled'?: NLDDListItemSegment['disabled'];
1542
+ /** `full` lets the segment grow to fill the row (default: 'fit-content') */
1543
+ 'width'?: NLDDListItemSegment['width'];
1544
+ /** Accessible name for the control. Set it when the segment holds only an icon, or when the cell text does not describe the action. */
1545
+ 'accessible-label'?: NLDDListItemSegment['accessibleLabel'];
1546
+ /** Accessible name for the control. Set it when the segment holds only an icon, or when the cell text does not describe the action. */
1547
+ 'accessibleLabel'?: NLDDListItemSegment['accessibleLabel'];
1548
+ /** On a `checkbox` segment after it toggles; detail: { checked: boolean } */
1530
1549
  'onChange'?: (event: CustomEvent) => void;
1531
1550
  };
1532
1551
 
@@ -1661,7 +1680,7 @@ declare module 'vue' {
1661
1680
  'shortcutWindows'?: NLDDMenuItem['shortcutWindows'];
1662
1681
  'shortcut-linux'?: NLDDMenuItem['shortcutLinux'];
1663
1682
  'shortcutLinux'?: NLDDMenuItem['shortcutLinux'];
1664
- /** Set by nldd-menu. Not part of the public API. */
1683
+ /** Which menu owns this item, set by that nldd-menu. Not part of the public API. `null` until one claims it, and an unclaimed item carries no menu role. A menu role is a promise about what is around you, so an item cannot make it on its own. `nldd-toolbar-item` holds exactly such an item: the declaration of what belongs in the overflow menu, which the toolbar clones into the real menu when it collapses. The clone is claimed there and the declaration stays what it is. */
1665
1684
  'menuVariant'?: NLDDMenuItem['menuVariant'];
1666
1685
  'onMenuItemFocused'?: (event: CustomEvent) => void;
1667
1686
  'onSubmenuOpen'?: (event: CustomEvent) => void;
@@ -1715,6 +1734,12 @@ declare module 'vue' {
1715
1734
  'required'?: NLDDMultiLineTextField['required'];
1716
1735
  /** Autocomplete hint */
1717
1736
  'autocomplete'?: NLDDMultiLineTextField['autocomplete'];
1737
+ /** 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. */
1738
+ 'keyboard'?: NLDDMultiLineTextField['keyboard'];
1739
+ /** 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. */
1740
+ 'enter-key'?: NLDDMultiLineTextField['enterKey'];
1741
+ /** 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. */
1742
+ 'enterKey'?: NLDDMultiLineTextField['enterKey'];
1718
1743
  /** Initial visible rows (minimum height). Default: 3. */
1719
1744
  'rows'?: NLDDMultiLineTextField['rows'];
1720
1745
  /** 'none' | 'vertical' | 'auto' (default). 'auto' grows with content (native field-sizing), no manual handle. */
@@ -2199,6 +2224,10 @@ declare module 'vue' {
2199
2224
  'disabled'?: NLDDRadioButtonGroup['disabled'];
2200
2225
  /** Marks the group as required */
2201
2226
  'required'?: NLDDRadioButtonGroup['required'];
2227
+ /** Accessible name for the group, set as aria-label on the group */
2228
+ 'accessible-label'?: NLDDRadioButtonGroup['accessibleLabel'];
2229
+ /** Accessible name for the group, set as aria-label on the group */
2230
+ 'accessibleLabel'?: NLDDRadioButtonGroup['accessibleLabel'];
2202
2231
  /** Id of an external label element, set as aria-labelledby on the group */
2203
2232
  'accessible-labeled-by'?: NLDDRadioButtonGroup['accessibleLabeledBy'];
2204
2233
  /** Id of an external label element, set as aria-labelledby on the group */
@@ -2595,6 +2624,10 @@ declare module 'vue' {
2595
2624
  'size'?: NLDDStepper['size'];
2596
2625
  /** Name for form submission; the value is submitted under this name */
2597
2626
  'name'?: NLDDStepper['name'];
2627
+ /** Accessible name for the spinbutton; falls back to a generic label */
2628
+ 'accessible-label'?: NLDDStepper['accessibleLabel'];
2629
+ /** Accessible name for the spinbutton; falls back to a generic label */
2630
+ 'accessibleLabel'?: NLDDStepper['accessibleLabel'];
2598
2631
  /** Translations; unspecified keys fall back to Dutch */
2599
2632
  'translations'?: NLDDStepper['translations'];
2600
2633
  'internals'?: NLDDStepper['internals'];
@@ -2730,6 +2763,23 @@ declare module 'vue' {
2730
2763
  'accessibleLabel'?: NLDDTag['accessibleLabel'];
2731
2764
  };
2732
2765
 
2766
+ type NLDDTextProps = {
2767
+ /** Text size on the body scale: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' (default: 'md') */
2768
+ 'size'?: NLDDText['size'];
2769
+ /** Font weight: 'regular' | 'medium' | 'bold' (default: 'regular'). With 'bold' a slotted `<strong>` no longer stands out: there is nothing bolder in the scale. */
2770
+ 'weight'?: NLDDText['weight'];
2771
+ /** Line height: 'flat' | 'tight' | 'snug' | 'loose' (default: 'snug') */
2772
+ 'line-height'?: NLDDText['lineHeight'];
2773
+ /** Line height: 'flat' | 'tight' | 'snug' | 'loose' (default: 'snug') */
2774
+ 'lineHeight'?: NLDDText['lineHeight'];
2775
+ /** 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. */
2776
+ 'color'?: NLDDText['color'];
2777
+ /** Alignment of the text within the block: 'left' | 'center' | 'right' (default: 'left'). Aligns the words; `horizontal-alignment` on nldd-container moves the box. */
2778
+ 'horizontal-alignment'?: NLDDText['horizontalAlignment'];
2779
+ /** Alignment of the text within the block: 'left' | 'center' | 'right' (default: 'left'). Aligns the words; `horizontal-alignment` on nldd-container moves the box. */
2780
+ 'horizontalAlignment'?: NLDDText['horizontalAlignment'];
2781
+ };
2782
+
2733
2783
  type NLDDTextCellProps = {
2734
2784
  /** Cell size: 'sm' | 'md' (default: 'md') */
2735
2785
  'size'?: NLDDTextCell['size'];
@@ -2846,6 +2896,12 @@ declare module 'vue' {
2846
2896
  'disabled'?: NLDDTextField['disabled'];
2847
2897
  /** Input type: 'text' | 'email' | 'tel' | 'url' */
2848
2898
  'type'?: NLDDTextField['type'];
2899
+ /** 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`. */
2900
+ 'keyboard'?: NLDDTextField['keyboard'];
2901
+ /** 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. */
2902
+ 'enter-key'?: NLDDTextField['enterKey'];
2903
+ /** 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. */
2904
+ 'enterKey'?: NLDDTextField['enterKey'];
2849
2905
  /** Input name for form submission */
2850
2906
  'name'?: NLDDTextField['name'];
2851
2907
  /** Readonly state */
@@ -3454,7 +3510,7 @@ declare module 'vue' {
3454
3510
  'nldd-full-bleed-section': DefineComponent<NLDDFullBleedSectionProps>;
3455
3511
  /** 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. */
3456
3512
  'nldd-hero': DefineComponent<NLDDHeroProps>;
3457
- /** 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. */
3513
+ /** 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. */
3458
3514
  'nldd-icon': DefineComponent<NLDDIconProps>;
3459
3515
  'nldd-icon-button': DefineComponent<NLDDIconButtonProps>;
3460
3516
  /** 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. */
@@ -3471,12 +3527,12 @@ declare module 'vue' {
3471
3527
  'nldd-keyboard-shortcut': DefineComponent<NLDDKeyboardShortcutProps>;
3472
3528
  /** 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. */
3473
3529
  'nldd-link': DefineComponent<NLDDLinkProps>;
3474
- /** 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. */
3530
+ /** 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. Every list 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. - 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). Arrows move focus only; selection stays consumer-managed. Two types answer differently, and both say so on screen before you touch a key: a listbox runs its keyboard from its search field, and a reorderable list moves rows with the arrows. 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. */
3475
3531
  'nldd-list': DefineComponent<NLDDListProps>;
3476
- /** 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`). */
3532
+ /** 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`). */
3477
3533
  'nldd-list-item': DefineComponent<NLDDListItemProps>;
3478
- /** 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. */
3479
- 'nldd-list-item-action': DefineComponent<NLDDListItemActionProps>;
3534
+ /** 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. */
3535
+ 'nldd-list-item-segment': DefineComponent<NLDDListItemSegmentProps>;
3480
3536
  /** 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. */
3481
3537
  'nldd-menu': DefineComponent<NLDDMenuProps>;
3482
3538
  /** 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. */
@@ -3577,6 +3633,8 @@ declare module 'vue' {
3577
3633
  'nldd-table-row': DefineComponent<NLDDTableRowProps>;
3578
3634
  /** 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`. */
3579
3635
  'nldd-tag': DefineComponent<NLDDTagProps>;
3636
+ /** 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. */
3637
+ 'nldd-text': DefineComponent<NLDDTextProps>;
3580
3638
  /** 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. */
3581
3639
  'nldd-text-cell': DefineComponent<NLDDTextCellProps>;
3582
3640
  /** 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. */
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Enter in a single-line field submits the form it belongs to.
3
+ *
4
+ * The browser does this by itself and calls it implicit submission, but only
5
+ * for a control that has a form owner. The real `<input>` of an nldd field
6
+ * lives in a shadow root, and form ownership does not cross that boundary:
7
+ * `input.form` is null, so the browser has no form to submit and nothing
8
+ * happens. The component is form-associated through ElementInternals, which
9
+ * does know the form, so the behavior is handed back over that connection. It
10
+ * mirrors what `nldd-button type="submit"` already does from the other side.
11
+ */
12
+ /**
13
+ * Submits the form this field belongs to, under the same conditions the browser
14
+ * uses.
15
+ *
16
+ * Does nothing when something already handled the Enter. A component that owns
17
+ * the key calls `preventDefault` when it acts on it and leaves it alone when it
18
+ * does not, so an open date picker keeps its Enter and a token field that
19
+ * commits nothing lets the form through.
20
+ *
21
+ * Without a submit button the specification submits only when the form holds a
22
+ * single field that blocks implicit submission. Reproducing that rule matters
23
+ * more than it looks: an Enter that behaves differently inside this design
24
+ * system than outside it is worse than one that does nothing.
25
+ *
26
+ * @returns whether the form was submitted, so a caller can tell.
27
+ */
28
+ export declare function submitOnEnter(host: HTMLElement & {
29
+ internals: ElementInternals;
30
+ }, event: KeyboardEvent): boolean;
31
+ //# sourceMappingURL=implicit-submission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"implicit-submission.d.ts","sourceRoot":"","sources":["../../src/utilities/implicit-submission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA0BH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAC5B,IAAI,EAAE,WAAW,GAAG;IAAE,SAAS,EAAE,gBAAgB,CAAA;CAAE,EACnD,KAAK,EAAE,aAAa,GAClB,OAAO,CAcT"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Enter in a single-line field submits the form it belongs to.
3
+ *
4
+ * The browser does this by itself and calls it implicit submission, but only
5
+ * for a control that has a form owner. The real `<input>` of an nldd field
6
+ * lives in a shadow root, and form ownership does not cross that boundary:
7
+ * `input.form` is null, so the browser has no form to submit and nothing
8
+ * happens. The component is form-associated through ElementInternals, which
9
+ * does know the form, so the behavior is handed back over that connection. It
10
+ * mirrors what `nldd-button type="submit"` already does from the other side.
11
+ */
12
+ /** Input types that block implicit submission, per the HTML specification. */
13
+ const BLOCKING_INPUT_TYPES = new Set([
14
+ 'text', 'search', 'url', 'tel', 'email', 'password',
15
+ 'date', 'month', 'week', 'time', 'datetime-local', 'number',
16
+ ]);
17
+ /**
18
+ * Whether this control counts for the "more than one field" rule below. Native
19
+ * inputs are classified by type, the way the specification does it; an nldd
20
+ * field says so itself with `static blocksImplicitSubmission = true`.
21
+ */
22
+ function blocksImplicitSubmission(el) {
23
+ if (el instanceof HTMLInputElement)
24
+ return BLOCKING_INPUT_TYPES.has(el.type);
25
+ return el.constructor.blocksImplicitSubmission === true;
26
+ }
27
+ /**
28
+ * The button the browser would press. A `<button>` without a type is a submit
29
+ * button, and `nldd-button type="submit"` carries the same attribute.
30
+ */
31
+ function hasDefaultButton(form) {
32
+ return form.querySelector('button:not([type]), [type="submit"], [type="image"]') !== null;
33
+ }
34
+ /**
35
+ * Submits the form this field belongs to, under the same conditions the browser
36
+ * uses.
37
+ *
38
+ * Does nothing when something already handled the Enter. A component that owns
39
+ * the key calls `preventDefault` when it acts on it and leaves it alone when it
40
+ * does not, so an open date picker keeps its Enter and a token field that
41
+ * commits nothing lets the form through.
42
+ *
43
+ * Without a submit button the specification submits only when the form holds a
44
+ * single field that blocks implicit submission. Reproducing that rule matters
45
+ * more than it looks: an Enter that behaves differently inside this design
46
+ * system than outside it is worse than one that does nothing.
47
+ *
48
+ * @returns whether the form was submitted, so a caller can tell.
49
+ */
50
+ export function submitOnEnter(host, event) {
51
+ if (event.key !== 'Enter' || event.isComposing || event.defaultPrevented)
52
+ return false;
53
+ const form = host.internals.form;
54
+ if (!form)
55
+ return false;
56
+ if (!hasDefaultButton(form)) {
57
+ const blocking = Array.from(form.elements).filter(blocksImplicitSubmission);
58
+ if (blocking.length > 1)
59
+ return false;
60
+ }
61
+ event.preventDefault();
62
+ form.requestSubmit();
63
+ return true;
64
+ }
65
+ //# sourceMappingURL=implicit-submission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"implicit-submission.js","sourceRoot":"","sources":["../../src/utilities/implicit-submission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,8EAA8E;AAC9E,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACpC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU;IACnD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ;CAC3D,CAAC,CAAC;AAEH;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,EAAW;IAC5C,IAAI,EAAE,YAAY,gBAAgB;QAAE,OAAO,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7E,OAAQ,EAAE,CAAC,WAAsD,CAAC,wBAAwB,KAAK,IAAI,CAAC;AACrG,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAqB;IAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,qDAAqD,CAAC,KAAK,IAAI,CAAC;AAC3F,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAC5B,IAAmD,EACnD,KAAoB;IAEpB,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,gBAAgB;QAAE,OAAO,KAAK,CAAC;IAEvF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAExB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC5E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,IAAI,CAAC,aAAa,EAAE,CAAC;IACrB,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * An attribute one component hands to another without overruling what is
3
+ * already there.
4
+ *
5
+ * The closer to the control, the more specific, so the heavier it weighs. An
6
+ * `aria-label` on a slotted `<select>` beats the `accessible-label` on the
7
+ * wrapper around it, which beats the caption of the `nldd-form-field` above
8
+ * that. Every layer does two things and no more: it fills a gap, and it takes
9
+ * back only what it wrote itself.
10
+ *
11
+ * Without that second half a component reads "I have no name to give" as
12
+ * "remove the name that is there", which is how a documented way of naming a
13
+ * control quietly stopped working.
14
+ *
15
+ * @param applied what this component wrote here last time, or null
16
+ * @returns the new value to remember, to pass back in on the next call
17
+ */
18
+ export declare function setOwnedAttribute(el: Element, name: string, value: string, applied: string | null): string | null;
19
+ //# sourceMappingURL=owned-attribute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owned-attribute.d.ts","sourceRoot":"","sources":["../../src/utilities/owned-attribute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAChC,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,GAAG,IAAI,CAcf"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * An attribute one component hands to another without overruling what is
3
+ * already there.
4
+ *
5
+ * The closer to the control, the more specific, so the heavier it weighs. An
6
+ * `aria-label` on a slotted `<select>` beats the `accessible-label` on the
7
+ * wrapper around it, which beats the caption of the `nldd-form-field` above
8
+ * that. Every layer does two things and no more: it fills a gap, and it takes
9
+ * back only what it wrote itself.
10
+ *
11
+ * Without that second half a component reads "I have no name to give" as
12
+ * "remove the name that is there", which is how a documented way of naming a
13
+ * control quietly stopped working.
14
+ *
15
+ * @param applied what this component wrote here last time, or null
16
+ * @returns the new value to remember, to pass back in on the next call
17
+ */
18
+ export function setOwnedAttribute(el, name, value, applied) {
19
+ const current = el.getAttribute(name);
20
+ // Someone else's value. Leave it alone, and keep remembering ours as it was,
21
+ // so a later change of theirs does not suddenly look like ours.
22
+ if (current !== null && current !== applied)
23
+ return applied;
24
+ if (value) {
25
+ el.setAttribute(name, value);
26
+ return value;
27
+ }
28
+ if (current !== null)
29
+ el.removeAttribute(name);
30
+ return null;
31
+ }
32
+ //# sourceMappingURL=owned-attribute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owned-attribute.js","sourceRoot":"","sources":["../../src/utilities/owned-attribute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAChC,EAAW,EACX,IAAY,EACZ,KAAa,EACb,OAAsB;IAEtB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAEtC,6EAA6E;IAC7E,gEAAgE;IAChE,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5D,IAAI,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,IAAI;QAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -23,7 +23,15 @@ export interface ScrollModeProvider {
23
23
  }
24
24
  /** Nearest ancestor app-view (light-DOM `closest`; slotted layers stay in the
25
25
  * consumer's light tree so this reaches across the slot boundaries), or null
26
- * when a layer is used stand-alone (e.g. a bare page in the docs). */
26
+ * when a layer is used stand-alone (e.g. a bare page in the docs).
27
+ *
28
+ * An overlay ends the search: a sheet or a modal dialog is its own scroll
29
+ * container and its own top edge, so a page inside one owns its scroller
30
+ * whatever the app around it does. Without this the app-view would push its
31
+ * root mode straight through the overlay and the page's sticky header would
32
+ * stick against the document, over the content of the overlay. The overlays
33
+ * reset --context-scroll-mode as well, which is what the stand-alone read
34
+ * below then finds. */
27
35
  export declare function findScrollModeProvider(host: Element): ScrollModeProvider | null;
28
36
  /**
29
37
  * Reads the inherited `--context-scroll-mode` and reflects it to the host's
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-mode-controller.d.ts","sourceRoot":"","sources":["../../src/utilities/scroll-mode-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAEtE,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3C;;iDAEiD;AACjD,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AAEtE,MAAM,WAAW,wBAAwB;IACxC,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC;AAED,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IAClC,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC3D,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC7D;AAED;;uEAEuE;AACvE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAG/E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB,EAAE,kBAAkB;IAClF,IAAI,EAAE,UAAU,CAAY;IAE5B,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,SAAS,CAAC,CAA6B;IAC/C,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,SAAS,CAAmC;gBAExC,IAAI,EAAE,sBAAsB,GAAG,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI;IAM7F,aAAa,IAAI,IAAI;IAkBrB,gBAAgB,IAAI,IAAI;IAUxB;;;;;;;OAOG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAQvC,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS,CAMf;IAEF,gFAAgF;IAChF,IAAI,IAAI,IAAI;CAGZ"}
1
+ {"version":3,"file":"scroll-mode-controller.d.ts","sourceRoot":"","sources":["../../src/utilities/scroll-mode-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAEtE,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3C;;iDAEiD;AACjD,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AAEtE,MAAM,WAAW,wBAAwB;IACxC,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC;AAED,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IAClC,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC3D,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC7D;AAED;;;;;;;;;;wBAUwB;AACxB,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAG/E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB,EAAE,kBAAkB;IAClF,IAAI,EAAE,UAAU,CAAY;IAE5B,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,SAAS,CAAC,CAA6B;IAC/C,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,SAAS,CAAmC;gBAExC,IAAI,EAAE,sBAAsB,GAAG,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI;IAM7F,aAAa,IAAI,IAAI;IAkBrB,gBAAgB,IAAI,IAAI;IAUxB;;;;;;;OAOG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAQvC,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS,CAMf;IAEF,gFAAgF;IAChF,IAAI,IAAI,IAAI;CAGZ"}
@@ -4,9 +4,17 @@
4
4
  export const SINGLE_COLUMN_CHANGE_EVENT = 'nldd-single-column-change';
5
5
  /** Nearest ancestor app-view (light-DOM `closest`; slotted layers stay in the
6
6
  * consumer's light tree so this reaches across the slot boundaries), or null
7
- * when a layer is used stand-alone (e.g. a bare page in the docs). */
7
+ * when a layer is used stand-alone (e.g. a bare page in the docs).
8
+ *
9
+ * An overlay ends the search: a sheet or a modal dialog is its own scroll
10
+ * container and its own top edge, so a page inside one owns its scroller
11
+ * whatever the app around it does. Without this the app-view would push its
12
+ * root mode straight through the overlay and the page's sticky header would
13
+ * stick against the document, over the content of the overlay. The overlays
14
+ * reset --context-scroll-mode as well, which is what the stand-alone read
15
+ * below then finds. */
8
16
  export function findScrollModeProvider(host) {
9
- const el = host.closest?.('nldd-app-view');
17
+ const el = host.closest?.('nldd-app-view, nldd-sheet, nldd-modal-dialog');
10
18
  return el && 'registerScrollConsumer' in el ? el : null;
11
19
  }
12
20
  /**