minerva-design 1.2.0 → 1.3.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 (256) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/charts/canvas.d.cts +4 -1
  3. package/dist/charts/canvas.d.ts +4 -1
  4. package/dist/charts/core.cjs +1 -1
  5. package/dist/charts/core.d.cts +5 -2
  6. package/dist/charts/core.d.ts +5 -2
  7. package/dist/charts/core.js +6 -4
  8. package/dist/charts/engine/canvas.cjs +1 -1
  9. package/dist/charts/engine/canvas.cjs.map +1 -1
  10. package/dist/charts/engine/canvas.js +65 -53
  11. package/dist/charts/engine/canvas.js.map +1 -1
  12. package/dist/charts/engine/chart.cjs +1 -2
  13. package/dist/charts/engine/chart.cjs.map +1 -1
  14. package/dist/charts/engine/chart.js +342 -323
  15. package/dist/charts/engine/chart.js.map +1 -1
  16. package/dist/charts/engine/color.cjs +1 -1
  17. package/dist/charts/engine/color.cjs.map +1 -1
  18. package/dist/charts/engine/color.d.cts +17 -0
  19. package/dist/charts/engine/color.d.ts +17 -0
  20. package/dist/charts/engine/color.js +27 -3
  21. package/dist/charts/engine/color.js.map +1 -1
  22. package/dist/charts/engine/controller.cjs +2 -2
  23. package/dist/charts/engine/controller.cjs.map +1 -1
  24. package/dist/charts/engine/controller.d.cts +6 -0
  25. package/dist/charts/engine/controller.d.ts +6 -0
  26. package/dist/charts/engine/controller.js +317 -253
  27. package/dist/charts/engine/controller.js.map +1 -1
  28. package/dist/charts/engine/curve.cjs +2 -0
  29. package/dist/charts/engine/curve.cjs.map +1 -0
  30. package/dist/charts/engine/curve.d.cts +15 -0
  31. package/dist/charts/engine/curve.d.ts +15 -0
  32. package/dist/charts/engine/curve.js +56 -0
  33. package/dist/charts/engine/curve.js.map +1 -0
  34. package/dist/charts/engine/data.cjs +1 -1
  35. package/dist/charts/engine/data.cjs.map +1 -1
  36. package/dist/charts/engine/data.d.cts +15 -2
  37. package/dist/charts/engine/data.d.ts +15 -2
  38. package/dist/charts/engine/data.js +98 -38
  39. package/dist/charts/engine/data.js.map +1 -1
  40. package/dist/charts/engine/dom.cjs +1 -1
  41. package/dist/charts/engine/dom.cjs.map +1 -1
  42. package/dist/charts/engine/dom.d.cts +5 -3
  43. package/dist/charts/engine/dom.d.ts +5 -3
  44. package/dist/charts/engine/dom.js +27 -22
  45. package/dist/charts/engine/dom.js.map +1 -1
  46. package/dist/charts/engine/items.cjs +1 -1
  47. package/dist/charts/engine/items.cjs.map +1 -1
  48. package/dist/charts/engine/items.js +132 -61
  49. package/dist/charts/engine/items.js.map +1 -1
  50. package/dist/charts/engine/model.cjs +1 -1
  51. package/dist/charts/engine/model.cjs.map +1 -1
  52. package/dist/charts/engine/model.d.cts +30 -3
  53. package/dist/charts/engine/model.d.ts +30 -3
  54. package/dist/charts/engine/model.js +225 -108
  55. package/dist/charts/engine/model.js.map +1 -1
  56. package/dist/charts/engine/overlay.cjs +1 -1
  57. package/dist/charts/engine/overlay.cjs.map +1 -1
  58. package/dist/charts/engine/overlay.d.cts +2 -0
  59. package/dist/charts/engine/overlay.d.ts +2 -0
  60. package/dist/charts/engine/overlay.js +16 -16
  61. package/dist/charts/engine/overlay.js.map +1 -1
  62. package/dist/charts/engine/presets.cjs +2 -2
  63. package/dist/charts/engine/presets.cjs.map +1 -1
  64. package/dist/charts/engine/presets.d.cts +71 -5
  65. package/dist/charts/engine/presets.d.ts +71 -5
  66. package/dist/charts/engine/presets.js +120 -33
  67. package/dist/charts/engine/presets.js.map +1 -1
  68. package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
  69. package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
  70. package/dist/charts/engine/renderers/canvas2d.js +149 -111
  71. package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
  72. package/dist/charts/engine/renderers/range.cjs +1 -1
  73. package/dist/charts/engine/renderers/range.cjs.map +1 -1
  74. package/dist/charts/engine/renderers/range.js +4 -4
  75. package/dist/charts/engine/renderers/range.js.map +1 -1
  76. package/dist/charts/engine/renderers/shaders.cjs +37 -19
  77. package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
  78. package/dist/charts/engine/renderers/shaders.d.cts +2 -2
  79. package/dist/charts/engine/renderers/shaders.d.ts +2 -2
  80. package/dist/charts/engine/renderers/shaders.js +37 -19
  81. package/dist/charts/engine/renderers/shaders.js.map +1 -1
  82. package/dist/charts/engine/renderers/types.cjs.map +1 -1
  83. package/dist/charts/engine/renderers/types.d.cts +11 -4
  84. package/dist/charts/engine/renderers/types.d.ts +11 -4
  85. package/dist/charts/engine/renderers/types.js.map +1 -1
  86. package/dist/charts/engine/renderers/webgl2.cjs +1 -1
  87. package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
  88. package/dist/charts/engine/renderers/webgl2.js +33 -12
  89. package/dist/charts/engine/renderers/webgl2.js.map +1 -1
  90. package/dist/charts/engine/renderers/webgpu.cjs +1 -1
  91. package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
  92. package/dist/charts/engine/renderers/webgpu.js +18 -15
  93. package/dist/charts/engine/renderers/webgpu.js.map +1 -1
  94. package/dist/charts/engine/scene.cjs +1 -1
  95. package/dist/charts/engine/scene.cjs.map +1 -1
  96. package/dist/charts/engine/scene.d.cts +19 -6
  97. package/dist/charts/engine/scene.d.ts +19 -6
  98. package/dist/charts/engine/scene.js +201 -89
  99. package/dist/charts/engine/scene.js.map +1 -1
  100. package/dist/charts/engine/shapes/canvas.cjs +2 -0
  101. package/dist/charts/engine/shapes/canvas.cjs.map +1 -0
  102. package/dist/charts/engine/shapes/canvas.d.cts +58 -0
  103. package/dist/charts/engine/shapes/canvas.d.ts +58 -0
  104. package/dist/charts/engine/shapes/canvas.js +159 -0
  105. package/dist/charts/engine/shapes/canvas.js.map +1 -0
  106. package/dist/charts/engine/shapes/chart.cjs +2 -0
  107. package/dist/charts/engine/shapes/chart.cjs.map +1 -0
  108. package/dist/charts/engine/shapes/chart.d.cts +6 -0
  109. package/dist/charts/engine/shapes/chart.d.ts +6 -0
  110. package/dist/charts/engine/shapes/chart.js +273 -0
  111. package/dist/charts/engine/shapes/chart.js.map +1 -0
  112. package/dist/charts/engine/shapes/draw.cjs +2 -0
  113. package/dist/charts/engine/shapes/draw.cjs.map +1 -0
  114. package/dist/charts/engine/shapes/draw.d.cts +20 -0
  115. package/dist/charts/engine/shapes/draw.d.ts +20 -0
  116. package/dist/charts/engine/shapes/draw.js +152 -0
  117. package/dist/charts/engine/shapes/draw.js.map +1 -0
  118. package/dist/charts/engine/shapes/funnel.cjs +2 -0
  119. package/dist/charts/engine/shapes/funnel.cjs.map +1 -0
  120. package/dist/charts/engine/shapes/funnel.d.cts +6 -0
  121. package/dist/charts/engine/shapes/funnel.d.ts +6 -0
  122. package/dist/charts/engine/shapes/funnel.js +149 -0
  123. package/dist/charts/engine/shapes/funnel.js.map +1 -0
  124. package/dist/charts/engine/shapes/gauge.cjs +2 -0
  125. package/dist/charts/engine/shapes/gauge.cjs.map +1 -0
  126. package/dist/charts/engine/shapes/gauge.d.cts +7 -0
  127. package/dist/charts/engine/shapes/gauge.d.ts +7 -0
  128. package/dist/charts/engine/shapes/gauge.js +173 -0
  129. package/dist/charts/engine/shapes/gauge.js.map +1 -0
  130. package/dist/charts/engine/shapes/hit.cjs +2 -0
  131. package/dist/charts/engine/shapes/hit.cjs.map +1 -0
  132. package/dist/charts/engine/shapes/hit.d.cts +28 -0
  133. package/dist/charts/engine/shapes/hit.d.ts +28 -0
  134. package/dist/charts/engine/shapes/hit.js +124 -0
  135. package/dist/charts/engine/shapes/hit.js.map +1 -0
  136. package/dist/charts/engine/shapes/index.d.cts +9 -0
  137. package/dist/charts/engine/shapes/index.d.ts +9 -0
  138. package/dist/charts/engine/shapes/layout.cjs +3 -0
  139. package/dist/charts/engine/shapes/layout.cjs.map +1 -0
  140. package/dist/charts/engine/shapes/layout.d.cts +88 -0
  141. package/dist/charts/engine/shapes/layout.d.ts +88 -0
  142. package/dist/charts/engine/shapes/layout.js +266 -0
  143. package/dist/charts/engine/shapes/layout.js.map +1 -0
  144. package/dist/charts/engine/shapes/pie.cjs +2 -0
  145. package/dist/charts/engine/shapes/pie.cjs.map +1 -0
  146. package/dist/charts/engine/shapes/pie.d.cts +20 -0
  147. package/dist/charts/engine/shapes/pie.d.ts +20 -0
  148. package/dist/charts/engine/shapes/pie.js +302 -0
  149. package/dist/charts/engine/shapes/pie.js.map +1 -0
  150. package/dist/charts/engine/shapes/radar.cjs +2 -0
  151. package/dist/charts/engine/shapes/radar.cjs.map +1 -0
  152. package/dist/charts/engine/shapes/radar.d.cts +8 -0
  153. package/dist/charts/engine/shapes/radar.d.ts +8 -0
  154. package/dist/charts/engine/shapes/radar.js +197 -0
  155. package/dist/charts/engine/shapes/radar.js.map +1 -0
  156. package/dist/charts/engine/shapes/runtime.cjs +2 -0
  157. package/dist/charts/engine/shapes/runtime.cjs.map +1 -0
  158. package/dist/charts/engine/shapes/runtime.d.cts +29 -0
  159. package/dist/charts/engine/shapes/runtime.d.ts +29 -0
  160. package/dist/charts/engine/shapes/runtime.js +97 -0
  161. package/dist/charts/engine/shapes/runtime.js.map +1 -0
  162. package/dist/charts/engine/shapes/scene.cjs +2 -0
  163. package/dist/charts/engine/shapes/scene.cjs.map +1 -0
  164. package/dist/charts/engine/shapes/scene.d.cts +257 -0
  165. package/dist/charts/engine/shapes/scene.d.ts +257 -0
  166. package/dist/charts/engine/shapes/scene.js +123 -0
  167. package/dist/charts/engine/shapes/scene.js.map +1 -0
  168. package/dist/charts/engine/shapes/treemap.cjs +2 -0
  169. package/dist/charts/engine/shapes/treemap.cjs.map +1 -0
  170. package/dist/charts/engine/shapes/treemap.d.cts +14 -0
  171. package/dist/charts/engine/shapes/treemap.d.ts +14 -0
  172. package/dist/charts/engine/shapes/treemap.js +213 -0
  173. package/dist/charts/engine/shapes/treemap.js.map +1 -0
  174. package/dist/charts/engine/shapes/types.d.cts +292 -0
  175. package/dist/charts/engine/shapes/types.d.ts +292 -0
  176. package/dist/charts/engine/signature.cjs +2 -0
  177. package/dist/charts/engine/signature.cjs.map +1 -0
  178. package/dist/charts/engine/signature.d.cts +9 -0
  179. package/dist/charts/engine/signature.d.ts +9 -0
  180. package/dist/charts/engine/signature.js +13 -0
  181. package/dist/charts/engine/signature.js.map +1 -0
  182. package/dist/charts/engine/theme.cjs +1 -1
  183. package/dist/charts/engine/theme.cjs.map +1 -1
  184. package/dist/charts/engine/theme.d.cts +10 -1
  185. package/dist/charts/engine/theme.d.ts +10 -1
  186. package/dist/charts/engine/theme.js +40 -16
  187. package/dist/charts/engine/theme.js.map +1 -1
  188. package/dist/charts/engine/types.d.cts +70 -9
  189. package/dist/charts/engine/types.d.ts +70 -9
  190. package/dist/charts/index.cjs +1 -1
  191. package/dist/charts/index.d.cts +4 -2
  192. package/dist/charts/index.d.ts +4 -2
  193. package/dist/charts/index.js +8 -5
  194. package/dist/charts/react/Chart.cjs +1 -1
  195. package/dist/charts/react/Chart.cjs.map +1 -1
  196. package/dist/charts/react/Chart.d.cts +8 -1
  197. package/dist/charts/react/Chart.d.ts +8 -1
  198. package/dist/charts/react/Chart.js +66 -47
  199. package/dist/charts/react/Chart.js.map +1 -1
  200. package/dist/charts/react/charts.cjs +1 -1
  201. package/dist/charts/react/charts.cjs.map +1 -1
  202. package/dist/charts/react/charts.d.cts +10 -2
  203. package/dist/charts/react/charts.d.ts +10 -2
  204. package/dist/charts/react/charts.js +174 -51
  205. package/dist/charts/react/charts.js.map +1 -1
  206. package/dist/charts/react/shapes.cjs +2 -0
  207. package/dist/charts/react/shapes.cjs.map +1 -0
  208. package/dist/charts/react/shapes.d.cts +255 -0
  209. package/dist/charts/react/shapes.d.ts +255 -0
  210. package/dist/charts/react/shapes.js +242 -0
  211. package/dist/charts/react/shapes.js.map +1 -0
  212. package/dist/charts/react/types.d.cts +73 -4
  213. package/dist/charts/react/types.d.ts +73 -4
  214. package/dist/native/charts/src/engine/color.cjs +1 -1
  215. package/dist/native/charts/src/engine/color.cjs.map +1 -1
  216. package/dist/native/charts/src/engine/color.js +12 -3
  217. package/dist/native/charts/src/engine/color.js.map +1 -1
  218. package/dist/native/charts/src/engine/controller.cjs +2 -2
  219. package/dist/native/charts/src/engine/controller.cjs.map +1 -1
  220. package/dist/native/charts/src/engine/controller.js +334 -270
  221. package/dist/native/charts/src/engine/controller.js.map +1 -1
  222. package/dist/native/charts/src/engine/curve.cjs +2 -0
  223. package/dist/native/charts/src/engine/curve.cjs.map +1 -0
  224. package/dist/native/charts/src/engine/curve.js +56 -0
  225. package/dist/native/charts/src/engine/curve.js.map +1 -0
  226. package/dist/native/charts/src/engine/data.cjs +1 -1
  227. package/dist/native/charts/src/engine/data.cjs.map +1 -1
  228. package/dist/native/charts/src/engine/data.js +98 -38
  229. package/dist/native/charts/src/engine/data.js.map +1 -1
  230. package/dist/native/charts/src/engine/model.cjs +1 -1
  231. package/dist/native/charts/src/engine/model.cjs.map +1 -1
  232. package/dist/native/charts/src/engine/model.js +229 -112
  233. package/dist/native/charts/src/engine/model.js.map +1 -1
  234. package/dist/native/charts/src/engine/overlay.cjs +1 -1
  235. package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
  236. package/dist/native/charts/src/engine/overlay.js +16 -16
  237. package/dist/native/charts/src/engine/overlay.js.map +1 -1
  238. package/dist/native/charts/src/engine/presets.cjs +1 -1
  239. package/dist/native/charts/src/engine/presets.cjs.map +1 -1
  240. package/dist/native/charts/src/engine/presets.js +11 -4
  241. package/dist/native/charts/src/engine/presets.js.map +1 -1
  242. package/dist/native/charts/src/engine/scene.cjs +1 -1
  243. package/dist/native/charts/src/engine/scene.cjs.map +1 -1
  244. package/dist/native/charts/src/engine/scene.js +209 -97
  245. package/dist/native/charts/src/engine/scene.js.map +1 -1
  246. package/dist/native/charts/src/engine/theme.cjs.map +1 -1
  247. package/dist/native/charts/src/engine/theme.js.map +1 -1
  248. package/dist/native/components/Chart/scene.cjs +1 -1
  249. package/dist/native/components/Chart/scene.cjs.map +1 -1
  250. package/dist/native/components/Chart/scene.js +31 -19
  251. package/dist/native/components/Chart/scene.js.map +1 -1
  252. package/dist/native/source/components/Chart/scene.tsx +54 -20
  253. package/dist/taro/index.js +1059 -579
  254. package/dist/uni/charts-canvas.js +3 -1
  255. package/dist/weapp/controls.js +966 -225
  256. package/package.json +1 -1
