xonecode 0.1.0

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 (187) hide show
  1. package/README.md +167 -0
  2. package/dist/agent/authEnDisco.js +56 -0
  3. package/dist/agent/authEnDisco.js.map +1 -0
  4. package/dist/agent/configEnDisco.js +109 -0
  5. package/dist/agent/configEnDisco.js.map +1 -0
  6. package/dist/agent/crearProyecto.js +34 -0
  7. package/dist/agent/crearProyecto.js.map +1 -0
  8. package/dist/agent/entorno.js +124 -0
  9. package/dist/agent/entorno.js.map +1 -0
  10. package/dist/agent/guionizado.js +53 -0
  11. package/dist/agent/guionizado.js.map +1 -0
  12. package/dist/agent/instantanea.js +129 -0
  13. package/dist/agent/instantanea.js.map +1 -0
  14. package/dist/agent/interrupts.js +83 -0
  15. package/dist/agent/interrupts.js.map +1 -0
  16. package/dist/agent/mensajes.js +24 -0
  17. package/dist/agent/mensajes.js.map +1 -0
  18. package/dist/agent/modelos.js +42 -0
  19. package/dist/agent/modelos.js.map +1 -0
  20. package/dist/agent/normalizar.js +20 -0
  21. package/dist/agent/normalizar.js.map +1 -0
  22. package/dist/agent/perfiles.js +103 -0
  23. package/dist/agent/perfiles.js.map +1 -0
  24. package/dist/agent/proyecto.js +107 -0
  25. package/dist/agent/proyecto.js.map +1 -0
  26. package/dist/agent/puente.js +142 -0
  27. package/dist/agent/puente.js.map +1 -0
  28. package/dist/agent/resumenDeTool.js +48 -0
  29. package/dist/agent/resumenDeTool.js.map +1 -0
  30. package/dist/agent/skills.js +65 -0
  31. package/dist/agent/skills.js.map +1 -0
  32. package/dist/agent/textoDeTool.js +113 -0
  33. package/dist/agent/textoDeTool.js.map +1 -0
  34. package/dist/agent/turnoReal.js +173 -0
  35. package/dist/agent/turnoReal.js.map +1 -0
  36. package/dist/agent/verificador.js +65 -0
  37. package/dist/agent/verificador.js.map +1 -0
  38. package/dist/agent/xoneAgent.js +106 -0
  39. package/dist/agent/xoneAgent.js.map +1 -0
  40. package/dist/bin.js +9 -0
  41. package/dist/bin.js.map +1 -0
  42. package/dist/cli/aprobar.js +82 -0
  43. package/dist/cli/aprobar.js.map +1 -0
  44. package/dist/cli/config.js +133 -0
  45. package/dist/cli/config.js.map +1 -0
  46. package/dist/cli/consola.js +346 -0
  47. package/dist/cli/consola.js.map +1 -0
  48. package/dist/cli/describe.js +53 -0
  49. package/dist/cli/describe.js.map +1 -0
  50. package/dist/cli/doctor.js +45 -0
  51. package/dist/cli/doctor.js.map +1 -0
  52. package/dist/cli/main.js +520 -0
  53. package/dist/cli/main.js.map +1 -0
  54. package/dist/cli/markdown.js +90 -0
  55. package/dist/cli/markdown.js.map +1 -0
  56. package/dist/cli/run.js +164 -0
  57. package/dist/cli/run.js.map +1 -0
  58. package/dist/cli/spinner.js +89 -0
  59. package/dist/cli/spinner.js.map +1 -0
  60. package/dist/cli/stdio.js +193 -0
  61. package/dist/cli/stdio.js.map +1 -0
  62. package/dist/cli/tema.js +40 -0
  63. package/dist/cli/tema.js.map +1 -0
  64. package/dist/cli/verify.js +62 -0
  65. package/dist/cli/verify.js.map +1 -0
  66. package/dist/core/bitacora.js +30 -0
  67. package/dist/core/bitacora.js.map +1 -0
  68. package/dist/core/config.js +236 -0
  69. package/dist/core/config.js.map +1 -0
  70. package/dist/core/contextos.js +56 -0
  71. package/dist/core/contextos.js.map +1 -0
  72. package/dist/core/deps.js +51 -0
  73. package/dist/core/deps.js.map +1 -0
  74. package/dist/core/diff.js +79 -0
  75. package/dist/core/diff.js.map +1 -0
  76. package/dist/core/esqueleto.js +366 -0
  77. package/dist/core/esqueleto.js.map +1 -0
  78. package/dist/core/events.js +2 -0
  79. package/dist/core/events.js.map +1 -0
  80. package/dist/core/modelos.js +85 -0
  81. package/dist/core/modelos.js.map +1 -0
  82. package/dist/core/notify.js +106 -0
  83. package/dist/core/notify.js.map +1 -0
  84. package/dist/core/ports.js +114 -0
  85. package/dist/core/ports.js.map +1 -0
  86. package/dist/core/turno.js +127 -0
  87. package/dist/core/turno.js.map +1 -0
  88. package/dist/vendor/hitl.js +103 -0
  89. package/dist/vendor/hitl.js.map +1 -0
  90. package/dist/vendor/skillLoaders/catalog.js +74 -0
  91. package/dist/vendor/skillLoaders/catalog.js.map +1 -0
  92. package/dist/vendor/tokenTracking.js +58 -0
  93. package/dist/vendor/tokenTracking.js.map +1 -0
  94. package/package.json +41 -0
  95. package/skills/xone-debugging/SKILL.md +52 -0
  96. package/skills/xone-debugging/references/faq.md +561 -0
  97. package/skills/xone-debugging/references/troubleshooting-y-glosario.md +429 -0
  98. package/skills/xone-development/SKILL.md +105 -0
  99. package/skills/xone-development/references/anti-patrones.md +94 -0
  100. package/skills/xone-development/references/css/atributos-por-categoria.md +509 -0
  101. package/skills/xone-development/references/css/buenas-practicas-y-parser.md +419 -0
  102. package/skills/xone-development/references/css/dinamicos-cascada-y-componentes.md +550 -0
  103. package/skills/xone-development/references/css/patrones-material-y-temas.md +1140 -0
  104. package/skills/xone-development/references/css/propiedades-y-herencia.md +885 -0
  105. package/skills/xone-development/references/css/selectores-unidades-colores.md +840 -0
  106. package/skills/xone-development/references/datos/appdata-referencia-ampliada.md +457 -0
  107. package/skills/xone-development/references/datos/appdata.md +611 -0
  108. package/skills/xone-development/references/datos/http-sqlmanager-y-crypto.md +720 -0
  109. package/skills/xone-development/references/datos/http.md +366 -0
  110. package/skills/xone-development/references/datos/oauth2-y-replica.md +156 -0
  111. package/skills/xone-development/references/device/biometria-imagedrawing-y-otros.md +544 -0
  112. package/skills/xone-development/references/device/objetos-de-dispositivo.md +583 -0
  113. package/skills/xone-development/references/device/systemsettings-referencia-ampliada.md +396 -0
  114. package/skills/xone-development/references/device/systemsettings-y-permisos.md +342 -0
  115. package/skills/xone-development/references/fundamentos/conceptos-clave.md +695 -0
  116. package/skills/xone-development/references/fundamentos/configuracion-app-xml-ini-mappings.md +668 -0
  117. package/skills/xone-development/references/fundamentos/errores-comunes.md +312 -0
  118. package/skills/xone-development/references/fundamentos/navegacion-convenciones-y-primer-proyecto.md +576 -0
  119. package/skills/xone-development/references/fundamentos/plataforma-y-anatomia-de-proyecto.md +387 -0
  120. package/skills/xone-development/references/indice-completo.md +77 -0
  121. package/skills/xone-development/references/javascript/coleccion-error-y-usuario.md +260 -0
  122. package/skills/xone-development/references/javascript/debugging-y-best-practices.md +245 -0
  123. package/skills/xone-development/references/javascript/metodos-de-los-controles.md +556 -0
  124. package/skills/xone-development/references/javascript/metodos-nativos-de-la-vista.md +114 -0
  125. package/skills/xone-development/references/javascript/motor-js-y-contexto-de-ejecucion.md +319 -0
  126. package/skills/xone-development/references/javascript/objeto-ai-llm-en-dispositivo.md +358 -0
  127. package/skills/xone-development/references/javascript/objetos-creables-a-m.md +527 -0
  128. package/skills/xone-development/references/javascript/objetos-creables-n-z.md +385 -0
  129. package/skills/xone-development/references/javascript/patrones-criticos-seguridad-y-rendimiento.md +595 -0
  130. package/skills/xone-development/references/javascript/patrones-de-navegacion-datos-y-codigo.md +751 -0
  131. package/skills/xone-development/references/javascript/patrones-de-ui-voz-integracion-y-seguridad.md +701 -0
  132. package/skills/xone-development/references/javascript/plantillas-y-funciones-utilitarias.md +647 -0
  133. package/skills/xone-development/references/javascript/self-y-dataobject.md +449 -0
  134. package/skills/xone-development/references/javascript/singletons-globales.md +361 -0
  135. package/skills/xone-development/references/javascript/ui-catalogo-de-metodos.md +464 -0
  136. package/skills/xone-development/references/javascript/ui-gps-camara-y-multimedia.md +506 -0
  137. package/skills/xone-development/references/javascript/ui-navegacion-mensajes-y-vista.md +422 -0
  138. package/skills/xone-development/references/resumen-js-datos-dispositivo.md +80 -0
  139. package/skills/xone-development/references/resumen-xml-y-css.md +74 -0
  140. package/skills/xone-development/references/tipos-de-prop.md +28 -0
  141. package/skills/xone-development/references/xml-ui/asfilter-visibilidad-eventos-y-macros.md +576 -0
  142. package/skills/xone-development/references/xml-ui/atributos-coll-group-frame.md +235 -0
  143. package/skills/xone-development/references/xml-ui/atributos-method-macro-script-event-app.md +244 -0
  144. package/skills/xone-development/references/xml-ui/atributos-prop.md +439 -0
  145. package/skills/xone-development/references/xml-ui/contents-y-macros.md +392 -0
  146. package/skills/xone-development/references/xml-ui/errores-comunes-xml.md +245 -0
  147. package/skills/xone-development/references/xml-ui/estructura-y-nodo-coll.md +326 -0
  148. package/skills/xone-development/references/xml-ui/eventos-ciclo-de-vida-e-interaccion.md +704 -0
  149. package/skills/xone-development/references/xml-ui/eventos-sistema-login-y-personalizados.md +944 -0
  150. package/skills/xone-development/references/xml-ui/layouts-herencia-y-buenas-practicas.md +618 -0
  151. package/skills/xone-development/references/xml-ui/mapas.md +685 -0
  152. package/skills/xone-development/references/xml-ui/mappings-y-colecciones-separadas.md +148 -0
  153. package/skills/xone-development/references/xml-ui/nodos-group-y-frame.md +666 -0
  154. package/skills/xone-development/references/xml-ui/patrones-de-pantalla.md +643 -0
  155. package/skills/xone-development/references/xml-ui/prop-atributos-y-condiciones.md +298 -0
  156. package/skills/xone-development/references/xml-ui/prop-tipos-basicos.md +493 -0
  157. package/skills/xone-development/references/xml-ui/prop-tipos-combos-y-controles.md +664 -0
  158. package/skills/xone-development/references/xml-ui/prop-tipos-listas-y-mapas.md +412 -0
  159. package/skills/xone-plan-builder/SKILL.md +183 -0
  160. package/skills/xone-plan-builder/agents/openai.yaml +5 -0
  161. package/skills/xone-plan-builder/references/TASKS-FORMAT.md +132 -0
  162. package/skills/xone-project-generator/SKILL.md +111 -0
  163. package/skills/xone-project-generator/references/canonical-sizes.md +292 -0
  164. package/skills/xone-project-generator/references/colecciones-base.md +16 -0
  165. package/skills/xone-project-generator/references/convenciones-de-nombres.md +16 -0
  166. package/skills/xone-project-generator/references/ejemplos-por-sector-y-prohibiciones.md +140 -0
  167. package/skills/xone-project-generator/references/fase-3-estilos-css.md +597 -0
  168. package/skills/xone-project-generator/references/fase-6-colecciones.md +762 -0
  169. package/skills/xone-project-generator/references/fase-7-asfilter-e-integraciones.md +142 -0
  170. package/skills/xone-project-generator/references/fase-7-entidades-y-estructura-de-pantalla.md +494 -0
  171. package/skills/xone-project-generator/references/fase-7-plantilla-consola.md +477 -0
  172. package/skills/xone-project-generator/references/fase-7-plantillas-de-pantalla.md +302 -0
  173. package/skills/xone-project-generator/references/fase-7-viewmodes-graficos-y-listas.md +681 -0
  174. package/skills/xone-project-generator/references/fase-7-viewmodes-mapa-y-calendario.md +479 -0
  175. package/skills/xone-project-generator/references/fases-0-2-analisis-y-modelo-de-datos.md +350 -0
  176. package/skills/xone-project-generator/references/fases-10-12-readmes-y-validacion.md +194 -0
  177. package/skills/xone-project-generator/references/fases-4-5-estructura-y-configuracion.md +587 -0
  178. package/skills/xone-project-generator/references/fases-8-9-eventos-y-javascript.md +861 -0
  179. package/skills/xone-project-generator/references/flujo-de-generacion.md +67 -0
  180. package/skills/xone-project-generator/references/plantillas-estandar.md +98 -0
  181. package/skills/xone-project-generator/references/tamanos-canonicos.md +49 -0
  182. package/skills/xone-review/SKILL.md +189 -0
  183. package/skills/xone-spec-builder/SKILL.md +235 -0
  184. package/skills/xone-spec-builder/agents/openai.yaml +5 -0
  185. package/skills/xone-spec-builder/references/ADR-FORMAT.md +55 -0
  186. package/skills/xone-spec-builder/references/CONTEXT-FORMAT.md +42 -0
  187. package/skills/xone-spec-builder/references/PLAN-FORMAT.md +120 -0
