@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,16 +1,21 @@
1
1
  'use strict';
2
2
 
3
3
  const icon_definition = require('../icon/definition.cjs');
4
- const progressRing_definition = require('../progress-ring/definition.cjs');
5
4
  const vividElement = require('./vivid-element.cjs');
6
5
  const fastElement = require('@microsoft/fast-element');
7
- const button = require('./button.cjs');
8
- const affix = require('./affix.cjs');
9
- const localized = require('./localized.cjs');
10
- const linkable = require('./linkable.cjs');
11
6
  const fastWebUtilities = require('@microsoft/fast-web-utilities');
12
- const enums = require('./enums.cjs');
13
- const delegatesAria = require('./delegates-aria.cjs');
7
+ const keyCodes = require('./key-codes.cjs');
8
+ const affix = require('./affix.cjs');
9
+ const hostSemantics = require('./host-semantics.cjs');
10
+
11
+ 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)}";
12
+
13
+ const MenuItemRole = {
14
+ menuitem: "menuitem",
15
+ menuitemcheckbox: "menuitemcheckbox",
16
+ menuitemradio: "menuitemradio",
17
+ presentation: "presentation"
18
+ };
14
19
 
15
20
  var __defProp = Object.defineProperty;
16
21
  var __decorateClass = (decorators, target, key, kind) => {
@@ -21,206 +26,380 @@ var __decorateClass = (decorators, target, key, kind) => {
21
26
  if (result) __defProp(target, key, result);
22
27
  return result;
23
28
  };
24
- class Button extends affix.AffixIconWithTrailing(
25
- localized.Localized(linkable.Linkable(button.VividFoundationButton))
26
- ) {
29
+ class MenuItem extends hostSemantics.HostSemantics(affix.AffixIcon(vividElement.VividElement)) {
27
30
  constructor() {
28
31
  super();
29
- this.stacked = false;
30
- this.pending = false;
31
- this.dropdownIndicator = false;
32
- this.active = false;
33
- this.title = "";
32
+ /**
33
+ * The role of the element.
34
+ *
35
+ * @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`.
36
+ * @public
37
+ * @remarks
38
+ * HTML Attribute: role
39
+ */
40
+ this.role = MenuItemRole.menuitem;
41
+ this.checked = false;
42
+ /**
43
+ * @internal
44
+ */
45
+ this.handleMenuItemClick = (e) => {
46
+ if (this._isSyntheticClickEvent(e)) {
47
+ return true;
48
+ }
49
+ this.invoke();
50
+ return Boolean(this._isPresentational);
51
+ };
52
+ /**
53
+ * @internal
54
+ */
55
+ this.handleMouseOver = (_) => {
56
+ if (this.disabled || !this.submenu || this.expanded) {
57
+ return false;
58
+ }
59
+ this.expanded = true;
60
+ return false;
61
+ };
62
+ /**
63
+ * @internal
64
+ */
65
+ this.handleMouseOut = (_) => {
66
+ if (!this.expanded || this.contains(document.activeElement)) {
67
+ return false;
68
+ }
69
+ this.expanded = false;
70
+ return false;
71
+ };
72
+ this.invoke = () => {
73
+ if (this.disabled || this._isPresentational) {
74
+ return;
75
+ }
76
+ switch (this.controlType) {
77
+ case "checkbox":
78
+ this.checked = !this.checked;
79
+ break;
80
+ case "radio":
81
+ if (!this.checked) {
82
+ this.checked = true;
83
+ }
84
+ break;
85
+ default:
86
+ if (this.submenu) {
87
+ this.expanded = true;
88
+ } else {
89
+ this.$emit("change");
90
+ }
91
+ break;
92
+ }
93
+ };
94
+ this.checkTrailing = false;
95
+ /**
96
+ * @internal
97
+ */
98
+ this.handleMenuItemKeyDown = (e) => {
99
+ if (e.defaultPrevented) {
100
+ return false;
101
+ }
102
+ switch (e.key) {
103
+ case fastWebUtilities.keyEnter:
104
+ case fastWebUtilities.keySpace:
105
+ this.invoke();
106
+ if (!this.disabled) {
107
+ this.#emitSyntheticClick();
108
+ }
109
+ return false;
110
+ case keyCodes.keyArrowRight: {
111
+ if (this.submenu) {
112
+ this.expanded = true;
113
+ this.#emitSyntheticClick();
114
+ }
115
+ return false;
116
+ }
117
+ case keyCodes.keyArrowLeft:
118
+ if (this.expanded) {
119
+ this.#emitSyntheticClick();
120
+ this.expanded = false;
121
+ this.focus();
122
+ return false;
123
+ }
124
+ }
125
+ return true;
126
+ };
127
+ this.#syntheticClickEvents = /* @__PURE__ */ new WeakSet();
128
+ this.addEventListener("expanded-change", this.#expandedChange);
129
+ }
130
+ /**
131
+ * @internal
132
+ */
133
+ expandedChanged() {
134
+ if (this.$fastController.isConnected) {
135
+ if (this.submenu && !this.expanded) {
136
+ this.submenu.collapseExpandedItem();
137
+ }
138
+ this.$emit("expanded-change", this, { bubbles: false });
139
+ }
140
+ }
141
+ #ensureRoleMatchesPresentational() {
142
+ if (this._isPresentational) {
143
+ if (this.role === "menuitem") {
144
+ this.role = "presentation";
145
+ }
146
+ } else if (this.role === "presentation") {
147
+ this.role = MenuItemRole.menuitem;
148
+ }
149
+ }
150
+ /**
151
+ * @internal
152
+ */
153
+ _isPresentationalChanged() {
154
+ if (this.$fastController.isConnected) {
155
+ this.#ensureRoleMatchesPresentational();
156
+ }
157
+ }
158
+ /**
159
+ * @internal
160
+ */
161
+ checkedChanged() {
162
+ if (this.$fastController.isConnected) {
163
+ this.$emit("change");
164
+ }
165
+ }
166
+ /**
167
+ * @internal
168
+ */
169
+ connectedCallback() {
170
+ super.connectedCallback();
171
+ fastElement.Updates.enqueue(() => {
172
+ this._isPresentational = this._isPresentational ?? true;
173
+ this.#ensureRoleMatchesPresentational();
174
+ });
175
+ }
176
+ /**
177
+ * @internal
178
+ */
179
+ slottedSubmenuChanged() {
180
+ if (this.submenu) {
181
+ this.submenu.anchor = this;
182
+ this.submenu.placement = "right-start";
183
+ this.submenu.collapseExpandedItem = () => this.#collapseExpandedItem();
184
+ this.submenu._popupOffset = 5;
185
+ }
186
+ }
187
+ /**
188
+ * @internal
189
+ */
190
+ get submenu() {
191
+ if (this.slottedSubmenu?.length) {
192
+ return this.slottedSubmenu[0];
193
+ } else {
194
+ return null;
195
+ }
34
196
  }
35
197
  /**
36
- * Handles click events.
37
- * Prevents interaction when disabled or pending.
198
+ * @internal
38
199
  */
39
- clickHandler(event) {
40
- /* v8 ignore else -- @preserve */
41
- if (this.disabled || this.pending) {
42
- event.preventDefault();
43
- event.stopImmediatePropagation();
44
- return;
200
+ get hasSubmenu() {
201
+ return this.submenu !== null;
202
+ }
203
+ #collapseExpandedItem() {
204
+ this.expanded = false;
205
+ }
206
+ #expandedChange() {
207
+ if (this.submenu) {
208
+ this.submenu.open = this.expanded;
45
209
  }
46
210
  }
211
+ #syntheticClickEvents;
212
+ /**
213
+ * @internal
214
+ */
215
+ _isSyntheticClickEvent(event) {
216
+ return this.#syntheticClickEvents.has(event);
217
+ }
218
+ #emitSyntheticClick() {
219
+ const mouseEvent = new MouseEvent("click", {
220
+ bubbles: true,
221
+ composed: true
222
+ });
223
+ this.#syntheticClickEvents.add(mouseEvent);
224
+ this.dispatchEvent(mouseEvent);
225
+ }
47
226
  }
48
227
  __decorateClass([
49
- fastElement.attr({
50
- converter: {
51
- fromView: (value) => value || null,
52
- toView: (value) => value || null
228
+ fastElement.attr({ mode: "boolean" })
229
+ ], MenuItem.prototype, "disabled");
230
+ __decorateClass([
231
+ fastElement.attr({ mode: "boolean" })
232
+ ], MenuItem.prototype, "expanded");
233
+ __decorateClass([
234
+ fastElement.observable
235
+ ], MenuItem.prototype, "_isPresentational");
236
+ __decorateClass([
237
+ vividElement.replaces({
238
+ deprecatedPropertyName: "role",
239
+ fromDeprecated: (role) => {
240
+ switch (role) {
241
+ case "menuitemcheckbox":
242
+ return "checkbox";
243
+ case "menuitemradio":
244
+ return "radio";
245
+ default:
246
+ return void 0;
247
+ }
248
+ },
249
+ toDeprecated: (controlType) => {
250
+ switch (controlType) {
251
+ case "checkbox":
252
+ return "menuitemcheckbox";
253
+ case "radio":
254
+ return "menuitemradio";
255
+ default:
256
+ return "menuitem";
257
+ }
53
258
  }
54
- })
55
- ], Button.prototype, "title");
259
+ }),
260
+ fastElement.attr({ attribute: "control-type" })
261
+ ], MenuItem.prototype, "controlType");
56
262
  __decorateClass([
57
- fastElement.attr
58
- ], Button.prototype, "connotation");
263
+ fastElement.attr({ mode: "boolean" })
264
+ ], MenuItem.prototype, "checked");
59
265
  __decorateClass([
60
266
  fastElement.attr
61
- ], Button.prototype, "shape");
267
+ ], MenuItem.prototype, "text");
62
268
  __decorateClass([
63
- fastElement.attr
64
- ], Button.prototype, "appearance");
269
+ fastElement.attr({ attribute: "text-secondary" })
270
+ ], MenuItem.prototype, "textSecondary");
65
271
  __decorateClass([
66
272
  fastElement.attr
67
- ], Button.prototype, "size");
273
+ ], MenuItem.prototype, "connotation");
68
274
  __decorateClass([
69
- fastElement.attr({
70
- mode: "boolean",
71
- attribute: "stacked"
72
- })
73
- ], Button.prototype, "stacked");
275
+ fastElement.attr({ mode: "boolean", attribute: "check-trailing" })
276
+ ], MenuItem.prototype, "checkTrailing");
74
277
  __decorateClass([
75
- fastElement.attr({
76
- mode: "boolean",
77
- attribute: "pending"
78
- })
79
- ], Button.prototype, "pending");
278
+ fastElement.attr({ attribute: "check-appearance" })
279
+ ], MenuItem.prototype, "checkedAppearance");
80
280
  __decorateClass([
81
- fastElement.attr({
82
- mode: "boolean",
83
- attribute: "dropdown-indicator"
84
- })
85
- ], Button.prototype, "dropdownIndicator");
281
+ fastElement.observable
282
+ ], MenuItem.prototype, "metaSlottedContent");
86
283
  __decorateClass([
87
- fastElement.attr({
88
- mode: "boolean",
89
- attribute: "active"
90
- })
91
- ], Button.prototype, "active");
284
+ fastElement.observable
285
+ ], MenuItem.prototype, "trailingMetaSlottedContent");
92
286
  __decorateClass([
93
- fastElement.attr
94
- ], Button.prototype, "label");
287
+ fastElement.observable
288
+ ], MenuItem.prototype, "slottedSubmenu");
95
289
 
