rege 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +1 -1
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +1 -1
- package/dist/react.mjs.map +1 -1
- package/dist/{types-372314b9.d.ts → types-ca7f80e4.d.ts} +8 -8
- package/package.json +2 -2
- package/src/drag/index.ts +4 -3
- package/src/drag/react.ts +1 -1
- package/src/drag/types.ts +4 -4
- package/src/hover/index.ts +3 -2
- package/src/hover/react.ts +1 -1
- package/src/hover/types.ts +1 -1
- package/src/key/index.ts +4 -4
- package/src/key/react.ts +1 -1
- package/src/key/types.ts +1 -1
- package/src/pinch/index.ts +5 -3
- package/src/pinch/react.ts +1 -1
- package/src/pinch/types.ts +1 -1
- package/src/pinch/utils.ts +2 -1
- package/src/resize/index.ts +4 -3
- package/src/resize/react.ts +1 -1
- package/src/scroll/index.ts +4 -3
- package/src/scroll/react.ts +1 -1
- package/src/scroll/types.ts +3 -3
- package/src/scroll/utils.ts +2 -1
- package/src/wheel/index.ts +4 -3
- package/src/wheel/react.ts +1 -1
- package/src/wheel/types.ts +3 -3
- package/src/wheel/utils.ts +2 -1
package/dist/react.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/drag/react.ts","../src/drag/index.ts","../src/utils.ts","../src/hover/react.ts","../src/hover/index.ts","../src/key/react.ts","../src/key/index.ts","../src/pinch/react.ts","../src/pinch/index.ts","../src/pinch/utils.ts","../src/resize/index.ts","../src/resize/react.ts","../src/scroll/react.ts","../src/scroll/utils.ts","../src/scroll/index.ts","../src/wheel/react.ts","../src/wheel/utils.ts","../src/wheel/index.ts"],"sourcesContent":["import { useOnce, useMutable } from 'reev/src/react'\nimport { DragArg, DragState } from './types'\nimport { dragEvent } from './index'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\n\nexport const useDrag = <El extends Element = Element>(arg: DragArg<El>) => {\n if (isF(arg)) arg = { drag: arg }\n const memo = useMutable(arg)\n return useOnce(() => dragEvent<El>(memo as any))\n}\n\nexport default useDrag\n\nexport interface DragProps<El extends Element = Element> extends Partial<DragState<El>> {\n children(self: DragState<El>): ReactNode\n}\n\nexport const Drag = <El extends Element = Element>(props: DragProps<El>) => {\n const { children, ...other } = props\n return children(useDrag(other))\n}\n","import { EventState, event } from 'reev/src'\nimport { DragState } from './types'\nimport { vec2, addV, subV, cpV, getDevice, getClientVec2 } from '../utils'\n\nexport * from './types'\n\nexport const EVENT_FOR_DRAG = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n end: 'touchend',\n up: 'touchcancel',\n },\n pointer: {\n start: 'pointerdown',\n move: 'pointermove',\n end: 'pointerup',\n up: 'pointercancel',\n },\n mouse: {\n start: 'mousedown',\n move: 'mousemove',\n end: 'mouseup',\n up: 'mousecancel',\n },\n}\n\nexport const dragEvent = <El extends Element = Element>(state: Partial<DragState<El>> = {}) => {\n const initValues = () => {\n vec2(0, 0, self.value)\n vec2(0, 0, self._value)\n vec2(0, 0, self.delta)\n vec2(0, 0, self.movement)\n }\n\n const drag = () => {\n self.isDragStart = self.active && !self._active\n self.isDragging = self.active && self._active\n self.isDragEnd = !self.active && self._active\n }\n\n const dragStart = (e: Event) => {\n self.event = e\n self.active = true\n getClientVec2(e, self.device, self.value)\n if (self.target.setPointerCapture && 'pointerId' in e)\n // @ts-ignore\n self.target.setPointerCapture(e.pointerId)\n self.drag(self)\n }\n\n const dragging = (e: Event) => {\n self.event = e\n self._active = self.active\n cpV(self.value, self._value)\n getClientVec2(e, self.device, self.value)\n if (self._active) {\n subV(self.value, self._value, self.delta)\n addV(self.offset, self.delta, self.offset)\n addV(self.movement, self.delta, self.movement)\n }\n self.drag(self)\n }\n\n const dragEnd = (e: Event) => {\n self.event = e\n self.active = false\n initValues()\n if (self.target.releasePointerCapture && 'pointerId' in e)\n // @ts-ignore\n self.target.releasePointerCapture(e.pointerId)\n self.drag(self)\n }\n\n const mount = (target: El) => {\n self.target = target\n const { start, move, end, up } = EVENT_FOR_DRAG[self.device]\n target.addEventListener(start, self.dragStart)\n target.addEventListener(move, self.dragging)\n target.addEventListener(end, self.dragEnd)\n target.addEventListener(up, self.dragEnd)\n }\n\n const clean = () => {\n const target = self.target\n if (!target) return\n const { start, move, end, up } = EVENT_FOR_DRAG[self.device]\n target.removeEventListener(start, self.dragStart)\n target.removeEventListener(move, self.dragging)\n target.removeEventListener(end, self.dragEnd)\n target.removeEventListener(up, self.dragEnd)\n }\n\n const ref = (el: El) => {\n self(state as DragState<El>)\n if (el) {\n self.mount(el)\n } else self.clean()\n }\n\n const self = event({\n _active: false,\n active: false,\n device: getDevice(),\n _value: vec2(0, 0),\n value: vec2(0, 0),\n delta: vec2(0, 0),\n offset: vec2(0, 0),\n movement: vec2(0, 0),\n target: null,\n event: null,\n memo: {},\n isDragStart: false,\n isDragging: false,\n isDragEnd: false,\n drag,\n dragStart,\n dragging,\n dragEnd,\n mount,\n clean,\n ref,\n }) as EventState<DragState<El>>\n\n return self\n}\n","/**\n * CALCULATE VECTOR\n * REF: https://github.com/toji/gl-matrix/blob/master/src/vec2.js\n */\nexport const isF = (f: unknown): f is Function => typeof f === 'function'\n\nconst Vec = typeof Float32Array !== 'undefined' ? Float32Array : Array\n\nexport const vec2 = (x = 0, y = 0, out = new Vec(2)): Vec2 => {\n out[0] = x\n out[1] = y\n return out as Vec2\n}\n\nexport type Vec2 = [x: number, y: number]\n\nexport const addV = (a: Vec2, b: Vec2, out = vec2()): Vec2 => {\n out[0] = a[0] + b[0]\n out[1] = a[1] + b[1]\n return out\n}\n\nexport const subV = (a: Vec2, b: Vec2, out = vec2()): Vec2 => {\n out[0] = a[0] - b[0]\n out[1] = a[1] - b[1]\n return out\n}\n\nexport const cpV = (a: Vec2, out = vec2()): Vec2 => {\n out[0] = a[0]\n out[1] = a[1]\n return out\n}\n\n/**\n * SUPPORT\n */\nconst isBrowser = typeof window !== 'undefined' && !!window.document && !!window.document.createElement\n\nconst supportsTouchEvents = () => isBrowser && 'ontouchstart' in window\n\nconst isTouchScreen = () => supportsTouchEvents() || (isBrowser && window.navigator.maxTouchPoints > 1)\n\nconst supportsPointerEvents = () => isBrowser && 'onpointerdown' in window\n\nconst supportsPointerLock = () => isBrowser && 'exitPointerLock' in window.document\n\nconst supportsGestureEvents = () => {\n try {\n // @ts-ignore eslint-disable-next-line\n return 'constructor' in GestureEvent\n } catch (e) {\n return false\n }\n}\n\n// prettier-ignore\nexport const SUPPORT: Record<string, boolean> = { // Mac\n isBrowser, // true\n get gesture() {\n return (\n SUPPORT._gesture ??\n (SUPPORT._gesture = supportsGestureEvents())\n )\n },\n get touch() {\n return (\n SUPPORT._touch ??\n (SUPPORT._touch = supportsTouchEvents())\n )\n },\n get touchscreen() {\n return (\n SUPPORT._touchscreen ??\n (SUPPORT._touchscreen = isTouchScreen())\n )\n },\n get pointer() {\n return (\n SUPPORT._pointer ??\n (SUPPORT._pointer = supportsPointerEvents())\n )\n },\n get pointerLock() {\n return (\n SUPPORT._pointerLock ??\n (SUPPORT._pointerLock = supportsPointerLock())\n )\n },\n}\n\n/**\n * https://github.com/pmndrs/use-gesture/blob/main/packages/core/src/config/dragConfigResolver.ts\n */\nexport const getDevice = (lock = false) => {\n const pointerLock = lock && SUPPORT.pointerLock\n if (pointerLock) return 'mouse'\n if (SUPPORT.touch) return 'touch'\n if (SUPPORT.pointer) return 'pointer'\n return 'mouse'\n}\n\nexport const getClientVec2 = (e: any, device: unknown, out: Vec2): Vec2 => {\n if (device !== 'touch') {\n return vec2(e.clientX, e.clientY, out)\n }\n const [touch] = e.changedTouches\n return vec2(touch.clientX, touch.clientY, out)\n}\n","import { useOnce, useMutable } from 'reev/src/react'\nimport { hoverEvent } from '.'\nimport { HoverArg, HoverState } from './types'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\n\nexport const useHover = <El extends Element = Element>(arg?: HoverArg) => {\n if (isF(arg)) arg = { hover: arg }\n const memo = useMutable(arg)\n return useOnce(() => hoverEvent<El>(memo as any))\n}\n\nexport default useHover\n\nexport interface HoverProps<El extends Element = Element> extends Partial<HoverState<El>> {\n children: (state: HoverState<El>) => ReactNode\n}\n\nexport const Hover = (props: HoverProps) => {\n const { children, ...other } = props\n return children(useHover(other))\n}\n","import { HoverState } from './types'\nimport { EventState, event } from 'reev/src'\nimport { vec2, addV, subV, getDevice, getClientVec2, cpV } from '../utils'\n\nexport * from './types'\n\nexport const EVENT_FOR_HOVER = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n end: 'touchend',\n up: 'touchcancel',\n },\n pointer: {\n start: 'pointerenter',\n move: 'pointermove',\n end: 'pointerleave',\n up: 'pointercancel',\n },\n mouse: {\n start: 'mouseenter',\n move: 'mousemove',\n end: 'mouseleave',\n up: 'mousecancel',\n },\n}\n\nexport const hoverEvent = <El extends Element = Element>(state: Partial<HoverState<El>> = {}) => {\n const initValues = () => {\n vec2(0, 0, self.value)\n vec2(0, 0, self._value)\n vec2(0, 0, self.delta)\n vec2(0, 0, self.movement)\n }\n\n const hover = () => {\n self.isHoverStart = !self._active && self.active\n self.isHovering = self._active && self.active\n self.isHoverEnd = self._active && !self.active\n }\n\n const hoverStart = (e: Event) => {\n self.event = e\n self.active = true\n getClientVec2(e, self.device, self.value)\n self.hover(self)\n }\n\n const hovering = (e: Event) => {\n self.event = e\n self._active = self.active\n cpV(self.value, self._value)\n getClientVec2(e, self.device, self.value)\n if (self._active) {\n subV(self.value, self._value, self.delta)\n addV(self.offset, self.delta, self.offset)\n addV(self.movement, self.delta, self.movement)\n }\n self.hover(self)\n }\n\n const hoverEnd = (e: Event) => {\n self.event = e\n self._active = true\n self.active = false\n initValues()\n self.hover(self)\n }\n\n const mount = (target: El) => {\n self.target = target\n const { start, move, end, up } = EVENT_FOR_HOVER[self.device]\n target.addEventListener(start, self.hoverStart)\n target.addEventListener(move, self.hovering)\n target.addEventListener(end, self.hoverEnd)\n target.addEventListener(up, self.hoverEnd)\n }\n\n const clean = () => {\n const target = self.target\n if (!target) return\n const { start, move, end, up } = EVENT_FOR_HOVER[self.device]\n target.removeEventListener(start, self.hoverStart)\n target.removeEventListener(move, self.hovering)\n target.removeEventListener(end, self.hoverEnd)\n target.removeEventListener(up, self.hoverEnd)\n }\n\n const ref = (target: El | null) => {\n self(state as HoverState<El>)\n if (target) {\n self.mount(target)\n } else self.clean()\n }\n\n const self = event({\n _active: false,\n active: false,\n device: getDevice(),\n _value: vec2(0, 0),\n value: vec2(0, 0),\n delta: vec2(0, 0),\n offset: vec2(0, 0),\n movement: vec2(0, 0),\n target: null,\n event: null,\n memo: {},\n isHoverStart: false,\n isHovering: false,\n isHoverEnd: false,\n hover,\n hoverStart,\n hovering,\n hoverEnd,\n mount,\n clean,\n ref,\n }) as EventState<HoverState<El>>\n\n return self\n}\n","import { useMutable, useOnce } from 'reev/src/react'\nimport { keyEvent } from '.'\nimport { KeyArg, KeyState } from './types'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\n\nexport const useKey = <El extends Element = Element>(arg: KeyArg<El>) => {\n if (isF(arg)) arg = { key: arg }\n const memo = useMutable(arg)\n return useOnce(() => keyEvent<El>(memo as any))\n}\n\nexport interface KeyProps<El extends Element = Element> extends Partial<KeyState<El>> {\n children: (state: KeyState<El>) => ReactNode\n}\n\nexport const Key = <El extends Element = Element>(props: KeyProps<El>) => {\n const { children, ...other } = props\n return children(useKey(other))\n}\n","import { event } from 'reev/src'\nimport { KeyState } from './types'\n\nexport * from './types'\n\nexport const keyEvent = <El extends Element = Element>(state: Partial<KeyState<El>> = {}) => {\n const keydown = (e: KeyboardEvent) => {\n self.event = e\n self.pressedKey = e.key\n self.code = e.code\n self.key?.(self)\n }\n\n const mount = (el: El | Window) => {\n if (!el) el = el || window\n self.target = el\n\n // @ts-ignore set tabindex to make element focusable\n el.setAttribute('tabindex', '1') // @ts-ignore\n el.addEventListener('keydown', self.keydown)\n }\n\n const clean = () => {\n const el = self.target\n if (!el) return // @ts-ignore\n el.removeEventListener('keydown', self.keydown)\n }\n\n const ref = (el: Element | null) => {\n self(state)\n if (el) self.mount(el as El)\n else self.clean()\n }\n\n const self = event<KeyState<El>>({ keydown, mount, clean, ref })\n return self\n}\n","import { useOnce, useMutable } from 'reev/src/react'\nimport { pinchEvent } from '.'\nimport { PinchArg, PinchState } from './types'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\n\nexport const usePinch = <El extends Element = Element>(arg?: PinchArg) => {\n if (isF(arg)) arg = { pinch: arg }\n const memo = useMutable(arg)\n return useOnce(() => pinchEvent<El>(memo as any))\n}\n\nexport default usePinch\n\nexport interface PinchProps<El extends Element = Element> extends Partial<PinchState<El>> {\n children: (state: PinchState<El>) => ReactNode\n}\n\nexport const Pinch = (props: PinchProps) => {\n const { children, ...other } = props\n return children(usePinch(other))\n}\n","import { EventState, event } from 'reev/src'\nimport { PinchState } from './types'\nimport { vec2, addV, subV, cpV } from '../utils'\nimport { pinchDevice, touchDistanceAngle, pointerDistanceAngle, getCurrentTargetTouchIds, wheelPinchDelta, WebKitGestureEvent, DistanceAngle } from './utils'\n\nexport * from './types'\n\nexport const EVENT_FOR_PINCH = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n end: 'touchend',\n cancel: 'touchcancel',\n },\n pointer: {\n start: 'pointerdown',\n move: 'pointermove',\n end: 'pointerup',\n cancel: 'pointercancel',\n },\n gesture: {\n start: 'gesturestart',\n change: 'gesturechange',\n end: 'gestureend',\n },\n}\n\nexport const pinchEvent = <El extends Element = Element>(config: Partial<PinchState<El>> = {}) => {\n const initValues = () => {\n vec2(0, 0, self.value)\n vec2(0, 0, self._value)\n vec2(0, 0, self.delta)\n vec2(0, 0, self.movement)\n }\n\n const pinch = () => {\n self.isPinchStart = self.active && !self._active\n self.isPinching = self.active && self._active\n self.isPinchEnd = !self.active && self._active\n }\n\n // ===== Common pinch handlers =====\n\n const pinchStart = (e: Event, payload: DistanceAngle) => {\n self.event = e\n self.active = true\n\n // Store initial values [distance, angle]\n vec2(payload.distance, payload.angle, self.value)\n vec2(payload.distance, payload.angle, self.initial)\n cpV(payload.origin, self.origin)\n\n self.scale = 1\n self.turns = 0\n\n self.pinch(self)\n }\n\n const pinching = (e: Event, payload: DistanceAngle) => {\n if (!self.active) return\n\n self.event = e\n self._active = self.active\n\n // Store previous values\n cpV(self.value, self._value)\n\n // Current values [distance, angle]\n const prevAngle = self._value[1]\n let newAngle = payload.angle\n\n // Handle angle wrapping (for full rotations)\n const deltaAngle = newAngle - prevAngle\n if (Math.abs(deltaAngle) > 270) {\n self.turns += Math.sign(deltaAngle)\n newAngle -= 360 * Math.sign(deltaAngle)\n }\n\n vec2(payload.distance, newAngle, self.value)\n cpV(payload.origin, self.origin)\n\n // Calculate movement: [scaleRatio - 1, angleDelta]\n // scaleRatio = currentDistance / initialDistance\n const scaleRatio = self.value[0] / self.initial[0] - 1\n const angleDelta = self.value[1] - self.initial[1]\n vec2(scaleRatio, angleDelta, self.movement)\n\n // Calculate delta from previous frame\n subV(self.value, self._value, self.delta)\n // Convert distance delta to scale delta for consistency\n self.delta[0] = self._value[0] !== 0 ? self.value[0] / self._value[0] - 1 : 0\n\n // Update offset (cumulative)\n addV(self.offset, self.delta, self.offset)\n\n // Update scale\n self.scale = self.initial[0] !== 0 ? self.value[0] / self.initial[0] : 1\n\n self.pinch(self)\n }\n\n const pinchEnd = (e: Event) => {\n self.event = e\n self._active = true\n self.active = false\n initValues()\n self.pinch(self)\n }\n\n // ===== Touch event handlers =====\n\n const touchStart = (e: TouchEvent) => {\n const touchIds = getCurrentTargetTouchIds(e)\n\n if (self.active) {\n // Check if the touches that started the gesture are still present\n if (self._touchIds.every((id) => touchIds.includes(id))) return\n }\n\n if (touchIds.length < 2) return\n\n // Store the first two touch ids\n self._touchIds = touchIds.slice(0, 2)\n\n const payload = touchDistanceAngle(e, self._touchIds)\n if (!payload) return\n\n pinchStart(e, payload)\n }\n\n const touchMove = (e: TouchEvent) => {\n if (!self.active) return\n\n const payload = touchDistanceAngle(e, self._touchIds)\n if (!payload) return\n\n pinching(e, payload)\n }\n\n const touchEnd = (e: TouchEvent) => {\n if (!self.active) return\n\n // Check if any of our tracked touches ended\n const currentTouchIds = Array.from(e.touches).map((t) => t.identifier)\n if (self._touchIds.some((id) => !currentTouchIds.includes(id))) {\n pinchEnd(e)\n }\n }\n\n // ===== Pointer event handlers =====\n\n const pointerStart = (e: PointerEvent) => {\n // Only track left mouse button or touch\n if (e.buttons != null && e.buttons % 2 !== 1) return\n\n const _pointerEvents = self._pointerEvents\n\n if (self.active) {\n // Check if the pointers that started the gesture are still present\n if (Array.from(_pointerEvents.keys()).every((id) => self._pointerEvents.has(id))) return\n }\n\n // Capture the pointer\n try {\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n } catch {}\n\n if (_pointerEvents.size < 2) {\n _pointerEvents.set(e.pointerId, e)\n }\n\n if (_pointerEvents.size < 2) return\n\n const payload = pointerDistanceAngle(_pointerEvents)\n if (!payload) return\n\n pinchStart(e, payload)\n }\n\n const pointerMove = (e: PointerEvent) => {\n const _pointerEvents = self._pointerEvents\n\n if (_pointerEvents.has(e.pointerId)) {\n _pointerEvents.set(e.pointerId, e)\n }\n\n if (!self.active) return\n\n const payload = pointerDistanceAngle(_pointerEvents)\n if (!payload) return\n\n pinching(e, payload)\n }\n\n const pointerEnd = (e: PointerEvent) => {\n try {\n ;(e.target as HTMLElement).releasePointerCapture(e.pointerId)\n } catch {}\n\n const _pointerEvents = self._pointerEvents\n\n if (_pointerEvents.has(e.pointerId)) {\n _pointerEvents.delete(e.pointerId)\n }\n\n if (!self.active) return\n\n if (_pointerEvents.size < 2) {\n pinchEnd(e)\n }\n }\n\n // ===== Safari Gesture event handlers =====\n\n const gestureStart = (e: Event) => {\n const ge = e as WebKitGestureEvent\n if (e.cancelable) e.preventDefault()\n\n if (self.active) return\n\n self.event = e\n self.active = true\n\n // GestureEvent provides scale and rotation directly\n vec2(ge.scale, ge.rotation, self.value)\n vec2(ge.scale, ge.rotation, self.initial)\n vec2(ge.clientX, ge.clientY, self.origin)\n\n self.scale = 1\n self.turns = 0\n\n self.pinch(self)\n }\n\n const gestureChange = (e: Event) => {\n const ge = e as WebKitGestureEvent\n if (e.cancelable) e.preventDefault()\n\n if (!self.active) return\n\n self.event = e\n self._active = self.active\n\n cpV(self.value, self._value)\n\n // GestureEvent gives us scale and rotation directly\n vec2(ge.scale, ge.rotation, self.value)\n vec2(ge.clientX, ge.clientY, self.origin)\n\n // movement = [scale - 1, rotation]\n vec2(ge.scale - 1, ge.rotation, self.movement)\n\n // delta from previous\n subV(self.value, self._value, self.delta)\n\n // Update offset\n addV(self.offset, self.delta, self.offset)\n\n self.scale = ge.scale\n\n self.pinch(self)\n }\n\n const gestureEnd = (e: Event) => {\n if (!self.active) return\n pinchEnd(e)\n }\n\n // ===== Wheel event handlers (trackpad pinch fallback) =====\n\n const wheelStart = (e: WheelEvent) => {\n self.event = e\n self.active = true\n\n // For wheel, we track scale change as value[0], rotation as value[1] (always 0)\n vec2(1, 0, self.value)\n vec2(1, 0, self.initial)\n vec2(e.clientX, e.clientY, self.origin)\n\n self.scale = 1\n self.turns = 0\n\n // Apply the initial wheel delta\n const scaleDelta = wheelPinchDelta(e, self.offset[0] + 1)\n self.delta[0] = scaleDelta\n self.delta[1] = 0\n self.value[0] += scaleDelta\n addV(self.offset, self.delta, self.offset)\n vec2(self.value[0] - 1, 0, self.movement)\n\n self.scale = self.value[0]\n\n self.pinch(self)\n }\n\n const wheeling = (e: WheelEvent) => {\n // Set up timeout to detect wheel end\n const id = setTimeout(() => wheelEnd(e), self.timeout)\n self.clearTimeout()\n self.clearTimeout = () => clearTimeout(id)\n\n if (!self.active) {\n wheelStart(e)\n return\n }\n\n self.event = e\n self._active = self.active\n\n cpV(self.value, self._value)\n vec2(e.clientX, e.clientY, self.origin)\n\n // Calculate scale delta from wheel\n const scaleDelta = wheelPinchDelta(e, self.offset[0] + 1)\n self.delta[0] = scaleDelta\n self.delta[1] = 0\n\n self.value[0] += scaleDelta\n addV(self.offset, self.delta, self.offset)\n vec2(self.value[0] - 1, 0, self.movement)\n\n self.scale = self.value[0]\n\n self.pinch(self)\n }\n\n const wheelEnd = (e: Event) => {\n if (!self.active) return\n self.event = e\n self._active = true\n self.active = false\n initValues()\n self.pinch(self)\n }\n\n // ===== Lifecycle methods =====\n\n const mount = (target: El) => {\n self.target = target\n const device = self.device\n\n if (device === 'wheel') {\n target.addEventListener('wheel', wheeling as EventListener, { passive: false })\n } else if (device === 'gesture') {\n const events = EVENT_FOR_PINCH.gesture\n target.addEventListener(events.start, gestureStart)\n target.addEventListener(events.change, gestureChange)\n target.addEventListener(events.end, gestureEnd)\n } else if (device === 'touch') {\n const events = EVENT_FOR_PINCH.touch\n target.addEventListener(events.start, touchStart as EventListener)\n target.addEventListener(events.move, touchMove as EventListener)\n target.addEventListener(events.end, touchEnd as EventListener)\n target.addEventListener(events.cancel, touchEnd as EventListener)\n } else if (device === 'pointer') {\n const events = EVENT_FOR_PINCH.pointer\n target.addEventListener(events.start, pointerStart as EventListener)\n target.addEventListener(events.move, pointerMove as EventListener)\n target.addEventListener(events.end, pointerEnd as EventListener)\n target.addEventListener(events.cancel, pointerEnd as EventListener)\n }\n }\n\n const clean = () => {\n const target = self.target\n if (!target) return\n const device = self.device\n\n if (device === 'wheel') {\n target.removeEventListener('wheel', wheeling as EventListener)\n } else if (device === 'gesture') {\n const events = EVENT_FOR_PINCH.gesture\n target.removeEventListener(events.start, gestureStart)\n target.removeEventListener(events.change, gestureChange)\n target.removeEventListener(events.end, gestureEnd)\n } else if (device === 'touch') {\n const events = EVENT_FOR_PINCH.touch\n target.removeEventListener(events.start, touchStart as EventListener)\n target.removeEventListener(events.move, touchMove as EventListener)\n target.removeEventListener(events.end, touchEnd as EventListener)\n target.removeEventListener(events.cancel, touchEnd as EventListener)\n } else if (device === 'pointer') {\n const events = EVENT_FOR_PINCH.pointer\n target.removeEventListener(events.start, pointerStart as EventListener)\n target.removeEventListener(events.move, pointerMove as EventListener)\n target.removeEventListener(events.end, pointerEnd as EventListener)\n target.removeEventListener(events.cancel, pointerEnd as EventListener)\n }\n }\n\n const ref = (el: El | null) => {\n self(config as PinchState<El>)\n if (el) {\n self.mount(el)\n } else self.clean()\n }\n\n const self = event({\n _active: false,\n active: false,\n device: pinchDevice(),\n _value: vec2(0, 0),\n value: vec2(0, 0),\n delta: vec2(0, 0),\n offset: vec2(0, 0),\n movement: vec2(0, 0),\n initial: vec2(0, 0),\n origin: vec2(0, 0),\n _touchIds: [] as number[],\n _pointerEvents: new Map<number, PointerEvent>(),\n scale: 1,\n turns: 0,\n target: null as unknown as El,\n event: null as unknown as Event,\n memo: {},\n timeout: 100,\n clearTimeout: () => {},\n isPinchStart: false,\n isPinching: false,\n isPinchEnd: false,\n pinch,\n pinchStart: (e: Event) => {\n // This is called externally, need to detect device and delegate\n if (self.device === 'touch') touchStart(e as TouchEvent)\n else if (self.device === 'pointer') pointerStart(e as PointerEvent)\n else if (self.device === 'gesture') gestureStart(e)\n else if (self.device === 'wheel') wheeling(e as WheelEvent)\n },\n pinching: (e: Event) => {\n if (self.device === 'touch') touchMove(e as TouchEvent)\n else if (self.device === 'pointer') pointerMove(e as PointerEvent)\n else if (self.device === 'gesture') gestureChange(e)\n else if (self.device === 'wheel') wheeling(e as WheelEvent)\n },\n pinchEnd: (e: Event) => {\n if (self.device === 'touch') touchEnd(e as TouchEvent)\n else if (self.device === 'pointer') pointerEnd(e as PointerEvent)\n else if (self.device === 'gesture') gestureEnd(e)\n else if (self.device === 'wheel') wheelEnd(e)\n },\n mount,\n clean,\n ref,\n }) as EventState<PinchState<El>>\n\n return self\n}\n","import { SUPPORT, Vec2, vec2 } from '../utils'\n\n/**\n * ref:\n * https://github.com/pmndrs/use-gesture/blob/main/packages/core/src/config/pinchConfigResolver.ts\n */\nexport const pinchDevice = (touch = false) => {\n if (!SUPPORT.touch && SUPPORT.gesture) return 'gesture'\n if (SUPPORT.touch && touch) return 'touch'\n if (SUPPORT.touchscreen) {\n if (SUPPORT.pointer) return 'pointer'\n if (SUPPORT.touch) return 'touch'\n }\n return 'wheel'\n}\n\n/**\n * Wheel delta normalization constants\n * ref: https://github.com/facebookarchive/fixed-data-table/blob/master/src/vendor_upstream/dom/normalizeWheel.js\n */\nconst LINE_HEIGHT = 40\nconst PAGE_HEIGHT = 800\nconst PINCH_WHEEL_RATIO = 100\n\n/**\n * Calculate distance and angle between two touch/pointer points\n * ref: https://github.com/pmndrs/use-gesture/blob/main/packages/core/src/utils/events.ts\n */\nexport interface DistanceAngle {\n distance: number\n angle: number\n origin: Vec2\n}\n\nexport const distanceAngle = (p1: Touch | PointerEvent, p2: Touch | PointerEvent): DistanceAngle | null => {\n try {\n const dx = p2.clientX - p1.clientX\n const dy = p2.clientY - p1.clientY\n const cx = (p2.clientX + p1.clientX) / 2\n const cy = (p2.clientY + p1.clientY) / 2\n\n const distance = Math.hypot(dx, dy)\n // Convert to degrees, negative to match natural gesture direction\n const angle = -(Math.atan2(dx, dy) * 180) / Math.PI\n const origin = vec2(cx, cy)\n\n return { distance, angle, origin }\n } catch {\n return null\n }\n}\n\n/**\n * Get touch distance and angle from touch event using stored touch ids\n */\nexport const touchDistanceAngle = (event: TouchEvent, ids: number[]): DistanceAngle | null => {\n const touches = Array.from(event.touches).filter((touch) => ids.includes(touch.identifier))\n if (touches.length < 2) return null\n return distanceAngle(touches[0], touches[1])\n}\n\n/**\n * Get pointer distance and angle from pointer events map\n */\nexport const pointerDistanceAngle = (pointerEvents: Map<number, PointerEvent>): DistanceAngle | null => {\n const pointers = Array.from(pointerEvents.values())\n if (pointers.length < 2) return null\n return distanceAngle(pointers[0], pointers[1])\n}\n\n/**\n * Get all touch identifiers for the current target\n */\nexport const getCurrentTargetTouchIds = (event: TouchEvent): number[] => {\n return Array.from(event.touches)\n .filter((touch) => touch.target === event.currentTarget || (event.currentTarget as Node)?.contains?.(touch.target as Node))\n .map((touch) => touch.identifier)\n}\n\n/**\n * Normalize wheel values for pinch gesture (trackpad pinch)\n * Returns scale delta based on wheel deltaY\n */\nexport const wheelPinchDelta = (event: WheelEvent, currentScale: number): number => {\n let { deltaY, deltaMode } = event\n\n // Normalize wheel values\n if (deltaMode === 1) {\n deltaY *= LINE_HEIGHT\n } else if (deltaMode === 2) {\n deltaY *= PAGE_HEIGHT\n }\n\n // Convert to scale delta (negative because wheel down = zoom out)\n return (-deltaY / PINCH_WHEEL_RATIO) * currentScale\n}\n\n/**\n * WebKit gesture event type (Safari)\n */\nexport interface WebKitGestureEvent extends UIEvent {\n scale: number\n rotation: number\n clientX: number\n clientY: number\n}\n","import { EventState, event } from 'reev/src'\nimport { ResizeState } from './types'\n\nexport * from './types'\n\nconst DELAY = 100\n\ntype ResizeEventCallback = (entry: ResizeObserverEntry) => () => void\n\nexport const resizeEvent = <El extends Element = Element>(state: ResizeState) => {\n const on: ResizeEventCallback = (entry) => () => {\n // ???\n }\n\n const mount = (target: El) => {\n const register = (entry: ResizeObserverEntry) => {\n if (entry.target !== target) return\n const id = setTimeout(on(entry), DELAY)\n self.listener()\n self.listener = () => clearTimeout(id)\n }\n\n self.observer = new ResizeObserver((entries) => {\n entries.forEach(register)\n })\n\n self.observer.observe(target)\n }\n\n const clean = () => {}\n\n const ref = (el: El) => {\n self(state)\n if (el) {\n self.mount(el)\n } else self.clean(null)\n }\n\n const self = event({\n observer: null,\n listener: () => {},\n resize: () => {},\n mount,\n clean,\n ref,\n }) as EventState<ResizeState<El>>\n\n return self\n}\n","import { resizeEvent } from '.'\nimport { useMutable, useOnce } from 'reev/src/react'\nimport { ResizeArg, ResizeState } from './types'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\n\nexport const useResize = (arg: ResizeArg) => {\n if (isF(arg)) arg = { resize: arg }\n const memo = useMutable(arg)\n return useOnce(() => resizeEvent(memo as any))\n}\n\nexport default useResize\n\nexport interface ResizeProps<El extends Element = Element> extends Partial<ResizeState<El>> {\n children: (state: ResizeState<El>) => ReactNode\n}\n\nexport const Resize = <El extends Element = Element>(props: ResizeProps<El>) => {\n const { children, ...other } = props\n return children(useResize(other))\n}\n","import { useOnce, useMutable } from 'reev/src/react'\nimport { ScrollConfig, ScrollState } from './types'\nimport { scrollEvent } from './index'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\n\nexport const useScroll = <El extends Element = Element>(config: ScrollConfig) => {\n if (isF(config)) config = { scroll: config }\n const memo = useMutable(config)\n return useOnce(() => scrollEvent<El>(memo as any))\n}\n\nexport default useScroll\n\nexport interface ScrollProps<El extends Element = Element> extends Partial<ScrollState<El>> {\n children: (state: ScrollState<El>) => ReactNode\n}\n\nexport const Scroll = <El extends Element = Element>(props: ScrollProps<El>) => {\n const { children, ...other } = props\n return children(useScroll(other))\n}\n","import { vec2, Vec2 } from '../utils'\n\nexport const scrollValues = (e: any, out = vec2()): Vec2 => {\n const { scrollX: x, scrollLeft: xx } = e.currentTarget\n const { scrollY: y, scrollTop: yy } = e.currentTarget\n return vec2(x ?? xx ?? 0, y ?? yy ?? 0, out)\n}\n","import { vec2, addV, cpV, subV } from '../utils'\nimport { scrollValues } from './utils'\nimport { EventState, event } from 'reev/src'\nimport { ScrollState } from './types'\n\nexport * from './types'\n\nexport const scrollEvent = <El extends Element = Element>(config?: ScrollState) => {\n const initValues = () => {\n vec2(0, 0, self.value)\n vec2(0, 0, self._value)\n vec2(0, 0, self.delta)\n vec2(0, 0, self.movement)\n }\n\n const scroll = () => {\n self.isScrollStart = self.active && !self._active\n self.isScrolling = self.active && self._active\n self.isScrollEnd = !self.active && self._active\n }\n\n const scrollStart = (e: Event) => {\n self.event = e\n self.active = true\n scrollValues(e, self.value)\n self.scroll(self)\n }\n\n const scrolling = (e: Event) => {\n // register wheelEnd\n const id = setTimeout(() => self.scrollEnd(e), self.timeout)\n self.clearTimeout()\n self.clearTimeout = () => clearTimeout(id)\n\n if (!self.active) {\n self.scrollStart(e)\n return\n }\n\n self.event = e\n self._active = self.active\n cpV(self.value, self._value)\n scrollValues(e, self.value)\n if (self._active) {\n subV(self.value, self._value, self.delta)\n addV(self.offset, self.delta, self.offset)\n addV(self.movement, self.delta, self.movement)\n }\n self.scroll(self)\n }\n\n const scrollEnd = (e: Event) => {\n self.event = e\n self.active = false\n initValues()\n self.scroll(self)\n }\n\n const mount = (target: El) => {\n self.target = target // @TODO set event to target\n window.addEventListener('scroll', self.scrolling)\n }\n\n const clean = () => {\n window.removeEventListener('scroll', self.scrolling)\n }\n\n const ref = (el: Element | null) => {\n self(config as ScrollState<El>)\n if (el) {\n self.mount(el)\n } else self.clean(null)\n }\n\n const self = event({\n active: false,\n _active: false,\n _value: vec2(0, 0),\n value: vec2(0, 0),\n delta: vec2(0, 0),\n offset: vec2(0, 0),\n movement: vec2(0, 0),\n target: null,\n event: null,\n memo: {},\n timeout: 100,\n clearTimeout: () => {},\n isScrollStart: false,\n isScrolling: false,\n isScrollEnd: false,\n scroll,\n scrollStart,\n scrolling,\n scrollEnd,\n mount,\n clean,\n ref,\n }) as EventState<ScrollState<El>>\n\n return self\n}\n","import { useOnce, useMutable } from 'reev/src/react'\nimport { WheelConfig, WheelState } from './types'\nimport { wheelEvent } from './index'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\n\nexport const useWheel = <El extends Element = Element>(config: WheelConfig) => {\n if (isF(config)) config = { wheel: config }\n const memo = useMutable(config)\n return useOnce(() => wheelEvent<El>(memo as any))\n}\n\nexport default useWheel\n\nexport interface WheelProps<El extends Element = Element> extends Partial<WheelState<El>> {\n children: (state: WheelState<El>) => ReactNode\n}\n\nexport const Wheel = <El extends Element = Element>(props: WheelProps<El>) => {\n const { children, ...other } = props\n return children(useWheel(other))\n}\n","import { vec2, Vec2 } from '../utils'\n\nconst LINE_HEIGHT = 40\n\nconst PAGE_HEIGHT = 800\n\nexport const wheelValues = (event: Event, out: Vec2): Vec2 => {\n if (!(event instanceof WheelEvent)) return vec2(0, 0, out)\n\n let { deltaX, deltaY, deltaMode } = event\n if (deltaMode === 1) {\n deltaX *= LINE_HEIGHT\n deltaY *= LINE_HEIGHT\n } else if (deltaMode === 2) {\n deltaX *= PAGE_HEIGHT\n deltaY *= PAGE_HEIGHT\n }\n return vec2(deltaX, deltaY, out)\n}\n","import { vec2, addV, cpV } from '../utils'\nimport { wheelValues } from './utils'\nimport { EventState, event } from 'reev/src'\nimport { WheelState } from './types'\n\nexport * from './types'\n\nexport const wheelEvent = <El extends Element = Element>(config?: WheelState) => {\n const initValues = () => {\n vec2(0, 0, self.value)\n vec2(0, 0, self._value)\n vec2(0, 0, self.delta)\n vec2(0, 0, self.movement)\n }\n\n const wheel = () => {\n self.isWheelStart = self.active && !self._active\n self.isWheeling = self.active && self._active\n self.isWheelEnd = !self.active && self._active\n }\n const wheelStart = (e: WheelEvent) => {\n self.event = e\n self.active = true\n wheelValues(e, self.delta)\n self.wheel(self)\n }\n\n const wheeling = (e: Event) => {\n // register wheelEnd\n const id = setTimeout(() => self.wheelEnd(e), self.timeout)\n self.clearTimeout()\n self.clearTimeout = () => clearTimeout(id)\n self.event = e\n if (!self.active) {\n self.wheelStart(e)\n return\n }\n\n self._active = self.active\n cpV(self.value, self._value)\n wheelValues(e, self.delta)\n addV(self.offset, self.delta, self.offset)\n addV(self.movement, self.delta, self.movement)\n self.wheel(self)\n }\n\n const wheelEnd = (e: Event) => {\n self.event = e\n self.active = false\n initValues()\n self.wheel(self)\n }\n\n const mount = (target: El) => {\n self.target = target\n target.addEventListener('wheel', self.wheeling)\n }\n\n const clean = () => {\n const target = self.target\n if (!target) return\n target.removeEventListener('wheel', self.wheeling)\n }\n\n const ref = (el: Element | null) => {\n self(config as WheelState<El>)\n if (el) {\n self.mount(el)\n } else self.clean(null)\n }\n\n const self = event({\n active: false,\n _active: false,\n _value: vec2(0, 0),\n value: vec2(0, 0),\n delta: vec2(0, 0),\n offset: vec2(0, 0),\n movement: vec2(0, 0),\n target: null,\n event: null,\n timeout: 100,\n clearTimeout: () => {},\n memo: {},\n isWheelStart: false,\n isWheeling: false,\n isWheelEnd: false,\n wheel,\n wheelStart,\n wheeling,\n wheelEnd,\n mount,\n clean,\n ref,\n }) as EventState<WheelState<El>>\n\n return self\n}\n"],"mappings":"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","names":["useOnce","useMutable","event","isF","f","Vec","vec2","x","y","out","addV","a","b","subV","cpV","isBrowser","supportsTouchEvents","isTouchScreen","supportsPointerEvents","supportsPointerLock","supportsGestureEvents","SUPPORT","getDevice","lock","getClientVec2","e","device","touch","EVENT_FOR_DRAG","dragEvent","state","initValues","vec2","self","drag","dragStart","e","getClientVec2","dragging","cpV","subV","addV","dragEnd","mount","target","start","move","end","up","clean","ref","el","event","getDevice","useDrag","arg","isF","memo","useMutable","useOnce","dragEvent","Drag","props","children","other","useDrag","useOnce","useMutable","event","EVENT_FOR_HOVER","hoverEvent","state","initValues","vec2","self","hover","hoverStart","e","getClientVec2","hovering","cpV","subV","addV","hoverEnd","mount","target","start","move","end","up","clean","ref","event","getDevice","useHover","arg","isF","memo","useMutable","useOnce","hoverEvent","Hover","props","children","other","useHover","useMutable","useOnce","event","keyEvent","state","self","e","el","useKey","arg","isF","memo","useMutable","useOnce","keyEvent","Key","props","children","other","useOnce","useMutable","event","pinchDevice","touch","SUPPORT","LINE_HEIGHT","PAGE_HEIGHT","PINCH_WHEEL_RATIO","distanceAngle","p1","p2","dx","dy","cx","cy","distance","angle","origin","vec2","touchDistanceAngle","event","ids","touches","pointerDistanceAngle","pointerEvents","pointers","getCurrentTargetTouchIds","wheelPinchDelta","currentScale","deltaY","deltaMode","EVENT_FOR_PINCH","pinchEvent","config","initValues","vec2","self","pinch","pinchStart","e","payload","cpV","pinching","prevAngle","newAngle","deltaAngle","scaleRatio","angleDelta","subV","addV","pinchEnd","touchStart","touchIds","getCurrentTargetTouchIds","id","touchDistanceAngle","touchMove","touchEnd","currentTouchIds","t","pointerStart","_pointerEvents","pointerDistanceAngle","pointerMove","pointerEnd","gestureStart","ge","gestureChange","gestureEnd","wheelStart","scaleDelta","wheelPinchDelta","wheeling","wheelEnd","mount","target","device","events","clean","ref","el","event","pinchDevice","usePinch","arg","isF","memo","useMutable","useOnce","pinchEvent","Pinch","props","children","other","usePinch","event","DELAY","resizeEvent","state","on","entry","self","target","register","id","entries","el","useMutable","useOnce","useResize","arg","isF","memo","useMutable","useOnce","resizeEvent","Resize","props","children","other","useResize","useOnce","useMutable","scrollValues","e","out","vec2","x","xx","y","yy","event","scrollEvent","config","initValues","vec2","self","scroll","scrollStart","e","scrollValues","scrolling","id","cpV","subV","addV","scrollEnd","mount","target","clean","ref","el","useScroll","config","isF","memo","useMutable","useOnce","scrollEvent","Scroll","props","children","other","useScroll","useOnce","useMutable","LINE_HEIGHT","PAGE_HEIGHT","wheelValues","event","out","vec2","deltaX","deltaY","deltaMode","event","wheelEvent","config","initValues","vec2","self","wheel","wheelStart","e","wheelValues","wheeling","id","cpV","addV","wheelEnd","mount","target","clean","ref","el","useWheel","config","isF","memo","useMutable","useOnce","wheelEvent","Wheel","props","children","other","useWheel"]}
|
|
1
|
+
{"version":3,"sources":["../src/drag/react.ts","../src/drag/index.ts","../src/utils.ts","../src/hover/react.ts","../src/hover/index.ts","../src/key/react.ts","../src/key/index.ts","../src/pinch/react.ts","../src/pinch/index.ts","../src/pinch/utils.ts","../src/resize/index.ts","../src/resize/react.ts","../src/scroll/react.ts","../src/scroll/utils.ts","../src/scroll/index.ts","../src/wheel/react.ts","../src/wheel/utils.ts","../src/wheel/index.ts"],"sourcesContent":["import { useOnce, useMutable } from 'reev/src/react'\nimport { dragEvent } from './index'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\nimport type { DragArg, DragState } from './types'\n\nexport const useDrag = <El extends Element = Element>(arg: DragArg<El>) => {\n if (isF(arg)) arg = { drag: arg }\n const memo = useMutable(arg)\n return useOnce(() => dragEvent<El>(memo as any))\n}\n\nexport default useDrag\n\nexport interface DragProps<El extends Element = Element> extends Partial<DragState<El>> {\n children(self: DragState<El>): ReactNode\n}\n\nexport const Drag = <El extends Element = Element>(props: DragProps<El>) => {\n const { children, ...other } = props\n return children(useDrag(other))\n}\n","import { event } from 'reev/src'\nimport { vec2, addV, subV, cpV, getDevice, getClientVec2 } from '../utils'\nimport type { EventState } from 'reev/src'\nimport type { DragState } from './types'\n\nexport * from './types'\n\nexport const EVENT_FOR_DRAG = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n end: 'touchend',\n up: 'touchcancel',\n },\n pointer: {\n start: 'pointerdown',\n move: 'pointermove',\n end: 'pointerup',\n up: 'pointercancel',\n },\n mouse: {\n start: 'mousedown',\n move: 'mousemove',\n end: 'mouseup',\n up: 'mousecancel',\n },\n}\n\nexport const dragEvent = <El extends Element = Element>(state: Partial<DragState<El>> = {}) => {\n const initValues = () => {\n vec2(0, 0, self.value)\n vec2(0, 0, self._value)\n vec2(0, 0, self.delta)\n vec2(0, 0, self.movement)\n }\n\n const drag = () => {\n self.isDragStart = self.active && !self._active\n self.isDragging = self.active && self._active\n self.isDragEnd = !self.active && self._active\n }\n\n const dragStart = (e: Event) => {\n self.event = e\n self.active = true\n getClientVec2(e, self.device, self.value)\n if (self.target.setPointerCapture && 'pointerId' in e)\n // @ts-ignore\n self.target.setPointerCapture(e.pointerId)\n self.drag(self)\n }\n\n const dragging = (e: Event) => {\n self.event = e\n self._active = self.active\n cpV(self.value, self._value)\n getClientVec2(e, self.device, self.value)\n if (self._active) {\n subV(self.value, self._value, self.delta)\n addV(self.offset, self.delta, self.offset)\n addV(self.movement, self.delta, self.movement)\n }\n self.drag(self)\n }\n\n const dragEnd = (e: Event) => {\n self.event = e\n self.active = false\n initValues()\n if (self.target.releasePointerCapture && 'pointerId' in e)\n // @ts-ignore\n self.target.releasePointerCapture(e.pointerId)\n self.drag(self)\n }\n\n const mount = (target: El) => {\n self.target = target\n const { start, move, end, up } = EVENT_FOR_DRAG[self.device]\n target.addEventListener(start, self.dragStart)\n target.addEventListener(move, self.dragging)\n target.addEventListener(end, self.dragEnd)\n target.addEventListener(up, self.dragEnd)\n }\n\n const clean = () => {\n const target = self.target\n if (!target) return\n const { start, move, end, up } = EVENT_FOR_DRAG[self.device]\n target.removeEventListener(start, self.dragStart)\n target.removeEventListener(move, self.dragging)\n target.removeEventListener(end, self.dragEnd)\n target.removeEventListener(up, self.dragEnd)\n }\n\n const ref = (el: El) => {\n self(state as DragState<El>)\n if (el) {\n self.mount(el)\n } else self.clean(null)\n }\n\n const self = event({\n _active: false,\n active: false,\n device: getDevice(),\n _value: vec2(0, 0),\n value: vec2(0, 0),\n delta: vec2(0, 0),\n offset: vec2(0, 0),\n movement: vec2(0, 0),\n target: null,\n event: null,\n memo: {},\n isDragStart: false,\n isDragging: false,\n isDragEnd: false,\n drag,\n dragStart,\n dragging,\n dragEnd,\n mount,\n clean,\n ref,\n }) as EventState<DragState<El>>\n\n return self\n}\n","/**\n * CALCULATE VECTOR\n * REF: https://github.com/toji/gl-matrix/blob/master/src/vec2.js\n */\nexport const isF = (f: unknown): f is Function => typeof f === 'function'\n\nconst Vec = typeof Float32Array !== 'undefined' ? Float32Array : Array\n\nexport const vec2 = (x = 0, y = 0, out = new Vec(2)): Vec2 => {\n out[0] = x\n out[1] = y\n return out as Vec2\n}\n\nexport type Vec2 = [x: number, y: number]\n\nexport const addV = (a: Vec2, b: Vec2, out = vec2()): Vec2 => {\n out[0] = a[0] + b[0]\n out[1] = a[1] + b[1]\n return out\n}\n\nexport const subV = (a: Vec2, b: Vec2, out = vec2()): Vec2 => {\n out[0] = a[0] - b[0]\n out[1] = a[1] - b[1]\n return out\n}\n\nexport const cpV = (a: Vec2, out = vec2()): Vec2 => {\n out[0] = a[0]\n out[1] = a[1]\n return out\n}\n\n/**\n * SUPPORT\n */\nconst isBrowser = typeof window !== 'undefined' && !!window.document && !!window.document.createElement\n\nconst supportsTouchEvents = () => isBrowser && 'ontouchstart' in window\n\nconst isTouchScreen = () => supportsTouchEvents() || (isBrowser && window.navigator.maxTouchPoints > 1)\n\nconst supportsPointerEvents = () => isBrowser && 'onpointerdown' in window\n\nconst supportsPointerLock = () => isBrowser && 'exitPointerLock' in window.document\n\nconst supportsGestureEvents = () => {\n try {\n // @ts-ignore eslint-disable-next-line\n return 'constructor' in GestureEvent\n } catch (e) {\n return false\n }\n}\n\n// prettier-ignore\nexport const SUPPORT: Record<string, boolean> = { // Mac\n isBrowser, // true\n get gesture() {\n return (\n SUPPORT._gesture ??\n (SUPPORT._gesture = supportsGestureEvents())\n )\n },\n get touch() {\n return (\n SUPPORT._touch ??\n (SUPPORT._touch = supportsTouchEvents())\n )\n },\n get touchscreen() {\n return (\n SUPPORT._touchscreen ??\n (SUPPORT._touchscreen = isTouchScreen())\n )\n },\n get pointer() {\n return (\n SUPPORT._pointer ??\n (SUPPORT._pointer = supportsPointerEvents())\n )\n },\n get pointerLock() {\n return (\n SUPPORT._pointerLock ??\n (SUPPORT._pointerLock = supportsPointerLock())\n )\n },\n}\n\n/**\n * https://github.com/pmndrs/use-gesture/blob/main/packages/core/src/config/dragConfigResolver.ts\n */\nexport const getDevice = (lock = false) => {\n const pointerLock = lock && SUPPORT.pointerLock\n if (pointerLock) return 'mouse'\n if (SUPPORT.touch) return 'touch'\n if (SUPPORT.pointer) return 'pointer'\n return 'mouse'\n}\n\nexport const getClientVec2 = (e: any, device: unknown, out: Vec2): Vec2 => {\n if (device !== 'touch') {\n return vec2(e.clientX, e.clientY, out)\n }\n const [touch] = e.changedTouches\n return vec2(touch.clientX, touch.clientY, out)\n}\n","import { useOnce, useMutable } from 'reev/src/react'\nimport { hoverEvent } from '.'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\nimport type { HoverArg, HoverState } from './types'\n\nexport const useHover = <El extends Element = Element>(arg?: HoverArg) => {\n if (isF(arg)) arg = { hover: arg }\n const memo = useMutable(arg)\n return useOnce(() => hoverEvent<El>(memo as any))\n}\n\nexport default useHover\n\nexport interface HoverProps<El extends Element = Element> extends Partial<HoverState<El>> {\n children: (state: HoverState<El>) => ReactNode\n}\n\nexport const Hover = (props: HoverProps) => {\n const { children, ...other } = props\n return children(useHover(other))\n}\n","import { event } from 'reev/src'\nimport { vec2, addV, subV, getDevice, getClientVec2, cpV } from '../utils'\nimport type { EventState } from 'reev/src'\nimport type { HoverState } from './types'\n\nexport * from './types'\n\nexport const EVENT_FOR_HOVER = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n end: 'touchend',\n up: 'touchcancel',\n },\n pointer: {\n start: 'pointerenter',\n move: 'pointermove',\n end: 'pointerleave',\n up: 'pointercancel',\n },\n mouse: {\n start: 'mouseenter',\n move: 'mousemove',\n end: 'mouseleave',\n up: 'mousecancel',\n },\n}\n\nexport const hoverEvent = <El extends Element = Element>(state: Partial<HoverState<El>> = {}) => {\n const initValues = () => {\n vec2(0, 0, self.value)\n vec2(0, 0, self._value)\n vec2(0, 0, self.delta)\n vec2(0, 0, self.movement)\n }\n\n const hover = () => {\n self.isHoverStart = !self._active && self.active\n self.isHovering = self._active && self.active\n self.isHoverEnd = self._active && !self.active\n }\n\n const hoverStart = (e: Event) => {\n self.event = e\n self.active = true\n getClientVec2(e, self.device, self.value)\n self.hover(self)\n }\n\n const hovering = (e: Event) => {\n self.event = e\n self._active = self.active\n cpV(self.value, self._value)\n getClientVec2(e, self.device, self.value)\n if (self._active) {\n subV(self.value, self._value, self.delta)\n addV(self.offset, self.delta, self.offset)\n addV(self.movement, self.delta, self.movement)\n }\n self.hover(self)\n }\n\n const hoverEnd = (e: Event) => {\n self.event = e\n self._active = true\n self.active = false\n initValues()\n self.hover(self)\n }\n\n const mount = (target: El) => {\n self.target = target\n const { start, move, end, up } = EVENT_FOR_HOVER[self.device]\n target.addEventListener(start, self.hoverStart)\n target.addEventListener(move, self.hovering)\n target.addEventListener(end, self.hoverEnd)\n target.addEventListener(up, self.hoverEnd)\n }\n\n const clean = () => {\n const target = self.target\n if (!target) return\n const { start, move, end, up } = EVENT_FOR_HOVER[self.device]\n target.removeEventListener(start, self.hoverStart)\n target.removeEventListener(move, self.hovering)\n target.removeEventListener(end, self.hoverEnd)\n target.removeEventListener(up, self.hoverEnd)\n }\n\n const ref = (target: El | null) => {\n self(state as HoverState<El>)\n if (target) {\n self.mount(target)\n } else self.clean()\n }\n\n const self = event({\n _active: false,\n active: false,\n device: getDevice(),\n _value: vec2(0, 0),\n value: vec2(0, 0),\n delta: vec2(0, 0),\n offset: vec2(0, 0),\n movement: vec2(0, 0),\n target: null,\n event: null,\n memo: {},\n isHoverStart: false,\n isHovering: false,\n isHoverEnd: false,\n hover,\n hoverStart,\n hovering,\n hoverEnd,\n mount,\n clean,\n ref,\n }) as EventState<HoverState<El>>\n\n return self\n}\n","import { useMutable, useOnce } from 'reev/src/react'\nimport { keyEvent } from '.'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\nimport type { KeyArg, KeyState } from './types'\n\nexport const useKey = <El extends Element = Element>(arg: KeyArg<El>) => {\n if (isF(arg)) arg = { key: arg }\n const memo = useMutable(arg)\n return useOnce(() => keyEvent<El>(memo as any))\n}\n\nexport interface KeyProps<El extends Element = Element> extends Partial<KeyState<El>> {\n children: (state: KeyState<El>) => ReactNode\n}\n\nexport const Key = <El extends Element = Element>(props: KeyProps<El>) => {\n const { children, ...other } = props\n return children(useKey(other))\n}\n","import { event } from 'reev/src'\nimport type { KeyState } from './types'\n\nexport * from './types'\n\nexport const keyEvent = <El extends Element = Element>(state: Partial<KeyState<El>> = {}) => {\n const keydown = (e: KeyboardEvent) => {\n self.event = e\n self.pressedKey = e.key\n self.code = e.code\n self.key?.(self)\n }\n\n const mount = (el: El | Window) => {\n if (!el) el = el || window\n self.target = el\n\n // @ts-ignore set tabindex to make element focusable\n el.setAttribute('tabindex', '1') // @ts-ignore\n el.addEventListener('keydown', self.keydown)\n }\n\n const clean = () => {\n const el = self.target\n if (!el) return // @ts-ignore\n el.removeEventListener('keydown', self.keydown)\n }\n\n const ref = (el: El | null) => {\n self(state)\n if (el) self.mount(el)\n else self.clean(null)\n }\n\n const self = event<KeyState<El>>({ keydown, mount, clean, ref })\n return self\n}\n","import { useOnce, useMutable } from 'reev/src/react'\nimport { pinchEvent } from '.'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\nimport type { PinchArg, PinchState } from './types'\n\nexport const usePinch = <El extends Element = Element>(arg?: PinchArg) => {\n if (isF(arg)) arg = { pinch: arg }\n const memo = useMutable(arg)\n return useOnce(() => pinchEvent<El>(memo as any))\n}\n\nexport default usePinch\n\nexport interface PinchProps<El extends Element = Element> extends Partial<PinchState<El>> {\n children: (state: PinchState<El>) => ReactNode\n}\n\nexport const Pinch = (props: PinchProps) => {\n const { children, ...other } = props\n return children(usePinch(other))\n}\n","import { event } from 'reev/src'\nimport { vec2, addV, subV, cpV } from '../utils'\nimport { pinchDevice, touchDistanceAngle, pointerDistanceAngle, getCurrentTargetTouchIds, wheelPinchDelta } from './utils'\nimport type { EventState } from 'reev/src'\nimport type { PinchState } from './types'\nimport type { WebKitGestureEvent, DistanceAngle } from './utils'\n\nexport * from './types'\n\nexport const EVENT_FOR_PINCH = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n end: 'touchend',\n cancel: 'touchcancel',\n },\n pointer: {\n start: 'pointerdown',\n move: 'pointermove',\n end: 'pointerup',\n cancel: 'pointercancel',\n },\n gesture: {\n start: 'gesturestart',\n change: 'gesturechange',\n end: 'gestureend',\n },\n}\n\nexport const pinchEvent = <El extends Element = Element>(config: Partial<PinchState<El>> = {}) => {\n const initValues = () => {\n vec2(0, 0, self.value)\n vec2(0, 0, self._value)\n vec2(0, 0, self.delta)\n vec2(0, 0, self.movement)\n }\n\n const pinch = () => {\n self.isPinchStart = self.active && !self._active\n self.isPinching = self.active && self._active\n self.isPinchEnd = !self.active && self._active\n }\n\n // ===== Common pinch handlers =====\n\n const pinchStart = (e: Event, payload: DistanceAngle) => {\n self.event = e\n self.active = true\n\n // Store initial values [distance, angle]\n vec2(payload.distance, payload.angle, self.value)\n vec2(payload.distance, payload.angle, self.initial)\n cpV(payload.origin, self.origin)\n\n self.scale = 1\n self.turns = 0\n\n self.pinch(self)\n }\n\n const pinching = (e: Event, payload: DistanceAngle) => {\n if (!self.active) return\n\n self.event = e\n self._active = self.active\n\n // Store previous values\n cpV(self.value, self._value)\n\n // Current values [distance, angle]\n const prevAngle = self._value[1]\n let newAngle = payload.angle\n\n // Handle angle wrapping (for full rotations)\n const deltaAngle = newAngle - prevAngle\n if (Math.abs(deltaAngle) > 270) {\n self.turns += Math.sign(deltaAngle)\n newAngle -= 360 * Math.sign(deltaAngle)\n }\n\n vec2(payload.distance, newAngle, self.value)\n cpV(payload.origin, self.origin)\n\n // Calculate movement: [scaleRatio - 1, angleDelta]\n // scaleRatio = currentDistance / initialDistance\n const scaleRatio = self.value[0] / self.initial[0] - 1\n const angleDelta = self.value[1] - self.initial[1]\n vec2(scaleRatio, angleDelta, self.movement)\n\n // Calculate delta from previous frame\n subV(self.value, self._value, self.delta)\n // Convert distance delta to scale delta for consistency\n self.delta[0] = self._value[0] !== 0 ? self.value[0] / self._value[0] - 1 : 0\n\n // Update offset (cumulative)\n addV(self.offset, self.delta, self.offset)\n\n // Update scale\n self.scale = self.initial[0] !== 0 ? self.value[0] / self.initial[0] : 1\n\n self.pinch(self)\n }\n\n const pinchEnd = (e: Event) => {\n self.event = e\n self._active = true\n self.active = false\n initValues()\n self.pinch(self)\n }\n\n // ===== Touch event handlers =====\n\n const touchStart = (e: TouchEvent) => {\n const touchIds = getCurrentTargetTouchIds(e)\n\n if (self.active) {\n // Check if the touches that started the gesture are still present\n if (self._touchIds.every((id) => touchIds.includes(id))) return\n }\n\n if (touchIds.length < 2) return\n\n // Store the first two touch ids\n self._touchIds = touchIds.slice(0, 2)\n\n const payload = touchDistanceAngle(e, self._touchIds)\n if (!payload) return\n\n pinchStart(e, payload)\n }\n\n const touchMove = (e: TouchEvent) => {\n if (!self.active) return\n\n const payload = touchDistanceAngle(e, self._touchIds)\n if (!payload) return\n\n pinching(e, payload)\n }\n\n const touchEnd = (e: TouchEvent) => {\n if (!self.active) return\n\n // Check if any of our tracked touches ended\n const currentTouchIds = Array.from(e.touches).map((t) => t.identifier)\n if (self._touchIds.some((id) => !currentTouchIds.includes(id))) {\n pinchEnd(e)\n }\n }\n\n // ===== Pointer event handlers =====\n\n const pointerStart = (e: PointerEvent) => {\n // Only track left mouse button or touch\n if (e.buttons != null && e.buttons % 2 !== 1) return\n\n const _pointerEvents = self._pointerEvents\n\n if (self.active) {\n // Check if the pointers that started the gesture are still present\n if (Array.from(_pointerEvents.keys()).every((id) => self._pointerEvents.has(id))) return\n }\n\n // Capture the pointer\n try {\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n } catch {}\n\n if (_pointerEvents.size < 2) {\n _pointerEvents.set(e.pointerId, e)\n }\n\n if (_pointerEvents.size < 2) return\n\n const payload = pointerDistanceAngle(_pointerEvents)\n if (!payload) return\n\n pinchStart(e, payload)\n }\n\n const pointerMove = (e: PointerEvent) => {\n const _pointerEvents = self._pointerEvents\n\n if (_pointerEvents.has(e.pointerId)) {\n _pointerEvents.set(e.pointerId, e)\n }\n\n if (!self.active) return\n\n const payload = pointerDistanceAngle(_pointerEvents)\n if (!payload) return\n\n pinching(e, payload)\n }\n\n const pointerEnd = (e: PointerEvent) => {\n try {\n ;(e.target as HTMLElement).releasePointerCapture(e.pointerId)\n } catch {}\n\n const _pointerEvents = self._pointerEvents\n\n if (_pointerEvents.has(e.pointerId)) {\n _pointerEvents.delete(e.pointerId)\n }\n\n if (!self.active) return\n\n if (_pointerEvents.size < 2) {\n pinchEnd(e)\n }\n }\n\n // ===== Safari Gesture event handlers =====\n\n const gestureStart = (e: Event) => {\n const ge = e as WebKitGestureEvent\n if (e.cancelable) e.preventDefault()\n\n if (self.active) return\n\n self.event = e\n self.active = true\n\n // GestureEvent provides scale and rotation directly\n vec2(ge.scale, ge.rotation, self.value)\n vec2(ge.scale, ge.rotation, self.initial)\n vec2(ge.clientX, ge.clientY, self.origin)\n\n self.scale = 1\n self.turns = 0\n\n self.pinch(self)\n }\n\n const gestureChange = (e: Event) => {\n const ge = e as WebKitGestureEvent\n if (e.cancelable) e.preventDefault()\n\n if (!self.active) return\n\n self.event = e\n self._active = self.active\n\n cpV(self.value, self._value)\n\n // GestureEvent gives us scale and rotation directly\n vec2(ge.scale, ge.rotation, self.value)\n vec2(ge.clientX, ge.clientY, self.origin)\n\n // movement = [scale - 1, rotation]\n vec2(ge.scale - 1, ge.rotation, self.movement)\n\n // delta from previous\n subV(self.value, self._value, self.delta)\n\n // Update offset\n addV(self.offset, self.delta, self.offset)\n\n self.scale = ge.scale\n\n self.pinch(self)\n }\n\n const gestureEnd = (e: Event) => {\n if (!self.active) return\n pinchEnd(e)\n }\n\n // ===== Wheel event handlers (trackpad pinch fallback) =====\n\n const wheelStart = (e: WheelEvent) => {\n self.event = e\n self.active = true\n\n // For wheel, we track scale change as value[0], rotation as value[1] (always 0)\n vec2(1, 0, self.value)\n vec2(1, 0, self.initial)\n vec2(e.clientX, e.clientY, self.origin)\n\n self.scale = 1\n self.turns = 0\n\n // Apply the initial wheel delta\n const scaleDelta = wheelPinchDelta(e, self.offset[0] + 1)\n self.delta[0] = scaleDelta\n self.delta[1] = 0\n self.value[0] += scaleDelta\n addV(self.offset, self.delta, self.offset)\n vec2(self.value[0] - 1, 0, self.movement)\n\n self.scale = self.value[0]\n\n self.pinch(self)\n }\n\n const wheeling = (e: WheelEvent) => {\n // Set up timeout to detect wheel end\n const id = setTimeout(() => wheelEnd(e), self.timeout)\n self.clearTimeout()\n self.clearTimeout = () => clearTimeout(id)\n\n if (!self.active) {\n wheelStart(e)\n return\n }\n\n self.event = e\n self._active = self.active\n\n cpV(self.value, self._value)\n vec2(e.clientX, e.clientY, self.origin)\n\n // Calculate scale delta from wheel\n const scaleDelta = wheelPinchDelta(e, self.offset[0] + 1)\n self.delta[0] = scaleDelta\n self.delta[1] = 0\n\n self.value[0] += scaleDelta\n addV(self.offset, self.delta, self.offset)\n vec2(self.value[0] - 1, 0, self.movement)\n\n self.scale = self.value[0]\n\n self.pinch(self)\n }\n\n const wheelEnd = (e: Event) => {\n if (!self.active) return\n self.event = e\n self._active = true\n self.active = false\n initValues()\n self.pinch(self)\n }\n\n // ===== Lifecycle methods =====\n\n const mount = (target: El) => {\n self.target = target\n const device = self.device\n\n if (device === 'wheel') {\n target.addEventListener('wheel', wheeling as EventListener, { passive: false })\n } else if (device === 'gesture') {\n const events = EVENT_FOR_PINCH.gesture\n target.addEventListener(events.start, gestureStart)\n target.addEventListener(events.change, gestureChange)\n target.addEventListener(events.end, gestureEnd)\n } else if (device === 'touch') {\n const events = EVENT_FOR_PINCH.touch\n target.addEventListener(events.start, touchStart as EventListener)\n target.addEventListener(events.move, touchMove as EventListener)\n target.addEventListener(events.end, touchEnd as EventListener)\n target.addEventListener(events.cancel, touchEnd as EventListener)\n } else if (device === 'pointer') {\n const events = EVENT_FOR_PINCH.pointer\n target.addEventListener(events.start, pointerStart as EventListener)\n target.addEventListener(events.move, pointerMove as EventListener)\n target.addEventListener(events.end, pointerEnd as EventListener)\n target.addEventListener(events.cancel, pointerEnd as EventListener)\n }\n }\n\n const clean = () => {\n const target = self.target\n if (!target) return\n const device = self.device\n\n if (device === 'wheel') {\n target.removeEventListener('wheel', wheeling as EventListener)\n } else if (device === 'gesture') {\n const events = EVENT_FOR_PINCH.gesture\n target.removeEventListener(events.start, gestureStart)\n target.removeEventListener(events.change, gestureChange)\n target.removeEventListener(events.end, gestureEnd)\n } else if (device === 'touch') {\n const events = EVENT_FOR_PINCH.touch\n target.removeEventListener(events.start, touchStart as EventListener)\n target.removeEventListener(events.move, touchMove as EventListener)\n target.removeEventListener(events.end, touchEnd as EventListener)\n target.removeEventListener(events.cancel, touchEnd as EventListener)\n } else if (device === 'pointer') {\n const events = EVENT_FOR_PINCH.pointer\n target.removeEventListener(events.start, pointerStart as EventListener)\n target.removeEventListener(events.move, pointerMove as EventListener)\n target.removeEventListener(events.end, pointerEnd as EventListener)\n target.removeEventListener(events.cancel, pointerEnd as EventListener)\n }\n }\n\n const ref = (el: El | null) => {\n self(config as PinchState<El>)\n if (el) {\n self.mount(el)\n } else self.clean()\n }\n\n const self = event({\n _active: false,\n active: false,\n device: pinchDevice(),\n _value: vec2(0, 0),\n value: vec2(0, 0),\n delta: vec2(0, 0),\n offset: vec2(0, 0),\n movement: vec2(0, 0),\n initial: vec2(0, 0),\n origin: vec2(0, 0),\n _touchIds: [] as number[],\n _pointerEvents: new Map<number, PointerEvent>(),\n scale: 1,\n turns: 0,\n target: null as unknown as El,\n event: null as unknown as Event,\n memo: {},\n timeout: 100,\n clearTimeout: () => {},\n isPinchStart: false,\n isPinching: false,\n isPinchEnd: false,\n pinch,\n pinchStart: (e: Event) => {\n // This is called externally, need to detect device and delegate\n if (self.device === 'touch') touchStart(e as TouchEvent)\n else if (self.device === 'pointer') pointerStart(e as PointerEvent)\n else if (self.device === 'gesture') gestureStart(e)\n else if (self.device === 'wheel') wheeling(e as WheelEvent)\n },\n pinching: (e: Event) => {\n if (self.device === 'touch') touchMove(e as TouchEvent)\n else if (self.device === 'pointer') pointerMove(e as PointerEvent)\n else if (self.device === 'gesture') gestureChange(e)\n else if (self.device === 'wheel') wheeling(e as WheelEvent)\n },\n pinchEnd: (e: Event) => {\n if (self.device === 'touch') touchEnd(e as TouchEvent)\n else if (self.device === 'pointer') pointerEnd(e as PointerEvent)\n else if (self.device === 'gesture') gestureEnd(e)\n else if (self.device === 'wheel') wheelEnd(e)\n },\n mount,\n clean,\n ref,\n }) as EventState<PinchState<El>>\n\n return self\n}\n","import { SUPPORT, vec2 } from '../utils'\nimport type { Vec2 } from '../utils'\n\n/**\n * ref:\n * https://github.com/pmndrs/use-gesture/blob/main/packages/core/src/config/pinchConfigResolver.ts\n */\nexport const pinchDevice = (touch = false) => {\n if (!SUPPORT.touch && SUPPORT.gesture) return 'gesture'\n if (SUPPORT.touch && touch) return 'touch'\n if (SUPPORT.touchscreen) {\n if (SUPPORT.pointer) return 'pointer'\n if (SUPPORT.touch) return 'touch'\n }\n return 'wheel'\n}\n\n/**\n * Wheel delta normalization constants\n * ref: https://github.com/facebookarchive/fixed-data-table/blob/master/src/vendor_upstream/dom/normalizeWheel.js\n */\nconst LINE_HEIGHT = 40\nconst PAGE_HEIGHT = 800\nconst PINCH_WHEEL_RATIO = 100\n\n/**\n * Calculate distance and angle between two touch/pointer points\n * ref: https://github.com/pmndrs/use-gesture/blob/main/packages/core/src/utils/events.ts\n */\nexport interface DistanceAngle {\n distance: number\n angle: number\n origin: Vec2\n}\n\nexport const distanceAngle = (p1: Touch | PointerEvent, p2: Touch | PointerEvent): DistanceAngle | null => {\n try {\n const dx = p2.clientX - p1.clientX\n const dy = p2.clientY - p1.clientY\n const cx = (p2.clientX + p1.clientX) / 2\n const cy = (p2.clientY + p1.clientY) / 2\n\n const distance = Math.hypot(dx, dy)\n // Convert to degrees, negative to match natural gesture direction\n const angle = -(Math.atan2(dx, dy) * 180) / Math.PI\n const origin = vec2(cx, cy)\n\n return { distance, angle, origin }\n } catch {\n return null\n }\n}\n\n/**\n * Get touch distance and angle from touch event using stored touch ids\n */\nexport const touchDistanceAngle = (event: TouchEvent, ids: number[]): DistanceAngle | null => {\n const touches = Array.from(event.touches).filter((touch) => ids.includes(touch.identifier))\n if (touches.length < 2) return null\n return distanceAngle(touches[0], touches[1])\n}\n\n/**\n * Get pointer distance and angle from pointer events map\n */\nexport const pointerDistanceAngle = (pointerEvents: Map<number, PointerEvent>): DistanceAngle | null => {\n const pointers = Array.from(pointerEvents.values())\n if (pointers.length < 2) return null\n return distanceAngle(pointers[0], pointers[1])\n}\n\n/**\n * Get all touch identifiers for the current target\n */\nexport const getCurrentTargetTouchIds = (event: TouchEvent): number[] => {\n return Array.from(event.touches)\n .filter((touch) => touch.target === event.currentTarget || (event.currentTarget as Node)?.contains?.(touch.target as Node))\n .map((touch) => touch.identifier)\n}\n\n/**\n * Normalize wheel values for pinch gesture (trackpad pinch)\n * Returns scale delta based on wheel deltaY\n */\nexport const wheelPinchDelta = (event: WheelEvent, currentScale: number): number => {\n let { deltaY, deltaMode } = event\n\n // Normalize wheel values\n if (deltaMode === 1) {\n deltaY *= LINE_HEIGHT\n } else if (deltaMode === 2) {\n deltaY *= PAGE_HEIGHT\n }\n\n // Convert to scale delta (negative because wheel down = zoom out)\n return (-deltaY / PINCH_WHEEL_RATIO) * currentScale\n}\n\n/**\n * WebKit gesture event type (Safari)\n */\nexport interface WebKitGestureEvent extends UIEvent {\n scale: number\n rotation: number\n clientX: number\n clientY: number\n}\n","import { event } from 'reev/src'\nimport type { EventState } from 'reev/src'\nimport type { ResizeState } from './types'\n\nexport * from './types'\n\nconst DELAY = 100\n\ntype ResizeEventCallback = (entry: ResizeObserverEntry) => () => void\n\nexport const resizeEvent = <El extends Element = Element>(state: ResizeState) => {\n const on: ResizeEventCallback = (entry) => () => {\n // ???\n }\n\n const mount = (target: El) => {\n const register = (entry: ResizeObserverEntry) => {\n if (entry.target !== target) return\n const id = setTimeout(on(entry), DELAY)\n self.listener()\n self.listener = () => clearTimeout(id)\n }\n\n self.observer = new ResizeObserver((entries) => {\n entries.forEach(register)\n })\n\n self.observer.observe(target)\n }\n\n const clean = () => {}\n\n const ref = (el: El | null) => {\n self(state)\n if (el) {\n self.mount(el)\n } else self.clean(null)\n }\n\n const self = event({\n observer: null,\n listener: () => {},\n resize: () => {},\n mount,\n clean,\n ref,\n }) as EventState<ResizeState<El>>\n\n return self\n}\n","import { resizeEvent } from '.'\nimport { useMutable, useOnce } from 'reev/src/react'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\nimport type { ResizeArg, ResizeState } from './types'\n\nexport const useResize = (arg: ResizeArg) => {\n if (isF(arg)) arg = { resize: arg }\n const memo = useMutable(arg)\n return useOnce(() => resizeEvent(memo as any))\n}\n\nexport default useResize\n\nexport interface ResizeProps<El extends Element = Element> extends Partial<ResizeState<El>> {\n children: (state: ResizeState<El>) => ReactNode\n}\n\nexport const Resize = <El extends Element = Element>(props: ResizeProps<El>) => {\n const { children, ...other } = props\n return children(useResize(other))\n}\n","import { useOnce, useMutable } from 'reev/src/react'\nimport { scrollEvent } from './index'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\nimport type { ScrollConfig, ScrollState } from './types'\n\nexport const useScroll = <El extends Element = Element>(config: ScrollConfig) => {\n if (isF(config)) config = { scroll: config }\n const memo = useMutable(config)\n return useOnce(() => scrollEvent<El>(memo as any))\n}\n\nexport default useScroll\n\nexport interface ScrollProps<El extends Element = Element> extends Partial<ScrollState<El>> {\n children: (state: ScrollState<El>) => ReactNode\n}\n\nexport const Scroll = <El extends Element = Element>(props: ScrollProps<El>) => {\n const { children, ...other } = props\n return children(useScroll(other))\n}\n","import { vec2 } from '../utils'\nimport type { Vec2 } from '../utils'\n\nexport const scrollValues = (e: any, out = vec2()): Vec2 => {\n const { scrollX: x, scrollLeft: xx } = e.currentTarget\n const { scrollY: y, scrollTop: yy } = e.currentTarget\n return vec2(x ?? xx ?? 0, y ?? yy ?? 0, out)\n}\n","import { vec2, addV, cpV, subV } from '../utils'\nimport { scrollValues } from './utils'\nimport { event } from 'reev/src'\nimport type { EventState } from 'reev/src'\nimport type { ScrollState } from './types'\n\nexport * from './types'\n\nexport const scrollEvent = <El extends Element = Element>(config?: ScrollState) => {\n const initValues = () => {\n vec2(0, 0, self.value)\n vec2(0, 0, self._value)\n vec2(0, 0, self.delta)\n vec2(0, 0, self.movement)\n }\n\n const scroll = () => {\n self.isScrollStart = self.active && !self._active\n self.isScrolling = self.active && self._active\n self.isScrollEnd = !self.active && self._active\n }\n\n const scrollStart = (e: Event) => {\n self.event = e\n self.active = true\n scrollValues(e, self.value)\n self.scroll(self)\n }\n\n const scrolling = (e: Event) => {\n // register wheelEnd\n const id = setTimeout(() => self.scrollEnd(e), self.timeout)\n self.clearTimeout()\n self.clearTimeout = () => clearTimeout(id)\n\n if (!self.active) {\n self.scrollStart(e)\n return\n }\n\n self.event = e\n self._active = self.active\n cpV(self.value, self._value)\n scrollValues(e, self.value)\n if (self._active) {\n subV(self.value, self._value, self.delta)\n addV(self.offset, self.delta, self.offset)\n addV(self.movement, self.delta, self.movement)\n }\n self.scroll(self)\n }\n\n const scrollEnd = (e: Event) => {\n self.event = e\n self.active = false\n initValues()\n self.scroll(self)\n }\n\n const mount = (target: El) => {\n self.target = target // @TODO set event to target\n window.addEventListener('scroll', self.scrolling)\n }\n\n const clean = () => {\n window.removeEventListener('scroll', self.scrolling)\n }\n\n const ref = (el: El | null) => {\n self(config as ScrollState<El>)\n if (el) {\n self.mount(el)\n } else self.clean(null)\n }\n\n const self = event({\n active: false,\n _active: false,\n _value: vec2(0, 0),\n value: vec2(0, 0),\n delta: vec2(0, 0),\n offset: vec2(0, 0),\n movement: vec2(0, 0),\n target: null,\n event: null,\n memo: {},\n timeout: 100,\n clearTimeout: () => {},\n isScrollStart: false,\n isScrolling: false,\n isScrollEnd: false,\n scroll,\n scrollStart,\n scrolling,\n scrollEnd,\n mount,\n clean,\n ref,\n }) as EventState<ScrollState<El>>\n\n return self\n}\n","import { useOnce, useMutable } from 'reev/src/react'\nimport { wheelEvent } from './index'\nimport { isF } from '../utils'\nimport type { ReactNode } from 'react'\nimport type { WheelConfig, WheelState } from './types'\n\nexport const useWheel = <El extends Element = Element>(config: WheelConfig) => {\n if (isF(config)) config = { wheel: config }\n const memo = useMutable(config)\n return useOnce(() => wheelEvent<El>(memo as any))\n}\n\nexport default useWheel\n\nexport interface WheelProps<El extends Element = Element> extends Partial<WheelState<El>> {\n children: (state: WheelState<El>) => ReactNode\n}\n\nexport const Wheel = <El extends Element = Element>(props: WheelProps<El>) => {\n const { children, ...other } = props\n return children(useWheel(other))\n}\n","import { vec2 } from '../utils'\nimport type { Vec2 } from '../utils'\n\nconst LINE_HEIGHT = 40\n\nconst PAGE_HEIGHT = 800\n\nexport const wheelValues = (event: Event, out: Vec2): Vec2 => {\n if (!(event instanceof WheelEvent)) return vec2(0, 0, out)\n\n let { deltaX, deltaY, deltaMode } = event\n if (deltaMode === 1) {\n deltaX *= LINE_HEIGHT\n deltaY *= LINE_HEIGHT\n } else if (deltaMode === 2) {\n deltaX *= PAGE_HEIGHT\n deltaY *= PAGE_HEIGHT\n }\n return vec2(deltaX, deltaY, out)\n}\n","import { vec2, addV, cpV } from '../utils'\nimport { wheelValues } from './utils'\nimport { event } from 'reev/src'\nimport type { EventState } from 'reev/src'\nimport type { WheelState } from './types'\n\nexport * from './types'\n\nexport const wheelEvent = <El extends Element = Element>(config?: WheelState) => {\n const initValues = () => {\n vec2(0, 0, self.value)\n vec2(0, 0, self._value)\n vec2(0, 0, self.delta)\n vec2(0, 0, self.movement)\n }\n\n const wheel = () => {\n self.isWheelStart = self.active && !self._active\n self.isWheeling = self.active && self._active\n self.isWheelEnd = !self.active && self._active\n }\n const wheelStart = (e: WheelEvent) => {\n self.event = e\n self.active = true\n wheelValues(e, self.delta)\n self.wheel(self)\n }\n\n const wheeling = (e: Event) => {\n // register wheelEnd\n const id = setTimeout(() => self.wheelEnd(e), self.timeout)\n self.clearTimeout()\n self.clearTimeout = () => clearTimeout(id)\n self.event = e\n if (!self.active) {\n self.wheelStart(e)\n return\n }\n\n self._active = self.active\n cpV(self.value, self._value)\n wheelValues(e, self.delta)\n addV(self.offset, self.delta, self.offset)\n addV(self.movement, self.delta, self.movement)\n self.wheel(self)\n }\n\n const wheelEnd = (e: Event) => {\n self.event = e\n self.active = false\n initValues()\n self.wheel(self)\n }\n\n const mount = (target: El) => {\n self.target = target\n target.addEventListener('wheel', self.wheeling)\n }\n\n const clean = () => {\n const target = self.target\n if (!target) return\n target.removeEventListener('wheel', self.wheeling)\n }\n\n const ref = (el: El | null) => {\n self(config as WheelState<El>)\n if (el) {\n self.mount(el)\n } else self.clean(null)\n }\n\n const self = event({\n active: false,\n _active: false,\n _value: vec2(0, 0),\n value: vec2(0, 0),\n delta: vec2(0, 0),\n offset: vec2(0, 0),\n movement: vec2(0, 0),\n target: null,\n event: null,\n timeout: 100,\n clearTimeout: () => {},\n memo: {},\n isWheelStart: false,\n isWheeling: false,\n isWheelEnd: false,\n wheel,\n wheelStart,\n wheeling,\n wheelEnd,\n mount,\n clean,\n ref,\n }) as EventState<WheelState<El>>\n\n return self\n}\n"],"mappings":"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","names":["useOnce","useMutable","event","isF","f","Vec","vec2","x","y","out","addV","a","b","subV","cpV","isBrowser","supportsTouchEvents","isTouchScreen","supportsPointerEvents","supportsPointerLock","supportsGestureEvents","SUPPORT","getDevice","lock","getClientVec2","e","device","touch","EVENT_FOR_DRAG","dragEvent","state","initValues","vec2","self","drag","dragStart","e","getClientVec2","dragging","cpV","subV","addV","dragEnd","mount","target","start","move","end","up","clean","ref","el","event","getDevice","useDrag","arg","isF","memo","useMutable","useOnce","dragEvent","Drag","props","children","other","useDrag","useOnce","useMutable","event","EVENT_FOR_HOVER","hoverEvent","state","initValues","vec2","self","hover","hoverStart","e","getClientVec2","hovering","cpV","subV","addV","hoverEnd","mount","target","start","move","end","up","clean","ref","event","getDevice","useHover","arg","isF","memo","useMutable","useOnce","hoverEvent","Hover","props","children","other","useHover","useMutable","useOnce","event","keyEvent","state","self","e","el","useKey","arg","isF","memo","useMutable","useOnce","keyEvent","Key","props","children","other","useOnce","useMutable","event","pinchDevice","touch","SUPPORT","LINE_HEIGHT","PAGE_HEIGHT","PINCH_WHEEL_RATIO","distanceAngle","p1","p2","dx","dy","cx","cy","distance","angle","origin","vec2","touchDistanceAngle","event","ids","touches","pointerDistanceAngle","pointerEvents","pointers","getCurrentTargetTouchIds","wheelPinchDelta","currentScale","deltaY","deltaMode","EVENT_FOR_PINCH","pinchEvent","config","initValues","vec2","self","pinch","pinchStart","e","payload","cpV","pinching","prevAngle","newAngle","deltaAngle","scaleRatio","angleDelta","subV","addV","pinchEnd","touchStart","touchIds","getCurrentTargetTouchIds","id","touchDistanceAngle","touchMove","touchEnd","currentTouchIds","t","pointerStart","_pointerEvents","pointerDistanceAngle","pointerMove","pointerEnd","gestureStart","ge","gestureChange","gestureEnd","wheelStart","scaleDelta","wheelPinchDelta","wheeling","wheelEnd","mount","target","device","events","clean","ref","el","event","pinchDevice","usePinch","arg","isF","memo","useMutable","useOnce","pinchEvent","Pinch","props","children","other","usePinch","event","DELAY","resizeEvent","state","on","entry","self","target","register","id","entries","el","useMutable","useOnce","useResize","arg","isF","memo","useMutable","useOnce","resizeEvent","Resize","props","children","other","useResize","useOnce","useMutable","scrollValues","e","out","vec2","x","xx","y","yy","event","scrollEvent","config","initValues","vec2","self","scroll","scrollStart","e","scrollValues","scrolling","id","cpV","subV","addV","scrollEnd","mount","target","clean","ref","el","useScroll","config","isF","memo","useMutable","useOnce","scrollEvent","Scroll","props","children","other","useScroll","useOnce","useMutable","LINE_HEIGHT","PAGE_HEIGHT","wheelValues","event","out","vec2","deltaX","deltaY","deltaMode","event","wheelEvent","config","initValues","vec2","self","wheel","wheelStart","e","wheelValues","wheeling","id","cpV","addV","wheelEnd","mount","target","clean","ref","el","useWheel","config","isF","memo","useMutable","useOnce","wheelEvent","Wheel","props","children","other","useWheel"]}
|
|
@@ -20,9 +20,9 @@ interface DragState<El extends Element = Element> {
|
|
|
20
20
|
dragStart(e: Event): void;
|
|
21
21
|
dragging(e: Event): void;
|
|
22
22
|
dragEnd(e: Event): void;
|
|
23
|
-
mount(target:
|
|
24
|
-
clean(): void;
|
|
25
|
-
ref(traget:
|
|
23
|
+
mount(target: El): void;
|
|
24
|
+
clean(el: null): void;
|
|
25
|
+
ref(traget: El | null): void;
|
|
26
26
|
}
|
|
27
27
|
declare type DragArg<El extends Element> = Partial<DragState<El>> | DragState<El>['drag'];
|
|
28
28
|
|
|
@@ -58,7 +58,7 @@ interface KeyState<El extends Element = Element> {
|
|
|
58
58
|
key(e: KeyState): void;
|
|
59
59
|
keydown(e: KeyboardEvent): void;
|
|
60
60
|
mount(el: El): void;
|
|
61
|
-
clean(): void;
|
|
61
|
+
clean(el: null): void;
|
|
62
62
|
ref(el: Element | null): void;
|
|
63
63
|
}
|
|
64
64
|
declare type KeyArg<El extends Element = Element> = Partial<KeyState<El>> | KeyState<El>['key'];
|
|
@@ -127,9 +127,9 @@ interface ScrollState<El extends Element = Element> {
|
|
|
127
127
|
scrollStart(e: Event): void;
|
|
128
128
|
scrolling(e: Event): void;
|
|
129
129
|
scrollEnd(e: Event): void;
|
|
130
|
-
mount(target:
|
|
130
|
+
mount(target: El): void;
|
|
131
131
|
clean(target: null): void;
|
|
132
|
-
ref(traget:
|
|
132
|
+
ref(traget: El | null): void;
|
|
133
133
|
tick?: () => void;
|
|
134
134
|
}
|
|
135
135
|
declare type ScrollConfig<El extends Element = Element> = Partial<ScrollState<El>> | ScrollState<El>['scroll'];
|
|
@@ -154,9 +154,9 @@ interface WheelState<El extends Element = Element> {
|
|
|
154
154
|
wheelStart(e: Event): void;
|
|
155
155
|
wheeling(e: Event): void;
|
|
156
156
|
wheelEnd(e: Event): void;
|
|
157
|
-
mount(target:
|
|
157
|
+
mount(target: El): void;
|
|
158
158
|
clean(target: null): void;
|
|
159
|
-
ref(traget:
|
|
159
|
+
ref(traget: El | null): void;
|
|
160
160
|
tick?: () => void;
|
|
161
161
|
}
|
|
162
162
|
declare type WheelConfig<El extends Element = Element> = Partial<WheelState<El>> | WheelState<El>['wheel'];
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "rege",
|
|
3
3
|
"author": "tseijp",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.5.0",
|
|
6
6
|
"private": false,
|
|
7
7
|
"sideEffect": false,
|
|
8
8
|
"publishConfig": {
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
}
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"reev": "0.
|
|
92
|
+
"reev": "0.13.0"
|
|
93
93
|
},
|
|
94
94
|
"peerDependencies": {
|
|
95
95
|
"expo": "*",
|
package/src/drag/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { DragState } from './types'
|
|
1
|
+
import { event } from 'reev/src'
|
|
3
2
|
import { vec2, addV, subV, cpV, getDevice, getClientVec2 } from '../utils'
|
|
3
|
+
import type { EventState } from 'reev/src'
|
|
4
|
+
import type { DragState } from './types'
|
|
4
5
|
|
|
5
6
|
export * from './types'
|
|
6
7
|
|
|
@@ -95,7 +96,7 @@ export const dragEvent = <El extends Element = Element>(state: Partial<DragState
|
|
|
95
96
|
self(state as DragState<El>)
|
|
96
97
|
if (el) {
|
|
97
98
|
self.mount(el)
|
|
98
|
-
} else self.clean()
|
|
99
|
+
} else self.clean(null)
|
|
99
100
|
}
|
|
100
101
|
|
|
101
102
|
const self = event({
|
package/src/drag/react.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useOnce, useMutable } from 'reev/src/react'
|
|
2
|
-
import { DragArg, DragState } from './types'
|
|
3
2
|
import { dragEvent } from './index'
|
|
4
3
|
import { isF } from '../utils'
|
|
5
4
|
import type { ReactNode } from 'react'
|
|
5
|
+
import type { DragArg, DragState } from './types'
|
|
6
6
|
|
|
7
7
|
export const useDrag = <El extends Element = Element>(arg: DragArg<El>) => {
|
|
8
8
|
if (isF(arg)) arg = { drag: arg }
|
package/src/drag/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Vec2 } from '../utils'
|
|
1
|
+
import type { Vec2 } from '../utils'
|
|
2
2
|
|
|
3
3
|
export type DragDevice = 'mouse' | 'touch' | 'pointer'
|
|
4
4
|
|
|
@@ -21,9 +21,9 @@ export interface DragState<El extends Element = Element> {
|
|
|
21
21
|
dragStart(e: Event): void
|
|
22
22
|
dragging(e: Event): void
|
|
23
23
|
dragEnd(e: Event): void
|
|
24
|
-
mount(target:
|
|
25
|
-
clean(): void
|
|
26
|
-
ref(traget:
|
|
24
|
+
mount(target: El): void
|
|
25
|
+
clean(el: null): void
|
|
26
|
+
ref(traget: El | null): void
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export type DragArg<El extends Element> = Partial<DragState<El>> | DragState<El>['drag']
|
package/src/hover/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { EventState, event } from 'reev/src'
|
|
1
|
+
import { event } from 'reev/src'
|
|
3
2
|
import { vec2, addV, subV, getDevice, getClientVec2, cpV } from '../utils'
|
|
3
|
+
import type { EventState } from 'reev/src'
|
|
4
|
+
import type { HoverState } from './types'
|
|
4
5
|
|
|
5
6
|
export * from './types'
|
|
6
7
|
|
package/src/hover/react.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useOnce, useMutable } from 'reev/src/react'
|
|
2
2
|
import { hoverEvent } from '.'
|
|
3
|
-
import { HoverArg, HoverState } from './types'
|
|
4
3
|
import { isF } from '../utils'
|
|
5
4
|
import type { ReactNode } from 'react'
|
|
5
|
+
import type { HoverArg, HoverState } from './types'
|
|
6
6
|
|
|
7
7
|
export const useHover = <El extends Element = Element>(arg?: HoverArg) => {
|
|
8
8
|
if (isF(arg)) arg = { hover: arg }
|
package/src/hover/types.ts
CHANGED
package/src/key/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { event } from 'reev/src'
|
|
2
|
-
import { KeyState } from './types'
|
|
2
|
+
import type { KeyState } from './types'
|
|
3
3
|
|
|
4
4
|
export * from './types'
|
|
5
5
|
|
|
@@ -26,10 +26,10 @@ export const keyEvent = <El extends Element = Element>(state: Partial<KeyState<E
|
|
|
26
26
|
el.removeEventListener('keydown', self.keydown)
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
const ref = (el:
|
|
29
|
+
const ref = (el: El | null) => {
|
|
30
30
|
self(state)
|
|
31
|
-
if (el) self.mount(el
|
|
32
|
-
else self.clean()
|
|
31
|
+
if (el) self.mount(el)
|
|
32
|
+
else self.clean(null)
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
const self = event<KeyState<El>>({ keydown, mount, clean, ref })
|
package/src/key/react.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useMutable, useOnce } from 'reev/src/react'
|
|
2
2
|
import { keyEvent } from '.'
|
|
3
|
-
import { KeyArg, KeyState } from './types'
|
|
4
3
|
import { isF } from '../utils'
|
|
5
4
|
import type { ReactNode } from 'react'
|
|
5
|
+
import type { KeyArg, KeyState } from './types'
|
|
6
6
|
|
|
7
7
|
export const useKey = <El extends Element = Element>(arg: KeyArg<El>) => {
|
|
8
8
|
if (isF(arg)) arg = { key: arg }
|
package/src/key/types.ts
CHANGED
|
@@ -6,7 +6,7 @@ export interface KeyState<El extends Element = Element> {
|
|
|
6
6
|
key(e: KeyState): void
|
|
7
7
|
keydown(e: KeyboardEvent): void
|
|
8
8
|
mount(el: El): void
|
|
9
|
-
clean(): void
|
|
9
|
+
clean(el: null): void
|
|
10
10
|
ref(el: Element | null): void
|
|
11
11
|
}
|
|
12
12
|
export type KeyArg<El extends Element = Element> = Partial<KeyState<El>> | KeyState<El>['key']
|
package/src/pinch/index.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { PinchState } from './types'
|
|
1
|
+
import { event } from 'reev/src'
|
|
3
2
|
import { vec2, addV, subV, cpV } from '../utils'
|
|
4
|
-
import { pinchDevice, touchDistanceAngle, pointerDistanceAngle, getCurrentTargetTouchIds, wheelPinchDelta
|
|
3
|
+
import { pinchDevice, touchDistanceAngle, pointerDistanceAngle, getCurrentTargetTouchIds, wheelPinchDelta } from './utils'
|
|
4
|
+
import type { EventState } from 'reev/src'
|
|
5
|
+
import type { PinchState } from './types'
|
|
6
|
+
import type { WebKitGestureEvent, DistanceAngle } from './utils'
|
|
5
7
|
|
|
6
8
|
export * from './types'
|
|
7
9
|
|
package/src/pinch/react.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useOnce, useMutable } from 'reev/src/react'
|
|
2
2
|
import { pinchEvent } from '.'
|
|
3
|
-
import { PinchArg, PinchState } from './types'
|
|
4
3
|
import { isF } from '../utils'
|
|
5
4
|
import type { ReactNode } from 'react'
|
|
5
|
+
import type { PinchArg, PinchState } from './types'
|
|
6
6
|
|
|
7
7
|
export const usePinch = <El extends Element = Element>(arg?: PinchArg) => {
|
|
8
8
|
if (isF(arg)) arg = { pinch: arg }
|
package/src/pinch/types.ts
CHANGED
package/src/pinch/utils.ts
CHANGED