@vonage/vivid 5.14.0 → 5.15.1

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 (345) hide show
  1. package/README.md +1 -1
  2. package/accordion/definition.cjs +0 -5
  3. package/accordion/definition.js +0 -5
  4. package/accordion/index.cjs +1 -1
  5. package/accordion/index.js +3 -14
  6. package/accordion-item/definition.cjs +1 -1
  7. package/accordion-item/definition.js +1 -1
  8. package/alert/definition.cjs +2 -2
  9. package/alert/definition.js +2 -2
  10. package/alert/index.cjs +1 -1
  11. package/alert/index.js +1 -1
  12. package/audio-player/definition.cjs +2 -6
  13. package/audio-player/definition.js +2 -6
  14. package/audio-player/index.cjs +1 -1
  15. package/audio-player/index.js +2 -8
  16. package/banner/definition.cjs +1 -1
  17. package/banner/definition.js +1 -1
  18. package/breadcrumb/definition.cjs +0 -1
  19. package/breadcrumb/definition.js +0 -1
  20. package/breadcrumb/index.cjs +1 -1
  21. package/breadcrumb/index.js +0 -1
  22. package/breadcrumb-item/definition.cjs +1 -1
  23. package/breadcrumb-item/definition.js +1 -1
  24. package/breadcrumb-item/index.cjs +1 -1
  25. package/breadcrumb-item/index.js +1 -1
  26. package/bundled/attribute-binding-behaviour.cjs +1 -1
  27. package/bundled/attribute-binding-behaviour.js +1 -3
  28. package/bundled/base-color-picker.cjs +1 -1
  29. package/bundled/base-color-picker.js +4 -9
  30. package/bundled/base-progress.cjs +1 -1
  31. package/bundled/base-progress.js +0 -3
  32. package/bundled/button.cjs +1 -1
  33. package/bundled/button.js +1 -10
  34. package/bundled/calendar-picker.template.cjs +1 -1
  35. package/bundled/calendar-picker.template.js +90 -42
  36. package/bundled/children.js +1 -1
  37. package/bundled/definition.cjs +1 -1
  38. package/bundled/definition.js +1 -1
  39. package/bundled/definition10.cjs +1 -1
  40. package/bundled/definition10.js +0 -10
  41. package/bundled/definition11.cjs +1 -1
  42. package/bundled/definition11.js +0 -1
  43. package/bundled/definition12.cjs +2 -2
  44. package/bundled/definition12.js +1 -2
  45. package/bundled/definition13.cjs +1 -1
  46. package/bundled/definition13.js +1 -1
  47. package/bundled/definition17.cjs +1 -1
  48. package/bundled/definition17.js +1 -4
  49. package/bundled/definition18.cjs +1 -1
  50. package/bundled/definition18.js +6 -18
  51. package/bundled/definition19.cjs +2 -2
  52. package/bundled/definition19.js +8 -24
  53. package/bundled/definition2.cjs +5 -5
  54. package/bundled/definition2.js +26 -27
  55. package/bundled/definition20.cjs +1 -1
  56. package/bundled/definition20.js +1 -1
  57. package/bundled/definition22.cjs +5 -5
  58. package/bundled/definition22.js +2 -3
  59. package/bundled/definition3.cjs +1 -1
  60. package/bundled/definition3.js +1 -2
  61. package/bundled/definition5.cjs +1 -1
  62. package/bundled/definition5.js +1 -6
  63. package/bundled/definition6.cjs +1 -1
  64. package/bundled/definition6.js +1 -2
  65. package/bundled/definition7.cjs +1 -1
  66. package/bundled/definition7.js +2 -5
  67. package/bundled/definition8.cjs +1 -1
  68. package/bundled/definition8.js +2 -13
  69. package/bundled/definition9.js +9 -9
  70. package/bundled/delegates-aria.cjs +1 -1
  71. package/bundled/delegates-aria.js +1 -3
  72. package/bundled/floating-ui.dom.cjs +1 -1
  73. package/bundled/floating-ui.dom.js +491 -487
  74. package/bundled/form-associated.cjs +1 -1
  75. package/bundled/form-associated.js +9 -18
  76. package/bundled/key-codes.cjs +1 -1
  77. package/bundled/listbox.cjs +1 -1
  78. package/bundled/listbox.js +10 -27
  79. package/bundled/localized.cjs +1 -1
  80. package/bundled/localized.js +49 -48
  81. package/bundled/mixins.cjs +2 -2
  82. package/bundled/mixins.js +1 -4
  83. package/bundled/normalize.js +2 -2
  84. package/bundled/picker-field.template.cjs +1 -1
  85. package/bundled/picker-field.template.js +0 -1
  86. package/bundled/scrollIntoView.cjs +1 -1
  87. package/bundled/scrollIntoView.js +1 -4
  88. package/bundled/slider.template.cjs +1 -1
  89. package/bundled/slider.template.js +1 -1
  90. package/bundled/slottable-request.js +2 -1
  91. package/bundled/text-field.cjs +1 -1
  92. package/bundled/text-field.js +1 -1
  93. package/bundled/time-selection-picker.template.cjs +2 -2
  94. package/bundled/time-selection-picker.template.js +3 -6
  95. package/bundled/vivid-element.cjs +3 -3
  96. package/bundled/vivid-element.js +302 -293
  97. package/button/definition.cjs +1 -1
  98. package/button/definition.js +1 -1
  99. package/calendar/definition.cjs +0 -2
  100. package/calendar/definition.js +1 -3
  101. package/calendar/index.cjs +1 -1
  102. package/calendar/index.js +6 -8
  103. package/card/definition.cjs +1 -1
  104. package/card/definition.js +1 -1
  105. package/card/index.cjs +1 -1
  106. package/card/index.js +1 -1
  107. package/checkbox/definition.cjs +1 -2
  108. package/checkbox/definition.js +1 -2
  109. package/color-picker/definition.cjs +1 -6
  110. package/color-picker/definition.js +1 -6
  111. package/color-picker/index.cjs +1 -1
  112. package/color-picker/index.js +2 -7
  113. package/combobox/definition.cjs +2 -8
  114. package/combobox/definition.js +2 -8
  115. package/combobox/index.cjs +1 -1
  116. package/combobox/index.js +2 -9
  117. package/contextual-help/definition.cjs +1 -1
  118. package/contextual-help/definition.js +1 -1
  119. package/custom-elements.json +636 -1045
  120. package/data-grid/definition.cjs +72 -85
  121. package/data-grid/definition.js +75 -88
  122. package/data-grid/index.cjs +2 -2
  123. package/data-grid/index.js +7 -39
  124. package/date-picker/definition.cjs +1 -1
  125. package/date-picker/definition.js +1 -1
  126. package/date-range-picker/definition.cjs +1 -3
  127. package/date-range-picker/definition.js +1 -3
  128. package/date-range-picker/index.cjs +1 -1
  129. package/date-range-picker/index.js +1 -5
  130. package/date-time-picker/definition.cjs +1 -1
  131. package/date-time-picker/definition.js +1 -1
  132. package/dial-pad/definition.cjs +2 -11
  133. package/dial-pad/definition.js +3 -12
  134. package/dial-pad/index.cjs +1 -1
  135. package/dial-pad/index.js +14 -38
  136. package/dialog/definition.cjs +2 -3
  137. package/dialog/definition.js +2 -3
  138. package/dialog/index.cjs +1 -1
  139. package/dialog/index.js +1 -2
  140. package/empty-state/definition.js +1 -1
  141. package/fab/definition.cjs +1 -2
  142. package/fab/definition.js +1 -2
  143. package/fab/index.cjs +1 -1
  144. package/fab/index.js +1 -2
  145. package/file-picker/definition.cjs +2 -5
  146. package/file-picker/definition.js +3 -6
  147. package/file-picker/index.cjs +1 -1
  148. package/file-picker/index.js +1 -4
  149. package/icon/definition.cjs +7 -5
  150. package/icon/definition.js +7 -5
  151. package/index.cjs +95 -94
  152. package/index.js +18 -18
  153. package/layout/definition.cjs +1 -1
  154. package/layout/definition.js +1 -1
  155. package/layout/index.cjs +1 -1
  156. package/layout/index.js +1 -1
  157. package/lib/card/card.d.ts +0 -2
  158. package/lib/combobox/combobox.d.ts +1 -1
  159. package/lib/icon/icon.d.ts +0 -1
  160. package/lib/menu/menu.d.ts +0 -1
  161. package/lib/menu-item/menu-item.d.ts +0 -1
  162. package/lib/pagination/pagination.d.ts +0 -3
  163. package/lib/rich-text-editor/rte/exports.d.ts +1 -0
  164. package/lib/rich-text-editor/rte/features/keyboard-shortcuts.d.ts +16 -0
  165. package/lib/rich-text-editor/rte/instance.d.ts +2 -1
  166. package/lib/select/select.d.ts +2 -2
  167. package/lib/table/table-head.d.ts +1 -0
  168. package/lib/tabs/tabs.d.ts +0 -1
  169. package/lib/text-field/text-field.d.ts +0 -1
  170. package/locales/de-DE.cjs +95 -95
  171. package/locales/de-DE.js +95 -95
  172. package/locales/en-GB.cjs +1 -1
  173. package/locales/en-GB.js +1 -1
  174. package/locales/en-US.cjs +95 -95
  175. package/locales/en-US.js +95 -95
  176. package/locales/ja-JP.cjs +94 -94
  177. package/locales/ja-JP.js +94 -94
  178. package/locales/zh-CN.cjs +94 -94
  179. package/locales/zh-CN.js +94 -94
  180. package/menu/definition.cjs +2 -3
  181. package/menu/definition.js +2 -3
  182. package/menu-item/definition.cjs +1 -1
  183. package/menu-item/definition.js +1 -1
  184. package/nav-disclosure/definition.cjs +1 -1
  185. package/nav-disclosure/definition.js +1 -1
  186. package/nav-disclosure/index.cjs +1 -1
  187. package/nav-disclosure/index.js +1 -1
  188. package/nav-item/definition.cjs +1 -1
  189. package/nav-item/definition.js +1 -1
  190. package/nav-item/index.cjs +1 -1
  191. package/nav-item/index.js +1 -1
  192. package/number-field/definition.cjs +2 -2
  193. package/number-field/definition.js +2 -2
  194. package/number-field/index.cjs +1 -1
  195. package/number-field/index.js +1 -1
  196. package/package.json +19 -17
  197. package/pagination/definition.cjs +1 -3
  198. package/pagination/definition.js +3 -5
  199. package/pagination/index.cjs +3 -3
  200. package/pagination/index.js +4 -6
  201. package/popover/definition.cjs +1 -8
  202. package/popover/definition.js +1 -8
  203. package/popover/index.cjs +1 -1
  204. package/popover/index.js +6 -17
  205. package/popup/definition.cjs +1 -1
  206. package/popup/definition.js +1 -1
  207. package/radio/definition.cjs +1 -5
  208. package/radio/definition.js +1 -5
  209. package/radio-group/definition.js +2 -2
  210. package/range-slider/definition.cjs +1 -1
  211. package/range-slider/definition.js +2 -2
  212. package/range-slider/index.cjs +1 -1
  213. package/range-slider/index.js +1 -1
  214. package/rich-text-editor/definition.cjs +177 -63
  215. package/rich-text-editor/definition.js +177 -64
  216. package/rich-text-editor/index.cjs +12 -12
  217. package/rich-text-editor/index.js +1651 -1586
  218. package/rich-text-view/definition.js +1 -1
  219. package/searchable-select/definition.cjs +2 -5
  220. package/searchable-select/definition.js +2 -5
  221. package/searchable-select/index.cjs +1 -1
  222. package/searchable-select/index.js +2 -6
  223. package/select/definition.cjs +4 -14
  224. package/select/definition.js +5 -15
  225. package/selectable-box/definition.cjs +1 -1
  226. package/selectable-box/definition.js +2 -2
  227. package/selectable-box/index.cjs +1 -1
  228. package/selectable-box/index.js +1 -1
  229. package/side-drawer/definition.cjs +1 -1
  230. package/side-drawer/definition.js +2 -2
  231. package/side-drawer/index.cjs +1 -1
  232. package/side-drawer/index.js +2 -5
  233. package/simple-color-picker/definition.cjs +18 -9
  234. package/simple-color-picker/definition.js +19 -10
  235. package/simple-color-picker/index.cjs +5 -5
  236. package/simple-color-picker/index.js +23 -23
  237. package/slider/definition.cjs +1 -6
  238. package/slider/definition.js +3 -8
  239. package/split-button/definition.cjs +1 -1
  240. package/split-button/definition.js +2 -2
  241. package/split-button/index.cjs +1 -1
  242. package/split-button/index.js +1 -1
  243. package/status/definition.cjs +9 -3
  244. package/status/definition.js +11 -5
  245. package/status/index.cjs +10 -7
  246. package/status/index.js +46 -39
  247. package/styles/core/all.css +6 -5
  248. package/styles/core/theme.css +6 -5
  249. package/styles/core/typography.css +1 -2
  250. package/styles/tokens/theme-dark.css +17 -21
  251. package/styles/tokens/theme-light.css +17 -21
  252. package/styles/tokens/vivid-2-compat.css +1 -2
  253. package/switch/definition.cjs +1 -2
  254. package/switch/definition.js +2 -3
  255. package/switch/index.cjs +1 -1
  256. package/switch/index.js +1 -2
  257. package/tab/definition.cjs +1 -1
  258. package/tab/definition.js +2 -2
  259. package/tab-panel/definition.js +1 -1
  260. package/table/definition.cjs +17 -11
  261. package/table/definition.js +19 -13
  262. package/table/index.cjs +18 -14
  263. package/table/index.js +55 -48
  264. package/tabs/definition.cjs +0 -2
  265. package/tabs/definition.js +2 -4
  266. package/tabs/index.cjs +1 -1
  267. package/tabs/index.js +0 -2
  268. package/tag/definition.cjs +1 -1
  269. package/tag/definition.js +2 -2
  270. package/tag/index.cjs +1 -1
  271. package/tag/index.js +1 -1
  272. package/tag-group/definition.js +1 -1
  273. package/text-area/definition.cjs +1 -7
  274. package/text-area/definition.js +2 -8
  275. package/text-area/index.cjs +1 -1
  276. package/text-area/index.js +1 -7
  277. package/text-field/definition.cjs +0 -10
  278. package/text-field/definition.js +1 -11
  279. package/time-picker/definition.cjs +1 -1
  280. package/time-picker/definition.js +2 -2
  281. package/toggletip/definition.cjs +0 -2
  282. package/toggletip/definition.js +1 -3
  283. package/tooltip/definition.cjs +0 -1
  284. package/tooltip/definition.js +1 -2
  285. package/tree-view/definition.cjs +0 -16
  286. package/tree-view/definition.js +1 -17
  287. package/tree-view/index.cjs +1 -1
  288. package/tree-view/index.js +0 -16
  289. package/unbundled/_commonjsHelpers.cjs +6 -2
  290. package/unbundled/_commonjsHelpers.js +6 -2
  291. package/unbundled/anchored.js +1 -1
  292. package/unbundled/attribute-binding-behaviour.cjs +0 -1
  293. package/unbundled/attribute-binding-behaviour.js +0 -1
  294. package/unbundled/base-color-picker.cjs +2 -5
  295. package/unbundled/base-color-picker.js +2 -5
  296. package/unbundled/base-progress.cjs +0 -3
  297. package/unbundled/base-progress.js +0 -3
  298. package/unbundled/button.cjs +1 -10
  299. package/unbundled/button.js +1 -10
  300. package/unbundled/calendar-picker.template.cjs +2 -4
  301. package/unbundled/calendar-picker.template.js +2 -4
  302. package/unbundled/data-grid.options.js +1 -1
  303. package/unbundled/definition.cjs +349 -170
  304. package/unbundled/definition.js +348 -170
  305. package/unbundled/definition2.cjs +169 -351
  306. package/unbundled/definition2.js +169 -350
  307. package/unbundled/definition3.cjs +1 -2
  308. package/unbundled/definition3.js +1 -2
  309. package/unbundled/definition4.cjs +1 -2
  310. package/unbundled/definition4.js +3 -4
  311. package/unbundled/definition5.cjs +1 -1
  312. package/unbundled/definition5.js +2 -2
  313. package/unbundled/delegates-aria.cjs +1 -1
  314. package/unbundled/delegates-aria.js +1 -1
  315. package/unbundled/enums.js +1 -1
  316. package/unbundled/form-associated.cjs +4 -5
  317. package/unbundled/form-associated.js +4 -5
  318. package/unbundled/host-semantics.cjs +1 -0
  319. package/unbundled/host-semantics.js +2 -1
  320. package/unbundled/key-codes.js +1 -1
  321. package/unbundled/listbox.cjs +6 -14
  322. package/unbundled/listbox.js +6 -14
  323. package/unbundled/localized.cjs +1 -0
  324. package/unbundled/localized.js +1 -0
  325. package/unbundled/mixins.cjs +0 -2
  326. package/unbundled/mixins.js +2 -4
  327. package/unbundled/picker-field.template.cjs +1 -2
  328. package/unbundled/picker-field.template.js +1 -2
  329. package/unbundled/scrollIntoView.cjs +0 -1
  330. package/unbundled/scrollIntoView.js +0 -1
  331. package/unbundled/slider.template.js +1 -1
  332. package/unbundled/slottable-request.cjs +3 -2
  333. package/unbundled/slottable-request.js +3 -2
  334. package/unbundled/text-field.cjs +1 -1
  335. package/unbundled/text-field.js +1 -1
  336. package/unbundled/time-selection-picker.template.cjs +1 -4
  337. package/unbundled/time-selection-picker.template.js +1 -4
  338. package/unbundled/vivid-element.cjs +2 -1
  339. package/unbundled/vivid-element.js +2 -1
  340. package/video-player/definition.cjs +7953 -7720
  341. package/video-player/definition.js +7955 -7722
  342. package/video-player/index.cjs +38 -54
  343. package/video-player/index.js +12785 -12735
  344. package/visually-hidden/definition.js +1 -1
  345. package/vivid.api.json +48 -341