96
- 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}";
290
+ const menuName = "menu";
97
291
 
98
- const chevronTemplateFactory = (context) => {
99
- const iconTag = context.tagFor(icon_definition.VwcIconElement);
100
- return fastElement.html`<${iconTag} class="chevron" aria-hidden="true" name="chevron-down-line"></${iconTag}>`;
292
+ const getIndicatorIcon = (x) => {
293
+ if (x.checkedAppearance === "tick-only") {
294
+ return x.checked ? "check-line" : "";
295
+ }
296
+ const iconType = x.controlType === "checkbox" ? "checkbox" : "radio";
297
+ const iconStatus = x.checked ? "checked" : "unchecked";
298
+ return `${iconType}-${iconStatus}-2-line`;
101
299
  };
102
-
103
300
  const getClasses = ({
104
301
  connotation,
105
- appearance,
106
- shape,
107
- iconTrailing,
108
- icon,
109
- label,
110
302
  disabled,
111
- pending,
112
- stacked,
113
- size,
114
- iconSlottedContent,
115
- ariaExpanded,
116
- active,
117
- dropdownIndicator
303
+ checked,
304
+ controlType,
305
+ text: text2,
306
+ textSecondary,
307
+ icon,
308
+ metaSlottedContent,
309
+ checkTrailing
118
310
  }) => fastWebUtilities.classNames(
119
- "control",
311
+ "base",
120
312
  [`connotation-${connotation}`, Boolean(connotation)],
121
- [`appearance-${appearance}`, Boolean(appearance)],
122
- ["disabled", disabled || pending],
123
- [`shape-${shape}`, Boolean(shape)],
124
- [`size-${size}`, Boolean(size)],
125
- [
126
- "icon-only",
127
- !label && !!(icon || iconSlottedContent?.length) && !dropdownIndicator
128
- ],
129
- ["icon-trailing", iconTrailing],
130
- ["stacked", Boolean(stacked)],
131
- ["active", ariaExpanded === "true" || active]
313
+ ["disabled", Boolean(disabled)],
314
+ ["selected", Boolean(controlType && checked)],
315
+ ["trailing", Boolean(controlType && (checkTrailing || Boolean(icon)))],
316
+ ["item-checkbox", controlType === "checkbox"],
317
+ ["item-radio", controlType === "radio"],
318
+ ["two-lines", Boolean(text2?.length) && Boolean(textSecondary?.length)],
319
+ ["has-meta", Boolean(metaSlottedContent?.length)]
132
320
  );
133
- function renderIconOrPending(context, icon, pending, size = enums.Size.Normal) {
134
- if (pending && size != enums.Size.SuperCondensed) {
135
- const progressTag = context.tagFor(progressRing_definition.VwcProgressRingElement);
136
- const progressSize = {
137
- [enums.Size.Condensed]: "-6",
138
- [enums.Size.Normal]: "-5",
139
- [enums.Size.Expanded]: "-4"
140
- };
141
- const getClassName = (x) => {
142
- const slottedIconElement = x.querySelector('[slot="icon"]');
143
- return fastWebUtilities.classNames("icon", "pending", [
144
- "pending-no-icon",
145
- !(icon || slottedIconElement)
146
- ]);
147
- };
148
- return fastElement.html`<span class="${getClassName}" aria-hidden="true"><${progressTag} size="${progressSize[size]}"></${progressTag}></span>`;
149
- } else {
150
- const affixIconTemplate = affix.affixIconTemplateFactory(context);
151
- return affixIconTemplate(icon, affix.IconWrapper.Slot);
152
- }
321
+ function checkIndicator(context) {
322
+ const iconTag = context.tagFor(icon_definition.VwcIconElement);
323
+ return fastElement.html`${fastElement.when(
324
+ (x) => Boolean(x.controlType),
325
+ fastElement.html`<span class="action"><${iconTag} class="icon" name="${(x) => getIndicatorIcon(x)}"></${iconTag}></span>`
326
+ )}`;
153
327
  }
154
- const getButtonType = (type) => {
155
- const types = ["submit", "button", "reset"];
156
- if (types.indexOf(type) > -1) return type;
157
- return "submit";
158
- };
159
- const buttonContent = (context) => {
160
- const chevronTemplate = chevronTemplateFactory(context);
161
- return fastElement.html`<span class="content">
162
- ${(x) => renderIconOrPending(context, x.icon, x.pending, x.size)}
328
+ function text() {
329
+ return fastElement.html`${fastElement.when(
330
+ (x) => x.text || x.textSecondary,
331
+ fastElement.html`<span class="text">
332
+ ${fastElement.when(
333
+ (x) => x.text,
334
+ fastElement.html`<span class="text-primary">${(x) => x.text}</span>`
335
+ )}
163
336
  ${fastElement.when(
164
- (x) => x.label,
165
- fastElement.html`<span class="text" aria-hidden="true">${(x) => x.label}</span>`
337
+ (x) => x.textSecondary,
338
+ fastElement.html`<span class="text-secondary">${(x) => x.textSecondary}</span>`
339
+ )}
340
+ </span>`
341
+ )}`;
342
+ }
343
+ const MenuItemTemplate = (context) => {
344
+ const affixIconTemplate = affix.affixIconTemplateFactory(context);
345
+ const iconTag = context.tagFor(icon_definition.VwcIconElement);
346
+ return fastElement.html`
347
+ <template
348
+ ${hostSemantics.applyHostSemantics({
349
+ role: MenuItemRole.menuitem,
350
+ ariaHasPopup: (x) => x.hasSubmenu ? "menu" : void 0,
351
+ ariaChecked: (x) => x.controlType ? x.checked : void 0,
352
+ ariaDisabled: (x) => x.disabled,
353
+ ariaExpanded: (x) => x.expanded
354
+ })}
355
+ @keydown="${(x, c) => x.handleMenuItemKeyDown(c.event)}"
356
+ @click="${(x, c) => x.handleMenuItemClick(c.event)}"
357
+ @mouseover="${(x, c) => x.handleMouseOver(c.event)}"
358
+ @mouseout="${(x, c) => x.handleMouseOut(c.event)}"
359
+ >
360
+ <div class="${getClasses}">
361
+ <slot name="meta" ${fastElement.slotted("metaSlottedContent")}></slot>
362
+ ${checkIndicator(context)}
363
+ ${fastElement.when(
364
+ (x) => x.icon,
365
+ fastElement.html`<span class="decorative"
366
+ >${(x) => affixIconTemplate(x.icon)}</span
367
+ >`
166
368
  )}
167
- <span class="sr-only"
168
- >${(x) => x.pending ? x.locale.button.pendingLabel : x.ariaLabel ?? x.label}</span
169
- >
170
- </span>
171
- ${fastElement.when((x) => x.dropdownIndicator, chevronTemplate)}`;
172
- };
173
- function renderButtonContent(context) {
174
- return fastElement.html` <button
175
- class="${getClasses}"
176
- ?autofocus="${(x) => x.autofocus}"
177
- form="${(x) => x.formId}"
178
- formaction="${(x) => x.formaction}"
179
- formenctype="${(x) => x.formenctype}"
180
- formmethod="${(x) => x.formmethod}"
181
- formnovalidate="${(x) => x.formnovalidate}"
182
- formtarget="${(x) => x.formtarget}"
183
- name="${(x) => x.name}"
184
- type="${(x) => getButtonType(x.type)}"
185
- value="${(x) => x.value}"
186
- title="${(x) => x.title}"
187
- ${delegatesAria.delegateAria({
188
- ariaLabel: null,
189
- ariaDisabled: (x) => x.disabled || x.pending
369
+ ${text()}
370
+ <slot
371
+ name="trailing-meta"
372
+ ${fastElement.slotted("trailingMetaSlottedContent")}
373
+ ></slot>
374
+ ${fastElement.when(
375
+ (x) => x.hasSubmenu,
376
+ fastElement.html`<${iconTag} class="chevron" name="chevron-right-line"></${iconTag}>`
377
+ )}
378
+ </div>
379
+ <slot
380
+ name="submenu"
381
+ ${fastElement.slotted({
382
+ property: "slottedSubmenu",
383
+ filter: fastElement.elements(context.tagForNonDependency(menuName))
190
384
  })}
191
- ${fastElement.ref("control")}
192
- @click="${(x, c) => x.clickHandler(c.event)}"
193
- >
194
- ${buttonContent(context)}
195
- </button>`;
196
- }
197
- function renderAnchorContent(context) {
198
- return fastElement.html`${(x) => x._renderLinkElement(buttonContent(context), getClasses, {
199
- ariaLabel: null
200
- })}`;
201
- }
202
- const buttonTemplate = (context) => {
203
- return fastElement.html` <template>
204
- ${fastElement.when((x) => !x.href, fastElement.html`${renderButtonContent(context)}`)}
205
- ${fastElement.when((x) => x.href, renderAnchorContent(context))}
206
- </template>`;
385
+ ></slot>
386
+ </template>
387
+ `;
207
388
  };
208
389
 
209
- const buttonDefinition = vividElement.defineVividComponent(
210
- "button",
211
- Button,
212
- buttonTemplate,
213
- [icon_definition.iconDefinition, progressRing_definition.progressRingDefinition],
390
+ const menuItemDefinition = vividElement.defineVividComponent(
391
+ "menu-item",
392
+ MenuItem,
393
+ MenuItemTemplate,
394
+ [icon_definition.iconDefinition],
214
395
  {
215
- styles,
216
- shadowOptions: {
217
- delegatesFocus: true
218
- }
396
+ styles
219
397
  }
220
398
  );
221
- const registerButton = vividElement.createRegisterFunction(buttonDefinition);
399
+ const registerMenuItem = vividElement.createRegisterFunction(menuItemDefinition);
222
400
 
223
- exports.Button = Button;
224
- exports.buttonDefinition = buttonDefinition;
225
- exports.chevronTemplateFactory = chevronTemplateFactory;
226
- exports.registerButton = registerButton;
401
+ exports.MenuItem = MenuItem;
402
+ exports.MenuItemRole = MenuItemRole;
403
+ exports.menuItemDefinition = menuItemDefinition;
404
+ exports.menuName = menuName;
405
+ exports.registerMenuItem = registerMenuItem;