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),
])