Respuesta a la pulsación en Web
motion.press() añade feedback finito de puntero y teclado a una superficie HTML declarada. Usa el runtime Web, sin Vue, React ni un bucle permanente por frame. Esta API experimental se incluye en 0.1.0-rc.5; consulta la instalación. La integración Mavis continúa por separado.
Uso imperativo
import { createWebRuntime } from '@rafaelaugusto/jolt/web'
const motion = createWebRuntime(document) // después del montaje
motion.set(button, { scale: 1.1 })
const feedback = motion.press(button) // scale: 0.96, spring snappy
// La aplicación puede cambiar la escala mientras se mantiene el puntero o Space/Enter.
motion.animate(button, { scale: 1.2 }, 'snappy')
feedback.update({ loading: true }) // cancela la respuesta; no deshabilita la activación HTML
feedback.update({ loading: false }) // permite la próxima pulsación
// Al desmontar el componente o sustituir su superficie declarada:
feedback.dispose() // elimina solo su contribución y sus listeners inmediatamente
motion.release(button) // libera toda la superficie al terminar su ciclo de vida
motion.dispose() // descarta el contexto cuando ya no sea necesarioLos valores opcionales usan los canales numéricos del runtime: motion.press(button, { scale: 0.96, opacity: 0.8 }, { transition: 'snappy', disabled: false, loading: false }). Escala/opacidad se multiplican; traslación/rotación se suman. La respuesta vuelve a su contribución neutra, sin restaurar un valor antiguo de la aplicación.
| Estado | Escala visual |
|---|---|
| Aplicación en 1,1 | 1,1 |
| Pulsado con factor 0,96 | 1,056 |
| Aplicación cambia a 1,2 durante la pulsación | 1,152 |
| Liberado o respuesta descartada | 1,2 |
Se admite un binding por superficie. El espacio privado jolt:press: está reservado. pressed indica el estado de entrada; animation expone el último handle finito. Una interrupción resuelve finished con false; una finalización con true, una sola vez. El nuevo movimiento hereda posición y velocidad actuales. Un handle antiguo no recupera el control. El movimiento reducido sigue la política del runtime en vivo.
Entrada y ciclo de vida
El puntero primario funciona en cajas HTML transformables. Los elementos <button> nativos también reciben respuesta a Space/Enter. Jolt no sintetiza clics, cambia el foco, llama a preventDefault(), establece touch-action ni solicita captura del puntero. La activación, el envío de formularios y la repetición del teclado siguen siendo responsabilidad del navegador. Otros elementos reciben solo respuesta de puntero; la aplicación define su teclado y accesibilidad. Los controles interactivos anidados se ignoran.
Soltar fuera, cancelar/perder la captura, salir con el ratón, desplazar un ancestro, perder foco/ventana u ocultar la página cancela la respuesta. El navegador puede asumir el scroll. :disabled nativo (incluidos fieldsets), aria-disabled, aria-busy en el objetivo, un ancestro inert y update({ disabled, loading }) bloquean la respuesta y cancelan una pulsación. Solo controlan la respuesta visual: el componente implementa activación, foco y loading, normalmente mediante la propiedad nativa disabled.
Los objetivos deben estar montados. Los elementos retirados se liberan automáticamente, incluso en shadow roots; el descarte explícito es idempotente y funciona inmediatamente tras retirarlos. Cree otro binding para la superficie sustituta. Siga la política CSS: base 2D estática, sin animaciones/transiciones competidoras ni cambios de estilos de movimiento/clases mientras se controla la superficie. Una superficie interior dedicada puede separar estilo y movimiento.
Referencia nativa y verificación
El press nativo no cambió. Estas grabaciones existentes en inglés muestran su composición por layers; no muestran código Web ni una pantalla compartida de Mavis.
Ejecute npm run web:press:typecheck y npm run web:press:test. Chromium, Firefox y WebKit cubren entrada, composición y limpieza; el gesto real de scroll táctil usa solo CDP de Chromium. Consulte el informe de verificación y grabación.