@nldd/design-system 0.8.63 → 0.8.64

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 (398) hide show
  1. package/dist/assets/styles/{slotted-reset.d.ts → style-resets.d.ts} +1 -1
  2. package/dist/assets/styles/style-resets.d.ts.map +1 -0
  3. package/dist/assets/styles/{slotted-reset.fixtures.d.ts → style-resets.fixtures.d.ts} +4 -4
  4. package/dist/assets/styles/style-resets.fixtures.d.ts.map +1 -0
  5. package/dist/assets/styles/{slotted-reset.fixtures.js → style-resets.fixtures.js} +4 -4
  6. package/dist/assets/styles/style-resets.fixtures.js.map +1 -0
  7. package/dist/assets/styles/{slotted-reset.js → style-resets.js} +1 -1
  8. package/dist/assets/styles/style-resets.js.map +1 -0
  9. package/dist/components/actions/button/button.styles.js +7 -7
  10. package/dist/components/actions/button/button.styles.js.map +1 -1
  11. package/dist/components/actions/button-bar/button-bar.styles.d.ts.map +1 -1
  12. package/dist/components/actions/button-bar/button-bar.styles.js +3 -0
  13. package/dist/components/actions/button-bar/button-bar.styles.js.map +1 -1
  14. package/dist/components/actions/button-group/button-group.styles.d.ts.map +1 -1
  15. package/dist/components/actions/button-group/button-group.styles.js +3 -0
  16. package/dist/components/actions/button-group/button-group.styles.js.map +1 -1
  17. package/dist/components/actions/icon-button/icon-button.styles.d.ts.map +1 -1
  18. package/dist/components/actions/icon-button/icon-button.styles.js +4 -1
  19. package/dist/components/actions/icon-button/icon-button.styles.js.map +1 -1
  20. package/dist/components/actions/menu/menu.styles.d.ts.map +1 -1
  21. package/dist/components/actions/menu/menu.styles.js +4 -1
  22. package/dist/components/actions/menu/menu.styles.js.map +1 -1
  23. package/dist/components/actions/split-button/split-button.styles.d.ts.map +1 -1
  24. package/dist/components/actions/split-button/split-button.styles.js +4 -1
  25. package/dist/components/actions/split-button/split-button.styles.js.map +1 -1
  26. package/dist/components/actions/toolbar/toolbar.styles.d.ts.map +1 -1
  27. package/dist/components/actions/toolbar/toolbar.styles.js +4 -1
  28. package/dist/components/actions/toolbar/toolbar.styles.js.map +1 -1
  29. package/dist/components/components.js +31 -30
  30. package/dist/components/content/blockquote/blockquote.styles.d.ts.map +1 -1
  31. package/dist/components/content/blockquote/blockquote.styles.js +4 -1
  32. package/dist/components/content/blockquote/blockquote.styles.js.map +1 -1
  33. package/dist/components/content/byline/byline.styles.d.ts.map +1 -1
  34. package/dist/components/content/byline/byline.styles.js +4 -1
  35. package/dist/components/content/byline/byline.styles.js.map +1 -1
  36. package/dist/components/content/code-viewer/code-viewer.styles.d.ts.map +1 -1
  37. package/dist/components/content/code-viewer/code-viewer.styles.js +4 -1
  38. package/dist/components/content/code-viewer/code-viewer.styles.js.map +1 -1
  39. package/dist/components/content/icon/icon-aliases.js +1 -1
  40. package/dist/components/content/icon/icon-aliases.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 +3 -0
  43. package/dist/components/content/icon/icon.styles.js.map +1 -1
  44. package/dist/components/content/image/image.styles.d.ts.map +1 -1
  45. package/dist/components/content/image/image.styles.js +4 -1
  46. package/dist/components/content/image/image.styles.js.map +1 -1
  47. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.styles.d.ts.map +1 -1
  48. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.styles.js +4 -1
  49. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.styles.js.map +1 -1
  50. package/dist/components/content/tag/tag.styles.d.ts.map +1 -1
  51. package/dist/components/content/tag/tag.styles.js +4 -1
  52. package/dist/components/content/tag/tag.styles.js.map +1 -1
  53. package/dist/components/content/title/title.styles.d.ts.map +1 -1
  54. package/dist/components/content/title/title.styles.js +4 -1
  55. package/dist/components/content/title/title.styles.js.map +1 -1
  56. package/dist/components/content/tooltip/tooltip.styles.d.ts.map +1 -1
  57. package/dist/components/content/tooltip/tooltip.styles.js +4 -1
  58. package/dist/components/content/tooltip/tooltip.styles.js.map +1 -1
  59. package/dist/components/forms/form-actions/form-actions.styles.d.ts.map +1 -1
  60. package/dist/components/forms/form-actions/form-actions.styles.js +3 -0
  61. package/dist/components/forms/form-actions/form-actions.styles.js.map +1 -1
  62. package/dist/components/forms/form-field/form-field.styles.d.ts.map +1 -1
  63. package/dist/components/forms/form-field/form-field.styles.js +4 -1
  64. package/dist/components/forms/form-field/form-field.styles.js.map +1 -1
  65. package/dist/components/{index-BVaijKe_.js → index-BNhqNvDd.js} +3672 -2673
  66. package/dist/components/index.d.ts +1 -0
  67. package/dist/components/index.d.ts.map +1 -1
  68. package/dist/components/index.js +1 -0
  69. package/dist/components/index.js.map +1 -1
  70. package/dist/components/inputs/checkbox/checkbox.styles.d.ts.map +1 -1
  71. package/dist/components/inputs/checkbox/checkbox.styles.js +3 -0
  72. package/dist/components/inputs/checkbox/checkbox.styles.js.map +1 -1
  73. package/dist/components/inputs/checkbox-field/checkbox-field.styles.d.ts.map +1 -1
  74. package/dist/components/inputs/checkbox-field/checkbox-field.styles.js +4 -1
  75. package/dist/components/inputs/checkbox-field/checkbox-field.styles.js.map +1 -1
  76. package/dist/components/inputs/code-editor/code-editor.styles.d.ts.map +1 -1
  77. package/dist/components/inputs/code-editor/code-editor.styles.js +4 -1
  78. package/dist/components/inputs/code-editor/code-editor.styles.js.map +1 -1
  79. package/dist/components/inputs/combo-box/combo-box.styles.d.ts.map +1 -1
  80. package/dist/components/inputs/combo-box/combo-box.styles.js +4 -1
  81. package/dist/components/inputs/combo-box/combo-box.styles.js.map +1 -1
  82. package/dist/components/inputs/dropdown/dropdown.styles.d.ts.map +1 -1
  83. package/dist/components/inputs/dropdown/dropdown.styles.js +4 -1
  84. package/dist/components/inputs/dropdown/dropdown.styles.js.map +1 -1
  85. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.styles.d.ts.map +1 -1
  86. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.styles.js +4 -1
  87. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.styles.js.map +1 -1
  88. package/dist/components/inputs/number-field/number-field.styles.d.ts.map +1 -1
  89. package/dist/components/inputs/number-field/number-field.styles.js +4 -1
  90. package/dist/components/inputs/number-field/number-field.styles.js.map +1 -1
  91. package/dist/components/inputs/password-field/password-field.styles.d.ts.map +1 -1
  92. package/dist/components/inputs/password-field/password-field.styles.js +4 -1
  93. package/dist/components/inputs/password-field/password-field.styles.js.map +1 -1
  94. package/dist/components/inputs/radio-button/radio-button.styles.d.ts.map +1 -1
  95. package/dist/components/inputs/radio-button/radio-button.styles.js +3 -0
  96. package/dist/components/inputs/radio-button/radio-button.styles.js.map +1 -1
  97. package/dist/components/inputs/radio-button-field/radio-button-field.styles.d.ts.map +1 -1
  98. package/dist/components/inputs/radio-button-field/radio-button-field.styles.js +4 -1
  99. package/dist/components/inputs/radio-button-field/radio-button-field.styles.js.map +1 -1
  100. package/dist/components/inputs/radio-button-group/radio-button-group.styles.d.ts.map +1 -1
  101. package/dist/components/inputs/radio-button-group/radio-button-group.styles.js +4 -1
  102. package/dist/components/inputs/radio-button-group/radio-button-group.styles.js.map +1 -1
  103. package/dist/components/inputs/search-field/search-field.styles.d.ts.map +1 -1
  104. package/dist/components/inputs/search-field/search-field.styles.js +13 -1
  105. package/dist/components/inputs/search-field/search-field.styles.js.map +1 -1
  106. package/dist/components/inputs/search-field/search-field.template.d.ts.map +1 -1
  107. package/dist/components/inputs/search-field/search-field.template.js +47 -39
  108. package/dist/components/inputs/search-field/search-field.template.js.map +1 -1
  109. package/dist/components/inputs/segmented-control/segmented-control.styles.d.ts.map +1 -1
  110. package/dist/components/inputs/segmented-control/segmented-control.styles.js +4 -1
  111. package/dist/components/inputs/segmented-control/segmented-control.styles.js.map +1 -1
  112. package/dist/components/inputs/stepper/stepper.styles.d.ts.map +1 -1
  113. package/dist/components/inputs/stepper/stepper.styles.js +3 -0
  114. package/dist/components/inputs/stepper/stepper.styles.js.map +1 -1
  115. package/dist/components/inputs/switch/switch.styles.d.ts.map +1 -1
  116. package/dist/components/inputs/switch/switch.styles.js +3 -0
  117. package/dist/components/inputs/switch/switch.styles.js.map +1 -1
  118. package/dist/components/inputs/switch-field/switch-field.styles.d.ts.map +1 -1
  119. package/dist/components/inputs/switch-field/switch-field.styles.js +4 -1
  120. package/dist/components/inputs/switch-field/switch-field.styles.js.map +1 -1
  121. package/dist/components/inputs/text-field/text-field.styles.d.ts.map +1 -1
  122. package/dist/components/inputs/text-field/text-field.styles.js +4 -1
  123. package/dist/components/inputs/text-field/text-field.styles.js.map +1 -1
  124. package/dist/components/inputs/toggle-button/toggle-button.styles.d.ts.map +1 -1
  125. package/dist/components/inputs/toggle-button/toggle-button.styles.js +4 -1
  126. package/dist/components/inputs/toggle-button/toggle-button.styles.js.map +1 -1
  127. package/dist/components/inputs/toggle-button-group/toggle-button-group.styles.d.ts.map +1 -1
  128. package/dist/components/inputs/toggle-button-group/toggle-button-group.styles.js +3 -0
  129. package/dist/components/inputs/toggle-button-group/toggle-button-group.styles.js.map +1 -1
  130. package/dist/components/inputs/token/token.styles.d.ts.map +1 -1
  131. package/dist/components/inputs/token/token.styles.js +4 -1
  132. package/dist/components/inputs/token/token.styles.js.map +1 -1
  133. package/dist/components/layout/app-view/app-view.styles.d.ts.map +1 -1
  134. package/dist/components/layout/app-view/app-view.styles.js +3 -0
  135. package/dist/components/layout/app-view/app-view.styles.js.map +1 -1
  136. package/dist/components/layout/box/box.styles.d.ts.map +1 -1
  137. package/dist/components/layout/box/box.styles.js +3 -0
  138. package/dist/components/layout/box/box.styles.js.map +1 -1
  139. package/dist/components/layout/card/card.d.ts +28 -2
  140. package/dist/components/layout/card/card.d.ts.map +1 -1
  141. package/dist/components/layout/card/card.i18n.d.ts +5 -0
  142. package/dist/components/layout/card/card.i18n.d.ts.map +1 -0
  143. package/dist/components/layout/card/card.i18n.js +4 -0
  144. package/dist/components/layout/card/card.i18n.js.map +1 -0
  145. package/dist/components/layout/card/card.js +54 -2
  146. package/dist/components/layout/card/card.js.map +1 -1
  147. package/dist/components/layout/card/card.styles.d.ts.map +1 -1
  148. package/dist/components/layout/card/card.styles.js +20 -0
  149. package/dist/components/layout/card/card.styles.js.map +1 -1
  150. package/dist/components/layout/card/card.template.d.ts.map +1 -1
  151. package/dist/components/layout/card/card.template.js +17 -1
  152. package/dist/components/layout/card/card.template.js.map +1 -1
  153. package/dist/components/layout/collection/collection.d.ts +5 -5
  154. package/dist/components/layout/collection/collection.d.ts.map +1 -1
  155. package/dist/components/layout/collection/collection.js +4 -4
  156. package/dist/components/layout/collection/collection.styles.d.ts.map +1 -1
  157. package/dist/components/layout/collection/collection.styles.js +5 -2
  158. package/dist/components/layout/collection/collection.styles.js.map +1 -1
  159. package/dist/components/layout/container/container.d.ts +7 -3
  160. package/dist/components/layout/container/container.d.ts.map +1 -1
  161. package/dist/components/layout/container/container.js +15 -3
  162. package/dist/components/layout/container/container.js.map +1 -1
  163. package/dist/components/layout/container/container.styles.d.ts.map +1 -1
  164. package/dist/components/layout/container/container.styles.js +42 -1
  165. package/dist/components/layout/container/container.styles.js.map +1 -1
  166. package/dist/components/layout/divider/divider.styles.d.ts.map +1 -1
  167. package/dist/components/layout/divider/divider.styles.js +3 -0
  168. package/dist/components/layout/divider/divider.styles.js.map +1 -1
  169. package/dist/components/layout/page/page.styles.d.ts.map +1 -1
  170. package/dist/components/layout/page/page.styles.js +3 -0
  171. package/dist/components/layout/page/page.styles.js.map +1 -1
  172. package/dist/components/layout/page-footer/page-footer.styles.d.ts.map +1 -1
  173. package/dist/components/layout/page-footer/page-footer.styles.js +4 -1
  174. package/dist/components/layout/page-footer/page-footer.styles.js.map +1 -1
  175. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.styles.d.ts.map +1 -1
  176. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.styles.js +3 -0
  177. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.styles.js.map +1 -1
  178. package/dist/components/layout/page-sections/hero/hero.d.ts +25 -5
  179. package/dist/components/layout/page-sections/hero/hero.d.ts.map +1 -1
  180. package/dist/components/layout/page-sections/hero/hero.js +60 -11
  181. package/dist/components/layout/page-sections/hero/hero.js.map +1 -1
  182. package/dist/components/layout/page-sections/hero/hero.styles.d.ts.map +1 -1
  183. package/dist/components/layout/page-sections/hero/hero.styles.js +15 -4
  184. package/dist/components/layout/page-sections/hero/hero.styles.js.map +1 -1
  185. package/dist/components/layout/page-sections/hero/hero.template.d.ts.map +1 -1
  186. package/dist/components/layout/page-sections/hero/hero.template.js +13 -1
  187. package/dist/components/layout/page-sections/hero/hero.template.js.map +1 -1
  188. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.styles.d.ts.map +1 -1
  189. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.styles.js +3 -0
  190. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.styles.js.map +1 -1
  191. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.styles.d.ts.map +1 -1
  192. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.styles.js +3 -0
  193. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.styles.js.map +1 -1
  194. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.d.ts +119 -0
  195. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.d.ts.map +1 -0
  196. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.i18n.d.ts +6 -0
  197. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.i18n.d.ts.map +1 -0
  198. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.i18n.js +5 -0
  199. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.i18n.js.map +1 -0
  200. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.js +219 -0
  201. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.js.map +1 -0
  202. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.styles.d.ts +2 -0
  203. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.styles.d.ts.map +1 -0
  204. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.styles.js +157 -0
  205. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.styles.js.map +1 -0
  206. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.template.d.ts +4 -0
  207. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.template.d.ts.map +1 -0
  208. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.template.js +57 -0
  209. package/dist/components/layout/page-sections/sidebar-section/sidebar-section.template.js.map +1 -0
  210. package/dist/components/layout/page-sections/simple-section/simple-section.styles.d.ts.map +1 -1
  211. package/dist/components/layout/page-sections/simple-section/simple-section.styles.js +3 -0
  212. package/dist/components/layout/page-sections/simple-section/simple-section.styles.js.map +1 -1
  213. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.styles.d.ts.map +1 -1
  214. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.styles.js +3 -0
  215. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.styles.js.map +1 -1
  216. package/dist/components/layout/popover/popover.styles.d.ts.map +1 -1
  217. package/dist/components/layout/popover/popover.styles.js +3 -0
  218. package/dist/components/layout/popover/popover.styles.js.map +1 -1
  219. package/dist/components/layout/sheet/sheet.styles.d.ts.map +1 -1
  220. package/dist/components/layout/sheet/sheet.styles.js +3 -0
  221. package/dist/components/layout/sheet/sheet.styles.js.map +1 -1
  222. package/dist/components/layout/spacer/spacer.styles.d.ts.map +1 -1
  223. package/dist/components/layout/spacer/spacer.styles.js +3 -0
  224. package/dist/components/layout/spacer/spacer.styles.js.map +1 -1
  225. package/dist/components/layout/split-views/bar-split-view/bar-split-view.styles.d.ts.map +1 -1
  226. package/dist/components/layout/split-views/bar-split-view/bar-split-view.styles.js +3 -0
  227. package/dist/components/layout/split-views/bar-split-view/bar-split-view.styles.js.map +1 -1
  228. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.d.ts +47 -19
  229. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.d.ts.map +1 -1
  230. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.js +123 -73
  231. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.js.map +1 -1
  232. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.styles.d.ts.map +1 -1
  233. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.styles.js +17 -14
  234. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.styles.js.map +1 -1
  235. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.template.d.ts.map +1 -1
  236. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.template.js +10 -8
  237. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.template.js.map +1 -1
  238. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.styles.d.ts.map +1 -1
  239. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.styles.js +3 -0
  240. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.styles.js.map +1 -1
  241. package/dist/components/layout/split-views/split-view-divider/split-view-divider.styles.d.ts.map +1 -1
  242. package/dist/components/layout/split-views/split-view-divider/split-view-divider.styles.js +3 -0
  243. package/dist/components/layout/split-views/split-view-divider/split-view-divider.styles.js.map +1 -1
  244. package/dist/components/layout/split-views/split-view-pane/split-view-pane.styles.d.ts.map +1 -1
  245. package/dist/components/layout/split-views/split-view-pane/split-view-pane.styles.js +3 -0
  246. package/dist/components/layout/split-views/split-view-pane/split-view-pane.styles.js.map +1 -1
  247. package/dist/components/layout/split-views/stacked-split-view/stacked-split-view.styles.d.ts.map +1 -1
  248. package/dist/components/layout/split-views/stacked-split-view/stacked-split-view.styles.js +3 -0
  249. package/dist/components/layout/split-views/stacked-split-view/stacked-split-view.styles.js.map +1 -1
  250. package/dist/components/layout/window/window.d.ts +1 -19
  251. package/dist/components/layout/window/window.d.ts.map +1 -1
  252. package/dist/components/layout/window/window.js +1 -187
  253. package/dist/components/layout/window/window.js.map +1 -1
  254. package/dist/components/layout/window/window.styles.d.ts.map +1 -1
  255. package/dist/components/layout/window/window.styles.js +5 -28
  256. package/dist/components/layout/window/window.styles.js.map +1 -1
  257. package/dist/components/layout/window/window.template.d.ts.map +1 -1
  258. package/dist/components/layout/window/window.template.js +1 -2
  259. package/dist/components/layout/window/window.template.js.map +1 -1
  260. package/dist/components/lists-and-tables/cells/cell/cell.styles.d.ts.map +1 -1
  261. package/dist/components/lists-and-tables/cells/cell/cell.styles.js +4 -1
  262. package/dist/components/lists-and-tables/cells/cell/cell.styles.js.map +1 -1
  263. package/dist/components/lists-and-tables/cells/description-cell/description-cell.styles.d.ts.map +1 -1
  264. package/dist/components/lists-and-tables/cells/description-cell/description-cell.styles.js +4 -1
  265. package/dist/components/lists-and-tables/cells/description-cell/description-cell.styles.js.map +1 -1
  266. package/dist/components/lists-and-tables/cells/drag-handle-cell/drag-handle-cell.styles.d.ts.map +1 -1
  267. package/dist/components/lists-and-tables/cells/drag-handle-cell/drag-handle-cell.styles.js +3 -0
  268. package/dist/components/lists-and-tables/cells/drag-handle-cell/drag-handle-cell.styles.js.map +1 -1
  269. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.styles.d.ts.map +1 -1
  270. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.styles.js +3 -0
  271. package/dist/components/lists-and-tables/cells/icon-cell/icon-cell.styles.js.map +1 -1
  272. package/dist/components/lists-and-tables/cells/spacer-cell/spacer-cell.styles.d.ts.map +1 -1
  273. package/dist/components/lists-and-tables/cells/spacer-cell/spacer-cell.styles.js +3 -0
  274. package/dist/components/lists-and-tables/cells/spacer-cell/spacer-cell.styles.js.map +1 -1
  275. package/dist/components/lists-and-tables/cells/text-cell/text-cell.styles.d.ts.map +1 -1
  276. package/dist/components/lists-and-tables/cells/text-cell/text-cell.styles.js +4 -1
  277. package/dist/components/lists-and-tables/cells/text-cell/text-cell.styles.js.map +1 -1
  278. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.styles.d.ts.map +1 -1
  279. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.styles.js +3 -0
  280. package/dist/components/lists-and-tables/cells/timeline-track-cell/timeline-track-cell.styles.js.map +1 -1
  281. package/dist/components/lists-and-tables/cells/title-cell/title-cell.styles.d.ts.map +1 -1
  282. package/dist/components/lists-and-tables/cells/title-cell/title-cell.styles.js +4 -1
  283. package/dist/components/lists-and-tables/cells/title-cell/title-cell.styles.js.map +1 -1
  284. package/dist/components/lists-and-tables/list/list.d.ts +138 -8
  285. package/dist/components/lists-and-tables/list/list.d.ts.map +1 -1
  286. package/dist/components/lists-and-tables/list/list.i18n.d.ts +2 -0
  287. package/dist/components/lists-and-tables/list/list.i18n.d.ts.map +1 -1
  288. package/dist/components/lists-and-tables/list/list.i18n.js +2 -0
  289. package/dist/components/lists-and-tables/list/list.i18n.js.map +1 -1
  290. package/dist/components/lists-and-tables/list/list.js +368 -16
  291. package/dist/components/lists-and-tables/list/list.js.map +1 -1
  292. package/dist/components/lists-and-tables/list/list.styles.d.ts.map +1 -1
  293. package/dist/components/lists-and-tables/list/list.styles.js +163 -25
  294. package/dist/components/lists-and-tables/list/list.styles.js.map +1 -1
  295. package/dist/components/lists-and-tables/list/list.template.d.ts +26 -1
  296. package/dist/components/lists-and-tables/list/list.template.d.ts.map +1 -1
  297. package/dist/components/lists-and-tables/list/list.template.js +76 -18
  298. package/dist/components/lists-and-tables/list/list.template.js.map +1 -1
  299. package/dist/components/lists-and-tables/list-item/list-item.d.ts +20 -7
  300. package/dist/components/lists-and-tables/list-item/list-item.d.ts.map +1 -1
  301. package/dist/components/lists-and-tables/list-item/list-item.js +49 -24
  302. package/dist/components/lists-and-tables/list-item/list-item.js.map +1 -1
  303. package/dist/components/lists-and-tables/list-item/list-item.styles.d.ts.map +1 -1
  304. package/dist/components/lists-and-tables/list-item/list-item.styles.js +50 -28
  305. package/dist/components/lists-and-tables/list-item/list-item.styles.js.map +1 -1
  306. package/dist/components/lists-and-tables/list-item/list-item.template.d.ts +1 -1
  307. package/dist/components/lists-and-tables/list-item/list-item.template.d.ts.map +1 -1
  308. package/dist/components/lists-and-tables/list-item/list-item.template.js +9 -6
  309. package/dist/components/lists-and-tables/list-item/list-item.template.js.map +1 -1
  310. package/dist/components/lists-and-tables/table/table.styles.d.ts.map +1 -1
  311. package/dist/components/lists-and-tables/table/table.styles.js +4 -1
  312. package/dist/components/lists-and-tables/table/table.styles.js.map +1 -1
  313. package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +0 -44
  314. package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts.map +1 -1
  315. package/dist/components/navigation/breadcrumbs/breadcrumbs.i18n.d.ts +0 -1
  316. package/dist/components/navigation/breadcrumbs/breadcrumbs.i18n.d.ts.map +1 -1
  317. package/dist/components/navigation/breadcrumbs/breadcrumbs.i18n.js +0 -1
  318. package/dist/components/navigation/breadcrumbs/breadcrumbs.i18n.js.map +1 -1
  319. package/dist/components/navigation/breadcrumbs/breadcrumbs.js +1 -84
  320. package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  321. package/dist/components/navigation/breadcrumbs/breadcrumbs.styles.d.ts.map +1 -1
  322. package/dist/components/navigation/breadcrumbs/breadcrumbs.styles.js +6 -52
  323. package/dist/components/navigation/breadcrumbs/breadcrumbs.styles.js.map +1 -1
  324. package/dist/components/navigation/breadcrumbs/breadcrumbs.template.d.ts.map +1 -1
  325. package/dist/components/navigation/breadcrumbs/breadcrumbs.template.js +1 -17
  326. package/dist/components/navigation/breadcrumbs/breadcrumbs.template.js.map +1 -1
  327. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.d.ts.map +1 -1
  328. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.js +4 -1
  329. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.js.map +1 -1
  330. package/dist/components/navigation/link/link.styles.d.ts.map +1 -1
  331. package/dist/components/navigation/link/link.styles.js +4 -1
  332. package/dist/components/navigation/link/link.styles.js.map +1 -1
  333. package/dist/components/navigation/menu-bar/menu-bar.styles.d.ts.map +1 -1
  334. package/dist/components/navigation/menu-bar/menu-bar.styles.js +4 -1
  335. package/dist/components/navigation/menu-bar/menu-bar.styles.js.map +1 -1
  336. package/dist/components/navigation/menu-bar-item/menu-bar-item.styles.d.ts.map +1 -1
  337. package/dist/components/navigation/menu-bar-item/menu-bar-item.styles.js +4 -1
  338. package/dist/components/navigation/menu-bar-item/menu-bar-item.styles.js.map +1 -1
  339. package/dist/components/navigation/pagination/pagination.styles.d.ts.map +1 -1
  340. package/dist/components/navigation/pagination/pagination.styles.js +4 -1
  341. package/dist/components/navigation/pagination/pagination.styles.js.map +1 -1
  342. package/dist/components/navigation/skip-link/skip-link.styles.d.ts.map +1 -1
  343. package/dist/components/navigation/skip-link/skip-link.styles.js +4 -1
  344. package/dist/components/navigation/skip-link/skip-link.styles.js.map +1 -1
  345. package/dist/components/navigation/tab-bar/tab-bar.styles.d.ts.map +1 -1
  346. package/dist/components/navigation/tab-bar/tab-bar.styles.js +4 -1
  347. package/dist/components/navigation/tab-bar/tab-bar.styles.js.map +1 -1
  348. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.d.ts +5 -0
  349. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.d.ts.map +1 -1
  350. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.js +17 -0
  351. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.js.map +1 -1
  352. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.d.ts.map +1 -1
  353. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.js +32 -16
  354. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.js.map +1 -1
  355. package/dist/components/navigation/top-title-bar/top-title-bar.styles.d.ts.map +1 -1
  356. package/dist/components/navigation/top-title-bar/top-title-bar.styles.js +4 -1
  357. package/dist/components/navigation/top-title-bar/top-title-bar.styles.js.map +1 -1
  358. package/dist/components/{prism-python-Tr_Ff1KJ.js → prism-python--N285k7w.js} +1 -1
  359. package/dist/components/{prism-rust-CxUpjfK5.js → prism-rust-Cnm1tSdo.js} +1 -1
  360. package/dist/components/{prism-typescript-zaF4YQWN.js → prism-typescript-BPJAiB1s.js} +1 -1
  361. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.styles.d.ts.map +1 -1
  362. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.styles.js +4 -1
  363. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.styles.js.map +1 -1
  364. package/dist/components/status-and-feedback/badge/badge.styles.d.ts.map +1 -1
  365. package/dist/components/status-and-feedback/badge/badge.styles.js +4 -1
  366. package/dist/components/status-and-feedback/badge/badge.styles.js.map +1 -1
  367. package/dist/components/status-and-feedback/banner/banner.styles.d.ts.map +1 -1
  368. package/dist/components/status-and-feedback/banner/banner.styles.js +4 -1
  369. package/dist/components/status-and-feedback/banner/banner.styles.js.map +1 -1
  370. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.styles.d.ts.map +1 -1
  371. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.styles.js +4 -1
  372. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.styles.js.map +1 -1
  373. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.d.ts +5 -4
  374. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.d.ts.map +1 -1
  375. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.js +5 -5
  376. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.js.map +1 -1
  377. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.styles.d.ts.map +1 -1
  378. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.styles.js +5 -2
  379. package/dist/components/status-and-feedback/just-in-time-education/just-in-time-education.styles.js.map +1 -1
  380. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.d.ts.map +1 -1
  381. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.js +4 -1
  382. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.js.map +1 -1
  383. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.d.ts.map +1 -1
  384. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.js +4 -1
  385. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.js.map +1 -1
  386. package/dist/components/status-and-feedback/progress-circle/progress-circle.styles.d.ts.map +1 -1
  387. package/dist/components/status-and-feedback/progress-circle/progress-circle.styles.js +4 -1
  388. package/dist/components/status-and-feedback/progress-circle/progress-circle.styles.js.map +1 -1
  389. package/dist/components/status-and-feedback/status-bar/status-bar.styles.d.ts.map +1 -1
  390. package/dist/components/status-and-feedback/status-bar/status-bar.styles.js +4 -1
  391. package/dist/components/status-and-feedback/status-bar/status-bar.styles.js.map +1 -1
  392. package/dist/css/rich-text.css +63 -0
  393. package/dist/css/settings.css +10 -3
  394. package/package.json +5 -1
  395. package/dist/assets/styles/slotted-reset.d.ts.map +0 -1
  396. package/dist/assets/styles/slotted-reset.fixtures.d.ts.map +0 -1
  397. package/dist/assets/styles/slotted-reset.fixtures.js.map +0 -1
  398. package/dist/assets/styles/slotted-reset.js.map +0 -1
