diff --git a/src/uix/eidos/MOTION_SERVICE_RFC.md b/src/uix/eidos/MOTION_SERVICE_RFC.md index 59b77d0e6..abecb7b20 100644 --- a/src/uix/eidos/MOTION_SERVICE_RFC.md +++ b/src/uix/eidos/MOTION_SERVICE_RFC.md @@ -21,11 +21,13 @@ > - **eidos** posee el _QUÉ visual_ y los _valores expresivos_ (keyframes, easing, stagger-ms); > - **arts/motion** ejecuta primitivas **por-nodo** (no orquesta, no gana jerarquía). > -> **Estado: M1–M4 implementados + incrementos M5/M6** (contrato morfo · `PresenceGroup` · exit con -> retención de DOM · interrupción/reversa §8.3 · enrutado de la prop `animation` a las superficies -> declaradas · stagger auto-derivado del orden de coordinación). Primer consumidor real: `Reveal` -> (§15). El resto de M5/M6–M9 pendiente — el roadmap (§15) define las fases. Todo es **aditivo y -> opt-in**: un componente sin la nueva declaración funciona exactamente como hoy. +> **Estado: M1–M4 + M5/M6 + M9 implementados** (contrato morfo · `PresenceGroup` · exit con +> retención de DOM · interrupción/reversa §8.3 · enrutado de la prop `animation` · stagger +> auto-derivado · **segunda coordinación: el modo children-DOM, `DomCascade`, cableado en el +> `dropdown-menu` real — Apéndice C**). Consumidores reales: `Reveal`/`Rail` (modo registered- +> `Presence`, §15) y `dropdown-menu` (modo children-DOM, Apéndice C). Pendiente: M7 (reduced-motion +> + SSR hardening) · M8 (text-effects) · F3 (submenús). Todo es **aditivo y opt-in**: un componente +> sin la nueva declaración funciona exactamente como hoy. ## Tabla de contenidos @@ -48,6 +50,7 @@ - [15. Roadmap de implementación por fases](#15-roadmap-de-implementación-por-fases) - [Apéndice A — decisiones resueltas vs abiertas](#apéndice-a--decisiones-resueltas-vs-abiertas) - [Apéndice B — Convivencia con la firma sema (los tres sistemas visuales)](#apéndice-b--convivencia-con-la-firma-sema-los-tres-sistemas-visuales) +- [Apéndice C — M9: el modo children-DOM (la segunda coordinación)](#apéndice-c--m9-el-modo-children-dom-la-segunda-coordinación) --- @@ -639,7 +642,11 @@ items (colección, stagger de salida = el prototipo §13). Los dos casos canóni (acotada, diferida).** - **M7 — Reduced-motion + SSR/hydration hardening** (§10). - **M8 — text-effects como variants de contenido** (§11). -- **M9 — Migración de los pilotos** (Dialog + lista/menú) y documentación de patrón. +- **M9 — Segunda coordinación: el modo children-DOM** — HECHO (F1/F1b/F1c/F2, commit `d797a0ce`). + El `DomCascade` propaga el lifecycle del owner sobre ítems DOM descubiertos por selector; + cableado en el `dropdown-menu` real (cascade de filas, exit-heavy con `pending`, + 4 fixes de + convivencia). Detalle completo en el **Apéndice C**. Pendiente F3: submenús (`sub-content` como + segundo owner). El otro piloto (Dialog) usa el modo registered-`Presence` y queda para después. > **Validación end-to-end — primer consumidor real (`Reveal`).** Antes de M5/M6 se cableó un > componente REAL como primer consumidor del contrato: `Reveal` (disclosure list — morfo @@ -830,6 +837,142 @@ Son **dos nodos** (el `Rail.Item` que se anima vs el `