@ixfx/components 0.2.4 → 0.2.5

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 (717) hide show
  1. package/bundle/index.d.ts +130 -130
  2. package/bundle/index.d.ts.map +1 -1
  3. package/bundle/index.js +2196 -2196
  4. package/bundle/index.js.map +1 -1
  5. package/dist/ac-text.d.ts +97 -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-DgKUzE5o.js} +49 -3
  10. package/dist/button-DgKUzE5o.js.map +1 -0
  11. package/dist/button.d.ts +21 -0
  12. package/dist/button.d.ts.map +1 -0
  13. package/dist/button.js +3 -0
  14. package/dist/checkbox.d.ts +27 -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-Bw-AZoWx.js +922 -0
  22. package/dist/colour-picker-Bw-AZoWx.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 +92 -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 +23 -18
  30. package/dist/data-display.d.ts.map +1 -1
  31. package/dist/data-display.js +82 -108
  32. package/dist/data-display.js.map +1 -1
  33. package/dist/decorate-BZbkqIhA.js +9 -0
  34. package/dist/defaults-FEZaGiYZ.js +38 -0
  35. package/dist/defaults-FEZaGiYZ.js.map +1 -0
  36. package/dist/dist-By5URG0Y.js +1290 -0
  37. package/dist/dist-By5URG0Y.js.map +1 -0
  38. package/dist/dist-D7kJgnSE.js +1039 -0
  39. package/dist/dist-D7kJgnSE.js.map +1 -0
  40. package/dist/editable-label.d.ts +71 -0
  41. package/dist/editable-label.d.ts.map +1 -0
  42. package/dist/editable-label.js +279 -0
  43. package/dist/editable-label.js.map +1 -0
  44. package/dist/hex-editor-Gib1Grg2.d.ts +131 -0
  45. package/dist/hex-editor-Gib1Grg2.d.ts.map +1 -0
  46. package/dist/hex-editor-Wd6ZtZA2.js +1147 -0
  47. package/dist/hex-editor-Wd6ZtZA2.js.map +1 -0
  48. package/dist/hex.d.ts +2 -0
  49. package/dist/hex.js +2 -0
  50. package/dist/highlight-CAjwQ4GE.js +50 -0
  51. package/dist/highlight-CAjwQ4GE.js.map +1 -0
  52. package/dist/icon-BR5aTIiP.js +100 -0
  53. package/dist/icon-BR5aTIiP.js.map +1 -0
  54. package/dist/icon-DQKdfR7U.d.ts +36 -0
  55. package/dist/icon-DQKdfR7U.d.ts.map +1 -0
  56. package/dist/icons.d.ts +3 -0
  57. package/dist/icons.js +9 -0
  58. package/dist/icons.js.map +1 -0
  59. package/dist/incr-search-BjCNClnC.js +311 -0
  60. package/dist/incr-search-BjCNClnC.js.map +1 -0
  61. package/dist/incr-search.d.ts +2 -0
  62. package/dist/incr-search.js +3 -0
  63. package/dist/index-B1hNR7Z9.d.ts +36 -0
  64. package/dist/index-B1hNR7Z9.d.ts.map +1 -0
  65. package/dist/index-C5dK8RZa.d.ts +23 -0
  66. package/dist/index-C5dK8RZa.d.ts.map +1 -0
  67. package/dist/index-C9iBN908.d.ts +160 -0
  68. package/dist/index-C9iBN908.d.ts.map +1 -0
  69. package/dist/index-CPVcTTXo.d.ts +396 -0
  70. package/dist/index-CPVcTTXo.d.ts.map +1 -0
  71. package/dist/index-CQxanqXF.d.ts +183 -0
  72. package/dist/index-CQxanqXF.d.ts.map +1 -0
  73. package/dist/index-CpbBI3n7.d.ts +1239 -0
  74. package/dist/index-CpbBI3n7.d.ts.map +1 -0
  75. package/dist/index.d.ts +422 -53
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +5729 -54
  78. package/dist/index.js.map +1 -1
  79. package/dist/interaction-CQDQJf2Q.js +1 -0
  80. package/dist/keyboard-De_vOHLg.js +20 -0
  81. package/dist/keyboard-De_vOHLg.js.map +1 -0
  82. package/dist/labelled-input-base-DS6-6C0r.js +155 -0
  83. package/dist/labelled-input-base-DS6-6C0r.js.map +1 -0
  84. package/dist/labelled-input-base-DnRh4reU.d.ts +43 -0
  85. package/dist/labelled-input-base-DnRh4reU.d.ts.map +1 -0
  86. package/dist/labelled-radial-input.d.ts +34 -0
  87. package/dist/labelled-radial-input.d.ts.map +1 -0
  88. package/dist/labelled-radial-input.js +188 -0
  89. package/dist/labelled-radial-input.js.map +1 -0
  90. package/dist/labelled-range-input.d.ts +2 -0
  91. package/dist/{labelled-range-input/labelled-range-input.js → labelled-range-input.js} +40 -45
  92. package/dist/labelled-range-input.js.map +1 -0
  93. package/dist/led.d.ts +21 -16
  94. package/dist/led.d.ts.map +1 -1
  95. package/dist/led.js +70 -78
  96. package/dist/led.js.map +1 -1
  97. package/dist/menu-BV6UFx_z.js +813 -0
  98. package/dist/menu-BV6UFx_z.js.map +1 -0
  99. package/dist/menu-item-Cikacp4F.d.ts +128 -0
  100. package/dist/menu-item-Cikacp4F.d.ts.map +1 -0
  101. package/dist/menu-item-DEzL_Yjk.js +766 -0
  102. package/dist/menu-item-DEzL_Yjk.js.map +1 -0
  103. package/dist/menu.d.ts +3 -0
  104. package/dist/menu.js +3 -0
  105. package/dist/miller.d.ts +324 -0
  106. package/dist/miller.d.ts.map +1 -0
  107. package/dist/miller.js +1343 -0
  108. package/dist/miller.js.map +1 -0
  109. package/dist/narrowed-text.d.ts +72 -0
  110. package/dist/narrowed-text.d.ts.map +1 -0
  111. package/dist/narrowed-text.js +571 -0
  112. package/dist/narrowed-text.js.map +1 -0
  113. package/dist/panel.d.ts +43 -0
  114. package/dist/panel.d.ts.map +1 -0
  115. package/dist/{panel/panel.js → panel.js} +82 -91
  116. package/dist/panel.js.map +1 -0
  117. package/dist/plots.d.ts +2 -0
  118. package/dist/plots.js +2 -0
  119. package/dist/polar-pad.d.ts +67 -0
  120. package/dist/polar-pad.d.ts.map +1 -0
  121. package/dist/polar-pad.js +537 -0
  122. package/dist/polar-pad.js.map +1 -0
  123. package/dist/popup-Ddx9LCzY.js +24 -0
  124. package/dist/popup-Ddx9LCzY.js.map +1 -0
  125. package/dist/prominence-CreDBdCs.js +98 -0
  126. package/dist/prominence-CreDBdCs.js.map +1 -0
  127. package/dist/radial-input-CNJ8asY2.js +849 -0
  128. package/dist/radial-input-CNJ8asY2.js.map +1 -0
  129. package/dist/radial-input-xSTd4kEz.d.ts +70 -0
  130. package/dist/radial-input-xSTd4kEz.d.ts.map +1 -0
  131. package/dist/radial-input.d.ts +2 -0
  132. package/dist/radial-input.js +2 -0
  133. package/dist/range-input.d.ts +43 -0
  134. package/dist/range-input.d.ts.map +1 -0
  135. package/dist/{range-input/range-input.js → range-input.js} +155 -168
  136. package/dist/range-input.js.map +1 -0
  137. package/dist/range.d.ts +28 -0
  138. package/dist/range.d.ts.map +1 -0
  139. package/dist/range.js +136 -0
  140. package/dist/range.js.map +1 -0
  141. package/dist/registry-CZEB1YI9.js +21 -0
  142. package/dist/registry-CZEB1YI9.js.map +1 -0
  143. package/dist/selecthorizontal.d.ts +13 -8
  144. package/dist/selecthorizontal.d.ts.map +1 -1
  145. package/dist/selecthorizontal.js +19 -23
  146. package/dist/selecthorizontal.js.map +1 -1
  147. package/dist/snap-container.d.ts +50 -0
  148. package/dist/snap-container.d.ts.map +1 -0
  149. package/dist/snap-container.js +297 -0
  150. package/dist/snap-container.js.map +1 -0
  151. package/dist/{split-layout/split-layout.d.ts → split-layout.d.ts} +30 -25
  152. package/dist/split-layout.d.ts.map +1 -0
  153. package/dist/split-layout.js +545 -0
  154. package/dist/split-layout.js.map +1 -0
  155. package/dist/style.css +133 -0
  156. package/dist/swipe.d.ts +48 -0
  157. package/dist/swipe.d.ts.map +1 -0
  158. package/dist/swipe.js +204 -0
  159. package/dist/swipe.js.map +1 -0
  160. package/dist/tab-list-CFF7uSYH.d.ts +66 -0
  161. package/dist/tab-list-CFF7uSYH.d.ts.map +1 -0
  162. package/dist/tabs.d.ts +2 -0
  163. package/dist/tabs.js +203 -0
  164. package/dist/tabs.js.map +1 -0
  165. package/dist/tickled-controller-Cq1Va0rR.d.ts +218 -0
  166. package/dist/tickled-controller-Cq1Va0rR.d.ts.map +1 -0
  167. package/dist/tickled-styles-Bg3QbcrD.js +327 -0
  168. package/dist/tickled-styles-Bg3QbcrD.js.map +1 -0
  169. package/dist/timeline-DBWJsSjd.js +1748 -0
  170. package/dist/timeline-DBWJsSjd.js.map +1 -0
  171. package/dist/timeline.d.ts +2 -0
  172. package/dist/timeline.js +2 -0
  173. package/dist/{styles/tooltip.js → tooltip-DMxmBNky.js} +6 -2
  174. package/dist/tooltip-DMxmBNky.js.map +1 -0
  175. package/dist/tooltip-kfUBWYVB.d.ts +26 -0
  176. package/dist/tooltip-kfUBWYVB.d.ts.map +1 -0
  177. package/dist/tree-component-CQpoPo4s.d.ts +326 -0
  178. package/dist/tree-component-CQpoPo4s.d.ts.map +1 -0
  179. package/dist/tree-data-model-DGvRVOFY.js +190 -0
  180. package/dist/tree-data-model-DGvRVOFY.js.map +1 -0
  181. package/dist/tree.d.ts +100 -0
  182. package/dist/tree.d.ts.map +1 -0
  183. package/dist/tree.js +1144 -0
  184. package/dist/tree.js.map +1 -0
  185. package/dist/types-BKaqnpwx.d.ts +8 -0
  186. package/dist/types-BKaqnpwx.d.ts.map +1 -0
  187. package/dist/xy-axis-BANbgrI5.js +6243 -0
  188. package/dist/xy-axis-BANbgrI5.js.map +1 -0
  189. package/dist/xy-axis-CIFok7MF.d.ts +141 -0
  190. package/dist/xy-axis-CIFok7MF.d.ts.map +1 -0
  191. package/dist/xy-pad.d.ts +74 -110
  192. package/dist/xy-pad.d.ts.map +1 -1
  193. package/dist/xy-pad.js +300 -320
  194. package/dist/xy-pad.js.map +1 -1
  195. package/package.json +10 -18
  196. package/dist/ac-text/ac-text.d.ts +0 -99
  197. package/dist/ac-text/ac-text.d.ts.map +0 -1
  198. package/dist/ac-text/ac-text.js +0 -571
  199. package/dist/ac-text/ac-text.js.map +0 -1
  200. package/dist/button/button-styles.d.ts +0 -2
  201. package/dist/button/button-styles.d.ts.map +0 -1
  202. package/dist/button/button-styles.js.map +0 -1
  203. package/dist/button/button.d.ts +0 -16
  204. package/dist/button/button.d.ts.map +0 -1
  205. package/dist/button/button.js +0 -58
  206. package/dist/button/button.js.map +0 -1
  207. package/dist/button/radio-group.d.ts +0 -44
  208. package/dist/button/radio-group.d.ts.map +0 -1
  209. package/dist/button/radio-group.js +0 -385
  210. package/dist/button/radio-group.js.map +0 -1
  211. package/dist/button/split-button.d.ts +0 -59
  212. package/dist/button/split-button.d.ts.map +0 -1
  213. package/dist/button/split-button.js +0 -480
  214. package/dist/button/split-button.js.map +0 -1
  215. package/dist/button/types.d.ts +0 -18
  216. package/dist/button/types.d.ts.map +0 -1
  217. package/dist/button/types.js +0 -2
  218. package/dist/button/types.js.map +0 -1
  219. package/dist/colour-picker/colour-picker-popup.d.ts +0 -102
  220. package/dist/colour-picker/colour-picker-popup.d.ts.map +0 -1
  221. package/dist/colour-picker/colour-picker-popup.js +0 -399
  222. package/dist/colour-picker/colour-picker-popup.js.map +0 -1
  223. package/dist/colour-picker/colour-picker.d.ts +0 -100
  224. package/dist/colour-picker/colour-picker.d.ts.map +0 -1
  225. package/dist/colour-picker/colour-picker.js +0 -567
  226. package/dist/colour-picker/colour-picker.js.map +0 -1
  227. package/dist/colour-picker/index.d.ts +0 -4
  228. package/dist/colour-picker/index.d.ts.map +0 -1
  229. package/dist/colour-picker/index.js +0 -3
  230. package/dist/colour-picker/index.js.map +0 -1
  231. package/dist/colour-picker/styles.d.ts +0 -2
  232. package/dist/colour-picker/styles.d.ts.map +0 -1
  233. package/dist/colour-picker/styles.js +0 -139
  234. package/dist/colour-picker/styles.js.map +0 -1
  235. package/dist/colour-picker/types.d.ts +0 -33
  236. package/dist/colour-picker/types.d.ts.map +0 -1
  237. package/dist/colour-picker/types.js +0 -2
  238. package/dist/colour-picker/types.js.map +0 -1
  239. package/dist/colour-picker/util.d.ts +0 -15
  240. package/dist/colour-picker/util.d.ts.map +0 -1
  241. package/dist/colour-picker/util.js +0 -35
  242. package/dist/colour-picker/util.js.map +0 -1
  243. package/dist/common/searchable.d.ts +0 -9
  244. package/dist/common/searchable.d.ts.map +0 -1
  245. package/dist/common/searchable.js +0 -9
  246. package/dist/common/searchable.js.map +0 -1
  247. package/dist/common/tree-component.d.ts +0 -172
  248. package/dist/common/tree-component.d.ts.map +0 -1
  249. package/dist/common/tree-component.js +0 -8
  250. package/dist/common/tree-component.js.map +0 -1
  251. package/dist/common/tree-data-model.d.ts +0 -100
  252. package/dist/common/tree-data-model.d.ts.map +0 -1
  253. package/dist/common/tree-data-model.js +0 -207
  254. package/dist/common/tree-data-model.js.map +0 -1
  255. package/dist/common/tree-item.d.ts +0 -7
  256. package/dist/common/tree-item.d.ts.map +0 -1
  257. package/dist/common/tree-item.js +0 -2
  258. package/dist/common/tree-item.js.map +0 -1
  259. package/dist/common/types.d.ts +0 -69
  260. package/dist/common/types.d.ts.map +0 -1
  261. package/dist/common/types.js +0 -6
  262. package/dist/common/types.js.map +0 -1
  263. package/dist/crumbs/crumb-navigation.d.ts +0 -96
  264. package/dist/crumbs/crumb-navigation.d.ts.map +0 -1
  265. package/dist/crumbs/crumb-navigation.js +0 -911
  266. package/dist/crumbs/crumb-navigation.js.map +0 -1
  267. package/dist/crumbs/crumb-path-controller.d.ts +0 -18
  268. package/dist/crumbs/crumb-path-controller.d.ts.map +0 -1
  269. package/dist/crumbs/crumb-path-controller.js +0 -81
  270. package/dist/crumbs/crumb-path-controller.js.map +0 -1
  271. package/dist/crumbs/crumb-path.d.ts +0 -65
  272. package/dist/crumbs/crumb-path.d.ts.map +0 -1
  273. package/dist/crumbs/crumb-path.js +0 -691
  274. package/dist/crumbs/crumb-path.js.map +0 -1
  275. package/dist/editable-label/editable-label.d.ts +0 -98
  276. package/dist/editable-label/editable-label.d.ts.map +0 -1
  277. package/dist/editable-label/editable-label.js +0 -348
  278. package/dist/editable-label/editable-label.js.map +0 -1
  279. package/dist/editable-label/editable-number.d.ts +0 -96
  280. package/dist/editable-label/editable-number.d.ts.map +0 -1
  281. package/dist/editable-label/editable-number.js +0 -702
  282. package/dist/editable-label/editable-number.js.map +0 -1
  283. package/dist/hex/colour.d.ts +0 -6
  284. package/dist/hex/colour.d.ts.map +0 -1
  285. package/dist/hex/colour.js +0 -33
  286. package/dist/hex/colour.js.map +0 -1
  287. package/dist/hex/data.d.ts +0 -18
  288. package/dist/hex/data.d.ts.map +0 -1
  289. package/dist/hex/data.js +0 -61
  290. package/dist/hex/data.js.map +0 -1
  291. package/dist/hex/diff.d.ts +0 -14
  292. package/dist/hex/diff.d.ts.map +0 -1
  293. package/dist/hex/diff.js +0 -31
  294. package/dist/hex/diff.js.map +0 -1
  295. package/dist/hex/hex-editor.d.ts +0 -101
  296. package/dist/hex/hex-editor.d.ts.map +0 -1
  297. package/dist/hex/hex-editor.js +0 -894
  298. package/dist/hex/hex-editor.js.map +0 -1
  299. package/dist/hex/selection.d.ts +0 -11
  300. package/dist/hex/selection.d.ts.map +0 -1
  301. package/dist/hex/selection.js +0 -218
  302. package/dist/hex/selection.js.map +0 -1
  303. package/dist/hex/types.d.ts +0 -34
  304. package/dist/hex/types.d.ts.map +0 -1
  305. package/dist/hex/types.js +0 -4
  306. package/dist/hex/types.js.map +0 -1
  307. package/dist/icons/defaults.d.ts +0 -27
  308. package/dist/icons/defaults.d.ts.map +0 -1
  309. package/dist/icons/defaults.js +0 -34
  310. package/dist/icons/defaults.js.map +0 -1
  311. package/dist/icons/icon.d.ts +0 -31
  312. package/dist/icons/icon.d.ts.map +0 -1
  313. package/dist/icons/icon.js +0 -125
  314. package/dist/icons/icon.js.map +0 -1
  315. package/dist/icons/index.d.ts +0 -5
  316. package/dist/icons/index.d.ts.map +0 -1
  317. package/dist/icons/index.js +0 -6
  318. package/dist/icons/index.js.map +0 -1
  319. package/dist/icons/registry.d.ts +0 -11
  320. package/dist/icons/registry.d.ts.map +0 -1
  321. package/dist/icons/registry.js +0 -17
  322. package/dist/icons/registry.js.map +0 -1
  323. package/dist/incr-search/ac-adapter.d.ts +0 -18
  324. package/dist/incr-search/ac-adapter.d.ts.map +0 -1
  325. package/dist/incr-search/ac-adapter.js +0 -29
  326. package/dist/incr-search/ac-adapter.js.map +0 -1
  327. package/dist/incr-search/controller-miller.d.ts +0 -9
  328. package/dist/incr-search/controller-miller.d.ts.map +0 -1
  329. package/dist/incr-search/controller-miller.js +0 -8
  330. package/dist/incr-search/controller-miller.js.map +0 -1
  331. package/dist/incr-search/controller-tree.d.ts +0 -55
  332. package/dist/incr-search/controller-tree.d.ts.map +0 -1
  333. package/dist/incr-search/controller-tree.js +0 -106
  334. package/dist/incr-search/controller-tree.js.map +0 -1
  335. package/dist/incr-search/element-search.d.ts +0 -15
  336. package/dist/incr-search/element-search.d.ts.map +0 -1
  337. package/dist/incr-search/element-search.js +0 -82
  338. package/dist/incr-search/element-search.js.map +0 -1
  339. package/dist/incr-search/fuzzy.d.ts +0 -3
  340. package/dist/incr-search/fuzzy.d.ts.map +0 -1
  341. package/dist/incr-search/fuzzy.js +0 -37
  342. package/dist/incr-search/fuzzy.js.map +0 -1
  343. package/dist/incr-search/highlight.d.ts +0 -5
  344. package/dist/incr-search/highlight.d.ts.map +0 -1
  345. package/dist/incr-search/highlight.js +0 -54
  346. package/dist/incr-search/highlight.js.map +0 -1
  347. package/dist/incr-search/incr-search.d.ts +0 -3
  348. package/dist/incr-search/incr-search.d.ts.map +0 -1
  349. package/dist/incr-search/incr-search.js +0 -73
  350. package/dist/incr-search/incr-search.js.map +0 -1
  351. package/dist/incr-search/index.d.ts +0 -12
  352. package/dist/incr-search/index.d.ts.map +0 -1
  353. package/dist/incr-search/index.js +0 -8
  354. package/dist/incr-search/index.js.map +0 -1
  355. package/dist/incr-search/types.d.ts +0 -59
  356. package/dist/incr-search/types.d.ts.map +0 -1
  357. package/dist/incr-search/types.js +0 -2
  358. package/dist/incr-search/types.js.map +0 -1
  359. package/dist/interaction/index.d.ts +0 -10
  360. package/dist/interaction/index.d.ts.map +0 -1
  361. package/dist/interaction/index.js +0 -10
  362. package/dist/interaction/index.js.map +0 -1
  363. package/dist/interaction/tickled-controller.d.ts +0 -186
  364. package/dist/interaction/tickled-controller.d.ts.map +0 -1
  365. package/dist/interaction/tickled-controller.js +0 -256
  366. package/dist/interaction/tickled-controller.js.map +0 -1
  367. package/dist/interaction/tickled-styles.d.ts +0 -53
  368. package/dist/interaction/tickled-styles.d.ts.map +0 -1
  369. package/dist/interaction/tickled-styles.js +0 -106
  370. package/dist/interaction/tickled-styles.js.map +0 -1
  371. package/dist/interaction/tree-keyboard-controller.d.ts +0 -30
  372. package/dist/interaction/tree-keyboard-controller.d.ts.map +0 -1
  373. package/dist/interaction/tree-keyboard-controller.js +0 -105
  374. package/dist/interaction/tree-keyboard-controller.js.map +0 -1
  375. package/dist/keyboard.d.ts +0 -16
  376. package/dist/keyboard.d.ts.map +0 -1
  377. package/dist/keyboard.js +0 -22
  378. package/dist/keyboard.js.map +0 -1
  379. package/dist/labelled-radial-input/index.d.ts +0 -2
  380. package/dist/labelled-radial-input/index.d.ts.map +0 -1
  381. package/dist/labelled-radial-input/index.js +0 -2
  382. package/dist/labelled-radial-input/index.js.map +0 -1
  383. package/dist/labelled-radial-input/labelled-radial-input.d.ts +0 -77
  384. package/dist/labelled-radial-input/labelled-radial-input.d.ts.map +0 -1
  385. package/dist/labelled-radial-input/labelled-radial-input.js +0 -214
  386. package/dist/labelled-radial-input/labelled-radial-input.js.map +0 -1
  387. package/dist/labelled-range-input/index.d.ts +0 -2
  388. package/dist/labelled-range-input/index.d.ts.map +0 -1
  389. package/dist/labelled-range-input/index.js +0 -2
  390. package/dist/labelled-range-input/index.js.map +0 -1
  391. package/dist/labelled-range-input/labelled-range-input.d.ts +0 -80
  392. package/dist/labelled-range-input/labelled-range-input.d.ts.map +0 -1
  393. package/dist/labelled-range-input/labelled-range-input.js.map +0 -1
  394. package/dist/menu/index.d.ts +0 -14
  395. package/dist/menu/index.d.ts.map +0 -1
  396. package/dist/menu/index.js +0 -13
  397. package/dist/menu/index.js.map +0 -1
  398. package/dist/menu/menu-bar.d.ts +0 -23
  399. package/dist/menu/menu-bar.d.ts.map +0 -1
  400. package/dist/menu/menu-bar.js +0 -110
  401. package/dist/menu/menu-bar.js.map +0 -1
  402. package/dist/menu/menu-check-item.d.ts +0 -33
  403. package/dist/menu/menu-check-item.d.ts.map +0 -1
  404. package/dist/menu/menu-check-item.js +0 -175
  405. package/dist/menu/menu-check-item.js.map +0 -1
  406. package/dist/menu/menu-command-controller.d.ts +0 -14
  407. package/dist/menu/menu-command-controller.d.ts.map +0 -1
  408. package/dist/menu/menu-command-controller.js +0 -22
  409. package/dist/menu/menu-command-controller.js.map +0 -1
  410. package/dist/menu/menu-container.d.ts +0 -36
  411. package/dist/menu/menu-container.d.ts.map +0 -1
  412. package/dist/menu/menu-container.js +0 -351
  413. package/dist/menu/menu-container.js.map +0 -1
  414. package/dist/menu/menu-from-tree.d.ts +0 -17
  415. package/dist/menu/menu-from-tree.d.ts.map +0 -1
  416. package/dist/menu/menu-from-tree.js +0 -103
  417. package/dist/menu/menu-from-tree.js.map +0 -1
  418. package/dist/menu/menu-header.d.ts +0 -12
  419. package/dist/menu/menu-header.d.ts.map +0 -1
  420. package/dist/menu/menu-header.js +0 -36
  421. package/dist/menu/menu-header.js.map +0 -1
  422. package/dist/menu/menu-item.d.ts +0 -41
  423. package/dist/menu/menu-item.d.ts.map +0 -1
  424. package/dist/menu/menu-item.js +0 -240
  425. package/dist/menu/menu-item.js.map +0 -1
  426. package/dist/menu/menu-radio-group.d.ts +0 -24
  427. package/dist/menu/menu-radio-group.d.ts.map +0 -1
  428. package/dist/menu/menu-radio-group.js +0 -71
  429. package/dist/menu/menu-radio-group.js.map +0 -1
  430. package/dist/menu/menu-radio-item.d.ts +0 -22
  431. package/dist/menu/menu-radio-item.d.ts.map +0 -1
  432. package/dist/menu/menu-radio-item.js +0 -116
  433. package/dist/menu/menu-radio-item.js.map +0 -1
  434. package/dist/menu/menu-separator.d.ts +0 -11
  435. package/dist/menu/menu-separator.d.ts.map +0 -1
  436. package/dist/menu/menu-separator.js +0 -29
  437. package/dist/menu/menu-separator.js.map +0 -1
  438. package/dist/menu/menu-sub-trigger.d.ts +0 -46
  439. package/dist/menu/menu-sub-trigger.d.ts.map +0 -1
  440. package/dist/menu/menu-sub-trigger.js +0 -302
  441. package/dist/menu/menu-sub-trigger.js.map +0 -1
  442. package/dist/menu/menu-trigger.d.ts +0 -57
  443. package/dist/menu/menu-trigger.d.ts.map +0 -1
  444. package/dist/menu/menu-trigger.js +0 -351
  445. package/dist/menu/menu-trigger.js.map +0 -1
  446. package/dist/miller/index.d.ts +0 -5
  447. package/dist/miller/index.d.ts.map +0 -1
  448. package/dist/miller/index.js +0 -5
  449. package/dist/miller/index.js.map +0 -1
  450. package/dist/miller/miller-base.d.ts +0 -184
  451. package/dist/miller/miller-base.d.ts.map +0 -1
  452. package/dist/miller/miller-base.js +0 -1249
  453. package/dist/miller/miller-base.js.map +0 -1
  454. package/dist/miller/miller-list.d.ts +0 -30
  455. package/dist/miller/miller-list.d.ts.map +0 -1
  456. package/dist/miller/miller-list.js +0 -192
  457. package/dist/miller/miller-list.js.map +0 -1
  458. package/dist/miller/miller-tree-controller.d.ts +0 -58
  459. package/dist/miller/miller-tree-controller.d.ts.map +0 -1
  460. package/dist/miller/miller-tree-controller.js +0 -134
  461. package/dist/miller/miller-tree-controller.js.map +0 -1
  462. package/dist/miller/types.d.ts +0 -63
  463. package/dist/miller/types.d.ts.map +0 -1
  464. package/dist/miller/types.js +0 -6
  465. package/dist/miller/types.js.map +0 -1
  466. package/dist/mixins/labelled-input-base.d.ts +0 -38
  467. package/dist/mixins/labelled-input-base.d.ts.map +0 -1
  468. package/dist/mixins/labelled-input-base.js +0 -171
  469. package/dist/mixins/labelled-input-base.js.map +0 -1
  470. package/dist/mixins/labelled-input-util.d.ts +0 -3
  471. package/dist/mixins/labelled-input-util.d.ts.map +0 -1
  472. package/dist/mixins/labelled-input-util.js +0 -10
  473. package/dist/mixins/labelled-input-util.js.map +0 -1
  474. package/dist/my-element.d.ts +0 -14
  475. package/dist/my-element.d.ts.map +0 -1
  476. package/dist/my-element.js +0 -44
  477. package/dist/my-element.js.map +0 -1
  478. package/dist/narrowed-text/index.d.ts +0 -3
  479. package/dist/narrowed-text/index.d.ts.map +0 -1
  480. package/dist/narrowed-text/index.js +0 -3
  481. package/dist/narrowed-text/index.js.map +0 -1
  482. package/dist/narrowed-text/narrowed-text.d.ts +0 -48
  483. package/dist/narrowed-text/narrowed-text.d.ts.map +0 -1
  484. package/dist/narrowed-text/narrowed-text.js +0 -668
  485. package/dist/narrowed-text/narrowed-text.js.map +0 -1
  486. package/dist/narrowed-text/types.d.ts +0 -20
  487. package/dist/narrowed-text/types.d.ts.map +0 -1
  488. package/dist/narrowed-text/types.js +0 -2
  489. package/dist/narrowed-text/types.js.map +0 -1
  490. package/dist/panel/panel-group.d.ts +0 -23
  491. package/dist/panel/panel-group.d.ts.map +0 -1
  492. package/dist/panel/panel-group.js +0 -109
  493. package/dist/panel/panel-group.js.map +0 -1
  494. package/dist/panel/panel.d.ts +0 -39
  495. package/dist/panel/panel.d.ts.map +0 -1
  496. package/dist/panel/panel.js.map +0 -1
  497. package/dist/plots/colour-map.d.ts +0 -31
  498. package/dist/plots/colour-map.d.ts.map +0 -1
  499. package/dist/plots/colour-map.js +0 -133
  500. package/dist/plots/colour-map.js.map +0 -1
  501. package/dist/plots/data.d.ts +0 -27
  502. package/dist/plots/data.d.ts.map +0 -1
  503. package/dist/plots/data.js +0 -47
  504. package/dist/plots/data.js.map +0 -1
  505. package/dist/plots/single-axis.d.ts +0 -41
  506. package/dist/plots/single-axis.d.ts.map +0 -1
  507. package/dist/plots/single-axis.js +0 -428
  508. package/dist/plots/single-axis.js.map +0 -1
  509. package/dist/plots/svg-utils.d.ts +0 -12
  510. package/dist/plots/svg-utils.d.ts.map +0 -1
  511. package/dist/plots/svg-utils.js +0 -64
  512. package/dist/plots/svg-utils.js.map +0 -1
  513. package/dist/plots/xy-axis.d.ts +0 -42
  514. package/dist/plots/xy-axis.d.ts.map +0 -1
  515. package/dist/plots/xy-axis.js +0 -307
  516. package/dist/plots/xy-axis.js.map +0 -1
  517. package/dist/polar-pad/polar-pad.d.ts +0 -132
  518. package/dist/polar-pad/polar-pad.d.ts.map +0 -1
  519. package/dist/polar-pad/polar-pad.js +0 -598
  520. package/dist/polar-pad/polar-pad.js.map +0 -1
  521. package/dist/radial-input/radial-input.d.ts +0 -45
  522. package/dist/radial-input/radial-input.d.ts.map +0 -1
  523. package/dist/radial-input/radial-input.js +0 -692
  524. package/dist/radial-input/radial-input.js.map +0 -1
  525. package/dist/radial-input/svg-utils.d.ts +0 -147
  526. package/dist/radial-input/svg-utils.d.ts.map +0 -1
  527. package/dist/radial-input/svg-utils.js +0 -346
  528. package/dist/radial-input/svg-utils.js.map +0 -1
  529. package/dist/radial-input/types.d.ts +0 -25
  530. package/dist/radial-input/types.d.ts.map +0 -1
  531. package/dist/radial-input/types.js +0 -5
  532. package/dist/radial-input/types.js.map +0 -1
  533. package/dist/range/range-multi.d.ts +0 -62
  534. package/dist/range/range-multi.d.ts.map +0 -1
  535. package/dist/range/range-multi.js +0 -652
  536. package/dist/range/range-multi.js.map +0 -1
  537. package/dist/range/range.d.ts +0 -23
  538. package/dist/range/range.d.ts.map +0 -1
  539. package/dist/range/range.js +0 -153
  540. package/dist/range/range.js.map +0 -1
  541. package/dist/range-input/index.d.ts +0 -2
  542. package/dist/range-input/index.d.ts.map +0 -1
  543. package/dist/range-input/index.js +0 -2
  544. package/dist/range-input/index.js.map +0 -1
  545. package/dist/range-input/range-input.d.ts +0 -92
  546. package/dist/range-input/range-input.d.ts.map +0 -1
  547. package/dist/range-input/range-input.js.map +0 -1
  548. package/dist/snap-container/snap-container.d.ts +0 -45
  549. package/dist/snap-container/snap-container.d.ts.map +0 -1
  550. package/dist/snap-container/snap-container.js +0 -352
  551. package/dist/snap-container/snap-container.js.map +0 -1
  552. package/dist/split-layout/split-layout.d.ts.map +0 -1
  553. package/dist/split-layout/split-layout.js +0 -674
  554. package/dist/split-layout/split-layout.js.map +0 -1
  555. package/dist/styles/popup.d.ts +0 -11
  556. package/dist/styles/popup.d.ts.map +0 -1
  557. package/dist/styles/popup.js +0 -20
  558. package/dist/styles/popup.js.map +0 -1
  559. package/dist/styles/prominence.d.ts +0 -58
  560. package/dist/styles/prominence.d.ts.map +0 -1
  561. package/dist/styles/prominence.js +0 -94
  562. package/dist/styles/prominence.js.map +0 -1
  563. package/dist/styles/tooltip.d.ts +0 -2
  564. package/dist/styles/tooltip.d.ts.map +0 -1
  565. package/dist/styles/tooltip.js.map +0 -1
  566. package/dist/svg-edit-label.d.ts +0 -2
  567. package/dist/svg-edit-label.d.ts.map +0 -1
  568. package/dist/svg-edit-label.js +0 -110
  569. package/dist/svg-edit-label.js.map +0 -1
  570. package/dist/swipe/index.d.ts +0 -2
  571. package/dist/swipe/index.d.ts.map +0 -1
  572. package/dist/swipe/index.js +0 -2
  573. package/dist/swipe/index.js.map +0 -1
  574. package/dist/swipe/swipe.d.ts +0 -65
  575. package/dist/swipe/swipe.d.ts.map +0 -1
  576. package/dist/swipe/swipe.js +0 -229
  577. package/dist/swipe/swipe.js.map +0 -1
  578. package/dist/tabs/tab-layout-item.d.ts +0 -10
  579. package/dist/tabs/tab-layout-item.d.ts.map +0 -1
  580. package/dist/tabs/tab-layout-item.js +0 -20
  581. package/dist/tabs/tab-layout-item.js.map +0 -1
  582. package/dist/tabs/tab-layout.d.ts +0 -10
  583. package/dist/tabs/tab-layout.d.ts.map +0 -1
  584. package/dist/tabs/tab-layout.js +0 -25
  585. package/dist/tabs/tab-layout.js.map +0 -1
  586. package/dist/tabs/tab-list-item.d.ts +0 -34
  587. package/dist/tabs/tab-list-item.d.ts.map +0 -1
  588. package/dist/tabs/tab-list-item.js +0 -195
  589. package/dist/tabs/tab-list-item.js.map +0 -1
  590. package/dist/tabs/tab-list.d.ts +0 -31
  591. package/dist/tabs/tab-list.d.ts.map +0 -1
  592. package/dist/tabs/tab-list.js +0 -257
  593. package/dist/tabs/tab-list.js.map +0 -1
  594. package/dist/tabs/tab-panel.d.ts +0 -11
  595. package/dist/tabs/tab-panel.d.ts.map +0 -1
  596. package/dist/tabs/tab-panel.js +0 -30
  597. package/dist/tabs/tab-panel.js.map +0 -1
  598. package/dist/tabs/tab-panels.d.ts +0 -30
  599. package/dist/tabs/tab-panels.d.ts.map +0 -1
  600. package/dist/tabs/tab-panels.js +0 -80
  601. package/dist/tabs/tab-panels.js.map +0 -1
  602. package/dist/timeline/index.d.ts +0 -9
  603. package/dist/timeline/index.d.ts.map +0 -1
  604. package/dist/timeline/index.js +0 -8
  605. package/dist/timeline/index.js.map +0 -1
  606. package/dist/timeline/timeline-controller.d.ts +0 -48
  607. package/dist/timeline/timeline-controller.d.ts.map +0 -1
  608. package/dist/timeline/timeline-controller.js +0 -81
  609. package/dist/timeline/timeline-controller.js.map +0 -1
  610. package/dist/timeline/timeline-draw.d.ts +0 -28
  611. package/dist/timeline/timeline-draw.d.ts.map +0 -1
  612. package/dist/timeline/timeline-draw.js +0 -330
  613. package/dist/timeline/timeline-draw.js.map +0 -1
  614. package/dist/timeline/timeline-element.d.ts +0 -140
  615. package/dist/timeline/timeline-element.d.ts.map +0 -1
  616. package/dist/timeline/timeline-element.js +0 -888
  617. package/dist/timeline/timeline-element.js.map +0 -1
  618. package/dist/timeline/timeline-interactions.d.ts +0 -40
  619. package/dist/timeline/timeline-interactions.d.ts.map +0 -1
  620. package/dist/timeline/timeline-interactions.js +0 -393
  621. package/dist/timeline/timeline-interactions.js.map +0 -1
  622. package/dist/timeline/timeline-styles.d.ts +0 -2
  623. package/dist/timeline/timeline-styles.d.ts.map +0 -1
  624. package/dist/timeline/timeline-styles.js +0 -153
  625. package/dist/timeline/timeline-styles.js.map +0 -1
  626. package/dist/timeline/timeline-track-tabs.d.ts +0 -30
  627. package/dist/timeline/timeline-track-tabs.d.ts.map +0 -1
  628. package/dist/timeline/timeline-track-tabs.js +0 -204
  629. package/dist/timeline/timeline-track-tabs.js.map +0 -1
  630. package/dist/timeline/types.d.ts +0 -144
  631. package/dist/timeline/types.d.ts.map +0 -1
  632. package/dist/timeline/types.js +0 -3
  633. package/dist/timeline/types.js.map +0 -1
  634. package/dist/tree/index.d.ts +0 -5
  635. package/dist/tree/index.d.ts.map +0 -1
  636. package/dist/tree/index.js +0 -5
  637. package/dist/tree/index.js.map +0 -1
  638. package/dist/tree/tree-base.d.ts +0 -70
  639. package/dist/tree/tree-base.d.ts.map +0 -1
  640. package/dist/tree/tree-base.js +0 -1028
  641. package/dist/tree/tree-base.js.map +0 -1
  642. package/dist/tree/tree-controller.d.ts +0 -14
  643. package/dist/tree/tree-controller.d.ts.map +0 -1
  644. package/dist/tree/tree-controller.js +0 -96
  645. package/dist/tree/tree-controller.js.map +0 -1
  646. package/dist/tree/tree-list.d.ts +0 -20
  647. package/dist/tree/tree-list.d.ts.map +0 -1
  648. package/dist/tree/tree-list.js +0 -174
  649. package/dist/tree/tree-list.js.map +0 -1
  650. package/dist/tree/types.d.ts +0 -14
  651. package/dist/tree/types.d.ts.map +0 -1
  652. package/dist/tree/types.js +0 -7
  653. package/dist/tree/types.js.map +0 -1
  654. package/dist/util/checkbox.d.ts +0 -2
  655. package/dist/util/checkbox.d.ts.map +0 -1
  656. package/dist/util/checkbox.js +0 -69
  657. package/dist/util/checkbox.js.map +0 -1
  658. package/dist/util/circle-arc.d.ts +0 -34
  659. package/dist/util/circle-arc.d.ts.map +0 -1
  660. package/dist/util/circle-arc.js +0 -85
  661. package/dist/util/circle-arc.js.map +0 -1
  662. package/dist/util/clamp.d.ts +0 -4
  663. package/dist/util/clamp.d.ts.map +0 -1
  664. package/dist/util/clamp.js +0 -23
  665. package/dist/util/clamp.js.map +0 -1
  666. package/dist/util/compare.d.ts +0 -53
  667. package/dist/util/compare.d.ts.map +0 -1
  668. package/dist/util/compare.js +0 -91
  669. package/dist/util/compare.js.map +0 -1
  670. package/dist/util/content-editable.d.ts +0 -2
  671. package/dist/util/content-editable.d.ts.map +0 -1
  672. package/dist/util/content-editable.js +0 -13
  673. package/dist/util/content-editable.js.map +0 -1
  674. package/dist/util/coordinates.d.ts +0 -3
  675. package/dist/util/coordinates.d.ts.map +0 -1
  676. package/dist/util/coordinates.js +0 -11
  677. package/dist/util/coordinates.js.map +0 -1
  678. package/dist/util/drag.d.ts +0 -16
  679. package/dist/util/drag.d.ts.map +0 -1
  680. package/dist/util/drag.js +0 -20
  681. package/dist/util/drag.js.map +0 -1
  682. package/dist/util/is-numeric.d.ts +0 -2
  683. package/dist/util/is-numeric.d.ts.map +0 -1
  684. package/dist/util/is-numeric.js +0 -9
  685. package/dist/util/is-numeric.js.map +0 -1
  686. package/dist/util/key-value.d.ts +0 -5
  687. package/dist/util/key-value.d.ts.map +0 -1
  688. package/dist/util/key-value.js +0 -29
  689. package/dist/util/key-value.js.map +0 -1
  690. package/dist/util/near.d.ts +0 -2
  691. package/dist/util/near.d.ts.map +0 -1
  692. package/dist/util/near.js +0 -6
  693. package/dist/util/near.js.map +0 -1
  694. package/dist/util/primitive-types.d.ts +0 -6
  695. package/dist/util/primitive-types.d.ts.map +0 -1
  696. package/dist/util/primitive-types.js +0 -2
  697. package/dist/util/primitive-types.js.map +0 -1
  698. package/dist/util/svg-editable-text.d.ts +0 -26
  699. package/dist/util/svg-editable-text.d.ts.map +0 -1
  700. package/dist/util/svg-editable-text.js +0 -119
  701. package/dist/util/svg-editable-text.js.map +0 -1
  702. package/dist/util/time.d.ts +0 -2
  703. package/dist/util/time.d.ts.map +0 -1
  704. package/dist/util/time.js +0 -2
  705. package/dist/util/time.js.map +0 -1
  706. package/dist/util/tooltip-controller.d.ts +0 -10
  707. package/dist/util/tooltip-controller.d.ts.map +0 -1
  708. package/dist/util/tooltip-controller.js +0 -237
  709. package/dist/util/tooltip-controller.js.map +0 -1
  710. package/dist/util/tooltip.d.ts +0 -21
  711. package/dist/util/tooltip.d.ts.map +0 -1
  712. package/dist/util/tooltip.js +0 -98
  713. package/dist/util/tooltip.js.map +0 -1
  714. package/dist/util/value-drag.d.ts +0 -33
  715. package/dist/util/value-drag.d.ts.map +0 -1
  716. package/dist/util/value-drag.js +0 -154
  717. package/dist/util/value-drag.js.map +0 -1
