orn-ui 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +25 -3
- package/README.md +9 -8
- package/lib/commonjs/atoms/Gradient.js +111 -0
- package/lib/commonjs/atoms/Gradient.js.map +1 -0
- package/lib/commonjs/atoms/ShinyText.js +188 -0
- package/lib/commonjs/atoms/ShinyText.js.map +1 -0
- package/lib/commonjs/atoms/index.js +14 -0
- package/lib/commonjs/atoms/index.js.map +1 -1
- package/lib/commonjs/organisms/Chart.js +947 -0
- package/lib/commonjs/organisms/Chart.js.map +1 -0
- package/lib/commonjs/organisms/OptionWheel.js +408 -0
- package/lib/commonjs/organisms/OptionWheel.js.map +1 -0
- package/lib/commonjs/organisms/Slides.js +406 -0
- package/lib/commonjs/organisms/Slides.js.map +1 -0
- package/lib/commonjs/organisms/Timeline.js +420 -0
- package/lib/commonjs/organisms/Timeline.js.map +1 -0
- package/lib/commonjs/organisms/chart/frame.js +373 -0
- package/lib/commonjs/organisms/chart/frame.js.map +1 -0
- package/lib/commonjs/organisms/chart/marks.js +316 -0
- package/lib/commonjs/organisms/chart/marks.js.map +1 -0
- package/lib/commonjs/organisms/chart/math.js +468 -0
- package/lib/commonjs/organisms/chart/math.js.map +1 -0
- package/lib/commonjs/organisms/chart/palette.js +120 -0
- package/lib/commonjs/organisms/chart/palette.js.map +1 -0
- package/lib/commonjs/organisms/index.js +28 -0
- package/lib/commonjs/organisms/index.js.map +1 -1
- package/lib/commonjs/organisms/useSlides.js +186 -0
- package/lib/commonjs/organisms/useSlides.js.map +1 -0
- package/lib/module/atoms/Gradient.js +106 -0
- package/lib/module/atoms/Gradient.js.map +1 -0
- package/lib/module/atoms/ShinyText.js +183 -0
- package/lib/module/atoms/ShinyText.js.map +1 -0
- package/lib/module/atoms/index.js +2 -0
- package/lib/module/atoms/index.js.map +1 -1
- package/lib/module/organisms/Chart.js +942 -0
- package/lib/module/organisms/Chart.js.map +1 -0
- package/lib/module/organisms/OptionWheel.js +403 -0
- package/lib/module/organisms/OptionWheel.js.map +1 -0
- package/lib/module/organisms/Slides.js +401 -0
- package/lib/module/organisms/Slides.js.map +1 -0
- package/lib/module/organisms/Timeline.js +415 -0
- package/lib/module/organisms/Timeline.js.map +1 -0
- package/lib/module/organisms/chart/frame.js +367 -0
- package/lib/module/organisms/chart/frame.js.map +1 -0
- package/lib/module/organisms/chart/marks.js +310 -0
- package/lib/module/organisms/chart/marks.js.map +1 -0
- package/lib/module/organisms/chart/math.js +445 -0
- package/lib/module/organisms/chart/math.js.map +1 -0
- package/lib/module/organisms/chart/palette.js +114 -0
- package/lib/module/organisms/chart/palette.js.map +1 -0
- package/lib/module/organisms/index.js +4 -0
- package/lib/module/organisms/index.js.map +1 -1
- package/lib/module/organisms/useSlides.js +182 -0
- package/lib/module/organisms/useSlides.js.map +1 -0
- package/lib/typescript/atoms/Gradient.d.ts +37 -0
- package/lib/typescript/atoms/Gradient.d.ts.map +1 -0
- package/lib/typescript/atoms/ShinyText.d.ts +48 -0
- package/lib/typescript/atoms/ShinyText.d.ts.map +1 -0
- package/lib/typescript/atoms/index.d.ts +4 -0
- package/lib/typescript/atoms/index.d.ts.map +1 -1
- package/lib/typescript/organisms/Chart.d.ts +208 -0
- package/lib/typescript/organisms/Chart.d.ts.map +1 -0
- package/lib/typescript/organisms/OptionWheel.d.ts +78 -0
- package/lib/typescript/organisms/OptionWheel.d.ts.map +1 -0
- package/lib/typescript/organisms/Slides.d.ts +69 -0
- package/lib/typescript/organisms/Slides.d.ts.map +1 -0
- package/lib/typescript/organisms/Timeline.d.ts +61 -0
- package/lib/typescript/organisms/Timeline.d.ts.map +1 -0
- package/lib/typescript/organisms/chart/frame.d.ts +85 -0
- package/lib/typescript/organisms/chart/frame.d.ts.map +1 -0
- package/lib/typescript/organisms/chart/marks.d.ts +88 -0
- package/lib/typescript/organisms/chart/marks.d.ts.map +1 -0
- package/lib/typescript/organisms/chart/math.d.ts +161 -0
- package/lib/typescript/organisms/chart/math.d.ts.map +1 -0
- package/lib/typescript/organisms/chart/palette.d.ts +6 -0
- package/lib/typescript/organisms/chart/palette.d.ts.map +1 -0
- package/lib/typescript/organisms/index.d.ts +8 -0
- package/lib/typescript/organisms/index.d.ts.map +1 -1
- package/lib/typescript/organisms/useSlides.d.ts +52 -0
- package/lib/typescript/organisms/useSlides.d.ts.map +1 -0
- package/llms.txt +6 -5
- package/package.json +33 -2
- package/registry/chart.json +35 -0
- package/registry/gradient.json +18 -0
- package/registry/index.json +79 -0
- package/registry/manifest.json +42 -0
- package/registry/option-wheel.json +19 -0
- package/registry/shiny-text.json +19 -0
- package/registry/slides.json +24 -0
- package/registry/timeline.json +20 -0
- package/src/atoms/Gradient.tsx +99 -0
- package/src/atoms/ShinyText.tsx +226 -0
- package/src/atoms/index.ts +4 -0
- package/src/organisms/Chart.tsx +1223 -0
- package/src/organisms/OptionWheel.tsx +476 -0
- package/src/organisms/Slides.tsx +413 -0
- package/src/organisms/Timeline.tsx +467 -0
- package/src/organisms/chart/frame.tsx +349 -0
- package/src/organisms/chart/marks.tsx +295 -0
- package/src/organisms/chart/math.ts +475 -0
- package/src/organisms/chart/palette.ts +112 -0
- package/src/organisms/index.ts +22 -0
- package/src/organisms/useSlides.ts +220 -0
|
@@ -0,0 +1,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":"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","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"}
|