@@ -4,14 +4,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
+ var NLDDList_1;
7
8
  import { LitElement } from 'lit';
8
- import { customElement, property, state } from 'lit/decorators.js';
9
+ import { customElement, property, query, state } from 'lit/decorators.js';
9
10
  import { listStyles } from './list.styles.js';
10
11
  import { template } from './list.template.js';
11
12
  import { nlddListTranslations } from './list.i18n.js';
12
13
  import '../../status-and-feedback/inline-dialog/inline-dialog.js';
14
+ import '../../content/icon/icon.js';
15
+ import '../../actions/icon-button/icon-button.js';
13
16
  /**
14
- * A container for `nldd-list-item` elements, with optional header and footer slots.
17
+ * A container for `nldd-list-item` elements.
15
18
  *
16
19
  * The `type` attribute switches the list's a11y role and behavior:
17
20
  * - `list` (default) — `role="list"`, items `role="listitem"`. Reorderable allowed.
@@ -19,9 +22,37 @@ import '../../status-and-feedback/inline-dialog/inline-dialog.js';
19
22
  * has no special keyboard semantics.
20
23
  * - `navigation` — host `role="navigation"`, items with `selected` get
21
24
  * `aria-current="page"` on their inner `<a>` or `<button>`.
25
+ * - `listbox` — an accessible, filterable listbox (combobox pattern). The
26
+ * list renders its OWN search input (`role="combobox"`) pinned
27
+ * above the options; `.list__items` becomes `role="listbox"`
28
+ * and items become `role="option"`. Focus stays in the input,
29
+ * the active option moves via `aria-activedescendant`, and
30
+ * filtering is consumer-managed via the `input` event (toggle
31
+ * `[hidden]` on items). See "Listbox" below.
22
32
  *
23
33
  * Selection state is consumer-managed: the list never mutates `selected` itself.
24
34
  *
35
+ * ### Listbox
36
+ *
37
+ * In `type="listbox"` the list owns a native `<input role="combobox">` (mirroring
38
+ * how `nldd-combo-box` wires an input to a slotted listbox). Keyboard, handled on
39
+ * the input so focus never leaves it:
40
+ * - ArrowDown / ArrowUp — move the active option among the VISIBLE (non-`[hidden]`)
41
+ * options (wrap around).
42
+ * - Home / End — first / last visible option.
43
+ * - Enter — activate the active option by triggering its inner action (a link
44
+ * navigates, a button fires the consumer's handler). Selection stays
45
+ * consumer-managed.
46
+ * - Escape — clear the search value (and refire `input`).
47
+ *
48
+ * On every active change the input's `aria-activedescendant` is set to the active
49
+ * option's id and the option is scrolled into view. The active option (`_highlighted`
50
+ * on the item, a highlight) is distinct from `selected`. Filtering is the
51
+ * consumer's job: listen to `input` (`{ detail: { value } }`) and toggle `[hidden]`
52
+ * on items; after the visible set changes the list resets the active option to the
53
+ * first visible one. `reorderable` and `arrow-navigation` are ignored in listbox
54
+ * mode (listbox has its own keyboard).
55
+ *
25
56
  * ### Reorder
26
57
  *
27
58
  * On reorder (type="list" + reorderable), the list dispatches `nldd-reorder` with
@@ -33,16 +64,24 @@ import '../../status-and-feedback/inline-dialog/inline-dialog.js';
33
64
  * should manage focus themselves after their render commits.
34
65
  *
35
66
  * @slot - List items (`nldd-list-item`)
36
- * @slot header - Content above the list body (e.g. `nldd-title`)
37
- * @slot footer - Content below the list body (e.g. a short description)
67
+ * @slot toolbar - Controls below the search field (filters, sort, counts,
68
+ * view toggles). Available for every type; collapses when empty.
69
+ * @slot search-bar-end - Controls inline at the end of the search bar, beside the
70
+ * search field (e.g. a filter or options button). Listbox only;
71
+ * collapses when empty.
38
72
  * @slot empty - Shown when no items are visible (all `[hidden]` or none). Defaults
39
73
  * to `nldd-inline-dialog` with `empty-text` / `empty-supporting-text`
40
- * (falling back to Dutch i18n "Geen resultaten"). Slot content
41
- * overrides the default dialog entirely.
74
+ * (falling back to Dutch i18n "Geen items"). Slot content
75
+ * overrides the default dialog entirely. In `type="listbox"` it is
76
+ * suppressed while the search field is empty (no query yet), so the
77
+ * consumer can show just the search field or its own hint outside
78
+ * the list.
42
79
  *
43
80
  * @fires nldd-reorder - Reorderable `type="list"`: `{ fromIndex, toIndex }` on drop
81
+ * @fires input - `type="listbox"`: search value changed; `{ value }`. Toggle
82
+ * `[hidden]` on items to filter.
44
83
  */