@@ -1,888 +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 { html, LitElement, nothing } from 'lit';
8
- import { customElement, property, state } from 'lit/decorators.js';
9
- import { drawAxis, drawEventRects, drawMajorMinorGrid, drawMarquee, drawTrackBackgrounds, resolveCssVars, resolveGrid, } from './timeline-draw.js';
10
- import { applyDeadzone, attachTimelineInteractions, AXIS_DEADZONE_PX, computeVerticalAxisZoom, DRAG_ACTIVATION_PX } from './timeline-interactions.js';
11
- import { timelineStyles } from './timeline-styles.js';
12
- import './timeline-track-tabs.js';
13
- import '@clinth/vcanvas';
14
- /** Reasonable maximum ppu to prevent infinite zoom-in */
15
- const MAX_PPU = 10_000;
16
- /** Minimum rendered track height (~1.5em) at max zoom-out */
17
- const MIN_TRACK_RENDER_HEIGHT = 24;
18
- let IxfxTimelineElement = class IxfxTimelineElement extends LitElement {
19
- constructor() {
20
- super(...arguments);
21
- // ── Public properties ───────────────────────────────────────────────
22
- this.tracks = [];
23
- this.events = [];
24
- this.min = 0;
25
- this.max = 1000;
26
- this.trackHeight = `fixed`;
27
- this.userScale = `normal`;
28
- this.reorderable = false;
29
- this.metaEnabled = false;
30
- this.altMajorBg = false;
31
- this.defaultTrackHeight = 48;
32
- this.gridMode = `adaptive`;
33
- this.minorStep = 10;
34
- this.onDragging = null;
35
- /** Set by TimelineController — formats logical value to label string */
36
- this.formatLabel = String;
37
- // ── Internal state ──────────────────────────────────────────────────
38
- /**
39
- * _ppu (pixels per unit) is the PRIMARY horizontal zoom state.
40
- * _viewRange.min is the PRIMARY horizontal pan state.
41
- * _viewRange.max is DERIVED: min + viewportWidth / _ppu.
42
- */
43
- this._ppu = 1;
44
- this._viewRange = { min: 0, max: 4000 };
45
- /**
46
- * Vertical zoom/pan state. Analogous to horizontal:
47
- * - _vViewRange is in "base height units" (pre-scale track pixels).
48
- * - _vScale = viewportHeight / (b - a). When range spans all base height, all tracks fit.
49
- * - _vScrollOffset = _vViewRange.min * _vScale — the pixel offset applied to content.
50
- */
51
- this._vViewRange = { min: 0, max: 1 };
52
- this._vScale = 1.0;
53
- this._selectedIds = new Set();
54
- this._tickledId = undefined;
55
- this._drag = { kind: `none` };
56
- this._metaHeight = 120;
57
- this._trackHeightOverrides = new Map();
58
- this._trackLayout = [];
59
- this._internalEvents = [];
60
- this._internalTracks = [];
61
- // ── Private refs ────────────────────────────────────────────────────
62
- this.#vcanvas = null;
63
- this.#cssVarsCache = {};
64
- this.#cleanupInteractions = null;
65
- this.#axisHeight = 24;
66
- this.#prevTickledId = undefined;
67
- this.#resizeObserver = null;
68
- this.#pendingVerticalZoomToFit = false;
69
- this.#hasInitializedZoom = false;
70
- /** Called by ResizeObserver when vcanvas/content-area changes size */
71
- this.#onResize = (_entries) => {
72
- if (!this.#hasInitializedZoom) {
73
- // First resize after mount — compute initial zoom-to-fit
74
- this.#hasInitializedZoom = true;
75
- this.#initZoomToFit();
76
- this.#initVerticalZoomToFit();
77
- this.#recomputeTrackLayout();
78
- }
79
- else {
80
- // Subsequent resizes — keep ppu/vViewRange, re-derive from new viewport size
81
- this._viewRange = this.#deriveViewRange(this._viewRange.min, this._ppu);
82
- this.#deriveVerticalZoom(this._vViewRange.min, this._vViewRange.max);
83
- }
84
- this.#syncVCanvas();
85
- this.#invalidateCanvas();
86
- };
87
- this.#drawCallback = (ctx, region, _signal) => {
88
- const ppu = this._ppu;
89
- // Convert pixel region back to timeline logical units for culling.
90
- // region.x is in vcanvas logical pixels (pure timeline content, no tab offset).
91
- const logicalRegion = {
92
- x: region.x / ppu + this.min,
93
- y: region.y,
94
- width: region.width / ppu,
95
- height: region.height,
96
- };
97
- // Resolve CSS vars once per frame
98
- this.#cssVarsCache = resolveCssVars(this);
99
- const grid = resolveGrid(this._viewRange, this.userScale, this.#getViewportWidth(), this.gridMode, this.minorStep, ppu);
100
- // 1. Track backgrounds
101
- const trackInfos = this._internalTracks.map(t => ({ key: t.key, color: t.color }));
102
- drawTrackBackgrounds(ctx, logicalRegion, this._trackLayout, trackInfos, this.#cssVarsCache, ppu);
103
- // 2. Grid
104
- drawMajorMinorGrid(ctx, logicalRegion, grid, this.altMajorBg, this.#cssVarsCache, ppu);
105
- // 3. Event rects
106
- drawEventRects(ctx, logicalRegion, this._internalEvents, this._trackLayout, this._selectedIds, this._tickledId, this._drag, this.#cssVarsCache, ppu);
107
- // 4. Marquee
108
- drawMarquee(ctx, this._drag, ppu);
109
- // 5. Axis (drawn last so it overlays grid lines in the axis band)
110
- const scrollTop = this.#vcanvas?.logicalScrollTop ?? 0;
111
- drawAxis(ctx, logicalRegion, grid, this.#axisHeight, this.formatLabel, this.#cssVarsCache, ppu, scrollTop);
112
- };
113
- // ── Scroll / axis labels ────────────────────────────────────────────
114
- this.#onScrollVirtual = (e) => {
115
- const detail = e.detail;
116
- // Only react to user-initiated scrolls to avoid feedback loops
117
- if (detail.userGesture === false)
118
- return;
119
- const ppu = this._ppu;
120
- if (ppu <= 0)
121
- return;
122
- // Horizontal: convert pixel scroll position to timeline units (no tab offset)
123
- const viewMin = detail.logicalScrollLeft / ppu + this.min;
124
- this._viewRange = this.#deriveViewRange(viewMin, ppu);
125
- // Vertical: reverse-derive _vViewRange from the new logicalScrollTop
126
- // logicalScrollTop = _vViewRange.min * _vScale, so _vViewRange.min = logicalScrollTop / _vScale
127
- if (this._vScale > 0) {
128
- const span = this._vViewRange.max - this._vViewRange.min;
129
- const newVMin = detail.logicalScrollTop / this._vScale;
130
- this.#deriveVerticalZoom(newVMin, newVMin + span);
131
- }
132
- };
133
- /**
134
- * Range slider handler.
135
- * Slider controls zoom (via span) + pan (via position).
136
- * Derive ppu from the span the slider produces.
137
- */
138
- this.#onHZoomInput = (e) => {
139
- const detail = e.detail;
140
- const span = detail.b - detail.a;
141
- const vpWidth = this.#getViewportWidth();
142
- if (span > 0) {
143
- this._ppu = Math.max(this.#minPpu(), Math.min(vpWidth / span, MAX_PPU));
144
- }
145
- this._viewRange = this.#deriveViewRange(detail.a, this._ppu);
146
- this.#syncVCanvas();
147
- };
148
- /**
149
- * Vertical range slider handler.
150
- * Slider controls vertical zoom (via span) + vertical pan (via position).
151
- * Derive _vScale from the span the slider produces.
152
- */
153
- this.#onVZoomInput = (e) => {
154
- const detail = e.detail;
155
- this.#deriveVerticalZoom(detail.a, detail.b);
156
- };
157
- // ── Vertical axis drag-zoom handlers ──────────────────────────────────
158
- this.#onVAxisPointerDown = (e) => {
159
- const zone = e.currentTarget;
160
- zone.setPointerCapture(e.pointerId);
161
- e.stopPropagation(); // prevent track-tab click/select
162
- e.preventDefault();
163
- // Compute anchor in base-height units from the click Y position
164
- // The zone covers the track area (below the axis header padding)
165
- const rect = zone.getBoundingClientRect();
166
- const clickFrac = rect.height > 0
167
- ? (e.clientY - rect.top) / rect.height
168
- : 0.5;
169
- const span = this._vViewRange.max - this._vViewRange.min;
170
- const anchorBaseY = this._vViewRange.min + clickFrac * span;
171
- this._drag = {
172
- kind: `v-axis-zoom`,
173
- anchorBaseY,
174
- startScreenX: e.screenX,
175
- startScreenY: e.screenY,
176
- startVMin: this._vViewRange.min,
177
- startVMax: this._vViewRange.max,
178
- startVScale: this._vScale,
179
- };
180
- };
181
- this.#onVAxisPointerMove = (e) => {
182
- if (this._drag.kind !== `v-axis-zoom`)
183
- return;
184
- const drag = this._drag;
185
- const rawDx = e.screenX - drag.startScreenX;
186
- const rawDy = e.screenY - drag.startScreenY;
187
- // Activation threshold — don't start until enough total movement
188
- if (Math.abs(rawDx) + Math.abs(rawDy) < DRAG_ACTIVATION_PX)
189
- return;
190
- // Per-axis deadzone — ignore small off-axis movement
191
- const dx = applyDeadzone(rawDx, AXIS_DEADZONE_PX);
192
- const dy = applyDeadzone(rawDy, AXIS_DEADZONE_PX);
193
- const result = computeVerticalAxisZoom(drag.startVMin, drag.startVMax, drag.startVScale, drag.anchorBaseY, dx, dy);
194
- this.setVerticalZoomPan(result.vMin, result.vMax);
195
- };
196
- this.#onVAxisPointerUp = (e) => {
197
- if (this._drag.kind !== `v-axis-zoom`)
198
- return;
199
- e.currentTarget.releasePointerCapture(e.pointerId);
200
- this._drag = { kind: `none` };
201
- };
202
- // ── Track resize handlers ────────────────────────────────────────────
203
- /** Live preview during drag — update heights but don't fire public event */
204
- this.#onTrackResizeMove = (e) => {
205
- const { trackKey, height } = e.detail;
206
- this.#applyTrackResize(trackKey, height);
207
- };
208
- /** Final resize on pointerup — apply height and fire public event */
209
- this.#onTrackResizeEnd = (e) => {
210
- const { trackKey, height } = e.detail;
211
- this.#applyTrackResize(trackKey, height);
212
- this.dispatchEvent(new CustomEvent(`track-resize`, {
213
- detail: { trackKey, height },
214
- bubbles: true,
215
- composed: true,
216
- }));
217
- };
218
- }
219
- static { this.styles = [timelineStyles]; }
220
- // ── Private refs ────────────────────────────────────────────────────
221
- #vcanvas;
222
- #cssVarsCache;
223
- #cleanupInteractions;
224
- #axisHeight;
225
- #prevTickledId;
226
- #resizeObserver;
227
- #pendingVerticalZoomToFit;
228
- #hasInitializedZoom;
229
- // ── Computed getters (for interactions module) ──────────────────────
230
- /** Pixels per logical unit — the zoom level */
231
- get pxPerUnit() {
232
- return this._ppu;
233
- }
234
- /** Height of the axis header band in pixels */
235
- get axisHeight() {
236
- return this.#axisHeight;
237
- }
238
- /** Width of the track tab area in pixels (from --timeline-tab-width CSS var) */
239
- get tabWidth() {
240
- return this.#tabWidth;
241
- }
242
- // ── Viewport helpers ────────────────────────────────────────────────
243
- #getViewportWidth() {
244
- const raw = this.#vcanvas?.viewportWidth
245
- ?? this.#vcanvas?.clientWidth
246
- ?? 800;
247
- return raw;
248
- }
249
- /** Minimum ppu: fits the full total range into the viewport */
250
- #minPpu() {
251
- const totalSpan = this.max - this.min;
252
- if (totalSpan <= 0)
253
- return 1;
254
- const vpWidth = this.#getViewportWidth();
255
- return vpWidth / totalSpan;
256
- }
257
- // ── Vertical viewport helpers ───────────────────────────────────────
258
- /** Available vertical pixels for track content (excludes axis) */
259
- #getViewportHeight() {
260
- return this.#vcanvas?.viewportHeight
261
- ?? this.#vcanvas?.clientHeight
262
- ?? 300;
263
- }
264
- /**
265
- * Total base height: sum of all visible track base heights (before vScale).
266
- * This is the "total range" for the vertical slider.
267
- */
268
- #getTotalBaseHeight() {
269
- let total = 0;
270
- for (const track of this._internalTracks) {
271
- if (track.hidden)
272
- continue;
273
- const override = this._trackHeightOverrides.get(track.key);
274
- total += override ?? track.height ?? this.defaultTrackHeight;
275
- }
276
- return total || 1; // avoid zero
277
- }
278
- /** Smallest base height among visible tracks (before vScale) */
279
- #getSmallestBaseTrackHeight() {
280
- let smallest = Infinity;
281
- for (const track of this._internalTracks) {
282
- if (track.hidden)
283
- continue;
284
- const override = this._trackHeightOverrides.get(track.key);
285
- const h = override ?? track.height ?? this.defaultTrackHeight;
286
- if (h < smallest)
287
- smallest = h;
288
- }
289
- return smallest === Infinity ? this.defaultTrackHeight : smallest;
290
- }
291
- /** Largest base height among visible tracks (before vScale) */
292
- #getLargestBaseTrackHeight() {
293
- let largest = 0;
294
- for (const track of this._internalTracks) {
295
- if (track.hidden)
296
- continue;
297
- const override = this._trackHeightOverrides.get(track.key);
298
- const h = override ?? track.height ?? this.defaultTrackHeight;
299
- if (h > largest)
300
- largest = h;
301
- }
302
- return largest || this.defaultTrackHeight;
303
- }
304
- /**
305
- * Derive vScale and vViewRange from a given vertical view range.
306
- * viewportHeight / span = scale factor applied to base track heights.
307
- * The axis header takes up fixed space, so available height for tracks is reduced.
308
- */
309
- #deriveVerticalZoom(vMin, vMax) {
310
- const totalBase = this.#getTotalBaseHeight();
311
- const vpHeight = this.#getViewportHeight() - this.#axisHeight;
312
- // Clamp range to [0, totalBase]
313
- let a = vMin;
314
- let b = vMax;
315
- // Min span (max zoom-in): largest visible track fills the viewport
316
- const largestBase = this.#getLargestBaseTrackHeight();
317
- const minSpan = Math.max(largestBase, totalBase * 0.05);
318
- // Max span (max zoom-out): smallest visible track must not shrink below MIN_TRACK_RENDER_HEIGHT
319
- // Since renderedHeight = baseHeight * vScale and vScale = vpHeight / span,
320
- // we need: smallestBase * (vpHeight / span) >= MIN_TRACK_RENDER_HEIGHT
321
- // → span <= vpHeight * smallestBase / MIN_TRACK_RENDER_HEIGHT
322
- const smallestBase = this.#getSmallestBaseTrackHeight();
323
- const maxSpanFromMinHeight = vpHeight > 0
324
- ? vpHeight * smallestBase / MIN_TRACK_RENDER_HEIGHT
325
- : totalBase;
326
- const maxSpan = Math.min(totalBase, maxSpanFromMinHeight);
327
- let span = b - a;
328
- if (span < minSpan) {
329
- const center = (a + b) / 2;
330
- a = center - minSpan / 2;
331
- b = center + minSpan / 2;
332
- span = minSpan;
333
- }
334
- if (span > maxSpan) {
335
- const center = (a + b) / 2;
336
- a = center - maxSpan / 2;
337
- b = center + maxSpan / 2;
338
- span = maxSpan;
339
- }
340
- if (b > totalBase) {
341
- b = totalBase;
342
- a = Math.max(0, b - span);
343
- }
344
- if (a < 0) {
345
- a = 0;
346
- b = Math.min(totalBase, a + span);
347
- }
348
- this._vViewRange = { min: a, max: b };
349
- this._vScale = vpHeight > 0 ? vpHeight / (b - a) : 1;
350
- }
351
- /** Reset vertical zoom to fit all tracks */
352
- #initVerticalZoomToFit() {
353
- const totalBase = this.#getTotalBaseHeight();
354
- this.#deriveVerticalZoom(0, totalBase);
355
- }
356
- /** Pixel offset to scroll the content area */
357
- get #vScrollOffset() {
358
- return this._vViewRange.min * this._vScale;
359
- }
360
- /**
361
- * Derive viewRange from ppu + viewMin, clamped to [min, max].
362
- * Returns a new ViewRange.
363
- */
364
- #deriveViewRange(viewMin, ppu) {
365
- const vpWidth = this.#getViewportWidth();
366
- const viewSpan = ppu > 0 ? vpWidth / ppu : (this.max - this.min);
367
- let newMin = viewMin;
368
- let newMax = newMin + viewSpan;
369
- // Clamp: don't let max exceed total max
370
- if (newMax > this.max) {
371
- newMax = this.max;
372
- newMin = Math.max(this.min, newMax - viewSpan);
373
- }
374
- // Clamp: don't let min go below total min
375
- if (newMin < this.min) {
376
- newMin = this.min;
377
- newMax = Math.min(this.max, newMin + viewSpan);
378
- }
379
- return { min: newMin, max: newMax };
380
- }
381
- // ── Public methods: zoom & pan ──────────────────────────────────────
382
- /** Set the zoom level (pixels per logical unit) */
383
- setPpu(ppu) {
384
- this._ppu = Math.max(this.#minPpu(), Math.min(ppu, MAX_PPU));
385
- this._viewRange = this.#deriveViewRange(this._viewRange.min, this._ppu);
386
- }
387
- /**
388
- * Set the view range. ppu is back-computed from the span.
389
- * Use for programmatic view changes (e.g. TimelineController).
390
- */
391
- setViewRange(range) {
392
- const vpWidth = this.#getViewportWidth();
393
- const span = range.max - range.min;
394
- if (span > 0) {
395
- this._ppu = Math.max(this.#minPpu(), Math.min(vpWidth / span, MAX_PPU));
396
- }
397
- this._viewRange = this.#deriveViewRange(range.min, this._ppu);
398
- }
399
- /**
400
- * Set zoom + pan atomically. Used by axis-zoom interaction.
401
- * viewMin is the left edge in timeline units; ppu is the new zoom level.
402
- */
403
- setZoomPan(viewMin, ppu) {
404
- this._ppu = Math.max(this.#minPpu(), Math.min(ppu, MAX_PPU));
405
- this._viewRange = this.#deriveViewRange(viewMin, this._ppu);
406
- }
407
- /**
408
- * Set vertical zoom + pan atomically. Used by v-axis-zoom interaction.
409
- * vMin/vMax define the vertical view range in base-height units.
410
- */
411
- setVerticalZoomPan(vMin, vMax) {
412
- this.#deriveVerticalZoom(vMin, vMax);
413
- }
414
- selectAll() {
415
- this._selectedIds = new Set(this._internalEvents.map(e => e.id));
416
- this.#fireSelectionChange();
417
- this.#invalidateCanvas();
418
- }
419
- deselectAll() {
420
- this._selectedIds = new Set();
421
- this.#fireSelectionChange();
422
- this.#invalidateCanvas();
423
- }
424
- getTrackEvents(trackKey) {
425
- return this._internalEvents.filter(e => e.trackKey === trackKey);
426
- }
427
- get selectedIds() {
428
- return [...this._selectedIds];
429
- }
430
- set selectedIds(ids) {
431
- this._selectedIds = new Set(ids);
432
- this.#fireSelectionChange();
433
- this.#invalidateCanvas();
434
- }
435
- selectTrack(key, shiftKey = false) {
436
- this.dispatchEvent(new CustomEvent(`track-select`, {
437
- detail: { trackKey: key, shiftKey },
438
- bubbles: true,
439
- composed: true,
440
- }));
441
- }
442
- /** Resets all track height overrides to the default height and resets vertical zoom. */
443
- resetTrackHeights() {
444
- this._trackHeightOverrides = new Map();
445
- this.#pendingVerticalZoomToFit = true;
446
- // willUpdate will see the flag and reset vertical zoom during the same update cycle
447
- }
448
- /** Default no-op snapping - no modification of drag values */
449
- static { this.defaultDragSnapping = () => ({}); }
450
- /** Grid-snapping - snaps start/end to nearest minor gridline */
451
- static { this.gridSnapping = (detail) => {
452
- const { gridResolution, currentStart, currentEnd } = detail;
453
- const { minorStep } = gridResolution;
454
- return {
455
- start: Math.round(currentStart / minorStep) * minorStep,
456
- end: Math.round(currentEnd / minorStep) * minorStep,
457
- };
458
- }; }
459
- /**
460
- * Called by timeline-interactions during drag.
461
- * Applies onDragging callback if set, then fires 'dragging' event.
462
- * Returns constrained values.
463
- */
464
- processDrag(eventId, rawLogicalX, rawY, currentStart, currentEnd, currentTrackKey, originTrackKey, gridResolution) {
465
- let constrainedStart = currentStart;
466
- let constrainedEnd = currentEnd;
467
- let constrainedTrackKey = currentTrackKey;
468
- if (this.onDragging) {
469
- const result = this.onDragging({
470
- eventId,
471
- rawLogicalX,
472
- rawY,
473
- currentStart,
474
- currentEnd,
475
- currentTrackKey,
476
- gridResolution,
477
- originTrackKey,
478
- });
479
- constrainedStart = result.start ?? currentStart;
480
- constrainedEnd = result.end ?? currentEnd;
481
- constrainedTrackKey = result.trackKey ?? currentTrackKey;
482
- }
483
- this.dispatchEvent(new CustomEvent(`dragging`, {
484
- detail: {
485
- eventId,
486
- start: constrainedStart,
487
- end: constrainedEnd,
488
- trackKey: constrainedTrackKey,
489
- rawLogicalX,
490
- rawY,
491
- originTrackKey,
492
- },
493
- bubbles: true,
494
- composed: true,
495
- }));
496
- return {
497
- start: constrainedStart,
498
- end: constrainedEnd,
499
- trackKey: constrainedTrackKey,
500
- };
501
- }
502
- /** Returns the vcanvas element (for timeline-interactions) */
503
- getVCanvas() {
504
- return this.#vcanvas;
505
- }
506
- /** Returns the currently hovered (tickled) event, or null if none. */
507
- get tickledEvent() {
508
- if (this._tickledId === undefined)
509
- return null;
510
- return this._internalEvents.find(e => e.id === this._tickledId) ?? null;
511
- }
512
- // ── Lifecycle ───────────────────────────────────────────────────────
513
- firstUpdated() {
514
- this.#vcanvas = this.shadowRoot?.querySelector(`x-vcanvas`);
515
- if (this.#vcanvas) {
516
- this.#vcanvas.drawCallback = this.#drawCallback;
517
- this.#vcanvas.addEventListener(`scroll-virtual`, this.#onScrollVirtual);
518
- this.#cleanupInteractions = attachTimelineInteractions(this, this.#vcanvas);
519
- // Watch for viewport resizes — adjust viewRange.max, keep ppu stable.
520
- // The observer fires immediately with the initial size, which handles
521
- // the initial zoom-to-fit without setting state in firstUpdated.
522
- this.#resizeObserver = new ResizeObserver(this.#onResize);
523
- this.#resizeObserver.observe(this.#vcanvas);
524
- }
525
- }
526
- disconnectedCallback() {
527
- super.disconnectedCallback();
528
- this.#cleanupInteractions?.();
529
- this.#cleanupInteractions = null;
530
- this.#resizeObserver?.disconnect();
531
- this.#resizeObserver = null;
532
- }
533
- /**
534
- * willUpdate runs before render — safe to set @state() properties here
535
- * without triggering an additional update cycle. All state derivation
536
- * (internal copies, track layout, vertical zoom) happens here.
537
- */
538
- willUpdate(changedProps) {
539
- // Sync external tracks/events into internal managed copies on shallow change
540
- let needsLayoutRecompute = false;
541
- let needsVerticalZoomReset = false;
542
- let needsHorizontalZoomToFit = false;
543
- if (changedProps.has(`tracks`)) {
544
- this._internalTracks = [...this.tracks];
545
- needsLayoutRecompute = true;
546
- needsVerticalZoomReset = true;
547
- }
548
- if (changedProps.has(`events`)) {
549
- this._internalEvents = [...this.events];
550
- }
551
- if (changedProps.has(`trackHeight`)) {
552
- // Mode changed — clear per-track overrides when leaving 'free' mode
553
- if (this.trackHeight !== `free` && this._trackHeightOverrides.size > 0) {
554
- this._trackHeightOverrides = new Map();
555
- }
556
- needsLayoutRecompute = true;
557
- needsVerticalZoomReset = true;
558
- }
559
- if (changedProps.has(`_vScale`) || changedProps.has(`defaultTrackHeight`) || changedProps.has(`_trackHeightOverrides`)) {
560
- needsLayoutRecompute = true;
561
- }
562
- if (changedProps.has(`min`) || changedProps.has(`max`)) {
563
- needsHorizontalZoomToFit = true;
564
- }
565
- // Consume pending zoom-to-fit flag (from resetTrackHeights)
566
- if (this.#pendingVerticalZoomToFit) {
567
- this.#pendingVerticalZoomToFit = false;
568
- needsVerticalZoomReset = true;
569
- }
570
- // Horizontal zoom-to-fit when total range changes
571
- if (needsHorizontalZoomToFit) {
572
- this.#initZoomToFit();
573
- }
574
- // Vertical zoom reset must happen BEFORE layout recompute (layout uses _vScale)
575
- if (needsVerticalZoomReset) {
576
- this.#initVerticalZoomToFit();
577
- }
578
- if (needsLayoutRecompute) {
579
- this.#recomputeTrackLayout();
580
- }
581
- }
582
- /**
583
- * updated runs after render — for DOM side-effects only (syncing vcanvas,
584
- * scrolling, invalidating canvas, dispatching events).
585
- */
586
- updated(changedProps) {
587
- if (changedProps.has(`_ppu`) || changedProps.has(`_viewRange`) || changedProps.has(`min`) || changedProps.has(`max`)) {
588
- this.#syncVCanvas();
589
- this.#invalidateCanvas();
590
- }
591
- if (changedProps.has(`events`) || changedProps.has(`userScale`) || changedProps.has(`altMajorBg`) || changedProps.has(`gridMode`) || changedProps.has(`minorStep`)) {
592
- this.#invalidateCanvas();
593
- }
594
- if (changedProps.has(`_trackLayout`)) {
595
- this.#syncVCanvasVertical();
596
- this.#positionTabs();
597
- this.#invalidateCanvas();
598
- }
599
- // Sync vertical zoom/pan to vcanvas logicalScrollTop + logicalHeight
600
- if (changedProps.has(`_vViewRange`) || changedProps.has(`_vScale`)) {
601
- this.#syncVerticalScroll();
602
- this.#invalidateCanvas();
603
- }
604
- if (this._tickledId !== this.#prevTickledId) {
605
- this.#prevTickledId = this._tickledId;
606
- this.dispatchEvent(new CustomEvent(`tickle-change`, {
607
- detail: { event: this.tickledEvent },
608
- bubbles: true,
609
- composed: true,
610
- }));
611
- }
612
- }
613
- render() {
614
- const totalBaseHeight = this.#getTotalBaseHeight();
615
- return html `
616
- <div class="content-wrapper">
617
- <div class="content-area">
618
- <div class="v-axis-zone"
619
- @pointerdown=${this.#onVAxisPointerDown}
620
- @pointermove=${this.#onVAxisPointerMove}
621
- @pointerup=${this.#onVAxisPointerUp}
622
- @pointercancel=${this.#onVAxisPointerUp}
623
- ></div>
624
- <div class="tab-column">
625
- ${this._internalTracks
626
- .filter(t => !t.hidden)
627
- .map((t) => {
628
- const layout = this._trackLayout.find(l => l.trackKey === t.key);
629
- if (!layout)
630
- return nothing;
631
- return html `
632
- <ixfx-timeline-track-tab
633
- .label=${t.label}
634
- track-key="${t.key}"
635
- ?resizable=${this.trackHeight !== `none`}
636
- ?reorderable=${this.reorderable}
637
- @click=${(e) => this.selectTrack(t.key, e.shiftKey)}
638
- @track-resize-move=${this.#onTrackResizeMove}
639
- @track-resize=${this.#onTrackResizeEnd}
640
- ></ixfx-timeline-track-tab>
641
- `;
642
- })}
643
- </div>
644
- <x-vcanvas></x-vcanvas>
645
- </div>
646
- <div class="v-zoom">
647
- <ixfx-range-multi
648
- orientation="vertical"
649
- min="0"
650
- max="${totalBaseHeight}"
651
- a="${this._vViewRange.min}"
652
- b="${this._vViewRange.max}"
653
- step="any"
654
- crossover="stop"
655
- resize-mode="bipolar-flex"
656
- @input=${this.#onVZoomInput}
657
- ></ixfx-range-multi>
658
- </div>
659
- </div>
660
-
661
- <div class="h-zoom">
662
- <ixfx-range-multi
663
- min="${this.min}"
664
- max="${this.max}"
665
- a="${this._viewRange.min}"
666
- b="${this._viewRange.max}"
667
- crossover="stop"
668
- resize-mode="bipolar-flex"
669
- @input=${this.#onHZoomInput}
670
- ></ixfx-range-multi>
671
- </div>
672
-
673
- <div class="meta-resizer ${this.metaEnabled ? `visible` : ``}"></div>
674
- <div class="meta-area ${this.metaEnabled ? `visible` : ``}" style="height:${this._metaHeight}px"></div>
675
- `;
676
- }
677
- // ── VCanvas wiring ──────────────────────────────────────────────────
678
- /** Compute initial ppu to fit 80% of the range, then derive viewRange */
679
- #initZoomToFit() {
680
- const vpWidth = this.#getViewportWidth();
681
- const totalSpan = this.max - this.min;
682
- const zoomFactor = 0.8;
683
- this._ppu = totalSpan > 0 ? vpWidth / (totalSpan * zoomFactor) : 1;
684
- this._viewRange = { min: this.min, max: this.min + totalSpan * zoomFactor };
685
- this.#syncVCanvas();
686
- // ResizeObserver will re-derive viewRange once vcanvas has its final layout
687
- }
688
- #syncVCanvas() {
689
- if (!this.#vcanvas)
690
- return;
691
- const totalSpan = this.max - this.min;
692
- // logicalWidth = pure timeline content width in pixels (no tab offset)
693
- this.#vcanvas.logicalWidth = totalSpan * this._ppu;
694
- this.#syncVCanvasVertical();
695
- this.#syncVCanvasScroll();
696
- }
697
- /** Sync logicalHeight and logicalScrollTop to the vcanvas */
698
- #syncVCanvasVertical() {
699
- if (!this.#vcanvas)
700
- return;
701
- const totalHeight = this._trackLayout.reduce((sum, tl) => sum + tl.height, 0);
702
- const canvasHeight = Math.max(totalHeight, 40) + this.#axisHeight;
703
- this.#vcanvas.logicalHeight = canvasHeight;
704
- this.#vcanvas.logicalScrollTop = this.#vScrollOffset;
705
- }
706
- #syncVCanvasScroll() {
707
- if (!this.#vcanvas)
708
- return;
709
- // Scroll position in logical pixels: pure timeline scroll offset (no tab area)
710
- this.#vcanvas.logicalScrollLeft = (this._viewRange.min - this.min) * this._ppu;
711
- }
712
- #invalidateCanvas() {
713
- this.#vcanvas?.invalidateAll();
714
- }
715
- /** Called by ResizeObserver when vcanvas/content-area changes size */
716
- #onResize;
717
- #drawCallback;
718
- // ── Scroll / axis labels ────────────────────────────────────────────
719
- #onScrollVirtual;
720
- // ── Private helpers ─────────────────────────────────────────────────
721
- #recomputeTrackLayout() {
722
- const layout = [];
723
- let y = this.#axisHeight;
724
- for (const track of this._internalTracks) {
725
- if (track.hidden)
726
- continue;
727
- const override = this._trackHeightOverrides.get(track.key);
728
- const baseHeight = override ?? track.height ?? this.defaultTrackHeight;
729
- const height = Math.round(baseHeight * this._vScale);
730
- layout.push({ trackKey: track.key, y, height });
731
- y += height;
732
- }
733
- this._trackLayout = layout;
734
- }
735
- /**
736
- * Range slider handler.
737
- * Slider controls zoom (via span) + pan (via position).
738
- * Derive ppu from the span the slider produces.
739
- */
740
- #onHZoomInput;
741
- /**
742
- * Vertical range slider handler.
743
- * Slider controls vertical zoom (via span) + vertical pan (via position).
744
- * Derive _vScale from the span the slider produces.
745
- */
746
- #onVZoomInput;
747
- // ── Vertical axis drag-zoom handlers ──────────────────────────────────
748
- #onVAxisPointerDown;
749
- #onVAxisPointerMove;
750
- #onVAxisPointerUp;
751
- /** Sync vertical scroll position to vcanvas logicalScrollTop */
752
- #syncVerticalScroll() {
753
- this.#syncVCanvasVertical();
754
- this.#positionTabs();
755
- }
756
- /**
757
- * Position track tabs in the .tab-column via absolute CSS positioning.
758
- * Applies a vertical translateY to offset for the current vertical scroll.
759
- */
760
- #positionTabs() {
761
- const tabColumn = this.shadowRoot?.querySelector(`.tab-column`);
762
- if (!tabColumn)
763
- return;
764
- const scrollTop = this.#vcanvas?.logicalScrollTop ?? 0;
765
- tabColumn.style.transform = `translateY(${-scrollTop}px)`;
766
- for (const layout of this._trackLayout) {
767
- const tab = tabColumn.querySelector(`ixfx-timeline-track-tab[track-key="${layout.trackKey}"]`);
768
- if (!tab)
769
- continue;
770
- tab.style.top = `${layout.y}px`;
771
- tab.style.height = `${layout.height}px`;
772
- }
773
- }
774
- /** Read the tab width from the CSS custom property */
775
- get #tabWidth() {
776
- const raw = getComputedStyle(this).getPropertyValue(`--timeline-tab-width`).trim();
777
- return Number.parseInt(raw, 10) || 120;
778
- }
779
- // ── Track resize handlers ────────────────────────────────────────────
780
- /** Live preview during drag — update heights but don't fire public event */
781
- #onTrackResizeMove;
782
- /** Final resize on pointerup — apply height and fire public event */
783
- #onTrackResizeEnd;
784
- /**
785
- * Apply track height based on the current `trackHeight` mode.
786
- * - `fixed`: sets `defaultTrackHeight` (all tracks change uniformly)
787
- * - `free`: sets per-track override in `_trackHeightOverrides`
788
- * - `none`: should never be called (resize is disabled)
789
- */
790
- #applyTrackResize(trackKey, height) {
791
- if (this.trackHeight === `fixed`) {
792
- this.defaultTrackHeight = height;
793
- }
794
- else if (this.trackHeight === `free`) {
795
- const next = new Map(this._trackHeightOverrides);
796
- next.set(trackKey, height);
797
- this._trackHeightOverrides = next;
798
- }
799
- // `updated()` will trigger #recomputeTrackLayout via defaultTrackHeight or _trackHeightOverrides change
800
- }
801
- #fireSelectionChange() {
802
- this.dispatchEvent(new CustomEvent(`selection-change`, {
803
- detail: { selectedIds: [...this._selectedIds] },
804
- bubbles: true,
805
- composed: true,
806
- }));
807
- }
808
- };
809
- __decorate([
810
- property({ type: Array })
811
- ], IxfxTimelineElement.prototype, "tracks", void 0);
812
- __decorate([
813
- property({ type: Array })
814
- ], IxfxTimelineElement.prototype, "events", void 0);
815
- __decorate([
816
- property({ type: Number })
817
- ], IxfxTimelineElement.prototype, "min", void 0);
818
- __decorate([
819
- property({ type: Number })
820
- ], IxfxTimelineElement.prototype, "max", void 0);
821
- __decorate([
822
- property({ type: String, attribute: `track-height` })
823
- ], IxfxTimelineElement.prototype, "trackHeight", void 0);
824
- __decorate([
825
- property({ type: String, attribute: `user-scale` })
826
- ], IxfxTimelineElement.prototype, "userScale", void 0);
827
- __decorate([
828
- property({ type: Boolean })
829
- ], IxfxTimelineElement.prototype, "reorderable", void 0);
830
- __decorate([
831
- property({ type: Boolean, attribute: `meta` })
832
- ], IxfxTimelineElement.prototype, "metaEnabled", void 0);
833
- __decorate([
834
- property({ type: Boolean, attribute: `alt-major-bg` })
835
- ], IxfxTimelineElement.prototype, "altMajorBg", void 0);
836
- __decorate([
837
- property({ type: Number, attribute: `default-track-height` })
838
- ], IxfxTimelineElement.prototype, "defaultTrackHeight", void 0);
839
- __decorate([
840
- property({ type: String, attribute: `grid-mode` })
841
- ], IxfxTimelineElement.prototype, "gridMode", void 0);
842
- __decorate([
843
- property({ type: Number, attribute: `minor-step` })
844
- ], IxfxTimelineElement.prototype, "minorStep", void 0);
845
- __decorate([
846
- property({ type: Object })
847
- ], IxfxTimelineElement.prototype, "onDragging", void 0);
848
- __decorate([
849
- state()
850
- ], IxfxTimelineElement.prototype, "_ppu", void 0);
851
- __decorate([
852
- state()
853
- ], IxfxTimelineElement.prototype, "_viewRange", void 0);
854
- __decorate([
855
- state()
856
- ], IxfxTimelineElement.prototype, "_vViewRange", void 0);
857
- __decorate([
858
- state()
859
- ], IxfxTimelineElement.prototype, "_vScale", void 0);
860
- __decorate([
861
- state()
862
- ], IxfxTimelineElement.prototype, "_selectedIds", void 0);
863
- __decorate([
864
- state()
865
- ], IxfxTimelineElement.prototype, "_tickledId", void 0);
866
- __decorate([
867
- state()
868
- ], IxfxTimelineElement.prototype, "_drag", void 0);
869
- __decorate([
870
- state()
871
- ], IxfxTimelineElement.prototype, "_metaHeight", void 0);
872
- __decorate([
873
- state()
874
- ], IxfxTimelineElement.prototype, "_trackHeightOverrides", void 0);
875
- __decorate([
876
- state()
877
- ], IxfxTimelineElement.prototype, "_trackLayout", void 0);
878
- __decorate([
879
- state()
880
- ], IxfxTimelineElement.prototype, "_internalEvents", void 0);
881
- __decorate([
882
- state()
883
- ], IxfxTimelineElement.prototype, "_internalTracks", void 0);
884
- IxfxTimelineElement = __decorate([
885
- customElement(`ixfx-timeline`)
886
- ], IxfxTimelineElement);
887
- export { IxfxTimelineElement };
888
- //# sourceMappingURL=timeline-element.js.map