minerva-design 1.1.0 → 1.2.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 (249) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/charts/canvas.d.cts +7 -0
  3. package/dist/charts/canvas.d.ts +7 -0
  4. package/dist/charts/core.cjs +1 -1
  5. package/dist/charts/core.d.cts +5 -1
  6. package/dist/charts/core.d.ts +5 -1
  7. package/dist/charts/core.js +4 -1
  8. package/dist/charts/engine/canvas.cjs +2 -0
  9. package/dist/charts/engine/canvas.cjs.map +1 -0
  10. package/dist/charts/engine/canvas.d.cts +85 -0
  11. package/dist/charts/engine/canvas.d.ts +85 -0
  12. package/dist/charts/engine/canvas.js +165 -0
  13. package/dist/charts/engine/canvas.js.map +1 -0
  14. package/dist/charts/engine/chart.cjs +2 -2
  15. package/dist/charts/engine/chart.cjs.map +1 -1
  16. package/dist/charts/engine/chart.js +382 -440
  17. package/dist/charts/engine/chart.js.map +1 -1
  18. package/dist/charts/engine/color.cjs +1 -1
  19. package/dist/charts/engine/color.cjs.map +1 -1
  20. package/dist/charts/engine/color.d.cts +10 -0
  21. package/dist/charts/engine/color.d.ts +10 -0
  22. package/dist/charts/engine/color.js +75 -3
  23. package/dist/charts/engine/color.js.map +1 -1
  24. package/dist/charts/engine/controller.cjs +3 -0
  25. package/dist/charts/engine/controller.cjs.map +1 -0
  26. package/dist/charts/engine/controller.d.cts +182 -0
  27. package/dist/charts/engine/controller.d.ts +182 -0
  28. package/dist/charts/engine/controller.js +528 -0
  29. package/dist/charts/engine/controller.js.map +1 -0
  30. package/dist/charts/engine/model.cjs +1 -1
  31. package/dist/charts/engine/model.cjs.map +1 -1
  32. package/dist/charts/engine/model.d.cts +2 -2
  33. package/dist/charts/engine/model.d.ts +2 -2
  34. package/dist/charts/engine/model.js +72 -72
  35. package/dist/charts/engine/model.js.map +1 -1
  36. package/dist/charts/engine/overlay.cjs +1 -1
  37. package/dist/charts/engine/overlay.cjs.map +1 -1
  38. package/dist/charts/engine/overlay.d.cts +17 -1
  39. package/dist/charts/engine/overlay.d.ts +17 -1
  40. package/dist/charts/engine/overlay.js +63 -49
  41. package/dist/charts/engine/overlay.js.map +1 -1
  42. package/dist/charts/engine/presets.cjs +3 -0
  43. package/dist/charts/engine/presets.cjs.map +1 -0
  44. package/dist/charts/engine/presets.d.cts +103 -0
  45. package/dist/charts/engine/presets.d.ts +103 -0
  46. package/dist/charts/engine/presets.js +153 -0
  47. package/dist/charts/engine/presets.js.map +1 -0
  48. package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
  49. package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
  50. package/dist/charts/engine/renderers/canvas2d.d.cts +17 -1
  51. package/dist/charts/engine/renderers/canvas2d.d.ts +17 -1
  52. package/dist/charts/engine/renderers/canvas2d.js +88 -51
  53. package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
  54. package/dist/charts/engine/scene.cjs +2 -0
  55. package/dist/charts/engine/scene.cjs.map +1 -0
  56. package/dist/charts/engine/scene.d.cts +89 -0
  57. package/dist/charts/engine/scene.d.ts +89 -0
  58. package/dist/charts/engine/scene.js +241 -0
  59. package/dist/charts/engine/scene.js.map +1 -0
  60. package/dist/charts/engine/theme.cjs +1 -1
  61. package/dist/charts/engine/theme.cjs.map +1 -1
  62. package/dist/charts/engine/theme.d.cts +25 -1
  63. package/dist/charts/engine/theme.d.ts +25 -1
  64. package/dist/charts/engine/theme.js +42 -26
  65. package/dist/charts/engine/theme.js.map +1 -1
  66. package/dist/charts/engine/types.d.cts +69 -2
  67. package/dist/charts/engine/types.d.ts +69 -2
  68. package/dist/charts/index.cjs +1 -1
  69. package/dist/charts/index.d.cts +1 -1
  70. package/dist/charts/index.d.ts +1 -1
  71. package/dist/charts/index.js +5 -2
  72. package/dist/charts/react/Chart.cjs +1 -1
  73. package/dist/charts/react/Chart.cjs.map +1 -1
  74. package/dist/charts/react/Chart.d.cts +11 -4
  75. package/dist/charts/react/Chart.d.ts +11 -4
  76. package/dist/charts/react/Chart.js +81 -39
  77. package/dist/charts/react/Chart.js.map +1 -1
  78. package/dist/charts/react/charts.cjs +1 -1
  79. package/dist/charts/react/charts.cjs.map +1 -1
  80. package/dist/charts/react/charts.d.cts +1 -1
  81. package/dist/charts/react/charts.d.ts +1 -1
  82. package/dist/charts/react/charts.js +99 -145
  83. package/dist/charts/react/charts.js.map +1 -1
  84. package/dist/charts/react/types.d.cts +29 -61
  85. package/dist/charts/react/types.d.ts +29 -61
  86. package/dist/native/charts/src/canvas.cjs +1 -0
  87. package/dist/native/charts/src/canvas.js +6 -0
  88. package/dist/native/charts/src/engine/axis.cjs +2 -0
  89. package/dist/native/charts/src/engine/axis.cjs.map +1 -0
  90. package/dist/native/charts/src/engine/axis.js +38 -0
  91. package/dist/native/charts/src/engine/axis.js.map +1 -0
  92. package/dist/native/charts/src/engine/canvas.cjs +1 -0
  93. package/dist/native/charts/src/engine/canvas.js +1 -0
  94. package/dist/native/charts/src/engine/color.cjs +2 -0
  95. package/dist/native/charts/src/engine/color.cjs.map +1 -0
  96. package/dist/native/charts/src/engine/color.js +130 -0
  97. package/dist/native/charts/src/engine/color.js.map +1 -0
  98. package/dist/native/charts/src/engine/controller.cjs +3 -0
  99. package/dist/native/charts/src/engine/controller.cjs.map +1 -0
  100. package/dist/native/charts/src/engine/controller.js +528 -0
  101. package/dist/native/charts/src/engine/controller.js.map +1 -0
  102. package/dist/native/charts/src/engine/data.cjs +2 -0
  103. package/dist/native/charts/src/engine/data.cjs.map +1 -0
  104. package/dist/native/charts/src/engine/data.js +104 -0
  105. package/dist/native/charts/src/engine/data.js.map +1 -0
  106. package/dist/native/charts/src/engine/decimate.cjs +2 -0
  107. package/dist/native/charts/src/engine/decimate.cjs.map +1 -0
  108. package/dist/native/charts/src/engine/decimate.js +28 -0
  109. package/dist/native/charts/src/engine/decimate.js.map +1 -0
  110. package/dist/native/charts/src/engine/format.cjs +2 -0
  111. package/dist/native/charts/src/engine/format.cjs.map +1 -0
  112. package/dist/native/charts/src/engine/format.js +34 -0
  113. package/dist/native/charts/src/engine/format.js.map +1 -0
  114. package/dist/native/charts/src/engine/layout.cjs +2 -0
  115. package/dist/native/charts/src/engine/layout.cjs.map +1 -0
  116. package/dist/native/charts/src/engine/layout.js +26 -0
  117. package/dist/native/charts/src/engine/layout.js.map +1 -0
  118. package/dist/native/charts/src/engine/model.cjs +2 -0
  119. package/dist/native/charts/src/engine/model.cjs.map +1 -0
  120. package/dist/native/charts/src/engine/model.js +175 -0
  121. package/dist/native/charts/src/engine/model.js.map +1 -0
  122. package/dist/native/charts/src/engine/overlay.cjs +2 -0
  123. package/dist/native/charts/src/engine/overlay.cjs.map +1 -0
  124. package/dist/native/charts/src/engine/overlay.js +49 -0
  125. package/dist/native/charts/src/engine/overlay.js.map +1 -0
  126. package/dist/native/charts/src/engine/presets.cjs +3 -0
  127. package/dist/native/charts/src/engine/presets.cjs.map +1 -0
  128. package/dist/native/charts/src/engine/presets.js +147 -0
  129. package/dist/native/charts/src/engine/presets.js.map +1 -0
  130. package/dist/native/charts/src/engine/scale.cjs +2 -0
  131. package/dist/native/charts/src/engine/scale.cjs.map +1 -0
  132. package/dist/native/charts/src/engine/scale.js +37 -0
  133. package/dist/native/charts/src/engine/scale.js.map +1 -0
  134. package/dist/native/charts/src/engine/scene.cjs +2 -0
  135. package/dist/native/charts/src/engine/scene.cjs.map +1 -0
  136. package/dist/native/charts/src/engine/scene.js +241 -0
  137. package/dist/native/charts/src/engine/scene.js.map +1 -0
  138. package/dist/native/charts/src/engine/spatial.cjs +2 -0
  139. package/dist/native/charts/src/engine/spatial.cjs.map +1 -0
  140. package/dist/native/charts/src/engine/spatial.js +53 -0
  141. package/dist/native/charts/src/engine/spatial.js.map +1 -0
  142. package/dist/native/charts/src/engine/theme.cjs +2 -0
  143. package/dist/native/charts/src/engine/theme.cjs.map +1 -0
  144. package/dist/native/charts/src/engine/theme.js +62 -0
  145. package/dist/native/charts/src/engine/theme.js.map +1 -0
  146. package/dist/native/charts/src/engine/time.cjs +2 -0
  147. package/dist/native/charts/src/engine/time.cjs.map +1 -0
  148. package/dist/native/charts/src/engine/time.js +189 -0
  149. package/dist/native/charts/src/engine/time.js.map +1 -0
  150. package/dist/native/charts/src/engine/viewport.cjs +2 -0
  151. package/dist/native/charts/src/engine/viewport.cjs.map +1 -0
  152. package/dist/native/charts/src/engine/viewport.js +12 -0
  153. package/dist/native/charts/src/engine/viewport.js.map +1 -0
  154. package/dist/native/components/Chart/ChartBase.cjs +2 -0
  155. package/dist/native/components/Chart/ChartBase.cjs.map +1 -0
  156. package/dist/native/components/Chart/ChartBase.d.cts +29 -0
  157. package/dist/native/components/Chart/ChartBase.d.ts +29 -0
  158. package/dist/native/components/Chart/ChartBase.js +287 -0
  159. package/dist/native/components/Chart/ChartBase.js.map +1 -0
  160. package/dist/native/components/Chart/charts.cjs +2 -0
  161. package/dist/native/components/Chart/charts.cjs.map +1 -0
  162. package/dist/native/components/Chart/charts.d.cts +19 -0
  163. package/dist/native/components/Chart/charts.d.ts +19 -0
  164. package/dist/native/components/Chart/charts.js +173 -0
  165. package/dist/native/components/Chart/charts.js.map +1 -0
  166. package/dist/native/components/Chart/index.cjs +1 -0
  167. package/dist/native/components/Chart/index.d.cts +2 -0
  168. package/dist/native/components/Chart/index.d.ts +2 -0
  169. package/dist/native/components/Chart/index.js +2 -0
  170. package/dist/native/components/Chart/measure.cjs +2 -0
  171. package/dist/native/components/Chart/measure.cjs.map +1 -0
  172. package/dist/native/components/Chart/measure.d.cts +5 -0
  173. package/dist/native/components/Chart/measure.d.ts +5 -0
  174. package/dist/native/components/Chart/measure.js +11 -0
  175. package/dist/native/components/Chart/measure.js.map +1 -0
  176. package/dist/native/components/Chart/scene.cjs +2 -0
  177. package/dist/native/components/Chart/scene.cjs.map +1 -0
  178. package/dist/native/components/Chart/scene.d.cts +41 -0
  179. package/dist/native/components/Chart/scene.d.ts +41 -0
  180. package/dist/native/components/Chart/scene.js +419 -0
  181. package/dist/native/components/Chart/scene.js.map +1 -0
  182. package/dist/native/components/Chart/theme.cjs +2 -0
  183. package/dist/native/components/Chart/theme.cjs.map +1 -0
  184. package/dist/native/components/Chart/theme.d.cts +10 -0
  185. package/dist/native/components/Chart/theme.d.ts +10 -0
  186. package/dist/native/components/Chart/theme.js +10 -0
  187. package/dist/native/components/Chart/theme.js.map +1 -0
  188. package/dist/native/components/Chart/types.d.cts +129 -0
  189. package/dist/native/components/Chart/types.d.ts +129 -0
  190. package/dist/native/index.cjs +1 -1
  191. package/dist/native/index.d.cts +1 -0
  192. package/dist/native/index.d.ts +1 -0
  193. package/dist/native/index.js +6 -4
  194. package/dist/native/manifest.d.cts +7 -0
  195. package/dist/native/manifest.d.ts +7 -0
  196. package/dist/native/source/components/Chart/ChartBase.tsx +545 -0
  197. package/dist/native/source/components/Chart/charts.tsx +291 -0
  198. package/dist/native/source/components/Chart/index.ts +8 -0
  199. package/dist/native/source/components/Chart/measure.ts +50 -0
  200. package/dist/native/source/components/Chart/scene.tsx +987 -0
  201. package/dist/native/source/components/Chart/theme.ts +16 -0
  202. package/dist/native/source/components/Chart/types.ts +194 -0
  203. package/dist/native/source/index.ts +1 -0
  204. package/dist/native/source/manifest.ts +14 -0
  205. package/dist/taro/charts.d.ts +144 -0
  206. package/dist/taro/index.d.ts +1 -0
  207. package/dist/taro/index.js +3064 -618
  208. package/dist/uni/BarChart.vue +75 -0
  209. package/dist/uni/BarChart.vue.d.ts +111 -0
  210. package/dist/uni/Chart.vue +68 -0
  211. package/dist/uni/Chart.vue.d.ts +100 -0
  212. package/dist/uni/LineChart.vue +75 -0
  213. package/dist/uni/LineChart.vue.d.ts +111 -0
  214. package/dist/uni/ProgressIndicator.vue.d.ts +1 -1
  215. package/dist/uni/QuadrantChart.vue +184 -0
  216. package/dist/uni/QuadrantChart.vue.d.ts +173 -0
  217. package/dist/uni/ScatterChart.vue +69 -0
  218. package/dist/uni/ScatterChart.vue.d.ts +100 -0
  219. package/dist/uni/chart-canvas.d.ts +68 -0
  220. package/dist/uni/chart-canvas.js +363 -0
  221. package/dist/uni/chart-types.d.ts +135 -0
  222. package/dist/uni/chart-types.js +84 -0
  223. package/dist/uni/charts-canvas.d.ts +1 -0
  224. package/dist/uni/charts-canvas.js +8 -0
  225. package/dist/uni/index.d.ts +6 -0
  226. package/dist/uni/index.js +6 -0
  227. package/dist/weapp/bar-chart/index.js +1 -0
  228. package/dist/weapp/bar-chart/index.json +1 -0
  229. package/dist/weapp/bar-chart/index.wxml +1 -0
  230. package/dist/weapp/bar-chart/index.wxss +1 -0
  231. package/dist/weapp/chart/index.js +1 -0
  232. package/dist/weapp/chart/index.json +1 -0
  233. package/dist/weapp/chart/index.wxml +1 -0
  234. package/dist/weapp/chart/index.wxss +1 -0
  235. package/dist/weapp/controls.js +4019 -266
  236. package/dist/weapp/line-chart/index.js +1 -0
  237. package/dist/weapp/line-chart/index.json +1 -0
  238. package/dist/weapp/line-chart/index.wxml +1 -0
  239. package/dist/weapp/line-chart/index.wxss +1 -0
  240. package/dist/weapp/quadrant-chart/index.js +1 -0
  241. package/dist/weapp/quadrant-chart/index.json +1 -0
  242. package/dist/weapp/quadrant-chart/index.wxml +1 -0
  243. package/dist/weapp/quadrant-chart/index.wxss +1 -0
  244. package/dist/weapp/scatter-chart/index.js +1 -0
  245. package/dist/weapp/scatter-chart/index.json +1 -0
  246. package/dist/weapp/scatter-chart/index.wxml +1 -0
  247. package/dist/weapp/scatter-chart/index.wxss +1 -0
  248. package/dist/weapp/types.d.ts +295 -0
  249. package/package.json +21 -1
