@pibbl/core 0.0.2 → 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 (549) hide show
  1. package/THIRD_PARTY_NOTICES.txt +81 -0
  2. package/dist/features/physics/2d-testing.d.ts +1 -1
  3. package/dist/features/physics/2d-testing.js +2 -2
  4. package/dist/features/physics/2d-testing.js.map +2 -2
  5. package/dist/features/physics/lib/2d/canvas/components.js +25 -21
  6. package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
  7. package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
  8. package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
  9. package/dist/features/physics/lib/2d/collision/casts.js +4 -2
  10. package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
  11. package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
  12. package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
  13. package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
  14. package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
  15. package/dist/features/physics/lib/2d/shapes.js +8 -9
  16. package/dist/features/physics/lib/2d/shapes.js.map +2 -2
  17. package/dist/features/physics/lib/2d/world/rapier.js +22 -26
  18. package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
  19. package/dist/features/sprites/loader.js +6 -3
  20. package/dist/features/sprites/loader.js.map +2 -2
  21. package/dist/features/textures/index.d.ts +12 -2
  22. package/dist/features/textures/index.js +33 -1
  23. package/dist/features/textures/index.js.map +2 -2
  24. package/dist/features/textures/lib/chemical-field.d.ts +56 -0
  25. package/dist/features/textures/lib/chemical-field.js +154 -0
  26. package/dist/features/textures/lib/chemical-field.js.map +7 -0
  27. package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
  28. package/dist/features/textures/lib/chemical-recipes.js +275 -0
  29. package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
  30. package/dist/features/textures/lib/definitions.d.ts +3 -18
  31. package/dist/features/textures/lib/definitions.js +17 -24
  32. package/dist/features/textures/lib/definitions.js.map +2 -2
  33. package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
  34. package/dist/features/textures/lib/geometric-patterns.js +305 -0
  35. package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
  36. package/dist/features/textures/lib/gray-scott.d.ts +55 -0
  37. package/dist/features/textures/lib/gray-scott.js +37 -0
  38. package/dist/features/textures/lib/gray-scott.js.map +7 -0
  39. package/dist/features/textures/lib/palette.js +1 -3
  40. package/dist/features/textures/lib/palette.js.map +2 -2
  41. package/dist/features/textures/lib/patterns.d.ts +123 -0
  42. package/dist/features/textures/lib/patterns.js +344 -0
  43. package/dist/features/textures/lib/patterns.js.map +7 -0
  44. package/dist/features/textures/lib/rain-drops.js +2 -1
  45. package/dist/features/textures/lib/rain-drops.js.map +2 -2
  46. package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
  47. package/dist/features/textures/lib/reaction-diffusion.js +9 -20
  48. package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
  49. package/dist/features/textures/lib/simulation.d.ts +10 -4
  50. package/dist/features/textures/lib/simulation.js +23 -13
  51. package/dist/features/textures/lib/simulation.js.map +2 -2
  52. package/dist/features/textures/lib/wasm/electric.js +8 -1
  53. package/dist/features/textures/lib/wasm/electric.js.map +2 -2
  54. package/dist/features/textures/lib/water-surface.js +1 -3
  55. package/dist/features/textures/lib/water-surface.js.map +2 -2
  56. package/dist/features/viz/index.d.ts +68 -6
  57. package/dist/features/viz/index.js +164 -2
  58. package/dist/features/viz/index.js.map +2 -2
  59. package/dist/features/viz/inspection/bar.d.ts +79 -0
  60. package/dist/features/viz/inspection/bar.js +49 -0
  61. package/dist/features/viz/inspection/bar.js.map +7 -0
  62. package/dist/features/viz/inspection/candle.d.ts +156 -0
  63. package/dist/features/viz/inspection/candle.js +120 -0
  64. package/dist/features/viz/inspection/candle.js.map +7 -0
  65. package/dist/features/viz/inspection/capture-types.d.ts +65 -0
  66. package/dist/features/viz/inspection/capture.d.ts +16 -0
  67. package/dist/features/viz/inspection/capture.js +49 -0
  68. package/dist/features/viz/inspection/capture.js.map +7 -0
  69. package/dist/features/viz/inspection/handler.d.ts +36 -0
  70. package/dist/features/viz/inspection/handler.js +91 -0
  71. package/dist/features/viz/inspection/handler.js.map +7 -0
  72. package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
  73. package/dist/features/viz/inspection/ohlc-bar.js +118 -0
  74. package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
  75. package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
  76. package/dist/features/viz/inspection/owned-ref.js +99 -0
  77. package/dist/features/viz/inspection/owned-ref.js.map +7 -0
  78. package/dist/features/viz/inspection/painted-point.d.ts +22 -0
  79. package/dist/features/viz/inspection/painted-point.js +29 -0
  80. package/dist/features/viz/inspection/painted-point.js.map +7 -0
  81. package/dist/features/viz/inspection/queries.d.ts +100 -0
  82. package/dist/features/viz/inspection/queries.js +192 -0
  83. package/dist/features/viz/inspection/queries.js.map +7 -0
  84. package/dist/features/viz/inspection/query-types.d.ts +177 -0
  85. package/dist/features/viz/inspection/volume.d.ts +104 -0
  86. package/dist/features/viz/inspection/volume.js +95 -0
  87. package/dist/features/viz/inspection/volume.js.map +7 -0
  88. package/dist/features/viz/inspection.d.ts +19 -0
  89. package/dist/features/viz/inspection.js +54 -0
  90. package/dist/features/viz/inspection.js.map +7 -0
  91. package/dist/features/viz/inspection.mjs +1 -0
  92. package/dist/features/viz/lib/area-series.d.ts +62 -0
  93. package/dist/features/viz/lib/area-series.js +120 -0
  94. package/dist/features/viz/lib/area-series.js.map +7 -0
  95. package/dist/features/viz/lib/axis-title.js +2 -1
  96. package/dist/features/viz/lib/axis-title.js.map +2 -2
  97. package/dist/features/viz/lib/axis.js +1 -1
  98. package/dist/features/viz/lib/axis.js.map +2 -2
  99. package/dist/features/viz/lib/bar-series.d.ts +3 -1
  100. package/dist/features/viz/lib/bar-series.js +16 -1
  101. package/dist/features/viz/lib/bar-series.js.map +2 -2
  102. package/dist/features/viz/lib/baseline-series.d.ts +55 -0
  103. package/dist/features/viz/lib/baseline-series.js +136 -0
  104. package/dist/features/viz/lib/baseline-series.js.map +7 -0
  105. package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
  106. package/dist/features/viz/lib/candlestick-series.js +150 -0
  107. package/dist/features/viz/lib/candlestick-series.js.map +7 -0
  108. package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
  109. package/dist/features/viz/lib/censored-point-series.js +129 -0
  110. package/dist/features/viz/lib/censored-point-series.js.map +7 -0
  111. package/dist/features/viz/lib/color-context.d.ts +4 -0
  112. package/dist/features/viz/lib/color-context.js +41 -0
  113. package/dist/features/viz/lib/color-context.js.map +7 -0
  114. package/dist/features/viz/lib/color-math.d.ts +4 -0
  115. package/dist/features/viz/lib/color-math.js +31 -0
  116. package/dist/features/viz/lib/color-math.js.map +7 -0
  117. package/dist/features/viz/lib/color-types.d.ts +53 -0
  118. package/dist/features/viz/lib/curve-definition.d.ts +49 -0
  119. package/dist/features/viz/lib/curve-definition.js +142 -0
  120. package/dist/features/viz/lib/curve-definition.js.map +7 -0
  121. package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
  122. package/dist/features/viz/lib/diverging-color-scale.js +51 -0
  123. package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
  124. package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
  125. package/dist/features/viz/lib/domain-navigation.js +77 -0
  126. package/dist/features/viz/lib/domain-navigation.js.map +7 -0
  127. package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
  128. package/dist/features/viz/lib/editable-chart-elements.js +733 -0
  129. package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
  130. package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
  131. package/dist/features/viz/lib/financial-aggregation.js +116 -0
  132. package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
  133. package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
  134. package/dist/features/viz/lib/financial-autoscale.js +61 -0
  135. package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
  136. package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
  137. package/dist/features/viz/lib/financial-comparison.js +98 -0
  138. package/dist/features/viz/lib/financial-comparison.js.map +7 -0
  139. package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
  140. package/dist/features/viz/lib/financial-geometry.js +67 -0
  141. package/dist/features/viz/lib/financial-geometry.js.map +7 -0
  142. package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
  143. package/dist/features/viz/lib/financial-indicators.js +135 -0
  144. package/dist/features/viz/lib/financial-indicators.js.map +7 -0
  145. package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
  146. package/dist/features/viz/lib/financial-oscillators.js +265 -0
  147. package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
  148. package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
  149. package/dist/features/viz/lib/graph/bipartite.js +250 -0
  150. package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
  151. package/dist/features/viz/lib/graph/chord.d.ts +44 -0
  152. package/dist/features/viz/lib/graph/chord.js +348 -0
  153. package/dist/features/viz/lib/graph/chord.js.map +7 -0
  154. package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
  155. package/dist/features/viz/lib/graph/dependency.js +140 -0
  156. package/dist/features/viz/lib/graph/dependency.js.map +7 -0
  157. package/dist/features/viz/lib/graph/force.d.ts +28 -0
  158. package/dist/features/viz/lib/graph/force.js +580 -0
  159. package/dist/features/viz/lib/graph/force.js.map +7 -0
  160. package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
  161. package/dist/features/viz/lib/graph/hierarchy.js +112 -0
  162. package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
  163. package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
  164. package/dist/features/viz/lib/graph/icicle.js +153 -0
  165. package/dist/features/viz/lib/graph/icicle.js.map +7 -0
  166. package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
  167. package/dist/features/viz/lib/graph/matrix.js +243 -0
  168. package/dist/features/viz/lib/graph/matrix.js.map +7 -0
  169. package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
  170. package/dist/features/viz/lib/graph/neighborhood.js +281 -0
  171. package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
  172. package/dist/features/viz/lib/graph/routes.d.ts +35 -0
  173. package/dist/features/viz/lib/graph/routes.js +101 -0
  174. package/dist/features/viz/lib/graph/routes.js.map +7 -0
  175. package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
  176. package/dist/features/viz/lib/graph/sankey.js +341 -0
  177. package/dist/features/viz/lib/graph/sankey.js.map +7 -0
  178. package/dist/features/viz/lib/graph/shared.d.ts +59 -0
  179. package/dist/features/viz/lib/graph/shared.js +301 -0
  180. package/dist/features/viz/lib/graph/shared.js.map +7 -0
  181. package/dist/features/viz/lib/graph/tree.d.ts +11 -0
  182. package/dist/features/viz/lib/graph/tree.js +232 -0
  183. package/dist/features/viz/lib/graph/tree.js.map +7 -0
  184. package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
  185. package/dist/features/viz/lib/graph/treemap.js +227 -0
  186. package/dist/features/viz/lib/graph/treemap.js.map +7 -0
  187. package/dist/features/viz/lib/graph/types.d.ts +1097 -0
  188. package/dist/features/viz/lib/hover-card.js +8 -9
  189. package/dist/features/viz/lib/hover-card.js.map +2 -2
  190. package/dist/features/viz/lib/hover-data.d.ts +1 -1
  191. package/dist/features/viz/lib/hover-data.js +5 -2
  192. package/dist/features/viz/lib/hover-data.js.map +2 -2
  193. package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
  194. package/dist/features/viz/lib/interval-band-series.js +136 -0
  195. package/dist/features/viz/lib/interval-band-series.js.map +7 -0
  196. package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
  197. package/dist/features/viz/lib/interval-diamond-series.js +122 -0
  198. package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
  199. package/dist/features/viz/lib/interval-series.d.ts +79 -0
  200. package/dist/features/viz/lib/interval-series.js +158 -0
  201. package/dist/features/viz/lib/interval-series.js.map +7 -0
  202. package/dist/features/viz/lib/layout-pie.js +9 -13
  203. package/dist/features/viz/lib/layout-pie.js.map +2 -2
  204. package/dist/features/viz/lib/line-series.d.ts +1 -1
  205. package/dist/features/viz/lib/line-series.js +47 -28
  206. package/dist/features/viz/lib/line-series.js.map +2 -2
  207. package/dist/features/viz/lib/linear-scale.js +1 -1
  208. package/dist/features/viz/lib/linear-scale.js.map +2 -2
  209. package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
  210. package/dist/features/viz/lib/monotone-curve.js +63 -0
  211. package/dist/features/viz/lib/monotone-curve.js.map +7 -0
  212. package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
  213. package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
  214. package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
  215. package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
  216. package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
  217. package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
  218. package/dist/features/viz/lib/paired-series.d.ts +44 -0
  219. package/dist/features/viz/lib/paired-series.js +93 -0
  220. package/dist/features/viz/lib/paired-series.js.map +7 -0
  221. package/dist/features/viz/lib/pie-layout.js +2 -1
  222. package/dist/features/viz/lib/pie-layout.js.map +2 -2
  223. package/dist/features/viz/lib/plot-series.js +11 -6
  224. package/dist/features/viz/lib/plot-series.js.map +2 -2
  225. package/dist/features/viz/lib/plot-types.d.ts +4 -3
  226. package/dist/features/viz/lib/point-series.d.ts +1 -1
  227. package/dist/features/viz/lib/point-series.js +36 -9
  228. package/dist/features/viz/lib/point-series.js.map +2 -2
  229. package/dist/features/viz/lib/point-types.d.ts +5 -2
  230. package/dist/features/viz/lib/reference-band.js +4 -1
  231. package/dist/features/viz/lib/reference-band.js.map +2 -2
  232. package/dist/features/viz/lib/scale-context.d.ts +1 -1
  233. package/dist/features/viz/lib/scale-ticks.js +21 -6
  234. package/dist/features/viz/lib/scale-ticks.js.map +2 -2
  235. package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
  236. package/dist/features/viz/lib/sequential-color-scale.js +49 -0
  237. package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
  238. package/dist/features/viz/lib/series-position.d.ts +12 -0
  239. package/dist/features/viz/lib/series-position.js +44 -0
  240. package/dist/features/viz/lib/series-position.js.map +7 -0
  241. package/dist/features/viz/lib/step-curves.d.ts +19 -0
  242. package/dist/features/viz/lib/step-curves.js +53 -0
  243. package/dist/features/viz/lib/step-curves.js.map +7 -0
  244. package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
  245. package/dist/features/viz/lib/threshold-color-scale.js +59 -0
  246. package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
  247. package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
  248. package/dist/features/viz/lib/trading-time-mapping.js +89 -0
  249. package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
  250. package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
  251. package/dist/features/viz/lib/trading-time-scale.js +96 -0
  252. package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
  253. package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
  254. package/dist/features/viz/lib/trajectory-series.js +111 -0
  255. package/dist/features/viz/lib/trajectory-series.js.map +7 -0
  256. package/dist/features/viz/lib/types.d.ts +20 -4
  257. package/dist/features/viz/lib/use-continuous-scale.js +6 -1
  258. package/dist/features/viz/lib/use-continuous-scale.js.map +2 -2
  259. package/dist/features/viz/lib/utc-scale.js +11 -10
  260. package/dist/features/viz/lib/utc-scale.js.map +2 -2
  261. package/dist/features/viz/lib/volume-series.d.ts +59 -0
  262. package/dist/features/viz/lib/volume-series.js +117 -0
  263. package/dist/features/viz/lib/volume-series.js.map +7 -0
  264. package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
  265. package/dist/features/viz/lib/weighted-point-series.js +169 -0
  266. package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
  267. package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
  268. package/dist/filters/backdrop-contrast-gpu.js +33 -0
  269. package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
  270. package/dist/filters/backdrop-contrast.d.ts +21 -0
  271. package/dist/filters/backdrop-contrast.js +61 -0
  272. package/dist/filters/backdrop-contrast.js.map +7 -0
  273. package/dist/filters/displacement.js +1 -1
  274. package/dist/filters/displacement.js.map +2 -2
  275. package/dist/filters/emboss-gpu.d.ts +4 -0
  276. package/dist/filters/emboss-gpu.js +39 -0
  277. package/dist/filters/emboss-gpu.js.map +7 -0
  278. package/dist/filters/emboss.d.ts +32 -0
  279. package/dist/filters/emboss.js +104 -0
  280. package/dist/filters/emboss.js.map +7 -0
  281. package/dist/filters/filter-executor.d.ts +11 -4
  282. package/dist/filters/filter-executor.js +104 -49
  283. package/dist/filters/filter-executor.js.map +2 -2
  284. package/dist/filters/reflected-light.js +1 -1
  285. package/dist/filters/reflected-light.js.map +2 -2
  286. package/dist/filters/reflection-gpu.d.ts +3 -1
  287. package/dist/filters/reflection-gpu.js +5 -2
  288. package/dist/filters/reflection-gpu.js.map +2 -2
  289. package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
  290. package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
  291. package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
  292. package/dist/filters/render-emboss-boundary.d.ts +13 -0
  293. package/dist/filters/render-emboss-boundary.js +131 -0
  294. package/dist/filters/render-emboss-boundary.js.map +7 -0
  295. package/dist/filters.d.ts +9 -5
  296. package/dist/filters.js +4 -0
  297. package/dist/filters.js.map +2 -2
  298. package/dist/index.d.ts +9 -5
  299. package/dist/index.js +18 -2
  300. package/dist/index.js.map +2 -2
  301. package/dist/internal.d.ts +4 -0
  302. package/dist/internal.js +6 -0
  303. package/dist/internal.js.map +2 -2
  304. package/dist/layout-kernel.d.ts +12 -0
  305. package/dist/layout-kernel.js +11 -0
  306. package/dist/layout-kernel.js.map +7 -0
  307. package/dist/layout-kernel.mjs +1 -0
  308. package/dist/lib/backend/types.d.ts +13 -1
  309. package/dist/lib/backend/types.js.map +2 -2
  310. package/dist/lib/components/arc-geometry.js +2 -1
  311. package/dist/lib/components/arc-geometry.js.map +2 -2
  312. package/dist/lib/components/g.js +2 -0
  313. package/dist/lib/components/g.js.map +2 -2
  314. package/dist/lib/components/html-box.js +2 -1
  315. package/dist/lib/components/html-box.js.map +2 -2
  316. package/dist/lib/components/img.js +3 -3
  317. package/dist/lib/components/img.js.map +2 -2
  318. package/dist/lib/components/layer.js +98 -16
  319. package/dist/lib/components/layer.js.map +3 -3
  320. package/dist/lib/components/text.d.ts +16 -0
  321. package/dist/lib/components/text.js +131 -24
  322. package/dist/lib/components/text.js.map +2 -2
  323. package/dist/lib/define-primitive.d.ts +4 -2
  324. package/dist/lib/define-primitive.js +3 -1
  325. package/dist/lib/define-primitive.js.map +2 -2
  326. package/dist/lib/element/metadata.d.ts +9 -0
  327. package/dist/lib/element/metadata.js +19 -0
  328. package/dist/lib/element/metadata.js.map +2 -2
  329. package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
  330. package/dist/lib/element/resolve-primitive-inputs.js +17 -4
  331. package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
  332. package/dist/lib/events/event-facade.d.ts +18 -0
  333. package/dist/lib/events/event-facade.js +28 -2
  334. package/dist/lib/events/event-facade.js.map +2 -2
  335. package/dist/lib/events/hit-test.js +2 -1
  336. package/dist/lib/events/hit-test.js.map +2 -2
  337. package/dist/lib/events/propagation.d.ts +2 -1
  338. package/dist/lib/events/propagation.js +22 -16
  339. package/dist/lib/events/propagation.js.map +2 -2
  340. package/dist/lib/events/registrations.d.ts +10 -0
  341. package/dist/lib/events/registrations.js +160 -5
  342. package/dist/lib/events/registrations.js.map +2 -2
  343. package/dist/lib/execute-render.js +25 -1
  344. package/dist/lib/execute-render.js.map +2 -2
  345. package/dist/lib/filter/filter-region.js +3 -10
  346. package/dist/lib/filter/filter-region.js.map +2 -2
  347. package/dist/lib/focus/focus-manager.d.ts +8 -1
  348. package/dist/lib/focus/focus-manager.js +87 -43
  349. package/dist/lib/focus/focus-manager.js.map +2 -2
  350. package/dist/lib/focus/geometry.d.ts +2 -0
  351. package/dist/lib/focus/geometry.js +6 -0
  352. package/dist/lib/focus/geometry.js.map +2 -2
  353. package/dist/lib/geometry/path-bend-guide.js +1 -1
  354. package/dist/lib/geometry/path-bend-guide.js.map +2 -2
  355. package/dist/lib/geometry/path-geometry.js +12 -11
  356. package/dist/lib/geometry/path-geometry.js.map +2 -2
  357. package/dist/lib/geometry/path-transforms.js +17 -21
  358. package/dist/lib/geometry/path-transforms.js.map +2 -2
  359. package/dist/lib/geometry/path-warp-bezier.js +3 -1
  360. package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
  361. package/dist/lib/geometry/path-warp.js +1 -1
  362. package/dist/lib/geometry/path-warp.js.map +2 -2
  363. package/dist/lib/global-state.js +2 -0
  364. package/dist/lib/global-state.js.map +2 -2
  365. package/dist/lib/html/html-events.d.ts +32 -0
  366. package/dist/lib/html/html-events.js +179 -0
  367. package/dist/lib/html/html-events.js.map +7 -0
  368. package/dist/lib/html/html-service.d.ts +8 -2
  369. package/dist/lib/html/html-service.js +198 -65
  370. package/dist/lib/html/html-service.js.map +2 -2
  371. package/dist/lib/html/overlay-config.js +7 -6
  372. package/dist/lib/html/overlay-config.js.map +2 -2
  373. package/dist/lib/html/types.d.ts +29 -2
  374. package/dist/lib/layout/absolute.d.ts +11 -5
  375. package/dist/lib/layout/absolute.js +329 -55
  376. package/dist/lib/layout/absolute.js.map +3 -3
  377. package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
  378. package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
  379. package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
  380. package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
  381. package/dist/lib/layout/allocation-checkpoint.js +463 -0
  382. package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
  383. package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
  384. package/dist/lib/layout/allocation-dependencies.js +90 -0
  385. package/dist/lib/layout/allocation-dependencies.js.map +7 -0
  386. package/dist/lib/layout/allocation-revision.d.ts +13 -0
  387. package/dist/lib/layout/allocation-revision.js +67 -0
  388. package/dist/lib/layout/allocation-revision.js.map +7 -0
  389. package/dist/lib/layout/box-insets.d.ts +17 -0
  390. package/dist/lib/layout/box-insets.js +138 -0
  391. package/dist/lib/layout/box-insets.js.map +7 -0
  392. package/dist/lib/layout/box-sizing.d.ts +16 -0
  393. package/dist/lib/layout/box-sizing.js +77 -0
  394. package/dist/lib/layout/box-sizing.js.map +7 -0
  395. package/dist/lib/layout/box.js +42 -12
  396. package/dist/lib/layout/box.js.map +2 -2
  397. package/dist/lib/layout/canvas-measurement.d.ts +13 -0
  398. package/dist/lib/layout/canvas-measurement.js +57 -0
  399. package/dist/lib/layout/canvas-measurement.js.map +7 -0
  400. package/dist/lib/layout/context.d.ts +35 -6
  401. package/dist/lib/layout/context.js +72 -3
  402. package/dist/lib/layout/context.js.map +2 -2
  403. package/dist/lib/layout/define-layout-component.d.ts +23 -0
  404. package/dist/lib/layout/define-layout-component.js +84 -0
  405. package/dist/lib/layout/define-layout-component.js.map +7 -0
  406. package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
  407. package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
  408. package/dist/lib/layout/flex-baseline-mode.js +7 -0
  409. package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
  410. package/dist/lib/layout/flex.d.ts +50 -15
  411. package/dist/lib/layout/flex.js +2124 -195
  412. package/dist/lib/layout/flex.js.map +3 -3
  413. package/dist/lib/layout/flow.js +225 -49
  414. package/dist/lib/layout/flow.js.map +2 -2
  415. package/dist/lib/layout/geometry-publication.d.ts +53 -0
  416. package/dist/lib/layout/geometry-publication.js +244 -0
  417. package/dist/lib/layout/geometry-publication.js.map +7 -0
  418. package/dist/lib/layout/grid-kernel.d.ts +63 -0
  419. package/dist/lib/layout/grid-kernel.js +168 -0
  420. package/dist/lib/layout/grid-kernel.js.map +7 -0
  421. package/dist/lib/layout/grid.d.ts +63 -4
  422. package/dist/lib/layout/grid.js +767 -171
  423. package/dist/lib/layout/grid.js.map +3 -3
  424. package/dist/lib/layout/measure.d.ts +55 -3
  425. package/dist/lib/layout/measure.js +448 -15
  426. package/dist/lib/layout/measure.js.map +2 -2
  427. package/dist/lib/layout/overlay.js +81 -23
  428. package/dist/lib/layout/overlay.js.map +2 -2
  429. package/dist/lib/layout/participation.d.ts +27 -0
  430. package/dist/lib/layout/participation.js +188 -0
  431. package/dist/lib/layout/participation.js.map +7 -0
  432. package/dist/lib/layout/place-child.js +1 -1
  433. package/dist/lib/layout/place-child.js.map +2 -2
  434. package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
  435. package/dist/lib/layout/positioning-diagnostics.js +13 -2
  436. package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
  437. package/dist/lib/layout/prepared-root.d.ts +121 -0
  438. package/dist/lib/layout/prepared-root.js +360 -0
  439. package/dist/lib/layout/prepared-root.js.map +7 -0
  440. package/dist/lib/layout/standalone-kernel.d.ts +60 -0
  441. package/dist/lib/layout/standalone-kernel.js +722 -0
  442. package/dist/lib/layout/standalone-kernel.js.map +7 -0
  443. package/dist/lib/layout/topology.d.ts +21 -0
  444. package/dist/lib/layout/topology.js +113 -0
  445. package/dist/lib/layout/topology.js.map +7 -0
  446. package/dist/lib/layout/types.d.ts +5 -0
  447. package/dist/lib/layout/wasm/artifact.d.ts +1 -0
  448. package/dist/lib/layout/wasm/artifact.js +5 -0
  449. package/dist/lib/layout/wasm/artifact.js.map +7 -0
  450. package/dist/lib/layout/wasm/bytes.d.ts +1 -0
  451. package/dist/lib/layout/wasm/bytes.js +5 -0
  452. package/dist/lib/layout/wasm/bytes.js.map +7 -0
  453. package/dist/lib/layout/wasm/embedded.d.ts +2 -0
  454. package/dist/lib/layout/wasm/embedded.js +12 -0
  455. package/dist/lib/layout/wasm/embedded.js.map +7 -0
  456. package/dist/lib/layout/wasm/layout.wasm +0 -0
  457. package/dist/lib/layout/wasm/module.d.ts +8 -0
  458. package/dist/lib/layout/wasm/module.js +70 -0
  459. package/dist/lib/layout/wasm/module.js.map +7 -0
  460. package/dist/lib/layout/wasm/region.d.ts +267 -0
  461. package/dist/lib/layout/wasm/region.js +1018 -0
  462. package/dist/lib/layout/wasm/region.js.map +7 -0
  463. package/dist/lib/manipulation/controller.js +4 -7
  464. package/dist/lib/manipulation/controller.js.map +2 -2
  465. package/dist/lib/manipulation/frame.js +1 -1
  466. package/dist/lib/manipulation/frame.js.map +2 -2
  467. package/dist/lib/manipulation/handles.js +32 -33
  468. package/dist/lib/manipulation/handles.js.map +2 -2
  469. package/dist/lib/manipulation/solve.js +12 -10
  470. package/dist/lib/manipulation/solve.js.map +2 -2
  471. package/dist/lib/mount-pibbl.js +1 -0
  472. package/dist/lib/mount-pibbl.js.map +2 -2
  473. package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
  474. package/dist/lib/mount-prepared-pibbl.js +29 -0
  475. package/dist/lib/mount-prepared-pibbl.js.map +7 -0
  476. package/dist/lib/mount-request.d.ts +8 -0
  477. package/dist/lib/mount-request.js +41 -0
  478. package/dist/lib/mount-request.js.map +7 -0
  479. package/dist/lib/pibbl.d.ts +21 -13
  480. package/dist/lib/pibbl.js +18 -16
  481. package/dist/lib/pibbl.js.map +2 -2
  482. package/dist/lib/recording/recording.d.ts +43 -0
  483. package/dist/lib/recording/recording.js +555 -0
  484. package/dist/lib/recording/recording.js.map +7 -0
  485. package/dist/lib/recording/types.d.ts +118 -0
  486. package/dist/lib/recording/wasm-bytes.d.ts +1 -0
  487. package/dist/lib/recording/wasm-bytes.js +5 -0
  488. package/dist/lib/recording/wasm-bytes.js.map +7 -0
  489. package/dist/lib/recording/worker-source.d.ts +1 -0
  490. package/dist/lib/recording/worker-source.js +5 -0
  491. package/dist/lib/recording/worker-source.js.map +7 -0
  492. package/dist/lib/render-layer/controller.d.ts +9 -3
  493. package/dist/lib/render-layer/controller.js +259 -110
  494. package/dist/lib/render-layer/controller.js.map +2 -2
  495. package/dist/lib/render-transaction.d.ts +12 -2
  496. package/dist/lib/render-transaction.js +69 -1
  497. package/dist/lib/render-transaction.js.map +2 -2
  498. package/dist/lib/render.js +32 -8
  499. package/dist/lib/render.js.map +2 -2
  500. package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
  501. package/dist/lib/scheduler/realm-scheduler.js +55 -26
  502. package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
  503. package/dist/lib/scheduler/renderer-participant.js +1 -0
  504. package/dist/lib/scheduler/renderer-participant.js.map +2 -2
  505. package/dist/lib/series-inspection-frame.d.ts +18 -0
  506. package/dist/lib/series-inspection-frame.js +70 -0
  507. package/dist/lib/series-inspection-frame.js.map +7 -0
  508. package/dist/lib/signals/edge.d.ts +7 -4
  509. package/dist/lib/signals/edge.js +25 -3
  510. package/dist/lib/signals/edge.js.map +2 -2
  511. package/dist/lib/signals/graph.d.ts +16 -2
  512. package/dist/lib/signals/graph.js +54 -12
  513. package/dist/lib/signals/graph.js.map +2 -2
  514. package/dist/lib/signals/input-provision.d.ts +15 -0
  515. package/dist/lib/signals/input-provision.js +53 -3
  516. package/dist/lib/signals/input-provision.js.map +2 -2
  517. package/dist/lib/signals/render-consumer.d.ts +3 -0
  518. package/dist/lib/signals/render-consumer.js +22 -14
  519. package/dist/lib/signals/render-consumer.js.map +2 -2
  520. package/dist/lib/style/positioning.d.ts +50 -2
  521. package/dist/lib/style/positioning.js +28 -4
  522. package/dist/lib/style/positioning.js.map +2 -2
  523. package/dist/lib/style/resolve-built-in.d.ts +4 -3
  524. package/dist/lib/style/resolve-built-in.js +17 -3
  525. package/dist/lib/style/resolve-built-in.js.map +2 -2
  526. package/dist/lib/style/resolve-dispatch.d.ts +3 -0
  527. package/dist/lib/style/resolve-dispatch.js +77 -4
  528. package/dist/lib/style/resolve-dispatch.js.map +2 -2
  529. package/dist/lib/style/resolve-length.d.ts +2 -0
  530. package/dist/lib/style/resolve-length.js +13 -9
  531. package/dist/lib/style/resolve-length.js.map +2 -2
  532. package/dist/lib/style/sizing-length.d.ts +51 -0
  533. package/dist/lib/style/sizing-length.js +77 -0
  534. package/dist/lib/style/sizing-length.js.map +7 -0
  535. package/dist/lib/style/types.d.ts +63 -25
  536. package/dist/lib/surface/root-surface.js +10 -6
  537. package/dist/lib/surface/root-surface.js.map +2 -2
  538. package/dist/lib/textures/texture.js +10 -8
  539. package/dist/lib/textures/texture.js.map +2 -2
  540. package/dist/lib/transitions/capture.js +4 -1
  541. package/dist/lib/transitions/capture.js.map +2 -2
  542. package/dist/lib/transitions/embers-physics.js +17 -10
  543. package/dist/lib/transitions/embers-physics.js.map +2 -2
  544. package/dist/lib/types.d.ts +110 -1
  545. package/dist/sync.d.ts +16 -0
  546. package/dist/sync.js +13 -0
  547. package/dist/sync.js.map +7 -0
  548. package/dist/sync.mjs +1 -0
  549. package/package.json +26 -3
