@vonage/vivid 4.24.0 → 4.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. package/custom-elements.json +12314 -4711
  2. package/elevation/index.cjs +1 -1
  3. package/elevation/index.js +1 -1
  4. package/index.cjs +112 -150
  5. package/index.js +37 -35
  6. package/lib/accordion-item/accordion-item.d.ts +6 -0
  7. package/lib/action-group/action-group.d.ts +6 -0
  8. package/lib/alert/alert.d.ts +20 -0
  9. package/lib/audio-player/audio-player.d.ts +6 -0
  10. package/lib/badge/badge.d.ts +9 -1
  11. package/lib/banner/banner.d.ts +25 -0
  12. package/lib/breadcrumb/breadcrumb.d.ts +6 -0
  13. package/lib/breadcrumb-item/breadcrumb-item.d.ts +63 -7
  14. package/lib/button/button.d.ts +732 -7
  15. package/lib/button/locale.d.ts +3 -0
  16. package/lib/calendar-event/calendar-event.d.ts +6 -0
  17. package/lib/card/card.d.ts +394 -2
  18. package/lib/card/card.template.d.ts +2 -1
  19. package/lib/checkbox/checkbox.d.ts +1822 -5
  20. package/lib/combobox/combobox.d.ts +1827 -20
  21. package/lib/data-grid/data-grid-cell.d.ts +339 -1
  22. package/lib/data-grid/locale.d.ts +5 -0
  23. package/lib/date-picker/date-picker.d.ts +1676 -207
  24. package/lib/date-range-picker/date-range-picker.d.ts +840 -107
  25. package/lib/date-time-picker/date-time-picker.d.ts +1678 -209
  26. package/lib/dial-pad/dial-pad.d.ts +8 -0
  27. package/lib/dialog/dialog.d.ts +12 -0
  28. package/lib/divider/divider.d.ts +6 -0
  29. package/lib/fab/fab.d.ts +6 -0
  30. package/lib/file-picker/file-picker.d.ts +1508 -30
  31. package/lib/header/header.d.ts +6 -0
  32. package/lib/icon/icon.d.ts +1 -0
  33. package/lib/icon/icon.template.d.ts +2 -1
  34. package/lib/menu/menu.d.ts +16 -7
  35. package/lib/menu/name.d.ts +1 -0
  36. package/lib/menu-item/menu-item.d.ts +14 -2
  37. package/lib/nav/nav.d.ts +6 -0
  38. package/lib/nav-disclosure/nav-disclosure.d.ts +13 -0
  39. package/lib/nav-item/nav-item.d.ts +405 -3
  40. package/lib/note/note.d.ts +6 -0
  41. package/lib/number-field/number-field.d.ts +1857 -36
  42. package/lib/option/option.d.ts +12 -0
  43. package/lib/progress/progress.d.ts +6 -0
  44. package/lib/progress-ring/progress-ring.d.ts +6 -0
  45. package/lib/radio/radio.d.ts +1137 -4
  46. package/lib/radio-group/radio-group.d.ts +20 -2
  47. package/lib/range-slider/range-slider.d.ts +752 -5
  48. package/lib/rich-text-editor/definition.d.ts +2 -2
  49. package/lib/rich-text-editor/facades/vivid-prose-mirror.facade.d.ts +3 -1
  50. package/lib/rich-text-editor/locale.d.ts +1 -0
  51. package/lib/rich-text-editor/menubar/menubar.d.ts +6 -0
  52. package/lib/rich-text-editor/rich-text-editor.d.ts +352 -2
  53. package/lib/searchable-select/option-tag.d.ts +6 -0
  54. package/lib/searchable-select/searchable-select.d.ts +1857 -36
  55. package/lib/select/select.d.ts +1843 -28
  56. package/lib/selectable-box/selectable-box.d.ts +6 -0
  57. package/lib/slider/slider.d.ts +384 -2
  58. package/lib/split-button/split-button.d.ts +18 -0
  59. package/lib/switch/switch.d.ts +386 -3
  60. package/lib/tab/tab.d.ts +18 -1
  61. package/lib/tab-panel/tab-panel.d.ts +6 -0
  62. package/lib/tag/tag.d.ts +12 -0
  63. package/lib/tag-group/tag-group.d.ts +6 -0
  64. package/lib/text-area/text-area.d.ts +2174 -19
  65. package/lib/text-field/text-field.d.ts +2195 -31
  66. package/lib/time-picker/time-picker.d.ts +839 -106
  67. package/lib/toggletip/toggletip.d.ts +10 -4
  68. package/lib/tooltip/tooltip.d.ts +10 -4
  69. package/lib/tree-item/tree-item.d.ts +12 -0
  70. package/lib/tree-view/tree-view.d.ts +6 -0
  71. package/lib/video-player/video-player.d.ts +6 -0
  72. package/lib/visually-hidden/definition.d.ts +4 -0
  73. package/lib/visually-hidden/visually-hidden.d.ts +3 -0
  74. package/lib/visually-hidden/visually-hidden.template.d.ts +3 -0
  75. package/locales/de-DE.cjs +33 -1
  76. package/locales/de-DE.js +33 -1
  77. package/locales/en-GB.cjs +33 -1
  78. package/locales/en-GB.js +33 -1
  79. package/locales/en-US.cjs +33 -1
  80. package/locales/en-US.js +33 -1
  81. package/locales/ja-JP.cjs +33 -1
  82. package/locales/ja-JP.js +33 -1
  83. package/locales/zh-CN.cjs +33 -1
  84. package/locales/zh-CN.js +33 -1
  85. package/menu/index.cjs +1 -1
  86. package/menu/index.js +1 -1
  87. package/nav/index.cjs +1 -1
  88. package/nav/index.js +1 -1
  89. package/nav-disclosure/index.cjs +1 -1
  90. package/nav-disclosure/index.js +1 -1
  91. package/nav-item/index.cjs +1 -1
  92. package/nav-item/index.js +1 -1
  93. package/note/index.cjs +1 -1
  94. package/note/index.js +1 -1
  95. package/number-field/index.cjs +1 -1
  96. package/number-field/index.js +1 -1
  97. package/option/index.cjs +1 -1
  98. package/option/index.js +1 -1
  99. package/package.json +1 -1
  100. package/pagination/index.cjs +1 -1
  101. package/pagination/index.js +1 -1
  102. package/popup/index.cjs +1 -1
  103. package/popup/index.js +1 -1
  104. package/progress/index.cjs +1 -1
  105. package/progress/index.js +1 -1
  106. package/progress-ring/index.cjs +1 -1
  107. package/progress-ring/index.js +1 -1
  108. package/radio/index.cjs +1 -1
  109. package/radio/index.js +1 -1
  110. package/radio-group/index.cjs +1 -1
  111. package/radio-group/index.js +1 -1
  112. package/range-slider/index.cjs +1 -1
  113. package/range-slider/index.js +1 -1
  114. package/rich-text-editor/index.cjs +1 -1
  115. package/rich-text-editor/index.js +1 -1
  116. package/searchable-select/index.cjs +1 -1
  117. package/searchable-select/index.js +1 -1
  118. package/select/index.cjs +1 -1
  119. package/select/index.js +1 -1
  120. package/selectable-box/index.cjs +1 -1
  121. package/selectable-box/index.js +1 -1
  122. package/shared/affix.cjs +13 -7
  123. package/shared/affix.js +13 -8
  124. package/shared/aria/delegates-aria.d.ts +6 -0
  125. package/shared/aria/host-semantics.d.ts +6 -0
  126. package/shared/breadcrumb-item.cjs +2 -5
  127. package/shared/breadcrumb-item.js +2 -5
  128. package/shared/button.cjs +13 -11
  129. package/shared/button.js +13 -11
  130. package/shared/calendar-picker.template.cjs +3 -3
  131. package/shared/calendar-picker.template.js +1 -1
  132. package/shared/char-count.cjs +92 -0
  133. package/shared/char-count.js +90 -0
  134. package/shared/definition.js +1 -1
  135. package/shared/definition10.js +1 -1
  136. package/shared/definition11.cjs +27 -44
  137. package/shared/definition11.js +28 -45
  138. package/shared/definition12.js +1 -1
  139. package/shared/definition13.js +1 -1
  140. package/shared/definition14.cjs +53 -22
  141. package/shared/definition14.js +54 -23
  142. package/shared/definition15.cjs +31 -36
  143. package/shared/definition15.js +30 -36
  144. package/shared/definition16.cjs +43 -63
  145. package/shared/definition16.js +42 -63
  146. package/shared/definition17.cjs +8 -4
  147. package/shared/definition17.js +8 -4
  148. package/shared/definition18.cjs +10 -14
  149. package/shared/definition18.js +9 -14
  150. package/shared/definition19.cjs +85 -100
  151. package/shared/definition19.js +75 -91
  152. package/shared/definition2.js +1 -1
  153. package/shared/definition20.cjs +15 -20
  154. package/shared/definition20.js +14 -20
  155. package/shared/definition21.cjs +22 -3
  156. package/shared/definition21.js +23 -4
  157. package/shared/definition22.cjs +4 -4
  158. package/shared/definition22.js +5 -5
  159. package/shared/definition23.cjs +5 -38
  160. package/shared/definition23.js +5 -37
  161. package/shared/definition24.cjs +2 -7
  162. package/shared/definition24.js +3 -8
  163. package/shared/definition25.js +1 -1
  164. package/shared/definition26.cjs +157 -171
  165. package/shared/definition26.js +156 -171
  166. package/shared/definition27.cjs +1 -1
  167. package/shared/definition27.js +2 -2
  168. package/shared/definition28.cjs +32 -17
  169. package/shared/definition28.js +33 -18
  170. package/shared/definition29.js +1 -1
  171. package/shared/definition3.js +1 -1
  172. package/shared/definition30.cjs +96 -482
  173. package/shared/definition30.js +99 -482
  174. package/shared/definition31.cjs +334 -57
  175. package/shared/definition31.js +333 -56
  176. package/shared/definition32.cjs +104 -19
  177. package/shared/definition32.js +105 -20
  178. package/shared/definition33.cjs +67 -15
  179. package/shared/definition33.js +66 -14
  180. package/shared/definition34.cjs +15 -50
  181. package/shared/definition34.js +14 -49
  182. package/shared/definition35.cjs +28 -397
  183. package/shared/definition35.js +27 -397
  184. package/shared/definition36.cjs +404 -54
  185. package/shared/definition36.js +404 -55
  186. package/shared/definition37.cjs +57 -234
  187. package/shared/definition37.js +57 -233
  188. package/shared/definition38.cjs +221 -66
  189. package/shared/definition38.js +220 -65
  190. package/shared/definition39.cjs +52 -44
  191. package/shared/definition39.js +51 -43
  192. package/shared/definition4.cjs +31 -24
  193. package/shared/definition4.js +33 -26
  194. package/shared/definition40.cjs +56 -266
  195. package/shared/definition40.js +55 -265
  196. package/shared/definition41.cjs +285 -142
  197. package/shared/definition41.js +285 -142
  198. package/shared/definition42.cjs +156 -564
  199. package/shared/definition42.js +156 -565
  200. package/shared/definition43.cjs +554 -14378
  201. package/shared/definition43.js +553 -14377
  202. package/shared/definition44.cjs +14418 -1155
  203. package/shared/definition44.js +14417 -1156
  204. package/shared/definition45.cjs +1049 -677
  205. package/shared/definition45.js +1050 -678
  206. package/shared/definition46.cjs +848 -113
  207. package/shared/definition46.js +847 -112
  208. package/shared/definition47.cjs +125 -90
  209. package/shared/definition47.js +124 -89
  210. package/shared/definition48.cjs +88 -455
  211. package/shared/definition48.js +87 -454
  212. package/shared/definition49.cjs +466 -109
  213. package/shared/definition49.js +466 -109
  214. package/shared/definition5.cjs +8 -7
  215. package/shared/definition5.js +6 -5
  216. package/shared/definition50.cjs +106 -106
  217. package/shared/definition50.js +105 -105
  218. package/shared/definition51.cjs +136 -15
  219. package/shared/definition51.js +135 -14
  220. package/shared/definition52.cjs +16 -115
  221. package/shared/definition52.js +15 -114
  222. package/shared/definition53.cjs +78 -412
  223. package/shared/definition53.js +77 -410
  224. package/shared/definition54.cjs +445 -23
  225. package/shared/definition54.js +443 -22
  226. package/shared/definition55.cjs +22 -136
  227. package/shared/definition55.js +21 -135
  228. package/shared/definition56.cjs +95 -291
  229. package/shared/definition56.js +95 -292
  230. package/shared/definition57.cjs +192 -480
  231. package/shared/definition57.js +190 -479
  232. package/shared/definition58.cjs +411 -24
  233. package/shared/definition58.js +410 -24
  234. package/shared/definition59.cjs +27 -144
  235. package/shared/definition59.js +27 -143
  236. package/shared/definition6.js +1 -1
  237. package/shared/definition60.cjs +83 -54
  238. package/shared/definition60.js +82 -53
  239. package/shared/definition61.cjs +78 -166
  240. package/shared/definition61.js +77 -164
  241. package/shared/definition62.cjs +143 -232
  242. package/shared/definition62.js +141 -231
  243. package/shared/definition63.cjs +234 -69417
  244. package/shared/definition63.js +233 -69416
  245. package/shared/definition64.cjs +69454 -28
  246. package/shared/definition64.js +69453 -27
  247. package/shared/definition65.cjs +28 -2168
  248. package/shared/definition65.js +27 -2166
  249. package/shared/definition66.cjs +27 -0
  250. package/shared/definition66.js +23 -0
  251. package/shared/definition67.cjs +2195 -0
  252. package/shared/definition67.js +2190 -0
  253. package/shared/definition7.cjs +11 -2
  254. package/shared/definition7.js +12 -3
  255. package/shared/definition8.cjs +24 -11
  256. package/shared/definition8.js +26 -13
  257. package/shared/definition9.cjs +1 -2
  258. package/shared/definition9.js +2 -3
  259. package/shared/delegates-aria.js +1 -1
  260. package/shared/deprecation/replaced-props.d.ts +20 -0
  261. package/shared/divider.cjs +41 -0
  262. package/shared/divider.js +38 -0
  263. package/shared/feedback/feedback-message.d.ts +345 -0
  264. package/shared/feedback/locale.d.ts +4 -0
  265. package/{lib/text-anchor/text-anchor.d.ts → shared/feedback/mixins.d.ts} +62 -39
  266. package/shared/form-associated.cjs +124 -100
  267. package/shared/form-associated.js +125 -101
  268. package/shared/form-element.cjs +84 -0
  269. package/shared/form-element.js +82 -0
  270. package/shared/foundation/button/button.d.ts +378 -2
  271. package/shared/foundation/form-associated/form-associated.d.ts +753 -49
  272. package/shared/foundation/listbox/listbox.d.ts +1 -1
  273. package/shared/foundation/vivid-element/vivid-element.d.ts +14 -0
  274. package/shared/host-semantics.js +1 -1
  275. package/shared/key-codes.js +1 -1
  276. package/shared/linkable.cjs +70 -0
  277. package/shared/linkable.js +68 -0
  278. package/shared/localization/Locale.d.ts +14 -0
  279. package/shared/mixins.cjs +306 -0
  280. package/shared/mixins.js +300 -0
  281. package/shared/patterns/affix.d.ts +16 -1
  282. package/shared/patterns/anchored.d.ts +20 -8
  283. package/shared/patterns/char-count/char-count.d.ts +351 -0
  284. package/shared/patterns/char-count/index.d.ts +1 -0
  285. package/shared/patterns/char-count/locale.d.ts +4 -0
  286. package/shared/patterns/form-elements/form-element.d.ts +744 -0
  287. package/shared/patterns/form-elements/index.d.ts +3 -1
  288. package/shared/patterns/form-elements/with-error-text.d.ts +1122 -0
  289. package/shared/patterns/form-elements/with-success-text.d.ts +341 -0
  290. package/shared/patterns/index.d.ts +2 -0
  291. package/shared/patterns/linkable.d.ts +394 -0
  292. package/shared/patterns/localized.d.ts +6 -0
  293. package/shared/patterns/trapped-focus.d.ts +6 -0
  294. package/shared/picker-field/mixins/calendar-picker.d.ts +420 -52
  295. package/shared/picker-field/mixins/calendar-picker.template.d.ts +420 -52
  296. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +6 -0
  297. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +843 -107
  298. package/shared/picker-field/mixins/single-date-picker.d.ts +1259 -155
  299. package/shared/picker-field/mixins/single-value-picker.d.ts +417 -49
  300. package/shared/picker-field/mixins/time-selection-picker.d.ts +842 -106
  301. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +839 -103
  302. package/shared/picker-field/picker-field.d.ts +1491 -15
  303. package/shared/picker-field.template.cjs +13 -22
  304. package/shared/picker-field.template.js +14 -23
  305. package/shared/repeat.js +1 -1
  306. package/shared/slider.template.cjs +1 -1
  307. package/shared/slider.template.js +1 -1
  308. package/shared/time-selection-picker.template.cjs +10 -15
  309. package/shared/time-selection-picker.template.js +10 -16
  310. package/shared/vivid-element.cjs +53 -4
  311. package/shared/vivid-element.js +53 -3
  312. package/shared/with-error-text.cjs +56 -0
  313. package/shared/with-error-text.js +54 -0
  314. package/shared/with-success-text.cjs +23 -0
  315. package/shared/with-success-text.js +21 -0
  316. package/side-drawer/index.cjs +1 -1
  317. package/side-drawer/index.js +1 -1
  318. package/slider/index.cjs +1 -1
  319. package/slider/index.js +1 -1
  320. package/split-button/index.cjs +1 -1
  321. package/split-button/index.js +1 -1
  322. package/styles/core/all.css +1 -1
  323. package/styles/core/theme.css +1 -1
  324. package/styles/core/typography.css +1 -1
  325. package/styles/tokens/theme-dark.css +4 -4
  326. package/styles/tokens/theme-light.css +4 -4
  327. package/styles/tokens/vivid-2-compat.css +1 -1
  328. package/switch/index.cjs +1 -1
  329. package/switch/index.js +1 -1
  330. package/tab/index.cjs +1 -1
  331. package/tab/index.js +1 -1
  332. package/tab-panel/index.cjs +1 -1
  333. package/tab-panel/index.js +1 -1
  334. package/tabs/index.cjs +1 -1
  335. package/tabs/index.js +1 -1
  336. package/tag/index.cjs +1 -1
  337. package/tag/index.js +1 -1
  338. package/tag-group/index.cjs +1 -1
  339. package/tag-group/index.js +1 -1
  340. package/text-area/index.cjs +1 -1
  341. package/text-area/index.js +1 -1
  342. package/text-field/index.cjs +1 -1
  343. package/text-field/index.js +1 -1
  344. package/time-picker/index.cjs +1 -1
  345. package/time-picker/index.js +1 -1
  346. package/toggletip/index.cjs +1 -1
  347. package/toggletip/index.js +1 -1
  348. package/tooltip/index.cjs +1 -1
  349. package/tooltip/index.js +1 -1
  350. package/tree-item/index.cjs +1 -1
  351. package/tree-item/index.js +1 -1
  352. package/tree-view/index.cjs +1 -1
  353. package/tree-view/index.js +1 -1
  354. package/video-player/index.cjs +1 -1
  355. package/video-player/index.js +1 -1
  356. package/visually-hidden/index.cjs +5 -0
  357. package/visually-hidden/index.js +3 -0
  358. package/vivid.api.json +744 -1490
  359. package/lib/checkbox/checkbox.form-associated.d.ts +0 -11
  360. package/lib/file-picker/file-picker.form-associated.d.ts +0 -11
  361. package/lib/number-field/number-field.form-associated.d.ts +0 -11
  362. package/lib/radio/radio.form-associated.d.ts +0 -13
  363. package/lib/range-slider/range-slider.form-associated.d.ts +0 -11
  364. package/lib/searchable-select/searchable-select.form-associated.d.ts +0 -11
  365. package/lib/select/select.form-associated.d.ts +0 -11
  366. package/lib/slider/slider.form-associated.d.ts +0 -11
  367. package/lib/switch/switch.form-associated.d.ts +0 -11
  368. package/lib/text-anchor/definition.d.ts +0 -2
  369. package/lib/text-anchor/text-anchor.template.d.ts +0 -3
  370. package/lib/text-area/text-area.form-associated.d.ts +0 -11
  371. package/lib/text-field/text-field.form-associated.d.ts +0 -11
  372. package/shared/anchor.cjs +0 -49
  373. package/shared/anchor.js +0 -47
  374. package/shared/apply-mixins.cjs +0 -23
  375. package/shared/apply-mixins.js +0 -21
  376. package/shared/applyMixinsWithObservables.cjs +0 -15
  377. package/shared/applyMixinsWithObservables.js +0 -13
  378. package/shared/direction.cjs +0 -17
  379. package/shared/direction.js +0 -15
  380. package/shared/form-elements.cjs +0 -209
  381. package/shared/form-elements.js +0 -202
  382. package/shared/foundation/anchor/anchor.d.ts +0 -11
  383. package/shared/foundation/utilities/apply-mixins.d.ts +0 -1
  384. package/shared/patterns/form-elements/form-elements.d.ts +0 -58
  385. package/shared/picker-field/picker-field.form-associated.d.ts +0 -11
  386. package/shared/text-anchor.cjs +0 -38
  387. package/shared/text-anchor.js +0 -36
  388. package/shared/text-anchor.template.cjs +0 -35
  389. package/shared/text-anchor.template.js +0 -33
  390. package/shared/utils/applyMixinsWithObservables.d.ts +0 -1
  391. package/text-anchor/index.cjs +0 -17
  392. package/text-anchor/index.js +0 -15
