@vonage/vivid 5.24.0 → 5.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 (331) hide show
  1. package/README.md +1 -1
  2. package/avatar/index.cjs +10 -10
  3. package/avatar/index.js +4 -3
  4. package/breadcrumb-item/index.cjs +9 -5
  5. package/breadcrumb-item/index.js +11 -6
  6. package/bundled/affix.cjs +1 -1
  7. package/bundled/affix.js +1 -1
  8. package/bundled/definition10.cjs +2 -1
  9. package/bundled/definition10.js +3 -2
  10. package/bundled/definition11.cjs +4 -4
  11. package/bundled/definition11.js +4 -3
  12. package/bundled/definition12.cjs +1 -1
  13. package/bundled/definition12.js +1 -0
  14. package/bundled/definition15.cjs +5 -5
  15. package/bundled/definition15.js +4 -3
  16. package/bundled/definition17.cjs +7 -7
  17. package/bundled/definition17.js +22 -109
  18. package/bundled/definition18.cjs +3 -3
  19. package/bundled/definition18.js +9 -31
  20. package/bundled/definition19.cjs +19 -19
  21. package/bundled/definition19.js +3 -2
  22. package/bundled/definition21.cjs +8 -8
  23. package/bundled/definition21.js +5 -4
  24. package/bundled/definition22.cjs +2 -2
  25. package/bundled/definition22.js +2 -2
  26. package/bundled/definition24.cjs +4 -4
  27. package/bundled/definition24.js +4 -3
  28. package/bundled/definition25.cjs +3 -3
  29. package/bundled/definition25.js +32 -28
  30. package/bundled/definition3.cjs +5 -5
  31. package/bundled/definition3.js +10 -40
  32. package/bundled/definition4.cjs +6 -6
  33. package/bundled/definition4.js +4 -3
  34. package/bundled/definition6.cjs +11 -11
  35. package/bundled/definition6.js +4 -3
  36. package/bundled/definition9.cjs +12 -6
  37. package/bundled/definition9.js +66 -43
  38. package/bundled/extractOptions.cjs +1 -1
  39. package/bundled/extractOptions.js +2 -2
  40. package/bundled/icon.cjs +1 -0
  41. package/bundled/icon.js +34 -0
  42. package/bundled/listbox.cjs +1 -1
  43. package/bundled/listbox.js +5 -2
  44. package/bundled/mixins.cjs +8 -8
  45. package/bundled/mixins.js +4 -3
  46. package/bundled/optgroup.cjs +1 -0
  47. package/bundled/optgroup.js +27 -0
  48. package/bundled/option.cjs +1 -0
  49. package/bundled/option.js +93 -0
  50. package/bundled/vivid-element.cjs +1 -1
  51. package/bundled/vivid-element.js +1 -1
  52. package/card/index.cjs +22 -22
  53. package/card/index.js +4 -3
  54. package/color-picker/index.cjs +18 -18
  55. package/color-picker/index.js +4 -3
  56. package/combobox/index.cjs +7 -7
  57. package/combobox/index.js +4 -2
  58. package/custom-elements.json +4159 -3847
  59. package/data-grid/index.cjs +24 -24
  60. package/data-grid/index.js +4 -3
  61. package/dial-pad/index.cjs +21 -21
  62. package/dial-pad/index.js +4 -3
  63. package/dialog/index.cjs +14 -14
  64. package/dialog/index.js +4 -3
  65. package/empty-state/index.cjs +3 -3
  66. package/empty-state/index.js +4 -3
  67. package/file-picker/index.cjs +7 -7
  68. package/file-picker/index.js +4 -3
  69. package/icon/definition.cjs +2 -1
  70. package/icon/definition.js +2 -1
  71. package/index.cjs +148 -141
  72. package/index.js +41 -37
  73. package/lib/accordion-item/accordion-item.d.ts +1 -0
  74. package/lib/combobox/combobox.d.ts +1 -1
  75. package/lib/components.d.ts +1 -0
  76. package/lib/dial-pad/dial-pad.d.ts +0 -1
  77. package/lib/listbox/definition.d.ts +3 -0
  78. package/lib/listbox/index.d.ts +1 -0
  79. package/lib/listbox/listbox.d.ts +1302 -0
  80. package/lib/listbox/listbox.template.d.ts +3 -0
  81. package/lib/listbox/variations.browser-spec.d.ts +1 -0
  82. package/lib/menu/menu.d.ts +0 -1
  83. package/lib/number-field/number-field.d.ts +0 -1
  84. package/lib/rich-text-editor/rte/features/base.d.ts +1 -0
  85. package/lib/rich-text-editor/rte/utils/default-textblock.d.ts +2 -2
  86. package/lib/tag-name-map.d.ts +2 -1
  87. package/lib/text-field/text-field.d.ts +1 -0
  88. package/lib/toggletip/toggletip.d.ts +1 -0
  89. package/lib/tooltip/tooltip.d.ts +1 -0
  90. package/listbox/definition.cjs +5 -0
  91. package/listbox/definition.js +2 -0
  92. package/listbox/index.cjs +11 -0
  93. package/listbox/index.js +540 -0
  94. package/nav/definition.cjs +1 -1
  95. package/nav/definition.js +1 -1
  96. package/nav-disclosure/definition.cjs +1 -1
  97. package/nav-disclosure/definition.js +1 -1
  98. package/nav-disclosure/index.cjs +4 -4
  99. package/nav-disclosure/index.js +4 -3
  100. package/nav-item/definition.cjs +1 -1
  101. package/nav-item/definition.js +1 -1
  102. package/note/definition.cjs +1 -1
  103. package/note/definition.js +1 -1
  104. package/number-field/definition.cjs +1 -1
  105. package/number-field/definition.js +1 -1
  106. package/optgroup/definition.cjs +2 -1
  107. package/optgroup/definition.js +2 -1
  108. package/option/definition.cjs +2 -1
  109. package/option/definition.js +2 -1
  110. package/package.json +8 -7
  111. package/pagination/definition.cjs +1 -1
  112. package/pagination/definition.js +1 -1
  113. package/platform-switch/definition.cjs +1 -1
  114. package/platform-switch/definition.js +1 -1
  115. package/popover/definition.cjs +1 -1
  116. package/popover/definition.js +1 -1
  117. package/popover/index.cjs +5 -5
  118. package/popover/index.js +4 -3
  119. package/progress/definition.cjs +1 -1
  120. package/progress/definition.js +1 -1
  121. package/radio/definition.cjs +1 -1
  122. package/radio/definition.js +1 -1
  123. package/radio-group/definition.cjs +1 -1
  124. package/radio-group/definition.js +1 -1
  125. package/range-slider/definition.cjs +1 -1
  126. package/range-slider/definition.js +1 -1
  127. package/rich-text-editor/definition.cjs +1 -1
  128. package/rich-text-editor/definition.js +1 -1
  129. package/rich-text-editor/index.cjs +13 -13
  130. package/rich-text-editor/index.js +22 -19
  131. package/rich-text-view/definition.cjs +1 -1
  132. package/rich-text-view/definition.js +1 -1
  133. package/searchable-select/definition.cjs +1 -1
  134. package/searchable-select/definition.js +1 -1
  135. package/searchable-select/index.cjs +23 -23
  136. package/searchable-select/index.js +10 -7
  137. package/select/definition.cjs +1 -1
  138. package/select/definition.js +1 -1
  139. package/selectable-box/definition.cjs +1 -1
  140. package/selectable-box/definition.js +1 -1
  141. package/shared/listbox/commands.d.ts +17 -0
  142. package/shared/listbox/move.d.ts +6 -0
  143. package/shared/listbox/options.d.ts +12 -0
  144. package/shared/listbox/selection.d.ts +28 -0
  145. package/shared/listbox/state.d.ts +26 -0
  146. package/shared/listbox/typeahead.d.ts +8 -0
  147. package/shared/listbox/with-options-filter.d.ts +440 -0
  148. package/shared/listbox/with-options.d.ts +862 -0
  149. package/side-drawer/definition.cjs +1 -1
  150. package/side-drawer/definition.js +1 -1
  151. package/simple-color-picker/definition.cjs +1 -1
  152. package/simple-color-picker/definition.js +1 -1
  153. package/simple-color-picker/index.cjs +6 -6
  154. package/simple-color-picker/index.js +4 -3
  155. package/split-button/definition.cjs +1 -1
  156. package/split-button/definition.js +1 -1
  157. package/status/definition.cjs +1 -1
  158. package/status/definition.js +1 -1
  159. package/switch/definition.cjs +1 -1
  160. package/switch/definition.js +1 -1
  161. package/tab/definition.cjs +1 -1
  162. package/tab/definition.js +1 -1
  163. package/tab-panel/definition.cjs +1 -1
  164. package/tab-panel/definition.js +1 -1
  165. package/table/definition.cjs +1 -1
  166. package/table/definition.js +1 -1
  167. package/table/index.cjs +13 -13
  168. package/table/index.js +4 -3
  169. package/tabs/definition.cjs +1 -1
  170. package/tabs/definition.js +1 -1
  171. package/tag/definition.cjs +1 -1
  172. package/tag/definition.js +1 -1
  173. package/tag/index.cjs +11 -11
  174. package/tag/index.js +4 -3
  175. package/tag-group/definition.cjs +1 -1
  176. package/tag-group/definition.js +1 -1
  177. package/text-area/definition.cjs +1 -1
  178. package/text-area/definition.js +1 -1
  179. package/time-picker/definition.cjs +1 -1
  180. package/time-picker/definition.js +1 -1
  181. package/tree-item/definition.cjs +1 -1
  182. package/tree-item/definition.js +1 -1
  183. package/tree-view/definition.cjs +1 -1
  184. package/tree-view/definition.js +1 -1
  185. package/unbundled/affix.cjs +2 -2
  186. package/unbundled/affix.js +1 -1
  187. package/unbundled/base-progress.cjs +1 -1
  188. package/unbundled/base-progress.js +1 -1
  189. package/unbundled/button.cjs +2 -2
  190. package/unbundled/button.js +2 -2
  191. package/unbundled/definition.cjs +2 -65
  192. package/unbundled/definition.js +4 -61
  193. package/unbundled/definition11.cjs +4 -3
  194. package/unbundled/definition11.js +3 -2
  195. package/unbundled/definition12.cjs +3 -2
  196. package/unbundled/definition12.js +3 -2
  197. package/unbundled/definition14.cjs +2 -1
  198. package/unbundled/definition14.js +2 -1
  199. package/unbundled/definition17.cjs +9 -4
  200. package/unbundled/definition17.js +9 -4
  201. package/unbundled/definition2.cjs +7 -2
  202. package/unbundled/definition2.js +8 -3
  203. package/unbundled/definition21.cjs +2 -1
  204. package/unbundled/definition21.js +2 -1
  205. package/unbundled/definition23.cjs +2 -1
  206. package/unbundled/definition23.js +2 -1
  207. package/unbundled/definition24.cjs +6 -4
  208. package/unbundled/definition24.js +6 -4
  209. package/unbundled/definition25.cjs +2 -1
  210. package/unbundled/definition25.js +2 -1
  211. package/unbundled/definition26.cjs +7 -4
  212. package/unbundled/definition26.js +7 -4
  213. package/unbundled/definition27.cjs +39 -5
  214. package/unbundled/definition27.js +40 -6
  215. package/unbundled/definition28.cjs +4 -3
  216. package/unbundled/definition28.js +4 -3
  217. package/unbundled/definition29.cjs +5 -168
  218. package/unbundled/definition29.js +11 -162
  219. package/unbundled/definition30.cjs +2 -63
  220. package/unbundled/definition30.js +5 -54
  221. package/unbundled/definition31.cjs +5 -3
  222. package/unbundled/definition31.js +5 -3
  223. package/unbundled/definition32.cjs +2 -1
  224. package/unbundled/definition32.js +2 -1
  225. package/unbundled/definition35.cjs +2 -1
  226. package/unbundled/definition35.js +2 -1
  227. package/unbundled/definition37.cjs +1 -1
  228. package/unbundled/definition37.js +1 -1
  229. package/unbundled/definition39.cjs +1 -1
  230. package/unbundled/definition39.js +1 -1
  231. package/unbundled/definition40.cjs +4 -2
  232. package/unbundled/definition40.js +4 -2
  233. package/unbundled/definition41.cjs +11 -6
  234. package/unbundled/definition41.js +11 -6
  235. package/unbundled/definition42.cjs +5 -4
  236. package/unbundled/definition42.js +5 -4
  237. package/unbundled/definition44.cjs +3 -2
  238. package/unbundled/definition44.js +3 -2
  239. package/unbundled/definition45.cjs +2 -2
  240. package/unbundled/definition45.js +2 -2
  241. package/unbundled/definition49.cjs +583 -79
  242. package/unbundled/definition49.js +579 -76
  243. package/unbundled/definition50.cjs +71 -33
  244. package/unbundled/definition50.js +67 -29
  245. package/unbundled/definition51.cjs +54 -23
  246. package/unbundled/definition51.js +52 -18
  247. package/unbundled/definition52.cjs +23 -39
  248. package/unbundled/definition52.js +17 -36
  249. package/unbundled/definition53.cjs +29 -314
  250. package/unbundled/definition53.js +27 -312
  251. package/unbundled/definition54.cjs +302 -195
  252. package/unbundled/definition54.js +298 -191
  253. package/unbundled/definition55.cjs +210 -40
  254. package/unbundled/definition55.js +206 -36
  255. package/unbundled/definition56.cjs +42 -266
  256. package/unbundled/definition56.js +38 -262
  257. package/unbundled/definition57.cjs +270 -50
  258. package/unbundled/definition57.js +267 -46
  259. package/unbundled/definition58.cjs +48 -146
  260. package/unbundled/definition58.js +47 -143
  261. package/unbundled/definition59.cjs +127 -225
  262. package/unbundled/definition59.js +122 -223
  263. package/unbundled/definition6.cjs +2 -1
  264. package/unbundled/definition6.js +2 -1
  265. package/unbundled/definition60.cjs +199 -418
  266. package/unbundled/definition60.js +196 -415
  267. package/unbundled/definition61.cjs +442 -3738
  268. package/unbundled/definition61.js +432 -3565
  269. package/unbundled/definition62.cjs +3717 -730
  270. package/unbundled/definition62.js +3544 -720
  271. package/unbundled/definition63.cjs +770 -97
  272. package/unbundled/definition63.js +767 -94
  273. package/unbundled/definition64.cjs +100 -999
  274. package/unbundled/definition64.js +98 -994
  275. package/unbundled/definition65.cjs +991 -93
  276. package/unbundled/definition65.js +985 -90
  277. package/unbundled/definition66.cjs +109 -73
  278. package/unbundled/definition66.js +105 -63
  279. package/unbundled/definition67.cjs +69 -155
  280. package/unbundled/definition67.js +60 -152
  281. package/unbundled/definition68.cjs +155 -119
  282. package/unbundled/definition68.js +151 -115
  283. package/unbundled/definition69.cjs +124 -49
  284. package/unbundled/definition69.js +120 -45
  285. package/unbundled/definition70.cjs +51 -85
  286. package/unbundled/definition70.js +50 -81
  287. package/unbundled/definition71.cjs +91 -19
  288. package/unbundled/definition71.js +86 -14
  289. package/unbundled/definition72.cjs +20 -87
  290. package/unbundled/definition72.js +14 -84
  291. package/unbundled/definition73.cjs +77 -294
  292. package/unbundled/definition73.js +72 -217
  293. package/unbundled/definition74.cjs +289 -311
  294. package/unbundled/definition74.js +219 -306
  295. package/unbundled/definition75.cjs +326 -26
  296. package/unbundled/definition75.js +317 -23
  297. package/unbundled/definition76.cjs +27 -122
  298. package/unbundled/definition76.js +22 -118
  299. package/unbundled/definition77.cjs +105 -232
  300. package/unbundled/definition77.js +101 -228
  301. package/unbundled/definition78.cjs +259 -26
  302. package/unbundled/definition78.js +249 -23
  303. package/unbundled/definition79.cjs +29 -148
  304. package/unbundled/definition79.js +27 -133
  305. package/unbundled/definition80.cjs +118 -173
  306. package/unbundled/definition80.js +109 -169
  307. package/unbundled/definition81.cjs +181 -477
  308. package/unbundled/definition81.js +176 -471
  309. package/unbundled/definition82.cjs +517 -0
  310. package/unbundled/definition82.js +497 -0
  311. package/unbundled/extractOptions.cjs +5 -5
  312. package/unbundled/extractOptions.js +2 -2
  313. package/unbundled/icon.cjs +67 -0
  314. package/unbundled/icon.js +61 -0
  315. package/unbundled/linkable.cjs +1 -1
  316. package/unbundled/linkable.js +1 -1
  317. package/unbundled/listbox.cjs +8 -3
  318. package/unbundled/listbox.js +7 -2
  319. package/unbundled/mixins.cjs +2 -1
  320. package/unbundled/mixins.js +2 -1
  321. package/unbundled/optgroup.cjs +66 -0
  322. package/unbundled/optgroup.js +54 -0
  323. package/unbundled/option.cjs +176 -0
  324. package/unbundled/option.js +164 -0
  325. package/unbundled/time-selection-picker.template.cjs +1 -1
  326. package/unbundled/time-selection-picker.template.js +1 -1
  327. package/unbundled/vivid-element.cjs +1 -1
  328. package/unbundled/vivid-element.js +1 -1
  329. package/video-player/definition.cjs +1 -1
  330. package/video-player/definition.js +1 -1
  331. package/vivid.api.json +336 -193
