@vonage/vivid 3.3.0 → 3.4.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 (128) hide show
  1. package/custom-elements.json +337 -1
  2. package/data-grid/index.js +7 -1047
  3. package/dialog/index.js +1 -1
  4. package/divider/index.js +1 -1
  5. package/fab/index.js +1 -1
  6. package/header/index.js +1 -1
  7. package/index.d.ts +1 -0
  8. package/index.js +32 -31
  9. package/layout/index.js +1 -1
  10. package/lib/accordion/definition.d.ts +1 -0
  11. package/lib/action-group/action-group.d.ts +1 -2
  12. package/lib/action-group/definition.d.ts +1 -0
  13. package/lib/avatar/avatar.d.ts +2 -3
  14. package/lib/avatar/definition.d.ts +1 -0
  15. package/lib/badge/badge.d.ts +3 -4
  16. package/lib/badge/definition.d.ts +1 -0
  17. package/lib/banner/definition.d.ts +1 -0
  18. package/lib/button/button.d.ts +3 -4
  19. package/lib/button/definition.d.ts +1 -0
  20. package/lib/calendar-event/calendar-event.d.ts +2 -3
  21. package/lib/calendar-event/definition.d.ts +1 -0
  22. package/lib/combobox/combobox.d.ts +1 -2
  23. package/lib/combobox/definition.d.ts +1 -0
  24. package/lib/components.d.ts +1 -0
  25. package/lib/dialog/definition.d.ts +1 -0
  26. package/lib/dialog/dialog.d.ts +1 -2
  27. package/lib/fab/definition.d.ts +1 -0
  28. package/lib/fab/fab.d.ts +1 -2
  29. package/lib/icon/definition.d.ts +1 -0
  30. package/lib/icon/icon.d.ts +1 -2
  31. package/lib/layout/definition.d.ts +1 -0
  32. package/lib/layout/layout.d.ts +3 -4
  33. package/lib/listbox/definition.d.ts +1 -0
  34. package/lib/menu/definition.d.ts +1 -0
  35. package/lib/note/definition.d.ts +1 -0
  36. package/lib/number-field/definition.d.ts +1 -0
  37. package/lib/number-field/number-field.d.ts +2 -3
  38. package/lib/popup/definition.d.ts +2 -0
  39. package/lib/progress/definition.d.ts +1 -0
  40. package/lib/progress-ring/definition.d.ts +1 -0
  41. package/lib/select/definition.d.ts +1 -0
  42. package/lib/select/select.d.ts +2 -3
  43. package/lib/switch/definition.d.ts +1 -0
  44. package/lib/text-area/definition.d.ts +1 -0
  45. package/lib/text-area/text-area.d.ts +1 -2
  46. package/lib/text-field/definition.d.ts +1 -0
  47. package/lib/text-field/text-field.d.ts +2 -3
  48. package/listbox/index.js +1 -1
  49. package/menu/index.js +2 -2
  50. package/menu-item/index.js +1 -1
  51. package/nav/index.js +1 -1
  52. package/nav-disclosure/index.js +1 -1
  53. package/nav-item/index.js +1 -1
  54. package/note/index.js +1 -1
  55. package/number-field/index.js +2 -2
  56. package/package.json +1 -1
  57. package/progress/index.js +1 -1
  58. package/progress-ring/index.js +1 -1
  59. package/radio/index.js +1 -1
  60. package/radio-group/index.js +1 -1
  61. package/select/index.js +1 -1
  62. package/shared/definition.js +1 -1
  63. package/shared/definition11.js +1 -1
  64. package/shared/definition12.js +1 -1
  65. package/shared/definition13.js +1 -1
  66. package/shared/definition14.js +1 -1
  67. package/shared/definition16.js +1 -1
  68. package/shared/definition17.js +1 -1
  69. package/shared/definition18.js +2 -2
  70. package/shared/definition19.js +1 -1
  71. package/shared/definition2.js +1 -1
  72. package/shared/definition20.js +1035 -203
  73. package/shared/definition21.js +206 -67
  74. package/shared/definition22.js +68 -77
  75. package/shared/definition23.js +76 -47
  76. package/shared/definition24.js +46 -32
  77. package/shared/definition25.js +35 -49
  78. package/shared/definition26.js +48 -338
  79. package/shared/definition27.js +267 -282
  80. package/shared/definition28.js +356 -14
  81. package/shared/definition29.js +13 -67
  82. package/shared/definition30.js +65 -21
  83. package/shared/definition31.js +21 -39
  84. package/shared/definition32.js +31 -432
  85. package/shared/definition33.js +432 -76
  86. package/shared/definition34.js +76 -59
  87. package/shared/definition35.js +67 -35
  88. package/shared/definition36.js +31 -422
  89. package/shared/definition37.js +357 -560
  90. package/shared/definition38.js +624 -74
  91. package/shared/definition39.js +70 -573
  92. package/shared/definition4.js +1 -1
  93. package/shared/definition40.js +527 -81
  94. package/shared/definition41.js +127 -47
  95. package/shared/definition42.js +51 -16
  96. package/shared/definition43.js +17 -425
  97. package/shared/definition44.js +367 -209
  98. package/shared/definition45.js +248 -85
  99. package/shared/definition46.js +110 -68
  100. package/shared/definition47.js +65 -67
  101. package/shared/definition48.js +69 -295
  102. package/shared/definition49.js +305 -0
  103. package/shared/definition5.js +1 -1
  104. package/shared/definition6.js +1 -1
  105. package/shared/definition7.js +1 -1
  106. package/shared/definition8.js +1 -1
  107. package/shared/definition9.js +1 -1
  108. package/shared/enums.js +1 -1
  109. package/shared/form-elements.js +1 -1
  110. package/shared/patterns/form-elements/form-elements.d.ts +2 -2
  111. package/shared/text-field.js +1 -1
  112. package/side-drawer/index.js +1 -1
  113. package/slider/index.js +1 -1
  114. package/styles/core/all.css +1 -1
  115. package/styles/core/theme.css +1 -1
  116. package/styles/core/typography.css +1 -1
  117. package/styles/tokens/theme-dark.css +4 -4
  118. package/styles/tokens/theme-light.css +4 -4
  119. package/switch/index.js +1 -1
  120. package/tab/index.js +1 -1
  121. package/tab-panel/index.js +1 -1
  122. package/tabs/index.js +3 -3
  123. package/text-area/index.js +1 -1
  124. package/text-field/index.js +1 -1
  125. package/tooltip/index.js +1 -1
  126. package/tree-item/index.js +1 -1
  127. package/tree-view/index.js +1 -1
  128. package/vivid.api.json +4526 -336
