orn-ui 0.2.8 → 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 +6 -2
- package/README.md +6 -6
- package/lib/commonjs/atoms/ShinyText.js +188 -0
- package/lib/commonjs/atoms/ShinyText.js.map +1 -0
- package/lib/commonjs/atoms/index.js +7 -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/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 +21 -0
- package/lib/commonjs/organisms/index.js.map +1 -1
- package/lib/module/atoms/ShinyText.js +183 -0
- package/lib/module/atoms/ShinyText.js.map +1 -0
- package/lib/module/atoms/index.js +1 -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/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 +3 -0
- package/lib/module/organisms/index.js.map +1 -1
- 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 +2 -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/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 +6 -0
- package/lib/typescript/organisms/index.d.ts.map +1 -1
- package/llms.txt +3 -3
- package/package.json +23 -2
- package/registry/chart.json +35 -0
- package/registry/index.json +53 -0
- package/registry/manifest.json +28 -0
- package/registry/option-wheel.json +19 -0
- package/registry/shiny-text.json +19 -0
- package/registry/timeline.json +20 -0
- package/src/atoms/ShinyText.tsx +226 -0
- package/src/atoms/index.ts +2 -0
- package/src/organisms/Chart.tsx +1223 -0
- package/src/organisms/OptionWheel.tsx +476 -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 +14 -0
|
@@ -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"}
|
|
@@ -26,6 +26,8 @@ export { Skeleton } from './Skeleton';
|
|
|
26
26
|
export type { SkeletonProps, SkeletonVariant } from './Skeleton';
|
|
27
27
|
export { Transition, useReduceMotion } from './Transition';
|
|
28
28
|
export type { TransitionProps, TransitionPreset } from './Transition';
|
|
29
|
+
export { ShinyText } from './ShinyText';
|
|
30
|
+
export type { ShinyTextProps } from './ShinyText';
|
|
29
31
|
export { EmptyState } from './EmptyState';
|
|
30
32
|
export type { EmptyStateProps } from './EmptyState';
|
|
31
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,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,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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type StyleProp, type ViewStyle } from 'react-native';
|
|
3
|
+
import type { IconName } from '../icons/types';
|
|
4
|
+
export type TimelineStatus = 'done' | 'pending';
|
|
5
|
+
/**
|
|
6
|
+
* Qué puede hacer un toque.
|
|
7
|
+
* - 'free': cualquier hito responde y la línea sigue a `items` para donde
|
|
8
|
+
* vaya, adelante o atrás. Es el que sirve cuando el recorrido no es un
|
|
9
|
+
* progreso, o cuando lo maneja otra cosa.
|
|
10
|
+
* - 'sequential': sólo responde el que sigue al alcanzado, y la línea no
|
|
11
|
+
* retrocede nunca. Avance estricto.
|
|
12
|
+
* - 'revisit': responden el que sigue y todos los ya alcanzados, y la línea
|
|
13
|
+
* tampoco retrocede. Es el caso de "puedo volver a mirar lo anterior sin
|
|
14
|
+
* perder lo que llevo".
|
|
15
|
+
*/
|
|
16
|
+
export type TimelineAdvance = 'free' | 'sequential' | 'revisit';
|
|
17
|
+
export interface TimelineItem {
|
|
18
|
+
label: string;
|
|
19
|
+
/** Glyph from the library's set, to the left of the label. */
|
|
20
|
+
iconName?: IconName;
|
|
21
|
+
/** Emoji to the left of the label. Wins over `iconName`. */
|
|
22
|
+
emoji?: string;
|
|
23
|
+
/** @default 'done' */
|
|
24
|
+
status?: TimelineStatus;
|
|
25
|
+
}
|
|
26
|
+
export interface TimelineProps {
|
|
27
|
+
items: TimelineItem[];
|
|
28
|
+
/** Pixels the line bows away from the straight path. 0 draws it straight. @default 28 */
|
|
29
|
+
curve?: number;
|
|
30
|
+
/** Vertical distance between one node and the next. @default 84 */
|
|
31
|
+
spacing?: number;
|
|
32
|
+
/** Side the first pill goes to; the rest alternate. @default 'right' */
|
|
33
|
+
startSide?: 'left' | 'right';
|
|
34
|
+
/** Halo behind each pill. @default true */
|
|
35
|
+
glow?: boolean;
|
|
36
|
+
/** Makes each pill tappable and reports its index. */
|
|
37
|
+
onItemPress?: (index: number) => void;
|
|
38
|
+
/**
|
|
39
|
+
* Which taps are allowed, and whether the line may go back. @default 'free'
|
|
40
|
+
*
|
|
41
|
+
* In 'sequential' and 'revisit' the line keeps the furthest point it has
|
|
42
|
+
* been asked to draw, so a parent that hands back a shorter `items` does not
|
|
43
|
+
* undo the progress. Swapping in a different list keeps it too — reset it by
|
|
44
|
+
* remounting (a `key`).
|
|
45
|
+
*/
|
|
46
|
+
advance?: TimelineAdvance;
|
|
47
|
+
/**
|
|
48
|
+
* The milestone being looked at right now, highlighted. It is not the
|
|
49
|
+
* progress: it can sit behind the line without pulling it back.
|
|
50
|
+
*/
|
|
51
|
+
selectedIndex?: number;
|
|
52
|
+
/**
|
|
53
|
+
* Milliseconds the line takes to travel one gap when a milestone is
|
|
54
|
+
* reached. @default 420
|
|
55
|
+
*/
|
|
56
|
+
duration?: number;
|
|
57
|
+
style?: StyleProp<ViewStyle>;
|
|
58
|
+
testID?: string;
|
|
59
|
+
}
|
|
60
|
+
export declare const Timeline: React.MemoExoticComponent<({ items, curve, spacing, startSide, glow, onItemPress, advance, selectedIndex, duration, style, testID, }: TimelineProps) => React.JSX.Element | null>;
|
|
61
|
+
//# sourceMappingURL=Timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Timeline.d.ts","sourceRoot":"","sources":["../../../src/organisms/Timeline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAChE,OAAO,EAAgC,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAM5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sDAAsD;IACtD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+FD,eAAO,MAAM,QAAQ,wIAahB,aAAa,8BAkSjB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El marco de Chart: todo lo que rodea a las marcas — grilla, ejes, leyenda y
|
|
3
|
+
* tooltip. Nada de acá conoce el tipo de chart; recibe números y textos ya
|
|
4
|
+
* resueltos.
|
|
5
|
+
*
|
|
6
|
+
* Gestalt: la grilla usa `border`, dos escalones por debajo del color de las
|
|
7
|
+
* series, para que el dato quede como figura y la referencia como fondo. La
|
|
8
|
+
* leyenda repite el color exacto de cada serie (similitud) y por eso puede
|
|
9
|
+
* hacer de control de filtro sin explicar qué apaga: se apaga lo que tiene ese
|
|
10
|
+
* color.
|
|
11
|
+
*/
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import { type StyleProp, type ViewStyle } from 'react-native';
|
|
14
|
+
import { type Point } from './math';
|
|
15
|
+
export interface CartesianGridProps {
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
/** Posición en píxeles de cada línea, sobre el eje perpendicular a ella. */
|
|
19
|
+
lines: number[];
|
|
20
|
+
/** 'horizontal' dibuja líneas que cruzan a lo ancho (eje y con ticks). */
|
|
21
|
+
orientation: 'horizontal' | 'vertical';
|
|
22
|
+
/** Índice de la línea del cero, más marcada que el resto. */
|
|
23
|
+
zeroIndex?: number;
|
|
24
|
+
testID?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare const CartesianGrid: React.MemoExoticComponent<({ width, height, lines, orientation, zeroIndex, testID }: CartesianGridProps) => React.JSX.Element>;
|
|
27
|
+
export interface AxisLabelsProps {
|
|
28
|
+
labels: {
|
|
29
|
+
text: string;
|
|
30
|
+
position: number;
|
|
31
|
+
}[];
|
|
32
|
+
/** 'x' las reparte a lo ancho debajo del plot; 'y' las apila a la izquierda. */
|
|
33
|
+
axis: 'x' | 'y';
|
|
34
|
+
/** Ancho del canal reservado para las etiquetas. */
|
|
35
|
+
gutter: number;
|
|
36
|
+
/** Tamaño del plot sobre el eje de las etiquetas. */
|
|
37
|
+
span: number;
|
|
38
|
+
testID?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare const AxisLabels: React.MemoExoticComponent<({ labels, axis, gutter, span, testID }: AxisLabelsProps) => React.JSX.Element>;
|
|
41
|
+
export interface RadarGridProps {
|
|
42
|
+
center: Point;
|
|
43
|
+
radius: number;
|
|
44
|
+
angles: number[];
|
|
45
|
+
/** Anillos concéntricos, incluido el borde. */
|
|
46
|
+
levels: number;
|
|
47
|
+
testID?: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Anillos y radios del radar. Los anillos son polígonos, no círculos: un
|
|
51
|
+
* círculo sugiere que entre eje y eje hay valores, y no los hay — sólo hay
|
|
52
|
+
* los ejes que se pasaron.
|
|
53
|
+
*/
|
|
54
|
+
export declare const RadarGrid: React.MemoExoticComponent<({ center, radius, angles, levels, testID }: RadarGridProps) => React.JSX.Element | null>;
|
|
55
|
+
export interface LegendItem {
|
|
56
|
+
key: string;
|
|
57
|
+
label: string;
|
|
58
|
+
color: string;
|
|
59
|
+
}
|
|
60
|
+
export interface LegendProps {
|
|
61
|
+
items: LegendItem[];
|
|
62
|
+
hidden: string[];
|
|
63
|
+
/** Sin esto la leyenda es sólo referencia; con esto es el filtro. */
|
|
64
|
+
onToggle?: (key: string) => void;
|
|
65
|
+
testID?: string;
|
|
66
|
+
}
|
|
67
|
+
export declare const Legend: React.MemoExoticComponent<({ items, hidden, onToggle, testID }: LegendProps) => React.JSX.Element>;
|
|
68
|
+
export interface TooltipRow {
|
|
69
|
+
key: string;
|
|
70
|
+
label: string;
|
|
71
|
+
value: string;
|
|
72
|
+
color: string;
|
|
73
|
+
}
|
|
74
|
+
export interface TooltipProps {
|
|
75
|
+
title: string;
|
|
76
|
+
rows: TooltipRow[];
|
|
77
|
+
/** Punto que describe, en coordenadas del contenedor. */
|
|
78
|
+
anchor: Point;
|
|
79
|
+
/** Ancho disponible: el globo se corre para no salirse. */
|
|
80
|
+
containerWidth: number;
|
|
81
|
+
style?: StyleProp<ViewStyle>;
|
|
82
|
+
testID?: string;
|
|
83
|
+
}
|
|
84
|
+
export declare const Tooltip: React.MemoExoticComponent<({ title, rows, anchor, containerWidth, style, testID }: TooltipProps) => React.JSX.Element>;
|
|
85
|
+
//# sourceMappingURL=frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../../../src/organisms/chart/frame.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAe,MAAM,OAAO,CAAC;AACpC,OAAO,EAAgC,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAG5F,OAAO,EAAS,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAyD3C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,0EAA0E;IAC1E,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;IACvC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,aAAa,uFAAmE,kBAAkB,uBAyB7G,CAAC;AAGH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,gFAAgF;IAChF,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IAChB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,eAAO,MAAM,UAAU,qEAAiD,eAAe,uBA0BrF,CAAC;AAKH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,yEAAqD,cAAc,8BAoDvF,CAAC;AAKH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,MAAM,kEAA8C,WAAW,uBAyC1E,CAAC;AAKH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,yDAAyD;IACzD,MAAM,EAAE,KAAK,CAAC;IACd,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD,eAAO,MAAM,OAAO,qFAAiE,YAAY,uBAmC/F,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Las marcas de Chart: lo único que sabe dibujar el componente.
|
|
3
|
+
*
|
|
4
|
+
* React Native no trae un lienzo vectorial y la librería no puede agregar uno
|
|
5
|
+
* (cero dependencias), así que las tres primitivas de acá se componen con
|
|
6
|
+
* `View` y bastan para los seis tipos de chart:
|
|
7
|
+
*
|
|
8
|
+
* | primitiva | la usan |
|
|
9
|
+
* |------------|-----------------------------------------------------|
|
|
10
|
+
* | `Bar` | barras verticales y horizontales, agrupadas o apiladas |
|
|
11
|
+
* | `Polyline` | línea, contorno del radar, grilla del radar, ejes |
|
|
12
|
+
* | `Wedge` | torta, dona y el relleno del radar |
|
|
13
|
+
*
|
|
14
|
+
* Son puras: no escuchan toques ni conocen la escala. Quien toca es la capa de
|
|
15
|
+
* hit-test de Chart.tsx, que cubre columnas enteras en vez de la marca —
|
|
16
|
+
* una línea de 2px no es un blanco táctil.
|
|
17
|
+
*/
|
|
18
|
+
import React from 'react';
|
|
19
|
+
import { Animated } from 'react-native';
|
|
20
|
+
import { type Point } from './math';
|
|
21
|
+
/**
|
|
22
|
+
* Valor que persigue a `target` en vez de saltar. Un filtro que cambia los
|
|
23
|
+
* datos mueve la barra desde donde estaba, y ese movimiento es lo que dice
|
|
24
|
+
* "es la misma barra con otro número" en lugar de "es otro chart".
|
|
25
|
+
*/
|
|
26
|
+
export declare function useAnimatedNumber(target: number, animate: boolean, duration: number): Animated.Value;
|
|
27
|
+
export interface BarProps {
|
|
28
|
+
/** Caja final de la barra dentro del plot, ya en píxeles. */
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
width: number;
|
|
32
|
+
height: number;
|
|
33
|
+
color: string;
|
|
34
|
+
/** Lado por donde nace: la barra crece desde su base, no desde el centro. */
|
|
35
|
+
from: 'bottom' | 'top' | 'left' | 'right';
|
|
36
|
+
/** Radio de las dos esquinas del extremo libre. */
|
|
37
|
+
radius?: number;
|
|
38
|
+
/** Atenúa las barras que no son la seleccionada. */
|
|
39
|
+
dim?: boolean;
|
|
40
|
+
animate?: boolean;
|
|
41
|
+
duration?: number;
|
|
42
|
+
testID?: string;
|
|
43
|
+
}
|
|
44
|
+
export declare const Bar: React.MemoExoticComponent<({ x, y, width, height, color, from, radius, dim, animate, duration, testID }: BarProps) => React.JSX.Element>;
|
|
45
|
+
export interface PolylineProps {
|
|
46
|
+
points: Point[];
|
|
47
|
+
color: string;
|
|
48
|
+
thickness?: number;
|
|
49
|
+
/** Une el último punto con el primero (radar, grilla poligonal). */
|
|
50
|
+
closed?: boolean;
|
|
51
|
+
opacity?: number;
|
|
52
|
+
testID?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Una línea es un rectángulo fino rotado sobre su centro, uno por tramo. Con
|
|
56
|
+
* `smoothPoints` los tramos son tantos que la poligonal se lee como curva.
|
|
57
|
+
*
|
|
58
|
+
* Los extremos quedan a tope, no redondeados: un `borderRadius` por tramo
|
|
59
|
+
* multiplicaría las vistas y a 2px de grosor nadie ve la diferencia.
|
|
60
|
+
*/
|
|
61
|
+
export declare const Polyline: React.MemoExoticComponent<({ points, color, thickness, closed, opacity, testID }: PolylineProps) => React.JSX.Element | null>;
|
|
62
|
+
export interface DotProps {
|
|
63
|
+
point: Point;
|
|
64
|
+
color: string;
|
|
65
|
+
size?: number;
|
|
66
|
+
/** Aro del color del fondo: despega el punto de la línea que lo cruza. */
|
|
67
|
+
ringColor?: string;
|
|
68
|
+
ringWidth?: number;
|
|
69
|
+
testID?: string;
|
|
70
|
+
}
|
|
71
|
+
export declare const Dot: React.MemoExoticComponent<({ point, color, size, ringColor, ringWidth, testID }: DotProps) => React.JSX.Element>;
|
|
72
|
+
export interface WedgeProps {
|
|
73
|
+
/** Diámetro: la porción se dibuja centrada en una caja `size` × `size`. */
|
|
74
|
+
size: number;
|
|
75
|
+
/** Ángulo donde empieza, 0° arriba y creciendo en horario. */
|
|
76
|
+
start: number;
|
|
77
|
+
/** Apertura, 0–360. */
|
|
78
|
+
sweep: number;
|
|
79
|
+
color: string;
|
|
80
|
+
opacity?: number;
|
|
81
|
+
/** Desplaza la porción hacia afuera por su bisectriz (la seleccionada). */
|
|
82
|
+
explode?: number;
|
|
83
|
+
/** Centro dentro del contenedor. Sin él la porción se apoya en (0, 0). */
|
|
84
|
+
center?: Point;
|
|
85
|
+
testID?: string;
|
|
86
|
+
}
|
|
87
|
+
export declare const Wedge: React.MemoExoticComponent<({ size, start, sweep, color, opacity, explode, center, testID }: WedgeProps) => React.JSX.Element | null>;
|
|
88
|
+
//# sourceMappingURL=marks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marks.d.ts","sourceRoot":"","sources":["../../../../src/organisms/chart/marks.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAkC,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAgC,MAAM,cAAc,CAAC;AACtE,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,KAAK,CAsBpG;AAID,MAAM,WAAW,QAAQ;IACvB,6DAA6D;IAC7D,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IAC1C,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,eAAO,MAAM,GAAG,2GAC0F,QAAQ,uBA6BjH,CAAC;AAKF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,oFAAgF,aAAa,8BAyBhH,CAAC;AAGH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,GAAG,mFAAuE,QAAQ,uBAmB7F,CAAC;AA2DH,MAAM,WAAW,UAAU;IACzB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,eAAO,MAAM,KAAK,8FAAkF,UAAU,8BAmC5G,CAAC"}
|