From f2ed308d335e8bbf8a91baea1636a5361e3c84ed Mon Sep 17 00:00:00 2001 From: dev Date: Sun, 21 Jun 2026 00:18:07 +0200 Subject: [PATCH] =?UTF-8?q?docs(motion):=20record=20(b)=20step-2/3=20done?= =?UTF-8?q?=20+=20two=20implementation=20findings=20=E2=80=94=20RFC=20?= =?UTF-8?q?=C2=A7D.12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Marks (b) step 2 done (Badge pilot `0a6d112c` + `` wrapper `54268717`) and records the two findings from building them: - The helper only works on components WITHOUT their own `data-state`. `motionAttrs` / `` force `data-state="open"`, which would clobber a stateful component's own machine (Card selected/idle, checkbox checked). The state domain is a separate path (its `motion` would tie to its own transitions, but the presets key on open/closed specifically). - The `data-motion` collision. That attr belongs to reduced-motion: arts/prefs projects the `motion` pref (system|allow|reduce) onto ``, and render-css emits `[data-motion='reduce'] …` + the prefers-reduced-motion media query. So `` emits NO part marker — only the functional attrs. Confirms the content domain is reduced-motion-safe for free (the overrides key on data-state, which motionAttrs sets). Co-Authored-By: Claude Opus 4.8 (1M context) --- src/uix/eidos/MOTION_SERVICE_RFC.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/uix/eidos/MOTION_SERVICE_RFC.md b/src/uix/eidos/MOTION_SERVICE_RFC.md index 659935826..7d8706902 100644 --- a/src/uix/eidos/MOTION_SERVICE_RFC.md +++ b/src/uix/eidos/MOTION_SERVICE_RFC.md @@ -1507,8 +1507,23 @@ eje exige **estrenar el driver `spring`** con un primer preset JS — trabajo ap directa), NO de si el trigger CSS es `data-state`: el contenido es "siempre mostrado" (un `data-state` constante), sin máquina que lo conmute. Flash-free al spreadear en markup (attrs en la inserción, `backwards` fill). `'none'`/undefined → sin attrs (opt-out explícito). - - **Paso 2 (pendiente):** un wrapper `` (con `out:` retención → exit en desmontaje, + su morfo) y - cablear el prop `motion` en componentes reales. Loops (contenido infinito) = variante posterior. + - **Paso 2 — ✅ HECHO.** Cableado el prop `motion` en un componente real (piloto ``, + commit `0a6d112c`) + el wrapper `` (enter on-mount + exit on-unmount con retención `out:` estilo + ``, + su morfo `scope:['eidos']`, commit `54268717`). Dos vías para el diseñador: el prop en + un componente, o el wrapper para contenido crudo (in/out). Loops (contenido infinito) = variante posterior. + - **Hallazgo — el helper solo sirve en componentes SIN `data-state` propio.** `motionAttrs`/`` fuerzan + `data-state="open"` → clobbearían la máquina de estado de un componente que tenga la suya (Card + `selected`/`idle`, checkbox `checked`). La universalidad se parte: **contenido** (sin estado) = el helper; + **estado** (máquina propia) = OTRO camino — su `motion` ataría a SUS transiciones, pero los presets keyean en + `open`/`closed` específicamente, así que un `selected`/`idle` ni dispararía el preset. El state-domain es + trabajo aparte (desbloquea la universalidad para componentes con estado). + - **Hallazgo — colisión `data-motion`.** Ese attr es del sistema de **reduced-motion**: + `arts/prefs/dom-projection.ts` proyecta la pref `motion` (intent `system|allow|reduce` → effective + `allow|reduce`, vía `resolveMotion` + el OS) como `data-motion` en ``; `render-css.ts` + (`renderReducedMotionRules`) emite `[data-motion='reduce'] [data-animation-style][data-state]` + el + `@media (prefers-reduced-motion: reduce)`. Por eso `` **NO emite marcador de part** (un + `closest('[data-motion]')` del prefs lo matchearía) — solo los attrs funcionales. **Confirma:** el contenido + es reduced-motion-safe GRATIS (las overrides keyean en `data-state`, que `motionAttrs` ya pone). - **(c) El guard.** Tipos/lint: un componente con evento-que-posee-la-animación marca el prop como override; los demás, primario. - Cierra §6 (routing) en su parte vigente: el enrutado a superficie sigue siendo la idea (el dev nombra, el