graphein 0.20.0 → 0.22.0

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 (319) hide show
  1. package/dist/animation/animate.d.ts +6 -1
  2. package/dist/animation/animate.d.ts.map +1 -1
  3. package/dist/animation/animate.js +2 -2
  4. package/dist/animation/animate.js.map +2 -2
  5. package/dist/animation/env.d.ts +5 -0
  6. package/dist/animation/env.d.ts.map +1 -1
  7. package/dist/animation/env.js +4 -0
  8. package/dist/animation/env.js.map +2 -2
  9. package/dist/animation/index.d.ts +1 -0
  10. package/dist/animation/index.d.ts.map +1 -1
  11. package/dist/animation/index.js +1 -0
  12. package/dist/animation/index.js.map +2 -2
  13. package/dist/animation/stagger.d.ts +13 -0
  14. package/dist/animation/stagger.d.ts.map +1 -0
  15. package/dist/animation/stagger.js +13 -0
  16. package/dist/animation/stagger.js.map +7 -0
  17. package/dist/axes/draw.d.ts +5 -1
  18. package/dist/axes/draw.d.ts.map +1 -1
  19. package/dist/axes/draw.js +13 -1
  20. package/dist/axes/draw.js.map +2 -2
  21. package/dist/axes/morph.d.ts +111 -0
  22. package/dist/axes/morph.d.ts.map +1 -0
  23. package/dist/axes/morph.js +207 -0
  24. package/dist/axes/morph.js.map +7 -0
  25. package/dist/axes/overlay.d.ts.map +1 -1
  26. package/dist/axes/overlay.js +88 -25
  27. package/dist/axes/overlay.js.map +2 -2
  28. package/dist/axes/text.d.ts +2 -0
  29. package/dist/axes/text.d.ts.map +1 -1
  30. package/dist/axes/text.js +1 -0
  31. package/dist/axes/text.js.map +2 -2
  32. package/dist/axes/tickLabels.d.ts +2 -0
  33. package/dist/axes/tickLabels.d.ts.map +1 -1
  34. package/dist/axes/tickLabels.js +2 -2
  35. package/dist/axes/tickLabels.js.map +2 -2
  36. package/dist/charts/annotations.d.ts +9 -3
  37. package/dist/charts/annotations.d.ts.map +1 -1
  38. package/dist/charts/annotations.js +82 -27
  39. package/dist/charts/annotations.js.map +2 -2
  40. package/dist/charts/area.d.ts +37 -1
  41. package/dist/charts/area.d.ts.map +1 -1
  42. package/dist/charts/area.js +35 -17
  43. package/dist/charts/area.js.map +2 -2
  44. package/dist/charts/bar.d.ts +53 -0
  45. package/dist/charts/bar.d.ts.map +1 -1
  46. package/dist/charts/bar.js +117 -83
  47. package/dist/charts/bar.js.map +2 -2
  48. package/dist/charts/box.d.ts +31 -0
  49. package/dist/charts/box.d.ts.map +1 -1
  50. package/dist/charts/box.js +93 -70
  51. package/dist/charts/box.js.map +2 -2
  52. package/dist/charts/bubbleMap.d.ts +20 -0
  53. package/dist/charts/bubbleMap.d.ts.map +1 -0
  54. package/dist/charts/bubbleMap.js +951 -0
  55. package/dist/charts/bubbleMap.js.map +7 -0
  56. package/dist/charts/bullet.d.ts.map +1 -1
  57. package/dist/charts/bullet.js +69 -51
  58. package/dist/charts/bullet.js.map +2 -2
  59. package/dist/charts/calendarHeatmap.d.ts.map +1 -1
  60. package/dist/charts/calendarHeatmap.js +56 -19
  61. package/dist/charts/calendarHeatmap.js.map +2 -2
  62. package/dist/charts/candlestick.d.ts +40 -0
  63. package/dist/charts/candlestick.d.ts.map +1 -0
  64. package/dist/charts/candlestick.js +325 -0
  65. package/dist/charts/candlestick.js.map +7 -0
  66. package/dist/charts/choropleth.d.ts.map +1 -1
  67. package/dist/charts/choropleth.js +46 -67
  68. package/dist/charts/choropleth.js.map +2 -2
  69. package/dist/charts/combo.d.ts.map +1 -1
  70. package/dist/charts/combo.js +127 -27
  71. package/dist/charts/combo.js.map +3 -3
  72. package/dist/charts/dumbbell.d.ts.map +1 -1
  73. package/dist/charts/dumbbell.js +100 -31
  74. package/dist/charts/dumbbell.js.map +2 -2
  75. package/dist/charts/funnel.d.ts.map +1 -1
  76. package/dist/charts/funnel.js +93 -28
  77. package/dist/charts/funnel.js.map +3 -3
  78. package/dist/charts/gantt.d.ts +22 -0
  79. package/dist/charts/gantt.d.ts.map +1 -0
  80. package/dist/charts/gantt.js +564 -0
  81. package/dist/charts/gantt.js.map +7 -0
  82. package/dist/charts/gauge.d.ts.map +1 -1
  83. package/dist/charts/gauge.js +30 -4
  84. package/dist/charts/gauge.js.map +2 -2
  85. package/dist/charts/geo.d.ts +87 -0
  86. package/dist/charts/geo.d.ts.map +1 -0
  87. package/dist/charts/geo.js +140 -0
  88. package/dist/charts/geo.js.map +7 -0
  89. package/dist/charts/geometry.d.ts +20 -0
  90. package/dist/charts/geometry.d.ts.map +1 -0
  91. package/dist/charts/geometry.js +25 -0
  92. package/dist/charts/geometry.js.map +7 -0
  93. package/dist/charts/heatmap.d.ts.map +1 -1
  94. package/dist/charts/heatmap.js +58 -49
  95. package/dist/charts/heatmap.js.map +2 -2
  96. package/dist/charts/histogram.d.ts +1 -1
  97. package/dist/charts/histogram.d.ts.map +1 -1
  98. package/dist/charts/histogram.js +49 -31
  99. package/dist/charts/histogram.js.map +2 -2
  100. package/dist/charts/index.d.ts +35 -1
  101. package/dist/charts/index.d.ts.map +1 -1
  102. package/dist/charts/index.js +12 -0
  103. package/dist/charts/index.js.map +2 -2
  104. package/dist/charts/legibility.d.ts +38 -0
  105. package/dist/charts/legibility.d.ts.map +1 -0
  106. package/dist/charts/legibility.js +72 -0
  107. package/dist/charts/legibility.js.map +7 -0
  108. package/dist/charts/line.d.ts +39 -1
  109. package/dist/charts/line.d.ts.map +1 -1
  110. package/dist/charts/line.js +48 -16
  111. package/dist/charts/line.js.map +2 -2
  112. package/dist/charts/matrix.d.ts +2 -1
  113. package/dist/charts/matrix.d.ts.map +1 -1
  114. package/dist/charts/matrix.js +481 -319
  115. package/dist/charts/matrix.js.map +3 -3
  116. package/dist/charts/morphFrame.d.ts +83 -0
  117. package/dist/charts/morphFrame.d.ts.map +1 -0
  118. package/dist/charts/morphFrame.js +128 -0
  119. package/dist/charts/morphFrame.js.map +7 -0
  120. package/dist/charts/pie.d.ts.map +1 -1
  121. package/dist/charts/pie.js +89 -26
  122. package/dist/charts/pie.js.map +2 -2
  123. package/dist/charts/pieState.d.ts +27 -0
  124. package/dist/charts/pieState.d.ts.map +1 -0
  125. package/dist/charts/pieState.js +55 -0
  126. package/dist/charts/pieState.js.map +7 -0
  127. package/dist/charts/radar.d.ts +62 -0
  128. package/dist/charts/radar.d.ts.map +1 -0
  129. package/dist/charts/radar.js +912 -0
  130. package/dist/charts/radar.js.map +7 -0
  131. package/dist/charts/radialBar.d.ts +60 -0
  132. package/dist/charts/radialBar.d.ts.map +1 -0
  133. package/dist/charts/radialBar.js +708 -0
  134. package/dist/charts/radialBar.js.map +7 -0
  135. package/dist/charts/sankey.d.ts.map +1 -1
  136. package/dist/charts/sankey.js +223 -57
  137. package/dist/charts/sankey.js.map +3 -3
  138. package/dist/charts/scatter.d.ts +31 -0
  139. package/dist/charts/scatter.d.ts.map +1 -1
  140. package/dist/charts/scatter.js +48 -12
  141. package/dist/charts/scatter.js.map +2 -2
  142. package/dist/charts/slope.d.ts.map +1 -1
  143. package/dist/charts/slope.js +55 -3
  144. package/dist/charts/slope.js.map +2 -2
  145. package/dist/charts/sunburst.d.ts +14 -0
  146. package/dist/charts/sunburst.d.ts.map +1 -0
  147. package/dist/charts/sunburst.js +885 -0
  148. package/dist/charts/sunburst.js.map +7 -0
  149. package/dist/charts/table.d.ts +2 -1
  150. package/dist/charts/table.d.ts.map +1 -1
  151. package/dist/charts/table.js +214 -224
  152. package/dist/charts/table.js.map +3 -3
  153. package/dist/charts/tableView/canvas.d.ts +16 -1
  154. package/dist/charts/tableView/canvas.d.ts.map +1 -1
  155. package/dist/charts/tableView/canvas.js +361 -252
  156. package/dist/charts/tableView/canvas.js.map +3 -3
  157. package/dist/charts/tableView/conditional.d.ts +66 -40
  158. package/dist/charts/tableView/conditional.d.ts.map +1 -1
  159. package/dist/charts/tableView/conditional.js +163 -256
  160. package/dist/charts/tableView/conditional.js.map +3 -3
  161. package/dist/charts/tableView/dom.d.ts +26 -2
  162. package/dist/charts/tableView/dom.d.ts.map +1 -1
  163. package/dist/charts/tableView/dom.js +609 -269
  164. package/dist/charts/tableView/dom.js.map +3 -3
  165. package/dist/charts/tableView/layout.d.ts +22 -0
  166. package/dist/charts/tableView/layout.d.ts.map +1 -0
  167. package/dist/charts/tableView/layout.js +246 -0
  168. package/dist/charts/tableView/layout.js.map +7 -0
  169. package/dist/charts/tableView/sketch.d.ts +3 -2
  170. package/dist/charts/tableView/sketch.d.ts.map +1 -1
  171. package/dist/charts/tableView/sketch.js +2 -2
  172. package/dist/charts/tableView/sketch.js.map +2 -2
  173. package/dist/charts/tableView/sketchBar.d.ts +7 -0
  174. package/dist/charts/tableView/sketchBar.d.ts.map +1 -0
  175. package/dist/charts/tableView/sketchBar.js +32 -0
  176. package/dist/charts/tableView/sketchBar.js.map +7 -0
  177. package/dist/charts/tableView/sort.d.ts +9 -0
  178. package/dist/charts/tableView/sort.d.ts.map +1 -0
  179. package/dist/charts/tableView/sort.js +70 -0
  180. package/dist/charts/tableView/sort.js.map +7 -0
  181. package/dist/charts/tableView/sparkline.d.ts +30 -0
  182. package/dist/charts/tableView/sparkline.d.ts.map +1 -0
  183. package/dist/charts/tableView/sparkline.js +63 -0
  184. package/dist/charts/tableView/sparkline.js.map +7 -0
  185. package/dist/charts/tableView/style.d.ts +67 -0
  186. package/dist/charts/tableView/style.d.ts.map +1 -0
  187. package/dist/charts/tableView/style.js +131 -0
  188. package/dist/charts/tableView/style.js.map +7 -0
  189. package/dist/charts/tableView/types.d.ts +69 -46
  190. package/dist/charts/tableView/types.d.ts.map +1 -1
  191. package/dist/charts/tableView/types.js +22 -87
  192. package/dist/charts/tableView/types.js.map +2 -2
  193. package/dist/charts/tableView.d.ts +10 -5
  194. package/dist/charts/tableView.d.ts.map +1 -1
  195. package/dist/charts/tableView.js +12 -8
  196. package/dist/charts/tableView.js.map +2 -2
  197. package/dist/charts/treemap.d.ts.map +1 -1
  198. package/dist/charts/treemap.js +177 -68
  199. package/dist/charts/treemap.js.map +3 -3
  200. package/dist/charts/trendline.d.ts +13 -5
  201. package/dist/charts/trendline.d.ts.map +1 -1
  202. package/dist/charts/trendline.js +205 -56
  203. package/dist/charts/trendline.js.map +2 -2
  204. package/dist/charts/waterfall.d.ts.map +1 -1
  205. package/dist/charts/waterfall.js +76 -5
  206. package/dist/charts/waterfall.js.map +2 -2
  207. package/dist/index.d.ts +1 -1
  208. package/dist/index.js +1 -1
  209. package/dist/index.js.map +1 -1
  210. package/dist/interaction/cartesian.d.ts +4 -1
  211. package/dist/interaction/cartesian.d.ts.map +1 -1
  212. package/dist/interaction/cartesian.js +104 -34
  213. package/dist/interaction/cartesian.js.map +2 -2
  214. package/dist/interaction/controller.d.ts +29 -1
  215. package/dist/interaction/controller.d.ts.map +1 -1
  216. package/dist/interaction/controller.js +131 -8
  217. package/dist/interaction/controller.js.map +2 -2
  218. package/dist/interaction/focus.d.ts +23 -0
  219. package/dist/interaction/focus.d.ts.map +1 -0
  220. package/dist/interaction/focus.js +65 -0
  221. package/dist/interaction/focus.js.map +7 -0
  222. package/dist/interaction/tooltip.d.ts +6 -0
  223. package/dist/interaction/tooltip.d.ts.map +1 -1
  224. package/dist/interaction/tooltip.js +41 -16
  225. package/dist/interaction/tooltip.js.map +2 -2
  226. package/dist/interaction/types.d.ts +19 -0
  227. package/dist/interaction/types.d.ts.map +1 -1
  228. package/dist/interaction/veil.d.ts +25 -0
  229. package/dist/interaction/veil.d.ts.map +1 -0
  230. package/dist/interaction/veil.js +35 -0
  231. package/dist/interaction/veil.js.map +7 -0
  232. package/dist/pivot/pivot.d.ts +18 -0
  233. package/dist/pivot/pivot.d.ts.map +1 -1
  234. package/dist/pivot/pivot.js +46 -34
  235. package/dist/pivot/pivot.js.map +2 -2
  236. package/dist/render/chromeMotion.d.ts +65 -0
  237. package/dist/render/chromeMotion.d.ts.map +1 -0
  238. package/dist/render/chromeMotion.js +79 -0
  239. package/dist/render/chromeMotion.js.map +7 -0
  240. package/dist/render/pathSample.d.ts +24 -0
  241. package/dist/render/pathSample.d.ts.map +1 -0
  242. package/dist/render/pathSample.js +76 -0
  243. package/dist/render/pathSample.js.map +7 -0
  244. package/dist/render/transient.d.ts +18 -0
  245. package/dist/render/transient.d.ts.map +1 -0
  246. package/dist/render/transient.js +19 -0
  247. package/dist/render/transient.js.map +7 -0
  248. package/dist/runtime/candlestick.d.ts +112 -0
  249. package/dist/runtime/candlestick.d.ts.map +1 -0
  250. package/dist/runtime/candlestick.js +531 -0
  251. package/dist/runtime/candlestick.js.map +7 -0
  252. package/dist/runtime/cartesian.d.ts +14 -3
  253. package/dist/runtime/cartesian.d.ts.map +1 -1
  254. package/dist/runtime/cartesian.js.map +2 -2
  255. package/dist/runtime/chartAnimation.d.ts +54 -7
  256. package/dist/runtime/chartAnimation.d.ts.map +1 -1
  257. package/dist/runtime/chartAnimation.js +146 -28
  258. package/dist/runtime/chartAnimation.js.map +2 -2
  259. package/dist/runtime/chartRuntime.d.ts +42 -0
  260. package/dist/runtime/chartRuntime.d.ts.map +1 -1
  261. package/dist/runtime/chartRuntime.js +196 -30
  262. package/dist/runtime/chartRuntime.js.map +2 -2
  263. package/dist/runtime/dashboardDom.d.ts.map +1 -1
  264. package/dist/runtime/dashboardDom.js +45 -0
  265. package/dist/runtime/dashboardDom.js.map +2 -2
  266. package/dist/runtime/facet.d.ts +1 -1
  267. package/dist/runtime/facet.d.ts.map +1 -1
  268. package/dist/runtime/gantt.d.ts +137 -0
  269. package/dist/runtime/gantt.d.ts.map +1 -0
  270. package/dist/runtime/gantt.js +647 -0
  271. package/dist/runtime/gantt.js.map +7 -0
  272. package/dist/runtime/morph.d.ts +33 -0
  273. package/dist/runtime/morph.d.ts.map +1 -0
  274. package/dist/runtime/morph.js +332 -0
  275. package/dist/runtime/morph.js.map +7 -0
  276. package/dist/runtime/radar.d.ts +75 -0
  277. package/dist/runtime/radar.d.ts.map +1 -0
  278. package/dist/runtime/radar.js +201 -0
  279. package/dist/runtime/radar.js.map +7 -0
  280. package/dist/runtime/radialBar.d.ts +81 -0
  281. package/dist/runtime/radialBar.d.ts.map +1 -0
  282. package/dist/runtime/radialBar.js +125 -0
  283. package/dist/runtime/radialBar.js.map +7 -0
  284. package/dist/runtime/report/constants.d.ts +2 -2
  285. package/dist/runtime/report/constants.d.ts.map +1 -1
  286. package/dist/runtime/runtimeShared.d.ts +3 -3
  287. package/dist/runtime/runtimeShared.d.ts.map +1 -1
  288. package/dist/runtime/sunburst.d.ts +74 -0
  289. package/dist/runtime/sunburst.d.ts.map +1 -0
  290. package/dist/runtime/sunburst.js +150 -0
  291. package/dist/runtime/sunburst.js.map +7 -0
  292. package/dist/runtime/wire.d.ts.map +1 -1
  293. package/dist/runtime/wire.js +3 -1
  294. package/dist/runtime/wire.js.map +2 -2
  295. package/dist/shape/arc.d.ts +15 -2
  296. package/dist/shape/arc.d.ts.map +1 -1
  297. package/dist/shape/arc.js +204 -32
  298. package/dist/shape/arc.js.map +2 -2
  299. package/dist/spec/chartDefinitions.d.ts +6 -0
  300. package/dist/spec/chartDefinitions.d.ts.map +1 -1
  301. package/dist/spec/chartDefinitions.js +7 -1
  302. package/dist/spec/chartDefinitions.js.map +2 -2
  303. package/dist/spec/templates.d.ts.map +1 -1
  304. package/dist/spec/templates.js +177 -2
  305. package/dist/spec/templates.js.map +2 -2
  306. package/dist/spec/types.d.ts +258 -6
  307. package/dist/spec/types.d.ts.map +1 -1
  308. package/dist/spec/types.js +6 -0
  309. package/dist/spec/types.js.map +2 -2
  310. package/dist/spec/validate/charts.js +147 -15
  311. package/dist/spec/validate/charts.js.map +2 -2
  312. package/dist/spec/validate/common.d.ts +6 -0
  313. package/dist/spec/validate/common.d.ts.map +1 -1
  314. package/dist/spec/validate/overlays.js +2 -2
  315. package/dist/spec/validate/overlays.js.map +2 -2
  316. package/dist/spec/validate.data.d.ts.map +1 -1
  317. package/dist/spec/validate.data.js +8 -3
  318. package/dist/spec/validate.data.js.map +2 -2
  319. package/package.json +1 -1
