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,182 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
+ import { useReduceMotion } from '../atoms/Transition';
5
+
6
+ /** Una página del scroll. Los clones del modo infinito repiten el `real` de un vecino. */
7
+
8
+ export function clampIndex(value, total) {
9
+ if (total === 0) return 0;
10
+ if (value < 0) return 0;
11
+ if (value > total - 1) return total - 1;
12
+ return value;
13
+ }
14
+
15
+ /**
16
+ * useSlides
17
+ * Todo lo que en `Slides` no se ve: qué página está encuadrada, cuándo mover el
18
+ * scroll, cómo se mapean los clones del modo infinito a índices reales, y el
19
+ * reloj del avance automático.
20
+ *
21
+ * Trabaja sólo con índices, nunca con los ítems: así no necesita el genérico
22
+ * `T` del componente, y el UI resuelve `pages[i].real` contra su propio `data`.
23
+ */
24
+ export function useSlides({
25
+ total,
26
+ orientation,
27
+ loop,
28
+ autoPlay,
29
+ interval,
30
+ index,
31
+ defaultIndex,
32
+ onIndexChange
33
+ }) {
34
+ const motionReduced = useReduceMotion();
35
+ const isHorizontal = orientation === 'horizontal';
36
+ // Un solo elemento no tiene a dónde ciclar: quedaría deslizable entre tres
37
+ // copias de lo mismo.
38
+ const isLoop = loop && total > 1;
39
+ const [uncontrolled, setUncontrolled] = useState(() => clampIndex(defaultIndex, total));
40
+ const active = clampIndex(index ?? uncontrolled, total);
41
+ const activeRef = useRef(active);
42
+ activeRef.current = active;
43
+ const [autoPlayPaused, setAutoPlayPaused] = useState(false);
44
+ const [size, setSize] = useState({
45
+ width: 0,
46
+ height: 0
47
+ });
48
+ const pageSize = isHorizontal ? size.width : size.height;
49
+ const scrollRef = useRef(null);
50
+ /** Página realmente visible (índice dentro de `pages`, clones incluidos). */
51
+ const offsetPageRef = useRef(isLoop ? 1 : 0);
52
+ const didInitRef = useRef(false);
53
+ const lastPageSizeRef = useRef(0);
54
+ const draggingRef = useRef(false);
55
+ const pages = useMemo(() => {
56
+ const real = Array.from({
57
+ length: total
58
+ }, (_, i) => ({
59
+ real: i,
60
+ clone: null
61
+ }));
62
+ if (!isLoop) return real;
63
+ return [{
64
+ real: total - 1,
65
+ clone: 'head'
66
+ }, ...real, {
67
+ real: 0,
68
+ clone: 'tail'
69
+ }];
70
+ }, [isLoop, total]);
71
+ const scrollToPage = useCallback((page, animated) => {
72
+ const offset = page * pageSize;
73
+ scrollRef.current?.scrollTo({
74
+ x: isHorizontal ? offset : 0,
75
+ y: isHorizontal ? 0 : offset,
76
+ animated
77
+ });
78
+ }, [isHorizontal, pageSize]);
79
+ const goTo = useCallback(next => {
80
+ if (next === activeRef.current) return;
81
+ activeRef.current = next;
82
+ if (index == null) setUncontrolled(next);
83
+ onIndexChange?.(next);
84
+ }, [index, onIndexChange]);
85
+
86
+ // Sólo actúa cuando el índice y la página visible discrepan: un cambio que
87
+ // vino del propio gesto no dispara un segundo scroll encima del que frenó.
88
+ useEffect(() => {
89
+ if (pageSize === 0 || total === 0) return;
90
+ const target = isLoop ? active + 1 : active;
91
+ const resized = lastPageSizeRef.current !== pageSize;
92
+ if (offsetPageRef.current === target && didInitRef.current && !resized) return;
93
+ // Ni el primer posicionamiento ni el reacomodo por rotación son un cambio
94
+ // de slide: animarlos sería un deslizamiento que nadie pidió.
95
+ const animated = didInitRef.current && !resized;
96
+ didInitRef.current = true;
97
+ lastPageSizeRef.current = pageSize;
98
+ offsetPageRef.current = target;
99
+ scrollToPage(target, animated);
100
+ }, [active, isLoop, pageSize, scrollToPage, total]);
101
+ const onLayout = useCallback(event => {
102
+ const {
103
+ width,
104
+ height
105
+ } = event.nativeEvent.layout;
106
+ setSize(prev => prev.width === width && prev.height === height ? prev : {
107
+ width,
108
+ height
109
+ });
110
+ }, []);
111
+ const onMomentumScrollEnd = useCallback(event => {
112
+ draggingRef.current = false;
113
+ if (pageSize === 0) return;
114
+ const {
115
+ contentOffset
116
+ } = event.nativeEvent;
117
+ const page = Math.round((isHorizontal ? contentOffset.x : contentOffset.y) / pageSize);
118
+ if (isLoop) {
119
+ if (page === 0) {
120
+ offsetPageRef.current = total;
121
+ scrollToPage(total, false);
122
+ goTo(total - 1);
123
+ return;
124
+ }
125
+ if (page === total + 1) {
126
+ offsetPageRef.current = 1;
127
+ scrollToPage(1, false);
128
+ goTo(0);
129
+ return;
130
+ }
131
+ offsetPageRef.current = page;
132
+ goTo(page - 1);
133
+ return;
134
+ }
135
+ offsetPageRef.current = page;
136
+ goTo(clampIndex(page, total));
137
+ }, [goTo, isHorizontal, isLoop, pageSize, scrollToPage, total]);
138
+ const onScrollBeginDrag = useCallback(() => {
139
+ draggingRef.current = true;
140
+ }, []);
141
+ const onScrollEndDrag = useCallback(() => {
142
+ // Un arrastre corto puede soltarse sin inercia y no emitir
143
+ // momentumScrollEnd: sin esto el autoPlay quedaría pausado para siempre.
144
+ draggingRef.current = false;
145
+ }, []);
146
+ const toggleAutoPlay = useCallback(() => setAutoPlayPaused(paused => !paused), []);
147
+ useEffect(() => {
148
+ if (!autoPlay || autoPlayPaused || motionReduced || total < 2 || pageSize === 0) return;
149
+ const timer = setInterval(() => {
150
+ if (draggingRef.current) return;
151
+ const from = activeRef.current;
152
+ if (from < total - 1) {
153
+ goTo(from + 1);
154
+ return;
155
+ }
156
+ if (!isLoop) return;
157
+ // Última en modo infinito: avanza al clon de la primera en vez de
158
+ // rebobinar; el salto al original lo cierra momentumScrollEnd.
159
+ offsetPageRef.current = total + 1;
160
+ scrollToPage(total + 1, true);
161
+ }, interval);
162
+ return () => clearInterval(timer);
163
+ }, [autoPlay, autoPlayPaused, goTo, interval, isLoop, motionReduced, pageSize, scrollToPage, total]);
164
+ return {
165
+ active,
166
+ pages,
167
+ isHorizontal,
168
+ isLoop,
169
+ size,
170
+ pageSize,
171
+ scrollRef,
172
+ autoPlayPaused,
173
+ motionReduced,
174
+ goTo,
175
+ toggleAutoPlay,
176
+ onLayout,
177
+ onMomentumScrollEnd,
178
+ onScrollBeginDrag,
179
+ onScrollEndDrag
180
+ };
181
+ }
182
+ //# sourceMappingURL=useSlides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","useReduceMotion","clampIndex","value","total","useSlides","orientation","loop","autoPlay","interval","index","defaultIndex","onIndexChange","motionReduced","isHorizontal","isLoop","uncontrolled","setUncontrolled","active","activeRef","current","autoPlayPaused","setAutoPlayPaused","size","setSize","width","height","pageSize","scrollRef","offsetPageRef","didInitRef","lastPageSizeRef","draggingRef","pages","real","Array","from","length","_","i","clone","scrollToPage","page","animated","offset","scrollTo","x","y","goTo","next","target","resized","onLayout","event","nativeEvent","layout","prev","onMomentumScrollEnd","contentOffset","Math","round","onScrollBeginDrag","onScrollEndDrag","toggleAutoPlay","paused","timer","setInterval","clearInterval"],"sourceRoot":"../../../src","sources":["organisms/useSlides.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAEzE,SAASC,eAAe,QAAQ,qBAAqB;;AAgBrD;;AA0BA,OAAO,SAASC,UAAUA,CAACC,KAAa,EAAEC,KAAa,EAAU;EAC/D,IAAIA,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC;EACzB,IAAID,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC;EACvB,IAAIA,KAAK,GAAGC,KAAK,GAAG,CAAC,EAAE,OAAOA,KAAK,GAAG,CAAC;EACvC,OAAOD,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,SAASA,CAAC;EACxBD,KAAK;EACLE,WAAW;EACXC,IAAI;EACJC,QAAQ;EACRC,QAAQ;EACRC,KAAK;EACLC,YAAY;EACZC;AACgB,CAAC,EAAmB;EACpC,MAAMC,aAAa,GAAGZ,eAAe,CAAC,CAAC;EACvC,MAAMa,YAAY,GAAGR,WAAW,KAAK,YAAY;EACjD;EACA;EACA,MAAMS,MAAM,GAAGR,IAAI,IAAIH,KAAK,GAAG,CAAC;EAEhC,MAAM,CAACY,YAAY,EAAEC,eAAe,CAAC,GAAGjB,QAAQ,CAAC,MAAME,UAAU,CAACS,YAAY,EAAEP,KAAK,CAAC,CAAC;EACvF,MAAMc,MAAM,GAAGhB,UAAU,CAACQ,KAAK,IAAIM,YAAY,EAAEZ,KAAK,CAAC;EACvD,MAAMe,SAAS,GAAGpB,MAAM,CAACmB,MAAM,CAAC;EAChCC,SAAS,CAACC,OAAO,GAAGF,MAAM;EAE1B,MAAM,CAACG,cAAc,EAAEC,iBAAiB,CAAC,GAAGtB,QAAQ,CAAC,KAAK,CAAC;EAC3D,MAAM,CAACuB,IAAI,EAAEC,OAAO,CAAC,GAAGxB,QAAQ,CAAC;IAAEyB,KAAK,EAAE,CAAC;IAAEC,MAAM,EAAE;EAAE,CAAC,CAAC;EACzD,MAAMC,QAAQ,GAAGb,YAAY,GAAGS,IAAI,CAACE,KAAK,GAAGF,IAAI,CAACG,MAAM;EAExD,MAAME,SAAS,GAAG7B,MAAM,CAAa,IAAI,CAAC;EAC1C;EACA,MAAM8B,aAAa,GAAG9B,MAAM,CAACgB,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;EAC5C,MAAMe,UAAU,GAAG/B,MAAM,CAAC,KAAK,CAAC;EAChC,MAAMgC,eAAe,GAAGhC,MAAM,CAAC,CAAC,CAAC;EACjC,MAAMiC,WAAW,GAAGjC,MAAM,CAAC,KAAK,CAAC;EAEjC,MAAMkC,KAAK,GAAGnC,OAAO,CAAe,MAAM;IACxC,MAAMoC,IAAI,GAAGC,KAAK,CAACC,IAAI,CAAC;MAAEC,MAAM,EAAEjC;IAAM,CAAC,EAAE,CAACkC,CAAC,EAAEC,CAAC,MAAM;MAAEL,IAAI,EAAEK,CAAC;MAAEC,KAAK,EAAE;IAAK,CAAC,CAAC,CAAC;IAChF,IAAI,CAACzB,MAAM,EAAE,OAAOmB,IAAI;IACxB,OAAO,CAAC;MAAEA,IAAI,EAAE9B,KAAK,GAAG,CAAC;MAAEoC,KAAK,EAAE;IAAO,CAAC,EAAE,GAAGN,IAAI,EAAE;MAAEA,IAAI,EAAE,CAAC;MAAEM,KAAK,EAAE;IAAO,CAAC,CAAC;EAClF,CAAC,EAAE,CAACzB,MAAM,EAAEX,KAAK,CAAC,CAAC;EAEnB,MAAMqC,YAAY,GAAG7C,WAAW,CAC9B,CAAC8C,IAAY,EAAEC,QAAiB,KAAK;IACnC,MAAMC,MAAM,GAAGF,IAAI,GAAGf,QAAQ;IAC9BC,SAAS,CAACR,OAAO,EAAEyB,QAAQ,CAAC;MAC1BC,CAAC,EAAEhC,YAAY,GAAG8B,MAAM,GAAG,CAAC;MAC5BG,CAAC,EAAEjC,YAAY,GAAG,CAAC,GAAG8B,MAAM;MAC5BD;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAAC7B,YAAY,EAAEa,QAAQ,CACzB,CAAC;EAED,MAAMqB,IAAI,GAAGpD,WAAW,CACrBqD,IAAY,IAAK;IAChB,IAAIA,IAAI,KAAK9B,SAAS,CAACC,OAAO,EAAE;IAChCD,SAAS,CAACC,OAAO,GAAG6B,IAAI;IACxB,IAAIvC,KAAK,IAAI,IAAI,EAAEO,eAAe,CAACgC,IAAI,CAAC;IACxCrC,aAAa,GAAGqC,IAAI,CAAC;EACvB,CAAC,EACD,CAACvC,KAAK,EAAEE,aAAa,CACvB,CAAC;;EAED;EACA;EACAf,SAAS,CAAC,MAAM;IACd,IAAI8B,QAAQ,KAAK,CAAC,IAAIvB,KAAK,KAAK,CAAC,EAAE;IACnC,MAAM8C,MAAM,GAAGnC,MAAM,GAAGG,MAAM,GAAG,CAAC,GAAGA,MAAM;IAC3C,MAAMiC,OAAO,GAAGpB,eAAe,CAACX,OAAO,KAAKO,QAAQ;IACpD,IAAIE,aAAa,CAACT,OAAO,KAAK8B,MAAM,IAAIpB,UAAU,CAACV,OAAO,IAAI,CAAC+B,OAAO,EAAE;IACxE;IACA;IACA,MAAMR,QAAQ,GAAGb,UAAU,CAACV,OAAO,IAAI,CAAC+B,OAAO;IAC/CrB,UAAU,CAACV,OAAO,GAAG,IAAI;IACzBW,eAAe,CAACX,OAAO,GAAGO,QAAQ;IAClCE,aAAa,CAACT,OAAO,GAAG8B,MAAM;IAC9BT,YAAY,CAACS,MAAM,EAAEP,QAAQ,CAAC;EAChC,CAAC,EAAE,CAACzB,MAAM,EAAEH,MAAM,EAAEY,QAAQ,EAAEc,YAAY,EAAErC,KAAK,CAAC,CAAC;EAEnD,MAAMgD,QAAQ,GAAGxD,WAAW,CAAEyD,KAAwB,IAAK;IACzD,MAAM;MAAE5B,KAAK;MAAEC;IAAO,CAAC,GAAG2B,KAAK,CAACC,WAAW,CAACC,MAAM;IAClD/B,OAAO,CAAEgC,IAAI,IAAMA,IAAI,CAAC/B,KAAK,KAAKA,KAAK,IAAI+B,IAAI,CAAC9B,MAAM,KAAKA,MAAM,GAAG8B,IAAI,GAAG;MAAE/B,KAAK;MAAEC;IAAO,CAAE,CAAC;EAChG,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM+B,mBAAmB,GAAG7D,WAAW,CACpCyD,KAA8C,IAAK;IAClDrB,WAAW,CAACZ,OAAO,GAAG,KAAK;IAC3B,IAAIO,QAAQ,KAAK,CAAC,EAAE;IACpB,MAAM;MAAE+B;IAAc,CAAC,GAAGL,KAAK,CAACC,WAAW;IAC3C,MAAMZ,IAAI,GAAGiB,IAAI,CAACC,KAAK,CAAC,CAAC9C,YAAY,GAAG4C,aAAa,CAACZ,CAAC,GAAGY,aAAa,CAACX,CAAC,IAAIpB,QAAQ,CAAC;IAEtF,IAAIZ,MAAM,EAAE;MACV,IAAI2B,IAAI,KAAK,CAAC,EAAE;QACdb,aAAa,CAACT,OAAO,GAAGhB,KAAK;QAC7BqC,YAAY,CAACrC,KAAK,EAAE,KAAK,CAAC;QAC1B4C,IAAI,CAAC5C,KAAK,GAAG,CAAC,CAAC;QACf;MACF;MACA,IAAIsC,IAAI,KAAKtC,KAAK,GAAG,CAAC,EAAE;QACtByB,aAAa,CAACT,OAAO,GAAG,CAAC;QACzBqB,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;QACtBO,IAAI,CAAC,CAAC,CAAC;QACP;MACF;MACAnB,aAAa,CAACT,OAAO,GAAGsB,IAAI;MAC5BM,IAAI,CAACN,IAAI,GAAG,CAAC,CAAC;MACd;IACF;IAEAb,aAAa,CAACT,OAAO,GAAGsB,IAAI;IAC5BM,IAAI,CAAC9C,UAAU,CAACwC,IAAI,EAAEtC,KAAK,CAAC,CAAC;EAC/B,CAAC,EACD,CAAC4C,IAAI,EAAElC,YAAY,EAAEC,MAAM,EAAEY,QAAQ,EAAEc,YAAY,EAAErC,KAAK,CAC5D,CAAC;EAED,MAAMyD,iBAAiB,GAAGjE,WAAW,CAAC,MAAM;IAC1CoC,WAAW,CAACZ,OAAO,GAAG,IAAI;EAC5B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM0C,eAAe,GAAGlE,WAAW,CAAC,MAAM;IACxC;IACA;IACAoC,WAAW,CAACZ,OAAO,GAAG,KAAK;EAC7B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM2C,cAAc,GAAGnE,WAAW,CAAC,MAAM0B,iBAAiB,CAAE0C,MAAM,IAAK,CAACA,MAAM,CAAC,EAAE,EAAE,CAAC;EAEpFnE,SAAS,CAAC,MAAM;IACd,IAAI,CAACW,QAAQ,IAAIa,cAAc,IAAIR,aAAa,IAAIT,KAAK,GAAG,CAAC,IAAIuB,QAAQ,KAAK,CAAC,EAAE;IACjF,MAAMsC,KAAK,GAAGC,WAAW,CAAC,MAAM;MAC9B,IAAIlC,WAAW,CAACZ,OAAO,EAAE;MACzB,MAAMgB,IAAI,GAAGjB,SAAS,CAACC,OAAO;MAC9B,IAAIgB,IAAI,GAAGhC,KAAK,GAAG,CAAC,EAAE;QACpB4C,IAAI,CAACZ,IAAI,GAAG,CAAC,CAAC;QACd;MACF;MACA,IAAI,CAACrB,MAAM,EAAE;MACb;MACA;MACAc,aAAa,CAACT,OAAO,GAAGhB,KAAK,GAAG,CAAC;MACjCqC,YAAY,CAACrC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC;IAC/B,CAAC,EAAEK,QAAQ,CAAC;IACZ,OAAO,MAAM0D,aAAa,CAACF,KAAK,CAAC;EACnC,CAAC,EAAE,CAACzD,QAAQ,EAAEa,cAAc,EAAE2B,IAAI,EAAEvC,QAAQ,EAAEM,MAAM,EAAEF,aAAa,EAAEc,QAAQ,EAAEc,YAAY,EAAErC,KAAK,CAAC,CAAC;EAEpG,OAAO;IACLc,MAAM;IACNe,KAAK;IACLnB,YAAY;IACZC,MAAM;IACNQ,IAAI;IACJI,QAAQ;IACRC,SAAS;IACTP,cAAc;IACdR,aAAa;IACbmC,IAAI;IACJe,cAAc;IACdX,QAAQ;IACRK,mBAAmB;IACnBI,iBAAiB;IACjBC;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export type GradientDirection = 'vertical' | 'horizontal' | 'diagonal' | 'diagonal-reverse';
4
+ export interface GradientProps {
5
+ /** Paradas del degradado. Uno solo pinta plano; ninguno no pinta nada. */
6
+ colors: string[];
7
+ /**
8
+ * 'vertical' va de arriba a abajo, 'horizontal' de izquierda a derecha,
9
+ * 'diagonal' de arriba-izquierda a abajo-derecha y 'diagonal-reverse' de
10
+ * arriba-derecha a abajo-izquierda.
11
+ * @default 'vertical'
12
+ */
13
+ direction?: GradientDirection;
14
+ /**
15
+ * Bandas por tramo (un tramo = un par de colores consecutivos). Más bandas
16
+ * = transición más suave y más vistas en el árbol.
17
+ * @default 24
18
+ */
19
+ steps?: number;
20
+ /** Contenido por encima del degradado. */
21
+ children?: React.ReactNode;
22
+ style?: StyleProp<ViewStyle>;
23
+ testID?: string;
24
+ }
25
+ /**
26
+ * Gradient
27
+ * Degradado lineal sin dependencias: React Native no trae uno en el rango
28
+ * soportado (Expo SDK 54–57) y `experimental_backgroundImage` no está en toda
29
+ * esa ventana, así que se compone con bandas.
30
+ *
31
+ * Cada tramo pinta el color inicial y encima N bandas del final con opacidad
32
+ * de 0 a 1. El compositor mezcla alpha linealmente: el resultado es la
33
+ * interpolación sRGB entre paradas sin parsear el color, y por eso vale
34
+ * cualquier formato que acepte RN (hex, `rgba()`, nombre).
35
+ */
36
+ export declare const Gradient: React.MemoExoticComponent<({ colors, direction, steps, children, style, testID }: GradientProps) => React.JSX.Element>;
37
+ //# sourceMappingURL=Gradient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Gradient.d.ts","sourceRoot":"","sources":["../../../src/atoms/Gradient.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhF,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAE5F,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAaD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,oFACkE,aAAa,uBA+CnG,CAAC"}
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import { type StyleProp, type TextStyle } from 'react-native';
3
+ export interface ShinyTextProps {
4
+ /** The text to animate. Only a string: the effect needs the characters. */
5
+ text: string;
6
+ /** Milliseconds a single sweep takes end to end. @default 2400 */
7
+ duration?: number;
8
+ /** Pause between sweeps, in ms. @default 600 */
9
+ delay?: number;
10
+ /**
11
+ * Width of the bright band as a fraction of the text, from 0 to 1. Small
12
+ * values give a narrow glint, large ones a soft wave. @default 0.28
13
+ */
14
+ spread?: number;
15
+ /** When false it renders plain text in `shineColor`. @default true */
16
+ animated?: boolean;
17
+ /** Resting color of the characters. @default theme.colors.textLight */
18
+ color?: string;
19
+ /** Color of the band that travels across. @default theme.colors.primary */
20
+ shineColor?: string;
21
+ /** @default 'left' */
22
+ align?: 'left' | 'center' | 'right';
23
+ /** Typography only: `color` and `shineColor` win over any color set here. */
24
+ style?: StyleProp<TextStyle>;
25
+ testID?: string;
26
+ }
27
+ /**
28
+ * ShinyText
29
+ * Una banda de luz recorre el texto de izquierda a derecha. Sin
30
+ * `background-clip: text` ni máscaras —que React Native no tiene en el rango
31
+ * soportado— el brillo se compone letra por letra: cada una lleva su color de
32
+ * reposo y encima, superpuesta, la misma letra en el color del brillo con la
33
+ * opacidad animada. La banda es una ventana de interpolación que se desplaza:
34
+ * lo que cambia por frame es sólo `opacity`, o sea que la animación entera
35
+ * corre en el hilo nativo y JS no participa de ningún frame.
36
+ *
37
+ * Gestalt, destino común: las letras se encienden en secuencia y con el mismo
38
+ * ritmo, así que se leen como una sola cosa que se mueve —una palabra
39
+ * iluminándose— y no como N letras parpadeando por su cuenta. Por eso el ancho
40
+ * de banda es relativo al texto y no una cantidad fija de píxeles: un título
41
+ * largo y uno corto tardan lo mismo y se perciben igual.
42
+ *
43
+ * Con "reducir movimiento" activo, o con `animated={false}`, el texto se
44
+ * renderiza plano en `shineColor` —legible, un solo nodo y seleccionable—
45
+ * porque el efecto es decorativo y nada de lo que comunica está en el brillo.
46
+ */
47
+ export declare const ShinyText: React.MemoExoticComponent<({ text, duration, delay, spread, animated, color, shineColor, align, style, testID, }: ShinyTextProps) => React.JSX.Element>;
48
+ //# sourceMappingURL=ShinyText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShinyText.d.ts","sourceRoot":"","sources":["../../../src/atoms/ShinyText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAChE,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,cAAc,CAAC;AAKtB,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAyDD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,SAAS,oHAYjB,cAAc,uBAkGlB,CAAC"}
@@ -14,6 +14,8 @@ export { Card } from './Card';
14
14
  export type { CardProps } from './Card';
