@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,51 @@
|
|
|
1
|
+
import * as SystemUI from "expo-system-ui";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { StyleSheet, useColorScheme } from "react-native";
|
|
4
|
+
import { PALETA_CLARA, PALETA_OSCURA, type Paleta } from "./paleta";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Si la app se ve oscura. Lee `useColorScheme` y no un contexto: `ProveedorDeTema` le impone la
|
|
8
|
+
* preferencia a toda la app nativa (`Appearance.setColorScheme`), así que contesta la elegida, o la
|
|
9
|
+
* del teléfono con «igual que el teléfono». Y así sirve también fuera de los proveedores, en la
|
|
10
|
+
* pantalla de error del layout raíz.
|
|
11
|
+
*/
|
|
12
|
+
export const useEsOscuro = (): boolean => useColorScheme() === "dark";
|
|
13
|
+
|
|
14
|
+
/** Los colores de ahora (`paleta.ts`). */
|
|
15
|
+
export const usePaleta = (): Paleta => (useEsOscuro() ? PALETA_OSCURA : PALETA_CLARA);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Hojas de estilo que dependen del tema. Se declaran igual que un `StyleSheet.create`, pero con la
|
|
19
|
+
* paleta como argumento, y dan un hook:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* const useStyles = crearEstilos((c) => ({ caja: { backgroundColor: c.superficie } }));
|
|
23
|
+
* // en el componente:
|
|
24
|
+
* const styles = useStyles();
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* Cada hoja se crea una vez por paleta y se guarda: cambiar de tema no la vuelve a crear en cada
|
|
28
|
+
* render.
|
|
29
|
+
*/
|
|
30
|
+
export function crearEstilos<T extends StyleSheet.NamedStyles<T>>(fabrica: (c: Paleta) => T) {
|
|
31
|
+
const hojas = new Map<Paleta, T>();
|
|
32
|
+
return function useEstilos(): T {
|
|
33
|
+
const c = usePaleta();
|
|
34
|
+
let hoja = hojas.get(c);
|
|
35
|
+
if (!hoja) {
|
|
36
|
+
hoja = StyleSheet.create(fabrica(c));
|
|
37
|
+
hojas.set(c, hoja);
|
|
38
|
+
}
|
|
39
|
+
return hoja;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* El fondo de la raíz nativa (lo que se ve detrás de una transición) sigue al tema: sin esto, al
|
|
45
|
+
* empujar una pantalla en oscuro se asomaba un destello blanco.
|
|
46
|
+
*/
|
|
47
|
+
export function useFondoDeLaRaiz(fondo: string) {
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
SystemUI.setBackgroundColorAsync(fondo).catch(() => {});
|
|
50
|
+
}, [fondo]);
|
|
51
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Platform } from "react-native";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* La tipografía de iOS es San Francisco —lo que React Native llama `System`— y no se puede
|
|
5
|
+
* llevar a Android: la licencia de Apple la limita a sus plataformas. Android se quedaba con
|
|
6
|
+
* `sans-serif` (Roboto), de ahí que las dos versiones no se parecieran.
|
|
7
|
+
*
|
|
8
|
+
* Inter es el sustituto libre (OFL) más cercano a San Francisco: misma altura de x, mismo
|
|
9
|
+
* aire de fuente de interfaz. Así que Android va con Inter e iOS se queda como está.
|
|
10
|
+
*
|
|
11
|
+
* Los seis cortes —de 400 a 900, que son los pesos que usan las pantallas— vienen en
|
|
12
|
+
* `assets/fonts/` de este paquete y **cada app los registra** como una sola familia en su
|
|
13
|
+
* `app.json` (plugin de expo-font, sección `android.fonts`; ver el README). Al declarar cada peso
|
|
14
|
+
* con su archivo, `fontWeight: "600"` toma el SemiBold de verdad en vez de una negrita sintética.
|
|
15
|
+
* Tocar esa lista obliga a reconstruir el binario, no basta con recargar.
|
|
16
|
+
*/
|
|
17
|
+
export const fontFamily = Platform.select({ android: "Inter", default: undefined });
|
|
18
|
+
|
|
19
|
+
/** Familia lista para mezclar en un `style`; `null` donde vale la del sistema. */
|
|
20
|
+
export const fuenteBase = fontFamily ? { fontFamily } : null;
|
|
@@ -0,0 +1,10 @@
|
|
|
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 {
|
|
5
|
+
ProveedorDeTema,
|
|
6
|
+
usePreferenciaDeTema,
|
|
7
|
+
type AlmacenDelTema,
|
|
8
|
+
type PreferenciaDeTema,
|
|
9
|
+
} from "./ProveedorDeTema";
|
|
10
|
+
export { renglon, tipografia } from "./tipografia";
|
|
@@ -0,0 +1,147 @@
|
|
|
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
|
+
|
|
17
|
+
/** El fondo de la pantalla, detrás de las tarjetas. */
|
|
18
|
+
fondo: string;
|
|
19
|
+
/** Una tarjeta, un campo, una hoja, el header y la barra de pestañas. */
|
|
20
|
+
superficie: string;
|
|
21
|
+
/** Lo que va encima de una superficie y se tiene que distinguir de ella (un campo apagado). */
|
|
22
|
+
superficieTenue: string;
|
|
23
|
+
/** El texto normal. */
|
|
24
|
+
texto: string;
|
|
25
|
+
/** El texto que va sobre el rojo (un botón lleno, el chip «En curso»). */
|
|
26
|
+
sobrePrimario: string;
|
|
27
|
+
/** El velo detrás de un diálogo. */
|
|
28
|
+
velo: string;
|
|
29
|
+
/** La sombra: en oscuro casi no se ve, así que el borde hace su trabajo. */
|
|
30
|
+
sombra: string;
|
|
31
|
+
|
|
32
|
+
// Los de `colors`, con el mismo sentido.
|
|
33
|
+
primary: string;
|
|
34
|
+
primaryLight: string;
|
|
35
|
+
primaryLighter: string;
|
|
36
|
+
primaryDark: string;
|
|
37
|
+
/** El fondo de lo elegido. */
|
|
38
|
+
primaryWash: string;
|
|
39
|
+
/** El texto secundario. */
|
|
40
|
+
secondary: string;
|
|
41
|
+
/** El texto tenue: un placeholder, un icono apagado. */
|
|
42
|
+
secondaryLight: string;
|
|
43
|
+
/** Los bordes y separadores. */
|
|
44
|
+
secondaryLighter: string;
|
|
45
|
+
/** El gris fuerte: un título gris, el texto de un estado vacío. */
|
|
46
|
+
secondaryDark: string;
|
|
47
|
+
secondaryText: string;
|
|
48
|
+
/** El rótulo arriba del título del header. */
|
|
49
|
+
eyebrow: string;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Lo que pide atención sin ser error: pausas, pendientes, avisos. `acento` es el ámbar medio de
|
|
53
|
+
* un borde o una barra; `sobreFuerte`, la letra encima de un relleno `fuerte`.
|
|
54
|
+
*/
|
|
55
|
+
aviso: {
|
|
56
|
+
fondo: string;
|
|
57
|
+
tinta: string;
|
|
58
|
+
fuerte: string;
|
|
59
|
+
acento: string;
|
|
60
|
+
sobreFuerte: string;
|
|
61
|
+
borde: string;
|
|
62
|
+
};
|
|
63
|
+
/** Lo cumplido. */
|
|
64
|
+
exito: { fondo: string; tinta: string };
|
|
65
|
+
/** Lo informativo. */
|
|
66
|
+
info: { fondo: string; tinta: string };
|
|
67
|
+
/** Lo que salió mal. */
|
|
68
|
+
error: { fondo: string; tinta: string };
|
|
69
|
+
/**
|
|
70
|
+
* Un escalón más de un avance que ya usa los otros: en wms, una orden de envío facturada
|
|
71
|
+
* (todavía no pagada, que es el verde) o un recibo entregado a medias. Es el morado que el
|
|
72
|
+
* portal le da a la orden de envío.
|
|
73
|
+
*/
|
|
74
|
+
morado: { fondo: string; tinta: string };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export const PALETA_CLARA: Paleta = {
|
|
78
|
+
esOscuro: false,
|
|
79
|
+
fondo: "#f7f7f7",
|
|
80
|
+
superficie: "#ffffff",
|
|
81
|
+
superficieTenue: "#f1f1f1",
|
|
82
|
+
texto: "#1a1a1a",
|
|
83
|
+
sobrePrimario: "#ffffff",
|
|
84
|
+
velo: "rgba(0,0,0,0.45)",
|
|
85
|
+
sombra: "#000000",
|
|
86
|
+
|
|
87
|
+
primary: "#ea1b2b",
|
|
88
|
+
primaryLight: "rgb(242, 118, 127)",
|
|
89
|
+
primaryLighter: "rgb(250, 209, 212)",
|
|
90
|
+
primaryDark: "rgb(163, 18, 30)",
|
|
91
|
+
primaryWash: "rgba(234,27,43,0.08)",
|
|
92
|
+
secondary: "#606060",
|
|
93
|
+
secondaryLight: "rgb(159, 159, 159)",
|
|
94
|
+
secondaryLighter: "rgb(231, 231, 231)",
|
|
95
|
+
secondaryDark: "rgb(67, 67, 67)",
|
|
96
|
+
secondaryText: "#3a3d42",
|
|
97
|
+
eyebrow: "#4B5563",
|
|
98
|
+
|
|
99
|
+
aviso: {
|
|
100
|
+
fondo: "#fff8e1",
|
|
101
|
+
tinta: "#8a5300",
|
|
102
|
+
fuerte: "#b26a00",
|
|
103
|
+
acento: "#f5b955",
|
|
104
|
+
sobreFuerte: "#ffffff",
|
|
105
|
+
borde: "#ffe0a3",
|
|
106
|
+
},
|
|
107
|
+
exito: { fondo: "#e8f5e9", tinta: "#2e7d32" },
|
|
108
|
+
info: { fondo: "#e3f2fd", tinta: "#1565c0" },
|
|
109
|
+
error: { fondo: "#fdecea", tinta: "#c62828" },
|
|
110
|
+
morado: { fondo: "#f1e9fd", tinta: "#5b21b6" },
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export const PALETA_OSCURA: Paleta = {
|
|
114
|
+
esOscuro: true,
|
|
115
|
+
fondo: "#121212",
|
|
116
|
+
superficie: "#1e1e1e",
|
|
117
|
+
superficieTenue: "#2a2a2a",
|
|
118
|
+
texto: "#f2f2f2",
|
|
119
|
+
sobrePrimario: "#ffffff",
|
|
120
|
+
velo: "rgba(0,0,0,0.65)",
|
|
121
|
+
sombra: "#000000",
|
|
122
|
+
|
|
123
|
+
primary: "#ff4a57",
|
|
124
|
+
primaryLight: "rgb(255, 128, 137)",
|
|
125
|
+
primaryLighter: "rgb(90, 24, 30)",
|
|
126
|
+
primaryDark: "#ea1b2b",
|
|
127
|
+
primaryWash: "rgba(255,74,87,0.16)",
|
|
128
|
+
secondary: "#b3b3b3",
|
|
129
|
+
secondaryLight: "#8c8c8c",
|
|
130
|
+
secondaryLighter: "#3a3a3a",
|
|
131
|
+
secondaryDark: "#d6d6d6",
|
|
132
|
+
secondaryText: "#c9ccd1",
|
|
133
|
+
eyebrow: "#a8b0bd",
|
|
134
|
+
|
|
135
|
+
aviso: {
|
|
136
|
+
fondo: "#3a2e12",
|
|
137
|
+
tinta: "#ffcc80",
|
|
138
|
+
fuerte: "#ffb74d",
|
|
139
|
+
acento: "#c9932f",
|
|
140
|
+
sobreFuerte: "#1e1e1e",
|
|
141
|
+
borde: "#6b5320",
|
|
142
|
+
},
|
|
143
|
+
exito: { fondo: "#1b3320", tinta: "#81c784" },
|
|
144
|
+
info: { fondo: "#132a40", tinta: "#90caf9" },
|
|
145
|
+
error: { fondo: "#3d1a1a", tinta: "#ff8a80" },
|
|
146
|
+
morado: { fondo: "#2a1d45", tinta: "#c4b5fd" },
|
|
147
|
+
};
|
|
@@ -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 const tipografia = {
|
|
7
|
+
/** La acción que toca completar: lo único que tiene que leerse de un vistazo. */
|
|
8
|
+
destacado: 32,
|
|
9
|
+
/** El folio y lo que identifica la pantalla. */
|
|
10
|
+
titulo: 24,
|
|
11
|
+
/** El nombre de un paso, el cliente: lo que se lee primero dentro de una tarjeta. */
|
|
12
|
+
subtitulo: 21,
|
|
13
|
+
/** El texto normal: valores, instrucciones, el lugar. */
|
|
14
|
+
cuerpo: 19,
|
|
15
|
+
/** Lo que acompaña: direcciones, el siguiente paso, horas. */
|
|
16
|
+
secundario: 17,
|
|
17
|
+
/** Rótulos en mayúsculas, chips y pestañas. El mínimo. */
|
|
18
|
+
etiqueta: 15,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Tamaño y alto de renglón explícito para un texto que lleva un icono al lado. `IconoDeRenglon`
|
|
23
|
+
* usa el mismo alto para centrarse contra el primer renglón; los dos crecen con la escala de
|
|
24
|
+
* letra del sistema.
|
|
25
|
+
*/
|
|
26
|
+
export const renglon = (fontSize: number) => ({
|
|
27
|
+
fontSize,
|
|
28
|
+
lineHeight: Math.round(fontSize * 1.3),
|
|
29
|
+
});
|
package/src/texto.tsx
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { fuenteBase, usePaleta } from "./tema";
|
|
2
|
+
import { forwardRef, type ComponentRef } from "react";
|
|
3
|
+
import {
|
|
4
|
+
Text as RNText,
|
|
5
|
+
TextInput as RNTextInput,
|
|
6
|
+
type TextInputProps,
|
|
7
|
+
type TextProps,
|
|
8
|
+
} from "react-native";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* `Text` y `TextInput` con la tipografía de la app ya puesta.
|
|
12
|
+
*
|
|
13
|
+
* React Native no tiene una fuente por defecto para todo el árbol —y `defaultProps` dejó de
|
|
14
|
+
* aplicarse a componentes de función en React 19—, así que la familia se inyecta aquí y las
|
|
15
|
+
* pantallas importan estos dos en lugar de los de "react-native". Los componentes de Paper no
|
|
16
|
+
* pasan por aquí: esos leen la escala tipográfica del tema (`ProveedorDeTema`).
|
|
17
|
+
*
|
|
18
|
+
* La familia va primero en el arreglo de estilos para que cualquier `style` de quien lo use
|
|
19
|
+
* la pueda pisar. **También el color del texto** (`c.texto`): el `Text` de React Native es negro
|
|
20
|
+
* por omisión, y en el modo oscuro cada texto sin color propio desaparecía sobre el fondo.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export const Text = forwardRef<ComponentRef<typeof RNText>, TextProps>(function Text(
|
|
24
|
+
{ style, ...props },
|
|
25
|
+
ref,
|
|
26
|
+
) {
|
|
27
|
+
const c = usePaleta();
|
|
28
|
+
return <RNText ref={ref} style={[fuenteBase, { color: c.texto }, style]} {...props} />;
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export const TextInput = forwardRef<ComponentRef<typeof RNTextInput>, TextInputProps>(
|
|
32
|
+
function TextInput({ style, ...props }, ref) {
|
|
33
|
+
const c = usePaleta();
|
|
34
|
+
return (
|
|
35
|
+
<RNTextInput
|
|
36
|
+
ref={ref}
|
|
37
|
+
placeholderTextColor={c.secondaryLight}
|
|
38
|
+
selectionColor={c.primary}
|
|
39
|
+
style={[fuenteBase, { color: c.texto }, style]}
|
|
40
|
+
{...props}
|
|
41
|
+
/>
|
|
42
|
+
);
|
|
43
|
+
},
|
|
44
|
+
);
|