@pibbl/core 0.0.1 → 0.0.3-alpha.109.1

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 (683) hide show
  1. package/README.md +1 -1
  2. package/THIRD_PARTY_NOTICES.txt +81 -0
  3. package/dist/features/machines/animation.d.ts +64 -0
  4. package/dist/features/machines/animation.js +55 -0
  5. package/dist/features/machines/animation.js.map +7 -0
  6. package/dist/features/machines/animation.mjs +1 -0
  7. package/dist/features/machines/assign.d.ts +16 -0
  8. package/dist/features/machines/assign.js +15 -0
  9. package/dist/features/machines/assign.js.map +7 -0
  10. package/dist/features/machines/callback.d.ts +9 -0
  11. package/dist/features/machines/callback.js +7 -0
  12. package/dist/features/machines/callback.js.map +7 -0
  13. package/dist/features/machines/hook.d.ts +30 -0
  14. package/dist/features/machines/hook.js +37 -0
  15. package/dist/features/machines/hook.js.map +7 -0
  16. package/dist/features/machines/index.d.ts +6 -0
  17. package/dist/features/machines/index.js +12 -0
  18. package/dist/features/machines/index.js.map +7 -0
  19. package/dist/features/machines/index.mjs +1 -0
  20. package/dist/features/machines/runtime.d.ts +18 -0
  21. package/dist/features/machines/runtime.js +363 -0
  22. package/dist/features/machines/runtime.js.map +7 -0
  23. package/dist/features/machines/types.d.ts +164 -0
  24. package/dist/features/physics/2d-geometry.d.ts +3 -3
  25. package/dist/features/physics/2d-geometry.js.map +1 -1
  26. package/dist/features/physics/2d-testing.d.ts +1 -1
  27. package/dist/features/physics/2d-testing.js +2 -2
  28. package/dist/features/physics/2d-testing.js.map +2 -2
  29. package/dist/features/physics/2d.d.ts +115 -62
  30. package/dist/features/physics/2d.js +59 -28
  31. package/dist/features/physics/2d.js.map +2 -2
  32. package/dist/features/physics/lib/2d/canvas/components.js +25 -21
  33. package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
  34. package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
  35. package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
  36. package/dist/features/physics/lib/2d/collision/casts.js +4 -2
  37. package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
  38. package/dist/features/physics/lib/2d/query-types.d.ts +6 -0
  39. package/dist/features/physics/lib/2d/runtime/controller.d.ts +7 -6
  40. package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
  41. package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
  42. package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
  43. package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
  44. package/dist/features/physics/lib/2d/shapes.js +8 -9
  45. package/dist/features/physics/lib/2d/shapes.js.map +2 -2
  46. package/dist/features/physics/lib/2d/types.d.ts +8 -30
  47. package/dist/features/physics/lib/2d/world/queries.d.ts +7 -6
  48. package/dist/features/physics/lib/2d/world/queries.js.map +2 -2
  49. package/dist/features/physics/lib/2d/world/rapier.js +22 -26
  50. package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
  51. package/dist/features/sprites/formats/aseprite.d.ts +5 -0
  52. package/dist/features/sprites/formats/texture-packer.d.ts +5 -0
  53. package/dist/features/sprites/index.d.ts +6 -0
  54. package/dist/features/sprites/loader.d.ts +25 -0
  55. package/dist/features/sprites/loader.js +6 -3
  56. package/dist/features/sprites/loader.js.map +2 -2
  57. package/dist/features/sprites/model.d.ts +75 -0
  58. package/dist/features/sprites/sprite.d.ts +22 -0
  59. package/dist/features/textures/index.d.ts +12 -2
  60. package/dist/features/textures/index.js +33 -1
  61. package/dist/features/textures/index.js.map +2 -2
  62. package/dist/features/textures/lib/chemical-field.d.ts +56 -0
  63. package/dist/features/textures/lib/chemical-field.js +154 -0
  64. package/dist/features/textures/lib/chemical-field.js.map +7 -0
  65. package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
  66. package/dist/features/textures/lib/chemical-recipes.js +275 -0
  67. package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
  68. package/dist/features/textures/lib/definitions.d.ts +3 -18
  69. package/dist/features/textures/lib/definitions.js +17 -24
  70. package/dist/features/textures/lib/definitions.js.map +2 -2
  71. package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
  72. package/dist/features/textures/lib/geometric-patterns.js +305 -0
  73. package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
  74. package/dist/features/textures/lib/gray-scott.d.ts +55 -0
  75. package/dist/features/textures/lib/gray-scott.js +37 -0
  76. package/dist/features/textures/lib/gray-scott.js.map +7 -0
  77. package/dist/features/textures/lib/palette.js +1 -3
  78. package/dist/features/textures/lib/palette.js.map +2 -2
  79. package/dist/features/textures/lib/patterns.d.ts +123 -0
  80. package/dist/features/textures/lib/patterns.js +344 -0
  81. package/dist/features/textures/lib/patterns.js.map +7 -0
  82. package/dist/features/textures/lib/rain-drops.js +2 -1
  83. package/dist/features/textures/lib/rain-drops.js.map +2 -2
  84. package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
  85. package/dist/features/textures/lib/reaction-diffusion.js +9 -20
  86. package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
  87. package/dist/features/textures/lib/simulation.d.ts +10 -4
  88. package/dist/features/textures/lib/simulation.js +23 -13
  89. package/dist/features/textures/lib/simulation.js.map +2 -2
  90. package/dist/features/textures/lib/wasm/electric.js +8 -1
  91. package/dist/features/textures/lib/wasm/electric.js.map +2 -2
  92. package/dist/features/textures/lib/water-surface.js +1 -3
  93. package/dist/features/textures/lib/water-surface.js.map +2 -2
  94. package/dist/features/viz/index.d.ts +92 -5
  95. package/dist/features/viz/index.js +202 -4
  96. package/dist/features/viz/index.js.map +2 -2
  97. package/dist/features/viz/inspection/bar.d.ts +79 -0
  98. package/dist/features/viz/inspection/bar.js +49 -0
  99. package/dist/features/viz/inspection/bar.js.map +7 -0
  100. package/dist/features/viz/inspection/candle.d.ts +156 -0
  101. package/dist/features/viz/inspection/candle.js +120 -0
  102. package/dist/features/viz/inspection/candle.js.map +7 -0
  103. package/dist/features/viz/inspection/capture-types.d.ts +65 -0
  104. package/dist/features/viz/inspection/capture.d.ts +16 -0
  105. package/dist/features/viz/inspection/capture.js +49 -0
  106. package/dist/features/viz/inspection/capture.js.map +7 -0
  107. package/dist/features/viz/inspection/handler.d.ts +36 -0
  108. package/dist/features/viz/inspection/handler.js +91 -0
  109. package/dist/features/viz/inspection/handler.js.map +7 -0
  110. package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
  111. package/dist/features/viz/inspection/ohlc-bar.js +118 -0
  112. package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
  113. package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
  114. package/dist/features/viz/inspection/owned-ref.js +99 -0
  115. package/dist/features/viz/inspection/owned-ref.js.map +7 -0
  116. package/dist/features/viz/inspection/painted-point.d.ts +22 -0
  117. package/dist/features/viz/inspection/painted-point.js +29 -0
  118. package/dist/features/viz/inspection/painted-point.js.map +7 -0
  119. package/dist/features/viz/inspection/queries.d.ts +100 -0
  120. package/dist/features/viz/inspection/queries.js +192 -0
  121. package/dist/features/viz/inspection/queries.js.map +7 -0
  122. package/dist/features/viz/inspection/query-types.d.ts +177 -0
  123. package/dist/features/viz/inspection/volume.d.ts +104 -0
  124. package/dist/features/viz/inspection/volume.js +95 -0
  125. package/dist/features/viz/inspection/volume.js.map +7 -0
  126. package/dist/features/viz/inspection.d.ts +19 -0
  127. package/dist/features/viz/inspection.js +54 -0
  128. package/dist/features/viz/inspection.js.map +7 -0
  129. package/dist/features/viz/inspection.mjs +1 -0
  130. package/dist/features/viz/lib/area-series.d.ts +62 -0
  131. package/dist/features/viz/lib/area-series.js +120 -0
  132. package/dist/features/viz/lib/area-series.js.map +7 -0
  133. package/dist/features/viz/lib/axis-labels.d.ts +2 -0
  134. package/dist/features/viz/lib/axis-labels.js +41 -0
  135. package/dist/features/viz/lib/axis-labels.js.map +7 -0
  136. package/dist/features/viz/lib/axis-title.d.ts +23 -0
  137. package/dist/features/viz/lib/axis-title.js +24 -0
  138. package/dist/features/viz/lib/axis-title.js.map +7 -0
  139. package/dist/features/viz/lib/axis.d.ts +1 -1
  140. package/dist/features/viz/lib/axis.js +50 -50
  141. package/dist/features/viz/lib/axis.js.map +2 -2
  142. package/dist/features/viz/lib/bar-scale.d.ts +7 -0
  143. package/dist/features/viz/lib/bar-scale.js +34 -0
  144. package/dist/features/viz/lib/bar-scale.js.map +7 -0
  145. package/dist/features/viz/lib/bar-series.d.ts +3 -1
  146. package/dist/features/viz/lib/bar-series.js +21 -5
  147. package/dist/features/viz/lib/bar-series.js.map +2 -2
  148. package/dist/features/viz/lib/baseline-series.d.ts +55 -0
  149. package/dist/features/viz/lib/baseline-series.js +136 -0
  150. package/dist/features/viz/lib/baseline-series.js.map +7 -0
  151. package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
  152. package/dist/features/viz/lib/candlestick-series.js +150 -0
  153. package/dist/features/viz/lib/candlestick-series.js.map +7 -0
  154. package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
  155. package/dist/features/viz/lib/censored-point-series.js +129 -0
  156. package/dist/features/viz/lib/censored-point-series.js.map +7 -0
  157. package/dist/features/viz/lib/chart-lines.d.ts +41 -0
  158. package/dist/features/viz/lib/chart-lines.js +32 -0
  159. package/dist/features/viz/lib/chart-lines.js.map +7 -0
  160. package/dist/features/viz/lib/color-context.d.ts +4 -0
  161. package/dist/features/viz/lib/color-context.js +41 -0
  162. package/dist/features/viz/lib/color-context.js.map +7 -0
  163. package/dist/features/viz/lib/color-math.d.ts +4 -0
  164. package/dist/features/viz/lib/color-math.js +31 -0
  165. package/dist/features/viz/lib/color-math.js.map +7 -0
  166. package/dist/features/viz/lib/color-types.d.ts +53 -0
  167. package/dist/features/viz/lib/curve-definition.d.ts +49 -0
  168. package/dist/features/viz/lib/curve-definition.js +142 -0
  169. package/dist/features/viz/lib/curve-definition.js.map +7 -0
  170. package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
  171. package/dist/features/viz/lib/diverging-color-scale.js +51 -0
  172. package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
  173. package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
  174. package/dist/features/viz/lib/domain-navigation.js +77 -0
  175. package/dist/features/viz/lib/domain-navigation.js.map +7 -0
  176. package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
  177. package/dist/features/viz/lib/editable-chart-elements.js +733 -0
  178. package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
  179. package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
  180. package/dist/features/viz/lib/financial-aggregation.js +116 -0
  181. package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
  182. package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
  183. package/dist/features/viz/lib/financial-autoscale.js +61 -0
  184. package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
  185. package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
  186. package/dist/features/viz/lib/financial-comparison.js +98 -0
  187. package/dist/features/viz/lib/financial-comparison.js.map +7 -0
  188. package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
  189. package/dist/features/viz/lib/financial-geometry.js +67 -0
  190. package/dist/features/viz/lib/financial-geometry.js.map +7 -0
  191. package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
  192. package/dist/features/viz/lib/financial-indicators.js +135 -0
  193. package/dist/features/viz/lib/financial-indicators.js.map +7 -0
  194. package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
  195. package/dist/features/viz/lib/financial-oscillators.js +265 -0
  196. package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
  197. package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
  198. package/dist/features/viz/lib/graph/bipartite.js +250 -0
  199. package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
  200. package/dist/features/viz/lib/graph/chord.d.ts +44 -0
  201. package/dist/features/viz/lib/graph/chord.js +348 -0
  202. package/dist/features/viz/lib/graph/chord.js.map +7 -0
  203. package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
  204. package/dist/features/viz/lib/graph/dependency.js +140 -0
  205. package/dist/features/viz/lib/graph/dependency.js.map +7 -0
  206. package/dist/features/viz/lib/graph/force.d.ts +28 -0
  207. package/dist/features/viz/lib/graph/force.js +580 -0
  208. package/dist/features/viz/lib/graph/force.js.map +7 -0
  209. package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
  210. package/dist/features/viz/lib/graph/hierarchy.js +112 -0
  211. package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
  212. package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
  213. package/dist/features/viz/lib/graph/icicle.js +153 -0
  214. package/dist/features/viz/lib/graph/icicle.js.map +7 -0
  215. package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
  216. package/dist/features/viz/lib/graph/matrix.js +243 -0
  217. package/dist/features/viz/lib/graph/matrix.js.map +7 -0
  218. package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
  219. package/dist/features/viz/lib/graph/neighborhood.js +281 -0
  220. package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
  221. package/dist/features/viz/lib/graph/routes.d.ts +35 -0
  222. package/dist/features/viz/lib/graph/routes.js +101 -0
  223. package/dist/features/viz/lib/graph/routes.js.map +7 -0
  224. package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
  225. package/dist/features/viz/lib/graph/sankey.js +341 -0
  226. package/dist/features/viz/lib/graph/sankey.js.map +7 -0
  227. package/dist/features/viz/lib/graph/shared.d.ts +59 -0
  228. package/dist/features/viz/lib/graph/shared.js +301 -0
  229. package/dist/features/viz/lib/graph/shared.js.map +7 -0
  230. package/dist/features/viz/lib/graph/tree.d.ts +11 -0
  231. package/dist/features/viz/lib/graph/tree.js +232 -0
  232. package/dist/features/viz/lib/graph/tree.js.map +7 -0
  233. package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
  234. package/dist/features/viz/lib/graph/treemap.js +227 -0
  235. package/dist/features/viz/lib/graph/treemap.js.map +7 -0
  236. package/dist/features/viz/lib/graph/types.d.ts +1097 -0
  237. package/dist/features/viz/lib/hover-card.js +8 -9
  238. package/dist/features/viz/lib/hover-card.js.map +2 -2
  239. package/dist/features/viz/lib/hover-data.d.ts +1 -1
  240. package/dist/features/viz/lib/hover-data.js +6 -3
  241. package/dist/features/viz/lib/hover-data.js.map +2 -2
  242. package/dist/features/viz/lib/hover-types.d.ts +5 -5
  243. package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
  244. package/dist/features/viz/lib/interval-band-series.js +136 -0
  245. package/dist/features/viz/lib/interval-band-series.js.map +7 -0
  246. package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
  247. package/dist/features/viz/lib/interval-diamond-series.js +122 -0
  248. package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
  249. package/dist/features/viz/lib/interval-series.d.ts +79 -0
  250. package/dist/features/viz/lib/interval-series.js +158 -0
  251. package/dist/features/viz/lib/interval-series.js.map +7 -0
  252. package/dist/features/viz/lib/layout-pie.js +9 -13
  253. package/dist/features/viz/lib/layout-pie.js.map +2 -2
  254. package/dist/features/viz/lib/line-series.d.ts +1 -1
  255. package/dist/features/viz/lib/line-series.js +47 -28
  256. package/dist/features/viz/lib/line-series.js.map +2 -2
  257. package/dist/features/viz/lib/linear-scale-component.d.ts +7 -0
  258. package/dist/features/viz/lib/linear-scale-component.js +18 -0
  259. package/dist/features/viz/lib/linear-scale-component.js.map +7 -0
  260. package/dist/features/viz/lib/linear-scale.js +1 -1
  261. package/dist/features/viz/lib/linear-scale.js.map +2 -2
  262. package/dist/features/viz/lib/log-scale-component.d.ts +7 -0
  263. package/dist/features/viz/lib/log-scale-component.js +19 -0
  264. package/dist/features/viz/lib/log-scale-component.js.map +7 -0
  265. package/dist/features/viz/lib/log-scale.d.ts +2 -0
  266. package/dist/features/viz/lib/log-scale.js +53 -0
  267. package/dist/features/viz/lib/log-scale.js.map +7 -0
  268. package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
  269. package/dist/features/viz/lib/monotone-curve.js +63 -0
  270. package/dist/features/viz/lib/monotone-curve.js.map +7 -0
  271. package/dist/features/viz/lib/nearest.d.ts +9 -9
  272. package/dist/features/viz/lib/nearest.js.map +1 -1
  273. package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
  274. package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
  275. package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
  276. package/dist/features/viz/lib/numeric-ticks.d.ts +38 -0
  277. package/dist/features/viz/lib/numeric-ticks.js +54 -0
  278. package/dist/features/viz/lib/numeric-ticks.js.map +7 -0
  279. package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
  280. package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
  281. package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
  282. package/dist/features/viz/lib/paired-series.d.ts +44 -0
  283. package/dist/features/viz/lib/paired-series.js +93 -0
  284. package/dist/features/viz/lib/paired-series.js.map +7 -0
  285. package/dist/features/viz/lib/pie-layout.js +2 -1
  286. package/dist/features/viz/lib/pie-layout.js.map +2 -2
  287. package/dist/features/viz/lib/plot-series.js +11 -6
  288. package/dist/features/viz/lib/plot-series.js.map +2 -2
  289. package/dist/features/viz/lib/plot-types.d.ts +4 -3
  290. package/dist/features/viz/lib/point-scale-component.d.ts +7 -0
  291. package/dist/features/viz/lib/point-scale-component.js +19 -0
  292. package/dist/features/viz/lib/point-scale-component.js.map +7 -0
  293. package/dist/features/viz/lib/point-scale.d.ts +2 -0
  294. package/dist/features/viz/lib/point-scale.js +45 -0
  295. package/dist/features/viz/lib/point-scale.js.map +7 -0
  296. package/dist/features/viz/lib/point-series.d.ts +1 -1
  297. package/dist/features/viz/lib/point-series.js +36 -9
  298. package/dist/features/viz/lib/point-series.js.map +2 -2
  299. package/dist/features/viz/lib/point-types.d.ts +5 -2
  300. package/dist/features/viz/lib/reference-band.d.ts +16 -0
  301. package/dist/features/viz/lib/reference-band.js +30 -0
  302. package/dist/features/viz/lib/reference-band.js.map +7 -0
  303. package/dist/features/viz/lib/scale-adjust.js +9 -4
  304. package/dist/features/viz/lib/scale-adjust.js.map +2 -2
  305. package/dist/features/viz/lib/scale-context.d.ts +5 -4
  306. package/dist/features/viz/lib/scale-context.js +15 -11
  307. package/dist/features/viz/lib/scale-context.js.map +2 -2
  308. package/dist/features/viz/lib/scale-provider.d.ts +2 -0
  309. package/dist/features/viz/lib/scale-provider.js +13 -0
  310. package/dist/features/viz/lib/scale-provider.js.map +7 -0
  311. package/dist/features/viz/lib/scale-ticks.d.ts +5 -0
  312. package/dist/features/viz/lib/scale-ticks.js +64 -0
  313. package/dist/features/viz/lib/scale-ticks.js.map +7 -0
  314. package/dist/features/viz/lib/scale-view.d.ts +4 -0
  315. package/dist/features/viz/lib/scale-view.js +21 -0
  316. package/dist/features/viz/lib/scale-view.js.map +7 -0
  317. package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
  318. package/dist/features/viz/lib/sequential-color-scale.js +49 -0
  319. package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
  320. package/dist/features/viz/lib/series-position.d.ts +12 -0
  321. package/dist/features/viz/lib/series-position.js +44 -0
  322. package/dist/features/viz/lib/series-position.js.map +7 -0
  323. package/dist/features/viz/lib/step-curves.d.ts +19 -0
  324. package/dist/features/viz/lib/step-curves.js +53 -0
  325. package/dist/features/viz/lib/step-curves.js.map +7 -0
  326. package/dist/features/viz/lib/symlog-scale-component.d.ts +7 -0
  327. package/dist/features/viz/lib/symlog-scale-component.js +19 -0
  328. package/dist/features/viz/lib/symlog-scale-component.js.map +7 -0
  329. package/dist/features/viz/lib/symlog-scale.d.ts +2 -0
  330. package/dist/features/viz/lib/symlog-scale.js +38 -0
  331. package/dist/features/viz/lib/symlog-scale.js.map +7 -0
  332. package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
  333. package/dist/features/viz/lib/threshold-color-scale.js +59 -0
  334. package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
  335. package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
  336. package/dist/features/viz/lib/trading-time-mapping.js +89 -0
  337. package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
  338. package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
  339. package/dist/features/viz/lib/trading-time-scale.js +96 -0
  340. package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
  341. package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
  342. package/dist/features/viz/lib/trajectory-series.js +111 -0
  343. package/dist/features/viz/lib/trajectory-series.js.map +7 -0
  344. package/dist/features/viz/lib/types.d.ts +114 -21
  345. package/dist/features/viz/lib/use-bar-scale.d.ts +8 -0
  346. package/dist/features/viz/lib/use-bar-scale.js +9 -0
  347. package/dist/features/viz/lib/use-bar-scale.js.map +7 -0
  348. package/dist/features/viz/lib/use-continuous-scale.d.ts +8 -0
  349. package/dist/features/viz/lib/use-continuous-scale.js +14 -0
  350. package/dist/features/viz/lib/use-continuous-scale.js.map +7 -0
  351. package/dist/features/viz/lib/use-linear-scale.d.ts +8 -0
  352. package/dist/features/viz/lib/use-linear-scale.js +9 -0
  353. package/dist/features/viz/lib/use-linear-scale.js.map +7 -0
  354. package/dist/features/viz/lib/use-log-scale.d.ts +8 -0
  355. package/dist/features/viz/lib/use-log-scale.js +9 -0
  356. package/dist/features/viz/lib/use-log-scale.js.map +7 -0
  357. package/dist/features/viz/lib/use-point-scale.d.ts +8 -0
  358. package/dist/features/viz/lib/use-point-scale.js +9 -0
  359. package/dist/features/viz/lib/use-point-scale.js.map +7 -0
  360. package/dist/features/viz/lib/use-symlog-scale.d.ts +8 -0
  361. package/dist/features/viz/lib/use-symlog-scale.js +9 -0
  362. package/dist/features/viz/lib/use-symlog-scale.js.map +7 -0
  363. package/dist/features/viz/lib/use-utc-scale.d.ts +8 -0
  364. package/dist/features/viz/lib/use-utc-scale.js +9 -0
  365. package/dist/features/viz/lib/use-utc-scale.js.map +7 -0
  366. package/dist/features/viz/lib/utc-labels.d.ts +12 -0
  367. package/dist/features/viz/lib/utc-labels.js +27 -0
  368. package/dist/features/viz/lib/utc-labels.js.map +7 -0
  369. package/dist/features/viz/lib/utc-scale-component.d.ts +7 -0
  370. package/dist/features/viz/lib/utc-scale-component.js +18 -0
  371. package/dist/features/viz/lib/utc-scale-component.js.map +7 -0
  372. package/dist/features/viz/lib/utc-scale.d.ts +21 -0
  373. package/dist/features/viz/lib/utc-scale.js +124 -0
  374. package/dist/features/viz/lib/utc-scale.js.map +7 -0
  375. package/dist/features/viz/lib/volume-series.d.ts +59 -0
  376. package/dist/features/viz/lib/volume-series.js +117 -0
  377. package/dist/features/viz/lib/volume-series.js.map +7 -0
  378. package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
  379. package/dist/features/viz/lib/weighted-point-series.js +169 -0
  380. package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
  381. package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
  382. package/dist/filters/backdrop-contrast-gpu.js +33 -0
  383. package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
  384. package/dist/filters/backdrop-contrast.d.ts +21 -0
  385. package/dist/filters/backdrop-contrast.js +61 -0
  386. package/dist/filters/backdrop-contrast.js.map +7 -0
  387. package/dist/filters/displacement.js +1 -1
  388. package/dist/filters/displacement.js.map +2 -2
  389. package/dist/filters/emboss-gpu.d.ts +4 -0
  390. package/dist/filters/emboss-gpu.js +39 -0
  391. package/dist/filters/emboss-gpu.js.map +7 -0
  392. package/dist/filters/emboss.d.ts +32 -0
  393. package/dist/filters/emboss.js +104 -0
  394. package/dist/filters/emboss.js.map +7 -0
  395. package/dist/filters/filter-executor.d.ts +11 -4
  396. package/dist/filters/filter-executor.js +104 -49
  397. package/dist/filters/filter-executor.js.map +2 -2
  398. package/dist/filters/reflected-light.js +1 -1
  399. package/dist/filters/reflected-light.js.map +2 -2
  400. package/dist/filters/reflection-gpu.d.ts +3 -1
  401. package/dist/filters/reflection-gpu.js +5 -2
  402. package/dist/filters/reflection-gpu.js.map +2 -2
  403. package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
  404. package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
  405. package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
  406. package/dist/filters/render-emboss-boundary.d.ts +13 -0
  407. package/dist/filters/render-emboss-boundary.js +131 -0
  408. package/dist/filters/render-emboss-boundary.js.map +7 -0
  409. package/dist/filters.d.ts +9 -5
  410. package/dist/filters.js +4 -0
  411. package/dist/filters.js.map +2 -2
  412. package/dist/index.d.ts +10 -6
  413. package/dist/index.js +18 -2
  414. package/dist/index.js.map +2 -2
  415. package/dist/internal.d.ts +4 -0
  416. package/dist/internal.js +6 -0
  417. package/dist/internal.js.map +2 -2
  418. package/dist/layout-kernel.d.ts +12 -0
  419. package/dist/layout-kernel.js +11 -0
  420. package/dist/layout-kernel.js.map +7 -0
  421. package/dist/layout-kernel.mjs +1 -0
  422. package/dist/lib/animation/definition.d.ts +5 -3
  423. package/dist/lib/animation/definition.js +29 -4
  424. package/dist/lib/animation/definition.js.map +2 -2
  425. package/dist/lib/animation/playback.d.ts +8 -0
  426. package/dist/lib/animation/playback.js +33 -11
  427. package/dist/lib/animation/playback.js.map +2 -2
  428. package/dist/lib/animation/spring.d.ts +3 -1
  429. package/dist/lib/animation/spring.js.map +2 -2
  430. package/dist/lib/animation/types.d.ts +29 -73
  431. package/dist/lib/backend/types.d.ts +13 -1
  432. package/dist/lib/backend/types.js.map +2 -2
  433. package/dist/lib/components/arc-geometry.js +2 -1
  434. package/dist/lib/components/arc-geometry.js.map +2 -2
  435. package/dist/lib/components/g.js +2 -0
  436. package/dist/lib/components/g.js.map +2 -2
  437. package/dist/lib/components/html-box.js +2 -1
  438. package/dist/lib/components/html-box.js.map +2 -2
  439. package/dist/lib/components/img.js +3 -3
  440. package/dist/lib/components/img.js.map +2 -2
  441. package/dist/lib/components/layer.js +98 -16
  442. package/dist/lib/components/layer.js.map +3 -3
  443. package/dist/lib/components/text.d.ts +16 -0
  444. package/dist/lib/components/text.js +131 -24
  445. package/dist/lib/components/text.js.map +2 -2
  446. package/dist/lib/define-primitive.d.ts +4 -2
  447. package/dist/lib/define-primitive.js +3 -1
  448. package/dist/lib/define-primitive.js.map +2 -2
  449. package/dist/lib/element/metadata.d.ts +9 -0
  450. package/dist/lib/element/metadata.js +19 -0
  451. package/dist/lib/element/metadata.js.map +2 -2
  452. package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
  453. package/dist/lib/element/resolve-primitive-inputs.js +17 -4
  454. package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
  455. package/dist/lib/events/event-facade.d.ts +18 -0
  456. package/dist/lib/events/event-facade.js +28 -2
  457. package/dist/lib/events/event-facade.js.map +2 -2
  458. package/dist/lib/events/hit-test.js +2 -1
  459. package/dist/lib/events/hit-test.js.map +2 -2
  460. package/dist/lib/events/propagation.d.ts +2 -1
  461. package/dist/lib/events/propagation.js +22 -16
  462. package/dist/lib/events/propagation.js.map +2 -2
  463. package/dist/lib/events/registrations.d.ts +10 -0
  464. package/dist/lib/events/registrations.js +160 -5
  465. package/dist/lib/events/registrations.js.map +2 -2
  466. package/dist/lib/execute-render.js +25 -1
  467. package/dist/lib/execute-render.js.map +2 -2
  468. package/dist/lib/filter/filter-region.js +3 -10
  469. package/dist/lib/filter/filter-region.js.map +2 -2
  470. package/dist/lib/focus/focus-manager.d.ts +8 -1
  471. package/dist/lib/focus/focus-manager.js +87 -43
  472. package/dist/lib/focus/focus-manager.js.map +2 -2
  473. package/dist/lib/focus/geometry.d.ts +2 -0
  474. package/dist/lib/focus/geometry.js +6 -0
  475. package/dist/lib/focus/geometry.js.map +2 -2
  476. package/dist/lib/geometry/path-bend-guide.js +1 -1
  477. package/dist/lib/geometry/path-bend-guide.js.map +2 -2
  478. package/dist/lib/geometry/path-geometry.js +12 -11
  479. package/dist/lib/geometry/path-geometry.js.map +2 -2
  480. package/dist/lib/geometry/path-transforms.js +17 -21
  481. package/dist/lib/geometry/path-transforms.js.map +2 -2
  482. package/dist/lib/geometry/path-warp-bezier.js +3 -1
  483. package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
  484. package/dist/lib/geometry/path-warp.js +1 -1
  485. package/dist/lib/geometry/path-warp.js.map +2 -2
  486. package/dist/lib/global-state.js +2 -0
  487. package/dist/lib/global-state.js.map +2 -2
  488. package/dist/lib/hooks/use-animated-value.d.ts +11 -21
  489. package/dist/lib/hooks/use-animated-value.js +23 -70
  490. package/dist/lib/hooks/use-animated-value.js.map +3 -3
  491. package/dist/lib/hooks/use-playback.js +1 -0
  492. package/dist/lib/hooks/use-playback.js.map +2 -2
  493. package/dist/lib/html/html-events.d.ts +32 -0
  494. package/dist/lib/html/html-events.js +179 -0
  495. package/dist/lib/html/html-events.js.map +7 -0
  496. package/dist/lib/html/html-service.d.ts +8 -2
  497. package/dist/lib/html/html-service.js +198 -65
  498. package/dist/lib/html/html-service.js.map +2 -2
  499. package/dist/lib/html/overlay-config.js +7 -6
  500. package/dist/lib/html/overlay-config.js.map +2 -2
  501. package/dist/lib/html/types.d.ts +29 -2
  502. package/dist/lib/layout/absolute.d.ts +11 -5
  503. package/dist/lib/layout/absolute.js +329 -55
  504. package/dist/lib/layout/absolute.js.map +3 -3
  505. package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
  506. package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
  507. package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
  508. package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
  509. package/dist/lib/layout/allocation-checkpoint.js +463 -0
  510. package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
  511. package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
  512. package/dist/lib/layout/allocation-dependencies.js +90 -0
  513. package/dist/lib/layout/allocation-dependencies.js.map +7 -0
  514. package/dist/lib/layout/allocation-revision.d.ts +13 -0
  515. package/dist/lib/layout/allocation-revision.js +67 -0
  516. package/dist/lib/layout/allocation-revision.js.map +7 -0
  517. package/dist/lib/layout/box-insets.d.ts +17 -0
  518. package/dist/lib/layout/box-insets.js +138 -0
  519. package/dist/lib/layout/box-insets.js.map +7 -0
  520. package/dist/lib/layout/box-sizing.d.ts +16 -0
  521. package/dist/lib/layout/box-sizing.js +77 -0
  522. package/dist/lib/layout/box-sizing.js.map +7 -0
  523. package/dist/lib/layout/box.js +42 -12
  524. package/dist/lib/layout/box.js.map +2 -2
  525. package/dist/lib/layout/canvas-measurement.d.ts +13 -0
  526. package/dist/lib/layout/canvas-measurement.js +57 -0
  527. package/dist/lib/layout/canvas-measurement.js.map +7 -0
  528. package/dist/lib/layout/context.d.ts +35 -6
  529. package/dist/lib/layout/context.js +72 -3
  530. package/dist/lib/layout/context.js.map +2 -2
  531. package/dist/lib/layout/define-layout-component.d.ts +23 -0
  532. package/dist/lib/layout/define-layout-component.js +84 -0
  533. package/dist/lib/layout/define-layout-component.js.map +7 -0
  534. package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
  535. package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
  536. package/dist/lib/layout/flex-baseline-mode.js +7 -0
  537. package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
  538. package/dist/lib/layout/flex.d.ts +50 -15
  539. package/dist/lib/layout/flex.js +2124 -195
  540. package/dist/lib/layout/flex.js.map +3 -3
  541. package/dist/lib/layout/flow.js +225 -49
  542. package/dist/lib/layout/flow.js.map +2 -2
  543. package/dist/lib/layout/geometry-publication.d.ts +53 -0
  544. package/dist/lib/layout/geometry-publication.js +244 -0
  545. package/dist/lib/layout/geometry-publication.js.map +7 -0
  546. package/dist/lib/layout/grid-kernel.d.ts +63 -0
  547. package/dist/lib/layout/grid-kernel.js +168 -0
  548. package/dist/lib/layout/grid-kernel.js.map +7 -0
  549. package/dist/lib/layout/grid.d.ts +63 -4
  550. package/dist/lib/layout/grid.js +767 -171
  551. package/dist/lib/layout/grid.js.map +3 -3
  552. package/dist/lib/layout/measure.d.ts +55 -3
  553. package/dist/lib/layout/measure.js +448 -15
  554. package/dist/lib/layout/measure.js.map +2 -2
  555. package/dist/lib/layout/overlay.js +81 -23
  556. package/dist/lib/layout/overlay.js.map +2 -2
  557. package/dist/lib/layout/participation.d.ts +27 -0
  558. package/dist/lib/layout/participation.js +188 -0
  559. package/dist/lib/layout/participation.js.map +7 -0
  560. package/dist/lib/layout/place-child.js +1 -1
  561. package/dist/lib/layout/place-child.js.map +2 -2
  562. package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
  563. package/dist/lib/layout/positioning-diagnostics.js +13 -2
  564. package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
  565. package/dist/lib/layout/prepared-root.d.ts +121 -0
  566. package/dist/lib/layout/prepared-root.js +360 -0
  567. package/dist/lib/layout/prepared-root.js.map +7 -0
  568. package/dist/lib/layout/standalone-kernel.d.ts +60 -0
  569. package/dist/lib/layout/standalone-kernel.js +722 -0
  570. package/dist/lib/layout/standalone-kernel.js.map +7 -0
  571. package/dist/lib/layout/topology.d.ts +21 -0
  572. package/dist/lib/layout/topology.js +113 -0
  573. package/dist/lib/layout/topology.js.map +7 -0
  574. package/dist/lib/layout/types.d.ts +5 -0
  575. package/dist/lib/layout/wasm/artifact.d.ts +1 -0
  576. package/dist/lib/layout/wasm/artifact.js +5 -0
  577. package/dist/lib/layout/wasm/artifact.js.map +7 -0
  578. package/dist/lib/layout/wasm/bytes.d.ts +1 -0
  579. package/dist/lib/layout/wasm/bytes.js +5 -0
  580. package/dist/lib/layout/wasm/bytes.js.map +7 -0
  581. package/dist/lib/layout/wasm/embedded.d.ts +2 -0
  582. package/dist/lib/layout/wasm/embedded.js +12 -0
  583. package/dist/lib/layout/wasm/embedded.js.map +7 -0
  584. package/dist/lib/layout/wasm/layout.wasm +0 -0
  585. package/dist/lib/layout/wasm/module.d.ts +8 -0
  586. package/dist/lib/layout/wasm/module.js +70 -0
  587. package/dist/lib/layout/wasm/module.js.map +7 -0
  588. package/dist/lib/layout/wasm/region.d.ts +267 -0
  589. package/dist/lib/layout/wasm/region.js +1018 -0
  590. package/dist/lib/layout/wasm/region.js.map +7 -0
  591. package/dist/lib/manipulation/controller.js +4 -7
  592. package/dist/lib/manipulation/controller.js.map +2 -2
  593. package/dist/lib/manipulation/frame.js +1 -1
  594. package/dist/lib/manipulation/frame.js.map +2 -2
  595. package/dist/lib/manipulation/handles.js +32 -33
  596. package/dist/lib/manipulation/handles.js.map +2 -2
  597. package/dist/lib/manipulation/solve.js +12 -10
  598. package/dist/lib/manipulation/solve.js.map +2 -2
  599. package/dist/lib/mount-pibbl.js +1 -0
  600. package/dist/lib/mount-pibbl.js.map +2 -2
  601. package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
  602. package/dist/lib/mount-prepared-pibbl.js +29 -0
  603. package/dist/lib/mount-prepared-pibbl.js.map +7 -0
  604. package/dist/lib/mount-request.d.ts +8 -0
  605. package/dist/lib/mount-request.js +41 -0
  606. package/dist/lib/mount-request.js.map +7 -0
  607. package/dist/lib/pibbl.d.ts +21 -13
  608. package/dist/lib/pibbl.js +18 -16
  609. package/dist/lib/pibbl.js.map +2 -2
  610. package/dist/lib/recording/recording.d.ts +43 -0
  611. package/dist/lib/recording/recording.js +555 -0
  612. package/dist/lib/recording/recording.js.map +7 -0
  613. package/dist/lib/recording/types.d.ts +118 -0
  614. package/dist/lib/recording/wasm-bytes.d.ts +1 -0
  615. package/dist/lib/recording/wasm-bytes.js +5 -0
  616. package/dist/lib/recording/wasm-bytes.js.map +7 -0
  617. package/dist/lib/recording/worker-source.d.ts +1 -0
  618. package/dist/lib/recording/worker-source.js +5 -0
  619. package/dist/lib/recording/worker-source.js.map +7 -0
  620. package/dist/lib/render-layer/controller.d.ts +9 -3
  621. package/dist/lib/render-layer/controller.js +259 -110
  622. package/dist/lib/render-layer/controller.js.map +2 -2
  623. package/dist/lib/render-transaction.d.ts +12 -2
  624. package/dist/lib/render-transaction.js +69 -1
  625. package/dist/lib/render-transaction.js.map +2 -2
  626. package/dist/lib/render.js +32 -8
  627. package/dist/lib/render.js.map +2 -2
  628. package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
  629. package/dist/lib/scheduler/realm-scheduler.js +55 -26
  630. package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
  631. package/dist/lib/scheduler/renderer-participant.js +1 -0
  632. package/dist/lib/scheduler/renderer-participant.js.map +2 -2
  633. package/dist/lib/series-inspection-frame.d.ts +18 -0
  634. package/dist/lib/series-inspection-frame.js +70 -0
  635. package/dist/lib/series-inspection-frame.js.map +7 -0
  636. package/dist/lib/signals/edge.d.ts +7 -4
  637. package/dist/lib/signals/edge.js +25 -3
  638. package/dist/lib/signals/edge.js.map +2 -2
  639. package/dist/lib/signals/graph.d.ts +16 -2
  640. package/dist/lib/signals/graph.js +54 -12
  641. package/dist/lib/signals/graph.js.map +2 -2
  642. package/dist/lib/signals/input-provision.d.ts +15 -0
  643. package/dist/lib/signals/input-provision.js +53 -3
  644. package/dist/lib/signals/input-provision.js.map +2 -2
  645. package/dist/lib/signals/render-consumer.d.ts +3 -0
  646. package/dist/lib/signals/render-consumer.js +22 -14
  647. package/dist/lib/signals/render-consumer.js.map +2 -2
  648. package/dist/lib/style/positioning.d.ts +50 -2
  649. package/dist/lib/style/positioning.js +28 -4
  650. package/dist/lib/style/positioning.js.map +2 -2
  651. package/dist/lib/style/resolve-built-in.d.ts +4 -3
  652. package/dist/lib/style/resolve-built-in.js +17 -3
  653. package/dist/lib/style/resolve-built-in.js.map +2 -2
  654. package/dist/lib/style/resolve-dispatch.d.ts +3 -0
  655. package/dist/lib/style/resolve-dispatch.js +77 -4
  656. package/dist/lib/style/resolve-dispatch.js.map +2 -2
  657. package/dist/lib/style/resolve-length.d.ts +2 -0
  658. package/dist/lib/style/resolve-length.js +13 -9
  659. package/dist/lib/style/resolve-length.js.map +2 -2
  660. package/dist/lib/style/sizing-length.d.ts +51 -0
  661. package/dist/lib/style/sizing-length.js +77 -0
  662. package/dist/lib/style/sizing-length.js.map +7 -0
  663. package/dist/lib/style/types.d.ts +63 -25
  664. package/dist/lib/surface/root-surface.js +10 -6
  665. package/dist/lib/surface/root-surface.js.map +2 -2
  666. package/dist/lib/textures/texture.js +10 -8
  667. package/dist/lib/textures/texture.js.map +2 -2
  668. package/dist/lib/transitions/capture.js +4 -1
  669. package/dist/lib/transitions/capture.js.map +2 -2
  670. package/dist/lib/transitions/embers-physics.js +17 -10
  671. package/dist/lib/transitions/embers-physics.js.map +2 -2
  672. package/dist/lib/types.d.ts +110 -1
  673. package/dist/sync.d.ts +16 -0
  674. package/dist/sync.js +13 -0
  675. package/dist/sync.js.map +7 -0
  676. package/dist/sync.mjs +1 -0
  677. package/package.json +43 -6
  678. package/dist/features/viz/lib/scale.d.ts +0 -11
  679. package/dist/features/viz/lib/scale.js +0 -80
  680. package/dist/features/viz/lib/scale.js.map +0 -7
  681. package/dist/features/viz/lib/use-scale.d.ts +0 -20
  682. package/dist/features/viz/lib/use-scale.js +0 -10
  683. package/dist/features/viz/lib/use-scale.js.map +0 -7
