@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
@@ -1,1028 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { css, html, LitElement, nothing } from 'lit';
8
- import { customElement, property, state } from 'lit/decorators.js';
9
- import { tickledStyles, tickledItemStyles } from '../interaction/index.js';
10
- import { TickledController } from '../interaction/tickled-controller.js';
11
- let TreeBaseElement = class TreeBaseElement extends LitElement {
12
- constructor() {
13
- super(...arguments);
14
- this.exclusivity = `none`;
15
- this.selectionFilter = `all`;
16
- /** Controls how pointer/keyboard gestures map to selection changes. Default: `'standard'`. */
17
- this.interactionMode = `standard`;
18
- this._selectedNodes = new Set();
19
- this.disableKeyboardNavigation = false;
20
- this._expandedKeys = new Set();
21
- this.tickled = new TickledController(this, {
22
- getItems: () => {
23
- const nodes = this.#getAllNodes();
24
- return nodes.map(({ node }) => ({ id: node.item.key, enabled: true }));
25
- },
26
- onStateChange: () => {
27
- this.setAttribute(`data-input-mode`, this.tickled.inputMode);
28
- },
29
- });
30
- this._focusedDepth = 0;
31
- this.#config = {
32
- indent: 20,
33
- };
34
- this.#onKeyDown = (event) => {
35
- const nodes = this.#getAllNodes();
36
- if (nodes.length === 0)
37
- return;
38
- // Switch to keyboard mode for any navigation key
39
- if ([`ArrowDown`, `ArrowUp`, `ArrowLeft`, `ArrowRight`, `Enter`, ` `].includes(event.key)) {
40
- this.tickled.setInputMode(`keyboard`);
41
- }
42
- const currentIdx = this.#getFocusedIndex();
43
- switch (event.key) {
44
- case `ArrowDown`: {
45
- event.preventDefault();
46
- const nextIdx = Math.min(currentIdx + 1, nodes.length - 1);
47
- if (this.interactionMode === `implicit`) {
48
- this.select(nodes[nextIdx].node);
49
- }
50
- this.#setFocusedIndex(nextIdx);
51
- if (event.shiftKey && (this.interactionMode === `standard` || this.interactionMode === `vscode`)) {
52
- this.#extendRangeSelection(nodes, currentIdx, nextIdx);
53
- }
54
- else if (this.interactionMode === `vscode`) {
55
- this.#anchor = undefined; // clear snapshot on plain navigation
56
- }
57
- this.requestUpdate();
58
- break;
59
- }
60
- case `ArrowUp`: {
61
- event.preventDefault();
62
- const prevIdx = Math.max(currentIdx - 1, 0);
63
- if (this.interactionMode === `implicit`) {
64
- this.select(nodes[prevIdx].node);
65
- }
66
- this.#setFocusedIndex(prevIdx);
67
- if (event.shiftKey && (this.interactionMode === `standard` || this.interactionMode === `vscode`)) {
68
- this.#extendRangeSelection(nodes, currentIdx, prevIdx);
69
- }
70
- else if (this.interactionMode === `vscode`) {
71
- this.#anchor = undefined; // clear snapshot on plain navigation
72
- }
73
- this.requestUpdate();
74
- break;
75
- }
76
- case `ArrowRight`: {
77
- event.preventDefault();
78
- const current = nodes[currentIdx];
79
- if (current && current.node.item.isLeaf !== true) {
80
- if (!this._expandedKeys.has(current.node.item.key)) {
81
- this.#toggleExpand(current.node, current.depth);
82
- }
83
- else if (currentIdx + 1 < nodes.length) {
84
- this.#setFocusedIndex(currentIdx + 1);
85
- }
86
- }
87
- this.requestUpdate();
88
- break;
89
- }
90
- case `ArrowLeft`: {
91
- event.preventDefault();
92
- const current = nodes[currentIdx];
93
- if (current && this._expandedKeys.has(current.node.item.key)) {
94
- this._expandedKeys.delete(current.node.item.key);
95
- this.dispatchEvent(new CustomEvent(`collapse`, {
96
- detail: { node: current.node, depth: current.depth },
97
- bubbles: true,
98
- composed: true,
99
- }));
100
- }
101
- else if (current.depth > 1) {
102
- const parentDepth = current.depth - 1;
103
- for (let i = currentIdx - 1; i >= 0; i--) {
104
- if (nodes[i].depth === parentDepth) {
105
- this.#setFocusedIndex(i);
106
- break;
107
- }
108
- }
109
- }
110
- this.requestUpdate();
111
- break;
112
- }
113
- case `Enter`: {
114
- event.preventDefault();
115
- const current = nodes[currentIdx];
116
- if (current) {
117
- if (this.interactionMode !== `manual` && this.interactionMode !== `checked`) {
118
- this.select(current.node);
119
- }
120
- this.dispatchEvent(new CustomEvent(`activate`, {
121
- detail: { node: current.node, depth: current.depth },
122
- bubbles: true,
123
- composed: true,
124
- }));
125
- this.requestUpdate();
126
- }
127
- break;
128
- }
129
- case ` `: {
130
- event.preventDefault();
131
- const current = nodes[currentIdx];
132
- if (!current)
133
- break;
134
- if (this.interactionMode === `checked`) {
135
- this._handleCheckboxClick(new MouseEvent('click'), current.node, current.depth);
136
- }
137
- else if (this.interactionMode === `standard` || this.interactionMode === `vscode` || this.interactionMode === `manual`) {
138
- this.#toggleSelection(current.node, current.depth);
139
- }
140
- break;
141
- }
142
- case `Escape`: {
143
- event.preventDefault();
144
- this.#abortPending();
145
- break;
146
- }
147
- }
148
- };
149
- this.#onDblClick = (e) => {
150
- const target = e.target;
151
- const li = target.closest(`li`);
152
- if (!li)
153
- return;
154
- const key = li.dataset.key;
155
- if (!key)
156
- return;
157
- const nodes = this.#getAllNodes();
158
- const node = nodes.find(n => n.node.item.key === key);
159
- if (!node)
160
- return;
161
- this.dispatchEvent(new CustomEvent(`activate`, {
162
- detail: { node: node.node, depth: node.depth },
163
- bubbles: true,
164
- composed: true,
165
- }));
166
- };
167
- }
168
- get selectedNodes() {
169
- return this._selectedNodes;
170
- }
171
- #pendingNode;
172
- #pendingController;
173
- #modelUnsubscribe;
174
- // Range-select anchor: the flat-list index and node from which a Shift-range is measured.
175
- #anchor;
176
- #config;
177
- updated(changedProps) {
178
- if (changedProps.has(`root`) && this.root) {
179
- this.#abortPending();
180
- this._expandedKeys.clear();
181
- this.#clearSelectionInternal();
182
- this.tickled.clearTickled();
183
- this._focusedDepth = 0;
184
- }
185
- if (changedProps.has(`model`)) {
186
- this.#modelUnsubscribe?.();
187
- this.#modelUnsubscribe = undefined;
188
- const model = this.model;
189
- if (model) {
190
- this.root = model.root;
191
- this.#modelUnsubscribe = model._subscribe((event) => {
192
- if (event.type === `root`) {
193
- this.root = event.root;
194
- this.requestUpdate();
195
- }
196
- else if (event.type === `invalidate`) {
197
- // If the invalidated node is currently expanded, collapse it
198
- if (this._expandedKeys.has(event.key)) {
199
- this._expandedKeys.delete(event.key);
200
- this.requestUpdate();
201
- }
202
- }
203
- });
204
- }
205
- }
206
- if (changedProps.has(`interactionMode`)) {
207
- this.#anchor = undefined;
208
- this.clearSelection();
209
- }
210
- // When selectedNode is set externally, sync focus to match
211
- if (changedProps.has(`selectedNode`) && this.selectedNode) {
212
- const prev = changedProps.get(`selectedNode`);
213
- if (prev !== this.selectedNode) {
214
- this.tickled.setTickled(this.selectedNode.item.key);
215
- }
216
- }
217
- }
218
- connectedCallback() {
219
- super.connectedCallback();
220
- this.setAttribute(`data-input-mode`, `mouse`);
221
- }
222
- disconnectedCallback() {
223
- super.disconnectedCallback();
224
- this.#modelUnsubscribe?.();
225
- this.#modelUnsubscribe = undefined;
226
- }
227
- getConfig() {
228
- return { ...this.#config };
229
- }
230
- setConfig(config) {
231
- this.#config = { ...this.#config, ...config };
232
- this.requestUpdate();
233
- }
234
- // --- Programmatic selection ---
235
- select(node) {
236
- if (!this.#canSelect(node))
237
- return;
238
- const prev = new Set(this._selectedNodes);
239
- this._selectedNodes.clear();
240
- this._selectedNodes.add(node);
241
- this.selectedNode = node;
242
- this.#dispatchSelect(prev);
243
- this.requestUpdate();
244
- }
245
- deselect(node) {
246
- if (!this._selectedNodes.has(node))
247
- return;
248
- const prev = new Set(this._selectedNodes);
249
- this._selectedNodes.delete(node);
250
- if (this.selectedNode === node) {
251
- this.selectedNode = [...this._selectedNodes].at(-1);
252
- }
253
- this.#dispatchSelect(prev);
254
- this.requestUpdate();
255
- }
256
- clearSelection() {
257
- if (this._selectedNodes.size === 0)
258
- return;
259
- const prev = new Set(this._selectedNodes);
260
- this.#clearSelectionInternal();
261
- this.#dispatchSelect(prev);
262
- this.requestUpdate();
263
- }
264
- // --- Navigation ---
265
- navigateTo(keys) {
266
- if (!this.root?.children)
267
- return false;
268
- this.#abortPending();
269
- this.#clearSelectionInternal();
270
- this.tickled.clearTickled();
271
- this._focusedDepth = 0;
272
- let currentNode = this.root;
273
- for (const key of keys) {
274
- const children = currentNode?.children;
275
- if (!children)
276
- return false;
277
- const found = children.find(n => n.item.key === key);
278
- if (!found)
279
- return false;
280
- this.#applyExclusivity(found.item.key);
281
- this._expandedKeys.add(found.item.key);
282
- if (key === keys.at(-1)) {
283
- this.select(found);
284
- this.tickled.setTickled(found.item.key);
285
- }
286
- currentNode = found;
287
- }
288
- this.requestUpdate();
289
- this.#scrollKeyIntoView(keys.at(-1));
290
- return true;
291
- }
292
- navigateToNode(predicate) {
293
- if (!this.root?.children)
294
- return false;
295
- const keyPath = this.#findNodePath(this.root.children, predicate);
296
- if (!keyPath)
297
- return false;
298
- return this.navigateTo(keyPath);
299
- }
300
- getNodes() {
301
- if (!this.root?.children)
302
- return [];
303
- const result = [];
304
- const visit = (node, depth) => {
305
- result.push({ node, depth });
306
- if (node.children) {
307
- for (const child of node.children)
308
- visit(child, depth + 1);
309
- }
310
- };
311
- for (const child of this.root.children)
312
- visit(child, 0);
313
- return result;
314
- }
315
- // --- Internal helpers ---
316
- #canSelect(node) {
317
- if (this.selectionFilter === `none`)
318
- return false;
319
- if (this.selectionFilter === `leaf`)
320
- return node.item.isLeaf === true;
321
- if (this.selectionFilter === `branch`)
322
- return node.item.isLeaf === false || (node.children !== undefined && node.children.length > 0);
323
- return true;
324
- }
325
- #clearSelectionInternal() {
326
- this._selectedNodes.clear();
327
- this.selectedNode = undefined;
328
- }
329
- #dispatchSelect(previous) {
330
- const detail = {
331
- selected: new Set(this._selectedNodes),
332
- previous,
333
- };
334
- this.dispatchEvent(new CustomEvent(`select`, {
335
- detail,
336
- bubbles: true,
337
- composed: true,
338
- }));
339
- }
340
- #findNodePath(nodes, predicate, prefix = []) {
341
- for (const node of nodes) {
342
- const path = [...prefix, node.item.key];
343
- if (predicate(node))
344
- return path;
345
- if (node.children?.length) {
346
- const result = this.#findNodePath(node.children, predicate, path);
347
- if (result)
348
- return result;
349
- }
350
- }
351
- return undefined;
352
- }
353
- renderNodeContent(node, _depth) {
354
- const isBranch = node.item.isLeaf !== true;
355
- const isExpanded = this._isExpanded(node);
356
- return html `
357
- <span class="tree-caret">
358
- ${isBranch ? html `<ixfx-icon class="caret-icon" name="chevron-down" .rotate=${isExpanded ? nothing : `-90deg`}></ixfx-icon>` : ``}
359
- </span>
360
- <span class="tree-label">${node.item.label}</span>
361
- `;
362
- }
363
- _handleItemClick(node, depth, event) {
364
- if (this.#pendingNode && this._expandedKeys.has(this.#pendingNode.item.key)) {
365
- this.#abortPending();
366
- }
367
- this.tickled.handlePointerEnter(node.item.key);
368
- this._focusedDepth = depth;
369
- this.dispatchEvent(new CustomEvent(`item-click`, {
370
- detail: { node, depth },
371
- bubbles: true,
372
- composed: true,
373
- }));
374
- switch (this.interactionMode) {
375
- case `implicit`:
376
- this.#handleImplicitClick(node, depth);
377
- break;
378
- case `standard`:
379
- this.#handleStandardClick(node, depth, event);
380
- break;
381
- case `vscode`:
382
- this.#handleStandardClick(node, depth, event);
383
- break;
384
- case `manual`:
385
- this.#handleManualClick(node, depth, event);
386
- break;
387
- case `checked`:
388
- this.#handleExpandOnly(node, depth);
389
- break;
390
- }
391
- this.requestUpdate();
392
- }
393
- #handleImplicitClick(node, depth) {
394
- if (this.#canSelect(node)) {
395
- const prev = new Set(this._selectedNodes);
396
- this._selectedNodes.clear();
397
- this._selectedNodes.add(node);
398
- this.selectedNode = node;
399
- if (!prev.has(node) || prev.size !== 1)
400
- this.#dispatchSelect(prev);
401
- }
402
- this.#toggleExpand(node, depth);
403
- }
404
- #handleStandardClick(node, depth, event) {
405
- const isMeta = event ? (event.metaKey || event.ctrlKey) : false;
406
- const isShift = event ? event.shiftKey : false;
407
- if (isMeta) {
408
- if (this.#canSelect(node)) {
409
- const prev = new Set(this._selectedNodes);
410
- if (this._selectedNodes.has(node)) {
411
- this._selectedNodes.delete(node);
412
- if (this.selectedNode === node)
413
- this.selectedNode = [...this._selectedNodes].at(-1);
414
- }
415
- else {
416
- this._selectedNodes.add(node);
417
- this.selectedNode = node;
418
- this.#anchor = { node, flatIndex: this.#getFlatIndexOf(node) };
419
- }
420
- this.#dispatchSelect(prev);
421
- }
422
- return; // no expand on Ctrl+click
423
- }
424
- if (isShift && this.#anchor) {
425
- const visible = this.#getAllNodes();
426
- const anchorIdx = visible.findIndex(n => n.node === this.#anchor.node);
427
- const targetIdx = visible.findIndex(n => n.node === node);
428
- if (anchorIdx >= 0 && targetIdx >= 0) {
429
- const prev = new Set(this._selectedNodes);
430
- const from = Math.min(anchorIdx, targetIdx);
431
- const to = Math.max(anchorIdx, targetIdx);
432
- const rangeNodes = visible.slice(from, to + 1)
433
- .map(n => n.node)
434
- .filter(n => this.#canSelect(n));
435
- this._selectedNodes = new Set(rangeNodes);
436
- this.selectedNode = node;
437
- this.#dispatchSelect(prev);
438
- }
439
- return; // no expand on Shift+click
440
- }
441
- // Plain click: select + toggle expand
442
- if (this.#canSelect(node)) {
443
- const prev = new Set(this._selectedNodes);
444
- this._selectedNodes.clear();
445
- this._selectedNodes.add(node);
446
- this.selectedNode = node;
447
- this.#anchor = { node, flatIndex: this.#getFlatIndexOf(node) };
448
- if (!prev.has(node) || prev.size !== 1)
449
- this.#dispatchSelect(prev);
450
- }
451
- this.#toggleExpand(node, depth);
452
- }
453
- #handleExpandOnly(node, depth) {
454
- this.#toggleExpand(node, depth);
455
- }
456
- #handleManualClick(node, depth, event) {
457
- const isMeta = event ? (event.metaKey || event.ctrlKey) : false;
458
- const isShift = event ? event.shiftKey : false;
459
- if (isMeta) {
460
- if (this.#canSelect(node)) {
461
- const prev = new Set(this._selectedNodes);
462
- if (this._selectedNodes.has(node)) {
463
- this._selectedNodes.delete(node);
464
- if (this.selectedNode === node)
465
- this.selectedNode = [...this._selectedNodes].at(-1);
466
- }
467
- else {
468
- this._selectedNodes.add(node);
469
- this.selectedNode = node;
470
- this.#anchor = { node, flatIndex: this.#getFlatIndexOf(node) };
471
- }
472
- this.#dispatchSelect(prev);
473
- }
474
- return; // no expand on Meta+click
475
- }
476
- if (isShift && this.#anchor) {
477
- const visible = this.#getAllNodes();
478
- const anchorIdx = visible.findIndex(n => n.node === this.#anchor.node);
479
- const targetIdx = visible.findIndex(n => n.node === node);
480
- if (anchorIdx >= 0 && targetIdx >= 0) {
481
- const prev = new Set(this._selectedNodes);
482
- const from = Math.min(anchorIdx, targetIdx);
483
- const to = Math.max(anchorIdx, targetIdx);
484
- const rangeNodes = visible.slice(from, to + 1)
485
- .map(n => n.node)
486
- .filter(n => this.#canSelect(n));
487
- this._selectedNodes = new Set(rangeNodes);
488
- this.selectedNode = node;
489
- this.#dispatchSelect(prev);
490
- }
491
- return; // no expand on Shift+click
492
- }
493
- this.#toggleExpand(node, depth);
494
- }
495
- #toggleSelection(node, _depth) {
496
- if (!this.#canSelect(node))
497
- return;
498
- const prev = new Set(this._selectedNodes);
499
- if (this._selectedNodes.has(node)) {
500
- this._selectedNodes.delete(node);
501
- if (this.selectedNode === node)
502
- this.selectedNode = [...this._selectedNodes].at(-1);
503
- }
504
- else {
505
- this._selectedNodes.add(node);
506
- this.selectedNode = node;
507
- this.#anchor = { node, flatIndex: this.#getFlatIndexOf(node) };
508
- }
509
- this.#dispatchSelect(prev);
510
- }
511
- _handleCheckboxClick(event, node, _depth) {
512
- event.stopPropagation();
513
- const prev = new Set(this._selectedNodes);
514
- const allSelected = this.#allDescendantsSelected(node);
515
- this.#applyCheckedToggle(node, !allSelected);
516
- if (this.selectedNode === undefined || !this._selectedNodes.has(this.selectedNode)) {
517
- this.selectedNode = [...this._selectedNodes].at(-1);
518
- }
519
- this.#dispatchSelect(prev);
520
- this.requestUpdate();
521
- }
522
- #toggleExpand(node, depth) {
523
- const isExpanded = this._expandedKeys.has(node.item.key);
524
- if (isExpanded) {
525
- this._expandedKeys.delete(node.item.key);
526
- this.dispatchEvent(new CustomEvent(`collapse`, {
527
- detail: { node, depth },
528
- bubbles: true,
529
- composed: true,
530
- }));
531
- }
532
- else {
533
- if (node.children === undefined) {
534
- if (node.item.isLeaf !== false)
535
- return;
536
- const loader = this.model ?? (this.loadChildren ? this : undefined);
537
- if (loader) {
538
- this.#pendingNode = node;
539
- const controller = new AbortController();
540
- this.#pendingController = controller;
541
- this.#invokeLoadChildren(node, depth, controller).catch(() => { });
542
- }
543
- }
544
- else {
545
- this.#applyExclusivity(node.item.key);
546
- this._expandedKeys.add(node.item.key);
547
- this.dispatchEvent(new CustomEvent(`expand`, {
548
- detail: { node, depth },
549
- bubbles: true,
550
- composed: true,
551
- }));
552
- }
553
- }
554
- }
555
- #allDescendantsSelected(node) {
556
- if (!this._selectedNodes.has(node))
557
- return false;
558
- if (!node.children?.length)
559
- return true;
560
- return node.children.every(child => this.#allDescendantsSelected(child));
561
- }
562
- #applyCheckedToggle(node, selected) {
563
- if (this.#canSelect(node)) {
564
- if (selected) {
565
- this._selectedNodes.add(node);
566
- }
567
- else {
568
- this._selectedNodes.delete(node);
569
- }
570
- }
571
- if (node.children) {
572
- for (const child of node.children) {
573
- this.#applyCheckedToggle(child, selected);
574
- }
575
- }
576
- }
577
- #getFlatIndexOf(node) {
578
- return this.#getAllNodes().findIndex(n => n.node === node);
579
- }
580
- #extendRangeSelection(nodes, fromIdx, toIdx) {
581
- // Set anchor at `fromIdx` if not already anchored
582
- if (!this.#anchor) {
583
- const anchorNode = nodes[fromIdx]?.node;
584
- if (anchorNode)
585
- this.#anchor = { node: anchorNode, flatIndex: fromIdx };
586
- }
587
- if (!this.#anchor)
588
- return;
589
- const anchorIdx = nodes.findIndex(n => n.node === this.#anchor.node);
590
- if (anchorIdx < 0)
591
- return;
592
- const from = Math.min(anchorIdx, toIdx);
593
- const to = Math.max(anchorIdx, toIdx);
594
- if (this.interactionMode === `vscode`) {
595
- // On first Shift+arrow: snapshot current selection
596
- if (!this.#anchor.selectionSnapshot) {
597
- this.#anchor = { ...this.#anchor, selectionSnapshot: new Set(this._selectedNodes) };
598
- }
599
- const snap = this.#anchor.selectionSnapshot;
600
- const rangeNodes = nodes.slice(from, to + 1).map(n => n.node).filter(n => this.#canSelect(n));
601
- // Toggle: items in snapshot stay toggled based on presence in snapshot
602
- const next = new Set(snap);
603
- for (const n of rangeNodes) {
604
- if (snap.has(n))
605
- next.delete(n);
606
- else
607
- next.add(n);
608
- }
609
- const prev = new Set(this._selectedNodes);
610
- this._selectedNodes = next;
611
- this.selectedNode = nodes[toIdx]?.node ?? this.selectedNode;
612
- this.#dispatchSelect(prev);
613
- }
614
- else {
615
- // standard: range replaces selection
616
- const prev = new Set(this._selectedNodes);
617
- const rangeNodes = nodes.slice(from, to + 1).map(n => n.node).filter(n => this.#canSelect(n));
618
- this._selectedNodes = new Set(rangeNodes);
619
- this.selectedNode = nodes[toIdx]?.node ?? this.selectedNode;
620
- this.#dispatchSelect(prev);
621
- }
622
- }
623
- async #invokeLoadChildren(node, depth, controller) {
624
- try {
625
- let children;
626
- if (this.model) {
627
- children = await this.model.getChildren(node, depth, controller.signal);
628
- }
629
- else {
630
- const result = this.loadChildren(node, depth, controller.signal);
631
- children = result instanceof Promise ? await result : result;
632
- }
633
- if (controller.signal.aborted)
634
- return;
635
- node.children = children;
636
- this.#applyExclusivity(node.item.key);
637
- this._expandedKeys.add(node.item.key);
638
- this.#pendingNode = undefined;
639
- this.#pendingController = undefined;
640
- this.dispatchEvent(new CustomEvent(`expand`, {
641
- detail: { node, depth },
642
- bubbles: true,
643
- composed: true,
644
- }));
645
- this.requestUpdate();
646
- }
647
- catch (err) {
648
- if (controller.signal.aborted)
649
- return;
650
- node.children = [];
651
- this.#pendingNode = undefined;
652
- this.#pendingController = undefined;
653
- this.requestUpdate();
654
- }
655
- }
656
- _isSelected(node) {
657
- return this._selectedNodes.has(node);
658
- }
659
- _isFocused(node) {
660
- return this.tickled.isTickled(node.item.key);
661
- }
662
- _isExpanded(node) {
663
- if (this._expandedKeys.has(node.item.key))
664
- return true;
665
- if (this.filterPredicate && node.children) {
666
- return node.children.some(child => this.#matchesFilter(child, 0));
667
- }
668
- return false;
669
- }
670
- #matchesFilter(node, depth) {
671
- if (!this.filterPredicate)
672
- return true;
673
- if (this.filterPredicate(node, depth))
674
- return true;
675
- return node.children?.some(child => this.#matchesFilter(child, depth + 1)) ?? false;
676
- }
677
- get _pendingNode() {
678
- return this.#pendingNode;
679
- }
680
- #scrollKeyIntoView(key) {
681
- requestAnimationFrame(() => {
682
- const el = this.shadowRoot?.querySelector(`[data-key="${CSS.escape(key)}"]`);
683
- if (!el)
684
- return;
685
- const elRect = el.getBoundingClientRect();
686
- const hostRect = this.getBoundingClientRect();
687
- const relativeTop = elRect.top - hostRect.top;
688
- const relativeBottom = relativeTop + elRect.height;
689
- if (relativeTop < 0) {
690
- this.scrollTop += relativeTop;
691
- }
692
- else if (relativeBottom > this.clientHeight) {
693
- this.scrollTop += relativeBottom - this.clientHeight;
694
- }
695
- });
696
- }
697
- #abortPending() {
698
- if (this.#pendingController) {
699
- this.#pendingController.abort();
700
- this.#pendingController = undefined;
701
- this.#pendingNode = undefined;
702
- }
703
- }
704
- /** Apply exclusivity rules when a node is about to be expanded. */
705
- #applyExclusivity(expandKey) {
706
- if (this.exclusivity === `none`)
707
- return;
708
- if (this.exclusivity === `depth`) {
709
- this.#collapseSiblingsAtDepth(expandKey);
710
- }
711
- else if (this.exclusivity === `global`) {
712
- // Collapse all expanded nodes except direct ancestors of the expanding node
713
- const ancestorKeys = this.#findAncestorKeys(expandKey);
714
- for (const key of [...this._expandedKeys]) {
715
- if (!ancestorKeys.has(key) && key !== expandKey) {
716
- this._expandedKeys.delete(key);
717
- }
718
- }
719
- }
720
- }
721
- #collapseSiblingsAtDepth(expandKey) {
722
- if (!this.root)
723
- return;
724
- const parent = this.#findParent(this.root, expandKey);
725
- if (!parent?.children)
726
- return;
727
- for (const child of parent.children) {
728
- if (child.item.key !== expandKey && this._expandedKeys.has(child.item.key)) {
729
- this._expandedKeys.delete(child.item.key);
730
- }
731
- }
732
- }
733
- #findAncestorKeys(targetKey) {
734
- const keys = new Set();
735
- const walk = (node) => {
736
- if (node.item.key === targetKey)
737
- return true;
738
- if (!node.children)
739
- return false;
740
- for (const child of node.children) {
741
- if (walk(child)) {
742
- keys.add(node.item.key);
743
- return true;
744
- }
745
- }
746
- return false;
747
- };
748
- if (this.root)
749
- walk(this.root);
750
- return keys;
751
- }
752
- #findParent(node, targetKey, parent = undefined) {
753
- if (!node.children)
754
- return undefined;
755
- for (const child of node.children) {
756
- if (child.item.key === targetKey) {
757
- return parent ?? node;
758
- }
759
- const found = this.#findParent(child, targetKey, child);
760
- if (found)
761
- return found;
762
- }
763
- return undefined;
764
- }
765
- #getVisibleNodes(node, depth) {
766
- const result = [];
767
- const visit = (n, d) => {
768
- result.push({ node: n, depth: d });
769
- if (this._expandedKeys.has(n.item.key) && n.children) {
770
- for (const child of n.children) {
771
- visit(child, d + 1);
772
- }
773
- }
774
- };
775
- if (node.children) {
776
- for (const child of node.children) {
777
- visit(child, depth + 1);
778
- }
779
- }
780
- return result;
781
- }
782
- #getAllNodes() {
783
- if (!this.root)
784
- return [];
785
- return this.#getVisibleNodes(this.root, 0);
786
- }
787
- #getFocusedIndex() {
788
- const nodes = this.#getAllNodes();
789
- const tickledKey = this.tickled.tickledId;
790
- if (!tickledKey)
791
- return 0;
792
- return nodes.findIndex(n => n.node.item.key === tickledKey);
793
- }
794
- #setFocusedIndex(index) {
795
- const nodes = this.#getAllNodes();
796
- if (index < 0 || index >= nodes.length)
797
- return;
798
- const { node, depth } = nodes[index];
799
- this.tickled.setTickled(node.item.key);
800
- this._focusedDepth = depth;
801
- // Emit tickle for keyboard cursor movement
802
- this.dispatchEvent(new CustomEvent(`tickle`, {
803
- detail: { node, depth },
804
- bubbles: true,
805
- composed: true,
806
- }));
807
- this.requestUpdate();
808
- this.updateComplete.then(() => this.#scrollTickledIntoView());
809
- }
810
- #scrollTickledIntoView() {
811
- const tickledKey = this.tickled.tickledId;
812
- if (tickledKey === undefined)
813
- return;
814
- const item = this.shadowRoot?.querySelector(`[data-key="${tickledKey}"]`);
815
- item?.scrollIntoView({ block: `nearest`, behavior: `smooth` });
816
- }
817
- #onKeyDown;
818
- renderLoadingIndicator() {
819
- return html `<span class="loading-spinner"></span>`;
820
- }
821
- render() {
822
- const nodes = this.#getAllNodes();
823
- return html `
824
- <div
825
- id="container"
826
- data-input-mode=${this.tickled.inputMode}
827
- @keydown=${this.#onKeyDown}
828
- @dblclick=${this.#onDblClick}
829
- @pointerleave=${(e) => this.tickled.handlePointerLeave(e)}
830
- tabindex="0"
831
- >
832
- ${this.root ? this.#renderNodes(nodes) : nothing}
833
- </div>
834
- `;
835
- }
836
- #onDblClick;
837
- #renderNodes(nodes) {
838
- if (nodes.length === 0 && this.#pendingNode) {
839
- return html `
840
- <div class="tree-loading">
841
- ${this.renderLoadingIndicator()}
842
- </div>
843
- `;
844
- }
845
- return html `
846
- <ul class="tree-list" role="tree">
847
- ${nodes.map(({ node, depth }) => this._renderNode(node, depth))}
848
- </ul>
849
- `;
850
- }
851
- _renderNode(node, depth) {
852
- const selected = this._isSelected(node);
853
- const tickled = this._isFocused(node);
854
- const isBranch = node.item.isLeaf !== true;
855
- const isExpanded = this._isExpanded(node);
856
- const isPending = this.#pendingNode === node;
857
- const isFiltered = this.filterPredicate !== undefined && !this.#matchesFilter(node, depth);
858
- return html `
859
- <li
860
- class="item ${selected ? `selected` : ``} ${tickled ? `tickled` : ``} ${isBranch ? `branch` : `leaf`} ${isFiltered ? `filtered` : ``}"
861
- role="treeitem"
862
- aria-selected=${selected}
863
- aria-expanded=${isBranch ? isExpanded : nothing}
864
- aria-level=${depth + 1}
865
- data-key=${node.item.key}
866
- style=${`--depth: ${depth}`}
867
- @click=${(e) => this._handleItemClick(node, depth, e)}
868
- @pointerenter=${() => {
869
- this.tickled.handlePointerEnter(node.item.key);
870
- this.dispatchEvent(new CustomEvent(`tickle`, {
871
- detail: { node, depth },
872
- bubbles: true,
873
- composed: true,
874
- }));
875
- }}
876
- >
877
- ${this.renderNodeContent(node, depth)}
878
- ${isPending ? this.renderLoadingIndicator() : nothing}
879
- </li>
880
- `;
881
- }
882
- static { this.styles = [
883
- tickledStyles,
884
- tickledItemStyles,
885
- css `
886
- :host {
887
- --tree-bg: var(--surface-3);
888
- --tree-text: var(--surface-3-text);
889
- --tree-muted-text: var(--surface-muted-text);
890
- --tree-indent: 1ch;
891
- --tree-item-height: 28px;
892
- --tree-caret-size: 10px;
893
- --tree-radius: var(--radius-s);
894
-
895
- display: block;
896
- overflow: auto;
897
- box-sizing: border-box;
898
- background: var(--tree-bg);
899
- color: var(--tree-text);
900
- }
901
-
902
- #container {
903
- outline: none;
904
- min-height: 100%;
905
- }
906
-
907
- .tree-list {
908
- list-style: none;
909
- margin: 0;
910
- padding: var(--space-xs);
911
- }
912
-
913
- .item {
914
- display: flex;
915
- align-items: center;
916
- height: var(--tree-item-height);
917
- padding-left: calc(var(--tree-indent) * var(--depth, 0));
918
- cursor: pointer;
919
- user-select: none;
920
- font-family: var(--font-family);
921
- font-size: var(--text-m);
922
- border-radius: var(--tree-radius);
923
- transition: background var(--transition, 0.15s ease-out);
924
- margin: 1px 0;
925
- }
926
-
927
- .tree-caret {
928
- display: inline-flex;
929
- align-items: center;
930
- justify-content: center;
931
- width: var(--tree-caret-size);
932
- height: var(--tree-caret-size);
933
- flex-shrink: 0;
934
- margin-right: var(--space-xs);
935
- }
936
-
937
- .caret-icon {
938
- width: var(--tree-caret-size);
939
- height: var(--tree-caret-size);
940
- color: var(--tree-muted-text);
941
- transition: transform var(--transition, 0.15s ease-out);
942
- }
943
-
944
- .item.selected .caret-icon {
945
- color: var(--accent-text);
946
- }
947
-
948
- .tree-label {
949
- flex: 1;
950
- overflow: hidden;
951
- text-overflow: ellipsis;
952
- white-space: nowrap;
953
- }
954
-
955
- .tree-loading {
956
- display: flex;
957
- align-items: center;
958
- justify-content: center;
959
- padding: var(--space-m);
960
- }
961
-
962
- .loading-spinner {
963
- width: 16px;
964
- height: 16px;
965
- border: 2px solid var(--surface-5);
966
- border-top-color: var(--accent);
967
- border-radius: 50%;
968
- animation: tree-spin 0.7s linear infinite;
969
- }
970
-
971
- @keyframes tree-spin {
972
- to { transform: rotate(360deg); }
973
- }
974
-
975
- .item.filtered {
976
- display: none;
977
- }
978
-
979
- ::highlight(incr-search-highlight) {
980
- background: var(--search-highlight-bg, var(--accent));
981
- color: var(--search-highlight-color, var(--accent-text, #fff));
982
- border-radius: 2px;
983
- padding: 0 1px;
984
- }
985
- `,
986
- ]; }
987
- };
988
- __decorate([
989
- property({ type: Object })
990
- ], TreeBaseElement.prototype, "root", void 0);
991
- __decorate([
992
- property({ attribute: false })
993
- ], TreeBaseElement.prototype, "model", void 0);
994
- __decorate([
995
- property({ attribute: false })
996
- ], TreeBaseElement.prototype, "loadChildren", void 0);
997
- __decorate([
998
- property({ reflect: true, attribute: `exclusivity` })
999
- ], TreeBaseElement.prototype, "exclusivity", void 0);
1000
- __decorate([
1001
- property({ reflect: true, attribute: `selection-filter` })
1002
- ], TreeBaseElement.prototype, "selectionFilter", void 0);
1003
- __decorate([
1004
- property({ type: String, attribute: `interaction-mode` })
1005
- ], TreeBaseElement.prototype, "interactionMode", void 0);
1006
- __decorate([
1007
- property({ attribute: false })
1008
- ], TreeBaseElement.prototype, "selectedNode", void 0);
1009
- __decorate([
1010
- state()
1011
- ], TreeBaseElement.prototype, "_selectedNodes", void 0);
1012
- __decorate([
1013
- property({ attribute: false })
1014
- ], TreeBaseElement.prototype, "filterPredicate", void 0);
1015
- __decorate([
1016
- property({ type: Boolean, attribute: `disable-keyboard-navigation` })
1017
- ], TreeBaseElement.prototype, "disableKeyboardNavigation", void 0);
1018
- __decorate([
1019
- state()
1020
- ], TreeBaseElement.prototype, "_expandedKeys", void 0);
1021
- __decorate([
1022
- state()
1023
- ], TreeBaseElement.prototype, "_focusedDepth", void 0);
1024
- TreeBaseElement = __decorate([
1025
- customElement(`ixfx-tree-base`)
1026
- ], TreeBaseElement);
1027
- export { TreeBaseElement };
1028
- //# sourceMappingURL=tree-base.js.map