@@ -1,44 +1,58 @@
1
1
  import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, r as registerFactory } from './index.js';
2
+ import { E as Elevation, e as elevationRegistries } from './definition15.js';
2
3
  import { c as classNames } from './class-names.js';
3
4
 
4
- var AUTO_SIZING;
5
- (function (AUTO_SIZING) {
6
- AUTO_SIZING["Fit"] = "fit";
7
- AUTO_SIZING["Fill"] = "fill";
8
- })(AUTO_SIZING || (AUTO_SIZING = {}));
9
- class Layout extends FoundationElement {}
10
- __decorate([attr, __metadata("design:type", String)], Layout.prototype, "gutters", void 0);
11
- __decorate([attr({
12
- attribute: 'column-basis'
13
- }), __metadata("design:type", String)], Layout.prototype, "columnBasis", void 0);
5
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 16 Mar 2023 08:36:16 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 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 background-color: var(--vvd-color-canvas);\n color: var(--vvd-color-canvas-text);\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
+
7
+ class Header extends FoundationElement {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.elevationShadow = false;
11
+ this.alternate = false;
12
+ }
13
+ }
14
14
  __decorate([attr({
15
- attribute: 'column-spacing'
16
- }), __metadata("design:type", String)], Layout.prototype, "columnSpacing", void 0);
15
+ attribute: 'elevation-shadow',
16
+ mode: 'boolean'
17
+ }), __metadata("design:type", Object)], Header.prototype, "elevationShadow", void 0);
17
18
  __decorate([attr({
18
- attribute: 'auto-sizing'
19
- }), __metadata("design:type", String)], Layout.prototype, "autoSizing", void 0);
20
-
21
- var css_248z = "/* #region SIZEs */\n/* #region BASES */\n/* #region SPACES */\n.control {\n display: grid;\n grid-auto-rows: min-content;\n}\n.control.column-basis-small {\n grid-template-columns: var(--layout-grid-template-columns, repeat(var(--_auto-sizing), minmax(160px, 1fr)));\n}\n.control:not(.column-basis-small):not(.column-basis-medium):not(.column-basis-large):not(.column-basis-block), .control.column-basis-medium {\n grid-template-columns: var(--layout-grid-template-columns, repeat(var(--_auto-sizing), minmax(320px, 1fr)));\n}\n.control.column-basis-large {\n grid-template-columns: var(--layout-grid-template-columns, repeat(var(--_auto-sizing), minmax(380px, 1fr)));\n}\n.control.column-basis-block {\n grid-template-columns: var(--layout-grid-template-columns, repeat(var(--_auto-sizing), minmax(1fr, 1fr)));\n}\n.control.column-spacing-small {\n gap: 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}\n.control.column-spacing-small-inline {\n gap: 0 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}\n.control.column-spacing-small-block {\n gap: 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))) 0;\n}\n.control:not(.column-spacing-small):not(.column-spacing-small-inline):not(.column-spacing-small-block):not(.column-spacing-medium):not(.column-spacing-medium-inline):not(.column-spacing-medium-block):not(.column-spacing-large):not(.column-spacing-large-inline):not(.column-spacing-large-block), .control.column-spacing-medium {\n gap: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n}\n.control.column-spacing-medium-inline {\n gap: 0 calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n}\n.control.column-spacing-medium-block {\n gap: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16)) 0;\n}\n.control.column-spacing-large {\n gap: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n}\n.control.column-spacing-large-inline {\n gap: 0 calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n}\n.control.column-spacing-large-block {\n gap: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8)) 0;\n}\n.control.gutters-small {\n margin: 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}\n.control.gutters-small-inline {\n margin: 0 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}\n.control.gutters-small-block {\n margin: 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))) 0;\n}\n.control.gutters-medium {\n margin: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n}\n.control.gutters-medium-inline {\n margin: 0 calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n}\n.control.gutters-medium-block {\n margin: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16)) 0;\n}\n.control.gutters-large {\n margin: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n}\n.control.gutters-large-inline {\n margin: 0 calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n}\n.control.gutters-large-block {\n margin: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8)) 0;\n}\n.control.auto-sizing-fill {\n --_auto-sizing: auto-fill;\n}\n.control:not(.auto-sizing-fill):not(.auto-sizing-fit), .control.auto-sizing-fit {\n --_auto-sizing: auto-fit;\n}";
19
+ mode: 'boolean'
20
+ }), __metadata("design:type", Object)], Header.prototype, "alternate", void 0);
22
21
 
