@vonage/vivid 4.24.0 → 4.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. package/custom-elements.json +12314 -4711
  2. package/elevation/index.cjs +1 -1
  3. package/elevation/index.js +1 -1
  4. package/index.cjs +112 -150
  5. package/index.js +37 -35
  6. package/lib/accordion-item/accordion-item.d.ts +6 -0
  7. package/lib/action-group/action-group.d.ts +6 -0
  8. package/lib/alert/alert.d.ts +20 -0
  9. package/lib/audio-player/audio-player.d.ts +6 -0
  10. package/lib/badge/badge.d.ts +9 -1
  11. package/lib/banner/banner.d.ts +25 -0
  12. package/lib/breadcrumb/breadcrumb.d.ts +6 -0
  13. package/lib/breadcrumb-item/breadcrumb-item.d.ts +63 -7
  14. package/lib/button/button.d.ts +732 -7
  15. package/lib/button/locale.d.ts +3 -0
  16. package/lib/calendar-event/calendar-event.d.ts +6 -0
  17. package/lib/card/card.d.ts +394 -2
  18. package/lib/card/card.template.d.ts +2 -1
  19. package/lib/checkbox/checkbox.d.ts +1822 -5
  20. package/lib/combobox/combobox.d.ts +1827 -20
  21. package/lib/data-grid/data-grid-cell.d.ts +339 -1
  22. package/lib/data-grid/locale.d.ts +5 -0
  23. package/lib/date-picker/date-picker.d.ts +1676 -207
  24. package/lib/date-range-picker/date-range-picker.d.ts +840 -107
  25. package/lib/date-time-picker/date-time-picker.d.ts +1678 -209
  26. package/lib/dial-pad/dial-pad.d.ts +8 -0
  27. package/lib/dialog/dialog.d.ts +12 -0
  28. package/lib/divider/divider.d.ts +6 -0
  29. package/lib/fab/fab.d.ts +6 -0
  30. package/lib/file-picker/file-picker.d.ts +1508 -30
  31. package/lib/header/header.d.ts +6 -0
  32. package/lib/icon/icon.d.ts +1 -0
  33. package/lib/icon/icon.template.d.ts +2 -1
  34. package/lib/menu/menu.d.ts +16 -7
  35. package/lib/menu/name.d.ts +1 -0
  36. package/lib/menu-item/menu-item.d.ts +14 -2
  37. package/lib/nav/nav.d.ts +6 -0
  38. package/lib/nav-disclosure/nav-disclosure.d.ts +13 -0
  39. package/lib/nav-item/nav-item.d.ts +405 -3
  40. package/lib/note/note.d.ts +6 -0
  41. package/lib/number-field/number-field.d.ts +1857 -36
  42. package/lib/option/option.d.ts +12 -0
  43. package/lib/progress/progress.d.ts +6 -0
  44. package/lib/progress-ring/progress-ring.d.ts +6 -0
  45. package/lib/radio/radio.d.ts +1137 -4
  46. package/lib/radio-group/radio-group.d.ts +20 -2
  47. package/lib/range-slider/range-slider.d.ts +752 -5
  48. package/lib/rich-text-editor/definition.d.ts +2 -2
  49. package/lib/rich-text-editor/facades/vivid-prose-mirror.facade.d.ts +3 -1
  50. package/lib/rich-text-editor/locale.d.ts +1 -0
  51. package/lib/rich-text-editor/menubar/menubar.d.ts +6 -0
  52. package/lib/rich-text-editor/rich-text-editor.d.ts +352 -2
  53. package/lib/searchable-select/option-tag.d.ts +6 -0
  54. package/lib/searchable-select/searchable-select.d.ts +1857 -36
  55. package/lib/select/select.d.ts +1843 -28
  56. package/lib/selectable-box/selectable-box.d.ts +6 -0
  57. package/lib/slider/slider.d.ts +384 -2
  58. package/lib/split-button/split-button.d.ts +18 -0
  59. package/lib/switch/switch.d.ts +386 -3
  60. package/lib/tab/tab.d.ts +18 -1
  61. package/lib/tab-panel/tab-panel.d.ts +6 -0
  62. package/lib/tag/tag.d.ts +12 -0
  63. package/lib/tag-group/tag-group.d.ts +6 -0
  64. package/lib/text-area/text-area.d.ts +2174 -19
  65. package/lib/text-field/text-field.d.ts +2195 -31
  66. package/lib/time-picker/time-picker.d.ts +839 -106
  67. package/lib/toggletip/toggletip.d.ts +10 -4
  68. package/lib/tooltip/tooltip.d.ts +10 -4
  69. package/lib/tree-item/tree-item.d.ts +12 -0
  70. package/lib/tree-view/tree-view.d.ts +6 -0
  71. package/lib/video-player/video-player.d.ts +6 -0
  72. package/lib/visually-hidden/definition.d.ts +4 -0
  73. package/lib/visually-hidden/visually-hidden.d.ts +3 -0
  74. package/lib/visually-hidden/visually-hidden.template.d.ts +3 -0
  75. package/locales/de-DE.cjs +33 -1
  76. package/locales/de-DE.js +33 -1
  77. package/locales/en-GB.cjs +33 -1
  78. package/locales/en-GB.js +33 -1
  79. package/locales/en-US.cjs +33 -1
  80. package/locales/en-US.js +33 -1
  81. package/locales/ja-JP.cjs +33 -1
  82. package/locales/ja-JP.js +33 -1
  83. package/locales/zh-CN.cjs +33 -1
  84. package/locales/zh-CN.js +33 -1
  85. package/menu/index.cjs +1 -1
  86. package/menu/index.js +1 -1
  87. package/nav/index.cjs +1 -1
  88. package/nav/index.js +1 -1
  89. package/nav-disclosure/index.cjs +1 -1
  90. package/nav-disclosure/index.js +1 -1
  91. package/nav-item/index.cjs +1 -1
  92. package/nav-item/index.js +1 -1
  93. package/note/index.cjs +1 -1
  94. package/note/index.js +1 -1
  95. package/number-field/index.cjs +1 -1
  96. package/number-field/index.js +1 -1
  97. package/option/index.cjs +1 -1
  98. package/option/index.js +1 -1
  99. package/package.json +1 -1
  100. package/pagination/index.cjs +1 -1
  101. package/pagination/index.js +1 -1
  102. package/popup/index.cjs +1 -1
  103. package/popup/index.js +1 -1
  104. package/progress/index.cjs +1 -1
  105. package/progress/index.js +1 -1
  106. package/progress-ring/index.cjs +1 -1
  107. package/progress-ring/index.js +1 -1
  108. package/radio/index.cjs +1 -1
  109. package/radio/index.js +1 -1
  110. package/radio-group/index.cjs +1 -1
  111. package/radio-group/index.js +1 -1
  112. package/range-slider/index.cjs +1 -1
  113. package/range-slider/index.js +1 -1
  114. package/rich-text-editor/index.cjs +1 -1
  115. package/rich-text-editor/index.js +1 -1
  116. package/searchable-select/index.cjs +1 -1
  117. package/searchable-select/index.js +1 -1
  118. package/select/index.cjs +1 -1
  119. package/select/index.js +1 -1
  120. package/selectable-box/index.cjs +1 -1
  121. package/selectable-box/index.js +1 -1
  122. package/shared/affix.cjs +13 -7
  123. package/shared/affix.js +13 -8
  124. package/shared/aria/delegates-aria.d.ts +6 -0
  125. package/shared/aria/host-semantics.d.ts +6 -0
  126. package/shared/breadcrumb-item.cjs +2 -5
  127. package/shared/breadcrumb-item.js +2 -5
  128. package/shared/button.cjs +13 -11
  129. package/shared/button.js +13 -11
  130. package/shared/calendar-picker.template.cjs +3 -3
  131. package/shared/calendar-picker.template.js +1 -1
  132. package/shared/char-count.cjs +92 -0
  133. package/shared/char-count.js +90 -0
  134. package/shared/definition.js +1 -1
  135. package/shared/definition10.js +1 -1
  136. package/shared/definition11.cjs +27 -44
  137. package/shared/definition11.js +28 -45
  138. package/shared/definition12.js +1 -1
  139. package/shared/definition13.js +1 -1
  140. package/shared/definition14.cjs +53 -22
  141. package/shared/definition14.js +54 -23
  142. package/shared/definition15.cjs +31 -36
  143. package/shared/definition15.js +30 -36
  144. package/shared/definition16.cjs +43 -63
  145. package/shared/definition16.js +42 -63
  146. package/shared/definition17.cjs +8 -4
  147. package/shared/definition17.js +8 -4
  148. package/shared/definition18.cjs +10 -14
  149. package/shared/definition18.js +9 -14
  150. package/shared/definition19.cjs +85 -100
  151. package/shared/definition19.js +75 -91
  152. package/shared/definition2.js +1 -1
  153. package/shared/definition20.cjs +15 -20
  154. package/shared/definition20.js +14 -20
  155. package/shared/definition21.cjs +22 -3
  156. package/shared/definition21.js +23 -4
  157. package/shared/definition22.cjs +4 -4
  158. package/shared/definition22.js +5 -5
  159. package/shared/definition23.cjs +5 -38
  160. package/shared/definition23.js +5 -37
  161. package/shared/definition24.cjs +2 -7
  162. package/shared/definition24.js +3 -8
  163. package/shared/definition25.js +1 -1
  164. package/shared/definition26.cjs +157 -171
  165. package/shared/definition26.js +156 -171
  166. package/shared/definition27.cjs +1 -1
  167. package/shared/definition27.js +2 -2
  168. package/shared/definition28.cjs +32 -17
  169. package/shared/definition28.js +33 -18
  170. package/shared/definition29.js +1 -1
  171. package/shared/definition3.js +1 -1
  172. package/shared/definition30.cjs +96 -482
  173. package/shared/definition30.js +99 -482
  174. package/shared/definition31.cjs +334 -57
  175. package/shared/definition31.js +333 -56
  176. package/shared/definition32.cjs +104 -19
  177. package/shared/definition32.js +105 -20
  178. package/shared/definition33.cjs +67 -15
  179. package/shared/definition33.js +66 -14
  180. package/shared/definition34.cjs +15 -50
  181. package/shared/definition34.js +14 -49
  182. package/shared/definition35.cjs +28 -397
  183. package/shared/definition35.js +27 -397
  184. package/shared/definition36.cjs +404 -54
  185. package/shared/definition36.js +404 -55
  186. package/shared/definition37.cjs +57 -234
  187. package/shared/definition37.js +57 -233
  188. package/shared/definition38.cjs +221 -66
  189. package/shared/definition38.js +220 -65
  190. package/shared/definition39.cjs +52 -44
  191. package/shared/definition39.js +51 -43
  192. package/shared/definition4.cjs +31 -24
  193. package/shared/definition4.js +33 -26
  194. package/shared/definition40.cjs +56 -266
  195. package/shared/definition40.js +55 -265
  196. package/shared/definition41.cjs +285 -142
  197. package/shared/definition41.js +285 -142
  198. package/shared/definition42.cjs +156 -564
  199. package/shared/definition42.js +156 -565
  200. package/shared/definition43.cjs +554 -14378
  201. package/shared/definition43.js +553 -14377
  202. package/shared/definition44.cjs +14418 -1155
  203. package/shared/definition44.js +14417 -1156
  204. package/shared/definition45.cjs +1049 -677
  205. package/shared/definition45.js +1050 -678
  206. package/shared/definition46.cjs +848 -113
  207. package/shared/definition46.js +847 -112
  208. package/shared/definition47.cjs +125 -90
  209. package/shared/definition47.js +124 -89
  210. package/shared/definition48.cjs +88 -455
  211. package/shared/definition48.js +87 -454
  212. package/shared/definition49.cjs +466 -109
  213. package/shared/definition49.js +466 -109
  214. package/shared/definition5.cjs +8 -7
  215. package/shared/definition5.js +6 -5
  216. package/shared/definition50.cjs +106 -106
  217. package/shared/definition50.js +105 -105
  218. package/shared/definition51.cjs +136 -15
  219. package/shared/definition51.js +135 -14
  220. package/shared/definition52.cjs +16 -115
  221. package/shared/definition52.js +15 -114
  222. package/shared/definition53.cjs +78 -412
  223. package/shared/definition53.js +77 -410
  224. package/shared/definition54.cjs +445 -23
  225. package/shared/definition54.js +443 -22
  226. package/shared/definition55.cjs +22 -136
  227. package/shared/definition55.js +21 -135
  228. package/shared/definition56.cjs +95 -291
  229. package/shared/definition56.js +95 -292
  230. package/shared/definition57.cjs +192 -480
  231. package/shared/definition57.js +190 -479
  232. package/shared/definition58.cjs +411 -24
  233. package/shared/definition58.js +410 -24
  234. package/shared/definition59.cjs +27 -144
  235. package/shared/definition59.js +27 -143
  236. package/shared/definition6.js +1 -1
  237. package/shared/definition60.cjs +83 -54
  238. package/shared/definition60.js +82 -53
  239. package/shared/definition61.cjs +78 -166
  240. package/shared/definition61.js +77 -164
  241. package/shared/definition62.cjs +143 -232
  242. package/shared/definition62.js +141 -231
  243. package/shared/definition63.cjs +234 -69417
  244. package/shared/definition63.js +233 -69416
  245. package/shared/definition64.cjs +69454 -28
  246. package/shared/definition64.js +69453 -27
  247. package/shared/definition65.cjs +28 -2168
  248. package/shared/definition65.js +27 -2166
  249. package/shared/definition66.cjs +27 -0
  250. package/shared/definition66.js +23 -0
  251. package/shared/definition67.cjs +2195 -0
  252. package/shared/definition67.js +2190 -0
  253. package/shared/definition7.cjs +11 -2
  254. package/shared/definition7.js +12 -3
  255. package/shared/definition8.cjs +24 -11
  256. package/shared/definition8.js +26 -13
  257. package/shared/definition9.cjs +1 -2
  258. package/shared/definition9.js +2 -3
  259. package/shared/delegates-aria.js +1 -1
  260. package/shared/deprecation/replaced-props.d.ts +20 -0
  261. package/shared/divider.cjs +41 -0
  262. package/shared/divider.js +38 -0
  263. package/shared/feedback/feedback-message.d.ts +345 -0
  264. package/shared/feedback/locale.d.ts +4 -0
  265. package/{lib/text-anchor/text-anchor.d.ts → shared/feedback/mixins.d.ts} +62 -39
  266. package/shared/form-associated.cjs +124 -100
  267. package/shared/form-associated.js +125 -101
  268. package/shared/form-element.cjs +84 -0
  269. package/shared/form-element.js +82 -0
  270. package/shared/foundation/button/button.d.ts +378 -2
  271. package/shared/foundation/form-associated/form-associated.d.ts +753 -49
  272. package/shared/foundation/listbox/listbox.d.ts +1 -1
  273. package/shared/foundation/vivid-element/vivid-element.d.ts +14 -0
  274. package/shared/host-semantics.js +1 -1
  275. package/shared/key-codes.js +1 -1
  276. package/shared/linkable.cjs +70 -0
  277. package/shared/linkable.js +68 -0
  278. package/shared/localization/Locale.d.ts +14 -0
  279. package/shared/mixins.cjs +306 -0
  280. package/shared/mixins.js +300 -0
  281. package/shared/patterns/affix.d.ts +16 -1
  282. package/shared/patterns/anchored.d.ts +20 -8
  283. package/shared/patterns/char-count/char-count.d.ts +351 -0
  284. package/shared/patterns/char-count/index.d.ts +1 -0
  285. package/shared/patterns/char-count/locale.d.ts +4 -0
  286. package/shared/patterns/form-elements/form-element.d.ts +744 -0
  287. package/shared/patterns/form-elements/index.d.ts +3 -1
  288. package/shared/patterns/form-elements/with-error-text.d.ts +1122 -0
  289. package/shared/patterns/form-elements/with-success-text.d.ts +341 -0
  290. package/shared/patterns/index.d.ts +2 -0
  291. package/shared/patterns/linkable.d.ts +394 -0
  292. package/shared/patterns/localized.d.ts +6 -0
  293. package/shared/patterns/trapped-focus.d.ts +6 -0
  294. package/shared/picker-field/mixins/calendar-picker.d.ts +420 -52
  295. package/shared/picker-field/mixins/calendar-picker.template.d.ts +420 -52
  296. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +6 -0
  297. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +843 -107
  298. package/shared/picker-field/mixins/single-date-picker.d.ts +1259 -155
  299. package/shared/picker-field/mixins/single-value-picker.d.ts +417 -49
  300. package/shared/picker-field/mixins/time-selection-picker.d.ts +842 -106
  301. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +839 -103
  302. package/shared/picker-field/picker-field.d.ts +1491 -15
  303. package/shared/picker-field.template.cjs +13 -22
  304. package/shared/picker-field.template.js +14 -23
  305. package/shared/repeat.js +1 -1
  306. package/shared/slider.template.cjs +1 -1
  307. package/shared/slider.template.js +1 -1
  308. package/shared/time-selection-picker.template.cjs +10 -15
  309. package/shared/time-selection-picker.template.js +10 -16
  310. package/shared/vivid-element.cjs +53 -4
  311. package/shared/vivid-element.js +53 -3
  312. package/shared/with-error-text.cjs +56 -0
  313. package/shared/with-error-text.js +54 -0
  314. package/shared/with-success-text.cjs +23 -0
  315. package/shared/with-success-text.js +21 -0
  316. package/side-drawer/index.cjs +1 -1
  317. package/side-drawer/index.js +1 -1
  318. package/slider/index.cjs +1 -1
  319. package/slider/index.js +1 -1
  320. package/split-button/index.cjs +1 -1
  321. package/split-button/index.js +1 -1
  322. package/styles/core/all.css +1 -1
  323. package/styles/core/theme.css +1 -1
  324. package/styles/core/typography.css +1 -1
  325. package/styles/tokens/theme-dark.css +4 -4
  326. package/styles/tokens/theme-light.css +4 -4
  327. package/styles/tokens/vivid-2-compat.css +1 -1
  328. package/switch/index.cjs +1 -1
  329. package/switch/index.js +1 -1
  330. package/tab/index.cjs +1 -1
  331. package/tab/index.js +1 -1
  332. package/tab-panel/index.cjs +1 -1
  333. package/tab-panel/index.js +1 -1
  334. package/tabs/index.cjs +1 -1
  335. package/tabs/index.js +1 -1
  336. package/tag/index.cjs +1 -1
  337. package/tag/index.js +1 -1
  338. package/tag-group/index.cjs +1 -1
  339. package/tag-group/index.js +1 -1
  340. package/text-area/index.cjs +1 -1
  341. package/text-area/index.js +1 -1
  342. package/text-field/index.cjs +1 -1
  343. package/text-field/index.js +1 -1
  344. package/time-picker/index.cjs +1 -1
  345. package/time-picker/index.js +1 -1
  346. package/toggletip/index.cjs +1 -1
  347. package/toggletip/index.js +1 -1
  348. package/tooltip/index.cjs +1 -1
  349. package/tooltip/index.js +1 -1
  350. package/tree-item/index.cjs +1 -1
  351. package/tree-item/index.js +1 -1
  352. package/tree-view/index.cjs +1 -1
  353. package/tree-view/index.js +1 -1
  354. package/video-player/index.cjs +1 -1
  355. package/video-player/index.js +1 -1
  356. package/visually-hidden/index.cjs +5 -0
  357. package/visually-hidden/index.js +3 -0
  358. package/vivid.api.json +744 -1490
  359. package/lib/checkbox/checkbox.form-associated.d.ts +0 -11
  360. package/lib/file-picker/file-picker.form-associated.d.ts +0 -11
  361. package/lib/number-field/number-field.form-associated.d.ts +0 -11
  362. package/lib/radio/radio.form-associated.d.ts +0 -13
  363. package/lib/range-slider/range-slider.form-associated.d.ts +0 -11
  364. package/lib/searchable-select/searchable-select.form-associated.d.ts +0 -11
  365. package/lib/select/select.form-associated.d.ts +0 -11
  366. package/lib/slider/slider.form-associated.d.ts +0 -11
  367. package/lib/switch/switch.form-associated.d.ts +0 -11
  368. package/lib/text-anchor/definition.d.ts +0 -2
  369. package/lib/text-anchor/text-anchor.template.d.ts +0 -3
  370. package/lib/text-area/text-area.form-associated.d.ts +0 -11
  371. package/lib/text-field/text-field.form-associated.d.ts +0 -11
  372. package/shared/anchor.cjs +0 -49
  373. package/shared/anchor.js +0 -47
  374. package/shared/apply-mixins.cjs +0 -23
  375. package/shared/apply-mixins.js +0 -21
  376. package/shared/applyMixinsWithObservables.cjs +0 -15
  377. package/shared/applyMixinsWithObservables.js +0 -13
  378. package/shared/direction.cjs +0 -17
  379. package/shared/direction.js +0 -15
  380. package/shared/form-elements.cjs +0 -209
  381. package/shared/form-elements.js +0 -202
  382. package/shared/foundation/anchor/anchor.d.ts +0 -11
  383. package/shared/foundation/utilities/apply-mixins.d.ts +0 -1
  384. package/shared/patterns/form-elements/form-elements.d.ts +0 -58
  385. package/shared/picker-field/picker-field.form-associated.d.ts +0 -11
  386. package/shared/text-anchor.cjs +0 -38
  387. package/shared/text-anchor.js +0 -36
  388. package/shared/text-anchor.template.cjs +0 -35
  389. package/shared/text-anchor.template.js +0 -33
  390. package/shared/utils/applyMixinsWithObservables.d.ts +0 -1
  391. package/text-anchor/index.cjs +0 -17
  392. package/text-anchor/index.js +0 -15