@@ -0,0 +1,1140 @@
1
+ # XOne CSS — Patrones Material Design, temas y CSS de ejemplo
2
+
3
+ > Fuente: `xone/v2/xone-help-docs/topics/04-css-styling-guide.md` §14–§16. Referencia de la skill; el índice está en [../../SKILL.md](../../SKILL.md).
4
+
5
+ Contenido: §14 patrones Material (header/body/footer, botones, inputs, tarjetas, FAB, toolbar, item de lista) · §15 temas light/dark y cambio dinámico · §16 default.css y colors.css completos y comentados
6
+
7
+ ---
8
+
9
+ ## 14. Patrones de Diseño Material Design
10
+
11
+ Esta sección presenta los patrones de diseño más comunes utilizados en los proyectos XOne reales, siguiendo los principios de Material Design.
12
+
13
+ ### 14.1 Esqueleto base (coll + prop globales)
14
+
15
+ Todo proyecto XOne debe definir los selectores globales `coll` y `prop` como base. Este es el esqueleto mínimo presente en **todos** los proyectos de ejemplo:
16
+
17
+ ```css
18
+ /* Configuración global de propiedades */
19
+ prop {
20
+ fontname: Roboto-Regular.ttf;
21
+ fontsize: 11;
22
+ labelbox: false;
23
+ label-wrap: true;
24
+ text-border: false;
25
+ forecolor: #212121;
26
+ }
27
+
28
+ /* Configuración global de colecciones */
29
+ coll {
30
+ notab: true;
31
+ show-toolbar: false;
32
+ group-swipe: false;
33
+ editmask: 0;
34
+ bgcolor: #FFFFFF;
35
+ }
36
+ ```
37
+
38
+ ### 14.2 Clase de header (.frameHeader)
39
+
40
+ El header es el frame superior de cada pantalla. Suele contener el título, botones de navegación y acciones.
41
+
42
+ ```css
43
+ /* Header estandar */
44
+ .frameHeader {
45
+ width: 100%;
46
+ height: 140p;
47
+ bgcolor: #1565C0; /* Color primario de marca */
48
+ align: center;
49
+ }
50
+
51
+ /* Header secundario (mas bajo) */
52
+ .frameHeaderSecundario {
53
+ width: 100%;
54
+ height: 120p;
55
+ bgcolor: #1976D2;
56
+ align: center;
57
+ }
58
+
59
+ /* Header transparente (para pantallas con mapa) */
60
+ .frameHeaderTransparente {
61
+ width: 100%;
62
+ height: 100p;
63
+ bgcolor: #00FFFFFF;
64
+ align: center;
65
+ }
66
+ ```
67
+
68
+ ### 14.3 Clase de body (.frameBody con scroll)
69
+
70
+ El body es el área principal de contenido, normalmente con scroll habilitado.
71
+
72
+ ```css
73
+ /* Body con scroll (el mas comun) */
74
+ .frameBody {
75
+ width: 100%;
76
+ height: 100%;
77
+ scroll: true;
78
+ bgcolor: #F5F5F5;
79
+ }
80
+
81
+ /* Body sin scroll */
82
+ .frameBodyFijo {
83
+ width: 100%;
84
+ height: 100%;
85
+ scroll: false;
86
+ bgcolor: #FFFFFF;
87
+ }
88
+
89
+ /* Body para pantallas con mapa */
90
+ .frameBodyMapa {
91
+ width: 100%;
92
+ height: 100%;
93
+ scroll: false;
94
+ bgcolor: #E3F2FD;
95
+ }
96
+ ```
97
+
98
+ ### 14.4 Clase de footer (.frameFooter)
99
+
100
+ El footer es el frame inferior, normalmente con botones de acción.
101
+
102
+ ```css
103
+ /* Footer estandar con borde superior */
104
+ .frameFooter {
105
+ width: 100%;
106
+ height: 120p;
107
+ bgcolor: #FFFFFF;
108
+ align: center;
109
+ border-top: true;
110
+ border-top-color: #E0E0E0;
111
+ }
112
+
113
+ /* Footer fijo (no se mueve con el scroll) */
114
+ .frameFooterFijo {
115
+ width: 100%;
116
+ height: 120p;
117
+ bgcolor: #FFFFFF;
118
+ align: center;
119
+ fixed: true;
120
+ orientation: bottom;
121
+ }
122
+ ```
123
+
124
+ ### 14.5 Botones (.btnPrimario, .btnSecundario, .btnPeligro)
125
+
126
+ Los botones siguen el patron de Material Design con esquinas redondeadas y colores por estado:
127
+
128
+ ```css
129
+ /* Boton primario - Accion principal */
130
+ .btnPrimario {
131
+ width: 90%;
132
+ height: 56p;
133
+ bgcolor: #1565C0;
134
+ forecolor: #FFFFFF;
135
+ border-corner-radius: 28;
136
+ text-align: center;
137
+ fontsize: 16;
138
+ fontname: Roboto-Bold.ttf;
139
+ }
140
+
141
+ /* Boton secundario - Outline */
142
+ .btnSecundario {
143
+ width: 90%;
144
+ height: 56p;
145
+ bgcolor: #FFFFFF;
146
+ forecolor: #1565C0;
147
+ border: true;
148
+ border-color: #1565C0;
149
+ border-corner-radius: 28;
150
+ text-align: center;
151
+ fontsize: 16;
152
+ }
153
+
154
+ /* Boton de peligro - Accion destructiva */
155
+ .btnPeligro {
156
+ width: 90%;
157
+ height: 56p;
158
+ bgcolor: #F44336;
159
+ forecolor: #FFFFFF;
160
+ border-corner-radius: 28;
161
+ text-align: center;
162
+ fontsize: 16;
163
+ }
164
+
165
+ /* Boton de exito - Confirmacion */
166
+ .btnExito {
167
+ width: 90%;
168
+ height: 56p;
169
+ bgcolor: #4CAF50;
170
+ forecolor: #FFFFFF;
171
+ border-corner-radius: 28;
172
+ text-align: center;
173
+ fontsize: 16;
174
+ fontname: Roboto-Bold.ttf;
175
+ }
176
+
177
+ /* Boton de acento */
178
+ .btnAcento {
179
+ width: 90%;
180
+ height: 56p;
181
+ bgcolor: #00BCD4;
182
+ forecolor: #FFFFFF;
183
+ border-corner-radius: 28;
184
+ text-align: center;
185
+ fontsize: 16;
186
+ fontname: Roboto-Bold.ttf;
187
+ }
188
+ ```
189
+
190
+ ### 14.6 Campos de texto (.textoEditable)
191
+
192
+ ```css
193
+ /* Campo con borde inferior (Material Design) */
194
+ .textoEditable {
195
+ width: 95%;
196
+ height: 56p;
197
+ labelwidth: 0;
198
+ text-border: true;
199
+ text-border-bottom: true;
200
+ text-border-left: false;
201
+ text-border-right: false;
202
+ text-border-top: false;
203
+ text-border-color: #BDBDBD;
204
+ fontsize: 14;
205
+ }
206
+
207
+ /* Campo enfocado - Color del borde cambia */
208
+ .textoEditableEnfocado {
209
+ extends: .textoEditable;
210
+ text-border-color: #1565C0;
211
+ }
212
+
213
+ /* Campo con fondo gris (sin borde) */
214
+ .inputTexto {
215
+ width: 95%;
216
+ height: 56p;
217
+ bgcolor: #F5F5F5;
218
+ border-corner-radius: 8;
219
+ text-border: false;
220
+ fontsize: 14;
221
+ lmargin: 15p;
222
+ }
223
+
224
+ /* Campo de busqueda redondeado */
225
+ .inputBusqueda {
226
+ width: 95%;
227
+ height: 56p;
228
+ bgcolor: #FFFFFF;
229
+ border-corner-radius: 28;
230
+ border: true;
231
+ border-color: #E0E0E0;
232
+ lmargin: 15p;
233
+ fontsize: 14;
234
+ }
235
+
236
+ /* Campo multilinea */
237
+ .textoEditableMulti {
238
+ extends: .textoEditable;
239
+ lines: 5;
240
+ fixed-lines: false;
241
+ text-border: true;
242
+ text-border-bottom: true;
243
+ text-border-left: true;
244
+ text-border-right: true;
245
+ text-border-top: true;
246
+ border-corner-radius: 8;
247
+ }
248
+ ```
249
+
250
+ ### 14.7 Tarjetas (.frameCard)
251
+
252
+ Las tarjetas son contenedores blancos elevados que agrupan información relacionada:
253
+
254
+ ```css
255
+ /* Tarjeta estandar */
256
+ .tarjeta {
257
+ width: 95%;
258
+ bgcolor: #FFFFFF;
259
+ border-corner-radius: 12;
260
+ tmargin: 10p;
261
+ bmargin: 5p;
262
+ lmargin: 10p;
263
+ rmargin: 10p;
264
+ }
265
+
266
+ /* Tarjeta con borde */
267
+ .tarjetaConBorde {
268
+ width: 95%;
269
+ bgcolor: #FFFFFF;
270
+ border-corner-radius: 16;
271
+ border: true;
272
+ border-color: #E0E0E0;
273
+ tmargin: 10p;
274
+ }
275
+
276
+ /* Tarjeta seleccionada */
277
+ .tarjetaSeleccionada {
278
+ width: 95%;
279
+ bgcolor: #E3F2FD;
280
+ border-corner-radius: 12;
281
+ border: true;
282
+ border-color: #1565C0;
283
+ }
284
+
285
+ /* Tarjeta con padding interno (proyecto SocialNetwork) */
286
+ .frameCard {
287
+ width: 96%;
288
+ lmargin: 2%;
289
+ bgcolor: #FFFFFF;
290
+ border-corner-radius: 12;
291
+ tmargin: 10p;
292
+ tpadding: 15p;
293
+ bpadding: 15p;
294
+ lpadding: 15p;
295
+ rpadding: 15p;
296
+ }
297
+ ```
298
+
299
+ ### 14.8 FAB (Floating Action Button)
300
+
301
+ El FAB es un botón circular flotante que representa la acción principal de la pantalla:
302
+
303
+ ```css
304
+ /* FAB estandar (56p) */
305
+ .btnFAB {
306
+ width: 56p;
307
+ height: 56p;
308
+ bgcolor: #1565C0;
309
+ border-corner-radius: 28;
310
+ }
311
+
312
+ /* FAB grande (64p) */
313
+ .btnFlotante {
314
+ width: 64p;
315
+ height: 64p;
316
+ bgcolor: #1565C0;
317
+ border-corner-radius: 32;
318
+ }
319
+
320
+ /* FAB extragrande con floating (proyecto SocialNetwork - 112p) */
321
+ .btnFABGrande {
322
+ width: 112p;
323
+ height: 112p;
324
+ bgcolor: #FFC107;
325
+ border-corner-radius: 56;
326
+ labelwidth: 0;
327
+ img-width: 48p;
328
+ img-height: 48p;
329
+ floating: true;
330
+ }
331
+ ```
332
+
333
+ ### 14.9 Toolbar / Tab Bar
334
+
335
+ ```css
336
+ /* Grupo sin tabs (el mas comun) */
337
+ .groupNoTab {
338
+ tab-visible: false;
339
+ }
340
+
341
+ /* Grupo con tabs de navegacion */
342
+ .groupConTab {
343
+ tab-visible: true;
344
+ tab-height: 56p;
345
+ tab-fontsize: 14;
346
+ tab-bgcolor: #0D47A1;
347
+ tab-forecolor: #BBDEFB;
348
+ tab-selected-forecolor: #FFFFFF;
349
+ tab-indicator-color: #FFFFFF;
350
+ }
351
+
352
+ /* Barra de navegacion inferior (proyecto SocialNetwork) */
353
+ .frameNavBar {
354
+ width: 100%;
355
+ height: 100p;
356
+ bgcolor: #FFFFFF;
357
+ align: center;
358
+ fixed: true;
359
+ orientation: bottom;
360
+ }
361
+
362
+ /* Item de navegacion */
363
+ .btnNavItem {
364
+ width: 25%;
365
+ height: 100%;
366
+ bgcolor: #FFFFFF;
367
+ labelwidth: 0;
368
+ img-width: 48p;
369
+ img-height: 48p;
370
+ newline: false;
371
+ }
372
+
373
+ .btnNavItemActive {
374
+ extends: .btnNavItem;
375
+ bgcolor: #FFECB3;
376
+ }
377
+ ```
378
+
379
+ ### 14.10 Item de lista
380
+
381
+ ```css
382
+ /* Item de lista estandar */
383
+ .itemLista {
384
+ width: 100%;
385
+ height: 72p;
386
+ bgcolor: #FFFFFF;
387
+ border-bottom: true;
388
+ border-bottom-color: #EEEEEE;
389
+ }
390
+
391
+ /* Item de lista seleccionado */
392
+ .itemListaSeleccionado {
393
+ width: 100%;
394
+ height: 72p;
395
+ bgcolor: #E3F2FD;
396
+ }
397
+
398
+ /* Separador de lista */
399
+ .separador {
400
+ width: 100%;
401
+ height: 1p;
402
+ bgcolor: #EEEEEE;
403
+ }
404
+
405
+ /* Separador con margen lateral */
406
+ .separadorConMargen {
407
+ width: 90%;
408
+ height: 1p;
409
+ bgcolor: #E0E0E0;
410
+ align: center;
411
+ }
412
+
413
+ /* Separador con indentacion (estilo MiMensajeria) */
414
+ .frameDivider {
415
+ width: 100%;
416
+ height: 1p;
417
+ bgcolor: #E0E0E0;
418
+ lmargin: 72p;
419
+ }
420
+ ```
421
+
422
+ ---
423
+
424
+ ## 15. Temas (Light y Dark)
425
+
426
+ ### 15.1 Como estructurar temas
427
+
428
+ XOne soporta cambio de tema mediante archivos CSS separados que se cargan automáticamente según el tema activo del dispositivo:
429
+
430
+ - `default.css` - Tema base (normalmente light)
431
+ - `default_night.css` - Sobreescrituras para tema oscuro
432
+ - `default_day.css` - Sobreescrituras para tema claro (si el base es oscuro)
433
+
434
+ El sistema de cascada de XOne aplica automáticamente el archivo de tema sobre los estilos base. Solo es necesario sobreescribir los atributos de color que cambian.
435
+
436
+ ### 15.2 Variables de color centralizadas
437
+
438
+ XOne admite variables CSS reales (`:root { --color: red; }` + `var(--color)`). Para temas el patrón recomendado es declarar la paleta en `:root` dentro de `colors.css` y referenciarla con `var(--...)` en el resto de hojas. Como alternativa equivalente — más antigua pero todavía válida — se pueden usar clases de color que encapsulan el valor:
439
+
440
+ **Patrón con variables CSS (recomendado):**
441
+
442
+ ```css
443
+ /* default-colors.css */
444
+ :root {
445
+ --color-primario: #1565C0;
446
+ --color-fondo: #FFFFFF;
447
+ --color-texto: #212121;
448
+ }
449
+
450
+ /* default.css */
451
+ .frameHeader {
452
+ bgcolor: var(--color-primario);
453
+ forecolor: var(--color-fondo);
454
+ }
455
+
456
+ /* default_night.css — solo redefine las variables */
457
+ :root {
458
+ --color-primario: #0D47A1;
459
+ --color-fondo: #121212;
460
+ --color-texto: #E0E0E0;
461
+ }
462
+ ```
463
+
464
+ **Patrón clásico con clases (sigue funcionando):**
465
+
466
+ ```css
467
+ /* default-colors.css - Tema Light */
468
+ .xnDarkBgcolor {
469
+ bgcolor: #1565C0;
470
+ forecolor: #FFFFFF;
471
+ }
472
+
473
+ .xnLightBgcolor {
474
+ bgcolor: #F5F5F5;
475
+ forecolor: #212121;
476
+ }
477
+
478
+ .xnTransparentBgcolor {
479
+ bgcolor: #00000000;
480
+ }
481
+ ```
482
+
483
+ ### 15.3 Ejemplo de tema oscuro
484
+
485
+ **`default_night.css`:**
486
+
487
+ ```css
488
+ /* Sobreescribir coleccion */
489
+ coll {
490
+ bgcolor: #121212;
491
+ }
492
+
493
+ /* Sobreescribir propiedades globales */
494
+ prop {
495
+ forecolor: #E0E0E0;
496
+ }
497
+
498
+ /* Sobreescribir layout */
499
+ .frameHeader {
500
+ bgcolor: #1E1E1E;
501
+ }
502
+
503
+ .frameBody {
504
+ bgcolor: #121212;
505
+ }
506
+
507
+ .frameFooter {
508
+ bgcolor: #1E1E1E;
509
+ border-top-color: #333333;
510
+ }
511
+
512
+ /* Sobreescribir tarjetas */
513
+ .tarjeta {
514
+ bgcolor: #1E1E1E;
515
+ }
516
+
517
+ /* Sobreescribir inputs */
518
+ .inputTexto {
519
+ bgcolor: #2C2C2C;
520
+ text-forecolor: #E0E0E0;
521
+ }
522
+
523
+ /* Sobreescribir textos */
524
+ .textoTitulo {
525
+ forecolor: #FFFFFF;
526
+ }
527
+
528
+ .textoSecundario {
529
+ forecolor: #9E9E9E;
530
+ }
531
+ ```
532
+
533
+ **`default_day.css` (ejemplo de la knowledgebase):**
534
+
535
+ ```css
536
+ .cssDemo {
537
+ bgcolor: #F8C471;
538
+ forecolor: #000000;
539
+ title: Modo dia;
540
+ }
541
+ ```
542
+
543
+ **`default_night.css` (ejemplo de la knowledgebase):**
544
+
545
+ ```css
546
+ .cssDemo {
547
+ bgcolor: #000000;
548
+ forecolor: #FFFFFF;
549
+ title: Modo noche;
550
+ }
551
+ ```
552
+
553
+ ### 15.4 Cambio dinámico de CSS
554
+
555
+ Desde JavaScript se puede cargar un archivo CSS diferente en tiempo de ejecución, lo que permite implementar un cambio de tema manual por el usuario. Consultar la API JavaScript para los métodos disponibles.
556
+
557
+ > **Referencia cruzada:** Para los métodos JavaScript de cambio de CSS, consultar el tópico 03 - API JavaScript.
558
+
559
+ ---
560
+
561
+ ## 16. CSS Completo de Ejemplo
562
+
563
+ ### Archivo `default.css` completo comentado
564
+
565
+ El siguiente ejemplo es un `default.css` completo para un proyecto XOne generico, basado en los patrones reales encontrados en los proyectos UseCars, XOneDelivery, MiMensajeria, SocialNetwork y GestionTareas:
566
+
567
+ ```css
568
+ /* ============================================
569
+ PROYECTO EJEMPLO - Estilos Globales
570
+ Paleta: Azul #1565C0
571
+ ============================================ */
572
+
573
+ /* ============================================
574
+ CONFIGURACION GLOBAL
575
+ Estos selectores aplican a TODOS los elementos
576
+ ============================================ */
577
+
578
+ /* Tipografia y estilo base de todos los campos */
579
+ prop {
580
+ fontname: Roboto-Regular.ttf;
581
+ fontsize: 11;
582
+ labelbox: false;
583
+ label-wrap: true;
584
+ text-border: false;
585
+ forecolor: #212121;
586
+ }
587
+
588
+ /* Configuración base de todas las colecciones */
589
+ coll {
590
+ notab: true;
591
+ show-toolbar: false;
592
+ group-swipe: false;
593
+ editmask: 0;
594
+ bgcolor: #FFFFFF;
595
+ }
596
+
597
+ /* ============================================
598
+ ICONOS DEL SISTEMA
599
+ Iconos para combos, busquedas, etc.
600
+ ============================================ */
601
+
602
+ prop {
603
+ img-spinner: ic_arrow_drop_down.png;
604
+ img-spinner-sel: ic_arrow_drop_down.png;
605
+ img-search: ic_search.png;
606
+ img-search-sel: ic_search.png;
607
+ img-delete: ic_delete.png;
608
+ img-delete-sel: ic_delete.png;
609
+ img-checked: ic_check_box.png;
610
+ img-unchecked: ic_check_box_outline_blank.png;
611
+ img-camera: ic_photo_camera.png;
612
+ img-camera-sel: ic_photo_camera.png;
613
+ img-date: ic_date_range.png;
614
+ img-date-sel: ic_date_range.png;
615
+ img-time: ic_access_time.png;
616
+ img-time-sel: ic_access_time.png;
617
+ img-att: ic_attach_file.png;
618
+ img-att-sel: ic_attach_file.png;
619
+ img-height: 28;
620
+ img-width: 28;
621
+ }
622
+
623
+ /* ============================================
624
+ FRAMES DE LAYOUT
625
+ Estructura Header / Body / Footer
626
+ ============================================ */
627
+
628
+ /* Header principal */
629
+ .frameHeader {
630
+ width: 100%;
631
+ height: 140p;
632
+ bgcolor: #1565C0;
633
+ align: center;
634
+ }
635
+
636
+ /* Body con scroll */
637
+ .frameBody {
638
+ width: 100%;
639
+ height: 100%;
640
+ scroll: true;
641
+ bgcolor: #F5F5F5;
642
+ }
643
+
644
+ /* Body sin scroll */
645
+ .frameBodyFijo {
646
+ width: 100%;
647
+ height: 100%;
648
+ scroll: false;
649
+ bgcolor: #FFFFFF;
650
+ }
651
+
652
+ /* Footer fijo */
653
+ .frameFooter {
654
+ width: 100%;
655
+ height: 120p;
656
+ bgcolor: #FFFFFF;
657
+ align: center;
658
+ border-top: true;
659
+ border-top-color: #E0E0E0;
660
+ }
661
+
662
+ /* ============================================
663
+ TARJETAS
664
+ ============================================ */
665
+
666
+ .tarjeta {
667
+ width: 95%;
668
+ bgcolor: #FFFFFF;
669
+ border-corner-radius: 12;
670
+ tmargin: 10p;
671
+ bmargin: 5p;
672
+ lmargin: 10p;
673
+ rmargin: 10p;
674
+ }
675
+
676
+ .tarjetaSeleccionada {
677
+ width: 95%;
678
+ bgcolor: #E3F2FD;
679
+ border-corner-radius: 12;
680
+ border: true;
681
+ border-color: #1565C0;
682
+ }
683
+
684
+ /* Panel inferior (modal) */
685
+ .panelInferior {
686
+ width: 100%;
687
+ bgcolor: #FFFFFF;
688
+ border-corner-radius-top-left: 24;
689
+ border-corner-radius-top-right: 24;
690
+ }
691
+
692
+ /* ============================================
693
+ BOTONES
694
+ ============================================ */
695
+
696
+ /* Primario */
697
+ .btnPrimario {
698
+ width: 90%;
699
+ height: 56p;
700
+ bgcolor: #1565C0;
701
+ forecolor: #FFFFFF;
702
+ border-corner-radius: 28;
703
+ text-align: center;
704
+ fontsize: 16;
705
+ fontname: Roboto-Bold.ttf;
706
+ }
707
+
708
+ /* Secundario (outline) */
709
+ .btnSecundario {
710
+ width: 90%;
711
+ height: 56p;
712
+ bgcolor: #FFFFFF;
713
+ forecolor: #1565C0;
714
+ border: true;
715
+ border-color: #1565C0;
716
+ border-corner-radius: 28;
717
+ text-align: center;
718
+ fontsize: 16;
719
+ }
720
+
721
+ /* Peligro */
722
+ .btnPeligro {
723
+ width: 90%;
724
+ height: 56p;
725
+ bgcolor: #F44336;
726
+ forecolor: #FFFFFF;
727
+ border-corner-radius: 28;
728
+ text-align: center;
729
+ fontsize: 16;
730
+ }
731
+
732
+ /* Exito */
733
+ .btnExito {
734
+ width: 90%;
735
+ height: 56p;
736
+ bgcolor: #4CAF50;
737
+ forecolor: #FFFFFF;
738
+ border-corner-radius: 28;
739
+ text-align: center;
740
+ fontsize: 16;
741
+ fontname: Roboto-Bold.ttf;
742
+ }
743
+
744
+ /* Icono circular */
745
+ .btnIcono {
746
+ width: 56p;
747
+ height: 56p;
748
+ bgcolor: #FFFFFF;
749
+ border-corner-radius: 28;
750
+ }
751
+
752
+ /* FAB */
753
+ .btnFlotante {
754
+ width: 64p;
755
+ height: 64p;
756
+ bgcolor: #1565C0;
757
+ border-corner-radius: 32;
758
+ }
759
+
760
+ /* Chip */
761
+ .btnChip {
762
+ height: 40p;
763
+ bgcolor: #E3F2FD;
764
+ forecolor: #1565C0;
765
+ border-corner-radius: 20;
766
+ text-align: center;
767
+ fontsize: 14;
768
+ lmargin: 5p;
769
+ rmargin: 5p;
770
+ }
771
+
772
+ .btnChipSeleccionado {
773
+ height: 40p;
774
+ bgcolor: #1565C0;
775
+ forecolor: #FFFFFF;
776
+ border-corner-radius: 20;
777
+ text-align: center;
778
+ fontsize: 14;
779
+ }
780
+
781
+ /* ============================================
782
+ CAMPOS DE TEXTO
783
+ ============================================ */
784
+
785
+ /* Con borde inferior (Material Design) */
786
+ .inputTextoLinea {
787
+ width: 95%;
788
+ height: 56p;
789
+ bgcolor: #FFFFFF;
790
+ text-border: true;
791
+ text-border-bottom: true;
792
+ text-border-left: false;
793
+ text-border-right: false;
794
+ text-border-top: false;
795
+ text-border-color: #BDBDBD;
796
+ fontsize: 14;
797
+ }
798
+
799
+ /* Enfocado */
800
+ .inputTextoLineaEnfocado {
801
+ extends: .inputTextoLinea;
802
+ text-border-color: #1565C0;
803
+ }
804
+
805
+ /* Con fondo gris */
806
+ .inputTexto {
807
+ width: 95%;
808
+ height: 56p;
809
+ bgcolor: #F5F5F5;
810
+ border-corner-radius: 8;
811
+ text-border: false;
812
+ fontsize: 14;
813
+ lmargin: 15p;
814
+ }
815
+
816
+ /* Busqueda redondeada */
817
+ .inputBusqueda {
818
+ width: 95%;
819
+ height: 56p;
820
+ bgcolor: #FFFFFF;
821
+ border-corner-radius: 28;
822
+ border: true;
823
+ border-color: #E0E0E0;
824
+ lmargin: 15p;
825
+ fontsize: 14;
826
+ }
827
+
828
+ /* ============================================
829
+ TEXTOS Y ETIQUETAS
830
+ ============================================ */
831
+
832
+ .textoTituloGrande {
833
+ fontsize: 28;
834
+ fontname: Roboto-Bold.ttf;
835
+ forecolor: #FFFFFF;
836
+ text-align: center;
837
+ }
838
+
839
+ .textoTitulo {
840
+ fontsize: 20;
841
+ fontname: Roboto-Bold.ttf;
842
+ forecolor: #212121;
843
+ text-align: left;
844
+ }
845
+
846
+ .textoSubtitulo {
847
+ fontsize: 16;
848
+ forecolor: #616161;
849
+ }
850
+
851
+ .textoNormal {
852
+ fontsize: 14;
853
+ forecolor: #212121;
854
+ }
855
+
856
+ .textoSecundario {
857
+ fontsize: 14;
858
+ forecolor: #9E9E9E;
859
+ }
860
+
861
+ .textoPequeno {
862
+ fontsize: 12;
863
+ forecolor: #9E9E9E;
864
+ }
865
+
866
+ /* ============================================
867
+ BADGES DE ESTADO
868
+ ============================================ */
869
+
870
+ .badgeEstado {
871
+ height: 28p;
872
+ fontsize: 12;
873
+ fontname: Roboto-Bold.ttf;
874
+ forecolor: #FFFFFF;
875
+ text-align: center;
876
+ border-corner-radius: 14;
877
+ lmargin: 10p;
878
+ rmargin: 10p;
879
+ }
880
+
881
+ .badgePendiente {
882
+ extends: .badgeEstado;
883
+ bgcolor: #FFC107;
884
+ forecolor: #212121;
885
+ }
886
+
887
+ .badgeAsignado {
888
+ extends: .badgeEstado;
889
+ bgcolor: #2196F3;
890
+ }
891
+
892
+ .badgeEntregado {
893
+ extends: .badgeEstado;
894
+ bgcolor: #4CAF50;
895
+ }
896
+
897
+ .badgeCancelado {
898
+ extends: .badgeEstado;
899
+ bgcolor: #9E9E9E;
900
+ }
901
+
902
+ .badgeError {
903
+ extends: .badgeEstado;
904
+ bgcolor: #F44336;
905
+ }
906
+
907
+ /* ============================================
908
+ AVATARES
909
+ ============================================ */
910
+
911
+ .avatar {
912
+ width: 64p;
913
+ height: 64p;
914
+ border-corner-radius: 32;
915
+ }
916
+
917
+ .avatarGrande {
918
+ width: 96p;
919
+ height: 96p;
920
+ border-corner-radius: 48;
921
+ }
922
+
923
+ .avatarPequeno {
924
+ width: 48p;
925
+ height: 48p;
926
+ border-corner-radius: 24;
927
+ }
928
+
929
+ /* ============================================
930
+ ICONOS
931
+ ============================================ */
932
+
933
+ .iconoAccion {
934
+ width: 48p;
935
+ height: 48p;
936
+ }
937
+
938
+ .iconoPequeno {
939
+ width: 24p;
940
+ height: 24p;
941
+ }
942
+
943
+ /* ============================================
944
+ LISTAS
945
+ ============================================ */
946
+
947
+ .itemLista {
948
+ width: 100%;
949
+ height: 72p;
950
+ bgcolor: #FFFFFF;
951
+ border-bottom: true;
952
+ border-bottom-color: #EEEEEE;
953
+ }
954
+
955
+ .separador {
956
+ width: 100%;
957
+ height: 1p;
958
+ bgcolor: #EEEEEE;
959
+ }
960
+
961
+ /* ============================================
962
+ GRUPOS Y TABS
963
+ ============================================ */
964
+
965
+ .groupNoTab {
966
+ tab-visible: false;
967
+ }
968
+
969
+ .groupConTab {
970
+ tab-visible: true;
971
+ tab-height: 56p;
972
+ tab-fontsize: 14;
973
+ tab-bgcolor: #1565C0;
974
+ tab-forecolor: #BBDEFB;
975
+ tab-selected-forecolor: #FFFFFF;
976
+ tab-indicator-color: #FFFFFF;
977
+ }
978
+
979
+ /* ============================================
980
+ FIRMA Y FOTO
981
+ ============================================ */
982
+
983
+ .areaFirma {
984
+ width: 100%;
985
+ height: 200p;
986
+ bgcolor: #FAFAFA;
987
+ border: true;
988
+ border-color: #E0E0E0;
989
+ border-corner-radius: 8;
990
+ }
991
+
992
+ .fotoPreview {
993
+ width: 100%;
994
+ height: 200p;
995
+ border-corner-radius: 8;
996
+ }
997
+
998
+ /* ============================================
999
+ ANIMACIONES
1000
+ ============================================ */
1001
+
1002
+ .animSlideRight {
1003
+ animation-in: ##RIGHT_IN##;
1004
+ animation-in-delay: 200;
1005
+ animation-out: ##LEFT_OUT##;
1006
+ animation-out-delay: 200;
1007
+ }
1008
+
1009
+ .animFadeIn {
1010
+ animation-in: ##ALPHA_IN##;
1011
+ animation-in-delay: 300;
1012
+ }
1013
+
1014
+ .animSlideUp {
1015
+ animation-in: ##PUSH_IN##;
1016
+ animation-in-delay: 200;
1017
+ }
1018
+ ```
1019
+
1020
+ ### Archivo `colors.css` completo
1021
+
1022
+ ```css
1023
+ /* ============================================
1024
+ PROYECTO EJEMPLO - Paleta de Colores
1025
+ Tema basado en tonos de azul
1026
+ ============================================ */
1027
+
1028
+ /* ============================================
1029
+ COLORES PRIMARIOS
1030
+ ============================================ */
1031
+
1032
+ .colorPrimario {
1033
+ bgcolor: #0D47A1;
1034
+ }
1035
+
1036
+ .colorPrimarioAccion {
1037
+ bgcolor: #1565C0;
1038
+ }
1039
+
1040
+ .colorPrimarioMedio {
1041
+ bgcolor: #1976D2;
1042
+ }
1043
+
1044
+ .colorPrimarioClaro {
1045
+ bgcolor: #1E88E5;
1046
+ }
1047
+
1048
+ .colorPrimarioSuave {
1049
+ bgcolor: #42A5F5;
1050
+ }
1051
+
1052
+ .colorPrimarioPastel {
1053
+ bgcolor: #64B5F6;
1054
+ }
1055
+
1056
+ .colorPrimarioHielo {
1057
+ bgcolor: #BBDEFB;
1058
+ }
1059
+
1060
+ .colorPrimarioNieve {
1061
+ bgcolor: #E3F2FD;
1062
+ }
1063
+
1064
+ /* ============================================
1065
+ COLORES DE ACENTO
1066
+ ============================================ */
1067
+
1068
+ .colorAcento {
1069
+ bgcolor: #00BCD4;
1070
+ }
1071
+
1072
+ .colorAcentoClaro {
1073
+ bgcolor: #4DD0E1;
1074
+ }
1075
+
1076
+ /* ============================================
1077
+ COLORES DE ESTADO
1078
+ ============================================ */
1079
+
1080
+ .colorExito {
1081
+ bgcolor: #4CAF50;
1082
+ }
1083
+
1084
+ .colorAdvertencia {
1085
+ bgcolor: #FFC107;
1086
+ }
1087
+
1088
+ .colorError {
1089
+ bgcolor: #F44336;
1090
+ }
1091
+
1092
+ .colorProgreso {
1093
+ bgcolor: #FF9800;
1094
+ }
1095
+
1096
+ .colorInfo {
1097
+ bgcolor: #2196F3;
1098
+ }
1099
+
1100
+ /* ============================================
1101
+ COLORES NEUTROS
1102
+ ============================================ */
1103
+
1104
+ .colorFondoBlanco {
1105
+ bgcolor: #FFFFFF;
1106
+ }
1107
+
1108
+ .colorFondoGrisClaro {
1109
+ bgcolor: #F5F5F5;
1110
+ }
1111
+
1112
+ .colorFondoGris {
1113
+ bgcolor: #EEEEEE;
1114
+ }
1115
+
1116
+ .colorTextoOscuro {
1117
+ forecolor: #212121;
1118
+ }
1119
+
1120
+ .colorTextoMedio {
1121
+ forecolor: #616161;
1122
+ }
1123
+
1124
+ .colorTextoClaro {
1125
+ forecolor: #9E9E9E;
1126
+ }
1127
+
1128
+ .colorTextoBlanco {
1129
+ forecolor: #FFFFFF;
1130
+ }
1131
+
1132
+ .colorBorde {
1133
+ border-color: #E0E0E0;
1134
+ }
1135
+
1136
+ .colorSeparador {
1137
+ bgcolor: #BDBDBD;
1138
+ }
1139
+ ```
1140
+