@nldd/design-system 0.8.45 → 0.8.47

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 (243) hide show
  1. package/dist/components/actions/button/button.d.ts +3 -0
  2. package/dist/components/actions/button/button.d.ts.map +1 -1
  3. package/dist/components/actions/button/button.js +26 -0
  4. package/dist/components/actions/button/button.js.map +1 -1
  5. package/dist/components/actions/button/button.template.d.ts.map +1 -1
  6. package/dist/components/actions/button/button.template.js +4 -1
  7. package/dist/components/actions/button/button.template.js.map +1 -1
  8. package/dist/components/actions/icon-button/icon-button.d.ts +2 -0
  9. package/dist/components/actions/icon-button/icon-button.d.ts.map +1 -1
  10. package/dist/components/actions/icon-button/icon-button.js +23 -0
  11. package/dist/components/actions/icon-button/icon-button.js.map +1 -1
  12. package/dist/components/components.js +83 -78
  13. package/dist/components/content/{code/code.d.ts → code-viewer/code-viewer.d.ts} +12 -11
  14. package/dist/components/content/code-viewer/code-viewer.d.ts.map +1 -0
  15. package/dist/components/content/{code/code.js → code-viewer/code-viewer.js} +32 -25
  16. package/dist/components/content/code-viewer/code-viewer.js.map +1 -0
  17. package/dist/components/content/code-viewer/code-viewer.styles.d.ts +2 -0
  18. package/dist/components/content/code-viewer/code-viewer.styles.d.ts.map +1 -0
  19. package/dist/components/content/code-viewer/code-viewer.styles.js +89 -0
  20. package/dist/components/content/code-viewer/code-viewer.styles.js.map +1 -0
  21. package/dist/components/content/code-viewer/code-viewer.template.d.ts +4 -0
  22. package/dist/components/content/code-viewer/code-viewer.template.d.ts.map +1 -0
  23. package/dist/components/content/{code/code.template.js → code-viewer/code-viewer.template.js} +3 -3
  24. package/dist/components/content/code-viewer/code-viewer.template.js.map +1 -0
  25. package/dist/components/forms/form-field/form-field.styles.d.ts.map +1 -1
  26. package/dist/components/forms/form-field/form-field.styles.js +3 -1
  27. package/dist/components/forms/form-field/form-field.styles.js.map +1 -1
  28. package/dist/components/{index-iTa3Ua3y.js → index-CuzqC3j7.js} +3045 -1775
  29. package/dist/components/index.d.ts +3 -1
  30. package/dist/components/index.d.ts.map +1 -1
  31. package/dist/components/index.js +3 -1
  32. package/dist/components/index.js.map +1 -1
  33. package/dist/components/inputs/segmented-control/segmented-control.styles.d.ts.map +1 -1
  34. package/dist/components/inputs/segmented-control/segmented-control.styles.js +10 -0
  35. package/dist/components/inputs/segmented-control/segmented-control.styles.js.map +1 -1
  36. package/dist/components/inputs/toggle-button/toggle-button.styles.d.ts.map +1 -1
  37. package/dist/components/inputs/toggle-button/toggle-button.styles.js +12 -0
  38. package/dist/components/inputs/toggle-button/toggle-button.styles.js.map +1 -1
  39. package/dist/components/inputs/token/token.styles.d.ts.map +1 -1
  40. package/dist/components/inputs/token/token.styles.js +13 -3
  41. package/dist/components/inputs/token/token.styles.js.map +1 -1
  42. package/dist/components/layout/app-view/app-view.d.ts +2 -2
  43. package/dist/components/layout/app-view/app-view.d.ts.map +1 -1
  44. package/dist/components/layout/app-view/app-view.js +2 -2
  45. package/dist/components/layout/app-view/app-view.js.map +1 -1
  46. package/dist/components/layout/collection/collection.d.ts +2 -0
  47. package/dist/components/layout/collection/collection.d.ts.map +1 -1
  48. package/dist/components/layout/collection/collection.js +8 -0
  49. package/dist/components/layout/collection/collection.js.map +1 -1
  50. package/dist/components/layout/collection/collection.styles.d.ts.map +1 -1
  51. package/dist/components/layout/collection/collection.styles.js +4 -0
  52. package/dist/components/layout/collection/collection.styles.js.map +1 -1
  53. package/dist/components/layout/collection/collection.template.d.ts.map +1 -1
  54. package/dist/components/layout/collection/collection.template.js +5 -2
  55. package/dist/components/layout/collection/collection.template.js.map +1 -1
  56. package/dist/components/layout/container/container.d.ts +62 -8
  57. package/dist/components/layout/container/container.d.ts.map +1 -1
  58. package/dist/components/layout/container/container.js +113 -11
  59. package/dist/components/layout/container/container.js.map +1 -1
  60. package/dist/components/layout/container/container.styles.d.ts.map +1 -1
  61. package/dist/components/layout/container/container.styles.js +262 -16
  62. package/dist/components/layout/container/container.styles.js.map +1 -1
  63. package/dist/components/layout/container/container.template.d.ts.map +1 -1
  64. package/dist/components/layout/container/container.template.js +5 -1
  65. package/dist/components/layout/container/container.template.js.map +1 -1
  66. package/dist/components/layout/page/page.d.ts +2 -2
  67. package/dist/components/layout/page/page.d.ts.map +1 -1
  68. package/dist/components/layout/page/page.js +1 -1
  69. package/dist/components/layout/page/page.js.map +1 -1
  70. package/dist/components/layout/page/page.styles.js +1 -1
  71. package/dist/components/layout/page-footer/page-footer.d.ts +84 -0
  72. package/dist/components/layout/page-footer/page-footer.d.ts.map +1 -0
  73. package/dist/components/layout/page-footer/page-footer.i18n.d.ts +5 -0
  74. package/dist/components/layout/page-footer/page-footer.i18n.d.ts.map +1 -0
  75. package/dist/components/layout/page-footer/page-footer.i18n.js +4 -0
  76. package/dist/components/layout/page-footer/page-footer.i18n.js.map +1 -0
  77. package/dist/components/layout/page-footer/page-footer.js +217 -0
  78. package/dist/components/layout/page-footer/page-footer.js.map +1 -0
  79. package/dist/components/layout/page-footer/page-footer.styles.d.ts +4 -0
  80. package/dist/components/layout/page-footer/page-footer.styles.d.ts.map +1 -0
  81. package/dist/components/layout/page-footer/page-footer.styles.js +207 -0
  82. package/dist/components/layout/page-footer/page-footer.styles.js.map +1 -0
  83. package/dist/components/layout/page-footer/page-footer.template.d.ts +6 -0
  84. package/dist/components/layout/page-footer/page-footer.template.d.ts.map +1 -0
  85. package/dist/components/layout/page-footer/page-footer.template.js +73 -0
  86. package/dist/components/layout/page-footer/page-footer.template.js.map +1 -0
  87. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.d.ts +26 -1
  88. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.d.ts.map +1 -1
  89. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.js +10 -1
  90. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.js.map +1 -1
  91. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.styles.d.ts.map +1 -1
  92. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.styles.js +23 -35
  93. package/dist/components/layout/page-sections/full-bleed-section/full-bleed-section.styles.js.map +1 -1
  94. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.d.ts +26 -1
  95. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.d.ts.map +1 -1
  96. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.js +10 -1
  97. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.js.map +1 -1
  98. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.styles.d.ts.map +1 -1
  99. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.styles.js +26 -53
  100. package/dist/components/layout/page-sections/one-half-one-half-section/one-half-one-half-section.styles.js.map +1 -1
  101. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.d.ts +26 -1
  102. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.d.ts.map +1 -1
  103. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.js +10 -1
  104. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.js.map +1 -1
  105. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.styles.d.ts.map +1 -1
  106. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.styles.js +33 -51
  107. package/dist/components/layout/page-sections/one-third-two-thirds-section/one-third-two-thirds-section.styles.js.map +1 -1
  108. package/dist/components/layout/page-sections/page-section-controls.d.ts +226 -0
  109. package/dist/components/layout/page-sections/page-section-controls.d.ts.map +1 -0
  110. package/dist/components/layout/page-sections/page-section-controls.js +104 -0
  111. package/dist/components/layout/page-sections/page-section-controls.js.map +1 -0
  112. package/dist/components/layout/page-sections/simple-section/simple-section.d.ts +26 -1
  113. package/dist/components/layout/page-sections/simple-section/simple-section.d.ts.map +1 -1
  114. package/dist/components/layout/page-sections/simple-section/simple-section.js +10 -1
  115. package/dist/components/layout/page-sections/simple-section/simple-section.js.map +1 -1
  116. package/dist/components/layout/page-sections/simple-section/simple-section.styles.d.ts.map +1 -1
  117. package/dist/components/layout/page-sections/simple-section/simple-section.styles.js +24 -38
  118. package/dist/components/layout/page-sections/simple-section/simple-section.styles.js.map +1 -1
  119. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.d.ts +26 -1
  120. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.d.ts.map +1 -1
  121. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.js +10 -1
  122. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.js.map +1 -1
  123. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.styles.d.ts.map +1 -1
  124. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.styles.js +33 -51
  125. package/dist/components/layout/page-sections/two-thirds-one-third-section/two-thirds-one-third-section.styles.js.map +1 -1
  126. package/dist/components/layout/split-views/bar-split-view/bar-split-view.d.ts +2 -2
  127. package/dist/components/layout/split-views/bar-split-view/bar-split-view.d.ts.map +1 -1
  128. package/dist/components/layout/split-views/bar-split-view/bar-split-view.js +1 -1
  129. package/dist/components/layout/split-views/bar-split-view/bar-split-view.js.map +1 -1
  130. package/dist/components/layout/split-views/bar-split-view/bar-split-view.styles.js +1 -1
  131. package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.styles.js +1 -1
  132. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.d.ts +2 -2
  133. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.d.ts.map +1 -1
  134. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.js +1 -1
  135. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.js.map +1 -1
  136. package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.styles.js +1 -1
  137. package/dist/components/layout/split-views/split-view-pane/split-view-pane.d.ts +2 -2
  138. package/dist/components/layout/split-views/split-view-pane/split-view-pane.d.ts.map +1 -1
  139. package/dist/components/layout/split-views/split-view-pane/split-view-pane.js +1 -1
  140. package/dist/components/layout/split-views/split-view-pane/split-view-pane.js.map +1 -1
  141. package/dist/components/layout/split-views/split-view-pane/split-view-pane.styles.js +1 -1
  142. package/dist/components/layout/split-views/stacked-split-view/stacked-split-view.d.ts +2 -2
  143. package/dist/components/layout/split-views/stacked-split-view/stacked-split-view.d.ts.map +1 -1
  144. package/dist/components/layout/split-views/stacked-split-view/stacked-split-view.js +1 -1
  145. package/dist/components/layout/split-views/stacked-split-view/stacked-split-view.js.map +1 -1
  146. package/dist/components/layout/split-views/stacked-split-view/stacked-split-view.styles.js +1 -1
  147. package/dist/components/layout/window/window.d.ts +5 -0
  148. package/dist/components/layout/window/window.d.ts.map +1 -1
  149. package/dist/components/layout/window/window.js +28 -13
  150. package/dist/components/layout/window/window.js.map +1 -1
  151. package/dist/components/layout/window/window.styles.d.ts.map +1 -1
  152. package/dist/components/layout/window/window.styles.js +1 -7
  153. package/dist/components/layout/window/window.styles.js.map +1 -1
  154. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.d.ts +6 -5
  155. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.d.ts.map +1 -1
  156. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.js +16 -111
  157. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.js.map +1 -1
  158. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.styles.d.ts +2 -0
  159. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.styles.d.ts.map +1 -0
  160. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.styles.js +94 -0
  161. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.styles.js.map +1 -0
  162. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.template.d.ts +4 -0
  163. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.template.d.ts.map +1 -0
  164. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.template.js +20 -0
  165. package/dist/components/lists-and-menus/cells/timeline-track-cell/timeline-track-cell.template.js.map +1 -0
  166. package/dist/components/lists-and-menus/list-item/list-item.styles.d.ts.map +1 -1
  167. package/dist/components/lists-and-menus/list-item/list-item.styles.js +9 -13
  168. package/dist/components/lists-and-menus/list-item/list-item.styles.js.map +1 -1
  169. package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +80 -0
  170. package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  171. package/dist/components/navigation/breadcrumbs/breadcrumbs.i18n.d.ts +6 -0
  172. package/dist/components/navigation/breadcrumbs/breadcrumbs.i18n.d.ts.map +1 -0
  173. package/dist/components/navigation/breadcrumbs/breadcrumbs.i18n.js +5 -0
  174. package/dist/components/navigation/breadcrumbs/breadcrumbs.i18n.js.map +1 -0
  175. package/dist/components/navigation/breadcrumbs/breadcrumbs.js +192 -0
  176. package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -0
  177. package/dist/components/navigation/breadcrumbs/breadcrumbs.styles.d.ts +3 -0
  178. package/dist/components/navigation/breadcrumbs/breadcrumbs.styles.d.ts.map +1 -0
  179. package/dist/components/navigation/breadcrumbs/breadcrumbs.styles.js +124 -0
  180. package/dist/components/navigation/breadcrumbs/breadcrumbs.styles.js.map +1 -0
  181. package/dist/components/navigation/breadcrumbs/breadcrumbs.template.d.ts +6 -0
  182. package/dist/components/navigation/breadcrumbs/breadcrumbs.template.d.ts.map +1 -0
  183. package/dist/components/navigation/breadcrumbs/breadcrumbs.template.js +57 -0
  184. package/dist/components/navigation/breadcrumbs/breadcrumbs.template.js.map +1 -0
  185. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.d.ts.map +1 -1
  186. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.js +3 -4
  187. package/dist/components/navigation/document-tab-bar/document-tab-bar.styles.js.map +1 -1
  188. package/dist/components/navigation/menu-bar-item/menu-bar-item.d.ts +14 -17
  189. package/dist/components/navigation/menu-bar-item/menu-bar-item.d.ts.map +1 -1
  190. package/dist/components/navigation/menu-bar-item/menu-bar-item.js +47 -46
  191. package/dist/components/navigation/menu-bar-item/menu-bar-item.js.map +1 -1
  192. package/dist/components/navigation/menu-bar-item/menu-bar-item.template.js +2 -2
  193. package/dist/components/navigation/menu-bar-item/menu-bar-item.template.js.map +1 -1
  194. package/dist/components/navigation/pagination/pagination.d.ts +8 -0
  195. package/dist/components/navigation/pagination/pagination.d.ts.map +1 -1
  196. package/dist/components/navigation/pagination/pagination.js +11 -0
  197. package/dist/components/navigation/pagination/pagination.js.map +1 -1
  198. package/dist/components/navigation/pagination/pagination.styles.d.ts.map +1 -1
  199. package/dist/components/navigation/pagination/pagination.styles.js +61 -1
  200. package/dist/components/navigation/pagination/pagination.styles.js.map +1 -1
  201. package/dist/components/navigation/pagination/pagination.template.d.ts.map +1 -1
  202. package/dist/components/navigation/pagination/pagination.template.js +1 -0
  203. package/dist/components/navigation/pagination/pagination.template.js.map +1 -1
  204. package/dist/components/navigation/tab-bar/tab-bar.styles.d.ts.map +1 -1
  205. package/dist/components/navigation/tab-bar/tab-bar.styles.js +15 -0
  206. package/dist/components/navigation/tab-bar/tab-bar.styles.js.map +1 -1
  207. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.d.ts.map +1 -1
  208. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.js +28 -26
  209. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.styles.js.map +1 -1
  210. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.template.js +1 -1
  211. package/dist/components/prism-gherkin-CMPYyXOQ.js +82 -0
  212. package/dist/components/prism-python-DUL3Gysb.js +99 -0
  213. package/dist/components/prism-rust-BGBMvZa7.js +157 -0
  214. package/dist/components/prism-sql-BGqCBMyJ.js +33 -0
  215. package/dist/components/prism-toml-Ubdq-a5x.js +45 -0
  216. package/dist/components/{prism-typescript-DG_p4Wyh.js → prism-typescript-QDrnGhET.js} +1 -1
  217. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.d.ts +3 -0
  218. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.d.ts.map +1 -1
  219. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.js +5 -0
  220. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.js.map +1 -1
  221. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.styles.d.ts.map +1 -1
  222. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.styles.js +20 -4
  223. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.styles.js.map +1 -1
  224. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.template.d.ts.map +1 -1
  225. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.template.js +16 -14
  226. package/dist/components/status-and-feedback/inline-dialog/inline-dialog.template.js.map +1 -1
  227. package/dist/css/form.css +4 -5
  228. package/dist/css/rich-text.css +27 -115
  229. package/dist/css/settings.css +46 -37
  230. package/dist/utilities/page-section-mixin.d.ts +53 -0
  231. package/dist/utilities/page-section-mixin.d.ts.map +1 -0
  232. package/dist/utilities/page-section-mixin.js +239 -0
  233. package/dist/utilities/page-section-mixin.js.map +1 -0
  234. package/package.json +12 -4
  235. package/dist/components/content/code/code.d.ts.map +0 -1
  236. package/dist/components/content/code/code.js.map +0 -1
  237. package/dist/components/content/code/code.styles.d.ts +0 -2
  238. package/dist/components/content/code/code.styles.d.ts.map +0 -1
  239. package/dist/components/content/code/code.styles.js +0 -89
  240. package/dist/components/content/code/code.styles.js.map +0 -1
  241. package/dist/components/content/code/code.template.d.ts +0 -4
  242. package/dist/components/content/code/code.template.d.ts.map +0 -1
  243. package/dist/components/content/code/code.template.js.map +0 -1
