@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
@@ -1,16 +1,16 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
2
  import { n as slottedReset, t as inheritedTextReset } from "./shadow-resets-aG-rgyNQ.js";
3
+ import { n as linkRel, t as withTranslations } from "./with-translations-BAKFoEKy.js";
3
4
  import { t as __decorate } from "./decorate-lwt_OrAG.js";
4
- import { t as withTranslations } from "./with-translations-CqUV9S5g.js";
5
5
  import { t as reflectNonDefault } from "./reflect-non-default-OLaK60rT.js";
6
- import { i as PopupAnchorController, n as NLDDTooltip, r as NLDDActivityIndicator, t as NLDDIconButton } from "./icon-button-CEz4MB9H.js";
6
+ import { i as PopupAnchorController, n as NLDDTooltip, r as NLDDActivityIndicator, t as NLDDIconButton } from "./icon-button-oua8pmMC.js";
7
7
  import { t as NLDDIcon } from "./icon-C_zwJZ_g.js";
8
8
  import { n as isPointerMode, r as isTouchMode, t as isKeyboardMode } from "./input-modality-DhTeUxKi.js";
9
9
  import { t as breakpoints } from "./breakpoints-CkxsiRgH.js";
10
10
  import { t as VisibilityMixin } from "./visibility-mixin-BU1vIMW7.js";
11
- import { $ as layer, A as syntaxTree, B as Tree, C as indentNodeProp, Ct as findClusterBreak, D as matchBrackets, E as languageDataProp, F as NodeProp, G as RectangleMarker, H as Decoration, I as NodeSet, J as drawSelection, K as ViewPlugin, L as NodeType, M as styleTags, N as tags, Q as keymap, S as getIndentation, St as countColumn, T as indentUnit, U as Direction, V as parseMixed, W as EditorView, X as getDrawSelectionConfig, Y as dropCursor, _t as Text, a as HighlightStyle, at as ChangeDesc, b as foldService, c as Language, ct as EditorSelection, d as ParseContext, et as lineNumbers, f as StreamLanguage, ft as Prec, gt as StateField, h as defineLanguageFacet, ht as StateEffect, it as Annotation, j as Tag, k as syntaxHighlighting, l as LanguageDescription, lt as EditorState, nt as placeholder, o as IndentContext, ot as ChangeSet, pt as RangeSetBuilder, q as WidgetType, st as Compartment, u as LanguageSupport, ut as Facet, vt as Transaction, w as indentString, x as getIndentUnit, xt as combineConfig, y as foldNodeProp, z as Parser } from "./dist-DHA-0RyT.js";
12
- import { i as completionStatus, n as autocompletion, s as startCompletion, t as CompletionContext } from "./dist-D_ckX1sK.js";
13
- import { n as html$2, r as htmlCompletionSource } from "./dist-BeymuiGt.js";
11
+ import { $ as layer, A as syntaxTree, B as Tree, C as indentNodeProp, Ct as countColumn, D as matchBrackets, E as languageDataProp, F as NodeProp, G as RectangleMarker, H as Decoration, I as NodeSet, J as drawSelection, K as ViewPlugin, L as NodeType, M as styleTags, N as tags, Q as keymap, S as getIndentation, St as combineConfig, T as indentUnit, U as Direction, V as parseMixed, W as EditorView, X as getDrawSelectionConfig, Y as dropCursor, _t as StateField, a as HighlightStyle, at as Annotation, b as foldService, c as Language, ct as Compartment, d as ParseContext, dt as Facet, et as lineNumbers, f as StreamLanguage, gt as StateEffect, h as defineLanguageFacet, it as tooltips, j as Tag, k as syntaxHighlighting, l as LanguageDescription, lt as EditorSelection, mt as RangeSetBuilder, nt as placeholder, o as IndentContext, ot as ChangeDesc, pt as Prec, q as WidgetType, st as ChangeSet, u as LanguageSupport, ut as EditorState, vt as Text, w as indentString, wt as findClusterBreak, x as getIndentUnit, y as foldNodeProp, yt as Transaction, z as Parser } from "./dist-Dn3c5gfb.js";
12
+ import { i as completionStatus, n as autocompletion, s as startCompletion, t as CompletionContext } from "./dist-BUu-NW5O.js";
13
+ import { n as html$2, r as htmlCompletionSource } from "./dist-Dxn9Up8K.js";
14
14
  import { LitElement, css, html, nothing, svg, unsafeCSS } from "lit";
15
15
  import { customElement, property, query, state } from "lit/decorators.js";
16
16
  import { unsafeHTML } from "lit/directives/unsafe-html.js";
