@nldd/design-system 0.8.49 → 0.8.51

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 (245) hide show
  1. package/dist/components/actions/button/button.styles.d.ts.map +1 -1
  2. package/dist/components/actions/button/button.styles.js +1 -0
  3. package/dist/components/actions/button/button.styles.js.map +1 -1
  4. package/dist/components/actions/icon-button/icon-button.styles.d.ts.map +1 -1
  5. package/dist/components/actions/icon-button/icon-button.styles.js +1 -0
  6. package/dist/components/actions/icon-button/icon-button.styles.js.map +1 -1
  7. package/dist/components/components.js +93 -86
  8. package/dist/components/content/code-viewer/code-viewer.d.ts +37 -0
  9. package/dist/components/content/code-viewer/code-viewer.d.ts.map +1 -1
  10. package/dist/components/content/code-viewer/code-viewer.i18n.d.ts +8 -0
  11. package/dist/components/content/code-viewer/code-viewer.i18n.d.ts.map +1 -0
  12. package/dist/components/content/code-viewer/code-viewer.i18n.js +7 -0
  13. package/dist/components/content/code-viewer/code-viewer.i18n.js.map +1 -0
  14. package/dist/components/content/code-viewer/code-viewer.js +104 -1
  15. package/dist/components/content/code-viewer/code-viewer.js.map +1 -1
  16. package/dist/components/content/code-viewer/code-viewer.styles.d.ts.map +1 -1
  17. package/dist/components/content/code-viewer/code-viewer.styles.js +112 -1
  18. package/dist/components/content/code-viewer/code-viewer.styles.js.map +1 -1
  19. package/dist/components/content/code-viewer/code-viewer.template.d.ts.map +1 -1
  20. package/dist/components/content/code-viewer/code-viewer.template.js +50 -3
  21. package/dist/components/content/code-viewer/code-viewer.template.js.map +1 -1
  22. package/dist/components/content/icon/icon-aliases.d.ts.map +1 -1
  23. package/dist/components/content/icon/icon-aliases.js +17 -0
  24. package/dist/components/content/icon/icon-aliases.js.map +1 -1
  25. package/dist/components/content/icon/icon-registry.d.ts.map +1 -1
  26. package/dist/components/content/icon/icon-registry.js +12 -0
  27. package/dist/components/content/icon/icon-registry.js.map +1 -1
  28. package/dist/components/content/image/image.d.ts +151 -0
  29. package/dist/components/content/image/image.d.ts.map +1 -0
  30. package/dist/components/content/image/image.i18n.d.ts +8 -0
  31. package/dist/components/content/image/image.i18n.d.ts.map +1 -0
  32. package/dist/components/content/image/image.i18n.js +7 -0
  33. package/dist/components/content/image/image.i18n.js.map +1 -0
  34. package/dist/components/content/image/image.js +320 -0
  35. package/dist/components/content/image/image.js.map +1 -0
  36. package/dist/components/content/image/image.styles.d.ts +2 -0
  37. package/dist/components/content/image/image.styles.d.ts.map +1 -0
  38. package/dist/components/content/image/image.styles.js +402 -0
  39. package/dist/components/content/image/image.styles.js.map +1 -0
  40. package/dist/components/content/image/image.template.d.ts +3 -0
  41. package/dist/components/content/image/image.template.d.ts.map +1 -0
  42. package/dist/components/content/image/image.template.js +109 -0
  43. package/dist/components/content/image/image.template.js.map +1 -0
  44. package/dist/components/content/image/lqip-encoder-element.d.ts +39 -0
  45. package/dist/components/content/image/lqip-encoder-element.d.ts.map +1 -0
  46. package/dist/components/content/image/lqip-encoder-element.js +240 -0
  47. package/dist/components/content/image/lqip-encoder-element.js.map +1 -0
  48. package/dist/components/content/image/lqip-encoder.d.ts +59 -0
  49. package/dist/components/content/image/lqip-encoder.d.ts.map +1 -0
  50. package/dist/components/content/image/lqip-encoder.js +279 -0
  51. package/dist/components/content/image/lqip-encoder.js.map +1 -0
  52. package/dist/components/content/rich-text/rich-text.d.ts +9 -0
  53. package/dist/components/content/rich-text/rich-text.d.ts.map +1 -1
  54. package/dist/components/content/rich-text/rich-text.i18n.d.ts +5 -0
  55. package/dist/components/content/rich-text/rich-text.i18n.d.ts.map +1 -0
  56. package/dist/components/content/rich-text/rich-text.i18n.js +4 -0
  57. package/dist/components/content/rich-text/rich-text.i18n.js.map +1 -0
  58. package/dist/components/content/rich-text/rich-text.js +61 -0
  59. package/dist/components/content/rich-text/rich-text.js.map +1 -1
  60. package/dist/components/content/tooltip/tooltip.d.ts +10 -0
  61. package/dist/components/content/tooltip/tooltip.d.ts.map +1 -1
  62. package/dist/components/content/tooltip/tooltip.js +74 -2
  63. package/dist/components/content/tooltip/tooltip.js.map +1 -1
  64. package/dist/components/{index-BVOcPb8I.js → index-DYnIl3ts.js} +5435 -2205
  65. package/dist/components/index.d.ts +5 -0
  66. package/dist/components/index.d.ts.map +1 -1
  67. package/dist/components/index.js +5 -0
  68. package/dist/components/index.js.map +1 -1
  69. package/dist/components/inputs/checkbox/checkbox.styles.d.ts.map +1 -1
  70. package/dist/components/inputs/checkbox/checkbox.styles.js +1 -0
  71. package/dist/components/inputs/checkbox/checkbox.styles.js.map +1 -1
  72. package/dist/components/inputs/combo-box/combo-box.styles.d.ts.map +1 -1
  73. package/dist/components/inputs/combo-box/combo-box.styles.js +4 -1
  74. package/dist/components/inputs/combo-box/combo-box.styles.js.map +1 -1
  75. package/dist/components/inputs/dropdown/dropdown.styles.d.ts.map +1 -1
  76. package/dist/components/inputs/dropdown/dropdown.styles.js +1 -0
  77. package/dist/components/inputs/dropdown/dropdown.styles.js.map +1 -1
  78. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.styles.d.ts.map +1 -1
  79. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.styles.js +4 -1
  80. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.styles.js.map +1 -1
  81. package/dist/components/inputs/password-field/password-field.styles.d.ts.map +1 -1
  82. package/dist/components/inputs/password-field/password-field.styles.js +4 -1
  83. package/dist/components/inputs/password-field/password-field.styles.js.map +1 -1
  84. package/dist/components/inputs/radio-button/radio-button.styles.d.ts.map +1 -1
  85. package/dist/components/inputs/radio-button/radio-button.styles.js +1 -0
  86. package/dist/components/inputs/radio-button/radio-button.styles.js.map +1 -1
  87. package/dist/components/inputs/search-field/search-field.styles.d.ts.map +1 -1
  88. package/dist/components/inputs/search-field/search-field.styles.js +4 -1
  89. package/dist/components/inputs/search-field/search-field.styles.js.map +1 -1
  90. package/dist/components/inputs/segmented-control/segmented-control.styles.d.ts.map +1 -1
  91. package/dist/components/inputs/segmented-control/segmented-control.styles.js +1 -0
  92. package/dist/components/inputs/segmented-control/segmented-control.styles.js.map +1 -1
  93. package/dist/components/inputs/stepper/stepper.styles.d.ts.map +1 -1
  94. package/dist/components/inputs/stepper/stepper.styles.js +1 -0
  95. package/dist/components/inputs/stepper/stepper.styles.js.map +1 -1
  96. package/dist/components/inputs/switch/switch.styles.d.ts.map +1 -1
  97. package/dist/components/inputs/switch/switch.styles.js +1 -0
  98. package/dist/components/inputs/switch/switch.styles.js.map +1 -1
  99. package/dist/components/inputs/text-field/text-field.styles.d.ts.map +1 -1
  100. package/dist/components/inputs/text-field/text-field.styles.js +4 -1
  101. package/dist/components/inputs/text-field/text-field.styles.js.map +1 -1
  102. package/dist/components/inputs/toggle-button/toggle-button.d.ts +1 -1
  103. package/dist/components/inputs/toggle-button/toggle-button.d.ts.map +1 -1
  104. package/dist/components/inputs/toggle-button/toggle-button.js +22 -14
  105. package/dist/components/inputs/toggle-button/toggle-button.js.map +1 -1
  106. package/dist/components/inputs/toggle-button/toggle-button.styles.d.ts.map +1 -1
  107. package/dist/components/inputs/toggle-button/toggle-button.styles.js +16 -11
  108. package/dist/components/inputs/toggle-button/toggle-button.styles.js.map +1 -1
  109. package/dist/components/inputs/toggle-button/toggle-button.template.d.ts.map +1 -1
  110. package/dist/components/inputs/toggle-button/toggle-button.template.js +32 -16
  111. package/dist/components/inputs/toggle-button/toggle-button.template.js.map +1 -1
  112. package/dist/components/inputs/token/token.styles.d.ts.map +1 -1
  113. package/dist/components/inputs/token/token.styles.js +1 -0
  114. package/dist/components/inputs/token/token.styles.js.map +1 -1
  115. package/dist/components/layout/box/box.d.ts +6 -0
  116. package/dist/components/layout/box/box.d.ts.map +1 -1
  117. package/dist/components/layout/box/box.js +12 -1
  118. package/dist/components/layout/box/box.js.map +1 -1
  119. package/dist/components/layout/box/box.styles.d.ts.map +1 -1
  120. package/dist/components/layout/box/box.styles.js +40 -1
  121. package/dist/components/layout/box/box.styles.js.map +1 -1
  122. package/dist/components/layout/collection/collection.d.ts +1 -0
  123. package/dist/components/layout/collection/collection.d.ts.map +1 -1
  124. package/dist/components/layout/collection/collection.i18n.d.ts +1 -0
  125. package/dist/components/layout/collection/collection.i18n.d.ts.map +1 -1
  126. package/dist/components/layout/collection/collection.i18n.js +1 -0
  127. package/dist/components/layout/collection/collection.i18n.js.map +1 -1
  128. package/dist/components/layout/collection/collection.js +14 -0
  129. package/dist/components/layout/collection/collection.js.map +1 -1
  130. package/dist/components/layout/collection/collection.styles.d.ts.map +1 -1
  131. package/dist/components/layout/collection/collection.styles.js +27 -0
  132. package/dist/components/layout/collection/collection.styles.js.map +1 -1
  133. package/dist/components/layout/collection/collection.template.d.ts.map +1 -1
  134. package/dist/components/layout/collection/collection.template.js +12 -4
  135. package/dist/components/layout/collection/collection.template.js.map +1 -1
  136. package/dist/components/lists-and-menus/list/list.d.ts +10 -3
  137. package/dist/components/lists-and-menus/list/list.d.ts.map +1 -1
  138. package/dist/components/lists-and-menus/list/list.js +8 -3
  139. package/dist/components/lists-and-menus/list/list.js.map +1 -1
  140. package/dist/components/lists-and-menus/list/list.styles.d.ts.map +1 -1
  141. package/dist/components/lists-and-menus/list/list.styles.js +33 -6
  142. package/dist/components/lists-and-menus/list/list.styles.js.map +1 -1
  143. package/dist/components/lists-and-menus/list-item/list-item.js +1 -1
  144. package/dist/components/lists-and-menus/list-item/list-item.js.map +1 -1
  145. package/dist/components/lists-and-menus/menu/menu.styles.d.ts.map +1 -1
  146. package/dist/components/lists-and-menus/menu/menu.styles.js +1 -0
  147. package/dist/components/lists-and-menus/menu/menu.styles.js.map +1 -1
  148. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.d.ts.map +1 -1
  149. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.js +1 -0
  150. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.js.map +1 -1
  151. package/dist/components/navigation/menu-bar/menu-bar.styles.d.ts.map +1 -1
  152. package/dist/components/navigation/menu-bar/menu-bar.styles.js +1 -0
  153. package/dist/components/navigation/menu-bar/menu-bar.styles.js.map +1 -1
  154. package/dist/components/navigation/menu-bar-item/menu-bar-item.styles.d.ts.map +1 -1
  155. package/dist/components/navigation/menu-bar-item/menu-bar-item.styles.js +1 -0
  156. package/dist/components/navigation/menu-bar-item/menu-bar-item.styles.js.map +1 -1
  157. package/dist/components/navigation/pagination/pagination.styles.d.ts.map +1 -1
  158. package/dist/components/navigation/pagination/pagination.styles.js +1 -0
  159. package/dist/components/navigation/pagination/pagination.styles.js.map +1 -1
  160. package/dist/components/navigation/tab-bar/tab-bar.styles.d.ts.map +1 -1
  161. package/dist/components/navigation/tab-bar/tab-bar.styles.js +1 -0
  162. package/dist/components/navigation/tab-bar/tab-bar.styles.js.map +1 -1
  163. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.d.ts.map +1 -1
  164. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.js +10 -1
  165. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.js.map +1 -1
  166. package/dist/components/{prism-python-C1D7CYBc.js → prism-python-C9GXiQLy.js} +1 -1
  167. package/dist/components/{prism-rust-DI5vrP6V.js → prism-rust-De_U8Otq.js} +1 -1
  168. package/dist/components/{prism-typescript-DBgOPJ4M.js → prism-typescript-BJbUDHsa.js} +1 -1
  169. package/dist/components/sample-images/butterfly-1200.jpg +0 -0
  170. package/dist/components/sample-images/butterfly-1600.jpg +0 -0
  171. package/dist/components/sample-images/butterfly-480.jpg +0 -0
  172. package/dist/components/sample-images/butterfly-960.jpg +0 -0
  173. package/dist/components/status-and-feedback/badge/badge.d.ts +2 -2
  174. package/dist/components/status-and-feedback/badge/badge.d.ts.map +1 -1
  175. package/dist/components/status-and-feedback/badge/badge.js +1 -1
  176. package/dist/components/status-and-feedback/badge/badge.js.map +1 -1
  177. package/dist/components/status-and-feedback/badge/badge.styles.d.ts.map +1 -1
  178. package/dist/components/status-and-feedback/badge/badge.styles.js +126 -1
  179. package/dist/components/status-and-feedback/badge/badge.styles.js.map +1 -1
  180. package/dist/components/status-and-feedback/banner/banner.d.ts +89 -0
  181. package/dist/components/status-and-feedback/banner/banner.d.ts.map +1 -0
  182. package/dist/components/status-and-feedback/banner/banner.i18n.d.ts +5 -0
  183. package/dist/components/status-and-feedback/banner/banner.i18n.d.ts.map +1 -0
  184. package/dist/components/status-and-feedback/banner/banner.i18n.js +4 -0
  185. package/dist/components/status-and-feedback/banner/banner.i18n.js.map +1 -0
  186. package/dist/components/status-and-feedback/banner/banner.js +206 -0
  187. package/dist/components/status-and-feedback/banner/banner.js.map +1 -0
  188. package/dist/components/status-and-feedback/banner/banner.styles.d.ts +2 -0
  189. package/dist/components/status-and-feedback/banner/banner.styles.d.ts.map +1 -0
  190. package/dist/components/status-and-feedback/banner/banner.styles.js +160 -0
  191. package/dist/components/status-and-feedback/banner/banner.styles.js.map +1 -0
  192. package/dist/components/status-and-feedback/banner/banner.template.d.ts +3 -0
  193. package/dist/components/status-and-feedback/banner/banner.template.d.ts.map +1 -0
  194. package/dist/components/status-and-feedback/banner/banner.template.js +51 -0
  195. package/dist/components/status-and-feedback/banner/banner.template.js.map +1 -0
  196. package/dist/components/status-and-feedback/progress/progress.d.ts +77 -0
  197. package/dist/components/status-and-feedback/progress/progress.d.ts.map +1 -0
  198. package/dist/components/status-and-feedback/progress/progress.i18n.d.ts +5 -0
  199. package/dist/components/status-and-feedback/progress/progress.i18n.d.ts.map +1 -0
  200. package/dist/components/status-and-feedback/progress/progress.i18n.js +4 -0
  201. package/dist/components/status-and-feedback/progress/progress.i18n.js.map +1 -0
  202. package/dist/components/status-and-feedback/progress/progress.js +137 -0
  203. package/dist/components/status-and-feedback/progress/progress.js.map +1 -0
  204. package/dist/components/status-and-feedback/progress/progress.styles.d.ts +2 -0
  205. package/dist/components/status-and-feedback/progress/progress.styles.d.ts.map +1 -0
  206. package/dist/components/status-and-feedback/progress/progress.styles.js +57 -0
  207. package/dist/components/status-and-feedback/progress/progress.styles.js.map +1 -0
  208. package/dist/components/status-and-feedback/progress/progress.template.d.ts +4 -0
  209. package/dist/components/status-and-feedback/progress/progress.template.d.ts.map +1 -0
  210. package/dist/components/status-and-feedback/progress/progress.template.js +26 -0
  211. package/dist/components/status-and-feedback/progress/progress.template.js.map +1 -0
  212. package/dist/components/status-and-feedback/progress-bar/progress-bar.d.ts +131 -0
  213. package/dist/components/status-and-feedback/progress-bar/progress-bar.d.ts.map +1 -0
  214. package/dist/components/status-and-feedback/progress-bar/progress-bar.i18n.d.ts +8 -0
  215. package/dist/components/status-and-feedback/progress-bar/progress-bar.i18n.d.ts.map +1 -0
  216. package/dist/components/status-and-feedback/progress-bar/progress-bar.i18n.js +7 -0
  217. package/dist/components/status-and-feedback/progress-bar/progress-bar.i18n.js.map +1 -0
  218. package/dist/components/status-and-feedback/progress-bar/progress-bar.js +426 -0
  219. package/dist/components/status-and-feedback/progress-bar/progress-bar.js.map +1 -0
  220. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.d.ts +3 -0
  221. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.d.ts.map +1 -0
  222. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.js +400 -0
  223. package/dist/components/status-and-feedback/progress-bar/progress-bar.styles.js.map +1 -0
  224. package/dist/components/status-and-feedback/progress-bar/progress-bar.template.d.ts +3 -0
  225. package/dist/components/status-and-feedback/progress-bar/progress-bar.template.d.ts.map +1 -0
  226. package/dist/components/status-and-feedback/progress-bar/progress-bar.template.js +60 -0
  227. package/dist/components/status-and-feedback/progress-bar/progress-bar.template.js.map +1 -0
  228. package/dist/components/status-and-feedback/progress-circle/progress-circle.d.ts +132 -0
  229. package/dist/components/status-and-feedback/progress-circle/progress-circle.d.ts.map +1 -0
  230. package/dist/components/status-and-feedback/progress-circle/progress-circle.i18n.d.ts +8 -0
  231. package/dist/components/status-and-feedback/progress-circle/progress-circle.i18n.d.ts.map +1 -0
  232. package/dist/components/status-and-feedback/progress-circle/progress-circle.i18n.js +7 -0
  233. package/dist/components/status-and-feedback/progress-circle/progress-circle.i18n.js.map +1 -0
  234. package/dist/components/status-and-feedback/progress-circle/progress-circle.js +437 -0
  235. package/dist/components/status-and-feedback/progress-circle/progress-circle.js.map +1 -0
  236. package/dist/components/status-and-feedback/progress-circle/progress-circle.styles.d.ts +3 -0
  237. package/dist/components/status-and-feedback/progress-circle/progress-circle.styles.d.ts.map +1 -0
  238. package/dist/components/status-and-feedback/progress-circle/progress-circle.styles.js +245 -0
  239. package/dist/components/status-and-feedback/progress-circle/progress-circle.styles.js.map +1 -0
  240. package/dist/components/status-and-feedback/progress-circle/progress-circle.template.d.ts +14 -0
  241. package/dist/components/status-and-feedback/progress-circle/progress-circle.template.d.ts.map +1 -0
  242. package/dist/components/status-and-feedback/progress-circle/progress-circle.template.js +115 -0
  243. package/dist/components/status-and-feedback/progress-circle/progress-circle.template.js.map +1 -0
  244. package/dist/css/settings.css +346 -18
  245. package/package.json +21 -1
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Nederlandse Digitale Dienst Banner Component (Lit + TypeScript)
3
+ *
4
+ * An inline notification with a tinted background per variant. Use for
5
+ * persistent, page-level feedback (e.g. an error summary at the top of
6
+ * a form). Banner is more visually present than nldd-inline-dialog —
7
+ * the tinted colour catches the eye. If you need a quieter component,
8
+ * pick a different one rather than overriding the banner's ARIA.
9
+ *
10
+ * Layout: icon left, text + supporting text + optional rich content +
11
+ * actions in the centre, optional dismiss button right. Buttons wrap
12
+ * to a second row on narrow viewports via nldd-button-group's flex
13
+ * wrapping.
14
+ *
15
+ * ## ARIA
16
+ * role and aria-live are set automatically from the variant:
17
+ * - critical → role="alert" (interrupts screen reader)
18
+ * - others → role="status" aria-live="polite"
19
+ * Not overridable — if you need a less prominent component, use one.
20
+ *
21
+ * aria-atomic="true" is also set so that updates to the structured region
22
+ * (icon + heading + supporting-text + actions) are announced as one unit
23
+ * rather than as a partial subtree. Trade-off: any programmatic content
24
+ * mutation re-reads the entire banner. Banners are designed for short,
25
+ * heading-scale copy — if you slot in a paragraph of rich body text and
26
+ * then toggle variant or supporting-text at runtime, AT will re-announce
27
+ * the whole thing. Keep banner content concise, or render long-form
28
+ * messages in a different surface.
29
+ *
30
+ * @element nldd-banner
31
+ *
32
+ * @attr {'neutral'|'success'|'warning'|'critical'} variant - Colour and default icon (default: 'neutral')
33
+ * @attr {string} icon - Icon override. Default per variant: neutral → info-circle-filled, success → check-circle-filled, warning → exclamation-triangle-filled, critical → exclamation-circle-filled
34
+ * @attr {string} text - Main text (heading or paragraph, depending on heading-level)
35
+ * @attr {string} supporting-text - Supporting text below the heading
36
+ * @attr {1|2|3|4|5|6} heading-level - Renders text as h1–h6; absent renders a p
37
+ * @attr {boolean} dismissible - Show a close button in the top-right; emits `dismiss` when clicked
38
+ * @attr {object} translations - Override translation keys; unset keys fall back to Dutch
39
+ *
40
+ * @slot - Optional rich content between text and actions (e.g. nldd-rich-text)
41
+ * @slot actions - nldd-button elements, wrapped in a horizontal nldd-button-group
42
+ *
43
+ * @fires dismiss - Fired when the dismiss button is clicked. The consumer is responsible for removing/hiding the banner.
44
+ */
45
+ import { LitElement } from 'lit';
46
+ import type { NLDDBannerTranslations } from './banner.i18n.js';
47
+ import '../../content/icon/icon.js';
48
+ import '../../actions/button-group/button-group.js';
49
+ import '../../actions/icon-button/icon-button.js';
50
+ export type BannerVariant = 'neutral' | 'success' | 'warning' | 'critical';
51
+ export declare class NLDDBanner extends LitElement {
52
+ static styles: import("lit").CSSResult;
53
+ variant: BannerVariant;
54
+ icon: string;
55
+ text: string;
56
+ supportingText: string;
57
+ headingLevel: 1 | 2 | 3 | 4 | 5 | 6 | null;
58
+ dismissible: boolean;
59
+ /** Override one or more translation keys. Unspecified keys fall back to Dutch. */
60
+ translations: Partial<NLDDBannerTranslations>;
61
+ _hasContent: boolean;
62
+ _hasActions: boolean;
63
+ /** Stored slot-change listener references so disconnectedCallback can
64
+ * remove them. Shadow-DOM slots are GC'd with the host, so leakage is
65
+ * cosmetic — but we keep cleanup symmetric with addEventListener. */
66
+ private _syncContent?;
67
+ private _syncActions?;
68
+ constructor();
69
+ _t(key: keyof NLDDBannerTranslations): string;
70
+ get _resolvedIcon(): string;
71
+ updated(changed: Map<string, unknown>): void;
72
+ private _applyAriaForVariant;
73
+ /** Re-runs every connectedCallback (i.e. also after a move-and-reinsert),
74
+ * unlike firstUpdated which is one-shot. Without this, slotchange after
75
+ * a reconnect would never update _hasContent / _hasActions because the
76
+ * listeners were torn down in disconnectedCallback and never re-attached. */
77
+ private _attachSlotListeners;
78
+ firstUpdated(): void;
79
+ connectedCallback(): void;
80
+ disconnectedCallback(): void;
81
+ _onDismissClick(): void;
82
+ render(): import("lit-html").TemplateResult<1>;
83
+ }
84
+ declare global {
85
+ interface HTMLElementTagNameMap {
86
+ 'nldd-banner': NLDDBanner;
87
+ }
88
+ }
89
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../../../src/components/status-and-feedback/banner/banner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAKjC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,4BAA4B,CAAC;AACpC,OAAO,4CAA4C,CAAC;AACpD,OAAO,0CAA0C,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAS3E,qBACa,UAAW,SAAQ,UAAU;IACzC,OAAgB,MAAM,0BAAgB;IAGtC,OAAO,EAAE,aAAa,CAAa;IAGnC,IAAI,SAAM;IAGV,IAAI,SAAM;IAGV,cAAc,SAAM;IAGpB,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAGlD,WAAW,UAAS;IAEpB,kFAAkF;IAElF,YAAY,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAM;IAGnD,WAAW,UAAS;IAGpB,WAAW,UAAS;IAEpB;;0EAEsE;IACtE,OAAO,CAAC,YAAY,CAAC,CAAa;IAClC,OAAO,CAAC,YAAY,CAAC,CAAa;;IAe3B,EAAE,CAAC,GAAG,EAAE,MAAM,sBAAsB,GAAG,MAAM;IAIpD,IAAI,aAAa,IAAI,MAAM,CAE1B;IAaQ,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIrD,OAAO,CAAC,oBAAoB;IAc5B;;;kFAG8E;IAC9E,OAAO,CAAC,oBAAoB;IAmBnB,YAAY,IAAI,IAAI;IAIpB,iBAAiB,IAAI,IAAI;IAUzB,oBAAoB,IAAI,IAAI;IAU9B,eAAe,IAAI,IAAI;IAIrB,MAAM;CAGf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,aAAa,EAAE,UAAU,CAAC;KAC1B;CACD"}
@@ -0,0 +1,5 @@
1
+ export declare const nlddBannerTranslations: {
2
+ 'components.banner.dismiss-action': string;
3
+ };
4
+ export type NLDDBannerTranslations = typeof nlddBannerTranslations;
5
+ //# sourceMappingURL=banner.i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.i18n.d.ts","sourceRoot":"","sources":["../../../../src/components/status-and-feedback/banner/banner.i18n.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB;;CAElC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const nlddBannerTranslations = {
2
+ 'components.banner.dismiss-action': 'Sluit',
3
+ };
4
+ //# sourceMappingURL=banner.i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.i18n.js","sourceRoot":"","sources":["../../../../src/components/status-and-feedback/banner/banner.i18n.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACrC,kCAAkC,EAAE,OAAO;CAC3C,CAAC"}
@@ -0,0 +1,206 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ /**
8
+ * Nederlandse Digitale Dienst Banner Component (Lit + TypeScript)
9
+ *
10
+ * An inline notification with a tinted background per variant. Use for
11
+ * persistent, page-level feedback (e.g. an error summary at the top of
12
+ * a form). Banner is more visually present than nldd-inline-dialog —
13
+ * the tinted colour catches the eye. If you need a quieter component,
14
+ * pick a different one rather than overriding the banner's ARIA.
15
+ *
16
+ * Layout: icon left, text + supporting text + optional rich content +
17
+ * actions in the centre, optional dismiss button right. Buttons wrap
18
+ * to a second row on narrow viewports via nldd-button-group's flex
19
+ * wrapping.
20
+ *
21
+ * ## ARIA
22
+ * role and aria-live are set automatically from the variant:
23
+ * - critical → role="alert" (interrupts screen reader)
24
+ * - others → role="status" aria-live="polite"
25
+ * Not overridable — if you need a less prominent component, use one.
26
+ *
27
+ * aria-atomic="true" is also set so that updates to the structured region
28
+ * (icon + heading + supporting-text + actions) are announced as one unit
29
+ * rather than as a partial subtree. Trade-off: any programmatic content
30
+ * mutation re-reads the entire banner. Banners are designed for short,
31
+ * heading-scale copy — if you slot in a paragraph of rich body text and
32
+ * then toggle variant or supporting-text at runtime, AT will re-announce
33
+ * the whole thing. Keep banner content concise, or render long-form
34
+ * messages in a different surface.
35
+ *
36
+ * @element nldd-banner
37
+ *
38
+ * @attr {'neutral'|'success'|'warning'|'critical'} variant - Colour and default icon (default: 'neutral')
39
+ * @attr {string} icon - Icon override. Default per variant: neutral → info-circle-filled, success → check-circle-filled, warning → exclamation-triangle-filled, critical → exclamation-circle-filled
40
+ * @attr {string} text - Main text (heading or paragraph, depending on heading-level)
41
+ * @attr {string} supporting-text - Supporting text below the heading
42
+ * @attr {1|2|3|4|5|6} heading-level - Renders text as h1–h6; absent renders a p
43
+ * @attr {boolean} dismissible - Show a close button in the top-right; emits `dismiss` when clicked
44
+ * @attr {object} translations - Override translation keys; unset keys fall back to Dutch
45
+ *
46
+ * @slot - Optional rich content between text and actions (e.g. nldd-rich-text)
47
+ * @slot actions - nldd-button elements, wrapped in a horizontal nldd-button-group
48
+ *
49
+ * @fires dismiss - Fired when the dismiss button is clicked. The consumer is responsible for removing/hiding the banner.
50
+ */
51
+ import { LitElement } from 'lit';
52
+ import { customElement, property, state } from 'lit/decorators.js';
53
+ import { bannerStyles } from './banner.styles.js';
54
+ import { bannerTemplate } from './banner.template.js';
55
+ import { nlddBannerTranslations } from './banner.i18n.js';
56
+ import '../../content/icon/icon.js';
57
+ import '../../actions/button-group/button-group.js';
58
+ import '../../actions/icon-button/icon-button.js';
59
+ const DEFAULT_ICONS = {
60
+ neutral: 'info-circle-filled',
61
+ success: 'check-circle-filled',
62
+ warning: 'exclamation-triangle-filled',
63
+ critical: 'exclamation-circle-filled',
64
+ };
65
+ let NLDDBanner = class NLDDBanner extends LitElement {
66
+ constructor() {
67
+ super();
68
+ this.variant = 'neutral';
69
+ this.icon = '';
70
+ this.text = '';
71
+ this.supportingText = '';
72
+ this.headingLevel = null;
73
+ this.dismissible = false;
74
+ /** Override one or more translation keys. Unspecified keys fall back to Dutch. */
75
+ this.translations = {};
76
+ this._hasContent = false;
77
+ this._hasActions = false;
78
+ // AT requires role + aria-live to be present on the element by the time
79
+ // it's first inserted into the DOM, otherwise the initial announcement
80
+ // is missed. Reading the raw attribute here (instead of waiting for
81
+ // Lit to project the @property) lets us cover both HTML-declared
82
+ // (attribute set before constructor returns) and document.createElement
83
+ // + setAttribute (attribute set before appendChild) flows. updated()
84
+ // still keeps the host in sync when variant changes at runtime.
85
+ const initialVariant = this.getAttribute('variant');
86
+ this._applyAriaForVariant(initialVariant ?? 'neutral');
87
+ }
88
+ _t(key) {
89
+ return this.translations[key] ?? nlddBannerTranslations[key];
90
+ }
91
+ get _resolvedIcon() {
92
+ return this.icon || DEFAULT_ICONS[this.variant];
93
+ }
94
+ /* The host gets role+aria-live based on variant. Critical interrupts
95
+ * (assertive); other variants are polite announcements. Not exposed
96
+ * for override — consumers who need quieter semantics should pick a
97
+ * different component.
98
+ *
99
+ * Note on dynamic variant changes: AT engines vary on whether they
100
+ * re-announce when a live-region's role / aria-live changes after the
101
+ * element is already in the AT tree. Constructor-time setup covers
102
+ * the common case (variant fixed at insertion). Toggling variant at
103
+ * runtime updates the visual treatment immediately but the new
104
+ * announcement may not fire on every screen reader. */
105
+ updated(changed) {
106
+ if (changed.has('variant'))
107
+ this._applyAriaForVariant(this.variant);
108
+ }
109
+ _applyAriaForVariant(variant) {
110
+ if (variant === 'critical') {
111
+ this.setAttribute('role', 'alert');
112
+ this.removeAttribute('aria-live');
113
+ }
114
+ else {
115
+ this.setAttribute('role', 'status');
116
+ this.setAttribute('aria-live', 'polite');
117
+ }
118
+ // Banner is a structured region (icon + heading + supporting-text +
119
+ // actions). Without aria-atomic some screen readers announce only the
120
+ // changed subtree on updates, producing incomplete announcements.
121
+ this.setAttribute('aria-atomic', 'true');
122
+ }
123
+ /** Re-runs every connectedCallback (i.e. also after a move-and-reinsert),
124
+ * unlike firstUpdated which is one-shot. Without this, slotchange after
125
+ * a reconnect would never update _hasContent / _hasActions because the
126
+ * listeners were torn down in disconnectedCallback and never re-attached. */
127
+ _attachSlotListeners() {
128
+ const contentSlot = this.shadowRoot?.querySelector('slot:not([name])');
129
+ const actionsSlot = this.shadowRoot?.querySelector('slot[name="actions"]');
130
+ if (!contentSlot && !actionsSlot)
131
+ return;
132
+ const hasMeaningfulContent = (slot) => {
133
+ const nodes = slot?.assignedNodes({ flatten: true }) ?? [];
134
+ return nodes.some((n) => n.nodeType === Node.ELEMENT_NODE
135
+ || (n.nodeType === Node.TEXT_NODE && (n.textContent?.trim() ?? '') !== ''));
136
+ };
137
+ this._syncContent = () => { this._hasContent = hasMeaningfulContent(contentSlot); };
138
+ this._syncActions = () => { this._hasActions = hasMeaningfulContent(actionsSlot); };
139
+ contentSlot?.addEventListener('slotchange', this._syncContent);
140
+ actionsSlot?.addEventListener('slotchange', this._syncActions);
141
+ this._syncContent();
142
+ this._syncActions();
143
+ }
144
+ firstUpdated() {
145
+ this._attachSlotListeners();
146
+ }
147
+ connectedCallback() {
148
+ super.connectedCallback();
149
+ // Re-attach when reconnecting after a previous disconnect; firstUpdated
150
+ // doesn't fire again. Guard on shadowRoot existence so we don't run
151
+ // twice on the very first connect (firstUpdated will handle that one).
152
+ if (this.shadowRoot && !this._syncContent) {
153
+ this._attachSlotListeners();
154
+ }
155
+ }
156
+ disconnectedCallback() {
157
+ const contentSlot = this.shadowRoot?.querySelector('slot:not([name])');
158
+ const actionsSlot = this.shadowRoot?.querySelector('slot[name="actions"]');
159
+ if (this._syncContent)
160
+ contentSlot?.removeEventListener('slotchange', this._syncContent);
161
+ if (this._syncActions)
162
+ actionsSlot?.removeEventListener('slotchange', this._syncActions);
163
+ this._syncContent = undefined;
164
+ this._syncActions = undefined;
165
+ super.disconnectedCallback();
166
+ }
167
+ _onDismissClick() {
168
+ this.dispatchEvent(new CustomEvent('dismiss', { bubbles: true, composed: true }));
169
+ }
170
+ render() {
171
+ return bannerTemplate(this);
172
+ }
173
+ };
174
+ NLDDBanner.styles = bannerStyles;
175
+ __decorate([
176
+ property({ type: String, reflect: true })
177
+ ], NLDDBanner.prototype, "variant", void 0);
178
+ __decorate([
179
+ property({ type: String, reflect: true })
180
+ ], NLDDBanner.prototype, "icon", void 0);
181
+ __decorate([
182
+ property({ type: String })
183
+ ], NLDDBanner.prototype, "text", void 0);
184
+ __decorate([
185
+ property({ type: String, attribute: 'supporting-text' })
186
+ ], NLDDBanner.prototype, "supportingText", void 0);
187
+ __decorate([
188
+ property({ type: Number, reflect: true, attribute: 'heading-level' })
189
+ ], NLDDBanner.prototype, "headingLevel", void 0);
190
+ __decorate([
191
+ property({ type: Boolean, reflect: true })
192
+ ], NLDDBanner.prototype, "dismissible", void 0);
193
+ __decorate([
194
+ property({ type: Object })
195
+ ], NLDDBanner.prototype, "translations", void 0);
196
+ __decorate([
197
+ state()
198
+ ], NLDDBanner.prototype, "_hasContent", void 0);
199
+ __decorate([
200
+ state()
201
+ ], NLDDBanner.prototype, "_hasActions", void 0);
202
+ NLDDBanner = __decorate([
203
+ customElement('nldd-banner')
204
+ ], NLDDBanner);
205
+ export { NLDDBanner };
206
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../../../src/components/status-and-feedback/banner/banner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const bannerStyles: import("lit").CSSResult;
2
+ //# sourceMappingURL=banner.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/status-and-feedback/banner/banner.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,yBA6JxB,CAAC"}
@@ -0,0 +1,160 @@
1
+ import { css } from 'lit';
2
+ export const bannerStyles = css `
3
+
4
+
5
+ /* # Host */
6
+
7
+ :host {
8
+ --_corner-radius: var(--components-banner-corner-radius);
9
+ --_padding: var(--components-banner-padding);
10
+ --_background-color: var(--components-banner-neutral-background-color);
11
+ --_border-color: var(--components-banner-neutral-border-color);
12
+ --_border-width: var(--primitives-border-width-thin);
13
+ --_icon-color: var(--components-banner-neutral-icon-color);
14
+ --_icon-size: var(--primitives-space-28);
15
+ --_content-color: var(--components-banner-content-color);
16
+ --_content-secondary-color: var(--components-banner-content-secondary-color);
17
+ --_text-icon-offset: calc((var(--_icon-size) - var(--primitives-font-size-100) * var(--primitives-line-height-tight)) / 2);
18
+ --_column-gap: var(--primitives-space-10);
19
+ --_dismissible-padding-right: var(--primitives-space-44);
20
+ --_main-gap: var(--primitives-space-8);
21
+ --_actions-gap: var(--primitives-space-4);
22
+
23
+ box-sizing: border-box;
24
+ display: grid;
25
+ position: relative;
26
+ /* Inset box-shadow paints the 1px edge inside the radius without
27
+ taking layout space, matching the highlight pattern nldd-box
28
+ uses. forced-colors fallback below restores a real border for
29
+ Windows High Contrast users (box-shadow is dropped there). */
30
+ border-radius: var(--_corner-radius);
31
+ box-shadow: inset 0 0 0 var(--_border-width) var(--_border-color);
32
+ background-color: var(--_background-color);
33
+ width: 100%;
34
+ padding: var(--_padding);
35
+ grid-template-columns: auto 1fr;
36
+ gap: var(--_column-gap);
37
+ color: var(--_content-color);
38
+ }
39
+
40
+ :host([dismissible]) {
41
+ padding-right: var(--_dismissible-padding-right);
42
+ }
43
+
44
+ :host([hidden]) {
45
+ display: none;
46
+ }
47
+
48
+ :host([variant="success"]) {
49
+ --_background-color: var(--components-banner-success-background-color);
50
+ --_border-color: var(--components-banner-success-border-color);
51
+ --_icon-color: var(--components-banner-success-icon-color);
52
+ }
53
+
54
+ :host([variant="warning"]) {
55
+ --_background-color: var(--components-banner-warning-background-color);
56
+ --_border-color: var(--components-banner-warning-border-color);
57
+ --_icon-color: var(--components-banner-warning-icon-color);
58
+ }
59
+
60
+ :host([variant="critical"]) {
61
+ --_background-color: var(--components-banner-critical-background-color);
62
+ --_border-color: var(--components-banner-critical-border-color);
63
+ --_icon-color: var(--components-banner-critical-icon-color);
64
+ }
65
+
66
+
67
+ /* # Icon */
68
+
69
+ .banner__icon-area {
70
+ display: flex;
71
+ grid-column: 1;
72
+ grid-row: 1;
73
+ align-items: flex-start;
74
+ justify-content: center;
75
+ color: var(--_icon-color);
76
+ }
77
+
78
+ .banner__icon {
79
+ width: var(--_icon-size);
80
+ height: var(--_icon-size);
81
+ flex-shrink: 0;
82
+ }
83
+
84
+
85
+ /* # Main */
86
+
87
+ .banner__main {
88
+ display: flex;
89
+ grid-column: 2;
90
+ grid-row: 1;
91
+ min-width: 0;
92
+ flex-direction: column;
93
+ gap: var(--_main-gap);
94
+ }
95
+
96
+ .banner__heading {
97
+ display: flex;
98
+ padding-top: var(--_text-icon-offset);
99
+ flex-direction: column;
100
+ }
101
+
102
+ .banner__heading:has(.banner__supporting-text) {
103
+ padding-top: calc(var(--_text-icon-offset) - var(--primitives-space-2));
104
+ }
105
+
106
+ .banner__text {
107
+ margin: 0;
108
+ font: var(--primitives-font-body-md-bold-tight);
109
+ text-wrap: pretty;
110
+ }
111
+
112
+ .banner__supporting-text {
113
+ margin: 0;
114
+ color: var(--_content-secondary-color);
115
+ font: var(--primitives-font-body-md-regular-tight);
116
+ text-wrap: pretty;
117
+ }
118
+
119
+ .banner__content {
120
+ display: contents;
121
+ }
122
+
123
+ .banner__content[hidden] {
124
+ display: none;
125
+ }
126
+
127
+ .banner__actions {
128
+ display: flex;
129
+ margin-top: var(--_actions-gap);
130
+ }
131
+
132
+ .banner__actions[hidden] {
133
+ display: none;
134
+ }
135
+
136
+
137
+ /* # Dismiss */
138
+
139
+ .banner__dismiss-button {
140
+ display: flex;
141
+ position: absolute;
142
+ top: 0;
143
+ right: 0;
144
+ }
145
+
146
+
147
+ /* # Accessibility
148
+ forced-colors / Windows High Contrast strips box-shadow, so the inset
149
+ edge would disappear and the banner would lose its semantic frame
150
+ against the system background. Restore it with a real border in that
151
+ mode. CanvasText is the system foreground color so the border always
152
+ meets contrast. */
153
+
154
+ @media (forced-colors: active) {
155
+ :host {
156
+ border: var(--_border-width) solid CanvasText;
157
+ }
158
+ }
159
+ `;
160
+ //# sourceMappingURL=banner.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.styles.js","sourceRoot":"","sources":["../../../../src/components/status-and-feedback/banner/banner.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6J9B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { NLDDBanner } from './banner.js';
2
+ export declare function bannerTemplate(component: NLDDBanner): import("lit-html").TemplateResult<1>;
3
+ //# sourceMappingURL=banner.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.template.d.ts","sourceRoot":"","sources":["../../../../src/components/status-and-feedback/banner/banner.template.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,cAAc,CAAC,SAAS,EAAE,UAAU,wCAgDnD"}
@@ -0,0 +1,51 @@
1
+ import { html, nothing } from 'lit';
2
+ export function bannerTemplate(component) {
3
+ const heading = (text) => {
4
+ switch (component.headingLevel) {
5
+ case 1: return html `<h1 class="banner__text">${text}</h1>`;
6
+ case 2: return html `<h2 class="banner__text">${text}</h2>`;
7
+ case 3: return html `<h3 class="banner__text">${text}</h3>`;
8
+ case 4: return html `<h4 class="banner__text">${text}</h4>`;
9
+ case 5: return html `<h5 class="banner__text">${text}</h5>`;
10
+ case 6: return html `<h6 class="banner__text">${text}</h6>`;
11
+ default: return html `<p class="banner__text">${text}</p>`;
12
+ }
13
+ };
14
+ return html `
15
+ <div class="banner__icon-area" aria-hidden="true">
16
+ <nldd-icon class="banner__icon"
17
+ name=${component._resolvedIcon}
18
+ ></nldd-icon>
19
+ </div>
20
+ <div class="banner__main">
21
+ ${component.text || component.supportingText ? html `
22
+ <div class="banner__heading">
23
+ ${component.text ? heading(component.text) : nothing}
24
+ ${component.supportingText ? html `
25
+ <p class="banner__supporting-text">${component.supportingText}</p>
26
+ ` : nothing}
27
+ </div>
28
+ ` : nothing}
29
+ <div class="banner__content" ?hidden=${!component._hasContent}>
30
+ <slot></slot>
31
+ </div>
32
+ <div class="banner__actions" ?hidden=${!component._hasActions}>
33
+ <nldd-button-group orientation="horizontal">
34
+ <slot name="actions"></slot>
35
+ </nldd-button-group>
36
+ </div>
37
+ </div>
38
+ ${component.dismissible ? html `
39
+ <div class="banner__dismiss-button">
40
+ <nldd-icon-button
41
+ icon="dismiss-small"
42
+ variant="neutral-transparent"
43
+ size="md"
44
+ accessible-label=${component._t('components.banner.dismiss-action')}
45
+ @click=${component._onDismissClick}
46
+ ></nldd-icon-button>
47
+ </div>
48
+ ` : nothing}
49
+ `;
50
+ }
51
+ //# sourceMappingURL=banner.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.template.js","sourceRoot":"","sources":["../../../../src/components/status-and-feedback/banner/banner.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,UAAU,cAAc,CAAC,SAAqB;IACnD,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;QAChC,QAAQ,SAAS,CAAC,YAAY,EAAE,CAAC;YAChC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAA,4BAA4B,IAAI,OAAO,CAAC;YAC3D,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAA,4BAA4B,IAAI,OAAO,CAAC;YAC3D,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAA,4BAA4B,IAAI,OAAO,CAAC;YAC3D,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAA,4BAA4B,IAAI,OAAO,CAAC;YAC3D,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAA,4BAA4B,IAAI,OAAO,CAAC;YAC3D,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAA,4BAA4B,IAAI,OAAO,CAAC;YAC3D,OAAO,CAAC,CAAC,OAAO,IAAI,CAAA,2BAA2B,IAAI,MAAM,CAAC;QAC3D,CAAC;IACF,CAAC,CAAC;IACF,OAAO,IAAI,CAAA;;;WAGD,SAAS,CAAC,aAAa;;;;KAI7B,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAA;;OAE/C,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO;OAClD,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAA;2CACK,SAAS,CAAC,cAAc;MAC7D,CAAC,CAAC,CAAC,OAAO;;IAEZ,CAAC,CAAC,CAAC,OAAO;0CAC4B,CAAC,SAAS,CAAC,WAAW;;;0CAGtB,CAAC,SAAS,CAAC,WAAW;;;;;;IAM5D,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAA;;;;;;wBAMR,SAAS,CAAC,EAAE,CAAC,kCAAkC,CAAC;cAC1D,SAAS,CAAC,eAAe;;;GAGpC,CAAC,CAAC,CAAC,OAAO;EACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Nederlandse Digitale Dienst Progress Component (Lit + TypeScript)
3
+ *
4
+ * Layout placeholder that fills its parent and centres an indeterminate
5
+ * progress indicator. Holds the indicator back for 1000ms so brief loading
6
+ * states don't flash a spinner; once the delay passes the indicator fades in.
7
+ *
8
+ * Default is an indeterminate `<nldd-progress-circle>` with the translated
9
+ * "Laden" label. Drop anything in the slot (a progress-bar, a customised
10
+ * progress-circle, etc.) to override.
11
+ *
12
+ * Reconnect behaviour: every `connectedCallback` resets the timer and hides
13
+ * the indicator again. If a consumer toggles the element via a conditional
14
+ * render (remove + re-insert) the spinner will disappear and re-fade after
15
+ * another 1000ms. Keep the element mounted and toggle visibility / `hidden`
16
+ * instead if you want the timer to run only once.
17
+ *
18
+ * Accessibility: the host element carries `aria-busy="true"` for as long as
19
+ * it is connected and not marked `complete`, including the silent 1000 ms
20
+ * pre-spinner window. AT users landing on the region during that window are
21
+ * told loading is in progress, even before the visual spinner appears.
22
+ *
23
+ * Two patterns to signal "done":
24
+ * 1. (Preferred.) Unmount `<nldd-progress>` entirely. aria-busy goes away
25
+ * with the element, and the indicator's `progressbar` role disappears
26
+ * from the AT tree.
27
+ * 2. Set the boolean `complete` attribute. aria-busy is cleared and the
28
+ * indicator is hidden, but the element stays in the DOM. Use this when
29
+ * you want a CSS transition out, or when the wrapper sits in a layout
30
+ * slot that would collapse if unmounted.
31
+ *
32
+ * @element nldd-progress
33
+ *
34
+ * @attr {string} text - Label under the default indicator. Falls back to the
35
+ * translated "Laden" string when unset. Ignored when the slot is filled.
36
+ * @attr {boolean} no-label - Suppress the label under the default indicator
37
+ * entirely. Use when the surrounding UI already conveys "loading" and an
38
+ * extra "Laden" caption would be redundant noise.
39
+ * @attr {boolean} complete - Mark the loader as finished while keeping the
40
+ * element mounted; clears aria-busy and hides the indicator.
41
+ * @attr {object} translations - Override translation keys; unset keys fall back to Dutch
42
+ *
43
+ * @slot - Optional custom indicator; overrides the default progress-circle.
44
+ * The host carries `aria-busy="true"` for AT users, but the default ARIA
45
+ * semantics on the visible indicator (role="progressbar", aria-valuetext)
46
+ * come from the built-in `<nldd-progress-circle>`. Consumers replacing the
47
+ * slot are responsible for supplying their own progressbar role / label
48
+ * on the custom indicator.
49
+ */
50
+ import { LitElement } from 'lit';
51
+ import type { NLDDProgressTranslations } from './progress.i18n.js';
52
+ import '../progress-circle/progress-circle.js';
53
+ export declare class NLDDProgress extends LitElement {
54
+ static styles: import("lit").CSSResult;
55
+ text: string;
56
+ /** Suppress the indicator's label entirely. The component still
57
+ * renders the spinner and announces aria-busy; only the visible
58
+ * "Laden" caption is hidden. Replaces the old text=" " sentinel. */
59
+ noLabel: boolean;
60
+ /** Mark the loader as finished while keeping the element mounted.
61
+ * Clears aria-busy and hides the indicator. Default false. */
62
+ complete: boolean;
63
+ translations: Partial<NLDDProgressTranslations>;
64
+ _visible: boolean;
65
+ private _delayTimeout?;
66
+ _t(key: keyof NLDDProgressTranslations): string;
67
+ connectedCallback(): void;
68
+ willUpdate(changed: Map<string, unknown>): void;
69
+ disconnectedCallback(): void;
70
+ render(): import("lit-html").TemplateResult<1> | typeof import("lit-html").nothing;
71
+ }
72
+ declare global {
73
+ interface HTMLElementTagNameMap {
74
+ 'nldd-progress': NLDDProgress;
75
+ }
76
+ }
77
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../../src/components/status-and-feedback/progress/progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAKjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,uCAAuC,CAAC;AAM/C,qBACa,YAAa,SAAQ,UAAU;IAC3C,OAAgB,MAAM,0BAAkB;IAGxC,IAAI,SAAM;IAEV;;yEAEqE;IAErE,OAAO,UAAS;IAEhB;mEAC+D;IAE/D,QAAQ,UAAS;IAGjB,YAAY,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAM;IAGrD,QAAQ,UAAS;IAEjB,OAAO,CAAC,aAAa,CAAC,CAAgC;IAE/C,EAAE,CAAC,GAAG,EAAE,MAAM,wBAAwB,GAAG,MAAM;IAI7C,iBAAiB,IAAI,IAAI;IAczB,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAU/C,oBAAoB,IAAI,IAAI;IAQ5B,MAAM;CAGf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,eAAe,EAAE,YAAY,CAAC;KAC9B;CACD"}
@@ -0,0 +1,5 @@
1
+ export declare const nlddProgressTranslations: {
2
+ 'components.progress.loading-text': string;
3
+ };
4
+ export type NLDDProgressTranslations = typeof nlddProgressTranslations;
5
+ //# sourceMappingURL=progress.i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.i18n.d.ts","sourceRoot":"","sources":["../../../../src/components/status-and-feedback/progress/progress.i18n.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB;;CAEpC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,OAAO,wBAAwB,CAAC"}