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,419 @@
|
|
|
1
|
+
# XOne CSS — Buenas prácticas y funciones del parser
|
|
2
|
+
|
|
3
|
+
> Fuente: `xone/v2/xone-help-docs/topics/04-css-styling-guide.md` §17–§18. Referencia de la skill; el índice está en [../../SKILL.md](../../SKILL.md).
|
|
4
|
+
|
|
5
|
+
Contenido: §17 top 15 buenas prácticas, anti-patrones y checklist · §18 funciones del parser: comentarios, @import, variables :root/var(), calc(), !important/!default, @extend, selectores múltiples, modo estricto
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 17. Best Practices
|
|
10
|
+
|
|
11
|
+
### 17.1 Top 15 buenas prácticas CSS en XOne
|
|
12
|
+
|
|
13
|
+
1. **Usar siempre `default.css` como archivo base** - Es el único archivo CSS obligatorio y debe contener los selectores `coll` y `prop` globales.
|
|
14
|
+
|
|
15
|
+
2. **Separar colores en `colors.css`** - Facilita el cambio de tema y mantiene el `default.css` más legible.
|
|
16
|
+
|
|
17
|
+
3. **Usar unidad `p` para dimensiones fijas y `%` para responsivas** - Nunca usar `px`, `em`, `rem`.
|
|
18
|
+
|
|
19
|
+
4. **Definir `fontsize` sin unidad** - El valor numérico es suficiente: `fontsize: 14`, no `fontsize: 14p`.
|
|
20
|
+
|
|
21
|
+
5. **Usar `extends` para variantes** - No duplicar atributos cuando solo cambia el color o un detalle.
|
|
22
|
+
|
|
23
|
+
6. **Comentar las secciones del CSS** - Usar bloques de comentarios con `/* ====== SECCION ====== */` para separar categorías.
|
|
24
|
+
|
|
25
|
+
7. **Seguir nomenclatura consistente** - Usar prefijos descriptivos (`frame`, `btn`, `input`, `texto`, `tarjeta`, `badge`, `avatar`, `icono`, `group`).
|
|
26
|
+
|
|
27
|
+
8. **Definir los iconos del sistema en el selector `prop`** - Configurar `img-spinner`, `img-search`, `img-checked`, etc. una sola vez.
|
|
28
|
+
|
|
29
|
+
9. **Usar `labelwidth: 0` cuando no hay etiqueta** - Evita desperdiciar espacio horizontal.
|
|
30
|
+
|
|
31
|
+
10. **Preferir `text-border-bottom: true` para inputs** - Es el patron Material Design más limpio y común.
|
|
32
|
+
|
|
33
|
+
11. **Usar `border-corner-radius` como mitad del `height` para botones pill** - Ejemplo: `height: 56p; border-corner-radius: 28;`.
|
|
34
|
+
|
|
35
|
+
12. **Recordar que alpha va PRIMERO en ARGB** - `#80FFFFFF` = blanco 50%, no `#FFFFFF80`.
|
|
36
|
+
|
|
37
|
+
13. **No abusar de animaciones** - Reservarlas para transiciones de pantalla, no para cada elemento.
|
|
38
|
+
|
|
39
|
+
14. **Definir siempre los tres frames básicos** - `.frameHeader`, `.frameBody` (con `scroll: true`), `.frameFooter`.
|
|
40
|
+
|
|
41
|
+
15. **Organizar el CSS en el mismo orden** - Globales, layout, tarjetas, botones, inputs, textos, badges, avatares, iconos, listas, grupos, componentes especiales, animaciones.
|
|
42
|
+
|
|
43
|
+
### 17.2 Anti-patrones comunes
|
|
44
|
+
|
|
45
|
+
| Anti-patron | Por que es malo | Solución correcta |
|
|
46
|
+
|-------------|----------------|-------------------|
|
|
47
|
+
| Usar `font-size: 14px` | Nombre y unidad CSS web | `fontsize: 14` |
|
|
48
|
+
| Usar `background-color` | Nombre CSS web | `bgcolor: #FFFFFF` |
|
|
49
|
+
| Usar `margin: 10p` | Abreviatura no existe en XOne | `tmargin: 10p; bmargin: 10p; lmargin: 10p; rmargin: 10p;` |
|
|
50
|
+
| Usar `#RRGGBBAA` para transparencia | Formato web, alpha al final | `#AARRGGBB` (alpha al inicio) |
|
|
51
|
+
| Usar `#FFF` abreviado | Abreviatura no garantizada | `#FFFFFF` (6 digitos completos) |
|
|
52
|
+
| Duplicar todos los atributos en variantes | Código duplicado, difícil de mantener | `extends: .claseBase;` con sobreescritura |
|
|
53
|
+
| Usar `display: none` | Atributo CSS web | `visible: 0` |
|
|
54
|
+
| Usar `display: flex` | Flexbox no soportado | Usar `frame` y `group` en XML |
|
|
55
|
+
| Mezclar `px` y `p` | `px` no escala entre dispositivos | Usar siempre `p` |
|
|
56
|
+
| Poner gradientes | `linear-gradient` no soportado | Usar colores solidos o imágenes de fondo |
|
|
57
|
+
| Usar selectores CSS complejos | `div > .header`, `p:first-child` no soportados | Usar clases simples `.miClase` |
|
|
58
|
+
| No definir `coll` y `prop` globales | Comportamiento inconsistente | Siempre definir ambos selectores base |
|
|
59
|
+
|
|
60
|
+
### 17.3 Checklist de validación CSS
|
|
61
|
+
|
|
62
|
+
Antes de entregar un archivo CSS XOne, verificar:
|
|
63
|
+
|
|
64
|
+
**Selectores:**
|
|
65
|
+
- [ ] Se usa `coll`, `prop`, `prop:TYPE`, `.clase`, `group`, o `frame` - no otros selectores
|
|
66
|
+
- [ ] Los nombres de clase son descriptivos y siguen la nomenclatura del proyecto
|
|
67
|
+
- [ ] No hay selectores de ID (`#id`) ni selectores combinadores (`>`, `+`, `~`)
|
|
68
|
+
|
|
69
|
+
**Unidades:**
|
|
70
|
+
- [ ] Todas las dimensiones usan `p` (puntos) o `%` (porcentaje)
|
|
71
|
+
- [ ] `fontsize` se define sin unidad (solo número)
|
|
72
|
+
- [ ] `border-corner-radius` se define sin unidad (solo número)
|
|
73
|
+
- [ ] `border-width` se define sin unidad (solo número)
|
|
74
|
+
- [ ] No se usa `px`, `em`, `rem`, `vh`, `vw`
|
|
75
|
+
|
|
76
|
+
**Colores:**
|
|
77
|
+
- [ ] Formato `#RRGGBB` para colores sin transparencia
|
|
78
|
+
- [ ] Formato `#AARRGGBB` para colores con alpha (alpha PRIMERO)
|
|
79
|
+
- [ ] Colores siempre con 6 u 8 digitos hexadecimales completos
|
|
80
|
+
- [ ] No se usan nombres de color (excepto `transparent` con precaucion)
|
|
81
|
+
|
|
82
|
+
**Atributos:**
|
|
83
|
+
- [ ] Todos los atributos usados existen en la knowledgebase CSS de XOne
|
|
84
|
+
- [ ] No se mezclan atributos CSS web (`font-size`, `background-color`, `margin-top`)
|
|
85
|
+
- [ ] Los valores booleanos son `true`/`false` (no 0/1 para booleanos)
|
|
86
|
+
- [ ] Los valores de `visible` usan el bitmask correcto (0-7)
|
|
87
|
+
|
|
88
|
+
**Herencia:**
|
|
89
|
+
- [ ] `extends` referencia clases con el prefijo `.` (ej: `extends: .claseBase`)
|
|
90
|
+
- [ ] No hay herencia circular (A extends B extends A)
|
|
91
|
+
- [ ] Las sobreescrituras son intencionales
|
|
92
|
+
|
|
93
|
+
**Estructura:**
|
|
94
|
+
- [ ] Existe el selector `coll` con configuración global
|
|
95
|
+
- [ ] Existe el selector `prop` con tipografía base
|
|
96
|
+
- [ ] Las secciones están comentadas y organizadas
|
|
97
|
+
- [ ] Los iconos del sistema están configurados en `prop`
|
|
98
|
+
|
|
99
|
+
> **Referencia cruzada:** Para la validación completa del proyecto (XML, JS, CSS, estructura de carpetas), consultar el tópico 01 - Fundamentos.
|
|
100
|
+
|
|
101
|
+
### 17.4 Organización recomendada del archivo CSS
|
|
102
|
+
|
|
103
|
+
El siguiente es el orden recomendado para las secciones del archivo `default.css`, basado en el análisis de todos los proyectos de ejemplo:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
1. Comentario de cabecera (nombre del proyecto, paleta de colores)
|
|
107
|
+
2. Configuración global: prop { }
|
|
108
|
+
3. Configuración global: coll { }
|
|
109
|
+
4. Iconos del sistema (img-spinner, img-search, etc.)
|
|
110
|
+
5. Frames de layout (.frameHeader, .frameBody, .frameFooter)
|
|
111
|
+
6. Tarjetas y contenedores (.tarjeta, .panelInferior)
|
|
112
|
+
7. Botones (.btnPrimario, .btnSecundario, .btnPeligro, .btnFlotante)
|
|
113
|
+
8. Campos de texto (.inputTexto, .inputBusqueda, .textoEditable)
|
|
114
|
+
9. Textos y etiquetas (.textoTitulo, .textoSubtitulo, .textoSecundario)
|
|
115
|
+
10. Badges de estado (.badgeEstado, .badgePendiente, etc.)
|
|
116
|
+
11. Imagenes y avatares (.avatar, .avatarGrande, .iconoAccion)
|
|
117
|
+
12. Listas e items (.itemLista, .separador)
|
|
118
|
+
13. Grupos y tabs (.groupNoTab, .groupConTab)
|
|
119
|
+
14. Componentes especiales (.areaFirma, .fotoPreview, .barraProgreso)
|
|
120
|
+
15. Animaciones (.animSlideRight, .animFadeIn)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 18. Funciones del parser CSS
|
|
126
|
+
|
|
127
|
+
Esta sección documenta las **funciones de sintaxis del parser CSS** de XOne. Son features procesadas antes de que el motor de render reciba las reglas, por lo que el consumidor (los controles de la UI) no ve diferencia con un valor literal: ve el resultado ya calculado o sustituido.
|
|
128
|
+
|
|
129
|
+
### 18.1 Comentarios
|
|
130
|
+
|
|
131
|
+
XOne acepta dos formas de comentario, válidas en cualquier posición fuera de un valor (entre reglas, entre selector y `{`, dentro del cuerpo de un bloque entre declaraciones):
|
|
132
|
+
|
|
133
|
+
```css
|
|
134
|
+
/* Comentario multilínea
|
|
135
|
+
tan largo como haga falta */
|
|
136
|
+
|
|
137
|
+
// Comentario de una sola línea (hasta el final del renglón)
|
|
138
|
+
|
|
139
|
+
.tarjeta {
|
|
140
|
+
// pendiente: revisar contraste con el tema oscuro
|
|
141
|
+
bgcolor: #FFFFFF;
|
|
142
|
+
/* color de marca */
|
|
143
|
+
forecolor: #1565C0;
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
> **Limitación:** los comentarios NO se reconocen dentro del valor de una declaración. `bgcolor: red /* nota */;` acumularía `red /* nota */` literal como valor.
|
|
148
|
+
|
|
149
|
+
### 18.2 `@import` — composición de hojas
|
|
150
|
+
|
|
151
|
+
Permite cargar otra hoja CSS y mergear sus reglas como si estuvieran inline en el archivo actual. La hoja importada puede a su vez tener sus propios `@import` al inicio.
|
|
152
|
+
|
|
153
|
+
```css
|
|
154
|
+
@import "colors.css";
|
|
155
|
+
@import url("base.css");
|
|
156
|
+
|
|
157
|
+
/* Aquí ya están disponibles todas las reglas y variables de las dos hojas */
|
|
158
|
+
.frameHeader {
|
|
159
|
+
bgcolor: var(--color-primario);
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Reglas:**
|
|
164
|
+
|
|
165
|
+
- **Posición**: solo al inicio del archivo, antes de cualquier regla. Si aparece después → error de parseo.
|
|
166
|
+
- **Sintaxis admitida**: `@import "ruta";`, `@import 'ruta';`, `@import url("ruta");`, `@import url(ruta);`.
|
|
167
|
+
- **Ciclos detectados**: si A importa B y B importa A, el parser lanza error con el path en conflicto.
|
|
168
|
+
- **Variables globales** declaradas en la hoja importada (`:root`) son visibles en la principal. Reglas y `!default` también se mergean.
|
|
169
|
+
- **Patrón típico**: una hoja `colors.css` con la paleta + una `base.css` con valores `!default` + tu `default.css` que solo sobreescribe lo que cambia.
|
|
170
|
+
|
|
171
|
+
### 18.3 Variables CSS (`:root`, `var()`)
|
|
172
|
+
|
|
173
|
+
#### Variables globales
|
|
174
|
+
|
|
175
|
+
Se declaran en un bloque `:root { ... }`. Se referencian con `var(--nombre)` o `var(--nombre, fallback)` en cualquier valor. La resolución es post-pasada: el orden de declaración no importa, `:root` puede aparecer al final del archivo o en una hoja importada.
|
|
176
|
+
|
|
177
|
+
```css
|
|
178
|
+
:root {
|
|
179
|
+
--color-primario: #1565C0;
|
|
180
|
+
--color-acento: #FFC107;
|
|
181
|
+
--espaciado-base: 8;
|
|
182
|
+
--radio-tarjeta: 12;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.tarjeta {
|
|
186
|
+
bgcolor: var(--color-primario);
|
|
187
|
+
border-corner-radius: var(--radio-tarjeta);
|
|
188
|
+
tmargin: var(--espaciado-base);
|
|
189
|
+
bmargin: var(--espaciado-base);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.alerta {
|
|
193
|
+
/* fallback usado cuando --color-error no está declarada */
|
|
194
|
+
bgcolor: var(--color-error, #F44336);
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**Características:**
|
|
199
|
+
|
|
200
|
+
- **Case-sensitive**: `--Color` ≠ `--color`.
|
|
201
|
+
- **Múltiples por valor**: `caption: pad var(--p1) var(--p2) fin;` se sustituye pieza a pieza.
|
|
202
|
+
- **Anidamiento**: una variable puede referenciar a otra. `--acento: var(--primario);` funciona aunque `--primario` aparezca más adelante.
|
|
203
|
+
- **Variable sin declarar y sin fallback**: el `var(...)` queda literal en el valor (no rompe la regla).
|
|
204
|
+
|
|
205
|
+
#### Variables locales (scope de bloque)
|
|
206
|
+
|
|
207
|
+
Una declaración `--nombre: valor;` dentro de un bloque que NO sea `:root` puro queda confinada al bloque. Se sustituyen al cerrar `}`. Útil para valores derivados que solo aplican a una clase concreta.
|
|
208
|
+
|
|
209
|
+
```css
|
|
210
|
+
.tarjeta {
|
|
211
|
+
--pad: 16;
|
|
212
|
+
--pad-doble: calc(var(--pad) * 2);
|
|
213
|
+
|
|
214
|
+
lpadding: var(--pad);
|
|
215
|
+
rpadding: var(--pad);
|
|
216
|
+
tpadding: var(--pad-doble);
|
|
217
|
+
bpadding: var(--pad-doble);
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
- **Sombreado**: si una local y una global tienen el mismo nombre, gana la local dentro de su bloque.
|
|
222
|
+
- **No visibles fuera** del bloque sintáctico.
|
|
223
|
+
- **Multi-selector**: en `a, b { --c: red; ... }` la local aplica a las reglas generadas para `a` y para `b`.
|
|
224
|
+
|
|
225
|
+
### 18.4 `calc()` — aritmética en valores
|
|
226
|
+
|
|
227
|
+
Evalúa expresiones aritméticas con `+`, `-`, `*`, `/`, paréntesis y operador unario `-` sobre números puros. Se ejecuta tras la resolución de variables, así que puedes combinarlas libremente.
|
|
228
|
+
|
|
229
|
+
```css
|
|
230
|
+
:root {
|
|
231
|
+
--base: 8;
|
|
232
|
+
--doble: calc(var(--base) * 2); /* 16 */
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.frameHeader {
|
|
236
|
+
height: calc(var(--base) * 20); /* 160 */
|
|
237
|
+
border-corner-radius: calc(var(--doble) - 4); /* 12 */
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.btnPrimario {
|
|
241
|
+
fontsize: calc(14 + 2);
|
|
242
|
+
lmargin: calc((100 - 90) / 2); /* 5 */
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Características:**
|
|
247
|
+
|
|
248
|
+
- **Operandos sin unidades**: `calc(8 * 2)` → `16`. NO interpreta `p`, `dp`, `%`, etc. Para tamaños en `p` o `%`, escribe el número solo y deja el ajuste de unidad fuera del `calc()`.
|
|
249
|
+
- **Precedencia estándar**: `*` y `/` antes que `+` y `-`. Paréntesis para sobreescribir.
|
|
250
|
+
- **Resultado entero exacto** → se emite como entero (`calc(4*3)` → `12`, no `12.0`). Si no es entero, se redondea a 6 dígitos y se eliminan ceros al final.
|
|
251
|
+
- **Múltiples calc en un mismo valor**: `caption: pad calc(8+8) fin;` se procesa pieza a pieza.
|
|
252
|
+
- **Errores** (división por cero, paréntesis sin balancear, sintaxis inválida): en parseo silencioso el `calc(...)` se preserva literal; en modo estricto el parser lanza.
|
|
253
|
+
|
|
254
|
+
### 18.5 `!important` y `!default`
|
|
255
|
+
|
|
256
|
+
Sufijos al final del valor que controlan la cascada **dentro del propio parser**, antes de que el motor de render aplique nada.
|
|
257
|
+
|
|
258
|
+
```css
|
|
259
|
+
.alerta {
|
|
260
|
+
bgcolor: #FFF3CD !important; /* no se sobreescribe por declaraciones normales */
|
|
261
|
+
fontsize: 14;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* Otra hoja u otro bloque NO cambia el bgcolor anterior: */
|
|
265
|
+
.alerta {
|
|
266
|
+
bgcolor: lime; /* ignorado: la previa es !important */
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**`!important`**: una declaración normal posterior NO sobreescribe a una `!important` previa del mismo atributo (ni dentro del mismo bloque, ni entre bloques separados del mismo selector). Solo otra `!important` produce sobreescritura.
|
|
271
|
+
|
|
272
|
+
**`!default`**: opuesto a `!important`. La declaración solo se aplica si el atributo no estaba ya definido. Pensado para hojas base sobre-escribibles.
|
|
273
|
+
|
|
274
|
+
```css
|
|
275
|
+
/* base.css importada por default.css */
|
|
276
|
+
boton {
|
|
277
|
+
bgcolor: gray !default;
|
|
278
|
+
fontsize: 14 !default;
|
|
279
|
+
lmargin: 8 !default;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/* default.css — solo cambia lo que toca; el resto conserva los defaults */
|
|
283
|
+
boton {
|
|
284
|
+
bgcolor: #1565C0;
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Resultado: `boton` queda con `bgcolor: #1565C0`, `fontsize: 14`, `lmargin: 8`.
|
|
289
|
+
|
|
290
|
+
**Combinación**: `!important !default` aplicado en cualquier orden significa "si no había declaración previa, aplica con `!important`". Si la había, se descarta.
|
|
291
|
+
|
|
292
|
+
### 18.6 `@extend selector;` — herencia vía at-rule
|
|
293
|
+
|
|
294
|
+
Alternativa moderna al atributo `extends:` tradicional. La at-rule `@extend selector;` dentro de un bloque copia las declaraciones del selector referenciado **antes** de que el motor de render reciba nada.
|
|
295
|
+
|
|
296
|
+
```css
|
|
297
|
+
/* Base reutilizable */
|
|
298
|
+
.btnBase {
|
|
299
|
+
width: 90%;
|
|
300
|
+
height: 144p;
|
|
301
|
+
border-corner-radius: 28;
|
|
302
|
+
fontsize: 16;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/* Variantes via at-rule */
|
|
306
|
+
.btnPrimario {
|
|
307
|
+
@extend .btnBase;
|
|
308
|
+
bgcolor: #1565C0;
|
|
309
|
+
forecolor: #FFFFFF;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.btnPeligro {
|
|
313
|
+
@extend .btnPrimario; /* encadenado: hereda de primario que hereda de base */
|
|
314
|
+
bgcolor: #F44336 !important;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/* Multi-extend: combina varios padres */
|
|
318
|
+
.btnExitoGrande {
|
|
319
|
+
@extend .btnBase;
|
|
320
|
+
@extend .colorExito;
|
|
321
|
+
height: 168p;
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**Características:**
|
|
326
|
+
|
|
327
|
+
- **Referencias adelantadas permitidas**: el target del `@extend` puede declararse en cualquier punto de la hoja, incluso posterior al uso (se resuelve en post-pasada).
|
|
328
|
+
- **Hijo gana**: las declaraciones propias del bloque vencen sobre las heredadas, salvo cuando el padre es `!important` y el hijo no.
|
|
329
|
+
- **Encadenamiento transitivo**: `c → b → a` funciona; cada nivel se expande antes de aplicarse al siguiente.
|
|
330
|
+
- **Múltiples `@extend` por bloque**: entre los padres aplica "último gana".
|
|
331
|
+
- **Ciclos detectados**: auto-referencia (`a` → `a`), 2-vías (`a` ↔ `b`) y N-vías → error de parseo.
|
|
332
|
+
- **Multi-selector**: en `a, b { @extend base; }` el extend se aplica a `a` y a `b` independientemente.
|
|
333
|
+
|
|
334
|
+
#### `@extend` vs atributo `extends:`
|
|
335
|
+
|
|
336
|
+
Conviven sin conflicto. Diferencias:
|
|
337
|
+
|
|
338
|
+
| Aspecto | `extends: .clase;` (atributo) | `@extend .clase;` (at-rule) |
|
|
339
|
+
|---|---|---|
|
|
340
|
+
| Sintaxis | Declaración dentro del bloque | At-rule dentro del bloque |
|
|
341
|
+
| Quién lo resuelve | El motor de render (xonecss_lib) en cascada | El parser, en post-pasada |
|
|
342
|
+
| Cuándo se resuelve | Al aplicar la regla a una vista | Al parsear la hoja |
|
|
343
|
+
| Visibilidad del resultado | El atributo `extends` queda en la regla | Las declaraciones aparecen "in-line" en la regla |
|
|
344
|
+
| Detección de ciclos | NO automática | SÍ (en parseo) |
|
|
345
|
+
| Estado de adopción | Establecido en proyectos existentes | Nuevo, alternativa moderna |
|
|
346
|
+
|
|
347
|
+
**Recomendación**: usa el que prefieras según el estilo del proyecto. Si vas a empezar de cero o quieres validación temprana de ciclos, prefiere `@extend`. Si tu proyecto ya usa `extends:`, mantenlo por consistencia.
|
|
348
|
+
|
|
349
|
+
### 18.7 Selectores múltiples
|
|
350
|
+
|
|
351
|
+
Un bloque puede aplicarse a varios selectores separados por comas. Internamente se crea una regla independiente por cada uno (no compartida).
|
|
352
|
+
|
|
353
|
+
```css
|
|
354
|
+
.btnPrimario, .btnSecundario, .btnPeligro {
|
|
355
|
+
width: 90%;
|
|
356
|
+
height: 144p;
|
|
357
|
+
border-corner-radius: 28;
|
|
358
|
+
fontsize: 16;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/* Equivalente a haberlas escrito una a una con los mismos valores */
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
Variantes de espaciado válidas: `a,b`, `a, b`, `a ,b`, `a , b`.
|
|
365
|
+
|
|
366
|
+
### 18.8 Modo estricto del parser
|
|
367
|
+
|
|
368
|
+
El framework puede arrancar el parser en **modo estricto** (`bStrictMode = true`). En ese modo, varios casos que en modo permisivo se ignoran silenciosamente se convierten en errores:
|
|
369
|
+
|
|
370
|
+
- Declaración sin `;` final o que cierra con `}` antes que con `;`.
|
|
371
|
+
- Variable sin declarar y sin fallback en `var(...)`.
|
|
372
|
+
- Expresión `calc(...)` inválida o división por cero.
|
|
373
|
+
- Target de `@extend` que no existe.
|
|
374
|
+
|
|
375
|
+
Recomendado durante el desarrollo para detectar typos y referencias rotas; opcional en producción si la hoja ya está validada.
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
**Tabla de equivalencias rápida CSS Web a XOne:**
|
|
380
|
+
|
|
381
|
+
| CSS Web | XOne CSS |
|
|
382
|
+
|---------|----------|
|
|
383
|
+
| `font-size: 14px` | `fontsize: 14` |
|
|
384
|
+
| `font-family: Roboto` | `fontname: Roboto-Regular.ttf` |
|
|
385
|
+
| `font-weight: bold` | `fontbold: true` |
|
|
386
|
+
| `font-style: italic` | `fontitalic: true` |
|
|
387
|
+
| `color: #333` | `forecolor: #333333` |
|
|
388
|
+
| `background-color: #fff` | `bgcolor: #FFFFFF` |
|
|
389
|
+
| `background-image: url(img.png)` | `imgbk: img.png` |
|
|
390
|
+
| `margin-top: 10px` | `tmargin: 10p` |
|
|
391
|
+
| `margin-bottom: 10px` | `bmargin: 10p` |
|
|
392
|
+
| `margin-left: 20px` | `lmargin: 20p` |
|
|
393
|
+
| `margin-right: 20px` | `rmargin: 20p` |
|
|
394
|
+
| `padding-top: 10px` | `tpadding: 10p` |
|
|
395
|
+
| `padding-left: 20px` | `lpadding: 20p` |
|
|
396
|
+
| `border-radius: 8px` | `border-corner-radius: 8` |
|
|
397
|
+
| `border: 1px solid #ccc` | `border: true; border-width: 1; border-color: #CCCCCC;` |
|
|
398
|
+
| `text-align: center` | `text-align: center` |
|
|
399
|
+
| `height: 50px` | `height: 50p` |
|
|
400
|
+
| `width: 100%` | `width: 100%` |
|
|
401
|
+
| `display: none` | `visible: 0` |
|
|
402
|
+
| `overflow: scroll` | `scroll: true` |
|
|
403
|
+
| `position: fixed` | `fixed: true` |
|
|
404
|
+
| `opacity: 0.5` | Usar alpha ARGB: `bgcolor: #80...` |
|
|
405
|
+
| `cursor: pointer` | No necesario (es móvil) |
|
|
406
|
+
| `box-shadow: ...` | No soportado (usar `border` como alternativa) |
|
|
407
|
+
| `transition: ...` | No soportado (usar `animation-in`/`animation-out`) |
|
|
408
|
+
| `transform: ...` | No soportado |
|
|
409
|
+
| `display: flex` | No soportado (usar `frame` y `group`) |
|
|
410
|
+
| `display: grid` | No soportado (usar `gallery-columns`) |
|
|
411
|
+
| `var(--color)` | `var(--color)` (declarar en `:root`) |
|
|
412
|
+
| `calc(8px * 2)` | `calc(8 * 2)` (sobre números puros) |
|
|
413
|
+
| `@import url("a.css")` | `@import "a.css";` (solo al inicio) |
|
|
414
|
+
| `// comentario` o `/* */` | `// comentario` o `/* */` (no dentro de valores) |
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
> **Documento generado a partir de:** `xone-css-knowledgebase.md` (knowledgebase oficial), `xone-css-styling-guide.md` (guía de referencia del generador), y el análisis de los archivos CSS de los proyectos UseCars, MiMensajeria, SocialNetwork, XOneDelivery y GestionTareas ubicados en `templates/synthetic_samples/` y `knowledgebase/examples/`.
|
|
419
|
+
|