@@ -1,14 +1,19 @@
1
1
  import { VwcIconElement as Icon, iconDefinition } from '../icon/definition.js';
2
- import { VwcProgressRingElement as ProgressRing, progressRingDefinition } from '../progress-ring/definition.js';
3
- import { d as defineVividComponent, c as createRegisterFunction } from './vivid-element.js';
4
- import { attr, html, when, ref } from '@microsoft/fast-element';
5
- import { V as VividFoundationButton } from './button.js';
6
- import { b as AffixIconWithTrailing, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
7
- import { L as Localized } from './localized.js';
8
- import { L as Linkable } from './linkable.js';
9
- import { classNames } from '@microsoft/fast-web-utilities';
10
- import { b as Size } from './enums.js';
11
- import { d as delegateAria } from './delegates-aria.js';
2
+ import { V as VividElement, r as replaces, d as defineVividComponent, c as createRegisterFunction } from './vivid-element.js';
3
+ import { Updates, attr, observable, slotted, when, html, elements } from '@microsoft/fast-element';
4
+ import { keySpace, keyEnter, classNames } from '@microsoft/fast-web-utilities';
5
+ import { k as keyArrowLeft, a as keyArrowRight } from './key-codes.js';
6
+ import { A as AffixIcon, a as affixIconTemplateFactory } from './affix.js';
7
+ import { H as HostSemantics, a as applyHostSemantics } from './host-semantics.js';
8
+
9
+ const styles = ":host(:focus-visible){outline:none}:host([disabled]){pointer-events:none}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}@media(hover:hover){.base: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.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:disabled{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base.disabled{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:active:where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base.active:where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base.selected:where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}@media(hover:hover){.base.selected: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.selected.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.connotation-cta{--_connotation-color-primary: var(--vvd-menu-item-cta-primary, var(--vvd-color-cta-500));--_connotation-color-primary-text: var(--vvd-menu-item-cta-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-menu-item-cta-primary-increment, var(--vvd-color-cta-600));--_connotation-color-firm: var(--vvd-menu-item-cta-firm, var(--vvd-color-cta-600));--_connotation-color-faint: var(--vvd-menu-item-cta-faint, var(--vvd-color-cta-50));--_connotation-color-soft: var(--vvd-menu-item-cta-soft, var(--vvd-color-cta-100));--_connotation-color-pale: var(--vvd-menu-item-cta-pale, var(--vvd-color-cta-300));--_connotation-color-dim: var(--vvd-menu-item-cta-dim, var(--vvd-color-cta-200))}.base:not(.connotation-cta){--_connotation-color-primary: var(--vvd-menu-item-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-menu-item-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-menu-item-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-firm: var(--vvd-menu-item-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-menu-item-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-menu-item-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-pale: var(--vvd-menu-item-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-dim: var(--vvd-menu-item-accent-dim, var(--vvd-color-neutral-200))}.base{--_menu-item-padding-inline: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4) }.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);inline-size:100%}.base:not(.two-lines){gap:12px;min-block-size:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)));padding-block:8px;padding-inline:var(--_menu-item-padding-inline)}.base.two-lines{gap:16px;min-block-size:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)) + 1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2)));padding-block:12px;padding-inline:var(--_menu-item-padding-inline)}@supports (user-select: none){.base{user-select:none}}.base:not(.disabled){cursor:pointer}:host(:not([role=presentation]):focus-visible) .base{box-shadow:0 0 0 4px color-mix(in srgb,var(--focus-stroke-color, 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));--focus-stroke-gap-color: transparent}.icon{flex-shrink:0;font-size:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2))/2);line-height:1}.action,.decorative{display:flex;place-content:center}.action{color:var(--_appearance-color-text)}.base.trailing .action,.base.has-meta .action{order:2}:host(:not([check-appearance],[checked],[disabled])) .action{color:var(--vvd-color-neutral-500)}.base:not(.disabled) .decorative{color:var(--vvd-color-neutral-600)}.base.disabled .decorative{color:var(--vvd-color-neutral-200)}.base.has-meta .decorative{order:1}.chevron{order:3}.text{display:flex;overflow:hidden;flex-direction:column;gap:4px;margin-inline-end:auto}.text-primary,.text-secondary{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;font:var(--vvd-typography-base)}.text-primary{font:var(--vvd-typography-base);-webkit-line-clamp:var(--text-primary-line-clamp, 1)}.base:not(.disabled) .text-primary{color:var(--vvd-color-canvas-text)}.base.disabled .text-primary{color:var(--_appearance-color-text)}.base.two-lines .text-primary{font:var(--vvd-typography-base-bold)}.text-secondary{color:var(--vvd-color-neutral-800);font:var(--vvd-typography-base-condensed);-webkit-line-clamp:var(--text-secondary-line-clamp, 1)}.base.two-lines .text-secondary{color:var(--vvd-color-neutral-600)}.base.disabled .text-secondary{color:var(--_appearance-color-text)}.base.selected:not(.disabled) .text-secondary{color:var(--vvd-color-neutral-800)}:host([internal-part]) .text-primary{font:var(--_text-primary-custom-size, var--vvd-typography-base)}";
10
+
11
+ const MenuItemRole = {
12
+ menuitem: "menuitem",
13
+ menuitemcheckbox: "menuitemcheckbox",
14
+ menuitemradio: "menuitemradio",
15
+ presentation: "presentation"
16
+ };
12
17
 
13
18
  var __defProp = Object.defineProperty;
14
19
  var __decorateClass = (decorators, target, key, kind) => {
@@ -19,203 +24,376 @@ var __decorateClass = (decorators, target, key, kind) => {
19
24
  if (result) __defProp(target, key, result);
20
25
  return result;
21
26
  };
22
- class Button extends AffixIconWithTrailing(
23
- Localized(Linkable(VividFoundationButton))
24
- ) {
27
+ class MenuItem extends HostSemantics(AffixIcon(VividElement)) {
25
28
  constructor() {
26
29
  super();
27
- this.stacked = false;
28
- this.pending = false;
29
- this.dropdownIndicator = false;
30
- this.active = false;
31
- this.title = "";
30
+ /**
31
+ * The role of the element.
32
+ *
33
+ * @deprecated Use `control-type` instead for checkbox and radio items. If the menu item is not a direct descendant of a menu, role will default to `presentation`.
34
+ * @public
35
+ * @remarks
36
+ * HTML Attribute: role
37
+ */
38
+ this.role = MenuItemRole.menuitem;
39
+ this.checked = false;
40
+ /**
41
+ * @internal
42
+ */
43
+ this.handleMenuItemClick = (e) => {
44
+ if (this._isSyntheticClickEvent(e)) {
45
+ return true;
46
+ }
47
+ this.invoke();
48
+ return Boolean(this._isPresentational);
49
+ };
50
+ /**
51
+ * @internal
52
+ */
53
+ this.handleMouseOver = (_) => {
54
+ if (this.disabled || !this.submenu || this.expanded) {
55
+ return false;
56
+ }
57
+ this.expanded = true;
58
+ return false;
59
+ };
60
+ /**
61
+ * @internal
62
+ */
63
+ this.handleMouseOut = (_) => {
64
+ if (!this.expanded || this.contains(document.activeElement)) {
65
+ return false;
66
+ }
67
+ this.expanded = false;
68
+ return false;
69
+ };
70
+ this.invoke = () => {
71
+ if (this.disabled || this._isPresentational) {
72
+ return;
73
+ }
74
+ switch (this.controlType) {
75
+ case "checkbox":
76
+ this.checked = !this.checked;
77
+ break;
78
+ case "radio":
79
+ if (!this.checked) {
80
+ this.checked = true;
81
+ }
82
+ break;
83
+ default:
84
+ if (this.submenu) {
85
+ this.expanded = true;
86
+ } else {
87
+ this.$emit("change");
88
+ }
89
+ break;
90
+ }
91
+ };
92
+ this.checkTrailing = false;
93
+ /**
94
+ * @internal
95
+ */
96
+ this.handleMenuItemKeyDown = (e) => {
97
+ if (e.defaultPrevented) {
98
+ return false;
99
+ }
100
+ switch (e.key) {
101
+ case keyEnter:
102
+ case keySpace:
103
+ this.invoke();
104
+ if (!this.disabled) {
105
+ this.#emitSyntheticClick();
106
+ }
107
+ return false;
108
+ case keyArrowRight: {
109
+ if (this.submenu) {
110
+ this.expanded = true;
111
+ this.#emitSyntheticClick();
112
+ }
113
+ return false;
114
+ }
115
+ case keyArrowLeft:
116
+ if (this.expanded) {
117
+ this.#emitSyntheticClick();
118
+ this.expanded = false;
119
+ this.focus();
120
+ return false;
121
+ }
122
+ }
123
+ return true;
124
+ };
125
+ this.#syntheticClickEvents = /* @__PURE__ */ new WeakSet();
126
+ this.addEventListener("expanded-change", this.#expandedChange);
127
+ }
128
+ /**
129
+ * @internal
130
+ */
131
+ expandedChanged() {
132
+ if (this.$fastController.isConnected) {
133
+ if (this.submenu && !this.expanded) {
134
+ this.submenu.collapseExpandedItem();
135
+ }
136
+ this.$emit("expanded-change", this, { bubbles: false });
137
+ }
138
+ }
139
+ #ensureRoleMatchesPresentational() {
140
+ if (this._isPresentational) {
141
+ if (this.role === "menuitem") {
142
+ this.role = "presentation";
143
+ }
144
+ } else if (this.role === "presentation") {
145
+ this.role = MenuItemRole.menuitem;
146
+ }
147
+ }
148
+ /**
149
+ * @internal
150
+ */
151
+ _isPresentationalChanged() {
152
+ if (this.$fastController.isConnected) {
153
+ this.#ensureRoleMatchesPresentational();
154
+ }
155
+ }
156
+ /**
157
+ * @internal
158
+ */
159
+ checkedChanged() {
160
+ if (this.$fastController.isConnected) {
161
+ this.$emit("change");
162
+ }
163
+ }
164
+ /**
165
+ * @internal
166
+ */
167
+ connectedCallback() {
168
+ super.connectedCallback();
169
+ Updates.enqueue(() => {
170
+ this._isPresentational = this._isPresentational ?? true;
171
+ this.#ensureRoleMatchesPresentational();
172
+ });
173
+ }
174
+ /**
175
+ * @internal
176
+ */
177
+ slottedSubmenuChanged() {
178
+ if (this.submenu) {
179
+ this.submenu.anchor = this;
180
+ this.submenu.placement = "right-start";
181
+ this.submenu.collapseExpandedItem = () => this.#collapseExpandedItem();
182
+ this.submenu._popupOffset = 5;
183
+ }
184
+ }
185
+ /**
186
+ * @internal
187
+ */
188
+ get submenu() {
189
+ if (this.slottedSubmenu?.length) {
190
+ return this.slottedSubmenu[0];
191
+ } else {
192
+ return null;
193
+ }
32
194
  }
33
195
  /**
34
- * Handles click events.
35
- * Prevents interaction when disabled or pending.
196
+ * @internal
36
197
  */
37
- clickHandler(event) {
38
- /* v8 ignore else -- @preserve */
39
- if (this.disabled || this.pending) {
40
- event.preventDefault();
41
- event.stopImmediatePropagation();
42
- return;
198
+ get hasSubmenu() {
199
+ return this.submenu !== null;
200
+ }
201
+ #collapseExpandedItem() {
202
+ this.expanded = false;
203
+ }
204
+ #expandedChange() {
205
+ if (this.submenu) {
206
+ this.submenu.open = this.expanded;
43
207
  }
44
208
  }
209
+ #syntheticClickEvents;
210
+ /**
211
+ * @internal
212
+ */
213
+ _isSyntheticClickEvent(event) {
214
+ return this.#syntheticClickEvents.has(event);
215
+ }
216
+ #emitSyntheticClick() {
217
+ const mouseEvent = new MouseEvent("click", {
218
+ bubbles: true,
219
+ composed: true
220
+ });
221
+ this.#syntheticClickEvents.add(mouseEvent);
222
+ this.dispatchEvent(mouseEvent);
223
+ }
45
224
  }
46
225
  __decorateClass([
47
- attr({
48
- converter: {
49
- fromView: (value) => value || null,
50
- toView: (value) => value || null
226
+ attr({ mode: "boolean" })
227
+ ], MenuItem.prototype, "disabled");
228
+ __decorateClass([
229
+ attr({ mode: "boolean" })
230
+ ], MenuItem.prototype, "expanded");
231
+ __decorateClass([
232
+ observable
233
+ ], MenuItem.prototype, "_isPresentational");
234
+ __decorateClass([
235
+ replaces({
236
+ deprecatedPropertyName: "role",
237
+ fromDeprecated: (role) => {
238
+ switch (role) {
239
+ case "menuitemcheckbox":
240
+ return "checkbox";
241
+ case "menuitemradio":
242
+ return "radio";
243
+ default:
244
+ return void 0;
245
+ }
246
+ },
247
+ toDeprecated: (controlType) => {
248
+ switch (controlType) {
249
+ case "checkbox":
250
+ return "menuitemcheckbox";
251
+ case "radio":
252
+ return "menuitemradio";
253
+ default:
254
+ return "menuitem";
255
+ }
51
256
  }
52
- })
53
- ], Button.prototype, "title");
257
+ }),
258
+ attr({ attribute: "control-type" })
259
+ ], MenuItem.prototype, "controlType");
54
260
  __decorateClass([
55
- attr
56
- ], Button.prototype, "connotation");
261
+ attr({ mode: "boolean" })
262
+ ], MenuItem.prototype, "checked");
57
263
  __decorateClass([
58
264
  attr
59
- ], Button.prototype, "shape");
265
+ ], MenuItem.prototype, "text");
60
266
  __decorateClass([
61
- attr
62
- ], Button.prototype, "appearance");
267
+ attr({ attribute: "text-secondary" })
268
+ ], MenuItem.prototype, "textSecondary");
63
269
  __decorateClass([
64
270
  attr
65
- ], Button.prototype, "size");
271
+ ], MenuItem.prototype, "connotation");
66
272
  __decorateClass([
67
- attr({
68
- mode: "boolean",
69
- attribute: "stacked"
70
- })
71
- ], Button.prototype, "stacked");
273
+ attr({ mode: "boolean", attribute: "check-trailing" })
274
+ ], MenuItem.prototype, "checkTrailing");
72
275
  __decorateClass([
73
- attr({
74
- mode: "boolean",
75
- attribute: "pending"
76
- })
77
- ], Button.prototype, "pending");
276
+ attr({ attribute: "check-appearance" })
277
+ ], MenuItem.prototype, "checkedAppearance");
78
278
  __decorateClass([
79
- attr({
80
- mode: "boolean",
81
- attribute: "dropdown-indicator"
82
- })
83
- ], Button.prototype, "dropdownIndicator");
279
+ observable
280
+ ], MenuItem.prototype, "metaSlottedContent");
84
281
  __decorateClass([
85
- attr({
86
- mode: "boolean",
87
- attribute: "active"
88
- })
89
- ], Button.prototype, "active");
282
+ observable
283
+ ], MenuItem.prototype, "trailingMetaSlottedContent");
90
284
  __decorateClass([
91
- attr
92
- ], Button.prototype, "label");
285
+ observable
286
+ ], MenuItem.prototype, "slottedSubmenu");
93
287
 