@@ -0,0 +1,44 @@
1
+ import { scaleView } from "./scale-view.js";
2
+ const views = /* @__PURE__ */ new WeakMap();
3
+ function useSeriesPosition(id) {
4
+ return scaleView(views, id, "Series", (kind) => kind !== "band").get();
5
+ }
6
+ function seriesAccessor(input) {
7
+ return typeof input === "function" ? input : (datum) => datum[input];
8
+ }
9
+ function mapSeriesPosition(scale, value) {
10
+ if (value == null || typeof value === "number" && !Number.isFinite(value))
11
+ return void 0;
12
+ if (scale.type === "point") {
13
+ const mapped = scale.map(value);
14
+ if (mapped === void 0)
15
+ throw new RangeError(
16
+ `Series: unknown point category ${String(value)} (${typeof value}).`
17
+ );
18
+ return mapped;
19
+ }
20
+ if (typeof value !== "number")
21
+ throw new TypeError(
22
+ "Series: continuous coordinates must be numbers; use PointScale for categories."
23
+ );
24
+ return scale.map(value);
25
+ }
26
+ function useNumericPosition(id) {
27
+ const value = useSeriesPosition(id);
28
+ if (value.type === "point")
29
+ throw new TypeError(
30
+ "Numeric position requires a numeric or trading-time scale."
31
+ );
32
+ return value;
33
+ }
34
+ function invertNumericPosition(scale, position) {
35
+ return scale.type === "trading-time" ? scale.nearestTimeAtPosition(position) : scale.invert(position);
36
+ }
37
+ export {
38
+ invertNumericPosition,
39
+ mapSeriesPosition,
40
+ seriesAccessor,
41
+ useNumericPosition,
42
+ useSeriesPosition
43
+ };
44
+ //# sourceMappingURL=series-position.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/features/viz/lib/series-position.ts"],
4
+ "sourcesContent": ["import type { Signal } from \"@pibbl/core\";\nimport { scaleView } from \"./scale-view.js\";\nimport type {\n ResolvedScale,\n ResolvedContinuousScale,\n ResolvedPointScale,\n ScaleId,\n SeriesAccessor,\n SeriesCoordinate,\n} from \"./types.js\";\nexport type NumericPositionScale =\n | ResolvedContinuousScale\n | import(\"./trading-time-scale.js\").ResolvedTradingTimeScale;\ntype PositionScale = NumericPositionScale | ResolvedPointScale;\nconst views = new WeakMap<Signal<ResolvedScale>, Signal<PositionScale>>();\n/** Private position receiver; public scale hooks retain their dedicated contracts. */\nexport function useSeriesPosition(id: ScaleId): PositionScale {\n return scaleView(views, id, \"Series\", (kind) => kind !== \"band\").get();\n}\nexport function seriesAccessor<D>(\n input: SeriesAccessor<D>,\n): (datum: D, index: number, data: readonly D[]) => SeriesCoordinate {\n return typeof input === \"function\"\n ? input\n : (datum) => datum[input] as SeriesCoordinate;\n}\nexport function mapSeriesPosition(\n scale: PositionScale,\n value: SeriesCoordinate,\n): number | undefined {\n if (value == null || (typeof value === \"number\" && !Number.isFinite(value)))\n return undefined;\n if (scale.type === \"point\") {\n const mapped = scale.map(value);\n if (mapped === undefined)\n throw new RangeError(\n `Series: unknown point category ${String(value)} (${typeof value}).`,\n );\n return mapped;\n }\n if (typeof value !== \"number\")\n throw new TypeError(\n \"Series: continuous coordinates must be numbers; use PointScale for categories.\",\n );\n return scale.map(value);\n}\n\n/** Private numeric/trading receiver; public continuous hook stays unchanged. */\nexport function useNumericPosition(id: ScaleId): NumericPositionScale {\n const value = useSeriesPosition(id);\n if (value.type === \"point\")\n throw new TypeError(\n \"Numeric position requires a numeric or trading-time scale.\",\n );\n return value;\n}\n/** Returns explicit supplied time for trading positions, continuous inverse otherwise. */\nexport function invertNumericPosition(\n scale: NumericPositionScale,\n position: number,\n): number | undefined {\n return scale.type === \"trading-time\"\n ? scale.nearestTimeAtPosition(position)\n : scale.invert(position);\n}\n"],
5
+ "mappings": "AACA,SAAS,iBAAiB;AAa1B,MAAM,QAAQ,oBAAI,QAAsD;AAEjE,SAAS,kBAAkB,IAA4B;AAC5D,SAAO,UAAU,OAAO,IAAI,UAAU,CAAC,SAAS,SAAS,MAAM,EAAE,IAAI;AACvE;AACO,SAAS,eACd,OACmE;AACnE,SAAO,OAAO,UAAU,aACpB,QACA,CAAC,UAAU,MAAM,KAAK;AAC5B;AACO,SAAS,kBACd,OACA,OACoB;AACpB,MAAI,SAAS,QAAS,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK;AACvE,WAAO;AACT,MAAI,MAAM,SAAS,SAAS;AAC1B,UAAM,SAAS,MAAM,IAAI,KAAK;AAC9B,QAAI,WAAW;AACb,YAAM,IAAI;AAAA,QACR,kCAAkC,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK;AAAA,MAClE;AACF,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU;AACnB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,SAAO,MAAM,IAAI,KAAK;AACxB;AAGO,SAAS,mBAAmB,IAAmC;AACpE,QAAM,QAAQ,kBAAkB,EAAE;AAClC,MAAI,MAAM,SAAS;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,SAAO;AACT;AAEO,SAAS,sBACd,OACA,UACoB;AACpB,SAAO,MAAM,SAAS,iBAClB,MAAM,sBAAsB,QAAQ,IACpC,MAAM,OAAO,QAAQ;AAC3B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,19 @@
1
+ import { type SeriesCurve } from "./curve-definition.js";
2
+ /**
3
+ * Returns the immutable definition that jumps to the next value at the prior x coordinate.
4
+ *
5
+ * @returns The named {@link SeriesCurve} definition.
6
+ */
7
+ export declare function stepBefore(): SeriesCurve;
8
+ /**
9
+ * Returns the immutable definition that holds the prior value until the next x coordinate.
10
+ *
11
+ * @returns The named {@link SeriesCurve} definition.
12
+ */
13
+ export declare function stepAfter(): SeriesCurve;
14
+ /**
15
+ * Returns the immutable definition that places each value transition halfway between x values.
16
+ *
17
+ * @returns The named {@link SeriesCurve} definition.
18
+ */
19
+ export declare function stepMidpoint(): SeriesCurve;
@@ -0,0 +1,53 @@
1
+ import {
2
+ createSeriesCurve
3
+ } from "./curve-definition.js";
4
+ function segment(end) {
5
+ return Object.freeze({ end });
6
+ }
7
+ function stepBeforeSegments(points) {
8
+ const segments = [];
9
+ for (let i = 1; i < points.length; i++) {
10
+ const previous = points[i - 1], next = points[i];
11
+ segments.push(segment([previous[0], next[1]]), segment(next));
12
+ }
13
+ return segments;
14
+ }
15
+ function stepAfterSegments(points) {
16
+ const segments = [];
17
+ for (let i = 1; i < points.length; i++) {
18
+ const previous = points[i - 1], next = points[i];
19
+ segments.push(segment([next[0], previous[1]]), segment(next));
20
+ }
21
+ return segments;
22
+ }
23
+ function stepMidpointSegments(points) {
24
+ const segments = [];
25
+ for (let i = 1; i < points.length; i++) {
26
+ const previous = points[i - 1], next = points[i];
27
+ const midpoint2 = previous[0] / 2 + next[0] / 2;
28
+ segments.push(
29
+ segment([midpoint2, previous[1]]),
30
+ segment([midpoint2, next[1]]),
31
+ segment(next)
32
+ );
33
+ }
34
+ return segments;
35
+ }
36
+ const before = /* @__PURE__ */ createSeriesCurve(stepBeforeSegments);
37
+ const after = /* @__PURE__ */ createSeriesCurve(stepAfterSegments);
38
+ const midpoint = /* @__PURE__ */ createSeriesCurve(stepMidpointSegments);
39
+ function stepBefore() {
40
+ return before;
41
+ }
42
+ function stepAfter() {
43
+ return after;
44
+ }
45
+ function stepMidpoint() {
46
+ return midpoint;
47
+ }
48
+ export {
49
+ stepAfter,
50
+ stepBefore,
51
+ stepMidpoint
52
+ };
53
+ //# sourceMappingURL=step-curves.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/features/viz/lib/step-curves.ts"],
4
+ "sourcesContent": ["import {\n createSeriesCurve,\n type SeriesCurve,\n type SeriesCurvePoint,\n} from \"./curve-definition.js\";\n\nfunction segment(end: SeriesCurvePoint) {\n return Object.freeze({ end });\n}\n\nfunction stepBeforeSegments(points: readonly SeriesCurvePoint[]) {\n const segments = [];\n for (let i = 1; i < points.length; i++) {\n const previous = points[i - 1],\n next = points[i];\n segments.push(segment([previous[0], next[1]]), segment(next));\n }\n return segments;\n}\n\nfunction stepAfterSegments(points: readonly SeriesCurvePoint[]) {\n const segments = [];\n for (let i = 1; i < points.length; i++) {\n const previous = points[i - 1],\n next = points[i];\n segments.push(segment([next[0], previous[1]]), segment(next));\n }\n return segments;\n}\n\nfunction stepMidpointSegments(points: readonly SeriesCurvePoint[]) {\n const segments = [];\n for (let i = 1; i < points.length; i++) {\n const previous = points[i - 1],\n next = points[i];\n const midpoint = previous[0] / 2 + next[0] / 2;\n segments.push(\n segment([midpoint, previous[1]]),\n segment([midpoint, next[1]]),\n segment(next),\n );\n }\n return segments;\n}\n\nconst before = /* @__PURE__ */ createSeriesCurve(stepBeforeSegments);\nconst after = /* @__PURE__ */ createSeriesCurve(stepAfterSegments);\nconst midpoint = /* @__PURE__ */ createSeriesCurve(stepMidpointSegments);\n\n/**\n * Returns the immutable definition that jumps to the next value at the prior x coordinate.\n *\n * @returns The named {@link SeriesCurve} definition.\n */\nexport function stepBefore(): SeriesCurve {\n return before;\n}\n\n/**\n * Returns the immutable definition that holds the prior value until the next x coordinate.\n *\n * @returns The named {@link SeriesCurve} definition.\n */\nexport function stepAfter(): SeriesCurve {\n return after;\n}\n\n/**\n * Returns the immutable definition that places each value transition halfway between x values.\n *\n * @returns The named {@link SeriesCurve} definition.\n */\nexport function stepMidpoint(): SeriesCurve {\n return midpoint;\n}\n"],
5
+ "mappings": "AAAA;AAAA,EACE;AAAA,OAGK;AAEP,SAAS,QAAQ,KAAuB;AACtC,SAAO,OAAO,OAAO,EAAE,IAAI,CAAC;AAC9B;AAEA,SAAS,mBAAmB,QAAqC;AAC/D,QAAM,WAAW,CAAC;AAClB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,WAAW,OAAO,IAAI,CAAC,GAC3B,OAAO,OAAO,CAAC;AACjB,aAAS,KAAK,QAAQ,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC;AAAA,EAC9D;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,QAAqC;AAC9D,QAAM,WAAW,CAAC;AAClB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,WAAW,OAAO,IAAI,CAAC,GAC3B,OAAO,OAAO,CAAC;AACjB,aAAS,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC;AAAA,EAC9D;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,QAAqC;AACjE,QAAM,WAAW,CAAC;AAClB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,WAAW,OAAO,IAAI,CAAC,GAC3B,OAAO,OAAO,CAAC;AACjB,UAAMA,YAAW,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI;AAC7C,aAAS;AAAA,MACP,QAAQ,CAACA,WAAU,SAAS,CAAC,CAAC,CAAC;AAAA,MAC/B,QAAQ,CAACA,WAAU,KAAK,CAAC,CAAC,CAAC;AAAA,MAC3B,QAAQ,IAAI;AAAA,IACd;AAAA,EACF;AACA,SAAO;AACT;AAEA,MAAM,SAAyB,kCAAkB,kBAAkB;AACnE,MAAM,QAAwB,kCAAkB,iBAAiB;AACjE,MAAM,WAA2B,kCAAkB,oBAAoB;AAOhE,SAAS,aAA0B;AACxC,SAAO;AACT;AAOO,SAAS,YAAyB;AACvC,SAAO;AACT;AAOO,SAAS,eAA4B;AAC1C,SAAO;AACT;",
6
+ "names": ["midpoint"]
7
+ }
@@ -0,0 +1,43 @@
1
+ import { type PibblNode, type Signal, type SignalValue } from "@pibbl/core";
2
+ import type { ScaleId } from "./types.js";
3
+ /** One lower-inclusive, upper-exclusive threshold color bucket. @see {@link ResolvedThresholdColorScale} */
4
+ export interface ThresholdColorBand {
5
+ /** Lower inclusive boundary, omitted for the first bucket. */
6
+ readonly lower: number | undefined;
7
+ /** Upper exclusive boundary, omitted for the last bucket. */
8
+ readonly upper: number | undefined;
9
+ /** Validated #RRGGBB paint for this bucket. */
10
+ readonly color: string;
11
+ }
12
+ /** Immutable resolved threshold mapping shared with descendant marks. @see {@link ThresholdColorScaleProps} */
13
+ export interface ResolvedThresholdColorScale {
14
+ /** Strictly ascending finite authored bucket boundaries. */
15
+ readonly thresholds: readonly number[];
16
+ /** One validated color for every bucket. */
17
+ readonly colors: readonly string[];
18
+ /** Readable bucket descriptions in authored order. */
19
+ readonly bands: readonly ThresholdColorBand[];
20
+ /** Maps a finite numeric value to its containing bucket paint.
21
+ * @param value - Finite input.
22
+ * @returns Canonical lowercase #rrggbb color. */
23
+ readonly map: (value: number) => string;
24
+ }
25
+ /** Authored threshold boundaries, bucket colors, identity, and descendant content. @see {@link ResolvedThresholdColorScale} */
26
+ export interface ThresholdColorScaleProps {
27
+ /** Stable provider identity. */
28
+ readonly id: ScaleId;
29
+ /** Strictly ascending finite boundaries; each equality belongs to the upper bucket. */
30
+ readonly thresholds: SignalValue<readonly number[]>;
31
+ /** Exactly one #RRGGBB color per bucket. */
32
+ readonly colors: SignalValue<readonly string[]>;
33
+ /** Descendant content using this dedicated color context. */
34
+ readonly children?: PibblNode;
35
+ }
36
+ /** Provides a lazy, discrete threshold-to-color mapping for descendants.
37
+ * @param props - Boundaries, colors, identity and descendants. See {@link ThresholdColorScaleProps}.
38
+ * @returns Descendant content. */
39
+ export declare function ThresholdColorScale(props: ThresholdColorScaleProps): PibblNode;
40
+ /** Reads the matching ancestor threshold color mapping.
41
+ * @param id - Provider identity. See {@link ScaleId}.
42
+ * @returns Shared readonly mapping signal. See {@link ResolvedThresholdColorScale}. */
43
+ export declare function useThresholdColorScale(id: ScaleId): Signal<ResolvedThresholdColorScale>;
@@ -0,0 +1,59 @@
1
+ import {
2
+ resolveSignalValue
3
+ } from "@pibbl/core";
4
+ import { provideColor, useColor } from "./color-context.js";
5
+ import { finiteColorValue, hexColor } from "./color-math.js";
6
+ function resolve(props) {
7
+ const input = resolveSignalValue(props.thresholds);
8
+ const paint = resolveSignalValue(props.colors);
9
+ if (!Array.isArray(input) || !Array.isArray(paint))
10
+ throw new TypeError(
11
+ "Threshold color scales require threshold and color arrays."
12
+ );
13
+ const thresholds = Object.freeze(Array.from(input, finiteColorValue));
14
+ for (let index = 1; index < thresholds.length; index++)
15
+ if (!(thresholds[index - 1] < thresholds[index]))
16
+ throw new RangeError(
17
+ "Threshold color boundaries must be strictly ascending."
18
+ );
19
+ if (paint.length !== thresholds.length + 1)
20
+ throw new RangeError(
21
+ "Threshold color scales require one more color than thresholds."
22
+ );
23
+ const colors = Object.freeze(Array.from(paint, hexColor));
24
+ const bands = Object.freeze(
25
+ colors.map(
26
+ (color, index) => Object.freeze({
27
+ lower: index === 0 ? void 0 : thresholds[index - 1],
28
+ upper: index === thresholds.length ? void 0 : thresholds[index],
29
+ color
30
+ })
31
+ )
32
+ );
33
+ return Object.freeze({
34
+ thresholds,
35
+ colors,
36
+ bands,
37
+ map(value) {
38
+ finiteColorValue(value);
39
+ let index = 0;
40
+ while (index < thresholds.length && value >= thresholds[index]) index++;
41
+ return colors[index];
42
+ }
43
+ });
44
+ }
45
+ function ThresholdColorScale(props) {
46
+ provideColor(props.id, "threshold", () => resolve(props), [
47
+ props.thresholds,
48
+ props.colors
49
+ ]);
50
+ return props.children;
51
+ }
52
+ function useThresholdColorScale(id) {
53
+ return useColor(id, "threshold");
54
+ }
55
+ export {
56
+ ThresholdColorScale,
57
+ useThresholdColorScale
58
+ };
59
+ //# sourceMappingURL=threshold-color-scale.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/features/viz/lib/threshold-color-scale.ts"],
4
+ "sourcesContent": ["import {\n resolveSignalValue,\n type PibblNode,\n type Signal,\n type SignalValue,\n} from \"@pibbl/core\";\nimport { provideColor, useColor } from \"./color-context.js\";\nimport { finiteColorValue, hexColor } from \"./color-math.js\";\nimport type { ScaleId } from \"./types.js\";\n\n/** One lower-inclusive, upper-exclusive threshold color bucket. @see {@link ResolvedThresholdColorScale} */\nexport interface ThresholdColorBand {\n /** Lower inclusive boundary, omitted for the first bucket. */\n readonly lower: number | undefined;\n /** Upper exclusive boundary, omitted for the last bucket. */\n readonly upper: number | undefined;\n /** Validated #RRGGBB paint for this bucket. */\n readonly color: string;\n}\n\n/** Immutable resolved threshold mapping shared with descendant marks. @see {@link ThresholdColorScaleProps} */\nexport interface ResolvedThresholdColorScale {\n /** Strictly ascending finite authored bucket boundaries. */\n readonly thresholds: readonly number[];\n /** One validated color for every bucket. */\n readonly colors: readonly string[];\n /** Readable bucket descriptions in authored order. */\n readonly bands: readonly ThresholdColorBand[];\n /** Maps a finite numeric value to its containing bucket paint.\n * @param value - Finite input.\n * @returns Canonical lowercase #rrggbb color. */\n readonly map: (value: number) => string;\n}\n\n/** Authored threshold boundaries, bucket colors, identity, and descendant content. @see {@link ResolvedThresholdColorScale} */\nexport interface ThresholdColorScaleProps {\n /** Stable provider identity. */\n readonly id: ScaleId;\n /** Strictly ascending finite boundaries; each equality belongs to the upper bucket. */\n readonly thresholds: SignalValue<readonly number[]>;\n /** Exactly one #RRGGBB color per bucket. */\n readonly colors: SignalValue<readonly string[]>;\n /** Descendant content using this dedicated color context. */\n readonly children?: PibblNode;\n}\n\nfunction resolve(props: ThresholdColorScaleProps): ResolvedThresholdColorScale {\n const input = resolveSignalValue(props.thresholds);\n const paint = resolveSignalValue(props.colors);\n if (!Array.isArray(input) || !Array.isArray(paint))\n throw new TypeError(\n \"Threshold color scales require threshold and color arrays.\",\n );\n const thresholds = Object.freeze(Array.from(input, finiteColorValue));\n for (let index = 1; index < thresholds.length; index++)\n if (!(thresholds[index - 1] < thresholds[index]))\n throw new RangeError(\n \"Threshold color boundaries must be strictly ascending.\",\n );\n if (paint.length !== thresholds.length + 1)\n throw new RangeError(\n \"Threshold color scales require one more color than thresholds.\",\n );\n const colors = Object.freeze(Array.from(paint, hexColor));\n const bands = Object.freeze(\n colors.map((color, index) =>\n Object.freeze({\n lower: index === 0 ? undefined : thresholds[index - 1],\n upper: index === thresholds.length ? undefined : thresholds[index],\n color,\n }),\n ),\n );\n return Object.freeze({\n thresholds,\n colors,\n bands,\n map(value: number) {\n finiteColorValue(value);\n let index = 0;\n while (index < thresholds.length && value >= thresholds[index]) index++;\n return colors[index];\n },\n });\n}\n\n/** Provides a lazy, discrete threshold-to-color mapping for descendants.\n * @param props - Boundaries, colors, identity and descendants. See {@link ThresholdColorScaleProps}.\n * @returns Descendant content. */\nexport function ThresholdColorScale(props: ThresholdColorScaleProps) {\n provideColor(props.id, \"threshold\", () => resolve(props), [\n props.thresholds,\n props.colors,\n ]);\n return props.children;\n}\n\n/** Reads the matching ancestor threshold color mapping.\n * @param id - Provider identity. See {@link ScaleId}.\n * @returns Shared readonly mapping signal. See {@link ResolvedThresholdColorScale}. */\nexport function useThresholdColorScale(\n id: ScaleId,\n): Signal<ResolvedThresholdColorScale> {\n return useColor(id, \"threshold\");\n}\n"],
5
+ "mappings": "AAAA;AAAA,EACE;AAAA,OAIK;AACP,SAAS,cAAc,gBAAgB;AACvC,SAAS,kBAAkB,gBAAgB;AAuC3C,SAAS,QAAQ,OAA8D;AAC7E,QAAM,QAAQ,mBAAmB,MAAM,UAAU;AACjD,QAAM,QAAQ,mBAAmB,MAAM,MAAM;AAC7C,MAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,CAAC,MAAM,QAAQ,KAAK;AAC/C,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,QAAM,aAAa,OAAO,OAAO,MAAM,KAAK,OAAO,gBAAgB,CAAC;AACpE,WAAS,QAAQ,GAAG,QAAQ,WAAW,QAAQ;AAC7C,QAAI,EAAE,WAAW,QAAQ,CAAC,IAAI,WAAW,KAAK;AAC5C,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AACJ,MAAI,MAAM,WAAW,WAAW,SAAS;AACvC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,QAAM,SAAS,OAAO,OAAO,MAAM,KAAK,OAAO,QAAQ,CAAC;AACxD,QAAM,QAAQ,OAAO;AAAA,IACnB,OAAO;AAAA,MAAI,CAAC,OAAO,UACjB,OAAO,OAAO;AAAA,QACZ,OAAO,UAAU,IAAI,SAAY,WAAW,QAAQ,CAAC;AAAA,QACrD,OAAO,UAAU,WAAW,SAAS,SAAY,WAAW,KAAK;AAAA,QACjE;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,OAAe;AACjB,uBAAiB,KAAK;AACtB,UAAI,QAAQ;AACZ,aAAO,QAAQ,WAAW,UAAU,SAAS,WAAW,KAAK,EAAG;AAChE,aAAO,OAAO,KAAK;AAAA,IACrB;AAAA,EACF,CAAC;AACH;AAKO,SAAS,oBAAoB,OAAiC;AACnE,eAAa,MAAM,IAAI,aAAa,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxD,MAAM;AAAA,IACN,MAAM;AAAA,EACR,CAAC;AACD,SAAO,MAAM;AACf;AAKO,SAAS,uBACd,IACqC;AACrC,SAAO,SAAS,IAAI,WAAW;AACjC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,32 @@
1
+ /** Input used to resolve gapless trading-time coordinates. */
2
+ export interface TradingTimeMappingInput {
3
+ /** Strictly increasing, unique UTC millisecond observations. */
4
+ readonly timestamps: readonly number[];
5
+ /** Visible logical slot endpoints; fractional values reserve viewport whitespace. */
6
+ readonly logicalRange: readonly [number, number];
7
+ /** Physical local-coordinate endpoints. */
8
+ readonly range: readonly [number, number];
9
+ }
10
+ /** Immutable conversion operations for one owned trading-time observation list. */
11
+ export interface TradingTimeMapping {
12
+ /** Maps an exact supplied timestamp to its physical local coordinate. */
13
+ mapTime(time: number): number;
14
+ /** Finds an exact supplied timestamp's consecutive logical slot. */
15
+ slotAtTime(time: number): number | undefined;
16
+ /** Finds the supplied timestamp at an exact integer logical slot. */
17
+ timeAtSlot(slot: number): number | undefined;
18
+ /** Selects the nearest supplied timestamp to a physical coordinate. */
19
+ nearestTimeAtPosition(position: number): number | undefined;
20
+ /** Inverts a physical coordinate to a possibly fractional logical slot. */
21
+ slotAtPosition(position: number): number;
22
+ }
23
+ /**
24
+ * Creates pure mappings between exact supplied UTC observations, logical slots, and local positions.
25
+ *
26
+ * The mapping owns a frozen copy of timestamps. It creates no timestamps for gaps: exact mapping
27
+ * rejects unknown values, while inverse position mapping can intentionally produce fractional slots.
28
+ *
29
+ * @param input - Observation timestamps plus logical and physical viewport endpoints.
30
+ * @returns Immutable mapping operations with logarithmic timestamp lookup and constant-time slot lookup.
31
+ */
32
+ export declare function createTradingTimeMapping(input: TradingTimeMappingInput): TradingTimeMapping;
@@ -0,0 +1,89 @@
1
+ const DATE_LIMIT = 864e13;
2
+ function finite(value, name) {
3
+ if (typeof value !== "number" || !Number.isFinite(value))
4
+ throw new RangeError(`${name} must be finite.`);
5
+ return value;
6
+ }
7
+ function endpointPair(value, name) {
8
+ const first = finite(value[0], `${name}[0]`);
9
+ const second = finite(value[1], `${name}[1]`);
10
+ if (first === second) throw new RangeError(`${name} endpoints must differ.`);
11
+ return Object.freeze([first, second]);
12
+ }
13
+ function timestamp(value, index) {
14
+ if (!Number.isSafeInteger(value) || Math.abs(value) > DATE_LIMIT)
15
+ throw new RangeError(
16
+ `timestamps[${index}] must be safe integers within Date range UTC milliseconds.`
17
+ );
18
+ return value;
19
+ }
20
+ function indexOf(timestamps, time) {
21
+ let first = 0;
22
+ let last = timestamps.length - 1;
23
+ while (first <= last) {
24
+ const middle = first + Math.floor((last - first) / 2);
25
+ const candidate = timestamps[middle];
26
+ if (candidate === time) return middle;
27
+ if (candidate < time) first = middle + 1;
28
+ else last = middle - 1;
29
+ }
30
+ return -1;
31
+ }
32
+ function createTradingTimeMapping(input) {
33
+ const timestamps = input.timestamps.map(
34
+ (value, index) => timestamp(value, index)
35
+ );
36
+ for (let index = 1; index < timestamps.length; index++) {
37
+ if (timestamps[index - 1] >= timestamps[index])
38
+ throw new RangeError(
39
+ "timestamps must be strictly increasing and unique."
40
+ );
41
+ }
42
+ Object.freeze(timestamps);
43
+ const logicalRange = endpointPair(input.logicalRange, "logicalRange");
44
+ const range = endpointPair(input.range, "range");
45
+ const slotAtPosition = (position) => {
46
+ finite(position, "position");
47
+ return logicalRange[0] + (position - range[0]) * (logicalRange[1] - logicalRange[0]) / (range[1] - range[0]);
48
+ };
49
+ const positionAtSlot = (slot) => range[0] + (slot - logicalRange[0]) * (range[1] - range[0]) / (logicalRange[1] - logicalRange[0]);
50
+ const slotAtTime = (time) => {
51
+ if (!Number.isSafeInteger(time) || Math.abs(time) > DATE_LIMIT)
52
+ return void 0;
53
+ const index = indexOf(timestamps, time);
54
+ return index < 0 ? void 0 : index;
55
+ };
56
+ return Object.freeze({
57
+ mapTime(time) {
58
+ const slot = slotAtTime(time);
59
+ if (slot === void 0)
60
+ throw new RangeError(
61
+ "TradingTimeScale cannot map an unknown timestamp."
62
+ );
63
+ return positionAtSlot(slot);
64
+ },
65
+ slotAtTime,
66
+ timeAtSlot(slot) {
67
+ if (!Number.isInteger(slot)) return void 0;
68
+ return timestamps[slot];
69
+ },
70
+ nearestTimeAtPosition(position) {
71
+ if (timestamps.length === 0) return void 0;
72
+ const slot = slotAtPosition(position);
73
+ const earlier = Math.floor(slot);
74
+ const index = Math.max(
75
+ 0,
76
+ Math.min(
77
+ timestamps.length - 1,
78
+ earlier + (slot - earlier > 0.5 ? 1 : 0)
79
+ )
80
+ );
81
+ return timestamps[index];
82
+ },
83
+ slotAtPosition
84
+ });
85
+ }
86
+ export {
87
+ createTradingTimeMapping
88
+ };
89
+ //# sourceMappingURL=trading-time-mapping.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/features/viz/lib/trading-time-mapping.ts"],
4
+ "sourcesContent": ["const DATE_LIMIT = 8_640_000_000_000_000;\n\n/** Input used to resolve gapless trading-time coordinates. */\nexport interface TradingTimeMappingInput {\n /** Strictly increasing, unique UTC millisecond observations. */\n readonly timestamps: readonly number[];\n /** Visible logical slot endpoints; fractional values reserve viewport whitespace. */\n readonly logicalRange: readonly [number, number];\n /** Physical local-coordinate endpoints. */\n readonly range: readonly [number, number];\n}\n\n/** Immutable conversion operations for one owned trading-time observation list. */\nexport interface TradingTimeMapping {\n /** Maps an exact supplied timestamp to its physical local coordinate. */\n mapTime(time: number): number;\n /** Finds an exact supplied timestamp's consecutive logical slot. */\n slotAtTime(time: number): number | undefined;\n /** Finds the supplied timestamp at an exact integer logical slot. */\n timeAtSlot(slot: number): number | undefined;\n /** Selects the nearest supplied timestamp to a physical coordinate. */\n nearestTimeAtPosition(position: number): number | undefined;\n /** Inverts a physical coordinate to a possibly fractional logical slot. */\n slotAtPosition(position: number): number;\n}\n\nfunction finite(value: number, name: string): number {\n if (typeof value !== \"number\" || !Number.isFinite(value))\n throw new RangeError(`${name} must be finite.`);\n return value;\n}\n\nfunction endpointPair(\n value: readonly [number, number],\n name: string,\n): readonly [number, number] {\n const first = finite(value[0], `${name}[0]`);\n const second = finite(value[1], `${name}[1]`);\n if (first === second) throw new RangeError(`${name} endpoints must differ.`);\n return Object.freeze([first, second]);\n}\n\nfunction timestamp(value: number, index: number): number {\n if (!Number.isSafeInteger(value) || Math.abs(value) > DATE_LIMIT)\n throw new RangeError(\n `timestamps[${index}] must be safe integers within Date range UTC milliseconds.`,\n );\n return value;\n}\n\nfunction indexOf(timestamps: readonly number[], time: number): number {\n let first = 0;\n let last = timestamps.length - 1;\n while (first <= last) {\n const middle = first + Math.floor((last - first) / 2);\n const candidate = timestamps[middle]!;\n if (candidate === time) return middle;\n if (candidate < time) first = middle + 1;\n else last = middle - 1;\n }\n return -1;\n}\n\n/**\n * Creates pure mappings between exact supplied UTC observations, logical slots, and local positions.\n *\n * The mapping owns a frozen copy of timestamps. It creates no timestamps for gaps: exact mapping\n * rejects unknown values, while inverse position mapping can intentionally produce fractional slots.\n *\n * @param input - Observation timestamps plus logical and physical viewport endpoints.\n * @returns Immutable mapping operations with logarithmic timestamp lookup and constant-time slot lookup.\n */\nexport function createTradingTimeMapping(\n input: TradingTimeMappingInput,\n): TradingTimeMapping {\n const timestamps = input.timestamps.map((value, index) =>\n timestamp(value, index),\n );\n for (let index = 1; index < timestamps.length; index++) {\n if (timestamps[index - 1]! >= timestamps[index]!)\n throw new RangeError(\n \"timestamps must be strictly increasing and unique.\",\n );\n }\n Object.freeze(timestamps);\n const logicalRange = endpointPair(input.logicalRange, \"logicalRange\");\n const range = endpointPair(input.range, \"range\");\n const slotAtPosition = (position: number): number => {\n finite(position, \"position\");\n return (\n logicalRange[0] +\n ((position - range[0]) * (logicalRange[1] - logicalRange[0])) /\n (range[1] - range[0])\n );\n };\n const positionAtSlot = (slot: number): number =>\n range[0] +\n ((slot - logicalRange[0]) * (range[1] - range[0])) /\n (logicalRange[1] - logicalRange[0]);\n const slotAtTime = (time: number): number | undefined => {\n if (!Number.isSafeInteger(time) || Math.abs(time) > DATE_LIMIT)\n return undefined;\n const index = indexOf(timestamps, time);\n return index < 0 ? undefined : index;\n };\n return Object.freeze({\n mapTime(time: number): number {\n const slot = slotAtTime(time);\n if (slot === undefined)\n throw new RangeError(\n \"TradingTimeScale cannot map an unknown timestamp.\",\n );\n return positionAtSlot(slot);\n },\n slotAtTime,\n timeAtSlot(slot: number): number | undefined {\n if (!Number.isInteger(slot)) return undefined;\n return timestamps[slot];\n },\n nearestTimeAtPosition(position: number): number | undefined {\n if (timestamps.length === 0) return undefined;\n const slot = slotAtPosition(position);\n const earlier = Math.floor(slot);\n const index = Math.max(\n 0,\n Math.min(\n timestamps.length - 1,\n earlier + (slot - earlier > 0.5 ? 1 : 0),\n ),\n );\n return timestamps[index];\n },\n slotAtPosition,\n });\n}\n"],
5
+ "mappings": "AAAA,MAAM,aAAa;AA0BnB,SAAS,OAAO,OAAe,MAAsB;AACnD,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK;AACrD,UAAM,IAAI,WAAW,GAAG,IAAI,kBAAkB;AAChD,SAAO;AACT;AAEA,SAAS,aACP,OACA,MAC2B;AAC3B,QAAM,QAAQ,OAAO,MAAM,CAAC,GAAG,GAAG,IAAI,KAAK;AAC3C,QAAM,SAAS,OAAO,MAAM,CAAC,GAAG,GAAG,IAAI,KAAK;AAC5C,MAAI,UAAU,OAAQ,OAAM,IAAI,WAAW,GAAG,IAAI,yBAAyB;AAC3E,SAAO,OAAO,OAAO,CAAC,OAAO,MAAM,CAAC;AACtC;AAEA,SAAS,UAAU,OAAe,OAAuB;AACvD,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI;AACpD,UAAM,IAAI;AAAA,MACR,cAAc,KAAK;AAAA,IACrB;AACF,SAAO;AACT;AAEA,SAAS,QAAQ,YAA+B,MAAsB;AACpE,MAAI,QAAQ;AACZ,MAAI,OAAO,WAAW,SAAS;AAC/B,SAAO,SAAS,MAAM;AACpB,UAAM,SAAS,QAAQ,KAAK,OAAO,OAAO,SAAS,CAAC;AACpD,UAAM,YAAY,WAAW,MAAM;AACnC,QAAI,cAAc,KAAM,QAAO;AAC/B,QAAI,YAAY,KAAM,SAAQ,SAAS;AAAA,QAClC,QAAO,SAAS;AAAA,EACvB;AACA,SAAO;AACT;AAWO,SAAS,yBACd,OACoB;AACpB,QAAM,aAAa,MAAM,WAAW;AAAA,IAAI,CAAC,OAAO,UAC9C,UAAU,OAAO,KAAK;AAAA,EACxB;AACA,WAAS,QAAQ,GAAG,QAAQ,WAAW,QAAQ,SAAS;AACtD,QAAI,WAAW,QAAQ,CAAC,KAAM,WAAW,KAAK;AAC5C,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,EACJ;AACA,SAAO,OAAO,UAAU;AACxB,QAAM,eAAe,aAAa,MAAM,cAAc,cAAc;AACpE,QAAM,QAAQ,aAAa,MAAM,OAAO,OAAO;AAC/C,QAAM,iBAAiB,CAAC,aAA6B;AACnD,WAAO,UAAU,UAAU;AAC3B,WACE,aAAa,CAAC,KACZ,WAAW,MAAM,CAAC,MAAM,aAAa,CAAC,IAAI,aAAa,CAAC,MACvD,MAAM,CAAC,IAAI,MAAM,CAAC;AAAA,EAEzB;AACA,QAAM,iBAAiB,CAAC,SACtB,MAAM,CAAC,KACL,OAAO,aAAa,CAAC,MAAM,MAAM,CAAC,IAAI,MAAM,CAAC,MAC5C,aAAa,CAAC,IAAI,aAAa,CAAC;AACrC,QAAM,aAAa,CAAC,SAAqC;AACvD,QAAI,CAAC,OAAO,cAAc,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI;AAClD,aAAO;AACT,UAAM,QAAQ,QAAQ,YAAY,IAAI;AACtC,WAAO,QAAQ,IAAI,SAAY;AAAA,EACjC;AACA,SAAO,OAAO,OAAO;AAAA,IACnB,QAAQ,MAAsB;AAC5B,YAAM,OAAO,WAAW,IAAI;AAC5B,UAAI,SAAS;AACX,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AACF,aAAO,eAAe,IAAI;AAAA,IAC5B;AAAA,IACA;AAAA,IACA,WAAW,MAAkC;AAC3C,UAAI,CAAC,OAAO,UAAU,IAAI,EAAG,QAAO;AACpC,aAAO,WAAW,IAAI;AAAA,IACxB;AAAA,IACA,sBAAsB,UAAsC;AAC1D,UAAI,WAAW,WAAW,EAAG,QAAO;AACpC,YAAM,OAAO,eAAe,QAAQ;AACpC,YAAM,UAAU,KAAK,MAAM,IAAI;AAC/B,YAAM,QAAQ,KAAK;AAAA,QACjB;AAAA,QACA,KAAK;AAAA,UACH,WAAW,SAAS;AAAA,UACpB,WAAW,OAAO,UAAU,MAAM,IAAI;AAAA,QACxC;AAAA,MACF;AACA,aAAO,WAAW,KAAK;AAAA,IACzB;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
6
+ "names": []
7
+ }
@@ -0,0 +1,83 @@
1
+ import { type SignalValue, type PibblNode, type Signal } from "@pibbl/core";
2
+ import type { ScaleId, ScaleRange, ScaleLayoutStyle } from "./types.js";
3
+ import type { SignalStyle } from "@pibbl/core/internal";
4
+ /** Controlled gapless observation slots; UTCScale retains elapsed-time semantics.
5
+ * @see {@link TradingTimeScale}
6
+ */
7
+ export interface TradingTimeScaleProps {
8
+ /** Ancestor scale identity. */ readonly id: ScaleId;
9
+ /** Strictly increasing, unique UTC-millisecond observations; copied by the mapping. */ readonly timestamps: SignalValue<readonly number[]>;
10
+ /** Visible logical slot endpoints, possibly fractional/reversed; default covers supplied slots. */ readonly logicalRange?: SignalValue<readonly [number, number]>;
11
+ /** Output in local logical units or the receiving allocation's width/height. */ readonly range: SignalValue<ScaleRange>;
12
+ /** Reverses physical output without reordering supplied observations. */ readonly reverse?: SignalValue<boolean>;
13
+ /** Receiving scale frame allocation and layout participation. */ readonly style?: SignalValue<SignalStyle<ScaleLayoutStyle>>;
14
+ /** Descendant visualization composition. */ readonly children?: PibblNode;
15
+ }
16
+ /** Dedicated exact-time/slot mapping; no interpolated UTC timestamps are fabricated.
17
+ * @see {@link TradingTimeScale}
18
+ */
19
+ export interface ResolvedTradingTimeScale {
20
+ /** Describes this resolved mapping. */ readonly type: "trading-time";
21
+ /** Owned supplied timestamps in ascending order, also used as the data domain. */ readonly timestamps: readonly number[];
22
+ /** Owned supplied timestamp domain, not logical slot endpoints. */ readonly domain: readonly number[];
23
+ /** Controlled viewport endpoints in logical slot units. */ readonly logicalRange: readonly [
24
+ number,
25
+ number
26
+ ];
27
+ /** Output local-logical endpoints. */ readonly range: readonly [
28
+ number,
29
+ number
30
+ ];
31
+ /** Receiving allocation in local logical units. */ readonly frame: Readonly<{
32
+ /** Local allocation x. */ x: number;
33
+ /** Local allocation y. */ y: number;
34
+ /** Local width. */ width: number;
35
+ /** Local height. */ height: number;
36
+ }>;
37
+ /** Maps an exact supplied UTC timestamp; unknown timestamps throw.
38
+ * @param time - Supplied UTC milliseconds.
39
+ * @returns Series-local coordinate.
40
+ */ map(time: number): number;
41
+ /** Maps a possibly fractional logical slot, including viewport whitespace.
42
+ * @param slot - Logical observation slot.
43
+ * @returns Series-local coordinate.
44
+ */ mapSlot(slot: number): number;
45
+ /** Exact timestamp lookup.
46
+ * @param time - UTC milliseconds.
47
+ * @returns Supplied slot index, or undefined.
48
+ */ slotAtTime(time: number): number | undefined;
49
+ /** Exact integer slot lookup.
50
+ * @param slot - Integer logical observation slot.
51
+ * @returns Supplied timestamp, or undefined.
52
+ */ timeAtSlot(slot: number): number | undefined;
53
+ /** Inverts local geometry to fractional slots.
54
+ * @param position - Series-local logical coordinate.
55
+ * @returns Fractional logical slot.
56
+ */ slotAtPosition(position: number): number;
57
+ /** Selects a supplied timestamp; ties choose earlier, outside positions clamp.
58
+ * @param position - Series-local logical coordinate.
59
+ * @returns Supplied UTC milliseconds, or undefined for empty input.
60
+ */ nearestTimeAtPosition(position: number): number | undefined;
61
+ /** Chooses at most count visible supplied observations as date ticks.
62
+ * @param count - Integer maximum from zero through 100, default five.
63
+ * @returns Original UTC timestamps in physical axis order.
64
+ */ ticks(count?: number): readonly number[];
65
+ /** Formats supplied or finite valid UTC timestamps without inferring sessions.
66
+ * @param time - UTC milliseconds in Date range.
67
+ * @returns ISO UTC timestamp.
68
+ */ formatTick(time: number): string;
69
+ }
70
+ /**
71
+ * Reads a stable dedicated ancestor trading-time signal.
72
+ * @param id - Ancestor TradingTimeScale identity.
73
+ * @returns Readonly mapping with explicit timestamp and logical-slot operations.
74
+ * @see {@link TradingTimeScale}
75
+ */
76
+ export declare function useTradingTimeScale(id: ScaleId): Signal<ResolvedTradingTimeScale>;
77
+ /**
78
+ * Provides gapless positions for ordered supplied observations, leaving application-owned viewport control explicit.
79
+ * @param props - Timestamps, optional logical viewport, output range and children.
80
+ * @returns Descendant composition in the named mapping scope.
81
+ * @see {@link TradingTimeScaleProps}
82
+ */
83
+ export declare function TradingTimeScale(props: TradingTimeScaleProps): PibblNode;
@@ -0,0 +1,96 @@
1
+ import {
2
+ resolveSignalValue,
3
+ useLayoutBox
4
+ } from "@pibbl/core";
5
+ import { createTradingTimeMapping } from "./trading-time-mapping.js";
6
+ import { resolveLinearScale } from "./linear-scale.js";
7
+ import { useScaleProvider } from "./scale-provider.js";
8
+ import { scaleView } from "./scale-view.js";
9
+ const views = /* @__PURE__ */ new WeakMap();
10
+ function useTradingTimeScale(id) {
11
+ return scaleView(
12
+ views,
13
+ id,
14
+ "useTradingTimeScale",
15
+ (kind) => kind === "trading-time"
16
+ );
17
+ }
18
+ function TradingTimeScale(props) {
19
+ const { width, height } = useLayoutBox();
20
+ useScaleProvider(
21
+ props.id,
22
+ "trading-time",
23
+ () => {
24
+ const timestamps = Object.freeze([
25
+ ...resolveSignalValue(props.timestamps)
26
+ ]);
27
+ const logicalRange = Object.freeze([
28
+ ...props.logicalRange ? resolveSignalValue(props.logicalRange) : [-0.5, Math.max(0.5, timestamps.length - 0.5)]
29
+ ]);
30
+ const linear = resolveLinearScale(
31
+ logicalRange,
32
+ resolveSignalValue(props.range),
33
+ resolveSignalValue(props.reverse ?? false),
34
+ width,
35
+ height
36
+ );
37
+ const mapping = createTradingTimeMapping({
38
+ timestamps,
39
+ logicalRange,
40
+ range: linear.range
41
+ });
42
+ return Object.freeze({
43
+ type: "trading-time",
44
+ timestamps,
45
+ domain: timestamps,
46
+ logicalRange,
47
+ range: linear.range,
48
+ frame: linear.frame,
49
+ map: mapping.mapTime,
50
+ mapSlot: linear.map,
51
+ slotAtTime: mapping.slotAtTime,
52
+ timeAtSlot: mapping.timeAtSlot,
53
+ slotAtPosition: mapping.slotAtPosition,
54
+ nearestTimeAtPosition: mapping.nearestTimeAtPosition,
55
+ ticks(count = 5) {
56
+ if (!Number.isInteger(count) || count < 0 || count > 100)
57
+ throw new RangeError(
58
+ "TradingTime ticks count must be an integer 0\u2013100."
59
+ );
60
+ const lo = Math.max(0, Math.ceil(Math.min(...logicalRange))), hi = Math.min(
61
+ timestamps.length - 1,
62
+ Math.floor(Math.max(...logicalRange))
63
+ ), n = Math.max(0, hi - lo + 1), m = Math.min(n, count);
64
+ const result = Array.from(
65
+ { length: m },
66
+ (_, i) => timestamps[lo + (m === 1 ? 0 : Math.round(i * (n - 1) / (m - 1)))]
67
+ );
68
+ return Object.freeze(
69
+ logicalRange[0] > logicalRange[1] ? result.reverse() : result
70
+ );
71
+ },
72
+ formatTick(time) {
73
+ if (!Number.isFinite(time) || Math.abs(time) > 864e13)
74
+ throw new RangeError(
75
+ "TradingTime format requires UTC milliseconds within Date range."
76
+ );
77
+ return new Date(time).toISOString();
78
+ }
79
+ });
80
+ },
81
+ [
82
+ props.timestamps,
83
+ props.logicalRange,
84
+ props.range,
85
+ props.reverse,
86
+ width,
87
+ height
88
+ ]
89
+ );
90
+ return props.children;
91
+ }
92
+ export {
93
+ TradingTimeScale,
94
+ useTradingTimeScale
95
+ };
96
+ //# sourceMappingURL=trading-time-scale.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/features/viz/lib/trading-time-scale.ts"],
4
+ "sourcesContent": ["import {\n resolveSignalValue,\n useLayoutBox,\n type SignalValue,\n type PibblNode,\n type Signal,\n} from \"@pibbl/core\";\nimport type {\n ScaleId,\n ScaleRange,\n ScaleLayoutStyle,\n ResolvedScale,\n} from \"./types.js\";\nimport type { SignalStyle } from \"@pibbl/core/internal\";\nimport { createTradingTimeMapping } from \"./trading-time-mapping.js\";\nimport { resolveLinearScale } from \"./linear-scale.js\";\nimport { useScaleProvider } from \"./scale-provider.js\";\nimport { scaleView } from \"./scale-view.js\";\n\n/** Controlled gapless observation slots; UTCScale retains elapsed-time semantics.\n * @see {@link TradingTimeScale}\n */\nexport interface TradingTimeScaleProps {\n /** Ancestor scale identity. */ readonly id: ScaleId;\n /** Strictly increasing, unique UTC-millisecond observations; copied by the mapping. */ readonly timestamps: SignalValue<\n readonly number[]\n >;\n /** Visible logical slot endpoints, possibly fractional/reversed; default covers supplied slots. */ readonly logicalRange?: SignalValue<\n readonly [number, number]\n >;\n /** Output in local logical units or the receiving allocation's width/height. */ readonly range: SignalValue<ScaleRange>;\n /** Reverses physical output without reordering supplied observations. */ readonly reverse?: SignalValue<boolean>;\n /** Receiving scale frame allocation and layout participation. */ readonly style?: SignalValue<\n SignalStyle<ScaleLayoutStyle>\n >;\n /** Descendant visualization composition. */ readonly children?: PibblNode;\n}\n/** Dedicated exact-time/slot mapping; no interpolated UTC timestamps are fabricated.\n * @see {@link TradingTimeScale}\n */\nexport interface ResolvedTradingTimeScale {\n /** Describes this resolved mapping. */ readonly type: \"trading-time\";\n /** Owned supplied timestamps in ascending order, also used as the data domain. */ readonly timestamps: readonly number[];\n /** Owned supplied timestamp domain, not logical slot endpoints. */ readonly domain: readonly number[];\n /** Controlled viewport endpoints in logical slot units. */ readonly logicalRange: readonly [\n number,\n number,\n ];\n /** Output local-logical endpoints. */ readonly range: readonly [\n number,\n number,\n ];\n /** Receiving allocation in local logical units. */ readonly frame: Readonly<{\n /** Local allocation x. */ x: number;\n /** Local allocation y. */ y: number;\n /** Local width. */ width: number;\n /** Local height. */ height: number;\n }>;\n /** Maps an exact supplied UTC timestamp; unknown timestamps throw.\n * @param time - Supplied UTC milliseconds.\n * @returns Series-local coordinate.\n */ map(time: number): number;\n /** Maps a possibly fractional logical slot, including viewport whitespace.\n * @param slot - Logical observation slot.\n * @returns Series-local coordinate.\n */ mapSlot(slot: number): number;\n /** Exact timestamp lookup.\n * @param time - UTC milliseconds.\n * @returns Supplied slot index, or undefined.\n */ slotAtTime(time: number): number | undefined;\n /** Exact integer slot lookup.\n * @param slot - Integer logical observation slot.\n * @returns Supplied timestamp, or undefined.\n */ timeAtSlot(slot: number): number | undefined;\n /** Inverts local geometry to fractional slots.\n * @param position - Series-local logical coordinate.\n * @returns Fractional logical slot.\n */ slotAtPosition(position: number): number;\n /** Selects a supplied timestamp; ties choose earlier, outside positions clamp.\n * @param position - Series-local logical coordinate.\n * @returns Supplied UTC milliseconds, or undefined for empty input.\n */ nearestTimeAtPosition(position: number): number | undefined;\n /** Chooses at most count visible supplied observations as date ticks.\n * @param count - Integer maximum from zero through 100, default five.\n * @returns Original UTC timestamps in physical axis order.\n */ ticks(count?: number): readonly number[];\n /** Formats supplied or finite valid UTC timestamps without inferring sessions.\n * @param time - UTC milliseconds in Date range.\n * @returns ISO UTC timestamp.\n */ formatTick(time: number): string;\n}\nconst views = new WeakMap<\n Signal<ResolvedScale>,\n Signal<ResolvedTradingTimeScale>\n>();\n/**\n * Reads a stable dedicated ancestor trading-time signal.\n * @param id - Ancestor TradingTimeScale identity.\n * @returns Readonly mapping with explicit timestamp and logical-slot operations.\n * @see {@link TradingTimeScale}\n */\nexport function useTradingTimeScale(\n id: ScaleId,\n): Signal<ResolvedTradingTimeScale> {\n return scaleView(\n views,\n id,\n \"useTradingTimeScale\",\n (kind) => kind === \"trading-time\",\n );\n}\n/**\n * Provides gapless positions for ordered supplied observations, leaving application-owned viewport control explicit.\n * @param props - Timestamps, optional logical viewport, output range and children.\n * @returns Descendant composition in the named mapping scope.\n * @see {@link TradingTimeScaleProps}\n */\nexport function TradingTimeScale(props: TradingTimeScaleProps): PibblNode {\n const { width, height } = useLayoutBox();\n useScaleProvider(\n props.id,\n \"trading-time\",\n () => {\n const timestamps = Object.freeze([\n ...resolveSignalValue(props.timestamps),\n ]);\n const logicalRange = Object.freeze([\n ...(props.logicalRange\n ? resolveSignalValue(props.logicalRange)\n : [-0.5, Math.max(0.5, timestamps.length - 0.5)]),\n ]) as readonly [number, number];\n const linear = resolveLinearScale(\n logicalRange,\n resolveSignalValue(props.range),\n resolveSignalValue(props.reverse ?? false),\n width,\n height,\n );\n const mapping = createTradingTimeMapping({\n timestamps,\n logicalRange,\n range: linear.range,\n });\n return Object.freeze({\n type: \"trading-time\" as const,\n timestamps,\n domain: timestamps,\n logicalRange,\n range: linear.range,\n frame: linear.frame,\n map: mapping.mapTime,\n mapSlot: linear.map,\n slotAtTime: mapping.slotAtTime,\n timeAtSlot: mapping.timeAtSlot,\n slotAtPosition: mapping.slotAtPosition,\n nearestTimeAtPosition: mapping.nearestTimeAtPosition,\n ticks(count = 5) {\n if (!Number.isInteger(count) || count < 0 || count > 100)\n throw new RangeError(\n \"TradingTime ticks count must be an integer 0\u2013100.\",\n );\n const lo = Math.max(0, Math.ceil(Math.min(...logicalRange))),\n hi = Math.min(\n timestamps.length - 1,\n Math.floor(Math.max(...logicalRange)),\n ),\n n = Math.max(0, hi - lo + 1),\n m = Math.min(n, count);\n const result = Array.from(\n { length: m },\n (_, i) =>\n timestamps[\n lo + (m === 1 ? 0 : Math.round((i * (n - 1)) / (m - 1)))\n ]!,\n );\n return Object.freeze(\n logicalRange[0] > logicalRange[1] ? result.reverse() : result,\n );\n },\n formatTick(time: number) {\n if (!Number.isFinite(time) || Math.abs(time) > 8_640_000_000_000_000)\n throw new RangeError(\n \"TradingTime format requires UTC milliseconds within Date range.\",\n );\n return new Date(time).toISOString();\n },\n });\n },\n [\n props.timestamps,\n props.logicalRange,\n props.range,\n props.reverse,\n width,\n height,\n ],\n );\n return props.children;\n}\n"],
5
+ "mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AAQP,SAAS,gCAAgC;AACzC,SAAS,0BAA0B;AACnC,SAAS,wBAAwB;AACjC,SAAS,iBAAiB;AA0E1B,MAAM,QAAQ,oBAAI,QAGhB;AAOK,SAAS,oBACd,IACkC;AAClC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC,SAAS,SAAS;AAAA,EACrB;AACF;AAOO,SAAS,iBAAiB,OAAyC;AACxE,QAAM,EAAE,OAAO,OAAO,IAAI,aAAa;AACvC;AAAA,IACE,MAAM;AAAA,IACN;AAAA,IACA,MAAM;AACJ,YAAM,aAAa,OAAO,OAAO;AAAA,QAC/B,GAAG,mBAAmB,MAAM,UAAU;AAAA,MACxC,CAAC;AACD,YAAM,eAAe,OAAO,OAAO;AAAA,QACjC,GAAI,MAAM,eACN,mBAAmB,MAAM,YAAY,IACrC,CAAC,MAAM,KAAK,IAAI,KAAK,WAAW,SAAS,GAAG,CAAC;AAAA,MACnD,CAAC;AACD,YAAM,SAAS;AAAA,QACb;AAAA,QACA,mBAAmB,MAAM,KAAK;AAAA,QAC9B,mBAAmB,MAAM,WAAW,KAAK;AAAA,QACzC;AAAA,QACA;AAAA,MACF;AACA,YAAM,UAAU,yBAAyB;AAAA,QACvC;AAAA,QACA;AAAA,QACA,OAAO,OAAO;AAAA,MAChB,CAAC;AACD,aAAO,OAAO,OAAO;AAAA,QACnB,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA,OAAO,OAAO;AAAA,QACd,OAAO,OAAO;AAAA,QACd,KAAK,QAAQ;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,YAAY,QAAQ;AAAA,QACpB,YAAY,QAAQ;AAAA,QACpB,gBAAgB,QAAQ;AAAA,QACxB,uBAAuB,QAAQ;AAAA,QAC/B,MAAM,QAAQ,GAAG;AACf,cAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,QAAQ;AACnD,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AACF,gBAAM,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,IAAI,GAAG,YAAY,CAAC,CAAC,GACzD,KAAK,KAAK;AAAA,YACR,WAAW,SAAS;AAAA,YACpB,KAAK,MAAM,KAAK,IAAI,GAAG,YAAY,CAAC;AAAA,UACtC,GACA,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK,CAAC,GAC3B,IAAI,KAAK,IAAI,GAAG,KAAK;AACvB,gBAAM,SAAS,MAAM;AAAA,YACnB,EAAE,QAAQ,EAAE;AAAA,YACZ,CAAC,GAAG,MACF,WACE,MAAM,MAAM,IAAI,IAAI,KAAK,MAAO,KAAK,IAAI,MAAO,IAAI,EAAE,EACxD;AAAA,UACJ;AACA,iBAAO,OAAO;AAAA,YACZ,aAAa,CAAC,IAAI,aAAa,CAAC,IAAI,OAAO,QAAQ,IAAI;AAAA,UACzD;AAAA,QACF;AAAA,QACA,WAAW,MAAc;AACvB,cAAI,CAAC,OAAO,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI;AAC7C,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AACF,iBAAO,IAAI,KAAK,IAAI,EAAE,YAAY;AAAA,QACpC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO,MAAM;AACf;",
6
+ "names": []
7
+ }