astra
alpha-0.1-background
alpha-0.1-dir-prefs
alpha-0.1-sec-dom
menubar-v4-safe
active-uix
morfo-runtime
morfo-driven-soma
semantuix
glm-5
main
sium-v1.0
${ noResults }
5 Commits (4ff9f0d27732bc98c490d927e646bbfbc7cd1056)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
4ff9f0d277 |
feat(motion): modo (c) — composición sema + motion (opt-out visual en eidos)
Un componente coordinado puede componer la cascada (motion) con sonido/háptico
(sema) en el mismo evento. El cabo: el meta-canal visual de sema estampa
data-event-* siempre que el evento tenga algún canal (channels != []), así que
channels:['sound'] arrastraba la firma visual genérica (present-rise), que pelea
con la cascada.
Solución EN MOTION (sema intacto): eidos neutraliza su PROPIA firma visual sobre
las superficies coordinadas. render-css.ts > renderCoordinatedPresetRules emite
`[data-animation-style='cascade-X'][data-event-phase='active'] { animation: none
!important }`. La firma usa `animation` -> muere; la cascada es `transition` ->
sobrevive. Aditivo: inerte hasta que un coordinado dispare un evento sema.
Ejemplo: Reveal pasa a modo (c) — open y close declaran channels:['sound']
(emerge suena, pitch 600) + expression:'family-default'; suena al abrir y al
cerrar a la vez que la cascada, sin pelea visual. Rail queda como modo (b) puro.
Layout de /temas/animations con events:{ sound: true }; la demo /reveal explica
el modo (c).
Honestidad: la versión inicial del RFC Apéndice B afirmaba que el modo (c)
componía "gratis" — falso (verificado en engine.ts/visual.ts). Corregido: el
Apéndice B documenta ahora el acoplamiento real y el opt-out en motion.
Tests: eidos/motion 25/25 (neutralización) · morfo 70/70 · morfo:vocabulary
limpio. Audio verificado en navegador (suena al abrir y cerrar).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
4 months ago |
|
|
e9fc493823 |
feat(motion): M5 naming type-safe + reversa fluida JS + demo de presets + docs de convivencia
Continuación del servicio de motion-coordination (sobre M1–M6 ya commiteado). - M5 — naming `animation` / `motion` SEPARADAS por rol (no unificar: tras M6 son sistemas distintos — `motion`=momento `--state`/`data-state`/eidos; `animation`=coordinado/`data-starting-ending-style`/soma). `animation` gana type-safety vía el registry augmentable `MotionCoordinatedPresets` + `CoordinatedPresetName` en `$motion` (la capa compartida, para que soma lo tipe sin importar eidos); eidos lo puebla con `cascade-slide/-fade/-scale` por declaration-merging — espejo de `EidosMotionPresets`. - Reversa fluida — JS handoff (§8.3). El motor expone `MotionHandle.peek()` (posición + velocidad por propiedad) y la reinyecta en la fase inversa vía `MotionContext.handoff`: el `spring` continúa desde la posición/velocidad actual en vez de reiniciar desde el `from`. Orquestado enteramente en el engine (`takeHandoff` — captura en `cancel`, consume en `run`, y cancela un run en vuelo cuando el caller no pre-cancela): cubre el camino island (overlay-spring) y elimina un apilamiento preexistente. La reversa de los coordinados (transiciones CSS) ya era fluida. - Demo `/temas/animations/compuesto` — un `Rail` de `<Button>`s que usa los presets coordinados PREDEFINIDOS de eidos (cero CSS de animación en la página); el selector cambia `animation` en vivo y cada Button compone su press (firma sema) con la cascada (motion coordinado). - Docs — RFC Apéndice B (convivencia de los tres sistemas visuales: firma `--event` / state-preset `--state` / coordinado, con diagrama + ejemplo Button-con-tokens), §5 reescrito (separadas por rol), §8.3/§15 al día, y cross-link del tercer eje desde eidos-motion.md. Tests: arts/motion 9/9 (handoff) + eidos/motion 24/24 (M5 paridad). svelte-check: 0 errores en mis archivos. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
4 months ago |
|
|
48b183672a |
feat(motion): servicio de coordinación de presencia (M1–M6)
Servicio de motion cross-layer: morfo declara superficies animables +
coordinación; soma coordina presencia/lifecycle; eidos posee lo visual;
arts/motion ejecuta por-nodo. RFC en eidos/MOTION_SERVICE_RFC.md.
- M1 — contrato MorfoPart.animation (types/schema/compile); children
como { enter?, exit? }.
- M2 — PresenceGroup (soma/layers/presence-group.ts), rune-free;
Presence.group descubre el coordinador por context.
- M3 — exit con retención de DOM (§8.1).
- M4 — interrupción/reversa (§8.3): token de generación + motion.cancel
en flip + toHandle resuelve finished en cancel (sin AbortError suelto).
- M5 — prop `animation` enrutada a las parts surface:true del morfo
compilado (routeAnimation); Panel/Item emiten data-animation-style.
- M6 — stagger auto-derivado del orden de registro (--motion-stagger-*,
inversa en exit) + presets coordinados en la librería de eidos
(MotionConfig.coordinated; cascade-slide/-fade/-scale) que reaccionan
a data-starting/ending-style, NO a data-state.
Helper Coordination (soma/layers/coordination.ts) extraído y validado
por DOS consumidores reales: Reveal (raíz virtual + Panel owner) y Rail
(raíz=owner, together). Demos en /temas/animations/{reveal,rail,
presence-group}.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
4 months ago |
|
|
ba74b6b416 |
feat(scroll-frames): adapt to framework + demo; add genie-class motion presets
ScrollFrames (eidos) rebuilt as a first-class component -- it was draft WIP using
bare native APIs.
- No native globals: window scroll/resize -> dom.listen + dom.observeResize;
requestAnimationFrame -> dom.raf (disposer); window.innerHeight / devicePixelRatio
-> dom.getWindow(node); new Image() -> dom.getDocument().createElement('img').
- lang="ts" + typed props (types.ts) + index.ts + data-attrs + recipe CSS (no
scoped <style>), registered in index.css.
- New `root` prop: drive progress from a scroll container instead of the window
(makes it embeddable + demoable).
- Morfo (morfo/components/scroll-frames.ts): scope ['eidos'], 4 parts, 0 events.
- Demo (uix/components/scroll-frames): locked 6-tab template, self-contained
generated frames (canvas -> data URL), scrollable stage via `root`. + README.
- Fixes the 12 errors the earlier draft pushed (branch back to the 1 pre-existing
grafito error).
Motion demo (temas/animations): "genie y cia" section -- 4 expressive JS presets
played via eidos.motion.enter: genie (waapi warp), flip-3d (rotateY), swing
(pendulum), elastic (overshoot spring).
Verify: npm run check -> 1 pre-existing error (grafito), 0 new; recipe-css +
component-api contracts clean (3 pre-existing words failures); morfo:check
scroll-frames PASS (1/108 fail = pre-existing words).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
4 months ago |
|
|
be6bd540aa |
feat(motion): motion engine as arts/motion service + F6 tokens + F7 typegen
Relocate the motion runtime out of eidos into a runtime art (src/arts/motion,
$motion), exposed as uix.motion and consumed by BOTH soma (Presence.motion ->
motion.run) and eidos (delegates + registers presets) -- dissolving the
soma->eidos coupling. Remove DialogProps.runMotion / eidos.motionRunner; the
bridge is now EngineMotion.run (reads data-animation-style). Delete the 4
relocated dead files (lib/motion/{types,runtime,runner,presets/js}.ts); the
preset DATA (presets/css.ts) stays in eidos. Regenerate generated/base.css.
F6 - token rigor (Carbon): tokenize the raw firma durations (slower/deliberate/
emphatic/sustained holds, escalating by announce intent severity), add
--motion-distance-xl (30px shared-axis), --motion-scale-through (0.92), the
emphasized easing, and productive/expressive sets ([data-motion-set=expressive]).
F7 - extensibility + typegen: app-extensible, type-safe preset-name registry
(EidosMotionPresets, mirroring SemaChannelSignatures); MotionPresetName =
keyof EidosMotionPresets | none | (string & {}).
Also sweeps other in-progress working-tree edits (web/routes/temas/grafito).
Verify: npm run check -> 1 pre-existing error (grafito), 0 new; motion 22/22,
active-uix 25/25, Presence 2/2, Dialog 3/3. Pre-existing words-track failures
unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
4 months ago |