rege 0.1.0 → 0.3.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.mts → index.d.ts} +12 -12
- 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 +53 -0
- 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-dbd32c09.d.ts → types-372314b9.d.ts} +81 -66
- package/package.json +61 -35
- package/src/drag/index.ts +126 -0
- package/src/drag/react.ts +22 -0
- package/src/drag/types.ts +29 -0
- package/src/hover/index.ts +121 -0
- package/src/hover/react.ts +22 -0
- package/src/hover/types.ts +25 -0
- package/src/index.ts +7 -0
- package/src/key/index.ts +37 -0
- package/src/key/react.ts +20 -0
- package/src/key/types.ts +12 -0
- package/src/pinch/index.ts +447 -0
- package/src/pinch/react.ts +22 -0
- package/src/pinch/types.ts +63 -0
- package/src/pinch/utils.ts +106 -0
- package/src/react.ts +7 -0
- package/src/resize/index.ts +49 -0
- package/src/resize/react.ts +22 -0
- package/src/resize/types.ts +10 -0
- package/src/scroll/index.ts +101 -0
- package/src/scroll/react.ts +22 -0
- package/src/scroll/types.ts +29 -0
- package/src/scroll/utils.ts +7 -0
- package/src/utils.ts +109 -0
- package/src/wheel/index.ts +98 -0
- package/src/wheel/react.ts +22 -0
- package/src/wheel/types.ts +29 -0
- package/src/wheel/utils.ts +19 -0
- package/dist/react.d.mts +0 -52
package/dist/react.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../drag/react.ts","../drag/index.ts","../utils.ts","../hover/react.ts","../hover/index.ts","../key/react.ts","../key/index.ts","../pinch/react.ts","../pinch/utils.ts","../wheel/utils.ts","../wheel/index.ts","../pinch/index.ts","../resize/index.ts","../resize/react.ts","../scroll/react.ts","../scroll/utils.ts","../scroll/index.ts","../wheel/react.ts"],"sourcesContent":["import { useOnce, useMutable } from 'reev/react'\nimport { DragArg, DragState } from './types'\nimport { dragEvent } from './index'\nimport { isF } from '../utils'\n\nexport const useDrag = <El extends Element = Element>(arg: DragArg<El>) => {\n if (isF(arg)) arg = { onDrag: 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>\n extends Partial<DragState<El>> {\n children(self: DragState<El>): JSX.Element\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'\nimport { DragState } from './types'\nimport { vec2, addV, subV, cpV, getDevice, getClientVec2 } from '../utils'\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>(\n state: Partial<DragState<El>> = {}\n) => {\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 onDrag = () => {\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 onDragStart = (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.onDrag(self)\n }\n\n const onDragging = (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.onDrag(self)\n }\n\n const onDragEnd = (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.onDrag(self)\n }\n\n const onMount = (target: El) => {\n self.target = target\n const { start, move, end, up } = EVENT_FOR_DRAG[self.device]\n target.addEventListener(start, self.onDragStart)\n target.addEventListener(move, self.onDragging)\n target.addEventListener(end, self.onDragEnd)\n target.addEventListener(up, self.onDragEnd)\n }\n\n const onClean = () => {\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.onDragStart)\n target.removeEventListener(move, self.onDragging)\n target.removeEventListener(end, self.onDragEnd)\n target.removeEventListener(up, self.onDragEnd)\n }\n\n const ref = (el: El) => {\n self(state as DragState<El>)\n if (el) {\n self.onMount(el)\n } else self.onClean()\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 onDrag,\n onDragStart,\n onDragging,\n onDragEnd,\n onMount,\n onClean,\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 =\n typeof window !== 'undefined' &&\n !!window.document &&\n !!window.document.createElement\n\nconst supportsTouchEvents = () => isBrowser && 'ontouchstart' in window\n\nconst isTouchScreen = () =>\n supportsTouchEvents() ||\n (isBrowser && window.navigator.maxTouchPoints > 1)\n\nconst supportsPointerEvents = () => isBrowser && 'onpointerdown' in window\n\nconst supportsPointerLock = () =>\n 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/react'\nimport { hoverEvent } from '.'\nimport { HoverArg, HoverState } from './types'\nimport { isF } from '../utils'\n\nexport const useHover = <El extends Element = Element>(arg?: HoverArg) => {\n if (isF(arg)) arg = { onHover: 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>\n extends Partial<HoverState<El>> {\n children: (state: HoverState<El>) => JSX.Element\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'\nimport { vec2, addV, subV, getDevice, getClientVec2, cpV } from '../utils'\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>(\n state: Partial<HoverState<El>> = {}\n) => {\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 onHover = () => {\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 onHoverStart = (e: Event) => {\n self.event = e\n self.active = true\n getClientVec2(e, self.device, self.value)\n self.onHover(self)\n }\n\n const onHovering = (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.onHover(self)\n }\n\n const onHoverEnd = (e: Event) => {\n self.event = e\n self._active = true\n self.active = false\n initValues()\n self.onHover(self)\n }\n\n const onMount = (target: El) => {\n self.target = target\n const { start, move, end, up } = EVENT_FOR_HOVER[self.device]\n target.addEventListener(start, self.onHoverStart)\n target.addEventListener(move, self.onHovering)\n target.addEventListener(end, self.onHoverEnd)\n target.addEventListener(up, self.onHoverEnd)\n }\n\n const onClean = () => {\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.onHoverStart)\n target.removeEventListener(move, self.onHovering)\n target.removeEventListener(end, self.onHoverEnd)\n target.removeEventListener(up, self.onHoverEnd)\n }\n\n const ref = (target: El | null) => {\n self(state as HoverState<El>)\n if (target) {\n self.onMount(target)\n } else self.onClean()\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 onHover,\n onHoverStart,\n onHovering,\n onHoverEnd,\n onMount,\n onClean,\n ref,\n }) as EventState<HoverState<El>>\n\n return self\n}\n","import { useMutable, useOnce } from 'reev/react'\nimport { keyEvent } from '.'\nimport { KeyArg, KeyState } from './types'\nimport { isF } from '../utils'\n\nexport const useKey = <El extends Element = Element>(arg: KeyArg<El>) => {\n if (isF(arg)) arg = { onKey: arg }\n const memo = useMutable(arg)\n return useOnce(() => keyEvent<El>(memo as any))\n}\n\nexport interface KeyProps<El extends Element = Element>\n extends Partial<KeyState<El>> {\n children: (state: KeyState<El>) => JSX.Element\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'\nimport { KeyState } from './types'\n\nexport const keyEvent = <El extends Element = Element>(\n state: Partial<KeyState<El>> = {}\n) => {\n const onKeydown = (e: KeyboardEvent) => {\n self.event = e\n self.key = e.key\n self.code = e.code\n self.onKey?.(self)\n }\n\n const onMount = (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.onKeydown)\n }\n\n const onClean = () => {\n const el = self.target\n if (!el) return // @ts-ignore\n el.removeEventListener('keydown', self.onKeydown)\n }\n\n const ref = (el: Element | null) => {\n self(state)\n if (el) self.onMount(el as El)\n else self.onClean()\n }\n\n const self = event<KeyState<El>>({ onKeydown, onMount, onClean, ref })\n return self\n}\n","import { useOnce, useMutable } from 'reev/react'\nimport { pinchEvent } from '.'\nimport { PinchArg, PinchState } from './types'\nimport { isF } from '../utils'\n\nexport const usePinch = <El extends Element = Element>(arg?: PinchArg) => {\n if (isF(arg)) arg = { onPinch: 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>\n extends Partial<PinchState<El>> {\n children: (state: PinchState<El>) => JSX.Element\n}\n\nexport const Pinch = (props: PinchProps) => {\n const { children, ...other } = props\n return children(usePinch(other))\n}\n","import { SUPPORT } 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","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'\nimport { WheelState } from './types'\n\nexport const wheelEvent = <El extends Element = Element>(\n config?: WheelState\n) => {\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 onWheel = () => {\n self.isWheelStart = self.active && !self._active\n self.isWheeling = self.active && self._active\n self.isWheelEnd = !self.active && self._active\n }\n const onWheelStart = (e: WheelEvent) => {\n self.event = e\n self.active = true\n wheelValues(e, self.delta)\n self.onWheel(self)\n }\n\n const onWheeling = (e: Event) => {\n // register onWheelEnd\n const id = setTimeout(() => self.onWheelEnd(e), self.timeout)\n self.clearTimeout()\n self.clearTimeout = () => clearTimeout(id)\n self.event = e\n if (!self.active) {\n self.onWheelStart(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.onWheel(self)\n }\n\n const onWheelEnd = (e: Event) => {\n self.event = e\n self.active = false\n initValues()\n self.onWheel(self)\n }\n\n const onMount = (target: El) => {\n self.target = target\n target.addEventListener('wheel', self.onWheeling)\n }\n\n const onClean = () => {\n const target = self.target\n if (!target) return\n target.removeEventListener('wheel', self.onWheeling)\n }\n\n const ref = (el: Element | null) => {\n self(config as WheelState<El>)\n if (el) {\n self.onMount(el)\n } else self.onClean(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 onWheel,\n onWheelStart,\n onWheeling,\n onWheelEnd,\n onMount,\n onClean,\n ref,\n }) as EventState<WheelState<El>>\n\n return self\n}\n","import { EventState } from 'reev'\nimport { pinchDevice } from './utils'\nimport { PinchState } from './types'\nimport { vec2, addV, subV, getClientVec2, cpV } from '../utils'\nimport { wheelEvent } from '../wheel'\n\nexport const EVENT_FOR_PINCH = {\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 pinchEvent = <El extends Element = Element>(\n state: Partial<PinchState<El>> = {}\n) => {\n const self = wheelEvent() as unknown as EventState<PinchState<El>>\n\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 onPinch = () => {\n self.isPinchStart = !self._active && self.active\n self.isPinching = self._active && self.active\n self.isPinchEnd = self._active && !self.active\n }\n\n const onPinchStart = (e: Event) => {\n self.event = e\n self.active = true\n getClientVec2(e, self.device, self.value)\n self.onPinch(self)\n }\n\n const onPinching = (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.onPinch(self)\n }\n\n const onPinchEnd = (e: Event) => {\n self.event = e\n self._active = true\n self.active = false\n initValues()\n self.onPinch(self)\n }\n\n const onWheelStart = () => {\n self.onPinch(self)\n }\n\n const onWheeling = () => {\n self.onPinch(self)\n }\n\n const onWheelEnd = () => {\n self.onPinch(self)\n }\n\n const onMount = (target: El) => {\n self.target = target\n if (self.device === 'wheel') return\n const { start, move, end, up } = EVENT_FOR_PINCH[self.device]\n target.addEventListener(start, self.onPinchStart)\n target.addEventListener(move, self.onPinching)\n target.addEventListener(end, self.onPinchEnd)\n target.addEventListener(up, self.onPinchEnd)\n }\n\n const onClean = () => {\n const target = self.target\n if (!target || self.device === 'wheel') return\n const { start, move, end, up } = EVENT_FOR_PINCH[self.device]\n target.removeEventListener(start, self.onPinchStart)\n target.removeEventListener(move, self.onPinching)\n target.removeEventListener(end, self.onPinchEnd)\n target.removeEventListener(up, self.onPinchEnd)\n }\n\n const ref = () => {\n self(state as PinchState<El>)\n }\n\n self({\n _active: false,\n active: false,\n device: pinchDevice(),\n _rotate: 0,\n rotate: 0,\n _size: 1,\n size: 1,\n _scale: vec2(1, 1),\n scale: vec2(1, 1),\n _value: vec2(),\n value: vec2(),\n delta: vec2(),\n offset: vec2(),\n movement: vec2(),\n target: null as unknown as El,\n event: null as unknown as any,\n memo: {},\n isPinchStart: false,\n isPinching: false,\n isPinchEnd: false,\n onWheelStart,\n onWheeling,\n onWheelEnd,\n onPinch,\n onPinchStart,\n onPinching,\n onPinchEnd,\n onMount,\n onClean,\n ref,\n })\n\n return self\n}\n","import { EventState, event } from 'reev'\nimport { ResizeState } from './types'\n\nconst DELAY = 100\n\ntype ResizeEventCallback = (entry: ResizeObserverEntry) => () => void\n\nexport const resizeEvent = <El extends Element = Element>(\n state: ResizeState\n) => {\n const on: ResizeEventCallback = (entry) => () => {\n // ???\n }\n\n const onMount = (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 onClean = () => {}\n\n const ref = (el: El) => {\n self(state)\n if (el) {\n self.onMount(el)\n } else self.onClean(null)\n }\n\n const self = event({\n observer: null,\n listener: () => {},\n onResize: () => {},\n onMount,\n onClean,\n ref,\n }) as EventState<ResizeState<El>>\n\n return self\n}\n","import { resizeEvent } from '.'\nimport { useMutable, useOnce } from 'reev/react'\nimport { ResizeArg, ResizeState } from './types'\nimport { isF } from '../utils'\n\nexport const useResize = (arg: ResizeArg) => {\n if (isF(arg)) arg = { onResize: 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>\n extends Partial<ResizeState<El>> {\n children: (state: ResizeState<El>) => JSX.Element\n}\n\nexport const Resize = <El extends Element = Element>(\n props: ResizeProps<El>\n) => {\n const { children, ...other } = props\n return children(useResize(other))\n}\n","import { useOnce, useMutable } from 'reev/react'\nimport { ScrollConfig, ScrollState } from './types'\nimport { scrollEvent } from './index'\nimport { isF } from '../utils'\n\nexport const useScroll = <El extends Element = Element>(\n config: ScrollConfig\n) => {\n if (isF(config)) config = { onScroll: 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>\n extends Partial<ScrollState<El>> {\n children: (state: ScrollState<El>) => JSX.Element\n}\n\nexport const Scroll = <El extends Element = Element>(\n props: ScrollProps<El>\n) => {\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'\nimport { ScrollState } from './types'\n\nexport const scrollEvent = <El extends Element = Element>(\n config?: ScrollState\n) => {\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 onScroll = () => {\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 onScrollStart = (e: Event) => {\n self.event = e\n self.active = true\n scrollValues(e, self.value)\n self.onScroll(self)\n }\n\n const onScrolling = (e: Event) => {\n // register onWheelEnd\n const id = setTimeout(() => self.onScrollEnd(e), self.timeout)\n self.clearTimeout()\n self.clearTimeout = () => clearTimeout(id)\n\n if (!self.active) {\n self.onScrollStart(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.onScroll(self)\n }\n\n const onScrollEnd = (e: Event) => {\n self.event = e\n self.active = false\n initValues()\n self.onScroll(self)\n }\n\n const onMount = (target: El) => {\n self.target = target // @TODO set event to target\n window.addEventListener('scroll', self.onScrolling)\n }\n\n const onClean = () => {\n window.removeEventListener('scroll', self.onScrolling)\n }\n\n const ref = (el: Element | null) => {\n self(config as ScrollState<El>)\n if (el) {\n self.onMount(el)\n } else self.onClean(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 onScroll,\n onScrollStart,\n onScrolling,\n onScrollEnd,\n onMount,\n onClean,\n ref,\n }) as EventState<ScrollState<El>>\n\n return self\n}\n","import { useOnce, useMutable } from 'reev/react'\nimport { WheelConfig, WheelState } from './types'\nimport { wheelEvent } from './index'\nimport { isF } from '../utils'\n\nexport const useWheel = <El extends Element = Element>(config: WheelConfig) => {\n if (isF(config)) config = { onWheel: 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>\n extends Partial<WheelState<El>> {\n children: (state: WheelState<El>) => JSX.Element\n}\n\nexport const Wheel = <El extends Element = Element>(props: WheelProps<El>) => {\n const { children, ...other } = props\n return children(useWheel(other))\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","onDrag","onDragStart","e","getClientVec2","onDragging","cpV","subV","addV","onDragEnd","onMount","target","start","move","end","up","onClean","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","onHover","onHoverStart","e","getClientVec2","onHovering","cpV","subV","addV","onHoverEnd","onMount","target","start","move","end","up","onClean","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","pinchDevice","touch","SUPPORT","LINE_HEIGHT","PAGE_HEIGHT","wheelValues","event","out","vec2","deltaX","deltaY","deltaMode","event","wheelEvent","config","initValues","vec2","self","onWheel","onWheelStart","e","wheelValues","onWheeling","id","cpV","addV","onWheelEnd","onMount","target","onClean","ref","el","EVENT_FOR_PINCH","pinchEvent","state","self","wheelEvent","initValues","vec2","onPinch","onPinchStart","e","getClientVec2","onPinching","cpV","subV","addV","onPinchEnd","onWheelStart","onWheeling","onWheelEnd","onMount","target","start","move","end","up","onClean","ref","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","onScroll","onScrollStart","e","scrollValues","onScrolling","id","cpV","subV","addV","onScrollEnd","onMount","target","onClean","ref","el","useScroll","config","isF","memo","useMutable","useOnce","scrollEvent","Scroll","props","children","other","useScroll","useOnce","useMutable","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 { 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"]}
|
|
@@ -16,15 +16,15 @@ interface DragState<El extends Element = Element> {
|
|
|
16
16
|
isDragStart: boolean;
|
|
17
17
|
isDragging: boolean;
|
|
18
18
|
isDragEnd: boolean;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
drag(self: DragState<El>): void;
|
|
20
|
+
dragStart(e: Event): void;
|
|
21
|
+
dragging(e: Event): void;
|
|
22
|
+
dragEnd(e: Event): void;
|
|
23
|
+
mount(target: Element): void;
|
|
24
|
+
clean(): void;
|
|
25
25
|
ref(traget: Element): void;
|
|
26
26
|
}
|
|
27
|
-
declare type DragArg<El extends Element> = Partial<DragState<El>> | DragState<El>['
|
|
27
|
+
declare type DragArg<El extends Element> = Partial<DragState<El>> | DragState<El>['drag'];
|
|
28
28
|
|
|
29
29
|
interface HoverState<El extends Element = Element> {
|
|
30
30
|
_active: boolean;
|
|
@@ -40,84 +40,72 @@ interface HoverState<El extends Element = Element> {
|
|
|
40
40
|
isHoverStart: boolean;
|
|
41
41
|
isHovering: boolean;
|
|
42
42
|
isHoverEnd: boolean;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
hover: (self: HoverState) => void;
|
|
44
|
+
hoverStart(e: Event): void;
|
|
45
|
+
hovering(e: Event): void;
|
|
46
|
+
hoverEnd(e: Event): void;
|
|
47
|
+
mount(target: El): void;
|
|
48
|
+
clean(target?: El): void;
|
|
49
49
|
ref(target: El | null): void;
|
|
50
50
|
}
|
|
51
|
-
declare type HoverArg<El extends Element = Element> = Partial<HoverState<El>> | HoverState<El>['
|
|
51
|
+
declare type HoverArg<El extends Element = Element> = Partial<HoverState<El>> | HoverState<El>['hover'];
|
|
52
52
|
|
|
53
53
|
interface KeyState<El extends Element = Element> {
|
|
54
54
|
target: El | Window;
|
|
55
|
-
|
|
55
|
+
pressedKey: string;
|
|
56
56
|
code: string;
|
|
57
57
|
event: KeyboardEvent;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
key(e: KeyState): void;
|
|
59
|
+
keydown(e: KeyboardEvent): void;
|
|
60
|
+
mount(el: El): void;
|
|
61
|
+
clean(): void;
|
|
62
62
|
ref(el: Element | null): void;
|
|
63
63
|
}
|
|
64
|
-
declare type KeyArg<El extends Element = Element> = Partial<KeyState<El>> | KeyState<El>['
|
|
64
|
+
declare type KeyArg<El extends Element = Element> = Partial<KeyState<El>> | KeyState<El>['key'];
|
|
65
65
|
|
|
66
66
|
interface ResizeState<El extends Element = Element> {
|
|
67
67
|
observer: ResizeObserver | null;
|
|
68
68
|
listener(): void;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
mount(el: El): void;
|
|
70
|
+
clean(el: null): void;
|
|
71
|
+
resize(self: ResizeState<El>): void;
|
|
72
72
|
ref(target: El): void;
|
|
73
73
|
}
|
|
74
|
-
declare type ResizeArg<El extends Element = Element> = Partial<ResizeState<El>> | ResizeState<El>['
|
|
74
|
+
declare type ResizeArg<El extends Element = Element> = Partial<ResizeState<El>> | ResizeState<El>['resize'];
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
declare type PinchDevice = 'mouse' | 'pointer' | 'touch' | 'wheel' | 'gesture';
|
|
77
|
+
interface PinchState<El extends Element = Element> {
|
|
78
|
+
device: PinchDevice;
|
|
78
79
|
active: boolean;
|
|
79
|
-
|
|
80
|
+
_active: boolean;
|
|
80
81
|
value: Vec2;
|
|
82
|
+
_value: Vec2;
|
|
81
83
|
delta: Vec2;
|
|
82
84
|
offset: Vec2;
|
|
83
85
|
movement: Vec2;
|
|
86
|
+
initial: Vec2;
|
|
87
|
+
origin: Vec2;
|
|
88
|
+
_touchIds: number[];
|
|
89
|
+
_pointerEvents: Map<number, PointerEvent>;
|
|
90
|
+
scale: number;
|
|
91
|
+
turns: number;
|
|
84
92
|
target: El;
|
|
85
|
-
event: Event;
|
|
93
|
+
event: Event | null;
|
|
94
|
+
memo: Record<string, unknown>;
|
|
86
95
|
timeout: number;
|
|
87
|
-
clearTimeout()
|
|
88
|
-
memo: any;
|
|
89
|
-
isWheelStart: boolean;
|
|
90
|
-
isWheeling: boolean;
|
|
91
|
-
isWheelEnd: boolean;
|
|
92
|
-
onWheel(self: WheelState<El>): void;
|
|
93
|
-
onWheelStart(e: Event): void;
|
|
94
|
-
onWheeling(e: Event): void;
|
|
95
|
-
onWheelEnd(e: Event): void;
|
|
96
|
-
onMount(target: Element): void;
|
|
97
|
-
onClean(target: null): void;
|
|
98
|
-
ref(traget: Element | null): void;
|
|
99
|
-
tick?: () => void;
|
|
100
|
-
}
|
|
101
|
-
declare type WheelConfig<El extends Element = Element> = Partial<WheelState<El>> | WheelState<El>['onWheel'];
|
|
102
|
-
|
|
103
|
-
declare type PinchDevice = 'mouse' | 'pointer' | 'touch' | 'wheel' | 'gesture';
|
|
104
|
-
interface PinchState<El extends Element = Element> extends WheelState<El> {
|
|
105
|
-
device: PinchDevice;
|
|
106
|
-
_rotate: number;
|
|
107
|
-
rotate: number;
|
|
108
|
-
_size: number;
|
|
109
|
-
size: number;
|
|
110
|
-
_scale: Vec2;
|
|
111
|
-
scale: Vec2;
|
|
96
|
+
clearTimeout: () => void;
|
|
112
97
|
isPinchStart: boolean;
|
|
113
98
|
isPinching: boolean;
|
|
114
99
|
isPinchEnd: boolean;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
100
|
+
pinch: (self: PinchState<El>) => void;
|
|
101
|
+
pinchStart: (e: Event) => void;
|
|
102
|
+
pinching: (e: Event) => void;
|
|
103
|
+
pinchEnd: (e: Event) => void;
|
|
104
|
+
mount: (target: El) => void;
|
|
105
|
+
clean: () => void;
|
|
106
|
+
ref: (el: El | null) => void;
|
|
119
107
|
}
|
|
120
|
-
declare type PinchArg<El extends Element = Element> = Partial<PinchState<El>> | PinchState<El>['
|
|
108
|
+
declare type PinchArg<El extends Element = Element> = Partial<PinchState<El>> | PinchState<El>['pinch'];
|
|
121
109
|
|
|
122
110
|
interface ScrollState<El extends Element = Element> {
|
|
123
111
|
_active: boolean;
|
|
@@ -135,15 +123,42 @@ interface ScrollState<El extends Element = Element> {
|
|
|
135
123
|
isScrollEnd: boolean;
|
|
136
124
|
timeout: number;
|
|
137
125
|
clearTimeout(): void;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
126
|
+
scroll(self: ScrollState<El>): void;
|
|
127
|
+
scrollStart(e: Event): void;
|
|
128
|
+
scrolling(e: Event): void;
|
|
129
|
+
scrollEnd(e: Event): void;
|
|
130
|
+
mount(target: Element): void;
|
|
131
|
+
clean(target: null): void;
|
|
144
132
|
ref(traget: Element): void;
|
|
145
133
|
tick?: () => void;
|
|
146
134
|
}
|
|
147
|
-
declare type ScrollConfig<El extends Element = Element> = Partial<ScrollState<El>> | ScrollState<El>['
|
|
135
|
+
declare type ScrollConfig<El extends Element = Element> = Partial<ScrollState<El>> | ScrollState<El>['scroll'];
|
|
136
|
+
|
|
137
|
+
interface WheelState<El extends Element = Element> {
|
|
138
|
+
_active: boolean;
|
|
139
|
+
active: boolean;
|
|
140
|
+
_value: Vec2;
|
|
141
|
+
value: Vec2;
|
|
142
|
+
delta: Vec2;
|
|
143
|
+
offset: Vec2;
|
|
144
|
+
movement: Vec2;
|
|
145
|
+
target: El;
|
|
146
|
+
event: Event;
|
|
147
|
+
timeout: number;
|
|
148
|
+
clearTimeout(): void;
|
|
149
|
+
memo: any;
|
|
150
|
+
isWheelStart: boolean;
|
|
151
|
+
isWheeling: boolean;
|
|
152
|
+
isWheelEnd: boolean;
|
|
153
|
+
wheel(self: WheelState<El>): void;
|
|
154
|
+
wheelStart(e: Event): void;
|
|
155
|
+
wheeling(e: Event): void;
|
|
156
|
+
wheelEnd(e: Event): void;
|
|
157
|
+
mount(target: Element): void;
|
|
158
|
+
clean(target: null): void;
|
|
159
|
+
ref(traget: Element | null): void;
|
|
160
|
+
tick?: () => void;
|
|
161
|
+
}
|
|
162
|
+
declare type WheelConfig<El extends Element = Element> = Partial<WheelState<El>> | WheelState<El>['wheel'];
|
|
148
163
|
|
|
149
|
-
export { DragState as D, HoverState as H, KeyState as K, PinchState as P, ResizeState as R, ScrollState as S, WheelState as W,
|
|
164
|
+
export { DragState as D, HoverState as H, KeyState as K, PinchState as P, ResizeState as R, ScrollState as S, WheelState as W, DragDevice as a, DragArg as b, HoverArg as c, KeyArg as d, ResizeArg as e, PinchDevice as f, PinchArg as g, ScrollConfig as h, WheelConfig as i };
|