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