@@ -0,0 +1,19 @@
1
+ /** Optional committed-render inspection. Rendering entries do not import these algorithms. */
2
+ export { useNumericInspection, usePointInspection, } from "./inspection/capture.js";
3
+ export { withInspection } from "./inspection/handler.js";
4
+ export { paintedPointAt } from "./inspection/painted-point.js";
5
+ export { useBarInspection, paintedBarAt } from "./inspection/bar.js";
6
+ export type { BarInspectionRef, BarRenderedSeries, PaintedBarHit, } from "./inspection/bar.js";
7
+ export type { PaintedPointHit } from "./inspection/painted-point.js";
8
+ export type { InspectionContext, InspectionRef } from "./inspection/handler.js";
9
+ export type { NumericInspectionRef, PointInspectionRef, PointRenderedSeries, } from "./inspection/capture-types.js";
10
+ export { nearestRecordedX, nearestRecordedPoint, sampleRecordedX, firstSourceObservation, lastSourceObservation, anchorInsideClips, } from "./inspection/queries.js";
11
+ export type { NumericRenderedSeries, NumericRenderedObservation, RecordedNumericHit, NearestRecordedXHit, NearestRecordedPointHit, RecordedXSample, NumericRenderedFilter, NumericDuplicateResolver, NumericDomainInterpolation, RenderedSeriesPoint, } from "./inspection/query-types.js";
12
+ export type { NumericRenderedSeries as RenderedSeries, InspectionCandidate, NumericRenderedAnchors, } from "./inspection/query-types.js";
13
+ export type { NearestRecordedXOptions, NearestRecordedPointOptions, SampleRecordedXOptions, } from "./inspection/queries.js";
14
+ export { useVolumeInspection, nearestRecordedVolumeX, paintedVolumeAt, } from "./inspection/volume.js";
15
+ export type { VolumeObservation, VolumeInspectionCandidate, NearestVolumeHit, PaintedVolumeHit, VolumeInspectionRef, VolumeRenderedSeries, } from "./inspection/volume.js";
16
+ export { useCandleInspection, nearestRecordedCandleX, paintedCandleAt, } from "./inspection/candle.js";
17
+ export type { CandleObservation, CandleInspectionCandidate, NearestCandleHit, PaintedCandleHit, CandleInspectionRef, CandleRenderedSeries, } from "./inspection/candle.js";
18
+ export { useOhlcBarInspection, nearestRecordedOhlcBarX, paintedOhlcBarAt, } from "./inspection/ohlc-bar.js";
19
+ export type { OhlcBarObservation, OhlcBarInspectionCandidate, NearestOhlcBarHit, PaintedOhlcBarHit, OhlcBarInspectionRef, OhlcBarRenderedSeries, } from "./inspection/ohlc-bar.js";
@@ -0,0 +1,54 @@
1
+ import {
2
+ useNumericInspection,
3
+ usePointInspection
4
+ } from "./inspection/capture.js";
5
+ import { withInspection } from "./inspection/handler.js";
6
+ import { paintedPointAt } from "./inspection/painted-point.js";
7
+ import { useBarInspection, paintedBarAt } from "./inspection/bar.js";
8
+ import {
9
+ nearestRecordedX,
10
+ nearestRecordedPoint,
11
+ sampleRecordedX,
12
+ firstSourceObservation,
13
+ lastSourceObservation,
14
+ anchorInsideClips
15
+ } from "./inspection/queries.js";
16
+ import {
17
+ useVolumeInspection,
18
+ nearestRecordedVolumeX,
19
+ paintedVolumeAt
20
+ } from "./inspection/volume.js";
21
+ import {
22
+ useCandleInspection,
23
+ nearestRecordedCandleX,
24
+ paintedCandleAt
25
+ } from "./inspection/candle.js";
26
+ import {
27
+ useOhlcBarInspection,
28
+ nearestRecordedOhlcBarX,
29
+ paintedOhlcBarAt
30
+ } from "./inspection/ohlc-bar.js";
31
+ export {
32
+ anchorInsideClips,
33
+ firstSourceObservation,
34
+ lastSourceObservation,
35
+ nearestRecordedCandleX,
36
+ nearestRecordedOhlcBarX,
37
+ nearestRecordedPoint,
38
+ nearestRecordedVolumeX,
39
+ nearestRecordedX,
40
+ paintedBarAt,
41
+ paintedCandleAt,
42
+ paintedOhlcBarAt,
43
+ paintedPointAt,
44
+ paintedVolumeAt,
45
+ sampleRecordedX,
46
+ useBarInspection,
47
+ useCandleInspection,
48
+ useNumericInspection,
49
+ useOhlcBarInspection,
50
+ usePointInspection,
51
+ useVolumeInspection,
52
+ withInspection
53
+ };
54
+ //# sourceMappingURL=inspection.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/features/viz/inspection.ts"],
4
+ "sourcesContent": ["/** Optional committed-render inspection. Rendering entries do not import these algorithms. */\nexport {\n useNumericInspection,\n usePointInspection,\n} from \"./inspection/capture.js\";\nexport { withInspection } from \"./inspection/handler.js\";\nexport { paintedPointAt } from \"./inspection/painted-point.js\";\nexport { useBarInspection, paintedBarAt } from \"./inspection/bar.js\";\nexport type {\n BarInspectionRef,\n BarRenderedSeries,\n PaintedBarHit,\n} from \"./inspection/bar.js\";\nexport type { PaintedPointHit } from \"./inspection/painted-point.js\";\nexport type { InspectionContext, InspectionRef } from \"./inspection/handler.js\";\nexport type {\n NumericInspectionRef,\n PointInspectionRef,\n PointRenderedSeries,\n} from \"./inspection/capture-types.js\";\nexport {\n nearestRecordedX,\n nearestRecordedPoint,\n sampleRecordedX,\n firstSourceObservation,\n lastSourceObservation,\n anchorInsideClips,\n} from \"./inspection/queries.js\";\nexport type {\n NumericRenderedSeries,\n NumericRenderedObservation,\n RecordedNumericHit,\n NearestRecordedXHit,\n NearestRecordedPointHit,\n RecordedXSample,\n NumericRenderedFilter,\n NumericDuplicateResolver,\n NumericDomainInterpolation,\n RenderedSeriesPoint,\n} from \"./inspection/query-types.js\";\n\nexport type {\n NumericRenderedSeries as RenderedSeries,\n InspectionCandidate,\n NumericRenderedAnchors,\n} from \"./inspection/query-types.js\";\nexport type {\n NearestRecordedXOptions,\n NearestRecordedPointOptions,\n SampleRecordedXOptions,\n} from \"./inspection/queries.js\";\nexport {\n useVolumeInspection,\n nearestRecordedVolumeX,\n paintedVolumeAt,\n} from \"./inspection/volume.js\";\nexport type {\n VolumeObservation,\n VolumeInspectionCandidate,\n NearestVolumeHit,\n PaintedVolumeHit,\n VolumeInspectionRef,\n VolumeRenderedSeries,\n} from \"./inspection/volume.js\";\nexport {\n useCandleInspection,\n nearestRecordedCandleX,\n paintedCandleAt,\n} from \"./inspection/candle.js\";\nexport type {\n CandleObservation,\n CandleInspectionCandidate,\n NearestCandleHit,\n PaintedCandleHit,\n CandleInspectionRef,\n CandleRenderedSeries,\n} from \"./inspection/candle.js\";\nexport {\n useOhlcBarInspection,\n nearestRecordedOhlcBarX,\n paintedOhlcBarAt,\n} from \"./inspection/ohlc-bar.js\";\nexport type {\n OhlcBarObservation,\n OhlcBarInspectionCandidate,\n NearestOhlcBarHit,\n PaintedOhlcBarHit,\n OhlcBarInspectionRef,\n OhlcBarRenderedSeries,\n} from \"./inspection/ohlc-bar.js\";\n"],
5
+ "mappings": "AACA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B,SAAS,kBAAkB,oBAAoB;AAa/C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAwBP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export * from './inspection.js';
@@ -0,0 +1,62 @@
1
+ import type { Path } from "@pibbl/core";
2
+ import type { FillStyle, PibblEventHandlers, PibblEventParticipationOptions, SignalValue } from "@pibbl/core";
3
+ import type { SignalStyle } from "@pibbl/core/internal";
4
+ import type { LineAccessor, LineSeriesProps } from "./types.js";
5
+ /**
6
+ * Presentation properties for an {@link AreaSeries}.
7
+ *
8
+ * @see {@link FillStyle}
9
+ * @see {@link AreaSeriesProps}
10
+ */
11
+ export interface AreaSeriesStyle {
12
+ /** Paint used for the area interior. */
13
+ readonly fill?: FillStyle;
14
+ /** Opacity of the painted area, from zero through one. */
15
+ readonly opacity?: number;
16
+ /** Cursor shown while the area target owns pointer presentation. */
17
+ readonly cursor?: string;
18
+ }
19
+ /**
20
+ * Authored inputs for {@link AreaSeries}.
21
+ *
22
+ * The data, coordinate accessors, scales, and defined predicate use the same
23
+ * contract as {@link LineSeriesProps}. Each contiguous run of at least two
24
+ * valid observations is closed to `baseline` in data space.
25
+ *
26
+ * @see {@link LineSeriesProps}
27
+ * @see {@link AreaSeriesStyle}
28
+ */
29
+ export interface AreaSeriesProps<D> extends PibblEventHandlers, PibblEventParticipationOptions {
30
+ /** Application data supplied directly or through a signal. */
31
+ readonly data: LineSeriesProps<D>["data"];
32
+ /** Property key or callback extracting the horizontal coordinate. */
33
+ readonly x: LineAccessor<D>;
34
+ /** Property key or callback extracting the vertical coordinate. */
35
+ readonly y: LineAccessor<D>;
36
+ /** Continuous scale used to map horizontal data coordinates. */
37
+ readonly xScale: LineSeriesProps<D>["xScale"];
38
+ /** Continuous scale used to map vertical data coordinates and baseline. */
39
+ readonly yScale: LineSeriesProps<D>["yScale"];
40
+ /** Selects records that participate in an observed run. */
41
+ readonly defined?: LineSeriesProps<D>["defined"];
42
+ /** Curve used to connect successive observed samples. */
43
+ readonly curve?: LineSeriesProps<D>["curve"];
44
+ /** Finite data-space value to which each observed run closes. */
45
+ readonly baseline: SignalValue<number>;
46
+ /** Shared area presentation. Individual datum styling is not supported. */
47
+ readonly style?: SignalValue<SignalStyle<AreaSeriesStyle>>;
48
+ }
49
+ /**
50
+ * Draws each contiguous observed run as a filled polygon closed to an explicit baseline.
51
+ *
52
+ * Missing, non-finite, and excluded coordinates split runs. A lone observation has no area.
53
+ * The component owns one ordinary {@link Path} target, so event participation follows the
54
+ * standard Path defaults; callers may wrap it in `Clip` when clipping is needed.
55
+ *
56
+ * @param props - Data, coordinate accessors, continuous scales, baseline, and presentation.
57
+ * @returns A Pibbl path node containing all drawable area runs.
58
+ * @throws When `data` is not an array, the baseline is not finite, or presentation is invalid.
59
+ *
60
+ * @see {@link AreaSeriesProps}
61
+ */
62
+ export declare function AreaSeries<D>({ data: dataInput, x: xInput, y: yInput, xScale: xId, yScale: yId, baseline: baselineInput, defined, curve, style: styleInput, ...eventProps }: AreaSeriesProps<D>): import("../../../jsx-runtime.js").JSX.Element;
@@ -0,0 +1,120 @@
1
+ import { jsx } from "@pibbl/core/jsx-runtime";
2
+ import { useNumericPosition } from "./series-position.js";
3
+ import { Path, resolveSignalValue } from "@pibbl/core";
4
+ import {
5
+ useInternalValueMemoSlot,
6
+ validateTexturePaint
7
+ } from "@pibbl/core/internal";
8
+ import {
9
+ appendCurveForward,
10
+ curveGeometry,
11
+ resolveSeriesCurve
12
+ } from "./curve-definition.js";
13
+ import { opacity } from "./paint.js";
14
+ import { useContinuousScale } from "./use-continuous-scale.js";
15
+ function accessor(input) {
16
+ return typeof input === "function" ? input : (datum) => datum[input];
17
+ }
18
+ function fill(value) {
19
+ if (typeof value === "string" || value instanceof CanvasGradient || value instanceof CanvasPattern)
20
+ return value;
21
+ try {
22
+ validateTexturePaint(value);
23
+ return value;
24
+ } catch {
25
+ throw new TypeError("AreaSeries: invalid fill.");
26
+ }
27
+ }
28
+ function AreaSeries({
29
+ data: dataInput,
30
+ x: xInput,
31
+ y: yInput,
32
+ xScale: xId,
33
+ yScale: yId,
34
+ baseline: baselineInput,
35
+ defined,
36
+ curve,
37
+ style: styleInput,
38
+ ...eventProps
39
+ }) {
40
+ const xScale = useNumericPosition(xId);
41
+ const yScale = useContinuousScale(yId).get();
42
+ const curveDefinition = resolveSeriesCurve(curve);
43
+ const x = useInternalValueMemoSlot(
44
+ "vizAreaXAccessor",
45
+ () => accessor(xInput),
46
+ [xInput]
47
+ );
48
+ const y = useInternalValueMemoSlot(
49
+ "vizAreaYAccessor",
50
+ () => accessor(yInput),
51
+ [yInput]
52
+ );
53
+ const data = resolveSignalValue(dataInput);
54
+ if (!Array.isArray(data))
55
+ throw new TypeError(
56
+ "AreaSeries data must be an array or a signal containing an array."
57
+ );
58
+ const baseline = resolveSignalValue(baselineInput);
59
+ if (typeof baseline !== "number" || !Number.isFinite(baseline))
60
+ throw new RangeError("AreaSeries baseline must be finite.");
61
+ const baselineY = yScale.map(baseline);
62
+ if (!Number.isFinite(baselineY))
63
+ throw new RangeError(
64
+ "AreaSeries baseline must map to a finite coordinate."
65
+ );
66
+ const style = resolveSignalValue(styleInput) ?? {};
67
+ if (style === null || typeof style !== "object" || Array.isArray(style))
68
+ throw new TypeError("AreaSeries: style must be an object.");
69
+ const areaFill = fill(resolveSignalValue(style.fill) ?? "#2563eb");
70
+ const alpha = opacity(resolveSignalValue(style.opacity) ?? 0.2, "AreaSeries");
71
+ const cursor = resolveSignalValue(style.cursor);
72
+ if (cursor !== void 0 && typeof cursor !== "string")
73
+ throw new TypeError("AreaSeries: cursor must be a string.");
74
+ const path = new Path2D();
75
+ let run = [];
76
+ const closeRun = () => {
77
+ if (run.length >= 2) {
78
+ const first = run[0];
79
+ const last = run[run.length - 1];
80
+ const geometry = curveGeometry(curveDefinition, run);
81
+ path.moveTo(geometry.start[0], geometry.start[1]);
82
+ appendCurveForward(path, geometry);
83
+ path.lineTo(last[0], baselineY);
84
+ path.lineTo(first[0], baselineY);
85
+ path.closePath();
86
+ }
87
+ run = [];
88
+ };
89
+ for (let i = 0; i < data.length; i++) {
90
+ const datum = data[i];
91
+ if (defined && !defined(datum, i, data)) {
92
+ closeRun();
93
+ continue;
94
+ }
95
+ const xv = x(datum, i, data);
96
+ const yv = y(datum, i, data);
97
+ if (typeof xv !== "number" || typeof yv !== "number" || !Number.isFinite(xv) || !Number.isFinite(yv)) {
98
+ closeRun();
99
+ continue;
100
+ }
101
+ const point = [xScale.map(xv), yScale.map(yv)];
102
+ if (!Number.isFinite(point[0]) || !Number.isFinite(point[1])) {
103
+ closeRun();
104
+ continue;
105
+ }
106
+ run.push(point);
107
+ }
108
+ closeRun();
109
+ return /* @__PURE__ */ jsx(
110
+ Path,
111
+ {
112
+ ...eventProps,
113
+ style: { d: path, fill: areaFill, opacity: alpha, cursor }
114
+ }
115
+ );
116
+ }
117
+ export {
118
+ AreaSeries
119
+ };
120
+ //# sourceMappingURL=area-series.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/features/viz/lib/area-series.tsx"],
4
+ "sourcesContent": ["import { useNumericPosition } from \"./series-position.js\";\nimport { Path, resolveSignalValue } from \"@pibbl/core\";\nimport type {\n FillStyle,\n PibblEventHandlers,\n PibblEventParticipationOptions,\n SignalValue,\n} from \"@pibbl/core\";\nimport {\n useInternalValueMemoSlot,\n validateTexturePaint,\n} from \"@pibbl/core/internal\";\nimport type { SignalStyle } from \"@pibbl/core/internal\";\nimport type { LineAccessor, LineCoordinate, LineSeriesProps } from \"./types.js\";\nimport {\n appendCurveForward,\n curveGeometry,\n resolveSeriesCurve,\n} from \"./curve-definition.js\";\nimport { opacity } from \"./paint.js\";\nimport { useContinuousScale } from \"./use-continuous-scale.js\";\n\n/**\n * Presentation properties for an {@link AreaSeries}.\n *\n * @see {@link FillStyle}\n * @see {@link AreaSeriesProps}\n */\nexport interface AreaSeriesStyle {\n /** Paint used for the area interior. */\n readonly fill?: FillStyle;\n /** Opacity of the painted area, from zero through one. */\n readonly opacity?: number;\n /** Cursor shown while the area target owns pointer presentation. */\n readonly cursor?: string;\n}\n\n/**\n * Authored inputs for {@link AreaSeries}.\n *\n * The data, coordinate accessors, scales, and defined predicate use the same\n * contract as {@link LineSeriesProps}. Each contiguous run of at least two\n * valid observations is closed to `baseline` in data space.\n *\n * @see {@link LineSeriesProps}\n * @see {@link AreaSeriesStyle}\n */\nexport interface AreaSeriesProps<D>\n extends PibblEventHandlers, PibblEventParticipationOptions {\n /** Application data supplied directly or through a signal. */\n readonly data: LineSeriesProps<D>[\"data\"];\n /** Property key or callback extracting the horizontal coordinate. */\n readonly x: LineAccessor<D>;\n /** Property key or callback extracting the vertical coordinate. */\n readonly y: LineAccessor<D>;\n /** Continuous scale used to map horizontal data coordinates. */\n readonly xScale: LineSeriesProps<D>[\"xScale\"];\n /** Continuous scale used to map vertical data coordinates and baseline. */\n readonly yScale: LineSeriesProps<D>[\"yScale\"];\n /** Selects records that participate in an observed run. */\n readonly defined?: LineSeriesProps<D>[\"defined\"];\n /** Curve used to connect successive observed samples. */\n readonly curve?: LineSeriesProps<D>[\"curve\"];\n /** Finite data-space value to which each observed run closes. */\n readonly baseline: SignalValue<number>;\n /** Shared area presentation. Individual datum styling is not supported. */\n readonly style?: SignalValue<SignalStyle<AreaSeriesStyle>>;\n}\n\nfunction accessor<D>(\n input: LineAccessor<D>,\n): (datum: D, index: number, data: readonly D[]) => LineCoordinate {\n return typeof input === \"function\"\n ? input\n : (datum) => datum[input] as LineCoordinate;\n}\n\nfunction fill(value: unknown): FillStyle {\n if (\n typeof value === \"string\" ||\n value instanceof CanvasGradient ||\n value instanceof CanvasPattern\n )\n return value;\n try {\n validateTexturePaint(value as never);\n return value as FillStyle;\n } catch {\n throw new TypeError(\"AreaSeries: invalid fill.\");\n }\n}\n\n/**\n * Draws each contiguous observed run as a filled polygon closed to an explicit baseline.\n *\n * Missing, non-finite, and excluded coordinates split runs. A lone observation has no area.\n * The component owns one ordinary {@link Path} target, so event participation follows the\n * standard Path defaults; callers may wrap it in `Clip` when clipping is needed.\n *\n * @param props - Data, coordinate accessors, continuous scales, baseline, and presentation.\n * @returns A Pibbl path node containing all drawable area runs.\n * @throws When `data` is not an array, the baseline is not finite, or presentation is invalid.\n *\n * @see {@link AreaSeriesProps}\n */\nexport function AreaSeries<D>({\n data: dataInput,\n x: xInput,\n y: yInput,\n xScale: xId,\n yScale: yId,\n baseline: baselineInput,\n defined,\n curve,\n style: styleInput,\n ...eventProps\n}: AreaSeriesProps<D>) {\n const xScale = useNumericPosition(xId);\n const yScale = useContinuousScale(yId).get();\n const curveDefinition = resolveSeriesCurve(curve);\n const x = useInternalValueMemoSlot(\n \"vizAreaXAccessor\",\n () => accessor(xInput),\n [xInput],\n );\n const y = useInternalValueMemoSlot(\n \"vizAreaYAccessor\",\n () => accessor(yInput),\n [yInput],\n );\n const data = resolveSignalValue(dataInput);\n if (!Array.isArray(data))\n throw new TypeError(\n \"AreaSeries data must be an array or a signal containing an array.\",\n );\n const baseline = resolveSignalValue(baselineInput);\n if (typeof baseline !== \"number\" || !Number.isFinite(baseline))\n throw new RangeError(\"AreaSeries baseline must be finite.\");\n const baselineY = yScale.map(baseline);\n if (!Number.isFinite(baselineY))\n throw new RangeError(\n \"AreaSeries baseline must map to a finite coordinate.\",\n );\n const style = resolveSignalValue(styleInput) ?? {};\n if (style === null || typeof style !== \"object\" || Array.isArray(style))\n throw new TypeError(\"AreaSeries: style must be an object.\");\n const areaFill = fill(resolveSignalValue(style.fill) ?? \"#2563eb\");\n const alpha = opacity(resolveSignalValue(style.opacity) ?? 0.2, \"AreaSeries\");\n const cursor = resolveSignalValue(style.cursor);\n if (cursor !== undefined && typeof cursor !== \"string\")\n throw new TypeError(\"AreaSeries: cursor must be a string.\");\n\n const path = new Path2D();\n let run: (readonly [number, number])[] = [];\n const closeRun = () => {\n if (run.length >= 2) {\n const first = run[0];\n const last = run[run.length - 1];\n const geometry = curveGeometry(curveDefinition, run);\n path.moveTo(geometry.start[0], geometry.start[1]);\n appendCurveForward(path, geometry);\n path.lineTo(last[0], baselineY);\n path.lineTo(first[0], baselineY);\n path.closePath();\n }\n run = [];\n };\n for (let i = 0; i < data.length; i++) {\n const datum = data[i];\n if (defined && !defined(datum, i, data)) {\n closeRun();\n continue;\n }\n const xv = x(datum, i, data);\n const yv = y(datum, i, data);\n if (\n typeof xv !== \"number\" ||\n typeof yv !== \"number\" ||\n !Number.isFinite(xv) ||\n !Number.isFinite(yv)\n ) {\n closeRun();\n continue;\n }\n const point = [xScale.map(xv), yScale.map(yv)] as const;\n if (!Number.isFinite(point[0]) || !Number.isFinite(point[1])) {\n closeRun();\n continue;\n }\n run.push(point);\n }\n closeRun();\n return (\n <Path\n {...eventProps}\n style={{ d: path, fill: areaFill, opacity: alpha, cursor }}\n />\n );\n}\n"],
5
+ "mappings": "AAiMI;AAjMJ,SAAS,0BAA0B;AACnC,SAAS,MAAM,0BAA0B;AAOzC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe;AACxB,SAAS,0BAA0B;AAiDnC,SAAS,SACP,OACiE;AACjE,SAAO,OAAO,UAAU,aACpB,QACA,CAAC,UAAU,MAAM,KAAK;AAC5B;AAEA,SAAS,KAAK,OAA2B;AACvC,MACE,OAAO,UAAU,YACjB,iBAAiB,kBACjB,iBAAiB;AAEjB,WAAO;AACT,MAAI;AACF,yBAAqB,KAAc;AACnC,WAAO;AAAA,EACT,QAAQ;AACN,UAAM,IAAI,UAAU,2BAA2B;AAAA,EACjD;AACF;AAeO,SAAS,WAAc;AAAA,EAC5B,MAAM;AAAA,EACN,GAAG;AAAA,EACH,GAAG;AAAA,EACH,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAAuB;AACrB,QAAM,SAAS,mBAAmB,GAAG;AACrC,QAAM,SAAS,mBAAmB,GAAG,EAAE,IAAI;AAC3C,QAAM,kBAAkB,mBAAmB,KAAK;AAChD,QAAM,IAAI;AAAA,IACR;AAAA,IACA,MAAM,SAAS,MAAM;AAAA,IACrB,CAAC,MAAM;AAAA,EACT;AACA,QAAM,IAAI;AAAA,IACR;AAAA,IACA,MAAM,SAAS,MAAM;AAAA,IACrB,CAAC,MAAM;AAAA,EACT;AACA,QAAM,OAAO,mBAAmB,SAAS;AACzC,MAAI,CAAC,MAAM,QAAQ,IAAI;AACrB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,QAAM,WAAW,mBAAmB,aAAa;AACjD,MAAI,OAAO,aAAa,YAAY,CAAC,OAAO,SAAS,QAAQ;AAC3D,UAAM,IAAI,WAAW,qCAAqC;AAC5D,QAAM,YAAY,OAAO,IAAI,QAAQ;AACrC,MAAI,CAAC,OAAO,SAAS,SAAS;AAC5B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,QAAM,QAAQ,mBAAmB,UAAU,KAAK,CAAC;AACjD,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AACpE,UAAM,IAAI,UAAU,sCAAsC;AAC5D,QAAM,WAAW,KAAK,mBAAmB,MAAM,IAAI,KAAK,SAAS;AACjE,QAAM,QAAQ,QAAQ,mBAAmB,MAAM,OAAO,KAAK,KAAK,YAAY;AAC5E,QAAM,SAAS,mBAAmB,MAAM,MAAM;AAC9C,MAAI,WAAW,UAAa,OAAO,WAAW;AAC5C,UAAM,IAAI,UAAU,sCAAsC;AAE5D,QAAM,OAAO,IAAI,OAAO;AACxB,MAAI,MAAqC,CAAC;AAC1C,QAAM,WAAW,MAAM;AACrB,QAAI,IAAI,UAAU,GAAG;AACnB,YAAM,QAAQ,IAAI,CAAC;AACnB,YAAM,OAAO,IAAI,IAAI,SAAS,CAAC;AAC/B,YAAM,WAAW,cAAc,iBAAiB,GAAG;AACnD,WAAK,OAAO,SAAS,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC;AAChD,yBAAmB,MAAM,QAAQ;AACjC,WAAK,OAAO,KAAK,CAAC,GAAG,SAAS;AAC9B,WAAK,OAAO,MAAM,CAAC,GAAG,SAAS;AAC/B,WAAK,UAAU;AAAA,IACjB;AACA,UAAM,CAAC;AAAA,EACT;AACA,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,QAAQ,KAAK,CAAC;AACpB,QAAI,WAAW,CAAC,QAAQ,OAAO,GAAG,IAAI,GAAG;AACvC,eAAS;AACT;AAAA,IACF;AACA,UAAM,KAAK,EAAE,OAAO,GAAG,IAAI;AAC3B,UAAM,KAAK,EAAE,OAAO,GAAG,IAAI;AAC3B,QACE,OAAO,OAAO,YACd,OAAO,OAAO,YACd,CAAC,OAAO,SAAS,EAAE,KACnB,CAAC,OAAO,SAAS,EAAE,GACnB;AACA,eAAS;AACT;AAAA,IACF;AACA,UAAM,QAAQ,CAAC,OAAO,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;AAC7C,QAAI,CAAC,OAAO,SAAS,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,MAAM,CAAC,CAAC,GAAG;AAC5D,eAAS;AACT;AAAA,IACF;AACA,QAAI,KAAK,KAAK;AAAA,EAChB;AACA,WAAS;AACT,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO,EAAE,GAAG,MAAM,MAAM,UAAU,SAAS,OAAO,OAAO;AAAA;AAAA,EAC3D;AAEJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ /** Fit text without changing its coordinate or the owning scale. */
2
+ export declare function fitAxisLabel(context: Pick<CanvasRenderingContext2D, "measureText">, text: string, maxWidth: number, overflow: "allow" | "wrap" | "truncate", maxLines: number): readonly string[];
@@ -0,0 +1,41 @@
1
+ function fitAxisLabel(context, text, maxWidth, overflow, maxLines) {
2
+ if (overflow === "allow") return [text];
3
+ const graphemes = (value) => Array.from(new Intl.Segmenter(void 0, { granularity: "grapheme" }).segment(value), (part) => part.segment);
4
+ const truncate = (value, force = false) => {
5
+ if (!force && context.measureText(value).width <= maxWidth) return value;
6
+ if (context.measureText("\u2026").width > maxWidth) return "";
7
+ const parts = graphemes(value);
8
+ while (parts.length && context.measureText(parts.join("").trimEnd() + "\u2026").width > maxWidth) parts.pop();
9
+ return parts.join("").trimEnd() + "\u2026";
10
+ };
11
+ if (overflow === "truncate") return [truncate(text)];
12
+ const words = text.trim().split(/\s+/u);
13
+ const lines = [];
14
+ let line = "";
15
+ for (const word of words) {
16
+ const joined = line ? `${line} ${word}` : word;
17
+ if (context.measureText(joined).width <= maxWidth) {
18
+ line = joined;
19
+ continue;
20
+ }
21
+ if (line) {
22
+ lines.push(line);
23
+ line = "";
24
+ }
25
+ for (const part of graphemes(word)) {
26
+ if (line && context.measureText(line + part).width > maxWidth) {
27
+ lines.push(line);
28
+ line = "";
29
+ }
30
+ line += part;
31
+ }
32
+ }
33
+ if (line || !lines.length) lines.push(line);
34
+ const fitted = lines.slice(0, maxLines).map((value) => truncate(value));
35
+ if (lines.length > maxLines) fitted[maxLines - 1] = truncate(fitted[maxLines - 1], true);
36
+ return fitted;
37
+ }
38
+ export {
39
+ fitAxisLabel
40
+ };
41
+ //# sourceMappingURL=axis-labels.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/features/viz/lib/axis-labels.ts"],
4
+ "sourcesContent": ["/** Fit text without changing its coordinate or the owning scale. */\nexport function fitAxisLabel(context: Pick<CanvasRenderingContext2D, \"measureText\">, text: string, maxWidth: number, overflow: \"allow\" | \"wrap\" | \"truncate\", maxLines: number): readonly string[] {\n if (overflow === \"allow\") return [text];\n const graphemes = (value: string) => Array.from(new Intl.Segmenter(undefined, { granularity: \"grapheme\" }).segment(value), part => part.segment);\n const truncate = (value: string, force = false) => {\n if (!force && context.measureText(value).width <= maxWidth) return value;\n if (context.measureText(\"\u2026\").width > maxWidth) return \"\";\n const parts = graphemes(value);\n while (parts.length && context.measureText(parts.join(\"\").trimEnd() + \"\u2026\").width > maxWidth) parts.pop();\n return parts.join(\"\").trimEnd() + \"\u2026\";\n };\n if (overflow === \"truncate\") return [truncate(text)];\n const words = text.trim().split(/\\s+/u);\n const lines: string[] = [];\n let line = \"\";\n for (const word of words) {\n const joined = line ? `${line} ${word}` : word;\n if (context.measureText(joined).width <= maxWidth) { line = joined; continue; }\n if (line) { lines.push(line); line = \"\"; }\n for (const part of graphemes(word)) {\n if (line && context.measureText(line + part).width > maxWidth) { lines.push(line); line = \"\"; }\n line += part;\n }\n }\n if (line || !lines.length) lines.push(line);\n const fitted = lines.slice(0, maxLines).map(value => truncate(value));\n if (lines.length > maxLines) fitted[maxLines - 1] = truncate(fitted[maxLines - 1], true);\n return fitted;\n}\n"],
5
+ "mappings": "AACO,SAAS,aAAa,SAAwD,MAAc,UAAkB,UAAyC,UAAqC;AACjM,MAAI,aAAa,QAAS,QAAO,CAAC,IAAI;AACtC,QAAM,YAAY,CAAC,UAAkB,MAAM,KAAK,IAAI,KAAK,UAAU,QAAW,EAAE,aAAa,WAAW,CAAC,EAAE,QAAQ,KAAK,GAAG,UAAQ,KAAK,OAAO;AAC/I,QAAM,WAAW,CAAC,OAAe,QAAQ,UAAU;AACjD,QAAI,CAAC,SAAS,QAAQ,YAAY,KAAK,EAAE,SAAS,SAAU,QAAO;AACnE,QAAI,QAAQ,YAAY,QAAG,EAAE,QAAQ,SAAU,QAAO;AACtD,UAAM,QAAQ,UAAU,KAAK;AAC7B,WAAO,MAAM,UAAU,QAAQ,YAAY,MAAM,KAAK,EAAE,EAAE,QAAQ,IAAI,QAAG,EAAE,QAAQ,SAAU,OAAM,IAAI;AACvG,WAAO,MAAM,KAAK,EAAE,EAAE,QAAQ,IAAI;AAAA,EACpC;AACA,MAAI,aAAa,WAAY,QAAO,CAAC,SAAS,IAAI,CAAC;AACnD,QAAM,QAAQ,KAAK,KAAK,EAAE,MAAM,MAAM;AACtC,QAAM,QAAkB,CAAC;AACzB,MAAI,OAAO;AACX,aAAW,QAAQ,OAAO;AACxB,UAAM,SAAS,OAAO,GAAG,IAAI,IAAI,IAAI,KAAK;AAC1C,QAAI,QAAQ,YAAY,MAAM,EAAE,SAAS,UAAU;AAAE,aAAO;AAAQ;AAAA,IAAU;AAC9E,QAAI,MAAM;AAAE,YAAM,KAAK,IAAI;AAAG,aAAO;AAAA,IAAI;AACzC,eAAW,QAAQ,UAAU,IAAI,GAAG;AAClC,UAAI,QAAQ,QAAQ,YAAY,OAAO,IAAI,EAAE,QAAQ,UAAU;AAAE,cAAM,KAAK,IAAI;AAAG,eAAO;AAAA,MAAI;AAC9F,cAAQ;AAAA,IACV;AAAA,EACF;AACA,MAAI,QAAQ,CAAC,MAAM,OAAQ,OAAM,KAAK,IAAI;AAC1C,QAAM,SAAS,MAAM,MAAM,GAAG,QAAQ,EAAE,IAAI,WAAS,SAAS,KAAK,CAAC;AACpE,MAAI,MAAM,SAAS,SAAU,QAAO,WAAW,CAAC,IAAI,SAAS,OAAO,WAAW,CAAC,GAAG,IAAI;AACvF,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,23 @@
1
+ import { type SignalValue } from "@pibbl/core";
2
+ import type { SignalStyle } from "@pibbl/core/internal";
3
+ import type { AxisProps, AxisStyle, ScaleId } from "./types.js";
4
+ /** Scale-aligned axis text; callers reserve the margin outside the plot. See {@link AxisTitle}. */
5
+ export interface AxisTitleProps {
6
+ /** Ancestor scale whose range supplies the title midpoint. */
7
+ readonly scale: ScaleId;
8
+ /** Plot edge; left/right titles rotate along the axis. */
9
+ readonly position: AxisProps["position"];
10
+ /** Single-line title. */
11
+ readonly label: SignalValue<string>;
12
+ /** Optional unit appended in parentheses; empty string omits it. */
13
+ readonly unit?: SignalValue<string>;
14
+ /** Nonnegative finite distance outside the plot edge, default 40 pixels. */
15
+ readonly offset?: SignalValue<number>;
16
+ /** Font defaults to 12px sans-serif, fill to #617783, opacity to 1. */
17
+ readonly style?: SignalValue<SignalStyle<Pick<AxisStyle, "font" | "fill" | "opacity">>>;
18
+ }
19
+ /** Paint an axis title with optional units, without allocating margins or changing ticks.
20
+ * @param props - Scale geometry and presentation. See {@link AxisTitleProps}.
21
+ * @returns Decorative chart content in the caller's coordinate space.
22
+ */
23
+ export declare function AxisTitle(props: AxisTitleProps): import("../../../jsx-runtime.js").JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { jsx } from "@pibbl/core/jsx-runtime";
2
+ import { Group, Text, resolveSignalValue } from "@pibbl/core";
3
+ import { lookupScale } from "./scale-context.js";
4
+ import { opacity } from "./paint.js";
5
+ function AxisTitle(props) {
6
+ if (!["top", "bottom", "left", "right"].includes(props.position)) throw new TypeError("AxisTitle position must be top, bottom, left, or right.");
7
+ const source = lookupScale(props.scale, "AxisTitle");
8
+ if (!source) throw new TypeError("AxisTitle requires a scale ID.");
9
+ const scale = source.get(), label = resolveSignalValue(props.label), unit = resolveSignalValue(props.unit) ?? "";
10
+ if (typeof label !== "string" || /[\r\n]/.test(label) || typeof unit !== "string" || /[\r\n]/.test(unit))
11
+ throw new TypeError("AxisTitle label and unit must be single-line strings.");
12
+ const offset = resolveSignalValue(props.offset) ?? 40;
13
+ if (typeof offset !== "number" || !Number.isFinite(offset) || offset < 0) throw new RangeError("AxisTitle offset must be finite and nonnegative.");
14
+ const horizontal = props.position === "top" || props.position === "bottom";
15
+ const midpoint = scale.range[0] / 2 + scale.range[1] / 2;
16
+ const x = horizontal ? midpoint : props.position === "left" ? -offset : scale.frame.width + offset;
17
+ const y = horizontal ? props.position === "top" ? -offset : scale.frame.height + offset : midpoint;
18
+ const style = resolveSignalValue(props.style) ?? {};
19
+ return /* @__PURE__ */ jsx(Group, { style: { translateX: x, translateY: y }, children: /* @__PURE__ */ jsx(Group, { style: { rotationDegrees: horizontal ? 0 : props.position === "left" ? -90 : 90 }, children: /* @__PURE__ */ jsx(Text, { pointerEvents: "none", style: { textAlign: "center", textBaseline: "middle", font: resolveSignalValue(style.font) ?? "12px sans-serif", fill: resolveSignalValue(style.fill) ?? "#617783", opacity: opacity(resolveSignalValue(style.opacity) ?? 1, "AxisTitle") }, children: unit ? `${label} (${unit})` : label }) }) });
20
+ }
21
+ export {
22
+ AxisTitle
23
+ };
24
+ //# sourceMappingURL=axis-title.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/features/viz/lib/axis-title.tsx"],
4
+ "sourcesContent": ["import { Group, Text, resolveSignalValue, type SignalValue } from \"@pibbl/core\";\nimport type { SignalStyle } from \"@pibbl/core/internal\";\nimport type { AxisProps, AxisStyle, ScaleId } from \"./types.js\";\nimport { lookupScale } from \"./scale-context.js\";\nimport { opacity } from \"./paint.js\";\n/** Scale-aligned axis text; callers reserve the margin outside the plot. See {@link AxisTitle}. */\nexport interface AxisTitleProps {\n /** Ancestor scale whose range supplies the title midpoint. */\n readonly scale: ScaleId;\n /** Plot edge; left/right titles rotate along the axis. */\n readonly position: AxisProps[\"position\"];\n /** Single-line title. */\n readonly label: SignalValue<string>;\n /** Optional unit appended in parentheses; empty string omits it. */\n readonly unit?: SignalValue<string>;\n /** Nonnegative finite distance outside the plot edge, default 40 pixels. */\n readonly offset?: SignalValue<number>;\n /** Font defaults to 12px sans-serif, fill to #617783, opacity to 1. */\n readonly style?: SignalValue<SignalStyle<Pick<AxisStyle, \"font\" | \"fill\" | \"opacity\">>>;\n}\n/** Paint an axis title with optional units, without allocating margins or changing ticks.\n * @param props - Scale geometry and presentation. See {@link AxisTitleProps}.\n * @returns Decorative chart content in the caller's coordinate space.\n */\nexport function AxisTitle(props: AxisTitleProps) {\n if (![\"top\", \"bottom\", \"left\", \"right\"].includes(props.position)) throw new TypeError(\"AxisTitle position must be top, bottom, left, or right.\");\n const source = lookupScale(props.scale, \"AxisTitle\");\n if (!source) throw new TypeError(\"AxisTitle requires a scale ID.\");\n const scale = source.get(), label = resolveSignalValue(props.label), unit = resolveSignalValue(props.unit) ?? \"\";\n if (\n typeof label !== \"string\" ||\n /[\\r\\n]/.test(label) ||\n typeof unit !== \"string\" ||\n /[\\r\\n]/.test(unit)\n )\n throw new TypeError(\"AxisTitle label and unit must be single-line strings.\");\n const offset = resolveSignalValue(props.offset) ?? 40;\n if (typeof offset !== \"number\" || !Number.isFinite(offset) || offset < 0) throw new RangeError(\"AxisTitle offset must be finite and nonnegative.\");\n const horizontal = props.position === \"top\" || props.position === \"bottom\";\n const midpoint = scale.range[0] / 2 + scale.range[1] / 2;\n const x = horizontal ? midpoint : props.position === \"left\" ? -offset : scale.frame.width + offset;\n const y = horizontal ? props.position === \"top\" ? -offset : scale.frame.height + offset : midpoint;\n const style = resolveSignalValue(props.style) ?? {};\n return (\n <Group style={{ translateX: x, translateY: y }}>\n <Group style={{ rotationDegrees: horizontal ? 0 : props.position === \"left\" ? -90 : 90 }}>\n <Text pointerEvents=\"none\" style={{ textAlign: \"center\", textBaseline: \"middle\", font: resolveSignalValue(style.font) ?? \"12px sans-serif\", fill: resolveSignalValue(style.fill) ?? \"#617783\", opacity: opacity(resolveSignalValue(style.opacity) ?? 1, \"AxisTitle\") }}>\n {unit ? `${label} (${unit})` : label}\n </Text>\n </Group>\n </Group>\n );\n}\n"],
5
+ "mappings": "AA8CQ;AA9CR,SAAS,OAAO,MAAM,0BAA4C;AAGlE,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AAoBjB,SAAS,UAAU,OAAuB;AAC/C,MAAI,CAAC,CAAC,OAAO,UAAU,QAAQ,OAAO,EAAE,SAAS,MAAM,QAAQ,EAAG,OAAM,IAAI,UAAU,yDAAyD;AAC/I,QAAM,SAAS,YAAY,MAAM,OAAO,WAAW;AACnD,MAAI,CAAC,OAAQ,OAAM,IAAI,UAAU,gCAAgC;AACjE,QAAM,QAAQ,OAAO,IAAI,GAAG,QAAQ,mBAAmB,MAAM,KAAK,GAAG,OAAO,mBAAmB,MAAM,IAAI,KAAK;AAC9G,MACE,OAAO,UAAU,YACjB,SAAS,KAAK,KAAK,KACnB,OAAO,SAAS,YAChB,SAAS,KAAK,IAAI;AAElB,UAAM,IAAI,UAAU,uDAAuD;AAC7E,QAAM,SAAS,mBAAmB,MAAM,MAAM,KAAK;AACnD,MAAI,OAAO,WAAW,YAAY,CAAC,OAAO,SAAS,MAAM,KAAK,SAAS,EAAG,OAAM,IAAI,WAAW,kDAAkD;AACjJ,QAAM,aAAa,MAAM,aAAa,SAAS,MAAM,aAAa;AAClE,QAAM,WAAW,MAAM,MAAM,CAAC,IAAI,IAAI,MAAM,MAAM,CAAC,IAAI;AACvD,QAAM,IAAI,aAAa,WAAW,MAAM,aAAa,SAAS,CAAC,SAAS,MAAM,MAAM,QAAQ;AAC5F,QAAM,IAAI,aAAa,MAAM,aAAa,QAAQ,CAAC,SAAS,MAAM,MAAM,SAAS,SAAS;AAC1F,QAAM,QAAQ,mBAAmB,MAAM,KAAK,KAAK,CAAC;AAClD,SACE,oBAAC,SAAM,OAAO,EAAE,YAAY,GAAG,YAAY,EAAE,GAC3C,8BAAC,SAAM,OAAO,EAAE,iBAAiB,aAAa,IAAI,MAAM,aAAa,SAAS,MAAM,GAAG,GACrF,8BAAC,QAAK,eAAc,QAAO,OAAO,EAAE,WAAW,UAAU,cAAc,UAAU,MAAM,mBAAmB,MAAM,IAAI,KAAK,mBAAmB,MAAM,mBAAmB,MAAM,IAAI,KAAK,WAAW,SAAS,QAAQ,mBAAmB,MAAM,OAAO,KAAK,GAAG,WAAW,EAAE,GAClQ,iBAAO,GAAG,KAAK,KAAK,IAAI,MAAM,OACjC,GACF,GACF;AAEJ;",
6
+ "names": []
7
+ }
@@ -7,4 +7,4 @@ import type { AxisProps } from "./types.js";
7
7
  *
