@nldd/design-system 0.8.91 → 0.8.92

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 (149) hide show
  1. package/NOTICES.md +2 -2
  2. package/README.md +3 -3
  3. package/custom-elements.json +345 -15
  4. package/dist/components/actions/button/button.d.ts +2 -4
  5. package/dist/components/actions/button/button.d.ts.map +1 -1
  6. package/dist/components/actions/button/button.js +2 -10
  7. package/dist/components/actions/button/button.js.map +1 -1
  8. package/dist/components/actions/button/button.template.d.ts.map +1 -1
  9. package/dist/components/actions/button/button.template.js +2 -1
  10. package/dist/components/actions/button/button.template.js.map +1 -1
  11. package/dist/components/actions/icon-button/icon-button.d.ts +2 -4
  12. package/dist/components/actions/icon-button/icon-button.d.ts.map +1 -1
  13. package/dist/components/actions/icon-button/icon-button.js +2 -10
  14. package/dist/components/actions/icon-button/icon-button.js.map +1 -1
  15. package/dist/components/actions/icon-button/icon-button.template.d.ts.map +1 -1
  16. package/dist/components/actions/icon-button/icon-button.template.js +2 -1
  17. package/dist/components/actions/icon-button/icon-button.template.js.map +1 -1
  18. package/dist/components/actions/toolbar/toolbar.template.d.ts.map +1 -1
  19. package/dist/components/actions/toolbar/toolbar.template.js +2 -1
  20. package/dist/components/actions/toolbar/toolbar.template.js.map +1 -1
  21. package/dist/components/components.js +153 -139
  22. package/dist/components/content/avatar/avatar.d.ts +2 -5
  23. package/dist/components/content/avatar/avatar.d.ts.map +1 -1
  24. package/dist/components/content/avatar/avatar.js +2 -13
  25. package/dist/components/content/avatar/avatar.js.map +1 -1
  26. package/dist/components/content/avatar/avatar.template.d.ts.map +1 -1
  27. package/dist/components/content/avatar/avatar.template.js +2 -1
  28. package/dist/components/content/avatar/avatar.template.js.map +1 -1
  29. package/dist/components/content/avatar-group/avatar-group.d.ts +1 -1
  30. package/dist/components/content/avatar-group/avatar-group.js +1 -1
  31. package/dist/components/content/code-viewer/code-viewer.d.ts.map +1 -1
  32. package/dist/components/content/code-viewer/code-viewer.js +12 -2
  33. package/dist/components/content/code-viewer/code-viewer.js.map +1 -1
  34. package/dist/components/content/icon/icon.d.ts +2 -2
  35. package/dist/components/content/icon/icon.js +2 -2
  36. package/dist/components/content/identity/identity.d.ts +1 -1
  37. package/dist/components/content/identity/identity.js +1 -1
  38. package/dist/components/{dist-CENYEz7C.js → dist-B5ie2Bo9.js} +1 -1
  39. package/dist/components/{dist-D_ckX1sK.js → dist-BUu-NW5O.js} +1 -1
  40. package/dist/components/{dist-Y54Lma86.js → dist-CGOykrJw.js} +2 -2
  41. package/dist/components/{dist-CYLM5ciE.js → dist-CQzaKTa8.js} +1 -1
  42. package/dist/components/{dist-yyE8P2O6.js → dist-CSYXsT7W.js} +2 -2
  43. package/dist/components/{dist-BLaE_n_F.js → dist-CoUVHSu-.js} +1 -1
  44. package/dist/components/{dist-DHA-0RyT.js → dist-Dn3c5gfb.js} +7 -1
  45. package/dist/components/{dist-BeymuiGt.js → dist-Dxn9Up8K.js} +3 -3
  46. package/dist/components/{dist-Dh_b9r4M.js → dist-M6GKopqu.js} +1 -1
  47. package/dist/components/{dist-TCqV9dho.js → dist-OlffRM7-.js} +1 -1
  48. package/dist/components/{dist-DkZlotgT.js → dist-RPaf2J9c.js} +2 -2
  49. package/dist/components/{icon-button-CEz4MB9H.js → icon-button-oua8pmMC.js} +3 -9
  50. package/dist/components/index.d.ts +1 -1
  51. package/dist/components/index.js +1 -1
  52. package/dist/components/inputs/date-field/date-field.d.ts +1 -1
  53. package/dist/components/inputs/date-field/date-field.js +1 -1
  54. package/dist/components/inputs/date-picker/date-picker.d.ts +1 -1
  55. package/dist/components/inputs/date-picker/date-picker.js +1 -1
  56. package/dist/components/inputs/radio-button/radio-button.styles.d.ts.map +1 -1
  57. package/dist/components/inputs/radio-button/radio-button.styles.js +0 -10
  58. package/dist/components/inputs/radio-button/radio-button.styles.js.map +1 -1
  59. package/dist/components/inputs/radio-button/radio-button.template.js +3 -3
  60. package/dist/components/inputs/radio-button/radio-button.template.js.map +1 -1
  61. package/dist/components/inputs/radio-button-field/radio-button-field.styles.d.ts.map +1 -1
  62. package/dist/components/inputs/radio-button-field/radio-button-field.styles.js +0 -10
  63. package/dist/components/inputs/radio-button-field/radio-button-field.styles.js.map +1 -1
  64. package/dist/components/inputs/radio-button-field/radio-button-field.template.d.ts.map +1 -1
  65. package/dist/components/inputs/radio-button-field/radio-button-field.template.js +4 -3
  66. package/dist/components/inputs/radio-button-field/radio-button-field.template.js.map +1 -1
  67. package/dist/components/inputs/segmented-control/segmented-control.d.ts +3 -0
  68. package/dist/components/inputs/segmented-control/segmented-control.d.ts.map +1 -1
  69. package/dist/components/inputs/segmented-control/segmented-control.js +6 -0
  70. package/dist/components/inputs/segmented-control/segmented-control.js.map +1 -1
  71. package/dist/components/inputs/segmented-control/segmented-control.styles.d.ts.map +1 -1
  72. package/dist/components/inputs/segmented-control/segmented-control.styles.js +0 -10
  73. package/dist/components/inputs/segmented-control/segmented-control.styles.js.map +1 -1
  74. package/dist/components/inputs/segmented-control/segmented-control.template.js +3 -3
  75. package/dist/components/inputs/segmented-control/segmented-control.template.js.map +1 -1
  76. package/dist/components/inputs/text-editor/text-editor.mentions.d.ts.map +1 -1
  77. package/dist/components/inputs/text-editor/text-editor.mentions.js +77 -1
  78. package/dist/components/inputs/text-editor/text-editor.mentions.js.map +1 -1
  79. package/dist/components/inputs/time-field/time-field.d.ts +1 -1
  80. package/dist/components/inputs/time-field/time-field.js +1 -1
  81. package/dist/components/inputs/time-picker/time-picker.d.ts +1 -1
  82. package/dist/components/inputs/time-picker/time-picker.js +1 -1
  83. package/dist/components/inputs/toggle-button/toggle-button.styles.d.ts.map +1 -1
  84. package/dist/components/inputs/toggle-button/toggle-button.styles.js +0 -9
  85. package/dist/components/inputs/toggle-button/toggle-button.styles.js.map +1 -1
  86. package/dist/components/inputs/toggle-button/toggle-button.template.js +3 -3
  87. package/dist/components/inputs/toggle-button/toggle-button.template.js.map +1 -1
  88. package/dist/components/layout/card/card.d.ts +1 -4
  89. package/dist/components/layout/card/card.d.ts.map +1 -1
  90. package/dist/components/layout/card/card.js +1 -12
  91. package/dist/components/layout/card/card.js.map +1 -1
  92. package/dist/components/layout/card/card.template.d.ts.map +1 -1
  93. package/dist/components/layout/card/card.template.js +2 -1
  94. package/dist/components/layout/card/card.template.js.map +1 -1
  95. package/dist/components/layout/page-sections/hero/hero.d.ts +1 -1
  96. package/dist/components/layout/page-sections/hero/hero.js +1 -1
  97. package/dist/components/layout/sheet/sheet.styles.js +4 -4
  98. package/dist/components/layout/spacer/spacer.d.ts +2 -2
  99. package/dist/components/layout/spacer/spacer.js +2 -2
  100. package/dist/components/lists-and-tables/list-item/list-item.d.ts +3 -2
  101. package/dist/components/lists-and-tables/list-item/list-item.d.ts.map +1 -1
  102. package/dist/components/lists-and-tables/list-item/list-item.js +1 -1
  103. package/dist/components/lists-and-tables/list-item/list-item.js.map +1 -1
  104. package/dist/components/lists-and-tables/list-item/list-item.template.d.ts.map +1 -1
  105. package/dist/components/lists-and-tables/list-item/list-item.template.js +2 -1
  106. package/dist/components/lists-and-tables/list-item/list-item.template.js.map +1 -1
  107. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.d.ts +1 -1
  108. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.js +1 -1
  109. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.d.ts.map +1 -1
  110. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.js +2 -1
  111. package/dist/components/lists-and-tables/list-item-segment/list-item-segment.template.js.map +1 -1
  112. package/dist/components/navigation/link/link.d.ts +1 -3
  113. package/dist/components/navigation/link/link.d.ts.map +1 -1
  114. package/dist/components/navigation/link/link.js +1 -11
  115. package/dist/components/navigation/link/link.js.map +1 -1
  116. package/dist/components/navigation/link/link.template.d.ts.map +1 -1
  117. package/dist/components/navigation/link/link.template.js +2 -1
  118. package/dist/components/navigation/link/link.template.js.map +1 -1
  119. package/dist/components/navigation/skip-link/skip-link.styles.d.ts.map +1 -1
  120. package/dist/components/navigation/skip-link/skip-link.styles.js +10 -4
  121. package/dist/components/navigation/skip-link/skip-link.styles.js.map +1 -1
  122. package/dist/components/status-and-feedback/badge/badge.d.ts +1 -1
  123. package/dist/components/status-and-feedback/badge/badge.js +1 -1
  124. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.styles.js +1 -1
  125. package/dist/components/status-and-feedback/status-bar/status-bar.d.ts +2 -4
  126. package/dist/components/status-and-feedback/status-bar/status-bar.d.ts.map +1 -1
  127. package/dist/components/status-and-feedback/status-bar/status-bar.js +2 -8
  128. package/dist/components/status-and-feedback/status-bar/status-bar.js.map +1 -1
  129. package/dist/components/status-and-feedback/status-bar/status-bar.styles.js +1 -1
  130. package/dist/components/status-and-feedback/status-bar/status-bar.template.d.ts.map +1 -1
  131. package/dist/components/status-and-feedback/status-bar/status-bar.template.js +2 -1
  132. package/dist/components/status-and-feedback/status-bar/status-bar.template.js.map +1 -1
  133. package/dist/components/{with-translations-CqUV9S5g.js → with-translations-BAKFoEKy.js} +22 -1
  134. package/dist/css/fouc.css +1 -1
  135. package/dist/css/rijksoverheid-fonts.css +1 -1
  136. package/dist/css/variables.css +1 -1
  137. package/dist/favicon.svg +3 -8
  138. package/dist/nldd.min.js +621 -658
  139. package/dist/touch-icon.png +0 -0
  140. package/dist/types/vue.d.ts +14 -14
  141. package/dist/utilities/form-associated-mixin.d.ts +2 -0
  142. package/dist/utilities/form-associated-mixin.d.ts.map +1 -1
  143. package/dist/utilities/form-associated-mixin.js +15 -1
  144. package/dist/utilities/form-associated-mixin.js.map +1 -1
  145. package/dist/utilities/link-rel.d.ts +13 -0
  146. package/dist/utilities/link-rel.d.ts.map +1 -0
  147. package/dist/utilities/link-rel.js +21 -0
  148. package/dist/utilities/link-rel.js.map +1 -0
  149. package/package.json +6 -6