@@ -1,202 +1,142 @@
1
1
  import { d as createRegisterFunction, t as VividElement, u as defineVividComponent } from "./vivid-element.js";
2
+ import { t as iconDefinition } from "./definition.js";
2
3
  import { t as __decorate } from "./decorate.js";
4
+ import { t as Icon } from "./icon.js";
5
+ import { a as affixIconTemplateFactory, i as IconWrapper, t as AffixIcon } from "./affix.js";
3
6
  import { n as applyHostSemantics, t as HostSemantics } from "./host-semantics.js";
4
- import { i as isTreeItemElement, n as treeItemDefinition, r as TreeItem } from "./definition79.js";
5
- import { Updates, attr, html, observable, ref, slotted } from "@microsoft/fast-element";
6
- import { classNames, isHTMLElement, keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnd, keyEnter, keyHome } from "@microsoft/fast-web-utilities";
7
- //#region src/lib/tree-view/tree-view.scss?inline
8
- var tree_view_default = ".control{flex-direction:column;gap:4px;display:flex;position:relative}";
7
+ import { attr, children, elements, html, observable, ref, slotted, when } from "@microsoft/fast-element";
8
+ import { classNames, isHTMLElement } from "@microsoft/fast-web-utilities";
9
+ //#region src/lib/tree-item/tree-item.scss?inline
10
+ var tree_item_default = ":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:disabled,.control.disabled{--_appearance-color-text:var(--vvd-color-neutral-300);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}@media (hover:hover){.control: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.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:active:where(:not(.disabled,:disabled)),.control.active:where(:not(.disabled,:disabled)){--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:var(--_connotation-color-soft);--_appearance-color-outline:transparent}.control.selected:where(:not(.disabled,:disabled)){--_appearance-color-text:var(--_connotation-color-primary-text);--_appearance-color-fill:var(--_connotation-color-primary);--_appearance-color-outline:transparent}@media (hover:hover){.control.selected: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.selected.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));box-sizing:border-box;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);hyphens:auto;inline-size:100%;min-block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2)));vertical-align:middle;word-break:break-word;user-select:none;border-radius:8px;align-items:center;gap:12px;padding-inline:16px;text-decoration:none;display:inline-flex;position:relative}.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(--focus-stroke-color,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{border-radius:8px;align-items:center;font-size:20px;display:flex}.expandCollapseButton .expandCollapseIcon{margin:4px}@media (hover:hover){.expandCollapseButton:hover{background-color:var(--vvd-color-neutral-100)}.selected .expandCollapseButton:hover{background-color:var(--vvd-color-neutral-700)}}.items{flex-direction:column;gap:4px;margin-block-start:4px;padding-inline-start:48px;display:flex}slot[name=icon]{font-size:20px;line-height:1}.control:not(.disabled,.selected) slot[name=icon]{color:var(--vvd-color-neutral-600)}";
9
11
  //#endregion
