@ -6,21 +6,22 @@ Morfo is the single source of truth for a component's parts, data-attrs, ARIA co
**One file per component**, at `src/uix/morfo/components/{kebab}.ts`. No prose — that's the component's README. No props — those live in `types.ts` with JSDoc. Component-owned translations may live in `translations` when they are part of ARIA labels, live-region text, or internal functional labels. Everything else is the machine-readable contract.
## Handoff 2026-05-13
## Handoff 2026-05-14
Morfo debe seguir siendo declarativo: no instancia servicios y no conoce
`ActiveUix`. La frontera pendiente es fijar que campos de morfo son contrato
cross-layer real y cuales pertenecen a cada capa.
`ActiveUix`. Sus campos solo entran en el contrato cuando son superficie
cross-layer real; si un dato pertenece a una sola capa, vive en esa capa.
Puntos a cerrar antes de seguir:
Decisiones cerradas:
- `translations` solo para traducciones owned por el componente;
- textos comunes por referencia al catalogo comun, no duplicados en cada
morfo;
- registro de traducciones durante el registro del morfo o en un paso previo
claramente definido;
- si Sema/Eidos necesitan un dato compartido, debe pasar por morfo o por un
contrato publico, no por imports laterales entre capas.
- `translations` solo contiene texto owned por el componente.
- Textos comunes usan `v.commonRef(...)` o un idlangref absoluto; no se
duplican en cada morfo.
- `registerMorfo(morfo)` registra el contrato `data-*` y publica
`morfo.translations` en los `ActiveLangs` conectados.
- Si Soma, Sema y Eidos necesitan un dato compartido, pasa por morfo o por un
contrato publico; no por imports laterales entre capas.
- La regla 2-de-3 sigue vigente para extender morfo.