|
|
5 months ago | |
|---|---|---|
| .. | ||
| references | 5 months ago | |
| README.md | 5 months ago | |
README.md
Words
Words es el componente rich-text/editor del ecosistema ActiveUIX.
Este directorio no sustituye a las capas UIX. Existe como carpeta de coordinacion porque el componente es mas complejo que un control normal: necesita un motor de documento, seleccion, comandos, history, serializacion, plugins y una superficie visual compuesta.
La implementacion publica debe seguir viviendo en las capas canonicas:
| Capa | Ruta prevista | Ownership |
|---|---|---|
| Morfo | src/uix/morfo/components/words.ts |
Contrato DOM, partes, estados, data attrs, ARIA, keyboard y eventos declarados. |
| Soma | src/uix/soma/components/words/ |
Motor headless, documento, seleccion, comandos, history, clipboard, normalizacion y plugins. |
| Sema | src/uix/sema/components/words.ts |
Proyeccion perceptiva de eventos semanticos de alto nivel. |
| Eidos | src/uix/eidos/components/words/ |
Wrapper visual compound, recipe CSS y partes visuales. |
| Demo | web/routes/uix/components/words/+page.svelte |
Demo auditada con Live, API, Morfo, Sema, Recipe y A11y. |
Decision de arquitectura
No se unifica fisicamente el componente en una sola carpeta runtime. La separacion Morfo/Soma/Sema/Eidos es parte del contrato de ActiveUIX y permite auditar que el motor no se mezcle con la piel visual.
Si una carpeta unica fuera necesaria para investigacion, debe limitarse a docs
o referencias como esta carpeta src/uix/words. El codigo ejecutable debe
entrar por las capas.
Regla de dependencias
Words no puede depender en runtime de Tiptap, ProseMirror, Lexical,
svelte-lexical, Slate ni paquetes equivalentes.
Las librerias externas se usan solo como referencia funcional y de arquitectura. El motor debe ser propio y apoyarse en capacidades nativas del navegador:
contenteditable- Selection API
- Input Events /
beforeinput - Clipboard API a traves de ActiveUIX cuando proceda
- Drag and drop nativo cuando entre en alcance
Referencia local copiada
El snapshot de referencia esta en:
tmp/lexical/packages/svelte-lexical
No contiene el motor completo de Meta Lexical; contiene la integracion Svelte,
plugins, nodos decoradores, toolbar y demos. El motor real aparece como
dependencia lexical@0.40.0 y multiples @lexical/*.
El dossier filtrado esta en:
src/uix/words/references/svelte-lexical-dossier.md
Alcance recomendado
Estado 2026-05-24: alcance V1 firmado, motor puro Soma, Provider
contenteditable, wrappers Eidos, receta visual, pack Sema y demo UIX de 6
tabs implementados.
V1
- Documento JSON canonico.
- Bloques: paragraph, heading, quote.
- Inline marks: bold, italic, underline, strike, code.
- Listas: unordered, ordered, checklist.
- Links con sanitizacion.
- Toolbar principal.
- Undo/redo.
- Clear formatting.
- Readonly y disabled.
- Placeholder.
- Logger ActiveUIX para errores de configuracion, parsing, comandos invalidos, nodos desconocidos y HTML inseguro.
V1.1
- Import/export HTML y Markdown como operaciones controladas, no como estado canonico.
- Bubble toolbar y link popover.
- Sincronizacion controlada de
valueexterno sin remount.
V2
- Imagenes y archivos via servicios ActiveApp/ActiveUIX.
- Code block.
- Tablas.
- Slash command.
- Drag handle.
- Find/replace.
- Comentarios o anotaciones.
- Colaboracion, solo como pack posterior y no en core.
Pre-flight de componente
Antes de implementar:
- Leer
web/routes/uix/lib/COMPONENT_AUDIT_GUIDE.md. - Leer
web/routes/uix/lib/DEMO_AUTHORING_GUIDE.md. - Leer
src/uix/eidos/components/README.md. - Comparar con
morfo-runtime/Air si existiera un equivalente. - Comparar contra referencias externas relevantes.
- Presentar alcance cerrado al usuario antes de escribir codigo runtime.
Audit inicial de referencias
Esta tabla es una base de decision, no cierre de implementacion.
| Referencia | Que aporta | Riesgo para ActiveUIX | Decision |
|---|---|---|---|
svelte-lexical |
Composer, ContentEditable, plugins, toolbar, nodos decoradores y demos Svelte. | Depende de Lexical y mezcla UI/motor en plugins concretos. | Usar como mapa, no como dependencia. |
| Lexical | Comandos, editor state, nodos, selection, history, decorators. | Runtime externo amplio; APIs internas no pertenecen a ActiveUIX. | Recrear ideas, no importar. |
| Edra/Tiptap | Cobertura UX rica y feature benchmark. | Tiptap/ProseMirror viola la regla de 0 dependencias runtime. | Benchmark visual/funcional solamente. |
| ProseMirror | Modelo transaccional y schema de documento. | Demasiado pesado y dependiente; no encaja como core. | Referencia conceptual para schema/history. |
| Slate | Modelo JSON y transforms. | Arquitectura React-first y runtime externo. | Referencia conceptual para operaciones. |
| WAI-ARIA/APG + HTML editing APIs | Roles, textbox multiline, keyboard, input/selection nativos. | El navegador tiene comportamiento desigual entre motores. | Fuente obligatoria para A11y y edge cases. |
Resultado a adjuntar
El resultado de analisis externo debe pegarse o guardarse como un fichero nuevo
en src/uix/words/references/.
Si el resultado es de ChatGPT, usar esta convencion:
src/uix/words/references/chatgpt-analysis-YYYY-MM-DD.md
Ese fichero debe contener:
- resumen ejecutivo;
- riesgos detectados;
- propuesta de motor;
- correcciones frente a
svelte-lexical; - decisiones para Morfo, Soma, Sema y Eidos;
- alcance V1/V2.
Auditorias externas incorporadas
| Fichero | Resultado |
|---|---|
references/analisis-kimi-1.md |
Bloqueo de Provider/Eidos hasta corregir paths profundos, rangos multi-nodo, listas e history. |
references/analisis-glm51-1.md |
Coincide con Kimi y concreta Morfo/Soma/Sema/Eidos, manteniendo el avance visual bloqueado. |
src/uix/soma/components/words/engine/engine.test.ts |
Barrera de motor puro: 19 tests de listas, rangos, Selection API, paste, IME y undo. |
src/uix/soma/components/words/words-provider.svelte.test.ts |
Barrera Soma Provider: 4 tests de attrs, contenteditable, selection/input, commands, hidden input y logger. |
src/uix/eidos/components/words/ |
Wrapper compound, receta CSS y README de auditoria Eidos. |
src/uix/sema/components/words.ts |
Pack Sema para foco, commit, formato, history, clear e input invalido. |
web/routes/uix/components/words/+page.svelte |
Demo UIX de 6 tabs con stage permanente, snippets y reproduccion Sema. |