@ixfx/components 0.2.4 → 0.2.6

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 (718) hide show
  1. package/bundle/index.d.ts +285 -159
  2. package/bundle/index.d.ts.map +1 -1
  3. package/bundle/index.js +3291 -2485
  4. package/bundle/index.js.map +1 -1
  5. package/dist/ac-text.d.ts +96 -0
  6. package/dist/ac-text.d.ts.map +1 -0
  7. package/dist/ac-text.js +484 -0
  8. package/dist/ac-text.js.map +1 -0
  9. package/dist/{button/button-styles.js → button-B9ztaKyl.js} +49 -3
  10. package/dist/button-B9ztaKyl.js.map +1 -0
  11. package/dist/button.d.ts +20 -0
  12. package/dist/button.d.ts.map +1 -0
  13. package/dist/button.js +3 -0
  14. package/dist/checkbox.d.ts +26 -57
  15. package/dist/checkbox.d.ts.map +1 -1
  16. package/dist/checkbox.js +74 -88
  17. package/dist/checkbox.js.map +1 -1
  18. package/dist/chunk-pbuEa-1d.js +13 -0
  19. package/dist/colour-C3MQIjFJ-BJV-QC-3.js +4138 -0
  20. package/dist/colour-C3MQIjFJ-BJV-QC-3.js.map +1 -0
  21. package/dist/colour-picker-BNqDz4wK.js +922 -0
  22. package/dist/colour-picker-BNqDz4wK.js.map +1 -0
  23. package/dist/colour-picker.d.ts +2 -0
  24. package/dist/colour-picker.js +2 -0
  25. package/dist/crumbs.d.ts +91 -0
  26. package/dist/crumbs.d.ts.map +1 -0
  27. package/dist/crumbs.js +789 -0
  28. package/dist/crumbs.js.map +1 -0
  29. package/dist/data-display.d.ts +22 -18
  30. package/dist/data-display.d.ts.map +1 -1
  31. package/dist/data-display.js +81 -108
  32. package/dist/data-display.js.map +1 -1
  33. package/dist/decorate-O4m1U4l3.js +25 -0
  34. package/dist/decorate-O4m1U4l3.js.map +1 -0
  35. package/dist/defaults-FEZaGiYZ.js +38 -0
  36. package/dist/defaults-FEZaGiYZ.js.map +1 -0
  37. package/dist/dist-By5URG0Y.js +1290 -0
  38. package/dist/dist-By5URG0Y.js.map +1 -0
  39. package/dist/dist-D7kJgnSE.js +1039 -0
  40. package/dist/dist-D7kJgnSE.js.map +1 -0
  41. package/dist/editable-label.d.ts +71 -0
  42. package/dist/editable-label.d.ts.map +1 -0
  43. package/dist/editable-label.js +279 -0
  44. package/dist/editable-label.js.map +1 -0
  45. package/dist/hex-editor-2_s0Ua5t.d.ts +130 -0
  46. package/dist/hex-editor-2_s0Ua5t.d.ts.map +1 -0
  47. package/dist/hex-editor-gH3mteMr.js +1147 -0
  48. package/dist/hex-editor-gH3mteMr.js.map +1 -0
  49. package/dist/hex.d.ts +2 -0
  50. package/dist/hex.js +2 -0
  51. package/dist/highlight-CAjwQ4GE.js +50 -0
  52. package/dist/highlight-CAjwQ4GE.js.map +1 -0
  53. package/dist/icon-CYACf6o8.js +100 -0
  54. package/dist/icon-CYACf6o8.js.map +1 -0
  55. package/dist/icon-CeTDJhC7.d.ts +35 -0
  56. package/dist/icon-CeTDJhC7.d.ts.map +1 -0
  57. package/dist/icons.d.ts +3 -0
  58. package/dist/icons.js +9 -0
  59. package/dist/icons.js.map +1 -0
  60. package/dist/incr-search-BZawvrfl.js +311 -0
  61. package/dist/incr-search-BZawvrfl.js.map +1 -0
  62. package/dist/incr-search.d.ts +2 -0
  63. package/dist/incr-search.js +3 -0
  64. package/dist/index-B1hNR7Z9.d.ts +36 -0
  65. package/dist/index-B1hNR7Z9.d.ts.map +1 -0
  66. package/dist/index-CnL9krsH.d.ts +1238 -0
  67. package/dist/index-CnL9krsH.d.ts.map +1 -0
  68. package/dist/index-CwGkb9s1.d.ts +395 -0
  69. package/dist/index-CwGkb9s1.d.ts.map +1 -0
  70. package/dist/index-DrQjA8Gs.d.ts +22 -0
  71. package/dist/index-DrQjA8Gs.d.ts.map +1 -0
  72. package/dist/index-V2cJorlA.d.ts +160 -0
  73. package/dist/index-V2cJorlA.d.ts.map +1 -0
  74. package/dist/index-kY5gxbkI.d.ts +182 -0
  75. package/dist/index-kY5gxbkI.d.ts.map +1 -0
  76. package/dist/index.d.ts +540 -53
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +6519 -54
  79. package/dist/index.js.map +1 -1
  80. package/dist/interaction-CQDQJf2Q.js +1 -0
  81. package/dist/keyboard-De_vOHLg.js +20 -0
  82. package/dist/keyboard-De_vOHLg.js.map +1 -0
  83. package/dist/labelled-input-base-BvgH7ldm.js +155 -0
  84. package/dist/labelled-input-base-BvgH7ldm.js.map +1 -0
  85. package/dist/labelled-input-base-D-Y7agky.d.ts +42 -0
  86. package/dist/labelled-input-base-D-Y7agky.d.ts.map +1 -0
  87. package/dist/labelled-radial-input.d.ts +33 -0
  88. package/dist/labelled-radial-input.d.ts.map +1 -0
  89. package/dist/labelled-radial-input.js +188 -0
  90. package/dist/labelled-radial-input.js.map +1 -0
  91. package/dist/labelled-range-input.d.ts +2 -0
  92. package/dist/{labelled-range-input/labelled-range-input.js → labelled-range-input.js} +40 -45
  93. package/dist/labelled-range-input.js.map +1 -0
  94. package/dist/led.d.ts +20 -16
  95. package/dist/led.d.ts.map +1 -1
  96. package/dist/led.js +71 -79
  97. package/dist/led.js.map +1 -1
  98. package/dist/menu-C3eANB5M.js +813 -0
  99. package/dist/menu-C3eANB5M.js.map +1 -0
  100. package/dist/menu-item-6IU5weHi.js +766 -0
  101. package/dist/menu-item-6IU5weHi.js.map +1 -0
  102. package/dist/menu-item-ClQF2DKN.d.ts +127 -0
  103. package/dist/menu-item-ClQF2DKN.d.ts.map +1 -0
  104. package/dist/menu.d.ts +3 -0
  105. package/dist/menu.js +3 -0
  106. package/dist/miller.d.ts +323 -0
  107. package/dist/miller.d.ts.map +1 -0
  108. package/dist/miller.js +1343 -0
  109. package/dist/miller.js.map +1 -0
  110. package/dist/narrowed-text.d.ts +71 -0
  111. package/dist/narrowed-text.d.ts.map +1 -0
  112. package/dist/narrowed-text.js +571 -0
  113. package/dist/narrowed-text.js.map +1 -0
  114. package/dist/panel.d.ts +42 -0
  115. package/dist/panel.d.ts.map +1 -0
  116. package/dist/{panel/panel.js → panel.js} +82 -91
  117. package/dist/panel.js.map +1 -0
  118. package/dist/plots.d.ts +2 -0
  119. package/dist/plots.js +2 -0
  120. package/dist/polar-pad.d.ts +66 -0
  121. package/dist/polar-pad.d.ts.map +1 -0
  122. package/dist/polar-pad.js +537 -0
  123. package/dist/polar-pad.js.map +1 -0
  124. package/dist/popup-Ddx9LCzY.js +24 -0
  125. package/dist/popup-Ddx9LCzY.js.map +1 -0
  126. package/dist/prominence-CreDBdCs.js +98 -0
  127. package/dist/prominence-CreDBdCs.js.map +1 -0
  128. package/dist/radial-input-Dbc6fgCK.js +849 -0
  129. package/dist/radial-input-Dbc6fgCK.js.map +1 -0
  130. package/dist/radial-input-LUSBEycd.d.ts +69 -0
  131. package/dist/radial-input-LUSBEycd.d.ts.map +1 -0
  132. package/dist/radial-input.d.ts +2 -0
  133. package/dist/radial-input.js +2 -0
  134. package/dist/range-input.d.ts +42 -0
  135. package/dist/range-input.d.ts.map +1 -0
  136. package/dist/{range-input/range-input.js → range-input.js} +155 -168
  137. package/dist/range-input.js.map +1 -0
  138. package/dist/range.d.ts +27 -0
  139. package/dist/range.d.ts.map +1 -0
  140. package/dist/range.js +136 -0
  141. package/dist/range.js.map +1 -0
  142. package/dist/registry-CZEB1YI9.js +21 -0
  143. package/dist/registry-CZEB1YI9.js.map +1 -0
  144. package/dist/selecthorizontal.d.ts +12 -8
  145. package/dist/selecthorizontal.d.ts.map +1 -1
  146. package/dist/selecthorizontal.js +20 -24
  147. package/dist/selecthorizontal.js.map +1 -1
  148. package/dist/snap-container.d.ts +49 -0
  149. package/dist/snap-container.d.ts.map +1 -0
  150. package/dist/snap-container.js +297 -0
  151. package/dist/snap-container.js.map +1 -0
  152. package/dist/{split-layout/split-layout.d.ts → split-layout.d.ts} +29 -25
  153. package/dist/split-layout.d.ts.map +1 -0
  154. package/dist/split-layout.js +545 -0
  155. package/dist/split-layout.js.map +1 -0
  156. package/dist/style.css +133 -0
  157. package/dist/swipe.d.ts +48 -0
  158. package/dist/swipe.d.ts.map +1 -0
  159. package/dist/swipe.js +204 -0
  160. package/dist/swipe.js.map +1 -0
  161. package/dist/tab-list-BnqISNvO.d.ts +65 -0
  162. package/dist/tab-list-BnqISNvO.d.ts.map +1 -0
  163. package/dist/tabs.d.ts +2 -0
  164. package/dist/tabs.js +203 -0
  165. package/dist/tabs.js.map +1 -0
  166. package/dist/tickled-controller-Cq1Va0rR.d.ts +218 -0
  167. package/dist/tickled-controller-Cq1Va0rR.d.ts.map +1 -0
  168. package/dist/tickled-styles-Bg3QbcrD.js +327 -0
  169. package/dist/tickled-styles-Bg3QbcrD.js.map +1 -0
  170. package/dist/timeline-B62Sz6J_.js +1748 -0
  171. package/dist/timeline-B62Sz6J_.js.map +1 -0
  172. package/dist/timeline.d.ts +2 -0
  173. package/dist/timeline.js +2 -0
  174. package/dist/tooltip-CwGfb4lp.d.ts +25 -0
  175. package/dist/tooltip-CwGfb4lp.d.ts.map +1 -0
  176. package/dist/{styles/tooltip.js → tooltip-DMxmBNky.js} +6 -2
  177. package/dist/tooltip-DMxmBNky.js.map +1 -0
  178. package/dist/tree-component-CQpoPo4s.d.ts +326 -0
  179. package/dist/tree-component-CQpoPo4s.d.ts.map +1 -0
  180. package/dist/tree-data-model-DGvRVOFY.js +190 -0
  181. package/dist/tree-data-model-DGvRVOFY.js.map +1 -0
  182. package/dist/tree.d.ts +99 -0
  183. package/dist/tree.d.ts.map +1 -0
  184. package/dist/tree.js +1144 -0
  185. package/dist/tree.js.map +1 -0
  186. package/dist/types-BKaqnpwx.d.ts +8 -0
  187. package/dist/types-BKaqnpwx.d.ts.map +1 -0
  188. package/dist/xy-axis-C7fNxDwY.js +6243 -0
  189. package/dist/xy-axis-C7fNxDwY.js.map +1 -0
  190. package/dist/xy-axis-D9uwpGTT.d.ts +140 -0
  191. package/dist/xy-axis-D9uwpGTT.d.ts.map +1 -0
  192. package/dist/xy-pad.d.ts +73 -110
  193. package/dist/xy-pad.d.ts.map +1 -1
  194. package/dist/xy-pad.js +300 -320
  195. package/dist/xy-pad.js.map +1 -1
  196. package/package.json +24 -28
  197. package/dist/ac-text/ac-text.d.ts +0 -99
  198. package/dist/ac-text/ac-text.d.ts.map +0 -1
  199. package/dist/ac-text/ac-text.js +0 -571
  200. package/dist/ac-text/ac-text.js.map +0 -1
  201. package/dist/button/button-styles.d.ts +0 -2
  202. package/dist/button/button-styles.d.ts.map +0 -1
  203. package/dist/button/button-styles.js.map +0 -1
  204. package/dist/button/button.d.ts +0 -16
  205. package/dist/button/button.d.ts.map +0 -1
  206. package/dist/button/button.js +0 -58
  207. package/dist/button/button.js.map +0 -1
  208. package/dist/button/radio-group.d.ts +0 -44
  209. package/dist/button/radio-group.d.ts.map +0 -1
  210. package/dist/button/radio-group.js +0 -385
  211. package/dist/button/radio-group.js.map +0 -1
  212. package/dist/button/split-button.d.ts +0 -59
  213. package/dist/button/split-button.d.ts.map +0 -1
  214. package/dist/button/split-button.js +0 -480
  215. package/dist/button/split-button.js.map +0 -1
  216. package/dist/button/types.d.ts +0 -18
  217. package/dist/button/types.d.ts.map +0 -1
  218. package/dist/button/types.js +0 -2
  219. package/dist/button/types.js.map +0 -1
  220. package/dist/colour-picker/colour-picker-popup.d.ts +0 -102
  221. package/dist/colour-picker/colour-picker-popup.d.ts.map +0 -1
  222. package/dist/colour-picker/colour-picker-popup.js +0 -399
  223. package/dist/colour-picker/colour-picker-popup.js.map +0 -1
  224. package/dist/colour-picker/colour-picker.d.ts +0 -100
  225. package/dist/colour-picker/colour-picker.d.ts.map +0 -1
  226. package/dist/colour-picker/colour-picker.js +0 -567
  227. package/dist/colour-picker/colour-picker.js.map +0 -1
  228. package/dist/colour-picker/index.d.ts +0 -4
  229. package/dist/colour-picker/index.d.ts.map +0 -1
  230. package/dist/colour-picker/index.js +0 -3
  231. package/dist/colour-picker/index.js.map +0 -1
  232. package/dist/colour-picker/styles.d.ts +0 -2
  233. package/dist/colour-picker/styles.d.ts.map +0 -1
  234. package/dist/colour-picker/styles.js +0 -139
  235. package/dist/colour-picker/styles.js.map +0 -1
  236. package/dist/colour-picker/types.d.ts +0 -33
  237. package/dist/colour-picker/types.d.ts.map +0 -1
  238. package/dist/colour-picker/types.js +0 -2
  239. package/dist/colour-picker/types.js.map +0 -1
  240. package/dist/colour-picker/util.d.ts +0 -15
  241. package/dist/colour-picker/util.d.ts.map +0 -1
  242. package/dist/colour-picker/util.js +0 -35
  243. package/dist/colour-picker/util.js.map +0 -1
  244. package/dist/common/searchable.d.ts +0 -9
  245. package/dist/common/searchable.d.ts.map +0 -1
  246. package/dist/common/searchable.js +0 -9
  247. package/dist/common/searchable.js.map +0 -1
  248. package/dist/common/tree-component.d.ts +0 -172
  249. package/dist/common/tree-component.d.ts.map +0 -1
  250. package/dist/common/tree-component.js +0 -8
  251. package/dist/common/tree-component.js.map +0 -1
  252. package/dist/common/tree-data-model.d.ts +0 -100
  253. package/dist/common/tree-data-model.d.ts.map +0 -1
  254. package/dist/common/tree-data-model.js +0 -207
  255. package/dist/common/tree-data-model.js.map +0 -1
  256. package/dist/common/tree-item.d.ts +0 -7
  257. package/dist/common/tree-item.d.ts.map +0 -1
  258. package/dist/common/tree-item.js +0 -2
  259. package/dist/common/tree-item.js.map +0 -1
  260. package/dist/common/types.d.ts +0 -69
  261. package/dist/common/types.d.ts.map +0 -1
  262. package/dist/common/types.js +0 -6
  263. package/dist/common/types.js.map +0 -1
  264. package/dist/crumbs/crumb-navigation.d.ts +0 -96
  265. package/dist/crumbs/crumb-navigation.d.ts.map +0 -1
  266. package/dist/crumbs/crumb-navigation.js +0 -911
  267. package/dist/crumbs/crumb-navigation.js.map +0 -1
  268. package/dist/crumbs/crumb-path-controller.d.ts +0 -18
  269. package/dist/crumbs/crumb-path-controller.d.ts.map +0 -1
  270. package/dist/crumbs/crumb-path-controller.js +0 -81
  271. package/dist/crumbs/crumb-path-controller.js.map +0 -1
  272. package/dist/crumbs/crumb-path.d.ts +0 -65
  273. package/dist/crumbs/crumb-path.d.ts.map +0 -1
  274. package/dist/crumbs/crumb-path.js +0 -691
  275. package/dist/crumbs/crumb-path.js.map +0 -1
  276. package/dist/editable-label/editable-label.d.ts +0 -98
  277. package/dist/editable-label/editable-label.d.ts.map +0 -1
  278. package/dist/editable-label/editable-label.js +0 -348
  279. package/dist/editable-label/editable-label.js.map +0 -1
  280. package/dist/editable-label/editable-number.d.ts +0 -96
  281. package/dist/editable-label/editable-number.d.ts.map +0 -1
  282. package/dist/editable-label/editable-number.js +0 -702
  283. package/dist/editable-label/editable-number.js.map +0 -1
  284. package/dist/hex/colour.d.ts +0 -6
  285. package/dist/hex/colour.d.ts.map +0 -1
  286. package/dist/hex/colour.js +0 -33
  287. package/dist/hex/colour.js.map +0 -1
  288. package/dist/hex/data.d.ts +0 -18
  289. package/dist/hex/data.d.ts.map +0 -1
  290. package/dist/hex/data.js +0 -61
  291. package/dist/hex/data.js.map +0 -1
  292. package/dist/hex/diff.d.ts +0 -14
  293. package/dist/hex/diff.d.ts.map +0 -1
  294. package/dist/hex/diff.js +0 -31
  295. package/dist/hex/diff.js.map +0 -1
  296. package/dist/hex/hex-editor.d.ts +0 -101
  297. package/dist/hex/hex-editor.d.ts.map +0 -1
  298. package/dist/hex/hex-editor.js +0 -894
  299. package/dist/hex/hex-editor.js.map +0 -1
  300. package/dist/hex/selection.d.ts +0 -11
  301. package/dist/hex/selection.d.ts.map +0 -1
  302. package/dist/hex/selection.js +0 -218
  303. package/dist/hex/selection.js.map +0 -1
  304. package/dist/hex/types.d.ts +0 -34
  305. package/dist/hex/types.d.ts.map +0 -1
  306. package/dist/hex/types.js +0 -4
  307. package/dist/hex/types.js.map +0 -1
  308. package/dist/icons/defaults.d.ts +0 -27
  309. package/dist/icons/defaults.d.ts.map +0 -1
  310. package/dist/icons/defaults.js +0 -34
  311. package/dist/icons/defaults.js.map +0 -1
  312. package/dist/icons/icon.d.ts +0 -31
  313. package/dist/icons/icon.d.ts.map +0 -1
  314. package/dist/icons/icon.js +0 -125
  315. package/dist/icons/icon.js.map +0 -1
  316. package/dist/icons/index.d.ts +0 -5
  317. package/dist/icons/index.d.ts.map +0 -1
  318. package/dist/icons/index.js +0 -6
  319. package/dist/icons/index.js.map +0 -1
  320. package/dist/icons/registry.d.ts +0 -11
  321. package/dist/icons/registry.d.ts.map +0 -1
  322. package/dist/icons/registry.js +0 -17
  323. package/dist/icons/registry.js.map +0 -1
  324. package/dist/incr-search/ac-adapter.d.ts +0 -18
  325. package/dist/incr-search/ac-adapter.d.ts.map +0 -1
  326. package/dist/incr-search/ac-adapter.js +0 -29
  327. package/dist/incr-search/ac-adapter.js.map +0 -1
  328. package/dist/incr-search/controller-miller.d.ts +0 -9
  329. package/dist/incr-search/controller-miller.d.ts.map +0 -1
  330. package/dist/incr-search/controller-miller.js +0 -8
  331. package/dist/incr-search/controller-miller.js.map +0 -1
  332. package/dist/incr-search/controller-tree.d.ts +0 -55
  333. package/dist/incr-search/controller-tree.d.ts.map +0 -1
  334. package/dist/incr-search/controller-tree.js +0 -106
  335. package/dist/incr-search/controller-tree.js.map +0 -1
  336. package/dist/incr-search/element-search.d.ts +0 -15
  337. package/dist/incr-search/element-search.d.ts.map +0 -1
  338. package/dist/incr-search/element-search.js +0 -82
  339. package/dist/incr-search/element-search.js.map +0 -1
  340. package/dist/incr-search/fuzzy.d.ts +0 -3
  341. package/dist/incr-search/fuzzy.d.ts.map +0 -1
  342. package/dist/incr-search/fuzzy.js +0 -37
  343. package/dist/incr-search/fuzzy.js.map +0 -1
  344. package/dist/incr-search/highlight.d.ts +0 -5
  345. package/dist/incr-search/highlight.d.ts.map +0 -1
  346. package/dist/incr-search/highlight.js +0 -54
  347. package/dist/incr-search/highlight.js.map +0 -1
  348. package/dist/incr-search/incr-search.d.ts +0 -3
  349. package/dist/incr-search/incr-search.d.ts.map +0 -1
  350. package/dist/incr-search/incr-search.js +0 -73
  351. package/dist/incr-search/incr-search.js.map +0 -1
  352. package/dist/incr-search/index.d.ts +0 -12
  353. package/dist/incr-search/index.d.ts.map +0 -1
  354. package/dist/incr-search/index.js +0 -8
  355. package/dist/incr-search/index.js.map +0 -1
  356. package/dist/incr-search/types.d.ts +0 -59
  357. package/dist/incr-search/types.d.ts.map +0 -1
  358. package/dist/incr-search/types.js +0 -2
  359. package/dist/incr-search/types.js.map +0 -1
  360. package/dist/interaction/index.d.ts +0 -10
  361. package/dist/interaction/index.d.ts.map +0 -1
  362. package/dist/interaction/index.js +0 -10
  363. package/dist/interaction/index.js.map +0 -1
  364. package/dist/interaction/tickled-controller.d.ts +0 -186
  365. package/dist/interaction/tickled-controller.d.ts.map +0 -1
  366. package/dist/interaction/tickled-controller.js +0 -256
  367. package/dist/interaction/tickled-controller.js.map +0 -1
  368. package/dist/interaction/tickled-styles.d.ts +0 -53
  369. package/dist/interaction/tickled-styles.d.ts.map +0 -1
  370. package/dist/interaction/tickled-styles.js +0 -106
  371. package/dist/interaction/tickled-styles.js.map +0 -1
  372. package/dist/interaction/tree-keyboard-controller.d.ts +0 -30
  373. package/dist/interaction/tree-keyboard-controller.d.ts.map +0 -1
  374. package/dist/interaction/tree-keyboard-controller.js +0 -105
  375. package/dist/interaction/tree-keyboard-controller.js.map +0 -1
  376. package/dist/keyboard.d.ts +0 -16
  377. package/dist/keyboard.d.ts.map +0 -1
  378. package/dist/keyboard.js +0 -22
  379. package/dist/keyboard.js.map +0 -1
  380. package/dist/labelled-radial-input/index.d.ts +0 -2
  381. package/dist/labelled-radial-input/index.d.ts.map +0 -1
  382. package/dist/labelled-radial-input/index.js +0 -2
  383. package/dist/labelled-radial-input/index.js.map +0 -1
  384. package/dist/labelled-radial-input/labelled-radial-input.d.ts +0 -77
  385. package/dist/labelled-radial-input/labelled-radial-input.d.ts.map +0 -1
  386. package/dist/labelled-radial-input/labelled-radial-input.js +0 -214
  387. package/dist/labelled-radial-input/labelled-radial-input.js.map +0 -1
  388. package/dist/labelled-range-input/index.d.ts +0 -2
  389. package/dist/labelled-range-input/index.d.ts.map +0 -1
  390. package/dist/labelled-range-input/index.js +0 -2
  391. package/dist/labelled-range-input/index.js.map +0 -1
  392. package/dist/labelled-range-input/labelled-range-input.d.ts +0 -80
  393. package/dist/labelled-range-input/labelled-range-input.d.ts.map +0 -1
  394. package/dist/labelled-range-input/labelled-range-input.js.map +0 -1
  395. package/dist/menu/index.d.ts +0 -14
  396. package/dist/menu/index.d.ts.map +0 -1
  397. package/dist/menu/index.js +0 -13
  398. package/dist/menu/index.js.map +0 -1
  399. package/dist/menu/menu-bar.d.ts +0 -23
  400. package/dist/menu/menu-bar.d.ts.map +0 -1
  401. package/dist/menu/menu-bar.js +0 -110
  402. package/dist/menu/menu-bar.js.map +0 -1
  403. package/dist/menu/menu-check-item.d.ts +0 -33
  404. package/dist/menu/menu-check-item.d.ts.map +0 -1
  405. package/dist/menu/menu-check-item.js +0 -175
  406. package/dist/menu/menu-check-item.js.map +0 -1
  407. package/dist/menu/menu-command-controller.d.ts +0 -14
  408. package/dist/menu/menu-command-controller.d.ts.map +0 -1
  409. package/dist/menu/menu-command-controller.js +0 -22
  410. package/dist/menu/menu-command-controller.js.map +0 -1
  411. package/dist/menu/menu-container.d.ts +0 -36
  412. package/dist/menu/menu-container.d.ts.map +0 -1
  413. package/dist/menu/menu-container.js +0 -351
  414. package/dist/menu/menu-container.js.map +0 -1
  415. package/dist/menu/menu-from-tree.d.ts +0 -17
  416. package/dist/menu/menu-from-tree.d.ts.map +0 -1
  417. package/dist/menu/menu-from-tree.js +0 -103
  418. package/dist/menu/menu-from-tree.js.map +0 -1
  419. package/dist/menu/menu-header.d.ts +0 -12
  420. package/dist/menu/menu-header.d.ts.map +0 -1
  421. package/dist/menu/menu-header.js +0 -36
  422. package/dist/menu/menu-header.js.map +0 -1
  423. package/dist/menu/menu-item.d.ts +0 -41
  424. package/dist/menu/menu-item.d.ts.map +0 -1
  425. package/dist/menu/menu-item.js +0 -240
  426. package/dist/menu/menu-item.js.map +0 -1
  427. package/dist/menu/menu-radio-group.d.ts +0 -24
  428. package/dist/menu/menu-radio-group.d.ts.map +0 -1
  429. package/dist/menu/menu-radio-group.js +0 -71
  430. package/dist/menu/menu-radio-group.js.map +0 -1
  431. package/dist/menu/menu-radio-item.d.ts +0 -22
  432. package/dist/menu/menu-radio-item.d.ts.map +0 -1
  433. package/dist/menu/menu-radio-item.js +0 -116
  434. package/dist/menu/menu-radio-item.js.map +0 -1
  435. package/dist/menu/menu-separator.d.ts +0 -11
  436. package/dist/menu/menu-separator.d.ts.map +0 -1
  437. package/dist/menu/menu-separator.js +0 -29
  438. package/dist/menu/menu-separator.js.map +0 -1
  439. package/dist/menu/menu-sub-trigger.d.ts +0 -46
  440. package/dist/menu/menu-sub-trigger.d.ts.map +0 -1
  441. package/dist/menu/menu-sub-trigger.js +0 -302
  442. package/dist/menu/menu-sub-trigger.js.map +0 -1
  443. package/dist/menu/menu-trigger.d.ts +0 -57
  444. package/dist/menu/menu-trigger.d.ts.map +0 -1
  445. package/dist/menu/menu-trigger.js +0 -351
  446. package/dist/menu/menu-trigger.js.map +0 -1
  447. package/dist/miller/index.d.ts +0 -5
  448. package/dist/miller/index.d.ts.map +0 -1
  449. package/dist/miller/index.js +0 -5
  450. package/dist/miller/index.js.map +0 -1
  451. package/dist/miller/miller-base.d.ts +0 -184
  452. package/dist/miller/miller-base.d.ts.map +0 -1
  453. package/dist/miller/miller-base.js +0 -1249
  454. package/dist/miller/miller-base.js.map +0 -1
  455. package/dist/miller/miller-list.d.ts +0 -30
  456. package/dist/miller/miller-list.d.ts.map +0 -1
  457. package/dist/miller/miller-list.js +0 -192
  458. package/dist/miller/miller-list.js.map +0 -1
  459. package/dist/miller/miller-tree-controller.d.ts +0 -58
  460. package/dist/miller/miller-tree-controller.d.ts.map +0 -1
  461. package/dist/miller/miller-tree-controller.js +0 -134
  462. package/dist/miller/miller-tree-controller.js.map +0 -1
  463. package/dist/miller/types.d.ts +0 -63
  464. package/dist/miller/types.d.ts.map +0 -1
  465. package/dist/miller/types.js +0 -6
  466. package/dist/miller/types.js.map +0 -1
  467. package/dist/mixins/labelled-input-base.d.ts +0 -38
  468. package/dist/mixins/labelled-input-base.d.ts.map +0 -1
  469. package/dist/mixins/labelled-input-base.js +0 -171
  470. package/dist/mixins/labelled-input-base.js.map +0 -1
  471. package/dist/mixins/labelled-input-util.d.ts +0 -3
  472. package/dist/mixins/labelled-input-util.d.ts.map +0 -1
  473. package/dist/mixins/labelled-input-util.js +0 -10
  474. package/dist/mixins/labelled-input-util.js.map +0 -1
  475. package/dist/my-element.d.ts +0 -14
  476. package/dist/my-element.d.ts.map +0 -1
  477. package/dist/my-element.js +0 -44
  478. package/dist/my-element.js.map +0 -1
  479. package/dist/narrowed-text/index.d.ts +0 -3
  480. package/dist/narrowed-text/index.d.ts.map +0 -1
  481. package/dist/narrowed-text/index.js +0 -3
  482. package/dist/narrowed-text/index.js.map +0 -1
  483. package/dist/narrowed-text/narrowed-text.d.ts +0 -48
  484. package/dist/narrowed-text/narrowed-text.d.ts.map +0 -1
  485. package/dist/narrowed-text/narrowed-text.js +0 -668
  486. package/dist/narrowed-text/narrowed-text.js.map +0 -1
  487. package/dist/narrowed-text/types.d.ts +0 -20
  488. package/dist/narrowed-text/types.d.ts.map +0 -1
  489. package/dist/narrowed-text/types.js +0 -2
  490. package/dist/narrowed-text/types.js.map +0 -1
  491. package/dist/panel/panel-group.d.ts +0 -23
  492. package/dist/panel/panel-group.d.ts.map +0 -1
  493. package/dist/panel/panel-group.js +0 -109
  494. package/dist/panel/panel-group.js.map +0 -1
  495. package/dist/panel/panel.d.ts +0 -39
  496. package/dist/panel/panel.d.ts.map +0 -1
  497. package/dist/panel/panel.js.map +0 -1
  498. package/dist/plots/colour-map.d.ts +0 -31
  499. package/dist/plots/colour-map.d.ts.map +0 -1
  500. package/dist/plots/colour-map.js +0 -133
  501. package/dist/plots/colour-map.js.map +0 -1
  502. package/dist/plots/data.d.ts +0 -27
  503. package/dist/plots/data.d.ts.map +0 -1
  504. package/dist/plots/data.js +0 -47
  505. package/dist/plots/data.js.map +0 -1
  506. package/dist/plots/single-axis.d.ts +0 -41
  507. package/dist/plots/single-axis.d.ts.map +0 -1
  508. package/dist/plots/single-axis.js +0 -428
  509. package/dist/plots/single-axis.js.map +0 -1
  510. package/dist/plots/svg-utils.d.ts +0 -12
  511. package/dist/plots/svg-utils.d.ts.map +0 -1
  512. package/dist/plots/svg-utils.js +0 -64
  513. package/dist/plots/svg-utils.js.map +0 -1
  514. package/dist/plots/xy-axis.d.ts +0 -42
  515. package/dist/plots/xy-axis.d.ts.map +0 -1
  516. package/dist/plots/xy-axis.js +0 -307
  517. package/dist/plots/xy-axis.js.map +0 -1
  518. package/dist/polar-pad/polar-pad.d.ts +0 -132
  519. package/dist/polar-pad/polar-pad.d.ts.map +0 -1
  520. package/dist/polar-pad/polar-pad.js +0 -598
  521. package/dist/polar-pad/polar-pad.js.map +0 -1
  522. package/dist/radial-input/radial-input.d.ts +0 -45
  523. package/dist/radial-input/radial-input.d.ts.map +0 -1
  524. package/dist/radial-input/radial-input.js +0 -692
  525. package/dist/radial-input/radial-input.js.map +0 -1
  526. package/dist/radial-input/svg-utils.d.ts +0 -147
  527. package/dist/radial-input/svg-utils.d.ts.map +0 -1
  528. package/dist/radial-input/svg-utils.js +0 -346
  529. package/dist/radial-input/svg-utils.js.map +0 -1
  530. package/dist/radial-input/types.d.ts +0 -25
  531. package/dist/radial-input/types.d.ts.map +0 -1
  532. package/dist/radial-input/types.js +0 -5
  533. package/dist/radial-input/types.js.map +0 -1
  534. package/dist/range/range-multi.d.ts +0 -62
  535. package/dist/range/range-multi.d.ts.map +0 -1
  536. package/dist/range/range-multi.js +0 -652
  537. package/dist/range/range-multi.js.map +0 -1
  538. package/dist/range/range.d.ts +0 -23
  539. package/dist/range/range.d.ts.map +0 -1
  540. package/dist/range/range.js +0 -153
  541. package/dist/range/range.js.map +0 -1
  542. package/dist/range-input/index.d.ts +0 -2
  543. package/dist/range-input/index.d.ts.map +0 -1
  544. package/dist/range-input/index.js +0 -2
  545. package/dist/range-input/index.js.map +0 -1
  546. package/dist/range-input/range-input.d.ts +0 -92
  547. package/dist/range-input/range-input.d.ts.map +0 -1
  548. package/dist/range-input/range-input.js.map +0 -1
  549. package/dist/snap-container/snap-container.d.ts +0 -45
  550. package/dist/snap-container/snap-container.d.ts.map +0 -1
  551. package/dist/snap-container/snap-container.js +0 -352
  552. package/dist/snap-container/snap-container.js.map +0 -1
  553. package/dist/split-layout/split-layout.d.ts.map +0 -1
  554. package/dist/split-layout/split-layout.js +0 -674
  555. package/dist/split-layout/split-layout.js.map +0 -1
  556. package/dist/styles/popup.d.ts +0 -11
  557. package/dist/styles/popup.d.ts.map +0 -1
  558. package/dist/styles/popup.js +0 -20
  559. package/dist/styles/popup.js.map +0 -1
  560. package/dist/styles/prominence.d.ts +0 -58
  561. package/dist/styles/prominence.d.ts.map +0 -1
  562. package/dist/styles/prominence.js +0 -94
  563. package/dist/styles/prominence.js.map +0 -1
  564. package/dist/styles/tooltip.d.ts +0 -2
  565. package/dist/styles/tooltip.d.ts.map +0 -1
  566. package/dist/styles/tooltip.js.map +0 -1
  567. package/dist/svg-edit-label.d.ts +0 -2
  568. package/dist/svg-edit-label.d.ts.map +0 -1
  569. package/dist/svg-edit-label.js +0 -110
  570. package/dist/svg-edit-label.js.map +0 -1
  571. package/dist/swipe/index.d.ts +0 -2
  572. package/dist/swipe/index.d.ts.map +0 -1
  573. package/dist/swipe/index.js +0 -2
  574. package/dist/swipe/index.js.map +0 -1
  575. package/dist/swipe/swipe.d.ts +0 -65
  576. package/dist/swipe/swipe.d.ts.map +0 -1
  577. package/dist/swipe/swipe.js +0 -229
  578. package/dist/swipe/swipe.js.map +0 -1
  579. package/dist/tabs/tab-layout-item.d.ts +0 -10
  580. package/dist/tabs/tab-layout-item.d.ts.map +0 -1
  581. package/dist/tabs/tab-layout-item.js +0 -20
  582. package/dist/tabs/tab-layout-item.js.map +0 -1
  583. package/dist/tabs/tab-layout.d.ts +0 -10
  584. package/dist/tabs/tab-layout.d.ts.map +0 -1
  585. package/dist/tabs/tab-layout.js +0 -25
  586. package/dist/tabs/tab-layout.js.map +0 -1
  587. package/dist/tabs/tab-list-item.d.ts +0 -34
  588. package/dist/tabs/tab-list-item.d.ts.map +0 -1
  589. package/dist/tabs/tab-list-item.js +0 -195
  590. package/dist/tabs/tab-list-item.js.map +0 -1
  591. package/dist/tabs/tab-list.d.ts +0 -31
  592. package/dist/tabs/tab-list.d.ts.map +0 -1
  593. package/dist/tabs/tab-list.js +0 -257
  594. package/dist/tabs/tab-list.js.map +0 -1
  595. package/dist/tabs/tab-panel.d.ts +0 -11
  596. package/dist/tabs/tab-panel.d.ts.map +0 -1
  597. package/dist/tabs/tab-panel.js +0 -30
  598. package/dist/tabs/tab-panel.js.map +0 -1
  599. package/dist/tabs/tab-panels.d.ts +0 -30
  600. package/dist/tabs/tab-panels.d.ts.map +0 -1
  601. package/dist/tabs/tab-panels.js +0 -80
  602. package/dist/tabs/tab-panels.js.map +0 -1
  603. package/dist/timeline/index.d.ts +0 -9
  604. package/dist/timeline/index.d.ts.map +0 -1
  605. package/dist/timeline/index.js +0 -8
  606. package/dist/timeline/index.js.map +0 -1
  607. package/dist/timeline/timeline-controller.d.ts +0 -48
  608. package/dist/timeline/timeline-controller.d.ts.map +0 -1
  609. package/dist/timeline/timeline-controller.js +0 -81
  610. package/dist/timeline/timeline-controller.js.map +0 -1
  611. package/dist/timeline/timeline-draw.d.ts +0 -28
  612. package/dist/timeline/timeline-draw.d.ts.map +0 -1
  613. package/dist/timeline/timeline-draw.js +0 -330
  614. package/dist/timeline/timeline-draw.js.map +0 -1
  615. package/dist/timeline/timeline-element.d.ts +0 -140
  616. package/dist/timeline/timeline-element.d.ts.map +0 -1
  617. package/dist/timeline/timeline-element.js +0 -888
  618. package/dist/timeline/timeline-element.js.map +0 -1
  619. package/dist/timeline/timeline-interactions.d.ts +0 -40
  620. package/dist/timeline/timeline-interactions.d.ts.map +0 -1
  621. package/dist/timeline/timeline-interactions.js +0 -393
  622. package/dist/timeline/timeline-interactions.js.map +0 -1
  623. package/dist/timeline/timeline-styles.d.ts +0 -2
  624. package/dist/timeline/timeline-styles.d.ts.map +0 -1
  625. package/dist/timeline/timeline-styles.js +0 -153
  626. package/dist/timeline/timeline-styles.js.map +0 -1
  627. package/dist/timeline/timeline-track-tabs.d.ts +0 -30
  628. package/dist/timeline/timeline-track-tabs.d.ts.map +0 -1
  629. package/dist/timeline/timeline-track-tabs.js +0 -204
  630. package/dist/timeline/timeline-track-tabs.js.map +0 -1
  631. package/dist/timeline/types.d.ts +0 -144
  632. package/dist/timeline/types.d.ts.map +0 -1
  633. package/dist/timeline/types.js +0 -3
  634. package/dist/timeline/types.js.map +0 -1
  635. package/dist/tree/index.d.ts +0 -5
  636. package/dist/tree/index.d.ts.map +0 -1
  637. package/dist/tree/index.js +0 -5
  638. package/dist/tree/index.js.map +0 -1
  639. package/dist/tree/tree-base.d.ts +0 -70
  640. package/dist/tree/tree-base.d.ts.map +0 -1
  641. package/dist/tree/tree-base.js +0 -1028
  642. package/dist/tree/tree-base.js.map +0 -1
  643. package/dist/tree/tree-controller.d.ts +0 -14
  644. package/dist/tree/tree-controller.d.ts.map +0 -1
  645. package/dist/tree/tree-controller.js +0 -96
  646. package/dist/tree/tree-controller.js.map +0 -1
  647. package/dist/tree/tree-list.d.ts +0 -20
  648. package/dist/tree/tree-list.d.ts.map +0 -1
  649. package/dist/tree/tree-list.js +0 -174
  650. package/dist/tree/tree-list.js.map +0 -1
  651. package/dist/tree/types.d.ts +0 -14
  652. package/dist/tree/types.d.ts.map +0 -1
  653. package/dist/tree/types.js +0 -7
  654. package/dist/tree/types.js.map +0 -1
  655. package/dist/util/checkbox.d.ts +0 -2
  656. package/dist/util/checkbox.d.ts.map +0 -1
  657. package/dist/util/checkbox.js +0 -69
  658. package/dist/util/checkbox.js.map +0 -1
  659. package/dist/util/circle-arc.d.ts +0 -34
  660. package/dist/util/circle-arc.d.ts.map +0 -1
  661. package/dist/util/circle-arc.js +0 -85
  662. package/dist/util/circle-arc.js.map +0 -1
  663. package/dist/util/clamp.d.ts +0 -4
  664. package/dist/util/clamp.d.ts.map +0 -1
  665. package/dist/util/clamp.js +0 -23
  666. package/dist/util/clamp.js.map +0 -1
  667. package/dist/util/compare.d.ts +0 -53
  668. package/dist/util/compare.d.ts.map +0 -1
  669. package/dist/util/compare.js +0 -91
  670. package/dist/util/compare.js.map +0 -1
  671. package/dist/util/content-editable.d.ts +0 -2
  672. package/dist/util/content-editable.d.ts.map +0 -1
  673. package/dist/util/content-editable.js +0 -13
  674. package/dist/util/content-editable.js.map +0 -1
  675. package/dist/util/coordinates.d.ts +0 -3
  676. package/dist/util/coordinates.d.ts.map +0 -1
  677. package/dist/util/coordinates.js +0 -11
  678. package/dist/util/coordinates.js.map +0 -1
  679. package/dist/util/drag.d.ts +0 -16
  680. package/dist/util/drag.d.ts.map +0 -1
  681. package/dist/util/drag.js +0 -20
  682. package/dist/util/drag.js.map +0 -1
  683. package/dist/util/is-numeric.d.ts +0 -2
  684. package/dist/util/is-numeric.d.ts.map +0 -1
  685. package/dist/util/is-numeric.js +0 -9
  686. package/dist/util/is-numeric.js.map +0 -1
  687. package/dist/util/key-value.d.ts +0 -5
  688. package/dist/util/key-value.d.ts.map +0 -1
  689. package/dist/util/key-value.js +0 -29
  690. package/dist/util/key-value.js.map +0 -1
  691. package/dist/util/near.d.ts +0 -2
  692. package/dist/util/near.d.ts.map +0 -1
  693. package/dist/util/near.js +0 -6
  694. package/dist/util/near.js.map +0 -1
  695. package/dist/util/primitive-types.d.ts +0 -6
  696. package/dist/util/primitive-types.d.ts.map +0 -1
  697. package/dist/util/primitive-types.js +0 -2
  698. package/dist/util/primitive-types.js.map +0 -1
  699. package/dist/util/svg-editable-text.d.ts +0 -26
  700. package/dist/util/svg-editable-text.d.ts.map +0 -1
  701. package/dist/util/svg-editable-text.js +0 -119
  702. package/dist/util/svg-editable-text.js.map +0 -1
  703. package/dist/util/time.d.ts +0 -2
  704. package/dist/util/time.d.ts.map +0 -1
  705. package/dist/util/time.js +0 -2
  706. package/dist/util/time.js.map +0 -1
  707. package/dist/util/tooltip-controller.d.ts +0 -10
  708. package/dist/util/tooltip-controller.d.ts.map +0 -1
  709. package/dist/util/tooltip-controller.js +0 -237
  710. package/dist/util/tooltip-controller.js.map +0 -1
  711. package/dist/util/tooltip.d.ts +0 -21
  712. package/dist/util/tooltip.d.ts.map +0 -1
  713. package/dist/util/tooltip.js +0 -98
  714. package/dist/util/tooltip.js.map +0 -1
  715. package/dist/util/value-drag.d.ts +0 -33
  716. package/dist/util/value-drag.d.ts.map +0 -1
  717. package/dist/util/value-drag.js +0 -154
  718. package/dist/util/value-drag.js.map +0 -1