23
22
  let _ = t => t,
24
23
  _t;
25
- const getClasses = ({
26
- columnBasis,
27
- gutters,
28
- columnSpacing,
29
- autoSizing
30
- }) => classNames('control', [`column-basis-${columnBasis}`, Boolean(columnBasis)], [`gutters-${gutters}`, Boolean(gutters)], [`column-spacing-${columnSpacing}`, Boolean(columnSpacing)], [`auto-sizing-${autoSizing}`, Boolean(autoSizing)]);
31
- const layoutTemplate = () => html(_t || (_t = _`
32
- <div class="${0}">
33
- <slot></slot>
34
- </div>`), getClasses);
24
+ const getPartAlternate = ({
25
+ alternate
26
+ }) => classNames(['vvd-theme-alternate', Boolean(alternate)]);
27
+ const headerTemplate = context => {
28
+ const elevationTag = context.tagFor(Elevation);
29
+ return html(_t || (_t = _`
30
+ <${0} dp="4" ?no-shadow=${0}>
31
+ <header class="base" part="base">
32
+ <!-- a container is needed to distinguish the surface background color of the
33
+ element from its shadow when applying elevation with alternate -->
34
+ <div class="container" part="${0}">
35
+ <section class="header-content">
36
+ <slot></slot>
37
+ </section>
38
+ <section class="header-content">
39
+ <slot name="action-items"></slot>
40
+ </section>
41
+ </div>
42
+ </header>
43
+ </${0}>
44
+ <div class="app-content">
45
+ <slot name="app-content"></slot>
46
+ </div>
47
+ `), elevationTag, x => !x.elevationShadow, getPartAlternate, elevationTag);
48
+ };
35
49
 
