@acvl/mobile-components 0.0.0-stage → 0.0.2
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 +147 -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/camara/CampoDeFotos.js +124 -0
- package/lib/module/camara/CampoDeFotos.js.map +1 -0
- package/lib/module/camara/elegir.js +104 -0
- package/lib/module/camara/elegir.js.map +1 -0
- package/lib/module/camara/index.js +10 -0
- package/lib/module/camara/index.js.map +1 -0
- package/lib/module/camara/reducir.js +93 -0
- package/lib/module/camara/reducir.js.map +1 -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 +63 -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 +72 -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 +501 -0
- package/lib/module/formularios/campos.js.map +1 -0
- package/lib/module/formularios/controlados.js +199 -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 +105 -0
- package/lib/module/fotos/elegir.js.map +1 -0
- package/lib/module/fotos/index.js +9 -0
- package/lib/module/fotos/index.js.map +1 -0
- package/lib/module/hoja/HojaDeLista.js +211 -0
- package/lib/module/hoja/HojaDeLista.js.map +1 -0
- package/lib/module/hoja/HojaInferior.js +112 -0
- package/lib/module/hoja/HojaInferior.js.map +1 -0
- package/lib/module/hoja/index.js +8 -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 +67 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/listas/HojaDeFiltros.js +270 -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 +666 -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/PantallaDeHistorial.js +328 -0
- package/lib/module/pantallas/PantallaDeHistorial.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/camara/CampoDeFotos.d.ts +30 -0
- package/lib/typescript/src/camara/CampoDeFotos.d.ts.map +1 -0
- package/lib/typescript/src/camara/elegir.d.ts +47 -0
- package/lib/typescript/src/camara/elegir.d.ts.map +1 -0
- package/lib/typescript/src/camara/index.d.ts +4 -0
- package/lib/typescript/src/camara/index.d.ts.map +1 -0
- package/lib/typescript/src/camara/reducir.d.ts +32 -0
- package/lib/typescript/src/camara/reducir.d.ts.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 +25 -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 +24 -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 +113 -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 +28 -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/hoja/HojaDeLista.d.ts +50 -0
- package/lib/typescript/src/hoja/HojaDeLista.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 +4 -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 +46 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/listas/HojaDeFiltros.d.ts +76 -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 +157 -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/PantallaDeHistorial.d.ts +65 -0
- package/lib/typescript/src/pantallas/PantallaDeHistorial.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 +140 -5
- package/src/camara/CampoDeFotos.tsx +132 -0
- package/src/camara/elegir.ts +113 -0
- package/src/camara/index.ts +15 -0
- package/src/camara/reducir.ts +87 -0
- 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 +58 -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 +60 -0
- package/src/formularios/SelectorDeOpcion.tsx +407 -0
- package/src/formularios/TextoDeAccesoControlado.tsx +72 -0
- package/src/formularios/campos.tsx +497 -0
- package/src/formularios/controlados.tsx +200 -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 +116 -0
- package/src/fotos/index.ts +6 -0
- package/src/hoja/HojaDeLista.tsx +214 -0
- package/src/hoja/HojaInferior.tsx +103 -0
- package/src/hoja/index.ts +5 -0
- package/src/hoja/useMasDeLaFicha.tsx +63 -0
- package/src/index.ts +151 -0
- package/src/listas/HojaDeFiltros.tsx +286 -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 +670 -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/PantallaDeHistorial.tsx +293 -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 React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Un movimiento de la bitácora de un registro, como lo responde cualquier endpoint `historial/`
|
|
4
|
+
* de los backends de ACV (`BaseHistorySerializer`): el registro **entero** como quedó, con quién,
|
|
5
|
+
* cuándo y qué campos cambiaron.
|
|
6
|
+
*/
|
|
7
|
+
export interface EventoDeHistorial {
|
|
8
|
+
/** Ya redactado por el backend: «Actualización - Concepto de Orden de envío». */
|
|
9
|
+
history_type: string;
|
|
10
|
+
/** El nombre completo de quien lo hizo; nulo si lo movió el sistema. */
|
|
11
|
+
history_user: string | null;
|
|
12
|
+
/** ISO en UTC. */
|
|
13
|
+
history_date: string;
|
|
14
|
+
/** Los que cambiaron en este paso; nulo en la creación, que no tiene contra qué compararse. */
|
|
15
|
+
campos_con_cambios: string[] | null;
|
|
16
|
+
[campo: string]: unknown;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Lo que devuelve cualquier endpoint `historial/`: la línea de tiempo, del más nuevo al más viejo,
|
|
20
|
+
* y aparte cómo se llama cada campo. Las etiquetas son además el filtro de qué se pinta: un campo
|
|
21
|
+
* sin etiqueta es de los internos de la bitácora.
|
|
22
|
+
*/
|
|
23
|
+
export interface Historial {
|
|
24
|
+
history: EventoDeHistorial[];
|
|
25
|
+
labels: Record<string, string>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Un movimiento.
|
|
29
|
+
*
|
|
30
|
+
* De entrada enseña sólo lo que cambió en ese paso: el evento trae el registro entero como quedó, y
|
|
31
|
+
* en un teléfono treinta campos por tarjeta esconden el que importa. El resto está a un toque, que
|
|
32
|
+
* es donde se va a buscar el dato que no se movió.
|
|
33
|
+
*/
|
|
34
|
+
export declare function TarjetaDeEvento({ evento, labels, }: {
|
|
35
|
+
evento: EventoDeHistorial;
|
|
36
|
+
labels: Record<string, string>;
|
|
37
|
+
}): React.JSX.Element;
|
|
38
|
+
/** Lo que la pantalla lee de un `use…Query` de RTK Query. */
|
|
39
|
+
interface ConsultaDeHistorial {
|
|
40
|
+
data?: Historial;
|
|
41
|
+
isLoading: boolean;
|
|
42
|
+
isFetching: boolean;
|
|
43
|
+
isError: boolean;
|
|
44
|
+
refetch: () => unknown;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* La bitácora de un registro: quién lo movió, cuándo y qué le cambió. Es el panel de historial del
|
|
48
|
+
* portal, que allá se acopla al costado de la ficha; en el teléfono no hay costado, así que es una
|
|
49
|
+
* pantalla empujada a la que se llega desde las acciones de la ficha.
|
|
50
|
+
*
|
|
51
|
+
* Quien la usa pone la consulta (de dónde se pide, con su permiso). Conviene pedirla con
|
|
52
|
+
* `refetchOnMountOrArgChange`: se abre justo después de mover algo, y servir la caché enseñaría un
|
|
53
|
+
* historial sin el movimiento que se viene a comprobar.
|
|
54
|
+
*
|
|
55
|
+
* En varios registros el backend mezcla en una sola línea de tiempo el registro y lo que cuelga de
|
|
56
|
+
* él (una orden con sus conceptos, un embarque con su transporte); por eso cada tarjeta dice de qué
|
|
57
|
+
* registro habla.
|
|
58
|
+
*/
|
|
59
|
+
export default function PantallaDeHistorial({ eyebrow, consulta, }: {
|
|
60
|
+
/** De qué registro es: «Recibo R-0012». */
|
|
61
|
+
eyebrow: string;
|
|
62
|
+
consulta: ConsultaDeHistorial;
|
|
63
|
+
}): React.JSX.Element;
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=PantallaDeHistorial.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PantallaDeHistorial.d.ts","sourceRoot":"","sources":["../../../../src/pantallas/PantallaDeHistorial.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAC9B,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAoDD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAC5B,MAAM,EACN,MAAM,GACT,EAAE;IACC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,qBAqEA;AAED,6DAA6D;AAC7D,UAAU,mBAAmB;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EACxC,OAAO,EACP,QAAQ,GACX,EAAE;IACC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,mBAAmB,CAAC;CACjC,qBAyDA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* El perfil de una app, igual en todas: quién entró, cómo se ve la app y cerrar sesión. Va
|
|
4
|
+
* empujado encima de las pestañas (lo abre el avatar del header). Necesita `ProveedorDeTema`.
|
|
5
|
+
*
|
|
6
|
+
* Lo propio de cada app va por props: quién es, qué pasa al cerrar sesión (avisar si hay envíos
|
|
7
|
+
* pendientes, confirmar) y, en `children`, lo que vaya al final (la versión instalada).
|
|
8
|
+
*/
|
|
9
|
+
export default function PantallaDePerfil({ rotulo, nombre, subtitulo, onCerrarSesion, saliendo, children, }: {
|
|
10
|
+
/** Qué tipo de sesión es («Operador», «Guardia de caseta»): el rótulo de la cabecera. */
|
|
11
|
+
rotulo: string;
|
|
12
|
+
nombre?: string | null;
|
|
13
|
+
/** El usuario, el número de empleado. */
|
|
14
|
+
subtitulo?: string | null;
|
|
15
|
+
onCerrarSesion: () => void;
|
|
16
|
+
saliendo?: boolean;
|
|
17
|
+
children?: React.ReactNode;
|
|
18
|
+
}): React.JSX.Element;
|
|
19
|
+
//# sourceMappingURL=PantallaDePerfil.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PantallaDePerfil.d.ts","sourceRoot":"","sources":["../../../../src/pantallas/PantallaDePerfil.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AA2B1B;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACrC,MAAM,EACN,MAAM,EACN,SAAS,EACT,cAAc,EACd,QAAgB,EAChB,QAAQ,GACX,EAAE;IACC,yFAAyF;IACzF,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B,qBA4DA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Cómo quiere ver la app quien la usa: **igual que el teléfono** (por omisión), o siempre clara, o
|
|
4
|
+
* siempre oscura. Es del teléfono y no de la cuenta: sobrevive al cerrar sesión.
|
|
5
|
+
*/
|
|
6
|
+
export type PreferenciaDeTema = "sistema" | "claro" | "oscuro";
|
|
7
|
+
/**
|
|
8
|
+
* Dónde guarda cada app la preferencia (SecureStore, AsyncStorage…). `leer` puede devolver
|
|
9
|
+
* cualquier cosa: lo que no sea una preferencia válida cuenta como `"sistema"`.
|
|
10
|
+
*/
|
|
11
|
+
export interface AlmacenDelTema {
|
|
12
|
+
leer: () => Promise<string | null | undefined>;
|
|
13
|
+
guardar: (preferencia: PreferenciaDeTema) => Promise<unknown>;
|
|
14
|
+
}
|
|
15
|
+
type ContextoDelTema = [PreferenciaDeTema, (preferencia: PreferenciaDeTema) => void];
|
|
16
|
+
/**
|
|
17
|
+
* El tema de la app: lee la preferencia guardada, se la impone a lo nativo, y da el tema de Paper,
|
|
18
|
+
* la barra de estado y el fondo de la raíz de ahora. Va en el layout raíz, por encima de todo lo
|
|
19
|
+
* que pinta.
|
|
20
|
+
*
|
|
21
|
+
* **No pinta nada hasta leer la preferencia**: así no se asoma el claro un momento en quien eligió
|
|
22
|
+
* el oscuro. Leerla es una consulta local, no se nota.
|
|
23
|
+
*/
|
|
24
|
+
export declare function ProveedorDeTema({ almacen, children, }: {
|
|
25
|
+
/** Sin almacén, la preferencia dura lo que dure la app abierta. */
|
|
26
|
+
almacen?: AlmacenDelTema;
|
|
27
|
+
children: React.ReactNode;
|
|
28
|
+
}): React.JSX.Element | null;
|
|
29
|
+
/** La preferencia del tema y cómo cambiarla (el perfil). Sólo dentro de `ProveedorDeTema`. */
|
|
30
|
+
export declare function usePreferenciaDeTema(): ContextoDelTema;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=ProveedorDeTema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProveedorDeTema.d.ts","sourceRoot":"","sources":["../../../../src/tema/ProveedorDeTema.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAI/D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjE;AAiDD,KAAK,eAAe,GAAG,CAAC,iBAAiB,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAIrF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAC5B,OAAO,EACP,QAAQ,GACX,EAAE;IACC,mEAAmE;IACnE,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,4BAmDA;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,IAAI,eAAe,CAItD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { StyleSheet } from "react-native";
|
|
2
|
+
import { type Paleta } from "./paleta";
|
|
3
|
+
/**
|
|
4
|
+
* Si la app se ve oscura. Lee `useColorScheme` y no un contexto: `ProveedorDeTema` le impone la
|
|
5
|
+
* preferencia a toda la app nativa (`Appearance.setColorScheme`), así que contesta la elegida, o la
|
|
6
|
+
* del teléfono con «igual que el teléfono». Y así sirve también fuera de los proveedores, en la
|
|
7
|
+
* pantalla de error del layout raíz.
|
|
8
|
+
*/
|
|
9
|
+
export declare const useEsOscuro: () => boolean;
|
|
10
|
+
/** Los colores de ahora (`paleta.ts`). */
|
|
11
|
+
export declare const usePaleta: () => Paleta;
|
|
12
|
+
/**
|
|
13
|
+
* Hojas de estilo que dependen del tema. Se declaran igual que un `StyleSheet.create`, pero con la
|
|
14
|
+
* paleta como argumento, y dan un hook:
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* const useStyles = crearEstilos((c) => ({ caja: { backgroundColor: c.superficie } }));
|
|
18
|
+
* // en el componente:
|
|
19
|
+
* const styles = useStyles();
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Cada hoja se crea una vez por paleta y se guarda: cambiar de tema no la vuelve a crear en cada
|
|
23
|
+
* render.
|
|
24
|
+
*/
|
|
25
|
+
export declare function crearEstilos<T extends StyleSheet.NamedStyles<T>>(fabrica: (c: Paleta) => T): () => T;
|
|
26
|
+
/**
|
|
27
|
+
* El fondo de la raíz nativa (lo que se ve detrás de una transición) sigue al tema: sin esto, al
|
|
28
|
+
* empujar una pantalla en oscuro se asomaba un destello blanco.
|
|
29
|
+
*/
|
|
30
|
+
export declare function useFondoDeLaRaiz(fondo: string): void;
|
|
31
|
+
//# sourceMappingURL=estilos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estilos.d.ts","sourceRoot":"","sources":["../../../../src/tema/estilos.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAkB,MAAM,cAAc,CAAC;AAC1D,OAAO,EAA+B,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAEpE;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,OAAsC,CAAC;AAEtE,0CAA0C;AAC1C,eAAO,MAAM,SAAS,QAAO,MAAwD,CAAC;AAEtF;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,SAEzD,CAAC,CASlC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,QAI7C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La tipografía de iOS es San Francisco —lo que React Native llama `System`— y no se puede
|
|
3
|
+
* llevar a Android: la licencia de Apple la limita a sus plataformas. Android se quedaba con
|
|
4
|
+
* `sans-serif` (Roboto), de ahí que las dos versiones no se parecieran.
|
|
5
|
+
*
|
|
6
|
+
* Inter es el sustituto libre (OFL) más cercano a San Francisco: misma altura de x, mismo
|
|
7
|
+
* aire de fuente de interfaz. Así que Android va con Inter e iOS se queda como está.
|
|
8
|
+
*
|
|
9
|
+
* Los seis cortes —de 400 a 900, que son los pesos que usan las pantallas— vienen en
|
|
10
|
+
* `assets/fonts/` de este paquete y **cada app los registra** como una sola familia en su
|
|
11
|
+
* `app.json` (plugin de expo-font, sección `android.fonts`; ver el README). Al declarar cada peso
|
|
12
|
+
* con su archivo, `fontWeight: "600"` toma el SemiBold de verdad en vez de una negrita sintética.
|
|
13
|
+
* Tocar esa lista obliga a reconstruir el binario, no basta con recargar.
|
|
14
|
+
*/
|
|
15
|
+
export declare const fontFamily: string | undefined;
|
|
16
|
+
/** Familia lista para mezclar en un `style`; `null` donde vale la del sistema. */
|
|
17
|
+
export declare const fuenteBase: {
|
|
18
|
+
fontFamily: string;
|
|
19
|
+
} | null;
|
|
20
|
+
//# sourceMappingURL=fuentes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuentes.d.ts","sourceRoot":"","sources":["../../../../src/tema/fuentes.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,oBAA4D,CAAC;AAEpF,kFAAkF;AAClF,eAAO,MAAM,UAAU;;QAAqC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { crearEstilos, useEsOscuro, useFondoDeLaRaiz, usePaleta } from "./estilos";
|
|
2
|
+
export { fontFamily, fuenteBase } from "./fuentes";
|
|
3
|
+
export { PALETA_CLARA, PALETA_OSCURA, type Paleta } from "./paleta";
|
|
4
|
+
export { ProveedorDeTema, usePreferenciaDeTema, type AlmacenDelTema, type PreferenciaDeTema, } from "./ProveedorDeTema";
|
|
5
|
+
export { renglon, tipografia } from "./tipografia";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EACH,eAAe,EACf,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Los colores de las apps, **uno por cosa y no por tono**: el fondo, la superficie de una tarjeta,
|
|
3
|
+
* el texto, el aviso ámbar. Cada pantalla los toma de aquí (`usePaleta`, `crearEstilos`) y no
|
|
4
|
+
* escribe hexadecimales: así el modo oscuro es cambiar de paleta, no revisar cada pantalla.
|
|
5
|
+
*
|
|
6
|
+
* Los nombres `primary…`/`secondary…` son los del `colors` que traían las apps antes de la paleta,
|
|
7
|
+
* con el mismo sentido. Lo oscuro sigue al portal (`@acvl/frontend-components`, `v1/theme`): fondo
|
|
8
|
+
* `#121212`, papel `#1e1e1e` y el rojo más claro `#ff4a57`, que sobre negro se lee mejor que el de
|
|
9
|
+
* la marca.
|
|
10
|
+
*
|
|
11
|
+
* Lo que se pinta dentro de un mapa (los colores de estado de una flota, un pin) no sale de aquí:
|
|
12
|
+
* tiene que leerse igual sobre claro, oscuro y satélite, y lo escoge cada app.
|
|
13
|
+
*/
|
|
14
|
+
export interface Paleta {
|
|
15
|
+
esOscuro: boolean;
|
|
16
|
+
/** El fondo de la pantalla, detrás de las tarjetas. */
|
|
17
|
+
fondo: string;
|
|
18
|
+
/** Una tarjeta, un campo, una hoja, el header y la barra de pestañas. */
|
|
19
|
+
superficie: string;
|
|
20
|
+
/** Lo que va encima de una superficie y se tiene que distinguir de ella (un campo apagado). */
|
|
21
|
+
superficieTenue: string;
|
|
22
|
+
/** El texto normal. */
|
|
23
|
+
texto: string;
|
|
24
|
+
/** El texto que va sobre el rojo (un botón lleno, el chip «En curso»). */
|
|
25
|
+
sobrePrimario: string;
|
|
26
|
+
/** El velo detrás de un diálogo. */
|
|
27
|
+
velo: string;
|
|
28
|
+
/** La sombra: en oscuro casi no se ve, así que el borde hace su trabajo. */
|
|
29
|
+
sombra: string;
|
|
30
|
+
primary: string;
|
|
31
|
+
primaryLight: string;
|
|
32
|
+
primaryLighter: string;
|
|
33
|
+
primaryDark: string;
|
|
34
|
+
/** El fondo de lo elegido. */
|
|
35
|
+
primaryWash: string;
|
|
36
|
+
/** El texto secundario. */
|
|
37
|
+
secondary: string;
|
|
38
|
+
/** El texto tenue: un placeholder, un icono apagado. */
|
|
39
|
+
secondaryLight: string;
|
|
40
|
+
/** Los bordes y separadores. */
|
|
41
|
+
secondaryLighter: string;
|
|
42
|
+
/** El gris fuerte: un título gris, el texto de un estado vacío. */
|
|
43
|
+
secondaryDark: string;
|
|
44
|
+
secondaryText: string;
|
|
45
|
+
/** El rótulo arriba del título del header. */
|
|
46
|
+
eyebrow: string;
|
|
47
|
+
/**
|
|
48
|
+
* Lo que pide atención sin ser error: pausas, pendientes, avisos. `acento` es el ámbar medio de
|
|
49
|
+
* un borde o una barra; `sobreFuerte`, la letra encima de un relleno `fuerte`.
|
|
50
|
+
*/
|
|
51
|
+
aviso: {
|
|
52
|
+
fondo: string;
|
|
53
|
+
tinta: string;
|
|
54
|
+
fuerte: string;
|
|
55
|
+
acento: string;
|
|
56
|
+
sobreFuerte: string;
|
|
57
|
+
borde: string;
|
|
58
|
+
};
|
|
59
|
+
/** Lo cumplido. */
|
|
60
|
+
exito: {
|
|
61
|
+
fondo: string;
|
|
62
|
+
tinta: string;
|
|
63
|
+
};
|
|
64
|
+
/** Lo informativo. */
|
|
65
|
+
info: {
|
|
66
|
+
fondo: string;
|
|
67
|
+
tinta: string;
|
|
68
|
+
};
|
|
69
|
+
/** Lo que salió mal. */
|
|
70
|
+
error: {
|
|
71
|
+
fondo: string;
|
|
72
|
+
tinta: string;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Un escalón más de un avance que ya usa los otros: en wms, una orden de envío facturada
|
|
76
|
+
* (todavía no pagada, que es el verde) o un recibo entregado a medias. Es el morado que el
|
|
77
|
+
* portal le da a la orden de envío.
|
|
78
|
+
*/
|
|
79
|
+
morado: {
|
|
80
|
+
fondo: string;
|
|
81
|
+
tinta: string;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export declare const PALETA_CLARA: Paleta;
|
|
85
|
+
export declare const PALETA_OSCURA: Paleta;
|
|
86
|
+
//# sourceMappingURL=paleta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paleta.d.ts","sourceRoot":"","sources":["../../../../src/tema/paleta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,MAAM;IACnB,QAAQ,EAAE,OAAO,CAAC;IAElB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,+FAA+F;IAC/F,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IAGf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,KAAK,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,mBAAmB;IACnB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,sBAAsB;IACtB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,wBAAwB;IACxB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC;;;;OAIG;IACH,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,eAAO,MAAM,YAAY,EAAE,MAkC1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAkC3B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Los tamaños de letra de las apps. Son grandes a propósito: quien las usa lee de pie, con prisa, a
|
|
3
|
+
* veces con sol y sin lentes, y la letra chica es donde batalla. **Nada baja de `etiqueta`.** Una
|
|
4
|
+
* pantalla nueva toma de aquí en lugar de inventar su número.
|
|
5
|
+
*/
|
|
6
|
+
export declare const tipografia: {
|
|
7
|
+
/** La acción que toca completar: lo único que tiene que leerse de un vistazo. */
|
|
8
|
+
destacado: number;
|
|
9
|
+
/** El folio y lo que identifica la pantalla. */
|
|
10
|
+
titulo: number;
|
|
11
|
+
/** El nombre de un paso, el cliente: lo que se lee primero dentro de una tarjeta. */
|
|
12
|
+
subtitulo: number;
|
|
13
|
+
/** El texto normal: valores, instrucciones, el lugar. */
|
|
14
|
+
cuerpo: number;
|
|
15
|
+
/** Lo que acompaña: direcciones, el siguiente paso, horas. */
|
|
16
|
+
secundario: number;
|
|
17
|
+
/** Rótulos en mayúsculas, chips y pestañas. El mínimo. */
|
|
18
|
+
etiqueta: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Tamaño y alto de renglón explícito para un texto que lleva un icono al lado. `IconoDeRenglon`
|
|
22
|
+
* usa el mismo alto para centrarse contra el primer renglón; los dos crecen con la escala de
|
|
23
|
+
* letra del sistema.
|
|
24
|
+
*/
|
|
25
|
+
export declare const renglon: (fontSize: number) => {
|
|
26
|
+
fontSize: number;
|
|
27
|
+
lineHeight: number;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=tipografia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tipografia.d.ts","sourceRoot":"","sources":["../../../../src/tema/tipografia.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,UAAU;IACnB,iFAAiF;;IAEjF,gDAAgD;;IAEhD,qFAAqF;;IAErF,yDAAyD;;IAEzD,8DAA8D;;IAE9D,0DAA0D;;CAE7D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,UAAU,MAAM;;;CAGtC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Text as RNText, TextInput as RNTextInput, type TextInputProps, type TextProps } from "react-native";
|
|
2
|
+
/**
|
|
3
|
+
* `Text` y `TextInput` con la tipografía de la app ya puesta.
|
|
4
|
+
*
|
|
5
|
+
* React Native no tiene una fuente por defecto para todo el árbol —y `defaultProps` dejó de
|
|
6
|
+
* aplicarse a componentes de función en React 19—, así que la familia se inyecta aquí y las
|
|
7
|
+
* pantallas importan estos dos en lugar de los de "react-native". Los componentes de Paper no
|
|
8
|
+
* pasan por aquí: esos leen la escala tipográfica del tema (`ProveedorDeTema`).
|
|
9
|
+
*
|
|
10
|
+
* La familia va primero en el arreglo de estilos para que cualquier `style` de quien lo use
|
|
11
|
+
* la pueda pisar. **También el color del texto** (`c.texto`): el `Text` de React Native es negro
|
|
12
|
+
* por omisión, y en el modo oscuro cada texto sin color propio desaparecía sobre el fondo.
|
|
13
|
+
*/
|
|
14
|
+
export declare const Text: import("react").ForwardRefExoticComponent<TextProps & import("react").RefAttributes<RNText>>;
|
|
15
|
+
export declare const TextInput: import("react").ForwardRefExoticComponent<TextInputProps & import("react").RefAttributes<RNTextInput>>;
|
|
16
|
+
//# sourceMappingURL=texto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texto.d.ts","sourceRoot":"","sources":["../../../src/texto.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,IAAI,IAAI,MAAM,EACd,SAAS,IAAI,WAAW,EACxB,KAAK,cAAc,EACnB,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,IAAI,8FAMf,CAAC;AAEH,eAAO,MAAM,SAAS,wGAarB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,141 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
"name": "@acvl/mobile-components",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "Librería de componentes de las apps móviles de ACV (Expo / React Native).",
|
|
5
|
+
"homepage": "https://github.com/ACV-Logistics/acv-mobile-components#readme",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/ACV-Logistics/acv-mobile-components/issues"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/ACV-Logistics/acv-mobile-components.git"
|
|
12
|
+
},
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"author": "mario.aftimos",
|
|
15
|
+
"source": "./src/index.ts",
|
|
16
|
+
"main": "./lib/module/index.js",
|
|
17
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"source": "./src/index.ts",
|
|
21
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
22
|
+
"default": "./lib/module/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./camara": {
|
|
25
|
+
"source": "./src/camara/index.ts",
|
|
26
|
+
"types": "./lib/typescript/src/camara/index.d.ts",
|
|
27
|
+
"default": "./lib/module/camara/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./fotos": {
|
|
30
|
+
"source": "./src/fotos/index.ts",
|
|
31
|
+
"types": "./lib/typescript/src/fotos/index.d.ts",
|
|
32
|
+
"default": "./lib/module/fotos/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./hoja": {
|
|
35
|
+
"source": "./src/hoja/index.ts",
|
|
36
|
+
"types": "./lib/typescript/src/hoja/index.d.ts",
|
|
37
|
+
"default": "./lib/module/hoja/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./assets/*": "./assets/*",
|
|
40
|
+
"./package.json": "./package.json"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"src",
|
|
44
|
+
"lib",
|
|
45
|
+
"assets",
|
|
46
|
+
"!**/__tests__"
|
|
47
|
+
],
|
|
48
|
+
"scripts": {
|
|
49
|
+
"build": "bob build",
|
|
50
|
+
"typecheck": "tsc --noEmit",
|
|
51
|
+
"test": "vitest run",
|
|
52
|
+
"format": "prettier --write .",
|
|
53
|
+
"format:check": "prettier --check .",
|
|
54
|
+
"prepare": "bob build"
|
|
55
|
+
},
|
|
56
|
+
"react-native-builder-bob": {
|
|
57
|
+
"source": "src",
|
|
58
|
+
"output": "lib",
|
|
59
|
+
"exclude": "**/__tests__/**",
|
|
60
|
+
"targets": [
|
|
61
|
+
"module",
|
|
62
|
+
[
|
|
63
|
+
"typescript",
|
|
64
|
+
{
|
|
65
|
+
"project": "tsconfig.build.json"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
"peerDependencies": {
|
|
71
|
+
"@expo/vector-icons": ">=14.0.0",
|
|
72
|
+
"@gorhom/bottom-sheet": "^5.0.0",
|
|
73
|
+
"@react-native-community/datetimepicker": ">=8.0.0",
|
|
74
|
+
"dayjs": "^1.11.0",
|
|
75
|
+
"expo-document-picker": "*",
|
|
76
|
+
"expo-file-system": "*",
|
|
77
|
+
"expo-haptics": "*",
|
|
78
|
+
"expo-image-manipulator": "*",
|
|
79
|
+
"expo-image-picker": "*",
|
|
80
|
+
"expo-router": "*",
|
|
81
|
+
"expo-status-bar": "*",
|
|
82
|
+
"expo-system-ui": "*",
|
|
83
|
+
"react": ">=19.0.0",
|
|
84
|
+
"react-hook-form": "^7.50.0",
|
|
85
|
+
"react-native": ">=0.79.0",
|
|
86
|
+
"react-native-gesture-handler": ">=2.20.0",
|
|
87
|
+
"react-native-keyboard-controller": ">=1.18.0",
|
|
88
|
+
"react-native-paper": "^5.12.0",
|
|
89
|
+
"react-native-reanimated": ">=4.0.0",
|
|
90
|
+
"react-native-safe-area-context": ">=5.0.0"
|
|
91
|
+
},
|
|
92
|
+
"peerDependenciesMeta": {
|
|
93
|
+
"@gorhom/bottom-sheet": {
|
|
94
|
+
"optional": true
|
|
95
|
+
},
|
|
96
|
+
"expo-document-picker": {
|
|
97
|
+
"optional": true
|
|
98
|
+
},
|
|
99
|
+
"expo-file-system": {
|
|
100
|
+
"optional": true
|
|
101
|
+
},
|
|
102
|
+
"expo-image-manipulator": {
|
|
103
|
+
"optional": true
|
|
104
|
+
},
|
|
105
|
+
"expo-image-picker": {
|
|
106
|
+
"optional": true
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"devDependencies": {
|
|
110
|
+
"@expo/vector-icons": "^15.1.1",
|
|
111
|
+
"@gorhom/bottom-sheet": "^5.2.14",
|
|
112
|
+
"@react-native-community/datetimepicker": "^9.1.0",
|
|
113
|
+
"@types/react": "~19.2.4",
|
|
114
|
+
"dayjs": "^1.11.23",
|
|
115
|
+
"expo": "~57.0.27",
|
|
116
|
+
"expo-document-picker": "~57.0.3",
|
|
117
|
+
"expo-file-system": "~57.0.7",
|
|
118
|
+
"expo-haptics": "~57.0.3",
|
|
119
|
+
"expo-image-manipulator": "~57.0.21",
|
|
120
|
+
"expo-image-picker": "~57.0.20",
|
|
121
|
+
"expo-router": "~57.0.25",
|
|
122
|
+
"expo-status-bar": "~57.0.1",
|
|
123
|
+
"expo-system-ui": "~57.0.4",
|
|
124
|
+
"prettier": "^3.9.6",
|
|
125
|
+
"react": "^19.2.3",
|
|
126
|
+
"react-hook-form": "^7.90.0",
|
|
127
|
+
"react-native": "^0.86.3",
|
|
128
|
+
"react-native-builder-bob": "^0.43.2",
|
|
129
|
+
"react-native-gesture-handler": "~2.32.0",
|
|
130
|
+
"react-native-keyboard-controller": "^1.21.9",
|
|
131
|
+
"react-native-paper": "^5.15.3",
|
|
132
|
+
"react-native-reanimated": "^4.5.1",
|
|
133
|
+
"react-native-safe-area-context": "~5.7.0",
|
|
134
|
+
"react-native-screens": "~4.26.0",
|
|
135
|
+
"react-native-svg": "^15.15.4",
|
|
136
|
+
"react-native-worklets": "^0.10.1",
|
|
137
|
+
"typescript": "~6.0.3",
|
|
138
|
+
"vite": "^7.3.7",
|
|
139
|
+
"vitest": "^4.1.12"
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Controller, type FieldValues } from "react-hook-form";
|
|
3
|
+
import { View } from "react-native";
|
|
4
|
+
import BotonGrande from "../componentes/BotonGrande";
|
|
5
|
+
import TiraDeFotos, { type FotoDeLaTira } from "../componentes/TiraDeFotos";
|
|
6
|
+
import { Campo } from "../formularios/campos";
|
|
7
|
+
import type { CampoAtado, SinValor } from "../formularios/controlados";
|
|
8
|
+
import { crearEstilos } from "../tema";
|
|
9
|
+
import {
|
|
10
|
+
elegirDeGaleria,
|
|
11
|
+
tomarFoto,
|
|
12
|
+
type AlTomarFoto,
|
|
13
|
+
type ArchivoElegido,
|
|
14
|
+
type PermisoDeCamara,
|
|
15
|
+
} from "./elegir";
|
|
16
|
+
|
|
17
|
+
/** El lado de cada miniatura: cabe un renglón de tres en un teléfono angosto. */
|
|
18
|
+
const LADO = 96;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Fotos que se capturan con un formulario y suben al guardarlo (la evidencia de un alta, el cierre
|
|
22
|
+
* de una revisión): sus miniaturas, cada una con su «×» y abriendo el visor, y debajo **Tomar foto**
|
|
23
|
+
* y **De la galería**. Lo que se guarda es la lista de `ArchivoElegido` ya reducidos; subirlos es
|
|
24
|
+
* de quien guarda.
|
|
25
|
+
*
|
|
26
|
+
* Las que suben al momento, sin esperar a un formulario (las de una ficha que ya existe), no van
|
|
27
|
+
* aquí: ésas son una `TiraDeFotos` con sus botones.
|
|
28
|
+
*/
|
|
29
|
+
export function CampoDeFotos({
|
|
30
|
+
etiqueta,
|
|
31
|
+
ayuda,
|
|
32
|
+
error,
|
|
33
|
+
valor,
|
|
34
|
+
onCambiar,
|
|
35
|
+
permiso,
|
|
36
|
+
varias = true,
|
|
37
|
+
alTomar,
|
|
38
|
+
disabled,
|
|
39
|
+
}: {
|
|
40
|
+
etiqueta?: string;
|
|
41
|
+
ayuda?: string;
|
|
42
|
+
error?: string;
|
|
43
|
+
valor: ArchivoElegido[];
|
|
44
|
+
onCambiar: (valor: ArchivoElegido[]) => void;
|
|
45
|
+
/** Para qué se pide la cámara, si todavía no hay permiso. */
|
|
46
|
+
permiso: PermisoDeCamara;
|
|
47
|
+
/** Con `false`, una nueva reemplaza a la que había. */
|
|
48
|
+
varias?: boolean;
|
|
49
|
+
/** Lo que se hace con la original de la cámara (guardarla en la galería): ver `AlTomarFoto`. */
|
|
50
|
+
alTomar?: AlTomarFoto;
|
|
51
|
+
disabled?: boolean;
|
|
52
|
+
}) {
|
|
53
|
+
const styles = useStyles();
|
|
54
|
+
// Reducir una foto tarda (se decodifica completa): el botón gira mientras tanto.
|
|
55
|
+
const [eligiendo, setEligiendo] = React.useState<"camara" | "galeria" | null>(null);
|
|
56
|
+
|
|
57
|
+
const agregar = async (de: "camara" | "galeria") => {
|
|
58
|
+
setEligiendo(de);
|
|
59
|
+
try {
|
|
60
|
+
const nuevas =
|
|
61
|
+
de === "camara"
|
|
62
|
+
? await tomarFoto(permiso, { alTomar })
|
|
63
|
+
: await elegirDeGaleria({ varias });
|
|
64
|
+
if (nuevas.length) onCambiar(varias ? [...valor, ...nuevas] : nuevas.slice(0, 1));
|
|
65
|
+
} finally {
|
|
66
|
+
setEligiendo(null);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const fotos: FotoDeLaTira[] = valor.map((f, i) => ({
|
|
71
|
+
llave: `${f.uri}-${i}`,
|
|
72
|
+
esFoto: f.esFoto,
|
|
73
|
+
miniatura: { uri: f.uri },
|
|
74
|
+
nombre: f.nombre,
|
|
75
|
+
onQuitar: disabled ? undefined : () => onCambiar(valor.filter((_, j) => j !== i)),
|
|
76
|
+
}));
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<Campo etiqueta={etiqueta} ayuda={ayuda} error={error}>
|
|
80
|
+
<View style={styles.contenido}>
|
|
81
|
+
<TiraDeFotos fotos={fotos} lado={LADO} cuadricula />
|
|
82
|
+
<View style={styles.botones}>
|
|
83
|
+
<BotonGrande
|
|
84
|
+
icono="camera-outline"
|
|
85
|
+
modo="contorno"
|
|
86
|
+
cargando={eligiendo === "camara"}
|
|
87
|
+
disabled={disabled || eligiendo !== null}
|
|
88
|
+
onPress={() => void agregar("camara")}
|
|
89
|
+
>
|
|
90
|
+
Tomar foto
|
|
91
|
+
</BotonGrande>
|
|
92
|
+
<BotonGrande
|
|
93
|
+
icono="image-outline"
|
|
94
|
+
modo="contorno"
|
|
95
|
+
cargando={eligiendo === "galeria"}
|
|
96
|
+
disabled={disabled || eligiendo !== null}
|
|
97
|
+
onPress={() => void agregar("galeria")}
|
|
98
|
+
>
|
|
99
|
+
De la galería
|
|
100
|
+
</BotonGrande>
|
|
101
|
+
</View>
|
|
102
|
+
</View>
|
|
103
|
+
</Campo>
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** `CampoDeFotos` atado a react-hook-form: el valor es la lista de `ArchivoElegido`. */
|
|
108
|
+
export function FotosControladas<T extends FieldValues>({
|
|
109
|
+
control,
|
|
110
|
+
name,
|
|
111
|
+
...props
|
|
112
|
+
}: CampoAtado<T> & SinValor<React.ComponentProps<typeof CampoDeFotos>>) {
|
|
113
|
+
return (
|
|
114
|
+
<Controller
|
|
115
|
+
name={name}
|
|
116
|
+
control={control}
|
|
117
|
+
render={({ field: { value, onChange }, fieldState }) => (
|
|
118
|
+
<CampoDeFotos
|
|
119
|
+
{...props}
|
|
120
|
+
valor={(value as ArchivoElegido[] | null) ?? []}
|
|
121
|
+
onCambiar={onChange}
|
|
122
|
+
error={fieldState.error?.message}
|
|
123
|
+
/>
|
|
124
|
+
)}
|
|
125
|
+
/>
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const useStyles = crearEstilos(() => ({
|
|
130
|
+
contenido: { gap: 12 },
|
|
131
|
+
botones: { gap: 8 },
|
|
132
|
+
}));
|