@@ -57,15 +57,15 @@
@@ -200,6 +200,43 @@ function onRelease() {
})
}
+const activePointerIds = new Set()
+
+const onPointerDown = (event, direction) => {
+ if (event.pointerType === 'mouse' && event.button !== 0) return
+
+ event.preventDefault()
+ activePointerIds.add(event.pointerId)
+ event.currentTarget?.setPointerCapture?.(event.pointerId)
+ onPress(direction)
+}
+
+const onPointerEnd = (event) => {
+ event.preventDefault()
+ if (!activePointerIds.has(event.pointerId)) return
+
+ activePointerIds.delete(event.pointerId)
+ if (event.currentTarget?.hasPointerCapture?.(event.pointerId)) {
+ event.currentTarget.releasePointerCapture(event.pointerId)
+ }
+ onRelease()
+}
+
+const releaseActivePointers = () => {
+ if (!activePointerIds.size) return
+ activePointerIds.clear()
+ onRelease()
+}
+
+onMounted(() => {
+ window.addEventListener('blur', releaseActivePointers)
+})
+
+onBeforeUnmount(() => {
+ window.removeEventListener('blur', releaseActivePointers)
+ releaseActivePointers()
+})
+