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,291 @@
1
+ import { useMemo } from "react";
2
+ import { View } from "react-native";
3
+ import {
4
+ barSeries,
5
+ lineSeries,
6
+ quadrantChartOptions,
7
+ quadrantOf,
8
+ scatterSeries,
9
+ type ChartHoverEvent,
10
+ type ChartOptions,
11
+ type ChartRect,
12
+ type ChartSeries,
13
+ type QuadrantCorner,
14
+ } from "../../../charts/src/canvas.js";
15
+ import { part } from "../../internal/parts";
16
+ import { ChartBase, engineOptions } from "./ChartBase";
17
+ import type {
18
+ BarChartProps,
19
+ ChartCommonProps,
20
+ ChartProps,
21
+ LineChartProps,
22
+ QuadrantChartProps,
23
+ ScatterChartProps,
24
+ } from "./types";
25
+
26
+ /** Engine options of the common props, kept while the props are the same */
27
+ function useEngineOptions(
28
+ props: Omit<
29
+ ChartCommonProps,
30
+ "onPointClick" | "onPlotClick" | "renderTooltip"
31
+ >,
32
+ series: readonly ChartSeries[],
33
+ ): ChartOptions {
34
+ const {
35
+ xAxis,
36
+ yAxis,
37
+ legend,
38
+ tooltip,
39
+ crosshair,
40
+ annotations,
41
+ interaction,
42
+ padding,
43
+ palette,
44
+ ariaLabel,
45
+ } = props;
46
+ return useMemo(
47
+ () =>
48
+ engineOptions({
49
+ series,
50
+ xAxis,
51
+ yAxis,
52
+ legend,
53
+ tooltip,
54
+ crosshair,
55
+ annotations,
56
+ interaction,
57
+ padding,
58
+ palette,
59
+ ariaLabel,
60
+ }),
61
+ [
62
+ series,
63
+ xAxis,
64
+ yAxis,
65
+ legend,
66
+ tooltip,
67
+ crosshair,
68
+ annotations,
69
+ interaction,
70
+ padding,
71
+ palette,
72
+ ariaLabel,
73
+ ],
74
+ );
75
+ }
76
+
77
+ const frameProps = (props: ChartCommonProps) => ({
78
+ height: props.height,
79
+ width: props.width,
80
+ style: props.style,
81
+ testID: props.testID,
82
+ handleRef: props.ref,
83
+ onHover: props.onHover,
84
+ onPointClick: props.onPointClick,
85
+ onPlotClick: props.onPlotClick,
86
+ onZoom: props.onZoom,
87
+ renderTooltip: props.renderTooltip,
88
+ });
89
+
90
+ /**
91
+ * Chart mixing line, area, bar and scatter series, drawn with views:
92
+ * tap for the tooltip, pinch to zoom, drag to pan, double tap to reset.
93
+ * Themed by the closest `MinervaProvider` (light / dark).
94
+ */
95
+ export function Chart(props: ChartProps) {
96
+ const options = useEngineOptions(props, props.series);
97
+ return <ChartBase options={options} {...frameProps(props)} />;
98
+ }
99
+
100
+ /** Line (or area) chart; large series are decimated to the pixel columns */
101
+ export function LineChart(props: LineChartProps) {
102
+ const { series: input, area = false } = props;
103
+ const series = useMemo(() => lineSeries(input, area), [input, area]);
104
+ const options = useEngineOptions(props, series);
105
+ return <ChartBase options={options} {...frameProps(props)} />;
106
+ }
107
+
108
+ /** Bar chart: grouped side by side, or stacked */
109
+ export function BarChart(props: BarChartProps) {
110
+ const { series: input, stacked = false } = props;
111
+ const series = useMemo(() => barSeries(input, stacked), [input, stacked]);
112
+ const options = useEngineOptions(props, series);
113
+ return <ChartBase options={options} {...frameProps(props)} />;
114
+ }
115
+
116
+ /** Scatter chart: zooms on both axes; large point sets are merged per cell */
117
+ export function ScatterChart(props: ScatterChartProps) {
118
+ const { series: input } = props;
119
+ const series = useMemo(() => scatterSeries(input), [input]);
120
+ const options = useEngineOptions(props, series);
121
+ return <ChartBase options={options} {...frameProps(props)} />;
122
+ }
123
+
124
+ const CORNERS: QuadrantCorner[] = [
125
+ "topLeft",
126
+ "topRight",
127
+ "bottomLeft",
128
+ "bottomRight",
129
+ ];
130
+
131
+ const NO_SERIES: readonly ChartSeries[] = [];
132
+
133
+ /**
134
+ * Four-quadrant matrix (priority matrix, Eisenhower, BCG, ...): tinted
135
+ * quadrants with titles, dividers, and labelled dots placed without
136
+ * overlapping labels. Dots can be dragged to another quadrant.
137
+ */
138
+ export function QuadrantChart(props: QuadrantChartProps) {
139
+ const {
140
+ points,
141
+ xDomain,
142
+ yDomain,
143
+ xSplit,
144
+ ySplit,
145
+ quadrants,
146
+ xLabel,
147
+ yLabel,
148
+ axisLabels,
149
+ showTicks,
150
+ reverseX,
151
+ showLabels,
152
+ pointSize,
153
+ name,
154
+ draggable,
155
+ onPointClick,
156
+ onPointDrop,
157
+ onQuadrantClick,
158
+ renderTooltip,
159
+ quadrantContent,
160
+ } = props;
161
+ const base = useEngineOptions(props, NO_SERIES);
162
+ const dragPoints = draggable ?? !!onPointDrop;
163
+ const options = useMemo(
164
+ () =>
165
+ quadrantChartOptions(
166
+ {
167
+ points,
168
+ xDomain,
169
+ yDomain,
170
+ xSplit,
171
+ ySplit,
172
+ quadrants,
173
+ xLabel,
174
+ yLabel,
175
+ axisLabels,
176
+ showTicks,
177
+ reverseX,
178
+ showLabels,
179
+ pointSize,
180
+ name,
181
+ draggable: dragPoints,
182
+ },
183
+ base,
184
+ ),
185
+ [
186
+ points,
187
+ xDomain,
188
+ yDomain,
189
+ xSplit,
190
+ ySplit,
191
+ quadrants,
192
+ xLabel,
193
+ yLabel,
194
+ axisLabels,
195
+ showTicks,
196
+ reverseX,
197
+ showLabels,
198
+ pointSize,
199
+ name,
200
+ dragPoints,
201
+ base,
202
+ ],
203
+ );
204
+ const geometry = { xDomain, yDomain, xSplit, ySplit, reverseX };
205
+
206
+ const overlay = quadrantContent
207
+ ? (plot: ChartRect) => {
208
+ const [x0, x1] = xDomain ?? [0, 10];
209
+ const [y0, y1] = yDomain ?? [0, 10];
210
+ const xs = xSplit ?? (x0 + x1) / 2;
211
+ const ys = ySplit ?? (y0 + y1) / 2;
212
+ const fx = (xs - x0) / (x1 - x0 || 1);
213
+ const fy = (ys - y0) / (y1 - y0 || 1);
214
+ // split point relative to the plot area
215
+ const sx = plot.width * (reverseX ? 1 - fx : fx);
216
+ const sy = plot.height * (1 - fy);
217
+ return CORNERS.map((corner) => {
218
+ const content = quadrantContent[corner];
219
+ if (content === undefined || content === null || content === false)
220
+ return null;
221
+ const left = corner.endsWith("Left");
222
+ const top = corner.startsWith("top");
223
+ return (
224
+ <View
225
+ key={corner}
226
+ pointerEvents="box-none"
227
+ style={{
228
+ position: "absolute",
229
+ left: left ? 0 : sx,
230
+ top: top ? 0 : sy,
231
+ width: left ? sx : plot.width - sx,
232
+ height: top ? sy : plot.height - sy,
233
+ }}
234
+ {...part("chart", "quadrant", { corner })}
235
+ >
236
+ {content}
237
+ </View>
238
+ );
239
+ });
240
+ }
241
+ : undefined;
242
+
243
+ return (
244
+ <ChartBase
245
+ options={options}
246
+ {...frameProps({
247
+ ...props,
248
+ onPointClick: undefined,
249
+ renderTooltip: undefined,
250
+ })}
251
+ overlay={overlay}
252
+ onPointClick={
253
+ onPointClick
254
+ ? (event: ChartHoverEvent) => {
255
+ const index = event.items[0]?.index;
256
+ if (index !== undefined && points[index])
257
+ onPointClick(points[index], index);
258
+ }
259
+ : undefined
260
+ }
261
+ onPlotClick={
262
+ onQuadrantClick
263
+ ? (at) => onQuadrantClick(quadrantOf(geometry, at.x, at.y), at)
264
+ : undefined
265
+ }
266
+ onDrop={
267
+ onPointDrop
268
+ ? (event) => {
269
+ const index = event.item.index;
270
+ if (!points[index]) return;
271
+ onPointDrop(points[index], index, {
272
+ x: event.x,
273
+ y: event.y,
274
+ quadrant: quadrantOf(geometry, event.x, event.y),
275
+ });
276
+ }
277
+ : undefined
278
+ }
279
+ renderTooltip={
280
+ renderTooltip
281
+ ? (event) => {
282
+ const index = event.items[0]?.index;
283
+ return index !== undefined && points[index]
284
+ ? renderTooltip(points[index], index)
285
+ : null;
286
+ }
287
+ : undefined
288
+ }
289
+ />
290
+ );
291
+ }
@@ -0,0 +1,8 @@
1
+ export {
2
+ BarChart,
3
+ Chart,
4
+ LineChart,
5
+ QuadrantChart,
6
+ ScatterChart,
7
+ } from "./charts";
8
+ export type * from "./types";
@@ -0,0 +1,50 @@
1
+ // React Native has no synchronous text measurement: the chart engine lays
2
+ // its labels out (legend, ticks, tooltip, label collisions) with an estimate
3
+ // of the advance of each character in the platform sans fonts (San
4
+ // Francisco, Roboto, PingFang / Noto CJK).
5
+
6
+ const FONT = /^\s*(?:(\d{3}|bold|normal)\s+)?([\d.]+)px/;
7
+
8
+ /** Wide characters: CJK, Hangul, kana, fullwidth forms, emoji */
9
+ const isWide = (code: number) =>
10
+ (code >= 0x1100 && code <= 0x115f) ||
11
+ (code >= 0x2e80 && code <= 0xa4cf) ||
12
+ (code >= 0xac00 && code <= 0xd7a3) ||
13
+ (code >= 0xf900 && code <= 0xfaff) ||
14
+ (code >= 0xfe30 && code <= 0xfe4f) ||
15
+ (code >= 0xff00 && code <= 0xff60) ||
16
+ (code >= 0xffe0 && code <= 0xffe6) ||
17
+ code >= 0x1f000;
18
+
19
+ const NARROW = new Set(" il.,:;'|!Ijtfr()[]`");
20
+ const WIDE_LATIN = new Set("MWmw@%");
21
+
22
+ /** Advance of a character, in multiples of the font size */
23
+ const advance = (ch: string): number => {
24
+ const code = ch.codePointAt(0) ?? 0;
25
+ if (isWide(code)) return 1;
26
+ if (NARROW.has(ch)) return 0.3;
27
+ if (WIDE_LATIN.has(ch)) return 0.82;
28
+ if (ch >= "0" && ch <= "9") return 0.56;
29
+ if (ch >= "A" && ch <= "Z") return 0.66;
30
+ return 0.55;
31
+ };
32
+
33
+ /**
34
+ * Estimated width in pixels of `text` drawn with a CSS `font`
35
+ * (`"600 12px system-ui"`): the `measureText` of the chart controller
36
+ */
37
+ export function measureChartText(text: string, font: string): number {
38
+ const match = FONT.exec(font);
39
+ const weightText = match?.[1];
40
+ const weight =
41
+ weightText === "bold"
42
+ ? 700
43
+ : weightText && weightText !== "normal"
44
+ ? +weightText
45
+ : 400;
46
+ const size = match ? Number(match[2]) : 11;
47
+ let units = 0;
48
+ for (const ch of text) units += advance(ch);
49
+ return units * size * (weight >= 600 ? 1.07 : weight >= 500 ? 1.03 : 1);
50
+ }