@vonage/vivid 4.22.0 → 4.23.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 (213) hide show
  1. package/custom-elements.json +1987 -631
  2. package/lib/accordion-item/accordion-item.d.ts +11 -5
  3. package/lib/action-group/action-group.d.ts +8 -6
  4. package/lib/alert/alert.d.ts +21 -9
  5. package/lib/audio-player/audio-player.d.ts +11 -5
  6. package/lib/badge/badge.d.ts +11 -5
  7. package/lib/banner/banner.d.ts +26 -12
  8. package/lib/breadcrumb/breadcrumb.d.ts +333 -1
  9. package/lib/breadcrumb/breadcrumb.template.d.ts +2 -3
  10. package/lib/breadcrumb-item/breadcrumb-item.d.ts +8 -6
  11. package/lib/button/button.d.ts +11 -5
  12. package/lib/calendar-event/calendar-event.d.ts +333 -1
  13. package/lib/checkbox/checkbox.d.ts +8 -6
  14. package/lib/combobox/combobox.d.ts +11 -5
  15. package/lib/date-picker/date-picker.d.ts +74 -50
  16. package/lib/date-range-picker/date-range-picker.d.ts +38 -26
  17. package/lib/date-time-picker/date-time-picker.d.ts +76 -52
  18. package/lib/dial-pad/dial-pad.d.ts +11 -5
  19. package/lib/dialog/dialog.d.ts +16 -8
  20. package/lib/divider/divider.d.ts +8 -6
  21. package/lib/fab/fab.d.ts +11 -5
  22. package/lib/file-picker/file-picker.d.ts +339 -3
  23. package/lib/header/header.d.ts +333 -1
  24. package/lib/menu/menu.d.ts +16 -8
  25. package/lib/menu-item/menu-item.d.ts +338 -2
  26. package/lib/nav/nav.d.ts +333 -1
  27. package/lib/nav-disclosure/nav-disclosure.d.ts +16 -8
  28. package/lib/nav-item/nav-item.d.ts +11 -5
  29. package/lib/note/note.d.ts +11 -5
  30. package/lib/number-field/number-field.d.ts +26 -12
  31. package/lib/option/option.d.ts +339 -3
  32. package/lib/progress/progress.d.ts +8 -6
  33. package/lib/progress-ring/progress-ring.d.ts +8 -6
  34. package/lib/radio-group/radio-group.d.ts +333 -1
  35. package/lib/range-slider/range-slider.d.ts +11 -5
  36. package/lib/rich-text-editor/facades/prose-mirror-vivid.schema.d.ts +1 -1
  37. package/lib/rich-text-editor/facades/vivid-prose-mirror.facade.d.ts +7 -1
  38. package/lib/rich-text-editor/menubar/consts.d.ts +18 -0
  39. package/lib/rich-text-editor/menubar/menubar.d.ts +3 -0
  40. package/lib/rich-text-editor/rich-text-editor.d.ts +10 -0
  41. package/lib/searchable-select/option-tag.d.ts +11 -5
  42. package/lib/searchable-select/searchable-select.d.ts +349 -7
  43. package/lib/select/select.d.ts +339 -3
  44. package/lib/selectable-box/selectable-box.d.ts +8 -6
  45. package/lib/slider/slider.d.ts +16 -8
  46. package/lib/split-button/split-button.d.ts +26 -12
  47. package/lib/switch/switch.d.ts +8 -6
  48. package/lib/tab/tab.d.ts +349 -7
  49. package/lib/tab-panel/tab-panel.d.ts +333 -1
  50. package/lib/tag/tag.d.ts +338 -2
  51. package/lib/tag-group/tag-group.d.ts +8 -6
  52. package/lib/text-anchor/text-anchor.d.ts +16 -8
  53. package/lib/text-area/text-area.d.ts +8 -6
  54. package/lib/text-field/text-field.d.ts +16 -8
  55. package/lib/time-picker/time-picker.d.ts +38 -26
  56. package/lib/toggletip/toggletip.d.ts +9 -3
  57. package/lib/tooltip/tooltip.d.ts +9 -3
  58. package/lib/tree-item/tree-item.d.ts +338 -2
  59. package/lib/tree-view/tree-view.d.ts +333 -1
  60. package/lib/video-player/video-player.d.ts +11 -5
  61. package/package.json +1 -1
  62. package/shared/affix.js +1 -1
  63. package/shared/aria/aria-change-subscription.d.ts +6 -0
  64. package/shared/aria/aria-mixin.d.ts +338 -0
  65. package/shared/aria/delegate-aria-behavior.d.ts +31 -0
  66. package/shared/aria/delegates-aria.d.ts +14 -9
  67. package/shared/aria/host-semantics-behavior.d.ts +22 -0
  68. package/shared/aria/host-semantics.d.ts +337 -0
  69. package/shared/attribute-binding-behaviour.cjs +41 -0
  70. package/shared/attribute-binding-behaviour.js +39 -0
  71. package/shared/calendar-event.cjs +2 -1
  72. package/shared/calendar-event.js +2 -1
  73. package/shared/definition.js +1 -1
  74. package/shared/definition10.cjs +8 -2
  75. package/shared/definition10.js +9 -3
  76. package/shared/definition11.cjs +4 -28
  77. package/shared/definition11.js +5 -29
  78. package/shared/definition12.cjs +4 -1
  79. package/shared/definition12.js +5 -2
  80. package/shared/definition13.js +1 -1
  81. package/shared/definition14.js +1 -1
  82. package/shared/definition15.cjs +8 -7
  83. package/shared/definition15.js +10 -9
  84. package/shared/definition16.js +1 -1
  85. package/shared/definition17.js +1 -1
  86. package/shared/definition18.js +1 -1
  87. package/shared/definition19.js +1 -1
  88. package/shared/definition2.js +1 -1
  89. package/shared/definition20.js +1 -1
  90. package/shared/definition21.js +1 -1
  91. package/shared/definition22.cjs +3 -2
  92. package/shared/definition22.js +5 -4
  93. package/shared/definition23.cjs +4 -2
  94. package/shared/definition23.js +6 -4
  95. package/shared/definition24.js +1 -1
  96. package/shared/definition25.cjs +2 -14
  97. package/shared/definition25.js +3 -15
  98. package/shared/definition26.cjs +7 -2
  99. package/shared/definition26.js +8 -3
  100. package/shared/definition27.cjs +3 -2
  101. package/shared/definition27.js +4 -3
  102. package/shared/definition28.js +1 -1
  103. package/shared/definition29.js +1 -1
  104. package/shared/definition3.cjs +3 -2
  105. package/shared/definition3.js +5 -4
  106. package/shared/definition30.cjs +33 -34
  107. package/shared/definition30.js +35 -36
  108. package/shared/definition31.cjs +6 -4
  109. package/shared/definition31.js +8 -6
  110. package/shared/definition32.js +1 -1
  111. package/shared/definition33.cjs +7 -2
  112. package/shared/definition33.js +8 -3
  113. package/shared/definition34.js +1 -1
  114. package/shared/definition35.cjs +2 -13
  115. package/shared/definition35.js +4 -15
  116. package/shared/definition36.cjs +8 -5
  117. package/shared/definition36.js +9 -6
  118. package/shared/definition37.js +1 -1
  119. package/shared/definition38.cjs +7 -8
  120. package/shared/definition38.js +9 -10
  121. package/shared/definition39.cjs +7 -8
  122. package/shared/definition39.js +9 -10
  123. package/shared/definition4.js +1 -1
  124. package/shared/definition40.cjs +8 -5
  125. package/shared/definition40.js +9 -6
  126. package/shared/definition41.js +1 -1
  127. package/shared/definition42.js +1 -1
  128. package/shared/definition43.cjs +465 -105
  129. package/shared/definition43.js +457 -97
  130. package/shared/definition44.cjs +9 -6
  131. package/shared/definition44.js +10 -7
  132. package/shared/definition45.cjs +13 -7
  133. package/shared/definition45.js +14 -8
  134. package/shared/definition46.cjs +18 -6
  135. package/shared/definition46.js +20 -8
  136. package/shared/definition47.js +1 -1
  137. package/shared/definition48.js +1 -1
  138. package/shared/definition49.cjs +10 -3
  139. package/shared/definition49.js +12 -5
  140. package/shared/definition5.cjs +7 -2
  141. package/shared/definition5.js +8 -3
  142. package/shared/definition50.cjs +7 -6
  143. package/shared/definition50.js +9 -8
  144. package/shared/definition51.cjs +3 -2
  145. package/shared/definition51.js +4 -3
  146. package/shared/definition52.cjs +8 -4
  147. package/shared/definition52.js +9 -5
  148. package/shared/definition53.js +1 -1
  149. package/shared/definition54.cjs +4 -3
  150. package/shared/definition54.js +6 -5
  151. package/shared/definition55.cjs +7 -4
  152. package/shared/definition55.js +8 -5
  153. package/shared/definition56.cjs +68 -14
  154. package/shared/definition56.js +69 -15
  155. package/shared/definition57.cjs +163 -112
  156. package/shared/definition57.js +165 -114
  157. package/shared/definition58.js +1 -1
  158. package/shared/definition59.js +1 -1
  159. package/shared/definition6.js +1 -1
  160. package/shared/definition60.js +1 -1
  161. package/shared/definition61.cjs +8 -5
  162. package/shared/definition61.js +9 -6
  163. package/shared/definition62.cjs +5 -2
  164. package/shared/definition62.js +6 -3
  165. package/shared/definition63.js +1 -1
  166. package/shared/definition64.js +1 -1
  167. package/shared/definition65.js +1 -1
  168. package/shared/definition7.js +1 -1
  169. package/shared/definition8.cjs +4 -2
  170. package/shared/definition8.js +6 -4
  171. package/shared/definition9.js +1 -1
  172. package/shared/delegates-aria.cjs +106 -56
  173. package/shared/delegates-aria.js +107 -58
  174. package/shared/foundation/button/button.d.ts +8 -6
  175. package/shared/foundation/vivid-element/vivid-element.d.ts +339 -1
  176. package/shared/host-semantics.cjs +65 -0
  177. package/shared/host-semantics.js +62 -0
  178. package/shared/option.cjs +4 -1
  179. package/shared/option.js +4 -1
  180. package/shared/patterns/affix.d.ts +22 -10
  181. package/shared/patterns/anchored.d.ts +18 -6
  182. package/shared/patterns/localized.d.ts +11 -5
  183. package/shared/patterns/trapped-focus.d.ts +11 -5
  184. package/shared/picker-field/mixins/calendar-picker.d.ts +19 -13
  185. package/shared/picker-field/mixins/calendar-picker.template.d.ts +19 -13
  186. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +11 -5
  187. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +38 -26
  188. package/shared/picker-field/mixins/single-date-picker.d.ts +55 -37
  189. package/shared/picker-field/mixins/single-value-picker.d.ts +17 -11
  190. package/shared/picker-field/mixins/time-selection-picker.d.ts +38 -26
  191. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +38 -26
  192. package/shared/picker-field/picker-field.d.ts +21 -9
  193. package/shared/picker-field.template.js +1 -1
  194. package/shared/repeat.js +1 -1
  195. package/shared/slider.template.cjs +10 -9
  196. package/shared/slider.template.js +10 -9
  197. package/shared/templating/attribute-binding-behaviour.d.ts +15 -0
  198. package/shared/templating/render-in-light-dom.d.ts +22 -0
  199. package/shared/text-anchor.template.cjs +2 -13
  200. package/shared/text-anchor.template.js +2 -13
  201. package/shared/time-selection-picker.template.js +1 -1
  202. package/shared/vivid-element.cjs +96 -2
  203. package/shared/vivid-element.js +93 -3
  204. package/styles/core/all.css +1 -1
  205. package/styles/core/theme.css +1 -1
  206. package/styles/core/typography.css +1 -1
  207. package/styles/tokens/theme-dark.css +4 -4
  208. package/styles/tokens/theme-light.css +4 -4
  209. package/styles/tokens/vivid-2-compat.css +1 -1
  210. package/text-anchor/index.js +1 -1
  211. package/vivid.api.json +155 -14
  212. package/shared/Reflector.cjs +0 -71
  213. package/shared/Reflector.js +0 -69
