You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/src/uix/words
dev 9c6375c96e
feat(eidos): TSC v2.2 (parts + composition) + universal theming coverage
5 months ago
..
references feat(eidos): TSC v2.2 (parts + composition) + universal theming coverage 5 months ago
README.md feat(eidos): TSC v2.2 (parts + composition) + universal theming coverage 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.
  • Checklist interactiva con marcador visual, click para marcar/desmarcar y Ctrl/Cmd+Enter sobre el item actual.
  • 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.
  • Toolbar Eidos por familias/submenus para comandos de texto, bloque, listas, alineacion, insercion, tablas, enlaces y herramientas.
  • Sincronizacion controlada de value externo sin remount.
  • Find/replace con match case, whole word, regex validada, find-in-selection, preserve case, replace-current y replace-all.
  • Slash commands con Words.SlashMenu: /query abre un menu anclado al caret con comandos de bloque/lista, navegacion por teclado y commit atomico del rango slash + comando.
  • Code block canonico con HTML <pre><code>, fences Markdown y comando code-block. El bloque preserva language normalizado en JSON/HTML/Markdown y Soma expone currentCodeLanguage/setCodeLanguage() para composiciones externas. Eidos incluye Words.CodeLanguagePicker como selector visual de lenguaje, y el render runtime aplica syntax highlighting ligero con data-words-code-token sin contaminar el HTML exportado. Enter crea saltos internos y Ctrl/Cmd+Enter sale a un parrafo posterior. Tab/Shift+Tab gestionan indentacion basica de linea.
  • Tablas canonicas: bloque table con table-row y table-cell, insercion por comando insert-table/slash table, comandos de fila/columna, navegacion por celdas con Tab/Shift+Tab, render DOM nativo, busqueda por paths de celda, formato inline dentro de celdas, header row/column, alineacion horizontal/vertical de celda, tonos de celda, striped rows, compact table y HTML con formato preservado. Markdown sigue usando pipe-table conservadora.
  • Atajos Markdown al escribir: el Provider intercepta el espacio tras marcadores iniciales para convertir #, ##, ###, >, listas, checklist y fences de code block en nodos canonicos sin pasar por toolbar. Tambien convierte marcadores inline al final del texto (**bold**, *italic*, _italic_, ~~strike~~, `code` y [label](url)) en marcas o links reales, y autolinkea URLs desnudas con protocolo permitido al escribir el espacio siguiente. Pegar una unica URL segura inserta un link, o aplica esa URL al texto seleccionado.
  • Enter en quote continua la cita cuando hay contenido y sale a un parrafo normal cuando la cita esta vacia.

V2

  • Imagenes y archivos via servicios ActiveApp/ActiveUIX.
  • Registro externo/async de comandos slash.
  • Tablas avanzadas: resizing y seleccion multi-celda.
  • Drag handle.
  • 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.
references/words-find-replace-regex-audit-2026-05-26.md Mini matriz para regex en find/replace; decide regex validada, preserve case, estado invalido y reemplazos con capturas.
references/words-slash-command-audit-2026-05-27.md Mini matriz para slash commands; decide trigger /query, listbox, commit atomico y comandos de bloque/lista V1.1.
references/words-table-audit-2026-05-27.md Mini matriz para tablas; decide nodo canonico, celdas inline, comandos de estructura, navegacion por Tab y HTML/Markdown simple.
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: attrs, contenteditable, selection/input, commands, tablas, 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.

Powered by TurnKey Linux.