@@ -694,7 +694,7 @@ function template$23(helpers) {
694
694
  ` : nothing;
695
695
  const popupSlot = html`<slot name="popup" @slotchange=${this._popup.handleSlotChange}></slot>`;
696
696
  if (this.href) {
697
- const resolvedRel = this._resolvedRel();
697
+ const resolvedRel = linkRel(this.rel, this.target);
698
698
  return html`
699
699
  <a class=${buttonClass}
700
700
  href=${this.href}
@@ -853,7 +853,7 @@ function DescribedBy(Base) {
853
853
  * @attr {string} accessible-label - Accessible label for the button, overrides text for screen readers
854
854
  * @attr {string} href - When set, renders an <a> element instead of <button>
855
855
  * @attr {string} target - 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).
856
- * @attr {string} rel - Link rel attribute; defaults to 'noopener noreferrer' when target is '_blank'
856
+ * @attr {string} rel - Link rel attribute, used with href; with target '_blank', 'noopener noreferrer' is added to whatever you set
857
857
  * @attr {object} translations - Override translation keys (e.g. the "opens in new tab" announcement); unset keys fall back to Dutch.
858
858
  *
859
859
  * @slot text - Slot for custom button content (e.g. text with inline markup). Used when the text attribute is empty or not set (an empty string counts as "not set", since the attribute and the unset property are indistinguishable). Provide accessible-label when the slotted content isn't plain text.
@@ -924,12 +924,6 @@ var NLDDButton = (_NLDDButton = class NLDDButton extends DescribedBy(withTransla
924
924
  if (this.type === "submit") this._internals.form?.requestSubmit();
925
925
  else if (this.type === "reset") this._internals.form?.reset();
926
926
  }
927
- /** Resolves the effective rel value for link rendering. */
928
- _resolvedRel() {
929
- if (this.rel) return this.rel;
930
- if (this.target === "_blank") return "noopener noreferrer";
931
- return "";
932
- }
933
927
  /**
934
928
  * Delegates focus to the inner `<button>` (or `<a>` when `href` is set), so
935
929
  * consumers can call `buttonEl.focus()` without reaching into shadow DOM.
@@ -5386,7 +5380,7 @@ function toolbarTitleTemplate(component) {
5386
5380
  <a class="toolbar__title-link"
5387
5381
  href=${component.href}
5388
5382
  target=${component.target || nothing}
5389
- rel=${component.target === "_blank" ? "noopener noreferrer" : nothing}
5383
+ rel=${linkRel(null, component.target) || nothing}
5390
5384
  >
5391
5385
  <slot name="media"></slot>
5392
5386
  ${titleGroup}${component.target === "_blank" ? html`<span class="toolbar__opens-in-new-tab-hint">${component._t("components.toolbar.opens-in-new-tab-label")}</span>` : nothing}
@@ -6371,7 +6365,7 @@ function avatarTemplate(component) {
6371
6365
  <a class="avatar avatar--interactive"
6372
6366
  href=${component.href}
6373
6367
  target=${component.target || nothing}
6374
- rel=${component._resolvedRel() || nothing}
6368
+ rel=${linkRel(component.rel, component.target) || nothing}
6375
6369
  aria-label=${controlLabel}
6376
6370
  tabindex=${component.noTab ? "-1" : nothing}
6377
6371
  >${content}</a>
@@ -6392,7 +6386,7 @@ function avatarTemplate(component) {
6392
6386
  //#endregion
6393
6387
  //#region src/components/content/avatar/avatar.ts
6394
6388
  /**
6395
- * NLDD Design System Avatar Component (Lit + TypeScript)
6389
+ * Nederlandse Digitale Dienst Avatar Component (Lit + TypeScript)
6396
6390
  *
6397
6391
  * Shows one person or organization as a compact, round (person) or rounded
6398
6392
  * (organization) representation. The content follows a fixed fallback chain: an
@@ -6433,7 +6427,7 @@ function avatarTemplate(component) {
6433
6427
  * @attr {boolean} no-tab - Takes the control out of the tab order (tabindex="-1"), for an avatar that is a link or a button inside a roving container (a row of an nldd-list). Does nothing on a decorative avatar.
6434
6428
  * @attr {boolean} button - Makes the avatar a button; ignored when `href` is set
6435
6429
  * @attr {string} target - Link target for href (e.g. '_blank'); completes rel and announces "Opens in a new tab"
6436
- * @attr {string} rel - Link rel for href; defaults to 'noopener noreferrer' when target='_blank'
6430
+ * @attr {string} rel - Link rel for href; with target '_blank', 'noopener noreferrer' is added to whatever you set
6437
6431
  * @attr {object} translations - Override translation keys; unset keys fall back to Dutch
6438
6432
  *
6439
6433
  * @example
@@ -6482,16 +6476,6 @@ var NLDDAvatar = (_NLDDAvatar = class NLDDAvatar extends withTranslations(LitEle
6482
6476
  get isInteractive() {
6483
6477
  return Boolean(this.href) || this.button;
6484
6478
  }
6485
- /** Resolves rel for the link: _blank adds noopener/noreferrer (mirroring
6486
- * nldd-link and nldd-card), merged with a rel of your own. */
6487
- _resolvedRel() {
6488
- const base = this.rel ?? "";
6489
- if (this.target !== "_blank") return base;
6490
- const parts = new Set(base.split(/\s+/).filter(Boolean));
6491
- parts.add("noopener");
6492
- parts.add("noreferrer");
6493
- return [...parts].join(" ");
6494
- }
6495
6479
  /** Initials shown when there is no image: an explicit `initials` wins,
6496
6480
  * otherwise the first letter of the first and last word of `name`. */
6497
6481
  get resolvedInitials() {
@@ -10050,7 +10034,7 @@ var template$13 = (button, href, target, rel, opensInNewTabLabel, actionTabindex
10050
10034
  <a class="list-item__action"
10051
10035
  href=${href}
10052
10036
  target=${target ?? nothing}
10053
- rel=${rel ?? nothing}
10037
+ rel=${linkRel(rel, target) || nothing}
10054
10038
  aria-disabled=${disabled ? "true" : nothing}
10055
10039
  aria-expanded=${ariaExpanded}
10056
10040
  tabindex=${actionTabindex ?? nothing}
@@ -10975,7 +10959,7 @@ var nlddAvatarGroupTranslations = {
10975
10959
  //#endregion
10976
10960
  //#region src/components/content/avatar-group/avatar-group.ts
10977
10961
  /**
10978
- * NLDD Design System Avatar Group Component (Lit + TypeScript)
10962
+ * Nederlandse Digitale Dienst Avatar Group Component (Lit + TypeScript)
10979
10963
  *
10980
10964
  * Shows several avatars as one group: they overlap, and each one gets a ring in
10981
10965
  * the surface color so they stay apart where they meet. The ring uses the same
@@ -11240,7 +11224,7 @@ function identityTemplate(component) {
11240
11224
  //#endregion
11241
11225
  //#region src/components/content/identity/identity.ts
11242
11226
  /**
11243
- * NLDD Design System Identity Component (Lit + TypeScript)
11227
+ * Nederlandse Digitale Dienst Identity Component (Lit + TypeScript)
11244
11228
  *
11245
11229
  * An editorial line that shows authors or editors: optional avatar or avatars,
11246
11230
  * a name line and supporting text (a role or a date, for instance). Every part
@@ -11582,16 +11566,16 @@ var nlddCodeMirrorTheme = [baseTheme, syntaxHighlighting(highlightStyle)];
11582
11566
  //#endregion
11583
11567
  //#region src/utilities/codemirror/languages.ts
11584
11568
  var loaders = {
11585
- json: async () => (await import("./dist-BLaE_n_F.js")).json(),
11586
- yaml: async () => (await import("./dist-TCqV9dho.js")).yaml(),
11587
- javascript: async () => (await import("./dist-Y54Lma86.js").then((n) => n.t)).javascript(),
11588
- typescript: async () => (await import("./dist-Y54Lma86.js").then((n) => n.t)).javascript({ typescript: true }),
11589
- css: async () => (await import("./dist-CYLM5ciE.js").then((n) => n.r)).css(),
11590
- html: async () => (await import("./dist-BeymuiGt.js").then((n) => n.t)).html(),
11591
- xml: async () => (await import("./dist-Dh_b9r4M.js")).xml(),
11592
- python: async () => (await import("./dist-yyE8P2O6.js")).python(),
11593
- rust: async () => (await import("./dist-CENYEz7C.js")).rust(),
11594
- sql: async () => (await import("./dist-DkZlotgT.js")).sql(),
11569
+ json: async () => (await import("./dist-CoUVHSu-.js")).json(),
11570
+ yaml: async () => (await import("./dist-OlffRM7-.js")).yaml(),
11571
+ javascript: async () => (await import("./dist-CGOykrJw.js").then((n) => n.t)).javascript(),
11572
+ typescript: async () => (await import("./dist-CGOykrJw.js").then((n) => n.t)).javascript({ typescript: true }),
11573
+ css: async () => (await import("./dist-CQzaKTa8.js").then((n) => n.r)).css(),
11574
+ html: async () => (await import("./dist-Dxn9Up8K.js").then((n) => n.t)).html(),
11575
+ xml: async () => (await import("./dist-M6GKopqu.js")).xml(),
11576
+ python: async () => (await import("./dist-CSYXsT7W.js")).python(),
11577
+ rust: async () => (await import("./dist-B5ie2Bo9.js")).rust(),
11578
+ sql: async () => (await import("./dist-RPaf2J9c.js")).sql(),
11595
11579
  markdown: async () => (await Promise.resolve().then(() => dist_exports)).markdown(),
11596
11580
  bash: async () => new LanguageSupport(StreamLanguage.define((await import("./shell-C61GCsJA.js")).shell)),
11597
11581
  toml: async () => new LanguageSupport(StreamLanguage.define((await import("./toml-C2HBbPgG.js")).toml)),
@@ -11925,7 +11909,11 @@ var NLDDCodeViewer = (_NLDDCodeViewer = class NLDDCodeViewer extends NLDDCodeMir
11925
11909
  nlddCodeMirrorTheme,
11926
11910
  EditorView.editable.of(false),
11927
11911
  EditorState.readOnly.of(true),
11928
- EditorView.contentAttributes.of({ role: "document" }),
11912
+ EditorView.contentAttributes.of({
11913
+ role: "code",
11914
+ "aria-multiline": null,
11915
+ "aria-readonly": null
11916
+ }),
11929
11917
  this._wrapCompartment.of(this.wrap ? EditorView.lineWrapping : []),
11930
11918
  this._languageCompartment.of([])
11931
11919
  ];
@@ -15630,6 +15618,20 @@ function FormAssociated(Base) {
15630
15618
  return this.shadowRoot?.querySelector("input, textarea, select") ?? null;
15631
15619
  }
15632
15620
  /**
15621
+ * Where an invalid submit points its message and puts the focus.
15622
+ *
15623
+ * The native control, where the user reads and fixes it. Not when that
15624
+ * control is hidden, as the radio that only carries `required` is: a radio
15625
+ * inside an element that is itself the radio is a control inside a control,
15626
+ * and a hidden element cannot hold the message. Then it goes on this
15627
+ * element. Override where neither is what the user should land on, such as
15628
+ * a group that has no focus of its own.
15629
+ */
15630
+ validationAnchor() {
15631
+ const target = this.validationTarget();
15632
+ return target && !target.hidden ? target : void 0;
15633
+ }
15634
+ /**
15633
15635
  * A reason the host is invalid that no attribute can express: a server that
15634
15636
  * refused the value, or an nldd-validation-list whose rule it fails. Kept
15635
15637
  * beside the native flags rather than replacing them, because
@@ -15663,7 +15665,7 @@ function FormAssociated(Base) {
15663
15665
  flags.customError = true;
15664
15666
  message = custom;
15665
15667
  }
15666
- const anchor = target ?? this;
15668
+ const anchor = this.validationAnchor();
15667
15669
  if (Object.keys(flags).length === 0) {
15668
15670
  this.internals.setValidity({});
15669
15671
  return;
@@ -20563,7 +20565,7 @@ function datePickerTemplate(component) {
20563
20565
  //#endregion
20564
20566
  //#region src/components/inputs/date-picker/date-picker.ts
20565
20567
  /**
20566
- * NLDD Design System Date Picker Component (Lit + TypeScript)
20568
+ * Nederlandse Digitale Dienst Date Picker Component (Lit + TypeScript)
20567
20569
  *
20568
20570
  * A calendar for picking a date or a period. The component works on its own
20569
20571
  * (inline on a page, in a filter panel) and also sits in the popover of
@@ -21336,7 +21338,7 @@ var nlddDateFieldTranslations = {
21336
21338
  //#endregion
21337
21339
  //#region src/components/inputs/date-field/date-field.ts
21338
21340
  /**
21339
- * NLDD Design System Date Field Component (Lit + TypeScript)
21341
+ * Nederlandse Digitale Dienst Date Field Component (Lit + TypeScript)
21340
21342
  *
21341
21343
  * A text field for a date, with an optional calendar in a popover. The value is
21342
21344
  * always ISO (yyyy-mm-dd); on screen it shows the Dutch notation (dd-mm-yyyy).
@@ -23848,16 +23850,6 @@ var radioButtonStyles = css`
23848
23850
 
23849
23851
  /* # Elements */
23850
23852
 
23851
- .radio-button__validation-input {
23852
- position: absolute;
23853
- inset: 0;
23854
- opacity: 0;
23855
- margin: 0;
23856
- pointer-events: none;
23857
- width: 100%;
23858
- height: 100%;
23859
- }
23860
-
23861
23853
  .radio-button__outer-shape {
23862
23854
  box-sizing: border-box;
23863
23855
  position: relative;
@@ -23944,11 +23936,10 @@ function radioButtonTemplate(component) {
23944
23936
  <input class="radio-button__validation-input"
23945
23937
  type="radio"
23946
23938
  name="nldd-validation"
23939
+ hidden
23947
23940
  ?required=${component.required}
23948
23941
  ?disabled=${component.disabled}
23949
23942
  .checked=${component._groupHasSelection}
23950
- tabindex="-1"
23951
- aria-hidden="true"
23952
23943
  >
23953
23944
  <div class="radio-button__outer-shape"
23954
23945
  aria-hidden="true"
@@ -24325,16 +24316,6 @@ var radioButtonFieldStyles = css`
24325
24316
  outline: none;
24326
24317
  }
24327
24318
 
24328
- .radio-button-field__validation-input {
24329
- position: absolute;
24330
- inset: 0;
24331
- opacity: 0;
24332
- margin: 0;
24333
- pointer-events: none;
24334
- width: 100%;
24335
- height: 100%;
24336
- }
24337
-
24338
24319
 
24339
24320
  /* # Block */
24340
24321
 
@@ -24377,11 +24358,10 @@ function radioButtonFieldTemplate(component) {
24377
24358
  <input class="radio-button-field__validation-input"
24378
24359
  type="radio"
24379
24360
  name="nldd-validation"
24361
+ hidden
24380
24362
  ?required=${component.required}
24381
24363
  ?disabled=${component.disabled}
24382
24364
  .checked=${component._answered}
24383
- tabindex="-1"
24384
- aria-hidden="true"
24385
24365
  >
24386
24366
  <div class="radio-button-field__control">
24387
24367
  <nldd-radio-button
@@ -25286,16 +25266,6 @@ var segmentedControlStyles = css`
25286
25266
 
25287
25267
  /* # Elements */
25288
25268
 
25289
- .segmented-control__validation-input {
25290
- position: absolute;
25291
- inset: 0;
25292
- opacity: 0;
25293
- margin: 0;
25294
- pointer-events: none;
25295
- width: 100%;
25296
- height: 100%;
25297
- }
25298
-
25299
25269
  ::slotted(nldd-segmented-control-item[selected]) {
25300
25270
  position: relative;
25301
25271
  z-index: var(--_selected-z-index);
@@ -25521,11 +25491,10 @@ function segmentedControlTemplate(component) {
25521
25491
  <input class="segmented-control__validation-input"
25522
25492
  type="radio"
25523
25493
  name="nldd-validation"
25494
+ hidden
25524
25495
  ?required=${component.required && component.type !== "checkbox"}
25525
25496
  ?disabled=${component.disabled}
25526
25497
  .checked=${!!component.value}
25527
- tabindex="-1"
25528
- aria-hidden="true"
25529
25498
  >
25530
25499
  <slot @slotchange=${component._onSlotChange}></slot>
25531
25500
  `;
@@ -25903,6 +25872,12 @@ var NLDDSegmentedControl = (_NLDDSegmentedControl2 = class NLDDSegmentedControl
25903
25872
  this.value = this._initialValue;
25904
25873
  this.values = [...this._initialValues];
25905
25874
  }
25875
+ /** The group has no focus of its own, so an invalid submit lands where Tab
25876
+ * would: on the chosen option, or the first one that is enabled. */
25877
+ validationAnchor() {
25878
+ const items = this._getItems().filter((item) => !item.disabled);
25879
+ return items.find((item) => item.selected) ?? items[0];
25880
+ }
25906
25881
  formStateRestoreCallback(state) {
25907
25882
  if (state === null) return;
25908
25883
  if (this.type === "checkbox" && state instanceof FormData && this.name) this.values = state.getAll(this.name).map(String);
@@ -29378,7 +29353,73 @@ function completionSource(getTypeaheads, onChoose) {
29378
29353
  };
29379
29354
  };
29380
29355
  }
29356
+ /**
29357
+ * A frame for the list in the top layer, the way an nldd-menu opens.
29358
+ *
29359
+ * CodeMirror hangs its tooltip in the editor, so everything around the editor
29360
+ * applies to it: an nldd-sheet and an nldd-modal-dialog hide their overflow and
29361
+ * cut the list off at their edge, and an ancestor with a transform becomes the
29362
+ * frame a `position: fixed` tooltip resolves against, which put the list beside
29363
+ * the page. In the top layer none of that reaches it, and it has the window to
29364
+ * itself instead of the room left in a short dialog.
29365
+ *
29366
+ * It keeps the same distance from the window's edge that an nldd-menu does.
29367
+ *
29368
+ * The frame is `manual`, so only this opens and closes it, and it is opened
29369
+ * from a mutation observer rather than on an update: CodeMirror measures the
29370
+ * tooltip right after it puts it there, and a closed popover has no size.
29371
+ */
29372
+ /** What an nldd-menu keeps free of the window's edge (--_viewport-margin). */
29373
+ var VIEWPORT_MARGIN = 16;
29374
+ function topLayerPopups() {
29375
+ const frame = document.createElement("div");
29376
+ frame.popover = "manual";
29377
+ frame.className = "cm-nldd-popups";
29378
+ const sync = () => {
29379
+ const wanted = frame.querySelector(".cm-tooltip") !== null;
29380
+ if (wanted === frame.matches(":popover-open")) return;
29381
+ try {
29382
+ if (wanted) frame.showPopover();
29383
+ else frame.hidePopover();
29384
+ } catch {}
29385
+ };
29386
+ const keeper = ViewPlugin.define((view) => {
29387
+ view.dom.appendChild(frame);
29388
+ const observer = new MutationObserver(sync);
29389
+ observer.observe(frame, {
29390
+ childList: true,
29391
+ subtree: true
29392
+ });
29393
+ return { destroy() {
29394
+ observer.disconnect();
29395
+ frame.remove();
29396
+ } };
29397
+ });
29398
+ const space = () => ({
29399
+ left: VIEWPORT_MARGIN,
29400
+ top: VIEWPORT_MARGIN,
29401
+ right: window.innerWidth - VIEWPORT_MARGIN,
29402
+ bottom: window.innerHeight - VIEWPORT_MARGIN
29403
+ });
29404
+ return [tooltips({
29405
+ parent: frame,
29406
+ tooltipSpace: space
29407
+ }), keeper];
29408
+ }
29381
29409
  var popupTheme = EditorView.theme({
29410
+ ".cm-nldd-popups": {
29411
+ position: "fixed",
29412
+ inset: "0",
29413
+ width: "auto",
29414
+ height: "auto",
29415
+ margin: "0",
29416
+ border: "none",
29417
+ padding: "0",
29418
+ background: "none",
29419
+ overflow: "visible",
29420
+ pointerEvents: "none"
29421
+ },
29422
+ ".cm-nldd-popups .cm-tooltip": { pointerEvents: "auto" },
29382
29423
  ".cm-tooltip.cm-tooltip-autocomplete": {
29383
29424
  border: "none",
29384
29425
  borderRadius: "var(--semantics-overlays-corner-radius)",
@@ -29460,6 +29501,7 @@ function typeaheads(getTypeaheads, onChoose) {
29460
29501
  if (typeaheadQueryAt(update.state, update.state.selection.main.head, triggers)) startCompletion(update.view);
29461
29502
  });
29462
29503
  return [
29504
+ topLayerPopups(),
29463
29505
  autocompletion({
29464
29506
  override: [completionSource(getTypeaheads, onChoose)],
29465
29507
  icons: false,
@@ -33834,8 +33876,8 @@ var spacerStyles = css`
33834
33876
  /**
33835
33877
  * Nederlandse Digitale Dienst Spacer Component (Lit + TypeScript)
33836
33878
  *
33837
- * Add explicit space between elements. Components in this design system
33838
- * have no margins of their own — all whitespace is set by a spacer.
33879
+ * Add explicit space between elements. Components here have no margins
33880
+ * of their own — all whitespace is set by a spacer.
33839
33881
  *
33840
33882
  * ### Sizing
33841
33883
  * Use a single `size` attribute for whitespace that's the same at every
@@ -34172,7 +34214,7 @@ var nlddTimePickerTranslations = {
34172
34214
  //#endregion
34173
34215
  //#region src/components/inputs/time-picker/time-picker.ts
34174
34216
  /**
34175
- * NLDD Design System Time Picker Component (Lit + TypeScript)
34217
+ * Nederlandse Digitale Dienst Time Picker Component (Lit + TypeScript)
34176
34218
  *
34177
34219
  * Two columns, hours and minutes, that slide like a wheel past the selection in
34178
34220
  * the middle. The component works on its own (inline on a page, in a filter
@@ -34612,7 +34654,7 @@ var nlddTimeFieldTranslations = {
34612
34654
  //#endregion
34613
34655
  //#region src/components/inputs/time-field/time-field.ts
34614
34656
  /**
34615
- * NLDD Design System Time Field Component (Lit + TypeScript)
34657
+ * Nederlandse Digitale Dienst Time Field Component (Lit + TypeScript)
34616
34658
  *
34617
34659
  * A text field for a time. The value is always 24-hour `HH:mm`, which is how
34618
34660
  * Dutch shows it too, so unlike nldd-date-field there is nothing to convert.
@@ -35316,15 +35358,6 @@ var toggleButtonStyles = css`
35316
35358
  height: 100%;
35317
35359
  }
35318
35360
 
35319
- .toggle-button__validation-input {
35320
- position: absolute;
35321
- inset: 0;
35322
- opacity: 0;
35323
- margin: 0;
35324
- pointer-events: none;
35325
- width: 100%;
35326
- height: 100%;
35327
- }
35328
35361
  `;
35329
35362
  //#endregion
35330
35363
  //#region src/components/inputs/toggle-button/toggle-button.template.ts
@@ -35348,11 +35381,10 @@ function toggleButtonTemplate(component) {
35348
35381
  <input class="toggle-button__validation-input"
35349
35382
  type="radio"
35350
35383
  name="nldd-validation"
35384
+ hidden
35351
35385
  ?required=${component.required}
35352
35386
  ?disabled=${component.disabled}
35353
35387
  .checked=${component._groupHasSelection}
35354
- tabindex="-1"
35355
- aria-hidden="true"
35356
35388
  >
35357
35389
  ${icon}
35358
35390
  ${textContent}
@@ -40401,7 +40433,7 @@ function heroTemplate(component) {
40401
40433
  //#endregion
40402
40434
  //#region src/components/layout/page-sections/hero/hero.ts
40403
40435
  /**
40404
- * NLDD Design System Hero Component (Lit + TypeScript)
40436
+ * Nederlandse Digitale Dienst Hero Component (Lit + TypeScript)
40405
40437
  *
40406
40438
  * A page header with a media area and a text panel (the main) that can stand in
40407
40439
  * six positions. Every area is rectangular.
@@ -41683,7 +41715,7 @@ var sheetStyles = css`
41683
41715
  height: var(--_height, calc(100dvh - var(--semantics-sheets-bottom-top-inset)));
41684
41716
 
41685
41717
  &[open] {
41686
- animation: sheet-slide-in-bottom var(--semantics-sheets-bottom-animation-duration) var(--primitives-transition-easing-default) both;
41718
+ animation: sheet-slide-in-bottom var(--semantics-sheets-bottom-animation-duration) var(--primitives-transition-easing-default) backwards;
41687
41719
  }
41688
41720
 
41689
41721
  &.is-closing {
@@ -41698,7 +41730,7 @@ var sheetStyles = css`
41698
41730
  height: calc(100dvh - var(--semantics-overlays-inset) * 2);
41699
41731
 
41700
41732
  &[open] {
41701
- animation: sheet-slide-in-right var(--semantics-sheets-side-animation-duration) var(--primitives-transition-easing-default) both;
41733
+ animation: sheet-slide-in-right var(--semantics-sheets-side-animation-duration) var(--primitives-transition-easing-default) backwards;
41702
41734
  }
41703
41735
 
41704
41736
  &.is-closing {
@@ -41733,7 +41765,7 @@ var sheetStyles = css`
41733
41765
  height: calc(100dvh - var(--semantics-overlays-inset) * 2);
41734
41766
 
41735
41767
  &[open] {
41736
- animation: sheet-slide-in-left var(--semantics-sheets-side-animation-duration) var(--primitives-transition-easing-default) both;
41768
+ animation: sheet-slide-in-left var(--semantics-sheets-side-animation-duration) var(--primitives-transition-easing-default) backwards;
41737
41769
  }
41738
41770
 
41739
41771
  &.is-closing {
@@ -41757,7 +41789,7 @@ var sheetStyles = css`
41757
41789
  height: var(--_height, calc(100dvh - var(--semantics-sheets-bottom-top-inset)));
41758
41790
 
41759
41791
  &[open] {
41760
- animation: sheet-slide-in-bottom var(--semantics-sheets-bottom-animation-duration) var(--primitives-transition-easing-default) both;
41792
+ animation: sheet-slide-in-bottom var(--semantics-sheets-bottom-animation-duration) var(--primitives-transition-easing-default) backwards;
41761
41793
  }
41762
41794
 
41763
41795
  &.is-closing {
@@ -42512,7 +42544,7 @@ function cardTemplate(component) {
42512
42544
  <a class="card__action"
42513
42545
  href=${component.href}
42514
42546
  target=${component.target || nothing}
42515
- rel=${component._resolvedRel() || nothing}
42547
+ rel=${linkRel(component.rel, component.target) || nothing}
42516
42548
  aria-label=${linkLabel}
42517
42549
  ></a>
42518
42550
  ` : component.button ? html`
@@ -42567,7 +42599,7 @@ var nlddCardTranslations = { "components.card.opens-in-new-tab-label": "Opent in
42567
42599
  * @attr {string} href - Makes the whole card a link to this URL (empty = no link)
42568
42600
  * @attr {boolean} button - Makes the whole card a button; ignored when `href` is set
42569
42601
  * @attr {string} target - Link target for href (e.g. '_blank'); adjusts rel automatically and adds an "Opent in nieuw tabblad" announcement for '_blank'
42570
- * @attr {string} rel - Link rel for href; defaults to 'noopener noreferrer' with target='_blank'
42602
+ * @attr {string} rel - Link rel for href; with target '_blank', 'noopener noreferrer' is added to whatever you set
42571
42603
  * @attr {object} translations - Override translation keys (e.g. the "Opent in nieuw tabblad" announcement)
42572
42604
  *
42573
42605
  * @slot header - Header content (e.g. nldd-title)
@@ -42598,16 +42630,6 @@ var NLDDCard = (_NLDDCard = class NLDDCard extends withTranslations(LitElement,
42598
42630
  wrapper.hidden = slot.assignedElements().length === 0;
42599
42631
  };
42600
42632
  }
42601
- /** Resolve rel for the overlay link: add noopener noreferrer for _blank
42602
- * (mirrors nldd-link), merged with any consumer-set rel. */
42603
- _resolvedRel() {
42604
- const base = this.rel ?? "";
42605
- if (this.target !== "_blank") return base;
42606
- const parts = new Set(base.split(/\s+/).filter(Boolean));
42607
- parts.add("noopener");
42608
- parts.add("noreferrer");
42609
- return [...parts].join(" ");
42610
- }
42611
42633
  connectedCallback() {
42612
42634
  super.connectedCallback();
42613
42635
  this.addEventListener("focusin", this._onFocusIn);
@@ -44139,7 +44161,7 @@ function template$9(control, href, target, rel, checked, expanded, current, disa
44139
44161
  if (control === "link") return html`<a class="list-item-segment"
44140
44162
  href=${href ?? nothing}
44141
44163
  target=${target ?? nothing}
44142
- rel=${rel ?? nothing}
44164
+ rel=${linkRel(rel, target) || nothing}
44143
44165
  aria-disabled=${disabled ? "true" : nothing}
44144
44166
  aria-expanded=${ariaExpanded}
44145
44167
  aria-current=${ariaCurrent}
@@ -46938,7 +46960,7 @@ var linkStyles = css`
46938
46960
  //#endregion
46939
46961
  //#region src/components/navigation/link/link.template.ts
46940
46962
  function template$3(helpers) {
46941
- const resolvedRel = this._resolvedRel();
46963
+ const resolvedRel = linkRel(this.rel, this.target);
46942
46964
  const opensInNewTabHint = !this.disabled && this.href && this.target === "_blank" ? this._t("components.link.opens-in-new-tab-label") : "";
46943
46965
  const ariaLabel = this.accessibleLabel ? [this.accessibleLabel, opensInNewTabHint].filter(Boolean).join(", ") : nothing;
46944
46966
  const renderOpensInNewTabHint = !!opensInNewTabHint && !this.accessibleLabel;
@@ -46990,7 +47012,7 @@ var nlddLinkTranslations = { "components.link.opens-in-new-tab-label": "Opent in
46990
47012
  * @element nldd-link
46991
47013
  * @attr {string} href - Link target
46992
47014
  * @attr {string} target - 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).
46993
- * @attr {string} rel - Link rel attribute; defaults to 'noopener noreferrer' with target='_blank'
47015
+ * @attr {string} rel - Link rel attribute; with target '_blank', 'noopener noreferrer' is added to whatever you set
46994
47016
  * @attr {string} size - 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.
46995
47017
  * @attr {string} text - Link text (alternative to the default slot)
46996
47018
  * @attr {string} start-icon - Icon before the text
@@ -47025,15 +47047,6 @@ var NLDDLink = (_NLDDLink = class NLDDLink extends withTranslations(LitElement,
47025
47047
  e.stopPropagation();
47026
47048
  }
47027
47049
  }
47028
- /** @internal */
47029
- _resolvedRel() {
47030
- const base = this.rel ?? "";
47031
- if (this.target !== "_blank") return base;
47032
- const parts = new Set(base.split(/\s+/).filter(Boolean));
47033
- parts.add("noopener");
47034
- parts.add("noreferrer");
47035
- return [...parts].join(" ");
47036
- }
47037
47050
  render() {
47038
47051
  return template$3.call(this, { handleClick: this._handleClick.bind(this) });
47039
47052
  }
@@ -47107,17 +47120,24 @@ var skipLinkStyles = css`
47107
47120
  position: absolute;
47108
47121
  top: 0;
47109
47122
  left: 0;
47110
- opacity: 0;
47123
+ clip-path: inset(50%);
47111
47124
  z-index: var(--_z-index);
47112
47125
  border-radius: var(--semantics-controls-md-corner-radius);
47113
47126
  box-shadow: var(--_box-shadow);
47114
47127
  background-color: var(--semantics-surfaces-base-background-color);
47128
+ width: 1px;
47129
+ height: 1px;
47130
+ overflow: hidden;
47115
47131
  pointer-events: none;
47116
47132
  justify-content: center;
47117
47133
  }
47118
47134
 
47119
47135
  .skip-link:has(:focus-visible) {
47120
- opacity: 1;
47136
+ clip-path: none;
47137
+ width: auto;
47138
+ max-width: 100%;
47139
+ height: auto;
47140
+ overflow: visible;
47121
47141
  pointer-events: auto;
47122
47142
  }
47123
47143
 
@@ -47133,9 +47153,8 @@ var skipLinkStyles = css`
47133
47153
  padding: var(--primitives-space-4) var(--primitives-space-16);
47134
47154
  align-items: center;
47135
47155
  color: var(--semantics-links-color);
47136
- font: var(--primitives-font-body-md-medium-flat);
47156
+ font: var(--primitives-font-body-md-medium-tight);
47137
47157
  text-decoration: underline;
47138
- white-space: nowrap;
47139
47158
  appearance: none;
47140
47159
  }
47141
47160
 
@@ -50596,7 +50615,7 @@ var modalDialogStyles = css`
50596
50615
  }
50597
50616
 
50598
50617
  .modal-dialog[open] {
50599
- animation: modal-dialog-in var(--_animation-duration) var(--_animation-easing) both;
50618
+ animation: modal-dialog-in var(--_animation-duration) var(--_animation-easing) backwards;
50600
50619
  }
50601
50620
 
50602
50621
  .modal-dialog.is-closing {
@@ -52375,7 +52394,7 @@ var nlddBadgeTranslations = { "components.badge.notification-label": "Notificati
52375
52394
  * @element nldd-badge
52376
52395
  * @attr {string} size - Size: 'sm' | 'md' (default: 'md')
52377
52396
  * @attr {string} color - 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'
52378
- * @attr {string} custom-color - 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.
52397
+ * @attr {string} custom-color - 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.
52379
52398
  * @attr {boolean} pulse - Grows a ring out of the badge and fades it, for something happening right now (a live connection, an outage). Respects `prefers-reduced-motion`.
52380
52399
  * @attr {string} text - Text (takes precedence over number)
52381
52400
  * @attr {number} number - Numeric value. Shortened when it is over max
@@ -54656,7 +54675,7 @@ var statusBarStyles = css`
54656
54675
  border-radius: var(--_corner-radius);
54657
54676
  background-color: var(--_background-color);
54658
54677
  width: 100%;
54659
- height: var(--_height);
54678
+ min-height: var(--_height);
54660
54679
  overflow: hidden;
54661
54680
  padding-inline: var(--_inline-padding);
54662
54681
  gap: var(--_gap);
@@ -54745,7 +54764,7 @@ function statusBarTemplate(component) {
54745
54764
  <a class="status-bar"
54746
54765
  href=${component.href}
54747
54766
  target=${component.target || nothing}
54748
- rel=${component._resolvedRel() || nothing}
54767
+ rel=${linkRel(component.rel, component.target) || nothing}
54749
54768
  >${content}</a>
54750
54769
  `;
54751
54770
  if (component.button) return html`
@@ -54758,7 +54777,7 @@ function statusBarTemplate(component) {
54758
54777
  //#endregion
54759
54778
  //#region src/components/status-and-feedback/status-bar/status-bar.ts
54760
54779
  /**
54761
- * NLDD Design System Status Bar Component (Lit + TypeScript)
54780
+ * Nederlandse Digitale Dienst Status Bar Component (Lit + TypeScript)
54762
54781
  *
54763
54782
  * A narrow, page-wide status bar (24px) with a deep background color per
54764
54783
  * variant. Use it for persistent system state: an outage, planned maintenance,
@@ -54794,7 +54813,7 @@ function statusBarTemplate(component) {
54794
54813
  * @attr {string} text - The status text (one line; truncated with an ellipsis)
54795
54814
  * @attr {string} href - Makes the whole bar a link (renders an <a>)
54796
54815
  * @attr {string} target - Link target (e.g. '_blank'); only used with href
54797
- * @attr {string} rel - Link rel; defaults to 'noopener noreferrer' with target='_blank'
54816
+ * @attr {string} rel - Link rel, used with href; with target '_blank', 'noopener noreferrer' is added to whatever you set
54798
54817
  * @attr {boolean} button - Makes the whole bar a button; ignored when href is set
54799
54818
  */
54800
54819
  var _NLDDStatusBar;
@@ -54812,11 +54831,6 @@ var NLDDStatusBar = (_NLDDStatusBar = class NLDDStatusBar extends LitElement {
54812
54831
  super.connectedCallback();
54813
54832
  this._applyAriaForVariant(this.variant);
54814
54833
  }
54815
- /** @internal Auto-secure rel for new-tab links unless the consumer set one. */
54816
- _resolvedRel() {
54817
- if (this.rel) return this.rel;
54818
- return this.target === "_blank" ? "noopener noreferrer" : "";
54819
- }
54820
54834
  updated(changed) {
54821
54835
  if (changed.has("variant")) this._applyAriaForVariant(this.variant);
54822
54836
  }