@vonage/vivid 4.24.0 → 4.26.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 (402) hide show
  1. package/custom-elements.json +23176 -14463
  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 +7 -1
  7. package/lib/action-group/action-group.d.ts +7 -1
  8. package/lib/alert/alert.d.ts +22 -2
  9. package/lib/audio-player/audio-player.d.ts +7 -1
  10. package/lib/badge/badge.d.ts +10 -2
  11. package/lib/banner/banner.d.ts +28 -3
  12. package/lib/breadcrumb/breadcrumb.d.ts +7 -1
  13. package/lib/breadcrumb-item/breadcrumb-item.d.ts +64 -8
  14. package/lib/button/button.d.ts +733 -8
  15. package/lib/button/locale.d.ts +3 -0
  16. package/lib/calendar/calendar.d.ts +2 -0
  17. package/lib/calendar-event/calendar-event.d.ts +7 -1
  18. package/lib/card/card.d.ts +394 -2
  19. package/lib/card/card.template.d.ts +2 -1
  20. package/lib/checkbox/checkbox.d.ts +1830 -13
  21. package/lib/combobox/combobox.d.ts +1827 -20
  22. package/lib/data-grid/data-grid-cell.d.ts +342 -2
  23. package/lib/data-grid/data-grid-row.d.ts +1 -0
  24. package/lib/data-grid/data-grid.d.ts +1 -1
  25. package/lib/data-grid/locale.d.ts +5 -0
  26. package/lib/date-picker/date-picker.d.ts +1676 -207
  27. package/lib/date-range-picker/date-range-picker.d.ts +840 -107
  28. package/lib/date-time-picker/date-time-picker.d.ts +1678 -209
  29. package/lib/dial-pad/dial-pad.d.ts +9 -1
  30. package/lib/dialog/dialog.d.ts +15 -2
  31. package/lib/divider/divider.d.ts +7 -1
  32. package/lib/fab/fab.d.ts +7 -1
  33. package/lib/file-picker/file-picker.d.ts +1509 -31
  34. package/lib/header/header.d.ts +7 -1
  35. package/lib/icon/icon.d.ts +1 -0
  36. package/lib/icon/icon.template.d.ts +2 -1
  37. package/lib/menu/menu.d.ts +17 -8
  38. package/lib/menu/name.d.ts +1 -0
  39. package/lib/menu-item/menu-item.d.ts +16 -4
  40. package/lib/nav/nav.d.ts +7 -1
  41. package/lib/nav-disclosure/nav-disclosure.d.ts +15 -2
  42. package/lib/nav-item/nav-item.d.ts +406 -4
  43. package/lib/note/note.d.ts +7 -1
  44. package/lib/number-field/locale.d.ts +3 -2
  45. package/lib/number-field/number-field.d.ts +1859 -38
  46. package/lib/option/option.d.ts +14 -2
  47. package/lib/pagination/locale.d.ts +5 -0
  48. package/lib/pagination/pagination.d.ts +341 -2
  49. package/lib/popup/popup.d.ts +1 -0
  50. package/lib/progress/progress.d.ts +7 -1
  51. package/lib/progress-ring/progress-ring.d.ts +7 -1
  52. package/lib/radio/radio.d.ts +1137 -4
  53. package/lib/radio-group/radio-group.d.ts +21 -3
  54. package/lib/range-slider/range-slider.d.ts +765 -18
  55. package/lib/rich-text-editor/definition.d.ts +2 -2
  56. package/lib/rich-text-editor/facades/vivid-prose-mirror.facade.d.ts +3 -1
  57. package/lib/rich-text-editor/locale.d.ts +1 -0
  58. package/lib/rich-text-editor/menubar/menubar.d.ts +7 -1
  59. package/lib/rich-text-editor/rich-text-editor.d.ts +352 -2
  60. package/lib/searchable-select/option-tag.d.ts +7 -1
  61. package/lib/searchable-select/searchable-select.d.ts +1859 -38
  62. package/lib/select/select.d.ts +1844 -29
  63. package/lib/selectable-box/selectable-box.d.ts +7 -1
  64. package/lib/slider/slider.d.ts +386 -4
  65. package/lib/split-button/split-button.d.ts +21 -3
  66. package/lib/switch/switch.d.ts +387 -4
  67. package/lib/tab/tab.d.ts +21 -4
  68. package/lib/tab-panel/tab-panel.d.ts +7 -1
  69. package/lib/tag/tag.d.ts +14 -2
  70. package/lib/tag-group/tag-group.d.ts +7 -1
  71. package/lib/text-area/text-area.d.ts +2174 -19
  72. package/lib/text-field/text-field.d.ts +2197 -33
  73. package/lib/time-picker/time-picker.d.ts +839 -106
  74. package/lib/toggletip/toggletip.d.ts +10 -4
  75. package/lib/tooltip/tooltip.d.ts +10 -4
  76. package/lib/tree-item/tree-item.d.ts +14 -2
  77. package/lib/tree-view/tree-view.d.ts +7 -1
  78. package/lib/video-player/video-player.d.ts +7 -1
  79. package/lib/visually-hidden/definition.d.ts +4 -0
  80. package/lib/visually-hidden/visually-hidden.d.ts +3 -0
  81. package/lib/visually-hidden/visually-hidden.template.d.ts +3 -0
  82. package/locales/de-DE.cjs +54 -4
  83. package/locales/de-DE.js +54 -4
  84. package/locales/en-GB.cjs +54 -4
  85. package/locales/en-GB.js +54 -4
  86. package/locales/en-US.cjs +54 -4
  87. package/locales/en-US.js +54 -4
  88. package/locales/ja-JP.cjs +54 -4
  89. package/locales/ja-JP.js +54 -4
  90. package/locales/zh-CN.cjs +54 -4
  91. package/locales/zh-CN.js +54 -4
  92. package/menu/index.cjs +1 -1
  93. package/menu/index.js +1 -1
  94. package/nav/index.cjs +1 -1
  95. package/nav/index.js +1 -1
  96. package/nav-disclosure/index.cjs +1 -1
  97. package/nav-disclosure/index.js +1 -1
  98. package/nav-item/index.cjs +1 -1
  99. package/nav-item/index.js +1 -1
  100. package/note/index.cjs +1 -1
  101. package/note/index.js +1 -1
  102. package/number-field/index.cjs +1 -1
  103. package/number-field/index.js +1 -1
  104. package/option/index.cjs +1 -1
  105. package/option/index.js +1 -1
  106. package/package.json +1 -1
  107. package/pagination/index.cjs +1 -1
  108. package/pagination/index.js +1 -1
  109. package/popup/index.cjs +1 -1
  110. package/popup/index.js +1 -1
  111. package/progress/index.cjs +1 -1
  112. package/progress/index.js +1 -1
  113. package/progress-ring/index.cjs +1 -1
  114. package/progress-ring/index.js +1 -1
  115. package/radio/index.cjs +1 -1
  116. package/radio/index.js +1 -1
  117. package/radio-group/index.cjs +1 -1
  118. package/radio-group/index.js +1 -1
  119. package/range-slider/index.cjs +1 -1
  120. package/range-slider/index.js +1 -1
  121. package/rich-text-editor/index.cjs +1 -1
  122. package/rich-text-editor/index.js +1 -1
  123. package/searchable-select/index.cjs +1 -1
  124. package/searchable-select/index.js +1 -1
  125. package/select/index.cjs +1 -1
  126. package/select/index.js +1 -1
  127. package/selectable-box/index.cjs +1 -1
  128. package/selectable-box/index.js +1 -1
  129. package/shared/affix.cjs +13 -7
  130. package/shared/affix.js +13 -8
  131. package/shared/aria/delegates-aria.d.ts +7 -1
  132. package/shared/aria/host-semantics.d.ts +7 -1
  133. package/shared/breadcrumb-item.cjs +2 -5
  134. package/shared/breadcrumb-item.js +2 -5
  135. package/shared/button.cjs +13 -11
  136. package/shared/button.js +13 -11
  137. package/shared/calendar-picker.template.cjs +3 -3
  138. package/shared/calendar-picker.template.js +1 -1
  139. package/shared/char-count.cjs +92 -0
  140. package/shared/char-count.js +90 -0
  141. package/shared/definition.cjs +19 -3
  142. package/shared/definition.js +20 -4
  143. package/shared/definition10.js +1 -1
  144. package/shared/definition11.cjs +27 -44
  145. package/shared/definition11.js +28 -45
  146. package/shared/definition12.js +1 -1
  147. package/shared/definition13.cjs +25 -0
  148. package/shared/definition13.js +26 -1
  149. package/shared/definition14.cjs +53 -22
  150. package/shared/definition14.js +54 -23
  151. package/shared/definition15.cjs +32 -37
  152. package/shared/definition15.js +31 -37
  153. package/shared/definition16.cjs +44 -64
  154. package/shared/definition16.js +43 -64
  155. package/shared/definition17.cjs +608 -524
  156. package/shared/definition17.js +604 -520
  157. package/shared/definition18.cjs +10 -14
  158. package/shared/definition18.js +9 -14
  159. package/shared/definition19.cjs +85 -100
  160. package/shared/definition19.js +75 -91
  161. package/shared/definition2.js +1 -1
  162. package/shared/definition20.cjs +15 -20
  163. package/shared/definition20.js +14 -20
  164. package/shared/definition21.cjs +24 -5
  165. package/shared/definition21.js +25 -6
  166. package/shared/definition22.cjs +12 -6
  167. package/shared/definition22.js +13 -7
  168. package/shared/definition23.cjs +5 -38
  169. package/shared/definition23.js +5 -37
  170. package/shared/definition24.cjs +2 -7
  171. package/shared/definition24.js +3 -8
  172. package/shared/definition25.js +1 -1
  173. package/shared/definition26.cjs +157 -171
  174. package/shared/definition26.js +156 -171
  175. package/shared/definition27.cjs +1 -1
  176. package/shared/definition27.js +2 -2
  177. package/shared/definition28.cjs +33 -18
  178. package/shared/definition28.js +34 -19
  179. package/shared/definition29.js +1 -1
  180. package/shared/definition3.cjs +1 -1
  181. package/shared/definition3.js +2 -2
  182. package/shared/definition30.cjs +96 -482
  183. package/shared/definition30.js +99 -482
  184. package/shared/definition31.cjs +334 -57
  185. package/shared/definition31.js +333 -56
  186. package/shared/definition32.cjs +104 -19
  187. package/shared/definition32.js +105 -20
  188. package/shared/definition33.cjs +67 -15
  189. package/shared/definition33.js +66 -14
  190. package/shared/definition34.cjs +15 -50
  191. package/shared/definition34.js +14 -49
  192. package/shared/definition35.cjs +28 -397
  193. package/shared/definition35.js +27 -397
  194. package/shared/definition36.cjs +415 -54
  195. package/shared/definition36.js +415 -55
  196. package/shared/definition37.cjs +57 -234
  197. package/shared/definition37.js +57 -233
  198. package/shared/definition38.cjs +228 -66
  199. package/shared/definition38.js +227 -65
  200. package/shared/definition39.cjs +52 -44
  201. package/shared/definition39.js +51 -43
  202. package/shared/definition4.cjs +31 -24
  203. package/shared/definition4.js +33 -26
  204. package/shared/definition40.cjs +56 -266
  205. package/shared/definition40.js +55 -265
  206. package/shared/definition41.cjs +285 -142
  207. package/shared/definition41.js +285 -142
  208. package/shared/definition42.cjs +156 -564
  209. package/shared/definition42.js +156 -565
  210. package/shared/definition43.cjs +554 -14378
  211. package/shared/definition43.js +553 -14377
  212. package/shared/definition44.cjs +14418 -1155
  213. package/shared/definition44.js +14417 -1156
  214. package/shared/definition45.cjs +1049 -677
  215. package/shared/definition45.js +1050 -678
  216. package/shared/definition46.cjs +848 -113
  217. package/shared/definition46.js +847 -112
  218. package/shared/definition47.cjs +125 -90
  219. package/shared/definition47.js +124 -89
  220. package/shared/definition48.cjs +88 -455
  221. package/shared/definition48.js +87 -454
  222. package/shared/definition49.cjs +466 -109
  223. package/shared/definition49.js +466 -109
  224. package/shared/definition5.cjs +8 -7
  225. package/shared/definition5.js +6 -5
  226. package/shared/definition50.cjs +106 -106
  227. package/shared/definition50.js +105 -105
  228. package/shared/definition51.cjs +136 -15
  229. package/shared/definition51.js +135 -14
  230. package/shared/definition52.cjs +16 -115
  231. package/shared/definition52.js +15 -114
  232. package/shared/definition53.cjs +78 -412
  233. package/shared/definition53.js +77 -410
  234. package/shared/definition54.cjs +445 -23
  235. package/shared/definition54.js +443 -22
  236. package/shared/definition55.cjs +22 -136
  237. package/shared/definition55.js +21 -135
  238. package/shared/definition56.cjs +95 -291
  239. package/shared/definition56.js +95 -292
  240. package/shared/definition57.cjs +192 -480
  241. package/shared/definition57.js +190 -479
  242. package/shared/definition58.cjs +411 -24
  243. package/shared/definition58.js +410 -24
  244. package/shared/definition59.cjs +27 -144
  245. package/shared/definition59.js +27 -143
  246. package/shared/definition6.js +1 -1
  247. package/shared/definition60.cjs +83 -54
  248. package/shared/definition60.js +82 -53
  249. package/shared/definition61.cjs +78 -166
  250. package/shared/definition61.js +77 -164
  251. package/shared/definition62.cjs +143 -232
  252. package/shared/definition62.js +141 -231
  253. package/shared/definition63.cjs +234 -69417
  254. package/shared/definition63.js +233 -69416
  255. package/shared/definition64.cjs +69454 -28
  256. package/shared/definition64.js +69453 -27
  257. package/shared/definition65.cjs +28 -2168
  258. package/shared/definition65.js +27 -2166
  259. package/shared/definition66.cjs +27 -0
  260. package/shared/definition66.js +23 -0
  261. package/shared/definition67.cjs +2203 -0
  262. package/shared/definition67.js +2198 -0
  263. package/shared/definition7.cjs +11 -2
  264. package/shared/definition7.js +12 -3
  265. package/shared/definition8.cjs +24 -11
  266. package/shared/definition8.js +26 -13
  267. package/shared/definition9.cjs +1 -2
  268. package/shared/definition9.js +2 -3
  269. package/shared/delegates-aria.js +1 -1
  270. package/shared/deprecation/replaced-props.d.ts +20 -0
  271. package/shared/divider.cjs +41 -0
  272. package/shared/divider.js +38 -0
  273. package/shared/feedback/feedback-message.d.ts +345 -0
  274. package/shared/feedback/locale.d.ts +4 -0
  275. package/{lib/text-anchor/text-anchor.d.ts → shared/feedback/mixins.d.ts} +64 -41
  276. package/shared/form-associated.cjs +124 -100
  277. package/shared/form-associated.js +125 -101
  278. package/shared/form-element.cjs +84 -0
  279. package/shared/form-element.js +82 -0
  280. package/shared/foundation/button/button.d.ts +379 -3
  281. package/shared/foundation/form-associated/form-associated.d.ts +753 -49
  282. package/shared/foundation/listbox/listbox.d.ts +1 -1
  283. package/shared/foundation/vivid-element/vivid-element.d.ts +16 -0
  284. package/shared/host-semantics.js +1 -1
  285. package/shared/key-codes.js +1 -1
  286. package/shared/linkable.cjs +70 -0
  287. package/shared/linkable.js +68 -0
  288. package/shared/localization/Locale.d.ts +16 -0
  289. package/shared/mixins.cjs +309 -0
  290. package/shared/mixins.js +303 -0
  291. package/shared/patterns/affix.d.ts +18 -3
  292. package/shared/patterns/anchored.d.ts +20 -8
  293. package/shared/patterns/char-count/char-count.d.ts +351 -0
  294. package/shared/patterns/char-count/index.d.ts +1 -0
  295. package/shared/patterns/char-count/locale.d.ts +4 -0
  296. package/shared/patterns/form-elements/form-element.d.ts +744 -0
  297. package/shared/patterns/form-elements/index.d.ts +3 -1
  298. package/shared/patterns/form-elements/with-error-text.d.ts +1122 -0
  299. package/shared/patterns/form-elements/with-success-text.d.ts +341 -0
  300. package/shared/patterns/index.d.ts +2 -0
  301. package/shared/patterns/linkable.d.ts +394 -0
  302. package/shared/patterns/localized.d.ts +7 -1
  303. package/shared/patterns/trapped-focus.d.ts +7 -1
  304. package/shared/picker-field/mixins/calendar-picker.d.ts +420 -52
  305. package/shared/picker-field/mixins/calendar-picker.template.d.ts +420 -52
  306. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +7 -1
  307. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +843 -107
  308. package/shared/picker-field/mixins/single-date-picker.d.ts +1259 -155
  309. package/shared/picker-field/mixins/single-value-picker.d.ts +417 -49
  310. package/shared/picker-field/mixins/time-selection-picker.d.ts +842 -106
  311. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +839 -103
  312. package/shared/picker-field/picker-field.d.ts +1492 -16
  313. package/shared/picker-field.template.cjs +26 -35
  314. package/shared/picker-field.template.js +27 -36
  315. package/shared/repeat.js +1 -1
  316. package/shared/slider.template.cjs +1 -1
  317. package/shared/slider.template.js +1 -1
  318. package/shared/time-selection-picker.template.cjs +10 -15
  319. package/shared/time-selection-picker.template.js +10 -16
  320. package/shared/vivid-element.cjs +63 -4
  321. package/shared/vivid-element.js +63 -3
  322. package/shared/with-error-text.cjs +56 -0
  323. package/shared/with-error-text.js +54 -0
  324. package/shared/with-success-text.cjs +23 -0
  325. package/shared/with-success-text.js +21 -0
  326. package/side-drawer/index.cjs +1 -1
  327. package/side-drawer/index.js +1 -1
  328. package/slider/index.cjs +1 -1
  329. package/slider/index.js +1 -1
  330. package/split-button/index.cjs +1 -1
  331. package/split-button/index.js +1 -1
  332. package/styles/core/all.css +1 -1
  333. package/styles/core/theme.css +1 -1
  334. package/styles/core/typography.css +1 -1
  335. package/styles/tokens/theme-dark.css +4 -4
  336. package/styles/tokens/theme-light.css +4 -4
  337. package/styles/tokens/vivid-2-compat.css +1 -1
  338. package/switch/index.cjs +1 -1
  339. package/switch/index.js +1 -1
  340. package/tab/index.cjs +1 -1
  341. package/tab/index.js +1 -1
  342. package/tab-panel/index.cjs +1 -1
  343. package/tab-panel/index.js +1 -1
  344. package/tabs/index.cjs +1 -1
  345. package/tabs/index.js +1 -1
  346. package/tag/index.cjs +1 -1
  347. package/tag/index.js +1 -1
  348. package/tag-group/index.cjs +1 -1
  349. package/tag-group/index.js +1 -1
  350. package/text-area/index.cjs +1 -1
  351. package/text-area/index.js +1 -1
  352. package/text-field/index.cjs +1 -1
  353. package/text-field/index.js +1 -1
  354. package/time-picker/index.cjs +1 -1
  355. package/time-picker/index.js +1 -1
  356. package/toggletip/index.cjs +1 -1
  357. package/toggletip/index.js +1 -1
  358. package/tooltip/index.cjs +1 -1
  359. package/tooltip/index.js +1 -1
  360. package/tree-item/index.cjs +1 -1
  361. package/tree-item/index.js +1 -1
  362. package/tree-view/index.cjs +1 -1
  363. package/tree-view/index.js +1 -1
  364. package/video-player/index.cjs +1 -1
  365. package/video-player/index.js +1 -1
  366. package/visually-hidden/index.cjs +5 -0
  367. package/visually-hidden/index.js +3 -0
  368. package/vivid.api.json +845 -1503
  369. package/lib/checkbox/checkbox.form-associated.d.ts +0 -11
  370. package/lib/file-picker/file-picker.form-associated.d.ts +0 -11
  371. package/lib/number-field/number-field.form-associated.d.ts +0 -11
  372. package/lib/radio/radio.form-associated.d.ts +0 -13
  373. package/lib/range-slider/range-slider.form-associated.d.ts +0 -11
  374. package/lib/searchable-select/searchable-select.form-associated.d.ts +0 -11
  375. package/lib/select/select.form-associated.d.ts +0 -11
  376. package/lib/slider/slider.form-associated.d.ts +0 -11
  377. package/lib/switch/switch.form-associated.d.ts +0 -11
  378. package/lib/text-anchor/definition.d.ts +0 -2
  379. package/lib/text-anchor/text-anchor.template.d.ts +0 -3
  380. package/lib/text-area/text-area.form-associated.d.ts +0 -11
  381. package/lib/text-field/text-field.form-associated.d.ts +0 -11
  382. package/shared/anchor.cjs +0 -49
  383. package/shared/anchor.js +0 -47
  384. package/shared/apply-mixins.cjs +0 -23
  385. package/shared/apply-mixins.js +0 -21
  386. package/shared/applyMixinsWithObservables.cjs +0 -15
  387. package/shared/applyMixinsWithObservables.js +0 -13
  388. package/shared/direction.cjs +0 -17
  389. package/shared/direction.js +0 -15
  390. package/shared/form-elements.cjs +0 -209
  391. package/shared/form-elements.js +0 -202
  392. package/shared/foundation/anchor/anchor.d.ts +0 -11
  393. package/shared/foundation/utilities/apply-mixins.d.ts +0 -1
  394. package/shared/patterns/form-elements/form-elements.d.ts +0 -58
  395. package/shared/picker-field/picker-field.form-associated.d.ts +0 -11
  396. package/shared/text-anchor.cjs +0 -38
  397. package/shared/text-anchor.js +0 -36
  398. package/shared/text-anchor.template.cjs +0 -35
  399. package/shared/text-anchor.template.js +0 -33
  400. package/shared/utils/applyMixinsWithObservables.d.ts +0 -1
  401. package/text-anchor/index.cjs +0 -17
  402. 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;