@acvl/mobile-components 0.0.0-stage → 0.0.1
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/README.md +146 -2
- package/assets/fonts/Inter_400Regular.ttf +0 -0
- package/assets/fonts/Inter_500Medium.ttf +0 -0
- package/assets/fonts/Inter_600SemiBold.ttf +0 -0
- package/assets/fonts/Inter_700Bold.ttf +0 -0
- package/assets/fonts/Inter_800ExtraBold.ttf +0 -0
- package/assets/fonts/Inter_900Black.ttf +0 -0
- package/assets/fonts/OFL.txt +93 -0
- package/lib/module/componentes/AccionesDelEncabezado.js +212 -0
- package/lib/module/componentes/AccionesDelEncabezado.js.map +1 -0
- package/lib/module/componentes/BotonDeAvatar.js +55 -0
- package/lib/module/componentes/BotonDeAvatar.js.map +1 -0
- package/lib/module/componentes/BotonGrande.js +105 -0
- package/lib/module/componentes/BotonGrande.js.map +1 -0
- package/lib/module/componentes/CabeceraEmpujada.js +101 -0
- package/lib/module/componentes/CabeceraEmpujada.js.map +1 -0
- package/lib/module/componentes/Chip.js +77 -0
- package/lib/module/componentes/Chip.js.map +1 -0
- package/lib/module/componentes/ContenidoDePantalla.js +56 -0
- package/lib/module/componentes/ContenidoDePantalla.js.map +1 -0
- package/lib/module/componentes/EstadoVacio.js +65 -0
- package/lib/module/componentes/EstadoVacio.js.map +1 -0
- package/lib/module/componentes/Foto.js +106 -0
- package/lib/module/componentes/Foto.js.map +1 -0
- package/lib/module/componentes/IconoDeRenglon.js +44 -0
- package/lib/module/componentes/IconoDeRenglon.js.map +1 -0
- package/lib/module/componentes/Logo.js +44 -0
- package/lib/module/componentes/Logo.js.map +1 -0
- package/lib/module/componentes/Nota.js +51 -0
- package/lib/module/componentes/Nota.js.map +1 -0
- package/lib/module/componentes/OpcionesExcluyentes.js +69 -0
- package/lib/module/componentes/OpcionesExcluyentes.js.map +1 -0
- package/lib/module/componentes/PantallaDeError.js +84 -0
- package/lib/module/componentes/PantallaDeError.js.map +1 -0
- package/lib/module/componentes/Pestanas.js +87 -0
- package/lib/module/componentes/Pestanas.js.map +1 -0
- package/lib/module/componentes/Rotulo.js +28 -0
- package/lib/module/componentes/Rotulo.js.map +1 -0
- package/lib/module/componentes/RotuloDeSeccion.js +87 -0
- package/lib/module/componentes/RotuloDeSeccion.js.map +1 -0
- package/lib/module/componentes/Tarjeta.js +47 -0
- package/lib/module/componentes/Tarjeta.js.map +1 -0
- package/lib/module/componentes/TarjetaDeDatos.js +79 -0
- package/lib/module/componentes/TarjetaDeDatos.js.map +1 -0
- package/lib/module/componentes/TiraDeFotos.js +184 -0
- package/lib/module/componentes/TiraDeFotos.js.map +1 -0
- package/lib/module/componentes/VisorDeFoto.js +171 -0
- package/lib/module/componentes/VisorDeFoto.js.map +1 -0
- package/lib/module/componentes/logos/bola-blanca.png +0 -0
- package/lib/module/componentes/logos/bola.png +0 -0
- package/lib/module/componentes/logos/logo-blanco.png +0 -0
- package/lib/module/componentes/logos/logo.png +0 -0
- package/lib/module/dialogos/HostDeDialogos.js +170 -0
- package/lib/module/dialogos/HostDeDialogos.js.map +1 -0
- package/lib/module/dialogos/dialogos.js +112 -0
- package/lib/module/dialogos/dialogos.js.map +1 -0
- package/lib/module/formularios/CampoDeSeleccion.js +47 -0
- package/lib/module/formularios/CampoDeSeleccion.js.map +1 -0
- package/lib/module/formularios/SelectorDeOpcion.js +406 -0
- package/lib/module/formularios/SelectorDeOpcion.js.map +1 -0
- package/lib/module/formularios/TextoDeAccesoControlado.js +73 -0
- package/lib/module/formularios/TextoDeAccesoControlado.js.map +1 -0
- package/lib/module/formularios/campos.js +493 -0
- package/lib/module/formularios/campos.js.map +1 -0
- package/lib/module/formularios/controlados.js +197 -0
- package/lib/module/formularios/controlados.js.map +1 -0
- package/lib/module/formularios/errores.js +91 -0
- package/lib/module/formularios/errores.js.map +1 -0
- package/lib/module/formularios/guardado.js +78 -0
- package/lib/module/formularios/guardado.js.map +1 -0
- package/lib/module/formularios/useBusqueda.js +22 -0
- package/lib/module/formularios/useBusqueda.js.map +1 -0
- package/lib/module/fotos/elegir.js +178 -0
- package/lib/module/fotos/elegir.js.map +1 -0
- package/lib/module/fotos/index.js +8 -0
- package/lib/module/fotos/index.js.map +1 -0
- package/lib/module/fotos/reducir.js +93 -0
- package/lib/module/fotos/reducir.js.map +1 -0
- package/lib/module/hoja/HojaInferior.js +108 -0
- package/lib/module/hoja/HojaInferior.js.map +1 -0
- package/lib/module/hoja/index.js +7 -0
- package/lib/module/hoja/index.js.map +1 -0
- package/lib/module/hoja/useMasDeLaFicha.js +48 -0
- package/lib/module/hoja/useMasDeLaFicha.js.map +1 -0
- package/lib/module/index.js +66 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/listas/HojaDeFiltros.js +260 -0
- package/lib/module/listas/HojaDeFiltros.js.map +1 -0
- package/lib/module/listas/ListaPaginada.js +103 -0
- package/lib/module/listas/ListaPaginada.js.map +1 -0
- package/lib/module/listas/TarjetaDeslizable.js +118 -0
- package/lib/module/listas/TarjetaDeslizable.js.map +1 -0
- package/lib/module/listas/paginado.js +11 -0
- package/lib/module/listas/paginado.js.map +1 -0
- package/lib/module/listas/piezas.js +603 -0
- package/lib/module/listas/piezas.js.map +1 -0
- package/lib/module/navegacion/BarraDePestanas.js +162 -0
- package/lib/module/navegacion/BarraDePestanas.js.map +1 -0
- package/lib/module/navegacion/BotonDeBarra.js +58 -0
- package/lib/module/navegacion/BotonDeBarra.js.map +1 -0
- package/lib/module/navegacion/encabezado.js +103 -0
- package/lib/module/navegacion/encabezado.js.map +1 -0
- package/lib/module/pantallas/PantallaDeAcceso.js +195 -0
- package/lib/module/pantallas/PantallaDeAcceso.js.map +1 -0
- package/lib/module/pantallas/PantallaDeEdicion.js +121 -0
- package/lib/module/pantallas/PantallaDeEdicion.js.map +1 -0
- package/lib/module/pantallas/PantallaDeFicha.js +94 -0
- package/lib/module/pantallas/PantallaDeFicha.js.map +1 -0
- package/lib/module/pantallas/PantallaDePerfil.js +137 -0
- package/lib/module/pantallas/PantallaDePerfil.js.map +1 -0
- package/lib/module/tema/ProveedorDeTema.js +122 -0
- package/lib/module/tema/ProveedorDeTema.js.map +1 -0
- package/lib/module/tema/estilos.js +54 -0
- package/lib/module/tema/estilos.js.map +1 -0
- package/lib/module/tema/fuentes.js +28 -0
- package/lib/module/tema/fuentes.js.map +1 -0
- package/lib/module/tema/index.js +8 -0
- package/lib/module/tema/index.js.map +1 -0
- package/lib/module/tema/paleta.js +107 -0
- package/lib/module/tema/paleta.js.map +1 -0
- package/lib/module/tema/tipografia.js +32 -0
- package/lib/module/tema/tipografia.js.map +1 -0
- package/lib/module/texto.js +48 -0
- package/lib/module/texto.js.map +1 -0
- package/lib/typescript/src/componentes/AccionesDelEncabezado.d.ts +34 -0
- package/lib/typescript/src/componentes/AccionesDelEncabezado.d.ts.map +1 -0
- package/lib/typescript/src/componentes/BotonDeAvatar.d.ts +17 -0
- package/lib/typescript/src/componentes/BotonDeAvatar.d.ts.map +1 -0
- package/lib/typescript/src/componentes/BotonGrande.d.ts +26 -0
- package/lib/typescript/src/componentes/BotonGrande.d.ts.map +1 -0
- package/lib/typescript/src/componentes/CabeceraEmpujada.d.ts +18 -0
- package/lib/typescript/src/componentes/CabeceraEmpujada.d.ts.map +1 -0
- package/lib/typescript/src/componentes/Chip.d.ts +14 -0
- package/lib/typescript/src/componentes/Chip.d.ts.map +1 -0
- package/lib/typescript/src/componentes/ContenidoDePantalla.d.ts +17 -0
- package/lib/typescript/src/componentes/ContenidoDePantalla.d.ts.map +1 -0
- package/lib/typescript/src/componentes/EstadoVacio.d.ts +17 -0
- package/lib/typescript/src/componentes/EstadoVacio.d.ts.map +1 -0
- package/lib/typescript/src/componentes/Foto.d.ts +41 -0
- package/lib/typescript/src/componentes/Foto.d.ts.map +1 -0
- package/lib/typescript/src/componentes/IconoDeRenglon.d.ts +25 -0
- package/lib/typescript/src/componentes/IconoDeRenglon.d.ts.map +1 -0
- package/lib/typescript/src/componentes/Logo.d.ts +13 -0
- package/lib/typescript/src/componentes/Logo.d.ts.map +1 -0
- package/lib/typescript/src/componentes/Nota.d.ts +7 -0
- package/lib/typescript/src/componentes/Nota.d.ts.map +1 -0
- package/lib/typescript/src/componentes/OpcionesExcluyentes.d.ts +14 -0
- package/lib/typescript/src/componentes/OpcionesExcluyentes.d.ts.map +1 -0
- package/lib/typescript/src/componentes/PantallaDeError.d.ts +23 -0
- package/lib/typescript/src/componentes/PantallaDeError.d.ts.map +1 -0
- package/lib/typescript/src/componentes/Pestanas.d.ts +28 -0
- package/lib/typescript/src/componentes/Pestanas.d.ts.map +1 -0
- package/lib/typescript/src/componentes/Rotulo.d.ts +6 -0
- package/lib/typescript/src/componentes/Rotulo.d.ts.map +1 -0
- package/lib/typescript/src/componentes/RotuloDeSeccion.d.ts +20 -0
- package/lib/typescript/src/componentes/RotuloDeSeccion.d.ts.map +1 -0
- package/lib/typescript/src/componentes/Tarjeta.d.ts +15 -0
- package/lib/typescript/src/componentes/Tarjeta.d.ts.map +1 -0
- package/lib/typescript/src/componentes/TarjetaDeDatos.d.ts +13 -0
- package/lib/typescript/src/componentes/TarjetaDeDatos.d.ts.map +1 -0
- package/lib/typescript/src/componentes/TiraDeFotos.d.ts +36 -0
- package/lib/typescript/src/componentes/TiraDeFotos.d.ts.map +1 -0
- package/lib/typescript/src/componentes/VisorDeFoto.d.ts +23 -0
- package/lib/typescript/src/componentes/VisorDeFoto.d.ts.map +1 -0
- package/lib/typescript/src/dialogos/HostDeDialogos.d.ts +14 -0
- package/lib/typescript/src/dialogos/HostDeDialogos.d.ts.map +1 -0
- package/lib/typescript/src/dialogos/dialogos.d.ts +65 -0
- package/lib/typescript/src/dialogos/dialogos.d.ts.map +1 -0
- package/lib/typescript/src/formularios/CampoDeSeleccion.d.ts +22 -0
- package/lib/typescript/src/formularios/CampoDeSeleccion.d.ts.map +1 -0
- package/lib/typescript/src/formularios/SelectorDeOpcion.d.ts +59 -0
- package/lib/typescript/src/formularios/SelectorDeOpcion.d.ts.map +1 -0
- package/lib/typescript/src/formularios/TextoDeAccesoControlado.d.ts +18 -0
- package/lib/typescript/src/formularios/TextoDeAccesoControlado.d.ts.map +1 -0
- package/lib/typescript/src/formularios/campos.d.ts +107 -0
- package/lib/typescript/src/formularios/campos.d.ts.map +1 -0
- package/lib/typescript/src/formularios/controlados.d.ts +29 -0
- package/lib/typescript/src/formularios/controlados.d.ts.map +1 -0
- package/lib/typescript/src/formularios/errores.d.ts +36 -0
- package/lib/typescript/src/formularios/errores.d.ts.map +1 -0
- package/lib/typescript/src/formularios/guardado.d.ts +36 -0
- package/lib/typescript/src/formularios/guardado.d.ts.map +1 -0
- package/lib/typescript/src/formularios/useBusqueda.d.ts +7 -0
- package/lib/typescript/src/formularios/useBusqueda.d.ts.map +1 -0
- package/lib/typescript/src/fotos/elegir.d.ts +58 -0
- package/lib/typescript/src/fotos/elegir.d.ts.map +1 -0
- package/lib/typescript/src/fotos/index.d.ts +3 -0
- package/lib/typescript/src/fotos/index.d.ts.map +1 -0
- package/lib/typescript/src/fotos/reducir.d.ts +32 -0
- package/lib/typescript/src/fotos/reducir.d.ts.map +1 -0
- package/lib/typescript/src/hoja/HojaInferior.d.ts +21 -0
- package/lib/typescript/src/hoja/HojaInferior.d.ts.map +1 -0
- package/lib/typescript/src/hoja/index.d.ts +3 -0
- package/lib/typescript/src/hoja/index.d.ts.map +1 -0
- package/lib/typescript/src/hoja/useMasDeLaFicha.d.ts +27 -0
- package/lib/typescript/src/hoja/useMasDeLaFicha.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +45 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/listas/HojaDeFiltros.d.ts +60 -0
- package/lib/typescript/src/listas/HojaDeFiltros.d.ts.map +1 -0
- package/lib/typescript/src/listas/ListaPaginada.d.ts +39 -0
- package/lib/typescript/src/listas/ListaPaginada.d.ts.map +1 -0
- package/lib/typescript/src/listas/TarjetaDeslizable.d.ts +33 -0
- package/lib/typescript/src/listas/TarjetaDeslizable.d.ts.map +1 -0
- package/lib/typescript/src/listas/paginado.d.ts +16 -0
- package/lib/typescript/src/listas/paginado.d.ts.map +1 -0
- package/lib/typescript/src/listas/piezas.d.ts +135 -0
- package/lib/typescript/src/listas/piezas.d.ts.map +1 -0
- package/lib/typescript/src/navegacion/BarraDePestanas.d.ts +57 -0
- package/lib/typescript/src/navegacion/BarraDePestanas.d.ts.map +1 -0
- package/lib/typescript/src/navegacion/BotonDeBarra.d.ts +15 -0
- package/lib/typescript/src/navegacion/BotonDeBarra.d.ts.map +1 -0
- package/lib/typescript/src/navegacion/encabezado.d.ts +44 -0
- package/lib/typescript/src/navegacion/encabezado.d.ts.map +1 -0
- package/lib/typescript/src/pantallas/PantallaDeAcceso.d.ts +32 -0
- package/lib/typescript/src/pantallas/PantallaDeAcceso.d.ts.map +1 -0
- package/lib/typescript/src/pantallas/PantallaDeEdicion.d.ts +38 -0
- package/lib/typescript/src/pantallas/PantallaDeEdicion.d.ts.map +1 -0
- package/lib/typescript/src/pantallas/PantallaDeFicha.d.ts +35 -0
- package/lib/typescript/src/pantallas/PantallaDeFicha.d.ts.map +1 -0
- package/lib/typescript/src/pantallas/PantallaDePerfil.d.ts +19 -0
- package/lib/typescript/src/pantallas/PantallaDePerfil.d.ts.map +1 -0
- package/lib/typescript/src/tema/ProveedorDeTema.d.ts +32 -0
- package/lib/typescript/src/tema/ProveedorDeTema.d.ts.map +1 -0
- package/lib/typescript/src/tema/estilos.d.ts +31 -0
- package/lib/typescript/src/tema/estilos.d.ts.map +1 -0
- package/lib/typescript/src/tema/fuentes.d.ts +20 -0
- package/lib/typescript/src/tema/fuentes.d.ts.map +1 -0
- package/lib/typescript/src/tema/index.d.ts +6 -0
- package/lib/typescript/src/tema/index.d.ts.map +1 -0
- package/lib/typescript/src/tema/paleta.d.ts +86 -0
- package/lib/typescript/src/tema/paleta.d.ts.map +1 -0
- package/lib/typescript/src/tema/tipografia.d.ts +29 -0
- package/lib/typescript/src/tema/tipografia.d.ts.map +1 -0
- package/lib/typescript/src/texto.d.ts +16 -0
- package/lib/typescript/src/texto.d.ts.map +1 -0
- package/package.json +135 -5
- package/src/componentes/AccionesDelEncabezado.tsx +247 -0
- package/src/componentes/BotonDeAvatar.tsx +59 -0
- package/src/componentes/BotonGrande.tsx +100 -0
- package/src/componentes/CabeceraEmpujada.tsx +69 -0
- package/src/componentes/Chip.tsx +60 -0
- package/src/componentes/ContenidoDePantalla.tsx +53 -0
- package/src/componentes/EstadoVacio.tsx +45 -0
- package/src/componentes/Foto.tsx +92 -0
- package/src/componentes/IconoDeRenglon.tsx +42 -0
- package/src/componentes/Logo.tsx +34 -0
- package/src/componentes/Nota.tsx +37 -0
- package/src/componentes/OpcionesExcluyentes.tsx +62 -0
- package/src/componentes/PantallaDeError.tsx +76 -0
- package/src/componentes/Pestanas.tsx +86 -0
- package/src/componentes/Rotulo.tsx +21 -0
- package/src/componentes/RotuloDeSeccion.tsx +71 -0
- package/src/componentes/Tarjeta.tsx +44 -0
- package/src/componentes/TarjetaDeDatos.tsx +62 -0
- package/src/componentes/TiraDeFotos.tsx +189 -0
- package/src/componentes/VisorDeFoto.tsx +181 -0
- package/src/componentes/logos/bola-blanca.png +0 -0
- package/src/componentes/logos/bola.png +0 -0
- package/src/componentes/logos/logo-blanco.png +0 -0
- package/src/componentes/logos/logo.png +0 -0
- package/src/dialogos/HostDeDialogos.tsx +172 -0
- package/src/dialogos/dialogos.ts +148 -0
- package/src/formularios/CampoDeSeleccion.tsx +46 -0
- package/src/formularios/SelectorDeOpcion.tsx +407 -0
- package/src/formularios/TextoDeAccesoControlado.tsx +72 -0
- package/src/formularios/campos.tsx +483 -0
- package/src/formularios/controlados.tsx +198 -0
- package/src/formularios/errores.ts +105 -0
- package/src/formularios/guardado.ts +76 -0
- package/src/formularios/useBusqueda.ts +19 -0
- package/src/fotos/elegir.ts +194 -0
- package/src/fotos/index.ts +15 -0
- package/src/fotos/reducir.ts +87 -0
- package/src/hoja/HojaInferior.tsx +102 -0
- package/src/hoja/index.ts +4 -0
- package/src/hoja/useMasDeLaFicha.tsx +63 -0
- package/src/index.ts +143 -0
- package/src/listas/HojaDeFiltros.tsx +261 -0
- package/src/listas/ListaPaginada.tsx +117 -0
- package/src/listas/TarjetaDeslizable.tsx +126 -0
- package/src/listas/paginado.ts +15 -0
- package/src/listas/piezas.tsx +594 -0
- package/src/navegacion/BarraDePestanas.tsx +198 -0
- package/src/navegacion/BotonDeBarra.tsx +61 -0
- package/src/navegacion/encabezado.tsx +88 -0
- package/src/pantallas/PantallaDeAcceso.tsx +184 -0
- package/src/pantallas/PantallaDeEdicion.tsx +116 -0
- package/src/pantallas/PantallaDeFicha.tsx +115 -0
- package/src/pantallas/PantallaDePerfil.tsx +126 -0
- package/src/tema/ProveedorDeTema.tsx +150 -0
- package/src/tema/estilos.ts +51 -0
- package/src/tema/fuentes.ts +20 -0
- package/src/tema/index.ts +10 -0
- package/src/tema/paleta.ts +147 -0
- package/src/tema/tipografia.ts +29 -0
- package/src/texto.tsx +44 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type MaterialCommunityIcons from "@expo/vector-icons/MaterialCommunityIcons";
|
|
2
|
+
import type React from "react";
|
|
3
|
+
type NombreDeIcono = React.ComponentProps<typeof MaterialCommunityIcons>["name"];
|
|
4
|
+
/**
|
|
5
|
+
* - `principal`: la acción esperada, en rojo.
|
|
6
|
+
* - `secundario`: otra opción válida, en contorno.
|
|
7
|
+
* - `destructivo`: borra o deshace algo (Deshacer, Descartar, Cerrar sesión), en rojo oscuro.
|
|
8
|
+
* - `cancelar`: no hacer nada, como texto discreto al pie.
|
|
9
|
+
*/
|
|
10
|
+
export type EstiloDeBoton = "principal" | "secundario" | "destructivo" | "cancelar";
|
|
11
|
+
export interface BotonDeDialogo<V> {
|
|
12
|
+
texto: string;
|
|
13
|
+
estilo?: EstiloDeBoton;
|
|
14
|
+
icono?: NombreDeIcono;
|
|
15
|
+
/** Lo que resuelve la promesa de `mostrarDialogo` al tocarlo. */
|
|
16
|
+
valor: V;
|
|
17
|
+
}
|
|
18
|
+
export interface Dialogo<V> {
|
|
19
|
+
titulo: string;
|
|
20
|
+
mensaje?: string;
|
|
21
|
+
icono?: NombreDeIcono;
|
|
22
|
+
botones: BotonDeDialogo<V>[];
|
|
23
|
+
/**
|
|
24
|
+
* Si el botón atrás de Android y el toque fuera de la tarjeta lo cierran (resolviendo
|
|
25
|
+
* `undefined`, como cancelar). Por omisión, sí.
|
|
26
|
+
*/
|
|
27
|
+
cancelable?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Abre un diálogo y espera la respuesta: el `valor` del botón tocado, o `undefined` si se cerró
|
|
31
|
+
* sin elegir (atrás, toque fuera). Si ya hay uno abierto, éste espera su turno: se muestran de uno
|
|
32
|
+
* en uno, en el orden en que llegaron.
|
|
33
|
+
*/
|
|
34
|
+
export declare function mostrarDialogo<V>(dialogo: Dialogo<V>): Promise<V | undefined>;
|
|
35
|
+
/**
|
|
36
|
+
* Una pregunta de sí o no. Resuelve `true` sólo si se tocó el botón de confirmar; cancelar,
|
|
37
|
+
* atrás y el toque fuera dan `false`.
|
|
38
|
+
*/
|
|
39
|
+
export declare function confirmar({ titulo, mensaje, textoConfirmar, textoCancelar, destructivo, icono, }: {
|
|
40
|
+
titulo: string;
|
|
41
|
+
mensaje?: string;
|
|
42
|
+
textoConfirmar: string;
|
|
43
|
+
textoCancelar?: string;
|
|
44
|
+
destructivo?: boolean;
|
|
45
|
+
icono?: NombreDeIcono;
|
|
46
|
+
}): Promise<boolean>;
|
|
47
|
+
/** Un aviso con un solo botón. Resuelve al cerrarse. */
|
|
48
|
+
export declare function avisar({ titulo, mensaje, icono, textoBoton, cancelable, }: {
|
|
49
|
+
titulo: string;
|
|
50
|
+
mensaje?: string;
|
|
51
|
+
icono?: NombreDeIcono;
|
|
52
|
+
textoBoton?: string;
|
|
53
|
+
cancelable?: boolean;
|
|
54
|
+
}): Promise<void>;
|
|
55
|
+
/** El que se está mostrando, o `null`. */
|
|
56
|
+
export declare const dialogoActual: () => Dialogo<unknown> | null;
|
|
57
|
+
export declare function suscribirDialogos(oyente: () => void): () => void;
|
|
58
|
+
/**
|
|
59
|
+
* Cierra `dialogo` con `valor` y pasa al siguiente de la fila. Sólo si `dialogo` sigue siendo el
|
|
60
|
+
* actual: el segundo toque de un doble toque llega con el diálogo que ya se contestó, y sin esta
|
|
61
|
+
* comparación contestaba también el siguiente de la fila sin que el operador lo viera.
|
|
62
|
+
*/
|
|
63
|
+
export declare function responderDialogo(dialogo: Dialogo<unknown>, valor: unknown): void;
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=dialogos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialogos.d.ts","sourceRoot":"","sources":["../../../../src/dialogos/dialogos.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,sBAAsB,MAAM,2CAA2C,CAAC;AACpF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,KAAK,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,aAAa,GAAG,UAAU,CAAC;AAEpF,MAAM,WAAW,cAAc,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,iEAAiE;IACjE,KAAK,EAAE,CAAC,CAAC;CACZ;AAED,MAAM,WAAW,OAAO,CAAC,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAkBD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAQ7E;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,EAC5B,MAAM,EACN,OAAO,EACP,cAAc,EACd,aAA0B,EAC1B,WAAmB,EACnB,KAAK,GACR,EAAE;IACC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;CACzB,GAAG,OAAO,CAAC,OAAO,CAAC,CAenB;AAED,wDAAwD;AACxD,wBAAsB,MAAM,CAAC,EACzB,MAAM,EACN,OAAO,EACP,KAA6B,EAC7B,UAAwB,EACxB,UAAiB,GACpB,EAAE;IACC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhB;AAID,0CAA0C;AAC1C,eAAO,MAAM,aAAa,QAAO,OAAO,CAAC,OAAO,CAAC,GAAG,IAAuC,CAAC;AAE5F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAKhE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAKhF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Opcion, type PropsDeSelectorDeOpcion, type PropsDeSelectorDeVarias } from "./SelectorDeOpcion";
|
|
2
|
+
/**
|
|
3
|
+
* Un campo que se elige de una lista larga —un catálogo del servidor, uno guardado en el
|
|
4
|
+
* teléfono—: `SelectorDeOpcion` con el error del formulario debajo. Es el `ControlledAutocomplete`
|
|
5
|
+
* del portal.
|
|
6
|
+
*
|
|
7
|
+
* Quien lo usa trae las opciones y, si son del servidor, la búsqueda: en una app es su consulta del
|
|
8
|
+
* catálogo (`useBusqueda` para no pedir una vez por letra). Una lista fija se pasa sin `onBuscar`
|
|
9
|
+
* y se filtra sola.
|
|
10
|
+
*/
|
|
11
|
+
export default function CampoDeSeleccion<T extends Opcion>({ error, ...props }: PropsDeSelectorDeOpcion<T> & {
|
|
12
|
+
error?: string;
|
|
13
|
+
}): import("react").JSX.Element;
|
|
14
|
+
/**
|
|
15
|
+
* Lo mismo, pero se eligen varias (los recibos de un concepto, las piezas sobre las que se cobra
|
|
16
|
+
* un porcentaje): `SelectorDeVarias` con el error debajo. El valor es la lista de opciones
|
|
17
|
+
* enteras, igual que el de una es la opción entera.
|
|
18
|
+
*/
|
|
19
|
+
export declare function CampoDeVarias<T extends Opcion>({ error, ...props }: PropsDeSelectorDeVarias<T> & {
|
|
20
|
+
error?: string;
|
|
21
|
+
}): import("react").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=CampoDeSeleccion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CampoDeSeleccion.d.ts","sourceRoot":"","sources":["../../../../src/formularios/CampoDeSeleccion.tsx"],"names":[],"mappings":"AAEA,OAAyB,EAErB,KAAK,MAAM,EACX,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC/B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,EACvD,KAAK,EACL,GAAG,KAAK,EACX,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,+BAOjD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,EAC5C,KAAK,EACL,GAAG,KAAK,EACX,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,+BAOjD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/** Una opción de una lista: lo que se guarda (`value`) y lo que se lee (`label`). */
|
|
3
|
+
export interface Opcion {
|
|
4
|
+
value: number | string;
|
|
5
|
+
label: string;
|
|
6
|
+
}
|
|
7
|
+
/** Lo que tienen en común el selector de una y el de varias: de dónde salen las opciones. */
|
|
8
|
+
interface FuenteDeOpciones<T extends Opcion> {
|
|
9
|
+
etiqueta: string;
|
|
10
|
+
opciones: T[];
|
|
11
|
+
/**
|
|
12
|
+
* Si las opciones las trae el servidor, mientras llegan. Una lista fija (las modalidades, los
|
|
13
|
+
* estados) no lo pasa.
|
|
14
|
+
*/
|
|
15
|
+
cargando?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* El texto de la búsqueda, para que quien llama pida al servidor. **Sin `onBuscar` la lista es
|
|
18
|
+
* fija** y se filtra aquí, por lo que se lee: así una lista de cinco opciones no necesita una
|
|
19
|
+
* consulta ni un estado en la pantalla.
|
|
20
|
+
*/
|
|
21
|
+
texto?: string;
|
|
22
|
+
onBuscar?: (texto: string) => void;
|
|
23
|
+
/** Lo que va debajo del nombre de cada opción (un viaje: sus unidades). */
|
|
24
|
+
detalle?: (opcion: T) => string | null;
|
|
25
|
+
/** Para agrupar las opciones con un rótulo (los viajes esperados primero). */
|
|
26
|
+
grupo?: (opcion: T) => string;
|
|
27
|
+
vacio?: string;
|
|
28
|
+
disabled?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface PropsDeSelectorDeOpcion<T extends Opcion> extends FuenteDeOpciones<T> {
|
|
31
|
+
valor: T | null;
|
|
32
|
+
onElegir: (opcion: T | null) => void;
|
|
33
|
+
/** Si se puede dejar vacío: agrega «Ninguno» arriba de la lista. */
|
|
34
|
+
opcional?: boolean;
|
|
35
|
+
/** Cómo se dice el vacío de `opcional`: «Todos» en un filtro. */
|
|
36
|
+
textoDeNinguno?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface PropsDeSelectorDeVarias<T extends Opcion> extends FuenteDeOpciones<T> {
|
|
39
|
+
valor: T[];
|
|
40
|
+
onElegir: (opciones: T[]) => void;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Un campo que se elige de una lista: el renglón con lo elegido y, al tocarlo, la lista a pantalla
|
|
44
|
+
* completa con su buscador. **A pantalla completa y no un menú**: con la letra al 180% un menú
|
|
45
|
+
* desplegable deja ver dos opciones, y quien la usa elige de pie.
|
|
46
|
+
*/
|
|
47
|
+
export default function SelectorDeOpcion<T extends Opcion>(props: PropsDeSelectorDeOpcion<T>): React.JSX.Element;
|
|
48
|
+
/**
|
|
49
|
+
* Lo mismo que `SelectorDeOpcion`, pero se marcan varias: tocar una la pone o la quita, y la
|
|
50
|
+
* elección se confirma con el botón del pie. Se confirma y no se guarda a cada toque para que
|
|
51
|
+
* salir con la flecha deje lo que había —igual que en el selector de una, donde salir no cambia
|
|
52
|
+
* nada—.
|
|
53
|
+
*
|
|
54
|
+
* Cerrado dice lo elegido separado por comas, que con la letra grande parte en los renglones que
|
|
55
|
+
* haga falta en vez de recortarse.
|
|
56
|
+
*/
|
|
57
|
+
export declare function SelectorDeVarias<T extends Opcion>(props: PropsDeSelectorDeVarias<T>): React.JSX.Element;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=SelectorDeOpcion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectorDeOpcion.d.ts","sourceRoot":"","sources":["../../../../src/formularios/SelectorDeOpcion.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,qFAAqF;AACrF,MAAM,WAAW,MAAM;IACnB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,6FAA6F;AAC7F,UAAU,gBAAgB,CAAC,CAAC,SAAS,MAAM;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,2EAA2E;IAC3E,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC;IACvC,8EAA8E;IAC9E,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IAClF,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IACrC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IAClF,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;CACrC;AAqKD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,qBAuD3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,qBAwDnF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type FieldValues } from "react-hook-form";
|
|
2
|
+
import { type TextInputProps } from "react-native-paper";
|
|
3
|
+
import type { CampoAtado } from "./controlados";
|
|
4
|
+
/**
|
|
5
|
+
* Un campo del login (el usuario, la contraseña), atado a react-hook-form: el `TextInput` de Paper
|
|
6
|
+
* con contorno y la etiqueta que sube al escribir. Con `contrasena`, oculta lo escrito y lleva el
|
|
7
|
+
* ojo para verlo.
|
|
8
|
+
*
|
|
9
|
+
* Es de Paper y no `TextoControlado`, que lleva su rótulo arriba, porque así es la pantalla de
|
|
10
|
+
* entrada de las apps.
|
|
11
|
+
*/
|
|
12
|
+
export default function TextoDeAccesoControlado<T extends FieldValues>({ control, name, etiqueta, contrasena, entrada, }: CampoAtado<T> & {
|
|
13
|
+
etiqueta: string;
|
|
14
|
+
contrasena?: boolean;
|
|
15
|
+
/** Lo demás del `TextInput` de Paper (`autoCapitalize`, `keyboardType`…). */
|
|
16
|
+
entrada?: Partial<TextInputProps>;
|
|
17
|
+
}): import("react").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=TextoDeAccesoControlado.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextoDeAccesoControlado.d.ts","sourceRoot":"","sources":["../../../../src/formularios/TextoDeAccesoControlado.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,CAAC,SAAS,WAAW,EAAE,EACnE,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,UAAkB,EAClB,OAAO,GACV,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACrC,+BAuCA"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type KeyboardTypeOptions } from "react-native";
|
|
3
|
+
/**
|
|
4
|
+
* Los campos de un formulario (un viaje, un tracto, un operador). Cada uno trae su rótulo arriba y
|
|
5
|
+
* su error abajo, para que la pantalla sólo los apile. Son controlados: atados a react-hook-form,
|
|
6
|
+
* van por `controlados.tsx`.
|
|
7
|
+
*/
|
|
8
|
+
/** El error de un campo, en rojo y debajo de él. */
|
|
9
|
+
export declare function ErrorDelCampo({ error }: {
|
|
10
|
+
error?: string;
|
|
11
|
+
}): React.JSX.Element | null;
|
|
12
|
+
/**
|
|
13
|
+
* El marco de un campo: el rótulo arriba, lo que se captura en medio, y debajo la ayuda y el error.
|
|
14
|
+
* Lo usan todos los campos de aquí, y una app lo usa para lo que no es un campo de la casa —una
|
|
15
|
+
* tira de fotos, el renglón de un escáner— sin que se vea distinto de los demás.
|
|
16
|
+
*
|
|
17
|
+
* Sin `etiqueta` no pinta rótulo: el interruptor lleva el suyo adentro.
|
|
18
|
+
*/
|
|
19
|
+
export declare function Campo({ etiqueta, ayuda, error, children, }: {
|
|
20
|
+
etiqueta?: string;
|
|
21
|
+
ayuda?: string;
|
|
22
|
+
error?: string;
|
|
23
|
+
children: React.ReactNode;
|
|
24
|
+
}): React.JSX.Element;
|
|
25
|
+
/**
|
|
26
|
+
* Un texto libre: una referencia (tope de 100), unas instrucciones (varios renglones), un VIN (en
|
|
27
|
+
* mayúsculas) o un año (`teclado="number-pad"`).
|
|
28
|
+
*/
|
|
29
|
+
export declare function CampoDeTexto({ etiqueta, valor, onCambiar, error, multilinea, maximo, placeholder, ayuda, disabled, teclado, mayusculas, }: {
|
|
30
|
+
etiqueta: string;
|
|
31
|
+
valor: string;
|
|
32
|
+
onCambiar: (valor: string) => void;
|
|
33
|
+
error?: string;
|
|
34
|
+
multilinea?: boolean;
|
|
35
|
+
maximo?: number;
|
|
36
|
+
placeholder?: string;
|
|
37
|
+
ayuda?: string;
|
|
38
|
+
disabled?: boolean;
|
|
39
|
+
teclado?: KeyboardTypeOptions;
|
|
40
|
+
/** Cómo pone mayúsculas el teclado; un VIN o una placa, `characters`. */
|
|
41
|
+
mayusculas?: "none" | "sentences" | "words" | "characters";
|
|
42
|
+
}): React.JSX.Element;
|
|
43
|
+
/**
|
|
44
|
+
* Una fecha con su hora: dos botones, el día y la hora, cada uno con el selector del sistema. **La
|
|
45
|
+
* hora es el dato** (contra ella se mide si un viaje va tarde o un equipo está comprometido), así
|
|
46
|
+
* que nunca se manda sólo el día.
|
|
47
|
+
*
|
|
48
|
+
* Vacío, un solo botón «Elegir»: abre el día y, al elegirlo, la hora. Si es `opcional`, «Quitar»
|
|
49
|
+
* lo deja vacío otra vez.
|
|
50
|
+
*/
|
|
51
|
+
export declare function CampoDeFechaHora({ etiqueta, valor, onCambiar, error, opcional, ayuda, }: {
|
|
52
|
+
etiqueta: string;
|
|
53
|
+
valor: Date | null;
|
|
54
|
+
onCambiar: (valor: Date | null) => void;
|
|
55
|
+
error?: string;
|
|
56
|
+
opcional?: boolean;
|
|
57
|
+
ayuda?: string;
|
|
58
|
+
}): React.JSX.Element;
|
|
59
|
+
/** Un interruptor con su texto y, si hace falta, por qué está como está. */
|
|
60
|
+
export declare function CampoInterruptor({ texto, valor, onCambiar, ayuda, error, disabled, }: {
|
|
61
|
+
texto: string;
|
|
62
|
+
valor: boolean;
|
|
63
|
+
onCambiar: (valor: boolean) => void;
|
|
64
|
+
ayuda?: string;
|
|
65
|
+
error?: string;
|
|
66
|
+
disabled?: boolean;
|
|
67
|
+
}): React.JSX.Element;
|
|
68
|
+
/**
|
|
69
|
+
* Una fecha sin hora (un nacimiento, el fin de una renta): un botón con el selector del sistema.
|
|
70
|
+
* El valor es el de la API, `YYYY-MM-DD`, para no pasar por una zona horaria que lo corra un día.
|
|
71
|
+
*/
|
|
72
|
+
export declare function CampoDeFecha({ etiqueta, valor, onCambiar, error, opcional, ayuda, }: {
|
|
73
|
+
etiqueta: string;
|
|
74
|
+
valor: string | null;
|
|
75
|
+
onCambiar: (valor: string | null) => void;
|
|
76
|
+
error?: string;
|
|
77
|
+
opcional?: boolean;
|
|
78
|
+
ayuda?: string;
|
|
79
|
+
}): React.JSX.Element;
|
|
80
|
+
/**
|
|
81
|
+
* Una de pocas opciones fijas (la cabina, la propiedad, la longitud): todas a la vista, una por
|
|
82
|
+
* renglón, en vez de un menú que con la letra al 180% deja ver dos.
|
|
83
|
+
*/
|
|
84
|
+
export declare function CampoDeOpciones<V extends string>({ etiqueta, opciones, valor, onElegir, error, ayuda, }: {
|
|
85
|
+
etiqueta: string;
|
|
86
|
+
opciones: readonly {
|
|
87
|
+
value: V;
|
|
88
|
+
label: string;
|
|
89
|
+
}[];
|
|
90
|
+
valor: V | null;
|
|
91
|
+
onElegir: (valor: V) => void;
|
|
92
|
+
error?: string;
|
|
93
|
+
ayuda?: string;
|
|
94
|
+
}): React.JSX.Element;
|
|
95
|
+
/**
|
|
96
|
+
* Un teléfono, como el `ControlledPhoneNumber` del portal: la lada (México o Estados Unidos) y los
|
|
97
|
+
* diez dígitos. El valor es el del servidor (`PhoneNumberField`), en E.164: `+526641234567`; vacío
|
|
98
|
+
* es `null`.
|
|
99
|
+
*/
|
|
100
|
+
export declare function CampoDeTelefono({ etiqueta, valor, onCambiar, error, ayuda, }: {
|
|
101
|
+
etiqueta: string;
|
|
102
|
+
valor: string | null;
|
|
103
|
+
onCambiar: (valor: string | null) => void;
|
|
104
|
+
error?: string;
|
|
105
|
+
ayuda?: string;
|
|
106
|
+
}): React.JSX.Element;
|
|
107
|
+
//# sourceMappingURL=campos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campos.d.ts","sourceRoot":"","sources":["../../../../src/formularios/campos.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type Control, type FieldValues, type Path } from "react-hook-form";
|
|
3
|
+
import CampoDeSeleccion, { CampoDeVarias } from "./CampoDeSeleccion";
|
|
4
|
+
import { CampoDeFecha, CampoDeFechaHora, CampoDeOpciones, CampoDeTelefono, CampoDeTexto, CampoInterruptor } from "./campos";
|
|
5
|
+
import type { Opcion } from "./SelectorDeOpcion";
|
|
6
|
+
/**
|
|
7
|
+
* Los campos de `campos.tsx` ya atados a un formulario de react-hook-form: reciben `control` y
|
|
8
|
+
* `name` y se cuelgan su valor y su error. Así un formulario largo (un tracto, una caja, un
|
|
9
|
+
* operador) es una lista de campos y no una de `Controller`.
|
|
10
|
+
*
|
|
11
|
+
* Un campo propio de una app (un catálogo de su API, una dirección) se ata igual, con `CampoAtado`
|
|
12
|
+
* y `SinValor`.
|
|
13
|
+
*/
|
|
14
|
+
/** Lo que un campo controlado recibe para atarse al formulario. */
|
|
15
|
+
export interface CampoAtado<T extends FieldValues> {
|
|
16
|
+
control: Control<T>;
|
|
17
|
+
name: Path<T>;
|
|
18
|
+
}
|
|
19
|
+
/** Las props de un campo sin lo que pone el `Controller`. */
|
|
20
|
+
export type SinValor<P> = Omit<P, "valor" | "onCambiar" | "onElegir" | "error">;
|
|
21
|
+
export declare function TextoControlado<T extends FieldValues>({ control, name, ...props }: CampoAtado<T> & SinValor<React.ComponentProps<typeof CampoDeTexto>>): React.JSX.Element;
|
|
22
|
+
export declare function InterruptorControlado<T extends FieldValues>({ control, name, ...props }: CampoAtado<T> & SinValor<React.ComponentProps<typeof CampoInterruptor>>): React.JSX.Element;
|
|
23
|
+
export declare function FechaControlada<T extends FieldValues>({ control, name, ...props }: CampoAtado<T> & SinValor<React.ComponentProps<typeof CampoDeFecha>>): React.JSX.Element;
|
|
24
|
+
export declare function FechaHoraControlada<T extends FieldValues>({ control, name, ...props }: CampoAtado<T> & SinValor<React.ComponentProps<typeof CampoDeFechaHora>>): React.JSX.Element;
|
|
25
|
+
export declare function OpcionesControladas<T extends FieldValues, V extends string>({ control, name, ...props }: CampoAtado<T> & SinValor<React.ComponentProps<typeof CampoDeOpciones<V>>>): React.JSX.Element;
|
|
26
|
+
export declare function SeleccionControlada<T extends FieldValues, O extends Opcion>({ control, name, ...props }: CampoAtado<T> & SinValor<React.ComponentProps<typeof CampoDeSeleccion<O>>>): React.JSX.Element;
|
|
27
|
+
export declare function TelefonoControlado<T extends FieldValues>({ control, name, ...props }: CampoAtado<T> & SinValor<React.ComponentProps<typeof CampoDeTelefono>>): React.JSX.Element;
|
|
28
|
+
export declare function VariasControladas<T extends FieldValues, O extends Opcion>({ control, name, ...props }: CampoAtado<T> & SinValor<React.ComponentProps<typeof CampoDeVarias<O>>>): React.JSX.Element;
|
|
29
|
+
//# sourceMappingURL=controlados.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlados.d.ts","sourceRoot":"","sources":["../../../../src/formularios/controlados.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El mensaje que el backend mandó, listo para enseñárselo al usuario.
|
|
3
|
+
*
|
|
4
|
+
* Los errores de los backends de ACV salen de `drf_simple_api_errors`, que responde
|
|
5
|
+
* `{ title, detail?: string[], invalid_params?: [{ name, reason: string[] }] }`. Llegan en dos
|
|
6
|
+
* formas y se leen las dos:
|
|
7
|
+
*
|
|
8
|
+
* - `detail`: los errores de regla, que no cuelgan de un campo (el orden de los pasos, «falta lo
|
|
9
|
+
* que la acción pide»). Si vienen varios se juntan todos, uno por renglón: enseñar sólo el
|
|
10
|
+
* primero obligaba a corregir y reintentar para descubrir el siguiente.
|
|
11
|
+
* - `invalid_params`: los de un campo (`clave`, `lng`, `fecha_real`), cada uno con su motivo.
|
|
12
|
+
*
|
|
13
|
+
* `title` es la etiqueta del tipo de error («Validation error.»), que sola no le dice nada a
|
|
14
|
+
* nadie: sólo se usa si no hay nada más.
|
|
15
|
+
*
|
|
16
|
+
* Sirve para el feedback de una acción —un aviso, Pendientes—, no para pintar errores en los
|
|
17
|
+
* campos de un formulario: eso lo hace `setErrors` con `invalid_params`.
|
|
18
|
+
*/
|
|
19
|
+
export declare const mensajeDeError: (error: any, fallback: string) => string;
|
|
20
|
+
/**
|
|
21
|
+
* Vuelca los motivos de un 400 sobre los campos del formulario.
|
|
22
|
+
*
|
|
23
|
+
* El backend responde en RFC 7807 (`invalid_params: [{ name, reason }]`). Un campo suelto trae
|
|
24
|
+
* su motivo como lista de textos y se cuelga de su nombre tal cual. Una **lista editable**
|
|
25
|
+
* (`useFieldArray`) trae en su lugar un objeto por renglón —vacío si ese
|
|
26
|
+
* renglón está bien—, que es como DRF reporta un serializador anidado `many=True`; ahí el motivo
|
|
27
|
+
* va a `lista.<índice>.<campo>`, que es justo como se llaman los inputs de la fila, para que se
|
|
28
|
+
* pinte sobre el campo que falla.
|
|
29
|
+
*
|
|
30
|
+
* Sin ese segundo caso el error quedaba a nombre de la lista entera, donde no hay ningún input
|
|
31
|
+
* registrado: quien capturaba sólo veía el aviso genérico de que no se pudo guardar. Es la misma
|
|
32
|
+
* traducción que hace el portal (`setErrors` de @acvl/frontend-components), así que la forma de
|
|
33
|
+
* la respuesta es una sola para los dos clientes.
|
|
34
|
+
*/
|
|
35
|
+
export declare const setErrors: (form: any, error: any) => void;
|
|
36
|
+
//# sourceMappingURL=errores.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errores.d.ts","sourceRoot":"","sources":["../../../../src/formularios/errores.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,GAAG,EAAE,UAAU,MAAM,KAAG,MAoC7D,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,GAAG,EAAE,OAAO,GAAG,SA8B9C,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { FieldValues, UseFormReturn } from "react-hook-form";
|
|
2
|
+
/**
|
|
3
|
+
* Lo que comparten los formularios de edición: cómo se compara lo capturado contra lo que vino,
|
|
4
|
+
* cómo se lee un rechazo del servidor y cómo se guarda.
|
|
5
|
+
*/
|
|
6
|
+
/** Un texto anulable como se manda: sin espacios a los lados, y vacío es `null`. */
|
|
7
|
+
export declare const textoONulo: (texto: string | null | undefined) => string | null;
|
|
8
|
+
/** Una fecha como se manda: ISO **con su hora** (la hora es el dato), o `null`. */
|
|
9
|
+
export declare const isoONulo: (fecha: Date | null) => string | null;
|
|
10
|
+
/** Una fecha del servidor como la captura el formulario. */
|
|
11
|
+
export declare const fechaONula: (iso: string | null | undefined) => Date | null;
|
|
12
|
+
/** Si dos instantes son el mismo; dos nulos también lo son. */
|
|
13
|
+
export declare const mismoInstante: (a: Date | null, b: Date | null) => boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Cuelga de cada campo el motivo con el que el servidor lo rechazó (`invalid_params`). Sólo si
|
|
16
|
+
* vienen como lista: un 400 de regla trae `detail` y `invalid_params` nulo, y `setErrors` no lo
|
|
17
|
+
* aguanta. Lo que no es de un campo lo dice quien llama, con `mensajeDeError`.
|
|
18
|
+
*/
|
|
19
|
+
export declare const volcarErrores: <T extends FieldValues>(form: UseFormReturn<T>, error: unknown) => void;
|
|
20
|
+
/**
|
|
21
|
+
* Guardar un formulario de edición, igual en todos: si nada cambió, sólo se regresa; si el
|
|
22
|
+
* servidor lo rechaza, cada motivo se cuelga de su campo (`volcarErrores`), el mensaje queda
|
|
23
|
+
* abajo del formulario (`error`) y se avisa. Al guardar, regresa a la pantalla de antes.
|
|
24
|
+
*/
|
|
25
|
+
export declare function useGuardado<T extends FieldValues>(form: UseFormReturn<T>): {
|
|
26
|
+
error: string | null;
|
|
27
|
+
guardar: (cambios: object, mandar: () => Promise<unknown>) => Promise<void>;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* De dos cuerpos completos —lo que se mandaría con lo que vino y con lo capturado—, sólo las
|
|
31
|
+
* llaves que cambiaron, como el `formParser` del portal: un `PATCH` con todo pisaría lo que alguien
|
|
32
|
+
* cambió en el portal mientras la pantalla estaba abierta. Compara por valor (`JSON`), así que
|
|
33
|
+
* sirve con listas y objetos (los contactos, una dirección).
|
|
34
|
+
*/
|
|
35
|
+
export declare const soloLoQueCambio: <T extends Record<string, unknown>>(antes: T, despues: T) => Partial<T>;
|
|
36
|
+
//# sourceMappingURL=guardado.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardado.d.ts","sourceRoot":"","sources":["../../../../src/formularios/guardado.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIlE;;;GAGG;AAEH,oFAAoF;AACpF,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,MAAM,GAAG,IAGtE,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,QAAQ,GAAI,OAAO,IAAI,GAAG,IAAI,KAAG,MAAM,GAAG,IAA4C,CAAC;AAEpG,4DAA4D;AAC5D,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,IAAI,GAAG,IACrC,CAAC;AAE/B,+DAA+D;AAC/D,eAAO,MAAM,aAAa,GAAI,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,KAAG,OACV,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,WAAW,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,OAAO,SAG1F,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;;uBAErC,MAAM,UAAU,MAAM,OAAO,CAAC,OAAO,CAAC;EAiBzE;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,KAK9E,OAAO,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Un buscador que pide al servidor: `[texto, busqueda, setTexto]`. `texto` es lo escrito, al
|
|
3
|
+
* momento, para el campo; `busqueda` es lo mismo sin espacios a los lados y **300 ms después de la
|
|
4
|
+
* última tecla**, para la consulta.
|
|
5
|
+
*/
|
|
6
|
+
export declare function useBusqueda(): [string, string, (texto: string) => void];
|
|
7
|
+
//# sourceMappingURL=useBusqueda.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBusqueda.d.ts","sourceRoot":"","sources":["../../../../src/formularios/useBusqueda.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,CAQvE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** Lo elegido: dónde está en el teléfono, su nombre, su tipo y si es una foto. */
|
|
2
|
+
export interface ArchivoElegido {
|
|
3
|
+
uri: string;
|
|
4
|
+
nombre: string;
|
|
5
|
+
tipo: string;
|
|
6
|
+
esFoto: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** El tope de un archivo en el servidor (`ConArchivoSubido.TAMANO_MAXIMO`): 25 MB. */
|
|
9
|
+
export declare const TAMANO_MAXIMO_BYTES: number;
|
|
10
|
+
/**
|
|
11
|
+
* Lo que el servidor acepta de un adjunto (`core/shared/serializers.py`): PDF, imágenes y hojas de
|
|
12
|
+
* cálculo. Lo demás ni se ofrece en el selector.
|
|
13
|
+
*/
|
|
14
|
+
export declare const TIPOS_DE_ADJUNTO: string[];
|
|
15
|
+
/** Para qué se pide la cámara, dicho a quien la usa. */
|
|
16
|
+
export interface PermisoDeCamara {
|
|
17
|
+
/** «tomar las fotos de evidencia»: va en «Para …, activa la cámara en los ajustes». */
|
|
18
|
+
para: string;
|
|
19
|
+
/**
|
|
20
|
+
* Lo que se explica antes del diálogo del sistema la primera vez: por qué y cuándo se usa. Sin
|
|
21
|
+
* esto, va directo al del sistema.
|
|
22
|
+
*/
|
|
23
|
+
explicacion?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* El permiso de la cámara. Si ya se negó para siempre, se dice dónde activarlo; si nunca se ha
|
|
27
|
+
* pedido, primero la explicación de la app (si hay) y luego el diálogo del sistema.
|
|
28
|
+
*/
|
|
29
|
+
export declare function pedirPermisoDeCamara({ para, explicacion, }: PermisoDeCamara): Promise<boolean>;
|
|
30
|
+
/** Una foto con la cámara, con su permiso. Vacío si no hubo permiso o se canceló. */
|
|
31
|
+
export declare function tomarFoto(permiso: PermisoDeCamara): Promise<ArchivoElegido[]>;
|
|
32
|
+
/**
|
|
33
|
+
* De la galería. En Android el selector de fotos del sistema no pide permiso de almacenamiento,
|
|
34
|
+
* así que no hay explicación previa que dar.
|
|
35
|
+
*/
|
|
36
|
+
export declare function elegirDeGaleria({ varias }?: {
|
|
37
|
+
varias?: boolean | undefined;
|
|
38
|
+
}): Promise<ArchivoElegido[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Documentos (un PDF, una foto ya escaneada). Uno más pesado que el tope del servidor se rechaza al
|
|
41
|
+
* subirlo, así que se avisa aquí y se deja fuera. Una imagen adjuntada como archivo también se
|
|
42
|
+
* reduce, igual que una de la cámara.
|
|
43
|
+
*/
|
|
44
|
+
export declare function elegirDocumentos({ tipos, varias, tamanoMaximo, }?: {
|
|
45
|
+
tipos?: string[];
|
|
46
|
+
varias?: boolean;
|
|
47
|
+
tamanoMaximo?: number;
|
|
48
|
+
}): Promise<ArchivoElegido[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Pregunta de dónde (cámara, galería o un documento) y elige uno. Contesta `null` si se canceló en
|
|
51
|
+
* cualquier paso o el archivo no se puede subir (y ya se dijo por qué).
|
|
52
|
+
*/
|
|
53
|
+
export declare function elegirAdjunto({ titulo, permiso, tipos, }: {
|
|
54
|
+
titulo?: string;
|
|
55
|
+
permiso: PermisoDeCamara;
|
|
56
|
+
tipos?: string[];
|
|
57
|
+
}): Promise<ArchivoElegido | null>;
|
|
58
|
+
//# sourceMappingURL=elegir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elegir.d.ts","sourceRoot":"","sources":["../../../../src/fotos/elegir.ts"],"names":[],"mappings":"AASA,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,UAM5B,CAAC;AAEF,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC5B,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EACvC,IAAI,EACJ,WAAW,GACd,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBpC;AAiBD,qFAAqF;AACrF,wBAAsB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAInF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,EAAE,MAAc,EAAE;;CAAK,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAOxF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EACnC,KAAwB,EACxB,MAAc,EACd,YAAkC,GACrC,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA4BhG;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,EAChC,MAA2B,EAC3B,OAAO,EACP,KAAK,GACR,EAAE;IACC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAmCjC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { elegirAdjunto, elegirDeGaleria, elegirDocumentos, pedirPermisoDeCamara, TAMANO_MAXIMO_BYTES, TIPOS_DE_ADJUNTO, tomarFoto, type ArchivoElegido, type PermisoDeCamara, } from "./elegir";
|
|
2
|
+
export { LADO_MAXIMO, reducirFoto, reducirImagenAdjunta } from "./reducir";
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fotos/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,eAAe,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ImagePickerAsset } from "expo-image-picker";
|
|
2
|
+
/**
|
|
3
|
+
* Lado más largo con el que se sube una foto. Es el mismo con el que el backend la guarda
|
|
4
|
+
* (`MAX_DIMENSION` en `core/shared/fields.py`): arriba de eso los píxeles viajan para que el
|
|
5
|
+
* servidor los tire.
|
|
6
|
+
*/
|
|
7
|
+
export declare const LADO_MAXIMO = 1920;
|
|
8
|
+
/**
|
|
9
|
+
* La foto con su lado más largo en `LADO_MAXIMO` y codificada en JPEG.
|
|
10
|
+
*
|
|
11
|
+
* Una foto de la cámara (12 MP o más) pesa de 2 a 5 MB, y se sube con la señal que haya en el
|
|
12
|
+
* camino o en el patio: reducida pesa unos cientos de KB, sale antes y no se pasa del tope
|
|
13
|
+
* de tamaño del servidor. El servidor no pierde nada, porque de todos modos la guarda a 1920 px.
|
|
14
|
+
*
|
|
15
|
+
* Falla en blando: si no se puede reducir, se guarda la original —pesa más, pero es mejor que
|
|
16
|
+
* perder la foto que se acaba de tomar—.
|
|
17
|
+
*/
|
|
18
|
+
export declare function reducirFoto(asset: ImagePickerAsset): Promise<ImagePickerAsset>;
|
|
19
|
+
/**
|
|
20
|
+
* Lo mismo para una imagen adjuntada como archivo (`DocumentPicker`), que no trae sus medidas: se
|
|
21
|
+
* leen del archivo y se reduce como una foto. Si no se pueden leer, se guarda la original.
|
|
22
|
+
*/
|
|
23
|
+
export declare function reducirImagenAdjunta(archivo: {
|
|
24
|
+
uri: string;
|
|
25
|
+
nombre: string;
|
|
26
|
+
tipo: string;
|
|
27
|
+
}): Promise<{
|
|
28
|
+
uri: string;
|
|
29
|
+
nombre: string;
|
|
30
|
+
tipo: string;
|
|
31
|
+
}>;
|
|
32
|
+
//# sourceMappingURL=reducir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reducir.d.ts","sourceRoot":"","sources":["../../../../src/fotos/reducir.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG1D;;;;GAIG;AACH,eAAO,MAAM,WAAW,OAAO,CAAC;AAKhC;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+BpF;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAoBzD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Una hoja que sube desde abajo sobre una ficha, para lo que se consulta y se cierra sin salir
|
|
4
|
+
* de ella: los hitos de un tramo, las excepciones, las comisiones. **Mide lo que
|
|
5
|
+
* su contenido**, hasta `ALTO_MAXIMO` de la pantalla; lo demás se recorre adentro.
|
|
6
|
+
*
|
|
7
|
+
* Se cierra deslizándola, tocando el velo de atrás o con atrás. Va **dentro de la pantalla** (no
|
|
8
|
+
* es un modal): en una ficha empujada no hay barra de pestañas que librar. Donde sí la hay (un
|
|
9
|
+
* mapa en una pestaña), la hoja es de la app.
|
|
10
|
+
*
|
|
11
|
+
* Está en `@acvl/mobile-components/hoja` y no en la entrada principal: usa `@gorhom/bottom-sheet`,
|
|
12
|
+
* que sólo instala la app que la usa.
|
|
13
|
+
*/
|
|
14
|
+
export default function HojaInferior({ abierta, onCerrar, titulo, subtitulo, children, }: {
|
|
15
|
+
abierta: boolean;
|
|
16
|
+
onCerrar: () => void;
|
|
17
|
+
titulo: string;
|
|
18
|
+
subtitulo?: string | null;
|
|
19
|
+
children: React.ReactNode;
|
|
20
|
+
}): React.JSX.Element;
|
|
21
|
+
//# sourceMappingURL=HojaInferior.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HojaInferior.d.ts","sourceRoot":"","sources":["../../../../src/hoja/HojaInferior.tsx"],"names":[],"mappings":"AAOA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAOjD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACjC,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,QAAQ,GACX,EAAE;IACC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,qBAkDA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hoja/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import MaterialCommunityIcons from "@expo/vector-icons/MaterialCommunityIcons";
|
|
2
|
+
import React from "react";
|
|
3
|
+
/** Una lista de «Más»: su renglón con contador y lo que abre en la hoja. */
|
|
4
|
+
export interface ListaDeLaFicha {
|
|
5
|
+
clave: string;
|
|
6
|
+
titulo: string;
|
|
7
|
+
icono: React.ComponentProps<typeof MaterialCommunityIcons>["name"];
|
|
8
|
+
/** `null` mientras se cuenta. */
|
|
9
|
+
cuantos: number | null;
|
|
10
|
+
/** Lo que acompaña al número: «2 vencidas», «1 pendiente». */
|
|
11
|
+
detalle?: string | null;
|
|
12
|
+
/** Lo que enseña la hoja; sólo se monta abierta. */
|
|
13
|
+
contenido: React.ReactNode;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* «Más» de una ficha (un tracto, un cliente): lo que cuelga de ella, un renglón con cuántos hay
|
|
17
|
+
* que abre su hoja desde abajo (`HojaInferior`). Devuelve la sección (`seccion`, dentro del
|
|
18
|
+
* scroll) y la hoja (`hoja`, encima de la ficha, en `PantallaDeFicha.encima`).
|
|
19
|
+
*
|
|
20
|
+
* Quien llama pasa sólo las listas que se ven (cada una con su permiso); sin ninguna, la sección
|
|
21
|
+
* no se pinta.
|
|
22
|
+
*/
|
|
23
|
+
export declare function useMasDeLaFicha(listas: ListaDeLaFicha[], subtitulo?: string): {
|
|
24
|
+
seccion: React.JSX.Element | null;
|
|
25
|
+
hoja: React.JSX.Element;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=useMasDeLaFicha.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMasDeLaFicha.d.ts","sourceRoot":"","sources":["../../../../src/hoja/useMasDeLaFicha.tsx"],"names":[],"mappings":"AACA,OAAO,sBAAsB,MAAM,2CAA2C,CAAC;AAC/E,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;IACnE,iCAAiC;IACjC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,oDAAoD;IACpD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM;;;EAoC3E"}
|