orn-ui 0.2.8 → 0.2.10

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 (80) hide show
  1. package/AGENTS.md +6 -2
  2. package/README.md +6 -6
  3. package/lib/commonjs/atoms/ShinyText.js +188 -0
  4. package/lib/commonjs/atoms/ShinyText.js.map +1 -0
  5. package/lib/commonjs/atoms/index.js +7 -0
  6. package/lib/commonjs/atoms/index.js.map +1 -1
  7. package/lib/commonjs/organisms/Chart.js +968 -0
  8. package/lib/commonjs/organisms/Chart.js.map +1 -0
  9. package/lib/commonjs/organisms/OptionWheel.js +408 -0
  10. package/lib/commonjs/organisms/OptionWheel.js.map +1 -0
  11. package/lib/commonjs/organisms/Timeline.js +420 -0
  12. package/lib/commonjs/organisms/Timeline.js.map +1 -0
  13. package/lib/commonjs/organisms/chart/frame.js +373 -0
  14. package/lib/commonjs/organisms/chart/frame.js.map +1 -0
  15. package/lib/commonjs/organisms/chart/marks.js +316 -0
  16. package/lib/commonjs/organisms/chart/marks.js.map +1 -0
  17. package/lib/commonjs/organisms/chart/math.js +468 -0
  18. package/lib/commonjs/organisms/chart/math.js.map +1 -0
  19. package/lib/commonjs/organisms/chart/palette.js +120 -0
  20. package/lib/commonjs/organisms/chart/palette.js.map +1 -0
  21. package/lib/commonjs/organisms/index.js +21 -0
  22. package/lib/commonjs/organisms/index.js.map +1 -1
  23. package/lib/module/atoms/ShinyText.js +183 -0
  24. package/lib/module/atoms/ShinyText.js.map +1 -0
  25. package/lib/module/atoms/index.js +1 -0
  26. package/lib/module/atoms/index.js.map +1 -1
  27. package/lib/module/organisms/Chart.js +963 -0
  28. package/lib/module/organisms/Chart.js.map +1 -0
  29. package/lib/module/organisms/OptionWheel.js +403 -0
  30. package/lib/module/organisms/OptionWheel.js.map +1 -0
  31. package/lib/module/organisms/Timeline.js +415 -0
  32. package/lib/module/organisms/Timeline.js.map +1 -0
  33. package/lib/module/organisms/chart/frame.js +367 -0
  34. package/lib/module/organisms/chart/frame.js.map +1 -0
  35. package/lib/module/organisms/chart/marks.js +310 -0
  36. package/lib/module/organisms/chart/marks.js.map +1 -0
  37. package/lib/module/organisms/chart/math.js +445 -0
  38. package/lib/module/organisms/chart/math.js.map +1 -0
  39. package/lib/module/organisms/chart/palette.js +114 -0
  40. package/lib/module/organisms/chart/palette.js.map +1 -0
  41. package/lib/module/organisms/index.js +3 -0
  42. package/lib/module/organisms/index.js.map +1 -1
  43. package/lib/typescript/atoms/ShinyText.d.ts +48 -0
  44. package/lib/typescript/atoms/ShinyText.d.ts.map +1 -0
  45. package/lib/typescript/atoms/index.d.ts +2 -0
  46. package/lib/typescript/atoms/index.d.ts.map +1 -1
  47. package/lib/typescript/organisms/Chart.d.ts +208 -0
  48. package/lib/typescript/organisms/Chart.d.ts.map +1 -0
  49. package/lib/typescript/organisms/OptionWheel.d.ts +78 -0
  50. package/lib/typescript/organisms/OptionWheel.d.ts.map +1 -0
  51. package/lib/typescript/organisms/Timeline.d.ts +61 -0
  52. package/lib/typescript/organisms/Timeline.d.ts.map +1 -0
  53. package/lib/typescript/organisms/chart/frame.d.ts +85 -0
  54. package/lib/typescript/organisms/chart/frame.d.ts.map +1 -0
  55. package/lib/typescript/organisms/chart/marks.d.ts +88 -0
  56. package/lib/typescript/organisms/chart/marks.d.ts.map +1 -0
  57. package/lib/typescript/organisms/chart/math.d.ts +161 -0
  58. package/lib/typescript/organisms/chart/math.d.ts.map +1 -0
  59. package/lib/typescript/organisms/chart/palette.d.ts +6 -0
  60. package/lib/typescript/organisms/chart/palette.d.ts.map +1 -0
  61. package/lib/typescript/organisms/index.d.ts +6 -0
  62. package/lib/typescript/organisms/index.d.ts.map +1 -1
  63. package/llms.txt +3 -3
  64. package/package.json +23 -2
  65. package/registry/chart.json +35 -0
  66. package/registry/index.json +53 -0
  67. package/registry/manifest.json +28 -0
  68. package/registry/option-wheel.json +19 -0
  69. package/registry/shiny-text.json +19 -0
  70. package/registry/timeline.json +20 -0
  71. package/src/atoms/ShinyText.tsx +226 -0
  72. package/src/atoms/index.ts +2 -0
  73. package/src/organisms/Chart.tsx +1252 -0
  74. package/src/organisms/OptionWheel.tsx +476 -0
  75. package/src/organisms/Timeline.tsx +467 -0
  76. package/src/organisms/chart/frame.tsx +349 -0
  77. package/src/organisms/chart/marks.tsx +295 -0
  78. package/src/organisms/chart/math.ts +475 -0
  79. package/src/organisms/chart/palette.ts +112 -0
  80. package/src/organisms/index.ts +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","memo","useEffect","useRef","Animated","Easing","View","segmentBox","jsx","_jsx","jsxs","_jsxs","useAnimatedNumber","target","animate","duration","value","Value","current","setValue","animation","timing","toValue","easing","out","cubic","useNativeDriver","start","stop","DIM_OPACITY","Bar","x","y","width","height","color","from","radius","dim","testID","vertical","grown","box","left","bottom","top","right","corners","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","pointerEvents","style","position","backgroundColor","opacity","displayName","Polyline","points","thickness","closed","length","path","children","slice","map","point","index","transform","rotate","Dot","size","ringColor","ringWidth","outer","borderRadius","borderWidth","borderColor","Half","sweep","overflow","FULL_CIRCLE","Wedge","explode","center","total","Math","min","first","second","bisector","PI","translateX","sin","translateY","cos"],"sourceRoot":"../../../../src","sources":["organisms/chart/marks.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,445 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Geometría y escalas de Chart: todo lo que se puede probar sin montar un