@@ -24,7 +24,7 @@ export const pageStyles = css `
24
24
  display: none;
25
25
  }
26
26
 
27
- :host([background="default"]) {
27
+ :host([background="base"]) {
28
28
  --context-parent-background-color: var(--semantics-surfaces-background-color);
29
29
  --_background-color: var(--context-parent-background-color);
30
30
  }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Nederlandse Digitale Dienst Page Footer Component (Lit + TypeScript)
3
+ *
4
+ * The footer band at the bottom of a page. Hosts three optional rows in a
5
+ * fixed order: breadcrumbs (top), consumer-defined main content (middle),
6
+ * and a legal-bar (bottom). Dividers are drawn automatically between
7
+ * non-empty rows. Establishes its own container query
8
+ * (`page-footer-container`) so the responsive padding and gap react to the
9
+ * footer's own width, not the viewport.
10
+ *
11
+ * The host has `id="page-footer"` so a skip-link can target it directly.
12
+ *
13
+ * Use the sub-components `nldd-page-footer-legal-bar` and
14
+ * `nldd-page-footer-legal-bar-item` for the bottom row.
15
+ *
16
+ * @element nldd-page-footer
17
+ *
18
+ * @slot breadcrumbs - `nldd-breadcrumbs` for the top row.
19
+ * @slot - Main footer content (typically a container with a grid
20
+ * of link columns).
21
+ * @slot legal-bar - `nldd-page-footer-legal-bar` for the bottom row.
22
+ */
23
+ import { LitElement, type PropertyValues } from 'lit';
24
+ import { type NLDDPageFooterTranslations } from './page-footer.i18n.js';
25
+ /**
26
+ * A single entry in an `nldd-page-footer-legal-bar`. Renders as a link
27
+ * when `href` is set, as plain text otherwise. Uses the content color
28
+ * (not the link color) so the legal bar reads as a subdued utility row.
29
+ *
30
+ * @attr {string} href - Link target. When omitted, the item renders as plain text.
31
+ * @attr {string} text - Item label. Falls back to the default slot.
32
+ *
33
+ * @slot - Item label (alternative to `text`).
34
+ */
35
+ export declare class NLDDPageFooterLegalBarItem extends LitElement {
36
+ static styles: import("lit").CSSResult;
37
+ href?: string;
38
+ text: string;
39
+ render(): import("lit-html").TemplateResult;
40
+ }
41
+ /**
42
+ * Holds the legal links row at the bottom of a `nldd-page-footer`. Items
43
+ * in `start` render flush-left, items in `end` flush-right, separated by
44
+ * spacing only (no separators). On narrow containers the two groups wrap
45
+ * to their own rows with `start` above `end`.
46
+ *
47
+ * @attr {string} accessible-label - Override the nav's aria-label.
48
+ * Defaults to the i18n value (NL: "Juridische links").
49
+ * @attr {object} translations - Override translation keys; unset keys
50
+ * fall back to the Dutch default.
51
+ *
52
+ * @slot start - Items rendered flush-left (e.g. © notice, version).
53
+ * @slot end - Items rendered flush-right (e.g. privacy, accessibility).
54
+ */
55
+ export declare class NLDDPageFooterLegalBar extends LitElement {
56
+ static styles: import("lit").CSSResult;
57
+ accessibleLabel: string;
58
+ translations: Partial<NLDDPageFooterTranslations>;
59
+ _hasStart: boolean;
60
+ _hasEnd: boolean;
61
+ private _mergedTranslations;
62
+ willUpdate(changed: PropertyValues): void;
63
+ _t(key: keyof NLDDPageFooterTranslations): string;
64
+ _onSlotChange: (e: Event) => void;
65
+ render(): import("lit-html").TemplateResult;
66
+ }
67
+ export declare class NLDDPageFooter extends LitElement {
68
+ static styles: import("lit").CSSResult;
69
+ _hasBreadcrumbs: boolean;
70
+ _hasMain: boolean;
71
+ _hasLegalBar: boolean;
72
+ connectedCallback(): void;
73
+ _hasMeaningfulContent(slot: HTMLSlotElement | null): boolean;
74
+ _onSlotChange: (e: Event) => void;
75
+ render(): import("lit-html").TemplateResult;
76
+ }
77
+ declare global {
78
+ interface HTMLElementTagNameMap {
79
+ 'nldd-page-footer': NLDDPageFooter;
80
+ 'nldd-page-footer-legal-bar': NLDDPageFooterLegalBar;
81
+ 'nldd-page-footer-legal-bar-item': NLDDPageFooterLegalBarItem;
82
+ }
83
+ }
84
+ //# sourceMappingURL=page-footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-footer.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/page-footer/page-footer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAYtD,OAAO,EAA8B,KAAK,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAKpG;;;;;;;;;GASG;AACH,qBAAa,0BAA2B,SAAQ,UAAU;IACzD,OAAgB,MAAM,0BAAgC;IAGtD,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,IAAI,SAAM;IAED,MAAM;CAGf;AAcD;;;;;;;;;;;;;GAaG;AACH,qBAAa,sBAAuB,SAAQ,UAAU;IACrD,OAAgB,MAAM,0BAA4B;IAGlD,eAAe,SAAM;IAGrB,YAAY,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAM;IAGvD,SAAS,UAAS;IAGlB,OAAO,UAAS;IAEhB,OAAO,CAAC,mBAAmB,CAAiE;IAEnF,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAYlD,EAAE,CAAC,GAAG,EAAE,MAAM,0BAA0B,GAAG,MAAM;IAWjD,aAAa,GAAI,GAAG,KAAK,UAMvB;IAEO,MAAM;CAGf;AAWD,qBACa,cAAe,SAAQ,UAAU;IAC7C,OAAgB,MAAM,0BAAoB;IAG1C,eAAe,UAAS;IAGxB,QAAQ,UAAS;IAGjB,YAAY,UAAS;IAEZ,iBAAiB,IAAI,IAAI;IA6BlC,qBAAqB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO;IAQ5D,aAAa,GAAI,GAAG,KAAK,UAYvB;IAEO,MAAM;CAGf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,kBAAkB,EAAE,cAAc,CAAC;QACnC,4BAA4B,EAAE,sBAAsB,CAAC;QACrD,iCAAiC,EAAE,0BAA0B,CAAC;KAC9D;CACD"}
@@ -0,0 +1,5 @@
1
+ export declare const nlddPageFooterTranslations: {
2
+ 'components.page-footer.legal-bar-accessible-label': string;
3
+ };
4
+ export type NLDDPageFooterTranslations = typeof nlddPageFooterTranslations;
5
+ //# sourceMappingURL=page-footer.i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-footer.i18n.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/page-footer/page-footer.i18n.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B;;CAEtC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const nlddPageFooterTranslations = {
2
+ 'components.page-footer.legal-bar-accessible-label': 'Juridische links',
3
+ };
4
+ //# sourceMappingURL=page-footer.i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-footer.i18n.js","sourceRoot":"","sources":["../../../../src/components/layout/page-footer/page-footer.i18n.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACzC,mDAAmD,EAAE,kBAAkB;CACvE,CAAC"}
@@ -0,0 +1,217 @@
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 Page Footer Component (Lit + TypeScript)
9
+ *
10
+ * The footer band at the bottom of a page. Hosts three optional rows in a
11
+ * fixed order: breadcrumbs (top), consumer-defined main content (middle),
12
+ * and a legal-bar (bottom). Dividers are drawn automatically between
13
+ * non-empty rows. Establishes its own container query
14
+ * (`page-footer-container`) so the responsive padding and gap react to the
15
+ * footer's own width, not the viewport.
16
+ *
17
+ * The host has `id="page-footer"` so a skip-link can target it directly.
18
+ *
19
+ * Use the sub-components `nldd-page-footer-legal-bar` and
20
+ * `nldd-page-footer-legal-bar-item` for the bottom row.
21
+ *
22
+ * @element nldd-page-footer
23
+ *
24
+ * @slot breadcrumbs - `nldd-breadcrumbs` for the top row.
25
+ * @slot - Main footer content (typically a container with a grid
26
+ * of link columns).
27
+ * @slot legal-bar - `nldd-page-footer-legal-bar` for the bottom row.
28
+ */
29
+ import { LitElement } from 'lit';
30
+ import { customElement, property, state } from 'lit/decorators.js';
31
+ import { pageFooterStyles, pageFooterLegalBarStyles, pageFooterLegalBarItemStyles, } from './page-footer.styles.js';
32
+ import { pageFooterTemplate, pageFooterLegalBarTemplate, pageFooterLegalBarItemTemplate, } from './page-footer.template.js';
33
+ import { nlddPageFooterTranslations } from './page-footer.i18n.js';
34
+ // # nldd-page-footer-legal-bar-item
35
+ /**
36
+ * A single entry in an `nldd-page-footer-legal-bar`. Renders as a link
37
+ * when `href` is set, as plain text otherwise. Uses the content color
38
+ * (not the link color) so the legal bar reads as a subdued utility row.
39
+ *
40
+ * @attr {string} href - Link target. When omitted, the item renders as plain text.
41
+ * @attr {string} text - Item label. Falls back to the default slot.
42
+ *
43
+ * @slot - Item label (alternative to `text`).
44
+ */
45
+ export class NLDDPageFooterLegalBarItem extends LitElement {
46
+ constructor() {
47
+ super(...arguments);
48
+ this.text = '';
49
+ }
50
+ render() {
51
+ return pageFooterLegalBarItemTemplate(this);
52
+ }
53
+ }
54
+ NLDDPageFooterLegalBarItem.styles = pageFooterLegalBarItemStyles;
55
+ __decorate([
56
+ property({ type: String, reflect: true })
57
+ ], NLDDPageFooterLegalBarItem.prototype, "href", void 0);
58
+ __decorate([
59
+ property({ type: String, reflect: true })
60
+ ], NLDDPageFooterLegalBarItem.prototype, "text", void 0);
61
+ // Sub-component of nldd-page-footer-legal-bar. Exported as a public class
62
+ // for type imports and slot-content composition. The guard registration
63
+ // (matches nldd-menu's nldd-menu-item) is for de-dupe safety: @customElement
64
+ // throws if the same tag is defined twice during HMR or test re-imports,
65
+ // the guard keeps the first registration authoritative.
66
+ if (!customElements.get('nldd-page-footer-legal-bar-item')) {
67
+ customElements.define('nldd-page-footer-legal-bar-item', NLDDPageFooterLegalBarItem);
68
+ }
69
+ // # nldd-page-footer-legal-bar
70
+ /**
71
+ * Holds the legal links row at the bottom of a `nldd-page-footer`. Items
72
+ * in `start` render flush-left, items in `end` flush-right, separated by
73
+ * spacing only (no separators). On narrow containers the two groups wrap
74
+ * to their own rows with `start` above `end`.
75
+ *
76
+ * @attr {string} accessible-label - Override the nav's aria-label.
77
+ * Defaults to the i18n value (NL: "Juridische links").
78
+ * @attr {object} translations - Override translation keys; unset keys
79
+ * fall back to the Dutch default.
80
+ *
81
+ * @slot start - Items rendered flush-left (e.g. © notice, version).
82
+ * @slot end - Items rendered flush-right (e.g. privacy, accessibility).
83
+ */
84
+ export class NLDDPageFooterLegalBar extends LitElement {
85
+ constructor() {
86
+ super(...arguments);
87
+ this.accessibleLabel = '';
88
+ this.translations = {};
89
+ this._hasStart = false;
90
+ this._hasEnd = false;
91
+ this._mergedTranslations = { ...nlddPageFooterTranslations };
92
+ this._onSlotChange = (e) => {
93
+ const slot = e.target;
94
+ const hasContent = slot.assignedElements().length > 0;
95
+ const name = slot.getAttribute('name') ?? '';
96
+ if (name === 'start')
97
+ this._hasStart = hasContent;
98
+ else if (name === 'end')
99
+ this._hasEnd = hasContent;
100
+ };
101
+ }
102
+ willUpdate(changed) {
103
+ if (changed.has('translations') || changed.has('accessibleLabel')) {
104
+ this._mergedTranslations = {
105
+ ...nlddPageFooterTranslations,
106
+ ...this.translations,
107
+ };
108
+ if (this.accessibleLabel) {
109
+ this._mergedTranslations['components.page-footer.legal-bar-accessible-label'] = this.accessibleLabel;
110
+ }
111
+ }
112
+ }
113
+ _t(key) {
114
+ // Return '' (not the key) for missing translations so callers can do
115
+ // `value || nothing` to suppress aria-label / text rather than
116
+ // announcing the raw key string. Warn in DEV.
117
+ const value = this._mergedTranslations[key];
118
+ if (value === undefined && import.meta.env?.DEV) {
119
+ console.warn(`<nldd-page-footer-legal-bar>: missing translation for "${key}"`);
120
+ }
121
+ return value ?? '';
122
+ }
123
+ render() {
124
+ return pageFooterLegalBarTemplate(this);
125
+ }
126
+ }
127
+ NLDDPageFooterLegalBar.styles = pageFooterLegalBarStyles;
128
+ __decorate([
129
+ property({ type: String, attribute: 'accessible-label' })
130
+ ], NLDDPageFooterLegalBar.prototype, "accessibleLabel", void 0);
131
+ __decorate([
132
+ property({ type: Object })
133
+ ], NLDDPageFooterLegalBar.prototype, "translations", void 0);
134
+ __decorate([
135
+ state()
136
+ ], NLDDPageFooterLegalBar.prototype, "_hasStart", void 0);
137
+ __decorate([
138
+ state()
139
+ ], NLDDPageFooterLegalBar.prototype, "_hasEnd", void 0);
140
+ // Sub-component of nldd-page-footer — see note on
141
+ // nldd-page-footer-legal-bar-item above for the guard-pattern rationale.
142
+ if (!customElements.get('nldd-page-footer-legal-bar')) {
143
+ customElements.define('nldd-page-footer-legal-bar', NLDDPageFooterLegalBar);
144
+ }
145
+ // # nldd-page-footer
146
+ let NLDDPageFooter = class NLDDPageFooter extends LitElement {
147
+ constructor() {
148
+ super(...arguments);
149
+ this._hasBreadcrumbs = false;
150
+ this._hasMain = false;
151
+ this._hasLegalBar = false;
152
+ this._onSlotChange = (e) => {
153
+ const slot = e.target;
154
+ const hasContent = this._hasMeaningfulContent(slot);
155
+ const name = slot.getAttribute('name') ?? '';
156
+ if (name === 'breadcrumbs')
157
+ this._hasBreadcrumbs = hasContent;
158
+ else if (name === 'legal-bar')
159
+ this._hasLegalBar = hasContent;
160
+ else
161
+ this._hasMain = hasContent;
162
+ const visibleCount = (this._hasBreadcrumbs ? 1 : 0) +
163
+ (this._hasMain ? 1 : 0) +
164
+ (this._hasLegalBar ? 1 : 0);
165
+ this.toggleAttribute('single-slot', visibleCount === 1);
166
+ };
167
+ }
168
+ connectedCallback() {
169
+ super.connectedCallback();
170
+ // Expose the contentinfo landmark on the host. VoiceOver/Safari
171
+ // (and a few other AT+browser combos) don't reliably traverse a
172
+ // shadow root to surface a <footer> as a landmark, so the role
173
+ // goes on the host element where the AT tree builder always sees
174
+ // it. Don't override a consumer-provided role.
175
+ if (!this.hasAttribute('role')) {
176
+ this.setAttribute('role', 'contentinfo');
177
+ }
178
+ // Skip-link target: `<a href="#page-footer">` can only reach an id
179
+ // in the light DOM, not one inside our shadow root. Set it on the
180
+ // host (don't override a consumer-provided id).
181
+ if (!this.id) {
182
+ // DEV: warn on duplicate id="page-footer" in the document — a
183
+ // second nldd-page-footer (SPA without cleanup, repeated layout
184
+ // fragment) silently breaks HTML uniqueness (WCAG SC 4.1.1) and
185
+ // makes skip-links target the wrong instance. Check BEFORE
186
+ // setting this.id so we can't self-match.
187
+ if (import.meta.env?.DEV && document.getElementById('page-footer')) {
188
+ console.warn('<nldd-page-footer>: another element already has id="page-footer"; ' +
189
+ 'set a unique id on this instance so skip-links target the right one.');
190
+ }
191
+ this.id = 'page-footer';
192
+ }
193
+ }
194
+ _hasMeaningfulContent(slot) {
195
+ const nodes = slot?.assignedNodes({ flatten: true }) ?? [];
196
+ return nodes.some(n => n.nodeType === Node.ELEMENT_NODE
197
+ || (n.nodeType === Node.TEXT_NODE && (n.textContent?.trim() ?? '') !== ''));
198
+ }
199
+ render() {
200
+ return pageFooterTemplate(this);
201
+ }
202
+ };
203
+ NLDDPageFooter.styles = pageFooterStyles;
204
+ __decorate([
205
+ state()
206
+ ], NLDDPageFooter.prototype, "_hasBreadcrumbs", void 0);
207
+ __decorate([
208
+ state()
209
+ ], NLDDPageFooter.prototype, "_hasMain", void 0);
210
+ __decorate([
211
+ state()
212
+ ], NLDDPageFooter.prototype, "_hasLegalBar", void 0);
213
+ NLDDPageFooter = __decorate([
214
+ customElement('nldd-page-footer')
215
+ ], NLDDPageFooter);
216
+ export { NLDDPageFooter };
217
+ //# sourceMappingURL=page-footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-footer.js","sourceRoot":"","sources":["../../../../src/components/layout/page-footer/page-footer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const pageFooterStyles: import("lit").CSSResult;
2
+ export declare const pageFooterLegalBarStyles: import("lit").CSSResult;
3
+ export declare const pageFooterLegalBarItemStyles: import("lit").CSSResult;
4
+ //# sourceMappingURL=page-footer.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-footer.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/page-footer/page-footer.styles.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,yBAuI5B,CAAC;AAEF,eAAO,MAAM,wBAAwB,yBAoCpC,CAAC;AAEF,eAAO,MAAM,4BAA4B,yBA0BxC,CAAC"}
@@ -0,0 +1,207 @@
1
+ import { css, unsafeCSS } from 'lit';
2
+ import { breakpoints } from '../../../assets/styles/breakpoints.js';
3
+ const smMax = unsafeCSS(breakpoints.smMax);
4
+ const mdMin = unsafeCSS(breakpoints.mdMin);
5
+ const mdMax = unsafeCSS(breakpoints.mdMax);
6
+ const lgMin = unsafeCSS(breakpoints.lgMin);
7
+ export const pageFooterStyles = css `
8
+ :host {
9
+ --_max-width: var(--semantics-page-sections-body-max-width);
10
+ /* Official Rijksoverheid lintje colour — identical across all
11
+ .rijks.app / .overheid.nl sites by visual-identity policy, so it
12
+ intentionally lives outside the semantic token system. Local
13
+ --_ var keeps the value discoverable in one place. */
14
+ --_lintje-color: #154273;
15
+ --context-parent-background-color: var(--components-page-footer-background-color);
16
+
17
+ @container (max-width: ${smMax}) {
18
+ --_lintje-width: var(--primitives-space-40);
19
+ }
20
+
21
+ @container (min-width: ${mdMin}) and (max-width: ${mdMax}) {
22
+ --_lintje-width: var(--primitives-space-44);
23
+ }
24
+
25
+ @container (min-width: ${lgMin}) {
26
+ --_lintje-width: var(--primitives-space-48);
27
+ }
28
+
29
+ container-type: inline-size;
30
+ display: block;
31
+ background-color: var(--components-page-footer-background-color);
32
+ }
33
+
34
+ :host([hidden]) {
35
+ display: none;
36
+ }
37
+
38
+ .page-footer {
39
+ --_lintje-height: calc(var(--_lintje-width) / 2);
40
+
41
+ box-sizing: border-box;
42
+ display: flex;
43
+ position: relative;
44
+ width: 100%;
45
+ flex-direction: column;
46
+ align-items: center;
47
+
48
+ @container (max-width: ${smMax}) {
49
+ padding-inline: var(--semantics-page-sections-sm-margin-inline);
50
+ }
51
+
52
+ @container (min-width: ${mdMin}) and (max-width: ${mdMax}) {
53
+ padding-inline: var(--semantics-page-sections-md-margin-inline);
54
+ }
55
+
56
+ @container (min-width: ${lgMin}) {
57
+ padding-inline: var(--semantics-page-sections-lg-margin-inline);
58
+ }
59
+ }
60
+
61
+ .page-footer::after {
62
+ content: '';
63
+ position: absolute;
64
+ bottom: 0;
65
+ left: 50%;
66
+ background-color: var(--_lintje-color);
67
+ width: var(--_lintje-width);
68
+ height: var(--_lintje-height);
69
+ transform: translateX(-50%);
70
+ }
71
+
72
+ @media (forced-colors: active) {
73
+ .page-footer::after {
74
+ background-color: ButtonText;
75
+ }
76
+ }
77
+
78
+ .page-footer__body {
79
+ display: flex;
80
+ width: 100%;
81
+ max-width: var(--_max-width);
82
+ flex-direction: column;
83
+ }
84
+
85
+ .page-footer__breadcrumbs,
86
+ .page-footer__legal-bar {
87
+ @container (max-width: ${smMax}) {
88
+ padding-block: var(--primitives-space-16);
89
+ }
90
+
91
+ @container (min-width: ${mdMin}) and (max-width: ${mdMax}) {
92
+ padding-block: var(--primitives-space-24);
93
+ }
94
+
95
+ @container (min-width: ${lgMin}) {
96
+ padding-block: var(--primitives-space-24);
97
+ }
98
+ }
99
+
100
+ .page-footer__main {
101
+ @container (max-width: ${smMax}) {
102
+ padding-block: var(--primitives-space-24);
103
+ }
104
+
105
+ @container (min-width: ${mdMin}) and (max-width: ${mdMax}) {
106
+ padding-block: var(--primitives-space-32);
107
+ }
108
+
109
+ @container (min-width: ${lgMin}) {
110
+ padding-block: var(--primitives-space-48);
111
+ }
112
+ }
113
+
114
+ .page-footer__body > div:not([hidden]):not(:has(~ div:not([hidden]))) {
115
+ padding-bottom: calc(var(--primitives-space-16) + var(--_lintje-height));
116
+ }
117
+
118
+ :host([single-slot]) .page-footer__body > div:not([hidden]) {
119
+ padding-top: calc(var(--primitives-space-16) + var(--_lintje-height));
120
+ }
121
+
122
+ .page-footer__breadcrumbs[hidden],
123
+ .page-footer__main[hidden],
124
+ .page-footer__legal-bar[hidden],
125
+ .page-footer__divider[hidden] {
126
+ display: none;
127
+ }
128
+
129
+ .page-footer__divider {
130
+ margin: 0;
131
+ border: none;
132
+ background-color: var(--components-page-footer-divider-color);
133
+ width: 100%;
134
+ height: var(--semantics-dividers-thickness);
135
+ }
136
+
137
+ @media (forced-colors: active) {
138
+ .page-footer__divider {
139
+ background-color: CanvasText;
140
+ }
141
+ }
142
+ `;
143
+ export const pageFooterLegalBarStyles = css `
144
+ :host {
145
+ display: block;
146
+ }
147
+
148
+ :host([hidden]) {
149
+ display: none;
150
+ }
151
+
152
+ .page-footer__legal-bar {
153
+ display: flex;
154
+ flex-wrap: wrap;
155
+ row-gap: var(--primitives-space-4);
156
+ column-gap: var(--primitives-space-16);
157
+ align-items: flex-start;
158
+ justify-content: space-between;
159
+ }
160
+
161
+ .page-footer__legal-bar-start {
162
+ display: flex;
163
+ flex-wrap: wrap;
164
+ gap: var(--primitives-space-12);
165
+ order: 0;
166
+ }
167
+
168
+ .page-footer__legal-bar-end {
169
+ display: flex;
170
+ flex-wrap: wrap;
171
+ gap: var(--primitives-space-12);
172
+ order: 1;
173
+ }
174
+
175
+ .page-footer__legal-bar-start[hidden],
176
+ .page-footer__legal-bar-end[hidden] {
177
+ display: none;
178
+ }
179
+ `;
180
+ export const pageFooterLegalBarItemStyles = css `
181
+ :host {
182
+ display: inline-flex;
183
+ }
184
+
185
+ :host([hidden]) {
186
+ display: none;
187
+ }
188
+
189
+ .page-footer__legal-bar-item {
190
+ display: inline-flex;
191
+ color: var(--components-page-footer-legal-bar-item-color);
192
+ font: var(--primitives-font-body-sm-regular-tight);
193
+ }
194
+
195
+ .page-footer__legal-bar-item-link {
196
+ color: var(--components-page-footer-legal-bar-item-color);
197
+ text-decoration: underline;
198
+ }
199
+
200
+ .page-footer__legal-bar-item-link:focus-visible {
201
+ outline: var(--semantics-focus-ring-outline);
202
+ outline-offset: var(--semantics-focus-ring-outline-offset);
203
+ border-radius: var(--primitives-corner-radius-xs);
204
+ box-shadow: var(--semantics-focus-ring-box-shadow);
205
+ }
206
+ `;
207
+ //# sourceMappingURL=page-footer.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-footer.styles.js","sourceRoot":"","sources":["../../../../src/components/layout/page-footer/page-footer.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEpE,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAA;;;;;;;;;;2BAUR,KAAK;;;;2BAIL,KAAK,qBAAqB,KAAK;;;;2BAI/B,KAAK;;;;;;;;;;;;;;;;;;;;;;;2BAuBL,KAAK;;;;2BAIL,KAAK,qBAAqB,KAAK;;;;2BAI/B,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA+BL,KAAK;;;;2BAIL,KAAK,qBAAqB,KAAK;;;;2BAI/B,KAAK;;;;;;2BAML,KAAK;;;;2BAIL,KAAK,qBAAqB,KAAK;;;;2BAI/B,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiC/B,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoC1C,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B9C,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type TemplateResult } from 'lit';
2
+ import type { NLDDPageFooter, NLDDPageFooterLegalBar, NLDDPageFooterLegalBarItem } from './page-footer.js';
3
+ export declare function pageFooterTemplate(component: NLDDPageFooter): TemplateResult;
4
+ export declare function pageFooterLegalBarTemplate(component: NLDDPageFooterLegalBar): TemplateResult;
5
+ export declare function pageFooterLegalBarItemTemplate(component: NLDDPageFooterLegalBarItem): TemplateResult;
6
+ //# sourceMappingURL=page-footer.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-footer.template.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/page-footer/page-footer.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE3G,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,cAAc,GAAG,cAAc,CAkC5E;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,sBAAsB,GAAG,cAAc,CAmB5F;AAED,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,0BAA0B,GAAG,cAAc,CAepG"}
@@ -0,0 +1,73 @@
1
+ import { html, nothing } from 'lit';
2
+ export function pageFooterTemplate(component) {
3
+ const showDividerAboveMain = component._hasBreadcrumbs && component._hasMain;
4
+ const showDividerAboveLegal = (component._hasBreadcrumbs || component._hasMain) && component._hasLegalBar;
5
+ // The host carries role="contentinfo" (set in connectedCallback) so AT
6
+ // that doesn't traverse the shadow root still sees the landmark. Using
7
+ // <div> here instead of <footer> avoids double-announcing the landmark
8
+ // in AT that DOES cross the boundary.
9
+ return html `
10
+ <div class="page-footer">
11
+ <div class="page-footer__body">
12
+ <div class="page-footer__breadcrumbs"
13
+ ?hidden=${!component._hasBreadcrumbs}
14
+ >
15
+ <slot name="breadcrumbs" @slotchange=${component._onSlotChange}></slot>
16
+ </div>
17
+ <hr class="page-footer__divider"
18
+ ?hidden=${!showDividerAboveMain}
19
+ >
20
+ <div class="page-footer__main"
21
+ ?hidden=${!component._hasMain}
22
+ >
23
+ <slot @slotchange=${component._onSlotChange}></slot>
24
+ </div>
25
+ <hr class="page-footer__divider"
26
+ ?hidden=${!showDividerAboveLegal}
27
+ >
28
+ <div class="page-footer__legal-bar"
29
+ ?hidden=${!component._hasLegalBar}
30
+ >
31
+ <slot name="legal-bar" @slotchange=${component._onSlotChange}></slot>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ `;
36
+ }
37
+ export function pageFooterLegalBarTemplate(component) {
38
+ const label = component._t('components.page-footer.legal-bar-accessible-label');
39
+ return html `
40
+ <nav class="page-footer__legal-bar"
41
+ aria-label=${label || nothing}
42
+ ?hidden=${!component._hasStart && !component._hasEnd}
43
+ >
44
+ <div class="page-footer__legal-bar-start"
45
+ ?hidden=${!component._hasStart}
46
+ >
47
+ <slot name="start" @slotchange=${component._onSlotChange}></slot>
48
+ </div>
49
+ <div class="page-footer__legal-bar-end"
50
+ ?hidden=${!component._hasEnd}
51
+ >
52
+ <slot name="end" @slotchange=${component._onSlotChange}></slot>
53
+ </div>
54
+ </nav>
55
+ `;
56
+ }
57
+ export function pageFooterLegalBarItemTemplate(component) {
58
+ // `text=""` (empty string) intentionally falls through to the slot —
59
+ // Lit normalises the absent-attribute case to '', so a single falsy
60
+ // check covers both "no text attr" and "explicit empty text".
61
+ const label = component.text || html `<slot></slot>`;
62
+ if (component.href) {
63
+ return html `
64
+ <span class="page-footer__legal-bar-item">
65
+ <a class="page-footer__legal-bar-item-link"
66
+ href=${component.href}
67
+ >${label}</a>
68
+ </span>
69
+ `;
70
+ }
71
+ return html `<span class="page-footer__legal-bar-item">${label}</span>`;
72
+ }
73
+ //# sourceMappingURL=page-footer.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-footer.template.js","sourceRoot":"","sources":["../../../../src/components/layout/page-footer/page-footer.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAuB,MAAM,KAAK,CAAC;AAGzD,MAAM,UAAU,kBAAkB,CAAC,SAAyB;IAC3D,MAAM,oBAAoB,GAAG,SAAS,CAAC,eAAe,IAAI,SAAS,CAAC,QAAQ,CAAC;IAC7E,MAAM,qBAAqB,GAAG,CAAC,SAAS,CAAC,eAAe,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,YAAY,CAAC;IAC1G,uEAAuE;IACvE,uEAAuE;IACvE,uEAAuE;IACvE,sCAAsC;IACtC,OAAO,IAAI,CAAA;;;;eAIG,CAAC,SAAS,CAAC,eAAe;;4CAEG,SAAS,CAAC,aAAa;;;eAGpD,CAAC,oBAAoB;;;eAGrB,CAAC,SAAS,CAAC,QAAQ;;yBAET,SAAS,CAAC,aAAa;;;eAGjC,CAAC,qBAAqB;;;eAGtB,CAAC,SAAS,CAAC,YAAY;;0CAEI,SAAS,CAAC,aAAa;;;;EAI/D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,SAAiC;IAC3E,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,mDAAmD,CAAC,CAAC;IAChF,OAAO,IAAI,CAAA;;gBAEI,KAAK,IAAI,OAAO;aACnB,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO;;;cAGzC,CAAC,SAAS,CAAC,SAAS;;qCAEG,SAAS,CAAC,aAAa;;;cAG9C,CAAC,SAAS,CAAC,OAAO;;mCAEG,SAAS,CAAC,aAAa;;;EAGxD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,SAAqC;IACnF,qEAAqE;IACrE,oEAAoE;IACpE,8DAA8D;IAC9D,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,IAAI,IAAI,CAAA,eAAe,CAAC;IACpD,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAA;;;YAGD,SAAS,CAAC,IAAI;OACnB,KAAK;;GAET,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA,6CAA6C,KAAK,SAAS,CAAC;AACxE,CAAC"}