@@ -0,0 +1,76 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ function cubicAt(p0, p1, p2, p3, t) {
5
+ const u = 1 - t;
6
+ return u * u * u * p0 + 3 * u * u * t * p1 + 3 * u * t * t * p2 + t * t * t * p3;
7
+ }
8
+ function quadAt(p0, p1, p2, t) {
9
+ const u = 1 - t;
10
+ return u * u * p0 + 2 * u * t * p1 + t * t * p2;
11
+ }
12
+ function solve(xAt, x, increasing) {
13
+ let lo = 0;
14
+ let hi = 1;
15
+ for (let i = 0; i < 28; i++) {
16
+ const mid = (lo + hi) / 2;
17
+ if (xAt(mid) < x === increasing) lo = mid;
18
+ else hi = mid;
19
+ }
20
+ return (lo + hi) / 2;
21
+ }
22
+ class PathSampler {
23
+ constructor() {
24
+ __publicField(this, "segments", []);
25
+ __publicField(this, "x", NaN);
26
+ __publicField(this, "y", NaN);
27
+ }
28
+ moveTo(x, y) {
29
+ this.x = x;
30
+ this.y = y;
31
+ }
32
+ lineTo(x, y) {
33
+ this.segments.push({ kind: "line", x0: this.x, y0: this.y, x1: x, y1: y });
34
+ this.x = x;
35
+ this.y = y;
36
+ }
37
+ bezierCurveTo(c1x, c1y, c2x, c2y, x, y) {
38
+ this.segments.push({ kind: "cubic", x0: this.x, y0: this.y, c1x, c1y, c2x, c2y, x1: x, y1: y });
39
+ this.x = x;
40
+ this.y = y;
41
+ }
42
+ quadraticCurveTo(cx, cy, x, y) {
43
+ this.segments.push({ kind: "quad", x0: this.x, y0: this.y, cx, cy, x1: x, y1: y });
44
+ this.x = x;
45
+ this.y = y;
46
+ }
47
+ arc() {
48
+ }
49
+ arcTo(_x1, _y1, x, y) {
50
+ this.lineTo(x, y);
51
+ }
52
+ closePath() {
53
+ }
54
+ /** The path's y where it crosses `x`, or undefined when no segment spans it. */
55
+ yAt(x) {
56
+ for (const s of this.segments) {
57
+ if (!Number.isFinite(s.x0) || x < Math.min(s.x0, s.x1) || x > Math.max(s.x0, s.x1)) continue;
58
+ const increasing = s.x1 >= s.x0;
59
+ if (s.kind === "line") {
60
+ const span = s.x1 - s.x0;
61
+ return span === 0 ? s.y1 : s.y0 + (x - s.x0) / span * (s.y1 - s.y0);
62
+ }
63
+ if (s.kind === "cubic") {
64
+ const t2 = solve((u) => cubicAt(s.x0, s.c1x, s.c2x, s.x1, u), x, increasing);
65
+ return cubicAt(s.y0, s.c1y, s.c2y, s.y1, t2);
66
+ }
67
+ const t = solve((u) => quadAt(s.x0, s.cx, s.x1, u), x, increasing);
68
+ return quadAt(s.y0, s.cy, s.y1, t);
69
+ }
70
+ return void 0;
71
+ }
72
+ }
73
+ export {
74
+ PathSampler
75
+ };
76
+ //# sourceMappingURL=pathSample.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/render/pathSample.ts"],
4
+ "sourcesContent": ["/**\n * Path sampling \u2014 evaluate a drawn path at an x position.\n *\n * Curve generators write into a {@link PathSink}; this sink records the\n * segments instead of drawing them, so animation code can find exactly where an\n * x-monotone path (a line chart's stroke under any curve interpolation) passes\n * a given x \u2014 e.g. to ride a marker along the leading edge of a draw-on reveal.\n */\n\nimport type { PathSink } from '../shape/sink';\n\ntype Segment =\n | { kind: 'line'; x0: number; y0: number; x1: number; y1: number }\n | { kind: 'cubic'; x0: number; y0: number; c1x: number; c1y: number; c2x: number; c2y: number; x1: number; y1: number }\n | { kind: 'quad'; x0: number; y0: number; cx: number; cy: number; x1: number; y1: number };\n\nfunction cubicAt(p0: number, p1: number, p2: number, p3: number, t: number): number {\n const u = 1 - t;\n return u * u * u * p0 + 3 * u * u * t * p1 + 3 * u * t * t * p2 + t * t * t * p3;\n}\n\nfunction quadAt(p0: number, p1: number, p2: number, t: number): number {\n const u = 1 - t;\n return u * u * p0 + 2 * u * t * p1 + t * t * p2;\n}\n\n/** Bisect the parameter where a monotone segment's x reaches `x`. */\nfunction solve(xAt: (t: number) => number, x: number, increasing: boolean): number {\n let lo = 0;\n let hi = 1;\n for (let i = 0; i < 28; i++) {\n const mid = (lo + hi) / 2;\n if (xAt(mid) < x === increasing) lo = mid;\n else hi = mid;\n }\n return (lo + hi) / 2;\n}\n\nexport class PathSampler implements PathSink {\n private readonly segments: Segment[] = [];\n private x = NaN;\n private y = NaN;\n\n moveTo(x: number, y: number): void {\n this.x = x;\n this.y = y;\n }\n\n lineTo(x: number, y: number): void {\n this.segments.push({ kind: 'line', x0: this.x, y0: this.y, x1: x, y1: y });\n this.x = x;\n this.y = y;\n }\n\n bezierCurveTo(c1x: number, c1y: number, c2x: number, c2y: number, x: number, y: number): void {\n this.segments.push({ kind: 'cubic', x0: this.x, y0: this.y, c1x, c1y, c2x, c2y, x1: x, y1: y });\n this.x = x;\n this.y = y;\n }\n\n quadraticCurveTo(cx: number, cy: number, x: number, y: number): void {\n this.segments.push({ kind: 'quad', x0: this.x, y0: this.y, cx, cy, x1: x, y1: y });\n this.x = x;\n this.y = y;\n }\n\n arc(): void {\n // Arcs never appear in x-monotone series paths.\n }\n\n arcTo(_x1: number, _y1: number, x: number, y: number): void {\n this.lineTo(x, y);\n }\n\n closePath(): void {\n // Open paths only.\n }\n\n /** The path's y where it crosses `x`, or undefined when no segment spans it. */\n yAt(x: number): number | undefined {\n for (const s of this.segments) {\n if (!Number.isFinite(s.x0) || x < Math.min(s.x0, s.x1) || x > Math.max(s.x0, s.x1)) continue;\n const increasing = s.x1 >= s.x0;\n if (s.kind === 'line') {\n const span = s.x1 - s.x0;\n return span === 0 ? s.y1 : s.y0 + ((x - s.x0) / span) * (s.y1 - s.y0);\n }\n if (s.kind === 'cubic') {\n const t = solve((u) => cubicAt(s.x0, s.c1x, s.c2x, s.x1, u), x, increasing);\n return cubicAt(s.y0, s.c1y, s.c2y, s.y1, t);\n }\n const t = solve((u) => quadAt(s.x0, s.cx, s.x1, u), x, increasing);\n return quadAt(s.y0, s.cy, s.y1, t);\n }\n return undefined;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["t"]
7
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Transient surfaces — views of a Surface for frames that must never reach the
3
+ * render report: update-morph tweens and hover-focus repaints. A view paints
4
+ * onto a chosen canvas layer, has no evidence ledger (every renderer guards it
5
+ * with optional chaining), and remembers the surface it belongs to so per-surface
6
+ * state (e.g. the slices a pie last drew) is keyed by the real owner.
7
+ */
8
+ import type { CanvasLayer } from './canvasLayer.js';
9
+ import type { Surface } from './surface.js';
10
+ /**
11
+ * A view of `surface` that paints onto `layer` without touching the evidence
12
+ * ledger. Labels it records land in a throwaway ledger, so the report keeps
13
+ * describing the static frame while tween frames re-lay their labels.
14
+ */
15
+ export declare function transientSurface(surface: Surface, layer?: CanvasLayer): Surface;
16
+ /** The surface a (possibly transient) view belongs to. */
17
+ export declare function surfaceOwner(surface: Surface): Surface;
18
+ //# sourceMappingURL=transient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transient.d.ts","sourceRoot":"","sources":["../../src/render/transient.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,GAAE,WAA2B,GAAG,OAAO,CAQ9F;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEtD"}
@@ -0,0 +1,19 @@
1
+ import { LabelLedger } from "./labelLedger.js";
2
+ const OWNERS = /* @__PURE__ */ new WeakMap();
3
+ function transientSurface(surface, layer = surface.marks) {
4
+ const view = Object.create(surface, {
5
+ marks: { value: layer, enumerable: true },
6
+ evidence: { value: void 0, enumerable: true },
7
+ labels: { value: new LabelLedger(), enumerable: true }
8
+ });
9
+ OWNERS.set(view, surfaceOwner(surface));
10
+ return view;
11
+ }
12
+ function surfaceOwner(surface) {
13
+ return OWNERS.get(surface) ?? surface;
14
+ }
15
+ export {
16
+ surfaceOwner,
17
+ transientSurface
18
+ };
19
+ //# sourceMappingURL=transient.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/render/transient.ts"],
4
+ "sourcesContent": ["/**\n * Transient surfaces \u2014 views of a Surface for frames that must never reach the\n * render report: update-morph tweens and hover-focus repaints. A view paints\n * onto a chosen canvas layer, has no evidence ledger (every renderer guards it\n * with optional chaining), and remembers the surface it belongs to so per-surface\n * state (e.g. the slices a pie last drew) is keyed by the real owner.\n */\n\nimport type { CanvasLayer } from './canvasLayer';\nimport { LabelLedger } from './labelLedger';\nimport type { Surface } from './surface';\n\nconst OWNERS = new WeakMap<object, Surface>();\n\n/**\n * A view of `surface` that paints onto `layer` without touching the evidence\n * ledger. Labels it records land in a throwaway ledger, so the report keeps\n * describing the static frame while tween frames re-lay their labels.\n */\nexport function transientSurface(surface: Surface, layer: CanvasLayer = surface.marks): Surface {\n const view = Object.create(surface, {\n marks: { value: layer, enumerable: true },\n evidence: { value: undefined, enumerable: true },\n labels: { value: new LabelLedger(), enumerable: true },\n }) as Surface;\n OWNERS.set(view, surfaceOwner(surface));\n return view;\n}\n\n/** The surface a (possibly transient) view belongs to. */\nexport function surfaceOwner(surface: Surface): Surface {\n return OWNERS.get(surface) ?? surface;\n}\n"],
5
+ "mappings": "AASA,SAAS,mBAAmB;AAG5B,MAAM,SAAS,oBAAI,QAAyB;AAOrC,SAAS,iBAAiB,SAAkB,QAAqB,QAAQ,OAAgB;AAC9F,QAAM,OAAO,OAAO,OAAO,SAAS;AAAA,IAClC,OAAO,EAAE,OAAO,OAAO,YAAY,KAAK;AAAA,IACxC,UAAU,EAAE,OAAO,QAAW,YAAY,KAAK;AAAA,IAC/C,QAAQ,EAAE,OAAO,IAAI,YAAY,GAAG,YAAY,KAAK;AAAA,EACvD,CAAC;AACD,SAAO,IAAI,MAAM,aAAa,OAAO,CAAC;AACtC,SAAO;AACT;AAGO,SAAS,aAAa,SAA2B;AACtD,SAAO,OAAO,IAAI,OAAO,KAAK;AAChC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Candlestick model builder.
3
+ *
4
+ * A `candlestick` reads tidy rows of `{ x, open, high, low, close }` and draws one
5
+ * candle per row: a wick spanning the period's true extremes and a body from the
6
+ * open to the close, colored by whether the period closed up or down. Like the
7
+ * waterfall / histogram builders, it resolves a synthetic `base`
8
+ * {@link CartesianModel} so the shared axis chrome (`drawAxesUnderlay` /
9
+ * `drawOverlay`) and annotations render the period axis, price gridlines and
10
+ * titles unchanged — the candles themselves are painted by `drawCandlestick`.
11
+ *
12
+ * The period axis follows the x field type: temporal → a time axis (calendar
13
+ * gaps such as weekends stay visible), quantitative → a linear axis, and
14
+ * ordinal / nominal → an evenly spaced index axis (one slot per row, so a
15
+ * trading-day series reads without gaps). Rows with a missing period or any
16
+ * non-finite price are not drawn and are counted as unrepresented; nothing is
17
+ * invented. Inconsistent ranges (a high below the open, say) are drawn to their
18
+ * true extremes rather than silently corrected.
19
+ */
20
+ import type { Datum, Rect } from '../types.js';
21
+ import type { ThemeTokens } from '../theme/index.js';
22
+ import type { CandlestickSpec } from '../spec/types.js';
23
+ import { type ContinuousScale } from '../scales/index.js';
24
+ import { type Frame } from '../layout/index.js';
25
+ import { type ResolvedSketch } from '../spec/sketch.js';
26
+ import type { BuildOptions, CartesianModel } from './cartesian.js';
27
+ /** Widest a candle body may grow, however few periods share the plot. */
28
+ export declare const MAX_BODY_WIDTH = 22;
29
+ /** How the period axis is laid out. */
30
+ export type CandleAxisKind = 'time' | 'linear' | 'band';
31
+ export type CandleStyle = 'candle' | 'ohlc';
32
+ /** One drawable period. Prices are the raw row values; geometry is snapped pixels. */
33
+ export interface Candle {
34
+ /** Period identity for keyed updates (epoch ms on a time axis, the raw key otherwise). */
35
+ key: string;
36
+ /** The raw period value, published by selections. */
37
+ x: unknown;
38
+ /** Formatted period (tooltip title). */
39
+ label: string;
40
+ open: number;
41
+ high: number;
42
+ low: number;
43
+ close: number;
44
+ /** True extremes of all four prices, so an inconsistent row still spans every value. */
45
+ lo: number;
46
+ hi: number;
47
+ /** Closed at or above its open. */
48
+ up: boolean;
49
+ color: string;
50
+ /** Index of the source row in `spec.data`. */
51
+ sourceIndex: number;
52
+ row: Datum;
53
+ /** Pixel center of the candle (snapped so a 1px wick lands on a whole pixel). */
54
+ cx: number;
55
+ /** Body width in px (the tick span for OHLC bars). */
56
+ width: number;
57
+ /** Wick / OHLC stroke width in px. */
58
+ stroke: number;
59
+ /** Pixel y of the high (top) and low (bottom) extremes. */
60
+ top: number;
61
+ bottom: number;
62
+ /** Pixel y of the open and close. */
63
+ openY: number;
64
+ closeY: number;
65
+ }
66
+ export interface CandlestickModel {
67
+ spec: CandlestickSpec;
68
+ tokens: ThemeTokens;
69
+ frame: Frame;
70
+ plot: Rect;
71
+ /** Drawable candles in data order. */
72
+ candles: Candle[];
73
+ /** Source rows that could not be drawn (missing period or a non-finite price). */
74
+ unrepresented: number;
75
+ axis: CandleAxisKind;
76
+ style: CandleStyle;
77
+ increaseColor: string;
78
+ decreaseColor: string;
79
+ /** Price format for tooltips (the spec's `format`, else inferred from the data's decimals). */
80
+ priceFormat?: string;
81
+ /** Snapped body width shared by every candle. */
82
+ bodyWidth: number;
83
+ /** Wick / OHLC stroke width shared by every candle. */
84
+ strokeWidth: number;
85
+ yScale: ContinuousScale;
86
+ /** Period-axis ticks skipped so the remaining labels read cleanly (index axis only). */
87
+ thinnedTicks: number;
88
+ /** Synthetic cartesian model that drives the axis chrome and annotations. */
89
+ base: CartesianModel;
90
+ sketch: ResolvedSketch | null;
91
+ }
92
+ /**
93
+ * Price-axis labels with consistent decimals (100.0 / 100.5, as price axes read),
94
+ * SI suffixes for very large prices, and a precise fallback whenever rounding
95
+ * would print two different ticks the same.
96
+ */
97
+ export declare function priceTickLabels(values: readonly number[], format?: string): string[];
98
+ /**
99
+ * Snapped body and wick widths from the pixels one body may occupy: at least
100
+ * 1px, at most {@link MAX_BODY_WIDTH}, and with the wick's parity so the body
101
+ * sits exactly centered on it.
102
+ */
103
+ export declare function candleWidths(room: number): {
104
+ width: number;
105
+ stroke: number;
106
+ };
107
+ /**
108
+ * Build a {@link CandlestickModel} from a {@link CandlestickSpec}. Pure: depends
109
+ * only on the spec, theme tokens, and target size.
110
+ */
111
+ export declare function buildCandlestickModel(spec: CandlestickSpec, tokens: ThemeTokens, opts: BuildOptions): CandlestickModel;
112
+ //# sourceMappingURL=candlestick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candlestick.d.ts","sourceRoot":"","sources":["../../src/runtime/candlestick.ts"],"names":[],"mappings":"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"}