5
+ * árbol vive acá, sin React y sin dependencias. marks.tsx sólo traduce estos
6
+ * números a estilos, y Chart.tsx sólo decide qué marca dibujar.
7
+ *
8
+ * Convenciones:
9
+ * - Coordenadas de React Native: origen arriba-izquierda, `y` crece hacia abajo.
10
+ * - Ángulos en grados, 0° a las 12 en punto, creciendo en sentido horario —
11
+ * que es como se lee una torta y como gira `transform: rotate` en RN.
12
+ */
13
+
14
+ /** Fila de datos: una categoría del eje x y un número por serie. */
15
+
16
+ /** Lee una celda como número, o null si no lo es (hueco en la serie). */
17
+ export function toNumber(value) {
18
+ return typeof value === 'number' && Number.isFinite(value) ? value : null;
19
+ }
20
+ export function clamp(value, min, max) {
21
+ return Math.min(max, Math.max(min, value));
22
+ }
23
+
24
+ /** Mata el ruido de punto flotante que deja sumar `step` en un bucle. */
25
+ function tidy(value) {
26
+ return Number(value.toFixed(10));
27
+ }
28
+
29
+ // ── escalas ────────────────────────────────────────────────────────────────
30
+
31
+ /**
32
+ * El 1, 2, 5 o 10 (por su potencia de diez) más cercano por encima de `rough`.
33
+ * Es lo que hace que los ticks caigan en números que alguien diría en voz
34
+ * alta — 0, 250, 500 — y no en 0, 237, 474.
35
+ */
36
+ export function niceStep(rough) {
37
+ if (!(rough > 0)) return 1;
38
+ const magnitude = Math.pow(10, Math.floor(Math.log10(rough)));
39
+ const fraction = rough / magnitude;
40
+ const nice = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
41
+ return nice * magnitude;
42
+ }
43
+ /**
44
+ * Dominio redondeado a valores legibles más la lista de ticks. `count` es una
45
+ * intención, no una promesa: redondear hacia afuera puede dar uno más o uno
46
+ * menos, y eso es preferible a un eje con números arbitrarios.
47
+ */
48
+ export function niceScale(min, max, count = 5) {
49
+ let lo = Math.min(min, max);
50
+ let hi = Math.max(min, max);
51
+ if (!Number.isFinite(lo) || !Number.isFinite(hi)) {
52
+ lo = 0;
53
+ hi = 1;
54
+ }
55
+ if (lo === hi) {
56
+ // Un solo valor no define un rango. Se le inventa uno simétrico para que
57
+ // la marca no quede ni pegada al borde ni ocupando el alto entero.
58
+ const pad = Math.abs(lo) || 1;
59
+ lo -= pad;
60
+ hi += pad;
61
+ }
62
+ const step = niceStep((hi - lo) / Math.max(1, count));
63
+ const start = Math.floor(lo / step) * step;
64
+ const end = Math.ceil(hi / step) * step;
65
+ const values = [];
66
+ // `end + step / 2` en vez de `end`: sumar step acumula error y el último
67
+ // tick se perdería justo en los dominios que más se usan (0–100, 0–1).
68
+ for (let value = start; value <= end + step / 2; value += step) values.push(tidy(value));
69
+ return {
70
+ min: start,
71
+ max: end,
72
+ step,
73
+ values
74
+ };
75
+ }
76
+
77
+ /**
78
+ * Ticks de un dominio que el consumidor fijó a mano. No redondea nada: si
79
+ * alguien pide 0–100, el eje dice 0–100. Es lo contrario de `niceScale`, y es
80
+ * lo que necesita un chart en vivo — un eje que se reacomoda en cada tick hace
81
+ * saltar la línea aunque el dato no se haya movido.
82
+ */
83
+ export function exactTicks(min, max, count = 5) {
84
+ const lo = Math.min(min, max);
85
+ const hi = Math.max(min, max);
86
+ const steps = Math.max(1, Math.floor(count));
87
+ if (lo === hi) return {
88
+ min: lo,
89
+ max: hi,
90
+ step: 0,
91
+ values: [lo]
92
+ };
93
+ const step = (hi - lo) / steps;
94
+ return {
95
+ min: lo,
96
+ max: hi,
97
+ step,
98
+ values: Array.from({
99
+ length: steps + 1
100
+ }, (_, index) => tidy(lo + index * step))
101
+ };
102
+ }
103
+
104
+ /**
105
+ * Une dos dominios quedándose con el más ancho. Es el modo 'sticky': el eje
106
+ * crece cuando llega un valor que no entraba y no se vuelve a achicar, así
107
+ * que lo que se ve moverse es el dato y no la escala.
108
+ */
109
+ export function growExtent(previous, next) {
110
+ if (!previous) return next;
111
+ return [Math.min(previous[0], next[0]), Math.max(previous[1], next[1])];
112
+ }
113
+
114
+ /** Interpolador lineal dominio → rango. Dominio degenerado cae al medio del rango. */
115
+ export function linearScale(domain, range) {
116
+ const [d0, d1] = domain;
117
+ const [r0, r1] = range;
118
+ const span = d1 - d0;
119
+ if (span === 0) return () => (r0 + r1) / 2;
120
+ return value => r0 + (value - d0) / span * (r1 - r0);
121
+ }
122
+ /** Mínimo y máximo de las series pedidas. Sin datos devuelve [0, 1]. */
123
+ export function extent(rows, keys, options = {}) {
124
+ const {
125
+ stacked = false,
126
+ includeZero = false
127
+ } = options;
128
+ let min = Infinity;
129
+ let max = -Infinity;
130
+ for (const row of rows) {
131
+ if (stacked) {
132
+ // Positivos y negativos se apilan hacia lados opuestos del cero, así que
133
+ // cada lado tiene su propio total y ninguno cancela al otro.
134
+ let up = 0;
135
+ let down = 0;
136
+ for (const key of keys) {
137
+ const value = toNumber(row[key]);
138
+ if (value === null) continue;
139
+ if (value >= 0) up += value;else down += value;
140
+ }
141
+ min = Math.min(min, down);
142
+ max = Math.max(max, up);
143
+ } else {
144
+ for (const key of keys) {
145
+ const value = toNumber(row[key]);
146
+ if (value === null) continue;
147
+ min = Math.min(min, value);
148
+ max = Math.max(max, value);
149
+ }
150
+ }
151
+ }
152
+ if (min === Infinity) return [0, 1];
153
+ if (includeZero) {
154
+ min = Math.min(min, 0);
155
+ max = Math.max(max, 0);
156
+ }
157
+ return [min, max];
158
+ }
159
+
160
+ // ── apilado ────────────────────────────────────────────────────────────────
161
+
162
+ /**
163
+ * Bandas apiladas de una fila. Los positivos crecen desde 0 hacia arriba y
164
+ * los negativos desde 0 hacia abajo: una serie negativa no le come el alto a
165
+ * las positivas, que es lo que pasa si se apila todo en un solo acumulador.
166
+ */
167
+ export function stackRow(row, keys) {
168
+ const bands = [];
169
+ let up = 0;
170
+ let down = 0;
171
+ for (const key of keys) {
172
+ const value = toNumber(row[key]);
173
+ if (value === null) continue;
174
+ if (value >= 0) {
175
+ bands.push({
176
+ key,
177
+ from: up,
178
+ to: up + value,
179
+ value
180
+ });
181
+ up += value;
182
+ } else {
183
+ bands.push({
184
+ key,
185
+ from: down,
186
+ to: down + value,
187
+ value
188
+ });
189
+ down += value;
190
+ }
191
+ }
192
+ return bands;
193
+ }
194
+
195
+ // ── polar ──────────────────────────────────────────────────────────────────
196
+
197
+ const RAD = Math.PI / 180;
198
+
199
+ /** Punto a `radius` del centro en el ángulo dado (0° arriba, horario). */
200
+ export function polar(center, radius, angle) {
201
+ return {
202
+ x: center.x + radius * Math.sin(angle * RAD),
203
+ y: center.y - radius * Math.cos(angle * RAD)
204
+ };
205
+ }
206
+
207
+ /** Ángulo de un punto respecto del centro, normalizado a [0, 360). */
208
+ export function angleOf(center, point) {
209
+ const degrees = Math.atan2(point.x - center.x, center.y - point.y) / RAD;
210
+ return (degrees + 360) % 360;
211
+ }
212
+ /**
213
+ * Arcos de una torta. Los negativos no existen en una torta (no hay "menos
214
+ * porción"): se descartan en vez de invertirse. Total 0 ⇒ nada que dibujar.
215
+ */
216
+ export function arcsFor(values) {
217
+ const safe = values.map(value => Number.isFinite(value) && value > 0 ? value : 0);
218
+ const total = safe.reduce((sum, value) => sum + value, 0);
219
+ if (total <= 0) return [];
220
+ const arcs = [];
221
+ let cursor = 0;
222
+ safe.forEach((value, index) => {
223
+ if (value <= 0) return;
224
+ const sweep = value / total * 360;
225
+ arcs.push({
226
+ index,
227
+ start: cursor,
228
+ sweep,
229
+ value,
230
+ ratio: value / total
231
+ });
232
+ cursor += sweep;
233
+ });
234
+ return arcs;
235
+ }
236
+
237
+ /** El arco que contiene ese ángulo, o -1. */
238
+ export function arcAt(arcs, angle) {
239
+ const normalized = (angle + 360) % 360;
240
+ for (const arc of arcs) {
241
+ if (normalized >= arc.start && normalized < arc.start + arc.sweep) return arc.index;
242
+ }
243
+ return -1;
244
+ }
245
+
246
+ /** Ángulos de los ejes de un radar: el primero arriba, el resto en reparto parejo. */
247
+ export function radarAngles(count) {
248
+ if (count <= 0) return [];
249
+ return Array.from({
250
+ length: count
251
+ }, (_, index) => index * 360 / count);
252
+ }
253
+
254
+ // ── segmentos y curvas ─────────────────────────────────────────────────────
255
+
256
+ /**
257
+ * Caja de un segmento a→b: sin SVG, una línea es un rectángulo fino rotado
258
+ * sobre su centro. Ancho = distancia, alto = grosor, rotación = la pendiente.
259
+ */
260
+ export function segmentBox(a, b, thickness) {
261
+ const dx = b.x - a.x;
262
+ const dy = b.y - a.y;
263
+ const length = Math.hypot(dx, dy);
264
+ return {
265
+ left: (a.x + b.x) / 2 - length / 2,
266
+ top: (a.y + b.y) / 2 - thickness / 2,
267
+ width: length,
268
+ height: thickness,
269
+ rotate: Math.atan2(dy, dx) / RAD
270
+ };
271
+ }
272
+
273
+ /**
274
+ * Suaviza una polilínea con Catmull-Rom muestreada en `steps` tramos por vano.
275
+ * La curva pasa por todos los puntos originales (a diferencia de un Bézier de
276
+ * control libre), así que el dato sigue siendo el dato; sólo se agrega camino
277
+ * entre medio, y el resultado se dibuja con los mismos segmentos rectos.
278
+ */
279
+ export function smoothPoints(points, steps = 8) {
280
+ if (points.length < 3 || steps < 2) return points;
281
+ const out = [points[0]];
282
+ for (let i = 0; i < points.length - 1; i += 1) {
283
+ // Los extremos se duplican para que el primer y el último vano tengan
284
+ // las cuatro referencias que pide la spline.
285
+ const p0 = points[i - 1] ?? points[i];
286
+ const p1 = points[i];
287
+ const p2 = points[i + 1];
288
+ const p3 = points[i + 2] ?? p2;
289
+ for (let s = 1; s <= steps; s += 1) {
290
+ const t = s / steps;
291
+ const t2 = t * t;
292
+ const t3 = t2 * t;
293
+ out.push({
294
+ x: 0.5 * (2 * p1.x + (-p0.x + p2.x) * t + (2 * p0.x - 5 * p1.x + 4 * p2.x - p3.x) * t2 + (-p0.x + 3 * p1.x - 3 * p2.x + p3.x) * t3),
295
+ y: 0.5 * (2 * p1.y + (-p0.y + p2.y) * t + (2 * p0.y - 5 * p1.y + 4 * p2.y - p3.y) * t2 + (-p0.y + 3 * p1.y - 3 * p2.y + p3.y) * t3)
296
+ });
297
+ }
298
+ }
299
+ return out;
300
+ }
301
+
302
+ /**
303
+ * `y` de la polilínea en esa `x`, o null si cae fuera. Es lo que convierte una
304
+ * línea en área: cada tira vertical pregunta su alto acá.
305
+ */
306
+ export function sampleY(points, x) {
307
+ if (points.length === 0) return null;
308
+ if (points.length === 1) return points[0].y;
309
+ for (let i = 0; i < points.length - 1; i += 1) {
310
+ const a = points[i];
311
+ const b = points[i + 1];
312
+ const [lo, hi] = a.x <= b.x ? [a, b] : [b, a];
313
+ if (x < lo.x || x > hi.x) continue;
314
+ if (hi.x === lo.x) return lo.y;
315
+ return lo.y + (x - lo.x) / (hi.x - lo.x) * (hi.y - lo.y);
316
+ }
317
+ return null;
318
+ }
319
+
320
+ // ── formato ────────────────────────────────────────────────────────────────
321
+
322
+ const UNITS = ['', 'k', 'M', 'B'];
323
+
324
+ /**
325
+ * Formato por defecto de ejes y tooltip: compacto, porque un eje de un chart
326
+ * de 320px no tiene lugar para "1250000". El consumidor lo reemplaza entero
327
+ * con `formatValue`.
328
+ */
329
+ export function formatNumber(value) {
330
+ if (!Number.isFinite(value)) return '';
331
+ const sign = value < 0 ? '-' : '';
332
+ let magnitude = Math.abs(value);
333
+ let unit = 0;
334
+ while (magnitude >= 1000 && unit < UNITS.length - 1) {
335
+ magnitude /= 1000;
336
+ unit += 1;
337
+ }
338
+ const decimals = magnitude < 10 && magnitude % 1 !== 0 ? 1 : 0;
339
+ return `${sign}${magnitude.toFixed(decimals)}${UNITS[unit]}`;
340
+ }
341
+ /**
342
+ * Descompone un polígono alrededor de un centro en porciones angulares: es lo
343
+ * que permite rellenar un radar con la misma primitiva que dibuja una torta.
344
+ *
345
+ * El corte va por el lado del polígono (parámetro `t`), no por el ángulo: el
346
+ * radio de una cuerda no es lineal en el ángulo, y cortando por ángulo los
347
+ * vértices quedarían redondeados justo donde el dato manda que haya una punta.
348
+ */
349
+ export function fanStrips(center, points, steps = 6) {
350
+ if (points.length < 3 || steps < 1) return [];
351
+ const strips = [];
352
+ for (let i = 0; i < points.length; i += 1) {
353
+ const a = points[i];
354
+ const b = points[(i + 1) % points.length];
355
+ let previous = a;
356
+ let previousAngle = angleOf(center, a);
357
+ for (let s = 1; s <= steps; s += 1) {
358
+ const t = s / steps;
359
+ const point = {
360
+ x: a.x + (b.x - a.x) * t,
361
+ y: a.y + (b.y - a.y) * t
362
+ };
363
+ const angle = angleOf(center, point);
364
+ // El salto de 360 a 0 cae en algún lado del recorrido: sin esto, esa
365
+ // porción se dibujaría girando al revés y taparía todo el resto.
366
+ let sweep = angle - previousAngle;
367
+ if (sweep < 0) sweep += 360;
368
+ if (sweep > 0) {
369
+ const radius = (Math.hypot(previous.x - center.x, previous.y - center.y) + Math.hypot(point.x - center.x, point.y - center.y)) / 2;
370
+ // Las porciones se solapan un pelo a propósito: sin el solape, el
371
+ // antialias deja una costura clara entre tira y tira.
372
+ strips.push({
373
+ start: previousAngle,
374
+ sweep: sweep + 0.4,
375
+ radius
376
+ });
377
+ }
378
+ previous = point;
379
+ previousAngle = angle;
380
+ }
381
+ }
382
+ return strips;
383
+ }
384
+
385
+ // ── diezmado ───────────────────────────────────────────────────────────────
386
+
387
+ /**
388
+ * LTTB (Largest-Triangle-Three-Buckets): elige `threshold` puntos de `values`
389
+ * quedándose con la forma de la curva. Devuelve índices, no puntos, para que
390
+ * quien llama pueda conservar la fila entera —todas sus series— y no sólo la
391
+ * que se usó para decidir.
392
+ *
393
+ * Por qué no un muestreo cada N: cada N se come los picos, que son justo lo
394
+ * que alguien mira en una serie temporal. LTTB parte el recorrido en baldes y
395
+ * de cada uno se queda con el punto que forma el triángulo más grande con el
396
+ * ya elegido y con el promedio del balde siguiente — o sea, con el que más
397
+ * cambia la silueta. Primero y último se conservan siempre.
398
+ *
399
+ * `x` es el índice: las categorías de un chart están repartidas parejo sobre
400
+ * el eje, así que la distancia horizontal entre dos puntos es su distancia de
401
+ * índice.
402
+ */
403
+ export function lttbIndices(values, threshold) {
404
+ const total = values.length;
405
+ if (threshold >= total || threshold < 3) return values.map((_, index) => index);
406
+ const at = index => values[index] ?? 0;
407
+ const selected = [0];
408
+ // Un balde por punto intermedio: el primero y el último no se sortean. Con
409
+ // `threshold < total` el balde mide más de un punto, así que ninguno queda
410
+ // vacío y salen exactamente `threshold` índices, sin repetidos.
411
+ const every = (total - 2) / (threshold - 2);
412
+ let previous = 0;
413
+ for (let bucket = 0; bucket < threshold - 2; bucket += 1) {
414
+ // Promedio del balde *siguiente*: el tercer vértice del triángulo. Va
415
+ // corrido un balde respecto de los candidatos, y ese corrimiento es el
416
+ // algoritmo — comparar contra el propio balde no mira hacia adelante.
417
+ const avgStart = Math.floor((bucket + 1) * every) + 1;
418
+ const avgEnd = Math.min(Math.floor((bucket + 2) * every) + 1, total);
419
+ let avgX = 0;
420
+ let avgY = 0;
421
+ for (let i = avgStart; i < avgEnd; i += 1) {
422
+ avgX += i;
423
+ avgY += at(i);
424
+ }
425
+ const span = Math.max(1, avgEnd - avgStart);
426
+ avgX /= span;
427
+ avgY /= span;
428
+ const start = Math.floor(bucket * every) + 1;
429
+ const end = Math.floor((bucket + 1) * every) + 1;
430
+ let best = start;
431
+ let bestArea = -1;
432
+ for (let i = start; i < end; i += 1) {
433
+ const area = Math.abs((previous - avgX) * (at(i) - at(previous)) - (previous - i) * (avgY - at(previous)));
434
+ if (area > bestArea) {
435
+ bestArea = area;
436
+ best = i;
437
+ }
438
+ }
439
+ selected.push(best);
440
+ previous = best;
441
+ }
442
+ selected.push(total - 1);
443
+ return selected;
444
+ }
445
+ //# sourceMappingURL=math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["toNumber","value","Number","isFinite","clamp","min","max","Math","tidy","toFixed","niceStep","rough","magnitude","pow","floor","log10","fraction","nice","niceScale","count","lo","hi","pad","abs","step","start","end","ceil","values","push","exactTicks","steps","Array","from","length","_","index","growExtent","previous","next","linearScale","domain","range","d0","d1","r0","r1","span","extent","rows","keys","options","stacked","includeZero","Infinity","row","up","down","key","stackRow","bands","to","RAD","PI","polar","center","radius","angle","x","sin","y","cos","angleOf","point","degrees","atan2","arcsFor","safe","map","total","reduce","sum","arcs","cursor","forEach","sweep","ratio","arcAt","normalized","arc","radarAngles","segmentBox","a","b","thickness","dx","dy","hypot","left","top","width","height","rotate","smoothPoints","points","out","i","p0","p1","p2","p3","s","t","t2","t3","sampleY","UNITS","formatNumber","sign","unit","decimals","fanStrips","strips","previousAngle","lttbIndices","threshold","at","selected","every","bucket","avgStart","avgEnd","avgX","avgY","best","bestArea","area"],"sourceRoot":"../../../../src","sources":["organisms/chart/math.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Paleta categórica de Chart, derivada del theme.
5
+ *
6
+ * No hay una lista de colores acá a propósito: si la hubiera, un `brand`
7
+ * personalizado daría un chart que no se parece al resto de la app, y el modo
8
+ * oscuro tendría que mantenerse a mano. Las primeras series reusan los acentos
9
+ * del theme (que ya vienen con el contraste resuelto para su scheme) y, cuando
10
+ * se acaban, se sigue rotando el tono del primario por el ángulo áureo: la
11
+ * secuencia 137.5° es la que más tarda en repetir un tono parecido, que es
12
+ * exactamente lo que se le pide a una paleta categórica.
13
+ *
14
+ * Cada color se verifica contra `surface` a 3:1 — el mínimo de WCAG 1.4.11
15
+ * para objetos gráficos, que es lo que es una barra — y se aclara u oscurece
16
+ * hasta cumplirlo.
17
+ */
18
+ import { contrast, toHex, toHsl } from '../../theme/colors';
19
+ /** Contraste mínimo de un objeto gráfico contra su fondo (WCAG 1.4.11). */
20
+ export const GRAPHIC_CONTRAST = 3;
21
+ const GOLDEN_ANGLE = 137.508;
22
+
23
+ /** Acentos del theme en orden de aparición: tonos bien separados entre sí. */
24
+ function seeds(theme) {
25
+ const {
26
+ primary,
27
+ secondary,
28
+ warning,
29
+ success,
30
+ error
31
+ } = theme.colors;
32
+ return [primary, secondary, warning, success, error];
33
+ }
34
+
35
+ /**
36
+ * Empuja la luminosidad hasta despegar del fondo. El paso es chico y el tope
37
+ * bajo porque el objetivo es corregir un color, no inventar otro: si en 12
38
+ * intentos no llegó, se devuelve lo mejor que se consiguió.
39
+ */
40
+ function readable(hex, surface) {
41
+ if (contrast(hex, surface) >= GRAPHIC_CONTRAST) return hex;
42
+ const hsl = toHsl(hex);
43
+ // Sobre un fondo claro hay que oscurecer, sobre uno oscuro aclarar.
44
+ const direction = toHsl(surface).l > 0.5 ? -1 : 1;
45
+ let best = hex;
46
+ let bestContrast = contrast(hex, surface);
47
+ for (let step = 1; step <= 12; step += 1) {
48
+ const candidate = toHex({
49
+ ...hsl,
50
+ l: Math.min(0.95, Math.max(0.08, hsl.l + direction * step * 0.05))
51
+ });
52
+ const score = contrast(candidate, surface);
53
+ if (score > bestContrast) {
54
+ best = candidate;
55
+ bestContrast = score;
56
+ }
57
+ if (score >= GRAPHIC_CONTRAST) return candidate;
58
+ }
59
+ return best;
60
+ }
61
+ function buildUnsafe(theme, count) {
62
+ const base = seeds(theme);
63
+ const surface = theme.colors.surface;
64
+ const out = [];
65
+ for (let index = 0; index < count; index += 1) {
66
+ if (index < base.length) {
67
+ out.push(readable(base[index], surface));
68
+ continue;
69
+ }
70
+ // Pasados los acentos, se gira el tono del primario. `l` alterna un
71
+ // escalón por vuelta para que dos tonos vecinos no se confundan si la
72
+ // rotación los acerca.
73
+ const seed = toHsl(base[0]);
74
+ const turn = index - base.length + 1;
75
+ out.push(readable(toHex({
76
+ h: (seed.h + turn * GOLDEN_ANGLE) % 360,
77
+ s: Math.max(0.35, seed.s),
78
+ l: Math.min(0.78, Math.max(0.28, seed.l + (turn % 2 === 0 ? 0.08 : -0.04)))
79
+ }), surface));
80
+ }
81
+ return out;
82
+ }
83
+
84
+ /**
85
+ * Los helpers de color hablan hex. Un theme con un acento en `rgba()` es
86
+ * legal para React Native y hace que `toHsl` tire: en ese caso se cae a los
87
+ * acentos tal cual vinieron, ciclando. Un chart con colores repetidos es peor
88
+ * que uno con colores derivados, pero muchísimo mejor que uno que no renderiza.
89
+ */
90
+ function build(theme, count) {
91
+ try {
92
+ return buildUnsafe(theme, count);
93
+ } catch {
94
+ const base = seeds(theme);
95
+ return Array.from({
96
+ length: count
97
+ }, (_, index) => base[index % base.length]);
98
+ }
99
+ }
100
+
101
+ // Una paleta por theme, y por theme el arreglo más largo pedido hasta ahora:
102
+ // la cache se comparte entre todos los charts montados, que es el caso normal
103
+ // (un dashboard con seis charts sobre el mismo theme).
104
+ const cache = new WeakMap();
105
+
106
+ /** `count` colores estables para las series: el mismo índice da siempre el mismo color. */
107
+ export function seriesPalette(theme, count) {
108
+ const cached = cache.get(theme);
109
+ if (cached && cached.length >= count) return cached.slice(0, count);
110
+ const built = build(theme, Math.max(count, 8));
111
+ cache.set(theme, built);
112
+ return built.slice(0, count);
113
+ }
114
+ //# sourceMappingURL=palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["contrast","toHex","toHsl","GRAPHIC_CONTRAST","GOLDEN_ANGLE","seeds","theme","primary","secondary","warning","success","error","colors","readable","hex","surface","hsl","direction","l","best","bestContrast","step","candidate","Math","min","max","score","buildUnsafe","count","base","out","index","length","push","seed","turn","h","s","build","Array","from","_","cache","WeakMap","seriesPalette","cached","get","slice","built","set"],"sourceRoot":"../../../../src","sources":["organisms/chart/palette.ts"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
 