10
- //#region src/lib/tree-view/tree-view.ts
11
- function getDisplayedNodes(rootNode, selector) {
12
- if (isHTMLElement(rootNode)) return Array.from(rootNode.querySelectorAll(selector)).filter((node) => {
13
- if (node.parentElement instanceof TreeItem) {
14
- if (node.parentElement.expanded) return true;
15
- } else return true;
16
- return false;
17
- });
18
- return [];
12
+ //#region src/lib/tree-item/tree-item.ts
13
+ function isTreeItemElement(el) {
14
+ return isHTMLElement(el) && (el.getAttribute("role") === "treeitem" || el instanceof TreeItem);
19
15
  }
20
16
  /**
21
17
  * @public
22
- * @component tree-view
23
- * @slot - Default slot.
18
+ * @component tree-item
19
+ * @slot item - To specify a child tree item.
20
+ * @slot icon - The preferred way to add an icon to the component.
21
+ * @event {CustomEvent<HTMLElement>} expanded-change - Fires a custom 'expanded-change' event when the expanded state changes
22
+ * @event {CustomEvent<HTMLElement>} selected-change - Fires a custom 'selected-change' event when the selected state changes
24
23
  */
25
- var TreeView = class extends HostSemantics(VividElement) {
24
+ var TreeItem = class extends HostSemantics(AffixIcon(VividElement)) {
26
25
  constructor(..._args) {
27
26
  super(..._args);
28
- this.currentFocused = null;
29
- this.handleFocus = (e) => {
30
- if (this.slottedTreeItems.length > 0) {
31
- if (e.target === this) {
32
- /* v8 ignore else -- @preserve */
33
- if (this.currentFocused !== null) TreeItem.focusItem(this.currentFocused);
34
- return;
35
- }
36
- /* v8 ignore else -- @preserve */
37
- if (this.contains(e.target)) {
38
- this.setAttribute("tabindex", "-1");
39
- this.currentFocused = e.target;
40
- }
41
- }
27
+ this.expanded = false;
28
+ this.selected = false;
29
+ this.disabled = false;
30
+ this.focusable = false;
31
+ this.isNestedItem = () => {
32
+ return isTreeItemElement(this.parentElement);
42
33
  };
43
- this.handleBlur = (e) => {
44
- if (e.target instanceof HTMLElement && (e.relatedTarget === null || !this.contains(e.relatedTarget))) this.setAttribute("tabindex", "0");
34
+ this.handleExpandCollapseButtonClick = (e) => {
35
+ if (!this.disabled && !e.defaultPrevented) this.expanded = !this.expanded;
45
36
  };
46
- this.handleKeyDown = (e) => {
47
- if (this.slottedTreeItems.length < 1) return true;
48
- /* v8 ignore else -- @preserve */
49
- if (!e.defaultPrevented) {
50
- const treeItems = this.getVisibleNodes();
51
- switch (e.key) {
52
- case keyHome:
53
- /* v8 ignore else -- @preserve */
54
- if (treeItems.length) TreeItem.focusItem(treeItems[0]);
55
- return;
56
- case keyEnd:
57
- /* v8 ignore else -- @preserve */
58
- if (treeItems.length) TreeItem.focusItem(treeItems[treeItems.length - 1]);
59
- return;
60
- case keyArrowLeft:
61
- /* v8 ignore else -- @preserve */
62
- if (e.target && this.isFocusableElement(e.target)) {
63
- const item = e.target;
64
- /* v8 ignore else -- @preserve */
65
- if (item instanceof TreeItem && item.childItemLength() > 0 && item.expanded) item.expanded = false;
66
- else if (item instanceof TreeItem && item.parentElement instanceof TreeItem) TreeItem.focusItem(item.parentElement);
67
- }
68
- return false;
69
- case keyArrowRight:
70
- /* v8 ignore else -- @preserve */
71
- if (e.target && this.isFocusableElement(e.target)) {
72
- const item = e.target;
73
- /* v8 ignore else -- @preserve */
74
- if (item instanceof TreeItem && item.childItemLength() > 0 && !item.expanded) item.expanded = true;
75
- else if (item instanceof TreeItem && item.childItemLength() > 0) this.focusNextNode(1, e.target);
76
- }
77
- return;
78
- case keyArrowDown:
79
- /* v8 ignore else -- @preserve */
80
- if (e.target && this.isFocusableElement(e.target)) this.focusNextNode(1, e.target);
81
- return;
82
- case keyArrowUp:
83
- /* v8 ignore else -- @preserve */
84
- if (e.target && this.isFocusableElement(e.target)) this.focusNextNode(-1, e.target);
85
- return;
86
- case keyEnter:
87
- this.handleClick(e);
88
- return;
89
- }
90
- }
91
- return true;
92
- };
93
- this.handleSelectedChange = (e) => {
94
- /* v8 ignore else -- @preserve */
95
- if (!e.defaultPrevented) {
96
- if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) return true;
97
- const item = e.target;
98
- /* v8 ignore else -- @preserve */
99
- if (item.selected) {
100
- if (this.currentSelected && this.currentSelected !== item) this.currentSelected.selected = false;
101
- this.currentSelected = item;
102
- } else if (!item.selected && this.currentSelected === item) this.currentSelected = null;
103
- }
104
- };
105
- this.setItems = () => {
106
- const selectedItem = this.treeView.querySelector("[selected]");
107
- this.currentSelected = selectedItem;
108
- if (this.currentFocused === null || !this.contains(this.currentFocused)) this.currentFocused = this.getValidFocusableItem();
109
- this.nested = this.checkForNestedItems();
110
- this.getVisibleNodes().forEach((node) => {
111
- /* v8 ignore else -- @preserve */
112
- if (isTreeItemElement(node)) node.nested = this.nested;
113
- });
114
- };
115
- this.isFocusableElement = (el) => {
116
- return isTreeItemElement(el);
37
+ this.handleFocus = (_e) => {
38
+ this.setAttribute("tabindex", "0");
117
39
  };
118
- this.isSelectedElement = (el) => {
119
- return el.selected;
40
+ this.handleBlur = (_e) => {
41
+ this.setAttribute("tabindex", "-1");
120
42
  };
121
43
  }
122
44
  /** @internal */
123
- slottedTreeItemsChanged() {
124
- if (this.$fastController.isConnected) this.setItems();
45
+ expandedChanged() {
46
+ if (this.$fastController.isConnected) this.$emit("expanded-change", this);
125
47
  }
126
- connectedCallback() {
127
- super.connectedCallback();
128
- this.setAttribute("tabindex", "0");
129
- Updates.enqueue(() => {
130
- this.setItems();
48
+ /** @internal */
49
+ selectedChanged() {
50
+ if (this.$fastController.isConnected) this.$emit("selected-change", this);
51
+ }
52
+ itemsChanged() {
53
+ if (this.$fastController.isConnected) this.items.forEach((node) => {
54
+ /* v8 ignore else -- @preserve */
55
+ if (isTreeItemElement(node)) node.nested = true;
131
56
  });
132
57
  }
133
58
  /**
134
- * Handles click events bubbling up
59
+ * Places document focus on a tree item
135
60
  *
136
- * @internal
61
+ * @param el - the element to focus
137
62
  */
138
- handleClick(e) {
139
- if (!e.defaultPrevented) {
140
- if (!(e.target instanceof Element) || !isTreeItemElement(e.target)) return true;
141
- const item = e.target;
142
- if (!item.disabled) item.selected = !item.selected;
143
- }
144
- }
145
- /** Move focus to a tree item based on its offset from the provided item */
146
- focusNextNode(delta, item) {
147
- const visibleNodes = this.getVisibleNodes();
148
- /* v8 ignore else -- @preserve */
149
- if (visibleNodes) {
150
- const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta];
151
- /* v8 ignore else -- @preserve */
152
- if (isHTMLElement(focusItem)) TreeItem.focusItem(focusItem);
153
- }
154
- }
155
- /** checks if there are any nested tree items */
156
- getValidFocusableItem() {
157
- const treeItems = this.getVisibleNodes();
158
- let focusIndex = treeItems.findIndex(this.isSelectedElement);
159
- if (focusIndex === -1) focusIndex = treeItems.findIndex(this.isFocusableElement);
160
- if (focusIndex !== -1) return treeItems[focusIndex];
161
- return null;
63
+ static focusItem(el) {
64
+ el.focusable = true;
65
+ el.focus();
162
66
  }
163
- /** checks if there are any nested tree items */
164
- checkForNestedItems() {
165
- return this.slottedTreeItems.some((node) => {
166
- return isTreeItemElement(node) && node.querySelector("[data-vvd-component='tree-item']");
167
- });
168
- }
169
- getVisibleNodes() {
170
- return getDisplayedNodes(this, "[data-vvd-component='tree-item']");
67
+ /**
68
+ * Gets number of children
69
+ *
70
+ * @internal
71
+ */
72
+ childItemLength() {
73
+ return this.childItems.filter((item) => {
74
+ return isTreeItemElement(item);
75
+ }).length;
171
76
  }
172
77
  };
173
- __decorate([attr({ attribute: "render-collapsed-nodes" })], TreeView.prototype, "renderCollapsedNodes", void 0);
174
- __decorate([observable], TreeView.prototype, "currentSelected", void 0);
175
- __decorate([observable], TreeView.prototype, "slottedTreeItems", void 0);
78
+ __decorate([attr], TreeItem.prototype, "text", void 0);
79
+ __decorate([attr({ mode: "boolean" })], TreeItem.prototype, "expanded", void 0);
80
+ __decorate([attr({ mode: "boolean" })], TreeItem.prototype, "selected", void 0);
81
+ __decorate([attr({ mode: "boolean" })], TreeItem.prototype, "disabled", void 0);
82
+ __decorate([observable], TreeItem.prototype, "focusable", void 0);
83
+ __decorate([observable], TreeItem.prototype, "childItems", void 0);
84
+ __decorate([observable], TreeItem.prototype, "items", void 0);
85
+ __decorate([observable], TreeItem.prototype, "nested", void 0);
86
+ __decorate([observable], TreeItem.prototype, "renderCollapsedChildren", void 0);
176
87
  //#endregion
177
- //#region src/lib/tree-view/tree-view.template.ts
178
- var getClasses = (_) => classNames("control");
88
+ //#region src/lib/tree-item/tree-item.template.ts
89
+ var expandCollapseButton = (context) => {
90
+ const iconTag = context.tagFor(Icon);
91
+ return html`
92
+ <div aria-hidden="true"
93
+ class="expandCollapseButton"
94
+ @click="${(x, c) => x.handleExpandCollapseButtonClick(c.event)}"
95
+ ${ref("expandCollapseButton")}
96
+ >
97
+ <${iconTag} class="expandCollapseIcon" name="${(x) => x.expanded ? "chevron-down-line" : "chevron-right-line"}"></${iconTag}>
98
+ </div>`;
99
+ };
100
+ var TreeItemTemplate = (context) => {
101
+ const affixIconTemplate = affixIconTemplateFactory(context);
102
+ const treeItemTagName = context.tagFor(TreeItem, true);
103
+ return html` <template
104
+ slot="${(x) => x.isNestedItem() ? "item" : void 0}"
105
+ tabindex="-1"
106
+ ${applyHostSemantics({
107
+ role: "treeitem",
108
+ ariaExpanded: (x) => x.childItems && x.childItems.length > 0 ? x.expanded : void 0,
109
+ ariaSelected: (x) => x.selected,
110
+ ariaDisabled: (x) => x.disabled
111
+ })}
112
+ @focusin="${(x, c) => x.handleFocus(c.event)}"
113
+ @focusout="${(x, c) => x.handleBlur(c.event)}"
114
+ ${children({
115
+ property: "childItems",
116
+ filter: elements(treeItemTagName)
117
+ })}
118
+ >
119
+ <div
120
+ class="${(x) => classNames("control", ["disabled", x.disabled], ["selected", x.selected])}"
121
+ >
122
+ ${when((x) => x.childItems && x.childItems.length > 0, expandCollapseButton(context))}
123
+ ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
124
+ ${(x) => x.text}
125
+ </div>
126
+ ${when((x) => x.childItems && x.childItems.length > 0 && x.expanded, html` <div role="group" class="items">
127
+ <slot name="item" ${slotted("items")}></slot>
128
+ </div>`)}
129
+ </template>`;
130
+ };
179
131
  //#endregion
180
- //#region src/lib/tree-view/definition.ts
132
+ //#region src/lib/tree-item/definition.ts
181
133
  /** @internal */
182
- var treeViewDefinition = defineVividComponent("tree-view", TreeView, html` <template
183
- ${ref("treeView")}
184
- ${applyHostSemantics({ role: "tree" })}
185
- @keydown="${(x, c) => x.handleKeyDown(c.event)}"
186
- @focusin="${(x, c) => x.handleFocus(c.event)}"
187
- @focusout="${(x, c) => x.handleBlur(c.event)}"
188
- @click="${(x, c) => x.handleClick(c.event)}"
189
- @selected-change="${(x, c) => x.handleSelectedChange(c.event)}"
190
- >
191
- <div class="${getClasses}">
192
- <slot ${slotted("slottedTreeItems")}></slot>
193
- </div>
194
- </template>`, [treeItemDefinition], { styles: tree_view_default });
134
+ var treeItemDefinition = defineVividComponent("tree-item", TreeItem, TreeItemTemplate, [iconDefinition], { styles: tree_item_default });
195
135
  /**
196
- * Registers the tree-view element with the design system.
136
+ * Registers the tree-item element with the design system.
197
137
  *
198
138
  * @param prefix - the prefix to use for the component name
199
139
  */
200
- var registerTreeView = createRegisterFunction(treeViewDefinition);
140
+ var registerTreeItem = createRegisterFunction(treeItemDefinition);
201
141
  //#endregion
202
- export { treeViewDefinition as n, TreeView as r, registerTreeView as t };
142
+ export { isTreeItemElement as i, treeItemDefinition as n, TreeItem as r, registerTreeItem as t };