@@ -1,22 +1,15 @@
1
1
  'use strict';
2
2
 
3
- const definition$1 = require('./definition65.cjs');
4
3
  const definition = require('./definition28.cjs');
5
4
  const vividElement = require('./vivid-element.cjs');
6
5
  const keyCodes = require('./key-codes.cjs');
7
6
  const affix = require('./affix.cjs');
8
- const direction = require('./direction.cjs');
9
7
  const hostSemantics = require('./host-semantics.cjs');
10
- const anchored = require('./anchored.cjs');
11
- const delegatesAria = require('./delegates-aria.cjs');
12
- const dom = require('./dom.cjs');
13
- const index = require('./index.cjs');
14
- const ref = require('./ref.cjs');
15
- const classNames = require('./class-names.cjs');
16
8
  const slotted = require('./slotted.cjs');
9
+ const classNames = require('./class-names.cjs');
17
10
  const when = require('./when.cjs');
18
11
 
19
- const styles$1 = ":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}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.base.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{display:flex;box-sizing:border-box;align-items:center;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:12px}.base.two-lines{padding:12px;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)))}@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(--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],[aria-checked=true],[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
+ 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}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.base.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{display:flex;box-sizing:border-box;align-items:center;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:12px}.base.two-lines{padding:12px;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)))}@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(--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)}";
20
13
 
