@vonage/vivid 3.0.0-next.121 → 3.0.0-next.123

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 (70) hide show
  1. package/header/index.js +4 -56
  2. package/index.js +21 -20
  3. package/layout/index.js +1 -1
  4. package/lib/components.d.ts +1 -0
  5. package/listbox/index.js +2 -2
  6. package/menu/index.js +3 -3
  7. package/menu-item/index.js +1 -1
  8. package/nav/index.js +1 -1
  9. package/nav-disclosure/index.js +1 -1
  10. package/nav-item/index.js +1 -1
  11. package/note/index.js +1 -1
  12. package/number-field/index.js +1 -1
  13. package/option/index.js +1 -1
  14. package/package.json +1 -43
  15. package/popup/index.js +1 -1
  16. package/progress/index.js +1 -1
  17. package/progress-ring/index.js +1 -1
  18. package/radio/index.js +1 -1
  19. package/radio-group/index.js +1 -1
  20. package/shared/definition.js +1 -1
  21. package/shared/definition11.js +1 -1
  22. package/shared/definition12.js +1 -1
  23. package/shared/definition13.js +1 -1
  24. package/shared/definition14.js +1 -1
  25. package/shared/definition16.js +1 -1
  26. package/shared/definition17.js +1 -1
  27. package/shared/definition18.js +1 -1
  28. package/shared/definition19.js +1 -1
  29. package/shared/definition2.js +1 -1
  30. package/shared/definition20.js +46 -32
  31. package/shared/definition21.js +35 -1069
  32. package/shared/definition22.js +978 -161
  33. package/shared/definition23.js +211 -298
  34. package/shared/definition24.js +310 -1491
  35. package/shared/definition25.js +1492 -314
  36. package/shared/definition26.js +346 -13
  37. package/shared/definition27.js +12 -69
  38. package/shared/definition28.js +65 -21
  39. package/shared/definition29.js +20 -45
  40. package/shared/definition30.js +40 -78
  41. package/shared/definition31.js +76 -59
  42. package/shared/definition32.js +67 -35
  43. package/shared/definition33.js +31 -421
  44. package/shared/definition34.js +418 -69
  45. package/shared/definition35.js +66 -572
  46. package/shared/definition36.js +526 -81
  47. package/shared/definition37.js +85 -217
  48. package/shared/definition38.js +245 -85
  49. package/shared/definition39.js +109 -67
  50. package/shared/definition4.js +1 -1
  51. package/shared/definition40.js +77 -0
  52. package/shared/definition5.js +1 -1
  53. package/shared/definition6.js +1 -1
  54. package/shared/definition7.js +1 -1
  55. package/shared/definition8.js +1 -1
  56. package/shared/definition9.js +1 -1
  57. package/shared/form-elements.js +1 -1
  58. package/shared/patterns/form-elements/form-elements.d.ts +2 -2
  59. package/side-drawer/index.js +1 -1
  60. package/slider/index.js +1 -1
  61. package/styles/core/all.css +1 -1
  62. package/styles/core/theme.css +1 -1
  63. package/styles/core/typography.css +1 -1
  64. package/styles/tokens/theme-dark.css +4 -4
  65. package/styles/tokens/theme-light.css +4 -4
  66. package/switch/index.js +1 -1
  67. package/text-area/index.js +1 -1
  68. package/text-field/index.js +1 -1
  69. package/tooltip/index.js +2 -2
  70. package/vivid.api.json +105 -0