@@ -6,6 +6,7 @@ const vividElement = require('./vivid-element.cjs');
6
6
  const keyCodes = require('./key-codes.cjs');
7
7
  const affix = require('./affix.cjs');
8
8
  const direction = require('./direction.cjs');
9
+ const hostSemantics = require('./host-semantics.cjs');
9
10
  const anchored = require('./anchored.cjs');
10
11
  const delegatesAria = require('./delegates-aria.cjs');
11
12
  const dom = require('./dom.cjs');
@@ -94,12 +95,11 @@ const _Menu = class _Menu extends anchored.Anchored(delegatesAria.DelegatesAria(
94
95
  this.setItems = () => {
95
96
  const newItems = this.domChildren();
96
97
  this.removeItemListeners();
97
- this.menuItems = newItems;
98
- const menuItems = this.menuItems.filter(this.isMenuItemElement);
99
- if (menuItems.length) {
98
+ this.menuItems = newItems.filter(this.isMenuItemElement);
99
+ if (this.menuItems.length) {
100
100
  this.focusIndex = 0;
101
101
  }
102
- menuItems.forEach((item, index) => {
102
+ this.menuItems.forEach((item, index) => {
103
103
  item.setAttribute("tabindex", index === 0 ? "0" : "-1");
104
104
  item.addEventListener("expanded-change", this.handleExpandedChanged);
105
105
  item.addEventListener("focus", this.handleItemFocus);
@@ -183,7 +183,7 @@ const _Menu = class _Menu extends anchored.Anchored(delegatesAria.DelegatesAria(
183
183
  if (autoFocusElement instanceof HTMLElement) {
184
184
  autoFocusElement.focus();
185
185
  } else {
186
- this.setFocus(0, 1);
186
+ this.setFocus(0);
187
187
  }
188
188
  }
189
189
  /**
@@ -206,16 +206,16 @@ const _Menu = class _Menu extends anchored.Anchored(delegatesAria.DelegatesAria(
206
206
  }
207
207
  switch (e.key) {
208
208
  case keyCodes.keyArrowDown:
209
- this.setFocus(this.focusIndex + 1, 1);
209
+ this.setFocus(this.focusIndex + 1);
210
210
  return;
211
211
  case keyCodes.keyArrowUp:
212
- this.setFocus(this.focusIndex - 1, -1);
212
+ this.setFocus(this.focusIndex - 1);
213
213
  return;
214
214
  case keyCodes.keyEnd:
215
- this.setFocus(this.menuItems.length - 1, -1);
215
+ this.setFocus(this.menuItems.length - 1);
216
216
  return;
217
217
  case keyCodes.keyHome:
218
- this.setFocus(0, 1);
218
+ this.setFocus(0);
219
219
  return;
220
220
  default:
221
221
  return true;
@@ -227,22 +227,18 @@ const _Menu = class _Menu extends anchored.Anchored(delegatesAria.DelegatesAria(
227
227
  domChildren() {
228
228
  return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")).filter((child) => !child.hasAttribute("slot"));
229
229
  }
230
- setFocus(focusIndex, adjustment) {
230
+ setFocus(focusIndex) {
231
231
  if (this.menuItems === void 0) {
232
232
  return;
233
233
  }
234
- while (focusIndex >= 0 && focusIndex < this.menuItems.length) {
234
+ if (focusIndex >= 0 && focusIndex < this.menuItems.length) {
235
235
  const child = this.menuItems[focusIndex];
236
- if (this.isFocusableElement(child)) {
237
- if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) {
238
- this.menuItems[this.focusIndex].setAttribute("tabindex", "-1");
239
- }
240
- this.focusIndex = focusIndex;
241
- child.setAttribute("tabindex", "0");
242
- child.focus();
243
- break;
236
+ if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) {
237
+ this.menuItems[this.focusIndex].setAttribute("tabindex", "-1");
244
238
  }
245
- focusIndex += adjustment;
239
+ this.focusIndex = focusIndex;
240
+ child.setAttribute("tabindex", "0");
241
+ child.focus();
246
242
  }
247
243
  }
248
244
  get #triggerBehaviour() {
@@ -291,14 +287,15 @@ const _Menu = class _Menu extends anchored.Anchored(delegatesAria.DelegatesAria(
291
287
  if (this.#triggerBehaviour === "auto" && clickedOnNonCheckboxMenuItem) {
292
288
  this.open = false;
293
289
  }
290
+ const domChildren = this.domChildren();
294
291
  const changedMenuItem = e.target;
295
- const changeItemIndex = this.menuItems.indexOf(changedMenuItem);
292
+ const changeItemIndex = domChildren.indexOf(changedMenuItem);
296
293
  if (changeItemIndex === -1) {
297
294
  return;
298
295
  }
299
296
  if (changedMenuItem.role === "menuitemradio" && changedMenuItem.checked) {
300
297
  for (let i = changeItemIndex - 1; i >= 0; --i) {
301
- const item = this.menuItems[i];
298
+ const item = domChildren[i];
302
299
  const role = item.getAttribute("role");
303
300
  if (role === MenuItemRole.menuitemradio) {
304
301
  item.checked = false;
@@ -307,9 +304,9 @@ const _Menu = class _Menu extends anchored.Anchored(delegatesAria.DelegatesAria(
307
304
  break;
308
305
  }
309
306
  }
310
- const maxIndex = this.menuItems.length - 1;
307
+ const maxIndex = domChildren.length - 1;
311
308
  for (let i = changeItemIndex + 1; i <= maxIndex; ++i) {
312
- const item = this.menuItems[i];
309
+ const item = domChildren[i];
313
310
  const role = item.getAttribute("role");
314
311
  if (role === MenuItemRole.menuitemradio) {
315
312
  item.checked = false;
@@ -357,7 +354,7 @@ var __decorateClass = (decorators, target, key, kind) => {
357
354
  if (result) __defProp(target, key, result);
358
355
  return result;
359
356
  };
360
- class MenuItem extends affix.AffixIcon(vividElement.VividElement) {
357
+ class MenuItem extends hostSemantics.HostSemantics(affix.AffixIcon(vividElement.VividElement)) {
361
358
  constructor() {
362
359
  super();
363
360
  // eslint-disable-next-line @nrwl/nx/workspace/no-attribute-default-value
@@ -653,11 +650,13 @@ const MenuItemTemplate = (context) => {
653
650
  const iconTag = context.tagFor(definition.Icon);
654
651
  return vividElement.html`
655
652
  <template
656
- role="${(x) => x.role ? x.role : MenuItemRole.menuitem}"
657
- aria-haspopup="${(x) => x.hasSubmenu ? "menu" : void 0}"
658
- aria-checked="${(x) => x.role !== MenuItemRole.menuitem ? x.checked : void 0}"
659
- aria-disabled="${(x) => x.disabled}"
660
- aria-expanded="${(x) => x.expanded}"
653
+ ${hostSemantics.applyHostSemantics({
654
+ role: MenuItemRole.menuitem,
655
+ ariaHasPopup: (x) => x.hasSubmenu ? "menu" : void 0,
656
+ ariaChecked: (x) => x.role !== MenuItemRole.menuitem ? x.checked : void 0,
657
+ ariaDisabled: (x) => x.disabled,
658
+ ariaExpanded: (x) => x.expanded
659
+ })}
661
660
  @keydown="${(x, c) => x.handleMenuItemKeyDown(c.event)}"
662
661
  @click="${handleClick}"
663
662
  @mouseover="${(x, c) => x.handleMouseOver(c.event)}"
@@ -730,8 +729,7 @@ const MenuTemplate = (context) => {
730
729
  x.open = state;
731
730
  }
732
731
  return vividElement.html`
733
- <template role="presentation"
734
- @change="${(x, c) => x._onChange(c.event)}"
732
+ <template @change="${(x, c) => x._onChange(c.event)}"
735
733
  @focusout="${(x, c) => x._onFocusout(c.event)}">
736
734
  ${anchorSlotTemplate}
737
735
  <${popupTag}
@@ -750,8 +748,9 @@ const MenuTemplate = (context) => {
750
748
  </div>
751
749
  <div
752
750
  class="body"
753
- role="menu"
754
- aria-label="${(x) => x.ariaLabel}"
751
+ ${delegatesAria.delegateAria({
752
+ role: "menu"
753
+ })}
755
754
  @keydown="${(x, c) => x.handleMenuKeyDown(c.event)}"
756
755
  @focusout="${(x, c) => x.handleFocusOut(c.event)}"
757
756
  >
@@ -1,11 +1,12 @@
1
1
  import { P as Popup, p as popupDefinition } from './definition65.js';
2
2
  import { I as Icon, i as iconDefinition } from './definition28.js';
3
- import { D as DOM, V as VividElement, o as observable, a as attr, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
3
+ import { D as DOM, V as VividElement, o as observable, a as attr, h as html, g as createRegisterFunction, i as defineVividComponent } from './vivid-element.js';
4
4
  import { g as keyHome, d as keyEnd, e as keyArrowUp, f as keyArrowDown, h as keyArrowLeft, i as keyArrowRight, a as keySpace, k as keyEnter } from './key-codes.js';
5
5
  import { b as AffixIcon, a as affixIconTemplateFactory } from './affix.js';
6
6
  import { D as Direction, g as getDirection } from './direction.js';
7
+ import { H as HostSemantics, a as applyHostSemantics } from './host-semantics.js';
7
8
  import { A as Anchored, a as anchorSlotTemplateFactory } from './anchored.js';
8
- import { D as DelegatesAria } from './delegates-aria.js';
9
+ import { D as DelegatesAria, d as delegateAria } from './delegates-aria.js';
9
10
  import { i as isHTMLElement } from './dom.js';
10
11
  import { h as handleEscapeKeyAndStopPropogation } from './index.js';
11
12
  import { r as ref } from './ref.js';
@@ -92,12 +93,11 @@ const _Menu = class _Menu extends Anchored(DelegatesAria(VividElement)) {
92
93
  this.setItems = () => {
93
94
  const newItems = this.domChildren();
94
95
  this.removeItemListeners();
95
- this.menuItems = newItems;
96
- const menuItems = this.menuItems.filter(this.isMenuItemElement);
97
- if (menuItems.length) {
96
+ this.menuItems = newItems.filter(this.isMenuItemElement);
97
+ if (this.menuItems.length) {
98
98
  this.focusIndex = 0;
99
99
  }
100
- menuItems.forEach((item, index) => {
100
+ this.menuItems.forEach((item, index) => {
101
101
  item.setAttribute("tabindex", index === 0 ? "0" : "-1");
102
102
  item.addEventListener("expanded-change", this.handleExpandedChanged);
103
103
  item.addEventListener("focus", this.handleItemFocus);
@@ -181,7 +181,7 @@ const _Menu = class _Menu extends Anchored(DelegatesAria(VividElement)) {
181
181
  if (autoFocusElement instanceof HTMLElement) {
182
182
  autoFocusElement.focus();
183
183
  } else {
184
- this.setFocus(0, 1);
184
+ this.setFocus(0);
185
185
  }
186
186
  }
187
187
  /**
@@ -204,16 +204,16 @@ const _Menu = class _Menu extends Anchored(DelegatesAria(VividElement)) {
204
204
  }
205
205
  switch (e.key) {
206
206
  case keyArrowDown:
207
- this.setFocus(this.focusIndex + 1, 1);
207
+ this.setFocus(this.focusIndex + 1);
208
208
  return;
209
209
  case keyArrowUp:
210
- this.setFocus(this.focusIndex - 1, -1);
210
+ this.setFocus(this.focusIndex - 1);
211
211
  return;
212
212
  case keyEnd:
213
- this.setFocus(this.menuItems.length - 1, -1);
213
+ this.setFocus(this.menuItems.length - 1);
214
214
  return;
215
215
  case keyHome:
216
- this.setFocus(0, 1);
216
+ this.setFocus(0);
217
217
  return;
218
218
  default:
219
219
  return true;
@@ -225,22 +225,18 @@ const _Menu = class _Menu extends Anchored(DelegatesAria(VividElement)) {
225
225
  domChildren() {
226
226
  return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")).filter((child) => !child.hasAttribute("slot"));
227
227
  }
228
- setFocus(focusIndex, adjustment) {
228
+ setFocus(focusIndex) {
229
229
  if (this.menuItems === void 0) {
230
230
  return;
231
231
  }
232
- while (focusIndex >= 0 && focusIndex < this.menuItems.length) {
232
+ if (focusIndex >= 0 && focusIndex < this.menuItems.length) {
233
233
  const child = this.menuItems[focusIndex];
234
- if (this.isFocusableElement(child)) {
235
- if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) {
236
- this.menuItems[this.focusIndex].setAttribute("tabindex", "-1");
237
- }
238
- this.focusIndex = focusIndex;
239
- child.setAttribute("tabindex", "0");
240
- child.focus();
241
- break;
234
+ if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) {
235
+ this.menuItems[this.focusIndex].setAttribute("tabindex", "-1");
242
236
  }
243
- focusIndex += adjustment;
237
+ this.focusIndex = focusIndex;
238
+ child.setAttribute("tabindex", "0");
239
+ child.focus();
244
240
  }
245
241
  }
246
242
  get #triggerBehaviour() {
@@ -289,14 +285,15 @@ const _Menu = class _Menu extends Anchored(DelegatesAria(VividElement)) {
289
285
  if (this.#triggerBehaviour === "auto" && clickedOnNonCheckboxMenuItem) {
290
286
  this.open = false;
291
287
  }
288
+ const domChildren = this.domChildren();
292
289
  const changedMenuItem = e.target;
293
- const changeItemIndex = this.menuItems.indexOf(changedMenuItem);
290
+ const changeItemIndex = domChildren.indexOf(changedMenuItem);
294
291
  if (changeItemIndex === -1) {
295
292
  return;
296
293
  }
297
294
  if (changedMenuItem.role === "menuitemradio" && changedMenuItem.checked) {
298
295
  for (let i = changeItemIndex - 1; i >= 0; --i) {
299
- const item = this.menuItems[i];
296
+ const item = domChildren[i];
300
297
  const role = item.getAttribute("role");
301
298
  if (role === MenuItemRole.menuitemradio) {
302
299
  item.checked = false;
@@ -305,9 +302,9 @@ const _Menu = class _Menu extends Anchored(DelegatesAria(VividElement)) {
305
302
  break;
306
303
  }
307
304
  }
308
- const maxIndex = this.menuItems.length - 1;
305
+ const maxIndex = domChildren.length - 1;
309
306
  for (let i = changeItemIndex + 1; i <= maxIndex; ++i) {
310
- const item = this.menuItems[i];
307
+ const item = domChildren[i];
311
308
  const role = item.getAttribute("role");
312
309
  if (role === MenuItemRole.menuitemradio) {
313
310
  item.checked = false;
@@ -355,7 +352,7 @@ var __decorateClass = (decorators, target, key, kind) => {
355
352
  if (result) __defProp(target, key, result);
356
353
  return result;
357
354
  };
358
- class MenuItem extends AffixIcon(VividElement) {
355
+ class MenuItem extends HostSemantics(AffixIcon(VividElement)) {
359
356
  constructor() {
360
357
  super();
361
358
  // eslint-disable-next-line @nrwl/nx/workspace/no-attribute-default-value
@@ -651,11 +648,13 @@ const MenuItemTemplate = (context) => {
651
648
  const iconTag = context.tagFor(Icon);
652
649
  return html`
653
650
  <template
654
- role="${(x) => x.role ? x.role : MenuItemRole.menuitem}"
655
- aria-haspopup="${(x) => x.hasSubmenu ? "menu" : void 0}"
656
- aria-checked="${(x) => x.role !== MenuItemRole.menuitem ? x.checked : void 0}"
657
- aria-disabled="${(x) => x.disabled}"
658
- aria-expanded="${(x) => x.expanded}"
651
+ ${applyHostSemantics({
652
+ role: MenuItemRole.menuitem,
653
+ ariaHasPopup: (x) => x.hasSubmenu ? "menu" : void 0,
654
+ ariaChecked: (x) => x.role !== MenuItemRole.menuitem ? x.checked : void 0,
655
+ ariaDisabled: (x) => x.disabled,
656
+ ariaExpanded: (x) => x.expanded
657
+ })}
659
658
  @keydown="${(x, c) => x.handleMenuItemKeyDown(c.event)}"
660
659
  @click="${handleClick}"
661
660
  @mouseover="${(x, c) => x.handleMouseOver(c.event)}"
@@ -728,8 +727,7 @@ const MenuTemplate = (context) => {
728
727
  x.open = state;
729
728
  }
730
729
  return html`
731
- <template role="presentation"
732
- @change="${(x, c) => x._onChange(c.event)}"
730
+ <template @change="${(x, c) => x._onChange(c.event)}"
733
731
  @focusout="${(x, c) => x._onFocusout(c.event)}">
734
732
  ${anchorSlotTemplate}
735
733
  <${popupTag}
@@ -748,8 +746,9 @@ const MenuTemplate = (context) => {
748
746
  </div>
749
747
  <div
750
748
  class="body"
751
- role="menu"
752
- aria-label="${(x) => x.ariaLabel}"
749
+ ${delegateAria({
750
+ role: "menu"
751
+ })}
753
752
  @keydown="${(x, c) => x.handleMenuKeyDown(c.event)}"
754
753
  @focusout="${(x, c) => x.handleFocusOut(c.event)}"
755
754
  >
@@ -70,11 +70,13 @@ const NavDisclosureTemplate = (context) => {
70
70
  const iconTag = context.tagFor(definition.Icon);
71
71
  return vividElement.html`<details class="base" ${ref.ref("details")} ?open=${(x) => x.open}>
72
72
  <summary class="${getClasses}"
73
- role="button"
74
73
  aria-controls="disclosure-content"
75
- aria-expanded="${(x) => x.open}"
76
- aria-label=${(x) => x.ariaLabel}
77
- aria-current=${(x) => getAriaCurrent(x.ariaCurrent, x.open)}>
74
+ ${delegatesAria.delegateAria({
75
+ role: "button",
76
+ ariaExpanded: (x) => x.open,
77
+ ariaCurrent: (x) => getAriaCurrent(x.ariaCurrent, x.open)
78
+ })}
79
+ >
78
80
  ${(x) => affixIconTemplate(x.icon, affix.IconWrapper.Slot)}
79
81
  ${(x) => x.label}
80
82
  <slot name="meta"></slot>
@@ -1,7 +1,7 @@
1
1
  import { I as Icon, i as iconDefinition } from './definition28.js';
2
- import { V as VividElement, a as attr, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
2
+ import { V as VividElement, a as attr, h as html, g as createRegisterFunction, i as defineVividComponent } from './vivid-element.js';
3
3
  import { b as AffixIcon, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
4
- import { D as DelegatesAria } from './delegates-aria.js';
4
+ import { D as DelegatesAria, d as delegateAria } from './delegates-aria.js';
5
5
  import { r as ref } from './ref.js';
6
6
  import { c as classNames } from './class-names.js';
7
7
 
@@ -68,11 +68,13 @@ const NavDisclosureTemplate = (context) => {
68
68
  const iconTag = context.tagFor(Icon);
69
69
  return html`<details class="base" ${ref("details")} ?open=${(x) => x.open}>
70
70
  <summary class="${getClasses}"
71
- role="button"
72
71
  aria-controls="disclosure-content"
73
- aria-expanded="${(x) => x.open}"
74
- aria-label=${(x) => x.ariaLabel}
75
- aria-current=${(x) => getAriaCurrent(x.ariaCurrent, x.open)}>
72
+ ${delegateAria({
73
+ role: "button",
74
+ ariaExpanded: (x) => x.open,
75
+ ariaCurrent: (x) => getAriaCurrent(x.ariaCurrent, x.open)
76
+ })}
77
+ >
76
78
  ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
77
79
  ${(x) => x.label}
78
80
  <slot name="meta"></slot>
@@ -1,5 +1,5 @@
1
1
  import { i as iconDefinition } from './definition28.js';
2
- import { h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
2
+ import { h as html, g as createRegisterFunction, i as defineVividComponent } from './vivid-element.js';
3
3
  import { b as AffixIcon } from './affix.js';
4
4
  import { T as TextAnchor } from './text-anchor.js';
5
5
  import { t as textAnchorTemplate } from './text-anchor.template.js';
@@ -1,13 +1,18 @@
1
1
  'use strict';
2
2
 
3
3
  const vividElement = require('./vivid-element.cjs');
4
+ const delegatesAria = require('./delegates-aria.cjs');
4
5
 
5
6
  const styles = "nav{display:flex;flex-direction:column;gap:4px}";
6
7
 
7
- class Nav extends vividElement.VividElement {
8
+ class Nav extends delegatesAria.DelegatesAria(vividElement.VividElement) {
8
9
  }
9
10
 
10
- const NavTemplate = vividElement.html` <nav><slot></slot></nav> `;
11
+ const NavTemplate = vividElement.html`
12
+ <nav ${delegatesAria.delegateAria()}>
13
+ <slot></slot>
14
+ </nav>
15
+ `;
11
16
 
12
17
  const navDefinition = vividElement.defineVividComponent("nav", Nav, NavTemplate, [], {
13
18
  styles
@@ -1,11 +1,16 @@
1
- import { V as VividElement, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
1
+ import { V as VividElement, h as html, g as createRegisterFunction, i as defineVividComponent } from './vivid-element.js';
2
+ import { D as DelegatesAria, d as delegateAria } from './delegates-aria.js';
2
3
 
3
4
  const styles = "nav{display:flex;flex-direction:column;gap:4px}";
4
5
 
5
- class Nav extends VividElement {
6
+ class Nav extends DelegatesAria(VividElement) {
6
7
  }
7
8
 
8
- const NavTemplate = html` <nav><slot></slot></nav> `;
9
+ const NavTemplate = html`
10
+ <nav ${delegateAria()}>
11
+ <slot></slot>
12
+ </nav>
13
+ `;
9
14
 
10
15
  const navDefinition = defineVividComponent("nav", Nav, NavTemplate, [], {
11
16
  styles
@@ -1,5 +1,5 @@
1
1
  import { i as iconDefinition } from './definition28.js';
2
- import { V as VividElement, a as attr, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
2
+ import { V as VividElement, a as attr, h as html, g as createRegisterFunction, i as defineVividComponent } from './vivid-element.js';
3
3
  import { b as AffixIcon, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
4
4
  import { c as classNames } from './class-names.js';
5
5
  import { w as when } from './when.js';
@@ -8,8 +8,8 @@ const applyMixinsWithObservables = require('./applyMixinsWithObservables.cjs');
8
8
  const delegatesAria = require('./delegates-aria.cjs');
9
9
  const formAssociated = require('./form-associated.cjs');
10
10
  const affix = require('./affix.cjs');
11
- const localized = require('./localized.cjs');
12
11
  const keyCodes = require('./key-codes.cjs');
12
+ const localized = require('./localized.cjs');
13
13
  const formElements = require('./form-elements.cjs');
14
14
  const enums = require('./enums.cjs');
15
15
  const classNames = require('./class-names.cjs');
@@ -397,18 +397,7 @@ const NumberFieldTemplate = (context) => {
397
397
  ?spellcheck="${(x) => x.spellcheck}"
398
398
  :value="${(x) => x._presentationValue}"
399
399
  type="text"
400
- aria-atomic="${(x) => x.ariaAtomic}"
401
- aria-busy="${(x) => x.ariaBusy}"
402
- aria-current="${(x) => x.ariaCurrent}"
403
- aria-disabled="${(x) => x.ariaDisabled}"
404
- aria-haspopup="${(x) => x.ariaHasPopup}"
405
- aria-hidden="${(x) => x.ariaHidden}"
406
- aria-invalid="${(x) => x.ariaInvalid}"
407
- aria-keyshortcuts="${(x) => x.ariaKeyShortcuts}"
408
- aria-label="${(x) => x.ariaLabel}"
409
- aria-live="${(x) => x.ariaLive}"
410
- aria-relevant="${(x) => x.ariaRelevant}"
411
- aria-roledescription="${(x) => x.ariaRoleDescription}"
400
+ ${delegatesAria.delegateAria()}
412
401
  ${ref.ref("control")}
413
402
  />
414
403
  </div>
@@ -1,13 +1,13 @@
1
1
  import { B as Button, b as buttonDefinition } from './definition11.js';
2
2
  import { D as Divider, d as dividerDefinition } from './definition23.js';
3
- import { V as VividElement, D as DOM, a as attr, n as nullableNumberConverter, o as observable, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
3
+ import { V as VividElement, D as DOM, a as attr, n as nullableNumberConverter, o as observable, h as html, g as createRegisterFunction, i as defineVividComponent } from './vivid-element.js';
4
4
  import { i as iconDefinition } from './definition28.js';
5
5
  import { a as applyMixinsWithObservables } from './applyMixinsWithObservables.js';
6
- import { D as DelegatesAria } from './delegates-aria.js';
6
+ import { D as DelegatesAria, d as delegateAria } from './delegates-aria.js';
7
7
  import { F as FormAssociated } from './form-associated.js';
8
8
  import { b as AffixIcon } from './affix.js';
9
- import { L as Localized } from './localized.js';
10
9
  import { f as keyArrowDown, e as keyArrowUp } from './key-codes.js';
10
+ import { L as Localized } from './localized.js';
11
11
  import { F as FormElementSuccessText, a as FormElementHelperText, b as FormElementCharCount, e as errorText, f as formElements, g as getFeedbackTemplate } from './form-elements.js';
12
12
  import { S as Shape } from './enums.js';
13
13
  import { c as classNames } from './class-names.js';
@@ -395,18 +395,7 @@ const NumberFieldTemplate = (context) => {
395
395
  ?spellcheck="${(x) => x.spellcheck}"
396
396
  :value="${(x) => x._presentationValue}"
397
397
  type="text"
398
- aria-atomic="${(x) => x.ariaAtomic}"
399
- aria-busy="${(x) => x.ariaBusy}"
400
- aria-current="${(x) => x.ariaCurrent}"
401
- aria-disabled="${(x) => x.ariaDisabled}"
402
- aria-haspopup="${(x) => x.ariaHasPopup}"
403
- aria-hidden="${(x) => x.ariaHidden}"
404
- aria-invalid="${(x) => x.ariaInvalid}"
405
- aria-keyshortcuts="${(x) => x.ariaKeyShortcuts}"
406
- aria-label="${(x) => x.ariaLabel}"
407
- aria-live="${(x) => x.ariaLive}"
408
- aria-relevant="${(x) => x.ariaRelevant}"
409
- aria-roledescription="${(x) => x.ariaRoleDescription}"
398
+ ${delegateAria()}
410
399
  ${ref("control")}
411
400
  />
412
401
  </div>
@@ -4,6 +4,7 @@ const definition = require('./definition28.cjs');
4
4
  const vividElement = require('./vivid-element.cjs');
5
5
  const option = require('./option.cjs');
6
6
  const affix = require('./affix.cjs');
7
+ const hostSemantics = require('./host-semantics.cjs');
7
8
  const classNames = require('./class-names.cjs');
8
9
  const when = require('./when.cjs');
9
10
 
@@ -20,10 +21,12 @@ const ListboxOptionTemplate = (context) => {
20
21
  const iconTag = context.tagFor(definition.Icon);
21
22
  return vividElement.html`
22
23
  <template
23
- role="option"
24
- aria-checked="${(x) => x.checked}"
25
- aria-selected="${(x) => x.selected}"
26
- aria-disabled="${(x) => x.disabled}"
24
+ ${hostSemantics.applyHostSemantics({
25
+ role: "option",
26
+ ariaChecked: (x) => x.checked,
27
+ ariaSelected: (x) => x.selected,
28
+ ariaDisabled: (x) => x.disabled
29
+ })}
27
30
  style="${(x) => x._isNotMatching ? "display: none" : ""}"
28
31
  >
29
32
  <div class="${getClasses}">
@@ -51,7 +54,7 @@ const ListboxOptionTemplate = (context) => {
51
54
  `;
52
55
  };
53
56
 
54
- const styles = ":host([disabled]){cursor:not-allowed}.base{--_connotation-color-primary: var(--vvd-option-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-option-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-option-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-firm: var(--vvd-option-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-option-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-option-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-pale: var(--vvd-option-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-dim: var(--vvd-option-accent-dim, var(--vvd-color-neutral-200))}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.base{display:flex;box-sizing:border-box;align-items:center;border-radius:8px;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_option-appearance-color-text, var(--_appearance-color-text));font:var(--vvd-typography-base);gap:var(--_option-gap);hyphens:auto;inline-size:100%;min-block-size:var(--_option-min-block-size);padding-inline:var(--_option-padding-inline);vertical-align:middle;word-break:break-word}.base{--_option-min-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_option-padding-inline: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4) ;--_option-gap: calc( calc(1px*(36 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) / 3);--_option-icon-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/2) }@supports (user-select: none){.base{user-select:none}}.base:not(.disabled){cursor:pointer}.base.disabled{pointer-events:none}:host([scale=condensed]) .base{--_option-min-block-size: calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_option-padding-inline: calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/2) ;--_option-gap: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/5) ;--_option-icon-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4) }:host([aria-checked=true]) .base{--focus-stroke-color: var(--vvd-color-neutral-500);--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.base.hidden{display:none}.text{font:var(--vvd-typography-base)}.match{color:var(--vvd-color-cta-600);font:var(--vvd-typography-base-bold)}slot[name=icon]{font-size:var(--_option-icon-size);line-height:1}.base:not(.disabled,.selected) slot[name=icon]{color:var(--vvd-color-neutral-600)}.checkmark{margin-left:auto;font-size:var(--_option-icon-size)}";
57
+ const styles = ":host([disabled]){cursor:not-allowed}.base{--_connotation-color-primary: var(--vvd-option-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-option-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-option-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-firm: var(--vvd-option-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-option-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-option-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-pale: var(--vvd-option-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-dim: var(--vvd-option-accent-dim, var(--vvd-color-neutral-200))}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.base{display:flex;box-sizing:border-box;align-items:center;border-radius:8px;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_option-appearance-color-text, var(--_appearance-color-text));font:var(--vvd-typography-base);gap:var(--_option-gap);hyphens:auto;inline-size:100%;min-block-size:var(--_option-min-block-size);padding-inline:var(--_option-padding-inline);vertical-align:middle;word-break:break-word}.base{--_option-min-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_option-padding-inline: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4) ;--_option-gap: calc( calc(1px*(36 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) / 3);--_option-icon-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/2) }@supports (user-select: none){.base{user-select:none}}.base:not(.disabled){cursor:pointer}.base.disabled{pointer-events:none}:host([scale=condensed]) .base{--_option-min-block-size: calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_option-padding-inline: calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/2) ;--_option-gap: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/5) ;--_option-icon-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4) }:host([aria-checked=true]) .base{--focus-stroke-color: var(--vvd-color-cta-500);--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.base.hidden{display:none}.text{font:var(--vvd-typography-base)}.match{color:var(--vvd-color-cta-600);font:var(--vvd-typography-base-bold)}slot[name=icon]{font-size:var(--_option-icon-size);line-height:1}.base:not(.disabled,.selected) slot[name=icon]{color:var(--vvd-color-neutral-600)}.checkmark{margin-left:auto;font-size:var(--_option-icon-size)}";
55
58
 
56
59
  const listboxOptionDefinition = vividElement.defineVividComponent(
57
60
  "option",
@@ -1,7 +1,8 @@
1
1
  import { I as Icon, i as iconDefinition } from './definition28.js';
2
- import { h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
2
+ import { h as html, g as createRegisterFunction, i as defineVividComponent } from './vivid-element.js';
3
3
  import { L as ListboxOption } from './option.js';
4
4
  import { a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
5
+ import { a as applyHostSemantics } from './host-semantics.js';
5
6
  import { c as classNames } from './class-names.js';
6
7
  import { w as when } from './when.js';
7
8
 
@@ -18,10 +19,12 @@ const ListboxOptionTemplate = (context) => {
18
19
  const iconTag = context.tagFor(Icon);
19
20
  return html`
20
21
  <template
21
- role="option"
22
- aria-checked="${(x) => x.checked}"
23
- aria-selected="${(x) => x.selected}"
24
- aria-disabled="${(x) => x.disabled}"
22
+ ${applyHostSemantics({
23
+ role: "option",
24
+ ariaChecked: (x) => x.checked,
25
+ ariaSelected: (x) => x.selected,
26
+ ariaDisabled: (x) => x.disabled
27
+ })}
25
28
  style="${(x) => x._isNotMatching ? "display: none" : ""}"
26
29
  >
27
30
  <div class="${getClasses}">
@@ -49,7 +52,7 @@ const ListboxOptionTemplate = (context) => {
49
52
  `;
50
53
  };
51
54
 
52
- const styles = ":host([disabled]){cursor:not-allowed}.base{--_connotation-color-primary: var(--vvd-option-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-option-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-option-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-firm: var(--vvd-option-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-option-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-option-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-pale: var(--vvd-option-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-dim: var(--vvd-option-accent-dim, var(--vvd-color-neutral-200))}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.base{display:flex;box-sizing:border-box;align-items:center;border-radius:8px;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_option-appearance-color-text, var(--_appearance-color-text));font:var(--vvd-typography-base);gap:var(--_option-gap);hyphens:auto;inline-size:100%;min-block-size:var(--_option-min-block-size);padding-inline:var(--_option-padding-inline);vertical-align:middle;word-break:break-word}.base{--_option-min-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_option-padding-inline: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4) ;--_option-gap: calc( calc(1px*(36 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) / 3);--_option-icon-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/2) }@supports (user-select: none){.base{user-select:none}}.base:not(.disabled){cursor:pointer}.base.disabled{pointer-events:none}:host([scale=condensed]) .base{--_option-min-block-size: calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_option-padding-inline: calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/2) ;--_option-gap: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/5) ;--_option-icon-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4) }:host([aria-checked=true]) .base{--focus-stroke-color: var(--vvd-color-neutral-500);--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.base.hidden{display:none}.text{font:var(--vvd-typography-base)}.match{color:var(--vvd-color-cta-600);font:var(--vvd-typography-base-bold)}slot[name=icon]{font-size:var(--_option-icon-size);line-height:1}.base:not(.disabled,.selected) slot[name=icon]{color:var(--vvd-color-neutral-600)}.checkmark{margin-left:auto;font-size:var(--_option-icon-size)}";
55
+ const styles = ":host([disabled]){cursor:not-allowed}.base{--_connotation-color-primary: var(--vvd-option-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-option-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-option-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-firm: var(--vvd-option-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-option-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-option-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-pale: var(--vvd-option-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-dim: var(--vvd-option-accent-dim, var(--vvd-color-neutral-200))}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.base{display:flex;box-sizing:border-box;align-items:center;border-radius:8px;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_option-appearance-color-text, var(--_appearance-color-text));font:var(--vvd-typography-base);gap:var(--_option-gap);hyphens:auto;inline-size:100%;min-block-size:var(--_option-min-block-size);padding-inline:var(--_option-padding-inline);vertical-align:middle;word-break:break-word}.base{--_option-min-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_option-padding-inline: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4) ;--_option-gap: calc( calc(1px*(36 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) / 3);--_option-icon-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/2) }@supports (user-select: none){.base{user-select:none}}.base:not(.disabled){cursor:pointer}.base.disabled{pointer-events:none}:host([scale=condensed]) .base{--_option-min-block-size: calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_option-padding-inline: calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/2) ;--_option-gap: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/5) ;--_option-icon-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4) }:host([aria-checked=true]) .base{--focus-stroke-color: var(--vvd-color-cta-500);--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.base.hidden{display:none}.text{font:var(--vvd-typography-base)}.match{color:var(--vvd-color-cta-600);font:var(--vvd-typography-base-bold)}slot[name=icon]{font-size:var(--_option-icon-size);line-height:1}.base:not(.disabled,.selected) slot[name=icon]{color:var(--vvd-color-neutral-600)}.checkmark{margin-left:auto;font-size:var(--_option-icon-size)}";
53
56
 
54
57
  const listboxOptionDefinition = defineVividComponent(
55
58
  "option",
@@ -1,5 +1,5 @@
1
1
  import { B as Button, b as buttonDefinition } from './definition11.js';
2
- import { V as VividElement, a as attr, o as observable, v as volatile, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
2
+ import { V as VividElement, a as attr, o as observable, v as volatile, h as html, g as createRegisterFunction, i as defineVividComponent } from './vivid-element.js';
3
3
  import { b as Size, S as Shape } from './enums.js';
4
4
  import { e as elements } from './slotted.js';
5
5
  import { c as classNames } from './class-names.js';
@@ -33,16 +33,15 @@ const getClasses = ({ connotation, size, paused }) => classNames.classNames(
33
33
  [`size-${size}`, !!size]
34
34
  );
35
35
  const progressSegments = 44;
36
- const ProgressRingTemplate = vividElement.html`<template
37
- role="${(x) => x.ariaLabel ? "presentation" : null}"
38
- >
36
+ const ProgressRingTemplate = vividElement.html`<template>
39
37
  <div
40
- role="progressbar"
41
- aria-label="${(x) => x.ariaLabel}"
42
- aria-valuenow="${(x) => x.value}"
43
- aria-valuemin="${(x) => x.min}"
44
- aria-valuemax="${(x) => x.max}"
45
38
  class="${(x) => x.paused ? "paused" : ""} ${getClasses}"
39
+ ${delegatesAria.delegateAria({
40
+ role: "progressbar",
41
+ ariaValueNow: (x) => x.value,
42
+ ariaValueMin: (x) => x.min,
43
+ ariaValueMax: (x) => x.max
44
+ })}
46
45
  >
47
46
  ${when.when(
48
47
  (x) => typeof x.value === "number",