Update continuation notes for Words

active-uix
dev 5 months ago
parent 940e94bb64
commit ee54029b1b

@ -22,6 +22,99 @@ Sesión de saneamiento + ampliación:
separados. Se confirma el patrón canónico headless mainstream (React Aria, separados. Se confirma el patrón canónico headless mainstream (React Aria,
Ark, Bits, Chakra v3, Radix Vue) — un solo `NumberField` con `formatOptions`. Ark, Bits, Chakra v3, Radix Vue) — un solo `NumberField` con `formatOptions`.
## Actualización final — Words cerrado para retomar mañana
Después del corte anterior se completó el componente **Words** hasta demo
funcional:
- `src/uix/morfo/components/words.ts` — contrato Morfo con 8 partes y 6
eventos.
- `src/uix/soma/components/words/` — motor JSON, selection, input pipeline,
commands, history, render HTML seguro, hidden input y tests.
- `src/uix/eidos/components/words/` — wrapper compound `<Words>` +
`<Words.Toolbar>`, `<Words.Content>`, `<Words.CommandButton>`, etc. y receta
CSS.
- `src/uix/sema/components/words.ts` — pack Sema para focus, commit, format,
history, clear e invalid input.
- `src/uix/langs/components/words.ts` — catálogo de strings para eliminar
warnings de fallback.
- `web/routes/uix/components/words/+page.svelte` — demo canónica 6 tabs con
stage permanente, snippets Soma/Eidos, Morfo/Sema/Recipe/A11y.
### Verificación específica de Words
Comandos ejecutados:
```bash
npx vitest run src/uix/soma/components/words/engine/engine.test.ts src/uix/soma/components/words/words-provider.svelte.test.ts
node --import tsx/esm scripts/component-audit.ts --only words
npx prettier --check src/uix/eidos/components/words src/uix/sema/components/words.ts src/uix/sema/components/words/README.md web/routes/uix/components/words src/uix/eidos/lib/recipes/base.ts src/uix/eidos/index.css web/routes/uix/+layout@.svelte src/uix/sema/components/index.ts src/uix/soma/components/words/README.md src/uix/words/README.md src/uix/langs/components/words.ts src/uix/langs/components/index.ts
npm run check 2>&1 | Select-String -Pattern 'words|Words'
```
Resultado:
- Tests Words: **23 passed**.
- Component audit `--only words`: **PASS**.
- Prettier: **PASS**.
- `npm run check` filtrado por `words`: sin errores ni warnings de Words.
- Visual en navegador: demo abierta en `http://localhost:5173/uix/components/words`.
Se verificó render inicial, presets `empty`/`long`, placeholder, escritura,
commit button, trace de Sema y tab Sema con 6 botones `Play`.
- Browser logs después de añadir `wordsLangs`: sin warnings nuevos.
Captura temporal local:
```text
tmp/words-demo-empty.png
```
### Problemas detectados y corregidos durante Words
- El wrapper Eidos de `Words.Content` pasaba un snippet vacío y bloqueaba el
render HTML por defecto de Soma. Corregido: solo se pasa snippet cuando el
consumidor aporta children.
- Mismo patrón corregido para `Placeholder`, `CommandButton` y `Status`, para
no pisar defaults Soma.
- Faltaba catálogo de traducciones `components.words.*`, lo que generaba
warnings de fallback en navegador. Corregido en `src/uix/langs/components`.
### Check global pendiente
`npm run check` global sigue fallando por deuda ajena a Words:
- `web/routes/uix/components/tree-grid/+page.svelte`: `bind:expanded` y
`bind:value` sobre props no bindables.
- `web/routes/uix/components/tree-view/+page.svelte`: `bind:expandedValue` y
`bind:selectedValue` sobre props no bindables.
- `src/uix/eidos/components/virtual-grid/virtual-grid.svelte`: tipo de
`style` permite objeto, pero el markup espera string.
- `src/uix/eidos/components/virtual-list/virtual-list.svelte`: mismo problema
de `style`.
- `src/uix/active-uix/active-uix.svelte.test.ts`: `announceMorfo` usa evento
`absent-clear` con `family: 'absent'` / `intent: 'absent'`, incompatible con
el vocabulario actual de Morfo.
- Además hay warnings no bloqueantes en `navigation-menu` (`href="#"`) y
`table` (`state_referenced_locally`).
## Punto exacto para continuar mañana
1. **Primero limpiar `npm run check` global**, empezando por los errores
anteriores. Es mejor cerrar eso antes de seguir creando componentes, porque
ahora Words ya pasa su auditoría aislada.
2. **Revisar visualmente Words en responsive y dark/light**: desktop ya fue
comprobado; falta una pasada móvil/estrecha, vertical toolbar y tabs
Morfo/Recipe/A11y con scroll largo.
3. **Si se sigue en Words V1.1**, el orden recomendado es:
- sincronizar cambios externos de `value` sin remount en la demo;
- import/export HTML seguro;
- Markdown import/export;
- BubbleMenu + LinkPopover como partes Soma reales;
- agrupar input/composition en batches de history menos ruidosos.
4. **Si se sigue con el ecosistema UIX**, no abrir más componentes hasta que
`component-audit --only words` siga en PASS y `npm run check` global esté
limpio.
## Decisiones tomadas hoy ## Decisiones tomadas hoy
### 1. Patrón canónico para number/currency/unit inputs ### 1. Patrón canónico para number/currency/unit inputs
@ -79,7 +172,7 @@ y range-calendar: solo `dateOrder` (la única ruta que ignoraba el prop).
RangeCalendar): RangeCalendar):
| Caso | Comportamiento | | Caso | Comportamiento |
|---|---| | ------------------------------- | ----------------------------------------------- |
| `<NumberField>` sin prop locale | Respeta `prefs.locale` del app (sin cambio) | | `<NumberField>` sin prop locale | Respeta `prefs.locale` del app (sin cambio) |
| `<NumberField locale="en-US">` | Bypassa `soma.nums` → formato en-US garantizado | | `<NumberField locale="en-US">` | Bypassa `soma.nums` → formato en-US garantizado |
@ -151,7 +244,7 @@ Catálogo actual (97 morfos) ya excede shadcn (~50), Radix (~30). Las únicas
ausencias notables vs mainstream: ausencias notables vs mainstream:
| Faltante | Equivalente parcial | Prioridad | | Faltante | Equivalente parcial | Prioridad |
|---|---|---| | --------------------------------- | ------------------------ | ------------------ |
| Skeleton (loader placeholder) | — | media | | Skeleton (loader placeholder) | — | media |
| Spinner (determinate loader) | progress indeterminate | media | | Spinner (determinate loader) | progress indeterminate | media |
| PasswordField | editable + custom toggle | baja | | PasswordField | editable + custom toggle | baja |
@ -239,7 +332,7 @@ Para mañana: arrancar `npm run dev` desde el árbol principal
el morfo de editable (mismo APG textbox); solo añade un eidos wrapper. el morfo de editable (mismo APG textbox); solo añade un eidos wrapper.
4. **Audit visual completo del demo de TextArea** — comprobar tabs Live / 4. **Audit visual completo del demo de TextArea** — comprobar tabs Live /
API / Morfo / Sema / Recipe / A11y, todas las combinaciones de variant API / Morfo / Sema / Recipe / A11y, todas las combinaciones de variant
+ color + size. - color + size.
## Patrones canon establecidos hoy ## Patrones canon establecidos hoy
@ -254,7 +347,7 @@ Para mañana: arrancar `npm run dev` desde el árbol principal
**Catálogo de listas dependientes de locale**: **Catálogo de listas dependientes de locale**:
| Lista | Fuente canónica | | Lista | Fuente canónica |
|---|---| | ----------- | ----------------------------------------------------------- |
| Locales | `LangBase` (`$libs/langs`) + tabla regional curada | | Locales | `LangBase` (`$libs/langs`) + tabla regional curada |
| Currencies | `REGION_CURRENCY` (`$libs/currency`) → `Set.values` | | Currencies | `REGION_CURRENCY` (`$libs/currency`) → `Set.values` |
| Units | `UNIT_DEFINITIONS` (`$format/units`) → group por `UnitKind` | | Units | `UNIT_DEFINITIONS` (`$format/units`) → group por `UnitKind` |
@ -264,14 +357,15 @@ Para mañana: arrancar `npm run dev` desde el árbol principal
Cualquier demo que enumere alguna de estas listas DEBE importarlas; nunca Cualquier demo que enumere alguna de estas listas DEBE importarlas; nunca
hardcodear. hardcodear.
**TextArea = referencia para nuevos form controls de una sola parte \*\*TextArea = referencia para nuevos form controls de una sola parte
+ count + Field integration.** Si construyes un componente con:
- count + Field integration.\*\* Si construyes un componente con:
- input/control único * input/control único
- value bindable * value bindable
- Field integration (OR-merge) * Field integration (OR-merge)
- counter o indicator opcional * counter o indicator opcional
- shortcut keys configurable * shortcut keys configurable
Clónalo. La estructura `provider + input + count` con sus 3 wrappers svelte Clónalo. La estructura `provider + input + count` con sus 3 wrappers svelte
es replicable. es replicable.

Loading…
Cancel
Save

Powered by TurnKey Linux.