94
- const styles = ".chevron{display:flex;flex-shrink:0;font:var(--vvd-typography-base-extended);transform:rotate(0);transition:transform .2s}:host([data-expanded=true]) .chevron,:host([open]) .chevron{transform:rotate(180deg)}:host{--_vvd-button-accent-firm-wrapper: var( --vvd-button-accent-firm );--_vvd-button-cta-firm-wrapper: var( --vvd-button-cta-firm );--_vvd-button-success-firm-wrapper: var( --vvd-button-success-firm );--_vvd-button-alert-firm-wrapper: var( --vvd-button-alert-firm );--_vvd-button-announcement-firm-wrapper: var( --vvd-button-announcement-firm )}.control:not(.appearance-ghost-light,.appearance-filled,.appearance-outlined){--vvd-button-accent-firm: var( --_vvd-button-accent-firm-wrapper, var(--vvd-button-accent-primary) );--vvd-button-cta-firm: var( --_vvd-button-cta-firm-wrapper, var(--vvd-button-cta-primary) );--vvd-button-success-firm: var( --_vvd-button-success-firm-wrapper, var(--vvd-button-success-primary) );--vvd-button-alert-firm: var( --_vvd-button-alert-firm-wrapper, var(--vvd-button-alert-primary) );--vvd-button-announcement-firm: var( --_vvd-button-announcement-firm-wrapper, var(--vvd-button-announcement-primary) )}:host{display:inline-block}.control.connotation-cta{--_connotation-color-primary: var(--vvd-button-cta-primary, var(--vvd-color-cta-500));--_connotation-color-primary-text: var(--vvd-button-cta-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-button-cta-primary-increment, var(--vvd-color-cta-600));--_connotation-color-contrast: var(--vvd-button-cta-contrast, var(--vvd-color-cta-800));--_connotation-color-fierce: var(--vvd-button-cta-fierce, var(--vvd-color-cta-700));--_connotation-color-firm: var(--vvd-button-cta-firm, var(--vvd-color-cta-600));--_connotation-color-soft: var(--vvd-button-cta-soft, var(--vvd-color-cta-100));--_connotation-color-faint: var(--vvd-button-cta-faint, var(--vvd-color-cta-50));--_connotation-color-fierce-primary: var(--vvd-button-cta-fierce-primary, var(--vvd-color-cta-700))}.control.connotation-success{--_connotation-color-primary: var(--vvd-button-success-primary, var(--vvd-color-success-500));--_connotation-color-primary-text: var(--vvd-button-success-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-button-success-primary-increment, var(--vvd-color-success-600));--_connotation-color-contrast: var(--vvd-button-success-contrast, var(--vvd-color-success-800));--_connotation-color-fierce: var(--vvd-button-success-fierce, var(--vvd-color-success-700));--_connotation-color-firm: var(--vvd-button-success-firm, var(--vvd-color-success-600));--_connotation-color-soft: var(--vvd-button-success-soft, var(--vvd-color-success-100));--_connotation-color-faint: var(--vvd-button-success-faint, var(--vvd-color-success-50));--_connotation-color-fierce-primary: var(--vvd-button-success-fierce-primary, var(--vvd-color-success-700))}.control.connotation-alert{--_connotation-color-primary: var(--vvd-button-alert-primary, var(--vvd-color-alert-500));--_connotation-color-primary-text: var(--vvd-button-alert-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-button-alert-primary-increment, var(--vvd-color-alert-600));--_connotation-color-contrast: var(--vvd-button-alert-contrast, var(--vvd-color-alert-800));--_connotation-color-fierce: var(--vvd-button-alert-fierce, var(--vvd-color-alert-700));--_connotation-color-firm: var(--vvd-button-alert-firm, var(--vvd-color-alert-600));--_connotation-color-soft: var(--vvd-button-alert-soft, var(--vvd-color-alert-100));--_connotation-color-faint: var(--vvd-button-alert-faint, var(--vvd-color-alert-50));--_connotation-color-fierce-primary: var(--vvd-button-alert-fierce-primary, var(--vvd-color-alert-700))}.control.connotation-announcement{--_connotation-color-primary: var(--vvd-button-announcement-primary, var(--vvd-color-announcement-500));--_connotation-color-primary-text: var(--vvd-button-announcement-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-button-announcement-primary-increment, var(--vvd-color-announcement-600));--_connotation-color-contrast: var(--vvd-button-announcement-contrast, var(--vvd-color-announcement-800));--_connotation-color-fierce: var(--vvd-button-announcement-fierce, var(--vvd-color-announcement-700));--_connotation-color-firm: var(--vvd-button-announcement-firm, var(--vvd-color-announcement-600));--_connotation-color-soft: var(--vvd-button-announcement-soft, var(--vvd-color-announcement-100));--_connotation-color-faint: var(--vvd-button-announcement-faint, var(--vvd-color-announcement-50));--_connotation-color-fierce-primary: var(--vvd-button-announcement-fierce-primary, var(--vvd-color-announcement-700))}.control:not(.connotation-cta,.connotation-success,.connotation-alert,.connotation-announcement){--_connotation-color-primary: var(--vvd-button-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-button-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-button-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-contrast: var(--vvd-button-accent-contrast, var(--vvd-color-neutral-800));--_connotation-color-fierce: var(--vvd-button-accent-fierce, var(--vvd-color-neutral-700));--_connotation-color-firm: var(--vvd-button-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-soft: var(--vvd-button-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-faint: var(--vvd-button-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-fierce-primary: var(--vvd-button-accent-fierce-primary, var(--vvd-color-canvas-text))}.control.appearance-filled{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.control.appearance-outlined{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: var(--vvd-color-neutral-300)}.control,.control.appearance-ghost-light{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control.appearance-outlined-light{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: var(--vvd-color-neutral-300)}@media (hover: hover){.control:hover:where(:not(.disabled,:disabled,.readonly)).appearance-filled{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary-increment);--_appearance-color-outline: transparent}.control:hover:where(:not(.disabled,:disabled,.readonly)).appearance-outlined{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: var(--vvd-color-neutral-300)}.control:hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.control:hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 90%);--_appearance-color-outline: transparent}.control:hover:where(:not(.disabled,:disabled,.readonly)).appearance-outlined-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 90%);--_appearance-color-outline: var(--vvd-color-neutral-300)}}.control.hover:where(:not(.disabled,:disabled,.readonly)).appearance-filled{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary-increment);--_appearance-color-outline: transparent}.control.hover:where(:not(.disabled,:disabled,.readonly)).appearance-outlined{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: var(--vvd-color-neutral-300)}.control.hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.control.hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 90%);--_appearance-color-outline: transparent}.control.hover:where(:not(.disabled,:disabled,.readonly)).appearance-outlined-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 90%);--_appearance-color-outline: var(--vvd-color-neutral-300)}.control:disabled.appearance-filled{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-100);--_appearance-color-outline: transparent}.control:disabled.appearance-outlined{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: var(--vvd-color-neutral-300)}.control:disabled{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control:disabled.appearance-ghost-light{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control:disabled.appearance-outlined-light{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: var(--vvd-color-neutral-300)}.control.disabled.appearance-filled{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-100);--_appearance-color-outline: transparent}.control.disabled.appearance-outlined{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: var(--vvd-color-neutral-300)}.control.disabled,.control.disabled.appearance-ghost-light{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control.disabled.appearance-outlined-light{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: var(--vvd-color-neutral-300)}.control:active:where(:not(.disabled,:disabled)).appearance-filled{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-fierce);--_appearance-color-outline: transparent}.control:active:where(:not(.disabled,:disabled)).appearance-outlined{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: var(--vvd-color-neutral-300)}.control:active:where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.control:active:where(:not(.disabled,:disabled)).appearance-ghost-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 80%);--_appearance-color-outline: transparent}.control:active:where(:not(.disabled,:disabled)).appearance-outlined-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 80%);--_appearance-color-outline: var(--vvd-color-neutral-300)}.control.active:where(:not(.disabled,:disabled)).appearance-filled{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-fierce);--_appearance-color-outline: transparent}.control.active:where(:not(.disabled,:disabled)).appearance-outlined{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: var(--vvd-color-neutral-300)}.control.active:where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.control.active:where(:not(.disabled,:disabled)).appearance-ghost-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 80%);--_appearance-color-outline: transparent}.control.active:where(:not(.disabled,:disabled)).appearance-outlined-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 80%);--_appearance-color-outline: var(--vvd-color-neutral-300)}.control{--focus-stroke-gap-color: transparent;display:inline-flex;box-sizing:border-box;align-items:center;justify-content:space-between;border:0 none;border-radius:var(--_button-border-radius);margin:0;background-color:var(--_appearance-color-fill);block-size:var(--_button-block-size);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);gap:var(--_button-icon-gap);text-decoration:none;vertical-align:middle}.control .text{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:var(--button-line-clamp, 1);max-inline-size:100%;text-align:start}.control:not(.icon-only){inline-size:100%}.control:not(.disabled){cursor:var(--button-cursor, pointer)}.control.disabled{cursor:not-allowed}@supports (user-select: none){.control{user-select:none}}.control:not(.stacked).size-super-condensed{--_button-block-size: calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;font:var(--vvd-typography-base-condensed-bold);--_button-icon-gap: 4px;--_button-chevron-size: 10px}.control:not(.stacked).size-super-condensed.icon-only{padding-inline:calc(var(--_button-block-size) / 4)}.control:not(.stacked).size-super-condensed:not(.icon-only){padding-inline:8px}.control:not(.stacked).size-condensed{--_button-block-size: calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;font:var(--vvd-typography-base-condensed-bold);--_button-icon-gap: 8px;--_button-chevron-size: 12px}.control:not(.stacked).size-condensed.icon-only{padding-inline:calc(var(--_button-block-size) / 4)}.control:not(.stacked).size-condensed:not(.icon-only){padding-inline:12px}.control:not(.stacked).size-expanded{--_button-block-size: calc(1px*(48 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;font:var(--vvd-typography-base-extended-bold);--_button-icon-gap: 10px;--_button-chevron-size: 16px}.control:not(.stacked).size-expanded.icon-only{padding-inline:calc(var(--_button-block-size) / 4)}.control:not(.stacked).size-expanded:not(.icon-only){padding-inline:20px}.control:not(.stacked):not(.size-condensed,.size-expanded,.size-super-condensed){--_button-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;font:var(--vvd-typography-base-bold);--_button-icon-gap: 8px;--_button-chevron-size: 16px}.control:not(.stacked):not(.size-condensed,.size-expanded,.size-super-condensed).icon-only{padding-inline:calc(var(--_button-block-size) / 4)}.control:not(.stacked):not(.size-condensed,.size-expanded,.size-super-condensed):not(.icon-only){padding-inline:16px}.control:not(.shape-pill){--_button-border-radius: 8px}.control:not(.shape-pill).size-condensed:not(.stacked),.control:not(.shape-pill).size-super-condensed:not(.stacked){--_button-border-radius: 4px}.control.shape-pill:not(.icon-only,.stacked.size-super-condensed,.stacked.size-condensed,.stacked.normal){--_button-border-radius: 24px}.control.shape-pill.stacked.size-condensed,.control.shape-pill.stacked.size-super-condensed{--_button-border-radius: 16px}.control.shape-pill.stacked.size-normal{--_button-border-radius: 20px}.control.shape-pill.icon-only{--_button-border-radius: 50%}.control.stacked.size-super-condensed{--stacked-size: calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_button-block-size: calc(var(--stacked-size) + 20px);font:var(--vvd-typography-base-condensed-bold);--_button-icon-gap: 4px;--_button-chevron-size: 10px}.control.stacked.size-super-condensed.icon-only{padding-inline:calc(var(--_button-block-size) / 4)}.control.stacked.size-super-condensed:not(.icon-only){padding-inline:16px}.control.stacked.size-condensed{--stacked-size: calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_button-block-size: calc(var(--stacked-size) + 24px);font:var(--vvd-typography-base-condensed-bold);--_button-icon-gap: 6px;--_button-chevron-size: 12px}.control.stacked.size-condensed.icon-only{padding-inline:calc(var(--_button-block-size) / 4)}.control.stacked.size-condensed:not(.icon-only){padding-inline:12px}.control.stacked.size-expanded{--stacked-size: calc(1px*(48 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_button-block-size: calc(var(--stacked-size) + 32px);font:var(--vvd-typography-base-extended-bold);--_button-icon-gap: 10px;--_button-chevron-size: 16px}.control.stacked.size-expanded.icon-only{padding-inline:calc(var(--_button-block-size) / 4)}.control.stacked.size-expanded:not(.icon-only){padding-inline:20px}.control.stacked:not(.size-condensed,.size-expanded,.size-super-condensed){--stacked-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_button-block-size: calc(var(--stacked-size) + 28px);font:var(--vvd-typography-base-bold);--_button-icon-gap: 8px;--_button-chevron-size: 16px}.control.stacked:not(.size-condensed,.size-expanded,.size-super-condensed).icon-only{padding-inline:calc(var(--_button-block-size) / 4)}.control.stacked:not(.size-condensed,.size-expanded,.size-super-condensed):not(.icon-only){padding-inline:16px}.control.appearance-filled{--focus-stroke-gap-color: transparent}.control.appearance-filled:focus-visible{position:relative;outline:none}.control.appearance-filled:focus-visible:after{box-shadow:0 0 0 4px color-mix(in srgb,var(--focus-stroke-color, 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));position:absolute;display:block;border-radius:var(--focus-border-radius, inherit);block-size:calc(100% + var(--focus-block-size-addition, 4px));content:\"\";inline-size:calc(100% + var(--focus-block-size-addition, 4px));inset-block-start:50%;inset-inline-start:50%;transform:translate(-50%,-50%)}.control:not(.appearance-filled):focus-visible{box-shadow:0 0 0 4px color-mix(in srgb,var(--focus-stroke-color, 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))}slot[name=icon]{line-height:1}.icon-trailing slot[name=icon]{display:flex;order:1}.control.stacked slot[name=icon]{font-size:calc(var(--stacked-size) / 2)}.control:not(.stacked) slot[name=icon]{font-size:calc(var(--_button-block-size) / 2)}.chevron{font-size:var(--_button-chevron-size)}.content{display:flex;overflow:hidden;flex:1;align-items:center;justify-content:center;gap:var(--_button-icon-gap)}.control.stacked .content{flex-direction:column}:host([dropdown-indicator]) .content{justify-content:var(--button-content-alignment, flex-start);text-align:start}:host([dropdown-indicator][stacked]) .content{align-items:var(--button-content-alignment, flex-start);justify-content:center}.pending-no-icon{position:absolute}.pending-no-icon+.text{visibility:hidden}:host([icon-trailing][pending]) .pending{order:1}.sr-only{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}";
288
+ const menuName = "menu";
95
289
 