8
8
  * @see {@link AxisProps}
9
9
  */
10
- export declare function Axis(props: AxisProps): (import("../../../jsx-runtime.js").JSX.Element[] | import("../../../jsx-runtime.js").JSX.Element)[];
10
+ export declare function Axis(props: AxisProps): ((import("../../../jsx-runtime.js").JSX.Element[] | null)[] | import("../../../jsx-runtime.js").JSX.Element)[];
@@ -1,49 +1,9 @@
1
1
  import { jsx } from "@pibbl/core/jsx-runtime";
2
- import { Path, Text, resolveSignalValue } from "@pibbl/core";
2
+ import { Path, Text, resolveSignalValue, useCanvasContext } from "@pibbl/core";
3
3
  import { lookupScale } from "./scale-context.js";
4
4
  import { width, opacity } from "./paint.js";
5
- function ticks(scale, props) {
6
- if (props.tickValues !== void 0 && props.tickCount !== void 0)
7
- throw new TypeError("Axis tickValues and tickCount are mutually exclusive.");
8
- const explicit = props.tickValues === void 0 ? void 0 : resolveSignalValue(props.tickValues);
9
- if (explicit !== void 0) {
10
- if (!Array.isArray(explicit) || explicit.length > 100)
11
- throw new RangeError("Axis tickValues must be an array with at most 100 values.");
12
- const seen = /* @__PURE__ */ new Set();
13
- for (const value of explicit) {
14
- if (seen.has(value)) throw new RangeError("Axis tickValues must not contain duplicates.");
15
- seen.add(value);
16
- if (scale.type === "linear") {
17
- if (typeof value !== "number" || !Number.isFinite(value))
18
- throw new TypeError("Axis tickValues for a linear scale must be finite numbers.");
19
- const [a, b] = scale.domain;
20
- if (value < Math.min(a, b) || value > Math.max(a, b))
21
- throw new RangeError("Axis tickValues must be within the scale domain.");
22
- } else if (typeof value !== "string" && (typeof value !== "number" || !Number.isFinite(value)) || scale.map(value) === void 0) {
23
- throw new RangeError("Axis tickValues must be known band categories.");
24
- }
25
- }
26
- return explicit;
27
- }
28
- const count = resolveSignalValue(props.tickCount ?? 5);
29
- if (!Number.isInteger(count) || count < 0 || count > 100)
30
- throw new RangeError("Axis tickCount must be an integer from 0 to 100.");
31
- if (count === 0) return [];
32
- if (scale.type === "linear")
33
- return count === 1 ? [scale.domain[0]] : scale.ticks(count);
34
- const n = scale.domain.length;
35
- if (n === 0) return [];
36
- if (count === 1) return [scale.domain[0]];
37
- const m = Math.min(count, n);
38
- if (m === 1) return [scale.domain[0]];
39
- return Array.from(
40
- { length: m },
41
- (_, index) => scale.domain[Math.round(index * (n - 1) / (m - 1))]
42
- );
43
- }
44
- function position(scale, value) {
45
- return scale.type === "band" ? scale.map(value) + scale.bandwidth / 2 : scale.map(value);
46
- }
5
+ import { fitAxisLabel } from "./axis-labels.js";
6
+ import { ticks, position } from "./scale-ticks.js";
47
7
  function Axis(props) {
48
8
  if (props.position !== "bottom" && props.position !== "left" && props.position !== "top" && props.position !== "right")
49
9
  throw new TypeError("Axis position must be bottom, left, top, or right.");
@@ -60,6 +20,48 @@ function Axis(props) {
60
20
  const outward = props.position === "bottom" || props.position === "right" ? 1 : -1;
61
21
  const baseline = horizontal ? props.position === "bottom" ? scale.frame.height : 0 : props.position === "right" ? scale.frame.width : 0;
62
22
  const selected = ticks(scale, props);
23
+ const context = useCanvasContext();
24
+ const overlap = resolveSignalValue(props.labelOverlap ?? "allow");
25
+ const gap = resolveSignalValue(props.labelGap ?? 8);
26
+ if (overlap !== "allow" && overlap !== "skip") throw new TypeError("Axis labelOverlap must be allow or skip.");
27
+ if (!Number.isFinite(gap) || gap < 0) throw new RangeError("Axis labelGap must be finite and nonnegative.");
28
+ const overflow = resolveSignalValue(props.labelOverflow ?? "allow");
29
+ const maxWidth = props.labelMaxWidth === void 0 ? void 0 : resolveSignalValue(props.labelMaxWidth);
30
+ const maxLines = resolveSignalValue(props.labelMaxLines ?? 2);
31
+ const lineHeightInput = props.labelLineHeight === void 0 ? void 0 : resolveSignalValue(props.labelLineHeight);
32
+ if (!["allow", "wrap", "truncate"].includes(overflow)) throw new TypeError("Axis labelOverflow must be allow, wrap, or truncate.");
33
+ if (overflow !== "allow" && maxWidth === void 0 || maxWidth !== void 0 && (!Number.isFinite(maxWidth) || maxWidth <= 0)) throw new RangeError("Axis labelMaxWidth must be positive and finite for wrap/truncate.");
34
+ if (!Number.isInteger(maxLines) || maxLines < 1 || maxLines > 20) throw new RangeError("Axis labelMaxLines must be an integer from 1 to 20.");
35
+ if (lineHeightInput !== void 0 && (!Number.isFinite(lineHeightInput) || lineHeightInput <= 0)) throw new RangeError("Axis labelLineHeight must be positive and finite.");
36
+ let lineHeight = 0;
37
+ const lines = [];
38
+ const occupied = [];
39
+ const visible = /* @__PURE__ */ new Set();
40
+ const texts = selected.map((value, index) => {
41
+ const label = props.tickFormat ? props.tickFormat(value, index) : scale.type === "utc" || scale.type === "trading-time" ? scale.formatTick(value) : typeof value === "number" ? String(Number(value.toPrecision(6))) : value;
42
+ if (typeof label !== "string") throw new TypeError("Axis tickFormat must return a string.");
43
+ return label;
44
+ });
45
+ const order = selected.map((value, index) => ({ index, p: position(scale, value) })).sort((a, b) => a.p - b.p);
46
+ const priority = order.length > 1 ? [order[0], order[order.length - 1], ...order.slice(1, -1)] : order;
47
+ context.save();
48
+ try {
49
+ context.font = font;
50
+ const fontMetrics = context.measureText("Mg");
51
+ lineHeight = lineHeightInput ?? Math.ceil(fontMetrics.actualBoundingBoxAscent + fontMetrics.actualBoundingBoxDescent + 4);
52
+ for (const text of texts) lines.push(fitAxisLabel(context, text, maxWidth ?? Infinity, overflow, maxLines));
53
+ for (const { index, p } of priority) {
54
+ const metrics = lines[index].map((text) => context.measureText(text));
55
+ const size = horizontal ? Math.max(...metrics.map((m) => m.width)) : (lines[index].length - 1) * lineHeight + Math.max(...metrics.map((m) => m.actualBoundingBoxAscent + m.actualBoundingBoxDescent));
56
+ const interval = { start: p - size / 2, end: p + size / 2 };
57
+ if (overlap === "allow" || occupied.every((other) => interval.end + gap <= other.start || interval.start >= other.end + gap)) {
58
+ visible.add(index);
59
+ occupied.push(interval);
60
+ }
61
+ }
62
+ } finally {
63
+ context.restore();
64
+ }
63
65
  const path = new Path2D();
64
66
  if (horizontal) {
65
67
  path.moveTo(scale.range[0], baseline);
@@ -77,16 +79,14 @@ function Axis(props) {
77
79
  path.moveTo(baseline, p);
78
80
  path.lineTo(baseline + outward * 6, p);
79
81
  }
80
- const label = props.tickFormat ? props.tickFormat(value, index) : typeof value === "number" ? String(Number(value.toPrecision(6))) : value;
81
- if (typeof label !== "string")
82
- throw new TypeError("Axis tickFormat must return a string.");
83
- return /* @__PURE__ */ jsx(
82
+ if (!visible.has(index)) return null;
83
+ return lines[index].map((label, lineIndex) => /* @__PURE__ */ jsx(
84
84
  Text,
85
85
  {
86
86
  pointerEvents: "none",
87
87
  style: {
88
88
  left: horizontal ? p : baseline + outward * 10,
89
- top: horizontal ? baseline + outward * 10 : p,
89
+ top: horizontal ? baseline + outward * 10 + (outward > 0 ? lineIndex : lineIndex - lines[index].length + 1) * lineHeight : p + (lineIndex - (lines[index].length - 1) / 2) * lineHeight,
90
90
  fill,
91
91
  font,
92
92
  opacity: alpha,
@@ -95,8 +95,8 @@ function Axis(props) {
95
95
  },
96
96
  children: label
97
97
  },
98
- index
99
- );
98
+ `${index}:${lineIndex}`
99
+ ));
100
100
  });
101
101
  return [
102
102
  /* @__PURE__ */ jsx(