@vonage/vivid 3.25.0 → 3.26.0

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 (120) hide show
  1. package/accordion/index.js +0 -1
  2. package/accordion-item/index.js +0 -1
  3. package/alert/index.js +0 -1
  4. package/avatar/index.js +0 -1
  5. package/badge/index.js +0 -1
  6. package/banner/index.js +0 -1
  7. package/breadcrumb-item/index.js +0 -1
  8. package/button/index.js +0 -1
  9. package/card/index.js +0 -1
  10. package/checkbox/index.js +0 -1
  11. package/combobox/index.js +0 -1
  12. package/custom-elements.json +35 -1
  13. package/data-grid/index.js +7 -2
  14. package/dialog/index.js +0 -1
  15. package/empty-state/index.js +0 -1
  16. package/fab/index.js +0 -1
  17. package/icon/index.js +0 -1
  18. package/index.js +27 -29
  19. package/lib/components.d.ts +0 -2
  20. package/lib/data-grid/data-grid-cell.d.ts +14 -1
  21. package/lib/data-grid/data-grid.options.d.ts +7 -0
  22. package/listbox/index.js +56 -11
  23. package/menu/index.js +2 -3
  24. package/menu-item/index.js +1 -2
  25. package/nav/index.js +1 -1
  26. package/nav-disclosure/index.js +1 -2
  27. package/nav-item/index.js +1 -2
  28. package/note/index.js +1 -2
  29. package/number-field/index.js +1 -2
  30. package/option/index.js +0 -1
  31. package/package.json +1 -1
  32. package/pagination/index.js +1 -2
  33. package/popup/index.js +0 -1
  34. package/progress/index.js +1 -1
  35. package/radio/index.js +1 -1
  36. package/radio-group/index.js +1 -1
  37. package/select/index.js +1 -2
  38. package/shared/definition.js +1 -1
  39. package/shared/definition10.js +1 -1
  40. package/shared/definition11.js +1 -1
  41. package/shared/definition12.js +1 -1
  42. package/shared/definition14.js +1 -1
  43. package/shared/definition15.js +1 -1
  44. package/shared/definition16.js +2 -2
  45. package/shared/definition17.js +1 -1
  46. package/shared/definition18.js +1 -1
  47. package/shared/definition19.js +1 -1
  48. package/shared/definition2.js +1 -1
  49. package/shared/definition21.js +1 -1
  50. package/shared/definition22.js +68 -21
  51. package/shared/definition23.js +1 -1
  52. package/shared/definition24.js +1 -1
  53. package/shared/definition25.js +1 -1
  54. package/shared/definition26.js +1 -1
  55. package/shared/definition27.js +1 -1
  56. package/shared/definition29.js +368 -48
  57. package/shared/definition30.js +301 -296
  58. package/shared/definition31.js +14 -376
  59. package/shared/definition32.js +70 -13
  60. package/shared/definition33.js +25 -66
  61. package/shared/definition34.js +39 -27
  62. package/shared/definition35.js +431 -31
  63. package/shared/definition36.js +214 -430
  64. package/shared/definition37.js +70 -209
  65. package/shared/definition38.js +33 -81
  66. package/shared/definition39.js +423 -32
  67. package/shared/definition4.js +1 -1
  68. package/shared/definition40.js +586 -358
  69. package/shared/definition41.js +73 -648
  70. package/shared/definition42.js +584 -70
  71. package/shared/definition43.js +81 -538
  72. package/shared/definition44.js +52 -127
  73. package/shared/definition45.js +16 -56
  74. package/shared/definition46.js +485 -17
  75. package/shared/definition47.js +99 -477
  76. package/shared/definition48.js +19 -114
  77. package/shared/definition49.js +276 -19
  78. package/shared/definition5.js +1 -1
  79. package/shared/definition50.js +89 -245
  80. package/shared/definition51.js +627 -118
  81. package/shared/definition52.js +86 -601
  82. package/shared/definition53.js +68 -112
  83. package/shared/definition54.js +294 -69
  84. package/shared/definition6.js +1 -1
  85. package/shared/definition7.js +1 -1
  86. package/shared/definition8.js +1 -1
  87. package/shared/definition9.js +1 -1
  88. package/shared/es.object.assign.js +1 -1
  89. package/shared/es.regexp.to-string.js +1 -1
  90. package/shared/es.string.includes.js +1 -1
  91. package/shared/form-elements.js +1 -1
  92. package/shared/icon.js +17 -13
  93. package/shared/index.js +1 -1
  94. package/shared/patterns/form-elements/form-elements.d.ts +4 -4
  95. package/shared/string-trim.js +1 -1
  96. package/shared/text-field.js +1 -1
  97. package/shared/to-string.js +1 -1
  98. package/side-drawer/index.js +1 -1
  99. package/slider/index.js +1 -1
  100. package/styles/core/all.css +1 -1
  101. package/styles/core/theme.css +1 -1
  102. package/styles/core/typography.css +1 -1
  103. package/styles/tokens/theme-dark.css +4 -4
  104. package/styles/tokens/theme-light.css +4 -4
  105. package/switch/index.js +1 -2
  106. package/tab/index.js +1 -2
  107. package/tab-panel/index.js +1 -1
  108. package/tabs/index.js +3 -4
  109. package/tag/index.js +1 -2
  110. package/tag-group/index.js +1 -1
  111. package/text-anchor/index.js +0 -1
  112. package/text-area/index.js +1 -2
  113. package/text-field/index.js +1 -2
  114. package/toggletip/index.js +1 -2
  115. package/tooltip/index.js +1 -2
  116. package/tree-item/index.js +1 -2
  117. package/tree-view/index.js +1 -1
  118. package/vivid.api.json +0 -191
  119. package/shared/definition55.js +0 -305
  120. package/shared/engine-is-node.js +0 -8