package/dist/tree.js ADDED
@@ -0,0 +1,1144 @@
1
+ import { n as tickledStyles, r as TickledController, t as tickledItemStyles } from "./tickled-styles-Bg3QbcrD.js";
2
+ import { n as safeCustomElement, t as __decorate } from "./decorate-O4m1U4l3.js";
3
+ import "./interaction-CQDQJf2Q.js";
4
+ import { t as TreeDataModel } from "./tree-data-model-DGvRVOFY.js";
5
+ import { LitElement, css, html, nothing } from "lit";
6
+ import { property, state } from "lit/decorators.js";
7
+ //#region src/tree/tree-base.ts
8
+ let TreeBaseElement = class TreeBaseElement extends LitElement {
9
+ constructor(..._args) {
10
+ super(..._args);
11
+ this.exclusivity = `none`;
12
+ this.selectionFilter = `all`;
13
+ this.interactionMode = `standard`;
14
+ this._selectedNodes = /* @__PURE__ */ new Set();
15
+ this.disableKeyboardNavigation = false;
16
+ this._expandedKeys = /* @__PURE__ */ new Set();
17
+ this.tickled = new TickledController(this, {
18
+ getItems: () => {
19
+ return this.#getAllNodes().map(({ node }) => ({
20
+ id: node.item.key,
21
+ enabled: true
22
+ }));
23
+ },
24
+ onStateChange: () => {
25
+ this.setAttribute(`data-input-mode`, this.tickled.inputMode);
26
+ }
27
+ });
28
+ this._focusedDepth = 0;
29
+ this.#config = { indent: 20 };
30
+ this.#onKeyDown = (event) => {
31
+ const nodes = this.#getAllNodes();
32
+ if (nodes.length === 0) return;
33
+ if ([
34
+ `ArrowDown`,
35
+ `ArrowUp`,
36
+ `ArrowLeft`,
37
+ `ArrowRight`,
38
+ `Enter`,
39
+ ` `
40
+ ].includes(event.key)) this.tickled.setInputMode(`keyboard`);
41
+ const currentIdx = this.#getFocusedIndex();
42
+ switch (event.key) {
43
+ case `ArrowDown`: {
44
+ event.preventDefault();
45
+ const nextIdx = Math.min(currentIdx + 1, nodes.length - 1);
46
+ if (this.interactionMode === `implicit`) this.select(nodes[nextIdx].node);
47
+ this.#setFocusedIndex(nextIdx);
48
+ if (event.shiftKey && (this.interactionMode === `standard` || this.interactionMode === `vscode`)) this.#extendRangeSelection(nodes, currentIdx, nextIdx);
49
+ else if (this.interactionMode === `vscode`) this.#anchor = void 0;
50
+ this.requestUpdate();
51
+ break;
52
+ }
53
+ case `ArrowUp`: {
54
+ event.preventDefault();
55
+ const prevIdx = Math.max(currentIdx - 1, 0);
56
+ if (this.interactionMode === `implicit`) this.select(nodes[prevIdx].node);
57
+ this.#setFocusedIndex(prevIdx);
58
+ if (event.shiftKey && (this.interactionMode === `standard` || this.interactionMode === `vscode`)) this.#extendRangeSelection(nodes, currentIdx, prevIdx);
59
+ else if (this.interactionMode === `vscode`) this.#anchor = void 0;
60
+ this.requestUpdate();
61
+ break;
62
+ }
63
+ case `ArrowRight`: {
64
+ event.preventDefault();
65
+ const current = nodes[currentIdx];
66
+ if (current && current.node.item.isLeaf !== true) {
67
+ if (!this._expandedKeys.has(current.node.item.key)) this.#toggleExpand(current.node, current.depth);
68
+ else if (currentIdx + 1 < nodes.length) this.#setFocusedIndex(currentIdx + 1);
69
+ }
70
+ this.requestUpdate();
71
+ break;
72
+ }
73
+ case `ArrowLeft`: {
74
+ event.preventDefault();
75
+ const current = nodes[currentIdx];
76
+ if (current && this._expandedKeys.has(current.node.item.key)) {
77
+ this._expandedKeys.delete(current.node.item.key);
78
+ this.dispatchEvent(new CustomEvent(`collapse`, {
79
+ detail: {
80
+ node: current.node,
81
+ depth: current.depth
82
+ },
83
+ bubbles: true,
84
+ composed: true
85
+ }));
86
+ } else if (current.depth > 1) {
87
+ const parentDepth = current.depth - 1;
88
+ for (let i = currentIdx - 1; i >= 0; i--) if (nodes[i].depth === parentDepth) {
89
+ this.#setFocusedIndex(i);
90
+ break;
91
+ }
92
+ }
93
+ this.requestUpdate();
94
+ break;
95
+ }
96
+ case `Enter`: {
97
+ event.preventDefault();
98
+ const current = nodes[currentIdx];
99
+ if (current) {
100
+ if (this.interactionMode !== `manual` && this.interactionMode !== `checked`) this.select(current.node);
101
+ this.dispatchEvent(new CustomEvent(`activate`, {
102
+ detail: {
103
+ node: current.node,
104
+ depth: current.depth
105
+ },
106
+ bubbles: true,
107
+ composed: true
108
+ }));
109
+ this.requestUpdate();
110
+ }
111
+ break;
112
+ }
113
+ case ` `: {
114
+ event.preventDefault();
115
+ const current = nodes[currentIdx];
116
+ if (!current) break;
117
+ if (this.interactionMode === `checked`) this._handleCheckboxClick(new MouseEvent("click"), current.node, current.depth);
118
+ else if (this.interactionMode === `standard` || this.interactionMode === `vscode` || this.interactionMode === `manual`) this.#toggleSelection(current.node, current.depth);
119
+ break;
120
+ }
121
+ case `Escape`:
122
+ event.preventDefault();
123
+ this.#abortPending();
124
+ break;
125
+ }
126
+ };
127
+ this.#onDblClick = (e) => {
128
+ const li = e.target.closest(`li`);
129
+ if (!li) return;
130
+ const key = li.dataset.key;
131
+ if (!key) return;
132
+ const node = this.#getAllNodes().find((n) => n.node.item.key === key);
133
+ if (!node) return;
134
+ this.dispatchEvent(new CustomEvent(`activate`, {
135
+ detail: {
136
+ node: node.node,
137
+ depth: node.depth
138
+ },
139
+ bubbles: true,
140
+ composed: true
141
+ }));
142
+ };
143
+ }
144
+ get selectedNodes() {
145
+ return this._selectedNodes;
146
+ }
147
+ #pendingNode;
148
+ #pendingController;
149
+ #modelUnsubscribe;
150
+ #anchor;
151
+ #config;
152
+ updated(changedProps) {
153
+ if (changedProps.has(`root`) && this.root) {
154
+ this.#abortPending();
155
+ this._expandedKeys.clear();
156
+ this.#clearSelectionInternal();
157
+ this.tickled.clearTickled();
158
+ this._focusedDepth = 0;
159
+ }
160
+ if (changedProps.has(`model`)) {
161
+ this.#modelUnsubscribe?.();
162
+ this.#modelUnsubscribe = void 0;
163
+ const model = this.model;
164
+ if (model) {
165
+ this.root = model.root;
166
+ this.#modelUnsubscribe = model._subscribe((event) => {
167
+ if (event.type === `root`) {
168
+ this.root = event.root;
169
+ this.requestUpdate();
170
+ } else if (event.type === `invalidate`) {
171
+ if (this._expandedKeys.has(event.key)) {
172
+ this._expandedKeys.delete(event.key);
173
+ this.requestUpdate();
174
+ }
175
+ }
176
+ });
177
+ }
178
+ }
179
+ if (changedProps.has(`interactionMode`)) {
180
+ this.#anchor = void 0;
181
+ this.clearSelection();
182
+ }
183
+ if (changedProps.has(`selectedNode`) && this.selectedNode) {
184
+ if (changedProps.get(`selectedNode`) !== this.selectedNode) this.tickled.setTickled(this.selectedNode.item.key);
185
+ }
186
+ }
187
+ connectedCallback() {
188
+ super.connectedCallback();
189
+ this.setAttribute(`data-input-mode`, `mouse`);
190
+ }
191
+ disconnectedCallback() {
192
+ super.disconnectedCallback();
193
+ this.#modelUnsubscribe?.();
194
+ this.#modelUnsubscribe = void 0;
195
+ }
196
+ getConfig() {
197
+ return { ...this.#config };
198
+ }
199
+ setConfig(config) {
200
+ this.#config = {
201
+ ...this.#config,
202
+ ...config
203
+ };
204
+ this.requestUpdate();
205
+ }
206
+ select(node) {
207
+ if (!this.#canSelect(node)) return;
208
+ const prev = new Set(this._selectedNodes);
209
+ this._selectedNodes.clear();
210
+ this._selectedNodes.add(node);
211
+ this.selectedNode = node;
212
+ this.#dispatchSelect(prev);
213
+ this.requestUpdate();
214
+ }
215
+ deselect(node) {
216
+ if (!this._selectedNodes.has(node)) return;
217
+ const prev = new Set(this._selectedNodes);
218
+ this._selectedNodes.delete(node);
219
+ if (this.selectedNode === node) this.selectedNode = [...this._selectedNodes].at(-1);
220
+ this.#dispatchSelect(prev);
221
+ this.requestUpdate();
222
+ }
223
+ clearSelection() {
224
+ if (this._selectedNodes.size === 0) return;
225
+ const prev = new Set(this._selectedNodes);
226
+ this.#clearSelectionInternal();
227
+ this.#dispatchSelect(prev);
228
+ this.requestUpdate();
229
+ }
230
+ navigateTo(keys) {
231
+ if (!this.root?.children) return false;
232
+ this.#abortPending();
233
+ this.#clearSelectionInternal();
234
+ this.tickled.clearTickled();
235
+ this._focusedDepth = 0;
236
+ let currentNode = this.root;
237
+ for (const key of keys) {
238
+ const children = currentNode?.children;
239
+ if (!children) return false;
240
+ const found = children.find((n) => n.item.key === key);
241
+ if (!found) return false;
242
+ this.#applyExclusivity(found.item.key);
243
+ this._expandedKeys.add(found.item.key);
244
+ if (key === keys.at(-1)) {
245
+ this.select(found);
246
+ this.tickled.setTickled(found.item.key);
247
+ }
248
+ currentNode = found;
249
+ }
250
+ this.requestUpdate();
251
+ this.#scrollKeyIntoView(keys.at(-1));
252
+ return true;
253
+ }
254
+ navigateToNode(predicate) {
255
+ if (!this.root?.children) return false;
256
+ const keyPath = this.#findNodePath(this.root.children, predicate);
257
+ if (!keyPath) return false;
258
+ return this.navigateTo(keyPath);
259
+ }
260
+ getNodes() {
261
+ if (!this.root?.children) return [];
262
+ const result = [];
263
+ const visit = (node, depth) => {
264
+ result.push({
265
+ node,
266
+ depth
267
+ });
268
+ if (node.children) for (const child of node.children) visit(child, depth + 1);
269
+ };
270
+ for (const child of this.root.children) visit(child, 0);
271
+ return result;
272
+ }
273
+ #canSelect(node) {
274
+ if (this.selectionFilter === `none`) return false;
275
+ if (this.selectionFilter === `leaf`) return node.item.isLeaf === true;
276
+ if (this.selectionFilter === `branch`) return node.item.isLeaf === false || node.children !== void 0 && node.children.length > 0;
277
+ return true;
278
+ }
279
+ #clearSelectionInternal() {
280
+ this._selectedNodes.clear();
281
+ this.selectedNode = void 0;
282
+ }
283
+ #dispatchSelect(previous) {
284
+ const detail = {
285
+ selected: new Set(this._selectedNodes),
286
+ previous
287
+ };
288
+ this.dispatchEvent(new CustomEvent(`select`, {
289
+ detail,
290
+ bubbles: true,
291
+ composed: true
292
+ }));
293
+ }
294
+ #findNodePath(nodes, predicate, prefix = []) {
295
+ for (const node of nodes) {
296
+ const path = [...prefix, node.item.key];
297
+ if (predicate(node)) return path;
298
+ if (node.children?.length) {
299
+ const result = this.#findNodePath(node.children, predicate, path);
300
+ if (result) return result;
301
+ }
302
+ }
303
+ }
304
+ renderNodeContent(node, _depth) {
305
+ const isBranch = node.item.isLeaf !== true;
306
+ const isExpanded = this._isExpanded(node);
307
+ return html`
308
+ <span class="tree-caret">
309
+ ${isBranch ? html`<ixfx-icon class="caret-icon" name="chevron-down" .rotate=${isExpanded ? nothing : `-90deg`}></ixfx-icon>` : ``}
310
+ </span>
311
+ <span class="tree-label">${node.item.label}</span>
312
+ `;
313
+ }
314
+ _handleItemClick(node, depth, event) {
315
+ if (this.#pendingNode && this._expandedKeys.has(this.#pendingNode.item.key)) this.#abortPending();
316
+ this.tickled.handlePointerEnter(node.item.key);
317
+ this._focusedDepth = depth;
318
+ this.dispatchEvent(new CustomEvent(`item-click`, {
319
+ detail: {
320
+ node,
321
+ depth
322
+ },
323
+ bubbles: true,
324
+ composed: true
325
+ }));
326
+ switch (this.interactionMode) {
327
+ case `implicit`:
328
+ this.#handleImplicitClick(node, depth);
329
+ break;
330
+ case `standard`:
331
+ this.#handleStandardClick(node, depth, event);
332
+ break;
333
+ case `vscode`:
334
+ this.#handleStandardClick(node, depth, event);
335
+ break;
336
+ case `manual`:
337
+ this.#handleManualClick(node, depth, event);
338
+ break;
339
+ case `checked`:
340
+ this.#handleExpandOnly(node, depth);
341
+ break;
342
+ }
343
+ this.requestUpdate();
344
+ }
345
+ #handleImplicitClick(node, depth) {
346
+ if (this.#canSelect(node)) {
347
+ const prev = new Set(this._selectedNodes);
348
+ this._selectedNodes.clear();
349
+ this._selectedNodes.add(node);
350
+ this.selectedNode = node;
351
+ if (!prev.has(node) || prev.size !== 1) this.#dispatchSelect(prev);
352
+ }
353
+ this.#toggleExpand(node, depth);
354
+ }
355
+ #handleStandardClick(node, depth, event) {
356
+ const isMeta = event ? event.metaKey || event.ctrlKey : false;
357
+ const isShift = event ? event.shiftKey : false;
358
+ if (isMeta) {
359
+ if (this.#canSelect(node)) {
360
+ const prev = new Set(this._selectedNodes);
361
+ if (this._selectedNodes.has(node)) {
362
+ this._selectedNodes.delete(node);
363
+ if (this.selectedNode === node) this.selectedNode = [...this._selectedNodes].at(-1);
364
+ } else {
365
+ this._selectedNodes.add(node);
366
+ this.selectedNode = node;
367
+ this.#anchor = {
368
+ node,
369
+ flatIndex: this.#getFlatIndexOf(node)
370
+ };
371
+ }
372
+ this.#dispatchSelect(prev);
373
+ }
374
+ return;
375
+ }
376
+ if (isShift && this.#anchor) {
377
+ const visible = this.#getAllNodes();
378
+ const anchorIdx = visible.findIndex((n) => n.node === this.#anchor.node);
379
+ const targetIdx = visible.findIndex((n) => n.node === node);
380
+ if (anchorIdx >= 0 && targetIdx >= 0) {
381
+ const prev = new Set(this._selectedNodes);
382
+ const from = Math.min(anchorIdx, targetIdx);
383
+ const to = Math.max(anchorIdx, targetIdx);
384
+ const rangeNodes = visible.slice(from, to + 1).map((n) => n.node).filter((n) => this.#canSelect(n));
385
+ this._selectedNodes = new Set(rangeNodes);
386
+ this.selectedNode = node;
387
+ this.#dispatchSelect(prev);
388
+ }
389
+ return;
390
+ }
391
+ if (this.#canSelect(node)) {
392
+ const prev = new Set(this._selectedNodes);
393
+ this._selectedNodes.clear();
394
+ this._selectedNodes.add(node);
395
+ this.selectedNode = node;
396
+ this.#anchor = {
397
+ node,
398
+ flatIndex: this.#getFlatIndexOf(node)
399
+ };
400
+ if (!prev.has(node) || prev.size !== 1) this.#dispatchSelect(prev);
401
+ }
402
+ this.#toggleExpand(node, depth);
403
+ }
404
+ #handleExpandOnly(node, depth) {
405
+ this.#toggleExpand(node, depth);
406
+ }
407
+ #handleManualClick(node, depth, event) {
408
+ const isMeta = event ? event.metaKey || event.ctrlKey : false;
409
+ const isShift = event ? event.shiftKey : false;
410
+ if (isMeta) {
411
+ if (this.#canSelect(node)) {
412
+ const prev = new Set(this._selectedNodes);
413
+ if (this._selectedNodes.has(node)) {
414
+ this._selectedNodes.delete(node);
415
+ if (this.selectedNode === node) this.selectedNode = [...this._selectedNodes].at(-1);
416
+ } else {
417
+ this._selectedNodes.add(node);
418
+ this.selectedNode = node;
419
+ this.#anchor = {
420
+ node,
421
+ flatIndex: this.#getFlatIndexOf(node)
422
+ };
423
+ }
424
+ this.#dispatchSelect(prev);
425
+ }
426
+ return;
427
+ }
428
+ if (isShift && this.#anchor) {
429
+ const visible = this.#getAllNodes();
430
+ const anchorIdx = visible.findIndex((n) => n.node === this.#anchor.node);
431
+ const targetIdx = visible.findIndex((n) => n.node === node);
432
+ if (anchorIdx >= 0 && targetIdx >= 0) {
433
+ const prev = new Set(this._selectedNodes);
434
+ const from = Math.min(anchorIdx, targetIdx);
435
+ const to = Math.max(anchorIdx, targetIdx);
436
+ const rangeNodes = visible.slice(from, to + 1).map((n) => n.node).filter((n) => this.#canSelect(n));
437
+ this._selectedNodes = new Set(rangeNodes);
438
+ this.selectedNode = node;
439
+ this.#dispatchSelect(prev);
440
+ }
441
+ return;
442
+ }
443
+ this.#toggleExpand(node, depth);
444
+ }
445
+ #toggleSelection(node, _depth) {
446
+ if (!this.#canSelect(node)) return;
447
+ const prev = new Set(this._selectedNodes);
448
+ if (this._selectedNodes.has(node)) {
449
+ this._selectedNodes.delete(node);
450
+ if (this.selectedNode === node) this.selectedNode = [...this._selectedNodes].at(-1);
451
+ } else {
452
+ this._selectedNodes.add(node);
453
+ this.selectedNode = node;
454
+ this.#anchor = {
455
+ node,
456
+ flatIndex: this.#getFlatIndexOf(node)
457
+ };
458
+ }
459
+ this.#dispatchSelect(prev);
460
+ }
461
+ _handleCheckboxClick(event, node, _depth) {
462
+ event.stopPropagation();
463
+ const prev = new Set(this._selectedNodes);
464
+ const allSelected = this.#allDescendantsSelected(node);
465
+ this.#applyCheckedToggle(node, !allSelected);
466
+ if (this.selectedNode === void 0 || !this._selectedNodes.has(this.selectedNode)) this.selectedNode = [...this._selectedNodes].at(-1);
467
+ this.#dispatchSelect(prev);
468
+ this.requestUpdate();
469
+ }
470
+ #toggleExpand(node, depth) {
471
+ if (this._expandedKeys.has(node.item.key)) {
472
+ this._expandedKeys.delete(node.item.key);
473
+ this.dispatchEvent(new CustomEvent(`collapse`, {
474
+ detail: {
475
+ node,
476
+ depth
477
+ },
478
+ bubbles: true,
479
+ composed: true
480
+ }));
481
+ } else if (node.children === void 0) {
482
+ if (node.item.isLeaf !== false) return;
483
+ if (this.model ?? (this.loadChildren ? this : void 0)) {
484
+ this.#pendingNode = node;
485
+ const controller = new AbortController();
486
+ this.#pendingController = controller;
487
+ this.#invokeLoadChildren(node, depth, controller).catch(() => {});
488
+ }
489
+ } else {
490
+ this.#applyExclusivity(node.item.key);
491
+ this._expandedKeys.add(node.item.key);
492
+ this.dispatchEvent(new CustomEvent(`expand`, {
493
+ detail: {
494
+ node,
495
+ depth
496
+ },
497
+ bubbles: true,
498
+ composed: true
499
+ }));
500
+ }
501
+ }
502
+ #allDescendantsSelected(node) {
503
+ if (!this._selectedNodes.has(node)) return false;
504
+ if (!node.children?.length) return true;
505
+ return node.children.every((child) => this.#allDescendantsSelected(child));
506
+ }
507
+ #applyCheckedToggle(node, selected) {
508
+ if (this.#canSelect(node)) if (selected) this._selectedNodes.add(node);
509
+ else this._selectedNodes.delete(node);
510
+ if (node.children) for (const child of node.children) this.#applyCheckedToggle(child, selected);
511
+ }
512
+ #getFlatIndexOf(node) {
513
+ return this.#getAllNodes().findIndex((n) => n.node === node);
514
+ }
515
+ #extendRangeSelection(nodes, fromIdx, toIdx) {
516
+ if (!this.#anchor) {
517
+ const anchorNode = nodes[fromIdx]?.node;
518
+ if (anchorNode) this.#anchor = {
519
+ node: anchorNode,
520
+ flatIndex: fromIdx
521
+ };
522
+ }
523
+ if (!this.#anchor) return;
524
+ const anchorIdx = nodes.findIndex((n) => n.node === this.#anchor.node);
525
+ if (anchorIdx < 0) return;
526
+ const from = Math.min(anchorIdx, toIdx);
527
+ const to = Math.max(anchorIdx, toIdx);
528
+ if (this.interactionMode === `vscode`) {
529
+ if (!this.#anchor.selectionSnapshot) this.#anchor = {
530
+ ...this.#anchor,
531
+ selectionSnapshot: new Set(this._selectedNodes)
532
+ };
533
+ const snap = this.#anchor.selectionSnapshot;
534
+ const rangeNodes = nodes.slice(from, to + 1).map((n) => n.node).filter((n) => this.#canSelect(n));
535
+ const next = new Set(snap);
536
+ for (const n of rangeNodes) if (snap.has(n)) next.delete(n);
537
+ else next.add(n);
538
+ const prev = new Set(this._selectedNodes);
539
+ this._selectedNodes = next;
540
+ this.selectedNode = nodes[toIdx]?.node ?? this.selectedNode;
541
+ this.#dispatchSelect(prev);
542
+ } else {
543
+ const prev = new Set(this._selectedNodes);
544
+ const rangeNodes = nodes.slice(from, to + 1).map((n) => n.node).filter((n) => this.#canSelect(n));
545
+ this._selectedNodes = new Set(rangeNodes);
546
+ this.selectedNode = nodes[toIdx]?.node ?? this.selectedNode;
547
+ this.#dispatchSelect(prev);
548
+ }
549
+ }
550
+ async #invokeLoadChildren(node, depth, controller) {
551
+ try {
552
+ let children;
553
+ if (this.model) children = await this.model.getChildren(node, depth, controller.signal);
554
+ else {
555
+ const result = this.loadChildren(node, depth, controller.signal);
556
+ children = result instanceof Promise ? await result : result;
557
+ }
558
+ if (controller.signal.aborted) return;
559
+ node.children = children;
560
+ this.#applyExclusivity(node.item.key);
561
+ this._expandedKeys.add(node.item.key);
562
+ this.#pendingNode = void 0;
563
+ this.#pendingController = void 0;
564
+ this.dispatchEvent(new CustomEvent(`expand`, {
565
+ detail: {
566
+ node,
567
+ depth
568
+ },
569
+ bubbles: true,
570
+ composed: true
571
+ }));
572
+ this.requestUpdate();
573
+ } catch (err) {
574
+ if (controller.signal.aborted) return;
575
+ node.children = [];
576
+ this.#pendingNode = void 0;
577
+ this.#pendingController = void 0;
578
+ this.requestUpdate();
579
+ }
580
+ }
581
+ _isSelected(node) {
582
+ return this._selectedNodes.has(node);
583
+ }
584
+ _isFocused(node) {
585
+ return this.tickled.isTickled(node.item.key);
586
+ }
587
+ _isExpanded(node) {
588
+ if (this._expandedKeys.has(node.item.key)) return true;
589
+ if (this.filterPredicate && node.children) return node.children.some((child) => this.#matchesFilter(child, 0));
590
+ return false;
591
+ }
592
+ #matchesFilter(node, depth) {
593
+ if (!this.filterPredicate) return true;
594
+ if (this.filterPredicate(node, depth)) return true;
595
+ return node.children?.some((child) => this.#matchesFilter(child, depth + 1)) ?? false;
596
+ }
597
+ get _pendingNode() {
598
+ return this.#pendingNode;
599
+ }
600
+ #scrollKeyIntoView(key) {
601
+ requestAnimationFrame(() => {
602
+ const el = this.shadowRoot?.querySelector(`[data-key="${CSS.escape(key)}"]`);
603
+ if (!el) return;
604
+ const elRect = el.getBoundingClientRect();
605
+ const hostRect = this.getBoundingClientRect();
606
+ const relativeTop = elRect.top - hostRect.top;
607
+ const relativeBottom = relativeTop + elRect.height;
608
+ if (relativeTop < 0) this.scrollTop += relativeTop;
609
+ else if (relativeBottom > this.clientHeight) this.scrollTop += relativeBottom - this.clientHeight;
610
+ });
611
+ }
612
+ #abortPending() {
613
+ if (this.#pendingController) {
614
+ this.#pendingController.abort();
615
+ this.#pendingController = void 0;
616
+ this.#pendingNode = void 0;
617
+ }
618
+ }
619
+ /** Apply exclusivity rules when a node is about to be expanded. */
620
+ #applyExclusivity(expandKey) {
621
+ if (this.exclusivity === `none`) return;
622
+ if (this.exclusivity === `depth`) this.#collapseSiblingsAtDepth(expandKey);
623
+ else if (this.exclusivity === `global`) {
624
+ const ancestorKeys = this.#findAncestorKeys(expandKey);
625
+ for (const key of [...this._expandedKeys]) if (!ancestorKeys.has(key) && key !== expandKey) this._expandedKeys.delete(key);
626
+ }
627
+ }
628
+ #collapseSiblingsAtDepth(expandKey) {
629
+ if (!this.root) return;
630
+ const parent = this.#findParent(this.root, expandKey);
631
+ if (!parent?.children) return;
632
+ for (const child of parent.children) if (child.item.key !== expandKey && this._expandedKeys.has(child.item.key)) this._expandedKeys.delete(child.item.key);
633
+ }
634
+ #findAncestorKeys(targetKey) {
635
+ const keys = /* @__PURE__ */ new Set();
636
+ const walk = (node) => {
637
+ if (node.item.key === targetKey) return true;
638
+ if (!node.children) return false;
639
+ for (const child of node.children) if (walk(child)) {
640
+ keys.add(node.item.key);
641
+ return true;
642
+ }
643
+ return false;
644
+ };
645
+ if (this.root) walk(this.root);
646
+ return keys;
647
+ }
648
+ #findParent(node, targetKey, parent = void 0) {
649
+ if (!node.children) return void 0;
650
+ for (const child of node.children) {
651
+ if (child.item.key === targetKey) return parent ?? node;
652
+ const found = this.#findParent(child, targetKey, child);
653
+ if (found) return found;
654
+ }
655
+ }
656
+ #getVisibleNodes(node, depth) {
657
+ const result = [];
658
+ const visit = (n, d) => {
659
+ result.push({
660
+ node: n,
661
+ depth: d
662
+ });
663
+ if (this._expandedKeys.has(n.item.key) && n.children) for (const child of n.children) visit(child, d + 1);
664
+ };
665
+ if (node.children) for (const child of node.children) visit(child, depth + 1);
666
+ return result;
667
+ }
668
+ #getAllNodes() {
669
+ if (!this.root) return [];
670
+ return this.#getVisibleNodes(this.root, 0);
671
+ }
672
+ #getFocusedIndex() {
673
+ const nodes = this.#getAllNodes();
674
+ const tickledKey = this.tickled.tickledId;
675
+ if (!tickledKey) return 0;
676
+ return nodes.findIndex((n) => n.node.item.key === tickledKey);
677
+ }
678
+ #setFocusedIndex(index) {
679
+ const nodes = this.#getAllNodes();
680
+ if (index < 0 || index >= nodes.length) return;
681
+ const { node, depth } = nodes[index];
682
+ this.tickled.setTickled(node.item.key);
683
+ this._focusedDepth = depth;
684
+ this.dispatchEvent(new CustomEvent(`tickle`, {
685
+ detail: {
686
+ node,
687
+ depth
688
+ },
689
+ bubbles: true,
690
+ composed: true
691
+ }));
692
+ this.requestUpdate();
693
+ this.updateComplete.then(() => this.#scrollTickledIntoView());
694
+ }
695
+ #scrollTickledIntoView() {
696
+ const tickledKey = this.tickled.tickledId;
697
+ if (tickledKey === void 0) return;
698
+ (this.shadowRoot?.querySelector(`[data-key="${tickledKey}"]`))?.scrollIntoView({
699
+ block: `nearest`,
700
+ behavior: `smooth`
701
+ });
702
+ }
703
+ #onKeyDown;
704
+ renderLoadingIndicator() {
705
+ return html`<span class="loading-spinner"></span>`;
706
+ }
707
+ render() {
708
+ const nodes = this.#getAllNodes();
709
+ return html`
710
+ <div
711
+ id="container"
712
+ data-input-mode=${this.tickled.inputMode}
713
+ @keydown=${this.#onKeyDown}
714
+ @dblclick=${this.#onDblClick}
715
+ @pointerleave=${(e) => this.tickled.handlePointerLeave(e)}
716
+ tabindex="0"
717
+ >
718
+ ${this.root ? this.#renderNodes(nodes) : nothing}
719
+ </div>
720
+ `;
721
+ }
722
+ #onDblClick;
723
+ #renderNodes(nodes) {
724
+ if (nodes.length === 0 && this.#pendingNode) return html`
725
+ <div class="tree-loading">
726
+ ${this.renderLoadingIndicator()}
727
+ </div>
728
+ `;
729
+ return html`
730
+ <ul class="tree-list" role="tree">
731
+ ${nodes.map(({ node, depth }) => this._renderNode(node, depth))}
732
+ </ul>
733
+ `;
734
+ }
735
+ _renderNode(node, depth) {
736
+ const selected = this._isSelected(node);
737
+ const tickled = this._isFocused(node);
738
+ const isBranch = node.item.isLeaf !== true;
739
+ const isExpanded = this._isExpanded(node);
740
+ const isPending = this.#pendingNode === node;
741
+ const isFiltered = this.filterPredicate !== void 0 && !this.#matchesFilter(node, depth);
742
+ return html`
743
+ <li
744
+ class="item ${selected ? `selected` : ``} ${tickled ? `tickled` : ``} ${isBranch ? `branch` : `leaf`} ${isFiltered ? `filtered` : ``}"
745
+ role="treeitem"
746
+ aria-selected=${selected}
747
+ aria-expanded=${isBranch ? isExpanded : nothing}
748
+ aria-level=${depth + 1}
749
+ data-key=${node.item.key}
750
+ style=${`--depth: ${depth}`}
751
+ @click=${(e) => this._handleItemClick(node, depth, e)}
752
+ @pointerenter=${() => {
753
+ this.tickled.handlePointerEnter(node.item.key);
754
+ this.dispatchEvent(new CustomEvent(`tickle`, {
755
+ detail: {
756
+ node,
757
+ depth
758
+ },
759
+ bubbles: true,
760
+ composed: true
761
+ }));
762
+ }}
763
+ >
764
+ ${this.renderNodeContent(node, depth)}
765
+ ${isPending ? this.renderLoadingIndicator() : nothing}
766
+ </li>
767
+ `;
768
+ }
769
+ static {
770
+ this.styles = [
771
+ tickledStyles,
772
+ tickledItemStyles,
773
+ css`
774
+ :host {
775
+ --tree-bg: var(--surface-3);
776
+ --tree-text: var(--surface-3-text);
777
+ --tree-muted-text: var(--surface-muted-text);
778
+ --tree-indent: 1ch;
779
+ --tree-item-height: 28px;
780
+ --tree-caret-size: 10px;
781
+ --tree-radius: var(--radius-s);
782
+
783
+ display: block;
784
+ overflow: auto;
785
+ box-sizing: border-box;
786
+ background: var(--tree-bg);
787
+ color: var(--tree-text);
788
+ }
789
+
790
+ #container {
791
+ outline: none;
792
+ min-height: 100%;
793
+ }
794
+
795
+ .tree-list {
796
+ list-style: none;
797
+ margin: 0;
798
+ padding: var(--space-xs);
799
+ }
800
+
801
+ .item {
802
+ display: flex;
803
+ align-items: center;
804
+ height: var(--tree-item-height);
805
+ padding-left: calc(var(--tree-indent) * var(--depth, 0));
806
+ cursor: pointer;
807
+ user-select: none;
808
+ font-family: var(--font-family);
809
+ font-size: var(--text-m);
810
+ border-radius: var(--tree-radius);
811
+ transition: background var(--transition, 0.15s ease-out);
812
+ margin: 1px 0;
813
+ }
814
+
815
+ .tree-caret {
816
+ display: inline-flex;
817
+ align-items: center;
818
+ justify-content: center;
819
+ width: var(--tree-caret-size);
820
+ height: var(--tree-caret-size);
821
+ flex-shrink: 0;
822
+ margin-right: var(--space-xs);
823
+ }
824
+
825
+ .caret-icon {
826
+ width: var(--tree-caret-size);
827
+ height: var(--tree-caret-size);
828
+ color: var(--tree-muted-text);
829
+ transition: transform var(--transition, 0.15s ease-out);
830
+ }
831
+
832
+ .item.selected .caret-icon {
833
+ color: var(--accent-text);
834
+ }
835
+
836
+ .tree-label {
837
+ flex: 1;
838
+ overflow: hidden;
839
+ text-overflow: ellipsis;
840
+ white-space: nowrap;
841
+ }
842
+
843
+ .tree-loading {
844
+ display: flex;
845
+ align-items: center;
846
+ justify-content: center;
847
+ padding: var(--space-m);
848
+ }
849
+
850
+ .loading-spinner {
851
+ width: 16px;
852
+ height: 16px;
853
+ border: 2px solid var(--surface-5);
854
+ border-top-color: var(--accent);
855
+ border-radius: 50%;
856
+ animation: tree-spin 0.7s linear infinite;
857
+ }
858
+
859
+ @keyframes tree-spin {
860
+ to { transform: rotate(360deg); }
861
+ }
862
+
863
+ .item.filtered {
864
+ display: none;
865
+ }
866
+
867
+ ::highlight(incr-search-highlight) {
868
+ background: var(--search-highlight-bg, var(--accent));
869
+ color: var(--search-highlight-color, var(--accent-text, #fff));
870
+ border-radius: 2px;
871
+ padding: 0 1px;
872
+ }
873
+ `
874
+ ];
875
+ }
876
+ };
877
+ __decorate([property({ type: Object })], TreeBaseElement.prototype, "root", void 0);
878
+ __decorate([property({ attribute: false })], TreeBaseElement.prototype, "model", void 0);
879
+ __decorate([property({ attribute: false })], TreeBaseElement.prototype, "loadChildren", void 0);
880
+ __decorate([property({
881
+ reflect: true,
882
+ attribute: `exclusivity`
883
+ })], TreeBaseElement.prototype, "exclusivity", void 0);
884
+ __decorate([property({
885
+ reflect: true,
886
+ attribute: `selection-filter`
887
+ })], TreeBaseElement.prototype, "selectionFilter", void 0);
888
+ __decorate([property({
889
+ type: String,
890
+ attribute: `interaction-mode`
891
+ })], TreeBaseElement.prototype, "interactionMode", void 0);
892
+ __decorate([property({ attribute: false })], TreeBaseElement.prototype, "selectedNode", void 0);
893
+ __decorate([state()], TreeBaseElement.prototype, "_selectedNodes", void 0);
894
+ __decorate([property({ attribute: false })], TreeBaseElement.prototype, "filterPredicate", void 0);
895
+ __decorate([property({
896
+ type: Boolean,
897
+ attribute: `disable-keyboard-navigation`
898
+ })], TreeBaseElement.prototype, "disableKeyboardNavigation", void 0);
899
+ __decorate([state()], TreeBaseElement.prototype, "_expandedKeys", void 0);
900
+ __decorate([state()], TreeBaseElement.prototype, "_focusedDepth", void 0);
901
+ TreeBaseElement = __decorate([safeCustomElement(`ixfx-tree-base`)], TreeBaseElement);
902
+ //#endregion
903
+ //#region src/tree/tree-controller.ts
904
+ var TreeController = class {
905
+ #root;
906
+ #element;
907
+ #options;
908
+ #nodeToTree = /* @__PURE__ */ new WeakMap();
909
+ #identityToTreeNode = /* @__PURE__ */ new Map();
910
+ #connectSignal;
911
+ constructor(root, element, options) {
912
+ this.#root = root;
913
+ this.#element = element;
914
+ this.#options = options;
915
+ }
916
+ connect() {
917
+ this.disconnect();
918
+ this.#connectSignal = new AbortController();
919
+ const { signal } = this.#connectSignal;
920
+ const rootValue = this.#root.getValue();
921
+ const rootItem = this.#options.valueToItem(rootValue, this.#root);
922
+ const rootChildren = this.#childrenOf(this.#root);
923
+ this.#element.root = {
924
+ item: rootItem,
925
+ children: rootChildren
926
+ };
927
+ this.#element.addEventListener(`expand`, (e) => {
928
+ const { node } = e.detail;
929
+ const treeNode = this.#nodeToTree.get(node);
930
+ if (!treeNode) return;
931
+ node.children = this.#childrenOf(treeNode);
932
+ this.#element.requestUpdate();
933
+ }, { signal });
934
+ this.#element.addEventListener(`collapse`, (_e) => {}, { signal });
935
+ }
936
+ disconnect() {
937
+ this.#connectSignal?.abort();
938
+ this.#connectSignal = void 0;
939
+ }
940
+ navigateToValue(predicate) {
941
+ const treePath = this.#findTreePath(this.#root, predicate);
942
+ if (!treePath) return false;
943
+ const keys = [];
944
+ for (let i = 1; i < treePath.length; i++) {
945
+ const treeNode = treePath[i];
946
+ const key = this.#options.valueToItem(treeNode.getValue(), treeNode).key;
947
+ keys.push(key);
948
+ if (i < treePath.length - 1) {
949
+ const currentChildren = i === 1 ? this.#element.root?.children ?? [] : this.#findInChildren(this.#element.root?.children ?? [], keys);
950
+ const treeNodeMap = this.#nodeToTree;
951
+ const node = currentChildren.find((n) => n.item.key === key);
952
+ if (!node) return false;
953
+ if (node.children === void 0) {
954
+ const mapped = treeNodeMap.get(node);
955
+ if (mapped) node.children = this.#childrenOf(mapped);
956
+ }
957
+ }
958
+ }
959
+ return this.#element.navigateTo(keys);
960
+ }
961
+ #findInChildren(children, keys) {
962
+ if (keys.length === 0) return children;
963
+ const key = keys[0];
964
+ return children.find((n) => n.item.key === key)?.children ?? [];
965
+ }
966
+ #childrenOf(treeNode) {
967
+ return Array.from(treeNode.children(), (child) => this.#toTreeNode(child));
968
+ }
969
+ #toTreeNode(treeNode) {
970
+ const value = treeNode.getValue();
971
+ const childList = [...treeNode.children()];
972
+ const userItem = this.#options.valueToItem(value, treeNode);
973
+ const isLeaf = userItem.isLeaf ?? childList.length === 0;
974
+ const treeNodeMap = { item: {
975
+ ...userItem,
976
+ isLeaf
977
+ } };
978
+ this.#nodeToTree.set(treeNodeMap, treeNode);
979
+ this.#identityToTreeNode.set(treeNode.getIdentity(), treeNode);
980
+ return treeNodeMap;
981
+ }
982
+ #findTreePath(node, predicate, ancestors = []) {
983
+ const path = [...ancestors, node];
984
+ if (predicate(node.getValue())) return path;
985
+ for (const child of node.children()) {
986
+ const result = this.#findTreePath(child, predicate, path);
987
+ if (result) return result;
988
+ }
989
+ }
990
+ };
991
+ //#endregion
992
+ //#region src/tree/tree-list.ts
993
+ function computeCheckboxState(node, selectedNodes) {
994
+ if (node.item.isLeaf || !node.children?.length) return selectedNodes.has(node) ? `checked` : `unchecked`;
995
+ const childStates = node.children.map((c) => computeCheckboxState(c, selectedNodes));
996
+ const allChecked = childStates.every((s) => s === `checked`);
997
+ const allUnchecked = childStates.every((s) => s === `unchecked`);
998
+ if (allChecked) return `checked`;
999
+ if (allUnchecked) return `unchecked`;
1000
+ return `indeterminate`;
1001
+ }
1002
+ let TreeListElement = class TreeListElement extends TreeBaseElement {
1003
+ #depthsWithIcons = /* @__PURE__ */ new Set();
1004
+ render() {
1005
+ this.#detectIcons();
1006
+ return super.render();
1007
+ }
1008
+ #detectIcons() {
1009
+ this.#depthsWithIcons.clear();
1010
+ const visit = (node, depth) => {
1011
+ if (node.item.icon) this.#depthsWithIcons.add(depth);
1012
+ if (node.children) for (const child of node.children) visit(child, depth + 1);
1013
+ };
1014
+ if (this.root) visit(this.root, 0);
1015
+ }
1016
+ renderNodeContent(node, depth) {
1017
+ const isBranch = node.item.isLeaf !== true;
1018
+ const isExpanded = this._isExpanded(node);
1019
+ const icon = node.item.icon;
1020
+ const tooltip = node.item.tooltip;
1021
+ const caretAndLabel = html`
1022
+ <span class="tree-caret">
1023
+ ${isBranch ? html`<ixfx-icon class="caret-icon" name="chevron-down" .rotate=${isExpanded ? nothing : `-90deg`}></ixfx-icon>` : ``}
1024
+ </span>
1025
+ ${icon ? html`<ixfx-icon class="tree-icon" name="${icon}"></ixfx-icon>` : nothing}
1026
+ <span class="tree-label">
1027
+ ${node.item.label}
1028
+ ${tooltip ? html`<ixfx-tooltip class="tree-tooltip" anchor="--tooltip-tree-${node.item.key}" .value=${tooltip}></ixfx-tooltip>` : nothing}
1029
+ </span>
1030
+ `;
1031
+ if (this.interactionMode === `checked`) {
1032
+ const state = computeCheckboxState(node, this._selectedNodes);
1033
+ return html`
1034
+ <input
1035
+ type="checkbox"
1036
+ class="tree-checkbox"
1037
+ .checked=${state === `checked`}
1038
+ .indeterminate=${state === `indeterminate`}
1039
+ aria-label="Select ${node.item.label}"
1040
+ @click=${(e) => this._handleCheckboxClick(e, node, depth)}
1041
+ />${caretAndLabel}`;
1042
+ }
1043
+ return caretAndLabel;
1044
+ }
1045
+ _renderNode(node, depth) {
1046
+ const selected = this._isSelected(node);
1047
+ const tickled = this._isFocused(node);
1048
+ const isBranch = node.item.isLeaf !== true;
1049
+ const isExpanded = this._isExpanded(node);
1050
+ const isPending = this._pendingNode === node;
1051
+ const hasIconAtDepth = this.#depthsWithIcons.has(depth);
1052
+ return html`
1053
+ <li
1054
+ class="item ${selected ? `selected` : ``} ${tickled ? `tickled` : ``} ${isBranch ? `branch` : `leaf`} ${hasIconAtDepth ? `has-icon-at-depth` : ``}"
1055
+ data-key=${node.item.key}
1056
+ role="treeitem"
1057
+ aria-selected=${selected}
1058
+ aria-expanded=${isBranch ? isExpanded : nothing}
1059
+ aria-level=${depth + 1}
1060
+ style=${`--depth: ${depth}`}
1061
+ @click=${(e) => this._handleItemClick(node, depth, e)}
1062
+ @pointerenter=${() => this.tickled.handlePointerEnter(node.item.key)}
1063
+ >
1064
+ ${this.renderNodeContent(node, depth)}
1065
+ ${isPending ? this.renderLoadingIndicator() : nothing}
1066
+ </li>
1067
+ `;
1068
+ }
1069
+ static {
1070
+ this.styles = [...TreeBaseElement.styles, css`
1071
+ .tree-caret {
1072
+ display: inline-flex;
1073
+ align-items: center;
1074
+ justify-content: center;
1075
+ width: var(--tree-caret-size);
1076
+ height: var(--tree-caret-size);
1077
+ flex-shrink: 0;
1078
+ margin-right: var(--space-xs);
1079
+ }
1080
+
1081
+ .caret-icon {
1082
+ width: var(--tree-caret-size);
1083
+ height: var(--tree-caret-size);
1084
+ color: var(--tree-muted-text);
1085
+ transition: transform var(--transition, 0.15s ease-out);
1086
+ }
1087
+
1088
+ .item.selected .caret-icon {
1089
+ color: var(--accent-text);
1090
+ }
1091
+
1092
+ .tree-icon {
1093
+ flex-shrink: 0;
1094
+ width: var(--icon-size, 1em);
1095
+ height: var(--icon-size, 1em);
1096
+ margin-right: var(--icon-spacing, 0.3em);
1097
+ }
1098
+
1099
+ .item:not(.has-icon-at-depth) .tree-icon {
1100
+ display: none;
1101
+ }
1102
+
1103
+ .item.has-icon-at-depth .tree-label {
1104
+ margin-left: var(--icon-size, 1em);
1105
+ }
1106
+
1107
+ .tree-tooltip {
1108
+ position: absolute;
1109
+ anchor-name: --tooltip-tree;
1110
+ }
1111
+
1112
+ .tree-checkbox {
1113
+ flex-shrink: 0;
1114
+ margin-right: var(--space-xs, 3px);
1115
+ cursor: pointer;
1116
+ accent-color: var(--accent);
1117
+ pointer-events: auto;
1118
+ }
1119
+
1120
+ /* In checked mode the checkbox communicates selection state —
1121
+ suppress the row highlight so it doesn't double-signal */
1122
+ :host([interaction-mode="checked"]) .item.selected {
1123
+ background: transparent;
1124
+ color: inherit;
1125
+ outline: none;
1126
+ }
1127
+
1128
+
1129
+
1130
+ .tree-label {
1131
+ flex: 1;
1132
+ overflow: hidden;
1133
+ text-overflow: ellipsis;
1134
+ white-space: nowrap;
1135
+ position: relative;
1136
+ }
1137
+ `];
1138
+ }
1139
+ };
1140
+ TreeListElement = __decorate([safeCustomElement(`ixfx-tree-list`)], TreeListElement);
1141
+ //#endregion
1142
+ export { TreeBaseElement, TreeController, TreeDataModel, TreeListElement };
1143
+
1144
+ //# sourceMappingURL=tree.js.map