@@ -10,6 +10,24 @@ var e = (e) => typeof e == "object" && !!e && !("length" in e) && "y" in e, t =
10
10
  }
11
11
  return r;
12
12
  }, n = (e) => typeof e == "number" ? e : e == null ? NaN : Number(e), r = (t) => {
13
+ let n = /* @__PURE__ */ new Set();
14
+ for (let r of t) {
15
+ if (e(r)) {
16
+ let e = r.y;
17
+ if (!ArrayBuffer.isView(e)) for (let t = 0; t < e.length; t++) {
18
+ let r = e[t];
19
+ typeof r == "string" && n.add(r);
20
+ }
21
+ continue;
22
+ }
23
+ let t = r;
24
+ for (let e = 0; e < t.length; e++) {
25
+ let r = t[e], i = Array.isArray(r) ? r[1] : r && typeof r == "object" ? r.y : void 0;
26
+ typeof i == "string" && n.add(i);
27
+ }
28
+ }
29
+ return [...n];
30
+ }, i = (t) => {
13
31
  let n = /* @__PURE__ */ new Set(), r = (e) => {
14
32
  typeof e == "string" && n.add(e);
15
33
  };
@@ -26,8 +44,8 @@ var e = (e) => typeof e == "object" && !!e && !("length" in e) && "y" in e, t =
26
44
  }
27
45
  }
28
46
  return [...n];