@@ -51,7 +51,7 @@ __decorate([
51
51
  attr
52
52
  ], Divider$1.prototype, "orientation", void 0);
53
53
 
54
- var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 20 Jul 2023 11:19:49 GMT\n */\n:host {\n display: block;\n}\n\n.base {\n display: block;\n background-color: var(--vvd-color-neutral-200);\n}\n.base:not(.vertical) {\n block-size: 1px;\n inline-size: 100%;\n}\n.base.vertical {\n block-size: 100%;\n inline-size: 1px;\n}";
54
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 25 Jul 2023 07:38:24 GMT\n */\n:host {\n display: block;\n}\n\n.base {\n display: block;\n background-color: var(--vvd-color-neutral-200);\n}\n.base:not(.vertical) {\n block-size: 1px;\n inline-size: 100%;\n}\n.base.vertical {\n block-size: 100%;\n inline-size: 1px;\n}";
55
55
 
56
56
  class Divider extends Divider$1 {}
57
57
 
@@ -5,7 +5,7 @@ import { s as slotted } from './slotted.js';
5
5
  import { w as when } from './when.js';
6
6
  import { c as classNames } from './class-names.js';
7
7
 
8
- var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 20 Jul 2023 11:19:49 GMT\n */\n:host {\n display: block;\n}\n\n.base {\n display: flex;\n box-sizing: border-box;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n block-size: 100%;\n gap: 24px;\n}\n\n.icon-container {\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--vvd-color-neutral-100);\n block-size: 120px;\n border-radius: 50%;\n inline-size: 120px;\n}\n\n.content {\n display: flex;\n flex-direction: column;\n font: var(--vvd-typography-base);\n gap: 8px;\n text-align: center;\n}\n\nheader {\n font: var(--vvd-typography-base-bold);\n}\n\n.actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n.base.no-actions .actions {\n display: none;\n}";
8
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 25 Jul 2023 07:38:24 GMT\n */\n:host {\n display: block;\n}\n\n.base {\n display: flex;\n box-sizing: border-box;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n block-size: 100%;\n gap: 24px;\n}\n\n.icon-container {\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--vvd-color-neutral-100);\n block-size: 120px;\n border-radius: 50%;\n inline-size: 120px;\n}\n\n.content {\n display: flex;\n flex-direction: column;\n font: var(--vvd-typography-base);\n gap: 8px;\n text-align: center;\n}\n\nheader {\n font: var(--vvd-typography-base-bold);\n}\n\n.actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n.base.no-actions .actions {\n display: none;\n}";
9
9
 
10
10
  class EmptyState extends FoundationElement {}
11
11
  __decorate([attr, __metadata("design:type", String)], EmptyState.prototype, "headline", void 0);
@@ -8,7 +8,7 @@ import { f as focusTemplateFactory } from './focus2.js';
8
8
  import { r as ref } from './ref.js';
9
9
  import { c as classNames } from './class-names.js';
10
10
 