36
- const layoutDefinition = Layout.compose({
37
- baseName: 'layout',
38
- template: layoutTemplate,
50
+ const headerDefinition = Header.compose({
51
+ baseName: 'header',
52
+ template: headerTemplate,
39
53
  styles: css_248z
40
54
  });
41
- const layoutRegistries = [layoutDefinition()];
42
- const registerLayout = registerFactory(layoutRegistries);
55
+ const headerRegistries = [headerDefinition(), ...elevationRegistries];
56
+ const registerHeader = registerFactory(headerRegistries);
43
57
 
44
- export { layoutRegistries as a, layoutDefinition as l, registerLayout as r };
58
+ export { headerRegistries as a, headerDefinition as h, registerHeader as r };
@@ -1,58 +1,44 @@
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 './definition19.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';
8
- import { s as slotted } from './slotted.js';
1
+ import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, r as registerFactory } from './index.js';
9
2
  import { c as classNames } from './class-names.js';
10
3
 
4
+ var AUTO_SIZING;
5
+ (function (AUTO_SIZING) {
6
+ AUTO_SIZING["Fit"] = "fit";
7
+ AUTO_SIZING["Fill"] = "fill";
8
+ })(AUTO_SIZING || (AUTO_SIZING = {}));
9
+ class Layout extends FoundationElement {}
10
+ __decorate([attr, __metadata("design:type", String)], Layout.prototype, "gutters", void 0);
11
+ __decorate([attr({
12
+ attribute: 'column-basis'
13
+ }), __metadata("design:type", String)], Layout.prototype, "columnBasis", void 0);
14
+ __decorate([attr({
15
+ attribute: 'column-spacing'
16
+ }), __metadata("design:type", String)], Layout.prototype, "columnSpacing", void 0);
17
+ __decorate([attr({
18
+ attribute: 'auto-sizing'
19
+ }), __metadata("design:type", String)], Layout.prototype, "autoSizing", void 0);
20
+
21
+ var css_248z = "/* #region SIZEs */\n/* #region BASES */\n/* #region SPACES */\n.control {\n display: grid;\n grid-auto-rows: min-content;\n}\n.control.column-basis-small {\n grid-template-columns: var(--layout-grid-template-columns, repeat(var(--_auto-sizing), minmax(160px, 1fr)));\n}\n.control:not(.column-basis-small):not(.column-basis-medium):not(.column-basis-large):not(.column-basis-block), .control.column-basis-medium {\n grid-template-columns: var(--layout-grid-template-columns, repeat(var(--_auto-sizing), minmax(320px, 1fr)));\n}\n.control.column-basis-large {\n grid-template-columns: var(--layout-grid-template-columns, repeat(var(--_auto-sizing), minmax(380px, 1fr)));\n}\n.control.column-basis-block {\n grid-template-columns: var(--layout-grid-template-columns, repeat(var(--_auto-sizing), minmax(1fr, 1fr)));\n}\n.control.column-spacing-small {\n gap: 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}\n.control.column-spacing-small-inline {\n gap: 0 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}\n.control.column-spacing-small-block {\n gap: 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))) 0;\n}\n.control:not(.column-spacing-small):not(.column-spacing-small-inline):not(.column-spacing-small-block):not(.column-spacing-medium):not(.column-spacing-medium-inline):not(.column-spacing-medium-block):not(.column-spacing-large):not(.column-spacing-large-inline):not(.column-spacing-large-block), .control.column-spacing-medium {\n gap: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n}\n.control.column-spacing-medium-inline {\n gap: 0 calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n}\n.control.column-spacing-medium-block {\n gap: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16)) 0;\n}\n.control.column-spacing-large {\n gap: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n}\n.control.column-spacing-large-inline {\n gap: 0 calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n}\n.control.column-spacing-large-block {\n gap: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8)) 0;\n}\n.control.gutters-small {\n margin: 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}\n.control.gutters-small-inline {\n margin: 0 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}\n.control.gutters-small-block {\n margin: 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))) 0;\n}\n.control.gutters-medium {\n margin: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n}\n.control.gutters-medium-inline {\n margin: 0 calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n}\n.control.gutters-medium-block {\n margin: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16)) 0;\n}\n.control.gutters-large {\n margin: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n}\n.control.gutters-large-inline {\n margin: 0 calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n}\n.control.gutters-large-block {\n margin: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8)) 0;\n}\n.control.auto-sizing-fill {\n --_auto-sizing: auto-fill;\n}\n.control:not(.auto-sizing-fill):not(.auto-sizing-fit), .control.auto-sizing-fit {\n --_auto-sizing: auto-fit;\n}";
22
+
11
23
  let _ = t => t,
12
24
  _t;
13
25
  const getClasses = ({
14
- appearance,
15
- disabled
16
- }) => classNames('base', ['disabled', disabled], [`appearance-${appearance}`, Boolean(appearance)]);
17
- const ListboxTemplate = context => {
18
- const focusTemplate = focusTemplateFactory(context);
19
- 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
- }));
46
- };
47
-
48
- var css_248z = "/**\n * Do not edit directly\n * Generated on Wed, 08 Mar 2023 09:27:51 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 --_connotation-color-backdrop: var(--vvd-color-canvas);\n --_connotation-color-intermediate: var(--vvd-color-neutral-500);\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-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-400);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.base:where(:disabled, .disabled).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-400);\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}";
26
+ columnBasis,
27
+ gutters,
28
+ columnSpacing,
29
+ autoSizing
30
+ }) => classNames('control', [`column-basis-${columnBasis}`, Boolean(columnBasis)], [`gutters-${gutters}`, Boolean(gutters)], [`column-spacing-${columnSpacing}`, Boolean(columnSpacing)], [`auto-sizing-${autoSizing}`, Boolean(autoSizing)]);
31
+ const layoutTemplate = () => html(_t || (_t = _`
32
+ <div class="${0}">
33
+ <slot></slot>
34
+ </div>`), getClasses);
49
35
 