@@ -1,348 +1,261 @@
1
- import { F as FoundationElement, U as DOM, _ as __decorate, N 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 './definition24.js';
3
- import { M as MenuItem, a as MenuItemRole, r as roleForMenuItem, m as menuItemRegistries } from './definition25.js';
1
+ import { F as FoundationElement, V as Observable, _ as __decorate, N as observable, a as attr, b as __metadata, h as html, r as registerFactory } from './index.js';
2
+ import { i as iconRegistries } from './definition3.js';
3
+ import { f as focusRegistries } from './definition4.js';
4
+ import { A as AffixIconWithTrailing, a as affixIconTemplateFactory } from './affix.js';
5
+ import { A as ARIAGlobalStatesAndProperties } from './aria-global.js';
6
+ import { S as StartEnd } from './start-end.js';
7
+ import { a as applyMixins } from './apply-mixins.js';
4
8
  import { i as isHTMLElement } from './dom.js';
5
- import { g as keyHome, d as keyEnd, e as keyArrowUp, f as keyArrowDown } from './key-codes.js';
6
- import { s as slotted } from './slotted.js';
7
- import { r as ref } from './ref.js';
9
+ import { f as focusTemplateFactory } from './focus2.js';
10
+ import './icon.js';
11
+ import { w as when } from './when.js';
12
+ import { c as classNames } from './class-names.js';
8
13
 
9
14
  /**
10
- * A Menu Custom HTML Element.
11
- * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#menu | ARIA menu }.
15
+ * Determines if the element is a {@link (ListboxOption:class)}
12
16
  *
13
- * @slot - The default slot for the menu items
17
+ * @param element - the element to test.
18
+ * @public
19
+ */
20
+ function isListboxOption(el) {
21
+ return (isHTMLElement(el) &&
22
+ (el.getAttribute("role") === "option" ||
23
+ el instanceof HTMLOptionElement));
24
+ }
25
+ /**
26
+ * An Option Custom HTML Element.
27
+ * Implements {@link https://www.w3.org/TR/wai-aria-1.1/#option | ARIA option }.
28
+ *
29
+ * @slot start - Content which can be provided before the listbox option content
30
+ * @slot end - Content which can be provided after the listbox option content
31
+ * @slot - The default slot for listbox option content
32
+ * @csspart content - Wraps the listbox option content
14
33
  *
15
34
  * @public
16
35
  */
17
- class Menu$1 extends FoundationElement {
18
- constructor() {
19
- super(...arguments);
20
- this.expandedItem = null;
36
+ class ListboxOption$1 extends FoundationElement {
37
+ constructor(text, value, defaultSelected, selected) {
38
+ super();
21
39
  /**
22
- * The index of the focusable element in the items array
23
- * defaults to -1
40
+ * The defaultSelected state of the option.
41
+ * @public
24
42
  */
25
- this.focusIndex = -1;
43
+ this.defaultSelected = false;
26
44
  /**
45
+ * Tracks whether the "selected" property has been changed.
27
46
  * @internal
28
47
  */
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
- };
48
+ this.dirtySelected = false;
169
49
  /**
170
- * check if the item is a menu item
50
+ * The checked state of the control.
51
+ *
52
+ * @public
171
53
  */
172
- this.isMenuItemElement = (el) => {
173
- return (isHTMLElement(el) &&
174
- Menu$1.focusableElementRoles.hasOwnProperty(el.getAttribute("role")));
175
- };
54
+ this.selected = this.defaultSelected;
176
55
  /**
177
- * check if the item is focusable
56
+ * Track whether the value has been changed from the initial value
178
57
  */
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();
58
+ this.dirtyValue = false;
59
+ if (text) {
60
+ this.textContent = text;
189
61
  }
62
+ if (value) {
63
+ this.initialValue = value;
64
+ }
65
+ if (defaultSelected) {
66
+ this.defaultSelected = defaultSelected;
67
+ }
68
+ if (selected) {
69
+ this.selected = selected;
70
+ }
71
+ this.proxy = new Option(`${this.textContent}`, this.initialValue, this.defaultSelected, this.selected);
72
+ this.proxy.disabled = this.disabled;
190
73
  }
191
74
  /**
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.
75
+ * Updates the ariaChecked property when the checked property changes.
214
76
  *
215
- * @public
216
- */
217
- focus() {
218
- this.setFocus(0, 1);
219
- }
220
- /**
221
- * Collapses any expanded menu items.
77
+ * @param prev - the previous checked value
78
+ * @param next - the current checked value
222
79
  *
223
80
  * @public
224
81
  */
225
- collapseExpandedItem() {
226
- if (this.expandedItem !== null) {
227
- this.expandedItem.expanded = false;
228
- this.expandedItem = null;
82
+ checkedChanged(prev, next) {
83
+ if (typeof next === "boolean") {
84
+ this.ariaChecked = next ? "true" : "false";
85
+ return;
229
86
  }
87
+ this.ariaChecked = null;
230
88
  }
231
89
  /**
90
+ * Updates the proxy's text content when the default slot changes.
91
+ * @param prev - the previous content value
92
+ * @param next - the current content value
93
+ *
232
94
  * @internal
233
95
  */
234
- handleMenuKeyDown(e) {
235
- if (e.defaultPrevented || this.menuItems === undefined) {
236
- return;
96
+ contentChanged(prev, next) {
97
+ if (this.proxy instanceof HTMLOptionElement) {
98
+ this.proxy.textContent = this.textContent;
99
+ }
100
+ this.$emit("contentchange", null, { bubbles: true });
101
+ }
102
+ defaultSelectedChanged() {
103
+ if (!this.dirtySelected) {
104
+ this.selected = this.defaultSelected;
105
+ if (this.proxy instanceof HTMLOptionElement) {
106
+ this.proxy.selected = this.defaultSelected;
107
+ }
237
108
  }
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;
109
+ }
110
+ disabledChanged(prev, next) {
111
+ this.ariaDisabled = this.disabled ? "true" : "false";
112
+ if (this.proxy instanceof HTMLOptionElement) {
113
+ this.proxy.disabled = this.disabled;
258
114
  }
259
115
  }
260
- /**
261
- * get an array of valid DOM children
262
- */
263
- domChildren() {
264
- return Array.from(this.children).filter(child => !child.hasAttribute("hidden"));
116
+ selectedAttributeChanged() {
117
+ this.defaultSelected = this.selectedAttribute;
118
+ if (this.proxy instanceof HTMLOptionElement) {
119
+ this.proxy.defaultSelected = this.defaultSelected;
120
+ }
265
121
  }
266
- setFocus(focusIndex, adjustment) {
267
- if (this.menuItems === undefined) {
268
- return;
122
+ selectedChanged() {
123
+ this.ariaSelected = this.selected ? "true" : "false";
124
+ if (!this.dirtySelected) {
125
+ this.dirtySelected = true;
269
126
  }
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;
127
+ if (this.proxy instanceof HTMLOptionElement) {
128
+ this.proxy.selected = this.selected;
287
129
  }
288
130
  }
131
+ initialValueChanged(previous, next) {
132
+ // If the value is clean and the component is connected to the DOM
133
+ // then set value equal to the attribute value.
134
+ if (!this.dirtyValue) {
135
+ this.value = this.initialValue;
136
+ this.dirtyValue = false;
137
+ }
138
+ }
139
+ get label() {
140
+ var _a;
141
+ return (_a = this.value) !== null && _a !== void 0 ? _a : this.text;
142
+ }
143
+ get text() {
144
+ var _a, _b;
145
+ return (_b = (_a = this.textContent) === null || _a === void 0 ? void 0 : _a.replace(/\s+/g, " ").trim()) !== null && _b !== void 0 ? _b : "";
146
+ }
147
+ set value(next) {
148
+ const newValue = `${next !== null && next !== void 0 ? next : ""}`;
149
+ this._value = newValue;
150
+ this.dirtyValue = true;
151
+ if (this.proxy instanceof HTMLOptionElement) {
152
+ this.proxy.value = newValue;
153
+ }
154
+ Observable.notify(this, "value");
155
+ }
156
+ get value() {
157
+ var _a;
158
+ Observable.track(this, "value");
159
+ return (_a = this._value) !== null && _a !== void 0 ? _a : this.text;
160
+ }
161
+ get form() {
162
+ return this.proxy ? this.proxy.form : null;
163
+ }
289
164
  }
290
- Menu$1.focusableElementRoles = roleForMenuItem;
291
165
  __decorate([
292
166
  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}";
167
+ ], ListboxOption$1.prototype, "checked", void 0);
168
+ __decorate([
169
+ observable
170
+ ], ListboxOption$1.prototype, "content", void 0);
171
+ __decorate([
172
+ observable
173
+ ], ListboxOption$1.prototype, "defaultSelected", void 0);
174
+ __decorate([
175
+ attr({ mode: "boolean" })
176
+ ], ListboxOption$1.prototype, "disabled", void 0);
177
+ __decorate([
178
+ attr({ attribute: "selected", mode: "boolean" })
179
+ ], ListboxOption$1.prototype, "selectedAttribute", void 0);
180
+ __decorate([
181
+ observable
182
+ ], ListboxOption$1.prototype, "selected", void 0);
183
+ __decorate([
184
+ attr({ attribute: "value", mode: "fromView" })
185
+ ], ListboxOption$1.prototype, "initialValue", void 0);
186
+ /**
187
+ * States and properties relating to the ARIA `option` role.
188
+ *
189
+ * @public
190
+ */
191
+ class DelegatesARIAListboxOption {
192
+ }
193
+ __decorate([
194
+ observable
195
+ ], DelegatesARIAListboxOption.prototype, "ariaChecked", void 0);
196
+ __decorate([
197
+ observable
198
+ ], DelegatesARIAListboxOption.prototype, "ariaPosInSet", void 0);
199
+ __decorate([
200
+ observable
201
+ ], DelegatesARIAListboxOption.prototype, "ariaSelected", void 0);
202
+ __decorate([
203
+ observable
204
+ ], DelegatesARIAListboxOption.prototype, "ariaSetSize", void 0);
205
+ applyMixins(DelegatesARIAListboxOption, ARIAGlobalStatesAndProperties);
206
+ applyMixins(ListboxOption$1, StartEnd, DelegatesARIAListboxOption);
296
207
 
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
- };
208
+ class ListboxOption extends ListboxOption$1 {
209
+ set text(value) {
210
+ this._text = value;
211
+ }
212
+ get text() {
213
+ var _a;
214
+ return (_a = this._text) !== null && _a !== void 0 ? _a : '';
304
215
  }
305
216
  }
306
217
  __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);
218
+ attribute: 'text'
219
+ }), __metadata("design:type", String)], ListboxOption.prototype, "_text", void 0);
220
+ applyMixins(ListboxOption, AffixIconWithTrailing);
311
221
 
312
222
  let _ = t => t,
313
- _t;
314
- const MenuTemplate = context => {
315
- const popupTag = context.tagFor(Popup);
223
+ _t,
224
+ _t2;
225
+ const getClasses = ({
226
+ icon,
227
+ disabled,
228
+ selected,
229
+ checked
230
+ }) => classNames('base', ['disabled', disabled], ['selected', Boolean(selected)], ['active', Boolean(checked)], ['icon', Boolean(icon)]);
231
+ const ListboxOptionTemplate = context => {
232
+ const affixIconTemplate = affixIconTemplateFactory(context);
233
+ const focusTemplate = focusTemplateFactory(context);
316
234
  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);
235
+ <template
236
+ aria-checked="${0}"
237
+ aria-disabled="${0}"
238
+ aria-posinset="${0}"
239
+ aria-selected="${0}"
240
+ aria-setsize="${0}"
241
+ role="option">
242
+ <div class="${0}">
243
+ ${0}
244
+ ${0}
245
+ ${0}
246
+ </div>
247
+ </template>
248
+ `), x => x.ariaChecked, x => x.ariaDisabled, x => x.ariaPosInSet, x => x.ariaSelected, x => x.ariaSetSize, getClasses, () => focusTemplate, x => affixIconTemplate(x.icon), when(x => x.text, html(_t2 || (_t2 = _`<div class="text">${0}</div>`), x => x.text)));
338
249
  };
339
250
 
340
- const menuDefinition = Menu.compose({
341
- baseName: 'menu',
342
- template: MenuTemplate,
251
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Wed, 21 Dec 2022 15:16:28 GMT\n */\n.base {\n position: relative; /* this is needed for the focus */\n display: flex;\n box-sizing: border-box;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n border-radius: 6px;\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n font: var(--vvd-typography-base);\n gap: 12px;\n hyphens: auto;\n inline-size: 100%;\n min-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n padding-block: 10px;\n padding-inline: 16px;\n vertical-align: middle;\n word-break: break-word;\n}\n.base {\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-primary-increment: var(--vvd-color-neutral-800);\n --_connotation-color-faint: var(--vvd-color-neutral-50);\n --_connotation-color-soft: var(--vvd-color-neutral-100);\n}\n.base {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.base:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n.base:where(.selected, [aria-current]):where(:not(:disabled, .disabled, :hover, .hover)) {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transparent;\n}\n.base:where(.selected, [aria-current]):where(:hover, .hover) {\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@supports (user-select: none) {\n .base {\n user-select: none;\n }\n}\n.base:not(.disabled) {\n cursor: pointer;\n}\n.base.disabled {\n cursor: not-allowed;\n}\n.base .text {\n font: var(--vvd-typography-base);\n}\n\n.icon {\n font-size: 20px;\n}\n.base:not(.disabled, .selected) .icon {\n color: var(--vvd-color-neutral-600);\n}\n\n.focus-indicator {\n --focus-stroke-color: var(--vvd-color-neutral-500);\n --focus-stroke-gap-color: transparent;\n}\n:host(:not([aria-checked=true])) .focus-indicator {\n display: none;\n}";
252
+
253
+ const listboxOptionDefinition = ListboxOption.compose({
254
+ baseName: 'option',
255
+ template: ListboxOptionTemplate,
343
256
  styles: css_248z
344
257
  });
345
- const menuRegistries = [menuDefinition(), ...popupRegistries, ...menuItemRegistries];
346
- const registerMenu = registerFactory(menuRegistries);
258
+ const listboxOptionRegistries = [listboxOptionDefinition(), ...iconRegistries, ...focusRegistries];
259
+ const registerOption = registerFactory(listboxOptionRegistries);
347
260
 
348
- export { menuRegistries as a, menuDefinition as m, registerMenu as r };
261
+ export { listboxOptionDefinition as a, isListboxOption as i, listboxOptionRegistries as l, registerOption as r };