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.
Files changed (103) hide show
  1. package/AGENTS.md +25 -3
  2. package/README.md +9 -8
  3. package/lib/commonjs/atoms/Gradient.js +111 -0
  4. package/lib/commonjs/atoms/Gradient.js.map +1 -0
  5. package/lib/commonjs/atoms/ShinyText.js +188 -0
  6. package/lib/commonjs/atoms/ShinyText.js.map +1 -0
  7. package/lib/commonjs/atoms/index.js +14 -0
  8. package/lib/commonjs/atoms/index.js.map +1 -1
  9. package/lib/commonjs/organisms/Chart.js +947 -0
  10. package/lib/commonjs/organisms/Chart.js.map +1 -0
  11. package/lib/commonjs/organisms/OptionWheel.js +408 -0
  12. package/lib/commonjs/organisms/OptionWheel.js.map +1 -0
  13. package/lib/commonjs/organisms/Slides.js +406 -0
  14. package/lib/commonjs/organisms/Slides.js.map +1 -0
  15. package/lib/commonjs/organisms/Timeline.js +420 -0
  16. package/lib/commonjs/organisms/Timeline.js.map +1 -0
  17. package/lib/commonjs/organisms/chart/frame.js +373 -0
  18. package/lib/commonjs/organisms/chart/frame.js.map +1 -0
  19. package/lib/commonjs/organisms/chart/marks.js +316 -0
  20. package/lib/commonjs/organisms/chart/marks.js.map +1 -0
  21. package/lib/commonjs/organisms/chart/math.js +468 -0
  22. package/lib/commonjs/organisms/chart/math.js.map +1 -0
  23. package/lib/commonjs/organisms/chart/palette.js +120 -0
  24. package/lib/commonjs/organisms/chart/palette.js.map +1 -0
  25. package/lib/commonjs/organisms/index.js +28 -0
  26. package/lib/commonjs/organisms/index.js.map +1 -1
  27. package/lib/commonjs/organisms/useSlides.js +186 -0
  28. package/lib/commonjs/organisms/useSlides.js.map +1 -0
  29. package/lib/module/atoms/Gradient.js +106 -0
  30. package/lib/module/atoms/Gradient.js.map +1 -0
  31. package/lib/module/atoms/ShinyText.js +183 -0
  32. package/lib/module/atoms/ShinyText.js.map +1 -0
  33. package/lib/module/atoms/index.js +2 -0
  34. package/lib/module/atoms/index.js.map +1 -1
  35. package/lib/module/organisms/Chart.js +942 -0
  36. package/lib/module/organisms/Chart.js.map +1 -0
  37. package/lib/module/organisms/OptionWheel.js +403 -0
  38. package/lib/module/organisms/OptionWheel.js.map +1 -0
  39. package/lib/module/organisms/Slides.js +401 -0
  40. package/lib/module/organisms/Slides.js.map +1 -0
  41. package/lib/module/organisms/Timeline.js +415 -0
  42. package/lib/module/organisms/Timeline.js.map +1 -0
  43. package/lib/module/organisms/chart/frame.js +367 -0
  44. package/lib/module/organisms/chart/frame.js.map +1 -0
  45. package/lib/module/organisms/chart/marks.js +310 -0
  46. package/lib/module/organisms/chart/marks.js.map +1 -0
  47. package/lib/module/organisms/chart/math.js +445 -0
  48. package/lib/module/organisms/chart/math.js.map +1 -0
  49. package/lib/module/organisms/chart/palette.js +114 -0
  50. package/lib/module/organisms/chart/palette.js.map +1 -0
  51. package/lib/module/organisms/index.js +4 -0
  52. package/lib/module/organisms/index.js.map +1 -1
  53. package/lib/module/organisms/useSlides.js +182 -0
  54. package/lib/module/organisms/useSlides.js.map +1 -0
  55. package/lib/typescript/atoms/Gradient.d.ts +37 -0
  56. package/lib/typescript/atoms/Gradient.d.ts.map +1 -0
  57. package/lib/typescript/atoms/ShinyText.d.ts +48 -0
  58. package/lib/typescript/atoms/ShinyText.d.ts.map +1 -0
  59. package/lib/typescript/atoms/index.d.ts +4 -0
  60. package/lib/typescript/atoms/index.d.ts.map +1 -1
  61. package/lib/typescript/organisms/Chart.d.ts +208 -0
  62. package/lib/typescript/organisms/Chart.d.ts.map +1 -0
  63. package/lib/typescript/organisms/OptionWheel.d.ts +78 -0
  64. package/lib/typescript/organisms/OptionWheel.d.ts.map +1 -0
  65. package/lib/typescript/organisms/Slides.d.ts +69 -0
  66. package/lib/typescript/organisms/Slides.d.ts.map +1 -0
  67. package/lib/typescript/organisms/Timeline.d.ts +61 -0
  68. package/lib/typescript/organisms/Timeline.d.ts.map +1 -0
  69. package/lib/typescript/organisms/chart/frame.d.ts +85 -0
  70. package/lib/typescript/organisms/chart/frame.d.ts.map +1 -0
  71. package/lib/typescript/organisms/chart/marks.d.ts +88 -0
  72. package/lib/typescript/organisms/chart/marks.d.ts.map +1 -0
  73. package/lib/typescript/organisms/chart/math.d.ts +161 -0
  74. package/lib/typescript/organisms/chart/math.d.ts.map +1 -0
  75. package/lib/typescript/organisms/chart/palette.d.ts +6 -0
  76. package/lib/typescript/organisms/chart/palette.d.ts.map +1 -0
  77. package/lib/typescript/organisms/index.d.ts +8 -0
  78. package/lib/typescript/organisms/index.d.ts.map +1 -1
  79. package/lib/typescript/organisms/useSlides.d.ts +52 -0
  80. package/lib/typescript/organisms/useSlides.d.ts.map +1 -0
  81. package/llms.txt +6 -5
  82. package/package.json +33 -2
  83. package/registry/chart.json +35 -0
  84. package/registry/gradient.json +18 -0
  85. package/registry/index.json +79 -0
  86. package/registry/manifest.json +42 -0
  87. package/registry/option-wheel.json +19 -0
  88. package/registry/shiny-text.json +19 -0
  89. package/registry/slides.json +24 -0
  90. package/registry/timeline.json +20 -0
  91. package/src/atoms/Gradient.tsx +99 -0
  92. package/src/atoms/ShinyText.tsx +226 -0
  93. package/src/atoms/index.ts +4 -0
  94. package/src/organisms/Chart.tsx +1223 -0
  95. package/src/organisms/OptionWheel.tsx +476 -0
  96. package/src/organisms/Slides.tsx +413 -0
  97. package/src/organisms/Timeline.tsx +467 -0
  98. package/src/organisms/chart/frame.tsx +349 -0
  99. package/src/organisms/chart/marks.tsx +295 -0
  100. package/src/organisms/chart/math.ts +475 -0
  101. package/src/organisms/chart/palette.ts +112 -0
  102. package/src/organisms/index.ts +22 -0
  103. 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