@vonage/vivid 4.17.0 → 4.18.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 (363) hide show
  1. package/custom-elements.json +3903 -3860
  2. package/date-time-picker/index.cjs +5 -0
  3. package/date-time-picker/index.js +3 -0
  4. package/dial-pad/index.cjs +1 -1
  5. package/dial-pad/index.js +1 -1
  6. package/dialog/index.cjs +1 -1
  7. package/dialog/index.js +1 -1
  8. package/divider/index.cjs +1 -1
  9. package/divider/index.js +1 -1
  10. package/elevation/index.cjs +1 -1
  11. package/elevation/index.js +1 -1
  12. package/empty-state/index.cjs +1 -1
  13. package/empty-state/index.js +1 -1
  14. package/fab/index.cjs +1 -1
  15. package/fab/index.js +1 -1
  16. package/file-picker/index.cjs +1 -1
  17. package/file-picker/index.js +1 -1
  18. package/header/index.cjs +1 -1
  19. package/header/index.js +1 -1
  20. package/icon/index.cjs +1 -1
  21. package/icon/index.js +1 -1
  22. package/index.cjs +136 -133
  23. package/index.js +45 -44
  24. package/layout/index.cjs +1 -1
  25. package/layout/index.js +1 -1
  26. package/lib/action-group/action-group.d.ts +449 -3
  27. package/lib/banner/banner.d.ts +449 -3
  28. package/lib/breadcrumb-item/breadcrumb-item.d.ts +449 -1
  29. package/lib/checkbox/checkbox.d.ts +449 -4
  30. package/lib/components.d.ts +1 -0
  31. package/lib/date-picker/date-picker.d.ts +2182 -4
  32. package/lib/date-picker/date-picker.template.d.ts +2 -0
  33. package/lib/date-range-picker/date-range-picker.d.ts +1110 -4
  34. package/lib/date-range-picker/date-range-picker.template.d.ts +2 -0
  35. package/lib/date-time-picker/date-time-picker.d.ts +2175 -0
  36. package/lib/date-time-picker/date-time-picker.template.d.ts +2 -0
  37. package/lib/date-time-picker/definition.d.ts +1 -0
  38. package/lib/date-time-picker/locale.d.ts +9 -0
  39. package/lib/dialog/dialog.d.ts +449 -2
  40. package/lib/divider/divider.d.ts +448 -1
  41. package/lib/menu/menu.d.ts +446 -1
  42. package/lib/nav-disclosure/nav-disclosure.d.ts +449 -2
  43. package/lib/number-field/number-field.d.ts +450 -3
  44. package/lib/option/option.d.ts +1 -11
  45. package/lib/progress/progress.d.ts +449 -2
  46. package/lib/progress-ring/progress-ring.d.ts +449 -2
  47. package/lib/rich-text-editor/facades/vivid-prose-mirror.facade.d.ts +1 -0
  48. package/lib/rich-text-editor/rich-text-editor.d.ts +7 -4
  49. package/lib/select/select.d.ts +1 -5
  50. package/lib/selectable-box/selectable-box.d.ts +449 -2
  51. package/lib/slider/slider.d.ts +449 -3
  52. package/lib/split-button/split-button.d.ts +449 -3
  53. package/lib/switch/switch.d.ts +449 -2
  54. package/lib/tag-group/tag-group.d.ts +449 -2
  55. package/lib/text-anchor/text-anchor.d.ts +449 -1
  56. package/lib/text-area/text-area.d.ts +450 -3
  57. package/lib/text-field/text-field.d.ts +450 -7
  58. package/lib/time-picker/locale.d.ts +0 -2
  59. package/lib/time-picker/time-picker.d.ts +1053 -9
  60. package/lib/time-picker/time-picker.template.d.ts +2 -1
  61. package/locales/de-DE.cjs +29 -5
  62. package/locales/de-DE.js +29 -5
  63. package/locales/en-GB.cjs +29 -5
  64. package/locales/en-GB.js +29 -5
  65. package/locales/en-US.cjs +29 -5
  66. package/locales/en-US.js +29 -5
  67. package/locales/ja-JP.cjs +29 -5
  68. package/locales/ja-JP.js +29 -5
  69. package/locales/zh-CN.cjs +29 -5
  70. package/locales/zh-CN.js +29 -5
  71. package/menu/index.cjs +1 -1
  72. package/menu/index.js +1 -1
  73. package/menu-item/index.cjs +1 -1
  74. package/menu-item/index.js +1 -1
  75. package/nav/index.cjs +1 -1
  76. package/nav/index.js +1 -1
  77. package/nav-disclosure/index.cjs +1 -1
  78. package/nav-disclosure/index.js +1 -1
  79. package/nav-item/index.cjs +1 -1
  80. package/nav-item/index.js +1 -1
  81. package/note/index.cjs +1 -1
  82. package/note/index.js +1 -1
  83. package/number-field/index.cjs +1 -1
  84. package/number-field/index.js +1 -1
  85. package/option/index.cjs +1 -1
  86. package/option/index.js +1 -1
  87. package/package.json +1 -1
  88. package/pagination/index.cjs +1 -1
  89. package/pagination/index.js +1 -1
  90. package/popup/index.cjs +1 -1
  91. package/popup/index.js +1 -1
  92. package/progress/index.cjs +1 -1
  93. package/progress/index.js +1 -1
  94. package/progress-ring/index.cjs +1 -1
  95. package/progress-ring/index.js +1 -1
  96. package/radio/index.cjs +1 -1
  97. package/radio/index.js +1 -1
  98. package/radio-group/index.cjs +1 -1
  99. package/radio-group/index.js +1 -1
  100. package/range-slider/index.cjs +1 -1
  101. package/range-slider/index.js +1 -1
  102. package/rich-text-editor/index.cjs +1 -1
  103. package/rich-text-editor/index.js +1 -1
  104. package/searchable-select/index.cjs +1 -1
  105. package/searchable-select/index.js +1 -1
  106. package/select/index.cjs +1 -1
  107. package/select/index.js +1 -1
  108. package/selectable-box/index.cjs +1 -1
  109. package/selectable-box/index.js +1 -1
  110. package/shared/Reflector.cjs +71 -0
  111. package/shared/Reflector.js +69 -0
  112. package/shared/affix.cjs +1 -1
  113. package/shared/affix.js +1 -1
  114. package/shared/anchor.cjs +0 -10
  115. package/shared/anchor.js +0 -10
  116. package/shared/aria/delegates-aria.d.ts +454 -0
  117. package/shared/base-progress.js +1 -1
  118. package/shared/breadcrumb-item.cjs +2 -1
  119. package/shared/breadcrumb-item.js +2 -1
  120. package/shared/button.cjs +2 -13
  121. package/shared/button.js +2 -13
  122. package/shared/{presentationDate.cjs → calendar-picker.template.cjs} +730 -900
  123. package/shared/{presentationDate.js → calendar-picker.template.js} +672 -845
  124. package/shared/datetime/dateTimeStr.d.ts +6 -0
  125. package/shared/datetime/presentationDate.d.ts +4 -0
  126. package/shared/{date-picker/calendar → datetime}/presentationDateRange.d.ts +3 -3
  127. package/shared/datetime/presentationDateTime.d.ts +4 -0
  128. package/{lib/time-picker/time → shared/datetime}/time.d.ts +1 -0
  129. package/shared/definition.cjs +1 -1
  130. package/shared/definition.js +1 -1
  131. package/shared/definition11.cjs +8 -11
  132. package/shared/definition11.js +8 -11
  133. package/shared/definition14.cjs +2 -2
  134. package/shared/definition14.js +2 -2
  135. package/shared/definition15.cjs +3 -10
  136. package/shared/definition15.js +3 -10
  137. package/shared/definition16.cjs +29 -33
  138. package/shared/definition16.js +29 -33
  139. package/shared/definition17.cjs +1 -1
  140. package/shared/definition17.js +1 -1
  141. package/shared/definition18.cjs +56 -91
  142. package/shared/definition18.js +56 -91
  143. package/shared/definition19.cjs +68 -32
  144. package/shared/definition19.js +58 -22
  145. package/shared/definition20.cjs +253 -220
  146. package/shared/definition20.js +254 -220
  147. package/shared/definition21.cjs +200 -286
  148. package/shared/definition21.js +198 -284
  149. package/shared/definition22.cjs +302 -31
  150. package/shared/definition22.js +301 -30
  151. package/shared/definition23.cjs +37 -58
  152. package/shared/definition23.js +36 -57
  153. package/shared/definition24.cjs +50 -70
  154. package/shared/definition24.js +49 -69
  155. package/shared/definition25.cjs +75 -2475
  156. package/shared/definition25.js +74 -2475
  157. package/shared/definition26.cjs +2480 -50
  158. package/shared/definition26.js +2479 -48
  159. package/shared/definition27.cjs +53 -271
  160. package/shared/definition27.js +52 -269
  161. package/shared/definition28.cjs +271 -48
  162. package/shared/definition28.js +269 -47
  163. package/shared/definition29.cjs +37 -764
  164. package/shared/definition29.js +36 -758
  165. package/shared/definition3.cjs +2 -9
  166. package/shared/definition3.js +2 -9
  167. package/shared/definition30.cjs +739 -57
  168. package/shared/definition30.js +733 -56
  169. package/shared/definition31.cjs +93 -22
  170. package/shared/definition31.js +92 -21
  171. package/shared/definition32.cjs +28 -10
  172. package/shared/definition32.js +27 -9
  173. package/shared/definition33.cjs +10 -52
  174. package/shared/definition33.js +9 -51
  175. package/shared/definition34.cjs +30 -411
  176. package/shared/definition34.js +30 -412
  177. package/shared/definition35.cjs +422 -52
  178. package/shared/definition35.js +423 -53
  179. package/shared/definition36.cjs +53 -216
  180. package/shared/definition36.js +53 -215
  181. package/shared/definition37.cjs +201 -71
  182. package/shared/definition37.js +200 -70
  183. package/shared/definition38.cjs +53 -48
  184. package/shared/definition38.js +51 -46
  185. package/shared/definition39.cjs +57 -263
  186. package/shared/definition39.js +56 -262
  187. package/shared/definition4.cjs +2 -2
  188. package/shared/definition4.js +2 -2
  189. package/shared/definition40.cjs +220 -148
  190. package/shared/definition40.js +220 -148
  191. package/shared/definition41.cjs +143 -567
  192. package/shared/definition41.js +143 -568
  193. package/shared/definition42.cjs +596 -12573
  194. package/shared/definition42.js +596 -12573
  195. package/shared/definition43.cjs +13489 -1058
  196. package/shared/definition43.js +13489 -1059
  197. package/shared/definition44.cjs +936 -698
  198. package/shared/definition44.js +937 -698
  199. package/shared/definition45.cjs +850 -105
  200. package/shared/definition45.js +850 -104
  201. package/shared/definition46.cjs +110 -90
  202. package/shared/definition46.js +108 -88
  203. package/shared/definition47.cjs +88 -464
  204. package/shared/definition47.js +87 -463
  205. package/shared/definition48.cjs +457 -111
  206. package/shared/definition48.js +456 -110
  207. package/shared/definition49.cjs +103 -109
  208. package/shared/definition49.js +102 -108
  209. package/shared/definition5.cjs +3 -3
  210. package/shared/definition5.js +3 -3
  211. package/shared/definition50.cjs +136 -14
  212. package/shared/definition50.js +135 -13
  213. package/shared/definition51.cjs +16 -115
  214. package/shared/definition51.js +15 -114
  215. package/shared/definition52.cjs +79 -486
  216. package/shared/definition52.js +78 -485
  217. package/shared/definition53.cjs +503 -24
  218. package/shared/definition53.js +502 -23
  219. package/shared/definition54.cjs +23 -137
  220. package/shared/definition54.js +22 -136
  221. package/shared/definition55.cjs +96 -241
  222. package/shared/definition55.js +95 -241
  223. package/shared/definition56.cjs +261 -61
  224. package/shared/definition56.js +260 -60
  225. package/shared/definition57.cjs +419 -788
  226. package/shared/definition57.js +420 -789
  227. package/shared/definition58.cjs +27 -144
  228. package/shared/definition58.js +27 -143
  229. package/shared/definition59.cjs +83 -54
  230. package/shared/definition59.js +82 -53
  231. package/shared/definition6.cjs +1 -1
  232. package/shared/definition6.js +1 -1
  233. package/shared/definition60.cjs +80 -165
  234. package/shared/definition60.js +79 -163
  235. package/shared/definition61.cjs +143 -230
  236. package/shared/definition61.js +141 -229
  237. package/shared/definition62.cjs +233 -69344
  238. package/shared/definition62.js +232 -69343
  239. package/shared/definition63.cjs +69381 -28
  240. package/shared/definition63.js +69379 -26
  241. package/shared/definition64.cjs +28 -2168
  242. package/shared/definition64.js +27 -2166
  243. package/shared/definition65.cjs +2195 -0
  244. package/shared/definition65.js +2190 -0
  245. package/shared/definition7.cjs +1 -1
  246. package/shared/definition7.js +1 -1
  247. package/shared/definition8.cjs +3 -9
  248. package/shared/definition8.js +3 -9
  249. package/shared/definition9.cjs +1 -1
  250. package/shared/definition9.js +1 -1
  251. package/shared/delegates-aria.cjs +69 -0
  252. package/shared/delegates-aria.js +67 -0
  253. package/shared/form-associated.js +1 -1
  254. package/shared/form-elements.cjs +1 -1
  255. package/shared/form-elements.js +1 -1
  256. package/shared/foundation/anchor/anchor.d.ts +0 -8
  257. package/shared/foundation/button/button.d.ts +449 -7
  258. package/shared/foundation/listbox/listbox.d.ts +0 -9
  259. package/shared/listbox.cjs +4 -30
  260. package/shared/listbox.js +4 -30
  261. package/shared/localization/Locale.d.ts +6 -2
  262. package/shared/option.cjs +1 -38
  263. package/shared/option.js +1 -38
  264. package/shared/picker-field/locale.d.ts +4 -0
  265. package/shared/picker-field/mixins/calendar-picker.d.ts +558 -0
  266. package/shared/{date-picker/locale.d.ts → picker-field/mixins/calendar-picker.locale.d.ts} +1 -3
  267. package/shared/picker-field/mixins/calendar-picker.template.d.ts +555 -0
  268. package/shared/picker-field/mixins/calendar-segments/calendarGrid.d.ts +17 -0
  269. package/shared/{date-picker/calendar → picker-field/mixins/calendar-segments}/monthPickerGrid.d.ts +3 -3
  270. package/{lib/time-picker → shared/picker-field/mixins}/inline-time-picker/columns.d.ts +1 -1
  271. package/{lib/time-picker → shared/picker-field/mixins}/inline-time-picker/inline-time-picker.d.ts +2 -2
  272. package/{lib/time-picker/time/picker.d.ts → shared/picker-field/mixins/inline-time-picker/picker-option.d.ts} +1 -1
  273. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +1110 -0
  274. package/shared/picker-field/mixins/single-date-picker.d.ts +1626 -0
  275. package/shared/picker-field/mixins/single-value-picker.d.ts +518 -0
  276. package/shared/picker-field/mixins/time-selection-picker.d.ts +1053 -0
  277. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +1050 -0
  278. package/shared/picker-field/picker-field.d.ts +11 -0
  279. package/shared/picker-field/picker-field.form-associated.d.ts +11 -0
  280. package/shared/picker-field/picker-field.template.d.ts +7 -0
  281. package/shared/picker-field.template.cjs +315 -0
  282. package/shared/picker-field.template.js +310 -0
  283. package/shared/single-date-picker.cjs +46 -0
  284. package/shared/single-date-picker.js +44 -0
  285. package/shared/single-value-picker.cjs +77 -0
  286. package/shared/single-value-picker.js +75 -0
  287. package/shared/slider.template.cjs +3 -3
  288. package/shared/slider.template.js +3 -3
  289. package/shared/text-anchor.cjs +2 -1
  290. package/shared/text-anchor.js +2 -1
  291. package/shared/text-anchor.template.cjs +3 -5
  292. package/shared/text-anchor.template.js +3 -5
  293. package/shared/text-field.cjs +2 -555
  294. package/shared/text-field.js +2 -554
  295. package/shared/time-selection-picker.template.cjs +776 -0
  296. package/shared/time-selection-picker.template.js +767 -0
  297. package/shared/vivid-element.cjs +1 -1
  298. package/shared/vivid-element.js +1 -1
  299. package/side-drawer/index.cjs +1 -1
  300. package/side-drawer/index.js +1 -1
  301. package/slider/index.cjs +1 -1
  302. package/slider/index.js +1 -1
  303. package/split-button/index.cjs +1 -1
  304. package/split-button/index.js +1 -1
  305. package/styles/core/all.css +1 -1
  306. package/styles/core/theme.css +1 -1
  307. package/styles/core/typography.css +1 -1
  308. package/styles/tokens/theme-dark.css +4 -4
  309. package/styles/tokens/theme-light.css +4 -4
  310. package/styles/tokens/vivid-2-compat.css +1 -1
  311. package/switch/index.cjs +1 -1
  312. package/switch/index.js +1 -1
  313. package/tab/index.cjs +1 -1
  314. package/tab/index.js +1 -1
  315. package/tab-panel/index.cjs +1 -1
  316. package/tab-panel/index.js +1 -1
  317. package/tabs/index.cjs +1 -1
  318. package/tabs/index.js +1 -1
  319. package/tag/index.cjs +1 -1
  320. package/tag/index.js +1 -1
  321. package/tag-group/index.cjs +1 -1
  322. package/tag-group/index.js +1 -1
  323. package/text-anchor/index.cjs +1 -1
  324. package/text-anchor/index.js +1 -1
  325. package/text-area/index.cjs +1 -1
  326. package/text-area/index.js +1 -1
  327. package/text-field/index.cjs +1 -1
  328. package/text-field/index.js +1 -1
  329. package/time-picker/index.cjs +1 -1
  330. package/time-picker/index.js +1 -1
  331. package/toggletip/index.cjs +1 -1
  332. package/toggletip/index.js +1 -1
  333. package/tooltip/index.cjs +1 -1
  334. package/tooltip/index.js +1 -1
  335. package/tree-item/index.cjs +1 -1
  336. package/tree-item/index.js +1 -1
  337. package/tree-view/index.cjs +1 -1
  338. package/tree-view/index.js +1 -1
  339. package/video-player/index.cjs +1 -1
  340. package/video-player/index.js +1 -1
  341. package/vivid.api.json +105 -1152
  342. package/lib/time-picker/time-picker.form-associated.d.ts +0 -11
  343. package/shared/aria-global.cjs +0 -93
  344. package/shared/aria-global.js +0 -91
  345. package/shared/date-picker/calendar/calendarGrid.d.ts +0 -17
  346. package/shared/date-picker/calendar/presentationDate.d.ts +0 -4
  347. package/shared/date-picker/date-picker-base.d.ts +0 -21
  348. package/shared/date-picker/date-picker-base.form-associated.d.ts +0 -11
  349. package/shared/date-picker/date-picker-base.template.d.ts +0 -3
  350. package/shared/foundation/patterns/aria-global.d.ts +0 -21
  351. package/shared/foundation/patterns/index.d.ts +0 -1
  352. package/shared/text-field2.cjs +0 -5
  353. package/shared/text-field2.js +0 -3
  354. package/shared/trapped-focus.cjs +0 -35
  355. package/shared/trapped-focus.js +0 -33
  356. /package/shared/{date-picker/calendar → datetime}/dateRange.d.ts +0 -0
  357. /package/shared/{date-picker/calendar → datetime}/dateStr.d.ts +0 -0
  358. /package/shared/{date-picker/calendar → datetime}/month.d.ts +0 -0
  359. /package/{lib/time-picker/time → shared/datetime}/presentationTime.d.ts +0 -0
  360. /package/shared/{date-picker/calendar → datetime}/year.d.ts +0 -0
  361. /package/shared/{date-picker/calendar → picker-field/mixins/calendar-segments}/segment.d.ts +0 -0
  362. /package/{lib/time-picker → shared/picker-field/mixins}/inline-time-picker/definition.d.ts +0 -0
  363. /package/{lib/time-picker → shared/picker-field/mixins}/inline-time-picker/inline-time-picker.template.d.ts +0 -0
