import { createMixin, css, on, type Handle } from '@remix-run/ui' import { spring } from '@remix-run/ui/animation' export function Press(handle: Handle) { let pressed = false function setPressed(nextPressed: boolean) { if (pressed === nextPressed) return pressed = nextPressed handle.update() } return () => (
{ setPressed(true) }), onPressUp(() => { setPressed(false) }), ]} /> ) } const onPressDown = createMixin void]>(() => (handler) => [ on('pointerdown', (event) => { if (event.isPrimary === false) return handler() }), on('keydown', (event) => { if (!(event.key === 'Enter' || event.key === ' ') || event.repeat) return event.preventDefault() handler() }), ]) const onPressUp = createMixin void]>(() => (handler) => [ on('pointerup', handler), on('pointerleave', handler), on('keyup', (event) => { if (!(event.key === 'Enter' || event.key === ' ')) return event.preventDefault() handler() }), on('blur', handler), ])