45
- let NLDDList = class NLDDList extends LitElement {
84
+ let NLDDList = NLDDList_1 = class NLDDList extends LitElement {
46
85
  constructor() {
47
86
  super(...arguments);
48
87
  /** Visual style of the list. `simple` is a plain vertical strip with
@@ -76,9 +115,17 @@ let NLDDList = class NLDDList extends LitElement {
76
115
  * simple lists.
77
116
  */
78
117
  this.arrowNavigation = false;
118
+ /**
119
+ * Only in `type="listbox"`: caps the options' scroll region at this CSS
120
+ * length (any value `CSS.supports('max-height', …)` accepts, e.g. "320px").
121
+ * The search input stays pinned above and the options scroll; the active
122
+ * option is kept in view via `scrollIntoView`. Unset → no cap. No effect
123
+ * outside listbox mode.
124
+ */
125
+ this.height = '';
79
126
  /**
80
127
  * Text for the default empty-state dialog. Falls back to the Dutch
81
- * i18n default ("Geen resultaten"). Ignored when consumers slot their
128
+ * i18n default ("Geen items"). Ignored when consumers slot their
82
129
  * own content into `[slot=empty]`.
83
130
  */
84
131
  this.emptyText = '';
@@ -87,11 +134,28 @@ let NLDDList = class NLDDList extends LitElement {
87
134
  * Ignored when consumers slot their own content into `[slot=empty]`.
88
135
  */
89
136
  this.emptySupportingText = '';
137
+ /** Accessible name for the list, forwarded to the inner role: the list in
138
+ * `type=list`, the search field in `type=listbox`. For `type=navigation`,
139
+ * set `aria-label` / `aria-labelledby` on the element directly (it is a
140
+ * landmark). Falls back to the default i18n label when unset. */
141
+ this.accessibleLabel = '';
90
142
  /** Override one or more translation keys. Unset keys fall back to the Dutch default. */
91
143
  this.translations = {};
92
144
  this._mergedTranslations = { ...nlddListTranslations };
93
- this._hasHeader = false;
145
+ this._hasToolbar = false;
146
+ this._hasSearchBarEnd = false;
94
147
  this._isEmpty = false;
148
+ // — Listbox state ————————————————————————————————————————————————————————
149
+ /** Current search value (listbox mode). Mirrored to the input. */
150
+ this._searchValue = '';
151
+ /** ID of the active option (listbox mode), or '' when none. Fed to the
152
+ * input's aria-activedescendant. Distinct from selection. */
153
+ this._activeId = '';
154
+ /** Whether the search input has focus. aria-activedescendant is the input's
155
+ * virtual focus, so the active-option highlight only shows while it is
156
+ * focused; _activeId is remembered across blur so focus resumes there. */
157
+ this._searchFocused = false;
158
+ this._listboxId = `nldd-list-listbox-${NLDDList_1._idCounter++}`;
95
159
  // — Drag state ——————————————————————————————————————————————————————————
96
160
  this._draggingEl = null;
97
161
  this._draggingFromIndex = -1;
@@ -103,6 +167,106 @@ let NLDDList = class NLDDList extends LitElement {
103
167
  this._listRect = null;
104
168
  // — Observers ————————————————————————————————————————————————————————————
105
169
  this._itemsObserver = null;
170
+ this._contextScheduled = false;
171
+ /** Keep the active option valid after the visible set changes (initial
172
+ * render, slot change, or consumer-driven `[hidden]` filtering): ensure ids,
173
+ * reset the active option to the first visible one when the current active is
174
+ * gone (or none was set), push `_highlighted` onto the items, and refresh the
175
+ * input's aria-activedescendant. When nothing is visible the empty state
176
+ * shows and aria-activedescendant is cleared. Deferred to a microtask for the
177
+ * same reason as roving — it can run inside the update lifecycle and would
178
+ * otherwise trip Lit's change-in-update warning. */
179
+ this._listboxScheduled = false;
180
+ this._onSearchInput = (event) => {
181
+ // The native input event is composed and would escape the shadow root
182
+ // alongside our own CustomEvent, reaching consumers as a second `input`
183
+ // without a `detail`. Stop it so the only `input` they see is ours,
184
+ // carrying { value }.
185
+ event.stopPropagation();
186
+ const input = event.target;
187
+ this._searchValue = input.value;
188
+ this._emitListboxInput(this._searchValue);
189
+ };
190
+ this._onClearClick = () => {
191
+ this._clearSearch();
192
+ };
193
+ /** Track whether the search-bar-end slot has content, so its wrapper (and the
194
+ * bar gap) collapses when empty. Bound in the template so it follows the slot
195
+ * even though the search bar only renders in listbox mode. */
196
+ this._onSearchBarEndSlotChange = (event) => {
197
+ this._hasSearchBarEnd = event.target.assignedElements().length > 0;
198
+ };
199
+ this._onSearchFocus = () => {
200
+ this._searchFocused = true;
201
+ // Resume at the remembered active option, or the first visible one if none
202
+ // is set or it was filtered away.
203
+ this._applyListboxOptions();
204
+ };
205
+ this._onSearchBlur = () => {
206
+ this._searchFocused = false;
207
+ this._syncHighlight();
208
+ };
209
+ /** Clicking an option moves the (remembered) active descendant to it, so the
210
+ * highlight resumes there when the search input regains focus. */
211
+ this._onListClick = (event) => {
212
+ if (this.type !== 'listbox')
213
+ return;
214
+ const item = event.target?.closest?.('nldd-list-item');
215
+ if (item && item.parentElement === this && !item.hasAttribute('hidden')) {
216
+ this._activeId = this._ensureOptionId(item);
217
+ }
218
+ };
219
+ /**
220
+ * Listbox keyboard, handled on the search input — focus never leaves it.
221
+ * Arrows/Home/End move the active option among the visible set; Enter
222
+ * activates it by triggering its inner action; Escape clears the value.
223
+ */
224
+ this._onSearchKeyDown = (event) => {
225
+ const { key } = event;
226
+ if (key === 'Escape') {
227
+ if (this._searchValue !== '') {
228
+ event.preventDefault();
229
+ this._clearSearch();
230
+ }
231
+ return;
232
+ }
233
+ if (key === 'Enter') {
234
+ const active = this._activeItem;
235
+ if (active) {
236
+ event.preventDefault();
237
+ // Trigger the option's inner action: a link navigates, a button
238
+ // fires the consumer's handler. Selection stays consumer-managed.
239
+ active.shadowRoot?.querySelector('.list-item__action')?.click();
240
+ // Enter is keyboard interaction, so keep focus on the search input
241
+ // (the combobox model: the active option is the virtual focus via
242
+ // aria-activedescendant). The option's click would otherwise pull DOM
243
+ // focus onto it; refocus so typing/arrowing continues and the
244
+ // highlight stays.
245
+ this._searchInput?.focus();
246
+ }
247
+ return;
248
+ }
249
+ if (key !== 'ArrowDown' && key !== 'ArrowUp' && key !== 'Home' && key !== 'End')
250
+ return;
251
+ const visible = this._getVisibleItems();
252
+ if (visible.length === 0)
253
+ return;
254
+ event.preventDefault();
255
+ const current = visible.findIndex(item => item.id === this._activeId);
256
+ let next;
257
+ if (key === 'Home') {
258
+ next = 0;
259
+ }
260
+ else if (key === 'End') {
261
+ next = visible.length - 1;
262
+ }
263
+ else {
264
+ const dir = key === 'ArrowDown' ? 1 : -1;
265
+ const base = current === -1 ? (dir === 1 ? -1 : 0) : current;
266
+ next = (base + dir + visible.length) % visible.length; // wrap around
267
+ }
268
+ this._setActiveOption(visible[next]);
269
+ };
106
270
  this._rovingScheduled = false;
107
271
  this._onFocusIn = (event) => {
108
272
  if (!this._arrowNavActive)
@@ -228,10 +392,16 @@ let NLDDList = class NLDDList extends LitElement {
228
392
  this._updateItems();
229
393
  this._updateEmpty();
230
394
  this._warnArrowNav();
231
- const headerSlot = this.shadowRoot?.querySelector('slot[name="header"]');
232
- headerSlot?.addEventListener('slotchange', () => {
233
- this._hasHeader = (headerSlot.assignedElements().length > 0);
234
- });
395
+ const toolbarSlot = this.shadowRoot?.querySelector('slot[name="toolbar"]');
396
+ const syncToolbar = () => { this._hasToolbar = (toolbarSlot?.assignedElements().length ?? 0) > 0; };
397
+ toolbarSlot?.addEventListener('slotchange', syncToolbar);
398
+ syncToolbar();
399
+ // The search-bar-end slot only renders in listbox; sync its initial presence
400
+ // here. The @slotchange binding in the template keeps it updated afterwards
401
+ // and re-binds whenever the search bar (re)renders on a type change.
402
+ const searchBarEndSlot = this.shadowRoot?.querySelector('slot[name="search-bar-end"]');
403
+ if (searchBarEndSlot)
404
+ this._hasSearchBarEnd = searchBarEndSlot.assignedElements().length > 0;
235
405
  // Watch direct children for add/remove (nldd-list-item gains/lose) and
236
406
  // for `hidden` toggles on those direct children (consumer-driven
237
407
  // filtering). `subtree: true` is required because `attributes` on the
@@ -274,12 +444,14 @@ let NLDDList = class NLDDList extends LitElement {
274
444
  this.addEventListener('pointerdown', this._onPointerDown);
275
445
  this.addEventListener('keydown', this._onKeyDown);
276
446
  this.addEventListener('focusin', this._onFocusIn);
447
+ this.addEventListener('click', this._onListClick);
277
448
  }
278
449
  disconnectedCallback() {
279
450
  super.disconnectedCallback();
280
451
  this.removeEventListener('pointerdown', this._onPointerDown);
281
452
  this.removeEventListener('keydown', this._onKeyDown);
282
453
  this.removeEventListener('focusin', this._onFocusIn);
454
+ this.removeEventListener('click', this._onListClick);
283
455
  this._itemsObserver?.disconnect();
284
456
  this._itemsObserver = null;
285
457
  this._cancelDrag();
@@ -292,15 +464,39 @@ let NLDDList = class NLDDList extends LitElement {
292
464
  this._updateItems();
293
465
  this._warnArrowNav();
294
466
  }
467
+ if (changed.has('variant')) {
468
+ this._updateItemContext();
469
+ }
295
470
  if (changed.has('translations')) {
296
471
  this._mergedTranslations = { ...nlddListTranslations, ...this.translations };
297
472
  }
298
473
  if (changed.has('type')) {
299
474
  this._applyHostType();
475
+ // Leaving listbox mode: drop the active highlight and reset state so a
476
+ // stale `_highlighted`/aria-activedescendant doesn't survive the switch.
477
+ if (changed.get('type') === 'listbox' && this.type !== 'listbox') {
478
+ this._activeId = '';
479
+ this._getItems().forEach(item => { item._highlighted = false; });
480
+ }
481
+ }
482
+ if (changed.has('height')) {
483
+ // Mirror the width/height inline-style pattern: validate, then feed a
484
+ // local var the CSS reads as max-height on the scroll region.
485
+ const h = this.height;
486
+ if (h && CSS.supports('max-height', h)) {
487
+ this.style.setProperty('--_max-height', h);
488
+ }
489
+ else {
490
+ this.style.removeProperty('--_max-height');
491
+ }
300
492
  }
301
493
  }
302
494
  // — Host attribute routing ————————————————————————————————————————————————
303
495
  _applyHostType() {
496
+ // Only `navigation` puts a role on the host. `list` and `listbox` leave
497
+ // the host role-less: `list` carries role="list" on `.list__items`, and
498
+ // `listbox` carries role="listbox" there — putting a second widget role
499
+ // on the host would nest landmarks/roles incorrectly.
304
500
  if (this.type === 'navigation') {
305
501
  this.setAttribute('role', 'navigation');
306
502
  if (!this.hasAttribute('aria-label') && !this.hasAttribute('aria-labelledby')) {
@@ -329,12 +525,19 @@ let NLDDList = class NLDDList extends LitElement {
329
525
  const slot = this.shadowRoot?.querySelector('slot:not([name])');
330
526
  return (slot?.assignedElements() ?? []).filter((el) => el.tagName.toLowerCase() === 'nldd-list-item' && !el.hasAttribute('data-nldd-placeholder'));
331
527
  }
528
+ /** Visible (non-`[hidden]`) items, in DOM order. The active-option model and
529
+ * listbox keyboard operate over this set. */
530
+ _getVisibleItems() {
531
+ return this._getItems().filter(item => !item.hasAttribute('hidden'));
532
+ }
332
533
  _updateItems() {
333
534
  const items = this._getItems();
334
535
  const visibleItems = items.filter(item => !item.hasAttribute('hidden'));
536
+ const firstVisible = visibleItems[0];
335
537
  const lastVisible = visibleItems[visibleItems.length - 1];
336
538
  const reorderActive = this.reorderable && this.type === 'list';
337
539
  items.forEach((item) => {
540
+ item.classList.toggle('is-first', item === firstVisible);
338
541
  item.classList.toggle('is-last', item === lastVisible);
339
542
  if (reorderActive) {
340
543
  item.setAttribute('reorderable', '');
@@ -343,12 +546,109 @@ let NLDDList = class NLDDList extends LitElement {
343
546
  item.removeAttribute('reorderable');
344
547
  }
345
548
  });
549
+ this._updateItemContext();
346
550
  this._updateRoving();
551
+ if (this.type === 'listbox')
552
+ this._updateListboxOptions();
553
+ }
554
+ /** Push the list's variant + type onto every item, deferred to a microtask:
555
+ * _updateItems runs inside the update lifecycle (firstUpdated/updated), and
556
+ * setting the items' reactive state there would trip Lit's change-in-update
557
+ * warning. Coalesced so repeated item updates schedule it only once. */
558
+ _updateItemContext() {
559
+ if (this._contextScheduled)
560
+ return;
561
+ this._contextScheduled = true;
562
+ queueMicrotask(() => {
563
+ this._contextScheduled = false;
564
+ this._applyItemContext();
565
+ });
566
+ }
567
+ /** The list owns variant + type; every item mirrors them (is-boxed styling and
568
+ * the option/listitem role). Pushing from the list, not a per-item observer,
569
+ * means a runtime variant/type switch, or a freshly added item, always tracks
570
+ * the list. */
571
+ _applyItemContext() {
572
+ this._getItems().forEach((item) => {
573
+ item._applyVariant(this.variant);
574
+ item._applyParentType(this.type);
575
+ });
347
576
  }
348
577
  _updateEmpty() {
349
578
  const items = this._getItems();
350
579
  this._isEmpty = items.length === 0 || items.every(item => item.hasAttribute('hidden'));
351
580
  }
581
+ // — Listbox: active-option model ————————————————————————————————————————————
582
+ /** Every option needs a stable id for aria-activedescendant. Assign one to
583
+ * any item that lacks one (consumer-supplied ids win). */
584
+ _ensureOptionId(item) {
585
+ if (!item.id) {
586
+ item.id = `nldd-list-option-${NLDDList_1._optionIdCounter++}`;
587
+ }
588
+ return item.id;
589
+ }
590
+ _updateListboxOptions() {
591
+ if (this._listboxScheduled)
592
+ return;
593
+ this._listboxScheduled = true;
594
+ queueMicrotask(() => {
595
+ this._listboxScheduled = false;
596
+ this._applyListboxOptions();
597
+ });
598
+ }
599
+ _applyListboxOptions() {
600
+ if (this.type !== 'listbox')
601
+ return;
602
+ const visible = this._getVisibleItems();
603
+ visible.forEach(item => this._ensureOptionId(item));
604
+ // Keep the active option if it's still visible, otherwise fall back to the
605
+ // first visible option (or none when the list is empty).
606
+ const current = visible.find(item => item.id === this._activeId);
607
+ const active = current ?? visible[0];
608
+ this._activeId = active?.id ?? '';
609
+ this._syncHighlight();
610
+ }
611
+ /** Move the active option to `item`: update state, reflect aria-activedescendant
612
+ * on the input, and scroll the option into view (it may be inside the capped
613
+ * scroll region). */
614
+ _setActiveOption(item) {
615
+ this._activeId = this._ensureOptionId(item);
616
+ this._syncHighlight();
617
+ item.scrollIntoView({ block: 'nearest' });
618
+ }
619
+ /** Reflect the active descendant onto the items, but only while the search
620
+ * input is focused (aria-activedescendant is its virtual focus). _activeId is
621
+ * remembered across blur so focus resumes at the same option; the template
622
+ * gates aria-activedescendant on _searchFocused the same way. */
623
+ _syncHighlight() {
624
+ const active = this._searchFocused ? this._activeItem : null;
625
+ this._getItems().forEach(i => { i._highlighted = i === active; });
626
+ }
627
+ /** The currently active option element, or null. */
628
+ get _activeItem() {
629
+ if (!this._activeId)
630
+ return null;
631
+ return this._getVisibleItems().find(item => item.id === this._activeId) ?? null;
632
+ }
633
+ // — Listbox: search input ————————————————————————————————————————————————————
634
+ /** Dispatch the consumer-facing `input` event so it can filter (toggle
635
+ * `[hidden]` on items). Composed + bubbling, `{ detail: { value } }`. */
636
+ _emitListboxInput(value) {
637
+ this.dispatchEvent(new CustomEvent('input', {
638
+ detail: { value },
639
+ bubbles: true,
640
+ composed: true,
641
+ }));
642
+ }
643
+ /** Clear the search value (clear button / Escape) and refire `input` so the
644
+ * consumer refilters. Focus stays on the input. */
645
+ _clearSearch() {
646
+ this._searchValue = '';
647
+ if (this._searchInput)
648
+ this._searchInput.value = '';
649
+ this._emitListboxInput('');
650
+ this._searchInput?.focus();
651
+ }
352
652
  // — Arrow navigation (roving tabindex) ————————————————————————————————————
353
653
  /** Arrow-navigation is effective only when reorderable isn't already claiming
354
654
  * the arrow keys for drag-reorder (reorderable wins). The guard also checks
@@ -357,6 +657,10 @@ let NLDDList = class NLDDList extends LitElement {
357
657
  * therefore keeps arrow-nav active (reorderable does nothing), and
358
658
  * `_warnArrowNav` likewise only warns for the real reorderable-list conflict. */
359
659
  get _arrowNavActive() {
660
+ // Listbox has its own keyboard (on the search input) and supersedes the
661
+ // roving-tabindex arrow-nav — never run both.
662
+ if (this.type === 'listbox')
663
+ return false;
360
664
  return this.arrowNavigation && !(this.reorderable && this.type === 'list');
361
665
  }
362
666
  /** Interactive, visible items — the roving stops. Non-interactive items (no
@@ -606,10 +910,37 @@ let NLDDList = class NLDDList extends LitElement {
606
910
  }));
607
911
  }
608
912
  render() {
609
- return template(this._t('components.list.items-label-text'), this._hasHeader, this.type, this._isEmpty, this.emptyText || this._t('components.list.empty-text'), this.emptySupportingText);
913
+ return template({
914
+ itemsLabel: this.accessibleLabel || this._t('components.list.items-label-text'),
915
+ hasToolbar: this._hasToolbar,
916
+ type: this.type,
917
+ isEmpty: this._isEmpty,
918
+ emptyText: this.emptyText || this._t('components.list.empty-text'),
919
+ emptySupportingText: this.emptySupportingText,
920
+ listbox: {
921
+ listboxId: this._listboxId,
922
+ searchValue: this._searchValue,
923
+ activeId: this._searchFocused ? this._activeId : '',
924
+ searchPlaceholder: this._t('components.list.search-placeholder-text'),
925
+ searchAccessibleLabel: this.accessibleLabel || this._t('components.list.search-placeholder-text'),
926
+ searchClearLabel: this._t('components.list.search-clear-action'),
927
+ hasSearchBarEnd: this._hasSearchBarEnd,
928
+ onSearchInput: this._onSearchInput,
929
+ onSearchKeyDown: this._onSearchKeyDown,
930
+ onSearchFocus: this._onSearchFocus,
931
+ onSearchBlur: this._onSearchBlur,
932
+ onClearClick: this._onClearClick,
933
+ onSearchBarEndSlotChange: this._onSearchBarEndSlotChange,
934
+ },
935
+ });
610
936
  }
611
937
  };
612
938
  NLDDList.styles = [listStyles];
939
+ /** Stable id for `.list__items` (the listbox), referenced by the input's
940
+ * aria-controls. Per-instance, like nldd-combo-box's `_menuId`. */
941
+ NLDDList._idCounter = 0;
942
+ /** Counter for auto-assigned option ids (listbox mode). */
943
+ NLDDList._optionIdCounter = 0;
613
944
  __decorate([
614
945
  property({ reflect: true })
615
946
  ], NLDDList.prototype, "variant", void 0);
@@ -628,12 +959,18 @@ __decorate([
628
959
  __decorate([
629
960
  property({ type: Boolean, reflect: true, attribute: 'arrow-navigation' })
630
961
  ], NLDDList.prototype, "arrowNavigation", void 0);
962
+ __decorate([
963
+ property({ type: String, reflect: true })
964
+ ], NLDDList.prototype, "height", void 0);
631
965
  __decorate([
632
966
  property({ type: String, attribute: 'empty-text' })
633
967
  ], NLDDList.prototype, "emptyText", void 0);
634
968
  __decorate([
635
969
  property({ type: String, attribute: 'empty-supporting-text' })
636
970
  ], NLDDList.prototype, "emptySupportingText", void 0);
971
+ __decorate([
972
+ property({ type: String, attribute: 'accessible-label' })
973
+ ], NLDDList.prototype, "accessibleLabel", void 0);
637
974
  __decorate([
638
975
  property({ type: Object })
639
976
  ], NLDDList.prototype, "translations", void 0);
@@ -642,11 +979,26 @@ __decorate([
642
979
  ], NLDDList.prototype, "_mergedTranslations", void 0);
643
980
  __decorate([
644
981
  state()
645
- ], NLDDList.prototype, "_hasHeader", void 0);
982
+ ], NLDDList.prototype, "_hasToolbar", void 0);
983
+ __decorate([
984
+ state()
985
+ ], NLDDList.prototype, "_hasSearchBarEnd", void 0);
646
986
  __decorate([
647
987
  state()
648
988
  ], NLDDList.prototype, "_isEmpty", void 0);
649
- NLDDList = __decorate([
989
+ __decorate([
990
+ state()
991
+ ], NLDDList.prototype, "_searchValue", void 0);
992
+ __decorate([
993
+ state()
994
+ ], NLDDList.prototype, "_activeId", void 0);
995
+ __decorate([
996
+ state()
997
+ ], NLDDList.prototype, "_searchFocused", void 0);
998
+ __decorate([
999
+ query('.list__search-field-input')
1000
+ ], NLDDList.prototype, "_searchInput", void 0);
1001
+ NLDDList = NLDDList_1 = __decorate([
650
1002
  customElement('nldd-list')
651
1003
  ], NLDDList);
652
1004
  export { NLDDList };