@@ -1,13 +1,15 @@
1
- import { D as DOM, V as VividElement, a as attr, o as observable, h as html, g as createRegisterFunction, i as defineVividComponent } from './vivid-element.js';
2
- import { T as TreeItem, i as isTreeItemElement, t as treeItemDefinition } from './definition61.js';
1
+ import { I as Icon, i as iconDefinition } from './definition28.js';
2
+ import { V as VividElement, a as attr, o as observable, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
3
+ import { b as AffixIcon, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
3
4
  import { H as HostSemantics, a as applyHostSemantics } from './host-semantics.js';
4
- import { k as keyEnter, e as keyArrowUp, f as keyArrowDown, i as keyArrowRight, h as keyArrowLeft, d as keyEnd, g as keyHome } from './key-codes.js';
5
5
  import { i as isHTMLElement } from './dom.js';
6
- import { r as ref } from './ref.js';
6
+ import { e as elements, s as slotted } from './slotted.js';
7
+ import { c as children } from './children.js';
7
8
  import { c as classNames } from './class-names.js';
8
- import { s as slotted } from './slotted.js';
9
+ import { w as when } from './when.js';
10
+ import { r as ref } from './ref.js';
9
11
 
10
- const styles = ".control{position:relative;display:flex;flex-direction:column;gap:4px}";
12
+ const styles = ":host(:focus-visible){outline:none}:host([disabled]){cursor:not-allowed}.control{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control: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}.control: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}.control:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.control:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary-increment);--_appearance-color-outline: transparent}.control{--_connotation-color-primary: var(--vvd-tree-item-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-tree-item-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-tree-item-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-faint: var(--vvd-tree-item-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-tree-item-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-tree-item-accent-firm, var(--vvd-color-canvas-text))}.control{position:relative;display:inline-flex;box-sizing:border-box;align-items:center;border-radius:8px;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);gap:12px;hyphens:auto;inline-size:100%;min-block-size:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)));padding-inline:16px;text-decoration:none;vertical-align:middle;word-break:break-word}@supports (user-select: none){.control{user-select:none}}.control:not(.disabled){cursor:pointer}.control.disabled{pointer-events:none}:host(:focus-visible) .control{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))}:host(:focus-visible) .control:not(.selected){--focus-stroke-gap-color: transparent}.control .text{font:var(--vvd-typography-base)}.expandCollapseButton{display:flex;align-items:center;border-radius:8px;font-size:20px}.expandCollapseButton .expandCollapseIcon{margin:4px}.expandCollapseButton:hover{background-color:var(--vvd-color-neutral-100)}.selected .expandCollapseButton:hover{background-color:var(--vvd-color-neutral-700)}.items{display:flex;flex-direction:column;gap:4px;margin-block-start:4px;padding-inline-start:48px}slot[name=icon]{font-size:20px;line-height:1}.control:not(.disabled,.selected) slot[name=icon]{color:var(--vvd-color-neutral-600)}";
11
13
 
12
14
  var __defProp = Object.defineProperty;
13
15
  var __decorateClass = (decorators, target, key, kind) => {
@@ -18,279 +20,187 @@ var __decorateClass = (decorators, target, key, kind) => {
18
20
  if (result) __defProp(target, key, result);
19
21
  return result;
20
22
  };
21
- function getDisplayedNodes(rootNode, selector) {
22
- if (isHTMLElement(rootNode)) {
23
- const nodes = Array.from(
24
- rootNode.querySelectorAll(selector)
25
- );
26
- const visibleNodes = nodes.filter((node) => {
27
- if (node.parentElement instanceof TreeItem) {
28
- if (node.parentElement.getAttribute("aria-expanded") === "true")
29
- return true;
30
- } else {
31
- return true;
32
- }
33
- return false;
34
- });
35
- return visibleNodes;
36
- }
37
- return [];
23
+ function isTreeItemElement(el) {
24
+ return isHTMLElement(el) && el.getAttribute("role") === "treeitem";
38
25
  }
39
- class TreeView extends HostSemantics(VividElement) {
26
+ class TreeItem extends HostSemantics(AffixIcon(VividElement)) {
40
27
  constructor() {
41
28
  super(...arguments);
29
+ this.expanded = false;
30
+ this.selected = false;
31
+ this.disabled = false;
32
+ this.focusable = false;
42
33
  /**
43
- * The tree item that is designated to be in the tab queue.
34
+ * Whether the tree is nested
44
35
  *
45
- * @internal
36
+ * @public
46
37
  */
47
- this.currentFocused = null;
38
+ this.isNestedItem = () => {
39
+ return isTreeItemElement(this.parentElement);
40
+ };
48
41
  /**
49
- * Handle focus events
42
+ * Handle expand button click
50
43
  *
51
44
  * @internal
52
45
  */
53
- this.handleFocus = (e) => {
54
- if (this.slottedTreeItems.length > 0) {
55
- if (e.target === this) {
56
- if (this.currentFocused !== null) {
57
- TreeItem.focusItem(this.currentFocused);
58
- }
59
- return;
60
- }
61
- if (this.contains(e.target)) {
62
- this.setAttribute("tabindex", "-1");
63
- this.currentFocused = e.target;
64
- }
46
+ this.handleExpandCollapseButtonClick = (e) => {
47
+ if (!this.disabled && !e.defaultPrevented) {
48
+ this.expanded = !this.expanded;
65
49
  }
66
50
  };
67
51
  /**
68
- * Handle blur events
52
+ * Handle focus events
69
53
  *
70
54
  * @internal
71
55
  */
72
- this.handleBlur = (e) => {
73
- if (e.target instanceof HTMLElement && (e.relatedTarget === null || !this.contains(e.relatedTarget))) {
74
- this.setAttribute("tabindex", "0");
75
- }
56
+ this.handleFocus = (_e) => {
57
+ this.setAttribute("tabindex", "0");
76
58
  };
77
59
  /**
78
- * KeyDown handler
79
- *
80
- * @internal
81
- */
82
- this.handleKeyDown = (e) => {
83
- if (this.slottedTreeItems.length < 1) {
84
- return true;
85
- }
86
- if (!e.defaultPrevented) {
87
- const treeItems = this.getVisibleNodes();
88
- switch (e.key) {
89
- case keyHome:
90
- if (treeItems.length) {
91
- TreeItem.focusItem(treeItems[0]);
92
- }
93
- return;
94
- case keyEnd:
95
- if (treeItems.length) {
96
- TreeItem.focusItem(treeItems[treeItems.length - 1]);
97
- }
98
- return;
99
- case keyArrowLeft:
100
- if (e.target && this.isFocusableElement(e.target)) {
101
- const item = e.target;
102
- if (item instanceof TreeItem && item.childItemLength() > 0 && item.expanded) {
103
- item.expanded = false;
104
- } else if (item instanceof TreeItem && item.parentElement instanceof TreeItem) {
105
- TreeItem.focusItem(item.parentElement);
106
- }
107
- }
108
- return false;
109
- case keyArrowRight:
110
- if (e.target && this.isFocusableElement(e.target)) {
111
- const item = e.target;
112
- if (item instanceof TreeItem && item.childItemLength() > 0 && !item.expanded) {
113
- item.expanded = true;
114
- } else if (item instanceof TreeItem && item.childItemLength() > 0) {
115
- this.focusNextNode(1, e.target);
116
- }
117
- }
118
- return;
119
- case keyArrowDown:
120
- if (e.target && this.isFocusableElement(e.target)) {
121
- this.focusNextNode(1, e.target);
122
- }
123
- return;
124
- case keyArrowUp:
125
- if (e.target && this.isFocusableElement(e.target)) {
126
- this.focusNextNode(-1, e.target);
127
- }
128
- return;
129
- case keyEnter:
130
- this.handleClick(e);
131
- return;
132
- }
133
- }
134
- return true;
135
- };
136
- /**
137
- * Handles the selected-changed events bubbling up
138
- * from child tree items
60
+ * Handle blur events
139
61
  *
140
- * @internal
141
- */
142
- this.handleSelectedChange = (e) => {
143
- if (!e.defaultPrevented) {
144
- if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) {
145
- return true;
146
- }
147
- const item = e.target;
148
- if (item.selected) {
149
- if (this.currentSelected && this.currentSelected !== item) {
150
- this.currentSelected.selected = false;
151
- }
152
- this.currentSelected = item;
153
- } else if (!item.selected && this.currentSelected === item) {
154
- this.currentSelected = null;
155
- }
156
- return;
157
- }
158
- };
159
- /**
160
- * Updates the tree view when slottedTreeItems changes
161
- */
162
- this.setItems = () => {
163
- const selectedItem = this.treeView.querySelector(
164
- "[aria-selected='true']"
165
- );
166
- this.currentSelected = selectedItem;
167
- if (this.currentFocused === null || !this.contains(this.currentFocused)) {
168
- this.currentFocused = this.getValidFocusableItem();
169
- }
170
- this.nested = this.checkForNestedItems();
171
- const treeItems = this.getVisibleNodes();
172
- treeItems.forEach((node) => {
173
- if (isTreeItemElement(node)) {
174
- node.nested = this.nested;
175
- }
176
- });
177
- };
178
- /**
179
- * check if the item is focusable
62
+ * @internal
180
63
  */
181
- this.isFocusableElement = (el) => {
182
- return isTreeItemElement(el);
183
- };
184
- this.isSelectedElement = (el) => {
185
- return el.selected;
64
+ this.handleBlur = (_e) => {
65
+ this.setAttribute("tabindex", "-1");
186
66
  };
187
67
  }
188
- slottedTreeItemsChanged() {
68
+ expandedChanged() {
189
69
  if (this.$fastController.isConnected) {
190
- this.setItems();
70
+ this.$emit("expanded-change", this);
191
71
  }
192
72
  }
193
- connectedCallback() {
194
- super.connectedCallback();
195
- this.setAttribute("tabindex", "0");
196
- DOM.queueUpdate(() => {
197
- this.setItems();
198
- });
199
- }
200
- /**
201
- * Handles click events bubbling up
202
- *
203
- * @internal
204
- */
205
- handleClick(e) {
206
- if (!e.defaultPrevented) {
207
- if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) {
208
- return true;
209
- }
210
- const item = e.target;
211
- if (!item.disabled) {
212
- item.selected = !item.selected;
213
- }
214
- return;
73
+ selectedChanged() {
74
+ if (this.$fastController.isConnected) {
75
+ this.$emit("selected-change", this);
215
76
  }
216
77
  }
217
- /**
218
- * Move focus to a tree item based on its offset from the provided item
219
- */
220
- focusNextNode(delta, item) {
221
- const visibleNodes = this.getVisibleNodes();
222
- if (visibleNodes) {
223
- const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta];
224
- if (isHTMLElement(focusItem)) {
225
- TreeItem.focusItem(focusItem);
226
- }
78
+ itemsChanged() {
79
+ if (this.$fastController.isConnected) {
80
+ this.items.forEach((node) => {
81
+ if (isTreeItemElement(node)) {
82
+ node.nested = true;
83
+ }
84
+ });
227
85
  }
228
86
  }
229
87
  /**
230
- * checks if there are any nested tree items
88
+ * Places document focus on a tree item
89
+ *
90
+ * @public
91
+ * @param el - the element to focus
231
92
  */
232
- getValidFocusableItem() {
233
- const treeItems = this.getVisibleNodes();
234
- let focusIndex = treeItems.findIndex(this.isSelectedElement);
235
- if (focusIndex === -1) {
236
- focusIndex = treeItems.findIndex(this.isFocusableElement);
237
- }
238
- if (focusIndex !== -1) {
239
- return treeItems[focusIndex];
240
- }
241
- return null;
93
+ static focusItem(el) {
94
+ el.focusable = true;
95
+ el.focus();
242
96
  }
243
97
  /**
244
- * checks if there are any nested tree items
98
+ * Gets number of children
99
+ *
100
+ * @internal
245
101
  */
246
- checkForNestedItems() {
247
- return this.slottedTreeItems.some((node) => {
248
- return isTreeItemElement(node) && node.querySelector("[role='treeitem']");
249
- });
250
- }
251
- getVisibleNodes() {
252
- return getDisplayedNodes(this, "[role='treeitem']");
102
+ childItemLength() {
103
+ const treeChildren = this.childItems.filter(
104
+ (item) => {
105
+ return isTreeItemElement(item);
106
+ }
107
+ );
108
+ return treeChildren.length;
253
109
  }
254
110
  }
111
+ __decorateClass([
112
+ attr
113
+ ], TreeItem.prototype, "text");
114
+ __decorateClass([
115
+ attr({ mode: "boolean" })
116
+ ], TreeItem.prototype, "expanded");
117
+ __decorateClass([
118
+ attr({
119
+ mode: "boolean"
120
+ })
121
+ ], TreeItem.prototype, "selected");
122
+ __decorateClass([
123
+ attr({ mode: "boolean" })
124
+ ], TreeItem.prototype, "disabled");
125
+ __decorateClass([
126
+ observable
127
+ ], TreeItem.prototype, "focusable");
255
128
  // @ts-expect-error Type is incorrectly non-optional
256
129
  __decorateClass([
257
- attr({ attribute: "render-collapsed-nodes" })
258
- ], TreeView.prototype, "renderCollapsedNodes");
130
+ observable
131
+ ], TreeItem.prototype, "childItems");
132
+ __decorateClass([
133
+ observable
134
+ ], TreeItem.prototype, "items");
259
135
  // @ts-expect-error Type is incorrectly non-optional
260
136
  __decorateClass([
261
137
  observable
262
- ], TreeView.prototype, "currentSelected");
138
+ ], TreeItem.prototype, "nested");
263
139
  // @ts-expect-error Type is incorrectly non-optional
264
140
  __decorateClass([
265
141
  observable
266
- ], TreeView.prototype, "slottedTreeItems");
142
+ ], TreeItem.prototype, "renderCollapsedChildren");
267
143
 
268
- const getClasses = (_) => classNames("control");
269
- const TreeViewTemplate = html` <template
270
- ${ref("treeView")}
271
- ${applyHostSemantics({
272
- role: "tree"
273
- })}
274
- @keydown="${(x, c) => x.handleKeyDown(c.event)}"
275
- @focusin="${(x, c) => x.handleFocus(c.event)}"
276
- @focusout="${(x, c) => x.handleBlur(c.event)}"
277
- @click="${(x, c) => x.handleClick(c.event)}"
278
- @selected-change="${(x, c) => x.handleSelectedChange(c.event)}"
279
- >
280
- <div class="${getClasses}">
281
- <slot ${slotted("slottedTreeItems")}></slot>
282
- </div>
283
- </template>`;
144
+ const getClasses = ({ disabled, selected }) => classNames(
145
+ "control",
146
+ ["disabled", disabled],
147
+ ["selected", Boolean(selected)]
148
+ );
149
+ const expandCollapseButton = (context) => {
150
+ const iconTag = context.tagFor(Icon);
151
+ return html`
152
+ <div aria-hidden="true"
153
+ class="expandCollapseButton"
154
+ @click="${(x, c) => x.handleExpandCollapseButtonClick(c.event)}"
155
+ ${ref("expandCollapseButton")}
156
+ >
157
+ <${iconTag} class="expandCollapseIcon" name="${(x) => x.expanded ? "chevron-down-line" : "chevron-right-line"}"></${iconTag}>
158
+ </div>`;
159
+ };
160
+ const TreeItemTemplate = (context) => {
161
+ const affixIconTemplate = affixIconTemplateFactory(context);
162
+ return html` <template
163
+ slot="${(x) => x.isNestedItem() ? "item" : void 0}"
164
+ tabindex="-1"
165
+ ${applyHostSemantics({
166
+ role: "treeitem",
167
+ ariaExpanded: (x) => x.childItems && x.childItems.length > 0 ? x.expanded : void 0,
168
+ ariaSelected: (x) => x.selected,
169
+ ariaDisabled: (x) => x.disabled
170
+ })}
171
+ @focusin="${(x, c) => x.handleFocus(c.event)}"
172
+ @focusout="${(x, c) => x.handleBlur(c.event)}"
173
+ ${children({
174
+ property: "childItems",
175
+ filter: elements(context.tagFor(TreeItem))
176
+ })}
177
+ >
178
+ <div class="${getClasses}">
179
+ ${when(
180
+ (x) => x.childItems && x.childItems.length > 0,
181
+ expandCollapseButton(context)
182
+ )}
183
+ ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
184
+ ${(x) => x.text}
185
+ </div>
186
+ ${when(
187
+ (x) => x.childItems && x.childItems.length > 0 && x.expanded,
188
+ html` <div role="group" class="items">
189
+ <slot name="item" ${slotted("items")}></slot>
190
+ </div>`
191
+ )}
192
+ </template>`;
193
+ };
284
194
 
285
- const treeViewDefinition = defineVividComponent(
286
- "tree-view",
287
- TreeView,
288
- TreeViewTemplate,
289
- [treeItemDefinition],
195
+ const treeItemDefinition = defineVividComponent(
196
+ "tree-item",
197
+ TreeItem,
198
+ TreeItemTemplate,
199
+ [iconDefinition],
290
200
  {
291
201
  styles
292
202
  }
293
203
  );
294
- const registerTreeView = createRegisterFunction(treeViewDefinition);
204
+ const registerTreeItem = createRegisterFunction(treeItemDefinition);
295
205
 
296
- export { TreeView as T, registerTreeView as r, treeViewDefinition as t };
206
+ export { TreeItem as T, isTreeItemElement as i, registerTreeItem as r, treeItemDefinition as t };