@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,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { StatusBar } from "expo-status-bar";
|
|
4
|
+
import React from "react";
|
|
5
|
+
import { Appearance } from "react-native";
|
|
6
|
+
import { configureFonts, MD3DarkTheme, MD3LightTheme, PaperProvider } from "react-native-paper";
|
|
7
|
+
import { useEsOscuro, useFondoDeLaRaiz } from "./estilos";
|
|
8
|
+
import { fontFamily } from "./fuentes";
|
|
9
|
+
import { PALETA_CLARA, PALETA_OSCURA } from "./paleta";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Cómo quiere ver la app quien la usa: **igual que el teléfono** (por omisión), o siempre clara, o
|
|
13
|
+
* siempre oscura. Es del teléfono y no de la cuenta: sobrevive al cerrar sesión.
|
|
14
|
+
*/
|
|
15
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
16
|
+
const PREFERENCIAS = ["sistema", "claro", "oscuro"];
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Dónde guarda cada app la preferencia (SecureStore, AsyncStorage…). `leer` puede devolver
|
|
20
|
+
* cualquier cosa: lo que no sea una preferencia válida cuenta como `"sistema"`.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Pone la preferencia **en toda la app nativa** (`Appearance.setColorScheme`), no sólo en lo que
|
|
25
|
+
* pinta React: así `useColorScheme` ya contesta la elegida, y lo nativo —un mapa de Google, el
|
|
26
|
+
* selector de fecha, la barra de estado— la sigue sin que nadie se la pase. «Igual que el teléfono»
|
|
27
|
+
* es quitar la imposición.
|
|
28
|
+
*/
|
|
29
|
+
const aplicar = preferencia => Appearance.setColorScheme(preferencia === "claro" ? "light" : preferencia === "oscuro" ? "dark" : "unspecified");
|
|
30
|
+
|
|
31
|
+
// La escala tipográfica de Paper trae `System` en iOS y `sans-serif` en Android; en Android se
|
|
32
|
+
// cambia la familia por Inter y se conservan tamaños y pesos de cada variante. Los `Text` de
|
|
33
|
+
// React Native no leen el tema: esos van por `texto.tsx`.
|
|
34
|
+
const fonts = fontFamily ? configureFonts({
|
|
35
|
+
config: {
|
|
36
|
+
fontFamily
|
|
37
|
+
}
|
|
38
|
+
}) : MD3LightTheme.fonts;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* El tema de Paper de cada modo, con los colores de la paleta: los componentes de Paper (Card,
|
|
42
|
+
* Button, Avatar, Menu) no leen la paleta, leen esto.
|
|
43
|
+
*/
|
|
44
|
+
const temaDePaper = (base, c) => ({
|
|
45
|
+
...base,
|
|
46
|
+
fonts,
|
|
47
|
+
colors: {
|
|
48
|
+
...base.colors,
|
|
49
|
+
primary: c.primary,
|
|
50
|
+
onPrimary: c.sobrePrimario,
|
|
51
|
+
primaryLight: c.primaryLight,
|
|
52
|
+
primaryLighter: c.primaryLighter,
|
|
53
|
+
primaryDark: c.primaryDark,
|
|
54
|
+
secondary: c.secondary,
|
|
55
|
+
secondaryLight: c.secondaryLight,
|
|
56
|
+
secondaryLighter: c.secondaryLighter,
|
|
57
|
+
secondaryDark: c.secondaryDark,
|
|
58
|
+
background: c.fondo,
|
|
59
|
+
surface: c.superficie,
|
|
60
|
+
onSurface: c.texto,
|
|
61
|
+
outline: c.secondaryLighter,
|
|
62
|
+
surfacePrimary: c.superficie
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
const TEMA_CLARO = temaDePaper(MD3LightTheme, PALETA_CLARA);
|
|
66
|
+
const TEMA_OSCURO = temaDePaper(MD3DarkTheme, PALETA_OSCURA);
|
|
67
|
+
const Contexto = /*#__PURE__*/React.createContext(null);
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* El tema de la app: lee la preferencia guardada, se la impone a lo nativo, y da el tema de Paper,
|
|
71
|
+
* la barra de estado y el fondo de la raíz de ahora. Va en el layout raíz, por encima de todo lo
|
|
72
|
+
* que pinta.
|
|
73
|
+
*
|
|
74
|
+
* **No pinta nada hasta leer la preferencia**: así no se asoma el claro un momento en quien eligió
|
|
75
|
+
* el oscuro. Leerla es una consulta local, no se nota.
|
|
76
|
+
*/
|
|
77
|
+
export function ProveedorDeTema({
|
|
78
|
+
almacen,
|
|
79
|
+
children
|
|
80
|
+
}) {
|
|
81
|
+
const [preferencia, setPreferencia] = React.useState(almacen ? null : "sistema");
|
|
82
|
+
const oscuro = useEsOscuro();
|
|
83
|
+
useFondoDeLaRaiz((oscuro ? PALETA_OSCURA : PALETA_CLARA).fondo);
|
|
84
|
+
React.useEffect(() => {
|
|
85
|
+
if (!almacen) return;
|
|
86
|
+
let vigente = true;
|
|
87
|
+
almacen.leer().catch(() => null).then(guardada => {
|
|
88
|
+
if (!vigente) return;
|
|
89
|
+
const valida = PREFERENCIAS.find(p => p === guardada) ?? "sistema";
|
|
90
|
+
aplicar(valida);
|
|
91
|
+
setPreferencia(valida);
|
|
92
|
+
});
|
|
93
|
+
return () => {
|
|
94
|
+
vigente = false;
|
|
95
|
+
};
|
|
96
|
+
// Se lee una sola vez, al arrancar: un almacén nuevo en cada render no la vuelve a leer.
|
|
97
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
98
|
+
}, []);
|
|
99
|
+
const valor = React.useMemo(() => preferencia === null ? null : [preferencia, nueva => {
|
|
100
|
+
aplicar(nueva);
|
|
101
|
+
setPreferencia(nueva);
|
|
102
|
+
almacen?.guardar(nueva).catch(() => {});
|
|
103
|
+
}], [preferencia, almacen]);
|
|
104
|
+
if (!valor) return null;
|
|
105
|
+
return /*#__PURE__*/_jsx(Contexto.Provider, {
|
|
106
|
+
value: valor,
|
|
107
|
+
children: /*#__PURE__*/_jsxs(PaperProvider, {
|
|
108
|
+
theme: oscuro ? TEMA_OSCURO : TEMA_CLARO,
|
|
109
|
+
children: [/*#__PURE__*/_jsx(StatusBar, {
|
|
110
|
+
style: oscuro ? "light" : "dark"
|
|
111
|
+
}), children]
|
|
112
|
+
})
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** La preferencia del tema y cómo cambiarla (el perfil). Sólo dentro de `ProveedorDeTema`. */
|
|
117
|
+
export function usePreferenciaDeTema() {
|
|
118
|
+
const valor = React.useContext(Contexto);
|
|
119
|
+
if (!valor) throw new Error("usePreferenciaDeTema va dentro de <ProveedorDeTema>.");
|
|
120
|
+
return valor;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=ProveedorDeTema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StatusBar","React","Appearance","configureFonts","MD3DarkTheme","MD3LightTheme","PaperProvider","useEsOscuro","useFondoDeLaRaiz","fontFamily","PALETA_CLARA","PALETA_OSCURA","jsx","_jsx","jsxs","_jsxs","PREFERENCIAS","aplicar","preferencia","setColorScheme","fonts","config","temaDePaper","base","c","colors","primary","onPrimary","sobrePrimario","primaryLight","primaryLighter","primaryDark","secondary","secondaryLight","secondaryLighter","secondaryDark","background","fondo","surface","superficie","onSurface","texto","outline","surfacePrimary","TEMA_CLARO","TEMA_OSCURO","Contexto","createContext","ProveedorDeTema","almacen","children","setPreferencia","useState","oscuro","useEffect","vigente","leer","catch","then","guardada","valida","find","p","valor","useMemo","nueva","guardar","Provider","value","theme","style","usePreferenciaDeTema","useContext","Error"],"sourceRoot":"../../../src","sources":["tema/ProveedorDeTema.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import * as SystemUI from "expo-system-ui";
|
|
4
|
+
import { useEffect } from "react";
|
|
5
|
+
import { StyleSheet, useColorScheme } from "react-native";
|
|
6
|
+
import { PALETA_CLARA, PALETA_OSCURA } from "./paleta";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Si la app se ve oscura. Lee `useColorScheme` y no un contexto: `ProveedorDeTema` le impone la
|
|
10
|
+
* preferencia a toda la app nativa (`Appearance.setColorScheme`), así que contesta la elegida, o la
|
|
11
|
+
* del teléfono con «igual que el teléfono». Y así sirve también fuera de los proveedores, en la
|
|
12
|
+
* pantalla de error del layout raíz.
|
|
13
|
+
*/
|
|
14
|
+
export const useEsOscuro = () => useColorScheme() === "dark";
|
|
15
|
+
|
|
16
|
+
/** Los colores de ahora (`paleta.ts`). */
|
|
17
|
+
export const usePaleta = () => useEsOscuro() ? PALETA_OSCURA : PALETA_CLARA;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Hojas de estilo que dependen del tema. Se declaran igual que un `StyleSheet.create`, pero con la
|
|
21
|
+
* paleta como argumento, y dan un hook:
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const useStyles = crearEstilos((c) => ({ caja: { backgroundColor: c.superficie } }));
|
|
25
|
+
* // en el componente:
|
|
26
|
+
* const styles = useStyles();
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* Cada hoja se crea una vez por paleta y se guarda: cambiar de tema no la vuelve a crear en cada
|
|
30
|
+
* render.
|
|
31
|
+
*/
|
|
32
|
+
export function crearEstilos(fabrica) {
|
|
33
|
+
const hojas = new Map();
|
|
34
|
+
return function useEstilos() {
|
|
35
|
+
const c = usePaleta();
|
|
36
|
+
let hoja = hojas.get(c);
|
|
37
|
+
if (!hoja) {
|
|
38
|
+
hoja = StyleSheet.create(fabrica(c));
|
|
39
|
+
hojas.set(c, hoja);
|
|
40
|
+
}
|
|
41
|
+
return hoja;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* El fondo de la raíz nativa (lo que se ve detrás de una transición) sigue al tema: sin esto, al
|
|
47
|
+
* empujar una pantalla en oscuro se asomaba un destello blanco.
|
|
48
|
+
*/
|
|
49
|
+
export function useFondoDeLaRaiz(fondo) {
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
SystemUI.setBackgroundColorAsync(fondo).catch(() => {});
|
|
52
|
+
}, [fondo]);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=estilos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SystemUI","useEffect","StyleSheet","useColorScheme","PALETA_CLARA","PALETA_OSCURA","useEsOscuro","usePaleta","crearEstilos","fabrica","hojas","Map","useEstilos","c","hoja","get","create","set","useFondoDeLaRaiz","fondo","setBackgroundColorAsync","catch"],"sourceRoot":"../../../src","sources":["tema/estilos.ts"],"mappings":";;AAAA,OAAO,KAAKA,QAAQ,MAAM,gBAAgB;AAC1C,SAASC,SAAS,QAAQ,OAAO;AACjC,SAASC,UAAU,EAAEC,cAAc,QAAQ,cAAc;AACzD,SAASC,YAAY,EAAEC,aAAa,QAAqB,UAAU;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAGA,CAAA,KAAeH,cAAc,CAAC,CAAC,KAAK,MAAM;;AAErE;AACA,OAAO,MAAMI,SAAS,GAAGA,CAAA,KAAeD,WAAW,CAAC,CAAC,GAAGD,aAAa,GAAGD,YAAa;;AAErF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,YAAYA,CAAsCC,OAAyB,EAAE;EACzF,MAAMC,KAAK,GAAG,IAAIC,GAAG,CAAY,CAAC;EAClC,OAAO,SAASC,UAAUA,CAAA,EAAM;IAC5B,MAAMC,CAAC,GAAGN,SAAS,CAAC,CAAC;IACrB,IAAIO,IAAI,GAAGJ,KAAK,CAACK,GAAG,CAACF,CAAC,CAAC;IACvB,IAAI,CAACC,IAAI,EAAE;MACPA,IAAI,GAAGZ,UAAU,CAACc,MAAM,CAACP,OAAO,CAACI,CAAC,CAAC,CAAC;MACpCH,KAAK,CAACO,GAAG,CAACJ,CAAC,EAAEC,IAAI,CAAC;IACtB;IACA,OAAOA,IAAI;EACf,CAAC;AACL;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASI,gBAAgBA,CAACC,KAAa,EAAE;EAC5ClB,SAAS,CAAC,MAAM;IACZD,QAAQ,CAACoB,uBAAuB,CAACD,KAAK,CAAC,CAACE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EAC3D,CAAC,EAAE,CAACF,KAAK,CAAC,CAAC;AACf","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Platform } from "react-native";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* La tipografía de iOS es San Francisco —lo que React Native llama `System`— y no se puede
|
|
7
|
+
* llevar a Android: la licencia de Apple la limita a sus plataformas. Android se quedaba con
|
|
8
|
+
* `sans-serif` (Roboto), de ahí que las dos versiones no se parecieran.
|
|
9
|
+
*
|
|
10
|
+
* Inter es el sustituto libre (OFL) más cercano a San Francisco: misma altura de x, mismo
|
|
11
|
+
* aire de fuente de interfaz. Así que Android va con Inter e iOS se queda como está.
|
|
12
|
+
*
|
|
13
|
+
* Los seis cortes —de 400 a 900, que son los pesos que usan las pantallas— vienen en
|
|
14
|
+
* `assets/fonts/` de este paquete y **cada app los registra** como una sola familia en su
|
|
15
|
+
* `app.json` (plugin de expo-font, sección `android.fonts`; ver el README). Al declarar cada peso
|
|
16
|
+
* con su archivo, `fontWeight: "600"` toma el SemiBold de verdad en vez de una negrita sintética.
|
|
17
|
+
* Tocar esa lista obliga a reconstruir el binario, no basta con recargar.
|
|
18
|
+
*/
|
|
19
|
+
export const fontFamily = Platform.select({
|
|
20
|
+
android: "Inter",
|
|
21
|
+
default: undefined
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
/** Familia lista para mezclar en un `style`; `null` donde vale la del sistema. */
|
|
25
|
+
export const fuenteBase = fontFamily ? {
|
|
26
|
+
fontFamily
|
|
27
|
+
} : null;
|
|
28
|
+
//# sourceMappingURL=fuentes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","fontFamily","select","android","default","undefined","fuenteBase"],"sourceRoot":"../../../src","sources":["tema/fuentes.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,cAAc;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAGD,QAAQ,CAACE,MAAM,CAAC;EAAEC,OAAO,EAAE,OAAO;EAAEC,OAAO,EAAEC;AAAU,CAAC,CAAC;;AAEnF;AACA,OAAO,MAAMC,UAAU,GAAGL,UAAU,GAAG;EAAEA;AAAW,CAAC,GAAG,IAAI","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export { crearEstilos, useEsOscuro, useFondoDeLaRaiz, usePaleta } from "./estilos";
|
|
4
|
+
export { fontFamily, fuenteBase } from "./fuentes";
|
|
5
|
+
export { PALETA_CLARA, PALETA_OSCURA } from "./paleta";
|
|
6
|
+
export { ProveedorDeTema, usePreferenciaDeTema } from "./ProveedorDeTema";
|
|
7
|
+
export { renglon, tipografia } from "./tipografia";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["crearEstilos","useEsOscuro","useFondoDeLaRaiz","usePaleta","fontFamily","fuenteBase","PALETA_CLARA","PALETA_OSCURA","ProveedorDeTema","usePreferenciaDeTema","renglon","tipografia"],"sourceRoot":"../../../src","sources":["tema/index.ts"],"mappings":";;AAAA,SAASA,YAAY,EAAEC,WAAW,EAAEC,gBAAgB,EAAEC,SAAS,QAAQ,WAAW;AAClF,SAASC,UAAU,EAAEC,UAAU,QAAQ,WAAW;AAClD,SAASC,YAAY,EAAEC,aAAa,QAAqB,UAAU;AACnE,SACIC,eAAe,EACfC,oBAAoB,QAGjB,mBAAmB;AAC1B,SAASC,OAAO,EAAEC,UAAU,QAAQ,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Los colores de las apps, **uno por cosa y no por tono**: el fondo, la superficie de una tarjeta,
|
|
5
|
+
* el texto, el aviso ámbar. Cada pantalla los toma de aquí (`usePaleta`, `crearEstilos`) y no
|
|
6
|
+
* escribe hexadecimales: así el modo oscuro es cambiar de paleta, no revisar cada pantalla.
|
|
7
|
+
*
|
|
8
|
+
* Los nombres `primary…`/`secondary…` son los del `colors` que traían las apps antes de la paleta,
|
|
9
|
+
* con el mismo sentido. Lo oscuro sigue al portal (`@acvl/frontend-components`, `v1/theme`): fondo
|
|
10
|
+
* `#121212`, papel `#1e1e1e` y el rojo más claro `#ff4a57`, que sobre negro se lee mejor que el de
|
|
11
|
+
* la marca.
|
|
12
|
+
*
|
|
13
|
+
* Lo que se pinta dentro de un mapa (los colores de estado de una flota, un pin) no sale de aquí:
|
|
14
|
+
* tiene que leerse igual sobre claro, oscuro y satélite, y lo escoge cada app.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export const PALETA_CLARA = {
|
|
18
|
+
esOscuro: false,
|
|
19
|
+
fondo: "#f7f7f7",
|
|
20
|
+
superficie: "#ffffff",
|
|
21
|
+
superficieTenue: "#f1f1f1",
|
|
22
|
+
texto: "#1a1a1a",
|
|
23
|
+
sobrePrimario: "#ffffff",
|
|
24
|
+
velo: "rgba(0,0,0,0.45)",
|
|
25
|
+
sombra: "#000000",
|
|
26
|
+
primary: "#ea1b2b",
|
|
27
|
+
primaryLight: "rgb(242, 118, 127)",
|
|
28
|
+
primaryLighter: "rgb(250, 209, 212)",
|
|
29
|
+
primaryDark: "rgb(163, 18, 30)",
|
|
30
|
+
primaryWash: "rgba(234,27,43,0.08)",
|
|
31
|
+
secondary: "#606060",
|
|
32
|
+
secondaryLight: "rgb(159, 159, 159)",
|
|
33
|
+
secondaryLighter: "rgb(231, 231, 231)",
|
|
34
|
+
secondaryDark: "rgb(67, 67, 67)",
|
|
35
|
+
secondaryText: "#3a3d42",
|
|
36
|
+
eyebrow: "#4B5563",
|
|
37
|
+
aviso: {
|
|
38
|
+
fondo: "#fff8e1",
|
|
39
|
+
tinta: "#8a5300",
|
|
40
|
+
fuerte: "#b26a00",
|
|
41
|
+
acento: "#f5b955",
|
|
42
|
+
sobreFuerte: "#ffffff",
|
|
43
|
+
borde: "#ffe0a3"
|
|
44
|
+
},
|
|
45
|
+
exito: {
|
|
46
|
+
fondo: "#e8f5e9",
|
|
47
|
+
tinta: "#2e7d32"
|
|
48
|
+
},
|
|
49
|
+
info: {
|
|
50
|
+
fondo: "#e3f2fd",
|
|
51
|
+
tinta: "#1565c0"
|
|
52
|
+
},
|
|
53
|
+
error: {
|
|
54
|
+
fondo: "#fdecea",
|
|
55
|
+
tinta: "#c62828"
|
|
56
|
+
},
|
|
57
|
+
morado: {
|
|
58
|
+
fondo: "#f1e9fd",
|
|
59
|
+
tinta: "#5b21b6"
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
export const PALETA_OSCURA = {
|
|
63
|
+
esOscuro: true,
|
|
64
|
+
fondo: "#121212",
|
|
65
|
+
superficie: "#1e1e1e",
|
|
66
|
+
superficieTenue: "#2a2a2a",
|
|
67
|
+
texto: "#f2f2f2",
|
|
68
|
+
sobrePrimario: "#ffffff",
|
|
69
|
+
velo: "rgba(0,0,0,0.65)",
|
|
70
|
+
sombra: "#000000",
|
|
71
|
+
primary: "#ff4a57",
|
|
72
|
+
primaryLight: "rgb(255, 128, 137)",
|
|
73
|
+
primaryLighter: "rgb(90, 24, 30)",
|
|
74
|
+
primaryDark: "#ea1b2b",
|
|
75
|
+
primaryWash: "rgba(255,74,87,0.16)",
|
|
76
|
+
secondary: "#b3b3b3",
|
|
77
|
+
secondaryLight: "#8c8c8c",
|
|
78
|
+
secondaryLighter: "#3a3a3a",
|
|
79
|
+
secondaryDark: "#d6d6d6",
|
|
80
|
+
secondaryText: "#c9ccd1",
|
|
81
|
+
eyebrow: "#a8b0bd",
|
|
82
|
+
aviso: {
|
|
83
|
+
fondo: "#3a2e12",
|
|
84
|
+
tinta: "#ffcc80",
|
|
85
|
+
fuerte: "#ffb74d",
|
|
86
|
+
acento: "#c9932f",
|
|
87
|
+
sobreFuerte: "#1e1e1e",
|
|
88
|
+
borde: "#6b5320"
|
|
89
|
+
},
|
|
90
|
+
exito: {
|
|
91
|
+
fondo: "#1b3320",
|
|
92
|
+
tinta: "#81c784"
|
|
93
|
+
},
|
|
94
|
+
info: {
|
|
95
|
+
fondo: "#132a40",
|
|
96
|
+
tinta: "#90caf9"
|
|
97
|
+
},
|
|
98
|
+
error: {
|
|
99
|
+
fondo: "#3d1a1a",
|
|
100
|
+
tinta: "#ff8a80"
|
|
101
|
+
},
|
|
102
|
+
morado: {
|
|
103
|
+
fondo: "#2a1d45",
|
|
104
|
+
tinta: "#c4b5fd"
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=paleta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PALETA_CLARA","esOscuro","fondo","superficie","superficieTenue","texto","sobrePrimario","velo","sombra","primary","primaryLight","primaryLighter","primaryDark","primaryWash","secondary","secondaryLight","secondaryLighter","secondaryDark","secondaryText","eyebrow","aviso","tinta","fuerte","acento","sobreFuerte","borde","exito","info","error","morado","PALETA_OSCURA"],"sourceRoot":"../../../src","sources":["tema/paleta.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgEA,OAAO,MAAMA,YAAoB,GAAG;EAChCC,QAAQ,EAAE,KAAK;EACfC,KAAK,EAAE,SAAS;EAChBC,UAAU,EAAE,SAAS;EACrBC,eAAe,EAAE,SAAS;EAC1BC,KAAK,EAAE,SAAS;EAChBC,aAAa,EAAE,SAAS;EACxBC,IAAI,EAAE,kBAAkB;EACxBC,MAAM,EAAE,SAAS;EAEjBC,OAAO,EAAE,SAAS;EAClBC,YAAY,EAAE,oBAAoB;EAClCC,cAAc,EAAE,oBAAoB;EACpCC,WAAW,EAAE,kBAAkB;EAC/BC,WAAW,EAAE,sBAAsB;EACnCC,SAAS,EAAE,SAAS;EACpBC,cAAc,EAAE,oBAAoB;EACpCC,gBAAgB,EAAE,oBAAoB;EACtCC,aAAa,EAAE,iBAAiB;EAChCC,aAAa,EAAE,SAAS;EACxBC,OAAO,EAAE,SAAS;EAElBC,KAAK,EAAE;IACHlB,KAAK,EAAE,SAAS;IAChBmB,KAAK,EAAE,SAAS;IAChBC,MAAM,EAAE,SAAS;IACjBC,MAAM,EAAE,SAAS;IACjBC,WAAW,EAAE,SAAS;IACtBC,KAAK,EAAE;EACX,CAAC;EACDC,KAAK,EAAE;IAAExB,KAAK,EAAE,SAAS;IAAEmB,KAAK,EAAE;EAAU,CAAC;EAC7CM,IAAI,EAAE;IAAEzB,KAAK,EAAE,SAAS;IAAEmB,KAAK,EAAE;EAAU,CAAC;EAC5CO,KAAK,EAAE;IAAE1B,KAAK,EAAE,SAAS;IAAEmB,KAAK,EAAE;EAAU,CAAC;EAC7CQ,MAAM,EAAE;IAAE3B,KAAK,EAAE,SAAS;IAAEmB,KAAK,EAAE;EAAU;AACjD,CAAC;AAED,OAAO,MAAMS,aAAqB,GAAG;EACjC7B,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,SAAS;EAChBC,UAAU,EAAE,SAAS;EACrBC,eAAe,EAAE,SAAS;EAC1BC,KAAK,EAAE,SAAS;EAChBC,aAAa,EAAE,SAAS;EACxBC,IAAI,EAAE,kBAAkB;EACxBC,MAAM,EAAE,SAAS;EAEjBC,OAAO,EAAE,SAAS;EAClBC,YAAY,EAAE,oBAAoB;EAClCC,cAAc,EAAE,iBAAiB;EACjCC,WAAW,EAAE,SAAS;EACtBC,WAAW,EAAE,sBAAsB;EACnCC,SAAS,EAAE,SAAS;EACpBC,cAAc,EAAE,SAAS;EACzBC,gBAAgB,EAAE,SAAS;EAC3BC,aAAa,EAAE,SAAS;EACxBC,aAAa,EAAE,SAAS;EACxBC,OAAO,EAAE,SAAS;EAElBC,KAAK,EAAE;IACHlB,KAAK,EAAE,SAAS;IAChBmB,KAAK,EAAE,SAAS;IAChBC,MAAM,EAAE,SAAS;IACjBC,MAAM,EAAE,SAAS;IACjBC,WAAW,EAAE,SAAS;IACtBC,KAAK,EAAE;EACX,CAAC;EACDC,KAAK,EAAE;IAAExB,KAAK,EAAE,SAAS;IAAEmB,KAAK,EAAE;EAAU,CAAC;EAC7CM,IAAI,EAAE;IAAEzB,KAAK,EAAE,SAAS;IAAEmB,KAAK,EAAE;EAAU,CAAC;EAC5CO,KAAK,EAAE;IAAE1B,KAAK,EAAE,SAAS;IAAEmB,KAAK,EAAE;EAAU,CAAC;EAC7CQ,MAAM,EAAE;IAAE3B,KAAK,EAAE,SAAS;IAAEmB,KAAK,EAAE;EAAU;AACjD,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Los tamaños de letra de las apps. Son grandes a propósito: quien las usa lee de pie, con prisa, a
|
|
5
|
+
* veces con sol y sin lentes, y la letra chica es donde batalla. **Nada baja de `etiqueta`.** Una
|
|
6
|
+
* pantalla nueva toma de aquí en lugar de inventar su número.
|
|
7
|
+
*/
|
|
8
|
+
export const tipografia = {
|
|
9
|
+
/** La acción que toca completar: lo único que tiene que leerse de un vistazo. */
|
|
10
|
+
destacado: 32,
|
|
11
|
+
/** El folio y lo que identifica la pantalla. */
|
|
12
|
+
titulo: 24,
|
|
13
|
+
/** El nombre de un paso, el cliente: lo que se lee primero dentro de una tarjeta. */
|
|
14
|
+
subtitulo: 21,
|
|
15
|
+
/** El texto normal: valores, instrucciones, el lugar. */
|
|
16
|
+
cuerpo: 19,
|
|
17
|
+
/** Lo que acompaña: direcciones, el siguiente paso, horas. */
|
|
18
|
+
secundario: 17,
|
|
19
|
+
/** Rótulos en mayúsculas, chips y pestañas. El mínimo. */
|
|
20
|
+
etiqueta: 15
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Tamaño y alto de renglón explícito para un texto que lleva un icono al lado. `IconoDeRenglon`
|
|
25
|
+
* usa el mismo alto para centrarse contra el primer renglón; los dos crecen con la escala de
|
|
26
|
+
* letra del sistema.
|
|
27
|
+
*/
|
|
28
|
+
export const renglon = fontSize => ({
|
|
29
|
+
fontSize,
|
|
30
|
+
lineHeight: Math.round(fontSize * 1.3)
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=tipografia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["tipografia","destacado","titulo","subtitulo","cuerpo","secundario","etiqueta","renglon","fontSize","lineHeight","Math","round"],"sourceRoot":"../../../src","sources":["tema/tipografia.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,UAAU,GAAG;EACtB;EACAC,SAAS,EAAE,EAAE;EACb;EACAC,MAAM,EAAE,EAAE;EACV;EACAC,SAAS,EAAE,EAAE;EACb;EACAC,MAAM,EAAE,EAAE;EACV;EACAC,UAAU,EAAE,EAAE;EACd;EACAC,QAAQ,EAAE;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,OAAO,GAAIC,QAAgB,KAAM;EAC1CA,QAAQ;EACRC,UAAU,EAAEC,IAAI,CAACC,KAAK,CAACH,QAAQ,GAAG,GAAG;AACzC,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { fuenteBase, usePaleta } from "./tema";
|
|
4
|
+
import { forwardRef } from "react";
|
|
5
|
+
import { Text as RNText, TextInput as RNTextInput } from "react-native";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* `Text` y `TextInput` con la tipografía de la app ya puesta.
|
|
9
|
+
*
|
|
10
|
+
* React Native no tiene una fuente por defecto para todo el árbol —y `defaultProps` dejó de
|
|
11
|
+
* aplicarse a componentes de función en React 19—, así que la familia se inyecta aquí y las
|
|
12
|
+
* pantallas importan estos dos en lugar de los de "react-native". Los componentes de Paper no
|
|
13
|
+
* pasan por aquí: esos leen la escala tipográfica del tema (`ProveedorDeTema`).
|
|
14
|
+
*
|
|
15
|
+
* La familia va primero en el arreglo de estilos para que cualquier `style` de quien lo use
|
|
16
|
+
* la pueda pisar. **También el color del texto** (`c.texto`): el `Text` de React Native es negro
|
|
17
|
+
* por omisión, y en el modo oscuro cada texto sin color propio desaparecía sobre el fondo.
|
|
18
|
+
*/
|
|
19
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
|
+
export const Text = /*#__PURE__*/forwardRef(function Text({
|
|
21
|
+
style,
|
|
22
|
+
...props
|
|
23
|
+
}, ref) {
|
|
24
|
+
const c = usePaleta();
|
|
25
|
+
return /*#__PURE__*/_jsx(RNText, {
|
|
26
|
+
ref: ref,
|
|
27
|
+
style: [fuenteBase, {
|
|
28
|
+
color: c.texto
|
|
29
|
+
}, style],
|
|
30
|
+
...props
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
export const TextInput = /*#__PURE__*/forwardRef(function TextInput({
|
|
34
|
+
style,
|
|
35
|
+
...props
|
|
36
|
+
}, ref) {
|
|
37
|
+
const c = usePaleta();
|
|
38
|
+
return /*#__PURE__*/_jsx(RNTextInput, {
|
|
39
|
+
ref: ref,
|
|
40
|
+
placeholderTextColor: c.secondaryLight,
|
|
41
|
+
selectionColor: c.primary,
|
|
42
|
+
style: [fuenteBase, {
|
|
43
|
+
color: c.texto
|
|
44
|
+
}, style],
|
|
45
|
+
...props
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=texto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["fuenteBase","usePaleta","forwardRef","Text","RNText","TextInput","RNTextInput","jsx","_jsx","style","props","ref","c","color","texto","placeholderTextColor","secondaryLight","selectionColor","primary"],"sourceRoot":"../../src","sources":["texto.tsx"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,SAAS,QAAQ,QAAQ;AAC9C,SAASC,UAAU,QAA2B,OAAO;AACrD,SACIC,IAAI,IAAIC,MAAM,EACdC,SAAS,IAAIC,WAAW,QAGrB,cAAc;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA,SAAAC,GAAA,IAAAC,IAAA;AAaA,OAAO,MAAML,IAAI,gBAAGD,UAAU,CAAyC,SAASC,IAAIA,CAChF;EAAEM,KAAK;EAAE,GAAGC;AAAM,CAAC,EACnBC,GAAG,EACL;EACE,MAAMC,CAAC,GAAGX,SAAS,CAAC,CAAC;EACrB,oBAAOO,IAAA,CAACJ,MAAM;IAACO,GAAG,EAAEA,GAAI;IAACF,KAAK,EAAE,CAACT,UAAU,EAAE;MAAEa,KAAK,EAAED,CAAC,CAACE;IAAM,CAAC,EAAEL,KAAK,CAAE;IAAA,GAAKC;EAAK,CAAG,CAAC;AAC1F,CAAC,CAAC;AAEF,OAAO,MAAML,SAAS,gBAAGH,UAAU,CAC/B,SAASG,SAASA,CAAC;EAAEI,KAAK;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,EAAE;EACzC,MAAMC,CAAC,GAAGX,SAAS,CAAC,CAAC;EACrB,oBACIO,IAAA,CAACF,WAAW;IACRK,GAAG,EAAEA,GAAI;IACTI,oBAAoB,EAAEH,CAAC,CAACI,cAAe;IACvCC,cAAc,EAAEL,CAAC,CAACM,OAAQ;IAC1BT,KAAK,EAAE,CAACT,UAAU,EAAE;MAAEa,KAAK,EAAED,CAAC,CAACE;IAAM,CAAC,EAAEL,KAAK,CAAE;IAAA,GAC3CC;EAAK,CACZ,CAAC;AAEV,CACJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type FieldValues } from "react-hook-form";
|
|
3
|
+
import type { CampoAtado, SinValor } from "../formularios/controlados";
|
|
4
|
+
import { type AlTomarFoto, type ArchivoElegido, type PermisoDeCamara } from "./elegir";
|
|
5
|
+
/**
|
|
6
|
+
* Fotos que se capturan con un formulario y suben al guardarlo (la evidencia de un alta, el cierre
|
|
7
|
+
* de una revisión): sus miniaturas, cada una con su «×» y abriendo el visor, y debajo **Tomar foto**
|
|
8
|
+
* y **De la galería**. Lo que se guarda es la lista de `ArchivoElegido` ya reducidos; subirlos es
|
|
9
|
+
* de quien guarda.
|
|
10
|
+
*
|
|
11
|
+
* Las que suben al momento, sin esperar a un formulario (las de una ficha que ya existe), no van
|
|
12
|
+
* aquí: ésas son una `TiraDeFotos` con sus botones.
|
|
13
|
+
*/
|
|
14
|
+
export declare function CampoDeFotos({ etiqueta, ayuda, error, valor, onCambiar, permiso, varias, alTomar, disabled, }: {
|
|
15
|
+
etiqueta?: string;
|
|
16
|
+
ayuda?: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
valor: ArchivoElegido[];
|
|
19
|
+
onCambiar: (valor: ArchivoElegido[]) => void;
|
|
20
|
+
/** Para qué se pide la cámara, si todavía no hay permiso. */
|
|
21
|
+
permiso: PermisoDeCamara;
|
|
22
|
+
/** Con `false`, una nueva reemplaza a la que había. */
|
|
23
|
+
varias?: boolean;
|
|
24
|
+
/** Lo que se hace con la original de la cámara (guardarla en la galería): ver `AlTomarFoto`. */
|
|
25
|
+
alTomar?: AlTomarFoto;
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
}): React.JSX.Element;
|
|
28
|
+
/** `CampoDeFotos` atado a react-hook-form: el valor es la lista de `ArchivoElegido`. */
|
|
29
|
+
export declare function FotosControladas<T extends FieldValues>({ control, name, ...props }: CampoAtado<T> & SinValor<React.ComponentProps<typeof CampoDeFotos>>): React.JSX.Element;
|
|
30
|
+
//# sourceMappingURL=CampoDeFotos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CampoDeFotos.d.ts","sourceRoot":"","sources":["../../../../src/camara/CampoDeFotos.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAK/D,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEvE,OAAO,EAGH,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACvB,MAAM,UAAU,CAAC;AAKlB;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EACzB,QAAQ,EACR,KAAK,EACL,KAAK,EACL,KAAK,EACL,SAAS,EACT,OAAO,EACP,MAAa,EACb,OAAO,EACP,QAAQ,GACX,EAAE;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC7C,6DAA6D;IAC7D,OAAO,EAAE,eAAe,CAAC;IACzB,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gGAAgG;IAChG,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,qBAqDA;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,WAAW,EAAE,EACpD,OAAO,EACP,IAAI,EACJ,GAAG,KAAK,EACX,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,qBAerE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as ImagePicker from "expo-image-picker";
|
|
2
|
+
/** Lo elegido: dónde está en el teléfono, su nombre, su tipo y si es una foto. */
|
|
3
|
+
export interface ArchivoElegido {
|
|
4
|
+
uri: string;
|
|
5
|
+
nombre: string;
|
|
6
|
+
tipo: string;
|
|
7
|
+
esFoto: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Para qué se pide la cámara, dicho a quien la usa. */
|
|
10
|
+
export interface PermisoDeCamara {
|
|
11
|
+
/** «tomar las fotos de evidencia»: va en «Para …, activa la cámara en los ajustes». */
|
|
12
|
+
para: string;
|
|
13
|
+
/**
|
|
14
|
+
* Lo que se explica antes del diálogo del sistema la primera vez: por qué y cuándo se usa. Sin
|
|
15
|
+
* esto, va directo al del sistema.
|
|
16
|
+
*/
|
|
17
|
+
explicacion?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Lo que se hace con la foto **original** de la cámara antes de reducirla: guardarla en la galería
|
|
21
|
+
* del teléfono, por ejemplo, como respaldo de quien la tomó si la subida falla. Lo que falle aquí
|
|
22
|
+
* no detiene la foto.
|
|
23
|
+
*/
|
|
24
|
+
export type AlTomarFoto = (original: ImagePicker.ImagePickerAsset) => unknown;
|
|
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
|
+
/**
|
|
31
|
+
* Las imágenes elegidas, reducidas a 1920 px en JPEG (`reducirFoto`). Una por una y no con
|
|
32
|
+
* `Promise.all`: cada foto se decodifica completa en memoria, y veinte a la vez desde la galería
|
|
33
|
+
* pueden tumbar la app en un Android modesto.
|
|
34
|
+
*/
|
|
35
|
+
export declare function deFotos(assets: ImagePicker.ImagePickerAsset[]): Promise<ArchivoElegido[]>;
|
|
36
|
+
/** Una foto con la cámara, con su permiso. Vacío si no hubo permiso o se canceló. */
|
|
37
|
+
export declare function tomarFoto(permiso: PermisoDeCamara, { alTomar }?: {
|
|
38
|
+
alTomar?: AlTomarFoto;
|
|
39
|
+
}): Promise<ArchivoElegido[]>;
|
|
40
|
+
/**
|
|
41
|
+
* De la galería. En Android el selector de fotos del sistema no pide permiso de almacenamiento,
|
|
42
|
+
* así que no hay explicación previa que dar.
|
|
43
|
+
*/
|
|
44
|
+
export declare function elegirDeGaleria({ varias }?: {
|
|
45
|
+
varias?: boolean | undefined;
|
|
46
|
+
}): Promise<ArchivoElegido[]>;
|
|
47
|
+
//# sourceMappingURL=elegir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elegir.d.ts","sourceRoot":"","sources":["../../../../src/camara/elegir.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAIjD,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,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC5B,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,gBAAgB,KAAK,OAAO,CAAC;AAE9E;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EACvC,IAAI,EACJ,WAAW,GACd,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBpC;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,gBAAgB,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAY/F;AAED,qFAAqF;AACrF,wBAAsB,SAAS,CAC3B,OAAO,EAAE,eAAe,EACxB,EAAE,OAAO,EAAE,GAAE;IAAE,OAAO,CAAC,EAAE,WAAW,CAAA;CAAO,GAC5C,OAAO,CAAC,cAAc,EAAE,CAAC,CAc3B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,EAAE,MAAc,EAAE;;CAAK,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAOxF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { CampoDeFotos, FotosControladas } from "./CampoDeFotos";
|
|
2
|
+
export { deFotos, elegirDeGaleria, pedirPermisoDeCamara, tomarFoto, type AlTomarFoto, type ArchivoElegido, type PermisoDeCamara, } from "./elegir";
|
|
3
|
+
export { LADO_MAXIMO, reducirFoto, reducirImagenAdjunta } from "./reducir";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/camara/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACH,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,KAAK,WAAW,EAChB,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/camara/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,34 @@
|
|
|
1
|
+
import MaterialCommunityIcons from "@expo/vector-icons/MaterialCommunityIcons";
|
|
2
|
+
import React from "react";
|
|
3
|
+
export interface AccionDelEncabezado {
|
|
4
|
+
/** El texto del renglón del menú y lo que lee el lector de pantalla. */
|
|
5
|
+
etiqueta: string;
|
|
6
|
+
icono: React.ComponentProps<typeof MaterialCommunityIcons>["name"];
|
|
7
|
+
onPress: () => void;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
/** Un indicador en vez del icono, y la acción bloqueada mientras corre. */
|
|
10
|
+
cargando?: boolean;
|
|
11
|
+
/** Para la que borra o cancela: en rojo, en el botón y en el menú. */
|
|
12
|
+
destructiva?: boolean;
|
|
13
|
+
/** Las fijadas son las últimas en irse al menú (Editar). */
|
|
14
|
+
fijada?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Una cifra pendiente de la acción: los mensajes sin leer de un hilo. Va sobre su botón o, si
|
|
17
|
+
* la acción se fue al menú, en su renglón — y entonces los tres puntos la suman, porque una
|
|
18
|
+
* cifra escondida no avisa de nada.
|
|
19
|
+
*/
|
|
20
|
+
insignia?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Las acciones de una ficha en su encabezado: **las que quepan como botones y las demás en el menú
|
|
24
|
+
* de los tres puntos**. Es el `ResponsiveActions` de la app de acv-wms con la paleta de la casa.
|
|
25
|
+
*
|
|
26
|
+
* No mide los botones: mide el hueco que le deja el título (`onLayout`) y cuenta cuántos de
|
|
27
|
+
* `LADO` caben. Si caben todas, van todas; si no, una menos y el menú. Las `fijadas` son las
|
|
28
|
+
* últimas en irse, sin cambiar el orden en que se ven. Quien la pone le da al título
|
|
29
|
+
* `flexShrink: 1` y no `flex: 1`, para que le deje espacio.
|
|
30
|
+
*/
|
|
31
|
+
export default function AccionesDelEncabezado({ acciones }: {
|
|
32
|
+
acciones: AccionDelEncabezado[];
|
|
33
|
+
}): React.JSX.Element | null;
|
|
34
|
+
//# sourceMappingURL=AccionesDelEncabezado.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccionesDelEncabezado.d.ts","sourceRoot":"","sources":["../../../../src/componentes/AccionesDelEncabezado.tsx"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,MAAM,2CAA2C,CAAC;AAC/E,OAAO,KAAK,MAAM,OAAO,CAAC;AAiB1B,MAAM,WAAW,mBAAmB;IAChC,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;IACnE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AA2DD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAA;CAAE,4BAmG9F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La inicial de cada parte, hasta dos: `inicialesDe(nombre, apellidos)` da «JP»; con sólo el nombre
|
|
3
|
+
* de la cuenta, su primera letra; sin nada, una inicial neutra.
|
|
4
|
+
*/
|
|
5
|
+
export declare const inicialesDe: (...partes: (string | null | undefined)[]) => string;
|
|
6
|
+
/**
|
|
7
|
+
* El avatar de quien entró, en el header de las pestañas: el acceso al perfil (y a cerrar sesión).
|
|
8
|
+
* Quien lo pone decide las iniciales y a dónde lleva.
|
|
9
|
+
*/
|
|
10
|
+
declare const BotonDeAvatar: ({ iniciales, onPress, etiqueta, }: {
|
|
11
|
+
iniciales: string;
|
|
12
|
+
onPress: () => void;
|
|
13
|
+
/** Lo que lee el lector de pantalla. */
|
|
14
|
+
etiqueta?: string;
|
|
15
|
+
}) => import("react").JSX.Element;
|
|
16
|
+
export default BotonDeAvatar;
|
|
17
|
+
//# sourceMappingURL=BotonDeAvatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BotonDeAvatar.d.ts","sourceRoot":"","sources":["../../../../src/componentes/BotonDeAvatar.tsx"],"names":[],"mappings":"AAIA;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,KAAG,MAOpD,CAAC;AAEpB;;;GAGG;AACH,QAAA,MAAM,aAAa,GAAI,mCAIpB;IACC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,gCAgBA,CAAC;AAYF,eAAe,aAAa,CAAC"}
|