@nldd/design-system 0.8.58 → 0.8.59

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 (63) hide show
  1. package/dist/components/actions/menu/menu.d.ts +25 -4
  2. package/dist/components/actions/menu/menu.d.ts.map +1 -1
  3. package/dist/components/actions/menu/menu.i18n.d.ts +1 -1
  4. package/dist/components/actions/menu/menu.i18n.js +1 -1
  5. package/dist/components/actions/menu/menu.i18n.js.map +1 -1
  6. package/dist/components/actions/menu/menu.js +50 -6
  7. package/dist/components/actions/menu/menu.js.map +1 -1
  8. package/dist/components/actions/menu/menu.styles.d.ts.map +1 -1
  9. package/dist/components/actions/menu/menu.styles.js +18 -4
  10. package/dist/components/actions/menu/menu.styles.js.map +1 -1
  11. package/dist/components/actions/menu/menu.template.d.ts.map +1 -1
  12. package/dist/components/actions/menu/menu.template.js +99 -50
  13. package/dist/components/actions/menu/menu.template.js.map +1 -1
  14. package/dist/components/components.js +1 -1
  15. package/dist/components/content/byline/byline.d.ts +8 -0
  16. package/dist/components/content/byline/byline.d.ts.map +1 -1
  17. package/dist/components/content/byline/byline.js +18 -5
  18. package/dist/components/content/byline/byline.js.map +1 -1
  19. package/dist/components/content/byline/byline.styles.d.ts.map +1 -1
  20. package/dist/components/content/byline/byline.styles.js +23 -6
  21. package/dist/components/content/byline/byline.styles.js.map +1 -1
  22. package/dist/components/content/byline/byline.template.d.ts.map +1 -1
  23. package/dist/components/content/byline/byline.template.js +17 -13
  24. package/dist/components/content/byline/byline.template.js.map +1 -1
  25. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.d.ts +27 -2
  26. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.d.ts.map +1 -1
  27. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.js +33 -2
  28. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.js.map +1 -1
  29. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.styles.d.ts.map +1 -1
  30. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.styles.js +72 -13
  31. package/dist/components/content/keyboard-shortcut/keyboard-shortcut.styles.js.map +1 -1
  32. package/dist/components/{index-C2jQOZa6.js → index-CtsEx0-K.js} +992 -644
  33. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.d.ts.map +1 -1
  34. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.js +6 -0
  35. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.js.map +1 -1
  36. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.styles.d.ts.map +1 -1
  37. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.styles.js +11 -5
  38. package/dist/components/inputs/multi-line-text-field/multi-line-text-field.styles.js.map +1 -1
  39. package/dist/components/layout/page-sections/hero/hero.d.ts +4 -1
  40. package/dist/components/layout/page-sections/hero/hero.d.ts.map +1 -1
  41. package/dist/components/layout/page-sections/hero/hero.js +18 -3
  42. package/dist/components/layout/page-sections/hero/hero.js.map +1 -1
  43. package/dist/components/layout/page-sections/hero/hero.styles.d.ts.map +1 -1
  44. package/dist/components/layout/page-sections/hero/hero.styles.js +29 -1
  45. package/dist/components/layout/page-sections/hero/hero.styles.js.map +1 -1
  46. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.d.ts +18 -1
  47. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.d.ts.map +1 -1
  48. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.js +130 -24
  49. package/dist/components/navigation/top-navigation-bar/top-navigation-bar.js.map +1 -1
  50. package/dist/components/{prism-python-BzzeiWRd.js → prism-python-SgP2Rws4.js} +1 -1
  51. package/dist/components/{prism-rust-DzgIGUtE.js → prism-rust-CSuFXPDt.js} +1 -1
  52. package/dist/components/{prism-typescript-KyVBIohW.js → prism-typescript-DrsfPuKI.js} +1 -1
  53. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.d.ts +6 -0
  54. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.d.ts.map +1 -1
  55. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.js +9 -0
  56. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.js.map +1 -1
  57. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.styles.d.ts.map +1 -1
  58. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.styles.js +30 -1
  59. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.styles.js.map +1 -1
  60. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.template.d.ts.map +1 -1
  61. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.template.js +1 -0
  62. package/dist/components/status-and-feedback/activity-indicator/activity-indicator.template.js.map +1 -1
  63. package/package.json +3 -2
@@ -1272,7 +1272,7 @@ var __decorateClass$1u = (decorators, target, key, kind) => {
1272
1272
  if (kind && result) __defProp$1t(target, key, result);
1273
1273
  return result;
1274
1274
  };
1275
- [
1275
+ const ICONS = [
1276
1276
  ...iconRegistry.keys(),
1277
1277
  ...Object.keys(aliases)
1278
1278
  ].sort();
@@ -1324,6 +1324,14 @@ __decorateClass$1u([
1324
1324
  NLDDIcon = __decorateClass$1u([
1325
1325
  customElement("nldd-icon")
1326
1326
  ], NLDDIcon);
1327
+ const icon = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1328
+ __proto__: null,
1329
+ ICONS,
1330
+ get NLDDIcon() {
1331
+ return NLDDIcon;
1332
+ },
1333
+ aliases
1334
+ }, Symbol.toStringTag, { value: "Module" }));
1327
1335
  const activityIndicatorStyles = css`
1328
1336
 
1329
1337
 
@@ -1341,6 +1349,7 @@ const activityIndicatorStyles = css`
1341
1349
  --_max-width: var(--primitives-area-240);
1342
1350
  --_gap: var(--primitives-space-4);
1343
1351
  --_text-font: var(--primitives-font-body-sm-regular-flat);
1352
+ --_backdrop-blur: 3px;
1344
1353
 
1345
1354
  ${inheritedTextReset}
1346
1355
  box-sizing: border-box;
@@ -1358,6 +1367,12 @@ const activityIndicatorStyles = css`
1358
1367
  display: none;
1359
1368
  }
1360
1369
 
1370
+ /* The opt-in backdrop is an absolutely-positioned layer that fills the host,
1371
+ so the host has to be its containing block. */
1372
+ :host([backdrop]) {
1373
+ position: relative;
1374
+ }
1375
+
1361
1376
 
1362
1377
  /* ## Sizes (icon scale) */
1363
1378
 
@@ -1382,6 +1397,9 @@ const activityIndicatorStyles = css`
1382
1397
  circle and the label stay centred via align-items. */
1383
1398
 
