orn-ui 0.2.7 → 0.2.9
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.
- package/AGENTS.md +25 -3
- package/README.md +9 -8
- package/lib/commonjs/atoms/Gradient.js +111 -0
- package/lib/commonjs/atoms/Gradient.js.map +1 -0
- package/lib/commonjs/atoms/ShinyText.js +188 -0
- package/lib/commonjs/atoms/ShinyText.js.map +1 -0
- package/lib/commonjs/atoms/index.js +14 -0
- package/lib/commonjs/atoms/index.js.map +1 -1
- package/lib/commonjs/organisms/Chart.js +947 -0
- package/lib/commonjs/organisms/Chart.js.map +1 -0
- package/lib/commonjs/organisms/OptionWheel.js +408 -0
- package/lib/commonjs/organisms/OptionWheel.js.map +1 -0
- package/lib/commonjs/organisms/Slides.js +406 -0
- package/lib/commonjs/organisms/Slides.js.map +1 -0
- package/lib/commonjs/organisms/Timeline.js +420 -0
- package/lib/commonjs/organisms/Timeline.js.map +1 -0
- package/lib/commonjs/organisms/chart/frame.js +373 -0
- package/lib/commonjs/organisms/chart/frame.js.map +1 -0
- package/lib/commonjs/organisms/chart/marks.js +316 -0
- package/lib/commonjs/organisms/chart/marks.js.map +1 -0
- package/lib/commonjs/organisms/chart/math.js +468 -0
- package/lib/commonjs/organisms/chart/math.js.map +1 -0
- package/lib/commonjs/organisms/chart/palette.js +120 -0
- package/lib/commonjs/organisms/chart/palette.js.map +1 -0
- package/lib/commonjs/organisms/index.js +28 -0
- package/lib/commonjs/organisms/index.js.map +1 -1
- package/lib/commonjs/organisms/useSlides.js +186 -0
- package/lib/commonjs/organisms/useSlides.js.map +1 -0
- package/lib/module/atoms/Gradient.js +106 -0
- package/lib/module/atoms/Gradient.js.map +1 -0
- package/lib/module/atoms/ShinyText.js +183 -0
- package/lib/module/atoms/ShinyText.js.map +1 -0
- package/lib/module/atoms/index.js +2 -0
- package/lib/module/atoms/index.js.map +1 -1
- package/lib/module/organisms/Chart.js +942 -0
- package/lib/module/organisms/Chart.js.map +1 -0
- package/lib/module/organisms/OptionWheel.js +403 -0
- package/lib/module/organisms/OptionWheel.js.map +1 -0
- package/lib/module/organisms/Slides.js +401 -0
- package/lib/module/organisms/Slides.js.map +1 -0
- package/lib/module/organisms/Timeline.js +415 -0
- package/lib/module/organisms/Timeline.js.map +1 -0
- package/lib/module/organisms/chart/frame.js +367 -0
- package/lib/module/organisms/chart/frame.js.map +1 -0
- package/lib/module/organisms/chart/marks.js +310 -0
- package/lib/module/organisms/chart/marks.js.map +1 -0
- package/lib/module/organisms/chart/math.js +445 -0
- package/lib/module/organisms/chart/math.js.map +1 -0
- package/lib/module/organisms/chart/palette.js +114 -0
- package/lib/module/organisms/chart/palette.js.map +1 -0
- package/lib/module/organisms/index.js +4 -0
- package/lib/module/organisms/index.js.map +1 -1
- package/lib/module/organisms/useSlides.js +182 -0
- package/lib/module/organisms/useSlides.js.map +1 -0
- package/lib/typescript/atoms/Gradient.d.ts +37 -0
- package/lib/typescript/atoms/Gradient.d.ts.map +1 -0
- package/lib/typescript/atoms/ShinyText.d.ts +48 -0
- package/lib/typescript/atoms/ShinyText.d.ts.map +1 -0
- package/lib/typescript/atoms/index.d.ts +4 -0
- package/lib/typescript/atoms/index.d.ts.map +1 -1
- package/lib/typescript/organisms/Chart.d.ts +208 -0
- package/lib/typescript/organisms/Chart.d.ts.map +1 -0
- package/lib/typescript/organisms/OptionWheel.d.ts +78 -0
- package/lib/typescript/organisms/OptionWheel.d.ts.map +1 -0
- package/lib/typescript/organisms/Slides.d.ts +69 -0
- package/lib/typescript/organisms/Slides.d.ts.map +1 -0
- package/lib/typescript/organisms/Timeline.d.ts +61 -0
- package/lib/typescript/organisms/Timeline.d.ts.map +1 -0
- package/lib/typescript/organisms/chart/frame.d.ts +85 -0
- package/lib/typescript/organisms/chart/frame.d.ts.map +1 -0
- package/lib/typescript/organisms/chart/marks.d.ts +88 -0
- package/lib/typescript/organisms/chart/marks.d.ts.map +1 -0
- package/lib/typescript/organisms/chart/math.d.ts +161 -0
- package/lib/typescript/organisms/chart/math.d.ts.map +1 -0
- package/lib/typescript/organisms/chart/palette.d.ts +6 -0
- package/lib/typescript/organisms/chart/palette.d.ts.map +1 -0
- package/lib/typescript/organisms/index.d.ts +8 -0
- package/lib/typescript/organisms/index.d.ts.map +1 -1
- package/lib/typescript/organisms/useSlides.d.ts +52 -0
- package/lib/typescript/organisms/useSlides.d.ts.map +1 -0
- package/llms.txt +6 -5
- package/package.json +33 -2
- package/registry/chart.json +35 -0
- package/registry/gradient.json +18 -0
- package/registry/index.json +79 -0
- package/registry/manifest.json +42 -0
- package/registry/option-wheel.json +19 -0
- package/registry/shiny-text.json +19 -0
- package/registry/slides.json +24 -0
- package/registry/timeline.json +20 -0
- package/src/atoms/Gradient.tsx +99 -0
- package/src/atoms/ShinyText.tsx +226 -0
- package/src/atoms/index.ts +4 -0
- package/src/organisms/Chart.tsx +1223 -0
- package/src/organisms/OptionWheel.tsx +476 -0
- package/src/organisms/Slides.tsx +413 -0
- package/src/organisms/Timeline.tsx +467 -0
- package/src/organisms/chart/frame.tsx +349 -0
- package/src/organisms/chart/marks.tsx +295 -0
- package/src/organisms/chart/math.ts +475 -0
- package/src/organisms/chart/palette.ts +112 -0
- package/src/organisms/index.ts +22 -0
- package/src/organisms/useSlides.ts +220 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* El marco de Chart: todo lo que rodea a las marcas — grilla, ejes, leyenda y
|
|
5
|
+
* tooltip. Nada de acá conoce el tipo de chart; recibe números y textos ya
|
|
6
|
+
* resueltos.
|
|
7
|
+
*
|
|
8
|
+
* Gestalt: la grilla usa `border`, dos escalones por debajo del color de las
|
|
9
|
+
* series, para que el dato quede como figura y la referencia como fondo. La
|
|
10
|
+
* leyenda repite el color exacto de cada serie (similitud) y por eso puede
|
|
11
|
+
* hacer de control de filtro sin explicar qué apaga: se apaga lo que tiene ese
|
|
12
|
+
* color.
|
|
13
|
+
*/
|
|
14
|
+
import React, { memo } from 'react';
|
|
15
|
+
import { Text, TouchableOpacity, View } from 'react-native';
|
|
16
|
+
import { createStyles } from '../../theme/createStyles';
|
|
17
|
+
import { useAllowFontScaling, useColors } from '../../theme/UIProvider';
|
|
18
|
+
import { polar } from './math';
|
|
19
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
20
|
+
const useStyles = createStyles(theme => ({
|
|
21
|
+
gridLine: {
|
|
22
|
+
position: 'absolute',
|
|
23
|
+
backgroundColor: theme.colors.border
|
|
24
|
+
},
|
|
25
|
+
axisLabel: {
|
|
26
|
+
position: 'absolute',
|
|
27
|
+
fontSize: theme.tokens.fontSize.xs,
|
|
28
|
+
color: theme.colors.textLight
|
|
29
|
+
},
|
|
30
|
+
legend: {
|
|
31
|
+
flexDirection: 'row',
|
|
32
|
+
flexWrap: 'wrap',
|
|
33
|
+
justifyContent: 'center',
|
|
34
|
+
gap: theme.tokens.spacing.sm,
|
|
35
|
+
marginTop: theme.tokens.spacing.sm
|
|
36
|
+
},
|
|
37
|
+
legendItem: {
|
|
38
|
+
flexDirection: 'row',
|
|
39
|
+
alignItems: 'center',
|
|
40
|
+
gap: theme.tokens.spacing.xs,
|
|
41
|
+
paddingVertical: theme.tokens.spacing.xxs,
|
|
42
|
+
paddingHorizontal: theme.tokens.spacing.sm,
|
|
43
|
+
borderRadius: theme.tokens.radius.full,
|
|
44
|
+
backgroundColor: theme.colors.inputBackground
|
|
45
|
+
},
|
|
46
|
+
legendItemOff: {
|
|
47
|
+
backgroundColor: 'transparent',
|
|
48
|
+
borderWidth: 1,
|
|
49
|
+
borderColor: theme.colors.border
|
|
50
|
+
},
|
|
51
|
+
swatch: {
|
|
52
|
+
width: 10,
|
|
53
|
+
height: 10,
|
|
54
|
+
borderRadius: theme.tokens.radius.xs
|
|
55
|
+
},
|
|
56
|
+
legendLabel: {
|
|
57
|
+
fontSize: theme.tokens.fontSize.xs,
|
|
58
|
+
color: theme.colors.text
|
|
59
|
+
},
|
|
60
|
+
legendLabelOff: {
|
|
61
|
+
color: theme.colors.textLight
|
|
62
|
+
},
|
|
63
|
+
tooltip: {
|
|
64
|
+
position: 'absolute',
|
|
65
|
+
paddingVertical: theme.tokens.spacing.sm,
|
|
66
|
+
paddingHorizontal: theme.tokens.spacing.md,
|
|
67
|
+
borderRadius: theme.tokens.radius.md,
|
|
68
|
+
backgroundColor: theme.colors.surface,
|
|
69
|
+
borderWidth: 1,
|
|
70
|
+
borderColor: theme.colors.border,
|
|
71
|
+
gap: theme.tokens.spacing.xxs,
|
|
72
|
+
...theme.tokens.shadow.md
|
|
73
|
+
},
|
|
74
|
+
tooltipTitle: {
|
|
75
|
+
fontSize: theme.tokens.fontSize.xs,
|
|
76
|
+
fontWeight: theme.tokens.fontWeight.semibold,
|
|
77
|
+
color: theme.colors.text
|
|
78
|
+
},
|
|
79
|
+
tooltipRow: {
|
|
80
|
+
flexDirection: 'row',
|
|
81
|
+
alignItems: 'center',
|
|
82
|
+
gap: theme.tokens.spacing.xs
|
|
83
|
+
},
|
|
84
|
+
tooltipLabel: {
|
|
85
|
+
fontSize: theme.tokens.fontSize.xs,
|
|
86
|
+
color: theme.colors.textLight
|
|
87
|
+
},
|
|
88
|
+
tooltipValue: {
|
|
89
|
+
fontSize: theme.tokens.fontSize.xs,
|
|
90
|
+
fontWeight: theme.tokens.fontWeight.semibold,
|
|
91
|
+
color: theme.colors.text,
|
|
92
|
+
marginLeft: 'auto'
|
|
93
|
+
}
|
|
94
|
+
}));
|
|
95
|
+
|
|
96
|
+
// ── grilla y ejes cartesianos ──────────────────────────────────────────────
|
|
97
|
+
|
|
98
|
+
export const CartesianGrid = /*#__PURE__*/memo(({
|
|
99
|
+
width,
|
|
100
|
+
height,
|
|
101
|
+
lines,
|
|
102
|
+
orientation,
|
|
103
|
+
zeroIndex,
|
|
104
|
+
testID
|
|
105
|
+
}) => {
|
|
106
|
+
const styles = useStyles();
|
|
107
|
+
const colors = useColors();
|
|
108
|
+
return /*#__PURE__*/_jsx(View, {
|
|
109
|
+
testID: testID,
|
|
110
|
+
pointerEvents: "none",
|
|
111
|
+
style: {
|
|
112
|
+
position: 'absolute',
|
|
113
|
+
left: 0,
|
|
114
|
+
top: 0,
|
|
115
|
+
width,
|
|
116
|
+
height
|
|
117
|
+
},
|
|
118
|
+
children: lines.map((position, index) => {
|
|
119
|
+
const isZero = index === zeroIndex;
|
|
120
|
+
return /*#__PURE__*/_jsx(View, {
|
|
121
|
+
style: [styles.gridLine, orientation === 'horizontal' ? {
|
|
122
|
+
left: 0,
|
|
123
|
+
width,
|
|
124
|
+
top: position,
|
|
125
|
+
height: 1
|
|
126
|
+
} : {
|
|
127
|
+
top: 0,
|
|
128
|
+
height,
|
|
129
|
+
left: position,
|
|
130
|
+
width: 1
|
|
131
|
+
},
|
|
132
|
+
// La línea del cero es una referencia distinta de las demás: no
|
|
133
|
+
// divide el espacio, separa lo que suma de lo que resta.
|
|
134
|
+
isZero && {
|
|
135
|
+
backgroundColor: colors.textLight
|
|
136
|
+
}]
|
|
137
|
+
}, index);
|
|
138
|
+
})
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
CartesianGrid.displayName = 'CartesianGrid';
|
|
142
|
+
const LABEL_HEIGHT = 14;
|
|
143
|
+
export const AxisLabels = /*#__PURE__*/memo(({
|
|
144
|
+
labels,
|
|
145
|
+
axis,
|
|
146
|
+
gutter,
|
|
147
|
+
span,
|
|
148
|
+
testID
|
|
149
|
+
}) => {
|
|
150
|
+
const styles = useStyles();
|
|
151
|
+
const allowFontScaling = useAllowFontScaling();
|
|
152
|
+
// Una etiqueta de x se centra bajo su categoría y puede pisar a la vecina;
|
|
153
|
+
// se le da como ancho el reparto parejo del plot y se trunca a una línea.
|
|
154
|
+
const slot = axis === 'x' ? Math.max(24, span / Math.max(1, labels.length)) : gutter;
|
|
155
|
+
return /*#__PURE__*/_jsx(View, {
|
|
156
|
+
testID: testID,
|
|
157
|
+
pointerEvents: "none",
|
|
158
|
+
style: {
|
|
159
|
+
position: 'absolute',
|
|
160
|
+
left: 0,
|
|
161
|
+
top: 0,
|
|
162
|
+
right: 0,
|
|
163
|
+
bottom: 0
|
|
164
|
+
},
|
|
165
|
+
children: labels.map((label, index) => /*#__PURE__*/_jsx(Text, {
|
|
166
|
+
numberOfLines: 1,
|
|
167
|
+
allowFontScaling: allowFontScaling,
|
|
168
|
+
style: [styles.axisLabel, axis === 'x' ? {
|
|
169
|
+
left: label.position - slot / 2,
|
|
170
|
+
width: slot,
|
|
171
|
+
top: 0,
|
|
172
|
+
textAlign: 'center'
|
|
173
|
+
} : {
|
|
174
|
+
left: 0,
|
|
175
|
+
width: gutter,
|
|
176
|
+
top: label.position - LABEL_HEIGHT / 2,
|
|
177
|
+
height: LABEL_HEIGHT,
|
|
178
|
+
textAlign: 'right'
|
|
179
|
+
}],
|
|
180
|
+
children: label.text
|
|
181
|
+
}, `${label.text}-${index}`))
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
AxisLabels.displayName = 'AxisLabels';
|
|
185
|
+
|
|
186
|
+
// ── grilla del radar ───────────────────────────────────────────────────────
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Anillos y radios del radar. Los anillos son polígonos, no círculos: un
|
|
190
|
+
* círculo sugiere que entre eje y eje hay valores, y no los hay — sólo hay
|
|
191
|
+
* los ejes que se pasaron.
|
|
192
|
+
*/
|
|
193
|
+
export const RadarGrid = /*#__PURE__*/memo(({
|
|
194
|
+
center,
|
|
195
|
+
radius,
|
|
196
|
+
angles,
|
|
197
|
+
levels,
|
|
198
|
+
testID
|
|
199
|
+
}) => {
|
|
200
|
+
const colors = useColors();
|
|
201
|
+
if (angles.length < 3 || radius <= 0) return null;
|
|
202
|
+
const rings = Array.from({
|
|
203
|
+
length: levels
|
|
204
|
+
}, (_, index) => radius * (index + 1) / levels);
|
|
205
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
206
|
+
testID: testID,
|
|
207
|
+
pointerEvents: "none",
|
|
208
|
+
style: {
|
|
209
|
+
position: 'absolute',
|
|
210
|
+
left: 0,
|
|
211
|
+
top: 0,
|
|
212
|
+
right: 0,
|
|
213
|
+
bottom: 0
|
|
214
|
+
},
|
|
215
|
+
children: [rings.map((ringRadius, ringIndex) => {
|
|
216
|
+
const points = angles.map(angle => polar(center, ringRadius, angle));
|
|
217
|
+
return points.map((point, index) => {
|
|
218
|
+
const next = points[(index + 1) % points.length];
|
|
219
|
+
const dx = next.x - point.x;
|
|
220
|
+
const dy = next.y - point.y;
|
|
221
|
+
const length = Math.hypot(dx, dy);
|
|
222
|
+
return /*#__PURE__*/_jsx(View, {
|
|
223
|
+
style: {
|
|
224
|
+
position: 'absolute',
|
|
225
|
+
left: (point.x + next.x) / 2 - length / 2,
|
|
226
|
+
top: (point.y + next.y) / 2 - 0.5,
|
|
227
|
+
width: length,
|
|
228
|
+
height: 1,
|
|
229
|
+
backgroundColor: colors.border,
|
|
230
|
+
transform: [{
|
|
231
|
+
rotate: `${Math.atan2(dy, dx) * 180 / Math.PI}deg`
|
|
232
|
+
}]
|
|
233
|
+
}
|
|
234
|
+
}, `ring-${ringIndex}-${index}`);
|
|
235
|
+
});
|
|
236
|
+
}), angles.map((angle, index) => {
|
|
237
|
+
const tip = polar(center, radius, angle);
|
|
238
|
+
const dx = tip.x - center.x;
|
|
239
|
+
const dy = tip.y - center.y;
|
|
240
|
+
return /*#__PURE__*/_jsx(View, {
|
|
241
|
+
style: {
|
|
242
|
+
position: 'absolute',
|
|
243
|
+
left: (center.x + tip.x) / 2 - radius / 2,
|
|
244
|
+
top: (center.y + tip.y) / 2 - 0.5,
|
|
245
|
+
width: radius,
|
|
246
|
+
height: 1,
|
|
247
|
+
backgroundColor: colors.border,
|
|
248
|
+
transform: [{
|
|
249
|
+
rotate: `${Math.atan2(dy, dx) * 180 / Math.PI}deg`
|
|
250
|
+
}]
|
|
251
|
+
}
|
|
252
|
+
}, `spoke-${index}`);
|
|
253
|
+
})]
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
RadarGrid.displayName = 'RadarGrid';
|
|
257
|
+
|
|
258
|
+
// ── leyenda ────────────────────────────────────────────────────────────────
|
|
259
|
+
|
|
260
|
+
export const Legend = /*#__PURE__*/memo(({
|
|
261
|
+
items,
|
|
262
|
+
hidden,
|
|
263
|
+
onToggle,
|
|
264
|
+
testID
|
|
265
|
+
}) => {
|
|
266
|
+
const styles = useStyles();
|
|
267
|
+
const colors = useColors();
|
|
268
|
+
const allowFontScaling = useAllowFontScaling();
|
|
269
|
+
return /*#__PURE__*/_jsx(View, {
|
|
270
|
+
style: styles.legend,
|
|
271
|
+
testID: testID,
|
|
272
|
+
children: items.map(item => {
|
|
273
|
+
const off = hidden.includes(item.key);
|
|
274
|
+
const content = /*#__PURE__*/_jsxs(_Fragment, {
|
|
275
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
276
|
+
style: [styles.swatch, {
|
|
277
|
+
backgroundColor: off ? colors.border : item.color
|
|
278
|
+
}]
|
|
279
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
280
|
+
allowFontScaling: allowFontScaling,
|
|
281
|
+
style: [styles.legendLabel, off && styles.legendLabelOff],
|
|
282
|
+
children: item.label
|
|
283
|
+
})]
|
|
284
|
+
});
|
|
285
|
+
if (!onToggle) {
|
|
286
|
+
return /*#__PURE__*/_jsx(View, {
|
|
287
|
+
style: styles.legendItem,
|
|
288
|
+
testID: testID && `${testID}-${item.key}`,
|
|
289
|
+
children: content
|
|
290
|
+
}, item.key);
|
|
291
|
+
}
|
|
292
|
+
return /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
293
|
+
style: [styles.legendItem, off && styles.legendItemOff],
|
|
294
|
+
onPress: () => onToggle(item.key),
|
|
295
|
+
accessibilityRole: "switch",
|
|
296
|
+
accessibilityState: {
|
|
297
|
+
checked: !off
|
|
298
|
+
},
|
|
299
|
+
accessibilityLabel: item.label,
|
|
300
|
+
testID: testID && `${testID}-${item.key}`,
|
|
301
|
+
children: content
|
|
302
|
+
}, item.key);
|
|
303
|
+
})
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
Legend.displayName = 'Legend';
|
|
307
|
+
|
|
308
|
+
// ── tooltip ────────────────────────────────────────────────────────────────
|
|
309
|
+
|
|
310
|
+
const TOOLTIP_WIDTH = 148;
|
|
311
|
+
const TOOLTIP_GAP = 10;
|
|
312
|
+
/** Alto estimado del globo: el real no se sabe hasta después de medirlo, y
|
|
313
|
+
* medirlo para decidir dónde ponerlo lo haría aparecer corrido un frame. */
|
|
314
|
+
const TOOLTIP_TITLE = 22;
|
|
315
|
+
const TOOLTIP_ROW = 17;
|
|
316
|
+
export const Tooltip = /*#__PURE__*/memo(({
|
|
317
|
+
title,
|
|
318
|
+
rows,
|
|
319
|
+
anchor,
|
|
320
|
+
containerWidth,
|
|
321
|
+
style,
|
|
322
|
+
testID
|
|
323
|
+
}) => {
|
|
324
|
+
const styles = useStyles();
|
|
325
|
+
const allowFontScaling = useAllowFontScaling();
|
|
326
|
+
// Clamp en vez de flip: moverlo al otro lado del dedo hace que salte de lado
|
|
327
|
+
// mientras se arrastra, y el salto se lee como un error.
|
|
328
|
+
const left = Math.max(0, Math.min(containerWidth - TOOLTIP_WIDTH, anchor.x - TOOLTIP_WIDTH / 2));
|
|
329
|
+
// Va arriba del punto, salvo que no haya lugar: ahí baja, porque taparse
|
|
330
|
+
// contra el borde superior lo deja ilegible.
|
|
331
|
+
const estimated = TOOLTIP_TITLE + rows.length * TOOLTIP_ROW;
|
|
332
|
+
const above = anchor.y - TOOLTIP_GAP - estimated;
|
|
333
|
+
const top = above >= 0 ? above : anchor.y + TOOLTIP_GAP;
|
|
334
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
335
|
+
testID: testID,
|
|
336
|
+
pointerEvents: "none",
|
|
337
|
+
accessibilityRole: "alert",
|
|
338
|
+
style: [styles.tooltip, {
|
|
339
|
+
left,
|
|
340
|
+
width: TOOLTIP_WIDTH,
|
|
341
|
+
top
|
|
342
|
+
}, style],
|
|
343
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
344
|
+
allowFontScaling: allowFontScaling,
|
|
345
|
+
style: styles.tooltipTitle,
|
|
346
|
+
children: title
|
|
347
|
+
}), rows.map(row => /*#__PURE__*/_jsxs(View, {
|
|
348
|
+
style: styles.tooltipRow,
|
|
349
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
350
|
+
style: [styles.swatch, {
|
|
351
|
+
backgroundColor: row.color
|
|
352
|
+
}]
|
|
353
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
354
|
+
allowFontScaling: allowFontScaling,
|
|
355
|
+
numberOfLines: 1,
|
|
356
|
+
style: styles.tooltipLabel,
|
|
357
|
+
children: row.label
|
|
358
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
359
|
+
allowFontScaling: allowFontScaling,
|
|
360
|
+
style: styles.tooltipValue,
|
|
361
|
+
children: row.value
|
|
362
|
+
})]
|
|
363
|
+
}, row.key))]
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
Tooltip.displayName = 'Tooltip';
|
|
367
|
+
//# sourceMappingURL=frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","memo","Text","TouchableOpacity","View","createStyles","useAllowFontScaling","useColors","polar","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","useStyles","theme","gridLine","position","backgroundColor","colors","border","axisLabel","fontSize","tokens","xs","color","textLight","legend","flexDirection","flexWrap","justifyContent","gap","spacing","sm","marginTop","legendItem","alignItems","paddingVertical","xxs","paddingHorizontal","borderRadius","radius","full","inputBackground","legendItemOff","borderWidth","borderColor","swatch","width","height","legendLabel","text","legendLabelOff","tooltip","md","surface","shadow","tooltipTitle","fontWeight","semibold","tooltipRow","tooltipLabel","tooltipValue","marginLeft","CartesianGrid","lines","orientation","zeroIndex","testID","styles","pointerEvents","style","left","top","children","map","index","isZero","displayName","LABEL_HEIGHT","AxisLabels","labels","axis","gutter","span","allowFontScaling","slot","Math","max","length","right","bottom","label","numberOfLines","textAlign","RadarGrid","center","angles","levels","rings","Array","from","_","ringRadius","ringIndex","points","angle","point","next","dx","x","dy","y","hypot","transform","rotate","atan2","PI","tip","Legend","items","hidden","onToggle","item","off","includes","key","content","onPress","accessibilityRole","accessibilityState","checked","accessibilityLabel","TOOLTIP_WIDTH","TOOLTIP_GAP","TOOLTIP_TITLE","TOOLTIP_ROW","Tooltip","title","rows","anchor","containerWidth","min","estimated","above","row","value"],"sourceRoot":"../../../../src","sources":["organisms/chart/frame.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Las marcas de Chart: lo único que sabe dibujar el componente.
|
|
5
|
+
*
|
|
6
|
+
* React Native no trae un lienzo vectorial y la librería no puede agregar uno
|
|
7
|
+
* (cero dependencias), así que las tres primitivas de acá se componen con
|
|
8
|
+
* `View` y bastan para los seis tipos de chart:
|
|
9
|
+
*
|
|
10
|
+
* | primitiva | la usan |
|
|
11
|
+
* |------------|-----------------------------------------------------|
|
|
12
|
+
* | `Bar` | barras verticales y horizontales, agrupadas o apiladas |
|
|
13
|
+
* | `Polyline` | línea, contorno del radar, grilla del radar, ejes |
|
|
14
|
+
* | `Wedge` | torta, dona y el relleno del radar |
|
|
15
|
+
*
|
|
16
|
+
* Son puras: no escuchan toques ni conocen la escala. Quien toca es la capa de
|
|
17
|
+
* hit-test de Chart.tsx, que cubre columnas enteras en vez de la marca —
|
|
18
|
+
* una línea de 2px no es un blanco táctil.
|
|
19
|
+
*/
|
|
20
|
+
import React, { memo, useEffect, useRef } from 'react';
|
|
21
|
+
import { Animated, Easing, View } from 'react-native';
|
|
22
|
+
import { segmentBox } from './math';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Valor que persigue a `target` en vez de saltar. Un filtro que cambia los
|
|
26
|
+
* datos mueve la barra desde donde estaba, y ese movimiento es lo que dice
|
|
27
|
+
* "es la misma barra con otro número" en lugar de "es otro chart".
|
|
28
|
+
*/
|
|
29
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
30
|
+
export function useAnimatedNumber(target, animate, duration) {
|
|
31
|
+
const value = useRef(new Animated.Value(animate ? 0 : target)).current;
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (!animate) {
|
|
34
|
+
value.setValue(target);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const animation = Animated.timing(value, {
|
|
38
|
+
toValue: target,
|
|
39
|
+
duration,
|
|
40
|
+
easing: Easing.out(Easing.cubic),
|
|
41
|
+
// Geometría, no transform: `height`/`top` son props de layout y el
|
|
42
|
+
// driver nativo no las toca. Es el precio de que la barra pueda crecer
|
|
43
|
+
// desde su base con valores negativos sin recalcular el origen.
|
|
44
|
+
useNativeDriver: false
|
|
45
|
+
});
|
|
46
|
+
animation.start();
|
|
47
|
+
return () => animation.stop();
|
|
48
|
+
}, [target, animate, duration, value]);
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ── barra ──────────────────────────────────────────────────────────────────
|
|
53
|
+
|
|
54
|
+
const DIM_OPACITY = 0.32;
|
|
55
|
+
export const Bar = /*#__PURE__*/memo(({
|
|
56
|
+
x,
|
|
57
|
+
y,
|
|
58
|
+
width,
|
|
59
|
+
height,
|
|
60
|
+
color,
|
|
61
|
+
from,
|
|
62
|
+
radius = 0,
|
|
63
|
+
dim = false,
|
|
64
|
+
animate = true,
|
|
65
|
+
duration = 400,
|
|
66
|
+
testID
|
|
67
|
+
}) => {
|
|
68
|
+
const vertical = from === 'bottom' || from === 'top';
|
|
69
|
+
const grown = useAnimatedNumber(vertical ? height : width, animate, duration);
|
|
70
|
+
|
|
71
|
+
// El extremo que se mueve es el opuesto a la base: una barra que nace
|
|
72
|
+
// abajo mantiene fijo su borde inferior y sube el superior.
|
|
73
|
+
const box = vertical ? {
|
|
74
|
+
left: x,
|
|
75
|
+
width,
|
|
76
|
+
height: grown,
|
|
77
|
+
...(from === 'bottom' ? {
|
|
78
|
+
bottom: y
|
|
79
|
+
} : {
|
|
80
|
+
top: y
|
|
81
|
+
})
|
|
82
|
+
} : {
|
|
83
|
+
top: y,
|
|
84
|
+
height,
|
|
85
|
+
width: grown,
|
|
86
|
+
...(from === 'left' ? {
|
|
87
|
+
left: x
|
|
88
|
+
} : {
|
|
89
|
+
right: x
|
|
90
|
+
})
|
|
91
|
+
};
|
|
92
|
+
const corners = radius <= 0 ? {} : from === 'bottom' ? {
|
|
93
|
+
borderTopLeftRadius: radius,
|
|
94
|
+
borderTopRightRadius: radius
|
|
95
|
+
} : from === 'top' ? {
|
|
96
|
+
borderBottomLeftRadius: radius,
|
|
97
|
+
borderBottomRightRadius: radius
|
|
98
|
+
} : from === 'left' ? {
|
|
99
|
+
borderTopRightRadius: radius,
|
|
100
|
+
borderBottomRightRadius: radius
|
|
101
|
+
} : {
|
|
102
|
+
borderTopLeftRadius: radius,
|
|
103
|
+
borderBottomLeftRadius: radius
|
|
104
|
+
};
|
|
105
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
106
|
+
testID: testID,
|
|
107
|
+
pointerEvents: "none",
|
|
108
|
+
style: [{
|
|
109
|
+
position: 'absolute',
|
|
110
|
+
backgroundColor: color,
|
|
111
|
+
opacity: dim ? DIM_OPACITY : 1
|
|
112
|
+
}, corners, box]
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
Bar.displayName = 'Bar';
|
|
116
|
+
|
|
117
|
+
// ── polilínea ──────────────────────────────────────────────────────────────
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Una línea es un rectángulo fino rotado sobre su centro, uno por tramo. Con
|
|
121
|
+
* `smoothPoints` los tramos son tantos que la poligonal se lee como curva.
|
|
122
|
+
*
|
|
123
|
+
* Los extremos quedan a tope, no redondeados: un `borderRadius` por tramo
|
|
124
|
+
* multiplicaría las vistas y a 2px de grosor nadie ve la diferencia.
|
|
125
|
+
*/
|
|
126
|
+
export const Polyline = /*#__PURE__*/memo(({
|
|
127
|
+
points,
|
|
128
|
+
color,
|
|
129
|
+
thickness = 2,
|
|
130
|
+
closed = false,
|
|
131
|
+
opacity = 1,
|
|
132
|
+
testID
|
|
133
|
+
}) => {
|
|
134
|
+
if (points.length < 2) return null;
|
|
135
|
+
const path = closed ? [...points, points[0]] : points;
|
|
136
|
+
return /*#__PURE__*/_jsx(View, {
|
|
137
|
+
testID: testID,
|
|
138
|
+
pointerEvents: "none",
|
|
139
|
+
style: {
|
|
140
|
+
position: 'absolute',
|
|
141
|
+
left: 0,
|
|
142
|
+
top: 0,
|
|
143
|
+
right: 0,
|
|
144
|
+
bottom: 0,
|
|
145
|
+
opacity
|
|
146
|
+
},
|
|
147
|
+
children: path.slice(0, -1).map((point, index) => {
|
|
148
|
+
const box = segmentBox(point, path[index + 1], thickness);
|
|
149
|
+
return /*#__PURE__*/_jsx(View, {
|
|
150
|
+
style: {
|
|
151
|
+
position: 'absolute',
|
|
152
|
+
left: box.left,
|
|
153
|
+
top: box.top,
|
|
154
|
+
width: box.width,
|
|
155
|
+
height: box.height,
|
|
156
|
+
backgroundColor: color,
|
|
157
|
+
transform: [{
|
|
158
|
+
rotate: `${box.rotate}deg`
|
|
159
|
+
}]
|
|
160
|
+
}
|
|
161
|
+
}, index);
|
|
162
|
+
})
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
Polyline.displayName = 'Polyline';
|
|
166
|
+
export const Dot = /*#__PURE__*/memo(({
|
|
167
|
+
point,
|
|
168
|
+
color,
|
|
169
|
+
size = 7,
|
|
170
|
+
ringColor,
|
|
171
|
+
ringWidth = 2,
|
|
172
|
+
testID
|
|
173
|
+
}) => {
|
|
174
|
+
const outer = size + (ringColor ? ringWidth * 2 : 0);
|
|
175
|
+
return /*#__PURE__*/_jsx(View, {
|
|
176
|
+
testID: testID,
|
|
177
|
+
pointerEvents: "none",
|
|
178
|
+
style: {
|
|
179
|
+
position: 'absolute',
|
|
180
|
+
left: point.x - outer / 2,
|
|
181
|
+
top: point.y - outer / 2,
|
|
182
|
+
width: outer,
|
|
183
|
+
height: outer,
|
|
184
|
+
borderRadius: outer / 2,
|
|
185
|
+
backgroundColor: color,
|
|
186
|
+
borderWidth: ringColor ? ringWidth : 0,
|
|
187
|
+
borderColor: ringColor
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
Dot.displayName = 'Dot';
|
|
192
|
+
|
|
193
|
+
// ── porción ────────────────────────────────────────────────────────────────
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Sector de hasta 180°, sin curvas ni máscaras. Tres cajas:
|
|
197
|
+
*
|
|
198
|
+
* 1. un recorte fijo a la mitad derecha (`overflow: 'hidden'`), que es el
|
|
199
|
+
* sector 0°–180°;
|
|
200
|
+
* 2. adentro, un cuadrado `size` × `size` centrado en el centro del círculo,
|
|
201
|
+
* que es lo que gira — al rotar sobre su propio centro, rota sobre el
|
|
202
|
+
* centro del círculo sin necesidad de `transformOrigin`;
|
|
203
|
+
* 3. adentro del cuadrado, **medio disco**, no un disco entero: un rectángulo
|
|
204
|
+
* de media caja con las dos esquinas de afuera redondeadas al radio.
|
|
205
|
+
*
|
|
206
|
+
* El medio disco es lo que hace que la rotación signifique algo. Con un disco
|
|
207
|
+
* completo el recorte deja siempre la misma media luna —rotar un círculo
|
|
208
|
+
* sólido no lo cambia—, y toda porción, sea de 5° o de 180°, sale igual de
|
|
209
|
+
* ancha: 180°.
|
|
210
|
+
*
|
|
211
|
+
* Girado `sweep - 180`, el medio disco cubre de `sweep - 180` a `sweep`, y lo
|
|
212
|
+
* que sobrevive al recorte es exactamente 0°–`sweep`.
|
|
213
|
+
*/
|
|
214
|
+
const Half = ({
|
|
215
|
+
size,
|
|
216
|
+
sweep,
|
|
217
|
+
color
|
|
218
|
+
}) => /*#__PURE__*/_jsx(View, {
|
|
219
|
+
style: {
|
|
220
|
+
position: 'absolute',
|
|
221
|
+
left: size / 2,
|
|
222
|
+
top: 0,
|
|
223
|
+
width: size / 2,
|
|
224
|
+
height: size,
|
|
225
|
+
overflow: 'hidden'
|
|
226
|
+
},
|
|
227
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
228
|
+
style: {
|
|
229
|
+
position: 'absolute',
|
|
230
|
+
left: -size / 2,
|
|
231
|
+
top: 0,
|
|
232
|
+
width: size,
|
|
233
|
+
height: size,
|
|
234
|
+
transform: [{
|
|
235
|
+
rotate: `${sweep - 180}deg`
|
|
236
|
+
}]
|
|
237
|
+
},
|
|
238
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
239
|
+
style: {
|
|
240
|
+
position: 'absolute',
|
|
241
|
+
left: size / 2,
|
|
242
|
+
top: 0,
|
|
243
|
+
width: size / 2,
|
|
244
|
+
height: size,
|
|
245
|
+
backgroundColor: color,
|
|
246
|
+
borderTopRightRadius: size / 2,
|
|
247
|
+
borderBottomRightRadius: size / 2
|
|
248
|
+
}
|
|
249
|
+
})
|
|
250
|
+
})
|
|
251
|
+
});
|
|
252
|
+
const FULL_CIRCLE = 359.9;
|
|
253
|
+
export const Wedge = /*#__PURE__*/memo(({
|
|
254
|
+
size,
|
|
255
|
+
start,
|
|
256
|
+
sweep,
|
|
257
|
+
color,
|
|
258
|
+
opacity = 1,
|
|
259
|
+
explode = 0,
|
|
260
|
+
center,
|
|
261
|
+
testID
|
|
262
|
+
}) => {
|
|
263
|
+
if (sweep <= 0 || size <= 0) return null;
|
|
264
|
+
// 360° exactos dejan las dos mitades a 180°, y la de arriba tapa a la de
|
|
265
|
+
// abajo por una rendija de antialias. Un pelo menos no se ve y no pasa.
|
|
266
|
+
const total = Math.min(sweep, FULL_CIRCLE);
|
|
267
|
+
const first = Math.min(total, 180);
|
|
268
|
+
const second = total - first;
|
|
269
|
+
const bisector = (start + total / 2) * (Math.PI / 180);
|
|
270
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
271
|
+
testID: testID,
|
|
272
|
+
pointerEvents: "none",
|
|
273
|
+
style: {
|
|
274
|
+
position: 'absolute',
|
|
275
|
+
left: (center?.x ?? size / 2) - size / 2,
|
|
276
|
+
top: (center?.y ?? size / 2) - size / 2,
|
|
277
|
+
width: size,
|
|
278
|
+
height: size,
|
|
279
|
+
opacity,
|
|
280
|
+
transform: [{
|
|
281
|
+
translateX: explode * Math.sin(bisector)
|
|
282
|
+
}, {
|
|
283
|
+
translateY: -explode * Math.cos(bisector)
|
|
284
|
+
}, {
|
|
285
|
+
rotate: `${start}deg`
|
|
286
|
+
}]
|
|
287
|
+
},
|
|
288
|
+
children: [/*#__PURE__*/_jsx(Half, {
|
|
289
|
+
size: size,
|
|
290
|
+
sweep: first,
|
|
291
|
+
color: color
|
|
292
|
+
}), second > 0 ? /*#__PURE__*/_jsx(View, {
|
|
293
|
+
style: {
|
|
294
|
+
position: 'absolute',
|
|
295
|
+
width: size,
|
|
296
|
+
height: size,
|
|
297
|
+
transform: [{
|
|
298
|
+
rotate: '180deg'
|
|
299
|
+
}]
|
|
300
|
+
},
|
|
301
|
+
children: /*#__PURE__*/_jsx(Half, {
|
|
302
|
+
size: size,
|
|
303
|
+
sweep: second,
|
|
304
|
+
color: color
|
|
305
|
+
})
|
|
306
|
+
}) : null]
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
Wedge.displayName = 'Wedge';
|
|
310
|
+
//# sourceMappingURL=marks.js.map
|