11
- var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 20 Jul 2023 11:19:49 GMT\n */\n.control {\n position: relative;\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n border: 0 none;\n background: var(--_appearance-color-fill, var(--_elevation-fill));\n block-size: var(--_fab-block-size);\n border-radius: var(--_fab-border-radius);\n color: var(--_appearance-color-text, var(--vvd-color-canvas-text));\n column-gap: var(--fab-icon-gap);\n filter: var(--_elevation-shadow);\n font: var(--vvd-typography-base-bold);\n transition: background-color 0.15s linear, filter 0.15s linear;\n vertical-align: middle;\n /* Size */\n}\n.control.connotation-accent {\n /* @cssprop [--vvd-fab-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-fab-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-fab-accent-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-fab-accent-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-fab-accent-primary-increment=var(--vvd-color-neutral-800)] */\n --_connotation-color-primary-increment: var(--vvd-fab-accent-primary-increment, var(--vvd-color-neutral-800));\n /* @cssprop [--vvd-fab-accent-contrast=var(--vvd-color-neutral-800)] */\n --_connotation-color-contrast: var(--vvd-fab-accent-contrast, var(--vvd-color-neutral-800));\n /* @cssprop [--vvd-fab-accent-fierce=var(--vvd-color-neutral-700)] */\n --_connotation-color-fierce: var(--vvd-fab-accent-fierce, var(--vvd-color-neutral-700));\n /* @cssprop [--vvd-fab-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-fab-accent-firm, var(--vvd-color-canvas-text));\n}\n.control.connotation-cta {\n /* @cssprop [--vvd-fab-cta-primary=var(--vvd-color-cta-500)] */\n --_connotation-color-primary: var(--vvd-fab-cta-primary, var(--vvd-color-cta-500));\n /* @cssprop [--vvd-fab-cta-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-fab-cta-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-fab-cta-primary-increment=var(--vvd-color-cta-600)] */\n --_connotation-color-primary-increment: var(--vvd-fab-cta-primary-increment, var(--vvd-color-cta-600));\n /* @cssprop [--vvd-fab-cta-contrast=var(--vvd-color-cta-800)] */\n --_connotation-color-contrast: var(--vvd-fab-cta-contrast, var(--vvd-color-cta-800));\n /* @cssprop [--vvd-fab-cta-fierce=var(--vvd-color-cta-700)] */\n --_connotation-color-fierce: var(--vvd-fab-cta-fierce, var(--vvd-color-cta-700));\n /* @cssprop [--vvd-fab-cta-firm=var(--vvd-color-cta-600)] */\n --_connotation-color-firm: var(--vvd-fab-cta-firm, var(--vvd-color-cta-600));\n}\n.control {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transparent;\n}\n.control:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary-increment);\n --_appearance-color-outline: transparent;\n}\n.control:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: var(--vvd-color-neutral-100);\n --_appearance-color-outline: transparent;\n}\n.control:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-fierce);\n --_appearance-color-outline: transparent;\n}\n@supports selector(:focus-visible) {\n .control:focus {\n outline: none;\n }\n}\n@supports (user-select: none) {\n .control {\n user-select: none;\n }\n}\n.control.size-expanded {\n --_fab-border-radius: 30px;\n --_fab-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 16));\n}\n.control:not(.size-expanded) {\n --_fab-border-radius: 24px;\n --_fab-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n}\n.control.icon-only {\n border-radius: 50%;\n padding-inline: 0;\n place-content: center;\n}\n@supports (aspect-ratio: 1) {\n .control.icon-only {\n aspect-ratio: 1;\n }\n}\n@supports not (aspect-ratio: 1) {\n .control.icon-only {\n inline-size: var(--_fab-block-size);\n }\n}\n.control:not(.icon-only) {\n --fab-icon-gap: 10px;\n padding-inline: 20px;\n}\n.control:disabled {\n --_elevation-fill: var(--vvd-color-surface-0dp);\n --_elevation-shadow: var(--vvd-shadow-surface-0dp);\n cursor: not-allowed;\n}\n.control:not(:disabled) {\n --_elevation-fill: var(--vvd-color-surface-4dp);\n --_elevation-shadow: var(--vvd-shadow-surface-4dp);\n cursor: pointer;\n}\n.control:not(:disabled):hover {\n --_elevation-fill: var(--vvd-color-surface-12dp);\n --_elevation-shadow: var(--vvd-shadow-surface-12dp);\n}\n.control:not(:disabled):active {\n --_elevation-fill: var(--vvd-color-surface-24dp);\n --_elevation-shadow: var(--vvd-shadow-surface-24dp);\n}\n\n/* Icon */\n.icon {\n line-height: 1;\n}\n.icon-trailing .icon {\n order: 1;\n}\n.control.size-extended .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 16)) / 2.3333);\n}\n.control:not(.size-extended) .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) / 2);\n}\n\n:not(:focus-visible) .focus-indicator {\n display: none;\n}";
11
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 25 Jul 2023 07:38:24 GMT\n */\n.control {\n position: relative;\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n border: 0 none;\n background: var(--_appearance-color-fill, var(--_elevation-fill));\n block-size: var(--_fab-block-size);\n border-radius: var(--_fab-border-radius);\n color: var(--_appearance-color-text, var(--vvd-color-canvas-text));\n column-gap: var(--fab-icon-gap);\n filter: var(--_elevation-shadow);\n font: var(--vvd-typography-base-bold);\n transition: background-color 0.15s linear, filter 0.15s linear;\n vertical-align: middle;\n /* Size */\n}\n.control.connotation-accent {\n /* @cssprop [--vvd-fab-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-fab-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-fab-accent-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-fab-accent-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-fab-accent-primary-increment=var(--vvd-color-neutral-800)] */\n --_connotation-color-primary-increment: var(--vvd-fab-accent-primary-increment, var(--vvd-color-neutral-800));\n /* @cssprop [--vvd-fab-accent-contrast=var(--vvd-color-neutral-800)] */\n --_connotation-color-contrast: var(--vvd-fab-accent-contrast, var(--vvd-color-neutral-800));\n /* @cssprop [--vvd-fab-accent-fierce=var(--vvd-color-neutral-700)] */\n --_connotation-color-fierce: var(--vvd-fab-accent-fierce, var(--vvd-color-neutral-700));\n /* @cssprop [--vvd-fab-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-fab-accent-firm, var(--vvd-color-canvas-text));\n}\n.control.connotation-cta {\n /* @cssprop [--vvd-fab-cta-primary=var(--vvd-color-cta-500)] */\n --_connotation-color-primary: var(--vvd-fab-cta-primary, var(--vvd-color-cta-500));\n /* @cssprop [--vvd-fab-cta-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-fab-cta-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-fab-cta-primary-increment=var(--vvd-color-cta-600)] */\n --_connotation-color-primary-increment: var(--vvd-fab-cta-primary-increment, var(--vvd-color-cta-600));\n /* @cssprop [--vvd-fab-cta-contrast=var(--vvd-color-cta-800)] */\n --_connotation-color-contrast: var(--vvd-fab-cta-contrast, var(--vvd-color-cta-800));\n /* @cssprop [--vvd-fab-cta-fierce=var(--vvd-color-cta-700)] */\n --_connotation-color-fierce: var(--vvd-fab-cta-fierce, var(--vvd-color-cta-700));\n /* @cssprop [--vvd-fab-cta-firm=var(--vvd-color-cta-600)] */\n --_connotation-color-firm: var(--vvd-fab-cta-firm, var(--vvd-color-cta-600));\n}\n.control {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transparent;\n}\n.control:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary-increment);\n --_appearance-color-outline: transparent;\n}\n.control:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: var(--vvd-color-neutral-100);\n --_appearance-color-outline: transparent;\n}\n.control:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-fierce);\n --_appearance-color-outline: transparent;\n}\n@supports selector(:focus-visible) {\n .control:focus {\n outline: none;\n }\n}\n@supports (user-select: none) {\n .control {\n user-select: none;\n }\n}\n.control.size-expanded {\n --_fab-border-radius: 30px;\n --_fab-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 16));\n}\n.control:not(.size-expanded) {\n --_fab-border-radius: 24px;\n --_fab-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n}\n.control.icon-only {\n border-radius: 50%;\n padding-inline: 0;\n place-content: center;\n}\n@supports (aspect-ratio: 1) {\n .control.icon-only {\n aspect-ratio: 1;\n }\n}\n@supports not (aspect-ratio: 1) {\n .control.icon-only {\n inline-size: var(--_fab-block-size);\n }\n}\n.control:not(.icon-only) {\n --fab-icon-gap: 10px;\n padding-inline: 20px;\n}\n.control:disabled {\n --_elevation-fill: var(--vvd-color-surface-0dp);\n --_elevation-shadow: var(--vvd-shadow-surface-0dp);\n cursor: not-allowed;\n}\n.control:not(:disabled) {\n --_elevation-fill: var(--vvd-color-surface-4dp);\n --_elevation-shadow: var(--vvd-shadow-surface-4dp);\n cursor: pointer;\n}\n.control:not(:disabled):hover {\n --_elevation-fill: var(--vvd-color-surface-12dp);\n --_elevation-shadow: var(--vvd-shadow-surface-12dp);\n}\n.control:not(:disabled):active {\n --_elevation-fill: var(--vvd-color-surface-24dp);\n --_elevation-shadow: var(--vvd-shadow-surface-24dp);\n}\n\n/* Icon */\n.icon {\n line-height: 1;\n}\n.icon-trailing .icon {\n order: 1;\n}\n.control.size-extended .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 16)) / 2.3333);\n}\n.control:not(.size-extended) .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) / 2);\n}\n\n:not(:focus-visible) .focus-indicator {\n display: none;\n}";
12
12
 
