create-lexy 0.6.1 → 0.6.3
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 +7 -2
- package/assets/fonts/{OFL-NotoSans.txt → LICENSE-Geist.txt} +4 -5
- package/assets/fonts/geist-mono-variable-italic.woff2 +0 -0
- package/assets/fonts/geist-mono-variable.woff2 +0 -0
- package/assets/fonts/geist-sans-variable-italic.woff2 +0 -0
- package/assets/fonts/geist-sans-variable.woff2 +0 -0
- package/assets/r/accordion.json +3 -3
- package/assets/r/alert-dialog.json +3 -3
- package/assets/r/app-accordion.json +1 -1
- package/assets/r/app-dialog.json +3 -3
- package/assets/r/app-header-bar.json +2 -2
- package/assets/r/app-sidebar.json +2 -2
- package/assets/r/avatar.json +3 -3
- package/assets/r/badge.json +3 -3
- package/assets/r/brand-background.json +1 -1
- package/assets/r/breadcrumb.json +3 -3
- package/assets/r/button-group.json +3 -3
- package/assets/r/button.json +3 -3
- package/assets/r/calendar.json +2 -2
- package/assets/r/card.json +3 -3
- package/assets/r/chart.json +2 -2
- package/assets/r/checkbox.json +2 -2
- package/assets/r/combobox.json +3 -3
- package/assets/r/command.json +3 -3
- package/assets/r/confirmacion.json +1 -1
- package/assets/r/counter-badge.json +3 -3
- package/assets/r/crm-desk.json +1 -1
- package/assets/r/crm-detalle-caso.json +5 -5
- package/assets/r/date-picker.json +1 -1
- package/assets/r/dialog.json +3 -3
- package/assets/r/dropdown-menu.json +3 -3
- package/assets/r/empty.json +2 -2
- package/assets/r/feature-card.json +3 -3
- package/assets/r/form.json +3 -3
- package/assets/r/header-bar.json +2 -2
- package/assets/r/input.json +3 -3
- package/assets/r/intake-wizard.json +1 -1
- package/assets/r/label.json +3 -3
- package/assets/r/logo.json +2 -2
- package/assets/r/menubar.json +3 -3
- package/assets/r/navigation-menu.json +3 -3
- package/assets/r/pagination.json +2 -2
- package/assets/r/popover.json +3 -3
- package/assets/r/profile-card.json +3 -3
- package/assets/r/progress.json +2 -2
- package/assets/r/radio-group.json +2 -2
- package/assets/r/registry.json +47 -47
- package/assets/r/scroll-area.json +2 -2
- package/assets/r/searchbox.json +3 -3
- package/assets/r/select.json +3 -3
- package/assets/r/separator.json +2 -2
- package/assets/r/sheet.json +2 -2
- package/assets/r/sidebar.json +3 -3
- package/assets/r/skeleton.json +2 -2
- package/assets/r/slider.json +3 -3
- package/assets/r/snippet.json +3 -3
- package/assets/r/spinner.json +2 -2
- package/assets/r/status-dot.json +3 -3
- package/assets/r/switch.json +3 -3
- package/assets/r/table.json +3 -3
- package/assets/r/tabs.json +3 -3
- package/assets/r/tag.json +3 -3
- package/assets/r/textarea.json +3 -3
- package/assets/r/toaster.json +3 -3
- package/assets/r/tooltip.json +3 -3
- package/assets/r/tree.json +3 -3
- package/assets/registry-version +1 -1
- package/assets/theme/lexy-theme.css +562 -112
- package/dist/index.js +590 -276
- package/package.json +4 -2
- package/templates/.claude/skills/lexy-design/SKILL.md +189 -0
- package/templates/.claude/skills/lexy-dev/SKILL.md +168 -0
- package/templates/.claude/skills/lexy-mock-data/SKILL.md +50 -0
- package/templates/.github/copilot-instructions.md +50 -0
- package/templates/.mcp.json +8 -0
- package/templates/AGENTS.md +243 -0
- package/templates/CLAUDE.md +61 -0
- package/templates/ai/IMPLEMENTATION-PROTOCOL.md +148 -0
- package/templates/ai/PRODUCTION-CLEANUP.md +17 -0
- package/templates/ai/PROJECT-CONTEXT.md +65 -0
- package/templates/ai/README.md +19 -0
- package/templates/ai/TECHNICAL-USAGE.md +220 -0
- package/templates/ai/pautas/arquitectura-informacion-ux.md +243 -0
- package/templates/ai/pautas/buenas-practicas.md +236 -0
- package/templates/ai/pautas/calidad-industria.md +109 -0
- package/templates/ai/pautas/diseno-cliente.md +136 -0
- package/templates/ai/pautas/diseno-crm-lexy.md +109 -0
- package/templates/ai/pautas/patrones-de-codigo.md +234 -0
- package/templates/ai/pautas/recetas-layout.md +419 -0
- package/templates/ai/pautas/sistema-visual.md +197 -0
- package/templates/ai/pautas/ux-writing.md +214 -0
- package/templates/scripts/check-geometry.mjs +139 -0
- package/assets/fonts/noto-sans-latin.woff2 +0 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Guía técnica de uso del proyecto Lexy
|
|
2
|
+
|
|
3
|
+
Esta guía es para devs y agentes de IA que trabajan dentro de un proyecto Lexy
|
|
4
|
+
(creado con `create-lexy`). Es el **anexo técnico que ejecuta la skill `lexy-dev`**;
|
|
5
|
+
el flujo de trabajo lo define esa skill, no este documento.
|
|
6
|
+
|
|
7
|
+
## El modelo registry (léelo primero)
|
|
8
|
+
|
|
9
|
+
**Los componentes viven en tu proyecto.** No hay librería npm de componentes: el
|
|
10
|
+
catálogo Lexy es un registry versionado (`@lexydesign/registry`) y el CLI
|
|
11
|
+
`create-lexy` trae cada componente como código local — tuyo y editable.
|
|
12
|
+
|
|
13
|
+
- **Míralo** antes de instalar: `npx create-lexy view button` (código + doc + metadata).
|
|
14
|
+
- **Instálalo**: `npx create-lexy add button` (con sus dependencias, en la ruta de `.lexy`).
|
|
15
|
+
- **Edítalo localmente con libertad**: es código del proyecto, no hay internals prohibidos.
|
|
16
|
+
- **Mantén la divergencia visible**: `diff` y `doctor` comparan tu copia con el registry vigente.
|
|
17
|
+
|
|
18
|
+
## Archivos de referencia
|
|
19
|
+
|
|
20
|
+
- `.lexy`: configuración generada del proyecto. Define arquitectura, rutas reales y componentes instalados (con la versión del registry con la que entraron).
|
|
21
|
+
- [ai/lexy-ai-manifest.json](lexy-ai-manifest.json): índice técnico generado — comandos del registry, patrón de import local (`componentImportPattern`) y rutas del prototipo.
|
|
22
|
+
- `src/prototype/data-contract/prototype-data-contract.ts`: fuente de verdad de entidades, campos, relaciones, estados y proyecciones usados por la experiencia. Confirma la ruta exacta en el manifest.
|
|
23
|
+
- `src/prototype/ports/`: interfaces y adapters mock/producción para cargas de datos y eventos publicados.
|
|
24
|
+
- `src/prototype/mock-store/fixtures.ts`: registros sintéticos iniciales.
|
|
25
|
+
- `src/prototype/mock-store/mock-store.ts`: estado mock compartido y persistente.
|
|
26
|
+
- [ai/IMPLEMENTATION-PROTOCOL.md](IMPLEMENTATION-PROTOCOL.md): protocolo para implementar interfaces con componentes del registry.
|
|
27
|
+
- [AGENTS.md](../AGENTS.md): prompt base para agentes.
|
|
28
|
+
- [ai/pautas/](pautas/): criterios de diseño y UX writing.
|
|
29
|
+
|
|
30
|
+
Antes de crear archivos propios o escribir imports, lee `.lexy` y usa sus rutas como fuente de verdad.
|
|
31
|
+
Antes de implementar UI, lee `ai/IMPLEMENTATION-PROTOCOL.md`.
|
|
32
|
+
|
|
33
|
+
## Comandos del proyecto
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pnpm dev # vista previa
|
|
37
|
+
pnpm check:data-contract # valida el contrato de datos
|
|
38
|
+
pnpm check:prototype # valida el contrato del prototipo
|
|
39
|
+
pnpm build # valida el prototipo y crea el build de producción
|
|
40
|
+
pnpm build:app # build de aplicación sin repetir el chequeo explícito
|
|
41
|
+
pnpm preview # revisar el build
|
|
42
|
+
pnpm lint:geometry # contrato de geometría Lexy (espaciado, radios, sombras)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Contrato de datos
|
|
46
|
+
|
|
47
|
+
Antes de agregar un dato visible, editable, calculado o filtrable a una pantalla:
|
|
48
|
+
|
|
49
|
+
1. revisa el contrato indicado por `prototype.dataContractPath` en el manifest;
|
|
50
|
+
2. declara el dato y sus relaciones o proyecciones;
|
|
51
|
+
3. usa IDs frontend `camelCase`;
|
|
52
|
+
4. conserva nombres backend `snake_case` únicamente en `source.reference`;
|
|
53
|
+
5. marca como `generatedByUsability` + `pendingTi` lo que aún deba validar TI;
|
|
54
|
+
6. ejecuta `pnpm check:data-contract`.
|
|
55
|
+
|
|
56
|
+
El contrato no contiene registros mock, datos personales reales, eventos ni
|
|
57
|
+
persistencia. Describe qué datos existen y qué significan para la experiencia.
|
|
58
|
+
|
|
59
|
+
## Ports de lectura y escritura
|
|
60
|
+
|
|
61
|
+
Los componentes importan `read` y `write` desde `src/prototype/ports`:
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
const leads = await read.load("Crm_Leads-ListaLeads_V1", params, {
|
|
65
|
+
description: "Carga el listado de leads.",
|
|
66
|
+
reads: { entities: ["lead"] },
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
const receipt = await write.publish("Crm_Leads-LeadCreado_V1", payload, {
|
|
70
|
+
description: "Publica la creación de un lead.",
|
|
71
|
+
writes: { entities: ["lead"], fields: ["lead.nombre"] },
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Una lectura devuelve datos o lanza un error. Una publicación devuelve
|
|
76
|
+
`{ eventId, status }`, donde `status` es un código HTTP. Un filtro sobre datos ya
|
|
77
|
+
cargados es local y no requiere `read.load`.
|
|
78
|
+
|
|
79
|
+
En diseño, `ports/index.ts` usa los adapters mock; en producción se conecta
|
|
80
|
+
`productionRead` al GET real y `productionWrite` a la publicación/worker. No
|
|
81
|
+
cambies los componentes para hacer ese swap.
|
|
82
|
+
|
|
83
|
+
## Mock-store persistente
|
|
84
|
+
|
|
85
|
+
La data mock no vive en componentes. Vive en:
|
|
86
|
+
|
|
87
|
+
- `src/prototype/mock-store/fixtures.ts`: dataset inicial;
|
|
88
|
+
- `src/prototype/mock-store/mock-store.ts`: estado compartido, suscripciones y
|
|
89
|
+
persistencia local;
|
|
90
|
+
- `src/prototype/ports/mock-read.ts`: lecturas genéricas por metadata `reads`;
|
|
91
|
+
- `src/prototype/ports/mock-write.ts`: publicaciones, receipt y mutación genérica
|
|
92
|
+
por metadata `writes`.
|
|
93
|
+
|
|
94
|
+
Los datos deben ser sintéticos, explícitos y deterministas. Usa RUT, teléfonos,
|
|
95
|
+
fechas, CLP y correos con formato chileno. Incrementa `datasetVersion` cuando
|
|
96
|
+
cambies fixtures persistibles y ejecuta `pnpm check:prototype`.
|
|
97
|
+
|
|
98
|
+
## Comandos del registry
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npx create-lexy view --list # catálogo completo
|
|
102
|
+
npx create-lexy view button # ver un componente antes de instalar
|
|
103
|
+
npx create-lexy view button --installed # ver la copia local
|
|
104
|
+
npx create-lexy add button # instalar (resuelve dependencias internas)
|
|
105
|
+
npx create-lexy add button --overwrite # re-instalar pisando cambios locales
|
|
106
|
+
npx create-lexy diff button # copia local vs registry vigente (exit 1 si difiere)
|
|
107
|
+
npx create-lexy doctor # salud del proyecto + drift de lo instalado
|
|
108
|
+
npx create-lexy doctor --strict # las ediciones locales también fallan (CI)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Crear un proyecto nuevo
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npx create-lexy create mi-app # interactivo
|
|
115
|
+
npx create-lexy create mi-app -t feature -w crm # automatizado (feature, CRM)
|
|
116
|
+
npx create-lexy create mi-app -t layer -w cliente # automatizado (layer, cliente)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Arquitecturas y paths
|
|
120
|
+
|
|
121
|
+
El import local depende de la arquitectura de `.lexy`. El patrón exacto vive en
|
|
122
|
+
`componentImportPattern` del manifest; estos son los dos casos:
|
|
123
|
+
|
|
124
|
+
### Feature
|
|
125
|
+
|
|
126
|
+
- Componentes: `src/shared/components/base`
|
|
127
|
+
- Hooks: `src/shared/hooks` · Servicios: `src/shared/services` · Utilidades: `src/shared/lib` · Vistas: `src/features`
|
|
128
|
+
- Helper `cn`: `@/shared/lib/utils/cn`
|
|
129
|
+
- Import: `import { Button } from "@/shared/components/base/Button";`
|
|
130
|
+
|
|
131
|
+
### Layer
|
|
132
|
+
|
|
133
|
+
- Componentes: `src/components/base`
|
|
134
|
+
- Hooks: `src/hooks` · Servicios: `src/services` · Utilidades: `src/lib` · Vistas: `src/views`
|
|
135
|
+
- Helper `cn`: `@/lib/utils/cn`
|
|
136
|
+
- Import: `import { Button } from "@/components/base/Button";`
|
|
137
|
+
|
|
138
|
+
## Qué hace `add` exactamente
|
|
139
|
+
|
|
140
|
+
- Resuelve el componente y sus **dependencias internas transitivas** (por ejemplo, un combobox trae también su popover y su botón).
|
|
141
|
+
- Copia los archivos a la ruta de componentes definida en `.lexy`, **incluida la guía `{Component}.md`** (viaja junto al código para que un agente la lea al trabajar).
|
|
142
|
+
- Adapta el import del helper `cn` a la arquitectura del proyecto.
|
|
143
|
+
- Instala **solo** las dependencias npm que el proyecto aún no tiene.
|
|
144
|
+
- Anota la versión en `.lexy` → `installed`, para que `diff`/`doctor` puedan razonar el drift.
|
|
145
|
+
- Si tu copia local tiene cambios, **pide confirmación** antes de sobrescribir (`--overwrite` para CI/agentes).
|
|
146
|
+
|
|
147
|
+
## Editar componentes instalados
|
|
148
|
+
|
|
149
|
+
Editar la copia local es el flujo normal del modelo — no hay "internals" prohibidos.
|
|
150
|
+
Reglas de oficio:
|
|
151
|
+
|
|
152
|
+
- Mantén `pnpm lint:geometry` en verde: el contrato de geometría se fiscaliza en cada repo.
|
|
153
|
+
- Actualiza el `{Component}.md` local si cambias la API o el comportamiento.
|
|
154
|
+
- La divergencia queda visible en `doctor` como _"editado localmente"_: es información, no error. Si más adelante quieres volver a la versión del registry, `add --overwrite`.
|
|
155
|
+
|
|
156
|
+
## Diagnosticar el proyecto
|
|
157
|
+
|
|
158
|
+
Comando de solo lectura. No modifica ni instala nada:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
npx create-lexy doctor
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Verifica:
|
|
165
|
+
|
|
166
|
+
- `.lexy` existe y es JSON válido (arquitectura, rutas, instalados).
|
|
167
|
+
- El theme (`src/lexy-theme.css`) y el helper `cn` están presentes.
|
|
168
|
+
- Por cada componente instalado: archivos presentes y su estado frente al registry vigente — **al día**, **desactualizado** (el registry avanzó; exit 1) o **editado localmente** (aviso; con `--strict`, exit 1).
|
|
169
|
+
- La capa de IA instalada (este directorio) está completa según el manifest.
|
|
170
|
+
|
|
171
|
+
Exit code `0` si todo está OK y `1` si hay algo roto o desactualizado, por lo que sirve en CI.
|
|
172
|
+
|
|
173
|
+
## Componentes disponibles
|
|
174
|
+
|
|
175
|
+
El catálogo vivo es el registry: `npx create-lexy view --list` lo consulta
|
|
176
|
+
(no se duplica aquí ni en el manifest — así no puede driftar). La guía de uso de
|
|
177
|
+
cada componente es su companion doc `{Component}.md`: instalada junto al
|
|
178
|
+
componente, o visible con `view` antes de instalar.
|
|
179
|
+
|
|
180
|
+
Regla rápida para componer: para sidebar, header, diálogo y acordeón usa las
|
|
181
|
+
versiones **data-driven** (`AppSidebar`, `AppHeaderBar`, `AppDialog`,
|
|
182
|
+
`AppAccordion`); para el layout de una app interna, `SidebarProvider` +
|
|
183
|
+
`AppSidebar` + `SidebarInset`. Las primitivas equivalentes son para
|
|
184
|
+
composiciones a medida.
|
|
185
|
+
|
|
186
|
+
## Reglas para agentes de IA
|
|
187
|
+
|
|
188
|
+
1. Antes de implementar una interfaz, descubre los componentes con `npx create-lexy view --list` y revisa los elegidos con `view {component}`.
|
|
189
|
+
2. Si un componente existe en el registry, **instálalo** (`add`) — no lo reescribas a mano ni lo reemplaces con HTML/CSS propio.
|
|
190
|
+
3. La ausencia de componentes locales no significa ausencia de sistema; significa que aún no los has instalado.
|
|
191
|
+
4. Usa el import local que corresponde a `.lexy` (`componentImportPattern` del manifest). No inventes rutas.
|
|
192
|
+
5. Edita los componentes instalados cuando el diseño lo pida — esa libertad es el modelo. Mantén `lint:geometry` en verde y el `{Component}.md` al día.
|
|
193
|
+
6. Si necesitas un componente que no está en el catálogo, confirma con `view` que no hay equivalente y créalo siguiendo los patrones del proyecto (o propónlo para el registry).
|
|
194
|
+
7. Todo lo de **diseño** (qué componente elegir y por qué, cliente vs CRM, densidad y espaciado, accesibilidad, jerarquía y landmarks, UX writing, progressive disclosure) tiene su fuente de verdad en las pautas de `ai/pautas/`. Léelas según el tema; no infieras estas reglas desde este documento ni desde el manifest.
|
|
195
|
+
8. Antes de cerrar, valida contra el `## Criterio final` de `ai/IMPLEMENTATION-PROTOCOL.md`: contratos de experiencia, técnico, accesibilidad, jerarquía, microcopy y arquitectura de información.
|
|
196
|
+
9. No agregues a la UI datos que no estén declarados en el contrato cuando
|
|
197
|
+
`prototype.enabled` sea `true`.
|
|
198
|
+
10. No pegues fixtures mock en componentes; usa `prototype.fixturesPath`.
|
|
199
|
+
11. No llames evento a una lectura remota; usa `read.load`.
|
|
200
|
+
12. No llames al backend directamente desde componentes; conserva el límite de
|
|
201
|
+
los ports.
|
|
202
|
+
|
|
203
|
+
## Cuando implementes desde Figma
|
|
204
|
+
|
|
205
|
+
La referencia visual es un **contrato de patrón**. Las reglas de lectura (qué
|
|
206
|
+
observar y conservar) viven en
|
|
207
|
+
[ai/pautas/arquitectura-informacion-ux.md](pautas/arquitectura-informacion-ux.md)
|
|
208
|
+
(«Referencias visuales») y el detalle de implementación en
|
|
209
|
+
[ai/IMPLEMENTATION-PROTOCOL.md](IMPLEMENTATION-PROTOCOL.md) («Cuando hay
|
|
210
|
+
referencia Figma»). En corto: identifica el patrón antes de escribir código,
|
|
211
|
+
materialízalo con componentes del registry y no agregues secciones que la
|
|
212
|
+
referencia no muestra.
|
|
213
|
+
|
|
214
|
+
## Retirar la infraestructura de IA
|
|
215
|
+
|
|
216
|
+
Los archivos de contexto de IA no son necesarios para ejecutar la aplicación y
|
|
217
|
+
pueden retirarse antes de producción. El comando exacto y la verificación de
|
|
218
|
+
referencias residuales viven **solo** en
|
|
219
|
+
[ai/PRODUCTION-CLEANUP.md](PRODUCTION-CLEANUP.md); síguelo desde ahí para no
|
|
220
|
+
borrar de más ni de menos.
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# Arquitectura de informacion y carga visual
|
|
2
|
+
|
|
3
|
+
Esta pauta guía cómo ordenar información en interfaces Lexy para que sean claras, progresivas y fáciles de leer. Úsala junto con la filosofía de cliente o CRM y la guía de UX writing.
|
|
4
|
+
|
|
5
|
+
## Regla base
|
|
6
|
+
|
|
7
|
+
La interfaz no debe mostrar todo al mismo tiempo para parecer completa. Debe mostrar primero lo que permite avanzar, y revelar el resto cuando el usuario lo necesita.
|
|
8
|
+
|
|
9
|
+
Una buena pantalla Lexy tiene:
|
|
10
|
+
|
|
11
|
+
- Un foco principal evidente.
|
|
12
|
+
- Un título que explica la tarea o el estado, no una etiqueta decorativa.
|
|
13
|
+
- Secciones agrupadas por decisión o acción.
|
|
14
|
+
- Jerarquía visual suficiente para escanear sin leer todo.
|
|
15
|
+
- Contenido secundario disponible, pero no compitiendo con la acción principal.
|
|
16
|
+
- Accesibilidad resuelta desde la estructura: orden lógico, etiquetas claras, foco visible y estados que no dependan solo del color.
|
|
17
|
+
|
|
18
|
+
## Jerarquía
|
|
19
|
+
|
|
20
|
+
La jerarquía ayuda a que la persona entienda dónde está, qué es importante y qué puede hacer. Debe existir en dos niveles al mismo tiempo:
|
|
21
|
+
|
|
22
|
+
- **Jerarquía visual:** tamaño, peso, espaciado, contraste, color, forma, iconos, movimiento y posición.
|
|
23
|
+
- **Jerarquía semántica:** orden del HTML, landmarks, headings, labels y foco.
|
|
24
|
+
|
|
25
|
+
La jerarquía visual y la semántica deben coincidir. Si la pantalla se ve como un flujo claro pero el HTML se lee desordenado, la interfaz falla para tecnologías asistivas y también aumenta el riesgo de errores de implementación.
|
|
26
|
+
|
|
27
|
+
### Feedback y disponibilidad
|
|
28
|
+
|
|
29
|
+
Usa feedback visual, textual y de interacción para mostrar qué está disponible:
|
|
30
|
+
|
|
31
|
+
- Labels visibles para controles y campos.
|
|
32
|
+
- Estados claros: activo, seleccionado, deshabilitado, error, éxito, pendiente.
|
|
33
|
+
- Iconos como apoyo, no como única explicación.
|
|
34
|
+
- Color con texto o forma adicional cuando comunica estado.
|
|
35
|
+
- Feedback de foco, hover, active y loading cuando corresponda.
|
|
36
|
+
|
|
37
|
+
### Reducir complejidad
|
|
38
|
+
|
|
39
|
+
Cada botón, imagen, icono, línea de texto, card y separador aumenta la complejidad de la UI. Antes de agregar algo, pregunta:
|
|
40
|
+
|
|
41
|
+
- ¿Ayuda a ubicar a la persona?
|
|
42
|
+
- ¿Aclara qué es importante?
|
|
43
|
+
- ¿Permite actuar o decidir?
|
|
44
|
+
- ¿Reduce riesgo, error o ansiedad?
|
|
45
|
+
|
|
46
|
+
Si no cumple ninguna, elimínalo.
|
|
47
|
+
|
|
48
|
+
### Niveles de importancia
|
|
49
|
+
|
|
50
|
+
Para expresar importancia relativa:
|
|
51
|
+
|
|
52
|
+
- Coloca acciones principales arriba o abajo de la pantalla, en zonas fáciles de encontrar.
|
|
53
|
+
- Mantén juntas las acciones relacionadas.
|
|
54
|
+
- Agrupa elementos de jerarquía similar.
|
|
55
|
+
- Evita que acciones secundarias compitan con la acción principal.
|
|
56
|
+
- Usa contraste, tamaño y espaciado para dirigir la mirada, no solo color.
|
|
57
|
+
|
|
58
|
+
### Landmarks y headings web
|
|
59
|
+
|
|
60
|
+
Las tecnologías asistivas transforman la pantalla en una experiencia lineal. Por eso el orden del DOM, landmarks y headings importan tanto como el layout visual.
|
|
61
|
+
|
|
62
|
+
Usa estos landmarks cuando correspondan:
|
|
63
|
+
|
|
64
|
+
- `nav`: listas o grupos de navegación. Si hay más de uno, usa `aria-label` para diferenciarlos.
|
|
65
|
+
- `search`: búsqueda principal o contextual.
|
|
66
|
+
- `main`: contenido principal de la página. Debe haber solo uno.
|
|
67
|
+
- `header`: cabecera o banner repetido de la página.
|
|
68
|
+
- `aside`: contenido complementario que puede entenderse por separado.
|
|
69
|
+
- `footer`: información final o legal del sitio.
|
|
70
|
+
- `section`: región importante dentro de `main`, etiquetada con heading claro.
|
|
71
|
+
- `form`: bloque que captura o envía información.
|
|
72
|
+
|
|
73
|
+
Reglas:
|
|
74
|
+
|
|
75
|
+
- Un solo `h1` para el propósito principal de la página.
|
|
76
|
+
- Usa `h2` para secciones principales y `h3` para subsecciones.
|
|
77
|
+
- No saltes niveles de heading solo para conseguir un tamaño visual.
|
|
78
|
+
- El orden del DOM debe seguir el orden de lectura esperado.
|
|
79
|
+
- En grillas, el orden debe leerse de izquierda a derecha y de arriba abajo.
|
|
80
|
+
- Si una región es importante, su nombre debe ser claro para navegación asistiva.
|
|
81
|
+
|
|
82
|
+
## Accesibilidad y carga cognitiva
|
|
83
|
+
|
|
84
|
+
La accesibilidad ayuda a todas las personas, no solo a quienes tienen una discapacidad permanente. Una persona puede estar con baja visión, usando lector de pantalla, con una lesión temporal, con poca concentración, en una pantalla pequeña o bajo presión.
|
|
85
|
+
|
|
86
|
+
Diseña la arquitectura de información considerando:
|
|
87
|
+
|
|
88
|
+
- Orden de lectura lógico, de arriba hacia abajo y de lo general a lo específico.
|
|
89
|
+
- Encabezados reales y jerárquicos, no texto grande usado como decoración.
|
|
90
|
+
- Agrupación con `fieldset`/`legend` o secciones claras cuando los campos pertenecen a una misma decisión.
|
|
91
|
+
- Acciones cercanas al contenido que afectan.
|
|
92
|
+
- Ayuda contextual en el punto de necesidad.
|
|
93
|
+
- Estados, errores y avisos expresados con texto además de color.
|
|
94
|
+
- Progressive disclosure que reduzca carga cognitiva sin esconder información crítica.
|
|
95
|
+
|
|
96
|
+
Honrar necesidades individuales significa permitir que la interfaz tolere distintas formas de uso: teclado, zoom, lectura pausada, revisión antes de enviar, cambios de preferencia y corrección sin perder trabajo.
|
|
97
|
+
|
|
98
|
+
## Evita eyebrows
|
|
99
|
+
|
|
100
|
+
Evita usar eyebrows como recurso por defecto. Un eyebrow es una etiqueta pequeña arriba del título, por ejemplo `PASO 1`, `NUEVA SOLICITUD`, `CLIENTE`, `LEGAL TECH`, `RESUMEN`.
|
|
101
|
+
|
|
102
|
+
En Lexy suelen agregar ruido porque:
|
|
103
|
+
|
|
104
|
+
- Repiten información que ya puede decir el título.
|
|
105
|
+
- Hacen que la pantalla se sienta más marketera que útil.
|
|
106
|
+
- Crean una capa visual extra antes del contenido real.
|
|
107
|
+
- Empujan a usar jerarquía decorativa en vez de jerarquía funcional.
|
|
108
|
+
|
|
109
|
+
### Qué usar en vez de eyebrows
|
|
110
|
+
|
|
111
|
+
Prefiere:
|
|
112
|
+
|
|
113
|
+
- Títulos informativos: `Completa tus datos para revisar tu caso`.
|
|
114
|
+
- Subtítulos con próximo paso: `Usaremos esta información para preparar la primera revisión`.
|
|
115
|
+
- Estados integrados al componente: badges, tags, status dots o texto de estado cerca del dato.
|
|
116
|
+
- Breadcrumbs o tabs cuando la navegación lo requiere.
|
|
117
|
+
- Stepper o progreso cuando el flujo realmente tiene pasos.
|
|
118
|
+
|
|
119
|
+
### Cuándo sí puede existir una etiqueta superior
|
|
120
|
+
|
|
121
|
+
Solo úsala si cumple una función real:
|
|
122
|
+
|
|
123
|
+
- Estado operativo: `En revisión`, `Pendiente`, `Vence hoy`.
|
|
124
|
+
- Ubicación en un flujo: `Paso 2 de 4`, si el paso ayuda a orientarse.
|
|
125
|
+
- Tipo de caso o categoría que cambia decisiones: `Deuda`, `Despido`, `Salud`.
|
|
126
|
+
|
|
127
|
+
Si la etiqueta no cambia comprensión, prioridad o acción, elimínala.
|
|
128
|
+
|
|
129
|
+
## Progressive disclosure
|
|
130
|
+
|
|
131
|
+
Progressive disclosure significa mostrar primero lo esencial y revelar detalles, excepciones o acciones secundarias cuando sean necesarias.
|
|
132
|
+
|
|
133
|
+
Úsalo para manejar carga visual sin esconder información importante.
|
|
134
|
+
|
|
135
|
+
### Orden recomendado
|
|
136
|
+
|
|
137
|
+
1. Qué está pasando o qué debe hacer la persona.
|
|
138
|
+
2. Por qué importa o qué pasará después.
|
|
139
|
+
3. Acción principal.
|
|
140
|
+
4. Campos o datos mínimos para avanzar.
|
|
141
|
+
5. Información secundaria agrupada.
|
|
142
|
+
6. Ayuda contextual, detalles legales, ejemplos o excepciones.
|
|
143
|
+
|
|
144
|
+
### Patrones útiles
|
|
145
|
+
|
|
146
|
+
- Pasos cortos para flujos largos.
|
|
147
|
+
- Secciones colapsables para detalles no críticos.
|
|
148
|
+
- Tabs cuando hay categorías pares que no se necesitan ver al mismo tiempo.
|
|
149
|
+
- Dialog o sheet para acciones puntuales que no deben romper contexto.
|
|
150
|
+
- Ayuda contextual cerca del campo, no en bloques largos al inicio.
|
|
151
|
+
- Resúmenes progresivos: mostrar lo capturado y permitir editar por sección.
|
|
152
|
+
|
|
153
|
+
### No ocultes
|
|
154
|
+
|
|
155
|
+
No uses progressive disclosure para esconder:
|
|
156
|
+
|
|
157
|
+
- Costos, consecuencias o riesgos.
|
|
158
|
+
- Errores que bloquean el avance.
|
|
159
|
+
- Datos necesarios para tomar una decisión.
|
|
160
|
+
- Próximos pasos después de enviar información.
|
|
161
|
+
- Plazos relevantes.
|
|
162
|
+
|
|
163
|
+
## Referencias visuales
|
|
164
|
+
|
|
165
|
+
Si el encargo incluye Figma, screenshot o un diseño anterior, primero extrae el patrón antes de proponer mejoras.
|
|
166
|
+
|
|
167
|
+
Observa y conserva:
|
|
168
|
+
|
|
169
|
+
- Tipo de pantalla: ficha, wizard, desk, tabla, formulario, carga de documentos, detalle.
|
|
170
|
+
- Navegación: stepper, tabs, sidebar, header, footer o ninguna.
|
|
171
|
+
- Densidad: compacta, media, espaciosa.
|
|
172
|
+
- Contenedores: continuidad del formulario, cards, tabla, paneles, sheets.
|
|
173
|
+
- Posición del CTA principal.
|
|
174
|
+
- Ayuda: inline, tooltip, floating help, banner.
|
|
175
|
+
- Ancho del contenido y alineación general.
|
|
176
|
+
|
|
177
|
+
No cambies el tipo de pantalla por iniciativa propia. Si la referencia es una ficha web con stepper y una sola etapa visible, no la conviertas en una página con hero, sidebar, cards, resumen sticky o todas las etapas abiertas.
|
|
178
|
+
|
|
179
|
+
## Patrón: ficha web cliente
|
|
180
|
+
|
|
181
|
+
Usa este patrón para formularios de antecedentes, intake legal, fichas de litigios o cualquier flujo donde una persona debe entregar datos para revisión.
|
|
182
|
+
|
|
183
|
+
Estructura recomendada:
|
|
184
|
+
|
|
185
|
+
1. Stepper superior cuando hay varias etapas.
|
|
186
|
+
2. Fondo calmo y continuo.
|
|
187
|
+
3. Contenido principal en una columna de ancho controlado.
|
|
188
|
+
4. Título de la etapa, no frase de marketing.
|
|
189
|
+
5. Texto breve de contexto.
|
|
190
|
+
6. Nota de obligatorios si aplica.
|
|
191
|
+
7. Campos agrupados por relación natural.
|
|
192
|
+
8. CTA principal al final del paso.
|
|
193
|
+
9. Ayuda flotante o contextual si reduce ansiedad.
|
|
194
|
+
|
|
195
|
+
Evita:
|
|
196
|
+
|
|
197
|
+
- Hero.
|
|
198
|
+
- Eyebrow.
|
|
199
|
+
- Card lateral de próximos pasos.
|
|
200
|
+
- Cards por cada sección del formulario.
|
|
201
|
+
- Iconos de sección como decoración.
|
|
202
|
+
- Mostrar deudas, bienes, sociedades y confirmación en la misma pantalla si el patrón tiene pasos.
|
|
203
|
+
|
|
204
|
+
## Cliente vs CRM
|
|
205
|
+
|
|
206
|
+
### Interfaces de cliente
|
|
207
|
+
|
|
208
|
+
Prioriza calma y claridad:
|
|
209
|
+
|
|
210
|
+
- Una idea principal por pantalla o sección.
|
|
211
|
+
- Copy corto que explique el beneficio y el siguiente paso.
|
|
212
|
+
- Menos campos visibles cuando el flujo pueda dividirse.
|
|
213
|
+
- Ayuda contextual que reduzca ansiedad.
|
|
214
|
+
- Confirmaciones claras después de enviar información.
|
|
215
|
+
|
|
216
|
+
Evita dashboards densos, muchas tarjetas compitiendo y bloques largos de explicación antes de la acción.
|
|
217
|
+
|
|
218
|
+
### Interfaces CRM o internas
|
|
219
|
+
|
|
220
|
+
Prioriza tarea y escaneo:
|
|
221
|
+
|
|
222
|
+
- La información que se consulta junta debe vivir junta.
|
|
223
|
+
- Muestra más densidad solo si está jerarquizada.
|
|
224
|
+
- Usa tablas, listas, filtros y estados visibles cuando aceleran el trabajo.
|
|
225
|
+
- Lleva acciones frecuentes cerca del dato o fila correspondiente.
|
|
226
|
+
- Oculta detalles secundarios, no acciones frecuentes.
|
|
227
|
+
|
|
228
|
+
Evita esconder contexto operativo en modales innecesarios o colapsar información que el abogado necesita comparar.
|
|
229
|
+
|
|
230
|
+
## Checklist UX antes de entregar
|
|
231
|
+
|
|
232
|
+
1. ¿El título dice la tarea, estado o beneficio real sin necesitar un eyebrow?
|
|
233
|
+
2. ¿La primera pantalla deja claro qué hacer y qué pasará después?
|
|
234
|
+
3. ¿Cada sección agrupa información que se usa junta?
|
|
235
|
+
4. ¿La información secundaria está disponible sin competir con lo principal?
|
|
236
|
+
5. ¿Hay algún bloque, tarjeta o etiqueta que solo decora? Elimínalo.
|
|
237
|
+
6. ¿Los campos aparecen en el orden en que la persona puede responderlos?
|
|
238
|
+
7. ¿Los errores y estados aparecen cerca de donde se corrigen?
|
|
239
|
+
8. ¿La acción principal es visible sin buscarla?
|
|
240
|
+
9. ¿La pantalla se puede escanear en diagonal?
|
|
241
|
+
10. ¿La composición reduce carga visual sin esconder consecuencias importantes?
|
|
242
|
+
11. ¿El orden del HTML coincide con el orden visual y de lectura?
|
|
243
|
+
12. ¿Hay landmarks y headings suficientes para navegar la página con lector de pantalla?
|