21
14
  const MenuItemRole = {
22
15
  menuitem: "menuitem",
@@ -24,326 +17,6 @@ const MenuItemRole = {
24
17
  menuitemradio: "menuitemradio",
25
18
  presentation: "presentation"
26
19
  };
27
- const roleForMenuItem = {
28
- [MenuItemRole.menuitem]: "menuitem",
29
- [MenuItemRole.menuitemcheckbox]: "menuitemcheckbox",
30
- [MenuItemRole.menuitemradio]: "menuitemradio",
31
- [MenuItemRole.presentation]: "presentation"
32
- };
33
-
34
- var __defProp$1 = Object.defineProperty;
35
- var __decorateClass$1 = (decorators, target, key, kind) => {
36
- var result = void 0 ;
37
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
38
- if (decorator = decorators[i])
39
- result = (decorator(target, key, result) ) || result;
40
- if (result) __defProp$1(target, key, result);
41
- return result;
42
- };
43
- const _Menu = class _Menu extends anchored.Anchored(delegatesAria.DelegatesAria(vividElement.VividElement)) {
44
- constructor() {
45
- super(...arguments);
46
- this.expandedItem = null;
47
- /**
48
- * The index of the focusable element in the items array
49
- * defaults to -1
50
- */
51
- this.focusIndex = -1;
52
- /**
53
- * if focus is moving out of the menu, reset to a stable initial state
54
- * @internal
55
- */
56
- this.handleFocusOut = (e) => {
57
- if (!this.contains(e.relatedTarget) && this.menuItems !== void 0 && this.menuItems.length) {
58
- this.collapseExpandedItem();
59
- const focusIndex = this.menuItems.findIndex(
60
- this.isFocusableElement
61
- );
62
- this.menuItems[this.focusIndex].setAttribute("tabindex", "-1");
63
- this.menuItems[focusIndex].setAttribute("tabindex", "0");
64
- this.focusIndex = focusIndex;
65
- }
66
- };
67
- this.handleItemFocus = (e) => {
68
- const targetItem = e.target;
69
- if (this.menuItems !== void 0 && targetItem !== this.menuItems[this.focusIndex]) {
70
- this.menuItems[this.focusIndex].setAttribute("tabindex", "-1");
71
- this.focusIndex = this.menuItems.indexOf(targetItem);
72
- targetItem.setAttribute("tabindex", "0");
73
- }
74
- };
75
- this.handleExpandedChanged = (e) => {
76
- const changedItem = e.target;
77
- if (this.expandedItem !== null && changedItem === this.expandedItem && changedItem.expanded === false) {
78
- this.expandedItem = null;
79
- }
80
- if (changedItem.expanded) {
81
- this.expandedItem = changedItem;
82
- }
83
- };
84
- this.removeItemListeners = () => {
85
- if (this.menuItems !== void 0) {
86
- this.menuItems.forEach((item) => {
87
- item.removeEventListener("expanded-change", this.handleExpandedChanged);
88
- item.removeEventListener(
89
- "focus",
90
- this.handleItemFocus
91
- );
92
- });
93
- }
94
- };
95
- this.setItems = () => {
96
- const newItems = this.domChildren();
97
- this.removeItemListeners();
98
- this.menuItems = newItems.filter(this.isMenuItemElement);
99
- if (this.menuItems.length) {
100
- this.focusIndex = 0;
101
- }
102
- this.menuItems.forEach((item, index) => {
103
- item.setAttribute("tabindex", index === 0 ? "0" : "-1");
104
- item.addEventListener("expanded-change", this.handleExpandedChanged);
105
- item.addEventListener("focus", this.handleItemFocus);
106
- });
107
- };
108
- /**
109
- * check if the item is a menu item
110
- */
111
- this.isMenuItemElement = (el) => {
112
- return dom.isHTMLElement(el) && Object.prototype.hasOwnProperty.call(
113
- _Menu.focusableElementRoles,
114
- el.getAttribute("role")
115
- );
116
- };
117
- /**
118
- * check if the item is focusable
119
- */
120
- this.isFocusableElement = (el) => {
121
- return this.isMenuItemElement(el);
122
- };
123
- this.placement = "bottom";
124
- this.autoDismiss = false;
125
- this.positionStrategy = "fixed";
126
- this.open = false;
127
- this.#onAnchorClick = () => {
128
- if (this.#triggerBehaviour === "off") {
129
- return;
130
- }
131
- if (this.#triggerBehaviour === "legacy" && this.open) {
132
- return;
133
- }
134
- const newValue = !this.open;
135
- vividElement.DOM.queueUpdate(() => this.open = newValue);
136
- };
137
- this._onFocusout = (e) => {
138
- const focusTarget = e.relatedTarget;
139
- const focusMovedAway = !this.contains(focusTarget) && !this._anchorEl?.contains(focusTarget);
140
- if (this.autoDismiss && focusMovedAway) {
141
- this.open = false;
142
- }
143
- };
144
- }
145
- /**
146
- * @internal
147
- */
148
- itemsChanged() {
149
- if (this.$fastController.isConnected && this.menuItems !== void 0) {
150
- this.setItems();
151
- }
152
- }
153
- static {
154
- this.focusableElementRoles = roleForMenuItem;
155
- }
156
- /**
157
- * @internal
158
- */
159
- connectedCallback() {
160
- super.connectedCallback();
161
- vividElement.DOM.queueUpdate(() => {
162
- this.setItems();
163
- });
164
- }
165
- /**
166
- * @internal
167
- */
168
- disconnectedCallback() {
169
- super.disconnectedCallback();
170
- this.removeItemListeners();
171
- this.menuItems = void 0;
172
- }
173
- /**
174
- * Moves focus into the menu. If there is a child with the `autofocus` attribute, it will be focused.
175
- * Otherwise, the first focusable child will be focused.
176
- *
177
- * @public
178
- */
179
- focus() {
180
- const autoFocusElement = this.querySelector(
181
- '[autofocus]:not([slot="anchor"])'
182
- );
183
- if (autoFocusElement instanceof HTMLElement) {
184
- autoFocusElement.focus();
185
- } else {
186
- this.setFocus(0);
187
- }
188
- }
189
- /**
190
- * Collapses any expanded Menu Items.
191
- *
192
- * @public
193
- */
194
- collapseExpandedItem() {
195
- if (this.expandedItem !== null) {
196
- this.expandedItem.expanded = false;
197
- this.expandedItem = null;
198
- }
199
- }
200
- /**
201
- * @internal
202
- */
203
- handleMenuKeyDown(e) {
204
- if (e.defaultPrevented || this.menuItems === void 0) {
205
- return;
206
- }
207
- switch (e.key) {
208
- case keyCodes.keyArrowDown:
209
- this.setFocus(this.focusIndex + 1);
210
- return;
211
- case keyCodes.keyArrowUp:
212
- this.setFocus(this.focusIndex - 1);
213
- return;
214
- case keyCodes.keyEnd:
215
- this.setFocus(this.menuItems.length - 1);
216
- return;
217
- case keyCodes.keyHome:
218
- this.setFocus(0);
219
- return;
220
- default:
221
- return true;
222
- }
223
- }
224
- /**
225
- * get an array of valid DOM children
226
- */
227
- domChildren() {
228
- return Array.from(this.children).filter((child) => !child.hasAttribute("hidden")).filter((child) => !child.hasAttribute("slot"));
229
- }
230
- setFocus(focusIndex) {
231
- if (this.menuItems === void 0) {
232
- return;
233
- }
234
- if (focusIndex >= 0 && focusIndex < this.menuItems.length) {
235
- const child = this.menuItems[focusIndex];
236
- if (this.focusIndex > -1 && this.menuItems.length >= this.focusIndex - 1) {
237
- this.menuItems[this.focusIndex].setAttribute("tabindex", "-1");
238
- }
239
- this.focusIndex = focusIndex;
240
- child.setAttribute("tabindex", "0");
241
- child.focus();
242
- }
243
- }
244
- get #triggerBehaviour() {
245
- return this.trigger ?? "legacy";
246
- }
247
- openChanged(_, newValue) {
248
- if (newValue) {
249
- this._popupEl?.show().then(() => this.focus());
250
- }
251
- newValue ? this.$emit("open", void 0, { bubbles: false }) : this.$emit("close", void 0, { bubbles: false });
252
- if (this._anchorEl) {
253
- this.#updateAnchor(this._anchorEl);
254
- }
255
- }
256
- /**
257
- * @internal
258
- */
259
- _anchorElChanged(oldValue, newValue) {
260
- if (oldValue) this.#cleanupAnchor(oldValue);
261
- if (newValue) this.#setupAnchor(newValue);
262
- }
263
- #setupAnchor(a) {
264
- a.addEventListener("click", this.#onAnchorClick, true);
265
- a.addEventListener("focusout", this._onFocusout);
266
- a.setAttribute("aria-haspopup", "menu");
267
- this.#updateAnchor(a);
268
- }
269
- #updateAnchor(a) {
270
- a.setAttribute("aria-expanded", this.open.toString());
271
- }
272
- #cleanupAnchor(a) {
273
- a.removeEventListener("click", this.#onAnchorClick, true);
274
- a.removeEventListener("focusout", this._onFocusout);
275
- a.removeAttribute("aria-haspopup");
276
- a.removeAttribute("aria-expanded");
277
- }
278
- #onAnchorClick;
279
- /**
280
- * @internal
281
- */
282
- _onChange(e) {
283
- if (this.menuItems === void 0) {
284
- return;
285
- }
286
- const clickedOnNonCheckboxMenuItem = e.target instanceof HTMLElement && (e.target.role === "menuitem" || e.target.role === "menuitemradio");
287
- if (this.#triggerBehaviour === "auto" && clickedOnNonCheckboxMenuItem) {
288
- this.open = false;
289
- }
290
- const domChildren = this.domChildren();
291
- const changedMenuItem = e.target;
292
- const changeItemIndex = domChildren.indexOf(changedMenuItem);
293
- if (changeItemIndex === -1) {
294
- return;
295
- }
296
- if (changedMenuItem.role === "menuitemradio" && changedMenuItem.checked) {
297
- for (let i = changeItemIndex - 1; i >= 0; --i) {
298
- const item = domChildren[i];
299
- const role = item.getAttribute("role");
300
- if (role === MenuItemRole.menuitemradio) {
301
- item.checked = false;
302
- }
303
- if (role === "separator") {
304
- break;
305
- }
306
- }
307
- const maxIndex = domChildren.length - 1;
308
- for (let i = changeItemIndex + 1; i <= maxIndex; ++i) {
309
- const item = domChildren[i];
310
- const role = item.getAttribute("role");
311
- if (role === MenuItemRole.menuitemradio) {
312
- item.checked = false;
313
- }
314
- if (role === "separator") {
315
- break;
316
- }
317
- }
318
- }
319
- return true;
320
- }
321
- };
322
- __decorateClass$1([
323
- vividElement.observable
324
- ], _Menu.prototype, "items");
325
- __decorateClass$1([
326
- vividElement.attr({ mode: "fromView" })
327
- ], _Menu.prototype, "placement");
328
- __decorateClass$1([
329
- vividElement.attr
330
- ], _Menu.prototype, "trigger");
331
- __decorateClass$1([
332
- vividElement.attr({ mode: "boolean", attribute: "auto-dismiss" })
333
- ], _Menu.prototype, "autoDismiss");
334
- __decorateClass$1([
335
- vividElement.attr({ mode: "fromView", attribute: "position-strategy" })
336
- ], _Menu.prototype, "positionStrategy");
337
- __decorateClass$1([
338
- vividElement.attr({ mode: "boolean" })
339
- ], _Menu.prototype, "open");
340
- __decorateClass$1([
341
- vividElement.observable
342
- ], _Menu.prototype, "headerSlottedContent");
343
- __decorateClass$1([
344
- vividElement.observable
345
- ], _Menu.prototype, "actionItemsSlottedContent");
346
- let Menu = _Menu;
347
20
 
