@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.
Files changed (322) hide show
  1. package/README.md +147 -2
  2. package/assets/fonts/Inter_400Regular.ttf +0 -0
  3. package/assets/fonts/Inter_500Medium.ttf +0 -0
  4. package/assets/fonts/Inter_600SemiBold.ttf +0 -0
  5. package/assets/fonts/Inter_700Bold.ttf +0 -0
  6. package/assets/fonts/Inter_800ExtraBold.ttf +0 -0
  7. package/assets/fonts/Inter_900Black.ttf +0 -0
  8. package/assets/fonts/OFL.txt +93 -0
  9. package/lib/module/camara/CampoDeFotos.js +124 -0
  10. package/lib/module/camara/CampoDeFotos.js.map +1 -0
  11. package/lib/module/camara/elegir.js +104 -0
  12. package/lib/module/camara/elegir.js.map +1 -0
  13. package/lib/module/camara/index.js +10 -0
  14. package/lib/module/camara/index.js.map +1 -0
  15. package/lib/module/camara/reducir.js +93 -0
  16. package/lib/module/camara/reducir.js.map +1 -0
  17. package/lib/module/componentes/AccionesDelEncabezado.js +212 -0
  18. package/lib/module/componentes/AccionesDelEncabezado.js.map +1 -0
  19. package/lib/module/componentes/BotonDeAvatar.js +55 -0
  20. package/lib/module/componentes/BotonDeAvatar.js.map +1 -0
  21. package/lib/module/componentes/BotonGrande.js +105 -0
  22. package/lib/module/componentes/BotonGrande.js.map +1 -0
  23. package/lib/module/componentes/CabeceraEmpujada.js +101 -0
  24. package/lib/module/componentes/CabeceraEmpujada.js.map +1 -0
  25. package/lib/module/componentes/Chip.js +77 -0
  26. package/lib/module/componentes/Chip.js.map +1 -0
  27. package/lib/module/componentes/ContenidoDePantalla.js +56 -0
  28. package/lib/module/componentes/ContenidoDePantalla.js.map +1 -0
  29. package/lib/module/componentes/EstadoVacio.js +65 -0
  30. package/lib/module/componentes/EstadoVacio.js.map +1 -0
  31. package/lib/module/componentes/Foto.js +106 -0
  32. package/lib/module/componentes/Foto.js.map +1 -0
  33. package/lib/module/componentes/IconoDeRenglon.js +44 -0
  34. package/lib/module/componentes/IconoDeRenglon.js.map +1 -0
  35. package/lib/module/componentes/Logo.js +44 -0
  36. package/lib/module/componentes/Logo.js.map +1 -0
  37. package/lib/module/componentes/Nota.js +51 -0
  38. package/lib/module/componentes/Nota.js.map +1 -0
  39. package/lib/module/componentes/OpcionesExcluyentes.js +69 -0
  40. package/lib/module/componentes/OpcionesExcluyentes.js.map +1 -0
  41. package/lib/module/componentes/PantallaDeError.js +84 -0
  42. package/lib/module/componentes/PantallaDeError.js.map +1 -0
  43. package/lib/module/componentes/Pestanas.js +87 -0
  44. package/lib/module/componentes/Pestanas.js.map +1 -0
  45. package/lib/module/componentes/Rotulo.js +28 -0
  46. package/lib/module/componentes/Rotulo.js.map +1 -0
  47. package/lib/module/componentes/RotuloDeSeccion.js +87 -0
  48. package/lib/module/componentes/RotuloDeSeccion.js.map +1 -0
  49. package/lib/module/componentes/Tarjeta.js +63 -0
  50. package/lib/module/componentes/Tarjeta.js.map +1 -0
  51. package/lib/module/componentes/TarjetaDeDatos.js +79 -0
  52. package/lib/module/componentes/TarjetaDeDatos.js.map +1 -0
  53. package/lib/module/componentes/TiraDeFotos.js +184 -0
  54. package/lib/module/componentes/TiraDeFotos.js.map +1 -0
  55. package/lib/module/componentes/VisorDeFoto.js +171 -0
  56. package/lib/module/componentes/VisorDeFoto.js.map +1 -0
  57. package/lib/module/componentes/logos/bola-blanca.png +0 -0
  58. package/lib/module/componentes/logos/bola.png +0 -0
  59. package/lib/module/componentes/logos/logo-blanco.png +0 -0
  60. package/lib/module/componentes/logos/logo.png +0 -0
  61. package/lib/module/dialogos/HostDeDialogos.js +170 -0
  62. package/lib/module/dialogos/HostDeDialogos.js.map +1 -0
  63. package/lib/module/dialogos/dialogos.js +112 -0
  64. package/lib/module/dialogos/dialogos.js.map +1 -0
  65. package/lib/module/formularios/CampoDeSeleccion.js +72 -0
  66. package/lib/module/formularios/CampoDeSeleccion.js.map +1 -0
  67. package/lib/module/formularios/SelectorDeOpcion.js +406 -0
  68. package/lib/module/formularios/SelectorDeOpcion.js.map +1 -0
  69. package/lib/module/formularios/TextoDeAccesoControlado.js +73 -0
  70. package/lib/module/formularios/TextoDeAccesoControlado.js.map +1 -0
  71. package/lib/module/formularios/campos.js +501 -0
  72. package/lib/module/formularios/campos.js.map +1 -0
  73. package/lib/module/formularios/controlados.js +199 -0
  74. package/lib/module/formularios/controlados.js.map +1 -0
  75. package/lib/module/formularios/errores.js +91 -0
  76. package/lib/module/formularios/errores.js.map +1 -0
  77. package/lib/module/formularios/guardado.js +78 -0
  78. package/lib/module/formularios/guardado.js.map +1 -0
  79. package/lib/module/formularios/useBusqueda.js +22 -0
  80. package/lib/module/formularios/useBusqueda.js.map +1 -0
  81. package/lib/module/fotos/elegir.js +105 -0
  82. package/lib/module/fotos/elegir.js.map +1 -0
  83. package/lib/module/fotos/index.js +9 -0
  84. package/lib/module/fotos/index.js.map +1 -0
  85. package/lib/module/hoja/HojaDeLista.js +211 -0
  86. package/lib/module/hoja/HojaDeLista.js.map +1 -0
  87. package/lib/module/hoja/HojaInferior.js +112 -0
  88. package/lib/module/hoja/HojaInferior.js.map +1 -0
  89. package/lib/module/hoja/index.js +8 -0
  90. package/lib/module/hoja/index.js.map +1 -0
  91. package/lib/module/hoja/useMasDeLaFicha.js +48 -0
  92. package/lib/module/hoja/useMasDeLaFicha.js.map +1 -0
  93. package/lib/module/index.js +67 -0
  94. package/lib/module/index.js.map +1 -0
  95. package/lib/module/listas/HojaDeFiltros.js +270 -0
  96. package/lib/module/listas/HojaDeFiltros.js.map +1 -0
  97. package/lib/module/listas/ListaPaginada.js +103 -0
  98. package/lib/module/listas/ListaPaginada.js.map +1 -0
  99. package/lib/module/listas/TarjetaDeslizable.js +118 -0
  100. package/lib/module/listas/TarjetaDeslizable.js.map +1 -0
  101. package/lib/module/listas/paginado.js +11 -0
  102. package/lib/module/listas/paginado.js.map +1 -0
  103. package/lib/module/listas/piezas.js +666 -0
  104. package/lib/module/listas/piezas.js.map +1 -0
  105. package/lib/module/navegacion/BarraDePestanas.js +162 -0
  106. package/lib/module/navegacion/BarraDePestanas.js.map +1 -0
  107. package/lib/module/navegacion/BotonDeBarra.js +58 -0
  108. package/lib/module/navegacion/BotonDeBarra.js.map +1 -0
  109. package/lib/module/navegacion/encabezado.js +103 -0
  110. package/lib/module/navegacion/encabezado.js.map +1 -0
  111. package/lib/module/pantallas/PantallaDeAcceso.js +195 -0
  112. package/lib/module/pantallas/PantallaDeAcceso.js.map +1 -0
  113. package/lib/module/pantallas/PantallaDeEdicion.js +121 -0
  114. package/lib/module/pantallas/PantallaDeEdicion.js.map +1 -0
  115. package/lib/module/pantallas/PantallaDeFicha.js +94 -0
  116. package/lib/module/pantallas/PantallaDeFicha.js.map +1 -0
  117. package/lib/module/pantallas/PantallaDeHistorial.js +328 -0
  118. package/lib/module/pantallas/PantallaDeHistorial.js.map +1 -0
  119. package/lib/module/pantallas/PantallaDePerfil.js +137 -0
  120. package/lib/module/pantallas/PantallaDePerfil.js.map +1 -0
  121. package/lib/module/tema/ProveedorDeTema.js +122 -0
  122. package/lib/module/tema/ProveedorDeTema.js.map +1 -0
  123. package/lib/module/tema/estilos.js +54 -0
  124. package/lib/module/tema/estilos.js.map +1 -0
  125. package/lib/module/tema/fuentes.js +28 -0
  126. package/lib/module/tema/fuentes.js.map +1 -0
  127. package/lib/module/tema/index.js +8 -0
  128. package/lib/module/tema/index.js.map +1 -0
  129. package/lib/module/tema/paleta.js +107 -0
  130. package/lib/module/tema/paleta.js.map +1 -0
  131. package/lib/module/tema/tipografia.js +32 -0
  132. package/lib/module/tema/tipografia.js.map +1 -0
  133. package/lib/module/texto.js +48 -0
  134. package/lib/module/texto.js.map +1 -0
  135. package/lib/typescript/src/camara/CampoDeFotos.d.ts +30 -0
  136. package/lib/typescript/src/camara/CampoDeFotos.d.ts.map +1 -0
  137. package/lib/typescript/src/camara/elegir.d.ts +47 -0
  138. package/lib/typescript/src/camara/elegir.d.ts.map +1 -0
  139. package/lib/typescript/src/camara/index.d.ts +4 -0
  140. package/lib/typescript/src/camara/index.d.ts.map +1 -0
  141. package/lib/typescript/src/camara/reducir.d.ts +32 -0
  142. package/lib/typescript/src/camara/reducir.d.ts.map +1 -0
  143. package/lib/typescript/src/componentes/AccionesDelEncabezado.d.ts +34 -0
  144. package/lib/typescript/src/componentes/AccionesDelEncabezado.d.ts.map +1 -0
  145. package/lib/typescript/src/componentes/BotonDeAvatar.d.ts +17 -0
  146. package/lib/typescript/src/componentes/BotonDeAvatar.d.ts.map +1 -0
  147. package/lib/typescript/src/componentes/BotonGrande.d.ts +26 -0
  148. package/lib/typescript/src/componentes/BotonGrande.d.ts.map +1 -0
  149. package/lib/typescript/src/componentes/CabeceraEmpujada.d.ts +18 -0
  150. package/lib/typescript/src/componentes/CabeceraEmpujada.d.ts.map +1 -0
  151. package/lib/typescript/src/componentes/Chip.d.ts +14 -0
  152. package/lib/typescript/src/componentes/Chip.d.ts.map +1 -0
  153. package/lib/typescript/src/componentes/ContenidoDePantalla.d.ts +17 -0
  154. package/lib/typescript/src/componentes/ContenidoDePantalla.d.ts.map +1 -0
  155. package/lib/typescript/src/componentes/EstadoVacio.d.ts +17 -0
  156. package/lib/typescript/src/componentes/EstadoVacio.d.ts.map +1 -0
  157. package/lib/typescript/src/componentes/Foto.d.ts +41 -0
  158. package/lib/typescript/src/componentes/Foto.d.ts.map +1 -0
  159. package/lib/typescript/src/componentes/IconoDeRenglon.d.ts +25 -0
  160. package/lib/typescript/src/componentes/IconoDeRenglon.d.ts.map +1 -0
  161. package/lib/typescript/src/componentes/Logo.d.ts +13 -0
  162. package/lib/typescript/src/componentes/Logo.d.ts.map +1 -0
  163. package/lib/typescript/src/componentes/Nota.d.ts +7 -0
  164. package/lib/typescript/src/componentes/Nota.d.ts.map +1 -0
  165. package/lib/typescript/src/componentes/OpcionesExcluyentes.d.ts +14 -0
  166. package/lib/typescript/src/componentes/OpcionesExcluyentes.d.ts.map +1 -0
  167. package/lib/typescript/src/componentes/PantallaDeError.d.ts +23 -0
  168. package/lib/typescript/src/componentes/PantallaDeError.d.ts.map +1 -0
  169. package/lib/typescript/src/componentes/Pestanas.d.ts +28 -0
  170. package/lib/typescript/src/componentes/Pestanas.d.ts.map +1 -0
  171. package/lib/typescript/src/componentes/Rotulo.d.ts +6 -0
  172. package/lib/typescript/src/componentes/Rotulo.d.ts.map +1 -0
  173. package/lib/typescript/src/componentes/RotuloDeSeccion.d.ts +20 -0
  174. package/lib/typescript/src/componentes/RotuloDeSeccion.d.ts.map +1 -0
  175. package/lib/typescript/src/componentes/Tarjeta.d.ts +25 -0
  176. package/lib/typescript/src/componentes/Tarjeta.d.ts.map +1 -0
  177. package/lib/typescript/src/componentes/TarjetaDeDatos.d.ts +13 -0
  178. package/lib/typescript/src/componentes/TarjetaDeDatos.d.ts.map +1 -0
  179. package/lib/typescript/src/componentes/TiraDeFotos.d.ts +36 -0
  180. package/lib/typescript/src/componentes/TiraDeFotos.d.ts.map +1 -0
  181. package/lib/typescript/src/componentes/VisorDeFoto.d.ts +23 -0
  182. package/lib/typescript/src/componentes/VisorDeFoto.d.ts.map +1 -0
  183. package/lib/typescript/src/dialogos/HostDeDialogos.d.ts +14 -0
  184. package/lib/typescript/src/dialogos/HostDeDialogos.d.ts.map +1 -0
  185. package/lib/typescript/src/dialogos/dialogos.d.ts +65 -0
  186. package/lib/typescript/src/dialogos/dialogos.d.ts.map +1 -0
  187. package/lib/typescript/src/formularios/CampoDeSeleccion.d.ts +24 -0
  188. package/lib/typescript/src/formularios/CampoDeSeleccion.d.ts.map +1 -0
  189. package/lib/typescript/src/formularios/SelectorDeOpcion.d.ts +59 -0
  190. package/lib/typescript/src/formularios/SelectorDeOpcion.d.ts.map +1 -0
  191. package/lib/typescript/src/formularios/TextoDeAccesoControlado.d.ts +18 -0
  192. package/lib/typescript/src/formularios/TextoDeAccesoControlado.d.ts.map +1 -0
  193. package/lib/typescript/src/formularios/campos.d.ts +113 -0
  194. package/lib/typescript/src/formularios/campos.d.ts.map +1 -0
  195. package/lib/typescript/src/formularios/controlados.d.ts +29 -0
  196. package/lib/typescript/src/formularios/controlados.d.ts.map +1 -0
  197. package/lib/typescript/src/formularios/errores.d.ts +36 -0
  198. package/lib/typescript/src/formularios/errores.d.ts.map +1 -0
  199. package/lib/typescript/src/formularios/guardado.d.ts +36 -0
  200. package/lib/typescript/src/formularios/guardado.d.ts.map +1 -0
  201. package/lib/typescript/src/formularios/useBusqueda.d.ts +7 -0
  202. package/lib/typescript/src/formularios/useBusqueda.d.ts.map +1 -0
  203. package/lib/typescript/src/fotos/elegir.d.ts +28 -0
  204. package/lib/typescript/src/fotos/elegir.d.ts.map +1 -0
  205. package/lib/typescript/src/fotos/index.d.ts +3 -0
  206. package/lib/typescript/src/fotos/index.d.ts.map +1 -0
  207. package/lib/typescript/src/hoja/HojaDeLista.d.ts +50 -0
  208. package/lib/typescript/src/hoja/HojaDeLista.d.ts.map +1 -0
  209. package/lib/typescript/src/hoja/HojaInferior.d.ts +21 -0
  210. package/lib/typescript/src/hoja/HojaInferior.d.ts.map +1 -0
  211. package/lib/typescript/src/hoja/index.d.ts +4 -0
  212. package/lib/typescript/src/hoja/index.d.ts.map +1 -0
  213. package/lib/typescript/src/hoja/useMasDeLaFicha.d.ts +27 -0
  214. package/lib/typescript/src/hoja/useMasDeLaFicha.d.ts.map +1 -0
  215. package/lib/typescript/src/index.d.ts +46 -0
  216. package/lib/typescript/src/index.d.ts.map +1 -0
  217. package/lib/typescript/src/listas/HojaDeFiltros.d.ts +76 -0
  218. package/lib/typescript/src/listas/HojaDeFiltros.d.ts.map +1 -0
  219. package/lib/typescript/src/listas/ListaPaginada.d.ts +39 -0
  220. package/lib/typescript/src/listas/ListaPaginada.d.ts.map +1 -0
  221. package/lib/typescript/src/listas/TarjetaDeslizable.d.ts +33 -0
  222. package/lib/typescript/src/listas/TarjetaDeslizable.d.ts.map +1 -0
  223. package/lib/typescript/src/listas/paginado.d.ts +16 -0
  224. package/lib/typescript/src/listas/paginado.d.ts.map +1 -0
  225. package/lib/typescript/src/listas/piezas.d.ts +157 -0
  226. package/lib/typescript/src/listas/piezas.d.ts.map +1 -0
  227. package/lib/typescript/src/navegacion/BarraDePestanas.d.ts +57 -0
  228. package/lib/typescript/src/navegacion/BarraDePestanas.d.ts.map +1 -0
  229. package/lib/typescript/src/navegacion/BotonDeBarra.d.ts +15 -0
  230. package/lib/typescript/src/navegacion/BotonDeBarra.d.ts.map +1 -0
  231. package/lib/typescript/src/navegacion/encabezado.d.ts +44 -0
  232. package/lib/typescript/src/navegacion/encabezado.d.ts.map +1 -0
  233. package/lib/typescript/src/pantallas/PantallaDeAcceso.d.ts +32 -0
  234. package/lib/typescript/src/pantallas/PantallaDeAcceso.d.ts.map +1 -0
  235. package/lib/typescript/src/pantallas/PantallaDeEdicion.d.ts +38 -0
  236. package/lib/typescript/src/pantallas/PantallaDeEdicion.d.ts.map +1 -0
  237. package/lib/typescript/src/pantallas/PantallaDeFicha.d.ts +35 -0
  238. package/lib/typescript/src/pantallas/PantallaDeFicha.d.ts.map +1 -0
  239. package/lib/typescript/src/pantallas/PantallaDeHistorial.d.ts +65 -0
  240. package/lib/typescript/src/pantallas/PantallaDeHistorial.d.ts.map +1 -0
  241. package/lib/typescript/src/pantallas/PantallaDePerfil.d.ts +19 -0
  242. package/lib/typescript/src/pantallas/PantallaDePerfil.d.ts.map +1 -0
  243. package/lib/typescript/src/tema/ProveedorDeTema.d.ts +32 -0
  244. package/lib/typescript/src/tema/ProveedorDeTema.d.ts.map +1 -0
  245. package/lib/typescript/src/tema/estilos.d.ts +31 -0
  246. package/lib/typescript/src/tema/estilos.d.ts.map +1 -0
  247. package/lib/typescript/src/tema/fuentes.d.ts +20 -0
  248. package/lib/typescript/src/tema/fuentes.d.ts.map +1 -0
  249. package/lib/typescript/src/tema/index.d.ts +6 -0
  250. package/lib/typescript/src/tema/index.d.ts.map +1 -0
  251. package/lib/typescript/src/tema/paleta.d.ts +86 -0
  252. package/lib/typescript/src/tema/paleta.d.ts.map +1 -0
  253. package/lib/typescript/src/tema/tipografia.d.ts +29 -0
  254. package/lib/typescript/src/tema/tipografia.d.ts.map +1 -0
  255. package/lib/typescript/src/texto.d.ts +16 -0
  256. package/lib/typescript/src/texto.d.ts.map +1 -0
  257. package/package.json +140 -5
  258. package/src/camara/CampoDeFotos.tsx +132 -0
  259. package/src/camara/elegir.ts +113 -0
  260. package/src/camara/index.ts +15 -0
  261. package/src/camara/reducir.ts +87 -0
  262. package/src/componentes/AccionesDelEncabezado.tsx +247 -0
  263. package/src/componentes/BotonDeAvatar.tsx +59 -0
  264. package/src/componentes/BotonGrande.tsx +100 -0
  265. package/src/componentes/CabeceraEmpujada.tsx +69 -0
  266. package/src/componentes/Chip.tsx +60 -0
  267. package/src/componentes/ContenidoDePantalla.tsx +53 -0
  268. package/src/componentes/EstadoVacio.tsx +45 -0
  269. package/src/componentes/Foto.tsx +92 -0
  270. package/src/componentes/IconoDeRenglon.tsx +42 -0
  271. package/src/componentes/Logo.tsx +34 -0
  272. package/src/componentes/Nota.tsx +37 -0
  273. package/src/componentes/OpcionesExcluyentes.tsx +62 -0
  274. package/src/componentes/PantallaDeError.tsx +76 -0
  275. package/src/componentes/Pestanas.tsx +86 -0
  276. package/src/componentes/Rotulo.tsx +21 -0
  277. package/src/componentes/RotuloDeSeccion.tsx +71 -0
  278. package/src/componentes/Tarjeta.tsx +58 -0
  279. package/src/componentes/TarjetaDeDatos.tsx +62 -0
  280. package/src/componentes/TiraDeFotos.tsx +189 -0
  281. package/src/componentes/VisorDeFoto.tsx +181 -0
  282. package/src/componentes/logos/bola-blanca.png +0 -0
  283. package/src/componentes/logos/bola.png +0 -0
  284. package/src/componentes/logos/logo-blanco.png +0 -0
  285. package/src/componentes/logos/logo.png +0 -0
  286. package/src/dialogos/HostDeDialogos.tsx +172 -0
  287. package/src/dialogos/dialogos.ts +148 -0
  288. package/src/formularios/CampoDeSeleccion.tsx +60 -0
  289. package/src/formularios/SelectorDeOpcion.tsx +407 -0
  290. package/src/formularios/TextoDeAccesoControlado.tsx +72 -0
  291. package/src/formularios/campos.tsx +497 -0
  292. package/src/formularios/controlados.tsx +200 -0
  293. package/src/formularios/errores.ts +105 -0
  294. package/src/formularios/guardado.ts +76 -0
  295. package/src/formularios/useBusqueda.ts +19 -0
  296. package/src/fotos/elegir.ts +116 -0
  297. package/src/fotos/index.ts +6 -0
  298. package/src/hoja/HojaDeLista.tsx +214 -0
  299. package/src/hoja/HojaInferior.tsx +103 -0
  300. package/src/hoja/index.ts +5 -0
  301. package/src/hoja/useMasDeLaFicha.tsx +63 -0
  302. package/src/index.ts +151 -0
  303. package/src/listas/HojaDeFiltros.tsx +286 -0
  304. package/src/listas/ListaPaginada.tsx +117 -0
  305. package/src/listas/TarjetaDeslizable.tsx +126 -0
  306. package/src/listas/paginado.ts +15 -0
  307. package/src/listas/piezas.tsx +670 -0
  308. package/src/navegacion/BarraDePestanas.tsx +198 -0
  309. package/src/navegacion/BotonDeBarra.tsx +61 -0
  310. package/src/navegacion/encabezado.tsx +88 -0
  311. package/src/pantallas/PantallaDeAcceso.tsx +184 -0
  312. package/src/pantallas/PantallaDeEdicion.tsx +116 -0
  313. package/src/pantallas/PantallaDeFicha.tsx +115 -0
  314. package/src/pantallas/PantallaDeHistorial.tsx +293 -0
  315. package/src/pantallas/PantallaDePerfil.tsx +126 -0
  316. package/src/tema/ProveedorDeTema.tsx +150 -0
  317. package/src/tema/estilos.ts +51 -0
  318. package/src/tema/fuentes.ts +20 -0
  319. package/src/tema/index.ts +10 -0
  320. package/src/tema/paleta.ts +147 -0
  321. package/src/tema/tipografia.ts +29 -0
  322. package/src/texto.tsx +44 -0
