rege 0.2.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/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../react.ts","../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":["export * from './drag/react'\nexport * from './hover/react'\nexport * from './key/react'\nexport * from './pinch/react'\nexport * from './resize/react'\nexport * from './scroll/react'\nexport * from './wheel/react'\n","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":["react_exports","__export","Drag","Hover","Key","Pinch","Resize","Scroll","Wheel","useDrag","useHover","useKey","usePinch","useResize","useScroll","useWheel","__toCommonJS","import_react","import_reev","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","getDevice","useDrag","arg","isF","memo","dragEvent","Drag","props","children","other","useDrag","import_react","import_reev","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","getDevice","useHover","arg","isF","memo","hoverEvent","Hover","props","children","other","useHover","import_react","import_reev","keyEvent","state","self","e","el","useKey","arg","isF","memo","keyEvent","Key","props","children","other","import_react","pinchDevice","touch","SUPPORT","LINE_HEIGHT","PAGE_HEIGHT","wheelValues","event","out","vec2","deltaX","deltaY","deltaMode","import_reev","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","pinchEvent","Pinch","props","children","other","usePinch","import_reev","DELAY","resizeEvent","state","on","entry","self","target","register","id","entries","el","import_react","useResize","arg","isF","memo","resizeEvent","Resize","props","children","other","useResize","import_react","scrollValues","e","out","vec2","x","xx","y","yy","import_reev","scrollEvent","config","initValues","vec2","self","onScroll","onScrollStart","e","scrollValues","onScrolling","id","cpV","subV","addV","onScrollEnd","onMount","target","onClean","ref","el","useScroll","config","isF","memo","scrollEvent","Scroll","props","children","other","useScroll","import_react","useWheel","config","isF","memo","wheelEvent","Wheel","props","children","other","useWheel"]}
1
+ {"version":3,"sources":["../src/react.ts","../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":["export * from './drag/react'\nexport * from './hover/react'\nexport * from './key/react'\nexport * from './pinch/react'\nexport * from './resize/react'\nexport * from './scroll/react'\nexport * from './wheel/react'\n","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":"saAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,UAAAE,GAAA,UAAAC,GAAA,QAAAC,GAAA,UAAAC,GAAA,WAAAC,GAAA,WAAAC,GAAA,UAAAC,GAAA,YAAAC,EAAA,aAAAC,GAAA,WAAAC,GAAA,aAAAC,GAAA,cAAAC,GAAA,cAAAC,GAAA,aAAAC,KAAA,eAAAC,GAAAhB,ICAA,IAAAiB,EAAoC,0BCApC,IAAAC,EAAkC,oBCI3B,IAAMC,EAAOC,GAA8B,OAAOA,GAAM,WAEzDC,GAAM,OAAO,aAAiB,IAAc,aAAe,MAEpDC,EAAO,CAACC,EAAI,EAAGC,EAAI,EAAGC,EAAM,IAAIJ,GAAI,CAAC,KAC1CI,EAAI,CAAC,EAAIF,EACTE,EAAI,CAAC,EAAID,EACFC,GAKFC,EAAO,CAACC,EAASC,EAASH,EAAMH,EAAK,KAC1CG,EAAI,CAAC,EAAIE,EAAE,CAAC,EAAIC,EAAE,CAAC,EACnBH,EAAI,CAAC,EAAIE,EAAE,CAAC,EAAIC,EAAE,CAAC,EACZH,GAGFI,EAAO,CAACF,EAASC,EAASH,EAAMH,EAAK,KAC1CG,EAAI,CAAC,EAAIE,EAAE,CAAC,EAAIC,EAAE,CAAC,EACnBH,EAAI,CAAC,EAAIE,EAAE,CAAC,EAAIC,EAAE,CAAC,EACZH,GAGFK,EAAM,CAACH,EAASF,EAAMH,EAAK,KAChCG,EAAI,CAAC,EAAIE,EAAE,CAAC,EACZF,EAAI,CAAC,EAAIE,EAAE,CAAC,EACLF,GAMTM,EAAY,OAAO,OAAW,KAAe,CAAC,CAAC,OAAO,UAAY,CAAC,CAAC,OAAO,SAAS,cAEpFC,EAAsB,IAAMD,GAAa,iBAAkB,OAE3DE,GAAgB,IAAMD,EAAoB,GAAMD,GAAa,OAAO,UAAU,eAAiB,EAE/FG,GAAwB,IAAMH,GAAa,kBAAmB,OAE9DI,GAAsB,IAAMJ,GAAa,oBAAqB,OAAO,SAErEK,GAAwB,IAAM,CAC5B,GAAI,CAEI,MAAO,gBAAiB,YAChC,MAAY,CACJ,MAAO,EACf,CACR,EAGaC,EAAmC,CACxC,UAAAN,EACA,IAAI,SAAU,CACN,OACQM,EAAQ,WACPA,EAAQ,SAAWD,GAAsB,EAE1D,EACA,IAAI,OAAQ,CACJ,OACQC,EAAQ,SACPA,EAAQ,OAASL,EAAoB,EAEtD,EACA,IAAI,aAAc,CACV,OACQK,EAAQ,eACPA,EAAQ,aAAeJ,GAAc,EAEtD,EACA,IAAI,SAAU,CACN,OACQI,EAAQ,WACPA,EAAQ,SAAWH,GAAsB,EAE1D,EACA,IAAI,aAAc,CACV,OACQG,EAAQ,eACPA,EAAQ,aAAeF,GAAoB,EAE5D,CACR,EAKaG,EAAY,CAACC,EAAO,KACLA,GAAQF,EAAQ,YACZ,QACpBA,EAAQ,MAAc,QACtBA,EAAQ,QAAgB,UACrB,QAGFG,EAAgB,CAACC,EAAQC,EAAiBjB,IAAoB,CACnE,GAAIiB,IAAW,QACP,OAAOpB,EAAKmB,EAAE,QAASA,EAAE,QAAShB,CAAG,EAE7C,GAAM,CAACkB,CAAK,EAAIF,EAAE,eAClB,OAAOnB,EAAKqB,EAAM,QAASA,EAAM,QAASlB,CAAG,CACrD,EDtGO,IAAMmB,EAAiB,CACtB,MAAO,CACC,MAAO,aACP,KAAM,YACN,IAAK,WACL,GAAI,aACZ,EACA,QAAS,CACD,MAAO,cACP,KAAM,cACN,IAAK,YACL,GAAI,eACZ,EACA,MAAO,CACC,MAAO,YACP,KAAM,YACN,IAAK,UACL,GAAI,aACZ,CACR,EAEaC,EAAY,CAA+BC,EAAgC,CAAC,IAAM,CACvF,IAAMC,EAAa,IAAM,CACjBC,EAAK,EAAG,EAAGC,EAAK,KAAK,EACrBD,EAAK,EAAG,EAAGC,EAAK,MAAM,EACtBD,EAAK,EAAG,EAAGC,EAAK,KAAK,EACrBD,EAAK,EAAG,EAAGC,EAAK,QAAQ,CAChC,EAEMC,EAAO,IAAM,CACXD,EAAK,YAAcA,EAAK,QAAU,CAACA,EAAK,QACxCA,EAAK,WAAaA,EAAK,QAAUA,EAAK,QACtCA,EAAK,UAAY,CAACA,EAAK,QAAUA,EAAK,OAC9C,EAEME,EAAaC,GAAa,CACxBH,EAAK,MAAQG,EACbH,EAAK,OAAS,GACdI,EAAcD,EAAGH,EAAK,OAAQA,EAAK,KAAK,EACpCA,EAAK,OAAO,mBAAqB,cAAeG,GAE5CH,EAAK,OAAO,kBAAkBG,EAAE,SAAS,EACjDH,EAAK,KAAKA,CAAI,CACtB,EAEMK,EAAYF,GAAa,CACvBH,EAAK,MAAQG,EACbH,EAAK,QAAUA,EAAK,OACpBM,EAAIN,EAAK,MAAOA,EAAK,MAAM,EAC3BI,EAAcD,EAAGH,EAAK,OAAQA,EAAK,KAAK,EACpCA,EAAK,UACDO,EAAKP,EAAK,MAAOA,EAAK,OAAQA,EAAK,KAAK,EACxCQ,EAAKR,EAAK,OAAQA,EAAK,MAAOA,EAAK,MAAM,EACzCQ,EAAKR,EAAK,SAAUA,EAAK,MAAOA,EAAK,QAAQ,GAErDA,EAAK,KAAKA,CAAI,CACtB,EAEMS,EAAWN,GAAa,CACtBH,EAAK,MAAQG,EACbH,EAAK,OAAS,GACdF,EAAW,EACPE,EAAK,OAAO,uBAAyB,cAAeG,GAEhDH,EAAK,OAAO,sBAAsBG,EAAE,SAAS,EACrDH,EAAK,KAAKA,CAAI,CACtB,EAEMU,EAASC,GAAe,CACtBX,EAAK,OAASW,EACd,GAAM,CAAE,MAAAC,EAAO,KAAAC,EAAM,IAAAC,EAAK,GAAAC,CAAG,EAAIpB,EAAeK,EAAK,MAAM,EAC3DW,EAAO,iBAAiBC,EAAOZ,EAAK,SAAS,EAC7CW,EAAO,iBAAiBE,EAAMb,EAAK,QAAQ,EAC3CW,EAAO,iBAAiBG,EAAKd,EAAK,OAAO,EACzCW,EAAO,iBAAiBI,EAAIf,EAAK,OAAO,CAChD,EAEMgB,EAAQ,IAAM,CACZ,IAAML,EAASX,EAAK,OACpB,GAAI,CAACW,EAAQ,OACb,GAAM,CAAE,MAAAC,EAAO,KAAAC,EAAM,IAAAC,EAAK,GAAAC,CAAG,EAAIpB,EAAeK,EAAK,MAAM,EAC3DW,EAAO,oBAAoBC,EAAOZ,EAAK,SAAS,EAChDW,EAAO,oBAAoBE,EAAMb,EAAK,QAAQ,EAC9CW,EAAO,oBAAoBG,EAAKd,EAAK,OAAO,EAC5CW,EAAO,oBAAoBI,EAAIf,EAAK,OAAO,CACnD,EAEMiB,EAAOC,GAAW,CAChBlB,EAAKH,CAAsB,EACvBqB,EACIlB,EAAK,MAAMkB,CAAE,EACdlB,EAAK,MAAM,CAC1B,EAEMA,KAAO,SAAM,CACX,QAAS,GACT,OAAQ,GACR,OAAQmB,EAAU,EAClB,OAAQpB,EAAK,EAAG,CAAC,EACjB,MAAOA,EAAK,EAAG,CAAC,EAChB,MAAOA,EAAK,EAAG,CAAC,EAChB,OAAQA,EAAK,EAAG,CAAC,EACjB,SAAUA,EAAK,EAAG,CAAC,EACnB,OAAQ,KACR,MAAO,KACP,KAAM,CAAC,EACP,YAAa,GACb,WAAY,GACZ,UAAW,GACX,KAAAE,EACA,UAAAC,EACA,SAAAG,EACA,QAAAI,EACA,MAAAC,EACA,MAAAM,EACA,IAAAC,CACR,CAAC,EAED,OAAOjB,CACf,EDvHO,IAAMoB,EAAyCC,GAAqB,CAC/DC,EAAID,CAAG,IAAGA,EAAM,CAAE,KAAMA,CAAI,GAChC,IAAME,KAAO,cAAWF,CAAG,EAC3B,SAAO,WAAQ,IAAMG,EAAcD,CAAW,CAAC,CACvD,EAQO,IAAME,GAAsCC,GAAyB,CACpE,GAAM,CAAE,SAAAC,EAAU,GAAGC,CAAM,EAAIF,EAC/B,OAAOC,EAASE,EAAQD,CAAK,CAAC,CACtC,EGrBA,IAAAE,EAAoC,0BCCpC,IAAAC,EAAkC,oBAK3B,IAAMC,EAAkB,CACvB,MAAO,CACC,MAAO,aACP,KAAM,YACN,IAAK,WACL,GAAI,aACZ,EACA,QAAS,CACD,MAAO,eACP,KAAM,cACN,IAAK,eACL,GAAI,eACZ,EACA,MAAO,CACC,MAAO,aACP,KAAM,YACN,IAAK,aACL,GAAI,aACZ,CACR,EAEaC,EAAa,CAA+BC,EAAiC,CAAC,IAAM,CACzF,IAAMC,EAAa,IAAM,CACjBC,EAAK,EAAG,EAAGC,EAAK,KAAK,EACrBD,EAAK,EAAG,EAAGC,EAAK,MAAM,EACtBD,EAAK,EAAG,EAAGC,EAAK,KAAK,EACrBD,EAAK,EAAG,EAAGC,EAAK,QAAQ,CAChC,EAEMC,EAAQ,IAAM,CACZD,EAAK,aAAe,CAACA,EAAK,SAAWA,EAAK,OAC1CA,EAAK,WAAaA,EAAK,SAAWA,EAAK,OACvCA,EAAK,WAAaA,EAAK,SAAW,CAACA,EAAK,MAChD,EAEME,EAAcC,GAAa,CACzBH,EAAK,MAAQG,EACbH,EAAK,OAAS,GACdI,EAAcD,EAAGH,EAAK,OAAQA,EAAK,KAAK,EACxCA,EAAK,MAAMA,CAAI,CACvB,EAEMK,EAAYF,GAAa,CACvBH,EAAK,MAAQG,EACbH,EAAK,QAAUA,EAAK,OACpBM,EAAIN,EAAK,MAAOA,EAAK,MAAM,EAC3BI,EAAcD,EAAGH,EAAK,OAAQA,EAAK,KAAK,EACpCA,EAAK,UACDO,EAAKP,EAAK,MAAOA,EAAK,OAAQA,EAAK,KAAK,EACxCQ,EAAKR,EAAK,OAAQA,EAAK,MAAOA,EAAK,MAAM,EACzCQ,EAAKR,EAAK,SAAUA,EAAK,MAAOA,EAAK,QAAQ,GAErDA,EAAK,MAAMA,CAAI,CACvB,EAEMS,EAAYN,GAAa,CACvBH,EAAK,MAAQG,EACbH,EAAK,QAAU,GACfA,EAAK,OAAS,GACdF,EAAW,EACXE,EAAK,MAAMA,CAAI,CACvB,EAEMU,EAASC,GAAe,CACtBX,EAAK,OAASW,EACd,GAAM,CAAE,MAAAC,EAAO,KAAAC,EAAM,IAAAC,EAAK,GAAAC,CAAG,EAAIpB,EAAgBK,EAAK,MAAM,EAC5DW,EAAO,iBAAiBC,EAAOZ,EAAK,UAAU,EAC9CW,EAAO,iBAAiBE,EAAMb,EAAK,QAAQ,EAC3CW,EAAO,iBAAiBG,EAAKd,EAAK,QAAQ,EAC1CW,EAAO,iBAAiBI,EAAIf,EAAK,QAAQ,CACjD,EAEMgB,EAAQ,IAAM,CACZ,IAAML,EAASX,EAAK,OACpB,GAAI,CAACW,EAAQ,OACb,GAAM,CAAE,MAAAC,EAAO,KAAAC,EAAM,IAAAC,EAAK,GAAAC,CAAG,EAAIpB,EAAgBK,EAAK,MAAM,EAC5DW,EAAO,oBAAoBC,EAAOZ,EAAK,UAAU,EACjDW,EAAO,oBAAoBE,EAAMb,EAAK,QAAQ,EAC9CW,EAAO,oBAAoBG,EAAKd,EAAK,QAAQ,EAC7CW,EAAO,oBAAoBI,EAAIf,EAAK,QAAQ,CACpD,EAEMiB,EAAON,GAAsB,CAC3BX,EAAKH,CAAuB,EACxBc,EACIX,EAAK,MAAMW,CAAM,EAClBX,EAAK,MAAM,CAC1B,EAEMA,KAAO,SAAM,CACX,QAAS,GACT,OAAQ,GACR,OAAQkB,EAAU,EAClB,OAAQnB,EAAK,EAAG,CAAC,EACjB,MAAOA,EAAK,EAAG,CAAC,EAChB,MAAOA,EAAK,EAAG,CAAC,EAChB,OAAQA,EAAK,EAAG,CAAC,EACjB,SAAUA,EAAK,EAAG,CAAC,EACnB,OAAQ,KACR,MAAO,KACP,KAAM,CAAC,EACP,aAAc,GACd,WAAY,GACZ,WAAY,GACZ,MAAAE,EACA,WAAAC,EACA,SAAAG,EACA,SAAAI,EACA,MAAAC,EACA,MAAAM,EACA,IAAAC,CACR,CAAC,EAED,OAAOjB,CACf,EDlHO,IAAMmB,GAA0CC,GAAmB,CAC9DC,EAAID,CAAG,IAAGA,EAAM,CAAE,MAAOA,CAAI,GACjC,IAAME,KAAO,cAAWF,CAAG,EAC3B,SAAO,WAAQ,IAAMG,EAAeD,CAAW,CAAC,CACxD,EAQO,IAAME,GAASC,GAAsB,CACpC,GAAM,CAAE,SAAAC,EAAU,GAAGC,CAAM,EAAIF,EAC/B,OAAOC,EAASE,GAASD,CAAK,CAAC,CACvC,EErBA,IAAAE,EAAoC,0BCApC,IAAAC,GAAsB,oBAKTC,GAAW,CAA+BC,EAA+B,CAAC,IAAM,CA6BrF,IAAMC,KAAO,UAAoB,CAAE,QA5BlBC,GAAqB,CAC9BD,EAAK,MAAQC,EACbD,EAAK,WAAaC,EAAE,IACpBD,EAAK,KAAOC,EAAE,KACdD,EAAK,MAAMA,CAAI,CACvB,EAuB4C,MArB7BE,GAAoB,CACtBA,IAAIA,EAAKA,GAAM,QACpBF,EAAK,OAASE,EAGdA,EAAG,aAAa,WAAY,GAAG,EAC/BA,EAAG,iBAAiB,UAAWF,EAAK,OAAO,CACnD,EAcmD,MAZrC,IAAM,CACZ,IAAME,EAAKF,EAAK,OACXE,GACLA,EAAG,oBAAoB,UAAWF,EAAK,OAAO,CACtD,EAQ0D,IAN7CE,GAAuB,CAC5BF,EAAKD,CAAK,EACNG,EAAIF,EAAK,MAAME,CAAQ,EACtBF,EAAK,MAAM,CACxB,CAE8D,CAAC,EAC/D,OAAOA,CACf,ED9BO,IAAMG,GAAwCC,GAAoB,CAC7DC,EAAID,CAAG,IAAGA,EAAM,CAAE,IAAKA,CAAI,GAC/B,IAAME,KAAO,cAAWF,CAAG,EAC3B,SAAO,WAAQ,IAAMG,GAAaD,CAAW,CAAC,CACtD,EAMaE,GAAqCC,GAAwB,CAClE,GAAM,CAAE,SAAAC,EAAU,GAAGC,CAAM,EAAIF,EAC/B,OAAOC,EAASP,GAAOQ,CAAK,CAAC,CACrC,EEnBA,IAAAC,EAAoC,0BCApC,IAAAC,GAAkC,oBCM3B,IAAMC,GAAc,CAACC,EAAQ,KAAU,CACtC,GAAI,CAACC,EAAQ,OAASA,EAAQ,QAAS,MAAO,UAC9C,GAAIA,EAAQ,OAASD,EAAO,MAAO,QACnC,GAAIC,EAAQ,YAAa,CACjB,GAAIA,EAAQ,QAAS,MAAO,UAC5B,GAAIA,EAAQ,MAAO,MAAO,OAClC,CACA,MAAO,OACf,EAMMC,GAAc,GACdC,GAAc,IACdC,GAAoB,IAYbC,GAAgB,CAACC,EAA0BC,IAAmD,CACnG,GAAI,CACI,IAAMC,EAAKD,EAAG,QAAUD,EAAG,QACrBG,EAAKF,EAAG,QAAUD,EAAG,QACrBI,GAAMH,EAAG,QAAUD,EAAG,SAAW,EACjCK,GAAMJ,EAAG,QAAUD,EAAG,SAAW,EAEjCM,EAAW,KAAK,MAAMJ,EAAIC,CAAE,EAE5BI,EAAQ,EAAE,KAAK,MAAML,EAAIC,CAAE,EAAI,KAAO,KAAK,GAC3CK,EAASC,EAAKL,EAAIC,CAAE,EAE1B,MAAO,CAAE,SAAAC,EAAU,MAAAC,EAAO,OAAAC,CAAO,CACzC,MAAQ,CACA,OAAO,IACf,CACR,EAKaE,EAAqB,CAACC,EAAmBC,IAAwC,CACtF,IAAMC,EAAU,MAAM,KAAKF,EAAM,OAAO,EAAE,OAAQjB,GAAUkB,EAAI,SAASlB,EAAM,UAAU,CAAC,EAC1F,OAAImB,EAAQ,OAAS,EAAU,KACxBd,GAAcc,EAAQ,CAAC,EAAGA,EAAQ,CAAC,CAAC,CACnD,EAKaC,EAAwBC,GAAmE,CAChG,IAAMC,EAAW,MAAM,KAAKD,EAAc,OAAO,CAAC,EAClD,OAAIC,EAAS,OAAS,EAAU,KACzBjB,GAAciB,EAAS,CAAC,EAAGA,EAAS,CAAC,CAAC,CACrD,EAKaC,GAA4BN,GAC1B,MAAM,KAAKA,EAAM,OAAO,EACtB,OAAQjB,GAAUA,EAAM,SAAWiB,EAAM,eAAkBA,EAAM,eAAwB,WAAWjB,EAAM,MAAc,CAAC,EACzH,IAAKA,GAAUA,EAAM,UAAU,EAOnCwB,EAAkB,CAACP,EAAmBQ,IAAiC,CAC5E,GAAI,CAAE,OAAAC,EAAQ,UAAAC,CAAU,EAAIV,EAG5B,OAAIU,IAAc,EACVD,GAAUxB,GACPyB,IAAc,IACjBD,GAAUvB,IAIV,CAACuB,EAAStB,GAAqBqB,CAC/C,EDxFO,IAAMG,EAAkB,CACvB,MAAO,CACC,MAAO,aACP,KAAM,YACN,IAAK,WACL,OAAQ,aAChB,EACA,QAAS,CACD,MAAO,cACP,KAAM,cACN,IAAK,YACL,OAAQ,eAChB,EACA,QAAS,CACD,MAAO,eACP,OAAQ,gBACR,IAAK,YACb,CACR,EAEaC,GAAa,CAA+BC,EAAkC,CAAC,IAAM,CAC1F,IAAMC,EAAa,IAAM,CACjBC,EAAK,EAAG,EAAGC,EAAK,KAAK,EACrBD,EAAK,EAAG,EAAGC,EAAK,MAAM,EACtBD,EAAK,EAAG,EAAGC,EAAK,KAAK,EACrBD,EAAK,EAAG,EAAGC,EAAK,QAAQ,CAChC,EAEMC,EAAQ,IAAM,CACZD,EAAK,aAAeA,EAAK,QAAU,CAACA,EAAK,QACzCA,EAAK,WAAaA,EAAK,QAAUA,EAAK,QACtCA,EAAK,WAAa,CAACA,EAAK,QAAUA,EAAK,OAC/C,EAIME,EAAa,CAACC,EAAUC,IAA2B,CACjDJ,EAAK,MAAQG,EACbH,EAAK,OAAS,GAGdD,EAAKK,EAAQ,SAAUA,EAAQ,MAAOJ,EAAK,KAAK,EAChDD,EAAKK,EAAQ,SAAUA,EAAQ,MAAOJ,EAAK,OAAO,EAClDK,EAAID,EAAQ,OAAQJ,EAAK,MAAM,EAE/BA,EAAK,MAAQ,EACbA,EAAK,MAAQ,EAEbA,EAAK,MAAMA,CAAI,CACvB,EAEMM,EAAW,CAACH,EAAUC,IAA2B,CAC/C,GAAI,CAACJ,EAAK,OAAQ,OAElBA,EAAK,MAAQG,EACbH,EAAK,QAAUA,EAAK,OAGpBK,EAAIL,EAAK,MAAOA,EAAK,MAAM,EAG3B,IAAMO,EAAYP,EAAK,OAAO,CAAC,EAC3BQ,EAAWJ,EAAQ,MAGjBK,EAAaD,EAAWD,EAC1B,KAAK,IAAIE,CAAU,EAAI,MACnBT,EAAK,OAAS,KAAK,KAAKS,CAAU,EAClCD,GAAY,IAAM,KAAK,KAAKC,CAAU,GAG9CV,EAAKK,EAAQ,SAAUI,EAAUR,EAAK,KAAK,EAC3CK,EAAID,EAAQ,OAAQJ,EAAK,MAAM,EAI/B,IAAMU,GAAaV,EAAK,MAAM,CAAC,EAAIA,EAAK,QAAQ,CAAC,EAAI,EAC/CW,GAAaX,EAAK,MAAM,CAAC,EAAIA,EAAK,QAAQ,CAAC,EACjDD,EAAKW,GAAYC,GAAYX,EAAK,QAAQ,EAG1CY,EAAKZ,EAAK,MAAOA,EAAK,OAAQA,EAAK,KAAK,EAExCA,EAAK,MAAM,CAAC,EAAIA,EAAK,OAAO,CAAC,IAAM,EAAIA,EAAK,MAAM,CAAC,EAAIA,EAAK,OAAO,CAAC,EAAI,EAAI,EAG5Ea,EAAKb,EAAK,OAAQA,EAAK,MAAOA,EAAK,MAAM,EAGzCA,EAAK,MAAQA,EAAK,QAAQ,CAAC,IAAM,EAAIA,EAAK,MAAM,CAAC,EAAIA,EAAK,QAAQ,CAAC,EAAI,EAEvEA,EAAK,MAAMA,CAAI,CACvB,EAEMc,EAAYX,GAAa,CACvBH,EAAK,MAAQG,EACbH,EAAK,QAAU,GACfA,EAAK,OAAS,GACdF,EAAW,EACXE,EAAK,MAAMA,CAAI,CACvB,EAIMe,EAAcZ,GAAkB,CAC9B,IAAMa,EAAWC,GAAyBd,CAAC,EAO3C,GALIH,EAAK,QAEGA,EAAK,UAAU,MAAOkB,GAAOF,EAAS,SAASE,CAAE,CAAC,GAG1DF,EAAS,OAAS,EAAG,OAGzBhB,EAAK,UAAYgB,EAAS,MAAM,EAAG,CAAC,EAEpC,IAAMZ,EAAUe,EAAmBhB,EAAGH,EAAK,SAAS,EAC/CI,GAELF,EAAWC,EAAGC,CAAO,CAC7B,EAEMgB,EAAajB,GAAkB,CAC7B,GAAI,CAACH,EAAK,OAAQ,OAElB,IAAMI,EAAUe,EAAmBhB,EAAGH,EAAK,SAAS,EAC/CI,GAELE,EAASH,EAAGC,CAAO,CAC3B,EAEMiB,EAAYlB,GAAkB,CAC5B,GAAI,CAACH,EAAK,OAAQ,OAGlB,IAAMsB,EAAkB,MAAM,KAAKnB,EAAE,OAAO,EAAE,IAAKoB,GAAMA,EAAE,UAAU,EACjEvB,EAAK,UAAU,KAAMkB,GAAO,CAACI,EAAgB,SAASJ,CAAE,CAAC,GACrDJ,EAASX,CAAC,CAE1B,EAIMqB,EAAgBrB,GAAoB,CAElC,GAAIA,EAAE,SAAW,MAAQA,EAAE,QAAU,IAAM,EAAG,OAE9C,IAAMsB,EAAiBzB,EAAK,eAE5B,GAAIA,EAAK,QAEG,MAAM,KAAKyB,EAAe,KAAK,CAAC,EAAE,MAAOP,GAAOlB,EAAK,eAAe,IAAIkB,CAAE,CAAC,EAAG,OAI1F,GAAI,CACMf,EAAE,OAAuB,kBAAkBA,EAAE,SAAS,CAChE,MAAQ,CAAC,CAMT,GAJIsB,EAAe,KAAO,GAClBA,EAAe,IAAItB,EAAE,UAAWA,CAAC,EAGrCsB,EAAe,KAAO,EAAG,OAE7B,IAAMrB,EAAUsB,EAAqBD,CAAc,EAC9CrB,GAELF,EAAWC,EAAGC,CAAO,CAC7B,EAEMuB,EAAexB,GAAoB,CACjC,IAAMsB,EAAiBzB,EAAK,eAM5B,GAJIyB,EAAe,IAAItB,EAAE,SAAS,GAC1BsB,EAAe,IAAItB,EAAE,UAAWA,CAAC,EAGrC,CAACH,EAAK,OAAQ,OAElB,IAAMI,EAAUsB,EAAqBD,CAAc,EAC9CrB,GAELE,EAASH,EAAGC,CAAO,CAC3B,EAEMwB,EAAczB,GAAoB,CAChC,GAAI,CACMA,EAAE,OAAuB,sBAAsBA,EAAE,SAAS,CACpE,MAAQ,CAAC,CAET,IAAMsB,EAAiBzB,EAAK,eAExByB,EAAe,IAAItB,EAAE,SAAS,GAC1BsB,EAAe,OAAOtB,EAAE,SAAS,EAGpCH,EAAK,QAENyB,EAAe,KAAO,GAClBX,EAASX,CAAC,CAE1B,EAIM0B,EAAgB1B,GAAa,CAC3B,IAAM2B,EAAK3B,EACPA,EAAE,YAAYA,EAAE,eAAe,EAE/B,CAAAH,EAAK,SAETA,EAAK,MAAQG,EACbH,EAAK,OAAS,GAGdD,EAAK+B,EAAG,MAAOA,EAAG,SAAU9B,EAAK,KAAK,EACtCD,EAAK+B,EAAG,MAAOA,EAAG,SAAU9B,EAAK,OAAO,EACxCD,EAAK+B,EAAG,QAASA,EAAG,QAAS9B,EAAK,MAAM,EAExCA,EAAK,MAAQ,EACbA,EAAK,MAAQ,EAEbA,EAAK,MAAMA,CAAI,EACvB,EAEM+B,EAAiB5B,GAAa,CAC5B,IAAM2B,EAAK3B,EACPA,EAAE,YAAYA,EAAE,eAAe,EAE9BH,EAAK,SAEVA,EAAK,MAAQG,EACbH,EAAK,QAAUA,EAAK,OAEpBK,EAAIL,EAAK,MAAOA,EAAK,MAAM,EAG3BD,EAAK+B,EAAG,MAAOA,EAAG,SAAU9B,EAAK,KAAK,EACtCD,EAAK+B,EAAG,QAASA,EAAG,QAAS9B,EAAK,MAAM,EAGxCD,EAAK+B,EAAG,MAAQ,EAAGA,EAAG,SAAU9B,EAAK,QAAQ,EAG7CY,EAAKZ,EAAK,MAAOA,EAAK,OAAQA,EAAK,KAAK,EAGxCa,EAAKb,EAAK,OAAQA,EAAK,MAAOA,EAAK,MAAM,EAEzCA,EAAK,MAAQ8B,EAAG,MAEhB9B,EAAK,MAAMA,CAAI,EACvB,EAEMgC,EAAc7B,GAAa,CACpBH,EAAK,QACVc,EAASX,CAAC,CAClB,EAIM8B,GAAc9B,GAAkB,CAC9BH,EAAK,MAAQG,EACbH,EAAK,OAAS,GAGdD,EAAK,EAAG,EAAGC,EAAK,KAAK,EACrBD,EAAK,EAAG,EAAGC,EAAK,OAAO,EACvBD,EAAKI,EAAE,QAASA,EAAE,QAASH,EAAK,MAAM,EAEtCA,EAAK,MAAQ,EACbA,EAAK,MAAQ,EAGb,IAAMkC,EAAaC,EAAgBhC,EAAGH,EAAK,OAAO,CAAC,EAAI,CAAC,EACxDA,EAAK,MAAM,CAAC,EAAIkC,EAChBlC,EAAK,MAAM,CAAC,EAAI,EAChBA,EAAK,MAAM,CAAC,GAAKkC,EACjBrB,EAAKb,EAAK,OAAQA,EAAK,MAAOA,EAAK,MAAM,EACzCD,EAAKC,EAAK,MAAM,CAAC,EAAI,EAAG,EAAGA,EAAK,QAAQ,EAExCA,EAAK,MAAQA,EAAK,MAAM,CAAC,EAEzBA,EAAK,MAAMA,CAAI,CACvB,EAEMoC,EAAYjC,GAAkB,CAE5B,IAAMe,EAAK,WAAW,IAAMmB,EAASlC,CAAC,EAAGH,EAAK,OAAO,EAIrD,GAHAA,EAAK,aAAa,EAClBA,EAAK,aAAe,IAAM,aAAakB,CAAE,EAErC,CAAClB,EAAK,OAAQ,CACViC,GAAW9B,CAAC,EACZ,MACR,CAEAH,EAAK,MAAQG,EACbH,EAAK,QAAUA,EAAK,OAEpBK,EAAIL,EAAK,MAAOA,EAAK,MAAM,EAC3BD,EAAKI,EAAE,QAASA,EAAE,QAASH,EAAK,MAAM,EAGtC,IAAMkC,EAAaC,EAAgBhC,EAAGH,EAAK,OAAO,CAAC,EAAI,CAAC,EACxDA,EAAK,MAAM,CAAC,EAAIkC,EAChBlC,EAAK,MAAM,CAAC,EAAI,EAEhBA,EAAK,MAAM,CAAC,GAAKkC,EACjBrB,EAAKb,EAAK,OAAQA,EAAK,MAAOA,EAAK,MAAM,EACzCD,EAAKC,EAAK,MAAM,CAAC,EAAI,EAAG,EAAGA,EAAK,QAAQ,EAExCA,EAAK,MAAQA,EAAK,MAAM,CAAC,EAEzBA,EAAK,MAAMA,CAAI,CACvB,EAEMqC,EAAYlC,GAAa,CAClBH,EAAK,SACVA,EAAK,MAAQG,EACbH,EAAK,QAAU,GACfA,EAAK,OAAS,GACdF,EAAW,EACXE,EAAK,MAAMA,CAAI,EACvB,EAIMsC,GAASC,GAAe,CACtBvC,EAAK,OAASuC,EACd,IAAMC,EAASxC,EAAK,OAEpB,GAAIwC,IAAW,QACPD,EAAO,iBAAiB,QAASH,EAA2B,CAAE,QAAS,EAAM,CAAC,UAC3EI,IAAW,UAAW,CACzB,IAAMC,EAAS9C,EAAgB,QAC/B4C,EAAO,iBAAiBE,EAAO,MAAOZ,CAAY,EAClDU,EAAO,iBAAiBE,EAAO,OAAQV,CAAa,EACpDQ,EAAO,iBAAiBE,EAAO,IAAKT,CAAU,CACtD,SAAWQ,IAAW,QAAS,CACvB,IAAMC,EAAS9C,EAAgB,MAC/B4C,EAAO,iBAAiBE,EAAO,MAAO1B,CAA2B,EACjEwB,EAAO,iBAAiBE,EAAO,KAAMrB,CAA0B,EAC/DmB,EAAO,iBAAiBE,EAAO,IAAKpB,CAAyB,EAC7DkB,EAAO,iBAAiBE,EAAO,OAAQpB,CAAyB,CACxE,SAAWmB,IAAW,UAAW,CACzB,IAAMC,EAAS9C,EAAgB,QAC/B4C,EAAO,iBAAiBE,EAAO,MAAOjB,CAA6B,EACnEe,EAAO,iBAAiBE,EAAO,KAAMd,CAA4B,EACjEY,EAAO,iBAAiBE,EAAO,IAAKb,CAA2B,EAC/DW,EAAO,iBAAiBE,EAAO,OAAQb,CAA2B,CAC1E,CACR,EAEMc,GAAQ,IAAM,CACZ,IAAMH,EAASvC,EAAK,OACpB,GAAI,CAACuC,EAAQ,OACb,IAAMC,EAASxC,EAAK,OAEpB,GAAIwC,IAAW,QACPD,EAAO,oBAAoB,QAASH,CAAyB,UAC1DI,IAAW,UAAW,CACzB,IAAMC,EAAS9C,EAAgB,QAC/B4C,EAAO,oBAAoBE,EAAO,MAAOZ,CAAY,EACrDU,EAAO,oBAAoBE,EAAO,OAAQV,CAAa,EACvDQ,EAAO,oBAAoBE,EAAO,IAAKT,CAAU,CACzD,SAAWQ,IAAW,QAAS,CACvB,IAAMC,EAAS9C,EAAgB,MAC/B4C,EAAO,oBAAoBE,EAAO,MAAO1B,CAA2B,EACpEwB,EAAO,oBAAoBE,EAAO,KAAMrB,CAA0B,EAClEmB,EAAO,oBAAoBE,EAAO,IAAKpB,CAAyB,EAChEkB,EAAO,oBAAoBE,EAAO,OAAQpB,CAAyB,CAC3E,SAAWmB,IAAW,UAAW,CACzB,IAAMC,EAAS9C,EAAgB,QAC/B4C,EAAO,oBAAoBE,EAAO,MAAOjB,CAA6B,EACtEe,EAAO,oBAAoBE,EAAO,KAAMd,CAA4B,EACpEY,EAAO,oBAAoBE,EAAO,IAAKb,CAA2B,EAClEW,EAAO,oBAAoBE,EAAO,OAAQb,CAA2B,CAC7E,CACR,EAEMe,GAAOC,GAAkB,CACvB5C,EAAKH,CAAwB,EACzB+C,EACI5C,EAAK,MAAM4C,CAAE,EACd5C,EAAK,MAAM,CAC1B,EAEMA,KAAO,UAAM,CACX,QAAS,GACT,OAAQ,GACR,OAAQ6C,GAAY,EACpB,OAAQ9C,EAAK,EAAG,CAAC,EACjB,MAAOA,EAAK,EAAG,CAAC,EAChB,MAAOA,EAAK,EAAG,CAAC,EAChB,OAAQA,EAAK,EAAG,CAAC,EACjB,SAAUA,EAAK,EAAG,CAAC,EACnB,QAASA,EAAK,EAAG,CAAC,EAClB,OAAQA,EAAK,EAAG,CAAC,EACjB,UAAW,CAAC,EACZ,eAAgB,IAAI,IACpB,MAAO,EACP,MAAO,EACP,OAAQ,KACR,MAAO,KACP,KAAM,CAAC,EACP,QAAS,IACT,aAAc,IAAM,CAAC,EACrB,aAAc,GACd,WAAY,GACZ,WAAY,GACZ,MAAAE,EACA,WAAaE,GAAa,CAEdH,EAAK,SAAW,QAASe,EAAWZ,CAAe,EAC9CH,EAAK,SAAW,UAAWwB,EAAarB,CAAiB,EACzDH,EAAK,SAAW,UAAW6B,EAAa1B,CAAC,EACzCH,EAAK,SAAW,SAASoC,EAASjC,CAAe,CAClE,EACA,SAAWA,GAAa,CACZH,EAAK,SAAW,QAASoB,EAAUjB,CAAe,EAC7CH,EAAK,SAAW,UAAW2B,EAAYxB,CAAiB,EACxDH,EAAK,SAAW,UAAW+B,EAAc5B,CAAC,EAC1CH,EAAK,SAAW,SAASoC,EAASjC,CAAe,CAClE,EACA,SAAWA,GAAa,CACZH,EAAK,SAAW,QAASqB,EAASlB,CAAe,EAC5CH,EAAK,SAAW,UAAW4B,EAAWzB,CAAiB,EACvDH,EAAK,SAAW,UAAWgC,EAAW7B,CAAC,EACvCH,EAAK,SAAW,SAASqC,EAASlC,CAAC,CACpD,EACA,MAAAmC,GACA,MAAAI,GACA,IAAAC,EACR,CAAC,EAED,OAAO3C,CACf,EDxbO,IAAM8C,GAA0CC,GAAmB,CAC9DC,EAAID,CAAG,IAAGA,EAAM,CAAE,MAAOA,CAAI,GACjC,IAAME,KAAO,cAAWF,CAAG,EAC3B,SAAO,WAAQ,IAAMG,GAAeD,CAAW,CAAC,CACxD,EAQO,IAAME,GAASC,GAAsB,CACpC,GAAM,CAAE,SAAAC,EAAU,GAAGC,CAAM,EAAIF,EAC/B,OAAOC,EAASE,GAASD,CAAK,CAAC,CACvC,EGrBA,IAAAE,GAAkC,oBAK5BC,GAAQ,IAIDC,GAA6CC,GAAuB,CACzE,IAAMC,EAA2BC,GAAU,IAAM,CAEjD,EA0BMC,KAAO,UAAM,CACX,SAAU,KACV,SAAU,IAAM,CAAC,EACjB,OAAQ,IAAM,CAAC,EACf,MA5BOC,GAAe,CACtB,IAAMC,EAAYH,GAA+B,CACzC,GAAIA,EAAM,SAAWE,EAAQ,OAC7B,IAAME,EAAK,WAAWL,EAAGC,CAAK,EAAGJ,EAAK,EACtCK,EAAK,SAAS,EACdA,EAAK,SAAW,IAAM,aAAaG,CAAE,CAC7C,EAEAH,EAAK,SAAW,IAAI,eAAgBI,GAAY,CACxCA,EAAQ,QAAQF,CAAQ,CAChC,CAAC,EAEDF,EAAK,SAAS,QAAQC,CAAM,CACpC,EAgBQ,MAdM,IAAM,CAAC,EAeb,IAbKI,GAAW,CAChBL,EAAKH,CAAK,EACNQ,EACIL,EAAK,MAAMK,CAAE,EACdL,EAAK,MAAM,IAAI,CAC9B,CASA,CAAC,EAED,OAAOA,CACf,EC/CA,IAAAM,EAAoC,0BAK7B,IAAMC,GAAaC,GAAmB,CACjCC,EAAID,CAAG,IAAGA,EAAM,CAAE,OAAQA,CAAI,GAClC,IAAME,KAAO,cAAWF,CAAG,EAC3B,SAAO,WAAQ,IAAMG,GAAYD,CAAW,CAAC,CACrD,EAQO,IAAME,GAAwCC,GAA2B,CACxE,GAAM,CAAE,SAAAC,EAAU,GAAGC,CAAM,EAAIF,EAC/B,OAAOC,EAASE,GAAUD,CAAK,CAAC,CACxC,ECrBA,IAAAE,EAAoC,0BCE7B,IAAMC,EAAe,CAACC,EAAQC,EAAMC,EAAK,IAAY,CACpD,GAAM,CAAE,QAASC,EAAG,WAAYC,CAAG,EAAIJ,EAAE,cACnC,CAAE,QAASK,EAAG,UAAWC,CAAG,EAAIN,EAAE,cACxC,OAAOE,EAAKC,GAAKC,GAAM,EAAGC,GAAKC,GAAM,EAAGL,CAAG,CACnD,ECJA,IAAAM,GAAkC,oBAKrBC,GAA6CC,GAAyB,CAC3E,IAAMC,EAAa,IAAM,CACjBC,EAAK,EAAG,EAAGC,EAAK,KAAK,EACrBD,EAAK,EAAG,EAAGC,EAAK,MAAM,EACtBD,EAAK,EAAG,EAAGC,EAAK,KAAK,EACrBD,EAAK,EAAG,EAAGC,EAAK,QAAQ,CAChC,EAEMC,EAAS,IAAM,CACbD,EAAK,cAAgBA,EAAK,QAAU,CAACA,EAAK,QAC1CA,EAAK,YAAcA,EAAK,QAAUA,EAAK,QACvCA,EAAK,YAAc,CAACA,EAAK,QAAUA,EAAK,OAChD,EAEME,EAAeC,GAAa,CAC1BH,EAAK,MAAQG,EACbH,EAAK,OAAS,GACdI,EAAaD,EAAGH,EAAK,KAAK,EAC1BA,EAAK,OAAOA,CAAI,CACxB,EAEMK,EAAaF,GAAa,CAExB,IAAMG,EAAK,WAAW,IAAMN,EAAK,UAAUG,CAAC,EAAGH,EAAK,OAAO,EAI3D,GAHAA,EAAK,aAAa,EAClBA,EAAK,aAAe,IAAM,aAAaM,CAAE,EAErC,CAACN,EAAK,OAAQ,CACVA,EAAK,YAAYG,CAAC,EAClB,MACR,CAEAH,EAAK,MAAQG,EACbH,EAAK,QAAUA,EAAK,OACpBO,EAAIP,EAAK,MAAOA,EAAK,MAAM,EAC3BI,EAAaD,EAAGH,EAAK,KAAK,EACtBA,EAAK,UACDQ,EAAKR,EAAK,MAAOA,EAAK,OAAQA,EAAK,KAAK,EACxCS,EAAKT,EAAK,OAAQA,EAAK,MAAOA,EAAK,MAAM,EACzCS,EAAKT,EAAK,SAAUA,EAAK,MAAOA,EAAK,QAAQ,GAErDA,EAAK,OAAOA,CAAI,CACxB,EAEMU,EAAaP,GAAa,CACxBH,EAAK,MAAQG,EACbH,EAAK,OAAS,GACdF,EAAW,EACXE,EAAK,OAAOA,CAAI,CACxB,EAEMW,EAASC,GAAe,CACtBZ,EAAK,OAASY,EACd,OAAO,iBAAiB,SAAUZ,EAAK,SAAS,CACxD,EAEMa,EAAQ,IAAM,CACZ,OAAO,oBAAoB,SAAUb,EAAK,SAAS,CAC3D,EAEMc,EAAOC,GAAuB,CAC5Bf,EAAKH,CAAyB,EAC1BkB,EACIf,EAAK,MAAMe,CAAE,EACdf,EAAK,MAAM,IAAI,CAC9B,EAEMA,KAAO,UAAM,CACX,OAAQ,GACR,QAAS,GACT,OAAQD,EAAK,EAAG,CAAC,EACjB,MAAOA,EAAK,EAAG,CAAC,EAChB,MAAOA,EAAK,EAAG,CAAC,EAChB,OAAQA,EAAK,EAAG,CAAC,EACjB,SAAUA,EAAK,EAAG,CAAC,EACnB,OAAQ,KACR,MAAO,KACP,KAAM,CAAC,EACP,QAAS,IACT,aAAc,IAAM,CAAC,EACrB,cAAe,GACf,YAAa,GACb,YAAa,GACb,OAAAE,EACA,YAAAC,EACA,UAAAG,EACA,UAAAK,EACA,MAAAC,EACA,MAAAE,EACA,IAAAC,CACR,CAAC,EAED,OAAOd,CACf,EF9FO,IAAMgB,GAA2CC,GAAyB,CACrEC,EAAID,CAAM,IAAGA,EAAS,CAAE,OAAQA,CAAO,GAC3C,IAAME,KAAO,cAAWF,CAAM,EAC9B,SAAO,WAAQ,IAAMG,GAAgBD,CAAW,CAAC,CACzD,EAQO,IAAME,GAAwCC,GAA2B,CACxE,GAAM,CAAE,SAAAC,EAAU,GAAGC,CAAM,EAAIF,EAC/B,OAAOC,EAASE,GAAUD,CAAK,CAAC,CACxC,EGrBA,IAAAE,EAAoC,0BCEpC,IAAMC,GAAc,GAEdC,GAAc,IAEPC,EAAc,CAACC,EAAcC,IAAoB,CACtD,GAAI,EAAED,aAAiB,YAAa,OAAOE,EAAK,EAAG,EAAGD,CAAG,EAEzD,GAAI,CAAE,OAAAE,EAAQ,OAAAC,EAAQ,UAAAC,CAAU,EAAIL,EACpC,OAAIK,IAAc,GACVF,GAAUN,GACVO,GAAUP,IACPQ,IAAc,IACjBF,GAAUL,GACVM,GAAUN,IAEXI,EAAKC,EAAQC,EAAQH,CAAG,CACvC,EChBA,IAAAK,GAAkC,oBAKrBC,GAA4CC,GAAwB,CACzE,IAAMC,EAAa,IAAM,CACjBC,EAAK,EAAG,EAAGC,EAAK,KAAK,EACrBD,EAAK,EAAG,EAAGC,EAAK,MAAM,EACtBD,EAAK,EAAG,EAAGC,EAAK,KAAK,EACrBD,EAAK,EAAG,EAAGC,EAAK,QAAQ,CAChC,EAEMC,EAAQ,IAAM,CACZD,EAAK,aAAeA,EAAK,QAAU,CAACA,EAAK,QACzCA,EAAK,WAAaA,EAAK,QAAUA,EAAK,QACtCA,EAAK,WAAa,CAACA,EAAK,QAAUA,EAAK,OAC/C,EACME,EAAcC,GAAkB,CAC9BH,EAAK,MAAQG,EACbH,EAAK,OAAS,GACdI,EAAYD,EAAGH,EAAK,KAAK,EACzBA,EAAK,MAAMA,CAAI,CACvB,EAEMK,EAAYF,GAAa,CAEvB,IAAMG,EAAK,WAAW,IAAMN,EAAK,SAASG,CAAC,EAAGH,EAAK,OAAO,EAI1D,GAHAA,EAAK,aAAa,EAClBA,EAAK,aAAe,IAAM,aAAaM,CAAE,EACzCN,EAAK,MAAQG,EACT,CAACH,EAAK,OAAQ,CACVA,EAAK,WAAWG,CAAC,EACjB,MACR,CAEAH,EAAK,QAAUA,EAAK,OACpBO,EAAIP,EAAK,MAAOA,EAAK,MAAM,EAC3BI,EAAYD,EAAGH,EAAK,KAAK,EACzBQ,EAAKR,EAAK,OAAQA,EAAK,MAAOA,EAAK,MAAM,EACzCQ,EAAKR,EAAK,SAAUA,EAAK,MAAOA,EAAK,QAAQ,EAC7CA,EAAK,MAAMA,CAAI,CACvB,EAEMS,EAAYN,GAAa,CACvBH,EAAK,MAAQG,EACbH,EAAK,OAAS,GACdF,EAAW,EACXE,EAAK,MAAMA,CAAI,CACvB,EAEMU,EAASC,GAAe,CACtBX,EAAK,OAASW,EACdA,EAAO,iBAAiB,QAASX,EAAK,QAAQ,CACtD,EAEMY,EAAQ,IAAM,CACZ,IAAMD,EAASX,EAAK,OACfW,GACLA,EAAO,oBAAoB,QAASX,EAAK,QAAQ,CACzD,EAEMa,EAAOC,GAAuB,CAC5Bd,EAAKH,CAAwB,EACzBiB,EACId,EAAK,MAAMc,CAAE,EACdd,EAAK,MAAM,IAAI,CAC9B,EAEMA,KAAO,UAAM,CACX,OAAQ,GACR,QAAS,GACT,OAAQD,EAAK,EAAG,CAAC,EACjB,MAAOA,EAAK,EAAG,CAAC,EAChB,MAAOA,EAAK,EAAG,CAAC,EAChB,OAAQA,EAAK,EAAG,CAAC,EACjB,SAAUA,EAAK,EAAG,CAAC,EACnB,OAAQ,KACR,MAAO,KACP,QAAS,IACT,aAAc,IAAM,CAAC,EACrB,KAAM,CAAC,EACP,aAAc,GACd,WAAY,GACZ,WAAY,GACZ,MAAAE,EACA,WAAAC,EACA,SAAAG,EACA,SAAAI,EACA,MAAAC,EACA,MAAAE,EACA,IAAAC,CACR,CAAC,EAED,OAAOb,CACf,EF3FO,IAAMe,GAA0CC,GAAwB,CACnEC,EAAID,CAAM,IAAGA,EAAS,CAAE,MAAOA,CAAO,GAC1C,IAAME,KAAO,cAAWF,CAAM,EAC9B,SAAO,WAAQ,IAAMG,GAAeD,CAAW,CAAC,CACxD,EAQO,IAAME,GAAuCC,GAA0B,CACtE,GAAM,CAAE,SAAAC,EAAU,GAAGC,CAAM,EAAIF,EAC/B,OAAOC,EAASE,GAASD,CAAK,CAAC,CACvC","names":["react_exports","__export","Drag","Hover","Key","Pinch","Resize","Scroll","Wheel","useDrag","useHover","useKey","usePinch","useResize","useScroll","useWheel","__toCommonJS","import_react","import_src","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","getDevice","useDrag","arg","isF","memo","dragEvent","Drag","props","children","other","useDrag","import_react","import_src","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","getDevice","useHover","arg","isF","memo","hoverEvent","Hover","props","children","other","useHover","import_react","import_src","keyEvent","state","self","e","el","useKey","arg","isF","memo","keyEvent","Key","props","children","other","import_react","import_src","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","pinchDevice","usePinch","arg","isF","memo","pinchEvent","Pinch","props","children","other","usePinch","import_src","DELAY","resizeEvent","state","on","entry","self","target","register","id","entries","el","import_react","useResize","arg","isF","memo","resizeEvent","Resize","props","children","other","useResize","import_react","scrollValues","e","out","vec2","x","xx","y","yy","import_src","scrollEvent","config","initValues","vec2","self","scroll","scrollStart","e","scrollValues","scrolling","id","cpV","subV","addV","scrollEnd","mount","target","clean","ref","el","useScroll","config","isF","memo","scrollEvent","Scroll","props","children","other","useScroll","import_react","LINE_HEIGHT","PAGE_HEIGHT","wheelValues","event","out","vec2","deltaX","deltaY","deltaMode","import_src","wheelEvent","config","initValues","vec2","self","wheel","wheelStart","e","wheelValues","wheeling","id","cpV","addV","wheelEnd","mount","target","clean","ref","el","useWheel","config","isF","memo","wheelEvent","Wheel","props","children","other","useWheel"]}
package/dist/react.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{useOnce as j,useMutable as q}from"reev/react";import{event as B}from"reev";var d=n=>typeof n=="function",J=typeof Float32Array<"u"?Float32Array:Array,r=(n=0,t=0,l=new J(2))=>(l[0]=n,l[1]=t,l),u=(n,t,l=r())=>(l[0]=n[0]+t[0],l[1]=n[1]+t[1],l),P=(n,t,l=r())=>(l[0]=n[0]-t[0],l[1]=n[1]-t[1],l),S=(n,t=r())=>(t[0]=n[0],t[1]=n[1],t),_=typeof window<"u"&&!!window.document&&!!window.document.createElement,C=()=>_&&"ontouchstart"in window,G=()=>C()||_&&window.navigator.maxTouchPoints>1,N=()=>_&&"onpointerdown"in window,Y=()=>_&&"exitPointerLock"in window.document,U=()=>{try{return"constructor"in GestureEvent}catch{return!1}},v={isBrowser:_,get gesture(){return v._gesture??(v._gesture=U())},get touch(){return v._touch??(v._touch=C())},get touchscreen(){return v._touchscreen??(v._touchscreen=G())},get pointer(){return v._pointer??(v._pointer=N())},get pointerLock(){return v._pointerLock??(v._pointerLock=Y())}},V=(n=!1)=>n&&v.pointerLock?"mouse":v.touch?"touch":v.pointer?"pointer":"mouse",g=(n,t,l)=>{if(t!=="touch")return r(n.clientX,n.clientY,l);let[c]=n.changedTouches;return r(c.clientX,c.clientY,l)};var R={touch:{start:"touchstart",move:"touchmove",end:"touchend",up:"touchcancel"},pointer:{start:"pointerdown",move:"pointermove",end:"pointerup",up:"pointercancel"},mouse:{start:"mousedown",move:"mousemove",end:"mouseup",up:"mousecancel"}},T=(n={})=>{let t=()=>{r(0,0,e.value),r(0,0,e._value),r(0,0,e.delta),r(0,0,e.movement)},l=()=>{e.isDragStart=e.active&&!e._active,e.isDragging=e.active&&e._active,e.isDragEnd=!e.active&&e._active},c=o=>{e.event=o,e.active=!0,g(o,e.device,e.value),e.target.setPointerCapture&&"pointerId"in o&&e.target.setPointerCapture(o.pointerId),e.onDrag(e)},m=o=>{e.event=o,e._active=e.active,S(e.value,e._value),g(o,e.device,e.value),e._active&&(P(e.value,e._value,e.delta),u(e.offset,e.delta,e.offset),u(e.movement,e.delta,e.movement)),e.onDrag(e)},s=o=>{e.event=o,e.active=!1,t(),e.target.releasePointerCapture&&"pointerId"in o&&e.target.releasePointerCapture(o.pointerId),e.onDrag(e)},a=o=>{e.target=o;let{start:p,move:x,end:i,up:h}=R[e.device];o.addEventListener(p,e.onDragStart),o.addEventListener(x,e.onDragging),o.addEventListener(i,e.onDragEnd),o.addEventListener(h,e.onDragEnd)},f=()=>{let o=e.target;if(!o)return;let{start:p,move:x,end:i,up:h}=R[e.device];o.removeEventListener(p,e.onDragStart),o.removeEventListener(x,e.onDragging),o.removeEventListener(i,e.onDragEnd),o.removeEventListener(h,e.onDragEnd)},E=o=>{e(n),o?e.onMount(o):e.onClean()},e=B({_active:!1,active:!1,device:V(),_value:r(0,0),value:r(0,0),delta:r(0,0),offset:r(0,0),movement:r(0,0),target:null,event:null,memo:{},isDragStart:!1,isDragging:!1,isDragEnd:!1,onDrag:l,onDragStart:c,onDragging:m,onDragEnd:s,onMount:a,onClean:f,ref:E});return e};var Q=n=>{d(n)&&(n={onDrag:n});let t=q(n);return j(()=>T(t))};var Ce=n=>{let{children:t,...l}=n;return t(Q(l))};import{useOnce as $,useMutable as ee}from"reev/react";import{event as Z}from"reev";var b={touch:{start:"touchstart",move:"touchmove",end:"touchend",up:"touchcancel"},pointer:{start:"pointerenter",move:"pointermove",end:"pointerleave",up:"pointercancel"},mouse:{start:"mouseenter",move:"mousemove",end:"mouseleave",up:"mousecancel"}},z=(n={})=>{let t=()=>{r(0,0,e.value),r(0,0,e._value),r(0,0,e.delta),r(0,0,e.movement)},l=()=>{e.isHoverStart=!e._active&&e.active,e.isHovering=e._active&&e.active,e.isHoverEnd=e._active&&!e.active},c=o=>{e.event=o,e.active=!0,g(o,e.device,e.value),e.onHover(e)},m=o=>{e.event=o,e._active=e.active,S(e.value,e._value),g(o,e.device,e.value),e._active&&(P(e.value,e._value,e.delta),u(e.offset,e.delta,e.offset),u(e.movement,e.delta,e.movement)),e.onHover(e)},s=o=>{e.event=o,e._active=!0,e.active=!1,t(),e.onHover(e)},a=o=>{e.target=o;let{start:p,move:x,end:i,up:h}=b[e.device];o.addEventListener(p,e.onHoverStart),o.addEventListener(x,e.onHovering),o.addEventListener(i,e.onHoverEnd),o.addEventListener(h,e.onHoverEnd)},f=()=>{let o=e.target;if(!o)return;let{start:p,move:x,end:i,up:h}=b[e.device];o.removeEventListener(p,e.onHoverStart),o.removeEventListener(x,e.onHovering),o.removeEventListener(i,e.onHoverEnd),o.removeEventListener(h,e.onHoverEnd)},E=o=>{e(n),o?e.onMount(o):e.onClean()},e=Z({_active:!1,active:!1,device:V(),_value:r(0,0),value:r(0,0),delta:r(0,0),offset:r(0,0),movement:r(0,0),target:null,event:null,memo:{},isHoverStart:!1,isHovering:!1,isHoverEnd:!1,onHover:l,onHoverStart:c,onHovering:m,onHoverEnd:s,onMount:a,onClean:f,ref:E});return e};var te=n=>{d(n)&&(n={onHover:n});let t=ee(n);return $(()=>z(t))};var Oe=n=>{let{children:t,...l}=n;return t(te(l))};import{useMutable as oe,useOnce as re}from"reev/react";import{event as ne}from"reev";var M=(n={})=>{let s=ne({onKeydown:a=>{s.event=a,s.key=a.key,s.code=a.code,s.onKey?.(s)},onMount:a=>{a||(a=a||window),s.target=a,a.setAttribute("tabindex","1"),a.addEventListener("keydown",s.onKeydown)},onClean:()=>{let a=s.target;a&&a.removeEventListener("keydown",s.onKeydown)},ref:a=>{s(n),a?s.onMount(a):s.onClean()}});return s};var le=n=>{d(n)&&(n={onKey:n});let t=oe(n);return re(()=>M(t))},Ye=n=>{let{children:t,...l}=n;return t(le(l))};import{useOnce as ae,useMutable as ie}from"reev/react";var k=(n=!1)=>{if(!v.touch&&v.gesture)return"gesture";if(v.touch&&n)return"touch";if(v.touchscreen){if(v.pointer)return"pointer";if(v.touch)return"touch"}return"wheel"};var K=40,A=800,L=(n,t)=>{if(!(n instanceof WheelEvent))return r(0,0,t);let{deltaX:l,deltaY:c,deltaMode:m}=n;return m===1?(l*=K,c*=K):m===2&&(l*=A,c*=A),r(l,c,t)};import{event as se}from"reev";var y=n=>{let t=()=>{r(0,0,e.value),r(0,0,e._value),r(0,0,e.delta),r(0,0,e.movement)},l=()=>{e.isWheelStart=e.active&&!e._active,e.isWheeling=e.active&&e._active,e.isWheelEnd=!e.active&&e._active},c=o=>{e.event=o,e.active=!0,L(o,e.delta),e.onWheel(e)},m=o=>{let p=setTimeout(()=>e.onWheelEnd(o),e.timeout);if(e.clearTimeout(),e.clearTimeout=()=>clearTimeout(p),e.event=o,!e.active){e.onWheelStart(o);return}e._active=e.active,S(e.value,e._value),L(o,e.delta),u(e.offset,e.delta,e.offset),u(e.movement,e.delta,e.movement),e.onWheel(e)},s=o=>{e.event=o,e.active=!1,t(),e.onWheel(e)},a=o=>{e.target=o,o.addEventListener("wheel",e.onWheeling)},f=()=>{let o=e.target;o&&o.removeEventListener("wheel",e.onWheeling)},E=o=>{e(n),o?e.onMount(o):e.onClean(null)},e=se({active:!1,_active:!1,_value:r(0,0),value:r(0,0),delta:r(0,0),offset:r(0,0),movement:r(0,0),target:null,event:null,timeout:100,clearTimeout:()=>{},memo:{},isWheelStart:!1,isWheeling:!1,isWheelEnd:!1,onWheel:l,onWheelStart:c,onWheeling:m,onWheelEnd:s,onMount:a,onClean:f,ref:E});return e};var O={touch:{start:"touchstart",move:"touchmove",end:"touchend",up:"touchcancel"},pointer:{start:"pointerdown",move:"pointermove",end:"pointerup",up:"pointercancel"},mouse:{start:"mousedown",move:"mousemove",end:"mouseup",up:"mousecancel"}},F=(n={})=>{let t=y(),l=()=>{r(0,0,t.value),r(0,0,t._value),r(0,0,t.delta),r(0,0,t.movement)},c=()=>{t.isPinchStart=!t._active&&t.active,t.isPinching=t._active&&t.active,t.isPinchEnd=t._active&&!t.active},m=i=>{t.event=i,t.active=!0,g(i,t.device,t.value),t.onPinch(t)},s=i=>{t.event=i,t._active=t.active,S(t.value,t._value),g(i,t.device,t.value),t._active&&(P(t.value,t._value,t.delta),u(t.offset,t.delta,t.offset),u(t.movement,t.delta,t.movement)),t.onPinch(t)},a=i=>{t.event=i,t._active=!0,t.active=!1,l(),t.onPinch(t)},f=()=>{t.onPinch(t)},E=()=>{t.onPinch(t)},e=()=>{t.onPinch(t)},o=i=>{if(t.target=i,t.device==="wheel")return;let{start:h,move:w,end:D,up:H}=O[t.device];i.addEventListener(h,t.onPinchStart),i.addEventListener(w,t.onPinching),i.addEventListener(D,t.onPinchEnd),i.addEventListener(H,t.onPinchEnd)},p=()=>{let i=t.target;if(!i||t.device==="wheel")return;let{start:h,move:w,end:D,up:H}=O[t.device];i.removeEventListener(h,t.onPinchStart),i.removeEventListener(w,t.onPinching),i.removeEventListener(D,t.onPinchEnd),i.removeEventListener(H,t.onPinchEnd)},x=()=>{t(n)};return t({_active:!1,active:!1,device:k(),_rotate:0,rotate:0,_size:1,size:1,_scale:r(1,1),scale:r(1,1),_value:r(),value:r(),delta:r(),offset:r(),movement:r(),target:null,event:null,memo:{},isPinchStart:!1,isPinching:!1,isPinchEnd:!1,onWheelStart:f,onWheeling:E,onWheelEnd:e,onPinch:c,onPinchStart:m,onPinching:s,onPinchEnd:a,onMount:o,onClean:p,ref:x}),t};var ce=n=>{d(n)&&(n={onPinch:n});let t=ie(n);return ae(()=>F(t))};var mt=n=>{let{children:t,...l}=n;return t(ce(l))};import{event as ve}from"reev";var me=100,X=n=>{let t=a=>()=>{},s=ve({observer:null,listener:()=>{},onResize:()=>{},onMount:a=>{let f=E=>{if(E.target!==a)return;let e=setTimeout(t(E),me);s.listener(),s.listener=()=>clearTimeout(e)};s.observer=new ResizeObserver(E=>{E.forEach(f)}),s.observer.observe(a)},onClean:()=>{},ref:a=>{s(n),a?s.onMount(a):s.onClean(null)}});return s};import{useMutable as ue,useOnce as Ee}from"reev/react";var de=n=>{d(n)&&(n={onResize:n});let t=ue(n);return Ee(()=>X(t))};var xt=n=>{let{children:t,...l}=n;return t(de(l))};import{useOnce as fe,useMutable as he}from"reev/react";var W=(n,t=r())=>{let{scrollX:l,scrollLeft:c}=n.currentTarget,{scrollY:m,scrollTop:s}=n.currentTarget;return r(l??c??0,m??s??0,t)};import{event as pe}from"reev";var I=n=>{let t=()=>{r(0,0,e.value),r(0,0,e._value),r(0,0,e.delta),r(0,0,e.movement)},l=()=>{e.isScrollStart=e.active&&!e._active,e.isScrolling=e.active&&e._active,e.isScrollEnd=!e.active&&e._active},c=o=>{e.event=o,e.active=!0,W(o,e.value),e.onScroll(e)},m=o=>{let p=setTimeout(()=>e.onScrollEnd(o),e.timeout);if(e.clearTimeout(),e.clearTimeout=()=>clearTimeout(p),!e.active){e.onScrollStart(o);return}e.event=o,e._active=e.active,S(e.value,e._value),W(o,e.value),e._active&&(P(e.value,e._value,e.delta),u(e.offset,e.delta,e.offset),u(e.movement,e.delta,e.movement)),e.onScroll(e)},s=o=>{e.event=o,e.active=!1,t(),e.onScroll(e)},a=o=>{e.target=o,window.addEventListener("scroll",e.onScrolling)},f=()=>{window.removeEventListener("scroll",e.onScrolling)},E=o=>{e(n),o?e.onMount(o):e.onClean(null)},e=pe({active:!1,_active:!1,_value:r(0,0),value:r(0,0),delta:r(0,0),offset:r(0,0),movement:r(0,0),target:null,event:null,memo:{},timeout:100,clearTimeout:()=>{},isScrollStart:!1,isScrolling:!1,isScrollEnd:!1,onScroll:l,onScrollStart:c,onScrolling:m,onScrollEnd:s,onMount:a,onClean:f,ref:E});return e};var Se=n=>{d(n)&&(n={onScroll:n});let t=he(n);return fe(()=>I(t))};var Tt=n=>{let{children:t,...l}=n;return t(Se(l))};import{useOnce as xe,useMutable as ge}from"reev/react";var Pe=n=>{d(n)&&(n={onWheel:n});let t=ge(n);return xe(()=>y(t))};var Kt=n=>{let{children:t,...l}=n;return t(Pe(l))};export{Ce as Drag,Oe as Hover,Ye as Key,mt as Pinch,xt as Resize,Tt as Scroll,Kt as Wheel,Q as useDrag,te as useHover,le as useKey,ce as usePinch,de as useResize,Se as useScroll,Pe as useWheel};
1
+ import{useOnce as ue,useMutable as me}from"reev/src/react";import{event as ve}from"reev/src";var x=r=>typeof r=="function",ie=typeof Float32Array<"u"?Float32Array:Array,i=(r=0,s=0,c=new ie(2))=>(c[0]=r,c[1]=s,c),h=(r,s,c=i())=>(c[0]=r[0]+s[0],c[1]=r[1]+s[1],c),w=(r,s,c=i())=>(c[0]=r[0]-s[0],c[1]=r[1]-s[1],c),S=(r,s=i())=>(s[0]=r[0],s[1]=r[1],s),b=typeof window<"u"&&!!window.document&&!!window.document.createElement,M=()=>b&&"ontouchstart"in window,se=()=>M()||b&&window.navigator.maxTouchPoints>1,ae=()=>b&&"onpointerdown"in window,ce=()=>b&&"exitPointerLock"in window.document,le=()=>{try{return"constructor"in GestureEvent}catch{return!1}},d={isBrowser:b,get gesture(){return d._gesture??(d._gesture=le())},get touch(){return d._touch??(d._touch=M())},get touchscreen(){return d._touchscreen??(d._touchscreen=se())},get pointer(){return d._pointer??(d._pointer=ae())},get pointerLock(){return d._pointerLock??(d._pointerLock=ce())}},R=(r=!1)=>r&&d.pointerLock?"mouse":d.touch?"touch":d.pointer?"pointer":"mouse",V=(r,s,c)=>{if(s!=="touch")return i(r.clientX,r.clientY,c);let[m]=r.changedTouches;return i(m.clientX,m.clientY,c)};var C={touch:{start:"touchstart",move:"touchmove",end:"touchend",up:"touchcancel"},pointer:{start:"pointerdown",move:"pointermove",end:"pointerup",up:"pointercancel"},mouse:{start:"mousedown",move:"mousemove",end:"mouseup",up:"mousecancel"}},K=(r={})=>{let s=()=>{i(0,0,e.value),i(0,0,e._value),i(0,0,e.delta),i(0,0,e.movement)},c=()=>{e.isDragStart=e.active&&!e._active,e.isDragging=e.active&&e._active,e.isDragEnd=!e.active&&e._active},m=o=>{e.event=o,e.active=!0,V(o,e.device,e.value),e.target.setPointerCapture&&"pointerId"in o&&e.target.setPointerCapture(o.pointerId),e.drag(e)},f=o=>{e.event=o,e._active=e.active,S(e.value,e._value),V(o,e.device,e.value),e._active&&(w(e.value,e._value,e.delta),h(e.offset,e.delta,e.offset),h(e.movement,e.delta,e.movement)),e.drag(e)},v=o=>{e.event=o,e.active=!1,s(),e.target.releasePointerCapture&&"pointerId"in o&&e.target.releasePointerCapture(o.pointerId),e.drag(e)},u=o=>{e.target=o;let{start:p,move:_,end:L,up:P}=C[e.device];o.addEventListener(p,e.dragStart),o.addEventListener(_,e.dragging),o.addEventListener(L,e.dragEnd),o.addEventListener(P,e.dragEnd)},g=()=>{let o=e.target;if(!o)return;let{start:p,move:_,end:L,up:P}=C[e.device];o.removeEventListener(p,e.dragStart),o.removeEventListener(_,e.dragging),o.removeEventListener(L,e.dragEnd),o.removeEventListener(P,e.dragEnd)},E=o=>{e(r),o?e.mount(o):e.clean()},e=ve({_active:!1,active:!1,device:R(),_value:i(0,0),value:i(0,0),delta:i(0,0),offset:i(0,0),movement:i(0,0),target:null,event:null,memo:{},isDragStart:!1,isDragging:!1,isDragEnd:!1,drag:c,dragStart:m,dragging:f,dragEnd:v,mount:u,clean:g,ref:E});return e};var Ee=r=>{x(r)&&(r={drag:r});let s=me(r);return ue(()=>K(s))};var Qe=r=>{let{children:s,...c}=r;return s(Ee(c))};import{useOnce as fe,useMutable as pe}from"reev/src/react";import{event as de}from"reev/src";var O={touch:{start:"touchstart",move:"touchmove",end:"touchend",up:"touchcancel"},pointer:{start:"pointerenter",move:"pointermove",end:"pointerleave",up:"pointercancel"},mouse:{start:"mouseenter",move:"mousemove",end:"mouseleave",up:"mousecancel"}},Y=(r={})=>{let s=()=>{i(0,0,e.value),i(0,0,e._value),i(0,0,e.delta),i(0,0,e.movement)},c=()=>{e.isHoverStart=!e._active&&e.active,e.isHovering=e._active&&e.active,e.isHoverEnd=e._active&&!e.active},m=o=>{e.event=o,e.active=!0,V(o,e.device,e.value),e.hover(e)},f=o=>{e.event=o,e._active=e.active,S(e.value,e._value),V(o,e.device,e.value),e._active&&(w(e.value,e._value,e.delta),h(e.offset,e.delta,e.offset),h(e.movement,e.delta,e.movement)),e.hover(e)},v=o=>{e.event=o,e._active=!0,e.active=!1,s(),e.hover(e)},u=o=>{e.target=o;let{start:p,move:_,end:L,up:P}=O[e.device];o.addEventListener(p,e.hoverStart),o.addEventListener(_,e.hovering),o.addEventListener(L,e.hoverEnd),o.addEventListener(P,e.hoverEnd)},g=()=>{let o=e.target;if(!o)return;let{start:p,move:_,end:L,up:P}=O[e.device];o.removeEventListener(p,e.hoverStart),o.removeEventListener(_,e.hovering),o.removeEventListener(L,e.hoverEnd),o.removeEventListener(P,e.hoverEnd)},E=o=>{e(r),o?e.mount(o):e.clean()},e=de({_active:!1,active:!1,device:R(),_value:i(0,0),value:i(0,0),delta:i(0,0),offset:i(0,0),movement:i(0,0),target:null,event:null,memo:{},isHoverStart:!1,isHovering:!1,isHoverEnd:!1,hover:c,hoverStart:m,hovering:f,hoverEnd:v,mount:u,clean:g,ref:E});return e};var he=r=>{x(r)&&(r={hover:r});let s=pe(r);return fe(()=>Y(s))};var at=r=>{let{children:s,...c}=r;return s(he(c))};import{useMutable as xe,useOnce as Se}from"reev/src/react";import{event as ge}from"reev/src";var F=(r={})=>{let v=ge({keydown:u=>{v.event=u,v.pressedKey=u.key,v.code=u.code,v.key?.(v)},mount:u=>{u||(u=u||window),v.target=u,u.setAttribute("tabindex","1"),u.addEventListener("keydown",v.keydown)},clean:()=>{let u=v.target;u&&u.removeEventListener("keydown",v.keydown)},ref:u=>{v(r),u?v.mount(u):v.clean()}});return v};var _e=r=>{x(r)&&(r={key:r});let s=xe(r);return Se(()=>F(s))},ft=r=>{let{children:s,...c}=r;return s(_e(c))};import{useOnce as Ve,useMutable as Te}from"reev/src/react";import{event as ye}from"reev/src";var G=(r=!1)=>{if(!d.touch&&d.gesture)return"gesture";if(d.touch&&r)return"touch";if(d.touchscreen){if(d.pointer)return"pointer";if(d.touch)return"touch"}return"wheel"},Le=40,Pe=800,we=100,X=(r,s)=>{try{let c=s.clientX-r.clientX,m=s.clientY-r.clientY,f=(s.clientX+r.clientX)/2,v=(s.clientY+r.clientY)/2,u=Math.hypot(c,m),g=-(Math.atan2(c,m)*180)/Math.PI,E=i(f,v);return{distance:u,angle:g,origin:E}}catch{return null}},H=(r,s)=>{let c=Array.from(r.touches).filter(m=>s.includes(m.identifier));return c.length<2?null:X(c[0],c[1])},I=r=>{let s=Array.from(r.values());return s.length<2?null:X(s[0],s[1])},U=r=>Array.from(r.touches).filter(s=>s.target===r.currentTarget||r.currentTarget?.contains?.(s.target)).map(s=>s.identifier),W=(r,s)=>{let{deltaY:c,deltaMode:m}=r;return m===1?c*=Le:m===2&&(c*=Pe),-c/we*s};var T={touch:{start:"touchstart",move:"touchmove",end:"touchend",cancel:"touchcancel"},pointer:{start:"pointerdown",move:"pointermove",end:"pointerup",cancel:"pointercancel"},gesture:{start:"gesturestart",change:"gesturechange",end:"gestureend"}},B=(r={})=>{let s=()=>{i(0,0,t.value),i(0,0,t._value),i(0,0,t.delta),i(0,0,t.movement)},c=()=>{t.isPinchStart=t.active&&!t._active,t.isPinching=t.active&&t._active,t.isPinchEnd=!t.active&&t._active},m=(n,a)=>{t.event=n,t.active=!0,i(a.distance,a.angle,t.value),i(a.distance,a.angle,t.initial),S(a.origin,t.origin),t.scale=1,t.turns=0,t.pinch(t)},f=(n,a)=>{if(!t.active)return;t.event=n,t._active=t.active,S(t.value,t._value);let l=t._value[1],y=a.angle,A=y-l;Math.abs(A)>270&&(t.turns+=Math.sign(A),y-=360*Math.sign(A)),i(a.distance,y,t.value),S(a.origin,t.origin);let re=t.value[0]/t.initial[0]-1,oe=t.value[1]-t.initial[1];i(re,oe,t.movement),w(t.value,t._value,t.delta),t.delta[0]=t._value[0]!==0?t.value[0]/t._value[0]-1:0,h(t.offset,t.delta,t.offset),t.scale=t.initial[0]!==0?t.value[0]/t.initial[0]:1,t.pinch(t)},v=n=>{t.event=n,t._active=!0,t.active=!1,s(),t.pinch(t)},u=n=>{let a=U(n);if(t.active&&t._touchIds.every(y=>a.includes(y))||a.length<2)return;t._touchIds=a.slice(0,2);let l=H(n,t._touchIds);l&&m(n,l)},g=n=>{if(!t.active)return;let a=H(n,t._touchIds);a&&f(n,a)},E=n=>{if(!t.active)return;let a=Array.from(n.touches).map(l=>l.identifier);t._touchIds.some(l=>!a.includes(l))&&v(n)},e=n=>{if(n.buttons!=null&&n.buttons%2!==1)return;let a=t._pointerEvents;if(t.active&&Array.from(a.keys()).every(y=>t._pointerEvents.has(y)))return;try{n.target.setPointerCapture(n.pointerId)}catch{}if(a.size<2&&a.set(n.pointerId,n),a.size<2)return;let l=I(a);l&&m(n,l)},o=n=>{let a=t._pointerEvents;if(a.has(n.pointerId)&&a.set(n.pointerId,n),!t.active)return;let l=I(a);l&&f(n,l)},p=n=>{try{n.target.releasePointerCapture(n.pointerId)}catch{}let a=t._pointerEvents;a.has(n.pointerId)&&a.delete(n.pointerId),t.active&&a.size<2&&v(n)},_=n=>{let a=n;n.cancelable&&n.preventDefault(),!t.active&&(t.event=n,t.active=!0,i(a.scale,a.rotation,t.value),i(a.scale,a.rotation,t.initial),i(a.clientX,a.clientY,t.origin),t.scale=1,t.turns=0,t.pinch(t))},L=n=>{let a=n;n.cancelable&&n.preventDefault(),t.active&&(t.event=n,t._active=t.active,S(t.value,t._value),i(a.scale,a.rotation,t.value),i(a.clientX,a.clientY,t.origin),i(a.scale-1,a.rotation,t.movement),w(t.value,t._value,t.delta),h(t.offset,t.delta,t.offset),t.scale=a.scale,t.pinch(t))},P=n=>{t.active&&v(n)},$=n=>{t.event=n,t.active=!0,i(1,0,t.value),i(1,0,t.initial),i(n.clientX,n.clientY,t.origin),t.scale=1,t.turns=0;let a=W(n,t.offset[0]+1);t.delta[0]=a,t.delta[1]=0,t.value[0]+=a,h(t.offset,t.delta,t.offset),i(t.value[0]-1,0,t.movement),t.scale=t.value[0],t.pinch(t)},D=n=>{let a=setTimeout(()=>N(n),t.timeout);if(t.clearTimeout(),t.clearTimeout=()=>clearTimeout(a),!t.active){$(n);return}t.event=n,t._active=t.active,S(t.value,t._value),i(n.clientX,n.clientY,t.origin);let l=W(n,t.offset[0]+1);t.delta[0]=l,t.delta[1]=0,t.value[0]+=l,h(t.offset,t.delta,t.offset),i(t.value[0]-1,0,t.movement),t.scale=t.value[0],t.pinch(t)},N=n=>{t.active&&(t.event=n,t._active=!0,t.active=!1,s(),t.pinch(t))},ee=n=>{t.target=n;let a=t.device;if(a==="wheel")n.addEventListener("wheel",D,{passive:!1});else if(a==="gesture"){let l=T.gesture;n.addEventListener(l.start,_),n.addEventListener(l.change,L),n.addEventListener(l.end,P)}else if(a==="touch"){let l=T.touch;n.addEventListener(l.start,u),n.addEventListener(l.move,g),n.addEventListener(l.end,E),n.addEventListener(l.cancel,E)}else if(a==="pointer"){let l=T.pointer;n.addEventListener(l.start,e),n.addEventListener(l.move,o),n.addEventListener(l.end,p),n.addEventListener(l.cancel,p)}},te=()=>{let n=t.target;if(!n)return;let a=t.device;if(a==="wheel")n.removeEventListener("wheel",D);else if(a==="gesture"){let l=T.gesture;n.removeEventListener(l.start,_),n.removeEventListener(l.change,L),n.removeEventListener(l.end,P)}else if(a==="touch"){let l=T.touch;n.removeEventListener(l.start,u),n.removeEventListener(l.move,g),n.removeEventListener(l.end,E),n.removeEventListener(l.cancel,E)}else if(a==="pointer"){let l=T.pointer;n.removeEventListener(l.start,e),n.removeEventListener(l.move,o),n.removeEventListener(l.end,p),n.removeEventListener(l.cancel,p)}},ne=n=>{t(r),n?t.mount(n):t.clean()},t=ye({_active:!1,active:!1,device:G(),_value:i(0,0),value:i(0,0),delta:i(0,0),offset:i(0,0),movement:i(0,0),initial:i(0,0),origin:i(0,0),_touchIds:[],_pointerEvents:new Map,scale:1,turns:0,target:null,event:null,memo:{},timeout:100,clearTimeout:()=>{},isPinchStart:!1,isPinching:!1,isPinchEnd:!1,pinch:c,pinchStart:n=>{t.device==="touch"?u(n):t.device==="pointer"?e(n):t.device==="gesture"?_(n):t.device==="wheel"&&D(n)},pinching:n=>{t.device==="touch"?g(n):t.device==="pointer"?o(n):t.device==="gesture"?L(n):t.device==="wheel"&&D(n)},pinchEnd:n=>{t.device==="touch"?E(n):t.device==="pointer"?p(n):t.device==="gesture"?P(n):t.device==="wheel"&&N(n)},mount:ee,clean:te,ref:ne});return t};var be=r=>{x(r)&&(r={pinch:r});let s=Te(r);return Ve(()=>B(s))};var At=r=>{let{children:s,...c}=r;return s(be(c))};import{event as De}from"reev/src";var Re=100,j=r=>{let s=u=>()=>{},v=De({observer:null,listener:()=>{},resize:()=>{},mount:u=>{let g=E=>{if(E.target!==u)return;let e=setTimeout(s(E),Re);v.listener(),v.listener=()=>clearTimeout(e)};v.observer=new ResizeObserver(E=>{E.forEach(g)}),v.observer.observe(u)},clean:()=>{},ref:u=>{v(r),u?v.mount(u):v.clean(null)}});return v};import{useMutable as Ae,useOnce as He}from"reev/src/react";var Ie=r=>{x(r)&&(r={resize:r});let s=Ae(r);return He(()=>j(s))};var Kt=r=>{let{children:s,...c}=r;return s(Ie(c))};import{useOnce as ke,useMutable as ze}from"reev/src/react";var k=(r,s=i())=>{let{scrollX:c,scrollLeft:m}=r.currentTarget,{scrollY:f,scrollTop:v}=r.currentTarget;return i(c??m??0,f??v??0,s)};import{event as We}from"reev/src";var q=r=>{let s=()=>{i(0,0,e.value),i(0,0,e._value),i(0,0,e.delta),i(0,0,e.movement)},c=()=>{e.isScrollStart=e.active&&!e._active,e.isScrolling=e.active&&e._active,e.isScrollEnd=!e.active&&e._active},m=o=>{e.event=o,e.active=!0,k(o,e.value),e.scroll(e)},f=o=>{let p=setTimeout(()=>e.scrollEnd(o),e.timeout);if(e.clearTimeout(),e.clearTimeout=()=>clearTimeout(p),!e.active){e.scrollStart(o);return}e.event=o,e._active=e.active,S(e.value,e._value),k(o,e.value),e._active&&(w(e.value,e._value,e.delta),h(e.offset,e.delta,e.offset),h(e.movement,e.delta,e.movement)),e.scroll(e)},v=o=>{e.event=o,e.active=!1,s(),e.scroll(e)},u=o=>{e.target=o,window.addEventListener("scroll",e.scrolling)},g=()=>{window.removeEventListener("scroll",e.scrolling)},E=o=>{e(r),o?e.mount(o):e.clean(null)},e=We({active:!1,_active:!1,_value:i(0,0),value:i(0,0),delta:i(0,0),offset:i(0,0),movement:i(0,0),target:null,event:null,memo:{},timeout:100,clearTimeout:()=>{},isScrollStart:!1,isScrolling:!1,isScrollEnd:!1,scroll:c,scrollStart:m,scrolling:f,scrollEnd:v,mount:u,clean:g,ref:E});return e};var Ne=r=>{x(r)&&(r={scroll:r});let s=ze(r);return ke(()=>q(s))};var en=r=>{let{children:s,...c}=r;return s(Ne(c))};import{useOnce as Ce,useMutable as Ke}from"reev/src/react";var J=40,Q=800,z=(r,s)=>{if(!(r instanceof WheelEvent))return i(0,0,s);let{deltaX:c,deltaY:m,deltaMode:f}=r;return f===1?(c*=J,m*=J):f===2&&(c*=Q,m*=Q),i(c,m,s)};import{event as Me}from"reev/src";var Z=r=>{let s=()=>{i(0,0,e.value),i(0,0,e._value),i(0,0,e.delta),i(0,0,e.movement)},c=()=>{e.isWheelStart=e.active&&!e._active,e.isWheeling=e.active&&e._active,e.isWheelEnd=!e.active&&e._active},m=o=>{e.event=o,e.active=!0,z(o,e.delta),e.wheel(e)},f=o=>{let p=setTimeout(()=>e.wheelEnd(o),e.timeout);if(e.clearTimeout(),e.clearTimeout=()=>clearTimeout(p),e.event=o,!e.active){e.wheelStart(o);return}e._active=e.active,S(e.value,e._value),z(o,e.delta),h(e.offset,e.delta,e.offset),h(e.movement,e.delta,e.movement),e.wheel(e)},v=o=>{e.event=o,e.active=!1,s(),e.wheel(e)},u=o=>{e.target=o,o.addEventListener("wheel",e.wheeling)},g=()=>{let o=e.target;o&&o.removeEventListener("wheel",e.wheeling)},E=o=>{e(r),o?e.mount(o):e.clean(null)},e=Me({active:!1,_active:!1,_value:i(0,0),value:i(0,0),delta:i(0,0),offset:i(0,0),movement:i(0,0),target:null,event:null,timeout:100,clearTimeout:()=>{},memo:{},isWheelStart:!1,isWheeling:!1,isWheelEnd:!1,wheel:c,wheelStart:m,wheeling:f,wheelEnd:v,mount:u,clean:g,ref:E});return e};var Oe=r=>{x(r)&&(r={wheel:r});let s=Ke(r);return Ce(()=>Z(s))};var fn=r=>{let{children:s,...c}=r;return s(Oe(c))};export{Qe as Drag,at as Hover,ft as Key,At as Pinch,Kt as Resize,en as Scroll,fn as Wheel,Ee as useDrag,he as useHover,_e as useKey,be as usePinch,Ie as useResize,Ne as useScroll,Oe as useWheel};
2
2
  //# sourceMappingURL=react.mjs.map