3
+ export { Timeline } from './Timeline';
3
4
  export { Modal } from './Modal';
4
5
  export { BottomSheet } from './BottomSheet';
6
+ export { OptionWheel } from './OptionWheel';
5
7
  export { Select } from './Select';
6
8
  export { Alert } from './Alert';
7
9
  export { AlertProvider, useAlert, showAlert, showConfirm, hideAlert } from './AlertProvider';
@@ -17,4 +19,5 @@ export { ThemeToggle } from './ThemeToggle';
17
19
  export { NavigationBar } from './NavigationBar';
18
20
  export { ReorderableList } from './ReorderableList';
19
21
  export { Slides } from './Slides';
22
+ export { Chart } from './Chart';
20
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Modal","BottomSheet","Select","Alert","AlertProvider","useAlert","showAlert","showConfirm","hideAlert","Screen","List","SearchList","Toast","ToastProvider","useToast","showToast","hideToast","hideAllToasts","DatePicker","buildMonthGrid","DEFAULT_MONTH_NAMES","DEFAULT_WEEKDAY_NAMES","DateField","Wizard","ThemeToggle","NavigationBar","ReorderableList","Slides"],"sourceRoot":"../../../src","sources":["organisms/index.ts"],"mappings":";;AAAA,SAASA,KAAK,QAAQ,SAAS;AAE/B,SAASC,WAAW,QAAQ,eAAe;AAE3C,SAASC,MAAM,QAAQ,UAAU;AAEjC,SAASC,KAAK,QAAQ,SAAS;AAE/B,SAASC,aAAa,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AAE5F,SAASC,MAAM,QAAQ,UAAU;AAEjC,SAASC,IAAI,QAAQ,QAAQ;AAE7B,SAASC,UAAU,QAAQ,cAAc;AAEzC,SAASC,KAAK,QAAQ,SAAS;AAE/B,SAASC,aAAa,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,SAAS,EAAEC,aAAa,QAAQ,iBAAiB;AAE9F,SAASC,UAAU,EAAEC,cAAc,EAAEC,mBAAmB,EAAEC,qBAAqB,QAAQ,cAAc;AAErG,SAASC,SAAS,QAAQ,aAAa;AAEvC,SAASC,MAAM,QAAQ,UAAU;AAEjC,SAASC,WAAW,QAAQ,eAAe;AAE3C,SAASC,aAAa,QAAQ,iBAAiB;AAE/C,SAASC,eAAe,QAAQ,mBAAmB;AAEnD,SAASC,MAAM,QAAQ,UAAU","ignoreList":[]}
1
+ {"version":3,"names":["Timeline","Modal","BottomSheet","OptionWheel","Select","Alert","AlertProvider","useAlert","showAlert","showConfirm","hideAlert","Screen","List","SearchList","Toast","ToastProvider","useToast","showToast","hideToast","hideAllToasts","DatePicker","buildMonthGrid","DEFAULT_MONTH_NAMES","DEFAULT_WEEKDAY_NAMES","DateField","Wizard","ThemeToggle","NavigationBar","ReorderableList","Slides","Chart"],"sourceRoot":"../../../src","sources":["organisms/index.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,YAAY;AAErC,SAASC,KAAK,QAAQ,SAAS;AAE/B,SAASC,WAAW,QAAQ,eAAe;AAE3C,SAASC,WAAW,QAAQ,eAAe;AAE3C,SAASC,MAAM,QAAQ,UAAU;AAEjC,SAASC,KAAK,QAAQ,SAAS;AAE/B,SAASC,aAAa,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;AAE5F,SAASC,MAAM,QAAQ,UAAU;AAEjC,SAASC,IAAI,QAAQ,QAAQ;AAE7B,SAASC,UAAU,QAAQ,cAAc;AAEzC,SAASC,KAAK,QAAQ,SAAS;AAE/B,SAASC,aAAa,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,SAAS,EAAEC,aAAa,QAAQ,iBAAiB;AAE9F,SAASC,UAAU,EAAEC,cAAc,EAAEC,mBAAmB,EAAEC,qBAAqB,QAAQ,cAAc;AAErG,SAASC,SAAS,QAAQ,aAAa;AAEvC,SAASC,MAAM,QAAQ,UAAU;AAEjC,SAASC,WAAW,QAAQ,eAAe;AAE3C,SAASC,aAAa,QAAQ,iBAAiB;AAE/C,SAASC,eAAe,QAAQ,mBAAmB;AAEnD,SAASC,MAAM,QAAQ,UAAU;AAQjC,SAASC,KAAK,QAAQ,SAAS","ignoreList":[]}