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,550 @@
1
+ # XOne CSS — Estilos dinámicos, cascada y componentes
2
+
3
+ > Fuente: `xone/v2/xone-help-docs/topics/04-css-styling-guide.md` §7–§13. Referencia de la skill; el índice está en [../../SKILL.md](../../SKILL.md).
4
+
5
+ Contenido: §7 estilos por estado/valor · §8 referencias ##FLD_CAMPO## · §9 cascada de condiciones de dispositivo y strict-mode · §10 animaciones · §11 gráficos · §12 calendario · §13 mapa
6
+
7
+ ---
8
+
9
+ ## 7. Selectores Condicionales y Dinámicos
10
+
11
+ ### 7.1 Estilos por estado/valor de campo
12
+
13
+ XOne permite aplicar clases CSS dinámicamente desde JavaScript usando la API `self` para cambiar el aspecto de elementos en función del estado de la aplicación. Aunque no existe un selector condicional CSS puro como `:hover` o `[data-attr]`, los estilos pueden cambiarse en tiempo de ejecución.
14
+
15
+ **Desde JavaScript, cambiar la clase de un campo:**
16
+
17
+ ```javascript
18
+ // En el evento onchange de un campo ESTADO
19
+ var estado = self.ESTADO;
20
+ var propEstado = ui.getView("badgeEstado");
21
+
22
+ if (estado == "PENDIENTE") {
23
+ propEstado.className = "badgePendiente";
24
+ } else if (estado == "EN_RUTA") {
25
+ propEstado.className = "badgeEnRuta";
26
+ } else if (estado == "ENTREGADO") {
27
+ propEstado.className = "badgeEntregado";
28
+ }
29
+ ```
30
+
31
+ ### 7.2 Ejemplo práctico - Colores por estado
32
+
33
+ En los proyectos reales se definen clases CSS para cada estado posible y se asignan desde JavaScript:
34
+
35
+ **CSS (proyecto XOneDelivery):**
36
+
37
+ ```css
38
+ /* Badge base */
39
+ .badgeEstado {
40
+ height: 28p;
41
+ fontsize: 12;
42
+ fontname: Roboto-Bold.ttf;
43
+ forecolor: #FFFFFF;
44
+ text-align: center;
45
+ border-corner-radius: 14;
46
+ lmargin: 10p;
47
+ rmargin: 10p;
48
+ }
49
+
50
+ .badgePendiente {
51
+ extends: .badgeEstado;
52
+ bgcolor: #FFC107;
53
+ forecolor: #212121;
54
+ }
55
+
56
+ .badgeAsignado {
57
+ extends: .badgeEstado;
58
+ bgcolor: #2196F3;
59
+ }
60
+
61
+ .badgeEnRuta {
62
+ extends: .badgeEstado;
63
+ bgcolor: #FF9800;
64
+ }
65
+
66
+ .badgeEnDestino {
67
+ extends: .badgeEstado;
68
+ bgcolor: #9C27B0;
69
+ }
70
+
71
+ .badgeEntregado {
72
+ extends: .badgeEstado;
73
+ bgcolor: #4CAF50;
74
+ }
75
+
76
+ .badgeNoEntregado {
77
+ extends: .badgeEstado;
78
+ bgcolor: #F44336;
79
+ }
80
+
81
+ .badgeCancelado {
82
+ extends: .badgeEstado;
83
+ bgcolor: #9E9E9E;
84
+ }
85
+ ```
86
+
87
+ **CSS para prioridades (proyecto GestionTareas):**
88
+
89
+ ```css
90
+ .prioridadBaja {
91
+ forecolor: #4CAF50;
92
+ }
93
+
94
+ .prioridadMedia {
95
+ forecolor: #FF9800;
96
+ }
97
+
98
+ .prioridadAlta {
99
+ forecolor: #F44336;
100
+ }
101
+
102
+ .prioridadUrgente {
103
+ forecolor: #D32F2F;
104
+ fontbold: true;
105
+ }
106
+ ```
107
+
108
+ > **Referencia cruzada:** Para ver como manipular clases CSS desde JavaScript, consultar el tópico 03 - API JavaScript.
109
+
110
+ ---
111
+
112
+ ## 8. Referencias Dinámicas a Campos en CSS
113
+
114
+ ### 8.1 Sintaxis `##FLD_NOMBRE_CAMPO##`
115
+
116
+ XOne permite referenciar valores de propiedades del objeto actual directamente en el CSS mediante la sintaxis `##FLD_NOMBRE_CAMPO##`. Esto permite que los estilos se calculen dinámicamente en función de los datos del registro actual.
117
+
118
+ **Sintaxis:**
119
+
120
+ ```
121
+ ##FLD_NOMBRE_DEL_CAMPO##
122
+ ```
123
+
124
+ Donde `NOMBRE_DEL_CAMPO` es el nombre de una propiedad (campo) definida en la coleccion. El valor de esa propiedad en el registro actual reemplazara el token en tiempo de ejecución.
125
+
126
+ ### 8.2 Uso en CSS
127
+
128
+ ```css
129
+ .frmsuperior {
130
+ width: 100%;
131
+ height: 120p;
132
+ bgcolor: ##FLD_MAP_COLORACTIVO##;
133
+ align: left|center;
134
+ }
135
+ ```
136
+
137
+ En este ejemplo, el color de fondo del frame se obtiene dinámicamente del valor del campo `MAP_COLORACTIVO` del objeto actual. Si el campo contiene `#1565C0`, el frame tendra ese color de fondo.
138
+
139
+ ### 8.3 Uso en atributos inline XML
140
+
141
+ La misma sintaxis funciona en los atributos inline de los nodos XML:
142
+
143
+ ```xml
144
+ <prop name="MAP_LABEL" type="L"
145
+ bgcolor="##FLD_MAP_COLOR1##"
146
+ forecolor="##FLD_MAP_COLOR2##" />
147
+ ```
148
+
149
+ Esto obtiene los valores dinámicos de las propiedades `MAP_COLOR1` y `MAP_COLOR2` del objeto actual, permitiendo cambiar colores en tiempo de ejecución sin necesidad de JavaScript.
150
+
151
+ ### 8.4 Casos de uso
152
+
153
+ Las referencias dinámicas son útiles para:
154
+
155
+ - **Colores por estado:** Un campo `COLOR_ESTADO` que cambia según el estado del registro
156
+ - **Temas por usuario/empresa:** Un campo `COLOR_EMPRESA` que define la paleta de colores corporativa
157
+ - **Indicadores visuales:** Cambiar el fondo de un frame según un valor calculado
158
+ - **Personalizacion:** Permitir que el usuario elija colores que se aplican directamente
159
+
160
+ **Ejemplo completo - Frame con color dinámico por estado:**
161
+
162
+ ```css
163
+ /* El color del frame depende del campo MAP_COLOR del registro */
164
+ .frameEstadoDinamico {
165
+ width: 100%;
166
+ height: 80p;
167
+ bgcolor: ##FLD_MAP_COLOR##;
168
+ forecolor: #FFFFFF;
169
+ align: center;
170
+ }
171
+ ```
172
+
173
+ ```xml
174
+ <!-- En la coleccion, MAP_COLOR contiene valores como #4CAF50, #F44336, etc. -->
175
+ <prop name="MAP_COLOR" type="T" visible="0" />
176
+ <frame name="frmEstado" class="frameEstadoDinamico">
177
+ <prop name="ESTADO" type="L" forecolor="#FFFFFF" />
178
+ </frame>
179
+ ```
180
+
181
+ > **NOTA:** Los valores de los campos referenciados deben contener valores CSS validos (colores en formato `#RRGGBB`, nombres de imágenes, etc.). Si el campo esta vacio o contiene un valor no valido, el comportamiento puede ser inesperado.
182
+
183
+ ---
184
+
185
+ ## 9. Cascada de Condiciones de Dispositivo
186
+
187
+ ### 9.1 Orden de cascada
188
+
189
+ XOne aplica los archivos CSS en un orden especifico de cascada, donde los archivos más especificos sobrescriben a los menos especificos. Este es el orden de prioridad de menor a mayor:
190
+
191
+ ```
192
+ 1. default.css (Base - MENOR prioridad)
193
+ 2. default.ios.css / default.android.css (Plataforma)
194
+ 3. default.portrait.css / default.landscape.css (Orientacion)
195
+ 4. default.night.css (Modo oscuro/tema)
196
+ 5. default.ios.portrait.css (Condiciones combinadas)
197
+ 6. Atributos inline en XML (MAYOR prioridad)
198
+ ```
199
+
200
+ ### 9.2 Archivos por convencion de nombre
201
+
202
+ XOne reconoce automáticamente los archivos CSS según su nombre. No es necesario declararlos explicitamente en `app.xml` (excepto el archivo base `default.css`):
203
+
204
+ | Archivo | Condición | Prioridad |
205
+ |---------|-----------|:---------:|
206
+ | `default.css` | Siempre se carga (base) | 1 (menor) |
207
+ | `default.android.css` | Solo en dispositivos Android | 2 |
208
+ | `default.ios.css` | Solo en dispositivos iOS | 2 |
209
+ | `default.portrait.css` | Solo en orientación vertical | 3 |
210
+ | `default.landscape.css` | Solo en orientación horizontal | 3 |
211
+ | `default.night.css` | Solo en modo oscuro/nocturno | 4 |
212
+ | `default.day.css` | Solo en modo claro/diurno | 4 |
213
+ | `default.ios.portrait.css` | iOS + orientación vertical | 5 |
214
+ | `default.android.landscape.css` | Android + orientación horizontal | 5 |
215
+
216
+ ### 9.3 Estilos condicionales explicitos en app.xml
217
+
218
+ Además de la convencion de nombres, se pueden declarar archivos CSS condicionales de forma explicita usando el atributo `conditions` en el nodo `<style>`:
219
+
220
+ ```xml
221
+ <app ...>
222
+ <style url="default.css" strict-mode="true" />
223
+ <style url="default-ios.css" conditions="ios" strict-mode="true" />
224
+ <style url="default_hor.css" conditions="phone:horizontal" strict-mode="true" />
225
+ <style url="tablet_ver.css" conditions="tablet:vertical" />
226
+ <style url="tablet_hor.css" conditions="tablet:horizontal" />
227
+ </app>
228
+ ```
229
+
230
+ **Valores del atributo `conditions`:**
231
+
232
+ | Condición | Descripción |
233
+ |-----------|-------------|
234
+ | `ios` | Solo en iOS |
235
+ | `android` | Solo en Android |
236
+ | `phone:horizontal` | Telefono en orientación horizontal |
237
+ | `phone:vertical` | Telefono en orientación vertical |
238
+ | `tablet:horizontal` | Tablet en orientación horizontal |
239
+ | `tablet:vertical` | Tablet en orientación vertical |
240
+
241
+ ### 9.4 Regla de sobrescritura
242
+
243
+ Las condiciones más especificas **siempre ganan** sobre las menos especificas. Si un atributo se define en multiples archivos CSS, el valor del archivo más especifico es el que se aplica:
244
+
245
+ ```css
246
+ /* default.css */
247
+ .frameHeader {
248
+ bgcolor: #1565C0; /* Base: azul */
249
+ height: 140p;
250
+ }
251
+
252
+ /* default.ios.css */
253
+ .frameHeader {
254
+ bgcolor: #007AFF; /* iOS: azul de Apple */
255
+ height: 120p; /* iOS: header mas bajo */
256
+ }
257
+
258
+ /* default.night.css */
259
+ .frameHeader {
260
+ bgcolor: #1E1E1E; /* Modo oscuro: gris oscuro */
261
+ }
262
+ ```
263
+
264
+ En este ejemplo:
265
+ - En **Android modo claro**: `bgcolor: #1565C0`, `height: 140p` (base)
266
+ - En **iOS modo claro**: `bgcolor: #007AFF`, `height: 120p` (plataforma sobrescribe)
267
+ - En **Android modo oscuro**: `bgcolor: #1E1E1E`, `height: 140p` (tema sobrescribe color, pero no altura)
268
+ - En **iOS modo oscuro**: `bgcolor: #1E1E1E`, `height: 120p` (tema sobrescribe color del de plataforma)
269
+
270
+ ### 9.5 strict-mode
271
+
272
+ El atributo `strict-mode` en el nodo `<style>` permite validar el CSS durante la carga:
273
+
274
+ ```xml
275
+ <style url="default.css" strict-mode="true" />
276
+ ```
277
+
278
+ Cuando `strict-mode="true"`, XOne valida errores en el CSS y reporta propiedades no reconocidas o valores invalidos. Es recomendable activarlo durante el desarrollo para detectar errores de sintaxis.
279
+
280
+ > **IMPORTANTE:** Solo es necesario declarar `default.css` en `app.xml`. Los archivos variantes (`default.ios.css`, `default.night.css`, etc.) se cargan automáticamente por convencion de nombre. Sin embargo, para archivos con nombres personalizados, es necesario declararlos explicitamente con el atributo `conditions`.
281
+
282
+ ---
283
+
284
+ ## 10. Animaciones
285
+
286
+ ### 10.1 Atributos de animación
287
+
288
+ | Atributo | Valores | Descripción |
289
+ |----------|---------|-------------|
290
+ | `animation-in` | Token de animación | Animación de entrada de la pantalla/frame |
291
+ | `animation-out` | Token de animación | Animación de salida de la pantalla/frame |
292
+ | `animation-in-delay` | Milisegundos (número) | Retardo de la animación de entrada |
293
+ | `animation-out-delay` | Milisegundos (número) | Retardo de la animación de salida |
294
+
295
+ ### 10.2 Tipos de animación disponibles
296
+
297
+ XOne proporciona tokens predefinidos para animaciones. Estos tokens se encierran entre dobles almohadillas (`##`):
298
+
299
+ | Token | Descripción | Uso típico |
300
+ |-------|-------------|------------|
301
+ | `##RIGHT_IN##` | Entra desde la derecha | Navegación hacia adelante |
302
+ | `##LEFT_IN##` | Entra desde la izquierda | Navegación hacia atrás |
303
+ | `##RIGHT_OUT##` | Sale hacia la derecha | Salida al volver atrás |
304
+ | `##LEFT_OUT##` | Sale hacia la izquierda | Salida al avanzar |
305
+ | `##PUSH_IN##` | Entra desde abajo (push up) | Modales, paneles inferiores |
306
+ | `##PUSH_OUT##` | Sale hacia arriba (push up) | Cerrar modales |
307
+ | `##PUSH_DOWN_IN##` | Entra desde arriba | Notificaciones, dropdowns |
308
+ | `##PUSH_DOWN_OUT##` | Sale hacia abajo | Cerrar notificaciones |
309
+ | `##ALPHA_IN##` | Aparece con fade in | Transiciones suaves |
310
+ | `##ALPHA_OUT##` | Desaparece con fade out | Transiciones suaves |
311
+ | `##ZOOM_IN##` | Zoom de entrada (crece) | Detalle, ampliacion |
312
+ | `##ZOOM_OUT##` | Zoom de salida (encoge) | Cerrar detalle |
313
+ | `##ROTATE3D_IN##` | Rotación 3D de entrada | Efectos especiales |
314
+ | `##ROTATE3D_OUT##` | Rotación 3D de salida | Efectos especiales |
315
+
316
+ ### 10.3 Cuando usar animaciones
317
+
318
+ - **Navegación entre pantallas:** `##RIGHT_IN##` / `##LEFT_OUT##` para avanzar, `##LEFT_IN##` / `##RIGHT_OUT##` para retroceder
319
+ - **Modales o paneles:** `##PUSH_IN##` / `##PUSH_OUT##` o `##PUSH_DOWN_IN##` / `##PUSH_DOWN_OUT##`
320
+ - **Transiciones suaves:** `##ALPHA_IN##` / `##ALPHA_OUT##`
321
+ - **Evitar en elementos repetitivos:** No aplicar animaciones a items de lista o elementos que se repintan frecuentemente
322
+
323
+ ### 10.4 Ejemplo práctico
324
+
325
+ **Clases de animación reutilizables (proyecto SocialNetwork):**
326
+
327
+ ```css
328
+ /* Fade in suave */
329
+ .animFadeIn {
330
+ animation-in: ##ALPHA_IN##;
331
+ animation-in-delay: 300;
332
+ }
333
+
334
+ /* Slide desde abajo */
335
+ .animSlideUp {
336
+ animation-in: ##PUSH_IN##;
337
+ animation-in-delay: 200;
338
+ }
339
+
340
+ /* Slide lateral (navegacion) */
341
+ .animSlideRight {
342
+ animation-in: ##RIGHT_IN##;
343
+ animation-in-delay: 200;
344
+ animation-out: ##LEFT_OUT##;
345
+ animation-out-delay: 200;
346
+ }
347
+ ```
348
+
349
+ **Clases de animación con diferentes efectos (de la knowledgebase):**
350
+
351
+ ```css
352
+ .FrameAnimateFromRight {
353
+ animation-in-delay: 500;
354
+ animation-out-delay: 500;
355
+ animation-in: ##RIGHT_IN##;
356
+ animation-out: ##LEFT_OUT##;
357
+ }
358
+
359
+ .FrameAnimateAlpha {
360
+ animation-in-delay: 500;
361
+ animation-out-delay: 500;
362
+ animation-in: ##ALPHA_IN##;
363
+ animation-out: ##ALPHA_OUT##;
364
+ }
365
+
366
+ .FrameAnimateZoom {
367
+ animation-in-delay: 500;
368
+ animation-out-delay: 500;
369
+ animation-in: ##ZOOM_IN##;
370
+ animation-out: ##ZOOM_OUT##;
371
+ }
372
+ ```
373
+
374
+ **Uso en el selector `coll` para animar toda la coleccion:**
375
+
376
+ ```css
377
+ coll {
378
+ animation-in: "##RIGHT_IN##";
379
+ }
380
+ ```
381
+
382
+ ---
383
+
384
+ ## 11. Gráficos (Charts)
385
+
386
+ ### 11.1 Tipos de gráfico disponibles
387
+
388
+ Los gráficos se definen mediante el atributo `type="Z"` en la propiedad XML y se configuran con atributos CSS. Los tipos de gráfico se especifican en el atributo XML `viewmode` o como viewmode de la coleccion:
389
+
390
+ - `barchart` - Gráfico de barras
391
+ - `3dbarchart` - Gráfico de barras 3D
392
+ - `slidingbarchart` - Gráfico de barras deslizable
393
+ - `piechart` - Gráfico circular (tarta)
394
+ - `piechart2` - Variante de gráfico circular
395
+ - `linechart` - Gráfico de lineas
396
+ - `areachart` - Gráfico de área
397
+ - `timeserieschart` - Gráfico de series temporales
398
+
399
+ **Atributos XML para datos del gráfico:**
400
+
401
+ | Atributo XML | Descripción |
402
+ |-------------|-------------|
403
+ | `chart-category="true"` | Define el campo como categoría (eje X) |
404
+ | `chart-value="true"` | Define el campo como valor (eje Y) |
405
+ | `chart-color="true"` | Define el campo como color de la serie |
406
+
407
+ ### 11.2 Atributos de gráficos
408
+
409
+ | Atributo CSS | Valores | Descripción |
410
+ |--------------|---------|-------------|
411
+ | `chart-serie-color` | `#COLOR1,#COLOR2,...` | Colores de las series |
412
+ | `chart-color-template` | `#COLOR1,#COLOR2,...` | Plantilla de colores |
413
+ | `chart-lock-x-axis` | `true`/`false` | Bloquear eje X (sin zoom/pan) |
414
+ | `chart-lock-y-axis` | `true`/`false` | Bloquear eje Y (sin zoom/pan) |
415
+ | `chart-show-series-item-labels` | `true`/`false` | Mostrar etiquetas de valores |
416
+ | `chart-series-item-label-format` | `##VALUE##` | Formato de las etiquetas |
417
+ | `chart-category-label-rotation` | `up_45`/`up_90`/`down_45`/`down_90` | Rotación de etiquetas de categoría |
418
+ | `chart-category-max-value` | Número | Valor máximo de la categoría |
419
+ | `chart-category-step-size` | Número | Tamaño del paso entre valores |
420
+ | `chart-max-visible-series` | Número | Máximo de series visibles simultaneamente |
421
+ | `show-legend` | `true`/`false` | Mostrar leyenda del gráfico |
422
+ | `fontsize-legend` | Número | Tamaño de fuente de la leyenda |
423
+
424
+ ### 11.3 Ejemplo completo
425
+
426
+ ```css
427
+ .clsCharts {
428
+ width: 80%;
429
+ height: 75%;
430
+ chart-serie-color: #FF0000,#00FF00,#0000FF;
431
+ chart-lock-x-axis: true;
432
+ chart-lock-y-axis: true;
433
+ show-legend: true;
434
+ chart-show-series-item-labels: true;
435
+ chart-series-item-label-format: ##VALUE##;
436
+ chart-category-label-rotation: up_45;
437
+ }
438
+ ```
439
+
440
+ **Uso en XML:**
441
+
442
+ ```xml
443
+ <prop name="MAP_BARCHART" type="Z" class="clsCharts" viewmode="barchart" visible="1" />
444
+ ```
445
+
446
+ **Ejemplo XML con campos de datos para el gráfico:**
447
+
448
+ ```xml
449
+ <!-- En la coleccion de datos del gráfico -->
450
+ <prop name="CATEGORIA" chart-category="true" />
451
+ <prop name="VALOR" chart-value="true" />
452
+ <prop name="COLOR" chart-color="true" />
453
+ ```
454
+
455
+ > **Referencia cruzada:** Para la definición XML completa de gráficos, consultar el tópico 02 - Estructura XML.
456
+
457
+ ---
458
+
459
+ ## 12. Calendario
460
+
461
+ ### 12.1 Atributos de calendario
462
+
463
+ Los calendarios se definen con `type="Z"` y `viewmode="calendarview"` y se configuran con atributos CSS especificos para personalizar la apariencia de días, semanas y selección:
464
+
465
+ | Atributo | Valores | Descripción |
466
+ |----------|---------|-------------|
467
+ | `weekdays-bgcolor` | `#RRGGBB` | Color de fondo de la fila de días de semana |
468
+ | `weekdays-forecolor` | `#RRGGBB` | Color de texto de los días de semana |
469
+ | `weekdays-fontsize` | Número | Tamaño de fuente de los días de semana |
470
+ | `weekdays-longname` | `true`/`false` | Nombres largos (Lunes) vs cortos (Lun) |
471
+ | `weekdays-align` | `top`/`center`/`bottom` + `left`/`right` | Alineacion de los días |
472
+ | `page-swipe` | `true`/`false` | Permitir swipe entre meses |
473
+ | `cell-bgcolor` | `#RRGGBB`/`#AARRGGBB` | Color de fondo de las celdas de día |
474
+ | `cell-forecolor` | `#RRGGBB` | Color de texto de los días |
475
+ | `cell-border-width` | Número | Grosor del borde de celda |
476
+ | `cell-align` | `left`/`center`/`right` | Alineacion del contenido de celda |
477
+ | `cell-selected-bgcolor` | `#RRGGBB`/`#AARRGGBB` | Fondo del día seleccionado |
478
+ | `cell-selected-forecolor` | `#RRGGBB` | Texto del día seleccionado |
479
+ | `cell-selected-border-color` | `#RRGGBB` | Borde del día seleccionado |
480
+ | `cell-other-month-bgcolor` | `#RRGGBB`/`#AARRGGBB` | Fondo de los días de otros meses |
481
+
482
+ ### 12.2 Ejemplo completo
483
+
484
+ ```css
485
+ .z_calendario {
486
+ cell-bgcolor: #68008CFF;
487
+ cell-forecolor: #000000;
488
+ cell-border-width: 2;
489
+ cell-align: center;
490
+ cell-selected-bgcolor: #00000000;
491
+ cell-selected-forecolor: #0000CC;
492
+ cell-selected-border-color: #0000CC;
493
+ cell-other-month-bgcolor: #39767676;
494
+ weekdays-bgcolor: #00000000;
495
+ weekdays-forecolor: #000000;
496
+ weekdays-fontsize: 4;
497
+ weekdays-longname: true;
498
+ page-swipe: true;
499
+ }
500
+ ```
501
+
502
+ **Nota:** Los colores con alpha como `#68008CFF` y `#39767676` usan el formato ARGB. Por ejemplo, `#39767676` es un gris con 22% de opacidad (0x39 = 57 de 255 = ~22%).
503
+
504
+ ---
505
+
506
+ ## 13. Mapa
507
+
508
+ ### 13.1 Atributos de mapa
509
+
510
+ Los mapas se configuran estableciendo `viewmode: mapview` en la coleccion o en una clase aplicada a la coleccion. XOne soporta tanto Google Maps (`mapview`) como OpenStreetMap (`openstreetmap`):
511
+
512
+ | Atributo | Valores | Descripción |
513
+ |----------|---------|-------------|
514
+ | `viewmode` | `mapview` / `openstreetmap` | Activar modo mapa en la coleccion |
515
+ | `mapview-embedded` | `true`/`false` | Mapa embebido dentro del layout |
516
+ | `zoom-to-my-location` | `true`/`false` | Centrar automáticamente en la ubicación actual |
517
+ | `show-pois` | `true`/`false` | Mostrar puntos de interes |
518
+ | `clear-lines-on-refresh` | `true`/`false` | Limpiar lineas al refrescar datos |
519
+ | `clear-markers-on-refresh` | `true`/`false` | Limpiar marcadores al refrescar datos |
520
+ | `show-compass` | `true`/`false` | Mostrar brujula en el mapa |
521
+ | `show-minimap` | `true`/`false` | Mostrar minimapa de referencia |
522
+ | `show-scale` | `true`/`false` | Mostrar escala del mapa |
523
+ | `follow-location-on-background` | `true`/`false` | Seguir ubicación en segundo plano |
524
+ | `zoom-buttons-visibility` | `always`/`never` | Visibilidad de botones de zoom |
525
+ | `show-google-buttons` | `true`/`false` | Mostrar botones de Google Maps |
526
+ | `zoom-to-pois` | `true`/`false` | Ajustar zoom para mostrar todos los POIs |
527
+
528
+ ### 13.2 Ejemplo completo
529
+
530
+ ```css
531
+ .clsmapview {
532
+ viewmode: mapview;
533
+ mapview-embedded: true;
534
+ clear-lines-on-refresh: false;
535
+ clear-markers-on-refresh: false;
536
+ show-pois: false;
537
+ zoom-to-my-location: true;
538
+ }
539
+ ```
540
+
541
+ **Uso en XML:**
542
+
543
+ ```xml
544
+ <coll name="MapaEntregas" class="clsmapview">
545
+ <!-- Propiedades del mapa -->
546
+ </coll>
547
+ ```
548
+
549
+ > **Referencia cruzada:** Para la API JavaScript de mapas (anadir marcadores, dibujar rutas), consultar el tópico 03 - API JavaScript.
550
+