@@ -1,12 +1,15 @@
1
- import { V as VividElement, D as DOM, a as attr, o as observable, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
2
- import { T as TreeItem, i as isTreeItemElement, t as treeItemDefinition } from './definition60.js';
3
- 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';
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 { a as applyMixins } from './apply-mixins.js';
4
+ import { b as AffixIcon, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
4
5
  import { i as isHTMLElement } from './dom.js';
5
- 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';
6
8
  import { c as classNames } from './class-names.js';
7
- import { s as slotted } from './slotted.js';
9
+ import { w as when } from './when.js';
10
+ import { r as ref } from './ref.js';
8
11
 
9
- 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:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - 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)}";
10
13
 
11
14
  var __defProp = Object.defineProperty;
12
15
  var __decorateClass = (decorators, target, key, kind) => {
@@ -17,277 +20,186 @@ var __decorateClass = (decorators, target, key, kind) => {
17
20
  if (result) __defProp(target, key, result);
18
21
  return result;
19
22
  };
20
- function getDisplayedNodes(rootNode, selector) {
21
- if (isHTMLElement(rootNode)) {
22
- const nodes = Array.from(
23
- rootNode.querySelectorAll(selector)
24
- );
25
- const visibleNodes = nodes.filter((node) => {
26
- if (node.parentElement instanceof TreeItem) {
27
- if (node.parentElement.getAttribute("aria-expanded") === "true")
28
- return true;
29
- } else {
30
- return true;
31
- }
32
- return false;
33
- });
34
- return visibleNodes;
35
- }
36
- return [];
23
+ function isTreeItemElement(el) {
24
+ return isHTMLElement(el) && el.getAttribute("role") === "treeitem";
37
25
  }
38
- class TreeView extends VividElement {
26
+ class TreeItem extends VividElement {
39
27
  constructor() {
40
28
  super(...arguments);
29
+ this.expanded = false;
30
+ this.selected = false;
31
+ this.disabled = false;
32
+ this.focusable = false;
41
33
  /**
42
- * The tree item that is designated to be in the tab queue.
34
+ * Whether the tree is nested
43
35
  *
44
- * @internal
36
+ * @public
45
37
  */
46
- this.currentFocused = null;
38
+ this.isNestedItem = () => {
39
+ return isTreeItemElement(this.parentElement);
40
+ };
47
41
  /**
48
- * Handle focus events
42
+ * Handle expand button click
49
43
  *
50
44
  * @internal
51
45
  */
52
- this.handleFocus = (e) => {
53
- if (this.slottedTreeItems.length > 0) {
54
- if (e.target === this) {
55
- if (this.currentFocused !== null) {
56
- TreeItem.focusItem(this.currentFocused);
57
- }
58
- return;
59
- }
60
- if (this.contains(e.target)) {
61
- this.setAttribute("tabindex", "-1");
62
- this.currentFocused = e.target;
63
- }
46
+ this.handleExpandCollapseButtonClick = (e) => {
47
+ if (!this.disabled && !e.defaultPrevented) {
48
+ this.expanded = !this.expanded;
64
49
  }
65
50
  };
66
51
  /**
67
- * Handle blur events
52
+ * Handle focus events
68
53
  *
69
54
  * @internal
70
55
  */
71
- this.handleBlur = (e) => {
72
- if (e.target instanceof HTMLElement && (e.relatedTarget === null || !this.contains(e.relatedTarget))) {
73
- this.setAttribute("tabindex", "0");
74
- }
56
+ this.handleFocus = (_e) => {
57
+ this.setAttribute("tabindex", "0");
75
58
  };
76
59
  /**
77
- * KeyDown handler
78
- *
79
- * @internal
80
- */
81
- this.handleKeyDown = (e) => {
82
- if (this.slottedTreeItems.length < 1) {
83
- return true;
84
- }
85
- if (!e.defaultPrevented) {
86
- const treeItems = this.getVisibleNodes();
87
- switch (e.key) {
88
- case keyHome:
89
- if (treeItems.length) {
90
- TreeItem.focusItem(treeItems[0]);
91
- }
92
- return;
93
- case keyEnd:
94
- if (treeItems.length) {
95
- TreeItem.focusItem(treeItems[treeItems.length - 1]);
96
- }
97
- return;
98
- case keyArrowLeft:
99
- if (e.target && this.isFocusableElement(e.target)) {
100
- const item = e.target;
101
- if (item instanceof TreeItem && item.childItemLength() > 0 && item.expanded) {
102
- item.expanded = false;
103
- } else if (item instanceof TreeItem && item.parentElement instanceof TreeItem) {
104
- TreeItem.focusItem(item.parentElement);
105
- }
106
- }
107
- return false;
108
- case keyArrowRight:
109
- if (e.target && this.isFocusableElement(e.target)) {
110
- const item = e.target;
111
- if (item instanceof TreeItem && item.childItemLength() > 0 && !item.expanded) {
112
- item.expanded = true;
113
- } else if (item instanceof TreeItem && item.childItemLength() > 0) {
114
- this.focusNextNode(1, e.target);
115
- }
116
- }
117
- return;
118
- case keyArrowDown:
119
- if (e.target && this.isFocusableElement(e.target)) {
120
- this.focusNextNode(1, e.target);
121
- }
122
- return;
123
- case keyArrowUp:
124
- if (e.target && this.isFocusableElement(e.target)) {
125
- this.focusNextNode(-1, e.target);
126
- }
127
- return;
128
- case keyEnter:
129
- this.handleClick(e);
130
- return;
131
- }
132
- }
133
- return true;
134
- };
135
- /**
136
- * Handles the selected-changed events bubbling up
137
- * from child tree items
60
+ * Handle blur events
138
61
  *
139
- * @internal
140
- */
141
- this.handleSelectedChange = (e) => {
142
- if (!e.defaultPrevented) {
143
- if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) {
144
- return true;
145
- }
146
- const item = e.target;
147
- if (item.selected) {
148
- if (this.currentSelected && this.currentSelected !== item) {
149
- this.currentSelected.selected = false;
150
- }
151
- this.currentSelected = item;
152
- } else if (!item.selected && this.currentSelected === item) {
153
- this.currentSelected = null;
154
- }
155
- return;
156
- }
157
- };
158
- /**
159
- * Updates the tree view when slottedTreeItems changes
160
- */
161
- this.setItems = () => {
162
- const selectedItem = this.treeView.querySelector(
163
- "[aria-selected='true']"
164
- );
165
- this.currentSelected = selectedItem;
166
- if (this.currentFocused === null || !this.contains(this.currentFocused)) {
167
- this.currentFocused = this.getValidFocusableItem();
168
- }
169
- this.nested = this.checkForNestedItems();
170
- const treeItems = this.getVisibleNodes();
171
- treeItems.forEach((node) => {
172
- if (isTreeItemElement(node)) {
173
- node.nested = this.nested;
174
- }
175
- });
176
- };
177
- /**
178
- * check if the item is focusable
62
+ * @internal
179
63
  */
180
- this.isFocusableElement = (el) => {
181
- return isTreeItemElement(el);
182
- };
183
- this.isSelectedElement = (el) => {
184
- return el.selected;
64
+ this.handleBlur = (_e) => {
65
+ this.setAttribute("tabindex", "-1");
185
66
  };
186
67
  }
187
- slottedTreeItemsChanged() {
68
+ expandedChanged() {
188
69
  if (this.$fastController.isConnected) {
189
- this.setItems();
70
+ this.$emit("expanded-change", this);
190
71
  }
191
72
  }
192
- connectedCallback() {
193
- super.connectedCallback();
194
- this.setAttribute("tabindex", "0");
195
- DOM.queueUpdate(() => {
196
- this.setItems();
197
- });
198
- }
199
- /**
200
- * Handles click events bubbling up
201
- *
202
- * @internal
203
- */
204
- handleClick(e) {
205
- if (!e.defaultPrevented) {
206
- if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) {
207
- return true;
208
- }
209
- const item = e.target;
210
- if (!item.disabled) {
211
- item.selected = !item.selected;
212
- }
213
- return;
73
+ selectedChanged() {
74
+ if (this.$fastController.isConnected) {
75
+ this.$emit("selected-change", this);
214
76
  }
215
77
  }
216
- /**
217
- * Move focus to a tree item based on its offset from the provided item
218
- */
219
- focusNextNode(delta, item) {
220
- const visibleNodes = this.getVisibleNodes();
221
- if (visibleNodes) {
222
- const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta];
223
- if (isHTMLElement(focusItem)) {
224
- TreeItem.focusItem(focusItem);
225
- }
78
+ itemsChanged() {
79
+ if (this.$fastController.isConnected) {
80
+ this.items.forEach((node) => {
81
+ if (isTreeItemElement(node)) {
82
+ node.nested = true;
83
+ }
84
+ });
226
85
  }
227
86
  }
228
87
  /**
229
- * 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
230
92
  */
231
- getValidFocusableItem() {
232
- const treeItems = this.getVisibleNodes();
233
- let focusIndex = treeItems.findIndex(this.isSelectedElement);
234
- if (focusIndex === -1) {
235
- focusIndex = treeItems.findIndex(this.isFocusableElement);
236
- }
237
- if (focusIndex !== -1) {
238
- return treeItems[focusIndex];
239
- }
240
- return null;
93
+ static focusItem(el) {
94
+ el.focusable = true;
95
+ el.focus();
241
96
  }
242
97
  /**
243
- * checks if there are any nested tree items
98
+ * Gets number of children
99
+ *
100
+ * @internal
244
101
  */
245
- checkForNestedItems() {
246
- return this.slottedTreeItems.some((node) => {
247
- return isTreeItemElement(node) && node.querySelector("[role='treeitem']");
248
- });
249
- }
250
- getVisibleNodes() {
251
- 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;
252
109
  }
253
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");
254
128
  // @ts-expect-error Type is incorrectly non-optional
255
129
  __decorateClass([
256
- attr({ attribute: "render-collapsed-nodes" })
257
- ], TreeView.prototype, "renderCollapsedNodes");
130
+ observable
131
+ ], TreeItem.prototype, "childItems");
132
+ __decorateClass([
133
+ observable
134
+ ], TreeItem.prototype, "items");
258
135
  // @ts-expect-error Type is incorrectly non-optional
259
136
  __decorateClass([
260
137
  observable
261
- ], TreeView.prototype, "currentSelected");
138
+ ], TreeItem.prototype, "nested");
262
139
  // @ts-expect-error Type is incorrectly non-optional
263
140
  __decorateClass([
264
141
  observable
265
- ], TreeView.prototype, "slottedTreeItems");
142
+ ], TreeItem.prototype, "renderCollapsedChildren");
143
+ applyMixins(TreeItem, AffixIcon);
266
144
 
267
- const getClasses = (_) => classNames("control");
268
- const TreeViewTemplate = html` <template
269
- role="tree"
270
- ${ref("treeView")}
271
- @keydown="${(x, c) => x.handleKeyDown(c.event)}"
272
- @focusin="${(x, c) => x.handleFocus(c.event)}"
273
- @focusout="${(x, c) => x.handleBlur(c.event)}"
274
- @click="${(x, c) => x.handleClick(c.event)}"
275
- @selected-change="${(x, c) => x.handleSelectedChange(c.event)}"
276
- >
277
- <div class="${getClasses}">
278
- <slot ${slotted("slottedTreeItems")}></slot>
279
- </div>
280
- </template>`;
145
+ const getClasses = ({ disabled, selected }) => classNames(
146
+ "control",
147
+ ["disabled", disabled],
148
+ ["selected", Boolean(selected)]
149
+ );
150
+ const expandCollapseButton = (context) => {
151
+ const iconTag = context.tagFor(Icon);
152
+ return html`
153
+ <div aria-hidden="true"
154
+ class="expandCollapseButton"
155
+ @click="${(x, c) => x.handleExpandCollapseButtonClick(c.event)}"
156
+ ${ref("expandCollapseButton")}
157
+ >
158
+ <${iconTag} class="expandCollapseIcon" name="${(x) => x.expanded ? "chevron-down-line" : "chevron-right-line"}"></${iconTag}>
159
+ </div>`;
160
+ };
161
+ const TreeItemTemplate = (context) => {
162
+ const affixIconTemplate = affixIconTemplateFactory(context);
163
+ return html` <template
164
+ role="treeitem"
165
+ slot="${(x) => x.isNestedItem() ? "item" : void 0}"
166
+ tabindex="-1"
167
+ aria-expanded="${(x) => x.childItems && x.childItems.length > 0 ? x.expanded : void 0}"
168
+ aria-selected="${(x) => x.selected}"
169
+ aria-disabled="${(x) => x.disabled}"
170
+ @focusin="${(x, c) => x.handleFocus(c.event)}"
171
+ @focusout="${(x, c) => x.handleBlur(c.event)}"
172
+ ${children({
173
+ property: "childItems",
174
+ filter: elements(context.tagFor(TreeItem))
175
+ })}
176
+ >
177
+ <div class="${getClasses}">
178
+ ${when(
179
+ (x) => x.childItems && x.childItems.length > 0,
180
+ expandCollapseButton(context)
181
+ )}
182
+ ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
183
+ ${(x) => x.text}
184
+ </div>
185
+ ${when(
186
+ (x) => x.childItems && x.childItems.length > 0 && x.expanded,
187
+ html` <div role="group" class="items">
188
+ <slot name="item" ${slotted("items")}></slot>
189
+ </div>`
190
+ )}
191
+ </template>`;
192
+ };
281
193
 
282
- const treeViewDefinition = defineVividComponent(
283
- "tree-view",
284
- TreeView,
285
- TreeViewTemplate,
286
- [treeItemDefinition],
194
+ const treeItemDefinition = defineVividComponent(
195
+ "tree-item",
196
+ TreeItem,
197
+ TreeItemTemplate,
198
+ [iconDefinition],
287
199
  {
288
200
  styles
289
201
  }
290
202
  );
291
- const registerTreeView = createRegisterFunction(treeViewDefinition);
203
+ const registerTreeItem = createRegisterFunction(treeItemDefinition);
292
204
 
293
- export { TreeView as T, registerTreeView as r, treeViewDefinition as t };
205
+ export { TreeItem as T, isTreeItemElement as i, registerTreeItem as r, treeItemDefinition as t };