13
13
  class Fab extends Button {}
14
14
  __decorate([attr, __metadata("design:type", String)], Fab.prototype, "connotation", void 0);
@@ -2,7 +2,7 @@ import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h
2
2
  import { E as Elevation, e as elevationRegistries } from './definition8.js';
3
3
  import { c as classNames } from './class-names.js';
4
4
 
5
- var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 20 Jul 2023 11:19:49 GMT\n */\n.base {\n z-index: 1;\n block-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) + calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16)));\n font: var(--vvd-typography-heading-4);\n inline-size: 100%;\n}\n.base .header-content {\n display: inline-flex;\n align-items: center;\n column-gap: 4px;\n}\n\n.container {\n display: flex;\n box-sizing: border-box;\n justify-content: space-between;\n background-color: var(--header-bg-color, var(--vvd-color-canvas));\n block-size: inherit;\n color: var(--vvd-color-canvas-text);\n column-gap: 12px;\n padding-block: 8px;\n padding-inline: 16px;\n}\n.container[part~=vvd-theme-alternate] {\n color-scheme: var(--vvd-color-scheme);\n}\n\n.app-content {\n --vvd-header-block-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) + calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16)));\n}";
5
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 25 Jul 2023 07:38:24 GMT\n */\n.base {\n z-index: 1;\n block-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) + calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16)));\n font: var(--vvd-typography-heading-4);\n inline-size: 100%;\n}\n.base .header-content {\n display: inline-flex;\n align-items: center;\n column-gap: 4px;\n}\n\n.container {\n display: flex;\n box-sizing: border-box;\n justify-content: space-between;\n background-color: var(--header-bg-color, var(--vvd-color-canvas));\n block-size: inherit;\n color: var(--vvd-color-canvas-text);\n column-gap: 12px;\n padding-block: 8px;\n padding-inline: 16px;\n}\n.container[part~=vvd-theme-alternate] {\n color-scheme: var(--vvd-color-scheme);\n}\n\n.app-content {\n --vvd-header-block-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) + calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16)));\n}";
6
6
 