@@ -0,0 +1,287 @@
1
+ import { useTheme as e } from "../../theme/MinervaProvider.js";
2
+ import { part as t } from "../../internal/parts.js";
3
+ import { createChartController as n } from "../../charts/src/engine/controller.js";
4
+ import "../../charts/src/canvas.js";
5
+ import { measureChartText as r } from "./measure.js";
6
+ import { drawHover as i, drawStatic as a, tooltipCard as o } from "./scene.js";
7
+ import { chartThemeInput as s } from "./theme.js";
8
+ import { useEffect as c, useImperativeHandle as l, useLayoutEffect as u, useMemo as d, useRef as f, useState as p, useSyncExternalStore as m } from "react";
9
+ import { StyleSheet as h, View as g } from "react-native";
10
+ import { jsx as _, jsxs as v } from "react/jsx-runtime";
11
+ //#region src/components/Chart/ChartBase.tsx
12
+ var y = (e) => ({
13
+ series: e.series,
14
+ xAxis: e.xAxis,
15
+ yAxis: e.yAxis,
16
+ legend: e.legend,
17
+ tooltip: e.tooltip,
18
+ crosshair: e.crosshair,
19
+ annotations: e.annotations,
20
+ interaction: e.interaction,
21
+ padding: e.padding,
22
+ palette: e.palette,
23
+ ariaLabel: e.ariaLabel
24
+ }), b = {}, x = (e, t) => {
25
+ let n = Number(e.identifier);
26
+ return Number.isFinite(n) ? n : t;
27
+ }, S = (e) => {
28
+ if (typeof requestAnimationFrame == "function") {
29
+ let t = requestAnimationFrame(e);
30
+ return { cancel: () => cancelAnimationFrame(t) };
31
+ }
32
+ let t = setTimeout(e, 16);
33
+ return { cancel: () => clearTimeout(t) };
34
+ };
35
+ function C(e, t, i) {
36
+ let o = 0, s = null, c = /* @__PURE__ */ new Set(), l = null, u = {
37
+ x: 0,
38
+ y: 0
39
+ }, d = /* @__PURE__ */ new Map(), f = (e) => typeof e.interaction == "object" && !!e.interaction.dragPoints, p = f(e), m = !1, h = () => {
40
+ o++, c.forEach((e) => e());
41
+ }, g = () => {
42
+ s?.cancel(), s = null;
43
+ }, _ = n({
44
+ options: e,
45
+ theme: t,
46
+ measureText: r,
47
+ onInvalidate: () => {
48
+ !s && c.size && (s = S(() => {
49
+ s = null, h();
50
+ }));
51
+ }
52
+ });
53
+ i && _.setSize(i[0], i[1]);
54
+ let v = (e) => ({
55
+ x: e.pageX - u.x,
56
+ y: e.pageY - u.y
57
+ }), y = (e) => {
58
+ let t = e.nativeEvent;
59
+ (t.touches?.length ? t.touches : [t]).forEach((e, t) => {
60
+ let n = x(e, t), r = v(e), i = d.get(n);
61
+ i ? (i.x !== r.x || i.y !== r.y) && (d.set(n, r), _.pointerMove(r.x, r.y, {
62
+ id: n,
63
+ touch: !0
64
+ })) : (d.set(n, r), _.pointerDown(r.x, r.y, {
65
+ id: n,
66
+ touch: !0
67
+ }));
68
+ }), d.size === 1 && (b.anchor = [...d.values()][0]);
69
+ }, b = {
70
+ controller: _,
71
+ setOptions(e) {
72
+ p = f(e), _.setOptions(e);
73
+ },
74
+ subscribe(e) {
75
+ return c.add(e), () => {
76
+ c.delete(e), c.size || g();
77
+ };
78
+ },
79
+ version: () => o,
80
+ commit() {
81
+ g(), h();
82
+ },
83
+ layers(e, t) {
84
+ let { plot: n } = e.layout, { view: r } = e, i = [
85
+ e.model,
86
+ e.annotations,
87
+ e.theme,
88
+ e.width,
89
+ e.height,
90
+ r.x[0],
91
+ r.x[1],
92
+ r.y[0],
93
+ r.y[1],
94
+ n.x,
95
+ n.y,
96
+ n.width,
97
+ n.height,
98
+ t
99
+ ];
100
+ return (!l || l.key.some((e, t) => e !== i[t])) && (l = {
101
+ key: i,
102
+ node: a(e, t)
103
+ }), l.node;
104
+ },
105
+ anchor: null,
106
+ touchStart(e) {
107
+ let t = e.nativeEvent;
108
+ !d.size && t.locationX !== void 0 && (u = {
109
+ x: t.pageX - t.locationX,
110
+ y: t.pageY - (t.locationY ?? 0)
111
+ }), y(e), b.commit();
112
+ let n = _.getPlotRect(), r = d.values().next().value;
113
+ return m = p && !!n && !!r && r.x >= n.x && r.x <= n.x + n.width && r.y >= n.y && r.y <= n.y + n.height, b.holdsGesture();
114
+ },
115
+ touchAdd(e) {
116
+ y(e), b.commit();
117
+ },
118
+ touchMove: y,
119
+ touchEnd(e) {
120
+ let t = e.nativeEvent, n = new Set((t.touches ?? []).map((e, t) => x(e, t))), r = t.changedTouches?.length ? t.changedTouches : [t];
121
+ for (let [e, t] of [...d]) {
122
+ if (n.has(e)) continue;
123
+ let i = r.find((t, n) => x(t, n) === e), a = i ? v(i) : t;
124
+ d.delete(e), d.size === 0 && (b.anchor = a), _.pointerUp(a.x, a.y, {
125
+ id: e,
126
+ touch: !0
127
+ });
128
+ }
129
+ b.commit();
130
+ },
131
+ touchCancel() {
132
+ for (let e of d.keys()) _.pointerCancel({ id: e });
133
+ d.clear(), b.commit();
134
+ },
135
+ holdsGesture() {
136
+ if (d.size > 1 || m && d.size > 0) return !0;
137
+ let e = _.getScene();
138
+ if (!e) return !1;
139
+ if (e.dragging) return !0;
140
+ let { base: t } = e.model, n = _.getView();
141
+ return n.x[0] !== t.x[0] || n.x[1] !== t.x[1] || n.y[0] !== t.y[0] || n.y[1] !== t.y[1];
142
+ }
143
+ };
144
+ return b;
145
+ }
146
+ function w({ scene: e, anchor: n, children: r }) {
147
+ let [i, a] = p(null), { width: s, height: c } = e, l = n.x + 14, u = n.y;
148
+ return i && (l + i.width > s - 4 && (l = n.x - 14 - i.width), l = Math.max(4, Math.min(l, s - i.width - 4)), u = Math.max(4, Math.min(n.y - i.height / 2, c - i.height - 4))), /* @__PURE__ */ _(g, {
149
+ pointerEvents: "none",
150
+ ...t("chart", "tooltip", { custom: !0 }),
151
+ onLayout: (e) => {
152
+ let { width: t, height: n } = e.nativeEvent.layout;
153
+ a((e) => e && e.width === t && e.height === n ? e : {
154
+ width: t,
155
+ height: n
156
+ });
157
+ },
158
+ style: [o(e), {
159
+ left: 0,
160
+ top: 0,
161
+ maxWidth: Math.max(0, s - 8),
162
+ padding: 8,
163
+ opacity: +!!i,
164
+ transform: [{ translateX: l }, { translateY: u }]
165
+ }],
166
+ children: r
167
+ });
168
+ }
169
+ function T({ options: n, height: r = 320, width: a = "100%", style: o, testID: y, handleRef: x, renderTooltip: S, overlay: T, ...E }) {
170
+ let { tokens: D, fonts: O } = e(), k = O.sans, A = d(() => s(D), [D]), j = !!S && n.tooltip !== !1, M = d(() => {
171
+ if (!j) return n;
172
+ let e = typeof n.tooltip == "object" ? n.tooltip : {};
173
+ return {
174
+ ...n,
175
+ tooltip: {
176
+ ...e,
177
+ render: () => b
178
+ }
179
+ };
180
+ }, [n, j]), [N] = p(() => C(M, A, typeof a == "number" && typeof r == "number" ? [a, r] : null)), { controller: P } = N;
181
+ m(N.subscribe, N.version, N.version);
182
+ let F = f({
183
+ options: M,
184
+ theme: A
185
+ });
186
+ u(() => {
187
+ let e = F.current;
188
+ (e.theme !== A || e.options !== M) && (e.theme !== A && P.setTheme(A), e.options !== M && N.setOptions(M), F.current = {
189
+ options: M,
190
+ theme: A
191
+ }, N.commit());
192
+ }, [
193
+ P,
194
+ N,
195
+ M,
196
+ A
197
+ ]), u(() => {
198
+ if (typeof a != "number" || typeof r != "number") return;
199
+ let e = P.getScene();
200
+ e && e.width === a && e.height === r || (P.setSize(a, r), N.commit());
201
+ }, [
202
+ P,
203
+ N,
204
+ a,
205
+ r
206
+ ]);
207
+ let I = f(E);
208
+ u(() => {
209
+ I.current = E;
210
+ }), c(() => {
211
+ let e = I, t = [
212
+ P.on("hover", (t) => e.current.onHover?.(t)),
213
+ P.on("click", (t) => e.current.onPointClick?.(t)),
214
+ P.on("plotClick", (t) => e.current.onPlotClick?.(t)),
215
+ P.on("zoom", (t) => e.current.onZoom?.(t)),
216
+ P.on("drag", (t) => e.current.onDrag?.(t)),
217
+ P.on("drop", (t) => e.current.onDrop?.(t))
218
+ ];
219
+ return () => t.forEach((e) => e());
220
+ }, [P]), l(x, () => ({
221
+ resetZoom: () => P.resetZoom(),
222
+ getView: () => P.getView(),
223
+ setView: (e) => P.setView(e),
224
+ getPlotRect: () => P.getPlotRect(),
225
+ getController: () => P
226
+ }), [P]);
227
+ let L = (e) => {
228
+ let { width: t, height: n } = e.nativeEvent.layout, r = P.getScene();
229
+ r && r.width === t && r.height === n || (P.setSize(t, n), N.commit());
230
+ }, R = P.getScene(), z = null, B = R?.hover?.tooltip ? R.hover.event : null;
231
+ if (R && B && j && S) {
232
+ let e = S(B), t = N.anchor ?? R.hover?.marks[0] ?? null;
233
+ e != null && e !== !1 && t && (z = /* @__PURE__ */ _(w, {
234
+ scene: R,
235
+ anchor: t,
236
+ children: e
237
+ }));
238
+ }
239
+ return /* @__PURE__ */ v(g, {
240
+ testID: y,
241
+ onLayout: L,
242
+ style: [{
243
+ width: a,
244
+ height: r
245
+ }, o],
246
+ ...t("chart", "root"),
247
+ children: [
248
+ /* @__PURE__ */ _(g, {
249
+ style: h.absoluteFill,
250
+ accessible: !0,
251
+ accessibilityRole: "image",
252
+ accessibilityLabel: n.ariaLabel,
253
+ onStartShouldSetResponder: () => !0,
254
+ onResponderTerminationRequest: () => !N.holdsGesture(),
255
+ onResponderGrant: N.touchStart,
256
+ onResponderStart: N.touchAdd,
257
+ onResponderMove: N.touchMove,
258
+ onResponderEnd: N.touchEnd,
259
+ onResponderRelease: N.touchEnd,
260
+ onResponderTerminate: N.touchCancel,
261
+ ...t("chart", "surface"),
262
+ children: /* @__PURE__ */ v(g, {
263
+ pointerEvents: "none",
264
+ style: h.absoluteFill,
265
+ children: [R ? N.layers(R, k) : null, R ? i(R, k, j) : null]
266
+ })
267
+ }),
268
+ T && R ? /* @__PURE__ */ _(g, {
269
+ pointerEvents: "box-none",
270
+ style: {
271
+ position: "absolute",
272
+ left: R.layout.plot.x,
273
+ top: R.layout.plot.y,
274
+ width: R.layout.plot.width,
275
+ height: R.layout.plot.height
276
+ },
277
+ ...t("chart", "overlay"),
278
+ children: T(R.layout.plot)
279
+ }) : null,
280
+ z
281
+ ]
282
+ });
283
+ }
284
+ //#endregion
285
+ export { T as ChartBase, y as engineOptions };
286
+
287
+ //# sourceMappingURL=ChartBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartBase.js","names":["engineOptions","props","CUSTOM_TOOLTIP","idOf","id","t","index","requestFrame","callback","createChartStore","version","frame","listeners","cache","origin","touches","dragsPoints","o","draggable","options","claimed","notify","listener","cancelFrame","controller","createChartController","measureChartText","size","local","sync","n","event","i","p","previous","store","next","scene","key","view","plot","family","value","drawStatic","active","changed","last","touch","base","CustomTooltip","setSize","useState","left","anchor","top","width","height","View","part","w","h","tooltipCard","ChartBase","handlers","useTheme","fonts","theme","useMemo","chartThemeInput","tokens","customTooltip","renderTooltip","resolved","applied","useRef","useLayoutEffect","current","handlersRef","useEffect","offs","e","v","off","useImperativeHandle","handleRef","onLayout","tooltip","content","style","StyleSheet","drawHover","overlay"],"sources":["../../../../../native/src/components/Chart/ChartBase.tsx"],"sourcesContent":["// The chart host of React Native: owns a platform-free chart controller\n// (@minerva/charts/canvas: options, model, zoom, gestures, scene in pixels)\n// and draws its scene with views (./scene). Touches go through the\n// responder system; the drawing is `pointerEvents=\"none\"`, so every touch\n// lands on the surface and positions come from page coordinates.\n\nimport {\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport {\n StyleSheet,\n View,\n type DimensionValue,\n type GestureResponderEvent,\n type LayoutChangeEvent,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport {\n createChartController,\n type ChartController,\n type ChartDragEvent,\n type ChartHoverEvent,\n type ChartOptions,\n type ChartPlotClickEvent,\n type ChartRect,\n type ChartScene,\n type ChartThemeInput,\n type ChartTooltipOptions,\n type ChartView,\n} from \"@minerva/charts/canvas\";\nimport { useTheme } from \"../../theme/MinervaProvider\";\nimport { part } from \"../../internal/parts\";\nimport { measureChartText } from \"./measure\";\nimport { drawHover, drawStatic, tooltipCard } from \"./scene\";\nimport { chartThemeInput } from \"./theme\";\nimport type { ChartCommonProps, ChartHandle } from \"./types\";\n\ninterface Handlers {\n onHover?: (event: ChartHoverEvent | null) => void;\n onPointClick?: (event: ChartHoverEvent) => void;\n onPlotClick?: (event: ChartPlotClickEvent) => void;\n onZoom?: (view: ChartView) => void;\n onDrag?: (event: ChartDragEvent) => void;\n onDrop?: (event: ChartDragEvent) => void;\n}\n\n/** Engine options of the common props */\nexport const engineOptions = (\n props: Pick<\n ChartCommonProps,\n | \"xAxis\"\n | \"yAxis\"\n | \"legend\"\n | \"tooltip\"\n | \"crosshair\"\n | \"annotations\"\n | \"interaction\"\n | \"padding\"\n | \"palette\"\n | \"ariaLabel\"\n > &\n Pick<ChartOptions, \"series\">,\n): ChartOptions => ({\n series: props.series,\n xAxis: props.xAxis,\n yAxis: props.yAxis,\n legend: props.legend,\n tooltip: props.tooltip,\n crosshair: props.crosshair,\n annotations: props.annotations,\n interaction: props.interaction,\n padding: props.padding,\n palette: props.palette,\n ariaLabel: props.ariaLabel,\n});\n\ntype TooltipResult = Exclude<\n ReturnType<NonNullable<ChartTooltipOptions[\"render\"]>>,\n string | null\n>;\n/** Non-string result of `tooltip.render`: the engine lays a tooltip out without drawing text */\nconst CUSTOM_TOOLTIP = {} as unknown as TooltipResult;\n\ninterface TouchPoint {\n identifier?: number | string;\n pageX: number;\n pageY: number;\n locationX?: number;\n locationY?: number;\n}\n\nconst idOf = (t: TouchPoint, index: number) => {\n const id = Number(t.identifier);\n return Number.isFinite(id) ? id : index;\n};\n\ntype Frame = { cancel: () => void };\n\nconst requestFrame = (callback: () => void): Frame => {\n if (typeof requestAnimationFrame === \"function\") {\n const id = requestAnimationFrame(callback);\n return { cancel: () => cancelAnimationFrame(id) };\n }\n const id = setTimeout(callback, 16);\n return { cancel: () => clearTimeout(id) };\n};\n\n/**\n * External store of a chart: the controller, a version bumped when its\n * scene must be drawn again (coalesced per frame), the touches being\n * tracked and the cache of the static layers.\n */\ninterface ChartStore {\n controller: ChartController;\n /** Options of the controller (`setOptions` of the controller) */\n setOptions: (options: ChartOptions) => void;\n subscribe: (listener: () => void) => () => void;\n version: () => number;\n /** Draws again now */\n commit: () => void;\n /** Static layers of a scene (cached while model / view / size are the same) */\n layers: (scene: ChartScene, family: string | undefined) => ReactNode;\n /** Last single-finger position (anchor of a custom tooltip) */\n anchor: { x: number; y: number } | null;\n /**\n * First finger (responder grant); returns whether the chart owns the\n * gesture, which keeps native scroll views from taking it (Android)\n */\n touchStart: (event: GestureResponderEvent) => boolean;\n /** Another finger touches the chart */\n touchAdd: (event: GestureResponderEvent) => void;\n /** Moves (drawn on the next frame) */\n touchMove: (event: GestureResponderEvent) => void;\n touchEnd: (event: GestureResponderEvent) => void;\n touchCancel: () => void;\n /** Whether the chart keeps the touches (pinch, point drag, pan when zoomed) */\n holdsGesture: () => boolean;\n}\n\nfunction createChartStore(\n options: ChartOptions,\n theme: ChartThemeInput,\n size: [number, number] | null,\n): ChartStore {\n let version = 0;\n let frame: Frame | null = null;\n const listeners = new Set<() => void>();\n let cache: { key: unknown[]; node: ReactNode } | null = null;\n let origin = { x: 0, y: 0 };\n const touches = new Map<number, { x: number; y: number }>();\n const dragsPoints = (o: ChartOptions) =>\n typeof o.interaction === \"object\" && !!o.interaction.dragPoints;\n let draggable = dragsPoints(options);\n /** The current touch sequence started on the plot of a draggable chart */\n let claimed = false;\n\n const notify = () => {\n version++;\n listeners.forEach((listener) => listener());\n };\n const cancelFrame = () => {\n frame?.cancel();\n frame = null;\n };\n const schedule = () => {\n if (frame || !listeners.size) return;\n frame = requestFrame(() => {\n frame = null;\n notify();\n });\n };\n\n const controller = createChartController({\n options,\n theme,\n measureText: measureChartText,\n onInvalidate: schedule,\n });\n if (size) controller.setSize(size[0], size[1]);\n\n const local = (t: TouchPoint) => ({\n x: t.pageX - origin.x,\n y: t.pageY - origin.y,\n });\n\n /** Feeds the controller the fingers that appeared or moved */\n const sync = (event: GestureResponderEvent) => {\n const n = event.nativeEvent;\n const list: readonly TouchPoint[] = n.touches?.length\n ? n.touches\n : [n as unknown as TouchPoint];\n list.forEach((t, i) => {\n const id = idOf(t, i);\n const p = local(t);\n const previous = touches.get(id);\n if (!previous) {\n touches.set(id, p);\n controller.pointerDown(p.x, p.y, { id, touch: true });\n } else if (previous.x !== p.x || previous.y !== p.y) {\n touches.set(id, p);\n controller.pointerMove(p.x, p.y, { id, touch: true });\n }\n });\n if (touches.size === 1) store.anchor = [...touches.values()][0];\n };\n\n const store: ChartStore = {\n controller,\n setOptions(next) {\n draggable = dragsPoints(next);\n controller.setOptions(next);\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (!listeners.size) cancelFrame();\n };\n },\n version: () => version,\n commit() {\n cancelFrame();\n notify();\n },\n layers(scene, family) {\n const { plot } = scene.layout;\n const { view } = scene;\n const key = [\n scene.model,\n scene.annotations,\n scene.theme,\n scene.width,\n scene.height,\n view.x[0],\n view.x[1],\n view.y[0],\n view.y[1],\n plot.x,\n plot.y,\n plot.width,\n plot.height,\n family,\n ];\n if (!cache || cache.key.some((value, i) => value !== key[i]))\n cache = { key, node: drawStatic(scene, family) };\n return cache.node;\n },\n anchor: null,\n touchStart(event) {\n const n = event.nativeEvent as unknown as TouchPoint;\n // the drawing ignores touches: `location` is relative to the surface\n if (!touches.size && n.locationX !== undefined)\n origin = { x: n.pageX - n.locationX, y: n.pageY - (n.locationY ?? 0) };\n sync(event);\n store.commit();\n // draggable points: the drag only starts after the touch slop, too\n // late to keep a scroll view from stealing the touch: claim it now\n const plot = controller.getPlotRect();\n const p = touches.values().next().value;\n claimed =\n draggable &&\n !!plot &&\n !!p &&\n p.x >= plot.x &&\n p.x <= plot.x + plot.width &&\n p.y >= plot.y &&\n p.y <= plot.y + plot.height;\n return store.holdsGesture();\n },\n touchAdd(event) {\n sync(event);\n store.commit();\n },\n touchMove: sync,\n touchEnd(event) {\n const n = event.nativeEvent;\n const active = new Set(\n (n.touches ?? []).map((t, i) => idOf(t as TouchPoint, i)),\n );\n const changed: readonly TouchPoint[] = n.changedTouches?.length\n ? n.changedTouches\n : [n as unknown as TouchPoint];\n for (const [id, last] of [...touches]) {\n if (active.has(id)) continue;\n const touch = changed.find((t, i) => idOf(t, i) === id);\n const p = touch ? local(touch) : last;\n touches.delete(id);\n if (touches.size === 0) store.anchor = p;\n controller.pointerUp(p.x, p.y, { id, touch: true });\n }\n store.commit();\n },\n touchCancel() {\n for (const id of touches.keys()) controller.pointerCancel({ id });\n touches.clear();\n store.commit();\n },\n holdsGesture() {\n if (touches.size > 1 || (claimed && touches.size > 0)) return true;\n const scene = controller.getScene();\n if (!scene) return false;\n if (scene.dragging) return true;\n const { base } = scene.model;\n const view = controller.getView();\n return (\n view.x[0] !== base.x[0] ||\n view.x[1] !== base.x[1] ||\n view.y[0] !== base.y[0] ||\n view.y[1] !== base.y[1]\n );\n },\n };\n return store;\n}\n\n/** A `renderTooltip` node, placed next to the finger once measured */\nfunction CustomTooltip({\n scene,\n anchor,\n children,\n}: {\n scene: ChartScene;\n anchor: { x: number; y: number };\n children: ReactNode;\n}) {\n const [size, setSize] = useState<{ width: number; height: number } | null>(\n null,\n );\n const { width, height } = scene;\n let left = anchor.x + 14;\n let top = anchor.y;\n if (size) {\n if (left + size.width > width - 4) left = anchor.x - 14 - size.width;\n left = Math.max(4, Math.min(left, width - size.width - 4));\n top = Math.max(\n 4,\n Math.min(anchor.y - size.height / 2, height - size.height - 4),\n );\n }\n return (\n <View\n pointerEvents=\"none\"\n {...part(\"chart\", \"tooltip\", { custom: true })}\n onLayout={(e: LayoutChangeEvent) => {\n const { width: w, height: h } = e.nativeEvent.layout;\n setSize((previous) =>\n previous && previous.width === w && previous.height === h\n ? previous\n : { width: w, height: h },\n );\n }}\n style={[\n tooltipCard(scene),\n {\n // laid out at the origin (full width available), moved by a transform\n left: 0,\n top: 0,\n maxWidth: Math.max(0, width - 8),\n padding: 8,\n opacity: size ? 1 : 0,\n transform: [{ translateX: left }, { translateY: top }],\n },\n ]}\n >\n {children}\n </View>\n );\n}\n\ninterface ChartBaseProps extends Handlers {\n options: ChartOptions;\n height?: DimensionValue;\n width?: DimensionValue;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n handleRef?: Ref<ChartHandle>;\n /** React content of the tooltip (replaces the engine's content) */\n renderTooltip?: (event: ChartHoverEvent) => ReactNode;\n /** React content placed over the plot area, given the plot rectangle */\n overlay?: (plot: ChartRect) => ReactNode;\n}\n\n/** Sizes the chart, forwards options / theme / touches to the controller and draws its scene */\nexport function ChartBase({\n options,\n height = 320,\n width = \"100%\",\n style,\n testID,\n handleRef,\n renderTooltip,\n overlay,\n ...handlers\n}: ChartBaseProps) {\n const { tokens, fonts } = useTheme();\n const family = fonts.sans;\n const theme = useMemo(() => chartThemeInput(tokens), [tokens]);\n const customTooltip = !!renderTooltip && options.tooltip !== false;\n const resolved = useMemo((): ChartOptions => {\n if (!customTooltip) return options;\n const base = typeof options.tooltip === \"object\" ? options.tooltip : {};\n return { ...options, tooltip: { ...base, render: () => CUSTOM_TOOLTIP } };\n }, [options, customTooltip]);\n\n const [store] = useState(() =>\n createChartStore(\n resolved,\n theme,\n typeof width === \"number\" && typeof height === \"number\"\n ? [width, height]\n : null,\n ),\n );\n const { controller } = store;\n useSyncExternalStore(store.subscribe, store.version, store.version);\n\n const applied = useRef({ options: resolved, theme });\n useLayoutEffect(() => {\n const current = applied.current;\n if (current.theme === theme && current.options === resolved) return;\n if (current.theme !== theme) controller.setTheme(theme);\n if (current.options !== resolved) store.setOptions(resolved);\n applied.current = { options: resolved, theme };\n store.commit();\n }, [controller, store, resolved, theme]);\n\n useLayoutEffect(() => {\n if (typeof width !== \"number\" || typeof height !== \"number\") return;\n const scene = controller.getScene();\n if (scene && scene.width === width && scene.height === height) return;\n controller.setSize(width, height);\n store.commit();\n }, [controller, store, width, height]);\n\n const handlersRef = useRef<Handlers>(handlers);\n useLayoutEffect(() => {\n handlersRef.current = handlers;\n });\n useEffect(() => {\n const h = handlersRef;\n const offs = [\n controller.on(\"hover\", (e) => h.current.onHover?.(e)),\n controller.on(\"click\", (e) => h.current.onPointClick?.(e)),\n controller.on(\"plotClick\", (e) => h.current.onPlotClick?.(e)),\n controller.on(\"zoom\", (v) => h.current.onZoom?.(v)),\n controller.on(\"drag\", (e) => h.current.onDrag?.(e)),\n controller.on(\"drop\", (e) => h.current.onDrop?.(e)),\n ];\n return () => offs.forEach((off) => off());\n }, [controller]);\n\n useImperativeHandle(\n handleRef,\n () => ({\n resetZoom: () => controller.resetZoom(),\n getView: () => controller.getView(),\n setView: (view) => controller.setView(view),\n getPlotRect: () => controller.getPlotRect(),\n getController: () => controller,\n }),\n [controller],\n );\n\n const onLayout = (e: LayoutChangeEvent) => {\n const { width: w, height: h } = e.nativeEvent.layout;\n const scene = controller.getScene();\n if (scene && scene.width === w && scene.height === h) return;\n controller.setSize(w, h);\n store.commit();\n };\n\n const scene = controller.getScene();\n let tooltip: ReactNode = null;\n const event = scene?.hover?.tooltip ? scene.hover.event : null;\n if (scene && event && customTooltip && renderTooltip) {\n const content = renderTooltip(event);\n const anchor = store.anchor ?? scene.hover?.marks[0] ?? null;\n if (\n content !== null &&\n content !== undefined &&\n content !== false &&\n anchor\n )\n tooltip = (\n <CustomTooltip scene={scene} anchor={anchor}>\n {content}\n </CustomTooltip>\n );\n }\n\n return (\n <View\n testID={testID}\n onLayout={onLayout}\n style={[{ width, height }, style]}\n {...part(\"chart\", \"root\")}\n >\n <View\n style={StyleSheet.absoluteFill}\n accessible\n accessibilityRole=\"image\"\n accessibilityLabel={options.ariaLabel}\n onStartShouldSetResponder={() => true}\n onResponderTerminationRequest={() => !store.holdsGesture()}\n onResponderGrant={store.touchStart}\n onResponderStart={store.touchAdd}\n onResponderMove={store.touchMove}\n onResponderEnd={store.touchEnd}\n onResponderRelease={store.touchEnd}\n onResponderTerminate={store.touchCancel}\n {...part(\"chart\", \"surface\")}\n >\n <View pointerEvents=\"none\" style={StyleSheet.absoluteFill}>\n {scene ? store.layers(scene, family) : null}\n {scene ? drawHover(scene, family, customTooltip) : null}\n </View>\n </View>\n {overlay && scene ? (\n <View\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n left: scene.layout.plot.x,\n top: scene.layout.plot.y,\n width: scene.layout.plot.width,\n height: scene.layout.plot.height,\n }}\n {...part(\"chart\", \"overlay\")}\n >\n {overlay(scene.layout.plot)}\n </View>\n ) : null}\n {tooltip}\n </View>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("../../internal/parts.cjs"),t=require("../../charts/src/engine/presets.cjs");require("../../charts/src/canvas.cjs");const n=require("./ChartBase.cjs");let r=require("react"),i=require("react-native"),a=require("react/jsx-runtime");function o(e,t){let{xAxis:i,yAxis:a,legend:o,tooltip:s,crosshair:c,annotations:l,interaction:u,padding:d,palette:f,ariaLabel:p}=e;return(0,r.useMemo)(()=>n.engineOptions({series:t,xAxis:i,yAxis:a,legend:o,tooltip:s,crosshair:c,annotations:l,interaction:u,padding:d,palette:f,ariaLabel:p}),[t,i,a,o,s,c,l,u,d,f,p])}var s=e=>({height:e.height,width:e.width,style:e.style,testID:e.testID,handleRef:e.ref,onHover:e.onHover,onPointClick:e.onPointClick,onPlotClick:e.onPlotClick,onZoom:e.onZoom,renderTooltip:e.renderTooltip});function c(e){let t=o(e,e.series);return(0,a.jsx)(n.ChartBase,{options:t,...s(e)})}function l(e){let{series:i,area:c=!1}=e,l=o(e,(0,r.useMemo)(()=>t.lineSeries(i,c),[i,c]));return(0,a.jsx)(n.ChartBase,{options:l,...s(e)})}function u(e){let{series:i,stacked:c=!1}=e,l=o(e,(0,r.useMemo)(()=>t.barSeries(i,c),[i,c]));return(0,a.jsx)(n.ChartBase,{options:l,...s(e)})}function d(e){let{series:i}=e,c=o(e,(0,r.useMemo)(()=>t.scatterSeries(i),[i]));return(0,a.jsx)(n.ChartBase,{options:c,...s(e)})}var f=[`topLeft`,`topRight`,`bottomLeft`,`bottomRight`],p=[];function m(c){let{points:l,xDomain:u,yDomain:d,xSplit:m,ySplit:h,quadrants:g,xLabel:_,yLabel:v,axisLabels:y,showTicks:b,reverseX:x,showLabels:S,pointSize:C,name:w,draggable:T,onPointClick:E,onPointDrop:D,onQuadrantClick:O,renderTooltip:k,quadrantContent:A}=c,j=o(c,p),M=T??!!D,N=(0,r.useMemo)(()=>t.quadrantChartOptions({points:l,xDomain:u,yDomain:d,xSplit:m,ySplit:h,quadrants:g,xLabel:_,yLabel:v,axisLabels:y,showTicks:b,reverseX:x,showLabels:S,pointSize:C,name:w,draggable:M},j),[l,u,d,m,h,g,_,v,y,b,x,S,C,w,M,j]),P={xDomain:u,yDomain:d,xSplit:m,ySplit:h,reverseX:x},F=A?t=>{let[n,r]=u??[0,10],[o,s]=d??[0,10],c=m??(n+r)/2,l=h??(o+s)/2,p=(c-n)/(r-n||1),g=(l-o)/(s-o||1),_=t.width*(x?1-p:p),v=t.height*(1-g);return f.map(n=>{let r=A[n];if(r==null||r===!1)return null;let o=n.endsWith(`Left`),s=n.startsWith(`top`);return(0,a.jsx)(i.View,{pointerEvents:`box-none`,style:{position:`absolute`,left:o?0:_,top:s?0:v,width:o?_:t.width-_,height:s?v:t.height-v},...e.part(`chart`,`quadrant`,{corner:n}),children:r},n)})}:void 0;return(0,a.jsx)(n.ChartBase,{options:N,...s({...c,onPointClick:void 0,renderTooltip:void 0}),overlay:F,onPointClick:E?e=>{let t=e.items[0]?.index;t!==void 0&&l[t]&&E(l[t],t)}:void 0,onPlotClick:O?e=>O(t.quadrantOf(P,e.x,e.y),e):void 0,onDrop:D?e=>{let n=e.item.index;l[n]&&D(l[n],n,{x:e.x,y:e.y,quadrant:t.quadrantOf(P,e.x,e.y)})}:void 0,renderTooltip:k?e=>{let t=e.items[0]?.index;return t!==void 0&&l[t]?k(l[t],t):null}:void 0})}exports.BarChart=u,exports.Chart=c,exports.LineChart=l,exports.QuadrantChart=m,exports.ScatterChart=d;
2
+ //# sourceMappingURL=charts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charts.cjs","names":["useMemo","engineOptions","ChartBase","lineSeries","barSeries","scatterSeries","quadrantChartOptions","View","part","quadrantOf","require_parts","require_presets","require_ChartBase","react","react_native","react_jsx_runtime","useEngineOptions","props","series","xAxis","yAxis","legend","tooltip","crosshair","annotations","interaction","padding","palette","ariaLabel","frameProps","Chart","options","LineChart","input","area","BarChart","stacked","ScatterChart","CORNERS","NO_SERIES","QuadrantChart","base","dragPoints","draggable","onPointDrop","points","xDomain","yDomain","xSplit","ySplit","quadrants","xLabel","yLabel","axisLabels","showTicks","reverseX","showLabels","pointSize","name","geometry","overlay","quadrantContent","x0","x1","y0","y1","xs","ys","fx","fy","sx","plot","sy","content","corner","left","top","onPointClick","index","event","onQuadrantClick","at","renderTooltip"],"sources":["../../../../../native/src/components/Chart/charts.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { View } from \"react-native\";\nimport {\n barSeries,\n lineSeries,\n quadrantChartOptions,\n quadrantOf,\n scatterSeries,\n type ChartHoverEvent,\n type ChartOptions,\n type ChartRect,\n type ChartSeries,\n type QuadrantCorner,\n} from \"@minerva/charts/canvas\";\nimport { part } from \"../../internal/parts\";\nimport { ChartBase, engineOptions } from \"./ChartBase\";\nimport type {\n BarChartProps,\n ChartCommonProps,\n ChartProps,\n LineChartProps,\n QuadrantChartProps,\n ScatterChartProps,\n} from \"./types\";\n\n/** Engine options of the common props, kept while the props are the same */\nfunction useEngineOptions(\n props: Omit<\n ChartCommonProps,\n \"onPointClick\" | \"onPlotClick\" | \"renderTooltip\"\n >,\n series: readonly ChartSeries[],\n): ChartOptions {\n const {\n xAxis,\n yAxis,\n legend,\n tooltip,\n crosshair,\n annotations,\n interaction,\n padding,\n palette,\n ariaLabel,\n } = props;\n return useMemo(\n () =>\n engineOptions({\n series,\n xAxis,\n yAxis,\n legend,\n tooltip,\n crosshair,\n annotations,\n interaction,\n padding,\n palette,\n ariaLabel,\n }),\n [\n series,\n xAxis,\n yAxis,\n legend,\n tooltip,\n crosshair,\n annotations,\n interaction,\n padding,\n palette,\n ariaLabel,\n ],\n );\n}\n\nconst frameProps = (props: ChartCommonProps) => ({\n height: props.height,\n width: props.width,\n style: props.style,\n testID: props.testID,\n handleRef: props.ref,\n onHover: props.onHover,\n onPointClick: props.onPointClick,\n onPlotClick: props.onPlotClick,\n onZoom: props.onZoom,\n renderTooltip: props.renderTooltip,\n});\n\n/**\n * Chart mixing line, area, bar and scatter series, drawn with views:\n * tap for the tooltip, pinch to zoom, drag to pan, double tap to reset.\n * Themed by the closest `MinervaProvider` (light / dark).\n */\nexport function Chart(props: ChartProps) {\n const options = useEngineOptions(props, props.series);\n return <ChartBase options={options} {...frameProps(props)} />;\n}\n\n/** Line (or area) chart; large series are decimated to the pixel columns */\nexport function LineChart(props: LineChartProps) {\n const { series: input, area = false } = props;\n const series = useMemo(() => lineSeries(input, area), [input, area]);\n const options = useEngineOptions(props, series);\n return <ChartBase options={options} {...frameProps(props)} />;\n}\n\n/** Bar chart: grouped side by side, or stacked */\nexport function BarChart(props: BarChartProps) {\n const { series: input, stacked = false } = props;\n const series = useMemo(() => barSeries(input, stacked), [input, stacked]);\n const options = useEngineOptions(props, series);\n return <ChartBase options={options} {...frameProps(props)} />;\n}\n\n/** Scatter chart: zooms on both axes; large point sets are merged per cell */\nexport function ScatterChart(props: ScatterChartProps) {\n const { series: input } = props;\n const series = useMemo(() => scatterSeries(input), [input]);\n const options = useEngineOptions(props, series);\n return <ChartBase options={options} {...frameProps(props)} />;\n}\n\nconst CORNERS: QuadrantCorner[] = [\n \"topLeft\",\n \"topRight\",\n \"bottomLeft\",\n \"bottomRight\",\n];\n\nconst NO_SERIES: readonly ChartSeries[] = [];\n\n/**\n * Four-quadrant matrix (priority matrix, Eisenhower, BCG, ...): tinted\n * quadrants with titles, dividers, and labelled dots placed without\n * overlapping labels. Dots can be dragged to another quadrant.\n */\nexport function QuadrantChart(props: QuadrantChartProps) {\n const {\n points,\n xDomain,\n yDomain,\n xSplit,\n ySplit,\n quadrants,\n xLabel,\n yLabel,\n axisLabels,\n showTicks,\n reverseX,\n showLabels,\n pointSize,\n name,\n draggable,\n onPointClick,\n onPointDrop,\n onQuadrantClick,\n renderTooltip,\n quadrantContent,\n } = props;\n const base = useEngineOptions(props, NO_SERIES);\n const dragPoints = draggable ?? !!onPointDrop;\n const options = useMemo(\n () =>\n quadrantChartOptions(\n {\n points,\n xDomain,\n yDomain,\n xSplit,\n ySplit,\n quadrants,\n xLabel,\n yLabel,\n axisLabels,\n showTicks,\n reverseX,\n showLabels,\n pointSize,\n name,\n draggable: dragPoints,\n },\n base,\n ),\n [\n points,\n xDomain,\n yDomain,\n xSplit,\n ySplit,\n quadrants,\n xLabel,\n yLabel,\n axisLabels,\n showTicks,\n reverseX,\n showLabels,\n pointSize,\n name,\n dragPoints,\n base,\n ],\n );\n const geometry = { xDomain, yDomain, xSplit, ySplit, reverseX };\n\n const overlay = quadrantContent\n ? (plot: ChartRect) => {\n const [x0, x1] = xDomain ?? [0, 10];\n const [y0, y1] = yDomain ?? [0, 10];\n const xs = xSplit ?? (x0 + x1) / 2;\n const ys = ySplit ?? (y0 + y1) / 2;\n const fx = (xs - x0) / (x1 - x0 || 1);\n const fy = (ys - y0) / (y1 - y0 || 1);\n // split point relative to the plot area\n const sx = plot.width * (reverseX ? 1 - fx : fx);\n const sy = plot.height * (1 - fy);\n return CORNERS.map((corner) => {\n const content = quadrantContent[corner];\n if (content === undefined || content === null || content === false)\n return null;\n const left = corner.endsWith(\"Left\");\n const top = corner.startsWith(\"top\");\n return (\n <View\n key={corner}\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n left: left ? 0 : sx,\n top: top ? 0 : sy,\n width: left ? sx : plot.width - sx,\n height: top ? sy : plot.height - sy,\n }}\n {...part(\"chart\", \"quadrant\", { corner })}\n >\n {content}\n </View>\n );\n });\n }\n : undefined;\n\n return (\n <ChartBase\n options={options}\n {...frameProps({\n ...props,\n onPointClick: undefined,\n renderTooltip: undefined,\n })}\n overlay={overlay}\n onPointClick={\n onPointClick\n ? (event: ChartHoverEvent) => {\n const index = event.items[0]?.index;\n if (index !== undefined && points[index])\n onPointClick(points[index], index);\n }\n : undefined\n }\n onPlotClick={\n onQuadrantClick\n ? (at) => onQuadrantClick(quadrantOf(geometry, at.x, at.y), at)\n : undefined\n }\n onDrop={\n onPointDrop\n ? (event) => {\n const index = event.item.index;\n if (!points[index]) return;\n onPointDrop(points[index], index, {\n x: event.x,\n y: event.y,\n quadrant: quadrantOf(geometry, event.x, event.y),\n });\n }\n : undefined\n }\n renderTooltip={\n renderTooltip\n ? (event) => {\n const index = event.items[0]?.index;\n return index !== undefined && points[index]\n ? renderTooltip(points[index], index)\n : null;\n }\n : undefined\n }\n />\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { BarChartProps, ChartProps, LineChartProps, QuadrantChartProps, ScatterChartProps } from './types.cjs';
2
+ /**
3
+ * Chart mixing line, area, bar and scatter series, drawn with views:
4
+ * tap for the tooltip, pinch to zoom, drag to pan, double tap to reset.
5
+ * Themed by the closest `MinervaProvider` (light / dark).
6
+ */
7
+ export declare function Chart(props: ChartProps): import('react').JSX.Element;
8
+ /** Line (or area) chart; large series are decimated to the pixel columns */
9
+ export declare function LineChart(props: LineChartProps): import('react').JSX.Element;
10
+ /** Bar chart: grouped side by side, or stacked */
11
+ export declare function BarChart(props: BarChartProps): import('react').JSX.Element;
12
+ /** Scatter chart: zooms on both axes; large point sets are merged per cell */
13
+ export declare function ScatterChart(props: ScatterChartProps): import('react').JSX.Element;
14
+ /**
15
+ * Four-quadrant matrix (priority matrix, Eisenhower, BCG, ...): tinted
16
+ * quadrants with titles, dividers, and labelled dots placed without
17
+ * overlapping labels. Dots can be dragged to another quadrant.
18
+ */
19
+ export declare function QuadrantChart(props: QuadrantChartProps): import('react').JSX.Element;
@@ -0,0 +1,19 @@
1
+ import { BarChartProps, ChartProps, LineChartProps, QuadrantChartProps, ScatterChartProps } from './types.js';
2
+ /**
3
+ * Chart mixing line, area, bar and scatter series, drawn with views:
4
+ * tap for the tooltip, pinch to zoom, drag to pan, double tap to reset.
5
+ * Themed by the closest `MinervaProvider` (light / dark).
6
+ */
7
+ export declare function Chart(props: ChartProps): import('react').JSX.Element;
8
+ /** Line (or area) chart; large series are decimated to the pixel columns */
9
+ export declare function LineChart(props: LineChartProps): import('react').JSX.Element;
10
+ /** Bar chart: grouped side by side, or stacked */
11
+ export declare function BarChart(props: BarChartProps): import('react').JSX.Element;
12
+ /** Scatter chart: zooms on both axes; large point sets are merged per cell */
13
+ export declare function ScatterChart(props: ScatterChartProps): import('react').JSX.Element;
14
+ /**
15
+ * Four-quadrant matrix (priority matrix, Eisenhower, BCG, ...): tinted
16
+ * quadrants with titles, dividers, and labelled dots placed without
17
+ * overlapping labels. Dots can be dragged to another quadrant.
18
+ */
19
+ export declare function QuadrantChart(props: QuadrantChartProps): import('react').JSX.Element;
@@ -0,0 +1,173 @@
1
+ import { part as e } from "../../internal/parts.js";
2
+ import { barSeries as t, lineSeries as n, quadrantChartOptions as r, quadrantOf as i, scatterSeries as a } from "../../charts/src/engine/presets.js";
3
+ import "../../charts/src/canvas.js";
4
+ import { ChartBase as o, engineOptions as s } from "./ChartBase.js";
5
+ import { useMemo as c } from "react";
6
+ import { View as l } from "react-native";
7
+ import { jsx as u } from "react/jsx-runtime";
8
+ //#region src/components/Chart/charts.tsx
9
+ function d(e, t) {
10
+ let { xAxis: n, yAxis: r, legend: i, tooltip: a, crosshair: o, annotations: l, interaction: u, padding: d, palette: f, ariaLabel: p } = e;
11
+ return c(() => s({
12
+ series: t,
13
+ xAxis: n,
14
+ yAxis: r,
15
+ legend: i,
16
+ tooltip: a,
17
+ crosshair: o,
18
+ annotations: l,
19
+ interaction: u,
20
+ padding: d,
21
+ palette: f,
22
+ ariaLabel: p
23
+ }), [
24
+ t,
25
+ n,
26
+ r,
27
+ i,
28
+ a,
29
+ o,
30
+ l,
31
+ u,
32
+ d,
33
+ f,
34
+ p
35
+ ]);
36
+ }
37
+ var f = (e) => ({
38
+ height: e.height,
39
+ width: e.width,
40
+ style: e.style,
41
+ testID: e.testID,
42
+ handleRef: e.ref,
43
+ onHover: e.onHover,
44
+ onPointClick: e.onPointClick,
45
+ onPlotClick: e.onPlotClick,
46
+ onZoom: e.onZoom,
47
+ renderTooltip: e.renderTooltip
48
+ });
49
+ function p(e) {
50
+ let t = d(e, e.series);
51
+ return /* @__PURE__ */ u(o, {
52
+ options: t,
53
+ ...f(e)
54
+ });
55
+ }
56
+ function m(e) {
57
+ let { series: t, area: r = !1 } = e, i = d(e, c(() => n(t, r), [t, r]));
58
+ return /* @__PURE__ */ u(o, {
59
+ options: i,
60
+ ...f(e)
61
+ });
62
+ }
63
+ function h(e) {
64
+ let { series: n, stacked: r = !1 } = e, i = d(e, c(() => t(n, r), [n, r]));
65
+ return /* @__PURE__ */ u(o, {
66
+ options: i,
67
+ ...f(e)
68
+ });
69
+ }
70
+ function g(e) {
71
+ let { series: t } = e, n = d(e, c(() => a(t), [t]));
72
+ return /* @__PURE__ */ u(o, {
73
+ options: n,
74
+ ...f(e)
75
+ });
76
+ }
77
+ var _ = [
78
+ "topLeft",
79
+ "topRight",
80
+ "bottomLeft",
81
+ "bottomRight"
82
+ ], v = [];
83
+ function y(t) {
84
+ let { points: n, xDomain: a, yDomain: s, xSplit: p, ySplit: m, quadrants: h, xLabel: g, yLabel: y, axisLabels: b, showTicks: x, reverseX: S, showLabels: C, pointSize: w, name: T, draggable: E, onPointClick: D, onPointDrop: O, onQuadrantClick: k, renderTooltip: A, quadrantContent: j } = t, M = d(t, v), N = E ?? !!O, P = c(() => r({
85
+ points: n,
86
+ xDomain: a,
87
+ yDomain: s,
88
+ xSplit: p,
89
+ ySplit: m,
90
+ quadrants: h,
91
+ xLabel: g,
92
+ yLabel: y,
93
+ axisLabels: b,
94
+ showTicks: x,
95
+ reverseX: S,
96
+ showLabels: C,
97
+ pointSize: w,
98
+ name: T,
99
+ draggable: N
100
+ }, M), [
101
+ n,
102
+ a,
103
+ s,
104
+ p,
105
+ m,
106
+ h,
107
+ g,
108
+ y,
109
+ b,
110
+ x,
111
+ S,
112
+ C,
113
+ w,
114
+ T,
115
+ N,
116
+ M
117
+ ]), F = {
118
+ xDomain: a,
119
+ yDomain: s,
120
+ xSplit: p,
121
+ ySplit: m,
122
+ reverseX: S
123
+ }, I = j ? (t) => {
124
+ let [n, r] = a ?? [0, 10], [i, o] = s ?? [0, 10], c = p ?? (n + r) / 2, d = m ?? (i + o) / 2, f = (c - n) / (r - n || 1), h = (d - i) / (o - i || 1), g = t.width * (S ? 1 - f : f), v = t.height * (1 - h);
125
+ return _.map((n) => {
126
+ let r = j[n];
127
+ if (r == null || r === !1) return null;
128
+ let i = n.endsWith("Left"), a = n.startsWith("top");
129
+ return /* @__PURE__ */ u(l, {
130
+ pointerEvents: "box-none",
131
+ style: {
132
+ position: "absolute",
133
+ left: i ? 0 : g,
134
+ top: a ? 0 : v,
135
+ width: i ? g : t.width - g,
136
+ height: a ? v : t.height - v
137
+ },
138
+ ...e("chart", "quadrant", { corner: n }),
139
+ children: r
140
+ }, n);
141
+ });
142
+ } : void 0;
143
+ return /* @__PURE__ */ u(o, {
144
+ options: P,
145
+ ...f({
146
+ ...t,
147
+ onPointClick: void 0,
148
+ renderTooltip: void 0
149
+ }),
150
+ overlay: I,
151
+ onPointClick: D ? (e) => {
152
+ let t = e.items[0]?.index;
153
+ t !== void 0 && n[t] && D(n[t], t);
154
+ } : void 0,
155
+ onPlotClick: k ? (e) => k(i(F, e.x, e.y), e) : void 0,
156
+ onDrop: O ? (e) => {
157
+ let t = e.item.index;
158
+ n[t] && O(n[t], t, {
159
+ x: e.x,
160
+ y: e.y,
161
+ quadrant: i(F, e.x, e.y)
162
+ });
163
+ } : void 0,
164
+ renderTooltip: A ? (e) => {
165
+ let t = e.items[0]?.index;
166
+ return t !== void 0 && n[t] ? A(n[t], t) : null;
167
+ } : void 0
168
+ });
169
+ }
170
+ //#endregion
171
+ export { h as BarChart, p as Chart, m as LineChart, y as QuadrantChart, g as ScatterChart };
172
+
173
+ //# sourceMappingURL=charts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charts.js","names":["useEngineOptions","props","useMemo","engineOptions","series","xAxis","yAxis","legend","tooltip","crosshair","annotations","interaction","padding","palette","ariaLabel","frameProps","Chart","options","ChartBase","LineChart","input","lineSeries","area","BarChart","barSeries","stacked","ScatterChart","scatterSeries","CORNERS","NO_SERIES","QuadrantChart","base","dragPoints","draggable","onPointDrop","quadrantChartOptions","points","xDomain","yDomain","xSplit","ySplit","quadrants","xLabel","yLabel","axisLabels","showTicks","reverseX","showLabels","pointSize","name","geometry","overlay","quadrantContent","x0","x1","y0","y1","xs","ys","fx","fy","sx","plot","sy","content","corner","left","top","View","part","onPointClick","index","event","onQuadrantClick","quadrantOf","at","renderTooltip"],"sources":["../../../../../native/src/components/Chart/charts.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { View } from \"react-native\";\nimport {\n barSeries,\n lineSeries,\n quadrantChartOptions,\n quadrantOf,\n scatterSeries,\n type ChartHoverEvent,\n type ChartOptions,\n type ChartRect,\n type ChartSeries,\n type QuadrantCorner,\n} from \"@minerva/charts/canvas\";\nimport { part } from \"../../internal/parts\";\nimport { ChartBase, engineOptions } from \"./ChartBase\";\nimport type {\n BarChartProps,\n ChartCommonProps,\n ChartProps,\n LineChartProps,\n QuadrantChartProps,\n ScatterChartProps,\n} from \"./types\";\n\n/** Engine options of the common props, kept while the props are the same */\nfunction useEngineOptions(\n props: Omit<\n ChartCommonProps,\n \"onPointClick\" | \"onPlotClick\" | \"renderTooltip\"\n >,\n series: readonly ChartSeries[],\n): ChartOptions {\n const {\n xAxis,\n yAxis,\n legend,\n tooltip,\n crosshair,\n annotations,\n interaction,\n padding,\n palette,\n ariaLabel,\n } = props;\n return useMemo(\n () =>\n engineOptions({\n series,\n xAxis,\n yAxis,\n legend,\n tooltip,\n crosshair,\n annotations,\n interaction,\n padding,\n palette,\n ariaLabel,\n }),\n [\n series,\n xAxis,\n yAxis,\n legend,\n tooltip,\n crosshair,\n annotations,\n interaction,\n padding,\n palette,\n ariaLabel,\n ],\n );\n}\n\nconst frameProps = (props: ChartCommonProps) => ({\n height: props.height,\n width: props.width,\n style: props.style,\n testID: props.testID,\n handleRef: props.ref,\n onHover: props.onHover,\n onPointClick: props.onPointClick,\n onPlotClick: props.onPlotClick,\n onZoom: props.onZoom,\n renderTooltip: props.renderTooltip,\n});\n\n/**\n * Chart mixing line, area, bar and scatter series, drawn with views:\n * tap for the tooltip, pinch to zoom, drag to pan, double tap to reset.\n * Themed by the closest `MinervaProvider` (light / dark).\n */\nexport function Chart(props: ChartProps) {\n const options = useEngineOptions(props, props.series);\n return <ChartBase options={options} {...frameProps(props)} />;\n}\n\n/** Line (or area) chart; large series are decimated to the pixel columns */\nexport function LineChart(props: LineChartProps) {\n const { series: input, area = false } = props;\n const series = useMemo(() => lineSeries(input, area), [input, area]);\n const options = useEngineOptions(props, series);\n return <ChartBase options={options} {...frameProps(props)} />;\n}\n\n/** Bar chart: grouped side by side, or stacked */\nexport function BarChart(props: BarChartProps) {\n const { series: input, stacked = false } = props;\n const series = useMemo(() => barSeries(input, stacked), [input, stacked]);\n const options = useEngineOptions(props, series);\n return <ChartBase options={options} {...frameProps(props)} />;\n}\n\n/** Scatter chart: zooms on both axes; large point sets are merged per cell */\nexport function ScatterChart(props: ScatterChartProps) {\n const { series: input } = props;\n const series = useMemo(() => scatterSeries(input), [input]);\n const options = useEngineOptions(props, series);\n return <ChartBase options={options} {...frameProps(props)} />;\n}\n\nconst CORNERS: QuadrantCorner[] = [\n \"topLeft\",\n \"topRight\",\n \"bottomLeft\",\n \"bottomRight\",\n];\n\nconst NO_SERIES: readonly ChartSeries[] = [];\n\n/**\n * Four-quadrant matrix (priority matrix, Eisenhower, BCG, ...): tinted\n * quadrants with titles, dividers, and labelled dots placed without\n * overlapping labels. Dots can be dragged to another quadrant.\n */\nexport function QuadrantChart(props: QuadrantChartProps) {\n const {\n points,\n xDomain,\n yDomain,\n xSplit,\n ySplit,\n quadrants,\n xLabel,\n yLabel,\n axisLabels,\n showTicks,\n reverseX,\n showLabels,\n pointSize,\n name,\n draggable,\n onPointClick,\n onPointDrop,\n onQuadrantClick,\n renderTooltip,\n quadrantContent,\n } = props;\n const base = useEngineOptions(props, NO_SERIES);\n const dragPoints = draggable ?? !!onPointDrop;\n const options = useMemo(\n () =>\n quadrantChartOptions(\n {\n points,\n xDomain,\n yDomain,\n xSplit,\n ySplit,\n quadrants,\n xLabel,\n yLabel,\n axisLabels,\n showTicks,\n reverseX,\n showLabels,\n pointSize,\n name,\n draggable: dragPoints,\n },\n base,\n ),\n [\n points,\n xDomain,\n yDomain,\n xSplit,\n ySplit,\n quadrants,\n xLabel,\n yLabel,\n axisLabels,\n showTicks,\n reverseX,\n showLabels,\n pointSize,\n name,\n dragPoints,\n base,\n ],\n );\n const geometry = { xDomain, yDomain, xSplit, ySplit, reverseX };\n\n const overlay = quadrantContent\n ? (plot: ChartRect) => {\n const [x0, x1] = xDomain ?? [0, 10];\n const [y0, y1] = yDomain ?? [0, 10];\n const xs = xSplit ?? (x0 + x1) / 2;\n const ys = ySplit ?? (y0 + y1) / 2;\n const fx = (xs - x0) / (x1 - x0 || 1);\n const fy = (ys - y0) / (y1 - y0 || 1);\n // split point relative to the plot area\n const sx = plot.width * (reverseX ? 1 - fx : fx);\n const sy = plot.height * (1 - fy);\n return CORNERS.map((corner) => {\n const content = quadrantContent[corner];\n if (content === undefined || content === null || content === false)\n return null;\n const left = corner.endsWith(\"Left\");\n const top = corner.startsWith(\"top\");\n return (\n <View\n key={corner}\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n left: left ? 0 : sx,\n top: top ? 0 : sy,\n width: left ? sx : plot.width - sx,\n height: top ? sy : plot.height - sy,\n }}\n {...part(\"chart\", \"quadrant\", { corner })}\n >\n {content}\n </View>\n );\n });\n }\n : undefined;\n\n return (\n <ChartBase\n options={options}\n {...frameProps({\n ...props,\n onPointClick: undefined,\n renderTooltip: undefined,\n })}\n overlay={overlay}\n onPointClick={\n onPointClick\n ? (event: ChartHoverEvent) => {\n const index = event.items[0]?.index;\n if (index !== undefined && points[index])\n onPointClick(points[index], index);\n }\n : undefined\n }\n onPlotClick={\n onQuadrantClick\n ? (at) => onQuadrantClick(quadrantOf(geometry, at.x, at.y), at)\n : undefined\n }\n onDrop={\n onPointDrop\n ? (event) => {\n const index = event.item.index;\n if (!points[index]) return;\n onPointDrop(points[index], index, {\n x: event.x,\n y: event.y,\n quadrant: quadrantOf(geometry, event.x, event.y),\n });\n }\n : undefined\n }\n renderTooltip={\n renderTooltip\n ? (event) => {\n const index = event.items[0]?.index;\n return index !== undefined && points[index]\n ? renderTooltip(points[index], index)\n : null;\n }\n : undefined\n }\n />\n );\n}\n"],"mappings":";;;;;;;;AA0BA,SAASA,EACP,GAIA,GACc;CACd,IAAM,EACJ,UACA,UACA,WACA,YACA,cACA,gBACA,gBACA,YACA,YACA,iBACEC;CACJ,OAAOC,QAEHC,EAAc;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,GACH;EACEC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;CACF,CACF;AACF;AAEA,IAAMC,KAAc,OAA6B;CAC/C,QAAQd,EAAM;CACd,OAAOA,EAAM;CACb,OAAOA,EAAM;CACb,QAAQA,EAAM;CACd,WAAWA,EAAM;CACjB,SAASA,EAAM;CACf,cAAcA,EAAM;CACpB,aAAaA,EAAM;CACnB,QAAQA,EAAM;CACd,eAAeA,EAAM;AACvB;AAOA,SAAgBe,EAAM,GAAmB;CACvC,IAAMC,IAAUjB,EAAiBC,GAAOA,EAAM,MAAM;CACpD,OAAO,kBAACiB,GAAD;EAAoB;EAAS,GAAIH,EAAWd,CAAK;CAAI,CAAA;AAC9D;AAGA,SAAgBkB,EAAU,GAAuB;CAC/C,IAAM,EAAE,QAAQC,GAAO,UAAO,OAAUnB,GAElCgB,IAAUjB,EAAiBC,GADlBC,QAAcmB,EAAWD,GAAOE,CAAI,GAAG,CAACF,GAAOE,CAAI,CAC1B,CAAM;CAC9C,OAAO,kBAACJ,GAAD;EAAoB;EAAS,GAAIH,EAAWd,CAAK;CAAI,CAAA;AAC9D;AAGA,SAAgBsB,EAAS,GAAsB;CAC7C,IAAM,EAAE,QAAQH,GAAO,aAAU,OAAUnB,GAErCgB,IAAUjB,EAAiBC,GADlBC,QAAcsB,EAAUJ,GAAOK,CAAO,GAAG,CAACL,GAAOK,CAAO,CAC/B,CAAM;CAC9C,OAAO,kBAACP,GAAD;EAAoB;EAAS,GAAIH,EAAWd,CAAK;CAAI,CAAA;AAC9D;AAGA,SAAgByB,EAAa,GAA0B;CACrD,IAAM,EAAE,QAAQN,MAAUnB,GAEpBgB,IAAUjB,EAAiBC,GADlBC,QAAcyB,EAAcP,CAAK,GAAG,CAACA,CAAK,CACjB,CAAM;CAC9C,OAAO,kBAACF,GAAD;EAAoB;EAAS,GAAIH,EAAWd,CAAK;CAAI,CAAA;AAC9D;AAEA,IAAM2B,IAA4B;CAChC;CACA;CACA;CACA;AACF,GAEMC,IAAoC,CAAC;AAO3C,SAAgBC,EAAc,GAA2B;CACvD,IAAM,EACJ,WACA,YACA,YACA,WACA,WACA,cACA,WACA,WACA,eACA,cACA,aACA,eACA,cACA,SACA,cACA,iBACA,gBACA,oBACA,kBACA,uBACE7B,GACE8B,IAAO/B,EAAiBC,GAAO4B,CAAS,GACxCG,IAAaC,KAAa,CAAC,CAACC,GAC5BjB,IAAUf,QAEZiC,EACE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAWH;CACb,GACAD,CACF,GACF;EACEK;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAjB;EACAD;CACF,CACF,GACMmB,IAAW;EAAE;EAAS;EAAS;EAAQ;EAAQ;CAAS,GAExDC,IAAUC,KACX,MAAoB;EACnB,IAAM,CAACC,GAAIC,KAAMjB,KAAW,CAAC,GAAG,EAAE,GAC5B,CAACkB,GAAIC,KAAMlB,KAAW,CAAC,GAAG,EAAE,GAC5BmB,IAAKlB,MAAWc,IAAKC,KAAM,GAC3BI,IAAKlB,MAAWe,IAAKC,KAAM,GAC3BG,KAAMF,IAAKJ,MAAOC,IAAKD,KAAM,IAC7BO,KAAMF,IAAKH,MAAOC,IAAKD,KAAM,IAE7BM,IAAKC,EAAK,SAAShB,IAAW,IAAIa,IAAKA,IACvCI,IAAKD,EAAK,UAAU,IAAIF;EAC9B,OAAOhC,EAAQ,KAAK,MAAW;GAC7B,IAAMoC,IAAUZ,EAAgBa;GAChC,IAAID,KAAqC,QAAQA,MAAY,IAC3D,OAAO;GACT,IAAME,IAAOD,EAAO,SAAS,MAAM,GAC7BE,IAAMF,EAAO,WAAW,KAAK;GACnC,OACE,kBAACG,GAAD;IAEE,eAAc;IACd,OAAO;KACL,UAAU;KACV,MAAMF,IAAO,IAAIL;KACjB,KAAKM,IAAM,IAAIJ;KACf,OAAOG,IAAOL,IAAKC,EAAK,QAAQD;KAChC,QAAQM,IAAMJ,IAAKD,EAAK,SAASC;IACnC;IACA,GAAIM,EAAK,SAAS,YAAY,EAAE,UAAO,CAAC;IAEvC,UAAAL;GACG,GAZCC,CAYD;EAEV,CAAC;CACH,IACA,KAAA;CAEJ,OACE,kBAAC/C,GAAD;EACW;EACT,GAAIH,EAAW;GACb,GAAGd;GACH,cAAc,KAAA;GACd,eAAe,KAAA;EACjB,CAAC;EACQ;EACT,cACEqE,KACK,MAA2B;GAC1B,IAAMC,IAAQC,EAAM,MAAM,EAAE,EAAE;GAC9B,AAAID,MAAU,KAAA,KAAanC,EAAOmC,MAChCD,EAAalC,EAAOmC,IAAQA,CAAK;EACrC,IACA,KAAA;EAEN,aACEE,KACK,MAAOA,EAAgBC,EAAWxB,GAAUyB,EAAG,GAAGA,EAAG,CAAC,GAAGA,CAAE,IAC5D,KAAA;EAEN,QACEzC,KACK,MAAU;GACT,IAAMqC,IAAQC,EAAM,KAAK;GACzB,AAAKpC,EAAOmC,MACZrC,EAAYE,EAAOmC,IAAQA,GAAO;IAChC,GAAGC,EAAM;IACT,GAAGA,EAAM;IACT,UAAUE,EAAWxB,GAAUsB,EAAM,GAAGA,EAAM,CAAC;GACjD,CAAC;EACH,IACA,KAAA;EAEN,eACEI,KACK,MAAU;GACT,IAAML,IAAQC,EAAM,MAAM,EAAE,EAAE;GAC9B,OAAOD,MAAU,KAAA,KAAanC,EAAOmC,KACjCK,EAAcxC,EAAOmC,IAAQA,CAAK,IAClC;EACN,IACA,KAAA;CAEP,CAAA;AAEL"}
@@ -0,0 +1 @@
1
+ const e=require("./charts.cjs");exports.BarChart=e.BarChart,exports.Chart=e.Chart,exports.LineChart=e.LineChart,exports.QuadrantChart=e.QuadrantChart,exports.ScatterChart=e.ScatterChart;
@@ -0,0 +1,2 @@
1
+ export { BarChart, Chart, LineChart, QuadrantChart, ScatterChart, } from './charts.cjs';
2
+ export type * from './types.cjs';
@@ -0,0 +1,2 @@
1
+ export { BarChart, Chart, LineChart, QuadrantChart, ScatterChart, } from './charts.js';
2
+ export type * from './types.js';
@@ -0,0 +1,2 @@
1
+ import { BarChart as e, Chart as t, LineChart as n, QuadrantChart as r, ScatterChart as i } from "./charts.js";
2
+ export { e as BarChart, t as Chart, n as LineChart, r as QuadrantChart, i as ScatterChart };
@@ -0,0 +1,2 @@
1
+ var e=/^\s*(?:(\d{3}|bold|normal)\s+)?([\d.]+)px/,t=e=>e>=4352&&e<=4447||e>=11904&&e<=42191||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65072&&e<=65103||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=126976,n=new Set(" il.,:;'|!Ijtfr()[]`"),r=new Set(`MWmw@%`),i=e=>t(e.codePointAt(0)??0)?1:n.has(e)?.3:r.has(e)?.82:e>=`0`&&e<=`9`?.56:e>=`A`&&e<=`Z`?.66:.55;function a(t,n){let r=e.exec(n),a=r?.[1],o=a===`bold`?700:a&&a!==`normal`?+a:400,s=r?Number(r[2]):11,c=0;for(let e of t)c+=i(e);return c*s*(o>=600?1.07:o>=500?1.03:1)}exports.measureChartText=a;
2
+ //# sourceMappingURL=measure.cjs.map