50
- const listboxDefinition = Listbox.compose({
51
- baseName: 'listbox',
52
- template: ListboxTemplate,
36
+ const layoutDefinition = Layout.compose({
37
+ baseName: 'layout',
38
+ template: layoutTemplate,
53
39
  styles: css_248z
54
40
  });
55
- const listboxRegistries = [listboxDefinition(), ...listboxOptionRegistries, ...focusRegistries];
56
- const registerListbox = registerFactory(listboxRegistries);
41
+ const layoutRegistries = [layoutDefinition()];
42
+ const registerLayout = registerFactory(layoutRegistries);
57
43
 
58
- export { listboxRegistries as a, listboxDefinition as l, registerListbox as r };
44
+ export { layoutRegistries as a, layoutDefinition as l, registerLayout as r };
@@ -1,348 +1,58 @@
1
- import { F as FoundationElement, W as DOM, _ as __decorate, o as observable, a as attr, b as __metadata, h as html, r as registerFactory } from './index.js';
2
- import { P as Popup, p as popupRegistries } from './definition18.js';
3
- import { M as MenuItem, a as MenuItemRole, r as roleForMenuItem, m as menuItemRegistries } from './definition27.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';
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 './definition19.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';
6
8
  import { s as slotted } from './slotted.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 = ".base {\n max-inline-size: var(--menu-max-inline-size, 100%);\n min-inline-size: var(--menu-max-inline-size);\n padding-block: 8px;\n}";
296
-
297
- class Menu extends Menu$1 {
298
- constructor() {
299
- super(...arguments);
300
- this.open = false;
301
- this.popupOpenChanged = () => {
302
- this.open = this._popup.open;
303
- };
304
- }
305
- }
306
- __decorate([attr({
307
- mode: 'boolean'
308
- }), __metadata("design:type", Object)], Menu.prototype, "open", void 0);
309
- __decorate([attr, __metadata("design:type", String)], Menu.prototype, "placement", void 0);
310
- __decorate([attr, __metadata("design:type", String)], Menu.prototype, "anchor", void 0);
9
+ import { c as classNames } from './class-names.js';
311
10
 
312
11
  let _ = t => t,
313
12
  _t;
314
- const MenuTemplate = context => {
315
- const popupTag = context.tagFor(Popup);
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);
316
19
  return html(_t || (_t = _`
317
- <template
318
- slot="${0}"
319
- >
320
- <${0}
321
- :placement=${0}
322
- :open=${0}
323
- :anchor=${0}
324
- @open="${0}"
325
- @close="${0}"
326
- ${0}
327
- >
328
- <div
329
- class="base"
330
- role="menu"
331
- @keydown="${0}"
332
- @focusout="${0}"
333
- >
334
- <slot ${0}></slot>
335
- </div>
336
- </${0}>
337
- </template>`), x => x.slot || x.isNestedMenu() ? 'submenu' : void 0, popupTag, x => x.placement, x => x.open, x => x.anchor, x => x.popupOpenChanged(), x => x.popupOpenChanged(), ref('_popup'), (x, c) => x.handleMenuKeyDown(c.event), (x, c) => x.handleFocusOut(c.event), slotted('items'), popupTag);
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
+ }));
338
46
  };
339
47
 
340
- const menuDefinition = Menu.compose({
341
- baseName: 'menu',
342
- template: MenuTemplate,
48
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 16 Mar 2023 08:36:16 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 --_connotation-color-backdrop: var(--vvd-color-canvas);\n --_connotation-color-intermediate: var(--vvd-color-neutral-500);\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-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-400);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.base:where(:disabled, .disabled).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-400);\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,
343
53
  styles: css_248z
344
54
  });
345
- const menuRegistries = [menuDefinition(), ...popupRegistries, ...menuItemRegistries];
346
- const registerMenu = registerFactory(menuRegistries);
55
+ const listboxRegistries = [listboxDefinition(), ...listboxOptionRegistries, ...focusRegistries];
56
+ const registerListbox = registerFactory(listboxRegistries);
347
57
 
348
- export { menuRegistries as a, menuDefinition as m, registerMenu as r };
58
+ export { listboxRegistries as a, listboxDefinition as l, registerListbox as r };