@@ -0,0 +1,172 @@
1
+ import { crearEstilos, renglon, tipografia, usePaleta } from "../tema";
2
+ import BotonGrande from "../componentes/BotonGrande";
3
+ import { Text } from "../texto";
4
+ import {
5
+ dialogoActual,
6
+ responderDialogo,
7
+ suscribirDialogos,
8
+ type BotonDeDialogo,
9
+ } from "./dialogos";
10
+ import MaterialCommunityIcons from "@expo/vector-icons/MaterialCommunityIcons";
11
+ import React from "react";
12
+ import { Modal, Pressable, ScrollView, useWindowDimensions, View } from "react-native";
13
+
14
+ /**
15
+ * Pinta los diálogos que abre `mostrarDialogo` (`dialogos.ts`), de uno en uno. Se monta una
16
+ * sola vez, en el layout raíz de la app.
17
+ *
18
+ * Es el diálogo de la casa —el `ConfirmDialog` de las revisiones de wms— con la letra grande de las apps:
19
+ * una tarjeta blanca sobre fondo oscuro, el icono arriba, título y mensaje sin recortar, y los
20
+ * botones **apilados a lo ancho**: lado a lado no caben con la letra al 180%. «Cancelar» va como
21
+ * texto discreto al pie. Atrás y el toque fuera cierran como cancelar, salvo que el diálogo diga
22
+ * que no es cancelable.
23
+ */
24
+ const HostDeDialogos = () => {
25
+ const c = usePaleta();
26
+ const styles = useStyles();
27
+ const dialogo = React.useSyncExternalStore(suscribirDialogos, dialogoActual);
28
+ const { height } = useWindowDimensions();
29
+
30
+ if (!dialogo) return null;
31
+
32
+ const cancelable = dialogo.cancelable ?? true;
33
+ const cerrar = () => {
34
+ if (cancelable) responderDialogo(dialogo, undefined);
35
+ };
36
+ const acciones = dialogo.botones.filter((b) => b.estilo !== "cancelar");
37
+ const cancelar = dialogo.botones.find((b) => b.estilo === "cancelar");
38
+
39
+ return (
40
+ <Modal
41
+ visible
42
+ transparent
43
+ animationType="fade"
44
+ statusBarTranslucent
45
+ navigationBarTranslucent
46
+ onRequestClose={cerrar}
47
+ >
48
+ <Pressable style={styles.fondo} onPress={cerrar} accessibilityLabel="Cerrar">
49
+ {/* El `Pressable` vacío de la tarjeta se queda con el toque: tocar adentro no cierra. */}
50
+ <Pressable
51
+ style={[styles.tarjeta, { maxHeight: height * 0.85 }]}
52
+ onPress={() => {}}
53
+ >
54
+ <ScrollView
55
+ contentContainerStyle={styles.contenido}
56
+ showsVerticalScrollIndicator={false}
57
+ >
58
+ {dialogo.icono ? (
59
+ <View style={styles.icono}>
60
+ <MaterialCommunityIcons
61
+ name={dialogo.icono}
62
+ size={34}
63
+ color={c.primary}
64
+ />
65
+ </View>
66
+ ) : null}
67
+ <Text style={styles.titulo}>{dialogo.titulo}</Text>
68
+ {dialogo.mensaje ? (
69
+ <Text style={styles.mensaje}>{dialogo.mensaje}</Text>
70
+ ) : null}
71
+
72
+ <View style={styles.botones}>
73
+ {acciones.map((boton, i) => (
74
+ <Boton
75
+ key={`${boton.texto}-${i}`}
76
+ boton={boton}
77
+ onPress={() => responderDialogo(dialogo, boton.valor)}
78
+ />
79
+ ))}
80
+ {cancelar ? (
81
+ <Pressable
82
+ onPress={() => responderDialogo(dialogo, cancelar.valor)}
83
+ hitSlop={8}
84
+ accessibilityRole="button"
85
+ style={({ pressed }) => [
86
+ styles.cancelar,
87
+ pressed && { opacity: 0.6 },
88
+ ]}
89
+ >
90
+ <Text style={styles.cancelarTexto}>{cancelar.texto}</Text>
91
+ </Pressable>
92
+ ) : null}
93
+ </View>
94
+ </ScrollView>
95
+ </Pressable>
96
+ </Pressable>
97
+ </Modal>
98
+ );
99
+ };
100
+
101
+ function Boton({ boton, onPress }: { boton: BotonDeDialogo<unknown>; onPress: () => void }) {
102
+ const estilo = boton.estilo ?? "principal";
103
+ return (
104
+ <BotonGrande
105
+ icono={boton.icono}
106
+ modo={
107
+ estilo === "secundario"
108
+ ? "contorno"
109
+ : estilo === "destructivo"
110
+ ? "destructivo"
111
+ : "relleno"
112
+ }
113
+ onPress={onPress}
114
+ >
115
+ {boton.texto}
116
+ </BotonGrande>
117
+ );
118
+ }
119
+
120
+ const useStyles = crearEstilos((c) => ({
121
+ fondo: {
122
+ flex: 1,
123
+ backgroundColor: c.velo,
124
+ justifyContent: "center",
125
+ padding: 20,
126
+ },
127
+ tarjeta: {
128
+ width: "100%",
129
+ maxWidth: 480,
130
+ alignSelf: "center",
131
+ backgroundColor: c.superficie,
132
+ borderRadius: 20,
133
+ overflow: "hidden",
134
+ elevation: 12,
135
+ shadowColor: c.sombra,
136
+ shadowOffset: { width: 0, height: 10 },
137
+ shadowOpacity: 0.25,
138
+ shadowRadius: 24,
139
+ },
140
+ contenido: { padding: 22, gap: 10 },
141
+ icono: {
142
+ alignSelf: "center",
143
+ width: 60,
144
+ height: 60,
145
+ borderRadius: 30,
146
+ backgroundColor: c.primaryWash,
147
+ alignItems: "center",
148
+ justifyContent: "center",
149
+ marginBottom: 4,
150
+ },
151
+ titulo: {
152
+ ...renglon(tipografia.titulo),
153
+ fontWeight: "900",
154
+ color: c.texto,
155
+ textAlign: "center",
156
+ },
157
+ mensaje: {
158
+ ...renglon(tipografia.cuerpo),
159
+ color: c.secondaryDark,
160
+ textAlign: "center",
161
+ },
162
+ botones: { gap: 10, marginTop: 12 },
163
+ cancelar: { alignSelf: "center", paddingVertical: 12, paddingHorizontal: 20 },
164
+ cancelarTexto: {
165
+ ...renglon(tipografia.cuerpo),
166
+ fontWeight: "700",
167
+ color: c.secondary,
168
+ textAlign: "center",
169
+ },
170
+ }));
171
+
172
+ export default HostDeDialogos;
@@ -0,0 +1,148 @@
1
+ // Los diálogos de las apps, con su diseño y no el `Alert` del sistema. Esto es la API: la abren las
2
+ // pantallas y también código que no es componente (una cola de envíos, la ubicación, la
3
+ // navegación). Los pinta `HostDeDialogos`, montado una vez en el layout raíz.
4
+ import type MaterialCommunityIcons from "@expo/vector-icons/MaterialCommunityIcons";
5
+ import type React from "react";
6
+
7
+ type NombreDeIcono = React.ComponentProps<typeof MaterialCommunityIcons>["name"];
8
+
9
+ /**
10
+ * - `principal`: la acción esperada, en rojo.
11
+ * - `secundario`: otra opción válida, en contorno.
12
+ * - `destructivo`: borra o deshace algo (Deshacer, Descartar, Cerrar sesión), en rojo oscuro.
13
+ * - `cancelar`: no hacer nada, como texto discreto al pie.
14
+ */
15
+ export type EstiloDeBoton = "principal" | "secundario" | "destructivo" | "cancelar";
16
+
17
+ export interface BotonDeDialogo<V> {
18
+ texto: string;
19
+ estilo?: EstiloDeBoton;
20
+ icono?: NombreDeIcono;
21
+ /** Lo que resuelve la promesa de `mostrarDialogo` al tocarlo. */
22
+ valor: V;
23
+ }
24
+
25
+ export interface Dialogo<V> {
26
+ titulo: string;
27
+ mensaje?: string;
28
+ icono?: NombreDeIcono;
29
+ botones: BotonDeDialogo<V>[];
30
+ /**
31
+ * Si el botón atrás de Android y el toque fuera de la tarjeta lo cierran (resolviendo
32
+ * `undefined`, como cancelar). Por omisión, sí.
33
+ */
34
+ cancelable?: boolean;
35
+ }
36
+
37
+ interface EnEspera {
38
+ dialogo: Dialogo<unknown>;
39
+ responder: (valor: unknown) => void;
40
+ }
41
+
42
+ /**
43
+ * La fila de diálogos. Vive en `globalThis` para que Fast Refresh, al re-evaluar este módulo, no
44
+ * deje al host escuchando una fila vieja con promesas que nunca se resuelven.
45
+ */
46
+ const g = globalThis as typeof globalThis & {
47
+ __dialogos?: { fila: EnEspera[]; oyentes: Set<() => void> };
48
+ };
49
+ const estado = (g.__dialogos ??= { fila: [], oyentes: new Set() });
50
+
51
+ const avisarCambio = () => estado.oyentes.forEach((oyente) => oyente());
52
+
53
+ /**
54
+ * Abre un diálogo y espera la respuesta: el `valor` del botón tocado, o `undefined` si se cerró
55
+ * sin elegir (atrás, toque fuera). Si ya hay uno abierto, éste espera su turno: se muestran de uno
56
+ * en uno, en el orden en que llegaron.
57
+ */
58
+ export function mostrarDialogo<V>(dialogo: Dialogo<V>): Promise<V | undefined> {
59
+ return new Promise((resolver) => {
60
+ estado.fila.push({
61
+ dialogo: dialogo as Dialogo<unknown>,
62
+ responder: resolver as (valor: unknown) => void,
63
+ });
64
+ avisarCambio();
65
+ });
66
+ }
67
+
68
+ /**
69
+ * Una pregunta de sí o no. Resuelve `true` sólo si se tocó el botón de confirmar; cancelar,
70
+ * atrás y el toque fuera dan `false`.
71
+ */
72
+ export async function confirmar({
73
+ titulo,
74
+ mensaje,
75
+ textoConfirmar,
76
+ textoCancelar = "Cancelar",
77
+ destructivo = false,
78
+ icono,
79
+ }: {
80
+ titulo: string;
81
+ mensaje?: string;
82
+ textoConfirmar: string;
83
+ textoCancelar?: string;
84
+ destructivo?: boolean;
85
+ icono?: NombreDeIcono;
86
+ }): Promise<boolean> {
87
+ const respuesta = await mostrarDialogo({
88
+ titulo,
89
+ mensaje,
90
+ icono: icono ?? (destructivo ? "alert-circle-outline" : "help-circle-outline"),
91
+ botones: [
92
+ {
93
+ texto: textoConfirmar,
94
+ estilo: destructivo ? "destructivo" : "principal",
95
+ valor: true,
96
+ },
97
+ { texto: textoCancelar, estilo: "cancelar", valor: false },
98
+ ],
99
+ });
100
+ return respuesta === true;
101
+ }
102
+
103
+ /** Un aviso con un solo botón. Resuelve al cerrarse. */
104
+ export async function avisar({
105
+ titulo,
106
+ mensaje,
107
+ icono = "information-outline",
108
+ textoBoton = "Entendido",
109
+ cancelable = true,
110
+ }: {
111
+ titulo: string;
112
+ mensaje?: string;
113
+ icono?: NombreDeIcono;
114
+ textoBoton?: string;
115
+ cancelable?: boolean;
116
+ }): Promise<void> {
117
+ await mostrarDialogo({
118
+ titulo,
119
+ mensaje,
120
+ icono,
121
+ cancelable,
122
+ botones: [{ texto: textoBoton, estilo: "principal", valor: true }],
123
+ });
124
+ }
125
+
126
+ // ==============================|| PARA EL HOST ||============================== //
127
+
128
+ /** El que se está mostrando, o `null`. */
129
+ export const dialogoActual = (): Dialogo<unknown> | null => estado.fila[0]?.dialogo ?? null;
130
+
131
+ export function suscribirDialogos(oyente: () => void): () => void {
132
+ estado.oyentes.add(oyente);
133
+ return () => {
134
+ estado.oyentes.delete(oyente);
135
+ };
136
+ }
137
+
138
+ /**
139
+ * Cierra `dialogo` con `valor` y pasa al siguiente de la fila. Sólo si `dialogo` sigue siendo el
140
+ * actual: el segundo toque de un doble toque llega con el diálogo que ya se contestó, y sin esta
141
+ * comparación contestaba también el siguiente de la fila sin que el operador lo viera.
142
+ */
143
+ export function responderDialogo(dialogo: Dialogo<unknown>, valor: unknown): void {
144
+ if (estado.fila[0]?.dialogo !== dialogo) return;
145
+ const actual = estado.fila.shift();
146
+ actual?.responder(valor);
147
+ avisarCambio();
148
+ }
@@ -0,0 +1,60 @@
1
+ import { View } from "react-native";
2
+ import { crearEstilos, renglon, tipografia } from "../tema";
3
+ import { Text } from "../texto";
4
+ import { ErrorDelCampo } from "./campos";
5
+ import SelectorDeOpcion, {
6
+ SelectorDeVarias,
7
+ type Opcion,
8
+ type PropsDeSelectorDeOpcion,
9
+ type PropsDeSelectorDeVarias,
10
+ } from "./SelectorDeOpcion";
11
+
12
+ /**
13
+ * Un campo que se elige de una lista larga —un catálogo del servidor, uno guardado en el
14
+ * teléfono—: `SelectorDeOpcion` con el error del formulario debajo. Es el `ControlledAutocomplete`
15
+ * del portal.
16
+ *
17
+ * Quien lo usa trae las opciones y, si son del servidor, la búsqueda: en una app es su consulta del
18
+ * catálogo (`useBusqueda` para no pedir una vez por letra). Una lista fija se pasa sin `onBuscar`
19
+ * y se filtra sola.
20
+ */
21
+ export default function CampoDeSeleccion<T extends Opcion>({
22
+ error,
23
+ ayuda,
24
+ ...props
25
+ }: PropsDeSelectorDeOpcion<T> & { error?: string; ayuda?: string }) {
26
+ const styles = useStyles();
27
+ return (
28
+ <View style={styles.campo}>
29
+ <SelectorDeOpcion<T> {...props} />
30
+ {ayuda ? <Text style={styles.ayuda}>{ayuda}</Text> : null}
31
+ <ErrorDelCampo error={error} />
32
+ </View>
33
+ );
34
+ }
35
+
36
+ /**
37
+ * Lo mismo, pero se eligen varias (los recibos de un concepto, las piezas sobre las que se cobra
38
+ * un porcentaje): `SelectorDeVarias` con el error debajo. El valor es la lista de opciones
39
+ * enteras, igual que el de una es la opción entera.
40
+ */
41
+ export function CampoDeVarias<T extends Opcion>({
42
+ error,
43
+ ayuda,
44
+ ...props
45
+ }: PropsDeSelectorDeVarias<T> & { error?: string; ayuda?: string }) {
46
+ const styles = useStyles();
47
+ return (
48
+ <View style={styles.campo}>
49
+ <SelectorDeVarias<T> {...props} />
50
+ {ayuda ? <Text style={styles.ayuda}>{ayuda}</Text> : null}
51
+ <ErrorDelCampo error={error} />
52
+ </View>
53
+ );
54
+ }
55
+
56
+ // La ayuda con el mismo renglón y color que la de los demás campos (`Campo`).
57
+ const useStyles = crearEstilos((c) => ({
58
+ campo: { gap: 6 },
59
+ ayuda: { ...renglon(tipografia.secundario), color: c.secondary },
60
+ }));