29
- }, i = (e, t, n, r) => {
30
- let i = Infinity, a = -Infinity, o = Infinity, s = -Infinity, c = !0, l = -Infinity;
47
+ }, a = (e, t, n, r) => {
48
+ let i = Infinity, a = -Infinity, o = Infinity, s = -Infinity, c = !0, l = -Infinity, { high: u, low: d, value: f } = r;
31
49
  for (let r = 0; r < n; r++) {
32
50
  let n = e[r];
33
51
  if (!Number.isFinite(n)) {
@@ -35,70 +53,112 @@ var e = (e) => typeof e == "object" && !!e && !("length" in e) && "y" in e, t =
35
53
  continue;
36
54
  }
37
55
  n < l && (c = !1), l = n;
38
- let u = t[r];
39
- Number.isFinite(u) && (n < i && (i = n), n > a && (a = n), u < o && (o = u), u > s && (s = u));
56
+ let f = t[r];
57
+ if (Number.isFinite(f)) {
58
+ if (n < i && (i = n), n > a && (a = n), f < o && (o = f), f > s && (s = f), u) {
59
+ let e = u[r];
60
+ e > s && (s = e), e < o && (o = e);
61
+ }
62
+ if (d) {
63
+ let e = d[r];
64
+ e < o && (o = e), e > s && (s = e);
65
+ }
66
+ }
67
+ }
68
+ let p = Infinity, m = -Infinity;
69
+ if (f) for (let e = 0; e < n; e++) {
70
+ let t = f[e];
71
+ Number.isFinite(t) && (t < p && (p = t), t > m && (m = t));
40
72
  }
41
- let u = i > a;
73
+ let h = i > a;
42
74
  return {
43
75
  x: e,
44
76
  y: t,
45
77
  count: n,
46
78
  sorted: c,
47
- xMin: u ? NaN : i,
48
- xMax: u ? NaN : a,
49
- yMin: u ? NaN : o,
50
- yMax: u ? NaN : s,
79
+ xMin: h ? NaN : i,
80
+ xMax: h ? NaN : a,
81
+ yMin: h ? NaN : o,
82
+ yMax: h ? NaN : s,
83
+ valueMin: p > m ? NaN : p,
84
+ valueMax: p > m ? NaN : m,
51
85
  ...r
52
86
  };
53
- }, a = (t, r) => {
54
- let a = {
87
+ }, o = (e, t) => {
88
+ if (!e) return null;
89
+ if (e instanceof Float64Array && e.length >= t) return e.length === t ? e : e.subarray(0, t);
90
+ let r = new Float64Array(t);
91
+ for (let i = 0; i < t; i++) r[i] = n(e[i]);
92
+ return r;
93
+ }, s = (t, r, i = n) => {
94
+ let s = {
55
95
  size: null,
56
96
  colors: null,
57
- labels: null
97
+ labels: null,
98
+ open: null,
99
+ high: null,
100
+ low: null,
101
+ value: null
58
102
  };
59
103
  if (e(t)) {
60
- let e = t.y.length, o = new Float64Array(e), s = new Float64Array(e), c = t.x;
61
- for (let i = 0; i < e; i++) s[i] = n(t.y[i]), o[i] = c ? r(c[i], i) : i;
62
- let l = null;
104
+ let e = t.y.length, c = new Float64Array(e), l = t.x;
105
+ if (!l) for (let t = 0; t < e; t++) c[t] = t;
106
+ else if (ArrayBuffer.isView(l) && l.length >= e) c.set(l.length === e ? l : l.subarray(0, e));
107
+ else for (let t = 0; t < e; t++) c[t] = r(l[t], t);
108
+ let u = t.y, d;
109
+ if (ArrayBuffer.isView(u)) d = new Float64Array(e), d.set(u);
110
+ else {
111
+ d = new Float64Array(e);
112
+ for (let t = 0; t < e; t++) d[t] = i(u[t]);
113
+ }
114
+ let f = null;
63
115
  if (t.size) {
64
- l = new Float32Array(e);
65
- for (let r = 0; r < e; r++) l[r] = n(t.size[r]);
116
+ f = new Float32Array(e);
117
+ for (let r = 0; r < e; r++) f[r] = n(t.size[r]);
66
118
  }
67
- return i(o, s, e, {
68
- ...a,
69
- size: l
119
+ return a(c, d, e, {
120
+ ...s,
121
+ size: f,
122
+ open: o(t.open, e),
123
+ high: o(t.high, e),
124
+ low: o(t.low, e),
125
+ value: o(t.value, e)
70
126
  });
71
127
  }
72
- let o = t, s = o.length, c = new Float64Array(s), l = new Float64Array(s), u = null, d = null, f = null;
73
- for (let e = 0; e < s; e++) {
74
- let t = o[e];
75
- if (t == null || typeof t == "number") c[e] = e, l[e] = n(t);
76
- else if (Array.isArray(t)) c[e] = r(t[0], e), l[e] = n(t[1]);
128
+ let c = t, l = c.length, u = new Float64Array(l), d = new Float64Array(l), f = null, p = null, m = null, h = null, g = null, _ = null, v = null, y = () => new Float64Array(l).fill(NaN);
129
+ for (let e = 0; e < l; e++) {
130
+ let t = c[e];
131
+ if (t == null || typeof t == "number") u[e] = e, d[e] = n(t);
132
+ else if (Array.isArray(t)) u[e] = r(t[0], e), d[e] = i(t[1]);
77
133
  else if (typeof t == "object") {
78
- let i = t;
79
- c[e] = i.x === void 0 ? e : r(i.x, e), l[e] = n(i.y), i.size !== void 0 && (u ?? (u = new Float32Array(s).fill(NaN)), u[e] = i.size), i.color !== void 0 && (d ?? (d = Array(s)), d[e] = i.color), i.label !== void 0 && (f ?? (f = Array(s)), f[e] = i.label);
80
- } else c[e] = e, l[e] = NaN;
134
+ let a = t;
135
+ u[e] = a.x === void 0 ? e : r(a.x, e), d[e] = i(a.y), a.size !== void 0 && (f ?? (f = new Float32Array(l).fill(NaN)), f[e] = a.size), a.color !== void 0 && (p ?? (p = Array(l)), p[e] = a.color), a.label !== void 0 && (m ?? (m = Array(l)), m[e] = a.label), a.open !== void 0 && ((h ?? (h = y()))[e] = n(a.open)), a.high !== void 0 && ((g ?? (g = y()))[e] = n(a.high)), a.low !== void 0 && ((_ ?? (_ = y()))[e] = n(a.low)), a.value !== void 0 && ((v ?? (v = y()))[e] = n(a.value));
136
+ } else u[e] = e, d[e] = NaN;
81
137
  }
82
- return i(c, l, s, {
83
- size: u,
84
- colors: d,
85
- labels: f
138
+ return a(u, d, l, {
139
+ size: f,
140
+ colors: p,
141
+ labels: m,
142
+ open: h,
143
+ high: g,
144
+ low: _,
145
+ value: v
86
146
  });
87
- }, o = (e, t, n) => {
147
+ }, c = (e, t, n) => {
88
148
  let r = 0, i = t;
89
149
  for (; r < i;) {
90
150
  let t = r + i >>> 1;
91
151
  e[t] < n ? r = t + 1 : i = t;
92
152
  }
93
153
  return r;
94
- }, s = (e, t, n, r) => {
154
+ }, l = (e, t, n, r) => {
95
155
  if (n === 0) return -1;
96
- let i = o(e, n, r), a = i - 1, s = i;
156
+ let i = c(e, n, r), a = i - 1, o = i;
97
157
  for (; a >= 0 && !Number.isFinite(t[a]);) a--;
98
- for (; s < n && !Number.isFinite(t[s]);) s++;
99
- return a < 0 ? s < n ? s : -1 : s >= n || r - e[a] <= e[s] - r ? a : s;
158
+ for (; o < n && !Number.isFinite(t[o]);) o++;
159
+ return a < 0 ? o < n ? o : -1 : o >= n || r - e[a] <= e[o] - r ? a : o;
100
160
  };
101
161
  //#endregion
102
- export { r as collectCategories, o as lowerBound, s as nearestIndex, a as normalizeData, t as xResolver };
162
+ export { i as collectCategories, r as collectYCategories, c as lowerBound, l as nearestIndex, s as normalizeData, t as xResolver };
103
163
 
104
164
  //# sourceMappingURL=data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","names":["isColumns","data","xResolver","value","type","categoryIndex","n","index","toNumber","v","collectCategories","seen","add","datas","xs","i","list","item","finalize","xMin","xMax","yMin","yMax","sorted","prev","count","xi","x","yi","y","empty","extra","normalizeData","none","resolveX","size","colors","labels","d","lowerBound","lo","hi","mid","nearestIndex","left","right"],"sources":["../../../../charts/src/engine/data.ts"],"sourcesContent":["// Normalization of series data into columns (Float64Array).\n\nimport type { ChartAxisType, ChartSeriesData, ChartXValue } from \"./types\";\n\nexport interface SeriesColumns {\n x: Float64Array;\n /** NaN where the value is missing */\n y: Float64Array;\n size: Float32Array | null;\n colors: (string | undefined)[] | null;\n labels: (string | undefined)[] | null;\n count: number;\n /** x is non-decreasing (binary search, decimation) */\n sorted: boolean;\n /** Extent of the finite points (NaN when there is none) */\n xMin: number;\n xMax: number;\n yMin: number;\n yMax: number;\n}\n\ntype XResolver = (value: ChartXValue, index: number) => number;\n\nconst isColumns = (\n data: ChartSeriesData,\n): data is {\n x?: ArrayLike<number> | readonly ChartXValue[];\n y: ArrayLike<number> | readonly (number | null)[];\n size?: ArrayLike<number>;\n} =>\n typeof data === \"object\" &&\n data !== null &&\n !(\"length\" in data) &&\n \"y\" in data;\n\n/** Converts an x value to a number for the axis type */\nexport const xResolver = (\n type: ChartAxisType,\n categoryIndex: (name: string) => number,\n): XResolver => {\n return (value, index) => {\n if (typeof value === \"number\") return value;\n if (value instanceof Date) return value.getTime();\n if (typeof value === \"string\") {\n if (type === \"category\") return categoryIndex(value);\n if (type === \"time\") return Date.parse(value);\n const n = Number(value);\n return Number.isNaN(n) ? index : n;\n }\n return index;\n };\n};\n\nconst toNumber = (v: unknown): number =>\n typeof v === \"number\" ? v : v === null || v === undefined ? NaN : Number(v);\n\n/** Category names used by string x values, in order of appearance */\nexport const collectCategories = (\n datas: readonly ChartSeriesData[],\n): string[] => {\n const seen = new Set<string>();\n const add = (v: unknown) => {\n if (typeof v === \"string\") seen.add(v);\n };\n for (const data of datas) {\n if (isColumns(data)) {\n const xs = data.x;\n if (xs && !ArrayBuffer.isView(xs)) {\n for (let i = 0; i < xs.length; i++) add(xs[i]);\n }\n continue;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (Array.isArray(item)) add(item[0]);\n else if (item && typeof item === \"object\")\n add((item as { x?: unknown }).x);\n }\n }\n return [...seen];\n};\n\nconst finalize = (\n x: Float64Array,\n y: Float64Array,\n count: number,\n extra: Pick<SeriesColumns, \"size\" | \"colors\" | \"labels\">,\n): SeriesColumns => {\n let xMin = Infinity;\n let xMax = -Infinity;\n let yMin = Infinity;\n let yMax = -Infinity;\n let sorted = true;\n let prev = -Infinity;\n for (let i = 0; i < count; i++) {\n const xi = x[i];\n if (!Number.isFinite(xi)) {\n y[i] = NaN;\n continue;\n }\n if (xi < prev) sorted = false;\n prev = xi;\n const yi = y[i];\n if (!Number.isFinite(yi)) continue;\n if (xi < xMin) xMin = xi;\n if (xi > xMax) xMax = xi;\n if (yi < yMin) yMin = yi;\n if (yi > yMax) yMax = yi;\n }\n const empty = xMin > xMax;\n return {\n x,\n y,\n count,\n sorted,\n xMin: empty ? NaN : xMin,\n xMax: empty ? NaN : xMax,\n yMin: empty ? NaN : yMin,\n yMax: empty ? NaN : yMax,\n ...extra,\n };\n};\n\n/** Turns any supported data form into columns */\nexport const normalizeData = (\n data: ChartSeriesData,\n resolveX: XResolver,\n): SeriesColumns => {\n const none = { size: null, colors: null, labels: null };\n if (isColumns(data)) {\n const count = data.y.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n const xs = data.x;\n for (let i = 0; i < count; i++) {\n y[i] = toNumber(data.y[i]);\n x[i] = xs ? resolveX(xs[i] as ChartXValue, i) : i;\n }\n let size: Float32Array | null = null;\n if (data.size) {\n size = new Float32Array(count);\n for (let i = 0; i < count; i++) size[i] = toNumber(data.size[i]);\n }\n return finalize(x, y, count, { ...none, size });\n }\n\n const list = data as ArrayLike<unknown>;\n const count = list.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n let size: Float32Array | null = null;\n let colors: (string | undefined)[] | null = null;\n let labels: (string | undefined)[] | null = null;\n\n for (let i = 0; i < count; i++) {\n const item = list[i];\n if (item === null || item === undefined || typeof item === \"number\") {\n x[i] = i;\n y[i] = toNumber(item);\n } else if (Array.isArray(item)) {\n x[i] = resolveX(item[0] as ChartXValue, i);\n y[i] = toNumber(item[1]);\n } else if (typeof item === \"object\") {\n const d = item as {\n x?: ChartXValue;\n y?: number | null;\n size?: number;\n color?: string;\n label?: string;\n };\n x[i] = d.x === undefined ? i : resolveX(d.x, i);\n y[i] = toNumber(d.y);\n if (d.size !== undefined) {\n size ??= new Float32Array(count).fill(NaN);\n size[i] = d.size;\n }\n if (d.color !== undefined) {\n colors ??= new Array<string | undefined>(count);\n colors[i] = d.color;\n }\n if (d.label !== undefined) {\n labels ??= new Array<string | undefined>(count);\n labels[i] = d.label;\n }\n } else {\n x[i] = i;\n y[i] = NaN;\n }\n }\n return finalize(x, y, count, { size, colors, labels });\n};\n\n/** First index whose x is >= value (sorted x) */\nexport const lowerBound = (\n x: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n let lo = 0;\n let hi = count;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (x[mid] < value) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n};\n\n/** Index of the point with the closest x and a finite y (sorted x), -1 if none */\nexport const nearestIndex = (\n x: ArrayLike<number>,\n y: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n if (count === 0) return -1;\n const i = lowerBound(x, count, value);\n let left = i - 1;\n let right = i;\n while (left >= 0 && !Number.isFinite(y[left])) left--;\n while (right < count && !Number.isFinite(y[right])) right++;\n if (left < 0) return right < count ? right : -1;\n if (right >= count) return left;\n return value - x[left] <= x[right] - value ? left : right;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"data.js","names":["isColumns","data","xResolver","value","type","categoryIndex","n","index","toNumber","v","collectYCategories","seen","datas","ys","i","list","item","collectCategories","add","xs","finalize","xMin","xMax","yMin","yMax","sorted","prev","extra","count","xi","x","yi","y","high","h","low","l","valueMin","valueMax","empty","column","values","out","normalizeData","none","resolveX","resolveY","size","colors","labels","open","nanColumn","d","lowerBound","lo","hi","mid","nearestIndex","left","right"],"sources":["../../../../charts/src/engine/data.ts"],"sourcesContent":["// Normalization of series data into columns (Float64Array).\n\nimport type { ChartAxisType, ChartSeriesData, ChartXValue } from \"./types\";\n\nexport interface SeriesColumns {\n x: Float64Array;\n /** NaN where the value is missing */\n y: Float64Array;\n size: Float32Array | null;\n colors: (string | undefined)[] | null;\n labels: (string | undefined)[] | null;\n /** Candlesticks: open / high / low (y is the close) */\n open: Float64Array | null;\n high: Float64Array | null;\n low: Float64Array | null;\n /** Heatmaps: values of the cells */\n value: Float64Array | null;\n count: number;\n /** x is non-decreasing (binary search, decimation) */\n sorted: boolean;\n /** Extent of the finite points (NaN when there is none); high / low included */\n xMin: number;\n xMax: number;\n yMin: number;\n yMax: number;\n /** Extent of the finite `value`s (NaN when there is none) */\n valueMin: number;\n valueMax: number;\n}\n\ntype XResolver = (value: ChartXValue, index: number) => number;\n/** Converts a y value (a category name on category y axes) to a number */\nexport type YResolver = (value: unknown) => number;\n\ntype Extra = Pick<\n SeriesColumns,\n \"size\" | \"colors\" | \"labels\" | \"open\" | \"high\" | \"low\" | \"value\"\n>;\n\nconst isColumns = (\n data: ChartSeriesData,\n): data is {\n x?: ArrayLike<number> | readonly ChartXValue[];\n y: ArrayLike<number> | readonly (number | string | null)[];\n size?: ArrayLike<number>;\n open?: ArrayLike<number>;\n high?: ArrayLike<number>;\n low?: ArrayLike<number>;\n value?: ArrayLike<number> | readonly (number | null)[];\n} =>\n typeof data === \"object\" &&\n data !== null &&\n !(\"length\" in data) &&\n \"y\" in data;\n\n/** Converts an x value to a number for the axis type */\nexport const xResolver = (\n type: ChartAxisType,\n categoryIndex: (name: string) => number,\n): XResolver => {\n return (value, index) => {\n if (typeof value === \"number\") return value;\n if (value instanceof Date) return value.getTime();\n if (typeof value === \"string\") {\n if (type === \"category\") return categoryIndex(value);\n if (type === \"time\") return Date.parse(value);\n const n = Number(value);\n return Number.isNaN(n) ? index : n;\n }\n return index;\n };\n};\n\nconst toNumber = (v: unknown): number =>\n typeof v === \"number\" ? v : v === null || v === undefined ? NaN : Number(v);\n\n/** Category names used by string y values (heatmap rows), in order of appearance */\nexport const collectYCategories = (\n datas: readonly ChartSeriesData[],\n): string[] => {\n const seen = new Set<string>();\n for (const data of datas) {\n if (isColumns(data)) {\n const ys = data.y;\n if (!ArrayBuffer.isView(ys)) {\n for (let i = 0; i < ys.length; i++) {\n const v = ys[i];\n if (typeof v === \"string\") seen.add(v);\n }\n }\n continue;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n const v = Array.isArray(item)\n ? item[1]\n : item && typeof item === \"object\"\n ? (item as { y?: unknown }).y\n : undefined;\n if (typeof v === \"string\") seen.add(v);\n }\n }\n return [...seen];\n};\n\n/** Category names used by string x values, in order of appearance */\nexport const collectCategories = (\n datas: readonly ChartSeriesData[],\n): string[] => {\n const seen = new Set<string>();\n const add = (v: unknown) => {\n if (typeof v === \"string\") seen.add(v);\n };\n for (const data of datas) {\n if (isColumns(data)) {\n const xs = data.x;\n if (xs && !ArrayBuffer.isView(xs)) {\n for (let i = 0; i < xs.length; i++) add(xs[i]);\n }\n continue;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (Array.isArray(item)) add(item[0]);\n else if (item && typeof item === \"object\")\n add((item as { x?: unknown }).x);\n }\n }\n return [...seen];\n};\n\nconst finalize = (\n x: Float64Array,\n y: Float64Array,\n count: number,\n extra: Extra,\n): SeriesColumns => {\n let xMin = Infinity;\n let xMax = -Infinity;\n let yMin = Infinity;\n let yMax = -Infinity;\n let sorted = true;\n let prev = -Infinity;\n const { high, low, value } = extra;\n for (let i = 0; i < count; i++) {\n const xi = x[i];\n if (!Number.isFinite(xi)) {\n y[i] = NaN;\n continue;\n }\n if (xi < prev) sorted = false;\n prev = xi;\n const yi = y[i];\n if (!Number.isFinite(yi)) continue;\n if (xi < xMin) xMin = xi;\n if (xi > xMax) xMax = xi;\n if (yi < yMin) yMin = yi;\n if (yi > yMax) yMax = yi;\n if (high) {\n const h = high[i];\n if (h > yMax) yMax = h;\n if (h < yMin) yMin = h;\n }\n if (low) {\n const l = low[i];\n if (l < yMin) yMin = l;\n if (l > yMax) yMax = l;\n }\n }\n let valueMin = Infinity;\n let valueMax = -Infinity;\n if (value) {\n for (let i = 0; i < count; i++) {\n const v = value[i];\n if (!Number.isFinite(v)) continue;\n if (v < valueMin) valueMin = v;\n if (v > valueMax) valueMax = v;\n }\n }\n const empty = xMin > xMax;\n return {\n x,\n y,\n count,\n sorted,\n xMin: empty ? NaN : xMin,\n xMax: empty ? NaN : xMax,\n yMin: empty ? NaN : yMin,\n yMax: empty ? NaN : yMax,\n valueMin: valueMin > valueMax ? NaN : valueMin,\n valueMax: valueMin > valueMax ? NaN : valueMax,\n ...extra,\n };\n};\n\nconst column = (\n values: ArrayLike<unknown> | undefined,\n count: number,\n): Float64Array | null => {\n if (!values) return null;\n if (values instanceof Float64Array && values.length >= count) {\n return values.length === count ? values : values.subarray(0, count);\n }\n const out = new Float64Array(count);\n for (let i = 0; i < count; i++) out[i] = toNumber(values[i]);\n return out;\n};\n\n/** Turns any supported data form into columns */\nexport const normalizeData = (\n data: ChartSeriesData,\n resolveX: XResolver,\n resolveY: YResolver = toNumber,\n): SeriesColumns => {\n const none: Extra = {\n size: null,\n colors: null,\n labels: null,\n open: null,\n high: null,\n low: null,\n value: null,\n };\n if (isColumns(data)) {\n const count = data.y.length;\n const x = new Float64Array(count);\n const xs = data.x;\n if (!xs) {\n for (let i = 0; i < count; i++) x[i] = i;\n } else if (ArrayBuffer.isView(xs) && xs.length >= count) {\n // typed arrays: a plain copy (the hot path of large data sets)\n x.set(\n (xs.length === count\n ? xs\n : (xs as unknown as Float64Array).subarray(\n 0,\n count,\n )) as ArrayLike<number>,\n );\n } else {\n for (let i = 0; i < count; i++) x[i] = resolveX(xs[i] as ChartXValue, i);\n }\n const ys = data.y;\n let y: Float64Array;\n if (ArrayBuffer.isView(ys)) {\n // finalize writes NaN at invalid x: copy so the input is never changed\n y = new Float64Array(count);\n y.set(ys as ArrayLike<number>);\n } else {\n y = new Float64Array(count);\n for (let i = 0; i < count; i++) y[i] = resolveY(ys[i]);\n }\n let size: Float32Array | null = null;\n if (data.size) {\n size = new Float32Array(count);\n for (let i = 0; i < count; i++) size[i] = toNumber(data.size[i]);\n }\n return finalize(x, y, count, {\n ...none,\n size,\n open: column(data.open, count),\n high: column(data.high, count),\n low: column(data.low, count),\n value: column(data.value, count),\n });\n }\n\n const list = data as ArrayLike<unknown>;\n const count = list.length;\n const x = new Float64Array(count);\n const y = new Float64Array(count);\n let size: Float32Array | null = null;\n let colors: (string | undefined)[] | null = null;\n let labels: (string | undefined)[] | null = null;\n let open: Float64Array | null = null;\n let high: Float64Array | null = null;\n let low: Float64Array | null = null;\n let value: Float64Array | null = null;\n const nanColumn = () => new Float64Array(count).fill(NaN);\n\n for (let i = 0; i < count; i++) {\n const item = list[i];\n if (item === null || item === undefined || typeof item === \"number\") {\n x[i] = i;\n y[i] = toNumber(item);\n } else if (Array.isArray(item)) {\n x[i] = resolveX(item[0] as ChartXValue, i);\n y[i] = resolveY(item[1]);\n } else if (typeof item === \"object\") {\n const d = item as {\n x?: ChartXValue;\n y?: number | string | null;\n size?: number;\n color?: string;\n label?: string;\n open?: number;\n high?: number;\n low?: number;\n value?: number | null;\n };\n x[i] = d.x === undefined ? i : resolveX(d.x, i);\n y[i] = resolveY(d.y);\n if (d.size !== undefined) {\n size ??= new Float32Array(count).fill(NaN);\n size[i] = d.size;\n }\n if (d.color !== undefined) {\n colors ??= new Array<string | undefined>(count);\n colors[i] = d.color;\n }\n if (d.label !== undefined) {\n labels ??= new Array<string | undefined>(count);\n labels[i] = d.label;\n }\n if (d.open !== undefined) (open ??= nanColumn())[i] = toNumber(d.open);\n if (d.high !== undefined) (high ??= nanColumn())[i] = toNumber(d.high);\n if (d.low !== undefined) (low ??= nanColumn())[i] = toNumber(d.low);\n if (d.value !== undefined) (value ??= nanColumn())[i] = toNumber(d.value);\n } else {\n x[i] = i;\n y[i] = NaN;\n }\n }\n return finalize(x, y, count, {\n size,\n colors,\n labels,\n open,\n high,\n low,\n value,\n });\n};\n\n/** First index whose x is >= value (sorted x) */\nexport const lowerBound = (\n x: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n let lo = 0;\n let hi = count;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (x[mid] < value) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n};\n\n/** Index of the point with the closest x and a finite y (sorted x), -1 if none */\nexport const nearestIndex = (\n x: ArrayLike<number>,\n y: ArrayLike<number>,\n count: number,\n value: number,\n): number => {\n if (count === 0) return -1;\n const i = lowerBound(x, count, value);\n let left = i - 1;\n let right = i;\n while (left >= 0 && !Number.isFinite(y[left])) left--;\n while (right < count && !Number.isFinite(y[right])) right++;\n if (left < 0) return right < count ? right : -1;\n if (right >= count) return left;\n return value - x[left] <= x[right] - value ? left : right;\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var e=(e,t)=>(Object.assign(e.style,t),e),t=(t,n)=>e(t.createElement(n),{position:`absolute`,left:`0`,top:`0`,pointerEvents:`none`}),n=n=>{let r=n.ownerDocument,i=e(r.createElement(`div`),{position:`relative`,display:`flex`,flexDirection:`column`,width:`100%`,height:`100%`,minHeight:`0`,fontFamily:`var(--font-family-sans, system-ui, sans-serif)`,color:`var(--text-color, #1f2937)`});i.className=`minerva-chart`;let a=e(r.createElement(`div`),{display:`none`,flexWrap:`wrap`,alignItems:`center`,gap:`4px 14px`,padding:`0 4px 8px`,fontSize:`12px`,lineHeight:`18px`});a.className=`minerva-chart-legend`;let o=e(r.createElement(`div`),{position:`relative`,flex:`1 1 auto`,minHeight:`0`,outline:`none`,touchAction:`pan-y`,userSelect:`none`,borderRadius:`6px`});o.className=`minerva-chart-stage`,o.setAttribute(`role`,`figure`),o.setAttribute(`aria-roledescription`,`chart`);let s=t(r,`canvas`),c=t(r,`canvas`);s.setAttribute(`aria-hidden`,`true`),c.setAttribute(`aria-hidden`,`true`);let l=e(t(r,`div`),{right:`0`,bottom:`0`,overflow:`hidden`});l.setAttribute(`aria-hidden`,`true`);let u=e(r.createElement(`div`),{position:`absolute`,width:`0`,borderLeft:`1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 55%, transparent)`,display:`none`});l.appendChild(u);let d=e(r.createElement(`div`),{position:`absolute`,left:`0`,top:`0`,zIndex:`2`,display:`none`,pointerEvents:`none`,minWidth:`128px`,maxWidth:`320px`,padding:`8px 10px`,borderRadius:`8px`,border:`1px solid var(--border-color, #e5e7eb)`,background:`var(--surface-elevated-color, var(--background-color, #fff))`,color:`var(--text-color, #1f2937)`,boxShadow:`0 8px 24px -6px rgba(15, 23, 42, 0.18), 0 2px 6px -2px rgba(15, 23, 42, 0.12)`,fontSize:`12px`,lineHeight:`18px`,whiteSpace:`nowrap`,transition:`transform 60ms ease-out`});d.className=`minerva-chart-tooltip`,d.setAttribute(`role`,`tooltip`);let f=e(r.createElement(`div`),{position:`absolute`,width:`1px`,height:`1px`,overflow:`hidden`,clip:`rect(0 0 0 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`});return f.setAttribute(`aria-live`,`polite`),o.append(s,c,l,d,f),i.append(a,o),n.appendChild(i),{root:i,legend:a,stage:o,background:s,foreground:c,hover:l,crosshair:u,tooltip:d,live:f}},r=e=>{let n=t(e,`canvas`);return n.setAttribute(`aria-hidden`,`true`),n.className=`minerva-chart-data`,n},i=(t,n,r)=>{let i=t.createElement(`span`);return e(i,{display:`inline-block`,flex:`none`,width:r===`line`?`14px`:`9px`,height:r===`line`?`3px`:`9px`,borderRadius:r===`dot`?`50%`:`2px`,background:n}),i},a=t=>e(t.createElement(`div`),{position:`absolute`,boxSizing:`border-box`,borderRadius:`50%`,border:`2px solid var(--surface-color, var(--background-color, #fff))`,boxShadow:`0 0 0 1px rgba(15, 23, 42, 0.12), 0 1px 4px rgba(15, 23, 42, 0.25)`,transform:`translate(-50%, -50%)`}),o=t=>e(t.createElement(`div`),{position:`absolute`,boxSizing:`border-box`,borderRadius:`4px`,background:`rgba(255, 255, 255, 0.18)`,boxShadow:`0 0 0 2px var(--surface-color, var(--background-color, #fff)) inset`});exports.createBarHighlight=o,exports.createChartDom=n,exports.createDataCanvas=r,exports.createMarker=a,exports.styleElement=e,exports.swatch=i;
1
+ var e=(e,t)=>(Object.assign(e.style,t),e),t=(t,n)=>e(t.createElement(n),{position:`absolute`,left:`0`,top:`0`,pointerEvents:`none`}),n=n=>{let r=n.ownerDocument,i=e(r.createElement(`div`),{position:`relative`,display:`flex`,flexDirection:`column`,width:`100%`,height:`100%`,minHeight:`0`,fontFamily:`var(--font-family-sans, system-ui, sans-serif)`,color:`var(--text-color, #1f2937)`});i.className=`minerva-chart`;let a=e(r.createElement(`div`),{display:`none`,flexWrap:`wrap`,alignItems:`center`,gap:`4px 14px`,padding:`0 4px 8px`,fontSize:`12px`,lineHeight:`18px`});a.className=`minerva-chart-legend`;let o=e(r.createElement(`div`),{position:`relative`,flex:`1 1 auto`,minHeight:`0`,outline:`none`,touchAction:`pan-y`,userSelect:`none`,borderRadius:`6px`});o.className=`minerva-chart-stage`,o.setAttribute(`role`,`figure`),o.setAttribute(`aria-roledescription`,`chart`);let s=t(r,`canvas`),c=t(r,`canvas`);s.setAttribute(`aria-hidden`,`true`),c.setAttribute(`aria-hidden`,`true`);let l=e(t(r,`div`),{right:`0`,bottom:`0`,overflow:`hidden`});l.setAttribute(`aria-hidden`,`true`);let u=e(t(r,`div`),{right:`0`,bottom:`0`});u.setAttribute(`aria-hidden`,`true`);let d=e(r.createElement(`div`),{position:`absolute`,width:`0`,borderLeft:`1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 45%, transparent)`,display:`none`});l.appendChild(d);let f=e(r.createElement(`div`),{position:`absolute`,left:`0`,top:`0`,zIndex:`2`,display:`none`,pointerEvents:`none`,minWidth:`128px`,maxWidth:`320px`,padding:`8px 12px`,borderRadius:`10px`,border:`1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)`,background:`var(--surface-elevated-color, var(--background-color, #fff))`,color:`var(--text-color, #1f2937)`,boxShadow:`0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)`,fontSize:`12px`,lineHeight:`20px`,whiteSpace:`nowrap`,transition:`transform 80ms ease-out`});f.className=`minerva-chart-tooltip`,f.setAttribute(`role`,`tooltip`);let p=e(r.createElement(`div`),{position:`absolute`,width:`1px`,height:`1px`,overflow:`hidden`,clip:`rect(0 0 0 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`});return p.setAttribute(`aria-live`,`polite`),o.append(s,u,c,l,f,p),i.append(a,o),n.appendChild(i),{root:i,legend:a,stage:o,background:s,underlay:u,foreground:c,hover:l,crosshair:d,tooltip:f,live:p}},r=e=>{let n=t(e,`canvas`);return n.setAttribute(`aria-hidden`,`true`),n.className=`minerva-chart-data`,n},i=(t,n,r)=>{let i=t.createElement(`span`);return e(i,{display:`inline-block`,flex:`none`,width:r===`line`?`14px`:`9px`,height:r===`line`?`3px`:`9px`,borderRadius:r===`dot`?`50%`:`2px`,background:n}),i},a=t=>e(t.createElement(`div`),{position:`absolute`,boxSizing:`border-box`,borderRadius:`50%`,border:`2px solid var(--surface-color, var(--background-color, #fff))`,transform:`translate(-50%, -50%)`,transition:`box-shadow 120ms ease-out`}),o=t=>e(t.createElement(`div`),{position:`absolute`,boxSizing:`border-box`,borderRadius:`6px`,background:`color-mix(in srgb, var(--text-color, #1f2937) 6%, transparent)`});exports.createBand=o,exports.createChartDom=n,exports.createDataCanvas=r,exports.createMarker=a,exports.styleElement=e,exports.swatch=i;
2
2
  //# sourceMappingURL=dom.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom.cjs","names":["assign","el","style","layer","doc","tag","createChartDom","container","root","legend","stage","background","foreground","hover","crosshair","tooltip","live","createDataCanvas","canvas","swatch","shape","color","createMarker","createBarHighlight"],"sources":["../../../../charts/src/engine/dom.ts"],"sourcesContent":["// DOM of a chart: legend, stage with the canvas layers, hover markers,\n// tooltip and a live region. Styled inline with the Minerva CSS variables\n// (and fallbacks), so the engine needs no stylesheet.\n\nexport interface ChartDom {\n root: HTMLDivElement;\n legend: HTMLDivElement;\n stage: HTMLDivElement;\n background: HTMLCanvasElement;\n foreground: HTMLCanvasElement;\n hover: HTMLDivElement;\n crosshair: HTMLDivElement;\n tooltip: HTMLDivElement;\n live: HTMLDivElement;\n}\n\nconst assign = (el: HTMLElement, style: Partial<CSSStyleDeclaration>) => {\n Object.assign(el.style, style);\n return el;\n};\n\nconst layer = (doc: Document, tag: \"canvas\" | \"div\") =>\n assign(doc.createElement(tag), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n\nexport const createChartDom = (container: HTMLElement): ChartDom => {\n const doc = container.ownerDocument;\n const root = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n }) as HTMLDivElement;\n root.className = \"minerva-chart\";\n\n const legend = assign(doc.createElement(\"div\"), {\n display: \"none\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: \"4px 14px\",\n padding: \"0 4px 8px\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n }) as HTMLDivElement;\n legend.className = \"minerva-chart-legend\";\n\n const stage = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n flex: \"1 1 auto\",\n minHeight: \"0\",\n outline: \"none\",\n touchAction: \"pan-y\",\n userSelect: \"none\",\n borderRadius: \"6px\",\n }) as HTMLDivElement;\n stage.className = \"minerva-chart-stage\";\n stage.setAttribute(\"role\", \"figure\");\n stage.setAttribute(\"aria-roledescription\", \"chart\");\n\n const background = layer(doc, \"canvas\") as HTMLCanvasElement;\n const foreground = layer(doc, \"canvas\") as HTMLCanvasElement;\n background.setAttribute(\"aria-hidden\", \"true\");\n foreground.setAttribute(\"aria-hidden\", \"true\");\n\n const hover = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n overflow: \"hidden\",\n }) as HTMLDivElement;\n hover.setAttribute(\"aria-hidden\", \"true\");\n\n const crosshair = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"0\",\n borderLeft:\n \"1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 55%, transparent)\",\n display: \"none\",\n }) as HTMLDivElement;\n hover.appendChild(crosshair);\n\n const tooltip = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"2\",\n display: \"none\",\n pointerEvents: \"none\",\n minWidth: \"128px\",\n maxWidth: \"320px\",\n padding: \"8px 10px\",\n borderRadius: \"8px\",\n border: \"1px solid var(--border-color, #e5e7eb)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 8px 24px -6px rgba(15, 23, 42, 0.18), 0 2px 6px -2px rgba(15, 23, 42, 0.12)\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n whiteSpace: \"nowrap\",\n transition: \"transform 60ms ease-out\",\n }) as HTMLDivElement;\n tooltip.className = \"minerva-chart-tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n\n const live = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n }) as HTMLDivElement;\n live.setAttribute(\"aria-live\", \"polite\");\n\n stage.append(background, foreground, hover, tooltip, live);\n root.append(legend, stage);\n container.appendChild(root);\n return {\n root,\n legend,\n stage,\n background,\n foreground,\n hover,\n crosshair,\n tooltip,\n live,\n };\n};\n\n/** Canvas of the data layer, placed over the plot area */\nexport const createDataCanvas = (doc: Document): HTMLCanvasElement => {\n const canvas = layer(doc, \"canvas\") as HTMLCanvasElement;\n canvas.setAttribute(\"aria-hidden\", \"true\");\n canvas.className = \"minerva-chart-data\";\n return canvas;\n};\n\nexport const swatch = (\n doc: Document,\n color: string,\n shape: \"dot\" | \"square\" | \"line\",\n) => {\n const el = doc.createElement(\"span\");\n assign(el, {\n display: \"inline-block\",\n flex: \"none\",\n width: shape === \"line\" ? \"14px\" : \"9px\",\n height: shape === \"line\" ? \"3px\" : \"9px\",\n borderRadius: shape === \"dot\" ? \"50%\" : shape === \"line\" ? \"2px\" : \"2px\",\n background: color,\n });\n return el;\n};\n\n/** Marker of a hovered point (dot with a ring in the background color) */\nexport const createMarker = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"50%\",\n border: \"2px solid var(--surface-color, var(--background-color, #fff))\",\n boxShadow:\n \"0 0 0 1px rgba(15, 23, 42, 0.12), 0 1px 4px rgba(15, 23, 42, 0.25)\",\n transform: \"translate(-50%, -50%)\",\n }) as HTMLDivElement;\n\n/** Highlight of a hovered bar */\nexport const createBarHighlight = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"4px\",\n background: \"rgba(255, 255, 255, 0.18)\",\n boxShadow:\n \"0 0 0 2px var(--surface-color, var(--background-color, #fff)) inset\",\n }) as HTMLDivElement;\n\nexport { assign as styleElement };\n"],"mappings":"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"}
1
+ {"version":3,"file":"dom.cjs","names":["assign","el","style","layer","doc","tag","createChartDom","container","root","legend","stage","background","foreground","hover","underlay","crosshair","tooltip","live","createDataCanvas","canvas","swatch","shape","color","createMarker","createBand"],"sources":["../../../../charts/src/engine/dom.ts"],"sourcesContent":["// DOM of a chart: legend, stage with the canvas layers, hover markers,\n// tooltip and a live region. Styled inline with the Minerva CSS variables\n// (and fallbacks), so the engine needs no stylesheet.\n\nexport interface ChartDom {\n root: HTMLDivElement;\n legend: HTMLDivElement;\n stage: HTMLDivElement;\n background: HTMLCanvasElement;\n /** Hover band of bars, drawn below the data */\n underlay: HTMLDivElement;\n foreground: HTMLCanvasElement;\n hover: HTMLDivElement;\n crosshair: HTMLDivElement;\n tooltip: HTMLDivElement;\n live: HTMLDivElement;\n}\n\nconst assign = (el: HTMLElement, style: Partial<CSSStyleDeclaration>) => {\n Object.assign(el.style, style);\n return el;\n};\n\nconst layer = (doc: Document, tag: \"canvas\" | \"div\") =>\n assign(doc.createElement(tag), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n\nexport const createChartDom = (container: HTMLElement): ChartDom => {\n const doc = container.ownerDocument;\n const root = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n }) as HTMLDivElement;\n root.className = \"minerva-chart\";\n\n const legend = assign(doc.createElement(\"div\"), {\n display: \"none\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: \"4px 14px\",\n padding: \"0 4px 8px\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n }) as HTMLDivElement;\n legend.className = \"minerva-chart-legend\";\n\n const stage = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n flex: \"1 1 auto\",\n minHeight: \"0\",\n outline: \"none\",\n touchAction: \"pan-y\",\n userSelect: \"none\",\n borderRadius: \"6px\",\n }) as HTMLDivElement;\n stage.className = \"minerva-chart-stage\";\n stage.setAttribute(\"role\", \"figure\");\n stage.setAttribute(\"aria-roledescription\", \"chart\");\n\n const background = layer(doc, \"canvas\") as HTMLCanvasElement;\n const foreground = layer(doc, \"canvas\") as HTMLCanvasElement;\n background.setAttribute(\"aria-hidden\", \"true\");\n foreground.setAttribute(\"aria-hidden\", \"true\");\n\n const hover = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n overflow: \"hidden\",\n }) as HTMLDivElement;\n hover.setAttribute(\"aria-hidden\", \"true\");\n\n const underlay = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n }) as HTMLDivElement;\n underlay.setAttribute(\"aria-hidden\", \"true\");\n\n const crosshair = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"0\",\n borderLeft:\n \"1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 45%, transparent)\",\n display: \"none\",\n }) as HTMLDivElement;\n hover.appendChild(crosshair);\n\n const tooltip = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"2\",\n display: \"none\",\n pointerEvents: \"none\",\n minWidth: \"128px\",\n maxWidth: \"320px\",\n padding: \"8px 12px\",\n borderRadius: \"10px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)\",\n fontSize: \"12px\",\n lineHeight: \"20px\",\n whiteSpace: \"nowrap\",\n transition: \"transform 80ms ease-out\",\n }) as HTMLDivElement;\n tooltip.className = \"minerva-chart-tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n\n const live = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n }) as HTMLDivElement;\n live.setAttribute(\"aria-live\", \"polite\");\n\n stage.append(background, underlay, foreground, hover, tooltip, live);\n root.append(legend, stage);\n container.appendChild(root);\n return {\n root,\n legend,\n stage,\n background,\n underlay,\n foreground,\n hover,\n crosshair,\n tooltip,\n live,\n };\n};\n\n/** Canvas of the data layer, placed over the plot area */\nexport const createDataCanvas = (doc: Document): HTMLCanvasElement => {\n const canvas = layer(doc, \"canvas\") as HTMLCanvasElement;\n canvas.setAttribute(\"aria-hidden\", \"true\");\n canvas.className = \"minerva-chart-data\";\n return canvas;\n};\n\nexport const swatch = (\n doc: Document,\n color: string,\n shape: \"dot\" | \"square\" | \"line\",\n) => {\n const el = doc.createElement(\"span\");\n assign(el, {\n display: \"inline-block\",\n flex: \"none\",\n width: shape === \"line\" ? \"14px\" : \"9px\",\n height: shape === \"line\" ? \"3px\" : \"9px\",\n borderRadius: shape === \"dot\" ? \"50%\" : shape === \"line\" ? \"2px\" : \"2px\",\n background: color,\n });\n return el;\n};\n\n/** Marker of a hovered point: a dot with a thin ring in the background color and a soft halo */\nexport const createMarker = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"50%\",\n border: \"2px solid var(--surface-color, var(--background-color, #fff))\",\n transform: \"translate(-50%, -50%)\",\n transition: \"box-shadow 120ms ease-out\",\n }) as HTMLDivElement;\n\n/** Band behind the hovered bars (or outline of a heatmap cell) */\nexport const createBand = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"6px\",\n background:\n \"color-mix(in srgb, var(--text-color, #1f2937) 6%, transparent)\",\n }) as HTMLDivElement;\n\nexport { assign as styleElement };\n"],"mappings":"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"}
@@ -3,6 +3,8 @@ export interface ChartDom {
3
3
  legend: HTMLDivElement;
4
4
  stage: HTMLDivElement;
5
5
  background: HTMLCanvasElement;
6
+ /** Hover band of bars, drawn below the data */
7
+ underlay: HTMLDivElement;
6
8
  foreground: HTMLCanvasElement;
7
9
  hover: HTMLDivElement;
8
10
  crosshair: HTMLDivElement;
@@ -14,8 +16,8 @@ export declare const createChartDom: (container: HTMLElement) => ChartDom;
14
16
  /** Canvas of the data layer, placed over the plot area */
15
17
  export declare const createDataCanvas: (doc: Document) => HTMLCanvasElement;
16
18
  export declare const swatch: (doc: Document, color: string, shape: "dot" | "square" | "line") => HTMLSpanElement;
17
- /** Marker of a hovered point (dot with a ring in the background color) */
19
+ /** Marker of a hovered point: a dot with a thin ring in the background color and a soft halo */
18
20
  export declare const createMarker: (doc: Document) => HTMLDivElement;
19
- /** Highlight of a hovered bar */
20
- export declare const createBarHighlight: (doc: Document) => HTMLDivElement;
21
+ /** Band behind the hovered bars (or outline of a heatmap cell) */
22
+ export declare const createBand: (doc: Document) => HTMLDivElement;
21
23
  export { assign as styleElement };
@@ -3,6 +3,8 @@ export interface ChartDom {
3
3
  legend: HTMLDivElement;
4
4
  stage: HTMLDivElement;
5
5
  background: HTMLCanvasElement;
6
+ /** Hover band of bars, drawn below the data */
7
+ underlay: HTMLDivElement;
6
8
  foreground: HTMLCanvasElement;
7
9
  hover: HTMLDivElement;
8
10
  crosshair: HTMLDivElement;
@@ -14,8 +16,8 @@ export declare const createChartDom: (container: HTMLElement) => ChartDom;
14
16
  /** Canvas of the data layer, placed over the plot area */
15
17
  export declare const createDataCanvas: (doc: Document) => HTMLCanvasElement;
16
18
  export declare const swatch: (doc: Document, color: string, shape: "dot" | "square" | "line") => HTMLSpanElement;
17
- /** Marker of a hovered point (dot with a ring in the background color) */
19
+ /** Marker of a hovered point: a dot with a thin ring in the background color and a soft halo */
18
20
  export declare const createMarker: (doc: Document) => HTMLDivElement;
19
- /** Highlight of a hovered bar */
20
- export declare const createBarHighlight: (doc: Document) => HTMLDivElement;
21
+ /** Band behind the hovered bars (or outline of a heatmap cell) */
22
+ export declare const createBand: (doc: Document) => HTMLDivElement;
21
23
  export { assign as styleElement };
@@ -44,14 +44,19 @@ var e = (e, t) => (Object.assign(e.style, t), e), t = (t, n) => e(t.createElemen
44
44
  overflow: "hidden"
45
45
  });
46
46
  l.setAttribute("aria-hidden", "true");
47
- let u = e(r.createElement("div"), {
47
+ let u = e(t(r, "div"), {
48
+ right: "0",
49
+ bottom: "0"
50
+ });
51
+ u.setAttribute("aria-hidden", "true");
52
+ let d = e(r.createElement("div"), {
48
53
  position: "absolute",
49
54
  width: "0",
50
- borderLeft: "1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 55%, transparent)",
55
+ borderLeft: "1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 45%, transparent)",
51
56
  display: "none"
52
57
  });
53
- l.appendChild(u);
54
- let d = e(r.createElement("div"), {
58
+ l.appendChild(d);
59
+ let f = e(r.createElement("div"), {
55
60
  position: "absolute",
56
61
  left: "0",
57
62
  top: "0",
@@ -60,19 +65,19 @@ var e = (e, t) => (Object.assign(e.style, t), e), t = (t, n) => e(t.createElemen
60
65
  pointerEvents: "none",
61
66
  minWidth: "128px",
62
67
  maxWidth: "320px",
63
- padding: "8px 10px",
64
- borderRadius: "8px",
65
- border: "1px solid var(--border-color, #e5e7eb)",
68
+ padding: "8px 12px",
69
+ borderRadius: "10px",
70
+ border: "1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)",
66
71
  background: "var(--surface-elevated-color, var(--background-color, #fff))",
67
72
  color: "var(--text-color, #1f2937)",
68
- boxShadow: "0 8px 24px -6px rgba(15, 23, 42, 0.18), 0 2px 6px -2px rgba(15, 23, 42, 0.12)",
73
+ boxShadow: "0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)",
69
74
  fontSize: "12px",
70
- lineHeight: "18px",
75
+ lineHeight: "20px",
71
76
  whiteSpace: "nowrap",
72
- transition: "transform 60ms ease-out"
77
+ transition: "transform 80ms ease-out"
73
78
  });
74
- d.className = "minerva-chart-tooltip", d.setAttribute("role", "tooltip");
75
- let f = e(r.createElement("div"), {
79
+ f.className = "minerva-chart-tooltip", f.setAttribute("role", "tooltip");
80
+ let p = e(r.createElement("div"), {
76
81
  position: "absolute",
77
82
  width: "1px",
78
83
  height: "1px",
@@ -81,16 +86,17 @@ var e = (e, t) => (Object.assign(e.style, t), e), t = (t, n) => e(t.createElemen
81
86
  clipPath: "inset(50%)",
82
87
  whiteSpace: "nowrap"
83
88
  });
84
- return f.setAttribute("aria-live", "polite"), o.append(s, c, l, d, f), i.append(a, o), n.appendChild(i), {
89
+ return p.setAttribute("aria-live", "polite"), o.append(s, u, c, l, f, p), i.append(a, o), n.appendChild(i), {
85
90
  root: i,
86
91
  legend: a,
87
92
  stage: o,
88
93
  background: s,
94
+ underlay: u,
89
95
  foreground: c,
90
96
  hover: l,
91
- crosshair: u,
92
- tooltip: d,
93
- live: f
97
+ crosshair: d,
98
+ tooltip: f,
99
+ live: p
94
100
  };
95
101
  }, r = (e) => {
96
102
  let n = t(e, "canvas");
@@ -110,16 +116,15 @@ var e = (e, t) => (Object.assign(e.style, t), e), t = (t, n) => e(t.createElemen
110
116
  boxSizing: "border-box",
111
117
  borderRadius: "50%",
112
118
  border: "2px solid var(--surface-color, var(--background-color, #fff))",
113
- boxShadow: "0 0 0 1px rgba(15, 23, 42, 0.12), 0 1px 4px rgba(15, 23, 42, 0.25)",
114
- transform: "translate(-50%, -50%)"
119
+ transform: "translate(-50%, -50%)",
120
+ transition: "box-shadow 120ms ease-out"
115
121
  }), o = (t) => e(t.createElement("div"), {
116
122
  position: "absolute",
117
123
  boxSizing: "border-box",
118
- borderRadius: "4px",
119
- background: "rgba(255, 255, 255, 0.18)",
120
- boxShadow: "0 0 0 2px var(--surface-color, var(--background-color, #fff)) inset"
124
+ borderRadius: "6px",
125
+ background: "color-mix(in srgb, var(--text-color, #1f2937) 6%, transparent)"
121
126
  });
122
127
  //#endregion
123
- export { o as createBarHighlight, n as createChartDom, r as createDataCanvas, a as createMarker, e as styleElement, i as swatch };
128
+ export { o as createBand, n as createChartDom, r as createDataCanvas, a as createMarker, e as styleElement, i as swatch };
124
129
 
125
130
  //# sourceMappingURL=dom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","names":["assign","el","style","layer","doc","tag","createChartDom","container","root","legend","stage","background","foreground","hover","crosshair","tooltip","live","createDataCanvas","canvas","swatch","shape","color","createMarker","createBarHighlight"],"sources":["../../../../charts/src/engine/dom.ts"],"sourcesContent":["// DOM of a chart: legend, stage with the canvas layers, hover markers,\n// tooltip and a live region. Styled inline with the Minerva CSS variables\n// (and fallbacks), so the engine needs no stylesheet.\n\nexport interface ChartDom {\n root: HTMLDivElement;\n legend: HTMLDivElement;\n stage: HTMLDivElement;\n background: HTMLCanvasElement;\n foreground: HTMLCanvasElement;\n hover: HTMLDivElement;\n crosshair: HTMLDivElement;\n tooltip: HTMLDivElement;\n live: HTMLDivElement;\n}\n\nconst assign = (el: HTMLElement, style: Partial<CSSStyleDeclaration>) => {\n Object.assign(el.style, style);\n return el;\n};\n\nconst layer = (doc: Document, tag: \"canvas\" | \"div\") =>\n assign(doc.createElement(tag), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n\nexport const createChartDom = (container: HTMLElement): ChartDom => {\n const doc = container.ownerDocument;\n const root = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n }) as HTMLDivElement;\n root.className = \"minerva-chart\";\n\n const legend = assign(doc.createElement(\"div\"), {\n display: \"none\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: \"4px 14px\",\n padding: \"0 4px 8px\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n }) as HTMLDivElement;\n legend.className = \"minerva-chart-legend\";\n\n const stage = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n flex: \"1 1 auto\",\n minHeight: \"0\",\n outline: \"none\",\n touchAction: \"pan-y\",\n userSelect: \"none\",\n borderRadius: \"6px\",\n }) as HTMLDivElement;\n stage.className = \"minerva-chart-stage\";\n stage.setAttribute(\"role\", \"figure\");\n stage.setAttribute(\"aria-roledescription\", \"chart\");\n\n const background = layer(doc, \"canvas\") as HTMLCanvasElement;\n const foreground = layer(doc, \"canvas\") as HTMLCanvasElement;\n background.setAttribute(\"aria-hidden\", \"true\");\n foreground.setAttribute(\"aria-hidden\", \"true\");\n\n const hover = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n overflow: \"hidden\",\n }) as HTMLDivElement;\n hover.setAttribute(\"aria-hidden\", \"true\");\n\n const crosshair = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"0\",\n borderLeft:\n \"1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 55%, transparent)\",\n display: \"none\",\n }) as HTMLDivElement;\n hover.appendChild(crosshair);\n\n const tooltip = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"2\",\n display: \"none\",\n pointerEvents: \"none\",\n minWidth: \"128px\",\n maxWidth: \"320px\",\n padding: \"8px 10px\",\n borderRadius: \"8px\",\n border: \"1px solid var(--border-color, #e5e7eb)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 8px 24px -6px rgba(15, 23, 42, 0.18), 0 2px 6px -2px rgba(15, 23, 42, 0.12)\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n whiteSpace: \"nowrap\",\n transition: \"transform 60ms ease-out\",\n }) as HTMLDivElement;\n tooltip.className = \"minerva-chart-tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n\n const live = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n }) as HTMLDivElement;\n live.setAttribute(\"aria-live\", \"polite\");\n\n stage.append(background, foreground, hover, tooltip, live);\n root.append(legend, stage);\n container.appendChild(root);\n return {\n root,\n legend,\n stage,\n background,\n foreground,\n hover,\n crosshair,\n tooltip,\n live,\n };\n};\n\n/** Canvas of the data layer, placed over the plot area */\nexport const createDataCanvas = (doc: Document): HTMLCanvasElement => {\n const canvas = layer(doc, \"canvas\") as HTMLCanvasElement;\n canvas.setAttribute(\"aria-hidden\", \"true\");\n canvas.className = \"minerva-chart-data\";\n return canvas;\n};\n\nexport const swatch = (\n doc: Document,\n color: string,\n shape: \"dot\" | \"square\" | \"line\",\n) => {\n const el = doc.createElement(\"span\");\n assign(el, {\n display: \"inline-block\",\n flex: \"none\",\n width: shape === \"line\" ? \"14px\" : \"9px\",\n height: shape === \"line\" ? \"3px\" : \"9px\",\n borderRadius: shape === \"dot\" ? \"50%\" : shape === \"line\" ? \"2px\" : \"2px\",\n background: color,\n });\n return el;\n};\n\n/** Marker of a hovered point (dot with a ring in the background color) */\nexport const createMarker = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"50%\",\n border: \"2px solid var(--surface-color, var(--background-color, #fff))\",\n boxShadow:\n \"0 0 0 1px rgba(15, 23, 42, 0.12), 0 1px 4px rgba(15, 23, 42, 0.25)\",\n transform: \"translate(-50%, -50%)\",\n }) as HTMLDivElement;\n\n/** Highlight of a hovered bar */\nexport const createBarHighlight = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"4px\",\n background: \"rgba(255, 255, 255, 0.18)\",\n boxShadow:\n \"0 0 0 2px var(--surface-color, var(--background-color, #fff)) inset\",\n }) as HTMLDivElement;\n\nexport { assign as styleElement };\n"],"mappings":"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"}
1
+ {"version":3,"file":"dom.js","names":["assign","el","style","layer","doc","tag","createChartDom","container","root","legend","stage","background","foreground","hover","underlay","crosshair","tooltip","live","createDataCanvas","canvas","swatch","shape","color","createMarker","createBand"],"sources":["../../../../charts/src/engine/dom.ts"],"sourcesContent":["// DOM of a chart: legend, stage with the canvas layers, hover markers,\n// tooltip and a live region. Styled inline with the Minerva CSS variables\n// (and fallbacks), so the engine needs no stylesheet.\n\nexport interface ChartDom {\n root: HTMLDivElement;\n legend: HTMLDivElement;\n stage: HTMLDivElement;\n background: HTMLCanvasElement;\n /** Hover band of bars, drawn below the data */\n underlay: HTMLDivElement;\n foreground: HTMLCanvasElement;\n hover: HTMLDivElement;\n crosshair: HTMLDivElement;\n tooltip: HTMLDivElement;\n live: HTMLDivElement;\n}\n\nconst assign = (el: HTMLElement, style: Partial<CSSStyleDeclaration>) => {\n Object.assign(el.style, style);\n return el;\n};\n\nconst layer = (doc: Document, tag: \"canvas\" | \"div\") =>\n assign(doc.createElement(tag), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n\nexport const createChartDom = (container: HTMLElement): ChartDom => {\n const doc = container.ownerDocument;\n const root = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n minHeight: \"0\",\n fontFamily: \"var(--font-family-sans, system-ui, sans-serif)\",\n color: \"var(--text-color, #1f2937)\",\n }) as HTMLDivElement;\n root.className = \"minerva-chart\";\n\n const legend = assign(doc.createElement(\"div\"), {\n display: \"none\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n gap: \"4px 14px\",\n padding: \"0 4px 8px\",\n fontSize: \"12px\",\n lineHeight: \"18px\",\n }) as HTMLDivElement;\n legend.className = \"minerva-chart-legend\";\n\n const stage = assign(doc.createElement(\"div\"), {\n position: \"relative\",\n flex: \"1 1 auto\",\n minHeight: \"0\",\n outline: \"none\",\n touchAction: \"pan-y\",\n userSelect: \"none\",\n borderRadius: \"6px\",\n }) as HTMLDivElement;\n stage.className = \"minerva-chart-stage\";\n stage.setAttribute(\"role\", \"figure\");\n stage.setAttribute(\"aria-roledescription\", \"chart\");\n\n const background = layer(doc, \"canvas\") as HTMLCanvasElement;\n const foreground = layer(doc, \"canvas\") as HTMLCanvasElement;\n background.setAttribute(\"aria-hidden\", \"true\");\n foreground.setAttribute(\"aria-hidden\", \"true\");\n\n const hover = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n overflow: \"hidden\",\n }) as HTMLDivElement;\n hover.setAttribute(\"aria-hidden\", \"true\");\n\n const underlay = assign(layer(doc, \"div\"), {\n right: \"0\",\n bottom: \"0\",\n }) as HTMLDivElement;\n underlay.setAttribute(\"aria-hidden\", \"true\");\n\n const crosshair = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"0\",\n borderLeft:\n \"1px dashed color-mix(in srgb, var(--text-secondary-color, #6b7280) 45%, transparent)\",\n display: \"none\",\n }) as HTMLDivElement;\n hover.appendChild(crosshair);\n\n const tooltip = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n zIndex: \"2\",\n display: \"none\",\n pointerEvents: \"none\",\n minWidth: \"128px\",\n maxWidth: \"320px\",\n padding: \"8px 12px\",\n borderRadius: \"10px\",\n border:\n \"1px solid color-mix(in srgb, var(--border-color, #e5e7eb) 60%, transparent)\",\n background: \"var(--surface-elevated-color, var(--background-color, #fff))\",\n color: \"var(--text-color, #1f2937)\",\n boxShadow:\n \"0 12px 32px -8px rgba(15, 23, 42, 0.16), 0 4px 10px -4px rgba(15, 23, 42, 0.08)\",\n fontSize: \"12px\",\n lineHeight: \"20px\",\n whiteSpace: \"nowrap\",\n transition: \"transform 80ms ease-out\",\n }) as HTMLDivElement;\n tooltip.className = \"minerva-chart-tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n\n const live = assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n whiteSpace: \"nowrap\",\n }) as HTMLDivElement;\n live.setAttribute(\"aria-live\", \"polite\");\n\n stage.append(background, underlay, foreground, hover, tooltip, live);\n root.append(legend, stage);\n container.appendChild(root);\n return {\n root,\n legend,\n stage,\n background,\n underlay,\n foreground,\n hover,\n crosshair,\n tooltip,\n live,\n };\n};\n\n/** Canvas of the data layer, placed over the plot area */\nexport const createDataCanvas = (doc: Document): HTMLCanvasElement => {\n const canvas = layer(doc, \"canvas\") as HTMLCanvasElement;\n canvas.setAttribute(\"aria-hidden\", \"true\");\n canvas.className = \"minerva-chart-data\";\n return canvas;\n};\n\nexport const swatch = (\n doc: Document,\n color: string,\n shape: \"dot\" | \"square\" | \"line\",\n) => {\n const el = doc.createElement(\"span\");\n assign(el, {\n display: \"inline-block\",\n flex: \"none\",\n width: shape === \"line\" ? \"14px\" : \"9px\",\n height: shape === \"line\" ? \"3px\" : \"9px\",\n borderRadius: shape === \"dot\" ? \"50%\" : shape === \"line\" ? \"2px\" : \"2px\",\n background: color,\n });\n return el;\n};\n\n/** Marker of a hovered point: a dot with a thin ring in the background color and a soft halo */\nexport const createMarker = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"50%\",\n border: \"2px solid var(--surface-color, var(--background-color, #fff))\",\n transform: \"translate(-50%, -50%)\",\n transition: \"box-shadow 120ms ease-out\",\n }) as HTMLDivElement;\n\n/** Band behind the hovered bars (or outline of a heatmap cell) */\nexport const createBand = (doc: Document) =>\n assign(doc.createElement(\"div\"), {\n position: \"absolute\",\n boxSizing: \"border-box\",\n borderRadius: \"6px\",\n background:\n \"color-mix(in srgb, var(--text-color, #1f2937) 6%, transparent)\",\n }) as HTMLDivElement;\n\nexport { assign as styleElement };\n"],"mappings":";AAkBA,IAAMA,KAAU,GAAiB,OAC/B,OAAO,OAAOC,EAAG,OAAOC,CAAK,GACtBD,IAGHE,KAAS,GAAe,MAC5BH,EAAOI,EAAI,cAAcC,CAAG,GAAG;CAC7B,UAAU;CACV,MAAM;CACN,KAAK;CACL,eAAe;AACjB,CAAC,GAEUC,KAAkB,MAAqC;CAClE,IAAMF,IAAMG,EAAU,eAChBC,IAAOR,EAAOI,EAAI,cAAc,KAAK,GAAG;EAC5C,UAAU;EACV,SAAS;EACT,eAAe;EACf,OAAO;EACP,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,OAAO;CACT,CAAC;CACD,EAAK,YAAY;CAEjB,IAAMK,IAAST,EAAOI,EAAI,cAAc,KAAK,GAAG;EAC9C,SAAS;EACT,UAAU;EACV,YAAY;EACZ,KAAK;EACL,SAAS;EACT,UAAU;EACV,YAAY;CACd,CAAC;CACD,EAAO,YAAY;CAEnB,IAAMM,IAAQV,EAAOI,EAAI,cAAc,KAAK,GAAG;EAC7C,UAAU;EACV,MAAM;EACN,WAAW;EACX,SAAS;EACT,aAAa;EACb,YAAY;EACZ,cAAc;CAChB,CAAC;CAGD,AAFA,EAAM,YAAY,uBAClBM,EAAM,aAAa,QAAQ,QAAQ,GACnCA,EAAM,aAAa,wBAAwB,OAAO;CAElD,IAAMC,IAAaR,EAAMC,GAAK,QAAQ,GAChCQ,IAAaT,EAAMC,GAAK,QAAQ;CAEtC,AADAO,EAAW,aAAa,eAAe,MAAM,GAC7CC,EAAW,aAAa,eAAe,MAAM;CAE7C,IAAMC,IAAQb,EAAOG,EAAMC,GAAK,KAAK,GAAG;EACtC,OAAO;EACP,QAAQ;EACR,UAAU;CACZ,CAAC;CACD,EAAM,aAAa,eAAe,MAAM;CAExC,IAAMU,IAAWd,EAAOG,EAAMC,GAAK,KAAK,GAAG;EACzC,OAAO;EACP,QAAQ;CACV,CAAC;CACD,EAAS,aAAa,eAAe,MAAM;CAE3C,IAAMW,IAAYf,EAAOI,EAAI,cAAc,KAAK,GAAG;EACjD,UAAU;EACV,OAAO;EACP,YACE;EACF,SAAS;CACX,CAAC;CACD,EAAM,YAAYW,CAAS;CAE3B,IAAMC,IAAUhB,EAAOI,EAAI,cAAc,KAAK,GAAG;EAC/C,UAAU;EACV,MAAM;EACN,KAAK;EACL,QAAQ;EACR,SAAS;EACT,eAAe;EACf,UAAU;EACV,UAAU;EACV,SAAS;EACT,cAAc;EACd,QACE;EACF,YAAY;EACZ,OAAO;EACP,WACE;EACF,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY;CACd,CAAC;CAED,AADA,EAAQ,YAAY,yBACpBY,EAAQ,aAAa,QAAQ,SAAS;CAEtC,IAAMC,IAAOjB,EAAOI,EAAI,cAAc,KAAK,GAAG;EAC5C,UAAU;EACV,OAAO;EACP,QAAQ;EACR,UAAU;EACV,MAAM;EACN,UAAU;EACV,YAAY;CACd,CAAC;CAMD,OALAa,EAAK,aAAa,aAAa,QAAQ,GAEvCP,EAAM,OAAOC,GAAYG,GAAUF,GAAYC,GAAOG,GAASC,CAAI,GACnET,EAAK,OAAOC,GAAQC,CAAK,GACzBH,EAAU,YAAYC,CAAI,GACnB;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF,GAGaU,KAAoB,MAAqC;CACpE,IAAMC,IAAShB,EAAMC,GAAK,QAAQ;CAGlC,OAFAe,EAAO,aAAa,eAAe,MAAM,GACzC,EAAO,YAAY,sBACZA;AACT,GAEaC,KACX,GACA,GACA,MACG;CACH,IAAMnB,IAAKG,EAAI,cAAc,MAAM;CASnC,OARAJ,EAAOC,GAAI;EACT,SAAS;EACT,MAAM;EACN,OAAOoB,MAAU,SAAS,SAAS;EACnC,QAAQA,MAAU,SAAS,QAAQ;EACnC,cAAcA,MAAU,QAAQ,QAA2B;EAC3D,YAAYC;CACd,CAAC,GACMrB;AACT,GAGasB,KAAgB,MAC3BvB,EAAOI,EAAI,cAAc,KAAK,GAAG;CAC/B,UAAU;CACV,WAAW;CACX,cAAc;CACd,QAAQ;CACR,WAAW;CACX,YAAY;AACd,CAAC,GAGUoB,KAAc,MACzBxB,EAAOI,EAAI,cAAc,KAAK,GAAG;CAC/B,UAAU;CACV,WAAW;CACX,cAAc;CACd,YACE;AACJ,CAAC"}
@@ -1,2 +1,2 @@
1
- const e=require("./color.cjs"),t=require("./renderers/types.cjs");var n=(e,n)=>Number.isFinite(e)?e-n:t.GAP,r=(e,r,i,a)=>{let o=new Float32Array(i*2);for(let s=0;s<i;s++)o[s*2]=n(e[s],a.x),o[s*2+1]=Number.isFinite(r[s])?r[s]-a.y:t.GAP;return o},i={area:0,bar:1,line:2,scatter:3},a=(a,o,s)=>{let c=[],l=[],u=a.series.filter(e=>!e.hidden).sort((e,t)=>i[e.type]-i[t.type]||e.index-t.index);for(let i of u){let{x:u,y:d,count:f,sorted:p}=i.cols;switch((i.type===`line`||i.type===`scatter`)&&l.length&&c.push(...l.splice(0)),i.type){case`line`:case`area`:{let e=r(u,d,f,o);i.type===`area`&&c.push({kind:`area`,key:`${i.key}:area`,version:s,color:i.color,points:e,count:f,baseline:a.baseline-o.y,opacity:i.opacity,sorted:p}),(i.type===`area`?l:c).push({kind:`line`,key:`${i.key}:line`,version:s,color:i.color,points:e,count:f,width:i.lineWidth,sorted:p});break}case`bar`:{let e=i.barBase??new Float64Array(f),r=i.barTop??d,l=new Float32Array(f*3);for(let a=0;a<f;a++){let s=Number.isFinite(r[a])&&Number.isFinite(e[a]);l[a*3]=n(u[a]+i.barOffset,o.x),l[a*3+1]=s?e[a]-o.y:t.GAP,l[a*3+2]=s?r[a]-o.y:t.GAP}c.push({kind:`bar`,key:`${i.key}:bar`,version:s,color:i.color,instances:l,count:f,halfWidth:i.barHalfWidth,sorted:p,radius:a.series.some(e=>e!==i&&!e.hidden&&e.type===`bar`&&e.barOffset===i.barOffset)?0:3});break}default:{let n=new ArrayBuffer(f*16),r=new Float32Array(n),a=new Uint32Array(n),l=e.packColor(i.color),p=i.cols.size;for(let n=0;n<f;n++){let s=Number.isFinite(d[n])&&Number.isFinite(u[n]);r[n*4]=s?u[n]-o.x:t.GAP,r[n*4+1]=s?d[n]-o.y:t.GAP;let c=p?p[n]:NaN;r[n*4+2]=Number.isFinite(c)&&c>0?c:i.pointSize;let f=i.pointColors?.[n];a[n*4+3]=f?e.packColor(f):l}c.push({kind:`scatter`,key:`${i.key}:scatter`,version:s,color:i.color,instances:n,count:f,opacity:i.opacity,stroke:f<=5e3?1.25:0});break}}}return c.push(...l),c};exports.buildItems=a;
1
+ const e=require("./color.cjs"),t=require("./curve.cjs"),n=require("./renderers/types.cjs");var r=(e,t)=>Number.isFinite(e)?e-t:n.GAP,i={heatmap:0,area:1,bar:2,candlestick:3,line:4,scatter:5},a=e=>{let{x:n,count:r}=e.cols,i=e.stackTop??e.cols.y,a=e.stackBase;if(e.curve===`linear`)return{n:r,xAt:e=>n[e],yAt:e=>i[e],baseAt:a?e=>a[e]:null};let o=t.curvePoints(n,i,0,r,e.curve),s=a?t.curvePoints(n,a,0,r,e.curve).points:null,c=o.points;return{n:o.length,xAt:e=>c[e*2],yAt:e=>c[e*2+1],baseAt:s?e=>s[e*2+1]:null}},o=(e,t,n,r,i,a)=>{let o=new ArrayBuffer(r*16),s=new Float32Array(o),c=new Uint32Array(o);for(let e=0;e<r;e++)i(e,s,c);return{kind:`bar`,key:e,version:t,color:n.color,instances:o,count:r,...a}},s=(t,s,c)=>{let l=[],u=[],d=t.series.filter(e=>!e.hidden).sort((e,t)=>i[e.type]-i[t.type]||e.index-t.index);for(let i of d){let{x:d,y:f,count:p,sorted:m}=i.cols;switch((i.type===`line`||i.type===`scatter`)&&u.length&&l.push(...u.splice(0)),i.type){case`line`:case`area`:{let{n:e,xAt:o,yAt:p,baseAt:h}=a(i),g=new Float32Array(e*2);if(i.curve===`linear`){let t=i.stackTop??f,r=s.x,a=s.y;for(let i=0;i<e;i++){let e=d[i],o=t[i];g[i*2]=Number.isFinite(e)?e-r:n.GAP,g[i*2+1]=Number.isFinite(o)?o-a:n.GAP}}else for(let t=0;t<e;t++)g[t*2]=r(o(t),s.x),g[t*2+1]=r(p(t),s.y);if(i.type===`area`){let n=new Float32Array(e*3),a=t.baseline-s.y;for(let t=0;t<e;t++)n[t*3]=g[t*2],n[t*3+1]=g[t*2+1],n[t*3+2]=h?r(h(t),s.y):a;l.push({kind:`area`,key:`${i.key}:area`,version:c,color:i.color,points:n,count:e,opacity:i.opacity,sorted:m})}(i.type===`area`?u:l).push({kind:`line`,key:`${i.key}:line`,version:c,color:i.color,points:g,count:e,width:i.lineWidth,sorted:m});break}case`bar`:{let a=i.barBase??new Float64Array(p),u=i.barTop??f,h=e.packColor(i.color),g=t.series.some(e=>e!==i&&!e.hidden&&e.type===`bar`&&e.barOffset===i.barOffset);l.push(o(`${i.key}:bar`,c,i,p,(t,o,c)=>{let l=Number.isFinite(u[t])&&Number.isFinite(a[t]);o[t*4]=r(d[t]+i.barOffset,s.x),o[t*4+1]=l?a[t]-s.y:n.GAP,o[t*4+2]=l?u[t]-s.y:n.GAP;let f=i.pointColors?.[t];c[t*4+3]=f?e.packColor(f):h},{halfWidth:i.barHalfWidth,radius:g?0:i.radius,inset:0,minHalf:0,sorted:m}));break}case`candlestick`:{let{open:t,high:a,low:u}=i.cols,h=e.packColor(i.upColor),g=e.packColor(i.downColor),_=e=>t&&Number.isFinite(t[e])&&f[e]<t[e]?g:h;l.push(o(`${i.key}:wick`,c,i,p,(e,t,i)=>{let o=a?a[e]:f[e],c=u?u[e]:f[e],l=Number.isFinite(o)&&Number.isFinite(c)&&Number.isFinite(f[e]);t[e*4]=r(d[e],s.x),t[e*4+1]=l?c-s.y:n.GAP,t[e*4+2]=l?o-s.y:n.GAP,i[e*4+3]=_(e)},{halfWidth:0,radius:0,inset:0,minHalf:i.lineWidth/2,sorted:m}),o(`${i.key}:body`,c,i,p,(e,i,a)=>{let o=t?t[e]:f[e],c=Number.isFinite(o)&&Number.isFinite(f[e]);i[e*4]=r(d[e],s.x),i[e*4+1]=c?o-s.y:n.GAP,i[e*4+2]=c?f[e]-s.y:n.GAP,a[e*4+3]=_(e)},{halfWidth:i.barHalfWidth,radius:Math.min(i.radius,1.5),inset:0,minHalf:.5,sorted:m}));break}case`heatmap`:{let e=i.cellColors,t=i.cellHalf.y;l.push(o(`${i.key}:cells`,c,i,p,(i,a,o)=>{let c=e?e[i]:0,l=c!==0&&Number.isFinite(d[i]);a[i*4]=r(d[i],s.x),a[i*4+1]=l?f[i]-t-s.y:n.GAP,a[i*4+2]=l?f[i]+t-s.y:n.GAP,o[i*4+3]=c},{halfWidth:i.cellHalf.x,radius:i.radius,inset:1,minHalf:0,sorted:m}));break}default:{let t=new ArrayBuffer(p*16),r=new Float32Array(t),a=new Uint32Array(t),o=e.packColor(i.color),u=i.cols.size;for(let t=0;t<p;t++){let c=Number.isFinite(f[t])&&Number.isFinite(d[t]);r[t*4]=c?d[t]-s.x:n.GAP,r[t*4+1]=c?f[t]-s.y:n.GAP;let l=u?u[t]:NaN;r[t*4+2]=Number.isFinite(l)&&l>0?l:i.pointSize;let p=i.pointColors?.[t];a[t*4+3]=p?e.packColor(p):o}l.push({kind:`scatter`,key:`${i.key}:scatter`,version:c,color:i.color,instances:t,count:p,opacity:i.opacity,stroke:p<=5e3?1.25:0});break}}}return l.push(...u),l};exports.buildItems=s;
2
2
  //# sourceMappingURL=items.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"items.cjs","names":["GAP","packColor","require_color","require_types","rel","value","origin","points","out","count","i","x","o","y","DRAW_ORDER","buildItems","items","outlines","ordered","model","s","a","b","pts","base","top","instances","valid","buffer","f","u","seriesColor","sizes","size","pc"],"sources":["../../../../charts/src/engine/items.ts"],"sourcesContent":["// Chart model -> GPU-ready buffers (positions relative to an origin).\n\nimport { packColor } from \"./color\";\nimport type { ChartModel } from \"./model\";\nimport { GAP, SCATTER_STRIDE, type RenderItem } from \"./renderers/types\";\n\nexport interface Origin {\n x: number;\n y: number;\n}\n\nconst rel = (value: number, origin: number) =>\n Number.isFinite(value) ? value - origin : GAP;\n\nconst points = (x: Float64Array, y: Float64Array, count: number, o: Origin) => {\n const out = new Float32Array(count * 2);\n for (let i = 0; i < count; i++) {\n // x stays real at gaps so sorted data can be binary searched\n out[i * 2] = rel(x[i], o.x);\n out[i * 2 + 1] = Number.isFinite(y[i]) ? y[i] - o.y : GAP;\n }\n return out;\n};\n\nconst DRAW_ORDER = { area: 0, bar: 1, line: 2, scatter: 3 } as const;\n\n/** Render items of the visible series, back to front */\nexport const buildItems = (\n model: ChartModel,\n origin: Origin,\n version: number,\n): RenderItem[] => {\n const items: RenderItem[] = [];\n /** Outlines of the areas are drawn with the lines, above the bars */\n const outlines: RenderItem[] = [];\n const ordered = model.series\n .filter((s) => !s.hidden)\n .sort(\n (a, b) => DRAW_ORDER[a.type] - DRAW_ORDER[b.type] || a.index - b.index,\n );\n for (const s of ordered) {\n const { x, y, count, sorted } = s.cols;\n if ((s.type === \"line\" || s.type === \"scatter\") && outlines.length) {\n items.push(...outlines.splice(0));\n }\n switch (s.type) {\n case \"line\":\n case \"area\": {\n const pts = points(x, y, count, origin);\n if (s.type === \"area\") {\n items.push({\n kind: \"area\",\n key: `${s.key}:area`,\n version,\n color: s.color,\n points: pts,\n count,\n baseline: model.baseline - origin.y,\n opacity: s.opacity,\n sorted,\n });\n }\n (s.type === \"area\" ? outlines : items).push({\n kind: \"line\",\n key: `${s.key}:line`,\n version,\n color: s.color,\n points: pts,\n count,\n width: s.lineWidth,\n sorted,\n });\n break;\n }\n case \"bar\": {\n const base = s.barBase ?? new Float64Array(count);\n const top = s.barTop ?? y;\n const instances = new Float32Array(count * 3);\n for (let i = 0; i < count; i++) {\n const valid = Number.isFinite(top[i]) && Number.isFinite(base[i]);\n instances[i * 3] = rel(x[i] + s.barOffset, origin.x);\n instances[i * 3 + 1] = valid ? base[i] - origin.y : GAP;\n instances[i * 3 + 2] = valid ? top[i] - origin.y : GAP;\n }\n items.push({\n kind: \"bar\",\n key: `${s.key}:bar`,\n version,\n color: s.color,\n instances,\n count,\n halfWidth: s.barHalfWidth,\n sorted,\n radius: model.series.some(\n (o) =>\n o !== s &&\n !o.hidden &&\n o.type === \"bar\" &&\n o.barOffset === s.barOffset,\n )\n ? 0\n : 3,\n });\n break;\n }\n default: {\n const buffer = new ArrayBuffer(count * SCATTER_STRIDE);\n const f = new Float32Array(buffer);\n const u = new Uint32Array(buffer);\n const seriesColor = packColor(s.color);\n const sizes = s.cols.size;\n for (let i = 0; i < count; i++) {\n const valid = Number.isFinite(y[i]) && Number.isFinite(x[i]);\n f[i * 4] = valid ? x[i] - origin.x : GAP;\n f[i * 4 + 1] = valid ? y[i] - origin.y : GAP;\n const size = sizes ? sizes[i] : NaN;\n f[i * 4 + 2] = Number.isFinite(size) && size > 0 ? size : s.pointSize;\n const pc = s.pointColors?.[i];\n u[i * 4 + 3] = pc ? packColor(pc) : seriesColor;\n }\n items.push({\n kind: \"scatter\",\n key: `${s.key}:scatter`,\n version,\n color: s.color,\n instances: buffer,\n count,\n opacity: s.opacity,\n stroke: count <= 5000 ? 1.25 : 0,\n });\n break;\n }\n }\n }\n items.push(...outlines);\n return items;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"items.cjs","names":["GAP","curvePoints","packColor","require_color","require_curve","require_types","rel","value","origin","DRAW_ORDER","linePoints","s","top","stackBase","count","x","i","curved","base","points","barItem","instances","f","u","write","extra","buildItems","items","outlines","ordered","model","a","b","pts","n","y","ox","oy","xv","yv","xAt","yAt","area","baseline","baseAt","seriesColor","shared","o","version","valid","pc","up","down","colorAt","open","hi","high","lo","low","colors","hy","buffer","sizes","size"],"sources":["../../../../charts/src/engine/items.ts"],"sourcesContent":["// Chart model -> GPU-ready buffers (positions relative to an origin).\n\nimport { packColor } from \"./color\";\nimport { curvePoints } from \"./curve\";\nimport type { ChartModel, SeriesModel } from \"./model\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n GAP,\n SCATTER_STRIDE,\n type BarItem,\n type RenderItem,\n} from \"./renderers/types\";\n\nexport interface Origin {\n x: number;\n y: number;\n}\n\nconst rel = (value: number, origin: number) =>\n Number.isFinite(value) ? value - origin : GAP;\n\nconst DRAW_ORDER = {\n heatmap: 0,\n area: 1,\n bar: 2,\n candlestick: 3,\n line: 4,\n scatter: 5,\n} as const;\n\n/** Line (and area) points of a series: stacked, curved; interleaved x, y */\nconst linePoints = (s: SeriesModel) => {\n const { x, count } = s.cols;\n const top = s.stackTop ?? s.cols.y;\n const stackBase = s.stackBase;\n if (s.curve === \"linear\") {\n // no copy: the hot path of large series\n return {\n n: count,\n xAt: (i: number) => x[i],\n yAt: (i: number) => top[i],\n baseAt: stackBase ? (i: number) => stackBase[i] : null,\n };\n }\n const curved = curvePoints(x, top, 0, count, s.curve);\n const base = stackBase\n ? curvePoints(x, stackBase, 0, count, s.curve).points\n : null;\n const points = curved.points;\n return {\n // the buffers are allocated for the worst case: only `length` are written\n n: curved.length,\n xAt: (i: number) => points[i * 2],\n yAt: (i: number) => points[i * 2 + 1],\n baseAt: base ? (i: number) => base[i * 2 + 1] : null,\n };\n};\n\nconst barItem = (\n key: string,\n version: number,\n s: SeriesModel,\n count: number,\n write: (i: number, f: Float32Array, u: Uint32Array) => void,\n extra: Pick<BarItem, \"halfWidth\" | \"radius\" | \"inset\" | \"minHalf\" | \"sorted\">,\n): BarItem => {\n const instances = new ArrayBuffer(count * BAR_STRIDE);\n const f = new Float32Array(instances);\n const u = new Uint32Array(instances);\n for (let i = 0; i < count; i++) write(i, f, u);\n return {\n kind: \"bar\",\n key,\n version,\n color: s.color,\n instances,\n count,\n ...extra,\n };\n};\n\n/** Render items of the visible series, back to front */\nexport const buildItems = (\n model: ChartModel,\n origin: Origin,\n version: number,\n): RenderItem[] => {\n const items: RenderItem[] = [];\n /** Outlines of the areas are drawn with the lines, above the bars */\n const outlines: RenderItem[] = [];\n const ordered = model.series\n .filter((s) => !s.hidden)\n .sort(\n (a, b) => DRAW_ORDER[a.type] - DRAW_ORDER[b.type] || a.index - b.index,\n );\n for (const s of ordered) {\n const { x, y, count, sorted } = s.cols;\n if ((s.type === \"line\" || s.type === \"scatter\") && outlines.length) {\n items.push(...outlines.splice(0));\n }\n switch (s.type) {\n case \"line\":\n case \"area\": {\n const { n, xAt, yAt, baseAt } = linePoints(s);\n const pts = new Float32Array(n * 2);\n if (s.curve === \"linear\") {\n // direct loop: the hot path of very large series\n const top = s.stackTop ?? y;\n const ox = origin.x;\n const oy = origin.y;\n for (let i = 0; i < n; i++) {\n const xv = x[i];\n const yv = top[i];\n pts[i * 2] = Number.isFinite(xv) ? xv - ox : GAP;\n pts[i * 2 + 1] = Number.isFinite(yv) ? yv - oy : GAP;\n }\n } else {\n for (let i = 0; i < n; i++) {\n // x stays real at gaps so sorted data can be binary searched\n pts[i * 2] = rel(xAt(i), origin.x);\n pts[i * 2 + 1] = rel(yAt(i), origin.y);\n }\n }\n if (s.type === \"area\") {\n const area = new Float32Array(n * AREA_STRIDE);\n const baseline = model.baseline - origin.y;\n for (let i = 0; i < n; i++) {\n area[i * 3] = pts[i * 2];\n area[i * 3 + 1] = pts[i * 2 + 1];\n area[i * 3 + 2] = baseAt ? rel(baseAt(i), origin.y) : baseline;\n }\n items.push({\n kind: \"area\",\n key: `${s.key}:area`,\n version,\n color: s.color,\n points: area,\n count: n,\n opacity: s.opacity,\n sorted,\n });\n }\n (s.type === \"area\" ? outlines : items).push({\n kind: \"line\",\n key: `${s.key}:line`,\n version,\n color: s.color,\n points: pts,\n count: n,\n width: s.lineWidth,\n sorted,\n });\n break;\n }\n case \"bar\": {\n const base = s.barBase ?? new Float64Array(count);\n const top = s.barTop ?? y;\n const seriesColor = packColor(s.color);\n const shared = model.series.some(\n (o) =>\n o !== s &&\n !o.hidden &&\n o.type === \"bar\" &&\n o.barOffset === s.barOffset,\n );\n items.push(\n barItem(\n `${s.key}:bar`,\n version,\n s,\n count,\n (i, f, u) => {\n const valid = Number.isFinite(top[i]) && Number.isFinite(base[i]);\n f[i * 4] = rel(x[i] + s.barOffset, origin.x);\n f[i * 4 + 1] = valid ? base[i] - origin.y : GAP;\n f[i * 4 + 2] = valid ? top[i] - origin.y : GAP;\n const pc = s.pointColors?.[i];\n u[i * 4 + 3] = pc ? packColor(pc) : seriesColor;\n },\n {\n halfWidth: s.barHalfWidth,\n // stacked segments stay square so the stack reads as one bar\n radius: shared ? 0 : s.radius,\n inset: 0,\n minHalf: 0,\n sorted,\n },\n ),\n );\n break;\n }\n case \"candlestick\": {\n const { open, high, low } = s.cols;\n const up = packColor(s.upColor);\n const down = packColor(s.downColor);\n const colorAt = (i: number) =>\n open && Number.isFinite(open[i]) && y[i] < open[i] ? down : up;\n // wicks first, the bodies cover them\n items.push(\n barItem(\n `${s.key}:wick`,\n version,\n s,\n count,\n (i, f, u) => {\n const hi = high ? high[i] : y[i];\n const lo = low ? low[i] : y[i];\n const valid =\n Number.isFinite(hi) &&\n Number.isFinite(lo) &&\n Number.isFinite(y[i]);\n f[i * 4] = rel(x[i], origin.x);\n f[i * 4 + 1] = valid ? lo - origin.y : GAP;\n f[i * 4 + 2] = valid ? hi - origin.y : GAP;\n u[i * 4 + 3] = colorAt(i);\n },\n {\n halfWidth: 0,\n radius: 0,\n inset: 0,\n minHalf: s.lineWidth / 2,\n sorted,\n },\n ),\n barItem(\n `${s.key}:body`,\n version,\n s,\n count,\n (i, f, u) => {\n const o = open ? open[i] : y[i];\n const valid = Number.isFinite(o) && Number.isFinite(y[i]);\n f[i * 4] = rel(x[i], origin.x);\n f[i * 4 + 1] = valid ? o - origin.y : GAP;\n f[i * 4 + 2] = valid ? y[i] - origin.y : GAP;\n u[i * 4 + 3] = colorAt(i);\n },\n {\n halfWidth: s.barHalfWidth,\n radius: Math.min(s.radius, 1.5),\n inset: 0,\n minHalf: 0.5,\n sorted,\n },\n ),\n );\n break;\n }\n case \"heatmap\": {\n const colors = s.cellColors;\n const hy = s.cellHalf.y;\n items.push(\n barItem(\n `${s.key}:cells`,\n version,\n s,\n count,\n (i, f, u) => {\n const c = colors ? colors[i] : 0;\n const valid = c !== 0 && Number.isFinite(x[i]);\n f[i * 4] = rel(x[i], origin.x);\n f[i * 4 + 1] = valid ? y[i] - hy - origin.y : GAP;\n f[i * 4 + 2] = valid ? y[i] + hy - origin.y : GAP;\n u[i * 4 + 3] = c;\n },\n {\n halfWidth: s.cellHalf.x,\n radius: s.radius,\n inset: 1,\n minHalf: 0,\n sorted,\n },\n ),\n );\n break;\n }\n default: {\n const buffer = new ArrayBuffer(count * SCATTER_STRIDE);\n const f = new Float32Array(buffer);\n const u = new Uint32Array(buffer);\n const seriesColor = packColor(s.color);\n const sizes = s.cols.size;\n for (let i = 0; i < count; i++) {\n const valid = Number.isFinite(y[i]) && Number.isFinite(x[i]);\n f[i * 4] = valid ? x[i] - origin.x : GAP;\n f[i * 4 + 1] = valid ? y[i] - origin.y : GAP;\n const size = sizes ? sizes[i] : NaN;\n f[i * 4 + 2] = Number.isFinite(size) && size > 0 ? size : s.pointSize;\n const pc = s.pointColors?.[i];\n u[i * 4 + 3] = pc ? packColor(pc) : seriesColor;\n }\n items.push({\n kind: \"scatter\",\n key: `${s.key}:scatter`,\n version,\n color: s.color,\n instances: buffer,\n count,\n opacity: s.opacity,\n stroke: count <= 5000 ? 1.25 : 0,\n });\n break;\n }\n }\n }\n items.push(...outlines);\n return items;\n};\n"],"mappings":"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"}