348
21
  var __defProp = Object.defineProperty;
349
22
  var __decorateClass = (decorators, target, key, kind) => {
@@ -360,23 +33,21 @@ class MenuItem extends hostSemantics.HostSemantics(affix.AffixIcon(vividElement.
360
33
  // eslint-disable-next-line @nrwl/nx/workspace/no-attribute-default-value
361
34
  this.role = MenuItemRole.menuitem;
362
35
  this.checked = false;
363
- this.hasSubmenu = false;
364
- this.currentDirection = direction.Direction.ltr;
365
36
  /**
366
37
  * @internal
367
38
  */
368
39
  this.handleMenuItemClick = (e) => {
369
- if (e.defaultPrevented || this.disabled) {
370
- return false;
40
+ if (this._isSyntheticClickEvent(e)) {
41
+ return true;
371
42
  }
372
43
  this.invoke();
373
- return false;
44
+ return Boolean(this._isPresentational);
374
45
  };
375
46
  /**
376
47
  * @internal
377
48
  */
378
49
  this.handleMouseOver = (_) => {
379
- if (this.disabled || !this.hasSubmenu || this.expanded) {
50
+ if (this.disabled || !this.submenu || this.expanded) {
380
51
  return false;
381
52
  }
382
53
  this.expanded = true;
@@ -393,30 +64,28 @@ class MenuItem extends hostSemantics.HostSemantics(affix.AffixIcon(vividElement.
393
64
  return false;
394
65
  };
395
66
  this.invoke = () => {
396
- if (this.disabled) {
67
+ if (this.disabled || this._isPresentational) {
397
68
  return;
398
69
  }
399
- switch (this.role) {
400
- case MenuItemRole.menuitemcheckbox:
70
+ switch (this.controlType) {
71
+ case "checkbox":
401
72
  this.checked = !this.checked;
402
73
  break;
403
- case MenuItemRole.menuitem:
404
- this.updateSubmenu();
405
- if (this.hasSubmenu) {
74
+ case "radio":
75
+ if (!this.checked) {
76
+ this.checked = true;
77
+ }
78
+ break;
79
+ default:
80
+ if (this.submenu) {
406
81
  this.expanded = true;
407
82
  } else {
408
83
  this.$emit("change");
409
84
  }
410
85
  break;
411
- case MenuItemRole.menuitemradio:
412
- if (!this.checked) {
413
- this.checked = true;
414
- }
415
- break;
416
86
  }
417
87
  };
418
88
  this.checkTrailing = false;
419
- this.#submenuArray = [];
420
89
  /**
421
90
  * @internal
422
91
  */
@@ -433,7 +102,7 @@ class MenuItem extends hostSemantics.HostSemantics(affix.AffixIcon(vividElement.
433
102
  }
434
103
  return false;
435
104
  case keyCodes.keyArrowRight:
436
- if (this.hasSubmenu) {
105
+ if (this.submenu) {
437
106
  this.expanded = true;
438
107
  this.#emitSyntheticClick();
439
108
  }
@@ -456,17 +125,29 @@ class MenuItem extends hostSemantics.HostSemantics(affix.AffixIcon(vividElement.
456
125
  */
457
126
  expandedChanged() {
458
127
  if (this.$fastController.isConnected) {
459
- if (this.submenu === void 0) {
460
- return;
461
- }
462
- if (this.expanded === false) {
128
+ if (this.submenu && !this.expanded) {
463
129
  this.submenu.collapseExpandedItem();
464
- } else {
465
- this.currentDirection = direction.getDirection(this);
466
130
  }
467
131
  this.$emit("expanded-change", this, { bubbles: false });
468
132
  }
469
133
  }
134
+ #ensureRoleMatchesPresentational() {
135
+ if (this._isPresentational) {
136
+ if (this.role === "menuitem") {
137
+ this.role = "presentation";
138
+ }
139
+ } else if (this.role === "presentation") {
140
+ this.role = MenuItemRole.menuitem;
141
+ }
142
+ }
143
+ /**
144
+ * @internal
145
+ */
146
+ _isPresentationalChanged() {
147
+ if (this.$fastController.isConnected) {
148
+ this.#ensureRoleMatchesPresentational();
149
+ }
150
+ }
470
151
  /**
471
152
  * @internal
472
153
  */
@@ -481,44 +162,41 @@ class MenuItem extends hostSemantics.HostSemantics(affix.AffixIcon(vividElement.
481
162
  connectedCallback() {
482
163
  super.connectedCallback();
483
164
  vividElement.DOM.queueUpdate(() => {
484
- this.updateSubmenu();
165
+ this._isPresentational = this._isPresentational ?? true;
166
+ this.#ensureRoleMatchesPresentational();
485
167
  });
486
- this.observer = new MutationObserver(this.updateSubmenu);
487
168
  }
488
169
  /**
489
170
  * @internal
490
171
  */
491
- disconnectedCallback() {
492
- super.disconnectedCallback();
493
- this.submenu = void 0;
494
- if (this.observer !== void 0) {
495
- this.observer.disconnect();
496
- this.observer = void 0;
172
+ slottedSubmenuChanged() {
173
+ if (this.submenu) {
174
+ this.submenu.anchor = this;
175
+ this.submenu.placement = "right-start";
176
+ this.submenu.collapseExpandedItem = () => this.#collapseExpandedItem();
497
177
  }
498
178
  }
499
- #submenuArray;
500
179
  /**
501
- *
502
- *
503
180
  * @internal
504
181
  */
505
- slottedSubmenuChanged(_oldValue, newValue) {
506
- this.#submenuArray = newValue;
507
- }
508
- updateSubmenu() {
509
- for (const submenu of this.#submenuArray) {
510
- this.submenu = submenu;
511
- this.submenu.anchor = this;
512
- this.submenu.placement = "right-start";
513
- this.submenu.collapseExpandedItem = () => this.#collapseExpandedItem();
182
+ get submenu() {
183
+ if (this.slottedSubmenu?.length) {
184
+ return this.slottedSubmenu[0];
185
+ } else {
186
+ return null;
514
187
  }
515
- this.hasSubmenu = this.submenu === void 0 ? false : true;
188
+ }
189
+ /**
190
+ * @internal
191
+ */
192
+ get hasSubmenu() {
193
+ return this.submenu !== null;
516
194
  }
517
195
  #collapseExpandedItem() {
518
196
  this.expanded = false;
519
197
  }
520
198
  #expandedChange() {
521
- if (this.hasSubmenu) {
199
+ if (this.submenu) {
522
200
  this.submenu.open = this.expanded;
523
201
  }
524
202
  }
@@ -547,18 +225,38 @@ __decorateClass([
547
225
  __decorateClass([
548
226
  vividElement.attr
549
227
  ], MenuItem.prototype, "role");
550
- __decorateClass([
551
- vividElement.attr({ mode: "boolean" })
552
- ], MenuItem.prototype, "checked");
553
228
  __decorateClass([
554
229
  vividElement.observable
555
- ], MenuItem.prototype, "hasSubmenu");
230
+ ], MenuItem.prototype, "_isPresentational");
556
231
  __decorateClass([
557
- vividElement.observable
558
- ], MenuItem.prototype, "currentDirection");
232
+ vividElement.replaces({
233
+ deprecatedPropertyName: "role",
234
+ fromDeprecated: (role) => {
235
+ switch (role) {
236
+ case "menuitemcheckbox":
237
+ return "checkbox";
238
+ case "menuitemradio":
239
+ return "radio";
240
+ default:
241
+ return void 0;
242
+ }
243
+ },
244
+ toDeprecated: (controlType) => {
245
+ switch (controlType) {
246
+ case "checkbox":
247
+ return "menuitemcheckbox";
248
+ case "radio":
249
+ return "menuitemradio";
250
+ default:
251
+ return "menuitem";
252
+ }
253
+ }
254
+ }),
255
+ vividElement.attr({ attribute: "control-type" })
256
+ ], MenuItem.prototype, "controlType");
559
257
  __decorateClass([
560
- vividElement.observable
561
- ], MenuItem.prototype, "submenu");
258
+ vividElement.attr({ mode: "boolean" })
259
+ ], MenuItem.prototype, "checked");
562
260
  __decorateClass([
563
261
  vividElement.attr
564
262
  ], MenuItem.prototype, "text");
@@ -584,19 +282,21 @@ __decorateClass([
584
282
  vividElement.observable
585
283
  ], MenuItem.prototype, "slottedSubmenu");
586
284
 
285
+ const menuName = "menu";
286
+
587
287
  const getIndicatorIcon = (x) => {
588
288
  if (x.checkedAppearance === "tick-only") {
589
289
  return x.checked ? "check-line" : "";
590
290
  }
591
- const iconType = x.role === MenuItemRole.menuitemcheckbox ? "checkbox" : "radio";
291
+ const iconType = x.controlType === "checkbox" ? "checkbox" : "radio";
592
292
  const iconStatus = x.checked ? "checked" : "unchecked";
593
293
  return `${iconType}-${iconStatus}-2-line`;
594
294
  };
595
- const getClasses$1 = ({
295
+ const getClasses = ({
596
296
  connotation,
597
297
  disabled,
598
298
  checked,
599
- role,
299
+ controlType,
600
300
  text: text2,
601
301
  textSecondary,
602
302
  icon,
@@ -606,27 +306,17 @@ const getClasses$1 = ({
606
306
  "base",
607
307
  [`connotation-${connotation}`, Boolean(connotation)],
608
308
  ["disabled", Boolean(disabled)],
609
- ["selected", role !== MenuItemRole.menuitem && Boolean(checked)],
610
- [
611
- "trailing",
612
- role !== MenuItemRole.menuitem && (checkTrailing || Boolean(icon))
613
- ],
614
- ["item-checkbox", role === MenuItemRole.menuitemcheckbox],
615
- ["item-radio", role === MenuItemRole.menuitemradio],
309
+ ["selected", Boolean(controlType && checked)],
310
+ ["trailing", Boolean(controlType && (checkTrailing || Boolean(icon)))],
311
+ ["item-checkbox", controlType === "checkbox"],
312
+ ["item-radio", controlType === "radio"],
616
313
  ["two-lines", Boolean(text2?.length) && Boolean(textSecondary?.length)],
617
314
  ["has-meta", Boolean(metaSlottedContent?.length)]
618
315
  );
619
- function handleClick(x, { event }) {
620
- if (x._isSyntheticClickEvent(event)) {
621
- return true;
622
- }
623
- x.handleMenuItemClick(event);
624
- return x.role === MenuItemRole.presentation;
625
- }
626
316
  function checkIndicator(context) {
627
317
  const iconTag = context.tagFor(definition.Icon);
628
318
  return vividElement.html`${when.when(
629
- (x) => x.role === MenuItemRole.menuitemcheckbox || x.role === MenuItemRole.menuitemradio,
319
+ (x) => Boolean(x.controlType),
630
320
  vividElement.html`<span class="action"><${iconTag} class="icon" name="${(x) => getIndicatorIcon(x)}"></${iconTag}></span>`
631
321
  )}`;
632
322
  }
@@ -653,16 +343,16 @@ const MenuItemTemplate = (context) => {
653
343
  ${hostSemantics.applyHostSemantics({
654
344
  role: MenuItemRole.menuitem,
655
345
  ariaHasPopup: (x) => x.hasSubmenu ? "menu" : void 0,
656
- ariaChecked: (x) => x.role !== MenuItemRole.menuitem ? x.checked : void 0,
346
+ ariaChecked: (x) => x.controlType ? x.checked : void 0,
657
347
  ariaDisabled: (x) => x.disabled,
658
348
  ariaExpanded: (x) => x.expanded
659
349
  })}
660
350
  @keydown="${(x, c) => x.handleMenuItemKeyDown(c.event)}"
661
- @click="${handleClick}"
351
+ @click="${(x, c) => x.handleMenuItemClick(c.event)}"
662
352
  @mouseover="${(x, c) => x.handleMouseOver(c.event)}"
663
353
  @mouseout="${(x, c) => x.handleMouseOut(c.event)}"
664
354
  >
665
- <div class="${getClasses$1}">
355
+ <div class="${getClasses}">
666
356
  <slot name="meta" ${slotted.slotted("metaSlottedContent")}></slot>
667
357
  ${checkIndicator(context)}
668
358
  ${when.when(
@@ -697,90 +387,14 @@ const menuItemDefinition = vividElement.defineVividComponent(
697
387
  MenuItem,
698
388
  MenuItemTemplate,
699
389
  [definition.iconDefinition],
700
- {
701
- styles: styles$1
702
- }
703
- );
704
- const registerMenuItem = vividElement.createRegisterFunction(menuItemDefinition);
705
-
706
- const styles = ":host{display:var(--_popup-display, inline)}:host([slotted-anchor]){--_popup-display: contents}.base{display:flex;overflow:hidden auto;box-sizing:border-box;flex-direction:column;gap:8px;inline-size:max-content;max-block-size:var(--menu-block-size, 408px);min-inline-size:var(--menu-min-inline-size);padding-block:8px}@media not all and (width >= 600px){.base{max-inline-size:var(--menu-max-inline-size, 300px)}}@media (width >= 600px){.base{max-inline-size:var(--menu-max-inline-size)}}::slotted(a){color:var(--vvd-color-canvas-text);text-decoration:none}::slotted(a[role=menuitem]:focus-visible){box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent;display:block}.header{padding-block-start:4px;padding-inline:12px}.hide-header .header{display:none}.body{display:flex;flex-direction:column;row-gap:1px}.hide-body .body{display:none}.action-items{display:flex;justify-content:flex-end;gap:8px;padding-block-end:4px;padding-inline:12px}.hide-actions .action-items{display:none}";
707
-
708
- const getClasses = ({
709
- headerSlottedContent,
710
- actionItemsSlottedContent,
711
- items
712
- }) => classNames.classNames(
713
- "base",
714
- ["hide-header", !headerSlottedContent?.length],
715
- ["hide-actions", !actionItemsSlottedContent?.length],
716
- ["hide-body", items && !items.length]
717
- );
718
- function handleEscapeKey(menu, event) {
719
- if (menu.open && index.handleEscapeKeyAndStopPropogation(event)) {
720
- menu.open = false;
721
- }
722
- return true;
723
- }
724
- const MenuTemplate = (context) => {
725
- const popupTag = context.tagFor(definition$1.Popup);
726
- const anchorSlotTemplate = anchored.anchorSlotTemplateFactory();
727
- function handlePopupEvents(x, e, state) {
728
- e.stopPropagation();
729
- x.open = state;
730
- }
731
- return vividElement.html`
732
- <template @change="${(x, c) => x._onChange(c.event)}"
733
- @focusout="${(x, c) => x._onFocusout(c.event)}">
734
- ${anchorSlotTemplate}
735
- <${popupTag}
736
- ${ref.ref("_popupEl")}
737
- :placement=${(x) => x.placement}
738
- :open=${(x) => x.open}
739
- :anchor=${(x) => x._anchorEl}
740
- :strategy="${(x) => x.positionStrategy}"
741
- @keydown="${(x, c) => handleEscapeKey(x, c.event)}"
742
- @vwc-popup:open="${(x, c) => handlePopupEvents(x, c.event, true)}"
743
- @vwc-popup:close="${(x, c) => handlePopupEvents(x, c.event, false)}"
744
- >
745
- <div class="${getClasses}">
746
- <div class="header">
747
- <slot name="header" ${slotted.slotted("headerSlottedContent")}></slot>
748
- </div>
749
- <div
750
- class="body"
751
- ${delegatesAria.delegateAria({
752
- role: "menu"
753
- })}
754
- @keydown="${(x, c) => x.handleMenuKeyDown(c.event)}"
755
- @focusout="${(x, c) => x.handleFocusOut(c.event)}"
756
- >
757
- <slot ${slotted.slotted("items")}></slot>
758
- </div>
759
- <footer class="action-items"><slot name="action-items" ${slotted.slotted(
760
- "actionItemsSlottedContent"
761
- )}></slot></footer>
762
- </div>
763
- </${popupTag}>
764
- </template>`;
765
- };
766
-
767
- const menuName = "menu";
768
- const menuDefinition = vividElement.defineVividComponent(
769
- menuName,
770
- Menu,
771
- MenuTemplate,
772
- [definition$1.popupDefinition, menuItemDefinition],
773
390
  {
774
391
  styles
775
392
  }
776
393
  );
777
- const registerMenu = vividElement.createRegisterFunction(menuDefinition);
394
+ const registerMenuItem = vividElement.createRegisterFunction(menuItemDefinition);
778
395
 
779
- exports.Menu = Menu;
780
396
  exports.MenuItem = MenuItem;
781
397
  exports.MenuItemRole = MenuItemRole;
782
- exports.menuDefinition = menuDefinition;
783
398
  exports.menuItemDefinition = menuItemDefinition;
784
399
  exports.menuName = menuName;
785
- exports.registerMenu = registerMenu;
786
400
  exports.registerMenuItem = registerMenuItem;