96
- const chevronTemplateFactory = (context) => {
97
- const iconTag = context.tagFor(Icon);
98
- return html`<${iconTag} class="chevron" aria-hidden="true" name="chevron-down-line"></${iconTag}>`;
290
+ const getIndicatorIcon = (x) => {
291
+ if (x.checkedAppearance === "tick-only") {
292
+ return x.checked ? "check-line" : "";
293
+ }
294
+ const iconType = x.controlType === "checkbox" ? "checkbox" : "radio";
295
+ const iconStatus = x.checked ? "checked" : "unchecked";
296
+ return `${iconType}-${iconStatus}-2-line`;
99
297
  };
100
-
101
298
  const getClasses = ({
102
299
  connotation,
103
- appearance,
104
- shape,
105
- iconTrailing,
106
- icon,
107
- label,
108
300
  disabled,
109
- pending,
110
- stacked,
111
- size,
112
- iconSlottedContent,
113
- ariaExpanded,
114
- active,
115
- dropdownIndicator
301
+ checked,
302
+ controlType,
303
+ text: text2,
304
+ textSecondary,
305
+ icon,
306
+ metaSlottedContent,
307
+ checkTrailing
116
308
  }) => classNames(
117
- "control",
309
+ "base",
118
310
  [`connotation-${connotation}`, Boolean(connotation)],
119
- [`appearance-${appearance}`, Boolean(appearance)],
120
- ["disabled", disabled || pending],
121
- [`shape-${shape}`, Boolean(shape)],
122
- [`size-${size}`, Boolean(size)],
123
- [
124
- "icon-only",
125
- !label && !!(icon || iconSlottedContent?.length) && !dropdownIndicator
126
- ],
127
- ["icon-trailing", iconTrailing],
128
- ["stacked", Boolean(stacked)],
129
- ["active", ariaExpanded === "true" || active]
311
+ ["disabled", Boolean(disabled)],
312
+ ["selected", Boolean(controlType && checked)],
313
+ ["trailing", Boolean(controlType && (checkTrailing || Boolean(icon)))],
314
+ ["item-checkbox", controlType === "checkbox"],
315
+ ["item-radio", controlType === "radio"],
316
+ ["two-lines", Boolean(text2?.length) && Boolean(textSecondary?.length)],
317
+ ["has-meta", Boolean(metaSlottedContent?.length)]
130
318
  );
131
- function renderIconOrPending(context, icon, pending, size = Size.Normal) {
132
- if (pending && size != Size.SuperCondensed) {
133
- const progressTag = context.tagFor(ProgressRing);
134
- const progressSize = {
135
- [Size.Condensed]: "-6",
136
- [Size.Normal]: "-5",
137
- [Size.Expanded]: "-4"
138
- };
139
- const getClassName = (x) => {
140
- const slottedIconElement = x.querySelector('[slot="icon"]');
141
- return classNames("icon", "pending", [
142
- "pending-no-icon",
143
- !(icon || slottedIconElement)
144
- ]);
145
- };
146
- return html`<span class="${getClassName}" aria-hidden="true"><${progressTag} size="${progressSize[size]}"></${progressTag}></span>`;
147
- } else {
148
- const affixIconTemplate = affixIconTemplateFactory(context);
149
- return affixIconTemplate(icon, IconWrapper.Slot);
150
- }
319
+ function checkIndicator(context) {
320
+ const iconTag = context.tagFor(Icon);
321
+ return html`${when(
322
+ (x) => Boolean(x.controlType),
323
+ html`<span class="action"><${iconTag} class="icon" name="${(x) => getIndicatorIcon(x)}"></${iconTag}></span>`
324
+ )}`;
151
325
  }
152
- const getButtonType = (type) => {
153
- const types = ["submit", "button", "reset"];
154
- if (types.indexOf(type) > -1) return type;
155
- return "submit";
156
- };
157
- const buttonContent = (context) => {
158
- const chevronTemplate = chevronTemplateFactory(context);
159
- return html`<span class="content">
160
- ${(x) => renderIconOrPending(context, x.icon, x.pending, x.size)}
326
+ function text() {
327
+ return html`${when(
328
+ (x) => x.text || x.textSecondary,
329
+ html`<span class="text">
330
+ ${when(
331
+ (x) => x.text,
332
+ html`<span class="text-primary">${(x) => x.text}</span>`
333
+ )}
161
334
  ${when(
162
- (x) => x.label,
163
- html`<span class="text" aria-hidden="true">${(x) => x.label}</span>`
335
+ (x) => x.textSecondary,
336
+ html`<span class="text-secondary">${(x) => x.textSecondary}</span>`
337
+ )}
338
+ </span>`
339
+ )}`;
340
+ }
341
+ const MenuItemTemplate = (context) => {
342
+ const affixIconTemplate = affixIconTemplateFactory(context);
343
+ const iconTag = context.tagFor(Icon);
344
+ return html`
345
+ <template
346
+ ${applyHostSemantics({
347
+ role: MenuItemRole.menuitem,
348
+ ariaHasPopup: (x) => x.hasSubmenu ? "menu" : void 0,
349
+ ariaChecked: (x) => x.controlType ? x.checked : void 0,
350
+ ariaDisabled: (x) => x.disabled,
351
+ ariaExpanded: (x) => x.expanded
352
+ })}
353
+ @keydown="${(x, c) => x.handleMenuItemKeyDown(c.event)}"
354
+ @click="${(x, c) => x.handleMenuItemClick(c.event)}"
355
+ @mouseover="${(x, c) => x.handleMouseOver(c.event)}"
356
+ @mouseout="${(x, c) => x.handleMouseOut(c.event)}"
357
+ >
358
+ <div class="${getClasses}">
359
+ <slot name="meta" ${slotted("metaSlottedContent")}></slot>
360
+ ${checkIndicator(context)}
361
+ ${when(
362
+ (x) => x.icon,
363
+ html`<span class="decorative"
364
+ >${(x) => affixIconTemplate(x.icon)}</span
365
+ >`
164
366
  )}
165
- <span class="sr-only"
166
- >${(x) => x.pending ? x.locale.button.pendingLabel : x.ariaLabel ?? x.label}</span
167
- >
168
- </span>
169
- ${when((x) => x.dropdownIndicator, chevronTemplate)}`;
170
- };
171
- function renderButtonContent(context) {
172
- return html` <button
173
- class="${getClasses}"
174
- ?autofocus="${(x) => x.autofocus}"
175
- form="${(x) => x.formId}"
176
- formaction="${(x) => x.formaction}"
177
- formenctype="${(x) => x.formenctype}"
178
- formmethod="${(x) => x.formmethod}"
179
- formnovalidate="${(x) => x.formnovalidate}"
180
- formtarget="${(x) => x.formtarget}"
181
- name="${(x) => x.name}"
182
- type="${(x) => getButtonType(x.type)}"
183
- value="${(x) => x.value}"
184
- title="${(x) => x.title}"
185
- ${delegateAria({
186
- ariaLabel: null,
187
- ariaDisabled: (x) => x.disabled || x.pending
367
+ ${text()}
368
+ <slot
369
+ name="trailing-meta"
370
+ ${slotted("trailingMetaSlottedContent")}
371
+ ></slot>
372
+ ${when(
373
+ (x) => x.hasSubmenu,
374
+ html`<${iconTag} class="chevron" name="chevron-right-line"></${iconTag}>`
375
+ )}
376
+ </div>
377
+ <slot
378
+ name="submenu"
379
+ ${slotted({
380
+ property: "slottedSubmenu",
381
+ filter: elements(context.tagForNonDependency(menuName))
188
382
  })}
189
- ${ref("control")}
190
- @click="${(x, c) => x.clickHandler(c.event)}"
191
- >
192
- ${buttonContent(context)}
193
- </button>`;
194
- }
195
- function renderAnchorContent(context) {
196
- return html`${(x) => x._renderLinkElement(buttonContent(context), getClasses, {
197
- ariaLabel: null
198
- })}`;
199
- }
200
- const buttonTemplate = (context) => {
201
- return html` <template>
202
- ${when((x) => !x.href, html`${renderButtonContent(context)}`)}
203
- ${when((x) => x.href, renderAnchorContent(context))}
204
- </template>`;
383
+ ></slot>
384
+ </template>
385
+ `;
205
386
  };
206
387
 
207
- const buttonDefinition = defineVividComponent(
208
- "button",
209
- Button,
210
- buttonTemplate,
211
- [iconDefinition, progressRingDefinition],
388
+ const menuItemDefinition = defineVividComponent(
389
+ "menu-item",
390
+ MenuItem,
391
+ MenuItemTemplate,
392
+ [iconDefinition],
212
393
  {
213
- styles,
214
- shadowOptions: {
215
- delegatesFocus: true
216
- }
394
+ styles
217
395
  }
218
396
  );
219
- const registerButton = createRegisterFunction(buttonDefinition);
397
+ const registerMenuItem = createRegisterFunction(menuItemDefinition);
220
398
 
221
- export { Button as B, buttonDefinition as b, chevronTemplateFactory as c, registerButton as r };
399
+ export { MenuItemRole as M, MenuItem as a, menuName as b, menuItemDefinition as m, registerMenuItem as r };