@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,1249 +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 { TreeDataModel } from '../common/tree-data-model.js';
8
- import { css, html, LitElement, nothing } from 'lit';
9
- import { customElement, property, state } from 'lit/decorators.js';
10
- import { TickledController } from '../interaction/tickled-controller.js';
11
- import { tickledStyles } from '../interaction/tickled-styles.js';
12
- const EXPAND_DEBOUNCE_MS = 150;
13
- /**
14
- * Base class for Miller column components. Handles column lifecycle,
15
- * column resizing, keyboard navigation, and selection modes.
16
- *
17
- * Subclasses must override `renderColumnContent`.
18
- *
19
- * ## Interaction modes (`interactionMode`)
20
- *
21
- * Controls how clicks map to selection changes. Default: `'standard'`.
22
- *
23
- * - `implicit`: Selection follows the cursor path (navigation mode).
24
- * - `standard`: Single click selects; Shift+click range-selects within a column;
25
- * Cmd/Ctrl+click toggles individual items.
26
- * - `manual`: Component never modifies selection. Use `selectedKeys` / `setSelected`
27
- * / `clearSelection` to drive state externally.
28
- * - `checked`: Checkboxes on every item (rendered by subclass via `_isChecked` /
29
- * `_handleCheckboxClick`). Clicking the item navigates/expands; clicking the
30
- * checkbox toggles selection of the node and all loaded descendants.
31
- *
32
- * ## Events
33
- * - `expand`: FYI event fired after a column opens. Detail: `{ node, depth }`
34
- * - `collapse`: FYI event fired when a column closes. Detail: `{ node, depth }`
35
- * - `header-click`: fired when a column header is clicked (requires `headers` attr).
36
- * Detail: `{ depth, label, path: MillerNode[] }`
37
- * - `activate`: fired when Enter is pressed on an item. Detail: `{ node, depth }`
38
- * - `select`: fired when the selection set changes. Detail: `{ selected, previous }`
39
- * - `item-click`: fired on any item click. Detail: `{ node, depth }`
40
- * - `tickle`: fired when an item is hovered or keyboard cursor moves to it. Detail: `{ node, depth }`
41
- *
42
- * ## CSS variables
43
- * - `--column-bg`: var(--surface-3)
44
- * - `--column-header-bg`: var(--surface-2)
45
- * - `--column-header-text`: var(--surface-muted-text)
46
- * - `--column-separator`: var(--surface-5)
47
- * - `--column-resize-handle`: var(--surface-5)
48
- * - `--column-resize-handle-hover`: var(--accent)
49
- * - `--column-resize-width`: 4px
50
- * - `--item-hover-bg`: var(--item-bg-tickled)
51
- * - `--item-selected-bg`: var(--item-bg-selected)
52
- * - `--item-selected-text`: var(--item-text-selected)
53
- */
54
- let MillerBaseElement = class MillerBaseElement extends LitElement {
55
- constructor() {
56
- super(...arguments);
57
- this.headers = false;
58
- /**
59
- * Controls the column-level interaction pattern (how clicks map to column changes).
60
- * This is distinct from `selectionFilter` (which restricts which node kinds are selectable).
61
- * Default: `'standard'`.
62
- */
63
- this.interactionMode = `standard`;
64
- // --- TreeComponent shared interface properties ---
65
- this.selectionFilter = 'leaf';
66
- this.exclusivity = 'none';
67
- this._columns = [];
68
- // Selected node at each depth (implicit mode)
69
- this._selectedByDepth = new Map();
70
- // Selected item keys (standard / manual / checked / interactionMode modes)
71
- this._selectedKeys = new Set();
72
- // Full selection set — implements TreeComponent.selectedNodes
73
- this._selectedNodes = new Set();
74
- // User-resized widths by depth (px)
75
- this.#columnWidths = new Map();
76
- // Resize drag state
77
- this.#resizingDepth = -1;
78
- this.#resizeStartX = 0;
79
- this.#resizeStartWidth = 0;
80
- // Tickled controller for hover/keyboard focus
81
- this.tickled = new TickledController(this, {
82
- getItems: () => {
83
- const items = [];
84
- for (let depth = 0; depth < this._columns.length; depth++) {
85
- const col = this._columns[depth];
86
- if (col) {
87
- for (const node of col) {
88
- items.push({ id: this.#buildTickledId(node, depth) });
89
- }
90
- }
91
- }
92
- return items;
93
- },
94
- });
95
- this.#onKeyDown = (event) => {
96
- const currentDepth = this.#getTickledDepthOrDefault();
97
- const col = this._columns[currentDepth];
98
- if (!col || col.length === 0) {
99
- const depth0Col = this._columns[0];
100
- if (depth0Col && depth0Col.length > 0) {
101
- this.tickled.setTickled(this.#buildTickledId(depth0Col[0], 0));
102
- this.requestUpdate();
103
- }
104
- return;
105
- }
106
- switch (event.key) {
107
- case `ArrowDown`: {
108
- event.preventDefault();
109
- const current = this.#getTickledNodeAndDepth();
110
- let targetIndex = 0;
111
- if (current && current.depth === currentDepth) {
112
- targetIndex = Math.min(current.index + 1, col.length - 1);
113
- }
114
- const targetNode = col[targetIndex];
115
- if (!targetNode)
116
- break;
117
- this.#setTickledNode(targetNode, currentDepth);
118
- if (this.interactionMode === `standard` || this.interactionMode === `vscode`) {
119
- const prevIndex = current?.index ?? 0;
120
- if (event.shiftKey) {
121
- if (!this.#anchor || this.#anchor.depth !== currentDepth) {
122
- const anchorNode = col[prevIndex];
123
- if (anchorNode) {
124
- this.#anchor = {
125
- key: anchorNode.item.key,
126
- depth: currentDepth,
127
- index: prevIndex,
128
- selectionSnapshot: this.interactionMode === `vscode` ? new Set(this._selectedKeys) : undefined,
129
- };
130
- }
131
- }
132
- if (this.#anchor) {
133
- const from = Math.min(this.#anchor.index, targetIndex);
134
- const to = Math.max(this.#anchor.index, targetIndex);
135
- const rangeKeys = col.slice(from, to + 1).map(n => n.item.key);
136
- if (this.interactionMode === `vscode`) {
137
- const snap = this.#anchor.selectionSnapshot;
138
- for (const k of rangeKeys) {
139
- if (snap.has(k))
140
- this._selectedKeys.delete(k);
141
- else
142
- this._selectedKeys.add(k);
143
- }
144
- }
145
- else {
146
- this._selectedKeys = new Set(rangeKeys);
147
- }
148
- }
149
- }
150
- else if (this.interactionMode === `standard`) {
151
- this.#anchor = { key: targetNode.item.key, depth: currentDepth, index: targetIndex };
152
- }
153
- else {
154
- this.#anchor = undefined;
155
- }
156
- }
157
- this.requestUpdate();
158
- break;
159
- }
160
- case `ArrowUp`: {
161
- event.preventDefault();
162
- const current = this.#getTickledNodeAndDepth();
163
- let targetIndex = 0;
164
- if (current && current.depth === currentDepth) {
165
- targetIndex = Math.max(current.index - 1, 0);
166
- }
167
- const targetNode = col[targetIndex];
168
- if (!targetNode)
169
- break;
170
- this.#setTickledNode(targetNode, currentDepth);
171
- if (this.interactionMode === `standard` || this.interactionMode === `vscode`) {
172
- const prevIndex = current?.index ?? 0;
173
- if (event.shiftKey) {
174
- if (!this.#anchor || this.#anchor.depth !== currentDepth) {
175
- const anchorNode = col[prevIndex];
176
- if (anchorNode) {
177
- this.#anchor = {
178
- key: anchorNode.item.key,
179
- depth: currentDepth,
180
- index: prevIndex,
181
- selectionSnapshot: this.interactionMode === `vscode` ? new Set(this._selectedKeys) : undefined,
182
- };
183
- }
184
- }
185
- if (this.#anchor) {
186
- const from = Math.min(this.#anchor.index, targetIndex);
187
- const to = Math.max(this.#anchor.index, targetIndex);
188
- const rangeKeys = col.slice(from, to + 1).map(n => n.item.key);
189
- if (this.interactionMode === `vscode`) {
190
- const snap = this.#anchor.selectionSnapshot;
191
- for (const k of rangeKeys) {
192
- if (snap.has(k))
193
- this._selectedKeys.delete(k);
194
- else
195
- this._selectedKeys.add(k);
196
- }
197
- }
198
- else {
199
- this._selectedKeys = new Set(rangeKeys);
200
- }
201
- }
202
- }
203
- else if (this.interactionMode === `standard`) {
204
- this.#anchor = { key: targetNode.item.key, depth: currentDepth, index: targetIndex };
205
- }
206
- else {
207
- this.#anchor = undefined;
208
- }
209
- }
210
- this.requestUpdate();
211
- break;
212
- }
213
- case `ArrowRight`: {
214
- event.preventDefault();
215
- const tickled = this.#getTickledNodeAndDepth();
216
- if (!tickled) {
217
- if (col.length > 0) {
218
- this.#setTickledNode(col[0], currentDepth);
219
- this.requestUpdate();
220
- }
221
- return;
222
- }
223
- const { node, depth } = tickled;
224
- if (this.interactionMode === `vscode` || this.interactionMode === `standard`) {
225
- this._selectedByDepth.set(depth, node);
226
- this.#expandNode(node, depth);
227
- }
228
- else {
229
- this.#onItemClick(node, depth);
230
- }
231
- if (this._columns.length > depth + 1) {
232
- const nextCol = this._columns[depth + 1];
233
- if (nextCol && nextCol.length > 0) {
234
- this.#setTickledNode(nextCol[0], depth + 1);
235
- }
236
- }
237
- this.requestUpdate();
238
- break;
239
- }
240
- case `ArrowLeft`: {
241
- event.preventDefault();
242
- if (currentDepth > 0) {
243
- this.#abortPending();
244
- this._columns = this._columns.slice(0, currentDepth);
245
- const prevCol = this._columns[currentDepth - 1];
246
- if (prevCol && prevCol.length > 0) {
247
- const selectedNode = this._selectedByDepth.get(currentDepth - 1);
248
- const targetNode = selectedNode && prevCol.includes(selectedNode) ? selectedNode : prevCol[0];
249
- this.#setTickledNode(targetNode, currentDepth - 1);
250
- }
251
- this.requestUpdate();
252
- }
253
- break;
254
- }
255
- case `Enter`: {
256
- event.preventDefault();
257
- const tickled = this.#getTickledNodeAndDepth();
258
- if (!tickled)
259
- return;
260
- const { node, depth, index } = tickled;
261
- if (this.interactionMode === `standard` || this.interactionMode === `vscode`) {
262
- if (event.shiftKey && this.#anchor?.depth === depth) {
263
- const from = Math.min(this.#anchor.index, index);
264
- const to = Math.max(this.#anchor.index, index);
265
- this._selectedKeys = new Set(col.slice(from, to + 1).map(n => n.item.key));
266
- }
267
- else {
268
- this._selectedKeys.add(node.item.key);
269
- this.#anchor = { key: node.item.key, depth, index };
270
- }
271
- }
272
- else {
273
- this._selectedByDepth.set(depth, node);
274
- }
275
- this.dispatchEvent(new CustomEvent(`activate`, {
276
- detail: { node, depth },
277
- bubbles: true,
278
- composed: true,
279
- }));
280
- this.requestUpdate();
281
- break;
282
- }
283
- case `Escape`: {
284
- event.preventDefault();
285
- this.#abortPending();
286
- if (this._columns.length > 1) {
287
- this._columns = this._columns.slice(0, -1);
288
- const newDepth = Math.max(0, currentDepth - 1);
289
- const prevCol = this._columns[newDepth];
290
- if (prevCol && prevCol.length > 0) {
291
- const selectedNode = this._selectedByDepth.get(newDepth);
292
- const targetNode = selectedNode && prevCol.includes(selectedNode) ? selectedNode : prevCol[0];
293
- this.#setTickledNode(targetNode, newDepth);
294
- }
295
- this.requestUpdate();
296
- }
297
- break;
298
- }
299
- }
300
- };
301
- // --- Column resize ---
302
- this.#onResizeStart = (event, depth) => {
303
- event.preventDefault();
304
- event.stopPropagation();
305
- this.#resizingDepth = depth;
306
- this.#resizeStartX = event.clientX;
307
- const el = this.shadowRoot?.querySelectorAll(`.column`)[depth];
308
- this.#resizeStartWidth = el ? el.getBoundingClientRect().width : 200;
309
- window.addEventListener(`pointermove`, this.#onResizeMove);
310
- window.addEventListener(`pointerup`, this.#onResizeEnd);
311
- };
312
- this.#onResizeMove = (event) => {
313
- if (this.#resizingDepth < 0)
314
- return;
315
- const delta = event.clientX - this.#resizeStartX;
316
- const newWidth = Math.max(32, this.#resizeStartWidth + delta);
317
- this.#columnWidths.set(this.#resizingDepth, newWidth);
318
- this.requestUpdate();
319
- };
320
- this.#onResizeEnd = () => {
321
- this.#resizingDepth = -1;
322
- window.removeEventListener(`pointermove`, this.#onResizeMove);
323
- window.removeEventListener(`pointerup`, this.#onResizeEnd);
324
- };
325
- }
326
- // Most recently selected node
327
- #lastSelectedNode;
328
- // Anchor for shift-click / shift-arrow range selection
329
- #anchor;
330
- // User-resized widths by depth (px)
331
- #columnWidths;
332
- // Pending lazy expansion
333
- #pendingNode;
334
- #pendingController;
335
- // Debounce timer for loadChildren callback
336
- #expandTimer;
337
- // Resize drag state
338
- #resizingDepth;
339
- #resizeStartX;
340
- #resizeStartWidth;
341
- // Model subscription teardown
342
- #modelUnsubscribe;
343
- // Helper to build unique ID from depth and node key
344
- #buildTickledId(node, depth) {
345
- return `${depth}:${node.item.key}`;
346
- }
347
- // Helper to extract depth from tickled ID
348
- #getTickledDepth() {
349
- const id = this.tickled.tickledId;
350
- if (!id)
351
- return undefined;
352
- const colonIndex = id.indexOf(':');
353
- if (colonIndex < 0)
354
- return undefined;
355
- return Number(id.substring(0, colonIndex));
356
- }
357
- updated(changedProps) {
358
- if (changedProps.has(`root`) && this.root) {
359
- this.#abortPending();
360
- this._columns = this.root.children ? [this.root.children] : [];
361
- this._selectedByDepth.clear();
362
- this._selectedKeys = new Set();
363
- this._selectedNodes.clear();
364
- this.#lastSelectedNode = undefined;
365
- this.#anchor = undefined;
366
- this.tickled.clearTickled();
367
- }
368
- if (changedProps.has(`model`)) {
369
- this.#modelUnsubscribe?.();
370
- this.#modelUnsubscribe = undefined;
371
- const model = this.model;
372
- if (model) {
373
- this.root = model.root;
374
- this.#modelUnsubscribe = model._subscribe(event => {
375
- if (event.type === 'root') {
376
- this.root = event.root;
377
- this.requestUpdate();
378
- }
379
- else if (event.type === 'invalidate') {
380
- // Collapse the column that shows this node's children, if open
381
- // Find which column depth contains the invalidated node
382
- for (let depth = 0; depth < this._columns.length - 1; depth++) {
383
- const col = this._columns[depth];
384
- if (col?.some(n => n.item.key === event.key)) {
385
- this._columns = this._columns.slice(0, depth + 1);
386
- this.requestUpdate();
387
- break;
388
- }
389
- }
390
- }
391
- });
392
- }
393
- }
394
- // Detect when the app has resolved a pending expansion
395
- if (this.#pendingNode?.children !== undefined && this._loadingDepth !== undefined) {
396
- const loadingDepth = this._loadingDepth;
397
- const resolvedChildren = this.#pendingNode.children;
398
- this.#pendingNode = undefined;
399
- this.#pendingController = undefined;
400
- this._loadingDepth = undefined;
401
- const cols = this._columns.slice(0, loadingDepth);
402
- if (resolvedChildren.length > 0)
403
- cols.push(resolvedChildren);
404
- this._columns = cols;
405
- }
406
- // Scroll new rightmost column into view
407
- const prevColumns = changedProps.get(`_columns`);
408
- const columnAdded = changedProps.has(`_columns`) && (prevColumns?.length ?? 0) < this._columns.length;
409
- const loadingAppeared = changedProps.has(`_loadingDepth`) && this._loadingDepth !== undefined;
410
- if (columnAdded || loadingAppeared) {
411
- const container = this.shadowRoot?.querySelector(`#container`);
412
- container?.scrollTo({ left: container.scrollWidth, behavior: `smooth` });
413
- }
414
- }
415
- disconnectedCallback() {
416
- super.disconnectedCallback();
417
- this.#modelUnsubscribe?.();
418
- this.#modelUnsubscribe = undefined;
419
- }
420
- // --- Public API ---
421
- getConfig() {
422
- const columnWidths = {};
423
- for (const [depth, width] of this.#columnWidths) {
424
- columnWidths[depth] = width;
425
- }
426
- return { columnWidths };
427
- }
428
- setConfig(config) {
429
- this.#columnWidths.clear();
430
- for (const [depth, width] of Object.entries(config.columnWidths)) {
431
- this.#columnWidths.set(Number(depth), width);
432
- }
433
- this.requestUpdate();
434
- }
435
- /** Read current selection as an immutable set of item keys. */
436
- get selectedKeys() {
437
- return this._selectedKeys;
438
- }
439
- /** Replace entire selection and trigger a re-render. */
440
- set selectedKeys(keys) {
441
- this._selectedKeys = new Set(keys);
442
- this.requestUpdate();
443
- }
444
- // --- TreeComponent.selectedNode / selectedNodes ---
445
- /** The most recently selected node. */
446
- get selectedNode() {
447
- return this.#lastSelectedNode;
448
- }
449
- set selectedNode(node) {
450
- this.#lastSelectedNode = node;
451
- if (node) {
452
- if (this.interactionMode === `implicit` || this.interactionMode === `standard`) {
453
- this._selectedKeys = new Set([node.item.key]);
454
- }
455
- }
456
- this.requestUpdate();
457
- }
458
- /** Full selection set (implements TreeComponent interface). */
459
- get selectedNodes() {
460
- return this._selectedNodes;
461
- }
462
- // --- TreeComponent programmatic selection ---
463
- /** Add `node` to the selection (respects selectionFilter). Dispatches `select` event. */
464
- select(node) {
465
- if (!this.#canSelect(node))
466
- return;
467
- const prev = new Set(this._selectedNodes);
468
- this._selectedNodes.add(node);
469
- this._selectedKeys.add(node.item.key);
470
- this.#lastSelectedNode = node;
471
- this.#dispatchSelectEvent(prev);
472
- this.requestUpdate();
473
- }
474
- /** Remove `node` from the selection. Dispatches `select` event. */
475
- deselect(node) {
476
- if (!this._selectedNodes.has(node))
477
- return;
478
- const prev = new Set(this._selectedNodes);
479
- this._selectedNodes.delete(node);
480
- this._selectedKeys.delete(node.item.key);
481
- if (this.#lastSelectedNode === node) {
482
- this.#lastSelectedNode = [...this._selectedNodes].at(-1);
483
- }
484
- this.#dispatchSelectEvent(prev);
485
- this.requestUpdate();
486
- }
487
- /**
488
- * Clear all selection and trigger a re-render.
489
- */
490
- clearSelection() {
491
- const prev = new Set(this._selectedNodes);
492
- this._selectedKeys = new Set();
493
- this._selectedNodes.clear();
494
- this.#lastSelectedNode = undefined;
495
- if (prev.size > 0) {
496
- this.#dispatchSelectEvent(prev);
497
- }
498
- this.requestUpdate();
499
- }
500
- /**
501
- * Select or deselect a single node by key.
502
- * In `checked` interactionMode this also recursively selects/deselects all loaded descendants.
503
- */
504
- setSelected(node, selected) {
505
- if (this.interactionMode === `checked`) {
506
- this.#applyCheckedToggle(node, selected);
507
- }
508
- else {
509
- if (selected) {
510
- this._selectedKeys.add(node.item.key);
511
- this._selectedNodes.add(node);
512
- }
513
- else {
514
- this._selectedKeys.delete(node.item.key);
515
- this._selectedNodes.delete(node);
516
- }
517
- }
518
- this.requestUpdate();
519
- }
520
- /**
521
- * Return all MillerNodes whose key is in `_selectedKeys`, searching only
522
- * the currently visible columns.
523
- */
524
- getSelected() {
525
- const results = [];
526
- for (const col of this._columns) {
527
- for (const node of col) {
528
- if (this._selectedKeys.has(node.item.key))
529
- results.push(node);
530
- }
531
- }
532
- return results;
533
- }
534
- /**
535
- * Programmatically navigate to a node by key path.
536
- */
537
- navigateTo(keys) {
538
- if (!this.root?.children)
539
- return false;
540
- this.#abortPending();
541
- this._selectedByDepth.clear();
542
- this.tickled.clearTickled();
543
- const newColumns = [this.root.children];
544
- let currentColumn = this.root.children;
545
- let success = true;
546
- let lastNode;
547
- let lastDepth = 0;
548
- for (let depth = 0; depth < keys.length; depth++) {
549
- const idx = currentColumn.findIndex(n => n.item.key === keys[depth]);
550
- if (idx < 0) {
551
- success = false;
552
- break;
553
- }
554
- const node = currentColumn[idx];
555
- this._selectedByDepth.set(depth, node);
556
- lastNode = node;
557
- lastDepth = depth;
558
- if (node.item.isLeaf || !node.children || node.children.length === 0) {
559
- if (depth < keys.length - 1)
560
- success = false;
561
- break;
562
- }
563
- newColumns.push(node.children);
564
- currentColumn = node.children;
565
- }
566
- this._columns = newColumns;
567
- if (lastNode) {
568
- this.tickled.setTickled(this.#buildTickledId(lastNode, lastDepth));
569
- }
570
- if (this.interactionMode !== `implicit` && this.interactionMode !== `manual`) {
571
- const leafKey = keys.at(-1);
572
- if (leafKey)
573
- this._selectedKeys = new Set([leafKey]);
574
- }
575
- this.requestUpdate();
576
- this.#scrollNavigatedItemIntoView();
577
- return success;
578
- }
579
- /**
580
- * Programmatically navigate to the first node (breadth-first) matching a predicate.
581
- */
582
- navigateToNode(predicate) {
583
- if (!this.root?.children)
584
- return false;
585
- const keyPath = this.#findNodePath(this.root.children, predicate);
586
- if (!keyPath)
587
- return false;
588
- return this.navigateTo(keyPath);
589
- }
590
- getNodes() {
591
- if (!this.root?.children)
592
- return [];
593
- const result = [];
594
- const visit = (node, depth) => {
595
- result.push({ node, depth });
596
- if (node.children) {
597
- for (const child of node.children)
598
- visit(child, depth + 1);
599
- }
600
- };
601
- for (const child of this.root.children)
602
- visit(child, 0);
603
- return result;
604
- }
605
- #findNodePath(nodes, predicate, prefix = []) {
606
- for (const node of nodes) {
607
- const path = [...prefix, node.item.key];
608
- if (predicate(node))
609
- return path;
610
- if (node.children?.length) {
611
- const result = this.#findNodePath(node.children, predicate, path);
612
- if (result)
613
- return result;
614
- }
615
- }
616
- return undefined;
617
- }
618
- // --- Methods subclasses override ---
619
- renderColumnContent(nodes, depth) {
620
- console.warn(`ixfx-miller-base: renderColumnContent not overridden. depth=${depth}, nodes=${nodes.length}`);
621
- return nothing;
622
- }
623
- // Called by subclasses to handle item clicks
624
- _handleItemClick(node, depth, event) {
625
- this.#onItemClick(node, depth, event);
626
- }
627
- /**
628
- * Called by subclasses (in `checked` interactionMode) when a checkbox is clicked.
629
- */
630
- _handleCheckboxClick(event, node, _depth) {
631
- event.stopPropagation();
632
- this.#onCheckboxClick(node);
633
- }
634
- /**
635
- * Called by subclasses when an item is double-clicked.
636
- */
637
- _handleItemDblClick(node, depth, _event) {
638
- this.dispatchEvent(new CustomEvent(`item-dblclick`, {
639
- detail: { node, depth },
640
- bubbles: true,
641
- composed: true,
642
- }));
643
- }
644
- /**
645
- * Called by subclasses when an item is right-clicked.
646
- */
647
- _handleItemRightClick(node, depth, event) {
648
- this.dispatchEvent(new CustomEvent(`item-rightclick`, {
649
- detail: { node, depth, mouseEvent: event },
650
- bubbles: true,
651
- composed: true,
652
- }));
653
- }
654
- /**
655
- * Called by subclasses when a column header is right-clicked.
656
- */
657
- _handleHeaderRightClick(event, depth) {
658
- const label = this.#getColumnHeader(depth);
659
- const path = this.#buildPath(depth);
660
- this.dispatchEvent(new CustomEvent(`header-rightclick`, {
661
- detail: { depth, label, path, mouseEvent: event },
662
- bubbles: true,
663
- composed: true,
664
- }));
665
- }
666
- _isSelected(node, depth) {
667
- if (this.interactionMode === `implicit`) {
668
- return this._selectedByDepth.get(depth) === node;
669
- }
670
- return this._selectedKeys.has(node.item.key);
671
- }
672
- #isAncestor(node, depth) {
673
- const nextCol = this._columns[depth + 1];
674
- return nextCol !== undefined && node.children === nextCol;
675
- }
676
- _isOpen(node, depth) {
677
- return this.#isAncestor(node, depth);
678
- }
679
- /**
680
- * Return the display state for an item identified by key at a given depth.
681
- */
682
- getItemState(key, depth) {
683
- const col = this._columns[depth];
684
- const node = col?.find(n => n.item.key === key);
685
- if (!node)
686
- return undefined;
687
- return {
688
- selected: this._isSelected(node, depth),
689
- open: this.#isAncestor(node, depth),
690
- focused: this._isFocused(node, depth),
691
- isLeaf: node.item.isLeaf ?? false,
692
- };
693
- }
694
- // --- Internal ---
695
- #canSelect(node) {
696
- if (this.selectionFilter === 'none')
697
- return false;
698
- if (this.selectionFilter === 'leaf')
699
- return node.item.isLeaf !== false;
700
- if (this.selectionFilter === 'branch')
701
- return node.item.isLeaf === false || (node.children !== undefined && node.children.length > 0);
702
- return true;
703
- }
704
- #dispatchSelectEvent(previous) {
705
- const detail = {
706
- selected: new Set(this._selectedNodes),
707
- previous,
708
- };
709
- this.dispatchEvent(new CustomEvent(`select`, {
710
- detail,
711
- bubbles: true,
712
- composed: true,
713
- }));
714
- }
715
- #abortPending() {
716
- if (this.#expandTimer !== undefined) {
717
- clearTimeout(this.#expandTimer);
718
- this.#expandTimer = undefined;
719
- }
720
- if (this.#pendingController) {
721
- const node = this.#pendingNode;
722
- const depth = this._loadingDepth;
723
- this.#pendingController.abort();
724
- this.#pendingController = undefined;
725
- this.#pendingNode = undefined;
726
- this._loadingDepth = undefined;
727
- if (node && depth !== undefined) {
728
- this.dispatchEvent(new CustomEvent(`collapse`, {
729
- detail: { node, depth },
730
- bubbles: true,
731
- composed: true,
732
- }));
733
- }
734
- }
735
- }
736
- /**
737
- * Build the ancestry path for a given column depth.
738
- */
739
- #buildPath(depth) {
740
- const path = [];
741
- if (this.root)
742
- path.push(this.root);
743
- for (let d = 0; d < depth; d++) {
744
- const sel = this._selectedByDepth.get(d);
745
- if (sel)
746
- path.push(sel);
747
- }
748
- return path;
749
- }
750
- #onHeaderClick(depth) {
751
- const label = this.#getColumnHeader(depth);
752
- const path = this.#buildPath(depth);
753
- const detail = { depth, label, path };
754
- this.dispatchEvent(new CustomEvent(`header-click`, {
755
- detail,
756
- bubbles: true,
757
- composed: true,
758
- }));
759
- }
760
- #onItemClick(node, depth, event) {
761
- if (this._loadingDepth !== undefined && this._loadingDepth > depth) {
762
- this.#abortPending();
763
- }
764
- this.tickled.setTickled(this.#buildTickledId(node, depth));
765
- this.dispatchEvent(new CustomEvent(`item-click`, {
766
- detail: { node, depth },
767
- bubbles: true,
768
- composed: true,
769
- }));
770
- switch (this.interactionMode) {
771
- case `implicit`:
772
- this.#handleImplicitClick(node, depth);
773
- break;
774
- case `standard`:
775
- this.#handleStandardClick(node, depth, event);
776
- break;
777
- case `vscode`:
778
- this.#handleStandardClick(node, depth, event);
779
- break;
780
- case `manual`:
781
- break;
782
- case `checked`:
783
- this.#expandNode(node, depth);
784
- break;
785
- }
786
- }
787
- #handleImplicitClick(node, depth) {
788
- const previous = new Set(this._selectedNodes);
789
- this._selectedByDepth.set(depth, node);
790
- this.#lastSelectedNode = node;
791
- this._selectedKeys = new Set([node.item.key]);
792
- this._selectedNodes.clear();
793
- this._selectedNodes.add(node);
794
- this.#expandNode(node, depth);
795
- if (!previous.has(node)) {
796
- this.#dispatchSelectEvent(previous);
797
- }
798
- }
799
- #handleStandardClick(node, depth, event) {
800
- const col = this._columns[depth];
801
- const index = col ? col.indexOf(node) : -1;
802
- const isMeta = event ? (event.metaKey || event.ctrlKey) : false;
803
- const isShift = event ? event.shiftKey : false;
804
- if (isMeta) {
805
- if (this._selectedKeys.has(node.item.key)) {
806
- this._selectedKeys.delete(node.item.key);
807
- this._selectedNodes.delete(node);
808
- }
809
- else {
810
- this._selectedKeys.add(node.item.key);
811
- this._selectedNodes.add(node);
812
- }
813
- this.#anchor = index >= 0 ? { key: node.item.key, depth, index } : this.#anchor;
814
- this.requestUpdate();
815
- return;
816
- }
817
- if (isShift && this.#anchor && this.#anchor.depth === depth && col) {
818
- const from = Math.min(this.#anchor.index, index);
819
- const to = Math.max(this.#anchor.index, index);
820
- const rangeNodes = col.slice(from, to + 1);
821
- this._selectedKeys = new Set(rangeNodes.map(n => n.item.key));
822
- this._selectedNodes = new Set(rangeNodes);
823
- this.requestUpdate();
824
- return;
825
- }
826
- const previous = new Set(this._selectedNodes);
827
- this._selectedKeys = new Set([node.item.key]);
828
- this._selectedNodes = new Set([node]);
829
- this.#anchor = index >= 0 ? { key: node.item.key, depth, index } : undefined;
830
- this._selectedByDepth.set(depth, node);
831
- this.#lastSelectedNode = node;
832
- this.#expandNode(node, depth);
833
- if (!previous.has(node) || previous.size !== 1) {
834
- this.#dispatchSelectEvent(previous);
835
- }
836
- }
837
- #expandNode(node, depth) {
838
- if (node.item.isLeaf) {
839
- this._columns = this._columns.slice(0, depth + 1);
840
- this.requestUpdate();
841
- return;
842
- }
843
- if (node.children === undefined) {
844
- this._columns = this._columns.slice(0, depth + 1);
845
- this._loadingDepth = depth + 1;
846
- this.#pendingNode = node;
847
- const controller = new AbortController();
848
- this.#pendingController = controller;
849
- this.dispatchEvent(new CustomEvent(`expand`, {
850
- detail: { node, depth },
851
- bubbles: true,
852
- composed: true,
853
- }));
854
- const applyChildren = (children) => {
855
- if (controller.signal.aborted)
856
- return;
857
- node.children = children;
858
- this.#pendingNode = undefined;
859
- this.#pendingController = undefined;
860
- this._loadingDepth = undefined;
861
- const cols = this._columns.slice(0, depth + 1);
862
- if (children.length > 0)
863
- cols.push(children);
864
- this._columns = cols;
865
- };
866
- const handleError = (err) => {
867
- if (err.name !== `AbortError`)
868
- console.error(err);
869
- node.children = [];
870
- this.#pendingNode = undefined;
871
- this.#pendingController = undefined;
872
- this._loadingDepth = undefined;
873
- this.requestUpdate();
874
- };
875
- const loadFn = this.model
876
- ? (n, d, s) => this.model.getChildren(n, d, s)
877
- : this.loadChildren;
878
- if (loadFn) {
879
- if (this.#expandTimer !== undefined) {
880
- clearTimeout(this.#expandTimer);
881
- }
882
- this.#expandTimer = setTimeout(() => {
883
- this.#expandTimer = undefined;
884
- if (this.#pendingNode !== node)
885
- return;
886
- const result = loadFn(node, depth, controller.signal);
887
- if (result instanceof Promise) {
888
- result.then(applyChildren).catch(handleError);
889
- }
890
- else {
891
- applyChildren(result);
892
- }
893
- }, EXPAND_DEBOUNCE_MS);
894
- }
895
- else {
896
- this._loadingDepth = undefined;
897
- this.#pendingNode = undefined;
898
- this.#pendingController = undefined;
899
- const newColumns = this._columns.slice(0, depth + 1);
900
- newColumns.push([]);
901
- this._columns = newColumns;
902
- }
903
- }
904
- else {
905
- const newColumns = this._columns.slice(0, depth + 1);
906
- newColumns.push(node.children);
907
- this._columns = newColumns;
908
- this.dispatchEvent(new CustomEvent(`expand`, {
909
- detail: { node, depth },
910
- bubbles: true,
911
- composed: true,
912
- }));
913
- }
914
- }
915
- #onCheckboxClick(node) {
916
- const currentlySelected = this._selectedKeys.has(node.item.key);
917
- const hasLoadedChildren = !!(node.children?.length);
918
- const allDescendantsSelected = hasLoadedChildren
919
- ? this.#allDescendantsSelected(node)
920
- : currentlySelected;
921
- if (allDescendantsSelected) {
922
- this.#applyCheckedToggle(node, false);
923
- }
924
- else {
925
- this.#applyCheckedToggle(node, true);
926
- }
927
- this.requestUpdate();
928
- }
929
- #allDescendantsSelected(node) {
930
- if (!this._selectedKeys.has(node.item.key))
931
- return false;
932
- if (!node.children?.length)
933
- return true;
934
- return node.children.every(child => this.#allDescendantsSelected(child));
935
- }
936
- #applyCheckedToggle(node, selected) {
937
- if (selected) {
938
- this._selectedKeys.add(node.item.key);
939
- this._selectedNodes.add(node);
940
- }
941
- else {
942
- this._selectedKeys.delete(node.item.key);
943
- this._selectedNodes.delete(node);
944
- }
945
- if (node.children) {
946
- for (const child of node.children) {
947
- this.#applyCheckedToggle(child, selected);
948
- }
949
- }
950
- }
951
- #getTickledDepthOrDefault() {
952
- return this.#getTickledDepth() ?? 0;
953
- }
954
- #getTickledNodeAndDepth() {
955
- const id = this.tickled.tickledId;
956
- if (!id)
957
- return undefined;
958
- const colonIndex = id.indexOf(':');
959
- if (colonIndex < 0)
960
- return undefined;
961
- const depth = Number(id.substring(0, colonIndex));
962
- const key = id.substring(colonIndex + 1);
963
- const col = this._columns[depth];
964
- if (!col)
965
- return undefined;
966
- const index = col.findIndex(n => n.item.key === key);
967
- if (index < 0)
968
- return undefined;
969
- return { node: col[index], depth, index };
970
- }
971
- #scrollNavigatedItemIntoView() {
972
- requestAnimationFrame(() => {
973
- const tickled = this.#getTickledNodeAndDepth();
974
- if (!tickled)
975
- return;
976
- const container = this.shadowRoot?.querySelectorAll(`.column`)[tickled.depth]?.querySelector(`.column-content`);
977
- if (!container)
978
- return;
979
- const items = container.querySelectorAll(`.item`);
980
- const item = items[tickled.index];
981
- item?.scrollIntoView({ block: `nearest`, behavior: `smooth` });
982
- });
983
- }
984
- #setTickledNode(node, depth) {
985
- this.tickled.setTickled(this.#buildTickledId(node, depth));
986
- this.dispatchEvent(new CustomEvent(`tickle`, {
987
- detail: { node, depth },
988
- bubbles: true,
989
- composed: true,
990
- }));
991
- }
992
- #onKeyDown;
993
- // --- Column resize ---
994
- #onResizeStart;
995
- #onResizeMove;
996
- #onResizeEnd;
997
- // --- Render ---
998
- #getColumnHeader(depth) {
999
- if (depth === 0)
1000
- return this.root?.item.label ?? ``;
1001
- const explicit = this._selectedByDepth.get(depth - 1);
1002
- if (explicit)
1003
- return explicit.item.label;
1004
- const prevCol = this._columns[depth - 1];
1005
- const thisCol = this._columns[depth];
1006
- if (prevCol && thisCol) {
1007
- const parent = prevCol.find(n => n.children === thisCol);
1008
- if (parent)
1009
- return parent.item.label;
1010
- }
1011
- return ``;
1012
- }
1013
- #columnStyle(depth) {
1014
- const w = this.#columnWidths.get(depth);
1015
- return w !== undefined ? `width:${w}px;flex-shrink:0` : `width:max-content`;
1016
- }
1017
- #isFocused(node, depth) {
1018
- return this.tickled.isTickled(this.#buildTickledId(node, depth));
1019
- }
1020
- /**
1021
- * Override to provide a custom loading indicator.
1022
- */
1023
- renderLoadingIndicator() {
1024
- return html `<div class="loading-spinner"></div>`;
1025
- }
1026
- #renderLoadingColumn() {
1027
- const depth = this._loadingDepth;
1028
- return html `
1029
- <div class="column loading-column" style=${this.#columnStyle(depth)}>
1030
- ${this.headers
1031
- ? html `
1032
- <div class="column-header">${this.#getColumnHeader(depth)}</div>
1033
- `
1034
- : nothing}
1035
- <div class="column-content loading-content">
1036
- ${this.renderLoadingIndicator()}
1037
- </div>
1038
- </div>
1039
- `;
1040
- }
1041
- render() {
1042
- return html `
1043
- <div id="container" @keydown=${this.#onKeyDown} tabindex="0">
1044
- ${this._columns.map((nodes, depth) => {
1045
- const visibleNodes = this.filterPredicate
1046
- ? nodes.filter(n => this.filterPredicate(n, depth))
1047
- : nodes;
1048
- return html `
1049
- <div class="column" style=${this.#columnStyle(depth)}>
1050
- ${this.headers
1051
- ? html `
1052
- <div class="column-header"
1053
- @click=${() => this.#onHeaderClick(depth)}
1054
- @contextmenu=${(e) => this._handleHeaderRightClick(e, depth)}>
1055
- ${this.#getColumnHeader(depth)}
1056
- </div>
1057
- `
1058
- : nothing}
1059
- <div class="column-content">
1060
- ${this.renderColumnContent(visibleNodes, depth)}
1061
- </div>
1062
- <div class="resize-handle"
1063
- @pointerdown=${(e) => this.#onResizeStart(e, depth)}>
1064
- </div>
1065
- </div>
1066
- `;
1067
- })}
1068
- ${this._loadingDepth !== undefined ? this.#renderLoadingColumn() : nothing}
1069
- </div>
1070
- `;
1071
- }
1072
- _getFocusedIndex(depth) {
1073
- const tickled = this.#getTickledNodeAndDepth();
1074
- if (tickled && tickled.depth === depth) {
1075
- return tickled.index;
1076
- }
1077
- return 0;
1078
- }
1079
- _isFocused(node, depth) {
1080
- return this.#isFocused(node, depth);
1081
- }
1082
- /**
1083
- * Called by subclasses when pointer enters an item.
1084
- * Fires tickle event and switches to mouse mode.
1085
- */
1086
- _handleItemPointerEnter(node, depth) {
1087
- this.tickled.handlePointerEnter(this.#buildTickledId(node, depth));
1088
- this.dispatchEvent(new CustomEvent(`tickle`, {
1089
- detail: { node, depth },
1090
- bubbles: true,
1091
- composed: true,
1092
- }));
1093
- }
1094
- /**
1095
- * Called by subclasses when pointer leaves the column container.
1096
- */
1097
- _handleColumnPointerLeave() {
1098
- this.tickled.handlePointerLeave(new PointerEvent('pointerleave'));
1099
- }
1100
- static { this.styles = [tickledStyles, css `
1101
- :host {
1102
- --column-bg: var(--surface-3);
1103
- --column-header-bg: var(--surface-2);
1104
- --column-header-text: var(--surface-muted-text);
1105
- --column-separator: var(--surface-5);
1106
- --column-resize-handle: var(--surface-5);
1107
- --column-resize-handle-hover: var(--accent);
1108
- --column-resize-width: 4px;
1109
- --item-hover-bg: var(--item-bg-tickled);
1110
- --item-open-bg: color-mix(in oklch, var(--accent, oklch(60% 0.15 140)) 15%, transparent);
1111
- --item-selected-bg: var(--item-bg-selected);
1112
- --item-selected-text: var(--item-text-selected);
1113
-
1114
- display: block;
1115
- overflow: hidden;
1116
- position: relative;
1117
- box-sizing: border-box;
1118
- }
1119
-
1120
- #container {
1121
- display: flex;
1122
- height: 100%;
1123
- overflow-x: auto;
1124
- outline: none;
1125
- }
1126
-
1127
- .column {
1128
- display: flex;
1129
- flex-direction: column;
1130
- position: relative;
1131
- background: var(--column-bg);
1132
- border-right: 1px solid var(--column-separator);
1133
- flex-shrink: 0;
1134
- }
1135
-
1136
- .column-header {
1137
- background: var(--column-header-bg);
1138
- color: var(--column-header-text);
1139
- font-size: var(--text-s, 11px);
1140
- font-family: var(--font-family, system-ui, sans-serif);
1141
- font-weight: var(--font-weight-bold, 600);
1142
- padding: var(--space-xs, 3px) var(--space-m, 8px);
1143
- border-bottom: 1px solid var(--column-separator);
1144
- white-space: nowrap;
1145
- overflow: hidden;
1146
- text-overflow: ellipsis;
1147
- flex-shrink: 0;
1148
- cursor: pointer;
1149
- user-select: none;
1150
- transition: background var(--transition, 0.15s ease-out),
1151
- color var(--transition, 0.15s ease-out);
1152
- }
1153
-
1154
- .column-header:hover {
1155
- background: var(--item-hover-bg);
1156
- color: var(--surface-2-text, #fff);
1157
- }
1158
-
1159
- .column-content {
1160
- flex: 1;
1161
- overflow-y: auto;
1162
- overflow-x: visible;
1163
- }
1164
-
1165
- .resize-handle {
1166
- position: absolute;
1167
- top: 0;
1168
- right: 0;
1169
- width: var(--column-resize-width);
1170
- height: 100%;
1171
- background: var(--column-resize-handle);
1172
- cursor: ew-resize;
1173
- z-index: 1;
1174
- transition: background var(--transition, 0.15s ease-out);
1175
- }
1176
-
1177
- .resize-handle:hover {
1178
- background: var(--column-resize-handle-hover);
1179
- }
1180
-
1181
- .loading-column {
1182
- min-width: 60px;
1183
- }
1184
-
1185
- .loading-content {
1186
- display: flex;
1187
- align-items: center;
1188
- justify-content: center;
1189
- }
1190
-
1191
- .loading-spinner {
1192
- width: 22px;
1193
- height: 22px;
1194
- border: 2px solid var(--column-separator);
1195
- border-top-color: var(--accent, oklch(60% 0.15 140));
1196
- border-radius: 50%;
1197
- animation: miller-spin 0.7s linear infinite;
1198
- }
1199
-
1200
- @keyframes miller-spin {
1201
- to { transform: rotate(360deg); }
1202
- }
1203
-
1204
- ::highlight(incr-search-highlight) {
1205
- background: var(--search-highlight-bg, var(--accent));
1206
- color: var(--search-highlight-color, var(--accent-text, #fff));
1207
- border-radius: 2px;
1208
- padding: 0 1px;
1209
- }
1210
- `]; }
1211
- };
1212
- __decorate([
1213
- property({ type: Object })
1214
- ], MillerBaseElement.prototype, "root", void 0);
1215
- __decorate([
1216
- property({ attribute: false })
1217
- ], MillerBaseElement.prototype, "model", void 0);
1218
- __decorate([
1219
- property({ type: Boolean })
1220
- ], MillerBaseElement.prototype, "headers", void 0);
1221
- __decorate([
1222
- property({ type: String })
1223
- ], MillerBaseElement.prototype, "interactionMode", void 0);
1224
- __decorate([
1225
- property({ reflect: true, attribute: 'selection-filter' })
1226
- ], MillerBaseElement.prototype, "selectionFilter", void 0);
1227
- __decorate([
1228
- property({ reflect: true, attribute: 'exclusivity' })
1229
- ], MillerBaseElement.prototype, "exclusivity", void 0);
1230
- __decorate([
1231
- property({ type: Object })
1232
- ], MillerBaseElement.prototype, "loadChildren", void 0);
1233
- __decorate([
1234
- property({ attribute: false })
1235
- ], MillerBaseElement.prototype, "filterPredicate", void 0);
1236
- __decorate([
1237
- state()
1238
- ], MillerBaseElement.prototype, "_columns", void 0);
1239
- __decorate([
1240
- state()
1241
- ], MillerBaseElement.prototype, "_loadingDepth", void 0);
1242
- __decorate([
1243
- state()
1244
- ], MillerBaseElement.prototype, "_selectedNodes", void 0);
1245
- MillerBaseElement = __decorate([
1246
- customElement(`ixfx-miller-base`)
1247
- ], MillerBaseElement);
1248
- export { MillerBaseElement };
1249
- //# sourceMappingURL=miller-base.js.map