15
15
  export { Divider } from './Divider';
16
16
  export type { DividerProps } from './Divider';
17
+ export { Gradient } from './Gradient';
18
+ export type { GradientProps, GradientDirection } from './Gradient';
17
19
  export { Avatar } from './Avatar';
18
20
  export type { AvatarProps } from './Avatar';
19
21
  export { Image, prefetchImage } from './Image';
@@ -24,6 +26,8 @@ export { Skeleton } from './Skeleton';
24
26
  export type { SkeletonProps, SkeletonVariant } from './Skeleton';
25
27
  export { Transition, useReduceMotion } from './Transition';
26
28
  export type { TransitionProps, TransitionPreset } from './Transition';
29
+ export { ShinyText } from './ShinyText';
30
+ export type { ShinyTextProps } from './ShinyText';
27
31
  export { EmptyState } from './EmptyState';
28
32
  export type { EmptyStateProps } from './EmptyState';
29
33
  export { KeyValueRow } from './KeyValueRow';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atoms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atoms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,208 @@
1
+ import React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ import { type ChartRow } from './chart/math';
4
+ export type { ChartRow } from './chart/math';
5
+ export type ChartType = 'bar' | 'line' | 'area' | 'pie' | 'donut' | 'radar';
6
+ export interface ChartSeries {
7
+ /** Columna de `data` que lee esta serie. */
8
+ key: string;
9
+ /** Lo que dicen la leyenda y el tooltip. Por defecto, `key`. */
10
+ label?: string;
11
+ /** Pisa el color derivado del theme. */
12
+ color?: string;
13
+ }
14
+ export interface ChartFilterOption {
15
+ value: string;
16
+ label: string;
17
+ }
18
+ /**
19
+ * Un filtro de la barra superior. Chart no filtra nada por su cuenta: muestra
20
+ * el control y avisa. Quien tiene los datos decide qué significa "últimos 7
21
+ * días", y eso no se puede adivinar desde acá.
22
+ */
23
+ export interface ChartFilter {
24
+ key: string;
25
+ options: ChartFilterOption[];
26
+ value: string;
27
+ onChange: (value: string) => void;
28
+ }
29
+ export interface ChartSelection {
30
+ /**
31
+ * Identidad de la fila, estable a través de un `window` o un diezmado.
32
+ * Sale de `selectBy`; sin él es el índice, y entonces no sobrevive a que
33
+ * los datos corran.
34
+ */
35
+ id: string;
36
+ /**
37
+ * Índice adentro de las filas **dibujadas**, no de `data`: con `window` o
38
+ * con diezmado no son la misma lista. Para volver al dato está `row`.
39
+ */
40
+ index: number;
41
+ /** La fila entera, sin tener que resolver el índice contra nada. */
42
+ row: ChartRow;
43
+ /** Valor de `xKey` en esa fila. */
44
+ label: string;
45
+ /** Serie tocada. En torta es la fila, que ahí es la categoría. */
46
+ seriesKey: string;
47
+ value: number;
48
+ }
49
+ interface ChartBaseProps {
50
+ data: ChartRow[];
51
+ /**
52
+ * Series a dibujar. En 'pie'/'donut' sólo se usa la primera: las categorías
53
+ * de una torta son las filas, no las columnas.
54
+ */
55
+ series: ChartSeries[];
56
+ /** Columna con la etiqueta de cada fila. @default 'x' */
57
+ xKey?: string;
58
+ /**
59
+ * Identidad estable de una fila. Sin esto la selección se guarda por índice,
60
+ * y en una ventana deslizante el índice corre: el punto resaltado pasa a
61
+ * señalar otro dato sin que nadie lo toque. Con esto el resaltado sigue al
62
+ * dato, y desaparece solo cuando el dato sale de la ventana.
63
+ */
64
+ selectBy?: (row: ChartRow, index: number) => string;
65
+ /**
66
+ * Dibuja sólo las últimas N filas. Es la ventana deslizante de un chart en
67
+ * vivo: quien empuja los datos no tiene que recortarlos en cada tick.
68
+ */
69
+ window?: number;
70
+ /** Alto del área de dibujo, sin contar filtros ni leyenda. @default 220 */
71
+ height?: number;
72
+ /**
73
+ * 'toggle' convierte la leyenda en el filtro más barato que tiene un chart:
74
+ * tocar una serie la apaga. @default 'auto' (toggle con 2+ series, none con una)
75
+ */
76
+ legend?: 'auto' | 'none' | 'static' | 'toggle';
77
+ /** Series apagadas, controlado. Sin esto, Chart se las acuerda solo. */
78
+ hiddenKeys?: string[];
79
+ /** @default [] */
80
+ defaultHiddenKeys?: string[];
81
+ onHiddenKeysChange?: (keys: string[]) => void;
82
+ /** Controles arriba del chart, uno por filtro. */
83
+ filters?: ChartFilter[];
84
+ /** Punto resaltado, controlado. `null` es "ninguno". */
85
+ selected?: ChartSelection | null;
86
+ onSelect?: (selection: ChartSelection | null) => void;
87
+ /** Globo con los valores de la categoría tocada. @default true */
88
+ tooltip?: boolean;
89
+ /** @default formato compacto: 1.2k, 3.4M */
90
+ formatValue?: (value: number) => string;
91
+ /** @default true */
92
+ animate?: boolean;
93
+ /** ms de la animación de las marcas. @default tokens.duration.slow * 2 */
94
+ duration?: number;
95
+ /** Texto cuando no queda nada que dibujar. */
96
+ emptyText?: string;
97
+ /** Obligatorio: un chart no tiene texto que lo describa. */
98
+ accessibilityLabel: string;
99
+ style?: StyleProp<ViewStyle>;
100
+ testID?: string;
101
+ }
102
+ interface CartesianProps {
103
+ /**
104
+ * Fija el eje de valores. Por defecto se recalcula con cada dato, que es lo
105
+ * correcto para un chart estático y lo peor para uno en vivo: llega un valor
106
+ * más alto, la escala entera se reacomoda y la línea salta aunque el dato no
107
+ * se haya movido.
108
+ *
109
+ * - `[min, max]` — exacto, sin redondear a números lindos.
110
+ * - `'sticky'` — arranca del dato y crece cuando algo no entra, pero no se
111
+ * vuelve a achicar.
112
+ */
113
+ domain?: [number, number] | 'sticky';
114
+ /** Líneas de referencia del eje de valores. @default true */
115
+ grid?: boolean;
116
+ /** Ticks buscados en el eje de valores; el redondeo puede dar uno más o uno menos. @default 4 */
117
+ ticks?: number;
118
+ /** Etiquetas del eje horizontal. @default true */
119
+ xAxis?: boolean;
120
+ /** Etiquetas del eje vertical. @default true */
121
+ yAxis?: boolean;
122
+ }
123
+ interface BarChartProps extends CartesianProps {
124
+ type: 'bar';
125
+ /** 'horizontal' pone las categorías en el eje vertical. @default 'vertical' */
126
+ orientation?: 'vertical' | 'horizontal';
127
+ /** Apila las series en vez de ponerlas lado a lado. @default false */
128
+ stacked?: boolean;
129
+ /** Radio del extremo libre de cada barra. @default radius.xs */
130
+ barRadius?: number;
131
+ }
132
+ interface LineChartProps extends CartesianProps {
133
+ type: 'line';
134
+ /**
135
+ * Cuántos puntos dibujar como mucho, eligiéndolos con LTTB. Por defecto sale
136
+ * del ancho medido: más de un punto cada dos píxeles no se ve y sí se paga.
137
+ * `false` los dibuja todos.
138
+ */
139
+ decimate?: number | false;
140
+ /** Catmull-Rom en vez de tramos rectos. @default false */
141
+ smooth?: boolean;
142
+ /** @default 2 */
143
+ thickness?: number;
144
+ /** Punto en cada dato. @default true */
145
+ dots?: boolean;
146
+ }
147
+ interface AreaChartProps extends CartesianProps {
148
+ type: 'area';
149
+ /** Igual que en 'line'. */
150
+ decimate?: number | false;
151
+ smooth?: boolean;
152
+ thickness?: number;
153
+ /** @default false */
154
+ dots?: boolean;
155
+ /** @default false */
156
+ stacked?: boolean;
157
+ /** Opacidad del relleno bajo la línea. @default 0.22 */
158
+ fillOpacity?: number;
159
+ }
160
+ interface PieBaseProps {
161
+ /** Agujero como fracción del radio, 0–0.9. @default 0 en 'pie', 0.6 en 'donut' */
162
+ innerRadius?: number;
163
+ /** Qué escribir sobre cada porción. @default 'percent' */
164
+ sliceLabels?: 'none' | 'percent' | 'value';
165
+ }
166
+ interface PieChartProps extends PieBaseProps {
167
+ type: 'pie';
168
+ }
169
+ interface DonutChartProps extends PieBaseProps {
170
+ type: 'donut';
171
+ }
172
+ interface RadarChartProps {
173
+ type: 'radar';
174
+ /**
175
+ * Fija el alcance de los ejes. El radar mide desde el centro, así que el
176
+ * mínimo es siempre 0 y de `[min, max]` sólo se usa `max`.
177
+ */
178
+ domain?: [number, number] | 'sticky';
179
+ /** Anillos de la telaraña. @default 4 */
180
+ levels?: number;
181
+ /** Rellena el polígono además de dibujar su contorno. @default true */
182
+ fill?: boolean;
183
+ thickness?: number;
184
+ /** @default true */
185
+ dots?: boolean;
186
+ }
187
+ export type ChartProps = ChartBaseProps & (BarChartProps | LineChartProps | AreaChartProps | PieChartProps | DonutChartProps | RadarChartProps);
188
+ /**
189
+ * Chart
190
+ * Barras (verticales, horizontales, agrupadas, apiladas), línea, área, torta,
191
+ * dona y radar en un solo componente, porque lo que cambia entre ellos es la
192
+ * marca que se dibuja y no el resto: datos, escala, ejes, leyenda, tooltip,
193
+ * selección y filtros son los mismos seis mecanismos en todos.
194
+ *
195
+ * Se dibuja con `View`: React Native no trae lienzo vectorial y la librería no
196
+ * puede agregar uno. Las tres primitivas están en `chart/marks.tsx` y la
197
+ * geometría entera, sin React, en `chart/math.ts`.
198
+ *
199
+ * Gestalt: destino común — al tocar una categoría, todo lo que no es ella baja
200
+ * a {@link DIM_OPACITY} a la vez, así que lo resaltado se lee como un grupo y
201
+ * no como una marca suelta. La leyenda usa similitud: el mismo color que la
202
+ * serie, y por eso puede apagarla sin que haga falta explicar qué apaga.
203
+ */
204
+ export declare function Chart(props: ChartProps): React.JSX.Element;
205
+ export declare namespace Chart {
206
+ var displayName: string;
207
+ }
208
+ //# sourceMappingURL=Chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../../../src/organisms/Chart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export interface OptionWheelOption<T> {
4
+ label: string;
5
+ value: T;
6
+ /** The wheel refuses to settle here and slides to the nearest enabled row. */
7
+ disabled?: boolean;
8
+ }
9
+ export type OptionWheelVariant = 'window' | 'spotlight';
10
+ export interface OptionWheelProps<T> {
11
+ options: OptionWheelOption<T>[];
12
+ selectedValue: T | undefined;
13
+ onSelect: (value: T) => void;
14
+ /** Title above the wheel. */
15
+ label?: string;
16
+ /** Required when there's no `label`: the wheel as a whole needs a name. */
17
+ accessibilityLabel?: string;
18
+ /**
19
+ * Rows on screen. Forced to the next odd number so one of them is the
20
+ * centre. @default 5
21
+ */
22
+ visibleCount?: number;
23
+ /** Height of each row. @default 44 */
24
+ itemHeight?: number;
25
+ /** Fixed text to the right of the centre row ('kg', 'min'). */
26
+ unit?: string;
27
+ /** Tilts the far rows to suggest a cylinder. @default true */
28
+ perspective?: boolean;
29
+ /**
30
+ * 'window' marks the pick with a band behind the centre row. 'spotlight'
31
+ * drops the band and lets the far rows fall away and blur instead, which
32
+ * needs a quiet surface under it to read.
33
+ * @default 'window'
34
+ */
35
+ variant?: OptionWheelVariant;
36
+ /**
37
+ * Colour of the option labels. The surface the wheel sits on is whoever
38
+ * composes it to paint — this is how the text keeps contrast against it.
39
+ * @default theme.colors.text
40
+ */
41
+ textColor?: string;
42
+ /**
43
+ * Radius, in pixels, of the wheel the rows sit on. Its centre is off to the
44
+ * side, so the rows bow inwards as they get further from the middle and tilt
45
+ * with the tangent — the wheel reads as a rim seen edge-on instead of a flat
46
+ * list. Smaller radius, rounder arc. Undefined leaves the rows flat.
47
+ */
48
+ curveRadius?: number;
49
+ /** Which side the wheel's centre is on. @default 'left' */
50
+ curveFrom?: 'left' | 'right';
51
+ disabled?: boolean;
52
+ style?: StyleProp<ViewStyle>;
53
+ testID?: string;
54
+ }
55
+ /**
56
+ * OptionWheel
57
+ * Selector de rueda: las opciones pasan por una ventana fija y la que queda en
58
+ * el centro es la elegida. El scroll hace snap a la altura de fila, así que
59
+ * soltar el dedo en cualquier lado siempre deja una opción centrada y no media.
60
+ *
61
+ * Gestalt, figura y fondo: lo que marca la selección no es un estilo sobre la
62
+ * fila —que viajaría con ella— sino una ventana quieta encima de la lista. La
63
+ * figura se queda, el fondo se mueve, y por eso la rueda se lee sin leer: el
64
+ * lugar señala, no el color. Y destino común: todas las filas se achican y se
65
+ * inclinan con la misma ley respecto del centro, de modo que se perciben como
66
+ * una superficie rígida que gira y no como N filas animándose por su cuenta.
67
+ *
68
+ * La escala, la opacidad y la inclinación salen de interpolar el
69
+ * `contentOffset` del scroll, no del estado de React: se calculan en el hilo
70
+ * nativo (`useNativeDriver`) y el hilo de JS sólo participa cuando la rueda ya
71
+ * frenó, para avisar qué quedó elegido. Con "reducir movimiento" activo se
72
+ * apaga la inclinación y queda el tamaño, que es información, no decoración.
73
+ *
74
+ * `disabled` en una opción no puede impedir que el snap la centre, así que la
75
+ * rueda la centra y se corre sola a la habilitada más cercana.
76
+ */
77
+ export declare function OptionWheel<T extends string | number>({ options, selectedValue, onSelect, label, accessibilityLabel, visibleCount, itemHeight, unit, perspective, variant, textColor, curveRadius, curveFrom, disabled, style, testID, }: OptionWheelProps<T>): React.JSX.Element;
78
+ //# sourceMappingURL=OptionWheel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptionWheel.d.ts","sourceRoot":"","sources":["../../../src/organisms/OptionWheel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAC;AACvE,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAKtB,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,CAAC;IACT,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAExD,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAChC,aAAa,EAAE,CAAC,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+GD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EACrD,OAAO,EACP,aAAa,EACb,QAAQ,EACR,KAAK,EACL,kBAAkB,EAClB,YAAoC,EACpC,UAAgC,EAChC,IAAI,EACJ,WAAkB,EAClB,OAAkB,EAClB,SAAS,EACT,WAAW,EACX,SAAkB,EAClB,QAAgB,EAChB,KAAK,EACL,MAAM,GACP,EAAE,gBAAgB,CAAC,CAAC,CAAC,qBAgQrB"}