1384
1399
  .activity-indicator {
1400
+ /* position:relative so it paints above the absolutely-positioned backdrop
1401
+ (both are z-index:auto; the backdrop comes first in the DOM). */
1402
+ position: relative;
1385
1403
  display: flex;
1386
1404
  flex-direction: column;
1387
1405
  width: 100%;
@@ -1395,6 +1413,24 @@ const activityIndicatorStyles = css`
1395
1413
  from { opacity: 0; }
1396
1414
  }
1397
1415
 
1416
+ /* Opt-in dimming layer (the backdrop attribute): the context parent
1417
+ background colour — fallback the base surface — at one minus the disabled
1418
+ opacity, so the content underneath reads as inactive while loading. Fades
1419
+ in with the indicator. */
1420
+ .activity-indicator__backdrop {
1421
+ position: absolute;
1422
+ inset: 0;
1423
+ /* Frosted dim: the parent surface — fallback base surface — as a
1424
+ translucent fill at one minus the disabled opacity (a translucent
1425
+ colour, not element opacity, which would hide the blur), plus a blur so
1426
+ the content behind reads as inactive. backdrop-filter degrades
1427
+ gracefully where unsupported, leaving just the translucent fill. */
1428
+ background-color: color-mix(in oklab, var(--context-parent-background-color, var(--semantics-surfaces-base-background-color)) calc((1 - var(--primitives-opacity-disabled)) * 100%), transparent);
1429
+ -webkit-backdrop-filter: blur(var(--_backdrop-blur));
1430
+ backdrop-filter: blur(var(--_backdrop-blur));
1431
+ animation: activity-indicator-fade-in var(--_fade-duration) var(--_fade-easing);
1432
+ }
1433
+
1398
1434
  /* display:contents so the default circle + label (or a slotted override)
1399
1435
  are direct flex items of the block. */
1400
1436
  slot {
@@ -1456,7 +1492,8 @@ const activityIndicatorStyles = css`
1456
1492
  /* # Accessibility */
1457
1493
 
1458
1494
  @media (prefers-reduced-motion: reduce) {
1459
- .activity-indicator {
1495
+ .activity-indicator,
1496
+ .activity-indicator__backdrop {
1460
1497
  animation: none;
1461
1498
  }
1462
1499
 
@@ -1476,6 +1513,7 @@ function activityIndicatorTemplate(component) {
1476
1513
  if (!component._visible || component.complete) return nothing;
1477
1514
  const text = component._accessibleName;
1478
1515
  return html`
1516
+ ${component.backdrop ? html`<div class="activity-indicator__backdrop" aria-hidden="true"></div>` : nothing}
1479
1517
  <div class="activity-indicator">
1480
1518
  <slot>
1481
1519
  <svg class="activity-indicator__circle"
@@ -1526,6 +1564,7 @@ let NLDDActivityIndicator = class extends LitElement {
1526
1564
  this.text = "";
1527
1565
  this.timing = "default";
1528
1566
  this.complete = false;
1567
+ this.backdrop = false;
1529
1568
  this.translations = {};
1530
1569
  this._visible = false;
1531
1570
  }
@@ -1602,6 +1641,9 @@ __decorateClass$1t([
1602
1641
  __decorateClass$1t([
1603
1642
  property({ type: Boolean, reflect: true })
1604
1643
  ], NLDDActivityIndicator.prototype, "complete", 2);
1644
+ __decorateClass$1t([
1645
+ property({ type: Boolean, reflect: true })
1646
+ ], NLDDActivityIndicator.prototype, "backdrop", 2);
1605
1647
  __decorateClass$1t([
1606
1648
  property({ type: Object })
1607
1649
  ], NLDDActivityIndicator.prototype, "translations", 2);
@@ -3005,7 +3047,9 @@ const menuStyles = css`
3005
3047
 
3006
3048
  :host {
3007
3049
  --_viewport-margin: var(--primitives-space-16);
3008
- --_width: var(--primitives-area-280);
3050
+ --_width: initial;
3051
+ --_min-width: var(--primitives-area-280);
3052
+ --_max-width: min(100vw - 2 * var(--_viewport-margin), var(--primitives-area-640));
3009
3053
  --_max-height: calc(infinity * 1px);
3010
3054
  --_max-items: 9999;
3011
3055
  --_padding: var(--primitives-space-8);
@@ -3049,7 +3093,9 @@ const menuStyles = css`
3049
3093
  border-radius: var(--semantics-overlays-corner-radius);
3050
3094
  box-shadow: var(--components-menu-box-shadow);
3051
3095
  background: var(--semantics-surfaces-base-background-color);
3052
- width: var(--_width);
3096
+ width: var(--_width, max-content);
3097
+ min-width: var(--_min-width);
3098
+ max-width: var(--_max-width);
3053
3099
  padding: var(--_padding);
3054
3100
  flex-direction: column;
3055
3101
  max-height: min(var(--_max-height), calc(var(--_max-items) * var(--_item-size) + var(--_padding) * 2));
@@ -3215,6 +3261,16 @@ const menuItemStyles = css`
3215
3261
  }
3216
3262
  }
3217
3263
 
3264
+ /* A link item (href) renders as <a>; strip the UA link color/underline so
3265
+ it is visually identical to the button variant. The text colour is owned
3266
+ by the inner nldd-text-cell. The control cursor token (default, like the
3267
+ other controls) replaces the UA link pointer and stays overridable. */
3268
+ a.menu__item {
3269
+ color: inherit;
3270
+ text-decoration: none;
3271
+ cursor: var(--semantics-controls-link-cursor);
3272
+ }
3273
+
3218
3274
  .menu__item:focus-visible {
3219
3275
  position: relative;
3220
3276
  z-index: 1;
@@ -3309,7 +3365,7 @@ const menuGroupStyles = css`
3309
3365
 
3310
3366
  /* # Title */
3311
3367
 
3312
- .menu-group__title {
3368
+ .menu__group-title {
3313
3369
  margin: 0;
3314
3370
  padding-top: 0;
3315
3371
  padding-right: var(--primitives-space-8);
@@ -3326,10 +3382,19 @@ const menuGroupStyles = css`
3326
3382
  * a11y tree exposes role + aria-labelledby reliably (display: contents
3327
3383
  * has historical a11y-tree bugs in older WebKit/Chromium). */
3328
3384
 
3329
- .menu-group__items {
3385
+ .menu__group-items {
3330
3386
  display: block;
3331
3387
  }
3332
3388
  `;
3389
+ function sanitizeUrl(url) {
3390
+ if (!url) return null;
3391
+ const trimmed = url.replace(/^[\s\u00A0\u200B\u2028\u2029]+|[\s\u00A0\u200B\u2028\u2029]+$/g, "").replace(/[\0\t\n\r]/g, "");
3392
+ const lower = trimmed.toLowerCase();
3393
+ if (lower.startsWith("javascript:") || lower.startsWith("data:") || lower.startsWith("vbscript:") || lower.startsWith("blob:")) {
3394
+ return null;
3395
+ }
3396
+ return trimmed;
3397
+ }
3333
3398
  const menuRoleMap = {
3334
3399
  menu: "menu",
3335
3400
  listbox: "listbox"
@@ -3358,7 +3423,7 @@ function menuTemplate(isEmpty, variant) {
3358
3423
  @click=${this._handleBack}
3359
3424
  @mouseenter=${this._handleBackMouseenter}
3360
3425
  >
3361
- <nldd-icon-cell class="menu__back-icon"
3426
+ <nldd-icon-cell
3362
3427
  size="20"
3363
3428
  icon="chevron-left"
3364
3429
  ></nldd-icon-cell>
@@ -3398,54 +3463,96 @@ function menuItemTemplate(variant = "menu") {
3398
3463
  const hasCheckState = this.type !== "button" && variant === "menu";
3399
3464
  const role = itemRoleMap[this.type][variant];
3400
3465
  const hasSubmenu = this._hasSubmenu;
3401
- return html`
3402
- <button class="menu__item"
3403
- type="button"
3404
- role=${role}
3405
- ?disabled=${this.disabled}
3406
- aria-checked=${hasCheckState ? String(this.selected) : nothing}
3407
- aria-selected=${variant === "listbox" ? String(this.selected) : nothing}
3408
- aria-haspopup=${hasSubmenu ? "menu" : nothing}
3409
- aria-expanded=${hasSubmenu ? String(this._submenuOpen) : nothing}
3410
- aria-controls=${hasSubmenu && this._submenuEl?.id ? this._submenuEl.id : nothing}
3411
- .popoverTargetElement=${this._submenuEl}
3412
- @click=${this._handleClick}
3413
- >
3414
- ${hasCheckState ? html`
3415
- <nldd-icon-cell class="menu__item-check"
3416
- size="24"
3417
- horizontal-alignment="center"
3418
- icon=${this.selected ? "check-mark" : nothing}
3419
- ></nldd-icon-cell>
3420
- <nldd-spacer-cell size="4"></nldd-spacer-cell>
3421
- ` : nothing}
3422
- ${this.icon ? html`
3423
- <nldd-icon-cell class="menu__item-icon"
3424
- size="20"
3425
- icon=${this.icon}
3426
- ></nldd-icon-cell>
3427
- <nldd-spacer-cell size="8"></nldd-spacer-cell>
3428
- ` : nothing}
3429
- <nldd-text-cell class="menu__item-text"
3430
- text=${this.text} query=${this.query} query-mark-mode=${this.queryMarkMode}
3466
+ const safeHref = sanitizeUrl(this.href) ?? "";
3467
+ const asLink = !!safeHref && this.type === "button" && !hasSubmenu && !this.disabled;
3468
+ const content = html`
3469
+ ${hasCheckState ? html`
3470
+ <nldd-icon-cell
3471
+ size="24"
3472
+ horizontal-alignment="center"
3473
+ icon=${this.selected ? "check-mark" : nothing}
3474
+ ></nldd-icon-cell>
3475
+ <nldd-spacer-cell size="4"></nldd-spacer-cell>
3476
+ ` : nothing}
3477
+ ${this.icon ? html`
3478
+ <nldd-icon-cell
3479
+ size="20"
3480
+ icon=${this.icon}
3481
+ ></nldd-icon-cell>
3482
+ <nldd-spacer-cell size="8"></nldd-spacer-cell>
3483
+ ` : nothing}
3484
+ <nldd-text-cell
3485
+ text=${this.text}
3486
+ query=${this.query}
3487
+ query-mark-mode=${this.queryMarkMode}
3488
+ ></nldd-text-cell>
3489
+ ${this.details ? html`
3490
+ <nldd-spacer-cell size="8"></nldd-spacer-cell>
3491
+ <nldd-text-cell
3492
+ width="fit-content"
3493
+ horizontal-alignment="right"
3494
+ color="secondary"
3495
+ text=${this.details}
3431
3496
  ></nldd-text-cell>
3432
- ${this.details ? html`
3433
- <nldd-spacer-cell size="8"></nldd-spacer-cell>
3434
- <nldd-text-cell class="menu__item-details"
3435
- width="fit-content"
3436
- horizontal-alignment="right"
3437
- color="secondary"
3438
- text=${this.details}
3439
- ></nldd-text-cell>
3440
- ` : nothing}
3441
- ${hasSubmenu ? html`
3442
- <nldd-spacer-cell size="6"></nldd-spacer-cell>
3443
- <nldd-icon-cell class="menu__item-submenu-indicator"
3444
- size="20"
3445
- icon="chevron-right"
3446
- ></nldd-icon-cell>
3447
- ` : nothing}
3448
- </button>
3497
+ ` : nothing}
3498
+ <!--
3499
+ Accessibility (intentional decision): the shortcut is deliberately NOT
3500
+ aria-hidden. It is announced as part of the item's accessible name —
3501
+ e.g. "Ongedaan maken Ctrl Z" — so screen-reader users learn the
3502
+ accelerator, the way native OS menus surface it. aria-keyshortcuts was
3503
+ considered and rejected: the menu item itself does not handle the key
3504
+ (the application's global shortcut does), so the plain announcement is
3505
+ the deliberate choice rather than a missing aria-hidden.
3506
+ -->
3507
+ ${this.shortcut || this.shortcutMac || this.shortcutWindows || this.shortcutLinux ? html`
3508
+ <nldd-spacer-cell size="8"></nldd-spacer-cell>
3509
+ <nldd-text-cell
3510
+ width="fit-content"
3511
+ size="md"
3512
+ color="secondary"
3513
+ horizontal-alignment="right"
3514
+ >
3515
+ <nldd-keyboard-shortcut
3516
+ size="inherit"
3517
+ variant="simple"
3518
+ color="inherit"
3519
+ keys=${this.shortcut || nothing}
3520
+ mac-keys=${this.shortcutMac || nothing}
3521
+ windows-keys=${this.shortcutWindows || nothing}
3522
+ linux-keys=${this.shortcutLinux || nothing}
3523
+ ></nldd-keyboard-shortcut>
3524
+ </nldd-text-cell>
3525
+ ` : nothing}
3526
+ ${hasSubmenu ? html`
3527
+ <nldd-spacer-cell size="6"></nldd-spacer-cell>
3528
+ <nldd-icon-cell
3529
+ size="20"
3530
+ icon="chevron-right"
3531
+ ></nldd-icon-cell>
3532
+ ` : nothing}
3533
+ `;
3534
+ return html`
3535
+ ${asLink ? html`
3536
+ <a class="menu__item"
3537
+ href=${safeHref}
3538
+ role=${role}
3539
+ aria-current=${this.selected ? "page" : nothing}
3540
+ @click=${this._handleClick}
3541
+ >${content}</a>
3542
+ ` : html`
3543
+ <button class="menu__item"
3544
+ type="button"
3545
+ role=${role}
3546
+ ?disabled=${this.disabled}
3547
+ aria-checked=${hasCheckState ? String(this.selected) : nothing}
3548
+ aria-selected=${variant === "listbox" ? String(this.selected) : nothing}
3549
+ aria-haspopup=${hasSubmenu ? "menu" : nothing}
3550
+ aria-expanded=${hasSubmenu ? String(this._submenuOpen) : nothing}
3551
+ aria-controls=${hasSubmenu && this._submenuEl?.id ? this._submenuEl.id : nothing}
3552
+ .popoverTargetElement=${this._submenuEl}
3553
+ @click=${this._handleClick}
3554
+ >${content}</button>
3555
+ `}
3449
3556
  <!--
3450
3557
  Project the slotted nldd-menu (the submenu, if any) into the flat
3451
3558
  tree. Without this slot, a light-DOM child nldd-menu sits outside
@@ -3466,11 +3573,11 @@ function menuDividerTemplate() {
3466
3573
  }
3467
3574
  function menuGroupTemplate(component) {
3468
3575
  return html`
3469
- <div class="menu-group__title"
3576
+ <div class="menu__group-title"
3470
3577
  id=${component._titleId}
3471
3578
  aria-hidden="true"
3472
3579
  >${component.text}</div>
3473
- <div class="menu-group__items"
3580
+ <div class="menu__group-items"
3474
3581
  role="group"
3475
3582
  aria-labelledby=${component._titleId}
3476
3583
  >
@@ -3480,7 +3587,7 @@ function menuGroupTemplate(component) {
3480
3587
  }
3481
3588
  const nlddMenuTranslations = {
3482
3589
  "components.menu.empty-text": "Geen opties beschikbaar",
3483
- "components.menu.back": "Terug",
3590
+ "components.menu.back-action": "Terug",
3484
3591
  "components.menu.submenu-title": "Submenu: {title}",
3485
3592
  "components.menu.submenu-back-action": "Terug naar {title}"
3486
3593
  };
@@ -3683,6 +3790,12 @@ __decorateClass$1o([
3683
3790
  NLDDIconCell = __decorateClass$1o([
3684
3791
  customElement("nldd-icon-cell")
3685
3792
  ], NLDDIconCell);
3793
+ const iconCell = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3794
+ __proto__: null,
3795
+ get NLDDIconCell() {
3796
+ return NLDDIconCell;
3797
+ }
3798
+ }, Symbol.toStringTag, { value: "Module" }));
3686
3799
  const spacerCellStyles = css`
3687
3800
 
3688
3801
 
@@ -4119,189 +4232,435 @@ const textCell = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProp
4119
4232
  return NLDDTextCell;
4120
4233
  }
4121
4234
  }, Symbol.toStringTag, { value: "Module" }));
4122
- const inlineDialogStyles = css`
4235
+ const keyboardShortcutStyles = css`
4123
4236
 
4124
4237
 
4125
4238
  /* # Host */
4126
4239
 
4127
4240
  :host {
4128
- --_icon-size: var(--primitives-space-40);
4129
- --_icon-color: var(--components-inline-dialog-icon-color);
4130
- --_text-font: var(--primitives-font-body-md-bold-tight);
4131
- --_supporting-text-font: var(--primitives-font-body-sm-regular-tight);
4241
+ --_size: var(--components-keyboard-shortcut-md-size);
4242
+ --_inline-padding: var(--primitives-space-4);
4243
+ --_font-family: var(--primitives-font-family-monospace);
4244
+ --_font-size: var(--primitives-font-size-80);
4245
+ --_font-weight: var(--primitives-font-weight-body-regular);
4246
+ --_line-height: var(--primitives-line-height-flat);
4247
+ --_content-color: var(--components-keyboard-shortcut-content-color);
4248
+ --_separator-color: var(--components-keyboard-shortcut-separator-color);
4249
+ --_highlight-border-color: var(--components-keyboard-shortcut-border-color);
4250
+ --_background-color: var(--components-keyboard-shortcut-background-color);
4132
4251
 
4133
4252
  ${inheritedTextReset}
4134
- display: flex;
4135
- flex-grow: 1;
4136
- align-items: center;
4137
- justify-content: center;
4138
- }
4139
-
4140
- :host([size="lg"]) {
4141
- --_icon-size: var(--primitives-space-48);
4142
- --_text-font: var(--primitives-font-body-lg-bold-tight);
4143
- --_supporting-text-font: var(--primitives-font-body-md-regular-tight);
4144
- }
4145
-
4146
- :host([variant="alert"]) {
4147
- --_icon-color: var(--components-inline-dialog-icon-warning-color);
4253
+ display: inline-flex;
4254
+ vertical-align: middle;
4148
4255
  }
4149
4256
 
4150
- :host([variant="success"]) {
4151
- --_icon-color: var(--components-inline-dialog-icon-success-color);
4257
+ :host([color="inherit"]) {
4258
+ --_content-color: currentColor;
4259
+ --_separator-color: currentColor;
4260
+ --_highlight-border-color: color-mix(in oklab, var(--semantics-content-contrast-color) 10%, transparent);
4261
+ --_background-color: color-mix(in oklab, var(--semantics-content-contrast-color) 20%, transparent);
4152
4262
  }
4153
4263
 
4154
- :host([icon-color="secondary"]) {
4155
- --_icon-color: var(--components-inline-dialog-icon-secondary-color);
4264
+ :host([size="sm"]) {
4265
+ --_size: var(--components-keyboard-shortcut-sm-size);
4266
+ --_font-size: var(--primitives-font-size-70);
4156
4267
  }
4157
4268
 
4158
- :host([icon-color="accent"]) {
4159
- --_icon-color: var(--components-inline-dialog-icon-accent-color);
4269
+ :host([size="inherit"]) {
4270
+ --_size: 1.5em;
4271
+ --_inline-padding: 0.35em;
4272
+ --_font-size: 0.75em;
4160
4273
  }
4161
4274
 
4162
- :host([icon-color="critical"]) {
4163
- --_icon-color: var(--components-inline-dialog-icon-critical-color);
4275
+ :host([variant="simple"]) {
4276
+ --_font-family: var(--primitives-font-family-body);
4277
+ --_font-size: var(--primitives-font-size-100);
4164
4278
  }
4165
4279
 
4166
- :host([icon-color="warning"]) {
4167
- --_icon-color: var(--components-inline-dialog-icon-warning-color);
4280
+ :host([variant="simple"][size="sm"]) {
4281
+ --_font-size: var(--primitives-font-size-90);
4168
4282
  }
4169
4283
 
4170
- :host([icon-color="success"]) {
4171
- --_icon-color: var(--components-inline-dialog-icon-success-color);
4284
+ :host([variant="simple"][size="inherit"]) {
4285
+ --_font-size: inherit;
4172
4286
  }
4173
4287
 
4174
4288
  :host([hidden]) {
4175
4289
  display: none;
4176
4290
  }
4177
4291
 
4292
+ @media (any-hover: none) {
4293
+ :host(:not([always-visible])) {
4294
+ display: none;
4295
+ }
4296
+ }
4178
4297
 
4179
- /* # Elements */
4180
4298
 
4181
- .inline-dialog__body {
4182
- box-sizing: border-box;
4183
- display: flex;
4184
- max-width: var(--primitives-area-480);
4185
- flex-direction: column;
4186
- flex-grow: 1;
4299
+ /* # Block */
4300
+
4301
+ .keyboard-shortcut {
4302
+ display: inline-flex;
4303
+ gap: var(--primitives-space-2);
4187
4304
  align-items: center;
4188
4305
  }
4189
4306
 
4190
- .inline-dialog__main {
4191
- display: flex;
4192
- width: 100%;
4193
- flex-direction: column;
4194
- align-items: center;
4195
- gap: var(--primitives-space-2);
4307
+ :host([size="inherit"][variant="box"]) .keyboard-shortcut {
4308
+ position: relative;
4309
+ top: -0.05em;
4196
4310
  }
4197
4311
 
4198
- .inline-dialog__icon {
4199
- display: flex;
4200
- width: var(--_icon-size);
4201
- height: var(--_icon-size);
4202
- flex-shrink: 0;
4312
+
4313
+ /* # Elements */
4314
+
4315
+ .keyboard-shortcut__key {
4316
+ box-sizing: border-box;
4317
+ display: inline-flex;
4318
+ box-shadow: inset 0 0 0 var(--components-keyboard-shortcut-border-thickness) var(--_highlight-border-color);
4319
+ border-radius: var(--components-keyboard-shortcut-corner-radius);
4320
+ background-color: var(--_background-color);
4321
+ min-width: var(--_size);
4322
+ height: var(--_size);
4323
+ padding: 0 var(--_inline-padding);
4203
4324
  align-items: center;
4204
4325
  justify-content: center;
4205
- color: var(--_icon-color);
4326
+ color: var(--_content-color);
4327
+ font-family: var(--_font-family);
4328
+ font-size: var(--_font-size);
4329
+ font-weight: var(--_font-weight);
4330
+ line-height: var(--_line-height);
4331
+ white-space: nowrap;
4206
4332
  }
4207
4333
 
4208
- .inline-dialog__text {
4209
- margin: 0;
4210
- text-align: center;
4211
- color: var(--semantics-content-color);
4212
- font: var(--_text-font);
4213
- text-wrap: pretty;
4334
+ :host([variant="simple"]) .keyboard-shortcut {
4335
+ gap: 0;
4214
4336
  }
4215
4337
 
4216
- .inline-dialog__text:focus-visible {
4217
- outline: none;
4338
+ :host([variant="simple"]) .keyboard-shortcut__key {
4218
4339
  box-shadow: none;
4340
+ background-color: transparent;
4341
+ border-radius: 0;
4342
+ min-width: 0;
4343
+ height: auto;
4344
+ padding: 0;
4219
4345
  }
4220
4346
 
4221
- .inline-dialog__supporting-text {
4222
- margin: 0;
4223
- text-align: center;
4224
- color: var(--semantics-content-color);
4225
- font: var(--_supporting-text-font);
4226
- text-wrap: pretty;
4227
- }
4228
-
4229
- .inline-dialog__content {
4230
- width: 100%;
4231
- }
4232
-
4233
- .inline-dialog__content[hidden] {
4234
- display: none;
4235
- }
4347
+ @media (forced-colors: active) {
4348
+ .keyboard-shortcut__key {
4349
+ color: CanvasText;
4350
+ }
4236
4351
 
4237
- .inline-dialog__footer {
4238
- width: 100%;
4239
- padding-top: var(--primitives-space-16);
4352
+ :host(:not([variant="simple"])) .keyboard-shortcut__key {
4353
+ border: var(--components-keyboard-shortcut-border-thickness) solid CanvasText;
4354
+ background-color: Canvas;
4355
+ }
4240
4356
  }
4241
4357
 
4242
- .inline-dialog__footer[hidden] {
4243
- display: none;
4358
+ .keyboard-shortcut__separator {
4359
+ color: var(--_separator-color);
4360
+ font-family: var(--_font-family);
4361
+ font-size: var(--_font-size);
4362
+ font-weight: var(--_font-weight);
4363
+ line-height: var(--_line-height);
4244
4364
  }
4245
4365
  `;
4246
- function inlineDialogTemplate(component) {
4366
+ function template$h(component) {
4367
+ const keys = component._parsedKeys;
4368
+ if (keys.length === 0) {
4369
+ return html`
4370
+ <kbd class="keyboard-shortcut">
4371
+ <slot></slot>
4372
+ </kbd>
4373
+ `;
4374
+ }
4247
4375
  return html`
4248
- <div class="inline-dialog__body">
4249
- <div class="inline-dialog__main">
4250
- ${component._resolvedIconName ? html`
4251
- <div class="inline-dialog__icon">
4252
- <nldd-icon name=${component._resolvedIconName}></nldd-icon>
4253
- </div>
4254
- ` : nothing}
4255
- ${component.text ? html`
4256
- ${component.headingLevel === 1 ? html`<h1 class="inline-dialog__text">${component.text}</h1>` : component.headingLevel === 2 ? html`<h2 class="inline-dialog__text">${component.text}</h2>` : component.headingLevel === 3 ? html`<h3 class="inline-dialog__text">${component.text}</h3>` : component.headingLevel === 4 ? html`<h4 class="inline-dialog__text">${component.text}</h4>` : component.headingLevel === 5 ? html`<h5 class="inline-dialog__text">${component.text}</h5>` : component.headingLevel === 6 ? html`<h6 class="inline-dialog__text">${component.text}</h6>` : html`<p class="inline-dialog__text">${component.text}</p>`}
4257
- ` : nothing}
4258
- ${component.supportingText ? html`
4259
- <p class="inline-dialog__supporting-text">${component.supportingText}</p>
4260
- ` : nothing}
4261
- <div class="inline-dialog__content"
4262
- ?hidden=${!component._hasContent}
4263
- >
4264
- <slot></slot>
4265
- </div>
4266
- </div>
4267
- <div class="inline-dialog__footer"
4268
- ?hidden=${!component._hasActions}
4269
- >
4270
- <nldd-button-group orientation="vertical">
4271
- <slot name="actions"></slot>
4272
- </nldd-button-group>
4273
- </div>
4274
- </div>
4376
+ <kbd class="keyboard-shortcut">
4377
+ ${keys.map((key, index) => html`
4378
+ ${index > 0 ? html`<span class="keyboard-shortcut__separator"
4379
+ aria-hidden="true"
4380
+ >+</span>` : ""}
4381
+ <kbd class="keyboard-shortcut__key">${key}</kbd>
4382
+ `)}
4383
+ </kbd>
4275
4384
  `;
4276
4385
  }
4277
- const buttonGroupStyles = css`
4278
-
4279
-
4280
- /* # Host */
4281
-
4282
- :host {
4283
- --_width: 100%;
4284
- --_flex-direction: column;
4285
- --_flex-wrap: nowrap;
4286
- --_gap: var(--components-button-group-md-gap);
4287
-
4288
- display: flex;
4289
- width: 100%;
4290
- justify-content: flex-start;
4291
- }
4292
-
4293
- :host([size="sm"]) {
4294
- --_gap: var(--components-button-group-sm-gap);
4295
- }
4296
-
4297
- /* ## Horizontal
4298
- The row keeps the full width (like vertical) so full-width children
4299
- can actually stretch; content-sized buttons still sit left within
4300
- the row. */
4301
-
4302
- :host([orientation="horizontal"]) {
4303
- --_flex-direction: row;
4304
- --_flex-wrap: wrap;
4386
+ let cached = null;
4387
+ function classify(platform) {
4388
+ const p = platform.toLowerCase();
4389
+ if (/mac|iphone|ipad|ipod|ios/.test(p)) return "mac";
4390
+ if (/win/.test(p)) return "windows";
4391
+ if (/android/.test(p)) return "other";
4392
+ if (/linux|cros/.test(p)) return "linux";
4393
+ return "other";
4394
+ }
4395
+ function detectOS() {
4396
+ if (cached !== null) return cached;
4397
+ if (typeof navigator === "undefined") {
4398
+ cached = "other";
4399
+ return cached;
4400
+ }
4401
+ const nav = navigator;
4402
+ const platform = nav.userAgentData?.platform || nav.platform || "";
4403
+ cached = classify(platform);
4404
+ return cached;
4405
+ }
4406
+ var __defProp$1k = Object.defineProperty;
4407
+ var __getOwnPropDesc$1i = Object.getOwnPropertyDescriptor;
4408
+ var __decorateClass$1l = (decorators, target, key, kind) => {
4409
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1i(target, key) : target;
4410
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
4411
+ if (decorator = decorators[i])
4412
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
4413
+ if (kind && result) __defProp$1k(target, key, result);
4414
+ return result;
4415
+ };
4416
+ let NLDDKeyboardShortcut = class extends LitElement {
4417
+ constructor() {
4418
+ super(...arguments);
4419
+ this.keys = "";
4420
+ this.macKeys = "";
4421
+ this.windowsKeys = "";
4422
+ this.linuxKeys = "";
4423
+ this.size = "md";
4424
+ this.variant = "box";
4425
+ this.color = "neutral";
4426
+ this.alwaysVisible = false;
4427
+ this.debugOS = "";
4428
+ }
4429
+ /** @internal Resolved OS — the debug override when set, else detection. */
4430
+ get _resolvedOS() {
4431
+ return this.debugOS || detectOS();
4432
+ }
4433
+ get _resolvedKeys() {
4434
+ const os = this._resolvedOS;
4435
+ if (os === "mac" && this.macKeys) return this.macKeys;
4436
+ if (os === "windows" && this.windowsKeys) return this.windowsKeys;
4437
+ if (os === "linux" && this.linuxKeys) return this.linuxKeys;
4438
+ return this.keys;
4439
+ }
4440
+ get _parsedKeys() {
4441
+ const spec = this._resolvedKeys;
4442
+ if (!spec) return [];
4443
+ const MARKER = "\0";
4444
+ return spec.replace(/\+\+\+/g, `+${MARKER}+`).split("+").map((k) => k.trim().replace(new RegExp(MARKER, "g"), "+")).filter(Boolean);
4445
+ }
4446
+ render() {
4447
+ return template$h(this);
4448
+ }
4449
+ };
4450
+ NLDDKeyboardShortcut.styles = keyboardShortcutStyles;
4451
+ __decorateClass$1l([
4452
+ property({ type: String })
4453
+ ], NLDDKeyboardShortcut.prototype, "keys", 2);
4454
+ __decorateClass$1l([
4455
+ property({ type: String, attribute: "mac-keys" })
4456
+ ], NLDDKeyboardShortcut.prototype, "macKeys", 2);
4457
+ __decorateClass$1l([
4458
+ property({ type: String, attribute: "windows-keys" })
4459
+ ], NLDDKeyboardShortcut.prototype, "windowsKeys", 2);
4460
+ __decorateClass$1l([
4461
+ property({ type: String, attribute: "linux-keys" })
4462
+ ], NLDDKeyboardShortcut.prototype, "linuxKeys", 2);
4463
+ __decorateClass$1l([
4464
+ property({ type: String, reflect: true })
4465
+ ], NLDDKeyboardShortcut.prototype, "size", 2);
4466
+ __decorateClass$1l([
4467
+ property({ type: String, reflect: true })
4468
+ ], NLDDKeyboardShortcut.prototype, "variant", 2);
4469
+ __decorateClass$1l([
4470
+ property({ type: String, reflect: true })
4471
+ ], NLDDKeyboardShortcut.prototype, "color", 2);
4472
+ __decorateClass$1l([
4473
+ property({ type: Boolean, reflect: true, attribute: "always-visible" })
4474
+ ], NLDDKeyboardShortcut.prototype, "alwaysVisible", 2);
4475
+ __decorateClass$1l([
4476
+ property({ type: String, attribute: "debug-os" })
4477
+ ], NLDDKeyboardShortcut.prototype, "debugOS", 2);
4478
+ NLDDKeyboardShortcut = __decorateClass$1l([
4479
+ customElement("nldd-keyboard-shortcut")
4480
+ ], NLDDKeyboardShortcut);
4481
+ const inlineDialogStyles = css`
4482
+
4483
+
4484
+ /* # Host */
4485
+
4486
+ :host {
4487
+ --_icon-size: var(--primitives-space-40);
4488
+ --_icon-color: var(--components-inline-dialog-icon-color);
4489
+ --_text-font: var(--primitives-font-body-md-bold-tight);
4490
+ --_supporting-text-font: var(--primitives-font-body-sm-regular-tight);
4491
+
4492
+ ${inheritedTextReset}
4493
+ display: flex;
4494
+ flex-grow: 1;
4495
+ align-items: center;
4496
+ justify-content: center;
4497
+ }
4498
+
4499
+ :host([size="lg"]) {
4500
+ --_icon-size: var(--primitives-space-48);
4501
+ --_text-font: var(--primitives-font-body-lg-bold-tight);
4502
+ --_supporting-text-font: var(--primitives-font-body-md-regular-tight);
4503
+ }
4504
+
4505
+ :host([variant="alert"]) {
4506
+ --_icon-color: var(--components-inline-dialog-icon-warning-color);
4507
+ }
4508
+
4509
+ :host([variant="success"]) {
4510
+ --_icon-color: var(--components-inline-dialog-icon-success-color);
4511
+ }
4512
+
4513
+ :host([icon-color="secondary"]) {
4514
+ --_icon-color: var(--components-inline-dialog-icon-secondary-color);
4515
+ }
4516
+
4517
+ :host([icon-color="accent"]) {
4518
+ --_icon-color: var(--components-inline-dialog-icon-accent-color);
4519
+ }
4520
+
4521
+ :host([icon-color="critical"]) {
4522
+ --_icon-color: var(--components-inline-dialog-icon-critical-color);
4523
+ }
4524
+
4525
+ :host([icon-color="warning"]) {
4526
+ --_icon-color: var(--components-inline-dialog-icon-warning-color);
4527
+ }
4528
+
4529
+ :host([icon-color="success"]) {
4530
+ --_icon-color: var(--components-inline-dialog-icon-success-color);
4531
+ }
4532
+
4533
+ :host([hidden]) {
4534
+ display: none;
4535
+ }
4536
+
4537
+
4538
+ /* # Elements */
4539
+
4540
+ .inline-dialog__body {
4541
+ box-sizing: border-box;
4542
+ display: flex;
4543
+ max-width: var(--primitives-area-480);
4544
+ flex-direction: column;
4545
+ flex-grow: 1;
4546
+ align-items: center;
4547
+ }
4548
+
4549
+ .inline-dialog__main {
4550
+ display: flex;
4551
+ width: 100%;
4552
+ flex-direction: column;
4553
+ align-items: center;
4554
+ gap: var(--primitives-space-2);
4555
+ }
4556
+
4557
+ .inline-dialog__icon {
4558
+ display: flex;
4559
+ width: var(--_icon-size);
4560
+ height: var(--_icon-size);
4561
+ flex-shrink: 0;
4562
+ align-items: center;
4563
+ justify-content: center;
4564
+ color: var(--_icon-color);
4565
+ }
4566
+
4567
+ .inline-dialog__text {
4568
+ margin: 0;
4569
+ text-align: center;
4570
+ color: var(--semantics-content-color);
4571
+ font: var(--_text-font);
4572
+ text-wrap: pretty;
4573
+ }
4574
+
4575
+ .inline-dialog__text:focus-visible {
4576
+ outline: none;
4577
+ box-shadow: none;
4578
+ }
4579
+
4580
+ .inline-dialog__supporting-text {
4581
+ margin: 0;
4582
+ text-align: center;
4583
+ color: var(--semantics-content-color);
4584
+ font: var(--_supporting-text-font);
4585
+ text-wrap: pretty;
4586
+ }
4587
+
4588
+ .inline-dialog__content {
4589
+ width: 100%;
4590
+ }
4591
+
4592
+ .inline-dialog__content[hidden] {
4593
+ display: none;
4594
+ }
4595
+
4596
+ .inline-dialog__footer {
4597
+ width: 100%;
4598
+ padding-top: var(--primitives-space-16);
4599
+ }
4600
+
4601
+ .inline-dialog__footer[hidden] {
4602
+ display: none;
4603
+ }
4604
+ `;
4605
+ function inlineDialogTemplate(component) {
4606
+ return html`
4607
+ <div class="inline-dialog__body">
4608
+ <div class="inline-dialog__main">
4609
+ ${component._resolvedIconName ? html`
4610
+ <div class="inline-dialog__icon">
4611
+ <nldd-icon name=${component._resolvedIconName}></nldd-icon>
4612
+ </div>
4613
+ ` : nothing}
4614
+ ${component.text ? html`
4615
+ ${component.headingLevel === 1 ? html`<h1 class="inline-dialog__text">${component.text}</h1>` : component.headingLevel === 2 ? html`<h2 class="inline-dialog__text">${component.text}</h2>` : component.headingLevel === 3 ? html`<h3 class="inline-dialog__text">${component.text}</h3>` : component.headingLevel === 4 ? html`<h4 class="inline-dialog__text">${component.text}</h4>` : component.headingLevel === 5 ? html`<h5 class="inline-dialog__text">${component.text}</h5>` : component.headingLevel === 6 ? html`<h6 class="inline-dialog__text">${component.text}</h6>` : html`<p class="inline-dialog__text">${component.text}</p>`}
4616
+ ` : nothing}
4617
+ ${component.supportingText ? html`
4618
+ <p class="inline-dialog__supporting-text">${component.supportingText}</p>
4619
+ ` : nothing}
4620
+ <div class="inline-dialog__content"
4621
+ ?hidden=${!component._hasContent}
4622
+ >
4623
+ <slot></slot>
4624
+ </div>
4625
+ </div>
4626
+ <div class="inline-dialog__footer"
4627
+ ?hidden=${!component._hasActions}
4628
+ >
4629
+ <nldd-button-group orientation="vertical">
4630
+ <slot name="actions"></slot>
4631
+ </nldd-button-group>
4632
+ </div>
4633
+ </div>
4634
+ `;
4635
+ }
4636
+ const buttonGroupStyles = css`
4637
+
4638
+
4639
+ /* # Host */
4640
+
4641
+ :host {
4642
+ --_width: 100%;
4643
+ --_flex-direction: column;
4644
+ --_flex-wrap: nowrap;
4645
+ --_gap: var(--components-button-group-md-gap);
4646
+
4647
+ display: flex;
4648
+ width: 100%;
4649
+ justify-content: flex-start;
4650
+ }
4651
+
4652
+ :host([size="sm"]) {
4653
+ --_gap: var(--components-button-group-sm-gap);
4654
+ }
4655
+
4656
+ /* ## Horizontal
4657
+ The row keeps the full width (like vertical) so full-width children
4658
+ can actually stretch; content-sized buttons still sit left within
4659
+ the row. */
4660
+
4661
+ :host([orientation="horizontal"]) {
4662
+ --_flex-direction: row;
4663
+ --_flex-wrap: wrap;
4305
4664
  }
4306
4665
 
4307
4666
  :host([hidden]) {
@@ -4323,21 +4682,21 @@ const buttonGroupStyles = css`
4323
4682
  gap: var(--_gap);
4324
4683
  }
4325
4684
  `;
4326
- function template$h() {
4685
+ function template$g() {
4327
4686
  return html`
4328
4687
  <div class="button-group">
4329
4688
  <slot @slotchange=${this.handleSlotChange}></slot>
4330
4689
  </div>
4331
4690
  `;
4332
4691
  }
4333
- var __defProp$1k = Object.defineProperty;
4334
- var __getOwnPropDesc$1i = Object.getOwnPropertyDescriptor;
4335
- var __decorateClass$1l = (decorators, target, key, kind) => {
4336
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1i(target, key) : target;
4692
+ var __defProp$1j = Object.defineProperty;
4693
+ var __getOwnPropDesc$1h = Object.getOwnPropertyDescriptor;
4694
+ var __decorateClass$1k = (decorators, target, key, kind) => {
4695
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1h(target, key) : target;
4337
4696
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
4338
4697
  if (decorator = decorators[i])
4339
4698
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
4340
- if (kind && result) __defProp$1k(target, key, result);
4699
+ if (kind && result) __defProp$1j(target, key, result);
4341
4700
  return result;
4342
4701
  };
4343
4702
  let NLDDButtonGroup = class extends LitElement {
@@ -4366,30 +4725,30 @@ let NLDDButtonGroup = class extends LitElement {
4366
4725
  }
4367
4726
  }
4368
4727
  render() {
4369
- return template$h.call(this);
4728
+ return template$g.call(this);
4370
4729
  }
4371
4730
  };
4372
4731
  NLDDButtonGroup.styles = buttonGroupStyles;
4373
- __decorateClass$1l([
4732
+ __decorateClass$1k([
4374
4733
  property({ type: String, reflect: true })
4375
4734
  ], NLDDButtonGroup.prototype, "size", 2);
4376
- __decorateClass$1l([
4735
+ __decorateClass$1k([
4377
4736
  property({ type: String, reflect: true })
4378
4737
  ], NLDDButtonGroup.prototype, "orientation", 2);
4379
- __decorateClass$1l([
4738
+ __decorateClass$1k([
4380
4739
  query("slot")
4381
4740
  ], NLDDButtonGroup.prototype, "_slot", 2);
4382
- NLDDButtonGroup = __decorateClass$1l([
4741
+ NLDDButtonGroup = __decorateClass$1k([
4383
4742
  customElement("nldd-button-group")
4384
4743
  ], NLDDButtonGroup);
4385
- var __defProp$1j = Object.defineProperty;
4386
- var __getOwnPropDesc$1h = Object.getOwnPropertyDescriptor;
4387
- var __decorateClass$1k = (decorators, target, key, kind) => {
4388
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1h(target, key) : target;
4744
+ var __defProp$1i = Object.defineProperty;
4745
+ var __getOwnPropDesc$1g = Object.getOwnPropertyDescriptor;
4746
+ var __decorateClass$1j = (decorators, target, key, kind) => {
4747
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1g(target, key) : target;
4389
4748
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
4390
4749
  if (decorator = decorators[i])
4391
4750
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
4392
- if (kind && result) __defProp$1j(target, key, result);
4751
+ if (kind && result) __defProp$1i(target, key, result);
4393
4752
  return result;
4394
4753
  };
4395
4754
  let NLDDInlineDialog = class extends LitElement {
@@ -4436,43 +4795,43 @@ let NLDDInlineDialog = class extends LitElement {
4436
4795
  }
4437
4796
  };
4438
4797
  NLDDInlineDialog.styles = inlineDialogStyles;
4439
- __decorateClass$1k([
4798
+ __decorateClass$1j([
4440
4799
  property({ type: String, reflect: true })
4441
4800
  ], NLDDInlineDialog.prototype, "variant", 2);
4442
- __decorateClass$1k([
4801
+ __decorateClass$1j([
4443
4802
  property({ type: String, reflect: true })
4444
4803
  ], NLDDInlineDialog.prototype, "size", 2);
4445
- __decorateClass$1k([
4804
+ __decorateClass$1j([
4446
4805
  property({ type: String, reflect: true })
4447
4806
  ], NLDDInlineDialog.prototype, "icon", 2);
4448
- __decorateClass$1k([
4807
+ __decorateClass$1j([
4449
4808
  property({ type: String, reflect: true, attribute: "icon-color" })
4450
4809
  ], NLDDInlineDialog.prototype, "iconColor", 2);
4451
- __decorateClass$1k([
4810
+ __decorateClass$1j([
4452
4811
  property({ type: String, reflect: true })
4453
4812
  ], NLDDInlineDialog.prototype, "text", 2);
4454
- __decorateClass$1k([
4813
+ __decorateClass$1j([
4455
4814
  property({ type: String, reflect: true, attribute: "supporting-text" })
4456
4815
  ], NLDDInlineDialog.prototype, "supportingText", 2);
4457
- __decorateClass$1k([
4816
+ __decorateClass$1j([
4458
4817
  property({ type: Number, reflect: true, attribute: "heading-level" })
4459
4818
  ], NLDDInlineDialog.prototype, "headingLevel", 2);
4460
- __decorateClass$1k([
4819
+ __decorateClass$1j([
4461
4820
  state()
4462
4821
  ], NLDDInlineDialog.prototype, "_hasContent", 2);
4463
- __decorateClass$1k([
4822
+ __decorateClass$1j([
4464
4823
  state()
4465
4824
  ], NLDDInlineDialog.prototype, "_hasActions", 2);
4466
- NLDDInlineDialog = __decorateClass$1k([
4825
+ NLDDInlineDialog = __decorateClass$1j([
4467
4826
  customElement("nldd-inline-dialog")
4468
4827
  ], NLDDInlineDialog);
4469
- var __defProp$1i = Object.defineProperty;
4470
- var __decorateClass$1j = (decorators, target, key, kind) => {
4828
+ var __defProp$1h = Object.defineProperty;
4829
+ var __decorateClass$1i = (decorators, target, key, kind) => {
4471
4830
  var result = void 0;
4472
4831
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
4473
4832
  if (decorator = decorators[i])
4474
4833
  result = decorator(target, key, result) || result;
4475
- if (result) __defProp$1i(target, key, result);
4834
+ if (result) __defProp$1h(target, key, result);
4476
4835
  return result;
4477
4836
  };
4478
4837
  const _NLDDMenuDivider = class _NLDDMenuDivider extends LitElement {
@@ -4495,7 +4854,7 @@ const _NLDDMenuGroup = (_a = class extends LitElement {
4495
4854
  return menuGroupTemplate(this);
4496
4855
  }
4497
4856
  }, _a.styles = menuGroupStyles, _a._idCounter = 0, _a);
4498
- __decorateClass$1j([
4857
+ __decorateClass$1i([
4499
4858
  property({ type: String, reflect: true })
4500
4859
  ], _NLDDMenuGroup.prototype, "text");
4501
4860
  let NLDDMenuGroup = _NLDDMenuGroup;
@@ -4507,8 +4866,13 @@ const _NLDDMenuItem = (_b = class extends LitElement {
4507
4866
  super(...arguments);
4508
4867
  this.text = "";
4509
4868
  this.value = "";
4869
+ this.href = "";
4510
4870
  this.aliases = "";
4511
4871
  this.details = "";
4872
+ this.shortcut = "";
4873
+ this.shortcutMac = "";
4874
+ this.shortcutWindows = "";
4875
+ this.shortcutLinux = "";
4512
4876
  this.icon = "";
4513
4877
  this.type = "button";
4514
4878
  this.selected = false;
@@ -4597,43 +4961,58 @@ const _NLDDMenuItem = (_b = class extends LitElement {
4597
4961
  return menuItemTemplate.call(this, this.menuVariant);
4598
4962
  }
4599
4963
  }, _b.styles = menuItemStyles, _b._idCounter = 0, _b);
4600
- __decorateClass$1j([
4964
+ __decorateClass$1i([
4601
4965
  property({ type: String, reflect: true })
4602
4966
  ], _NLDDMenuItem.prototype, "text");
4603
- __decorateClass$1j([
4967
+ __decorateClass$1i([
4604
4968
  property({ type: String, reflect: true })
4605
4969
  ], _NLDDMenuItem.prototype, "value");
4606
- __decorateClass$1j([
4970
+ __decorateClass$1i([
4971
+ property({ type: String, reflect: true })
4972
+ ], _NLDDMenuItem.prototype, "href");
4973
+ __decorateClass$1i([
4607
4974
  property({ type: String, reflect: true })
4608
4975
  ], _NLDDMenuItem.prototype, "aliases");
4609
- __decorateClass$1j([
4976
+ __decorateClass$1i([
4610
4977
  property({ type: String, reflect: true })
4611
4978
  ], _NLDDMenuItem.prototype, "details");
4612
- __decorateClass$1j([
4979
+ __decorateClass$1i([
4980
+ property({ type: String, reflect: true })
4981
+ ], _NLDDMenuItem.prototype, "shortcut");
4982
+ __decorateClass$1i([
4983
+ property({ type: String, reflect: true, attribute: "shortcut-mac" })
4984
+ ], _NLDDMenuItem.prototype, "shortcutMac");
4985
+ __decorateClass$1i([
4986
+ property({ type: String, reflect: true, attribute: "shortcut-windows" })
4987
+ ], _NLDDMenuItem.prototype, "shortcutWindows");
4988
+ __decorateClass$1i([
4989
+ property({ type: String, reflect: true, attribute: "shortcut-linux" })
4990
+ ], _NLDDMenuItem.prototype, "shortcutLinux");
4991
+ __decorateClass$1i([
4613
4992
  property({ type: String, reflect: true })
4614
4993
  ], _NLDDMenuItem.prototype, "icon");
4615
- __decorateClass$1j([
4994
+ __decorateClass$1i([
4616
4995
  property({ type: String, reflect: true })
4617
4996
  ], _NLDDMenuItem.prototype, "type");
4618
- __decorateClass$1j([
4997
+ __decorateClass$1i([
4619
4998
  property({ type: Boolean, reflect: true })
4620
4999
  ], _NLDDMenuItem.prototype, "selected");
4621
- __decorateClass$1j([
5000
+ __decorateClass$1i([
4622
5001
  property({ type: Boolean, reflect: true })
4623
5002
  ], _NLDDMenuItem.prototype, "destructive");
4624
- __decorateClass$1j([
5003
+ __decorateClass$1i([
4625
5004
  property({ type: Boolean, reflect: true })
4626
5005
  ], _NLDDMenuItem.prototype, "disabled");
4627
- __decorateClass$1j([
5006
+ __decorateClass$1i([
4628
5007
  property({ type: String, reflect: true })
4629
5008
  ], _NLDDMenuItem.prototype, "query");
4630
- __decorateClass$1j([
5009
+ __decorateClass$1i([
4631
5010
  property({ type: String, reflect: true, attribute: "query-mark-mode" })
4632
5011
  ], _NLDDMenuItem.prototype, "queryMarkMode");
4633
- __decorateClass$1j([
5012
+ __decorateClass$1i([
4634
5013
  state()
4635
5014
  ], _NLDDMenuItem.prototype, "menuVariant");
4636
- __decorateClass$1j([
5015
+ __decorateClass$1i([
4637
5016
  state()
4638
5017
  ], _NLDDMenuItem.prototype, "_submenuOpen");
4639
5018
  let NLDDMenuItem = _NLDDMenuItem;
@@ -4771,7 +5150,7 @@ const _NLDDMenu = (_c = class extends LitElement {
4771
5150
  if (!skipReshow && this.isConnected) {
4772
5151
  const dest = this._parentItem?.text;
4773
5152
  this._announce(
4774
- dest ? this._t("components.menu.submenu-back-action", { title: dest }) : this._t("components.menu.back")
5153
+ dest ? this._t("components.menu.submenu-back-action", { title: dest }) : this._t("components.menu.back-action")
4775
5154
  );
4776
5155
  }
4777
5156
  }
@@ -5062,7 +5441,7 @@ const _NLDDMenu = (_c = class extends LitElement {
5062
5441
  * Bestand" instead of an ambiguous "Bestand, button". Only used when
5063
5442
  * this menu is itself a submenu in drill-in mode. */
5064
5443
  get _resolvedBackLabel() {
5065
- const back = this._t("components.menu.back");
5444
+ const back = this._t("components.menu.back-action");
5066
5445
  const parent = this._parentItem?.text ?? "";
5067
5446
  return parent ? `${back}: ${parent}` : back;
5068
5447
  }
@@ -5099,8 +5478,12 @@ const _NLDDMenu = (_c = class extends LitElement {
5099
5478
  if (changedProperties.has("width")) {
5100
5479
  if (this.width) {
5101
5480
  this.style.setProperty("--_width", this.width);
5481
+ this.style.setProperty("--_min-width", this.width);
5482
+ this.style.setProperty("--_max-width", this.width);
5102
5483
  } else {
5103
5484
  this.style.removeProperty("--_width");
5485
+ this.style.removeProperty("--_min-width");
5486
+ this.style.removeProperty("--_max-width");
5104
5487
  }
5105
5488
  }
5106
5489
  if (changedProperties.has("maxItems")) {
@@ -5730,57 +6113,57 @@ const _NLDDMenu = (_c = class extends LitElement {
5730
6113
  return menuTemplate.call(this, this._isEmpty, this.variant);
5731
6114
  }
5732
6115
  }, _c.styles = menuStyles, _c._SAFE_TRIANGLE_STALL_DISMISS_MS = 500, _c._SAFE_TRIANGLE_APEX_X_OFFSET = 4, _c._drillInModeQuery = null, _c._TOUCH_SCROLL_THRESHOLD_PX = 8, _c._menuIdCounter = 0, _c._TYPEAHEAD_RESET_MS = 500, _c);
5733
- __decorateClass$1j([
6116
+ __decorateClass$1i([
5734
6117
  property({ type: String, reflect: true })
5735
6118
  ], _NLDDMenu.prototype, "anchor");
5736
- __decorateClass$1j([
6119
+ __decorateClass$1i([
5737
6120
  property({ attribute: false })
5738
6121
  ], _NLDDMenu.prototype, "anchorElement");
5739
- __decorateClass$1j([
6122
+ __decorateClass$1i([
5740
6123
  property({ type: String, reflect: true })
5741
6124
  ], _NLDDMenu.prototype, "placement");
5742
- __decorateClass$1j([
6125
+ __decorateClass$1i([
5743
6126
  property({ type: String, reflect: true })
5744
6127
  ], _NLDDMenu.prototype, "variant");
5745
- __decorateClass$1j([
6128
+ __decorateClass$1i([
5746
6129
  property({ type: String, attribute: "empty-text" })
5747
6130
  ], _NLDDMenu.prototype, "emptyText");
5748
- __decorateClass$1j([
6131
+ __decorateClass$1i([
5749
6132
  property({ type: String, attribute: "empty-supporting-text" })
5750
6133
  ], _NLDDMenu.prototype, "emptySupportingText");
5751
- __decorateClass$1j([
6134
+ __decorateClass$1i([
5752
6135
  property({ type: String, reflect: true })
5753
6136
  ], _NLDDMenu.prototype, "width");
5754
- __decorateClass$1j([
6137
+ __decorateClass$1i([
5755
6138
  property({ type: Number, attribute: "max-items" })
5756
6139
  ], _NLDDMenu.prototype, "maxItems");
5757
- __decorateClass$1j([
6140
+ __decorateClass$1i([
5758
6141
  property({ type: Object })
5759
6142
  ], _NLDDMenu.prototype, "translations");
5760
- __decorateClass$1j([
6143
+ __decorateClass$1i([
5761
6144
  property({ type: Boolean, reflect: true, attribute: "debug-safe-triangle" })
5762
6145
  ], _NLDDMenu.prototype, "debugSafeTriangle");
5763
- __decorateClass$1j([
6146
+ __decorateClass$1i([
5764
6147
  property({ attribute: false })
5765
6148
  ], _NLDDMenu.prototype, "filterFn");
5766
- __decorateClass$1j([
6149
+ __decorateClass$1i([
5767
6150
  state()
5768
6151
  ], _NLDDMenu.prototype, "_isEmpty");
5769
- __decorateClass$1j([
6152
+ __decorateClass$1i([
5770
6153
  state()
5771
6154
  ], _NLDDMenu.prototype, "_parentItem");
5772
6155
  let NLDDMenu = _NLDDMenu;
5773
6156
  if (!customElements.get("nldd-menu")) {
5774
6157
  customElements.define("nldd-menu", NLDDMenu);
5775
6158
  }
5776
- var __defProp$1h = Object.defineProperty;
5777
- var __getOwnPropDesc$1g = Object.getOwnPropertyDescriptor;
5778
- var __decorateClass$1i = (decorators, target, key, kind) => {
5779
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1g(target, key) : target;
6159
+ var __defProp$1g = Object.defineProperty;
6160
+ var __getOwnPropDesc$1f = Object.getOwnPropertyDescriptor;
6161
+ var __decorateClass$1h = (decorators, target, key, kind) => {
6162
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1f(target, key) : target;
5780
6163
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
5781
6164
  if (decorator = decorators[i])
5782
6165
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
5783
- if (kind && result) __defProp$1h(target, key, result);
6166
+ if (kind && result) __defProp$1g(target, key, result);
5784
6167
  return result;
5785
6168
  };
5786
6169
  let NLDDSplitButton = class extends LitElement {
@@ -5872,34 +6255,34 @@ let NLDDSplitButton = class extends LitElement {
5872
6255
  }
5873
6256
  };
5874
6257
  NLDDSplitButton.styles = splitButtonStyles;
5875
- __decorateClass$1i([
6258
+ __decorateClass$1h([
5876
6259
  property({ type: String, reflect: true })
5877
6260
  ], NLDDSplitButton.prototype, "size", 2);
5878
- __decorateClass$1i([
6261
+ __decorateClass$1h([
5879
6262
  property({ type: String, reflect: true })
5880
6263
  ], NLDDSplitButton.prototype, "variant", 2);
5881
- __decorateClass$1i([
6264
+ __decorateClass$1h([
5882
6265
  property({ type: Boolean, reflect: true })
5883
6266
  ], NLDDSplitButton.prototype, "disabled", 2);
5884
- __decorateClass$1i([
6267
+ __decorateClass$1h([
5885
6268
  property({ type: String, reflect: true })
5886
6269
  ], NLDDSplitButton.prototype, "width", 2);
5887
- __decorateClass$1i([
6270
+ __decorateClass$1h([
5888
6271
  property({ type: String })
5889
6272
  ], NLDDSplitButton.prototype, "text", 2);
5890
- __decorateClass$1i([
6273
+ __decorateClass$1h([
5891
6274
  property({ type: String })
5892
6275
  ], NLDDSplitButton.prototype, "icon", 2);
5893
- __decorateClass$1i([
6276
+ __decorateClass$1h([
5894
6277
  property({ type: Object })
5895
6278
  ], NLDDSplitButton.prototype, "translations", 2);
5896
- __decorateClass$1i([
6279
+ __decorateClass$1h([
5897
6280
  query(".split-button__popup-button")
5898
6281
  ], NLDDSplitButton.prototype, "_popupButtonWrapper", 2);
5899
- __decorateClass$1i([
6282
+ __decorateClass$1h([
5900
6283
  state()
5901
6284
  ], NLDDSplitButton.prototype, "_menuIsOpen", 2);
5902
- NLDDSplitButton = __decorateClass$1i([
6285
+ NLDDSplitButton = __decorateClass$1h([
5903
6286
  customElement("nldd-split-button")
5904
6287
  ], NLDDSplitButton);
5905
6288
  const buttonBarStyles = css`
@@ -6011,7 +6394,7 @@ const buttonBarStyles = css`
6011
6394
  z-index: 1;
6012
6395
  }
6013
6396
  `;
6014
- function template$g() {
6397
+ function template$f() {
6015
6398
  return html`
6016
6399
  <div class="button-bar"
6017
6400
  part="bar"
@@ -6031,14 +6414,14 @@ function renderChild(child) {
6031
6414
  }
6032
6415
  return html`<slot name="child-${child.id}"></slot>`;
6033
6416
  }
6034
- var __defProp$1g = Object.defineProperty;
6035
- var __getOwnPropDesc$1f = Object.getOwnPropertyDescriptor;
6036
- var __decorateClass$1h = (decorators, target, key, kind) => {
6037
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1f(target, key) : target;
6417
+ var __defProp$1f = Object.defineProperty;
6418
+ var __getOwnPropDesc$1e = Object.getOwnPropertyDescriptor;
6419
+ var __decorateClass$1g = (decorators, target, key, kind) => {
6420
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1e(target, key) : target;
6038
6421
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
6039
6422
  if (decorator = decorators[i])
6040
6423
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
6041
- if (kind && result) __defProp$1g(target, key, result);
6424
+ if (kind && result) __defProp$1f(target, key, result);
6042
6425
  return result;
6043
6426
  };
6044
6427
  if (!customElements.get("nldd-button-bar-divider")) {
@@ -6148,23 +6531,23 @@ let NLDDButtonBar = class extends LitElement {
6148
6531
  this._building = false;
6149
6532
  }
6150
6533
  render() {
6151
- return template$g.call(this);
6534
+ return template$f.call(this);
6152
6535
  }
6153
6536
  };
6154
6537
  NLDDButtonBar.styles = buttonBarStyles;
6155
- __decorateClass$1h([
6538
+ __decorateClass$1g([
6156
6539
  property({ type: String, reflect: true })
6157
6540
  ], NLDDButtonBar.prototype, "size", 2);
6158
- __decorateClass$1h([
6541
+ __decorateClass$1g([
6159
6542
  property({ type: String, reflect: true })
6160
6543
  ], NLDDButtonBar.prototype, "variant", 2);
6161
- __decorateClass$1h([
6544
+ __decorateClass$1g([
6162
6545
  property({ type: Boolean, reflect: true })
6163
6546
  ], NLDDButtonBar.prototype, "disabled", 2);
6164
- __decorateClass$1h([
6547
+ __decorateClass$1g([
6165
6548
  state()
6166
6549
  ], NLDDButtonBar.prototype, "_children", 2);
6167
- NLDDButtonBar = __decorateClass$1h([
6550
+ NLDDButtonBar = __decorateClass$1g([
6168
6551
  customElement("nldd-button-bar")
6169
6552
  ], NLDDButtonBar);
6170
6553
  const toolbarStyles = css`
@@ -6481,7 +6864,7 @@ function toolbarTitleTemplate(component) {
6481
6864
  ${component.supportingText ? html`<p class="toolbar__subtitle">${component.supportingText}</p>` : nothing}
6482
6865
  `;
6483
6866
  }
6484
- function template$f(component, hasCenterChildren, leftSpacerZero, rightSpacerZero, isSoloFluidItem, hasOverflow, menuOpen, label, centerOnly, t) {
6867
+ function template$e(component, hasCenterChildren, leftSpacerZero, rightSpacerZero, isSoloFluidItem, hasOverflow, menuOpen, label, centerOnly, t) {
6485
6868
  return html`
6486
6869
  <div class="toolbar"
6487
6870
  role="toolbar"
@@ -6520,14 +6903,14 @@ function template$f(component, hasCenterChildren, leftSpacerZero, rightSpacerZer
6520
6903
  const nlddToolbarTranslations = {
6521
6904
  "components.toolbar.overflow-action": "Meer"
6522
6905
  };
6523
- var __defProp$1f = Object.defineProperty;
6524
- var __getOwnPropDesc$1e = Object.getOwnPropertyDescriptor;
6525
- var __decorateClass$1g = (decorators, target, key, kind) => {
6526
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1e(target, key) : target;
6906
+ var __defProp$1e = Object.defineProperty;
6907
+ var __getOwnPropDesc$1d = Object.getOwnPropertyDescriptor;
6908
+ var __decorateClass$1f = (decorators, target, key, kind) => {
6909
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1d(target, key) : target;
6527
6910
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
6528
6911
  if (decorator = decorators[i])
6529
6912
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
6530
- if (kind && result) __defProp$1f(target, key, result);
6913
+ if (kind && result) __defProp$1e(target, key, result);
6531
6914
  return result;
6532
6915
  };
6533
6916
  let NLDDToolbarItem = class extends LitElement {
@@ -6551,28 +6934,28 @@ let NLDDToolbarItem = class extends LitElement {
6551
6934
  }
6552
6935
  };
6553
6936
  NLDDToolbarItem.styles = toolbarItemStyles;
6554
- __decorateClass$1g([
6937
+ __decorateClass$1f([
6555
6938
  property({ type: String })
6556
6939
  ], NLDDToolbarItem.prototype, "width", 2);
6557
- __decorateClass$1g([
6940
+ __decorateClass$1f([
6558
6941
  property({ type: String, attribute: "min-width" })
6559
6942
  ], NLDDToolbarItem.prototype, "minWidth", 2);
6560
- __decorateClass$1g([
6943
+ __decorateClass$1f([
6561
6944
  property({ type: String, attribute: "max-width" })
6562
6945
  ], NLDDToolbarItem.prototype, "maxWidth", 2);
6563
- __decorateClass$1g([
6946
+ __decorateClass$1f([
6564
6947
  property({ type: String })
6565
6948
  ], NLDDToolbarItem.prototype, "label", 2);
6566
- __decorateClass$1g([
6949
+ __decorateClass$1f([
6567
6950
  property({ type: Number })
6568
6951
  ], NLDDToolbarItem.prototype, "priority", 2);
6569
- __decorateClass$1g([
6952
+ __decorateClass$1f([
6570
6953
  property({ type: String, reflect: true })
6571
6954
  ], NLDDToolbarItem.prototype, "size", 2);
6572
- __decorateClass$1g([
6955
+ __decorateClass$1f([
6573
6956
  property({ type: Boolean, reflect: true, attribute: "show-item-labels" })
6574
6957
  ], NLDDToolbarItem.prototype, "showItemLabels", 2);
6575
- NLDDToolbarItem = __decorateClass$1g([
6958
+ NLDDToolbarItem = __decorateClass$1f([
6576
6959
  customElement("nldd-toolbar-item")
6577
6960
  ], NLDDToolbarItem);
6578
6961
  let NLDDToolbarTitle = class extends LitElement {
@@ -6608,28 +6991,28 @@ let NLDDToolbarTitle = class extends LitElement {
6608
6991
  }
6609
6992
  };
6610
6993
  NLDDToolbarTitle.styles = toolbarTitleStyles;
6611
- __decorateClass$1g([
6994
+ __decorateClass$1f([
6612
6995
  property({ type: String })
6613
6996
  ], NLDDToolbarTitle.prototype, "text", 2);
6614
- __decorateClass$1g([
6997
+ __decorateClass$1f([
6615
6998
  property({ type: String, attribute: "supporting-text" })
6616
6999
  ], NLDDToolbarTitle.prototype, "supportingText", 2);
6617
- __decorateClass$1g([
7000
+ __decorateClass$1f([
6618
7001
  property({ type: String, reflect: true })
6619
7002
  ], NLDDToolbarTitle.prototype, "align", 2);
6620
- __decorateClass$1g([
7003
+ __decorateClass$1f([
6621
7004
  property({ type: String })
6622
7005
  ], NLDDToolbarTitle.prototype, "width", 2);
6623
- __decorateClass$1g([
7006
+ __decorateClass$1f([
6624
7007
  property({ type: String, attribute: "min-width" })
6625
7008
  ], NLDDToolbarTitle.prototype, "minWidth", 2);
6626
- __decorateClass$1g([
7009
+ __decorateClass$1f([
6627
7010
  property({ type: String, attribute: "max-width" })
6628
7011
  ], NLDDToolbarTitle.prototype, "maxWidth", 2);
6629
- __decorateClass$1g([
7012
+ __decorateClass$1f([
6630
7013
  property({ type: String, reflect: true })
6631
7014
  ], NLDDToolbarTitle.prototype, "size", 2);
6632
- NLDDToolbarTitle = __decorateClass$1g([
7015
+ NLDDToolbarTitle = __decorateClass$1f([
6633
7016
  customElement("nldd-toolbar-title")
6634
7017
  ], NLDDToolbarTitle);
6635
7018
  let NLDDToolbar = class extends LitElement {
@@ -7060,7 +7443,7 @@ let NLDDToolbar = class extends LitElement {
7060
7443
  (c) => !this._overflowIds.has(c.id)
7061
7444
  );
7062
7445
  const isSoloFluid = visibleNonDivider.length === 1 && (visibleNonDivider[0].type === "title" || visibleNonDivider[0].type === "item" && visibleNonDivider[0].isFluid);
7063
- return template$f(
7446
+ return template$e(
7064
7447
  this,
7065
7448
  this._centerChildren.length > 0,
7066
7449
  this._leftSpacerZero,
@@ -7075,43 +7458,43 @@ let NLDDToolbar = class extends LitElement {
7075
7458
  }
7076
7459
  };
7077
7460
  NLDDToolbar.styles = toolbarStyles;
7078
- __decorateClass$1g([
7461
+ __decorateClass$1f([
7079
7462
  property({ type: String, reflect: true })
7080
7463
  ], NLDDToolbar.prototype, "size", 2);
7081
- __decorateClass$1g([
7464
+ __decorateClass$1f([
7082
7465
  property({ type: Boolean, reflect: true, attribute: "show-item-labels" })
7083
7466
  ], NLDDToolbar.prototype, "showItemLabels", 2);
7084
- __decorateClass$1g([
7467
+ __decorateClass$1f([
7085
7468
  property({ type: String, reflect: true })
7086
7469
  ], NLDDToolbar.prototype, "label", 2);
7087
- __decorateClass$1g([
7470
+ __decorateClass$1f([
7088
7471
  property({ type: Object })
7089
7472
  ], NLDDToolbar.prototype, "translations", 2);
7090
- __decorateClass$1g([
7473
+ __decorateClass$1f([
7091
7474
  state()
7092
7475
  ], NLDDToolbar.prototype, "_menuOpen", 2);
7093
- __decorateClass$1g([
7476
+ __decorateClass$1f([
7094
7477
  state()
7095
7478
  ], NLDDToolbar.prototype, "_startChildren", 2);
7096
- __decorateClass$1g([
7479
+ __decorateClass$1f([
7097
7480
  state()
7098
7481
  ], NLDDToolbar.prototype, "_centerChildren", 2);
7099
- __decorateClass$1g([
7482
+ __decorateClass$1f([
7100
7483
  state()
7101
7484
  ], NLDDToolbar.prototype, "_endChildren", 2);
7102
- __decorateClass$1g([
7485
+ __decorateClass$1f([
7103
7486
  state()
7104
7487
  ], NLDDToolbar.prototype, "_overflowIds", 2);
7105
- __decorateClass$1g([
7488
+ __decorateClass$1f([
7106
7489
  state()
7107
7490
  ], NLDDToolbar.prototype, "_leftSpacerZero", 2);
7108
- __decorateClass$1g([
7491
+ __decorateClass$1f([
7109
7492
  state()
7110
7493
  ], NLDDToolbar.prototype, "_rightSpacerZero", 2);
7111
- __decorateClass$1g([
7494
+ __decorateClass$1f([
7112
7495
  state()
7113
7496
  ], NLDDToolbar.prototype, "_pinnedOverflowItems", 2);
7114
- NLDDToolbar = __decorateClass$1g([
7497
+ NLDDToolbar = __decorateClass$1f([
7115
7498
  customElement("nldd-toolbar")
7116
7499
  ], NLDDToolbar);
7117
7500
  function groupForOverflow(items) {
@@ -7611,14 +7994,14 @@ const nlddImageTranslations = {
7611
7994
  * Decorative images (alt=" '"', aria-hidden) suppress the announcement. */
7612
7995
  "components.image.error-text": "Afbeelding is niet geladen"
7613
7996
  };
7614
- var __defProp$1e = Object.defineProperty;
7615
- var __getOwnPropDesc$1d = Object.getOwnPropertyDescriptor;
7616
- var __decorateClass$1f = (decorators, target, key, kind) => {
7617
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1d(target, key) : target;
7997
+ var __defProp$1d = Object.defineProperty;
7998
+ var __getOwnPropDesc$1c = Object.getOwnPropertyDescriptor;
7999
+ var __decorateClass$1e = (decorators, target, key, kind) => {
8000
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1c(target, key) : target;
7618
8001
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
7619
8002
  if (decorator = decorators[i])
7620
8003
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
7621
- if (kind && result) __defProp$1e(target, key, result);
8004
+ if (kind && result) __defProp$1d(target, key, result);
7622
8005
  return result;
7623
8006
  };
7624
8007
  let NLDDImage = class extends LitElement {
@@ -7750,83 +8133,83 @@ let NLDDImage = class extends LitElement {
7750
8133
  }
7751
8134
  };
7752
8135
  NLDDImage.styles = imageStyles;
7753
- __decorateClass$1f([
8136
+ __decorateClass$1e([
7754
8137
  property({ type: String, reflect: true })
7755
8138
  ], NLDDImage.prototype, "src", 2);
7756
- __decorateClass$1f([
8139
+ __decorateClass$1e([
7757
8140
  property({ type: String })
7758
8141
  ], NLDDImage.prototype, "alt", 2);
7759
- __decorateClass$1f([
8142
+ __decorateClass$1e([
7760
8143
  property({ type: String })
7761
8144
  ], NLDDImage.prototype, "srcset", 2);
7762
- __decorateClass$1f([
8145
+ __decorateClass$1e([
7763
8146
  property({ type: String })
7764
8147
  ], NLDDImage.prototype, "sizes", 2);
7765
- __decorateClass$1f([
8148
+ __decorateClass$1e([
7766
8149
  property({ type: String, reflect: true })
7767
8150
  ], NLDDImage.prototype, "width", 2);
7768
- __decorateClass$1f([
8151
+ __decorateClass$1e([
7769
8152
  property({ type: Number, reflect: true })
7770
8153
  ], NLDDImage.prototype, "height", 2);
7771
- __decorateClass$1f([
8154
+ __decorateClass$1e([
7772
8155
  property({ type: String })
7773
8156
  ], NLDDImage.prototype, "loading", 2);
7774
- __decorateClass$1f([
8157
+ __decorateClass$1e([
7775
8158
  property({ type: String })
7776
8159
  ], NLDDImage.prototype, "decoding", 2);
7777
- __decorateClass$1f([
8160
+ __decorateClass$1e([
7778
8161
  property({ type: String, attribute: "fetchpriority" })
7779
8162
  ], NLDDImage.prototype, "fetchPriority", 2);
7780
- __decorateClass$1f([
8163
+ __decorateClass$1e([
7781
8164
  property({ type: String, attribute: "aspect-ratio", reflect: true })
7782
8165
  ], NLDDImage.prototype, "aspectRatio", 2);
7783
- __decorateClass$1f([
8166
+ __decorateClass$1e([
7784
8167
  property({ type: String, attribute: "object-fit", reflect: true })
7785
8168
  ], NLDDImage.prototype, "objectFit", 2);
7786
- __decorateClass$1f([
8169
+ __decorateClass$1e([
7787
8170
  property({ type: String, attribute: "object-position", reflect: true })
7788
8171
  ], NLDDImage.prototype, "objectPosition", 2);
7789
- __decorateClass$1f([
8172
+ __decorateClass$1e([
7790
8173
  property({ type: String, reflect: true })
7791
8174
  ], NLDDImage.prototype, "shape", 2);
7792
- __decorateClass$1f([
8175
+ __decorateClass$1e([
7793
8176
  property({ type: String })
7794
8177
  ], NLDDImage.prototype, "caption", 2);
7795
- __decorateClass$1f([
8178
+ __decorateClass$1e([
7796
8179
  property({ type: String })
7797
8180
  ], NLDDImage.prototype, "credit", 2);
7798
- __decorateClass$1f([
8181
+ __decorateClass$1e([
7799
8182
  property({ type: Boolean, reflect: true })
7800
8183
  ], NLDDImage.prototype, "decorative", 2);
7801
- __decorateClass$1f([
8184
+ __decorateClass$1e([
7802
8185
  property({ type: String })
7803
8186
  ], NLDDImage.prototype, "lqip", 2);
7804
- __decorateClass$1f([
8187
+ __decorateClass$1e([
7805
8188
  property({ type: Object })
7806
8189
  ], NLDDImage.prototype, "translations", 2);
7807
- __decorateClass$1f([
8190
+ __decorateClass$1e([
7808
8191
  state()
7809
8192
  ], NLDDImage.prototype, "_hasSlottedCaption", 2);
7810
- __decorateClass$1f([
8193
+ __decorateClass$1e([
7811
8194
  state()
7812
8195
  ], NLDDImage.prototype, "_imageLoaded", 2);
7813
- __decorateClass$1f([
8196
+ __decorateClass$1e([
7814
8197
  state()
7815
8198
  ], NLDDImage.prototype, "_imageErrored", 2);
7816
- NLDDImage = __decorateClass$1f([
8199
+ NLDDImage = __decorateClass$1e([
7817
8200
  customElement("nldd-image")
7818
8201
  ], NLDDImage);
7819
8202
  const nlddRichTextTranslations = {
7820
8203
  "components.rich-text.table-scroll-label": "Scrollbare tabel"
7821
8204
  };
7822
- var __defProp$1d = Object.defineProperty;
7823
- var __getOwnPropDesc$1c = Object.getOwnPropertyDescriptor;
7824
- var __decorateClass$1e = (decorators, target, key, kind) => {
7825
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1c(target, key) : target;
8205
+ var __defProp$1c = Object.defineProperty;
8206
+ var __getOwnPropDesc$1b = Object.getOwnPropertyDescriptor;
8207
+ var __decorateClass$1d = (decorators, target, key, kind) => {
8208
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1b(target, key) : target;
7826
8209
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
7827
8210
  if (decorator = decorators[i])
7828
8211
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
7829
- if (kind && result) __defProp$1d(target, key, result);
8212
+ if (kind && result) __defProp$1c(target, key, result);
7830
8213
  return result;
7831
8214
  };
7832
8215
  const MANAGED_LABEL_ATTR = "data-nldd-managed-label";
@@ -7879,22 +8262,22 @@ let NLDDRichText = class extends LitElement {
7879
8262
  }
7880
8263
  }
7881
8264
  };
7882
- __decorateClass$1e([
8265
+ __decorateClass$1d([
7883
8266
  property({ type: String, reflect: true })
7884
8267
  ], NLDDRichText.prototype, "spacing", 2);
7885
- __decorateClass$1e([
8268
+ __decorateClass$1d([
7886
8269
  property({ type: Boolean, reflect: true })
7887
8270
  ], NLDDRichText.prototype, "centered", 2);
7888
- __decorateClass$1e([
8271
+ __decorateClass$1d([
7889
8272
  property({ type: String, reflect: true })
7890
8273
  ], NLDDRichText.prototype, "color", 2);
7891
- __decorateClass$1e([
8274
+ __decorateClass$1d([
7892
8275
  property({ type: Object })
7893
8276
  ], NLDDRichText.prototype, "translations", 2);
7894
- NLDDRichText = __decorateClass$1e([
8277
+ NLDDRichText = __decorateClass$1d([
7895
8278
  customElement("nldd-rich-text")
7896
8279
  ], NLDDRichText);
7897
- const smMax$f = unsafeCSS(breakpoints.smMax);
8280
+ const smMax$g = unsafeCSS(breakpoints.smMax);
7898
8281
  const mdMin$i = unsafeCSS(breakpoints.mdMin);
7899
8282
  const mdMax$b = unsafeCSS(breakpoints.mdMax);
7900
8283
  const lgMin$d = unsafeCSS(breakpoints.lgMin);
@@ -7904,7 +8287,7 @@ const titleStyles = css`
7904
8287
  /* # Host */
7905
8288
 
7906
8289
  :host {
7907
- @media (max-width: ${smMax$f}) {
8290
+ @media (max-width: ${smMax$g}) {
7908
8291
  --_font: var(--primitives-font-display-3-sm);
7909
8292
  }
7910
8293
 
@@ -7916,7 +8299,7 @@ const titleStyles = css`
7916
8299
  --_font: var(--primitives-font-display-3-lg);
7917
8300
  }
7918
8301
 
7919
- @container layout-container (max-width: ${smMax$f}) {
8302
+ @container layout-container (max-width: ${smMax$g}) {
7920
8303
  --_font: var(--primitives-font-display-3-sm);
7921
8304
  }
7922
8305
 
@@ -7933,7 +8316,7 @@ const titleStyles = css`
7933
8316
  }
7934
8317
 
7935
8318
  :host([size="1"]) {
7936
- @media (max-width: ${smMax$f}) {
8319
+ @media (max-width: ${smMax$g}) {
7937
8320
  --_font: var(--primitives-font-display-1-sm);
7938
8321
  }
7939
8322
 
@@ -7945,7 +8328,7 @@ const titleStyles = css`
7945
8328
  --_font: var(--primitives-font-display-1-lg);
7946
8329
  }
7947
8330
 
7948
- @container layout-container (max-width: ${smMax$f}) {
8331
+ @container layout-container (max-width: ${smMax$g}) {
7949
8332
  --_font: var(--primitives-font-display-1-sm);
7950
8333
  }
7951
8334
 
@@ -7959,7 +8342,7 @@ const titleStyles = css`
7959
8342
  }
7960
8343
 
7961
8344
  :host([size="2"]) {
7962
- @media (max-width: ${smMax$f}) {
8345
+ @media (max-width: ${smMax$g}) {
7963
8346
  --_font: var(--primitives-font-display-2-sm);
7964
8347
  }
7965
8348
 
@@ -7971,7 +8354,7 @@ const titleStyles = css`
7971
8354
  --_font: var(--primitives-font-display-2-lg);
7972
8355
  }
7973
8356
 
7974
- @container layout-container (max-width: ${smMax$f}) {
8357
+ @container layout-container (max-width: ${smMax$g}) {
7975
8358
  --_font: var(--primitives-font-display-2-sm);
7976
8359
  }
7977
8360
 
@@ -7985,7 +8368,7 @@ const titleStyles = css`
7985
8368
  }
7986
8369
 
7987
8370
  :host([size="4"]) {
7988
- @media (max-width: ${smMax$f}) {
8371
+ @media (max-width: ${smMax$g}) {
7989
8372
  --_font: var(--primitives-font-display-4-sm);
7990
8373
  }
7991
8374
 
@@ -7997,7 +8380,7 @@ const titleStyles = css`
7997
8380
  --_font: var(--primitives-font-display-4-lg);
7998
8381
  }
7999
8382
 
8000
- @container layout-container (max-width: ${smMax$f}) {
8383
+ @container layout-container (max-width: ${smMax$g}) {
8001
8384
  --_font: var(--primitives-font-display-4-sm);
8002
8385
  }
8003
8386
 
@@ -8011,7 +8394,7 @@ const titleStyles = css`
8011
8394
  }
8012
8395
 
8013
8396
  :host([size="5"]) {
8014
- @media (max-width: ${smMax$f}) {
8397
+ @media (max-width: ${smMax$g}) {
8015
8398
  --_font: var(--primitives-font-display-5-sm);
8016
8399
  }
8017
8400
 
@@ -8023,7 +8406,7 @@ const titleStyles = css`
8023
8406
  --_font: var(--primitives-font-display-5-lg);
8024
8407
  }
8025
8408
 
8026
- @container layout-container (max-width: ${smMax$f}) {
8409
+ @container layout-container (max-width: ${smMax$g}) {
8027
8410
  --_font: var(--primitives-font-display-5-sm);
8028
8411
  }
8029
8412
 
@@ -8037,7 +8420,7 @@ const titleStyles = css`
8037
8420
  }
8038
8421
 
8039
8422
  :host([size="6"]) {
8040
- @media (max-width: ${smMax$f}) {
8423
+ @media (max-width: ${smMax$g}) {
8041
8424
  --_font: var(--primitives-font-display-6-sm);
8042
8425
  }
8043
8426
 
@@ -8049,7 +8432,7 @@ const titleStyles = css`
8049
8432
  --_font: var(--primitives-font-display-6-lg);
8050
8433
  }
8051
8434
 
8052
- @container layout-container (max-width: ${smMax$f}) {
8435
+ @container layout-container (max-width: ${smMax$g}) {
8053
8436
  --_font: var(--primitives-font-display-6-sm);
8054
8437
  }
8055
8438
 
@@ -8153,14 +8536,14 @@ function titleTemplate() {
8153
8536
  </div>
8154
8537
  `;
8155
8538
  }
8156
- var __defProp$1c = Object.defineProperty;
8157
- var __getOwnPropDesc$1b = Object.getOwnPropertyDescriptor;
8158
- var __decorateClass$1d = (decorators, target, key, kind) => {
8159
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1b(target, key) : target;
8539
+ var __defProp$1b = Object.defineProperty;
8540
+ var __getOwnPropDesc$1a = Object.getOwnPropertyDescriptor;
8541
+ var __decorateClass$1c = (decorators, target, key, kind) => {
8542
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1a(target, key) : target;
8160
8543
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
8161
8544
  if (decorator = decorators[i])
8162
8545
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8163
- if (kind && result) __defProp$1c(target, key, result);
8546
+ if (kind && result) __defProp$1b(target, key, result);
8164
8547
  return result;
8165
8548
  };
8166
8549
  let NLDDTitle = class extends LitElement {
@@ -8174,16 +8557,16 @@ let NLDDTitle = class extends LitElement {
8174
8557
  }
8175
8558
  };
8176
8559
  NLDDTitle.styles = titleStyles;
8177
- __decorateClass$1d([
8560
+ __decorateClass$1c([
8178
8561
  property({ type: Number, reflect: true })
8179
8562
  ], NLDDTitle.prototype, "size", 2);
8180
- __decorateClass$1d([
8563
+ __decorateClass$1c([
8181
8564
  property({ type: String, reflect: true })
8182
8565
  ], NLDDTitle.prototype, "color", 2);
8183
- NLDDTitle = __decorateClass$1d([
8566
+ NLDDTitle = __decorateClass$1c([
8184
8567
  customElement("nldd-title")
8185
8568
  ], NLDDTitle);
8186
- const smMax$e = unsafeCSS(breakpoints.smMax);
8569
+ const smMax$f = unsafeCSS(breakpoints.smMax);
8187
8570
  const blockquoteStyles = css`
8188
8571
 
8189
8572
 
@@ -8194,13 +8577,13 @@ const blockquoteStyles = css`
8194
8577
  --_quote-font: var(--semantics-blockquotes-md-quote-font);
8195
8578
  --_attribution-font: var(--semantics-blockquotes-md-attribution-font);
8196
8579
 
8197
- @media (max-width: ${smMax$e}) {
8580
+ @media (max-width: ${smMax$f}) {
8198
8581
  --_spacing: var(--semantics-blockquotes-sm-spacing);
8199
8582
  --_quote-font: var(--semantics-blockquotes-sm-quote-font);
8200
8583
  --_attribution-font: var(--semantics-blockquotes-sm-attribution-font);
8201
8584
  }
8202
8585
 
8203
- @container layout-container (max-width: ${smMax$e}) {
8586
+ @container layout-container (max-width: ${smMax$f}) {
8204
8587
  --_spacing: var(--semantics-blockquotes-sm-spacing);
8205
8588
  --_quote-font: var(--semantics-blockquotes-sm-quote-font);
8206
8589
  --_attribution-font: var(--semantics-blockquotes-sm-attribution-font);
@@ -8269,7 +8652,7 @@ const blockquoteStyles = css`
8269
8652
  display: inline !important;
8270
8653
  }
8271
8654
  `;
8272
- function template$e(component) {
8655
+ function template$d(component) {
8273
8656
  return html`
8274
8657
  <blockquote class="blockquote"
8275
8658
  cite=${component.cite || nothing}
@@ -8285,14 +8668,14 @@ function template$e(component) {
8285
8668
  </blockquote>
8286
8669
  `;
8287
8670
  }
8288
- var __defProp$1b = Object.defineProperty;
8289
- var __getOwnPropDesc$1a = Object.getOwnPropertyDescriptor;
8290
- var __decorateClass$1c = (decorators, target, key, kind) => {
8291
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1a(target, key) : target;
8671
+ var __defProp$1a = Object.defineProperty;
8672
+ var __getOwnPropDesc$19 = Object.getOwnPropertyDescriptor;
8673
+ var __decorateClass$1b = (decorators, target, key, kind) => {
8674
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$19(target, key) : target;
8292
8675
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
8293
8676
  if (decorator = decorators[i])
8294
8677
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8295
- if (kind && result) __defProp$1b(target, key, result);
8678
+ if (kind && result) __defProp$1a(target, key, result);
8296
8679
  return result;
8297
8680
  };
8298
8681
  let NLDDBlockquote = class extends LitElement {
@@ -8311,20 +8694,20 @@ let NLDDBlockquote = class extends LitElement {
8311
8694
  };
8312
8695
  }
8313
8696
  render() {
8314
- return template$e(this);
8697
+ return template$d(this);
8315
8698
  }
8316
8699
  };
8317
8700
  NLDDBlockquote.styles = blockquoteStyles;
8318
- __decorateClass$1c([
8701
+ __decorateClass$1b([
8319
8702
  property({ type: String })
8320
8703
  ], NLDDBlockquote.prototype, "cite", 2);
8321
- __decorateClass$1c([
8704
+ __decorateClass$1b([
8322
8705
  state()
8323
8706
  ], NLDDBlockquote.prototype, "_hasAttribution", 2);
8324
- __decorateClass$1c([
8707
+ __decorateClass$1b([
8325
8708
  state()
8326
8709
  ], NLDDBlockquote.prototype, "_hasBylineAttribution", 2);
8327
- NLDDBlockquote = __decorateClass$1c([
8710
+ NLDDBlockquote = __decorateClass$1b([
8328
8711
  customElement("nldd-blockquote")
8329
8712
  ], NLDDBlockquote);
8330
8713
  const tagStyles = css`
@@ -8548,7 +8931,7 @@ const tagStyles = css`
8548
8931
  display: inline-block;
8549
8932
  }
8550
8933
  `;
8551
- function template$d(component) {
8934
+ function template$c(component) {
8552
8935
  const variant = component._effectiveVariant;
8553
8936
  const showIcon = variant === "icon" || variant === "icon-and-text" && component._hasIcon;
8554
8937
  const showText = (variant === "text" || variant === "icon-and-text") && component._hasText;
@@ -8571,14 +8954,14 @@ function template$d(component) {
8571
8954
  </span>
8572
8955
  `;
8573
8956
  }
8574
- var __defProp$1a = Object.defineProperty;
8575
- var __getOwnPropDesc$19 = Object.getOwnPropertyDescriptor;
8576
- var __decorateClass$1b = (decorators, target, key, kind) => {
8577
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$19(target, key) : target;
8957
+ var __defProp$19 = Object.defineProperty;
8958
+ var __getOwnPropDesc$18 = Object.getOwnPropertyDescriptor;
8959
+ var __decorateClass$1a = (decorators, target, key, kind) => {
8960
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$18(target, key) : target;
8578
8961
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
8579
8962
  if (decorator = decorators[i])
8580
8963
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8581
- if (kind && result) __defProp$1a(target, key, result);
8964
+ if (kind && result) __defProp$19(target, key, result);
8582
8965
  return result;
8583
8966
  };
8584
8967
  let NLDDTag = class extends LitElement {
@@ -8634,212 +9017,37 @@ let NLDDTag = class extends LitElement {
8634
9017
  updated() {
8635
9018
  }
8636
9019
  render() {
8637
- return template$d(this);
9020
+ return template$c(this);
8638
9021
  }
8639
9022
  };
8640
9023
  NLDDTag.styles = tagStyles;
8641
- __decorateClass$1b([
9024
+ __decorateClass$1a([
8642
9025
  property({ type: String, reflect: true })
8643
9026
  ], NLDDTag.prototype, "color", 2);
8644
- __decorateClass$1b([
9027
+ __decorateClass$1a([
8645
9028
  property({ type: String, reflect: true })
8646
9029
  ], NLDDTag.prototype, "size", 2);
8647
- __decorateClass$1b([
9030
+ __decorateClass$1a([
8648
9031
  property({ type: String })
8649
9032
  ], NLDDTag.prototype, "text", 2);
8650
- __decorateClass$1b([
9033
+ __decorateClass$1a([
8651
9034
  property({ type: String })
8652
9035
  ], NLDDTag.prototype, "icon", 2);
8653
- __decorateClass$1b([
9036
+ __decorateClass$1a([
8654
9037
  property({ type: String, reflect: true })
8655
9038
  ], NLDDTag.prototype, "variant", 2);
8656
- __decorateClass$1b([
9039
+ __decorateClass$1a([
8657
9040
  property({ type: String, attribute: "accessible-label" })
8658
9041
  ], NLDDTag.prototype, "accessibleLabel", 2);
8659
- __decorateClass$1b([
9042
+ __decorateClass$1a([
8660
9043
  state()
8661
9044
  ], NLDDTag.prototype, "_hasSlotText", 2);
8662
- __decorateClass$1b([
9045
+ __decorateClass$1a([
8663
9046
  state()
8664
9047
  ], NLDDTag.prototype, "_hasSlotIcon", 2);
8665
- NLDDTag = __decorateClass$1b([
9048
+ NLDDTag = __decorateClass$1a([
8666
9049
  customElement("nldd-tag")
8667
9050
  ], NLDDTag);
8668
- const keyboardShortcutStyles = css`
8669
-
8670
-
8671
- /* # Host */
8672
-
8673
- :host {
8674
- --_size: var(--components-keyboard-shortcut-md-size);
8675
- --_inline-padding: var(--primitives-space-6);
8676
- --_font: var(--primitives-font-body-xs-regular-flat);
8677
-
8678
- ${inheritedTextReset}
8679
- display: inline-flex;
8680
- vertical-align: middle;
8681
- }
8682
-
8683
- :host([size="sm"]) {
8684
- --_size: var(--components-keyboard-shortcut-sm-size);
8685
- --_inline-padding: var(--primitives-space-4);
8686
- --_font: var(--primitives-font-body-xxs-regular-flat);
8687
- }
8688
-
8689
- :host([hidden]) {
8690
- display: none;
8691
- }
8692
-
8693
- @media (any-hover: none) {
8694
- :host(:not([always-visible])) {
8695
- display: none;
8696
- }
8697
- }
8698
-
8699
-
8700
- /* # Block */
8701
-
8702
- .keyboard-shortcut {
8703
- display: inline-flex;
8704
- gap: var(--primitives-space-4);
8705
- align-items: center;
8706
- }
8707
-
8708
-
8709
- /* # Elements */
8710
-
8711
- .keyboard-shortcut__key {
8712
- box-sizing: border-box;
8713
- display: inline-flex;
8714
- border: var(--components-keyboard-shortcut-border-thickness) solid var(--components-keyboard-shortcut-border-color);
8715
- border-radius: var(--components-keyboard-shortcut-corner-radius);
8716
- background-color: var(--components-keyboard-shortcut-background-color);
8717
- min-width: var(--_size);
8718
- height: var(--_size);
8719
- padding: 0 var(--_inline-padding);
8720
- align-items: center;
8721
- justify-content: center;
8722
- color: var(--components-keyboard-shortcut-content-color);
8723
- font: var(--_font);
8724
- white-space: nowrap;
8725
- }
8726
-
8727
- @media (forced-colors: active) {
8728
- .keyboard-shortcut__key {
8729
- border-color: CanvasText;
8730
- background-color: Canvas;
8731
- color: CanvasText;
8732
- }
8733
- }
8734
-
8735
- .keyboard-shortcut__separator {
8736
- color: var(--components-keyboard-shortcut-separator-color);
8737
- font: var(--_font);
8738
- }
8739
- `;
8740
- function template$c(component) {
8741
- const keys = component._parsedKeys;
8742
- if (keys.length === 0) {
8743
- return html`
8744
- <kbd class="keyboard-shortcut">
8745
- <slot></slot>
8746
- </kbd>
8747
- `;
8748
- }
8749
- return html`
8750
- <kbd class="keyboard-shortcut">
8751
- ${keys.map((key, index) => html`
8752
- ${index > 0 ? html`<span class="keyboard-shortcut__separator"
8753
- aria-hidden="true"
8754
- >+</span>` : ""}
8755
- <kbd class="keyboard-shortcut__key">${key}</kbd>
8756
- `)}
8757
- </kbd>
8758
- `;
8759
- }
8760
- let cached = null;
8761
- function classify(platform) {
8762
- const p = platform.toLowerCase();
8763
- if (/mac|iphone|ipad|ipod|ios/.test(p)) return "mac";
8764
- if (/win/.test(p)) return "windows";
8765
- if (/android/.test(p)) return "other";
8766
- if (/linux|cros/.test(p)) return "linux";
8767
- return "other";
8768
- }
8769
- function detectOS() {
8770
- if (cached !== null) return cached;
8771
- if (typeof navigator === "undefined") {
8772
- cached = "other";
8773
- return cached;
8774
- }
8775
- const nav = navigator;
8776
- const platform = nav.userAgentData?.platform || nav.platform || "";
8777
- cached = classify(platform);
8778
- return cached;
8779
- }
8780
- var __defProp$19 = Object.defineProperty;
8781
- var __getOwnPropDesc$18 = Object.getOwnPropertyDescriptor;
8782
- var __decorateClass$1a = (decorators, target, key, kind) => {
8783
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$18(target, key) : target;
8784
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
8785
- if (decorator = decorators[i])
8786
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8787
- if (kind && result) __defProp$19(target, key, result);
8788
- return result;
8789
- };
8790
- let NLDDKeyboardShortcut = class extends LitElement {
8791
- constructor() {
8792
- super(...arguments);
8793
- this.keys = "";
8794
- this.macKeys = "";
8795
- this.windowsKeys = "";
8796
- this.linuxKeys = "";
8797
- this.size = "md";
8798
- this.alwaysVisible = false;
8799
- this.debugOS = "";
8800
- }
8801
- get _resolvedKeys() {
8802
- const os = this.debugOS || detectOS();
8803
- if (os === "mac" && this.macKeys) return this.macKeys;
8804
- if (os === "windows" && this.windowsKeys) return this.windowsKeys;
8805
- if (os === "linux" && this.linuxKeys) return this.linuxKeys;
8806
- return this.keys;
8807
- }
8808
- get _parsedKeys() {
8809
- const spec = this._resolvedKeys;
8810
- if (!spec) return [];
8811
- const MARKER = "\0";
8812
- return spec.replace(/\+\+\+/g, `+${MARKER}+`).split("+").map((k) => k.trim().replace(new RegExp(MARKER, "g"), "+")).filter(Boolean);
8813
- }
8814
- render() {
8815
- return template$c(this);
8816
- }
8817
- };
8818
- NLDDKeyboardShortcut.styles = keyboardShortcutStyles;
8819
- __decorateClass$1a([
8820
- property({ type: String })
8821
- ], NLDDKeyboardShortcut.prototype, "keys", 2);
8822
- __decorateClass$1a([
8823
- property({ type: String, attribute: "mac-keys" })
8824
- ], NLDDKeyboardShortcut.prototype, "macKeys", 2);
8825
- __decorateClass$1a([
8826
- property({ type: String, attribute: "windows-keys" })
8827
- ], NLDDKeyboardShortcut.prototype, "windowsKeys", 2);
8828
- __decorateClass$1a([
8829
- property({ type: String, attribute: "linux-keys" })
8830
- ], NLDDKeyboardShortcut.prototype, "linuxKeys", 2);
8831
- __decorateClass$1a([
8832
- property({ type: String, reflect: true })
8833
- ], NLDDKeyboardShortcut.prototype, "size", 2);
8834
- __decorateClass$1a([
8835
- property({ type: Boolean, reflect: true, attribute: "always-visible" })
8836
- ], NLDDKeyboardShortcut.prototype, "alwaysVisible", 2);
8837
- __decorateClass$1a([
8838
- property({ type: String, attribute: "debug-os" })
8839
- ], NLDDKeyboardShortcut.prototype, "debugOS", 2);
8840
- NLDDKeyboardShortcut = __decorateClass$1a([
8841
- customElement("nldd-keyboard-shortcut")
8842
- ], NLDDKeyboardShortcut);
8843
9051
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
8844
9052
  function getDefaultExportFromCjs(x) {
8845
9053
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
@@ -10594,17 +10802,17 @@ const GRAMMAR_LOADERS = {
10594
10802
  yaml: () => import("./prism-yaml-DO0f9pf6.js"),
10595
10803
  json: () => import("./prism-json-DIMpow89.js"),
10596
10804
  javascript: () => import("./prism-javascript-DeC_17Pw.js"),
10597
- typescript: () => import("./prism-typescript-KyVBIohW.js").then((n) => n.p),
10805
+ typescript: () => import("./prism-typescript-DrsfPuKI.js").then((n) => n.p),
10598
10806
  css: () => import("./prism-css-B93tXdOU.js"),
10599
10807
  html: () => import("./prism-markup-DfJYPYHA.js"),
10600
10808
  xml: () => import("./prism-markup-DfJYPYHA.js"),
10601
10809
  bash: () => import("./prism-bash-vbqaw3JR.js"),
10602
10810
  markdown: () => import("./prism-markdown-D-uFBkiz.js"),
10603
- rust: () => import("./prism-rust-DzgIGUtE.js").then((n) => n.p),
10811
+ rust: () => import("./prism-rust-CSuFXPDt.js").then((n) => n.p),
10604
10812
  gherkin: () => import("./prism-gherkin-CMPYyXOQ.js"),
10605
10813
  toml: () => import("./prism-toml-Ubdq-a5x.js"),
10606
10814
  sql: () => import("./prism-sql-BGqCBMyJ.js"),
10607
- python: () => import("./prism-python-BzzeiWRd.js").then((n) => n.p)
10815
+ python: () => import("./prism-python-SgP2Rws4.js").then((n) => n.p)
10608
10816
  };
10609
10817
  const grammarLoads = /* @__PURE__ */ new Map();
10610
10818
  function loadGrammar(language) {
@@ -10775,6 +10983,7 @@ __decorateClass$19([
10775
10983
  NLDDCodeViewer = __decorateClass$19([
10776
10984
  customElement("nldd-code-viewer")
10777
10985
  ], NLDDCodeViewer);
10986
+ const smMax$e = unsafeCSS(breakpoints.smMax);
10778
10987
  const bylineStyles = css`
10779
10988
 
10780
10989
 
@@ -10782,7 +10991,7 @@ const bylineStyles = css`
10782
10991
 
10783
10992
  :host {
10784
10993
  --_gap: var(--primitives-space-8);
10785
- --_avatar-overlap: var(--primitives-space-8);
10994
+ --_avatar-overlap-size: var(--primitives-space-8);
10786
10995
  --_avatar-size: var(--primitives-space-40);
10787
10996
  --_avatar-border-width: var(--primitives-border-width-regular);
10788
10997
  --_avatar-border-color: var(--context-parent-background-color, var(--semantics-surfaces-base-background-color));
@@ -10793,13 +11002,28 @@ const bylineStyles = css`
10793
11002
  --_supporting-text-font: var(--primitives-font-body-sm-regular-tight);
10794
11003
 
10795
11004
  ${inheritedTextReset}
11005
+ container-type: inline-size;
11006
+ display: block;
11007
+ }
11008
+
11009
+ :host([hidden]) {
11010
+ display: none;
11011
+ }
11012
+
11013
+
11014
+ /* # Byline */
11015
+
11016
+ .byline {
10796
11017
  display: flex;
10797
11018
  align-items: center;
10798
11019
  gap: var(--_gap);
10799
11020
  }
10800
11021
 
10801
- :host([hidden]) {
10802
- display: none;
11022
+ .byline[data-multiple-avatars] {
11023
+ @container (max-width: ${smMax$e}) {
11024
+ flex-direction: column;
11025
+ align-items: flex-start;
11026
+ }
10803
11027
  }
10804
11028
 
10805
11029
 
@@ -10807,7 +11031,7 @@ const bylineStyles = css`
10807
11031
 
10808
11032
  .byline__avatars {
10809
11033
  display: flex;
10810
- padding-inline-start: var(--_avatar-overlap);
11034
+ padding-inline-start: var(--_avatar-overlap-size);
10811
11035
  }
10812
11036
 
10813
11037
  .byline__avatars[hidden] {
@@ -10817,7 +11041,7 @@ const bylineStyles = css`
10817
11041
  .byline__avatars ::slotted(img) {
10818
11042
  ${slottedReset}
10819
11043
  display: block !important;
10820
- margin-inline-start: calc(-1 * var(--_avatar-overlap)) !important;
11044
+ margin-inline-start: calc(-1 * var(--_avatar-overlap-size)) !important;
10821
11045
  border-radius: var(--_avatar-corner-radius) !important;
10822
11046
  box-shadow: 0 0 0 var(--_avatar-border-width) var(--_avatar-border-color) !important;
10823
11047
  width: var(--_avatar-size) !important;
@@ -10870,20 +11094,24 @@ function bylineTemplate(component) {
10870
11094
  const hasText = Boolean(component.text) || component._hasSlottedText;
10871
11095
  const hasSupportingText = Boolean(component.supportingText) || component._hasSlottedSupportingText;
10872
11096
  return html`
10873
- <div class="byline__avatars"
10874
- ?hidden=${!component._hasSlottedAvatars}
11097
+ <div class="byline"
11098
+ ?data-multiple-avatars=${component._avatarCount >= 2}
10875
11099
  >
10876
- <slot name="avatars" @slotchange=${component._onSlotChange}></slot>
10877
- </div>
10878
- <div class="byline__text-area"
10879
- ?hidden=${!hasText && !hasSupportingText}
10880
- >
10881
- <p class="byline__text"
10882
- ?hidden=${!hasText}
10883
- ><slot name="text" @slotchange=${component._onSlotChange}>${component.text}</slot></p>
10884
- <p class="byline__supporting-text"
10885
- ?hidden=${!hasSupportingText}
10886
- ><slot name="supporting-text" @slotchange=${component._onSlotChange}>${component.supportingText}</slot></p>
11100
+ <div class="byline__avatars"
11101
+ ?hidden=${!component._hasSlottedAvatars}
11102
+ >
11103
+ <slot name="avatars" @slotchange=${component._onSlotChange}></slot>
11104
+ </div>
11105
+ <div class="byline__text-area"
11106
+ ?hidden=${!hasText && !hasSupportingText}
11107
+ >
11108
+ <p class="byline__text"
11109
+ ?hidden=${!hasText}
11110
+ ><slot name="text" @slotchange=${component._onSlotChange}>${component.text}</slot></p>
11111
+ <p class="byline__supporting-text"
11112
+ ?hidden=${!hasSupportingText}
11113
+ ><slot name="supporting-text" @slotchange=${component._onSlotChange}>${component.supportingText}</slot></p>
11114
+ </div>
10887
11115
  </div>
10888
11116
  `;
10889
11117
  }
@@ -10903,14 +11131,17 @@ let NLDDByline = class extends LitElement {
10903
11131
  this.text = "";
10904
11132
  this.supportingText = "";
10905
11133
  this._hasSlottedAvatars = false;
11134
+ this._avatarCount = 0;
10906
11135
  this._hasSlottedText = false;
10907
11136
  this._hasSlottedSupportingText = false;
10908
11137
  this._onSlotChange = (e) => {
10909
11138
  const slot = e.target;
10910
- const has = slot.assignedElements().length > 0;
10911
- if (slot.name === "avatars") this._hasSlottedAvatars = has;
10912
- else if (slot.name === "text") this._hasSlottedText = has;
10913
- else if (slot.name === "supporting-text") this._hasSlottedSupportingText = has;
11139
+ const count = slot.assignedElements().length;
11140
+ if (slot.name === "avatars") {
11141
+ this._avatarCount = count;
11142
+ this._hasSlottedAvatars = count > 0;
11143
+ } else if (slot.name === "text") this._hasSlottedText = count > 0;
11144
+ else if (slot.name === "supporting-text") this._hasSlottedSupportingText = count > 0;
10914
11145
  };
10915
11146
  }
10916
11147
  render() {
@@ -10927,6 +11158,9 @@ __decorateClass$18([
10927
11158
  __decorateClass$18([
10928
11159
  state()
10929
11160
  ], NLDDByline.prototype, "_hasSlottedAvatars", 2);
11161
+ __decorateClass$18([
11162
+ state()
11163
+ ], NLDDByline.prototype, "_avatarCount", 2);
10930
11164
  __decorateClass$18([
10931
11165
  state()
10932
11166
  ], NLDDByline.prototype, "_hasSlottedText", 2);
@@ -12124,10 +12358,11 @@ const multiLineTextFieldStyles = css`
12124
12358
  --_background-color: var(--semantics-input-fields-background-color);
12125
12359
  --_corner-radius: var(--semantics-controls-md-corner-radius);
12126
12360
  --_inline-padding: calc(var(--semantics-controls-md-inline-padding) - var(--semantics-input-fields-border-thickness));
12127
- --_min-size: var(--semantics-controls-md-min-size);
12361
+ --_min-height: var(--semantics-controls-md-min-size);
12128
12362
  --_text-font: var(--semantics-input-fields-md-text-font);
12129
- --_icon-area-size: calc(var(--_min-size) - var(--semantics-input-fields-border-thickness) * 2);
12363
+ --_icon-area-size: calc(var(--_min-height) - var(--semantics-input-fields-border-thickness) * 2);
12130
12364
  --_validation-icon-size: var(--semantics-input-fields-md-validation-icon-size);
12365
+ --_rows: 3;
12131
12366
 
12132
12367
  ${inheritedTextReset}
12133
12368
  display: block;
@@ -12143,7 +12378,7 @@ const multiLineTextFieldStyles = css`
12143
12378
  :host([size="sm"]) {
12144
12379
  --_corner-radius: var(--semantics-controls-sm-corner-radius);
12145
12380
  --_inline-padding: calc(var(--semantics-controls-sm-inline-padding) - var(--semantics-input-fields-border-thickness));
12146
- --_min-size: var(--semantics-controls-sm-min-size);
12381
+ --_min-height: var(--semantics-controls-sm-min-size);
12147
12382
  --_text-font: var(--semantics-input-fields-sm-text-font);
12148
12383
  --_validation-icon-size: var(--semantics-input-fields-sm-validation-icon-size);
12149
12384
  }
@@ -12200,8 +12435,8 @@ const multiLineTextFieldStyles = css`
12200
12435
  border: none;
12201
12436
  background: transparent;
12202
12437
  width: 100%;
12203
- min-height: calc(var(--_min-size) - var(--semantics-input-fields-border-thickness) * 2);
12204
- padding-block: calc((var(--_min-size) - var(--semantics-input-fields-border-thickness) * 2 - 1lh) / 2);
12438
+ min-height: calc(var(--_min-height) - var(--semantics-input-fields-border-thickness) * 2);
12439
+ padding-block: calc((var(--_min-height) - var(--semantics-input-fields-border-thickness) * 2 - 1lh) / 2);
12205
12440
  padding-inline: var(--_inline-padding);
12206
12441
  color: var(--semantics-content-color);
12207
12442
  font: var(--_text-font);
@@ -12219,6 +12454,11 @@ const multiLineTextFieldStyles = css`
12219
12454
  :host([resize="auto"]) .multi-line-text-field__input {
12220
12455
  resize: none;
12221
12456
  field-sizing: content;
12457
+ /* Keep the configured rows as the floor: field-sizing grows the field with
12458
+ content, and this min-height stops it shrinking below that many lines.
12459
+ The host exposes the count as --_rows; one row already fits in
12460
+ --_min-height, so each extra row adds one line height. */
12461
+ min-height: calc(var(--_min-height) - var(--semantics-input-fields-border-thickness) * 2 + (var(--_rows) - 1) * 1lh);
12222
12462
  }
12223
12463
 
12224
12464
  :host([valid]) .multi-line-text-field__input,
@@ -12358,6 +12598,9 @@ let NLDDMultiLineTextField = class extends LitElement {
12358
12598
  this.style.removeProperty("--_width");
12359
12599
  }
12360
12600
  }
12601
+ if (changed.has("rows")) {
12602
+ this.style.setProperty("--_rows", String(this.rows));
12603
+ }
12361
12604
  if (changed.has("resize") && this.resize === "auto" && this._textarea) {
12362
12605
  this._textarea.style.width = "";
12363
12606
  this._textarea.style.height = "";
@@ -17111,7 +17354,7 @@ function toggleButtonTemplate(component) {
17111
17354
  const ariaLabel = component.accessibleLabel || (component.variant === "icon" && component.text ? component.text : "") || nothing;
17112
17355
  const isIconOnlyDisplay = showIcon && !showText;
17113
17356
  const tooltipText = isIconOnlyDisplay ? component.accessibleLabel || component.text || "" : "";
17114
- const icon = component.icon ? html`<nldd-icon class="toggle-button__icon"
17357
+ const icon2 = component.icon ? html`<nldd-icon class="toggle-button__icon"
17115
17358
  name=${component.icon}
17116
17359
  ></nldd-icon>` : html`<slot name="icon"
17117
17360
  @slotchange=${component.requestUpdate}
@@ -17132,7 +17375,7 @@ function toggleButtonTemplate(component) {
17132
17375
  aria-label=${ariaLabel}
17133
17376
  @change=${component._handleInputChange}
17134
17377
  >
17135
- ${icon}
17378
+ ${icon2}
17136
17379
  ${textContent}
17137
17380
  </label>
17138
17381
  `;
@@ -17145,7 +17388,7 @@ function toggleButtonTemplate(component) {
17145
17388
  aria-label=${ariaLabel}
17146
17389
  @click=${component._handleButtonClick}
17147
17390
  >
17148
- ${icon}
17391
+ ${icon2}
17149
17392
  ${textContent}
17150
17393
  </button>
17151
17394
  `;
@@ -20115,7 +20358,7 @@ const heroStyles = css`
20115
20358
  (instead of aspect-ratio on the body) keeps growth content-driven
20116
20359
  rather than rigidly tied to the width. align-self: start stops the
20117
20360
  stretch fit from cancelling the ratio. */
20118
- :host([data-has-media]) .hero__body::before {
20361
+ :host([data-has-media]:not([main-width="full"])) .hero__body::before {
20119
20362
  @container (min-width: ${mdMin$c}) {
20120
20363
  content: '';
20121
20364
  aspect-ratio: 21 / 9;
@@ -20305,6 +20548,34 @@ const heroStyles = css`
20305
20548
  }
20306
20549
 
20307
20550
 
20551
+ /* # Full-width strip (md+)
20552
+ With main-width="full" the panel is a full top or bottom strip and the
20553
+ media stacks on the opposite side instead of sitting behind it — the
20554
+ overlay's absolute media would otherwise hide its own rounded corner under
20555
+ the panel. Switch the body to a column so the two blocks stack: a bottom
20556
+ panel keeps the media on top, a top panel (column-reverse) drops it below.
20557
+ The media keeps the overlay's 21/9 strip. Below sm every layout already
20558
+ stacks, so this only targets md and up. The rounded corner still follows
20559
+ data-media-corner — resolved to the strip's outer edge in hero.ts — so the
20560
+ per-corner body rules above keep painting it. */
20561
+
20562
+ @container (min-width: ${mdMin$c}) {
20563
+ :host([data-has-media][main-width="full"]) .hero__body {
20564
+ display: flex;
20565
+ flex-direction: column;
20566
+ }
20567
+
20568
+ :host([data-has-media][main-width="full"]:is([main-position="top-left"], [main-position="top-right"])) .hero__body {
20569
+ flex-direction: column-reverse;
20570
+ }
20571
+
20572
+ :host([data-has-media][main-width="full"]) .hero__media {
20573
+ position: static;
20574
+ aspect-ratio: 21 / 9;
20575
+ }
20576
+ }
20577
+
20578
+
20308
20579
  /* # Mobile — stack media over a full-width cornerless panel.
20309
20580
  Placed after the corner rules so the equal-specificity zero-out
20310
20581
  wins on source order. */
@@ -20405,9 +20676,14 @@ let NLDDHero = class extends PageSectionMixin(LitElement) {
20405
20676
  willUpdate(changed) {
20406
20677
  super.willUpdate(changed);
20407
20678
  const position = AUTO_CORNER[this.mainPosition] ? this.mainPosition : "bottom-left";
20408
- const mediaCorner = this.mediaCorner !== "auto" ? this.mediaCorner : AUTO_CORNER[position];
20409
- this.setAttribute("data-media-corner", mediaCorner);
20410
20679
  const edge = position === "left" || position === "right";
20680
+ let mediaCorner = this.mediaCorner !== "auto" ? this.mediaCorner : AUTO_CORNER[position];
20681
+ if (this.mainWidth === "full" && this._hasMedia && !edge) {
20682
+ const panelAtTop = position === "top-left" || position === "top-right";
20683
+ const side = mediaCorner.endsWith("left") ? "left" : "right";
20684
+ mediaCorner = `${panelAtTop ? "bottom" : "top"}-${side}`;
20685
+ }
20686
+ this.setAttribute("data-media-corner", mediaCorner);
20411
20687
  const mainCorner = !this._hasMedia || edge || this.mainWidth === "full" ? null : MAIN_CORNER[position];
20412
20688
  this.setAttribute("data-main-corner", mainCorner ?? "none");
20413
20689
  this.toggleAttribute("data-has-media", this._hasMedia);
@@ -27279,15 +27555,6 @@ const menuBarItemStyles = css`
27279
27555
  display: none;
27280
27556
  }
27281
27557
  `;
27282
- function sanitizeUrl(url) {
27283
- if (!url) return null;
27284
- const trimmed = url.replace(/^[\s\u00A0\u200B\u2028\u2029]+|[\s\u00A0\u200B\u2028\u2029]+$/g, "").replace(/[\0\t\n\r]/g, "");
27285
- const lower = trimmed.toLowerCase();
27286
- if (lower.startsWith("javascript:") || lower.startsWith("data:") || lower.startsWith("vbscript:") || lower.startsWith("blob:")) {
27287
- return null;
27288
- }
27289
- return trimmed;
27290
- }
27291
27558
  function template$4(component) {
27292
27559
  const safeHref = sanitizeUrl(component.href);
27293
27560
  const isLink = Boolean(safeHref);
@@ -28640,6 +28907,8 @@ let NLDDTopNavigationBar = class extends withTranslations(LitElement, nlddTopNav
28640
28907
  this.backText = "";
28641
28908
  this._globalMenuSheet = null;
28642
28909
  this._globalMenuSheetList = null;
28910
+ this._globalMenuSheetTitleBar = null;
28911
+ this._sheetStack = [];
28643
28912
  this._resizeObserver = null;
28644
28913
  this._compactRAF = null;
28645
28914
  this._setupRAF = null;
@@ -28680,6 +28949,12 @@ let NLDDTopNavigationBar = class extends withTranslations(LitElement, nlddTopNav
28680
28949
  this._syncCompactAttribute();
28681
28950
  });
28682
28951
  };
28952
+ this._onSheetBack = () => {
28953
+ if (this._sheetStack.length <= 1) return;
28954
+ const openerText = this._sheetStack[this._sheetStack.length - 1].title;
28955
+ this._sheetStack.pop();
28956
+ this._renderSheetLevel(true, openerText);
28957
+ };
28683
28958
  this._onMenuButtonClick = async () => {
28684
28959
  if (!this._globalMenuSheet) {
28685
28960
  try {
@@ -28698,7 +28973,7 @@ let NLDDTopNavigationBar = class extends withTranslations(LitElement, nlddTopNav
28698
28973
  if (menuButtonItem) menuButtonItem.expanded = false;
28699
28974
  });
28700
28975
  }
28701
- this._syncGlobalMenuSheetItems();
28976
+ this._resetSheetToRoot();
28702
28977
  requestAnimationFrame(() => {
28703
28978
  this._globalMenuSheet?.show();
28704
28979
  });
@@ -28718,9 +28993,12 @@ let NLDDTopNavigationBar = class extends withTranslations(LitElement, nlddTopNav
28718
28993
  willUpdate(changed) {
28719
28994
  super.willUpdate(changed);
28720
28995
  if (changed.has("translations")) {
28721
- this._globalMenuSheet?.setAttribute("accessible-label", this._t("components.top-navigation-bar.menu-action"));
28722
- this._globalMenuSheet?.querySelector("nldd-top-title-bar")?.setAttribute("text", this._menuText);
28723
- this._globalMenuSheet?.querySelector("nldd-top-title-bar")?.setAttribute("dismiss-text", this._t("components.top-navigation-bar.menu-sheet-dismiss-action"));
28996
+ this._globalMenuSheet?.setAttribute("accessible-label", this._menuText);
28997
+ this._globalMenuSheetTitleBar?.setAttribute("dismiss-text", this._t("components.top-navigation-bar.menu-sheet-dismiss-action"));
28998
+ if (this._sheetStack.length > 0) {
28999
+ this._sheetStack[0].title = this._menuText;
29000
+ this._renderSheetLevel();
29001
+ }
28724
29002
  this._syncSlottedMenuBarLabels();
28725
29003
  }
28726
29004
  }
@@ -28776,6 +29054,8 @@ let NLDDTopNavigationBar = class extends withTranslations(LitElement, nlddTopNav
28776
29054
  this._globalMenuSheet?.remove();
28777
29055
  this._globalMenuSheet = null;
28778
29056
  this._globalMenuSheetList = null;
29057
+ this._globalMenuSheetTitleBar = null;
29058
+ this._sheetStack = [];
28779
29059
  }
28780
29060
  firstUpdated() {
28781
29061
  this._syncHasGlobalItems();
@@ -28844,7 +29124,9 @@ let NLDDTopNavigationBar = class extends withTranslations(LitElement, nlddTopNav
28844
29124
  Promise.resolve().then(() => topTitleBar),
28845
29125
  Promise.resolve().then(() => list),
28846
29126
  Promise.resolve().then(() => listItem),
28847
- Promise.resolve().then(() => textCell)
29127
+ Promise.resolve().then(() => textCell),
29128
+ Promise.resolve().then(() => iconCell),
29129
+ Promise.resolve().then(() => icon)
28848
29130
  ]);
28849
29131
  }
28850
29132
  _createGlobalMenuSheet() {
@@ -28855,8 +29137,9 @@ let NLDDTopNavigationBar = class extends withTranslations(LitElement, nlddTopNav
28855
29137
  page2.setAttribute("sticky-header", "");
28856
29138
  const titleBar = document.createElement("nldd-top-title-bar");
28857
29139
  titleBar.setAttribute("slot", "header");
28858
- titleBar.setAttribute("text", this._menuText);
28859
29140
  titleBar.setAttribute("dismiss-text", this._t("components.top-navigation-bar.menu-sheet-dismiss-action"));
29141
+ titleBar.addEventListener("back", this._onSheetBack);
29142
+ this._globalMenuSheetTitleBar = titleBar;
28860
29143
  page2.appendChild(titleBar);
28861
29144
  const section = document.createElement("nldd-simple-section");
28862
29145
  this._globalMenuSheetList = document.createElement("nldd-list");
@@ -28868,28 +29151,93 @@ let NLDDTopNavigationBar = class extends withTranslations(LitElement, nlddTopNav
28868
29151
  document.body.appendChild(sheet2);
28869
29152
  return sheet2;
28870
29153
  }
28871
- _syncGlobalMenuSheetItems() {
28872
- if (!this._globalMenuSheetList) return;
28873
- this._globalMenuSheetList.replaceChildren();
28874
- const items = this._getSlottedItems(this._globalSlot);
28875
- for (const item of items) {
29154
+ /** Reset the sheet to its root level (the global menu-bar) and render it.
29155
+ * Called every time the sheet opens, so a reopened sheet always starts at
29156
+ * the top regardless of where the user drilled to last time. */
29157
+ _resetSheetToRoot() {
29158
+ this._sheetStack = [{ title: this._menuText, container: this._getSlottedMenuBar(this._globalSlot) }];
29159
+ this._renderSheetLevel();
29160
+ }
29161
+ /** Read the rows for a level from its container — the global menu-bar's
29162
+ * menu-bar-items at the root, or a submenu's menu-items deeper in. */
29163
+ _readSheetEntries(container) {
29164
+ if (!container) return [];
29165
+ if (container.tagName === "NLDD-MENU-BAR") {
29166
+ const items2 = Array.from(container.querySelectorAll(":scope > nldd-menu-bar-item"));
29167
+ return items2.map((item) => ({
29168
+ text: item.text,
29169
+ href: sanitizeUrl(item.href) ?? "",
29170
+ selected: item.current,
29171
+ submenu: item.querySelector(":scope > nldd-menu"),
29172
+ activate: () => item.click()
29173
+ }));
29174
+ }
29175
+ const items = Array.from(
29176
+ container.querySelectorAll(":scope > nldd-menu-item, :scope > nldd-menu-group > nldd-menu-item")
29177
+ );
29178
+ return items.map((item) => ({
29179
+ text: item.text || item.getAttribute("text") || "",
29180
+ href: sanitizeUrl(item.href || "") ?? "",
29181
+ selected: item.hasAttribute("selected"),
29182
+ submenu: item.querySelector(":scope > nldd-menu"),
29183
+ // A leaf menu-item's own click would call hidePopover() on its
29184
+ // (closed) submenu and throw; dispatch the same `select` event it
29185
+ // fires instead, so consumer listeners react without the popover call.
29186
+ activate: () => item.dispatchEvent(new CustomEvent("select", { bubbles: true, composed: true }))
29187
+ }));
29188
+ }
29189
+ /** Render the current (top-of-stack) level into the sheet: update the title
29190
+ * bar (title + back button) and rebuild the list. Pass `moveFocus` after a
29191
+ * drill or back so focus lands on the new level's first row. */
29192
+ _renderSheetLevel(moveFocus = false, focusOpenerText) {
29193
+ const list2 = this._globalMenuSheetList;
29194
+ const titleBar = this._globalMenuSheetTitleBar;
29195
+ if (!list2 || !titleBar || this._sheetStack.length === 0) return;
29196
+ const depth = this._sheetStack.length;
29197
+ const level = this._sheetStack[depth - 1];
29198
+ titleBar.setAttribute("text", level.title);
29199
+ if (depth > 1) {
29200
+ titleBar.setAttribute("back-text", this._sheetStack[depth - 2].title);
29201
+ } else {
29202
+ titleBar.removeAttribute("back-text");
29203
+ }
29204
+ list2.replaceChildren();
29205
+ let openerItem = null;
29206
+ for (const entry of this._readSheetEntries(level.container)) {
28876
29207
  const listItem2 = document.createElement("nldd-list-item");
28877
- const safeHref = sanitizeUrl(item.href);
28878
- if (safeHref) {
28879
- listItem2.setAttribute("type", "link");
28880
- listItem2.setAttribute("href", safeHref);
28881
- } else {
28882
- listItem2.setAttribute("type", "button");
28883
- }
28884
- if (item.current) listItem2.setAttribute("selected", "");
28885
29208
  const textCell2 = document.createElement("nldd-text-cell");
28886
- textCell2.setAttribute("text", item.text);
29209
+ textCell2.setAttribute("text", entry.text);
28887
29210
  listItem2.appendChild(textCell2);
28888
- listItem2.addEventListener("click", () => {
28889
- if (!safeHref) item.click();
28890
- this._globalMenuSheet?.hide();
29211
+ if (entry.submenu) {
29212
+ listItem2.setAttribute("button", "");
29213
+ const chevron = document.createElement("nldd-icon-cell");
29214
+ chevron.setAttribute("slot", "end");
29215
+ chevron.setAttribute("icon", "chevron-right-small");
29216
+ listItem2.appendChild(chevron);
29217
+ const { text, submenu } = entry;
29218
+ listItem2.addEventListener("click", () => {
29219
+ this._sheetStack.push({ title: text, container: submenu });
29220
+ this._renderSheetLevel(true);
29221
+ });
29222
+ } else if (entry.href) {
29223
+ listItem2.setAttribute("href", entry.href);
29224
+ listItem2.addEventListener("click", () => this._globalMenuSheet?.hide());
29225
+ } else {
29226
+ listItem2.setAttribute("button", "");
29227
+ const { activate } = entry;
29228
+ listItem2.addEventListener("click", () => {
29229
+ activate();
29230
+ this._globalMenuSheet?.hide();
29231
+ });
29232
+ }
29233
+ if (entry.selected) listItem2.setAttribute("selected", "");
29234
+ if (focusOpenerText !== void 0 && entry.text === focusOpenerText) openerItem = listItem2;
29235
+ list2.appendChild(listItem2);
29236
+ }
29237
+ if (moveFocus) {
29238
+ requestAnimationFrame(() => {
29239
+ (openerItem ?? list2.querySelector("nldd-list-item"))?.focus();
28891
29240
  });
28892
- this._globalMenuSheetList.appendChild(listItem2);
28893
29241
  }
28894
29242
  }
28895
29243
  // ## Render