7
7
  class Header extends FoundationElement {
8
8
  constructor() {
@@ -1,58 +1,378 @@
1
- import { h as html, r as registerFactory } from './index.js';
2
- import { f as focusRegistries } from './definition4.js';
3
- import { l as listboxOptionRegistries } from './definition21.js';
4
- import { b as ListboxElement, a as Listbox } from './listbox.js';
5
- import './affix.js';
6
- import { f as focusTemplateFactory } from './focus2.js';
7
- import './form-elements.js';
1
+ import { F as FoundationElement, Y as DOM, _ as __decorate, o as observable, V as __classPrivateFieldGet, a as attr, b as __metadata, h as html, r as registerFactory } from './index.js';
2
+ import { P as Popup, p as popupRegistries } from './definition20.js';
3
+ import { M as MenuItem, a as MenuItemRole, r as roleForMenuItem, m as menuItemRegistries } from './definition30.js';
4
+ import { i as isHTMLElement } from './dom.js';
5
+ import { a as keyHome, k as keyEnd, c as keyArrowUp, b as keyArrowDown } from './key-codes.js';
8
6
  import { s as slotted } from './slotted.js';
9
- import { c as classNames } from './class-names.js';
7
+ import { r as ref } from './ref.js';
8
+
9
+ /**
10
+ * A Menu Custom HTML Element.
11
+ * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#menu | ARIA menu }.
12
+ *
13
+ * @slot - The default slot for the menu items
14
+ *
15
+ * @public
16
+ */
17
+ class Menu$1 extends FoundationElement {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.expandedItem = null;
21
+ /**
22
+ * The index of the focusable element in the items array
23
+ * defaults to -1
24
+ */
25
+ this.focusIndex = -1;
26
+ /**
27
+ * @internal
28
+ */
29
+ this.isNestedMenu = () => {
30
+ return (this.parentElement !== null &&
31
+ isHTMLElement(this.parentElement) &&
32
+ this.parentElement.getAttribute("role") === "menuitem");
33
+ };
34
+ /**
35
+ * if focus is moving out of the menu, reset to a stable initial state
36
+ * @internal
37
+ */
38
+ this.handleFocusOut = (e) => {
39
+ if (!this.contains(e.relatedTarget) && this.menuItems !== undefined) {
40
+ this.collapseExpandedItem();
41
+ // find our first focusable element
42
+ const focusIndex = this.menuItems.findIndex(this.isFocusableElement);
43
+ // set the current focus index's tabindex to -1
44
+ this.menuItems[this.focusIndex].setAttribute("tabindex", "-1");
45
+ // set the first focusable element tabindex to 0
46
+ this.menuItems[focusIndex].setAttribute("tabindex", "0");
47
+ // set the focus index
48
+ this.focusIndex = focusIndex;
49
+ }
50
+ };
51
+ this.handleItemFocus = (e) => {
52
+ const targetItem = e.target;
53
+ if (this.menuItems !== undefined &&
54
+ targetItem !== this.menuItems[this.focusIndex]) {
55
+ this.menuItems[this.focusIndex].setAttribute("tabindex", "-1");
56
+ this.focusIndex = this.menuItems.indexOf(targetItem);
57
+ targetItem.setAttribute("tabindex", "0");
58
+ }
59
+ };
60
+ this.handleExpandedChanged = (e) => {
61
+ if (e.defaultPrevented ||
62
+ e.target === null ||
63
+ this.menuItems === undefined ||
64
+ this.menuItems.indexOf(e.target) < 0) {
65
+ return;
66
+ }
67
+ e.preventDefault();
68
+ const changedItem = e.target;
69
+ // closing an expanded item without opening another
70
+ if (this.expandedItem !== null &&
71
+ changedItem === this.expandedItem &&
72
+ changedItem.expanded === false) {
73
+ this.expandedItem = null;
74
+ return;
75
+ }
76
+ if (changedItem.expanded) {
77
+ if (this.expandedItem !== null && this.expandedItem !== changedItem) {
78
+ this.expandedItem.expanded = false;
79
+ }
80
+ this.menuItems[this.focusIndex].setAttribute("tabindex", "-1");
81
+ this.expandedItem = changedItem;
82
+ this.focusIndex = this.menuItems.indexOf(changedItem);
83
+ changedItem.setAttribute("tabindex", "0");
84
+ }
85
+ };
86
+ this.removeItemListeners = () => {
87
+ if (this.menuItems !== undefined) {
88
+ this.menuItems.forEach((item) => {
89
+ item.removeEventListener("expanded-change", this.handleExpandedChanged);
90
+ item.removeEventListener("focus", this.handleItemFocus);
91
+ });
92
+ }
93
+ };
94
+ this.setItems = () => {
95
+ const newItems = this.domChildren();
96
+ this.removeItemListeners();
97
+ this.menuItems = newItems;
98
+ const menuItems = this.menuItems.filter(this.isMenuItemElement);
99
+ // if our focus index is not -1 we have items
100
+ if (menuItems.length) {
101
+ this.focusIndex = 0;
102
+ }
103
+ function elementIndent(el) {
104
+ const role = el.getAttribute("role");
105
+ const startSlot = el.querySelector("[slot=start]");
106
+ if (role !== MenuItemRole.menuitem && startSlot === null) {
107
+ return 1;
108
+ }
109
+ else if (role === MenuItemRole.menuitem && startSlot !== null) {
110
+ return 1;
111
+ }
112
+ else if (role !== MenuItemRole.menuitem && startSlot !== null) {
113
+ return 2;
114
+ }
115
+ else {
116
+ return 0;
117
+ }
118
+ }
119
+ const indent = menuItems.reduce((accum, current) => {
120
+ const elementValue = elementIndent(current);
121
+ return accum > elementValue ? accum : elementValue;
122
+ }, 0);
123
+ menuItems.forEach((item, index) => {
124
+ item.setAttribute("tabindex", index === 0 ? "0" : "-1");
125
+ item.addEventListener("expanded-change", this.handleExpandedChanged);
126
+ item.addEventListener("focus", this.handleItemFocus);
127
+ if (item instanceof MenuItem) {
128
+ item.startColumnCount = indent;
129
+ }
130
+ });
131
+ };
132
+ /**
133
+ * handle change from child element
134
+ */
135
+ this.changeHandler = (e) => {
136
+ if (this.menuItems === undefined) {
137
+ return;
138
+ }
139
+ const changedMenuItem = e.target;
140
+ const changeItemIndex = this.menuItems.indexOf(changedMenuItem);
141
+ if (changeItemIndex === -1) {
142
+ return;
143
+ }
144
+ if (changedMenuItem.role === "menuitemradio" &&
145
+ changedMenuItem.checked === true) {
146
+ for (let i = changeItemIndex - 1; i >= 0; --i) {
147
+ const item = this.menuItems[i];
148
+ const role = item.getAttribute("role");
149
+ if (role === MenuItemRole.menuitemradio) {
150
+ item.checked = false;
151
+ }
152
+ if (role === "separator") {
153
+ break;
154
+ }
155
+ }
156
+ const maxIndex = this.menuItems.length - 1;
157
+ for (let i = changeItemIndex + 1; i <= maxIndex; ++i) {
158
+ const item = this.menuItems[i];
159
+ const role = item.getAttribute("role");
160
+ if (role === MenuItemRole.menuitemradio) {
161
+ item.checked = false;
162
+ }
163
+ if (role === "separator") {
164
+ break;
165
+ }
166
+ }
167
+ }
168
+ };
169
+ /**
170
+ * check if the item is a menu item
171
+ */
172
+ this.isMenuItemElement = (el) => {
173
+ return (isHTMLElement(el) &&
174
+ Menu$1.focusableElementRoles.hasOwnProperty(el.getAttribute("role")));
175
+ };
176
+ /**
177
+ * check if the item is focusable
178
+ */
179
+ this.isFocusableElement = (el) => {
180
+ return this.isMenuItemElement(el);
181
+ };
182
+ }
183
+ itemsChanged(oldValue, newValue) {
184
+ // only update children after the component is connected and
185
+ // the setItems has run on connectedCallback
186
+ // (menuItems is undefined until then)
187
+ if (this.$fastController.isConnected && this.menuItems !== undefined) {
188
+ this.setItems();
189
+ }
190
+ }
191
+ /**
192
+ * @internal
193
+ */
194
+ connectedCallback() {
195
+ super.connectedCallback();
196
+ DOM.queueUpdate(() => {
197
+ // wait until children have had a chance to
198
+ // connect before setting/checking their props/attributes
199
+ this.setItems();
200
+ });
201
+ this.addEventListener("change", this.changeHandler);
202
+ }
203
+ /**
204
+ * @internal
205
+ */
206
+ disconnectedCallback() {
207
+ super.disconnectedCallback();
208
+ this.removeItemListeners();
209
+ this.menuItems = undefined;
210
+ this.removeEventListener("change", this.changeHandler);
211
+ }
212
+ /**
213
+ * Focuses the first item in the menu.
214
+ *
215
+ * @public
216
+ */
217
+ focus() {
218
+ this.setFocus(0, 1);
219
+ }
220
+ /**
221
+ * Collapses any expanded menu items.
222
+ *
223
+ * @public
224
+ */
225
+ collapseExpandedItem() {
226
+ if (this.expandedItem !== null) {
227
+ this.expandedItem.expanded = false;
228
+ this.expandedItem = null;
229
+ }
230
+ }
231
+ /**
232
+ * @internal
233
+ */
234
+ handleMenuKeyDown(e) {
235
+ if (e.defaultPrevented || this.menuItems === undefined) {
236
+ return;
237
+ }
238
+ switch (e.key) {
239
+ case keyArrowDown:
240
+ // go forward one index
241
+ this.setFocus(this.focusIndex + 1, 1);
242
+ return;
243
+ case keyArrowUp:
244
+ // go back one index
245
+ this.setFocus(this.focusIndex - 1, -1);
246
+ return;
247
+ case keyEnd:
248
+ // set focus on last item
249
+ this.setFocus(this.menuItems.length - 1, -1);
250
+ return;
251
+ case keyHome:
252
+ // set focus on first item
253
+ this.setFocus(0, 1);
254
+ return;
255
+ default:
256
+ // if we are not handling the event, do not prevent default
257
+ return true;
258
+ }
259
+ }
260
+ /**
261
+ * get an array of valid DOM children
262
+ */
263
+ domChildren() {
264
+ return Array.from(this.children).filter(child => !child.hasAttribute("hidden"));
265
+ }
266
+ setFocus(focusIndex, adjustment) {
267
+ if (this.menuItems === undefined) {
268
+ return;
269
+ }
270
+ while (focusIndex >= 0 && focusIndex < this.menuItems.length) {
271
+ const child = this.menuItems[focusIndex];
272
+ if (this.isFocusableElement(child)) {
273
+ // change the previous index to -1
274
+ if (this.focusIndex > -1 &&
275
+ this.menuItems.length >= this.focusIndex - 1) {
276
+ this.menuItems[this.focusIndex].setAttribute("tabindex", "-1");
277
+ }
278
+ // update the focus index
279
+ this.focusIndex = focusIndex;
280
+ // update the tabindex of next focusable element
281
+ child.setAttribute("tabindex", "0");
282
+ // focus the element
283
+ child.focus();
284
+ break;
285
+ }
286
+ focusIndex += adjustment;
287
+ }
288
+ }
289
+ }
290
+ Menu$1.focusableElementRoles = roleForMenuItem;
291
+ __decorate([
292
+ observable
293
+ ], Menu$1.prototype, "items", void 0);
294
+
295
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 25 Jul 2023 07:38:24 GMT\n */\n.base {\n max-block-size: var(--menu-block-size, 408px);\n max-inline-size: var(--menu-max-inline-size, 100%);\n min-inline-size: var(--menu-min-inline-size);\n overflow-x: hidden;\n overflow-y: auto;\n padding-block: 8px;\n}\n\n::slotted(a) {\n color: var(--vvd-color-canvas-text);\n text-decoration: none;\n}\n\n::slotted(a[role=menuitem]:focus) {\n display: block;\n border-radius: 6px;\n box-shadow: inset 0 0 0 3px currentColor;\n outline: 2px solid currentColor;\n outline-offset: -2px;\n}";
296
+
297
+ var _Menu_dismissOnClickOutside;
298
+ class Menu extends Menu$1 {
299
+ constructor() {
300
+ super(...arguments);
301
+ _Menu_dismissOnClickOutside.set(this, e => {
302
+ const popup = this._popup;
303
+ if (popup.open && !this.contains(e.target)) {
304
+ popup.open = false;
305
+ }
306
+ });
307
+ this.open = false;
308
+ this.autoDismiss = false;
309
+ }
310
+ anchorChanged(prevAnchor, newAnchor) {
311
+ const prevAnchorEl = document.getElementById(prevAnchor);
312
+ const newAnchorEl = document.getElementById(newAnchor);
313
+ prevAnchorEl === null || prevAnchorEl === void 0 ? void 0 : prevAnchorEl.removeAttribute('aria-haspopup');
314
+ newAnchorEl === null || newAnchorEl === void 0 ? void 0 : newAnchorEl.setAttribute('aria-haspopup', 'menu');
315
+ }
316
+ autoDismissChanged() {
317
+ if (this.autoDismiss) {
318
+ document.addEventListener('click', __classPrivateFieldGet(this, _Menu_dismissOnClickOutside, "f"));
319
+ } else {
320
+ document.removeEventListener('click', __classPrivateFieldGet(this, _Menu_dismissOnClickOutside, "f"));
321
+ }
322
+ }
323
+ disconnectedCallback() {
324
+ super.disconnectedCallback();
325
+ if (this.autoDismiss) {
326
+ document.removeEventListener('click', __classPrivateFieldGet(this, _Menu_dismissOnClickOutside, "f"));
327
+ }
328
+ }
329
+ }
330
+ _Menu_dismissOnClickOutside = new WeakMap();
331
+ __decorate([attr({
332
+ mode: 'boolean'
333
+ }), __metadata("design:type", Object)], Menu.prototype, "open", void 0);
334
+ __decorate([attr, __metadata("design:type", String)], Menu.prototype, "placement", void 0);
335
+ __decorate([attr, __metadata("design:type", String)], Menu.prototype, "anchor", void 0);
336
+ __decorate([attr({
337
+ mode: 'boolean',
338
+ attribute: 'auto-dismiss'
339
+ }), __metadata("design:type", Object)], Menu.prototype, "autoDismiss", void 0);
10
340
 
11
341
  let _ = t => t,
12
342
  _t;
13
- const getClasses = ({
14
- appearance,
15
- disabled
16
- }) => classNames('base', ['disabled', disabled], [`appearance-${appearance}`, Boolean(appearance)]);
17
- const ListboxTemplate = context => {
18
- const focusTemplate = focusTemplateFactory(context);
343
+ const MenuTemplate = context => {
344
+ const popupTag = context.tagFor(Popup);
345
+ function handlePopupEvents(x, state) {
346
+ x.open = state;
347
+ }
19
348
  return html(_t || (_t = _`
20
- <template
21
- aria-activedescendant="${0}"
22
- aria-multiselectable="${0}"
23
- aria-label="listbox"
24
- role="listbox"
25
- @click="${0}"
26
- @focusin="${0}"
27
- @keydown="${0}"
28
- @mousedown="${0}"
29
- tabindex="${0}"
30
- >
31
- <div
32
- class="${0}"
33
- >
34
- ${0}
35
-
36
- <slot
37
- ${0}
38
- ></slot>
39
- </div>
40
- </template>
41
- `), x => x.ariaActiveDescendant, x => x.ariaMultiSelectable, (x, c) => x.clickHandler(c.event), (x, c) => x.focusinHandler(c.event), (x, c) => x.keydownHandler(c.event), (x, c) => x.mousedownHandler(c.event), x => !x.disabled ? '0' : null, getClasses, () => focusTemplate, slotted({
42
- filter: ListboxElement.slottedOptionFilter,
43
- flatten: true,
44
- property: 'slottedOptions'
45
- }));
349
+ <template>
350
+ <${0}
351
+ :placement=${0}
352
+ :open=${0}
353
+ :anchor=${0}
354
+ @vwc-popup:open="${0}"
355
+ @vwc-popup:close="${0}"
356
+ ${0}
357
+ >
358
+ <div
359
+ class="base"
360
+ role="menu"
361
+ @keydown="${0}"
362
+ @focusout="${0}"
363
+ >
364
+ <slot ${0}></slot>
365
+ </div>
366
+ </${0}>
367
+ </template>`), popupTag, x => x.placement, x => x.open, x => x.anchor, x => handlePopupEvents(x, true), x => handlePopupEvents(x, false), ref('_popup'), (x, c) => x.handleMenuKeyDown(c.event), (x, c) => x.handleFocusOut(c.event), slotted('items'), popupTag);
46
368
  };
47
369
 
48
- var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 20 Jul 2023 11:19:49 GMT\n */\n:host {\n display: block;\n inline-size: fit-content;\n}\n\n:host(:focus-within) {\n outline: none;\n}\n\n.base {\n position: relative;\n display: flex;\n flex-direction: column;\n padding: 4px;\n background-color: var(--_appearance-color-fill);\n border-radius: 6px;\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n contain: paint;\n gap: 4px;\n}\n.base {\n /* @cssprop [--vvd-listbox-accent-backdrop=var(--vvd-color-canvas)] */\n --_connotation-color-backdrop: var(--vvd-listbox-accent-backdrop, var(--vvd-color-canvas));\n /* @cssprop [--vvd-listbox-accent-intermediate=var(--vvd-color-neutral-500)] */\n --_connotation-color-intermediate: var(--vvd-listbox-accent-intermediate, var(--vvd-color-neutral-500));\n /* @cssprop [--vvd-listbox-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-listbox-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-listbox-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-listbox-accent-soft, var(--vvd-color-neutral-100));\n}\n.base {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--_connotation-color-backdrop);\n --_appearance-color-outline: var(--_connotation-color-intermediate);\n}\n.base.appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: var(--vvd-color-neutral-100);\n --_appearance-color-outline: var(--vvd-color-neutral-300);\n}\n.base:where(:disabled, .disabled).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n\n.focus-indicator {\n pointer-events: none;\n}\n:host(:not(:focus-within)) .focus-indicator {\n display: none;\n}\n\n.base.disabled ::slotted([role=option]) {\n --_option-appearance-color-text: var(--_appearance-color-outline);\n cursor: not-allowed;\n pointer-events: none;\n}";
49
-
50
- const listboxDefinition = Listbox.compose({
51
- baseName: 'listbox',
52
- template: ListboxTemplate,
370
+ const menuDefinition = Menu.compose({
371
+ baseName: 'menu',
372
+ template: MenuTemplate,
53
373
  styles: css_248z
54
374
  });
55
- const listboxRegistries = [listboxDefinition(), ...listboxOptionRegistries, ...focusRegistries];
56
- const registerListbox = registerFactory(listboxRegistries);
375
+ const menuRegistries = [menuDefinition(), ...popupRegistries, ...menuItemRegistries];
376
+ const registerMenu = registerFactory(menuRegistries);
57
377
 
58
- export { listboxRegistries as a, listboxDefinition as l, registerListbox as r };
378
+ export { menuRegistries as a, menuDefinition as m, registerMenu as r };