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.
- package/README.md +167 -0
- package/dist/agent/authEnDisco.js +56 -0
- package/dist/agent/authEnDisco.js.map +1 -0
- package/dist/agent/configEnDisco.js +109 -0
- package/dist/agent/configEnDisco.js.map +1 -0
- package/dist/agent/crearProyecto.js +34 -0
- package/dist/agent/crearProyecto.js.map +1 -0
- package/dist/agent/entorno.js +124 -0
- package/dist/agent/entorno.js.map +1 -0
- package/dist/agent/guionizado.js +53 -0
- package/dist/agent/guionizado.js.map +1 -0
- package/dist/agent/instantanea.js +129 -0
- package/dist/agent/instantanea.js.map +1 -0
- package/dist/agent/interrupts.js +83 -0
- package/dist/agent/interrupts.js.map +1 -0
- package/dist/agent/mensajes.js +24 -0
- package/dist/agent/mensajes.js.map +1 -0
- package/dist/agent/modelos.js +42 -0
- package/dist/agent/modelos.js.map +1 -0
- package/dist/agent/normalizar.js +20 -0
- package/dist/agent/normalizar.js.map +1 -0
- package/dist/agent/perfiles.js +103 -0
- package/dist/agent/perfiles.js.map +1 -0
- package/dist/agent/proyecto.js +107 -0
- package/dist/agent/proyecto.js.map +1 -0
- package/dist/agent/puente.js +142 -0
- package/dist/agent/puente.js.map +1 -0
- package/dist/agent/resumenDeTool.js +48 -0
- package/dist/agent/resumenDeTool.js.map +1 -0
- package/dist/agent/skills.js +65 -0
- package/dist/agent/skills.js.map +1 -0
- package/dist/agent/textoDeTool.js +113 -0
- package/dist/agent/textoDeTool.js.map +1 -0
- package/dist/agent/turnoReal.js +173 -0
- package/dist/agent/turnoReal.js.map +1 -0
- package/dist/agent/verificador.js +65 -0
- package/dist/agent/verificador.js.map +1 -0
- package/dist/agent/xoneAgent.js +106 -0
- package/dist/agent/xoneAgent.js.map +1 -0
- package/dist/bin.js +9 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/aprobar.js +82 -0
- package/dist/cli/aprobar.js.map +1 -0
- package/dist/cli/config.js +133 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/consola.js +346 -0
- package/dist/cli/consola.js.map +1 -0
- package/dist/cli/describe.js +53 -0
- package/dist/cli/describe.js.map +1 -0
- package/dist/cli/doctor.js +45 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/main.js +520 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/markdown.js +90 -0
- package/dist/cli/markdown.js.map +1 -0
- package/dist/cli/run.js +164 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/spinner.js +89 -0
- package/dist/cli/spinner.js.map +1 -0
- package/dist/cli/stdio.js +193 -0
- package/dist/cli/stdio.js.map +1 -0
- package/dist/cli/tema.js +40 -0
- package/dist/cli/tema.js.map +1 -0
- package/dist/cli/verify.js +62 -0
- package/dist/cli/verify.js.map +1 -0
- package/dist/core/bitacora.js +30 -0
- package/dist/core/bitacora.js.map +1 -0
- package/dist/core/config.js +236 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/contextos.js +56 -0
- package/dist/core/contextos.js.map +1 -0
- package/dist/core/deps.js +51 -0
- package/dist/core/deps.js.map +1 -0
- package/dist/core/diff.js +79 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/esqueleto.js +366 -0
- package/dist/core/esqueleto.js.map +1 -0
- package/dist/core/events.js +2 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/modelos.js +85 -0
- package/dist/core/modelos.js.map +1 -0
- package/dist/core/notify.js +106 -0
- package/dist/core/notify.js.map +1 -0
- package/dist/core/ports.js +114 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/turno.js +127 -0
- package/dist/core/turno.js.map +1 -0
- package/dist/vendor/hitl.js +103 -0
- package/dist/vendor/hitl.js.map +1 -0
- package/dist/vendor/skillLoaders/catalog.js +74 -0
- package/dist/vendor/skillLoaders/catalog.js.map +1 -0
- package/dist/vendor/tokenTracking.js +58 -0
- package/dist/vendor/tokenTracking.js.map +1 -0
- package/package.json +41 -0
- package/skills/xone-debugging/SKILL.md +52 -0
- package/skills/xone-debugging/references/faq.md +561 -0
- package/skills/xone-debugging/references/troubleshooting-y-glosario.md +429 -0
- package/skills/xone-development/SKILL.md +105 -0
- package/skills/xone-development/references/anti-patrones.md +94 -0
- package/skills/xone-development/references/css/atributos-por-categoria.md +509 -0
- package/skills/xone-development/references/css/buenas-practicas-y-parser.md +419 -0
- package/skills/xone-development/references/css/dinamicos-cascada-y-componentes.md +550 -0
- package/skills/xone-development/references/css/patrones-material-y-temas.md +1140 -0
- package/skills/xone-development/references/css/propiedades-y-herencia.md +885 -0
- package/skills/xone-development/references/css/selectores-unidades-colores.md +840 -0
- package/skills/xone-development/references/datos/appdata-referencia-ampliada.md +457 -0
- package/skills/xone-development/references/datos/appdata.md +611 -0
- package/skills/xone-development/references/datos/http-sqlmanager-y-crypto.md +720 -0
- package/skills/xone-development/references/datos/http.md +366 -0
- package/skills/xone-development/references/datos/oauth2-y-replica.md +156 -0
- package/skills/xone-development/references/device/biometria-imagedrawing-y-otros.md +544 -0
- package/skills/xone-development/references/device/objetos-de-dispositivo.md +583 -0
- package/skills/xone-development/references/device/systemsettings-referencia-ampliada.md +396 -0
- package/skills/xone-development/references/device/systemsettings-y-permisos.md +342 -0
- package/skills/xone-development/references/fundamentos/conceptos-clave.md +695 -0
- package/skills/xone-development/references/fundamentos/configuracion-app-xml-ini-mappings.md +668 -0
- package/skills/xone-development/references/fundamentos/errores-comunes.md +312 -0
- package/skills/xone-development/references/fundamentos/navegacion-convenciones-y-primer-proyecto.md +576 -0
- package/skills/xone-development/references/fundamentos/plataforma-y-anatomia-de-proyecto.md +387 -0
- package/skills/xone-development/references/indice-completo.md +77 -0
- package/skills/xone-development/references/javascript/coleccion-error-y-usuario.md +260 -0
- package/skills/xone-development/references/javascript/debugging-y-best-practices.md +245 -0
- package/skills/xone-development/references/javascript/metodos-de-los-controles.md +556 -0
- package/skills/xone-development/references/javascript/metodos-nativos-de-la-vista.md +114 -0
- package/skills/xone-development/references/javascript/motor-js-y-contexto-de-ejecucion.md +319 -0
- package/skills/xone-development/references/javascript/objeto-ai-llm-en-dispositivo.md +358 -0
- package/skills/xone-development/references/javascript/objetos-creables-a-m.md +527 -0
- package/skills/xone-development/references/javascript/objetos-creables-n-z.md +385 -0
- package/skills/xone-development/references/javascript/patrones-criticos-seguridad-y-rendimiento.md +595 -0
- package/skills/xone-development/references/javascript/patrones-de-navegacion-datos-y-codigo.md +751 -0
- package/skills/xone-development/references/javascript/patrones-de-ui-voz-integracion-y-seguridad.md +701 -0
- package/skills/xone-development/references/javascript/plantillas-y-funciones-utilitarias.md +647 -0
- package/skills/xone-development/references/javascript/self-y-dataobject.md +449 -0
- package/skills/xone-development/references/javascript/singletons-globales.md +361 -0
- package/skills/xone-development/references/javascript/ui-catalogo-de-metodos.md +464 -0
- package/skills/xone-development/references/javascript/ui-gps-camara-y-multimedia.md +506 -0
- package/skills/xone-development/references/javascript/ui-navegacion-mensajes-y-vista.md +422 -0
- package/skills/xone-development/references/resumen-js-datos-dispositivo.md +80 -0
- package/skills/xone-development/references/resumen-xml-y-css.md +74 -0
- package/skills/xone-development/references/tipos-de-prop.md +28 -0
- package/skills/xone-development/references/xml-ui/asfilter-visibilidad-eventos-y-macros.md +576 -0
- package/skills/xone-development/references/xml-ui/atributos-coll-group-frame.md +235 -0
- package/skills/xone-development/references/xml-ui/atributos-method-macro-script-event-app.md +244 -0
- package/skills/xone-development/references/xml-ui/atributos-prop.md +439 -0
- package/skills/xone-development/references/xml-ui/contents-y-macros.md +392 -0
- package/skills/xone-development/references/xml-ui/errores-comunes-xml.md +245 -0
- package/skills/xone-development/references/xml-ui/estructura-y-nodo-coll.md +326 -0
- package/skills/xone-development/references/xml-ui/eventos-ciclo-de-vida-e-interaccion.md +704 -0
- package/skills/xone-development/references/xml-ui/eventos-sistema-login-y-personalizados.md +944 -0
- package/skills/xone-development/references/xml-ui/layouts-herencia-y-buenas-practicas.md +618 -0
- package/skills/xone-development/references/xml-ui/mapas.md +685 -0
- package/skills/xone-development/references/xml-ui/mappings-y-colecciones-separadas.md +148 -0
- package/skills/xone-development/references/xml-ui/nodos-group-y-frame.md +666 -0
- package/skills/xone-development/references/xml-ui/patrones-de-pantalla.md +643 -0
- package/skills/xone-development/references/xml-ui/prop-atributos-y-condiciones.md +298 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-basicos.md +493 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-combos-y-controles.md +664 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-listas-y-mapas.md +412 -0
- package/skills/xone-plan-builder/SKILL.md +183 -0
- package/skills/xone-plan-builder/agents/openai.yaml +5 -0
- package/skills/xone-plan-builder/references/TASKS-FORMAT.md +132 -0
- package/skills/xone-project-generator/SKILL.md +111 -0
- package/skills/xone-project-generator/references/canonical-sizes.md +292 -0
- package/skills/xone-project-generator/references/colecciones-base.md +16 -0
- package/skills/xone-project-generator/references/convenciones-de-nombres.md +16 -0
- package/skills/xone-project-generator/references/ejemplos-por-sector-y-prohibiciones.md +140 -0
- package/skills/xone-project-generator/references/fase-3-estilos-css.md +597 -0
- package/skills/xone-project-generator/references/fase-6-colecciones.md +762 -0
- package/skills/xone-project-generator/references/fase-7-asfilter-e-integraciones.md +142 -0
- package/skills/xone-project-generator/references/fase-7-entidades-y-estructura-de-pantalla.md +494 -0
- package/skills/xone-project-generator/references/fase-7-plantilla-consola.md +477 -0
- package/skills/xone-project-generator/references/fase-7-plantillas-de-pantalla.md +302 -0
- package/skills/xone-project-generator/references/fase-7-viewmodes-graficos-y-listas.md +681 -0
- package/skills/xone-project-generator/references/fase-7-viewmodes-mapa-y-calendario.md +479 -0
- package/skills/xone-project-generator/references/fases-0-2-analisis-y-modelo-de-datos.md +350 -0
- package/skills/xone-project-generator/references/fases-10-12-readmes-y-validacion.md +194 -0
- package/skills/xone-project-generator/references/fases-4-5-estructura-y-configuracion.md +587 -0
- package/skills/xone-project-generator/references/fases-8-9-eventos-y-javascript.md +861 -0
- package/skills/xone-project-generator/references/flujo-de-generacion.md +67 -0
- package/skills/xone-project-generator/references/plantillas-estandar.md +98 -0
- package/skills/xone-project-generator/references/tamanos-canonicos.md +49 -0
- package/skills/xone-review/SKILL.md +189 -0
- package/skills/xone-spec-builder/SKILL.md +235 -0
- package/skills/xone-spec-builder/agents/openai.yaml +5 -0
- package/skills/xone-spec-builder/references/ADR-FORMAT.md +55 -0
- package/skills/xone-spec-builder/references/CONTEXT-FORMAT.md +42 -0
- package/skills/xone-spec-builder/references/PLAN-FORMAT.md +120 -0
|
@@ -0,0 +1,840 @@
|
|
|
1
|
+
# XOne CSS — Selectores, unidades y colores
|
|
2
|
+
|
|
3
|
+
> Fuente: `xone/v2/xone-help-docs/topics/04-css-styling-guide.md` §1–§4. Referencia de la skill; el índice está en [../../SKILL.md](../../SKILL.md).
|
|
4
|
+
|
|
5
|
+
Contenido: §1 qué es y qué no es · §2 selectores coll/prop/prop:TYPE/.clase/group/frame · §3 unidades p, % y sin unidad · §4 colores #RRGGBB y #AARRGGBB con paletas
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Introduccion al CSS de XOne
|
|
10
|
+
|
|
11
|
+
### 1.1 Que es y que NO es
|
|
12
|
+
|
|
13
|
+
El sistema CSS de XOne es un **sistema de estilos propietario** inspirado en la sintaxis de CSS web, pero disenado especificamente para controlar la apariencia y el comportamiento de aplicaciones móviles nativas generadas para Android e iOS.
|
|
14
|
+
|
|
15
|
+
**Lo que ES:**
|
|
16
|
+
|
|
17
|
+
- Un lenguaje de estilos con sintaxis similar a CSS web (selectores, llaves, atributos con valor)
|
|
18
|
+
- Un sistema con atributos propietarios especificos para componentes UI móviles
|
|
19
|
+
- Un mecanismo de cascada con archivos por plataforma, orientación y tema
|
|
20
|
+
- Un sistema con herencia explicita mediante el atributo `extends`
|
|
21
|
+
|
|
22
|
+
**Lo que NO es:**
|
|
23
|
+
|
|
24
|
+
- **NO es CSS web estándar.** Aunque se parece, las reglas son distintas.
|
|
25
|
+
- **NO soporta** Flexbox, Grid, media queries, pseudo-clases, pseudo-elementos, transiciones, transformaciones, gradientes, ni selectores combinadores (`>`, `+`, `~`, espacio descendiente).
|
|
26
|
+
- **NO usa** las unidades `px`, `em`, `rem`, `vh`, `vw`, `vmin`, `vmax`.
|
|
27
|
+
- **NO permite** `@media`, `@keyframes`, `@font-face` (las fuentes se referencian directamente por nombre de archivo).
|
|
28
|
+
|
|
29
|
+
**Lo que SÍ es (subconjunto admitido por el parser):**
|
|
30
|
+
|
|
31
|
+
- **Variables CSS**: `:root { --color: #FF0000; }` + `var(--color)` con fallback. Globales en `:root` y locales con scope de bloque. Una variable puede referenciar a otra.
|
|
32
|
+
- **`calc(...)`**: aritmética con `+`, `-`, `*`, `/` y paréntesis sobre números puros (sin unidades).
|
|
33
|
+
- **`@import`**: para componer una hoja a partir de otras. Solo al inicio del archivo.
|
|
34
|
+
- **`@extend selector;`**: at-rule alternativa al atributo `extends:` tradicional. Copia las declaraciones en post-pasada del parser.
|
|
35
|
+
- **`!important` y `!default`**: control de cascada por declaración.
|
|
36
|
+
- **Comentarios** `/* */` y `//` (este último, de una sola línea).
|
|
37
|
+
- **Selectores múltiples**: `a, b, c { ... }` aplica el bloque a cada selector como instancia independiente.
|
|
38
|
+
|
|
39
|
+
**Diferencias clave con CSS web:**
|
|
40
|
+
|
|
41
|
+
| Concepto | CSS Web | CSS XOne |
|
|
42
|
+
|----------|---------|----------|
|
|
43
|
+
| Unidades de medida | `px`, `em`, `rem`, `vw`, `vh` | `p` (puntos), `%` (porcentaje) |
|
|
44
|
+
| Color con alpha | `rgba(0,0,0,0.5)` o `#00000080` | `#80000000` (formato **ARGB**, alpha primero) |
|
|
45
|
+
| Tamaño de fuente | `font-size: 14px` | `fontsize: 14` (sin unidad) |
|
|
46
|
+
| Margen superior | `margin-top: 10px` | `tmargin: 10p` |
|
|
47
|
+
| Negrita | `font-weight: bold` | `fontbold: true` |
|
|
48
|
+
| Nombre de fuente | `font-family: 'Roboto'` | `fontname: Roboto-Regular.ttf` |
|
|
49
|
+
| Color de fondo | `background-color: #fff` | `bgcolor: #FFFFFF` |
|
|
50
|
+
| Padding izquierdo | `padding-left: 20px` | `lpadding: 20p` |
|
|
51
|
+
| Bordes redondeados | `border-radius: 8px` | `border-corner-radius: 8` (sin unidad) |
|
|
52
|
+
| Ocultar elemento | `display: none` | `visible: 0` |
|
|
53
|
+
| Scroll | `overflow: scroll` | `scroll: true` |
|
|
54
|
+
| Posición fija | `position: fixed` | `fixed: true` |
|
|
55
|
+
| Herencia de estilos | Cascada automática | `extends: .nombreClase` o `@extend .nombreClase;` |
|
|
56
|
+
| Variables | `var(--mi-color)` | `:root { --mi-color: red; }` + `var(--mi-color)` (admite fallback y anidamiento) |
|
|
57
|
+
| Aritmética | `calc(8px * 2)` | `calc(8 * 2)` (sobre números puros, sin unidades) |
|
|
58
|
+
| Importación | `@import url("base.css")` | `@import "base.css";` (solo al inicio del archivo) |
|
|
59
|
+
| Responsive | `@media (max-width: 600px)` | NO SOPORTADO (archivos separados por plataforma) |
|
|
60
|
+
| Layout flexible | `display: flex` | NO SOPORTADO (usar `frame` y `group` en XML) |
|
|
61
|
+
|
|
62
|
+
> **Referencia cruzada:** Para entender como se aplican las clases CSS en el XML de XOne, consultar el tópico 02 - Estructura XML. Para la estructura general de archivos del proyecto, consultar el tópico 01 - Fundamentos.
|
|
63
|
+
|
|
64
|
+
### 1.2 Donde se define
|
|
65
|
+
|
|
66
|
+
Los estilos se definen en archivos `.css` ubicados en la **raiz del proyecto** XOne.
|
|
67
|
+
|
|
68
|
+
**Archivo obligatorio:**
|
|
69
|
+
|
|
70
|
+
| Archivo | Descripción | Obligatorio |
|
|
71
|
+
|---------|-------------|:-----------:|
|
|
72
|
+
| `default.css` | Estilos base globales de la aplicación | SI |
|
|
73
|
+
|
|
74
|
+
**Archivos opcionales (reconocidos automáticamente por convencion de nombre):**
|
|
75
|
+
|
|
76
|
+
| Archivo | Descripción |
|
|
77
|
+
|---------|-------------|
|
|
78
|
+
| `default-colors.css` / `colors.css` | Paleta de colores separada (facilita tematizacion) |
|
|
79
|
+
| `default_night.css` | Variante tema oscuro |
|
|
80
|
+
| `default_day.css` | Variante tema claro |
|
|
81
|
+
| `default_portrait.css` | Estilos para orientación vertical |
|
|
82
|
+
| `default_landscape.css` | Estilos para orientación horizontal |
|
|
83
|
+
| `default_ios.css` | Estilos especificos para iOS |
|
|
84
|
+
| `default_wear.css` | Estilos para wearables (smartwatch) |
|
|
85
|
+
| `básico.css` | Estilos básicos reutilizables |
|
|
86
|
+
|
|
87
|
+
**Declaración en `app.xml`:**
|
|
88
|
+
|
|
89
|
+
Solo se declara el archivo `default.css` en la configuración de la aplicación. Los archivos variantes se cargan automáticamente por convencion de nombres.
|
|
90
|
+
|
|
91
|
+
```xml
|
|
92
|
+
<app ...>
|
|
93
|
+
<style url="default.css" encoding="UTF-8" />
|
|
94
|
+
</app>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
> **Referencia cruzada:** Para conocer la configuración completa de `app.xml`, consultar el tópico 01 - Fundamentos.
|
|
98
|
+
|
|
99
|
+
### 1.3 Como se aplica
|
|
100
|
+
|
|
101
|
+
Los estilos CSS se aplican a los elementos XML mediante el atributo `class`:
|
|
102
|
+
|
|
103
|
+
```xml
|
|
104
|
+
<!-- Clase simple -->
|
|
105
|
+
<frame name="frmHeader" class="frameHeader">
|
|
106
|
+
|
|
107
|
+
<!-- Multiples clases separadas por espacio -->
|
|
108
|
+
<prop name="txtNombre" class="textoEditable inputTextoLinea">
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Sistema de cascada (de menor a mayor prioridad):**
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
1. default.css (Estilos base - MENOR prioridad)
|
|
115
|
+
2. default_ios.css (Especifico de plataforma)
|
|
116
|
+
3. default_portrait.css (Especifico de orientacion)
|
|
117
|
+
4. default_night.css (Especifico de tema)
|
|
118
|
+
5. Atributos inline en XML (MAYOR prioridad)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Esto significa que un atributo definido directamente en el nodo XML siempre gana sobre cualquier clase CSS, y un estilo de tema (`default_night.css`) gana sobre un estilo de plataforma (`default_ios.css`).
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 2. Selectores
|
|
126
|
+
|
|
127
|
+
XOne soporta un conjunto limitado pero funcional de selectores CSS. A diferencia de CSS web, **no existen** selectores de etiqueta HTML, selectores de ID (`#`), selectores combinadores (`>`, `+`, `~`), selectores de atributo (`[attr]`), ni pseudo-clases/pseudo-elementos.
|
|
128
|
+
|
|
129
|
+
### 2.1 Selector de coleccion: `coll`
|
|
130
|
+
|
|
131
|
+
Aplica estilos a **todas las colecciones** del proyecto. Una coleccion equivale a una pantalla o vista en la aplicación.
|
|
132
|
+
|
|
133
|
+
```css
|
|
134
|
+
coll {
|
|
135
|
+
notab: true;
|
|
136
|
+
show-toolbar: false;
|
|
137
|
+
group-swipe: false;
|
|
138
|
+
editmask: 0;
|
|
139
|
+
bgcolor: #FFFFFF;
|
|
140
|
+
cell-bgcolor: #F2F2F2;
|
|
141
|
+
cell-border: false;
|
|
142
|
+
cell-tpadding: 2p;
|
|
143
|
+
cell-bpadding: 2p;
|
|
144
|
+
show-selected-item: false;
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Atributos aplicables al selector `coll`:**
|
|
149
|
+
|
|
150
|
+
| Atributo | Valores | Descripción |
|
|
151
|
+
|----------|---------|-------------|
|
|
152
|
+
| `notab` | `true`/`false` | Ocultar pestanas de navegación |
|
|
153
|
+
| `show-toolbar` | `true`/`false` | Mostrar barra de herramientas |
|
|
154
|
+
| `group-swipe` | `true`/`false` | Permitir swipe entre grupos |
|
|
155
|
+
| `editmask` | Número | Mascara de edición |
|
|
156
|
+
| `nomenmask` | Número | Mascara de nomenclatura |
|
|
157
|
+
| `dependent` | `true`/`false` | Coleccion dependiente |
|
|
158
|
+
| `check-owner` | `true`/`false` | Verificar propietario |
|
|
159
|
+
| `bgcolor` | `#RRGGBB` | Color de fondo de la coleccion |
|
|
160
|
+
| `viewmode` | `gridview`/`mapview`/`listview` | Modo de visualizacion |
|
|
161
|
+
| `gallery-columns` | Número | Columnas en modo galería |
|
|
162
|
+
| `cell-bgcolor` | `#RRGGBB` | Color de fondo de las celdas de lista |
|
|
163
|
+
| `cell-odd-color` | `#RRGGBB` | Color de celdas impares (alternancia) |
|
|
164
|
+
| `cell-even-color` | `#RRGGBB` | Color de celdas pares (alternancia) |
|
|
165
|
+
| `cell-border-color` | `#RRGGBB` | Color del borde de celda |
|
|
166
|
+
| `cell-border-width` | Número | Grosor del borde de celda |
|
|
167
|
+
| `cell-selected-bgcolor` | `#RRGGBB` / `#AARRGGBB` | Fondo de celda seleccionada |
|
|
168
|
+
| `cell-tpadding` | `Np` | Padding superior de celda |
|
|
169
|
+
| `cell-bpadding` | `Np` | Padding inferior de celda |
|
|
170
|
+
| `show-selected-item` | `true`/`false` | Mostrar item seleccionado |
|
|
171
|
+
| `selected-item-start-index` | Número | Índice inicial de selección (-1=ninguno) |
|
|
172
|
+
| `animation-in` | Token animación | Animación de entrada |
|
|
173
|
+
| `animation-out` | Token animación | Animación de salida |
|
|
174
|
+
|
|
175
|
+
**Ejemplo real (proyecto UseCars):**
|
|
176
|
+
|
|
177
|
+
```css
|
|
178
|
+
coll {
|
|
179
|
+
notab: true;
|
|
180
|
+
show-toolbar: false;
|
|
181
|
+
group-swipe: false;
|
|
182
|
+
editmask: 0;
|
|
183
|
+
bgcolor: #FFFFFF;
|
|
184
|
+
cell-bgcolor: #F2F2F2;
|
|
185
|
+
cell-border-color: #00000000;
|
|
186
|
+
cell-border-width: 0;
|
|
187
|
+
cell-selected-bgcolor: #00000000;
|
|
188
|
+
show-selected-item: false;
|
|
189
|
+
selected-item-start-index: -1;
|
|
190
|
+
animation-in: "##RIGHT_IN##";
|
|
191
|
+
animation-out: "##RIGHT_OUT##";
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### 2.2 Selector de propiedad: `prop`
|
|
196
|
+
|
|
197
|
+
Aplica estilos por defecto a **todas las propiedades** (campos/controles) de la aplicación. Este selector es fundamental para establecer la tipografía base y el comportamiento visual de todos los campos.
|
|
198
|
+
|
|
199
|
+
```css
|
|
200
|
+
prop {
|
|
201
|
+
fontname: Roboto-Regular.ttf;
|
|
202
|
+
fontsize: 11;
|
|
203
|
+
labelbox: false;
|
|
204
|
+
label-wrap: true;
|
|
205
|
+
text-border: false;
|
|
206
|
+
forecolor: #212121;
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Ejemplo real (proyecto MiMensajeria) con fontsize diferente y más propiedades base:**
|
|
211
|
+
|
|
212
|
+
```css
|
|
213
|
+
prop {
|
|
214
|
+
fontname: Roboto-Regular.ttf;
|
|
215
|
+
fontsize: 14;
|
|
216
|
+
labelbox: false;
|
|
217
|
+
label-wrap: true;
|
|
218
|
+
text-border: false;
|
|
219
|
+
forecolor: #212121;
|
|
220
|
+
text-forecolor: #333333;
|
|
221
|
+
text-forecolor-disabled: #909090;
|
|
222
|
+
visible: 1;
|
|
223
|
+
lmargin: 0;
|
|
224
|
+
tmargin: 0;
|
|
225
|
+
width: 96%;
|
|
226
|
+
labelwidth: 7;
|
|
227
|
+
imgsel: ;
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
> **IMPORTANTE:** Los valores definidos en el selector `prop` sirven como base que todas las propiedades heredan. Es la forma de establecer una tipografía y comportamiento coherente en toda la aplicación.
|
|
232
|
+
|
|
233
|
+
### 2.3 Selector por tipo: `prop:TYPE`
|
|
234
|
+
|
|
235
|
+
Permite definir estilos especificos según el tipo de campo. Solo aplica a las propiedades (`<prop>`) que tengan el atributo `type` correspondiente.
|
|
236
|
+
|
|
237
|
+
**Tabla de todos los tipos soportados:**
|
|
238
|
+
|
|
239
|
+
| Selector | Tipo | Descripción |
|
|
240
|
+
|----------|------|-------------|
|
|
241
|
+
| `prop:T` | Texto | Campo de texto simple |
|
|
242
|
+
| `prop:L` | Label | Etiqueta de texto de solo lectura (forma preferida; coincide con `type="L"`) |
|
|
243
|
+
| `prop:TL` | Label (alias legacy) | Selector legacy que coincide con `type="TL"`. El selector debe coincidir literalmente con el `type` declarado en el XML. |
|
|
244
|
+
| `prop:N` | Numérico | Campo numérico entero |
|
|
245
|
+
| `prop:N2` | Numérico decimal | Campo numérico con 2 decimales |
|
|
246
|
+
| `prop:NC` | Checkbox | Campo de selección / casilla de verificación |
|
|
247
|
+
| `prop:B` | Botón | Botón de acción |
|
|
248
|
+
| `prop:Z` | Zona/Área | Contents, mapas, calendarios, gráficos |
|
|
249
|
+
| `prop:IMG` | Imagen | Campo de imagen estática/dinámica |
|
|
250
|
+
| `prop:AT` | Adjunto | Campo de archivo adjunto |
|
|
251
|
+
| `prop:PH` | Foto | Campo de fotografía |
|
|
252
|
+
| `prop:VD` | Video | Campo de video |
|
|
253
|
+
| `prop:D` | Fecha | Campo de fecha |
|
|
254
|
+
| `prop:DT` | Fecha-Hora | Campo de fecha y hora |
|
|
255
|
+
| `prop:X` | Password | Campo de contrasena |
|
|
256
|
+
| `prop:DR` | Dibujo/Firma | Campo de firma digital |
|
|
257
|
+
| `prop:WEB` | Web | Navegador embebido |
|
|
258
|
+
|
|
259
|
+
**Ejemplo - Configurar botones globalmente:**
|
|
260
|
+
|
|
261
|
+
```css
|
|
262
|
+
prop:B {
|
|
263
|
+
forecolor: #000000;
|
|
264
|
+
bgcolor: #CCCCCC;
|
|
265
|
+
img-sel: ;
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Ejemplo - Configurar campos de imagen:**
|
|
270
|
+
|
|
271
|
+
```css
|
|
272
|
+
prop:IMG {
|
|
273
|
+
labelwidth: 0;
|
|
274
|
+
img-sign: bt_Firma.png;
|
|
275
|
+
img-sign-sel: bt_Firma_sel.png;
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**Ejemplo - Configurar campos tipo Zona (contents, mapas, gráficos):**
|
|
280
|
+
|
|
281
|
+
```css
|
|
282
|
+
prop:Z {
|
|
283
|
+
extends: prop;
|
|
284
|
+
bgcolor: #F2F2F2;
|
|
285
|
+
width: 96%;
|
|
286
|
+
lmargin: 2%;
|
|
287
|
+
tmargin: 2%;
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**Ejemplo - Configurar campos tipo Checkbox:**
|
|
292
|
+
|
|
293
|
+
```css
|
|
294
|
+
prop:NC {
|
|
295
|
+
extends: prop;
|
|
296
|
+
apply-css: true;
|
|
297
|
+
labelwidth: 1;
|
|
298
|
+
img-width: 50p;
|
|
299
|
+
text-bgcolor: #00000000;
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
**Ejemplo - Configurar campos tipo Adjunto:**
|
|
304
|
+
|
|
305
|
+
```css
|
|
306
|
+
prop:AT {
|
|
307
|
+
img-att: bt_attach.png;
|
|
308
|
+
img-att-sel: bt_attach_sel.png;
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
> **IMPORTANTE:** Los selectores `prop:TYPE` permiten establecer estilos globales por tipo de control. Esto es especialmente útil para configurar iconos del sistema (como los de adjunto, firma, camara) una sola vez, en lugar de repetirlos en cada campo individual.
|
|
313
|
+
|
|
314
|
+
### 2.4 Selector de clase: `.nombreClase`
|
|
315
|
+
|
|
316
|
+
Define estilos reutilizables que se aplican mediante el atributo `class` en los nodos XML. Este es el selector más utilizado para crear componentes visuales personalizados.
|
|
317
|
+
|
|
318
|
+
**Sintaxis:**
|
|
319
|
+
|
|
320
|
+
```css
|
|
321
|
+
.miClase {
|
|
322
|
+
width: 100%;
|
|
323
|
+
height: 50p;
|
|
324
|
+
bgcolor: #FF0000;
|
|
325
|
+
forecolor: #FFFFFF;
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**Uso en XML:**
|
|
330
|
+
|
|
331
|
+
```xml
|
|
332
|
+
<frame name="frmEjemplo" class="miClase">
|
|
333
|
+
<prop name="txtCampo" class="miClase">
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
**Convenciones de nomenclatura recomendadas:**
|
|
337
|
+
|
|
338
|
+
| Prefijo | Proposito | Ejemplo |
|
|
339
|
+
|---------|-----------|---------|
|
|
340
|
+
| `frame` | Contenedores de layout | `.frameHeader`, `.frameBody`, `.frameFooter` |
|
|
341
|
+
| `btn` | Botones | `.btnPrimario`, `.btnSecundario`, `.btnPeligro` |
|
|
342
|
+
| `input` | Campos de texto editables | `.inputTexto`, `.inputBusqueda` |
|
|
343
|
+
| `texto` | Etiquetas y textos no editables | `.textoTitulo`, `.textoSecundario` |
|
|
344
|
+
| `tarjeta` | Tarjetas/cards | `.tarjeta`, `.tarjetaViaje` |
|
|
345
|
+
| `item` | Items de lista | `.itemLista`, `.itemEnvio` |
|
|
346
|
+
| `badge` | Badges de estado | `.badgeEstado`, `.badgePendiente` |
|
|
347
|
+
| `avatar` | Imágenes circulares de usuario | `.avatar`, `.avatarGrande` |
|
|
348
|
+
| `icono` | Iconos | `.iconoAccion`, `.iconoPequeno` |
|
|
349
|
+
| `group` | Grupos y tabs | `.groupNoTab`, `.groupConTab` |
|
|
350
|
+
| `separador` | Separadores de lista | `.separador`, `.separadorConMargen` |
|
|
351
|
+
| `color` | Definiciones de color (en colors.css) | `.colorPrimario`, `.colorExito` |
|
|
352
|
+
| `anim` | Clases de animación | `.animFadeIn`, `.animSlideRight` |
|
|
353
|
+
|
|
354
|
+
### 2.5 Selector de grupo: `group`
|
|
355
|
+
|
|
356
|
+
Aplica estilos a todos los elementos `<group>` de la aplicación. También se pueden aplicar estilos a grupos individuales mediante clases CSS (`.nombreClase`) asignadas con el atributo `class` en el XML del grupo.
|
|
357
|
+
|
|
358
|
+
```css
|
|
359
|
+
group {
|
|
360
|
+
tab-visible: false;
|
|
361
|
+
}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
**Atributos de grupo más comunes:**
|
|
365
|
+
|
|
366
|
+
| Atributo | Valores | Descripción |
|
|
367
|
+
|----------|---------|-------------|
|
|
368
|
+
| `tab-visible` | `true`/`false` | Mostrar pestanas |
|
|
369
|
+
| `tab-height` | `Np` | Altura de pestanas |
|
|
370
|
+
| `tab-fontsize` | Número | Tamaño fuente de pestanas |
|
|
371
|
+
| `tab-bgcolor` | `#RRGGBB` | Color de fondo de pestanas |
|
|
372
|
+
| `tab-forecolor` | `#RRGGBB` | Color de texto de pestanas |
|
|
373
|
+
| `tab-selected-forecolor` | `#RRGGBB` | Color texto pestana seleccionada |
|
|
374
|
+
| `tab-indicator-color` | `#RRGGBB` | Color del indicador de pestana |
|
|
375
|
+
|
|
376
|
+
**Ejemplo real - Grupo con tabs azules (proyecto UseCars):**
|
|
377
|
+
|
|
378
|
+
```css
|
|
379
|
+
.groupConTab {
|
|
380
|
+
tab-visible: true;
|
|
381
|
+
tab-height: 56p;
|
|
382
|
+
tab-fontsize: 14;
|
|
383
|
+
tab-bgcolor: #0D47A1;
|
|
384
|
+
tab-forecolor: #BBDEFB;
|
|
385
|
+
tab-selected-forecolor: #FFFFFF;
|
|
386
|
+
tab-indicator-color: #FFFFFF;
|
|
387
|
+
}
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
**Ejemplo real - Grupo sin tabs (todos los proyectos):**
|
|
391
|
+
|
|
392
|
+
```css
|
|
393
|
+
.groupNoTab {
|
|
394
|
+
tab-visible: false;
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**Ejemplo - Grupos fijos como Header/Footer:**
|
|
399
|
+
|
|
400
|
+
```css
|
|
401
|
+
.groupfixed_header {
|
|
402
|
+
fixed: true;
|
|
403
|
+
orientation: top;
|
|
404
|
+
width: 100%;
|
|
405
|
+
height: 120p;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.groupfixed_footer {
|
|
409
|
+
fixed: true;
|
|
410
|
+
orientation: bottom;
|
|
411
|
+
width: 100%;
|
|
412
|
+
height: 120p;
|
|
413
|
+
}
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
```xml
|
|
417
|
+
<group name="HEADER" id="10" class="groupfixed_header">
|
|
418
|
+
<frame name="frmtitulo" class="frmsuperior">
|
|
419
|
+
<!-- contenido header -->
|
|
420
|
+
</frame>
|
|
421
|
+
</group>
|
|
422
|
+
|
|
423
|
+
<group name="FOOTER" id="0" class="groupfixed_footer">
|
|
424
|
+
<frame name="frmFooter" class="frmsuperior">
|
|
425
|
+
<!-- contenido footer -->
|
|
426
|
+
</frame>
|
|
427
|
+
</group>
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### 2.6 Selector de frame: `frame`
|
|
431
|
+
|
|
432
|
+
Aplica estilos a todos los elementos `<frame>` de la aplicación. Al igual que con los grupos, se pueden aplicar estilos a frames individuales mediante clases CSS asignadas con el atributo `class`.
|
|
433
|
+
|
|
434
|
+
```css
|
|
435
|
+
frame {
|
|
436
|
+
bgcolor: #FFFFFF;
|
|
437
|
+
framebox: false;
|
|
438
|
+
}
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
**Ejemplo - Estilos por clase para frames especificos:**
|
|
442
|
+
|
|
443
|
+
```css
|
|
444
|
+
/* Frame principal con contenido dinamico */
|
|
445
|
+
.frmPrincipal {
|
|
446
|
+
width: 100%;
|
|
447
|
+
height: 100%;
|
|
448
|
+
bgcolor: #333333;
|
|
449
|
+
scroll: true;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/* Frame superior con color dinamico */
|
|
453
|
+
.frmsuperior {
|
|
454
|
+
width: 100%;
|
|
455
|
+
height: 120p;
|
|
456
|
+
bgcolor: ##FLD_MAP_COLORACTIVO##;
|
|
457
|
+
align: left|center;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/* Frame contenido con elevacion */
|
|
461
|
+
.frameContenido {
|
|
462
|
+
width: 100%;
|
|
463
|
+
bgcolor: #FFFFFF;
|
|
464
|
+
framebox: true;
|
|
465
|
+
border-corner-radius: 10;
|
|
466
|
+
elevation: 5;
|
|
467
|
+
}
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
> **NOTA:** En la práctica es más común usar clases (`.frameHeader`, `.frameBody`, `.frameFooter`) que el selector global `frame`, ya que cada frame suele tener estilos muy diferentes.
|
|
471
|
+
|
|
472
|
+
### 2.7 Resumen de selectores
|
|
473
|
+
|
|
474
|
+
| Selector | Aplica a | Ejemplo |
|
|
475
|
+
|----------|----------|---------|
|
|
476
|
+
| `coll` | Todas las colecciones (pantallas) | `coll { bgcolor: #FFFFFF; }` |
|
|
477
|
+
| `prop` | Todas las propiedades (campos/controles) | `prop { fontsize: 11; }` |
|
|
478
|
+
| `prop:T` | Todas las propiedades tipo Texto | `prop:T { text-border: true; }` |
|
|
479
|
+
| `prop:N` | Todas las propiedades tipo Numérico | `prop:N { text-align: right; }` |
|
|
480
|
+
| `prop:B` | Todas las propiedades tipo Botón | `prop:B { bgcolor: #CCCCCC; }` |
|
|
481
|
+
| `prop:NC` | Todas las propiedades tipo Checkbox | `prop:NC { apply-css: true; }` |
|
|
482
|
+
| `prop:Z` | Todas las propiedades tipo Zona | `prop:Z { bgcolor: #F2F2F2; }` |
|
|
483
|
+
| `prop:IMG` | Todas las propiedades tipo Imagen | `prop:IMG { labelwidth: 0; }` |
|
|
484
|
+
| `prop:D` | Todas las propiedades tipo Fecha | `prop:D { img-date: ic_date.png; }` |
|
|
485
|
+
| `group` | Todos los grupos | `group { tab-visible: false; }` |
|
|
486
|
+
| `frame` | Todos los frames | `frame { framebox: false; }` |
|
|
487
|
+
| `.clase` | Elementos con `class="clase"` | `.miClase { width: 100%; }` |
|
|
488
|
+
|
|
489
|
+
---
|
|
490
|
+
|
|
491
|
+
## 3. Unidades de Medida
|
|
492
|
+
|
|
493
|
+
### 3.1 `p` (puntos) - Unidad absoluta
|
|
494
|
+
|
|
495
|
+
La unidad `p` representa **pixels en el dispositivo de referencia** definido por `resolution-width` y `resolution-height` en `app.xml`. En el dispositivo de referencia, `1p = 1px` real. En cualquier otro dispositivo, XOne escala automáticamente con la fórmula `tamaño_real_px = valor_p × (resolucion_real / resolution-width)`.
|
|
496
|
+
|
|
497
|
+
> **CRÍTICO: `p` ≠ Material `dp`.** Es un error común asumir que `p` equivale a `dp` (density-independent pixels) de Android. **NO lo es.** Para el dispositivo de referencia por defecto de XOne (1080×1920, xxhdpi, density 3×), Material `56dp` ≈ `168p`, NO `56p`. Aplicar valores Material directamente como `p` produce barras/botones ~3× más pequeños de lo necesario.
|
|
498
|
+
|
|
499
|
+
| Material | `dp` | XOne `p` (1080×1920) |
|
|
500
|
+
|---|---|---|
|
|
501
|
+
| Toolbar | 56 | **164p**–`168p` (workflow: 164p) |
|
|
502
|
+
| Botón estándar | 48 | **144p** |
|
|
503
|
+
| Botón CTA pill | — | **124p** (workflow) |
|
|
504
|
+
| Icono toolbar | 24 | **72p** |
|
|
505
|
+
| Avatar lista | 40 | **120p** |
|
|
506
|
+
| Item lista | 48 | **144p** |
|
|
507
|
+
| FAB | 56 | **168p** |
|
|
508
|
+
| Touch target mínimo | 48 | **144p** |
|
|
509
|
+
|
|
510
|
+
```css
|
|
511
|
+
/* CORRECTO — calibrado para 1080×1920 */
|
|
512
|
+
.frameHeader {
|
|
513
|
+
width: 100%;
|
|
514
|
+
height: 164p; /* Material 56dp × 3 = ~168p; workflow estándar 164p */
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
.btnPrimario {
|
|
518
|
+
width: 90%;
|
|
519
|
+
height: 124p; /* Workflow "pill" CTA */
|
|
520
|
+
border-corner-radius: 62;
|
|
521
|
+
}
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
**Cuando usar `p`:**
|
|
525
|
+
|
|
526
|
+
- Alturas fijas de headers, footers, botones
|
|
527
|
+
- Tamaños de iconos y avatares
|
|
528
|
+
- Margenes y paddings fijos
|
|
529
|
+
- Radios de bordes (aunque estos van sin unidad)
|
|
530
|
+
- Dimensiones de componentes que no deben cambiar con el tamaño de pantalla
|
|
531
|
+
|
|
532
|
+
### 3.2 `%` (porcentaje) - Unidad relativa
|
|
533
|
+
|
|
534
|
+
El porcentaje es relativo al **contenedor padre** (frame o grupo). Es la unidad recomendada para anchos y alturas que deben adaptarse al tamaño de pantalla.
|
|
535
|
+
|
|
536
|
+
```css
|
|
537
|
+
/* CORRECTO */
|
|
538
|
+
.frameBody {
|
|
539
|
+
width: 100%;
|
|
540
|
+
height: 100%;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
.tarjeta {
|
|
544
|
+
width: 95%;
|
|
545
|
+
lmargin: 2.5%;
|
|
546
|
+
}
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
**Cuando usar `%`:**
|
|
550
|
+
|
|
551
|
+
- Anchos de contenedores principales (body, cards)
|
|
552
|
+
- Layouts responsivos
|
|
553
|
+
- Margenes laterales proporcionales
|
|
554
|
+
- Alturas de áreas que deben ocupar el espacio disponible
|
|
555
|
+
|
|
556
|
+
### 3.3 Sin unidad (numéricos)
|
|
557
|
+
|
|
558
|
+
Algunos atributos aceptan valores numéricos sin unidad:
|
|
559
|
+
|
|
560
|
+
| Atributo | Ejemplo | Nota |
|
|
561
|
+
|----------|---------|------|
|
|
562
|
+
| `fontsize` | `fontsize: 14` | Tamaño de fuente relativo |
|
|
563
|
+
| `border-corner-radius` | `border-corner-radius: 28` | Radio de esquinas |
|
|
564
|
+
| `border-width` | `border-width: 2` | Grosor de borde |
|
|
565
|
+
| `labelwidth` | `labelwidth: 30` | Proporcion etiqueta (0-100) |
|
|
566
|
+
| `lines` | `lines: 3` | Número de lineas visibles |
|
|
567
|
+
| `visible` | `visible: 7` | Mascara de visibilidad |
|
|
568
|
+
| `gallery-columns` | `gallery-columns: 3` | Columnas de galería |
|
|
569
|
+
| `img-width` / `img-height` | `img-width: 28` | Tamaño de iconos del sistema |
|
|
570
|
+
|
|
571
|
+
### 3.4 PROHIBIDO: px, em, rem, vh, vw
|
|
572
|
+
|
|
573
|
+
Las siguientes unidades **NO están soportadas** en XOne CSS y su uso producira comportamiento inesperado o sera ignorado:
|
|
574
|
+
|
|
575
|
+
| Unidad prohibida | Alternativa correcta en XOne |
|
|
576
|
+
|------------------|------------------------------|
|
|
577
|
+
| `px` | `p` (pixel en el dispositivo de referencia). **NO usar `dp`** — XOne lo ignora o lo trata como `p`. Material `56dp` no es `56p`: en 1080×1920 son `~168p` |
|
|
578
|
+
| `em` | Valor numérico sin unidad para `fontsize` |
|
|
579
|
+
| `rem` | Valor numérico sin unidad para `fontsize` |
|
|
580
|
+
| `vh` | `%` (porcentaje del contenedor padre) |
|
|
581
|
+
| `vw` | `%` (porcentaje del contenedor padre) |
|
|
582
|
+
| `vmin` / `vmax` | No tiene equivalente directo |
|
|
583
|
+
| `pt` | `p` (puntos XOne) |
|
|
584
|
+
| `cm` / `mm` / `in` | `p` (puntos XOne) |
|
|
585
|
+
|
|
586
|
+
**Ejemplo de errores frecuentes:**
|
|
587
|
+
|
|
588
|
+
```css
|
|
589
|
+
/* INCORRECTO - Unidades web no soportadas */
|
|
590
|
+
.miClase {
|
|
591
|
+
height: 56px; /* MAL: px no soportado */
|
|
592
|
+
fontsize: 1.2em; /* MAL: em no soportado */
|
|
593
|
+
width: 100vw; /* MAL: vw no soportado */
|
|
594
|
+
margin-top: 10rem; /* MAL: rem no soportado, y el atributo es tmargin */
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
/* CORRECTO - Unidades XOne */
|
|
598
|
+
.miClase {
|
|
599
|
+
height: 56p; /* BIEN: puntos */
|
|
600
|
+
fontsize: 14; /* BIEN: sin unidad */
|
|
601
|
+
width: 100%; /* BIEN: porcentaje */
|
|
602
|
+
tmargin: 10p; /* BIEN: puntos con nombre correcto */
|
|
603
|
+
}
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
> **Nota técnica:** La knowledgebase menciona `px` como opción disponible (`width: Npx`), pero **no es recomendado** porque no escala entre dispositivos con diferentes densidades de pantalla. Usar siempre `p` en su lugar.
|
|
607
|
+
|
|
608
|
+
---
|
|
609
|
+
|
|
610
|
+
## 4. Colores
|
|
611
|
+
|
|
612
|
+
### 4.1 Formato #RRGGBB
|
|
613
|
+
|
|
614
|
+
El formato más común para definir colores en XOne. Usa 6 digitos hexadecimales que representan los componentes Rojo, Verde y Azul.
|
|
615
|
+
|
|
616
|
+
```css
|
|
617
|
+
.miClase {
|
|
618
|
+
bgcolor: #FFFFFF; /* Blanco */
|
|
619
|
+
forecolor: #212121; /* Gris casi negro */
|
|
620
|
+
border-color: #E0E0E0; /* Gris claro */
|
|
621
|
+
}
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
**IMPORTANTE:** Siempre usar los 6 digitos completos. Las abreviaturas de 3 digitos (`#FFF`, `#333`) **no están garantizadas**. Usar siempre la forma completa:
|
|
625
|
+
|
|
626
|
+
```css
|
|
627
|
+
/* INCORRECTO - Abreviatura potencialmente no soportada */
|
|
628
|
+
.error {
|
|
629
|
+
bgcolor: #FFF;
|
|
630
|
+
forecolor: #333;
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
/* CORRECTO - Forma completa */
|
|
634
|
+
.correcto {
|
|
635
|
+
bgcolor: #FFFFFF;
|
|
636
|
+
forecolor: #333333;
|
|
637
|
+
}
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
### 4.2 Formato #AARRGGBB (con alpha)
|
|
641
|
+
|
|
642
|
+
XOne soporta transparencia en los colores mediante el formato **ARGB** (Alpha, Red, Green, Blue). **ATENCION:** a diferencia del formato CSS web `#RRGGBBAA` donde el alpha va al final, en XOne el componente **alpha va PRIMERO**.
|
|
643
|
+
|
|
644
|
+
```css
|
|
645
|
+
.elementoTransparente {
|
|
646
|
+
bgcolor: #80000000; /* Negro con 50% de opacidad */
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
.fondoSemiTransparente {
|
|
650
|
+
bgcolor: #CC1565C0; /* Azul con 80% de opacidad */
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
.totalmenteTransparente {
|
|
654
|
+
bgcolor: #00000000; /* Completamente transparente */
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
.totalmenteOpaco {
|
|
658
|
+
bgcolor: #FFFFFFFF; /* Blanco completamente opaco */
|
|
659
|
+
}
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
**Tabla de valores alpha comunes:**
|
|
663
|
+
|
|
664
|
+
| Opacidad | Hex Alpha | Negro con alpha | Blanco con alpha |
|
|
665
|
+
|:--------:|:---------:|:---------------:|:----------------:|
|
|
666
|
+
| 100% | `FF` | `#FF000000` | `#FFFFFFFF` |
|
|
667
|
+
| 95% | `F2` | `#F2000000` | `#F2FFFFFF` |
|
|
668
|
+
| 90% | `E6` | `#E6000000` | `#E6FFFFFF` |
|
|
669
|
+
| 85% | `D9` | `#D9000000` | `#D9FFFFFF` |
|
|
670
|
+
| 80% | `CC` | `#CC000000` | `#CCFFFFFF` |
|
|
671
|
+
| 75% | `BF` | `#BF000000` | `#BFFFFFFF` |
|
|
672
|
+
| 70% | `B3` | `#B3000000` | `#B3FFFFFF` |
|
|
673
|
+
| 65% | `A6` | `#A6000000` | `#A6FFFFFF` |
|
|
674
|
+
| 60% | `99` | `#99000000` | `#99FFFFFF` |
|
|
675
|
+
| 55% | `8C` | `#8C000000` | `#8CFFFFFF` |
|
|
676
|
+
| 50% | `80` | `#80000000` | `#80FFFFFF` |
|
|
677
|
+
| 45% | `73` | `#73000000` | `#73FFFFFF` |
|
|
678
|
+
| 40% | `66` | `#66000000` | `#66FFFFFF` |
|
|
679
|
+
| 35% | `59` | `#59000000` | `#59FFFFFF` |
|
|
680
|
+
| 30% | `4D` | `#4D000000` | `#4DFFFFFF` |
|
|
681
|
+
| 25% | `40` | `#40000000` | `#40FFFFFF` |
|
|
682
|
+
| 20% | `33` | `#33000000` | `#33FFFFFF` |
|
|
683
|
+
| 15% | `26` | `#26000000` | `#26FFFFFF` |
|
|
684
|
+
| 10% | `1A` | `#1A000000` | `#1AFFFFFF` |
|
|
685
|
+
| 5% | `0D` | `#0D000000` | `#0DFFFFFF` |
|
|
686
|
+
| 0% | `00` | `#00000000` | `#00FFFFFF` |
|
|
687
|
+
|
|
688
|
+
**Error frecuente - Orden del alpha:**
|
|
689
|
+
|
|
690
|
+
```css
|
|
691
|
+
/* INCORRECTO - Alpha al final (formato CSS web) */
|
|
692
|
+
.error {
|
|
693
|
+
bgcolor: #00000080; /* ESTO NO DA 50% transparencia en XOne */
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/* CORRECTO - Alpha al principio (formato XOne ARGB) */
|
|
697
|
+
.correcto {
|
|
698
|
+
bgcolor: #80000000; /* ESTO SI da 50% transparencia */
|
|
699
|
+
}
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
### 4.3 Colores con nombre
|
|
703
|
+
|
|
704
|
+
XOne tiene soporte limitado para la palabra clave `transparent`:
|
|
705
|
+
|
|
706
|
+
```css
|
|
707
|
+
.elementoTransparente {
|
|
708
|
+
bgcolor: transparent;
|
|
709
|
+
}
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
Sin embargo, es más fiable usar el formato hexadecimal `#00000000` para transparencia total. **No se garantiza** el soporte de otros nombres de color web como `red`, `blue`, `green`, etc.
|
|
713
|
+
|
|
714
|
+
```css
|
|
715
|
+
/* INCORRECTO - Nombres de color no garantizados */
|
|
716
|
+
.error {
|
|
717
|
+
bgcolor: red;
|
|
718
|
+
forecolor: white;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
/* CORRECTO - Usar hexadecimal siempre */
|
|
722
|
+
.correcto {
|
|
723
|
+
bgcolor: #F44336;
|
|
724
|
+
forecolor: #FFFFFF;
|
|
725
|
+
}
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
### 4.4 Patrones de paleta de colores
|
|
729
|
+
|
|
730
|
+
Se recomienda crear un archivo `colors.css` separado del `default.css` para centralizar la paleta de colores. Esto facilita el cambio de tema o de identidad visual.
|
|
731
|
+
|
|
732
|
+
**Estructura recomendada de `colors.css`:**
|
|
733
|
+
|
|
734
|
+
```css
|
|
735
|
+
/* ============================================
|
|
736
|
+
NOMBRE_PROYECTO - Paleta de Colores
|
|
737
|
+
Tema basado en tonos de AZUL
|
|
738
|
+
============================================ */
|
|
739
|
+
|
|
740
|
+
/* ============================================
|
|
741
|
+
COLORES PRIMARIOS
|
|
742
|
+
============================================ */
|
|
743
|
+
|
|
744
|
+
/* Color principal de marca - Mas oscuro */
|
|
745
|
+
.colorPrimario {
|
|
746
|
+
bgcolor: #0D47A1;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
/* Botones principales */
|
|
750
|
+
.colorPrimarioAccion {
|
|
751
|
+
bgcolor: #1565C0;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
/* Headers y elementos destacados */
|
|
755
|
+
.colorPrimarioMedio {
|
|
756
|
+
bgcolor: #1976D2;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
/* Elementos secundarios */
|
|
760
|
+
.colorPrimarioClaro {
|
|
761
|
+
bgcolor: #1E88E5;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
/* Fondos de tarjetas activas */
|
|
765
|
+
.colorPrimarioSuave {
|
|
766
|
+
bgcolor: #42A5F5;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/* Fondos sutiles */
|
|
770
|
+
.colorPrimarioPastel {
|
|
771
|
+
bgcolor: #64B5F6;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
/* Fondos de pantalla */
|
|
775
|
+
.colorPrimarioHielo {
|
|
776
|
+
bgcolor: #BBDEFB;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
/* Fondos muy sutiles */
|
|
780
|
+
.colorPrimarioNieve {
|
|
781
|
+
bgcolor: #E3F2FD;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
/* ============================================
|
|
785
|
+
COLORES DE ESTADO
|
|
786
|
+
============================================ */
|
|
787
|
+
|
|
788
|
+
.colorExito {
|
|
789
|
+
bgcolor: #4CAF50;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
.colorAdvertencia {
|
|
793
|
+
bgcolor: #FFC107;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
.colorError {
|
|
797
|
+
bgcolor: #F44336;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
.colorProgreso {
|
|
801
|
+
bgcolor: #FF9800;
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
/* ============================================
|
|
805
|
+
COLORES NEUTROS
|
|
806
|
+
============================================ */
|
|
807
|
+
|
|
808
|
+
.colorFondoBlanco {
|
|
809
|
+
bgcolor: #FFFFFF;
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
.colorFondoGrisClaro {
|
|
813
|
+
bgcolor: #F5F5F5;
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
.colorTextoOscuro {
|
|
817
|
+
forecolor: #212121;
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
.colorTextoMedio {
|
|
821
|
+
forecolor: #616161;
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
.colorTextoClaro {
|
|
825
|
+
forecolor: #9E9E9E;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
.colorTextoBlanco {
|
|
829
|
+
forecolor: #FFFFFF;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
.colorBorde {
|
|
833
|
+
border-color: #E0E0E0;
|
|
834
|
+
}
|
|
835
|
+
```
|
|
836
|
+
|
|
837
|
+
**Ejemplo real de paleta temática por colores (proyecto XOneDelivery - rojo, proyecto UseCars - azul, proyecto SocialNetwork - amarillo):**
|
|
838
|
+
|
|
839
|
+
Los tres proyectos usan la misma estructura de clases (`.colorPrimario`, `.colorPrimarioAccion`, etc.) pero con colores diferentes, lo que demuestra la utilidad de separar la paleta en un archivo independiente.
|
|
840
|
+
|