Binary file
@@ -207,7 +207,7 @@ declare module 'vue' {
207
207
  'button'?: NLDDAvatar['button'];
208
208
  /** Link target for href (e.g. '_blank'); completes rel and announces "Opens in a new tab" */
209
209
  'target'?: NLDDAvatar['target'];
210
- /** Link rel for href; defaults to 'noopener noreferrer' when target='_blank' */
210
+ /** Link rel for href; with target '_blank', 'noopener noreferrer' is added to whatever you set */
211
211
  'rel'?: NLDDAvatar['rel'];
212
212
  /** Override translation keys; unset keys fall back to Dutch */
213
213
  'translations'?: NLDDAvatar['translations'];
@@ -236,9 +236,9 @@ declare module 'vue' {
236
236
  'size'?: NLDDBadge['size'];
237
237
  /** Semantic ('critical' | 'accent' | 'neutral' | 'warning' | 'success'), a Rijkshuisstijl color ('lintblauw' | 'hemelblauw' | 'oranje' | …), or 'inherit' to fill in the content color around it: the `--context-content-color` channel a list item, table row or menu sets, falling back to `currentColor`. Default: 'critical' */
238
238
  'color'?: NLDDBadge['color'];
239
- /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the design system cannot know: the jacket of a cable, a color someone picked. It wins over `color`. Whatever it paints, the text and icon on top become white or black, whichever contrasts. The text on it is black or white, picked on the relative luminance of the fill, so it clears 4.5:1 whatever color you hand it. */
239
+ /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the system cannot know: the jacket of a cable, a color someone picked. It wins over `color`. Whatever it paints, the text and icon on top become white or black, whichever contrasts. The text on it is black or white, picked on the relative luminance of the fill, so it clears 4.5:1 whatever color you hand it. */
240
240
  'custom-color'?: NLDDBadge['customColor'];
241
- /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the design system cannot know: the jacket of a cable, a color someone picked. It wins over `color`. Whatever it paints, the text and icon on top become white or black, whichever contrasts. The text on it is black or white, picked on the relative luminance of the fill, so it clears 4.5:1 whatever color you hand it. */
241
+ /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the system cannot know: the jacket of a cable, a color someone picked. It wins over `color`. Whatever it paints, the text and icon on top become white or black, whichever contrasts. The text on it is black or white, picked on the relative luminance of the fill, so it clears 4.5:1 whatever color you hand it. */
242
242
  'customColor'?: NLDDBadge['customColor'];
243
243
  /** Grows a ring out of the badge and fades it, for something happening right now (a live connection, an outage). Respects `prefers-reduced-motion`. */
244
244
  'pulse'?: NLDDBadge['pulse'];
@@ -382,7 +382,7 @@ declare module 'vue' {
382
382
  'href'?: NLDDButton['href'];
383
383
  /** Link target (e.g. '_blank'); only used when href is set. With '_blank' the button adds a visually hidden "opens in new tab" announcement for screen readers (WCAG 2.1 SC 3.2.2). */
384
384
  'target'?: NLDDButton['target'];
385
- /** Link rel attribute; defaults to 'noopener noreferrer' when target is '_blank' */
385
+ /** Link rel attribute, used with href; with target '_blank', 'noopener noreferrer' is added to whatever you set */
386
386
  'rel'?: NLDDButton['rel'];
387
387
  /** Override translation keys (e.g. the "opens in new tab" announcement); unset keys fall back to Dutch. */
388
388
  'translations'?: NLDDButton['translations'];
@@ -428,7 +428,7 @@ declare module 'vue' {
428
428
  'button'?: NLDDCard['button'];
429
429
  /** Link target for href (e.g. '_blank'); adjusts rel automatically and adds an "Opent in nieuw tabblad" announcement for '_blank' */
430
430
  'target'?: NLDDCard['target'];
431
- /** Link rel for href; defaults to 'noopener noreferrer' with target='_blank' */
431
+ /** Link rel for href; with target '_blank', 'noopener noreferrer' is added to whatever you set */
432
432
  'rel'?: NLDDCard['rel'];
433
433
  /** Override translation keys (e.g. the "Opent in nieuw tabblad" announcement) */
434
434
  'translations'?: NLDDCard['translations'];
@@ -1242,9 +1242,9 @@ declare module 'vue' {
1242
1242
  'size'?: NLDDIcon['size'];
1243
1243
  /** Functional (`primary-content`, `secondary-content`, `accent`, `critical`, `warning`, `success`) or rijkskleur (`lintblauw`, `donkerblauw`, `hemelblauw`, `lichtblauw`, `paars`, `violet`, `robijnrood`, `roze`, `rood`, `oranje`, `donkergeel`, `geel`, `donkerbruin`, `bruin`, `donkergroen`, `groen`, `mosgroen`, `mintgroen`). Empty = inherit `color` from parent. */
1244
1244
  'color'?: NLDDIcon['color'];
1245
- /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the design system cannot know. It wins over `color`. */
1245
+ /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the system cannot know. It wins over `color`. */
1246
1246
  'custom-color'?: NLDDIcon['customColor'];
1247
- /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the design system cannot know. It wins over `color`. */
1247
+ /** A color of its own, as any CSS color value ('#a90061', 'oklch(0.6 0.2 20)', 'var(--brand-cable-blue)'). For a color the system cannot know. It wins over `color`. */
1248
1248
  'customColor'?: NLDDIcon['customColor'];
1249
1249
  /** Draw the icon on a filled square. `color` and `custom-color` then paint the box and the glyph takes the contrasting color, and `size` measures the box: the glyph is four fifths of it, the corner radius a fifth. */
1250
1250
  'box'?: NLDDIcon['box'];
@@ -1301,7 +1301,7 @@ declare module 'vue' {
1301
1301
  'href'?: NLDDIconButton['href'];
1302
1302
  /** Link target (e.g. '_blank'); only used when href is set. With '_blank' the "opens in new tab" announcement is folded into the aria-label for screen readers (WCAG 2.1 SC 3.2.2). */
1303
1303
  'target'?: NLDDIconButton['target'];
1304
- /** Link rel attribute; defaults to 'noopener noreferrer' when target is '_blank' */
1304
+ /** Link rel attribute, used with href; with target '_blank', 'noopener noreferrer' is added to whatever you set */
1305
1305
  'rel'?: NLDDIconButton['rel'];
1306
1306
  /** Override translation keys (e.g. the "opens in new tab" announcement); unset keys fall back to Dutch. */
1307
1307
  'translations'?: NLDDIconButton['translations'];
@@ -1483,7 +1483,7 @@ declare module 'vue' {
1483
1483
  'href'?: NLDDLink['href'];
1484
1484
  /** Link target (e.g. '_blank'); adjusts rel automatically. With '_blank' the link adds a visually hidden "Opent in nieuw tabblad" announcement for screen readers (WCAG 2.1 SC 3.2.2). */
1485
1485
  'target'?: NLDDLink['target'];
1486
- /** Link rel attribute; defaults to 'noopener noreferrer' with target='_blank' */
1486
+ /** Link rel attribute; with target '_blank', 'noopener noreferrer' is added to whatever you set */
1487
1487
  'rel'?: NLDDLink['rel'];
1488
1488
  /** Text size: 'inherit' (the default) follows the surrounding text and lays the link out inline, so it wraps in running prose. 'xs' | 'sm' | 'md' | 'lg' pin a size and switch to inline-flex, which baseline-aligns a start or end icon with an explicit gap. */
1489
1489
  'size'?: NLDDLink['size'];
@@ -1557,7 +1557,7 @@ declare module 'vue' {
1557
1557
  'href'?: NLDDListItem['href'];
1558
1558
  /** Link target forwarded to the `<a>` (e.g. '_blank'); only applies with `href`. With '_blank' a visually hidden "opens in new tab" announcement is added for assistive technology. */
1559
1559
  'target'?: NLDDListItem['target'];
1560
- /** Link rel forwarded to the `<a>` (e.g. 'noopener noreferrer'); only applies with `href` */
1560
+ /** Link rel forwarded to the `<a>`, only with `href`; with target '_blank', 'noopener noreferrer' is added to whatever you set */
1561
1561
  'rel'?: NLDDListItem['rel'];
1562
1562
  /** Set by the parent `nldd-list` when its own `reorderable` is on (with `type="list"`); consumers do not set this. Serves as a CSS hook for drag handle visibility. */
1563
1563
  'reorderable'?: NLDDListItem['reorderable'];
@@ -1577,7 +1577,7 @@ declare module 'vue' {
1577
1577
  'href'?: NLDDListItemSegment['href'];
1578
1578
  /** Link target forwarded to the `<a>`; only applies with `href` */
1579
1579
  'target'?: NLDDListItemSegment['target'];
1580
- /** Link rel forwarded to the `<a>`; only applies with `href` */
1580
+ /** Link rel forwarded to the `<a>`, only with `href`; with target '_blank', 'noopener noreferrer' is added to whatever you set */
1581
1581
  'rel'?: NLDDListItemSegment['rel'];
1582
1582
  /** Makes the segment a `role="checkbox"` control. Wins over `button`, loses to `href`. */
1583
1583
  'checkbox'?: NLDDListItemSegment['checkbox'];
@@ -2673,7 +2673,7 @@ declare module 'vue' {
2673
2673
  'href'?: NLDDStatusBar['href'];
2674
2674
  /** Link target (e.g. '_blank'); only used with href */
2675
2675
  'target'?: NLDDStatusBar['target'];
2676
- /** Link rel; defaults to 'noopener noreferrer' with target='_blank' */
2676
+ /** Link rel, used with href; with target '_blank', 'noopener noreferrer' is added to whatever you set */
2677
2677
  'rel'?: NLDDStatusBar['rel'];
2678
2678
  /** Makes the whole bar a button; ignored when href is set */
2679
2679
  'button'?: NLDDStatusBar['button'];
@@ -3683,7 +3683,7 @@ declare module 'vue' {
3683
3683
  'nldd-full-bleed-section': DefineComponent<NLDDFullBleedSectionProps>;
3684
3684
  /** A page header with a media area and a text panel (the main) that can stand in six positions. Every area is rectangular. With `main-width="full"` the media area sits as its own strip above or below the panel rather than behind it. On mobile the media always stacks above the full-width panel. Without media the main fills the whole area; with `main-background="base"` that area gets a border so it stays visible on the base surface. `main-background` gives the panel a surface color from the filled categories. Those carry a pure white or black content color along, so components with `color="inherit"` (title, rich-text) are guaranteed to keep their contrast. */
3685
3685
  'nldd-hero': DefineComponent<NLDDHeroProps>;
3686
- /** A customizable icon component that renders SVG icons from a predefined library. Icons are decorative by default: the host gets `aria-hidden="true"` automatically. If you want the icon to be announced by assistive tech, set `aria-hidden="false"` on the consumer side together with an `aria-label`. Sizing: the icon fills whatever sizes it — an `nldd-icon-cell`, a button, a menu item. `size="full"` names that default explicitly. `size="inherit"` makes it follow the surrounding text (1em), for an icon set inline in a sentence. Any spacer-aligned number (16–96) pins a fixed dimension. Reach for `inherit` rather than a global `nldd-icon { width: 1em }` rule in the consumer: such a rule wins over the component's own :host styling and so also shrinks the icons that a cell or button was already sizing correctly. Color: by default the icon inherits its parent's `color`. Set `color` to one of the functional semantics (`primary-content`, `secondary-content`, `accent`, `critical`, `warning`, `success`) or a rijkskleur (`lintblauw`, `paars`, `groen`, …). For a color the design system cannot know — the jacket of a cable, a color someone picked — set `custom-color` to any CSS color. */
3686
+ /** A customizable icon component that renders SVG icons from a predefined library. Icons are decorative by default: the host gets `aria-hidden="true"` automatically. If you want the icon to be announced by assistive tech, set `aria-hidden="false"` on the consumer side together with an `aria-label`. Sizing: the icon fills whatever sizes it — an `nldd-icon-cell`, a button, a menu item. `size="full"` names that default explicitly. `size="inherit"` makes it follow the surrounding text (1em), for an icon set inline in a sentence. Any spacer-aligned number (16–96) pins a fixed dimension. Reach for `inherit` rather than a global `nldd-icon { width: 1em }` rule in the consumer: such a rule wins over the component's own :host styling and so also shrinks the icons that a cell or button was already sizing correctly. Color: by default the icon inherits its parent's `color`. Set `color` to one of the functional semantics (`primary-content`, `secondary-content`, `accent`, `critical`, `warning`, `success`) or a rijkskleur (`lintblauw`, `paars`, `groen`, …). For a color the system cannot know — the jacket of a cable, a color someone picked — set `custom-color` to any CSS color. */
3687
3687
  'nldd-icon': DefineComponent<NLDDIconProps>;
3688
3688
  'nldd-icon-button': DefineComponent<NLDDIconButtonProps>;
3689
3689
  /** A cell component for displaying icons in lists with configurable alignment and size. Set `icon` to render an `nldd-icon` by name, or slot custom content as an escape hatch for non-standard iconography. */
@@ -3774,7 +3774,7 @@ declare module 'vue' {
3774
3774
  'nldd-simple-section': DefineComponent<NLDDSimpleSectionProps>;
3775
3775
  /** Accessibility pattern that lets keyboard users skip past content. Wraps content in a default slot. Without href it focuses the first element after the skip link in the DOM (nextElementSibling). Make sure a focusable element follows the component, otherwise the skip link has no effect. */
3776
3776
  'nldd-skip-link': DefineComponent<NLDDSkipLinkProps>;
3777
- /** Add explicit space between elements. Components in this design system have no margins of their own — all whitespace is set by a spacer. Use a single `size` attribute for whitespace that's the same at every viewport. Combine with `sm-size`, `md-size` and/or `lg-size` to override the size at specific breakpoints (mobile-first cascade is intentionally avoided — each breakpoint that needs a different value declares it explicitly): - `size` applies at every breakpoint that has no per-viewport override. - `sm-size` overrides at sm (max-width: 640px). - `md-size` overrides at md (641px–1007px). - `lg-size` overrides at lg (min-width: 1008px). Use `flexible` (in any of the four attributes) to fill the remaining space in a flex container. */
3777
+ /** Add explicit space between elements. Components here have no margins of their own — all whitespace is set by a spacer. Use a single `size` attribute for whitespace that's the same at every viewport. Combine with `sm-size`, `md-size` and/or `lg-size` to override the size at specific breakpoints (mobile-first cascade is intentionally avoided — each breakpoint that needs a different value declares it explicitly): - `size` applies at every breakpoint that has no per-viewport override. - `sm-size` overrides at sm (max-width: 640px). - `md-size` overrides at md (641px–1007px). - `lg-size` overrides at lg (min-width: 1008px). Use `flexible` (in any of the four attributes) to fill the remaining space in a flex container. */
3778
3778
  'nldd-spacer': DefineComponent<NLDDSpacerProps>;
3779
3779
  /** A cell component that provides fixed horizontal spacing within list items. */
3780
3780
  'nldd-spacer-cell': DefineComponent<NLDDSpacerCellProps>;
@@ -11,6 +11,8 @@ export interface FormAssociatedElement {
11
11
  commitFormValue(): void;
12
12
  /** The native control whose constraints the host reports as its own. */
13
13
  validationTarget(): HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | null;
14
+ /** Where an invalid submit points its message and puts the focus. */
15
+ validationAnchor(): HTMLElement | undefined;
14
16
  /** A reason of your own, on top of the native ones. Empty clears it. */
15
17
  setCustomValidity(message: string): void;
16
18
  commitValidity(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"form-associated-mixin.d.ts","sourceRoot":"","sources":["../../src/utilities/form-associated-mixin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAW1D,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;AAIxD,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEnF,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,+EAA+E;IAC/E,SAAS,IAAI,SAAS,CAAC;IACvB,qFAAqF;IACrF,SAAS,IAAI,SAAS,GAAG,SAAS,CAAC;IACnC,eAAe,IAAI,IAAI,CAAC;IACxB,wEAAwE;IACxE,gBAAgB,IAAI,gBAAgB,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,CAAC;IACtF,wEAAwE;IACxE,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,cAAc,IAAI,IAAI,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,GAwG/B,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CACjG"}
1
+ {"version":3,"file":"form-associated-mixin.d.ts","sourceRoot":"","sources":["../../src/utilities/form-associated-mixin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAW1D,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;AAIxD,KAAK,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEnF,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,+EAA+E;IAC/E,SAAS,IAAI,SAAS,CAAC;IACvB,qFAAqF;IACrF,SAAS,IAAI,SAAS,GAAG,SAAS,CAAC;IACnC,eAAe,IAAI,IAAI,CAAC;IACxB,wEAAwE;IACxE,gBAAgB,IAAI,gBAAgB,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,CAAC;IACtF,qEAAqE;IACrE,gBAAgB,IAAI,WAAW,GAAG,SAAS,CAAC;IAC5C,wEAAwE;IACxE,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,cAAc,IAAI,IAAI,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,GAuH/B,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CACjG"}
@@ -63,6 +63,20 @@ export function FormAssociated(Base) {
63
63
  validationTarget() {
64
64
  return this.shadowRoot?.querySelector('input, textarea, select') ?? null;
65
65
  }
66
+ /**
67
+ * Where an invalid submit points its message and puts the focus.
68
+ *
69
+ * The native control, where the user reads and fixes it. Not when that
70
+ * control is hidden, as the radio that only carries `required` is: a radio
71
+ * inside an element that is itself the radio is a control inside a control,
72
+ * and a hidden element cannot hold the message. Then it goes on this
73
+ * element. Override where neither is what the user should land on, such as
74
+ * a group that has no focus of its own.
75
+ */
76
+ validationAnchor() {
77
+ const target = this.validationTarget();
78
+ return target && !target.hidden ? target : undefined;
79
+ }
66
80
  /**
67
81
  * A reason the host is invalid that no attribute can express: a server that
68
82
  * refused the value, or an nldd-validation-list whose rule it fails. Kept
@@ -102,7 +116,7 @@ export function FormAssociated(Base) {
102
116
  // native message is the browser's own wording for the same field.
103
117
  message = custom;
104
118
  }
105
- const anchor = (target ?? this);
119
+ const anchor = this.validationAnchor();
106
120
  if (Object.keys(flags).length === 0) {
107
121
  this.internals.setValidity({});
108
122
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"form-associated-mixin.js","sourceRoot":"","sources":["../../src/utilities/form-associated-mixin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"form-associated-mixin.js","sourceRoot":"","sources":["../../src/utilities/form-associated-mixin.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,cAAc,GAAG;IACtB,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB;IAC/E,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc;CACZ,CAAC;AAyB3D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,cAAc,CAAoC,IAAO;IACxE,MAAe,mBAAoB,SAAQ,IAAI;QAK9C,YAAY,GAAG,IAAW;YACzB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAHP,cAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YA0GpC,oBAAe,GAAG,EAAE,CAAC;YAtG5B,oEAAoE;YACpE,0DAA0D;YAC1D,MAAM,MAAM,GAAuB,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACjF,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,0EAA0E;QAC1E,SAAS;YACR,OAAO,IAAI,CAAC;QACb,CAAC;QAED;;gEAEwD;QACxD,SAAS;YACR,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,8DAA8D;QAC9D,eAAe;YACd,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,cAAc,EAAE,CAAC;QACvB,CAAC;QAED;;;;;;;;;WASG;QACH,gBAAgB;YACf,OAAO,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,yBAAyB,CAAC,IAAI,IAAI,CAAC;QAC1E,CAAC;QAED;;;;;;;;;WASG;QACH,gBAAgB;YACf,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,CAAC;QAED;;;;;;WAMG;QACH,iBAAiB,CAAC,OAAe;YAChC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACvB,CAAC;QAED;;;;;WAKG;QACH,cAAc;YACb,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;YACpC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC/B,OAAO;YACR,CAAC;YAED,MAAM,KAAK,GAAuB,EAAE,CAAC;YACrC,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACtC,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;oBACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;wBAAE,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;gBACrD,CAAC;gBACD,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC;YACpC,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACZ,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;gBACzB,oEAAoE;gBACpE,kEAAkE;gBAClE,OAAO,GAAG,MAAM,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC/B,OAAO;YACR,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QAID,oBAAoB,CAAC,QAAiB;YACrC,uEAAuE;YACvE,6DAA6D;YAC5D,IAAyC,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAChE,CAAC;;IAlHM,kCAAc,GAAG,IAAI,AAAP,CAAQ;IAqH9B,OAAO,mBAA0F,CAAC;AACnG,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The `rel` of a link that may open in a new tab.
3
+ *
4
+ * A link with `target="_blank"` gets `noopener noreferrer`: the page it opens
5
+ * gets no handle on this one through `window.opener`, and no referrer. A `rel`
6
+ * the consumer sets is added to, never replaced. `rel="external"` on a `_blank`
7
+ * link describes the link, and it is no reason to leave that door open.
8
+ *
9
+ * Returns an empty string when there is nothing to write, so a template can
10
+ * leave the attribute off with `|| nothing`.
11
+ */
12
+ export declare function linkRel(rel: string | null | undefined, target: string | null | undefined): string;
13
+ //# sourceMappingURL=link-rel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-rel.d.ts","sourceRoot":"","sources":["../../src/utilities/link-rel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAOjG"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The `rel` of a link that may open in a new tab.
3
+ *
4
+ * A link with `target="_blank"` gets `noopener noreferrer`: the page it opens
5
+ * gets no handle on this one through `window.opener`, and no referrer. A `rel`
6
+ * the consumer sets is added to, never replaced. `rel="external"` on a `_blank`
7
+ * link describes the link, and it is no reason to leave that door open.
8
+ *
9
+ * Returns an empty string when there is nothing to write, so a template can
10
+ * leave the attribute off with `|| nothing`.
11
+ */
12
+ export function linkRel(rel, target) {
13
+ const base = rel ?? '';
14
+ if (target !== '_blank')
15
+ return base.trim();
16
+ const parts = new Set(base.split(/\s+/).filter(Boolean));
17
+ parts.add('noopener');
18
+ parts.add('noreferrer');
19
+ return [...parts].join(' ');
20
+ }
21
+ //# sourceMappingURL=link-rel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-rel.js","sourceRoot":"","sources":["../../src/utilities/link-rel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,GAA8B,EAAE,MAAiC;IACxF,MAAM,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;IACvB,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtB,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nldd/design-system",
3
- "version": "0.8.91",
4
- "description": "Design System voor Nederlandse Digitale Dienst",
3
+ "version": "0.8.92",
4
+ "description": "Designsysteem voor de Nederlandse Digitale Dienst",
5
5
  "type": "module",
6
6
  "main": "dist/components/components.js",
7
7
  "module": "dist/components/components.js",
@@ -536,10 +536,10 @@
536
536
  "@storybook/addon-a11y": "^10.6.0",
537
537
  "@storybook/addon-docs": "^10.6.0",
538
538
  "@storybook/addon-themes": "^10.6.0",
539
- "@storybook/addon-vitest": "^10.6.0",
540
539
  "@storybook/web-components-vite": "^10.6.0",
541
- "@vitest/browser-playwright": "4.1.11",
542
- "@vitest/coverage-v8": "4.1.11",
540
+ "@vitest/browser-playwright": "5.0.0",
541
+ "@vitest/coverage-v8": "5.0.0",
542
+ "axe-core": "^4.13.0",
543
543
  "conventional-changelog": "^8.1.0",
544
544
  "conventional-changelog-conventionalcommits": "10.2.1",
545
545
  "eslint": "^10.8.0",
@@ -552,7 +552,7 @@
552
552
  "typescript": "^5.3.0",
553
553
  "typescript-eslint": "^8.58.0",
554
554
  "vite": "8.3.0",
555
- "vitest": "4.1.11",
555
+ "vitest": "5.0.0",
556
556
  "vue": "^3.5.40",
557
557
  "vue-tsc": "^3.3.7"
558
558
  },