@mantine/hooks 9.0.0-alpha.6 → 9.0.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.
Files changed (29) hide show
  1. package/cjs/use-local-storage/use-local-storage.cjs.map +1 -1
  2. package/cjs/use-session-storage/use-session-storage.cjs.map +1 -1
  3. package/esm/use-focus-trap/use-focus-trap.mjs +2 -0
  4. package/esm/use-focus-trap/use-focus-trap.mjs.map +1 -1
  5. package/esm/use-local-storage/use-local-storage.mjs.map +1 -1
  6. package/esm/use-session-storage/use-session-storage.mjs.map +1 -1
  7. package/lib/use-local-storage/use-local-storage.d.ts +13 -3
  8. package/lib/use-session-storage/use-session-storage.d.ts +13 -3
  9. package/package.json +1 -1
  10. package/cjs/use-drag/use-drag.cjs +0 -266
  11. package/cjs/use-drag/use-drag.cjs.map +0 -1
  12. package/cjs/use-mask/use-mask.cjs +0 -457
  13. package/cjs/use-mask/use-mask.cjs.map +0 -1
  14. package/cjs/use-roving-index/use-roving-index.cjs +0 -200
  15. package/cjs/use-roving-index/use-roving-index.cjs.map +0 -1
  16. package/cjs/use-splitter/use-splitter.cjs +0 -433
  17. package/cjs/use-splitter/use-splitter.cjs.map +0 -1
  18. package/esm/use-drag/use-drag.mjs +0 -266
  19. package/esm/use-drag/use-drag.mjs.map +0 -1
  20. package/esm/use-mask/use-mask.mjs +0 -453
  21. package/esm/use-mask/use-mask.mjs.map +0 -1
  22. package/esm/use-roving-index/use-roving-index.mjs +0 -200
  23. package/esm/use-roving-index/use-roving-index.mjs.map +0 -1
  24. package/esm/use-splitter/use-splitter.mjs +0 -433
  25. package/esm/use-splitter/use-splitter.mjs.map +0 -1
  26. package/lib/use-drag/use-drag.d.ts +0 -60
  27. package/lib/use-mask/use-mask.d.ts +0 -60
  28. package/lib/use-roving-index/use-roving-index.d.ts +0 -49
  29. package/lib/use-splitter/use-splitter.d.ts +0 -94
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-splitter.cjs","names":["useUncontrolled"],"sources":["../../src/use-splitter/use-splitter.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-deprecated */\nimport { useCallback, useRef, useState } from 'react';\nimport { useUncontrolled } from '../use-uncontrolled/use-uncontrolled';\n\nexport interface UseSplitterPanel {\n /** Initial size as percentage (0-100). All panels must sum to 100. */\n defaultSize: number;\n /** Minimum size percentage, `0` by default */\n min?: number;\n /** Maximum size percentage, `100` by default */\n max?: number;\n /** Whether this panel can be collapsed, `false` by default */\n collapsible?: boolean;\n /** Size below which the panel snaps to collapsed (percentage), defaults to `min` */\n collapseThreshold?: number;\n}\n\nexport interface UseSplitterRedistributeInput {\n /** Current sizes before applying delta */\n sizes: number[];\n /** Panel configurations */\n panels: UseSplitterPanel[];\n /** Index of the handle being dragged */\n handleIndex: number;\n /** Requested size change in percentage (positive = grow before-panel) */\n delta: number;\n}\n\nexport type UseSplitterRedistributeFn = (input: UseSplitterRedistributeInput) => number[];\n\nexport interface UseSplitterOptions {\n /** Panel configuration array (minimum 2 panels) */\n panels: UseSplitterPanel[];\n /** Layout direction, `'horizontal'` by default */\n orientation?: 'horizontal' | 'vertical';\n /** Controlled sizes (percentages summing to 100) */\n sizes?: number[];\n /** Called during resize with updated sizes */\n onSizeChange?: (sizes: number[]) => void;\n /** Called when drag starts */\n onResizeStart?: (handleIndex: number) => void;\n /** Called when drag ends */\n onResizeEnd?: (handleIndex: number, sizes: number[]) => void;\n /** Called when a panel collapses or expands */\n onCollapseChange?: (panelIndex: number, collapsed: boolean) => void;\n /** How to borrow space from non-adjacent panels when the immediate neighbor is at its min/max.\n * `'nearest'` takes from the nearest panel in the drag direction first.\n * `'equal'` distributes equally among all panels in the drag direction.\n * A function receives sizes, panels, handleIndex and delta, and returns new sizes.\n * When not set, only the two adjacent panels are affected. */\n redistribute?: 'nearest' | 'equal' | UseSplitterRedistributeFn;\n /** Keyboard step size in percentage, `1` by default */\n step?: number;\n /** Shift+arrow step size in percentage, `10` by default */\n shiftStep?: number;\n /** Text direction for keyboard nav, `'ltr'` by default */\n dir?: 'ltr' | 'rtl';\n /** Enable/disable the hook, `true` by default */\n enabled?: boolean;\n}\n\nexport interface UseSplitterReturnValue<T extends HTMLElement = any> {\n /** Ref callback for the container element */\n ref: React.RefCallback<T | null>;\n /** Current panel sizes as percentages */\n sizes: number[];\n /** Which panels are currently collapsed */\n collapsed: boolean[];\n /** Index of handle being dragged, or -1 */\n activeHandle: number;\n /** Get props to spread on each resize handle */\n getHandleProps: (input: { index: number }) => {\n ref: React.RefCallback<HTMLElement>;\n role: 'separator';\n 'aria-orientation': 'horizontal' | 'vertical';\n 'aria-valuenow': number;\n 'aria-valuemin': number;\n 'aria-valuemax': number;\n tabIndex: number;\n onKeyDown: React.KeyboardEventHandler;\n 'data-active': boolean | undefined;\n 'data-orientation': 'horizontal' | 'vertical';\n };\n /** Programmatically set sizes */\n setSizes: (sizes: number[]) => void;\n /** Collapse a panel */\n collapse: (panelIndex: number) => void;\n /** Expand a collapsed panel */\n expand: (panelIndex: number) => void;\n /** Toggle collapse of a panel */\n toggleCollapse: (panelIndex: number) => void;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction getMin(panel: UseSplitterPanel): number {\n return panel.min ?? 0;\n}\n\nfunction getMax(panel: UseSplitterPanel): number {\n return panel.max ?? 100;\n}\n\nfunction getCollapseThreshold(panel: UseSplitterPanel): number {\n return panel.collapseThreshold ?? getMin(panel);\n}\n\ninterface SplitterInternalState {\n isDragging: boolean;\n handleIndex: number;\n startPointer: number;\n containerSize: number;\n startSizes: number[];\n preCollapseSizes: number[];\n}\n\nfunction createInitialInternalState(): SplitterInternalState {\n return {\n isDragging: false,\n handleIndex: -1,\n startPointer: 0,\n containerSize: 0,\n startSizes: [],\n preCollapseSizes: [],\n };\n}\n\nfunction checkCollapse(\n sizes: number[],\n panels: UseSplitterPanel[],\n handleIndex: number,\n delta: number\n): number[] | null {\n const beforeIdx = handleIndex;\n const afterIdx = handleIndex + 1;\n const beforePanel = panels[beforeIdx];\n const afterPanel = panels[afterIdx];\n\n const rawBefore = sizes[beforeIdx] + delta;\n const rawAfter = sizes[afterIdx] - delta;\n\n if (\n beforePanel.collapsible &&\n rawBefore < getCollapseThreshold(beforePanel) &&\n rawBefore < sizes[beforeIdx]\n ) {\n const result = [...sizes];\n result[afterIdx] += result[beforeIdx];\n result[beforeIdx] = 0;\n return result;\n }\n\n if (\n afterPanel.collapsible &&\n rawAfter < getCollapseThreshold(afterPanel) &&\n rawAfter < sizes[afterIdx]\n ) {\n const result = [...sizes];\n result[beforeIdx] += result[afterIdx];\n result[afterIdx] = 0;\n return result;\n }\n\n return null;\n}\n\nfunction applyAdjacentOnly(\n sizes: number[],\n panels: UseSplitterPanel[],\n handleIndex: number,\n delta: number\n): number[] {\n const result = [...sizes];\n const beforeIdx = handleIndex;\n const afterIdx = handleIndex + 1;\n\n const total = result[beforeIdx] + result[afterIdx];\n const effectiveBeforeMax = Math.min(getMax(panels[beforeIdx]), total - getMin(panels[afterIdx]));\n const effectiveBeforeMin = Math.max(getMin(panels[beforeIdx]), total - getMax(panels[afterIdx]));\n const newBefore = clamp(result[beforeIdx] + delta, effectiveBeforeMin, effectiveBeforeMax);\n result[beforeIdx] = newBefore;\n result[afterIdx] = total - newBefore;\n return result;\n}\n\nfunction redistributeNearest(\n sizes: number[],\n panels: UseSplitterPanel[],\n handleIndex: number,\n delta: number\n): number[] {\n const result = [...sizes];\n\n if (delta > 0) {\n const growIdx = handleIndex;\n const maxGrow = getMax(panels[growIdx]) - result[growIdx];\n const wantedGrow = Math.min(delta, maxGrow);\n\n let taken = 0;\n for (let i = handleIndex + 1; i < result.length && taken < wantedGrow; i += 1) {\n const canGive = result[i] - getMin(panels[i]);\n const take = Math.min(canGive, wantedGrow - taken);\n result[i] -= take;\n taken += take;\n }\n\n result[growIdx] += taken;\n } else if (delta < 0) {\n const growIdx = handleIndex + 1;\n const maxGrow = getMax(panels[growIdx]) - result[growIdx];\n const wantedGrow = Math.min(Math.abs(delta), maxGrow);\n\n let taken = 0;\n for (let i = handleIndex; i >= 0 && taken < wantedGrow; i -= 1) {\n const canGive = result[i] - getMin(panels[i]);\n const take = Math.min(canGive, wantedGrow - taken);\n result[i] -= take;\n taken += take;\n }\n\n result[growIdx] += taken;\n }\n\n return result;\n}\n\nfunction redistributeEqual(\n sizes: number[],\n panels: UseSplitterPanel[],\n handleIndex: number,\n delta: number\n): number[] {\n const result = [...sizes];\n\n if (delta > 0) {\n const growIdx = handleIndex;\n const maxGrow = getMax(panels[growIdx]) - result[growIdx];\n const wantedGrow = Math.min(delta, maxGrow);\n\n const donors: number[] = [];\n for (let i = handleIndex + 1; i < result.length; i += 1) {\n if (result[i] > getMin(panels[i])) {\n donors.push(i);\n }\n }\n\n let remaining = wantedGrow;\n while (remaining > 0.001 && donors.length > 0) {\n const perDonor = remaining / donors.length;\n const exhausted: number[] = [];\n\n for (let d = 0; d < donors.length; d += 1) {\n const idx = donors[d];\n const canGive = result[idx] - getMin(panels[idx]);\n const take = Math.min(canGive, perDonor);\n result[idx] -= take;\n remaining -= take;\n if (canGive <= perDonor + 0.001) {\n exhausted.push(d);\n }\n }\n\n for (let i = exhausted.length - 1; i >= 0; i -= 1) {\n donors.splice(exhausted[i], 1);\n }\n\n if (exhausted.length === 0) {\n break;\n }\n }\n\n result[growIdx] += wantedGrow - remaining;\n } else if (delta < 0) {\n const growIdx = handleIndex + 1;\n const maxGrow = getMax(panels[growIdx]) - result[growIdx];\n const wantedGrow = Math.min(Math.abs(delta), maxGrow);\n\n const donors: number[] = [];\n for (let i = handleIndex; i >= 0; i -= 1) {\n if (result[i] > getMin(panels[i])) {\n donors.push(i);\n }\n }\n\n let remaining = wantedGrow;\n while (remaining > 0.001 && donors.length > 0) {\n const perDonor = remaining / donors.length;\n const exhausted: number[] = [];\n\n for (let d = 0; d < donors.length; d += 1) {\n const idx = donors[d];\n const canGive = result[idx] - getMin(panels[idx]);\n const take = Math.min(canGive, perDonor);\n result[idx] -= take;\n remaining -= take;\n if (canGive <= perDonor + 0.001) {\n exhausted.push(d);\n }\n }\n\n for (let i = exhausted.length - 1; i >= 0; i -= 1) {\n donors.splice(exhausted[i], 1);\n }\n\n if (exhausted.length === 0) {\n break;\n }\n }\n\n result[growIdx] += wantedGrow - remaining;\n }\n\n return result;\n}\n\nfunction applyConstraints(\n sizes: number[],\n panels: UseSplitterPanel[],\n handleIndex: number,\n delta: number,\n redistribute?: 'nearest' | 'equal' | UseSplitterRedistributeFn\n): number[] {\n if (typeof redistribute === 'function') {\n return redistribute({ sizes: [...sizes], panels, handleIndex, delta });\n }\n\n if (redistribute === 'nearest' || redistribute === 'equal') {\n const strategy = redistribute === 'nearest' ? redistributeNearest : redistributeEqual;\n const result = strategy(sizes, panels, handleIndex, delta);\n\n const beforeIdx = handleIndex;\n const afterIdx = handleIndex + 1;\n const beforePanel = panels[beforeIdx];\n const afterPanel = panels[afterIdx];\n\n if (\n beforePanel.collapsible &&\n result[beforeIdx] < getCollapseThreshold(beforePanel) &&\n result[beforeIdx] < sizes[beforeIdx]\n ) {\n const freed = result[beforeIdx];\n result[afterIdx] += freed;\n result[beforeIdx] = 0;\n } else if (\n afterPanel.collapsible &&\n result[afterIdx] < getCollapseThreshold(afterPanel) &&\n result[afterIdx] < sizes[afterIdx]\n ) {\n const freed = result[afterIdx];\n result[beforeIdx] += freed;\n result[afterIdx] = 0;\n }\n\n return result;\n }\n\n const collapsed = checkCollapse(sizes, panels, handleIndex, delta);\n if (collapsed) {\n return collapsed;\n }\n\n return applyAdjacentOnly(sizes, panels, handleIndex, delta);\n}\n\nexport function useSplitter<T extends HTMLElement = any>(\n options: UseSplitterOptions\n): UseSplitterReturnValue<T> {\n const {\n panels,\n orientation = 'horizontal',\n sizes: controlledSizes,\n onSizeChange,\n onCollapseChange,\n redistribute,\n step = 1,\n shiftStep = 10,\n dir = 'ltr',\n enabled = true,\n } = options;\n\n const defaultSizes = panels.map((p) => p.defaultSize);\n\n const [currentSizes, setCurrentSizes] = useUncontrolled({\n value: controlledSizes,\n defaultValue: defaultSizes,\n finalValue: defaultSizes,\n onChange: onSizeChange,\n });\n\n const [activeHandle, setActiveHandle] = useState(-1);\n\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n const internalStateRef = useRef<SplitterInternalState>(createInitialInternalState());\n const containerRef = useRef<T | null>(null);\n const documentControllerRef = useRef<AbortController | null>(null);\n const frameRef = useRef(0);\n const currentSizesRef = useRef(currentSizes);\n currentSizesRef.current = currentSizes;\n\n const preCollapseSizesRef = useRef<number[]>(defaultSizes);\n\n const collapsed = currentSizes.map((size) => size === 0);\n\n const updateSizes = useCallback(\n (newSizes: number[]) => {\n currentSizesRef.current = newSizes;\n setCurrentSizes(newSizes);\n },\n [setCurrentSizes]\n );\n\n const collapsePanel = useCallback(\n (panelIndex: number) => {\n if (!panels[panelIndex]?.collapsible) {\n return;\n }\n const sizes = currentSizesRef.current;\n if (sizes[panelIndex] === 0) {\n return;\n }\n\n preCollapseSizesRef.current = [...sizes];\n const newSizes = [...sizes];\n const freedSize = newSizes[panelIndex];\n newSizes[panelIndex] = 0;\n\n const neighbor = panelIndex === 0 ? 1 : panelIndex - 1;\n newSizes[neighbor] += freedSize;\n\n updateSizes(newSizes);\n onCollapseChange?.(panelIndex, true);\n },\n [panels, updateSizes, onCollapseChange]\n );\n\n const expandPanel = useCallback(\n (panelIndex: number) => {\n if (!panels[panelIndex]?.collapsible) {\n return;\n }\n const sizes = currentSizesRef.current;\n if (sizes[panelIndex] !== 0) {\n return;\n }\n\n const preCollapse = preCollapseSizesRef.current;\n const restoreSize = preCollapse[panelIndex] || panels[panelIndex].defaultSize;\n const newSizes = [...sizes];\n\n const neighbor = panelIndex === 0 ? 1 : panelIndex - 1;\n const available = newSizes[neighbor] - getMin(panels[neighbor]);\n const actualRestore = Math.min(restoreSize, available);\n\n newSizes[panelIndex] = actualRestore;\n newSizes[neighbor] -= actualRestore;\n\n updateSizes(newSizes);\n onCollapseChange?.(panelIndex, false);\n },\n [panels, updateSizes, onCollapseChange]\n );\n\n const toggleCollapsePanel = useCallback(\n (panelIndex: number) => {\n if (currentSizesRef.current[panelIndex] === 0) {\n expandPanel(panelIndex);\n } else {\n collapsePanel(panelIndex);\n }\n },\n [collapsePanel, expandPanel]\n );\n\n const containerRefCallback: React.RefCallback<T | null> = useCallback((node) => {\n containerRef.current = node;\n }, []);\n\n const handleRefCallbacks = useRef<Map<number, (node: HTMLElement | null) => void>>(new Map());\n const handleElementControllers = useRef<Map<number, AbortController>>(new Map());\n\n const getHandleRefCallback = useCallback(\n (handleIndex: number): React.RefCallback<HTMLElement> => {\n if (handleRefCallbacks.current.has(handleIndex)) {\n return handleRefCallbacks.current.get(handleIndex)!;\n }\n\n const callback = (node: HTMLElement | null) => {\n const existingController = handleElementControllers.current.get(handleIndex);\n if (existingController) {\n existingController.abort();\n handleElementControllers.current.delete(handleIndex);\n }\n\n if (!node) {\n return;\n }\n\n const elementController = new AbortController();\n handleElementControllers.current.set(handleIndex, elementController);\n\n const onPointerDown = (event: PointerEvent) => {\n if (optionsRef.current.enabled === false) {\n return;\n }\n if (event.button !== 0) {\n return;\n }\n\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const rect = container.getBoundingClientRect();\n const isHorizontal = (optionsRef.current.orientation ?? 'horizontal') === 'horizontal';\n const containerSize = isHorizontal ? rect.width : rect.height;\n const pointerPos = isHorizontal ? event.clientX : event.clientY;\n\n const s = internalStateRef.current;\n s.isDragging = true;\n s.handleIndex = handleIndex;\n s.startPointer = pointerPos;\n s.containerSize = containerSize;\n s.startSizes = [...currentSizesRef.current];\n s.preCollapseSizes = [...preCollapseSizesRef.current];\n\n setActiveHandle(handleIndex);\n document.body.style.userSelect = 'none';\n document.body.style.webkitUserSelect = 'none';\n document.body.style.cursor = isHorizontal ? 'col-resize' : 'row-resize';\n\n optionsRef.current.onResizeStart?.(handleIndex);\n\n documentControllerRef.current?.abort();\n documentControllerRef.current = new AbortController();\n const sig = documentControllerRef.current.signal;\n\n document.addEventListener('pointermove', onPointerMove, { signal: sig });\n document.addEventListener('pointerup', onPointerUp, { signal: sig });\n document.addEventListener('pointercancel', onPointerUp, { signal: sig });\n };\n\n const flushResize = (pointerEvent: PointerEvent) => {\n const s = internalStateRef.current;\n const isHorizontal = (optionsRef.current.orientation ?? 'horizontal') === 'horizontal';\n const pointerPos = isHorizontal ? pointerEvent.clientX : pointerEvent.clientY;\n const pixelDelta = pointerPos - s.startPointer;\n const percentDelta = (pixelDelta / s.containerSize) * 100;\n\n const opts = optionsRef.current;\n const newSizes = applyConstraints(\n s.startSizes,\n opts.panels,\n s.handleIndex,\n percentDelta,\n opts.redistribute\n );\n\n const prevSizes = currentSizesRef.current;\n const beforeWasCollapsed = prevSizes[s.handleIndex] === 0;\n const afterWasCollapsed = prevSizes[s.handleIndex + 1] === 0;\n const beforeNowCollapsed = newSizes[s.handleIndex] === 0;\n const afterNowCollapsed = newSizes[s.handleIndex + 1] === 0;\n\n if (!beforeWasCollapsed && beforeNowCollapsed) {\n preCollapseSizesRef.current = [...s.startSizes];\n opts.onCollapseChange?.(s.handleIndex, true);\n } else if (beforeWasCollapsed && !beforeNowCollapsed) {\n opts.onCollapseChange?.(s.handleIndex, false);\n }\n\n if (!afterWasCollapsed && afterNowCollapsed) {\n preCollapseSizesRef.current = [...s.startSizes];\n opts.onCollapseChange?.(s.handleIndex + 1, true);\n } else if (afterWasCollapsed && !afterNowCollapsed) {\n opts.onCollapseChange?.(s.handleIndex + 1, false);\n }\n\n currentSizesRef.current = newSizes;\n setCurrentSizes(newSizes);\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const s = internalStateRef.current;\n if (!s.isDragging) {\n return;\n }\n\n cancelAnimationFrame(frameRef.current);\n frameRef.current = requestAnimationFrame(() => {\n flushResize(event);\n });\n };\n\n const onPointerUp = (event: PointerEvent) => {\n const s = internalStateRef.current;\n if (!s.isDragging) {\n return;\n }\n\n cancelAnimationFrame(frameRef.current);\n flushResize(event);\n\n s.isDragging = false;\n const finishedHandle = s.handleIndex;\n s.handleIndex = -1;\n\n setActiveHandle(-1);\n document.body.style.userSelect = '';\n document.body.style.webkitUserSelect = '';\n document.body.style.cursor = '';\n\n documentControllerRef.current?.abort();\n documentControllerRef.current = null;\n\n optionsRef.current.onResizeEnd?.(finishedHandle, [...currentSizesRef.current]);\n };\n\n node.addEventListener('pointerdown', onPointerDown, {\n signal: elementController.signal,\n });\n };\n\n handleRefCallbacks.current.set(handleIndex, callback);\n return callback;\n },\n [setCurrentSizes]\n );\n\n const getHandleProps = useCallback(\n (input: { index: number }) => {\n const { index } = input;\n const orient = orientation;\n const beforeSize = currentSizes[index] ?? 0;\n const beforePanel = panels[index];\n const afterPanel = panels[index + 1];\n\n return {\n ref: getHandleRefCallback(index),\n role: 'separator' as const,\n 'aria-orientation': orient,\n 'aria-valuenow': Math.round(beforeSize),\n 'aria-valuemin': Math.round(getMin(beforePanel)),\n 'aria-valuemax': Math.round(getMax(beforePanel)),\n tabIndex: 0,\n onKeyDown: (event: React.KeyboardEvent) => {\n if (!enabled) {\n return;\n }\n\n const isHorizontal = orient === 'horizontal';\n const isRtl = dir === 'rtl';\n\n let delta = 0;\n const currentStep = event.shiftKey ? shiftStep : step;\n\n switch (event.key) {\n case 'ArrowLeft': {\n if (isHorizontal) {\n delta = isRtl ? currentStep : -currentStep;\n }\n break;\n }\n case 'ArrowRight': {\n if (isHorizontal) {\n delta = isRtl ? -currentStep : currentStep;\n }\n break;\n }\n case 'ArrowUp': {\n if (!isHorizontal) {\n delta = -currentStep;\n }\n break;\n }\n case 'ArrowDown': {\n if (!isHorizontal) {\n delta = currentStep;\n }\n break;\n }\n case 'Home': {\n delta = -(currentSizes[index] - getMin(beforePanel));\n break;\n }\n case 'End': {\n delta = getMax(beforePanel) - currentSizes[index];\n break;\n }\n case 'Enter': {\n const beforeCollapsible = beforePanel?.collapsible;\n const afterCollapsible = afterPanel?.collapsible;\n\n if (beforeCollapsible && currentSizes[index] <= currentSizes[index + 1]) {\n toggleCollapsePanel(index);\n event.preventDefault();\n return;\n }\n if (afterCollapsible) {\n toggleCollapsePanel(index + 1);\n event.preventDefault();\n return;\n }\n if (beforeCollapsible) {\n toggleCollapsePanel(index);\n event.preventDefault();\n return;\n }\n return;\n }\n default:\n return;\n }\n\n event.preventDefault();\n\n if (delta !== 0) {\n const newSizes = applyConstraints(currentSizes, panels, index, delta, redistribute);\n const beforeWas = currentSizes[index] === 0;\n const afterWas = currentSizes[index + 1] === 0;\n const beforeNow = newSizes[index] === 0;\n const afterNow = newSizes[index + 1] === 0;\n\n if (!beforeWas && beforeNow) {\n preCollapseSizesRef.current = [...currentSizes];\n onCollapseChange?.(index, true);\n } else if (beforeWas && !beforeNow) {\n onCollapseChange?.(index, false);\n }\n\n if (!afterWas && afterNow) {\n preCollapseSizesRef.current = [...currentSizes];\n onCollapseChange?.(index + 1, true);\n } else if (afterWas && !afterNow) {\n onCollapseChange?.(index + 1, false);\n }\n\n updateSizes(newSizes);\n }\n },\n 'data-active': activeHandle === index || undefined,\n 'data-orientation': orient,\n };\n },\n [\n orientation,\n currentSizes,\n panels,\n enabled,\n dir,\n step,\n shiftStep,\n activeHandle,\n redistribute,\n getHandleRefCallback,\n toggleCollapsePanel,\n updateSizes,\n onCollapseChange,\n ]\n );\n\n return {\n ref: containerRefCallback,\n sizes: currentSizes,\n collapsed,\n activeHandle,\n getHandleProps,\n setSizes: updateSizes,\n collapse: collapsePanel,\n expand: expandPanel,\n toggleCollapse: toggleCollapsePanel,\n };\n}\n\nexport namespace useSplitter {\n export type Panel = UseSplitterPanel;\n export type Options = UseSplitterOptions;\n export type RedistributeInput = UseSplitterRedistributeInput;\n export type RedistributeFn = UseSplitterRedistributeFn;\n export type ReturnValue<T extends HTMLElement = any> = UseSplitterReturnValue<T>;\n}\n"],"mappings":"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"}
@@ -1,266 +0,0 @@
1
- "use client";
2
- import { useCallback, useRef, useState } from "react";
3
- //#region packages/@mantine/hooks/src/use-drag/use-drag.ts
4
- const VELOCITY_DECAY_MS = 100;
5
- function sign(n) {
6
- if (n > 0) return 1;
7
- if (n < 0) return -1;
8
- return 0;
9
- }
10
- function getThresholdVector(threshold) {
11
- const t = threshold ?? 0;
12
- if (typeof t === "number") return [t, t];
13
- return t;
14
- }
15
- function createInitialState() {
16
- return {
17
- isActive: false,
18
- pointerId: -1,
19
- startXY: [0, 0],
20
- prevXY: [0, 0],
21
- startTimestamp: 0,
22
- prevTimestamp: 0,
23
- thresholdMet: false,
24
- firstFired: false,
25
- lockedAxis: null,
26
- canceled: false,
27
- lastVelocity: [0, 0]
28
- };
29
- }
30
- function useDrag(handler, options = {}) {
31
- const [active, setActive] = useState(false);
32
- const handlerRef = useRef(handler);
33
- handlerRef.current = handler;
34
- const optionsRef = useRef(options);
35
- optionsRef.current = options;
36
- const stateRef = useRef(createInitialState());
37
- const documentControllerRef = useRef(null);
38
- return {
39
- ref: useCallback((node) => {
40
- if (!node) return;
41
- const elementController = new AbortController();
42
- const applyAxisConstraint = (v) => {
43
- const opts = optionsRef.current;
44
- const s = stateRef.current;
45
- if (opts.axis === "x") return [v[0], 0];
46
- if (opts.axis === "y") return [0, v[1]];
47
- if (opts.axis === "lock") {
48
- if (s.lockedAxis === null) {
49
- const t = opts.axisThreshold ?? 1;
50
- if (Math.abs(v[0]) > t || Math.abs(v[1]) > t) s.lockedAxis = Math.abs(v[0]) >= Math.abs(v[1]) ? "x" : "y";
51
- }
52
- if (s.lockedAxis === "x") return [v[0], 0];
53
- if (s.lockedAxis === "y") return [0, v[1]];
54
- }
55
- return v;
56
- };
57
- const resetDrag = () => {
58
- const s = stateRef.current;
59
- s.isActive = false;
60
- s.pointerId = -1;
61
- s.thresholdMet = false;
62
- s.firstFired = false;
63
- s.lockedAxis = null;
64
- s.canceled = false;
65
- setActive(false);
66
- document.body.style.userSelect = "";
67
- document.body.style.webkitUserSelect = "";
68
- documentControllerRef.current?.abort();
69
- documentControllerRef.current = null;
70
- };
71
- const cancel = () => {
72
- if (stateRef.current.isActive) {
73
- stateRef.current.canceled = true;
74
- resetDrag();
75
- }
76
- };
77
- const activateDrag = () => {
78
- setActive(true);
79
- document.body.style.userSelect = "none";
80
- document.body.style.webkitUserSelect = "none";
81
- };
82
- const onPointerDown = (event) => {
83
- if (optionsRef.current.enabled === false) return;
84
- if (event.button !== 0) return;
85
- if (stateRef.current.isActive) return;
86
- const s = stateRef.current;
87
- s.isActive = true;
88
- s.pointerId = event.pointerId;
89
- s.startXY = [event.clientX, event.clientY];
90
- s.prevXY = [event.clientX, event.clientY];
91
- s.startTimestamp = event.timeStamp;
92
- s.prevTimestamp = event.timeStamp;
93
- s.thresholdMet = false;
94
- s.firstFired = false;
95
- s.lockedAxis = null;
96
- s.canceled = false;
97
- s.lastVelocity = [0, 0];
98
- const [tx, ty] = getThresholdVector(optionsRef.current.threshold);
99
- if (tx === 0 && ty === 0) {
100
- s.thresholdMet = true;
101
- s.firstFired = true;
102
- activateDrag();
103
- handlerRef.current({
104
- xy: [event.clientX, event.clientY],
105
- initial: [event.clientX, event.clientY],
106
- movement: [0, 0],
107
- delta: [0, 0],
108
- distance: [0, 0],
109
- direction: [0, 0],
110
- velocity: [0, 0],
111
- elapsedTime: 0,
112
- first: true,
113
- last: false,
114
- active: true,
115
- tap: false,
116
- canceled: false,
117
- cancel,
118
- event
119
- });
120
- }
121
- documentControllerRef.current?.abort();
122
- documentControllerRef.current = new AbortController();
123
- const sig = documentControllerRef.current.signal;
124
- document.addEventListener("pointermove", onPointerMove, { signal: sig });
125
- document.addEventListener("pointerup", onPointerUp, { signal: sig });
126
- document.addEventListener("pointercancel", onPointerCancel, { signal: sig });
127
- };
128
- const onPointerMove = (event) => {
129
- const s = stateRef.current;
130
- if (!s.isActive || event.pointerId !== s.pointerId) return;
131
- const rawMovement = [event.clientX - s.startXY[0], event.clientY - s.startXY[1]];
132
- if (!s.thresholdMet) {
133
- const [tx, ty] = getThresholdVector(optionsRef.current.threshold);
134
- if (Math.abs(rawMovement[0]) < tx && Math.abs(rawMovement[1]) < ty) {
135
- s.prevXY = [event.clientX, event.clientY];
136
- s.prevTimestamp = event.timeStamp;
137
- return;
138
- }
139
- s.thresholdMet = true;
140
- activateDrag();
141
- }
142
- const movement = applyAxisConstraint(rawMovement);
143
- const delta = applyAxisConstraint([event.clientX - s.prevXY[0], event.clientY - s.prevXY[1]]);
144
- const timeDelta = event.timeStamp - s.prevTimestamp;
145
- const velocity = timeDelta > 0 ? [Math.abs(delta[0]) / timeDelta, Math.abs(delta[1]) / timeDelta] : s.lastVelocity;
146
- s.lastVelocity = velocity;
147
- const isFirst = !s.firstFired;
148
- s.firstFired = true;
149
- s.prevXY = [event.clientX, event.clientY];
150
- s.prevTimestamp = event.timeStamp;
151
- handlerRef.current({
152
- xy: [event.clientX, event.clientY],
153
- initial: [...s.startXY],
154
- movement,
155
- delta,
156
- distance: [Math.abs(movement[0]), Math.abs(movement[1])],
157
- direction: [sign(delta[0]), sign(delta[1])],
158
- velocity,
159
- elapsedTime: event.timeStamp - s.startTimestamp,
160
- first: isFirst,
161
- last: false,
162
- active: true,
163
- tap: false,
164
- canceled: false,
165
- cancel,
166
- event
167
- });
168
- };
169
- const onPointerUp = (event) => {
170
- const s = stateRef.current;
171
- if (!s.isActive || event.pointerId !== s.pointerId) return;
172
- const opts = optionsRef.current;
173
- if (!s.thresholdMet) {
174
- if (opts.filterTaps) {
175
- const mov = applyAxisConstraint([event.clientX - s.startXY[0], event.clientY - s.startXY[1]]);
176
- const dist = [Math.abs(mov[0]), Math.abs(mov[1])];
177
- const isTap = Math.max(dist[0], dist[1]) < (opts.tapThreshold ?? 3);
178
- handlerRef.current({
179
- xy: [event.clientX, event.clientY],
180
- initial: [...s.startXY],
181
- movement: mov,
182
- delta: mov,
183
- distance: dist,
184
- direction: [sign(mov[0]), sign(mov[1])],
185
- velocity: [0, 0],
186
- elapsedTime: event.timeStamp - s.startTimestamp,
187
- first: true,
188
- last: true,
189
- active: false,
190
- tap: isTap,
191
- canceled: false,
192
- cancel,
193
- event
194
- });
195
- }
196
- resetDrag();
197
- return;
198
- }
199
- const movement = applyAxisConstraint([event.clientX - s.startXY[0], event.clientY - s.startXY[1]]);
200
- const distance = [Math.abs(movement[0]), Math.abs(movement[1])];
201
- const delta = applyAxisConstraint([event.clientX - s.prevXY[0], event.clientY - s.prevXY[1]]);
202
- const velocity = event.timeStamp - s.prevTimestamp > VELOCITY_DECAY_MS ? [0, 0] : s.lastVelocity;
203
- const maxDistance = Math.max(distance[0], distance[1]);
204
- const tap = opts.filterTaps === true && maxDistance < (opts.tapThreshold ?? 3);
205
- handlerRef.current({
206
- xy: [event.clientX, event.clientY],
207
- initial: [...s.startXY],
208
- movement,
209
- delta,
210
- distance,
211
- direction: [sign(delta[0]), sign(delta[1])],
212
- velocity,
213
- elapsedTime: event.timeStamp - s.startTimestamp,
214
- first: !s.firstFired,
215
- last: true,
216
- active: false,
217
- tap,
218
- canceled: false,
219
- cancel,
220
- event
221
- });
222
- resetDrag();
223
- };
224
- const onPointerCancel = (event) => {
225
- const s = stateRef.current;
226
- if (!s.isActive || event.pointerId !== s.pointerId) return;
227
- const movement = applyAxisConstraint([event.clientX - s.startXY[0], event.clientY - s.startXY[1]]);
228
- handlerRef.current({
229
- xy: [event.clientX, event.clientY],
230
- initial: [...s.startXY],
231
- movement,
232
- delta: [0, 0],
233
- distance: [Math.abs(movement[0]), Math.abs(movement[1])],
234
- direction: [0, 0],
235
- velocity: [0, 0],
236
- elapsedTime: event.timeStamp - s.startTimestamp,
237
- first: !s.firstFired,
238
- last: true,
239
- active: false,
240
- tap: false,
241
- canceled: true,
242
- cancel,
243
- event
244
- });
245
- resetDrag();
246
- };
247
- node.addEventListener("pointerdown", onPointerDown, { signal: elementController.signal });
248
- return () => {
249
- elementController.abort();
250
- documentControllerRef.current?.abort();
251
- documentControllerRef.current = null;
252
- if (stateRef.current.isActive) {
253
- stateRef.current.isActive = false;
254
- setActive(false);
255
- document.body.style.userSelect = "";
256
- document.body.style.webkitUserSelect = "";
257
- }
258
- };
259
- }, []),
260
- active
261
- };
262
- }
263
- //#endregion
264
- export { useDrag };
265
-
266
- //# sourceMappingURL=use-drag.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-drag.mjs","names":[],"sources":["../../src/use-drag/use-drag.ts"],"sourcesContent":["// Required to disable for webkit-user-select, although deprecated, it is still required for Safari support\n/* eslint-disable @typescript-eslint/no-deprecated */\nimport { useCallback, useRef, useState } from 'react';\n\ntype Vector2 = [number, number];\n\nexport interface UseDragState {\n /** Current pointer position [x, y] */\n xy: Vector2;\n\n /** Position where the gesture started [x, y] */\n initial: Vector2;\n\n /** Displacement from start [x, y], respects axis constraint */\n movement: Vector2;\n\n /** Change since previous event [x, y] */\n delta: Vector2;\n\n /** Absolute distance per axis [x, y] */\n distance: Vector2;\n\n /** Movement direction per axis: -1, 0, or 1 */\n direction: Vector2;\n\n /** Speed per axis in px/ms */\n velocity: Vector2;\n\n /** Time since drag started in ms */\n elapsedTime: number;\n\n /** `true` on the first handler call after the threshold is met */\n first: boolean;\n\n /** `true` on the last handler call (pointer released or canceled) */\n last: boolean;\n\n /** `true` while the gesture is ongoing */\n active: boolean;\n\n /** `true` when the gesture qualifies as a tap (requires `filterTaps: true`) */\n tap: boolean;\n\n /** `true` when the gesture was interrupted by a `pointercancel` event */\n canceled: boolean;\n\n /** Function to programmatically cancel the current gesture */\n cancel: () => void;\n\n /** The source `PointerEvent` */\n event: PointerEvent;\n}\n\nexport interface UseDragOptions {\n /** Constrain movement to a specific axis. `'lock'` locks to whichever axis has more movement after `axisThreshold` is exceeded. */\n axis?: 'x' | 'y' | 'lock';\n\n /** Movement in px required to determine axis when `axis` is `'lock'`, `1` by default */\n axisThreshold?: number;\n\n /** When `true`, the last state includes `tap: true` when total distance is below `tapThreshold`, `false` by default */\n filterTaps?: boolean;\n\n /** Max displacement in px to still be considered a tap, `3` by default */\n tapThreshold?: number;\n\n /** Minimum displacement in px before the drag activates. Can be a number (both axes) or `[x, y]`. `0` by default */\n threshold?: number | Vector2;\n\n /** Enable or disable the hook, `true` by default */\n enabled?: boolean;\n}\n\nexport interface UseDragReturnValue<T extends HTMLElement = any> {\n /** Ref callback to attach to the draggable element */\n ref: React.RefCallback<T | null>;\n\n /** `true` while the element is being dragged */\n active: boolean;\n}\n\nconst VELOCITY_DECAY_MS = 100;\n\nfunction sign(n: number): -1 | 0 | 1 {\n if (n > 0) {\n return 1;\n }\n if (n < 0) {\n return -1;\n }\n return 0;\n}\n\nfunction getThresholdVector(threshold: number | Vector2 | undefined): Vector2 {\n const t = threshold ?? 0;\n if (typeof t === 'number') {\n return [t, t];\n }\n return t;\n}\n\ninterface DragInternalState {\n isActive: boolean;\n pointerId: number;\n startXY: Vector2;\n prevXY: Vector2;\n startTimestamp: number;\n prevTimestamp: number;\n thresholdMet: boolean;\n firstFired: boolean;\n lockedAxis: 'x' | 'y' | null;\n canceled: boolean;\n lastVelocity: Vector2;\n}\n\nfunction createInitialState(): DragInternalState {\n return {\n isActive: false,\n pointerId: -1,\n startXY: [0, 0],\n prevXY: [0, 0],\n startTimestamp: 0,\n prevTimestamp: 0,\n thresholdMet: false,\n firstFired: false,\n lockedAxis: null,\n canceled: false,\n lastVelocity: [0, 0],\n };\n}\n\nexport function useDrag<T extends HTMLElement = any>(\n handler: (state: UseDragState) => void,\n options: UseDragOptions = {}\n): UseDragReturnValue<T> {\n const [active, setActive] = useState(false);\n\n const handlerRef = useRef(handler);\n handlerRef.current = handler;\n\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n const stateRef = useRef<DragInternalState>(createInitialState());\n const documentControllerRef = useRef<AbortController | null>(null);\n\n const refCallback: React.RefCallback<T | null> = useCallback((node) => {\n if (!node) {\n return undefined;\n }\n\n const elementController = new AbortController();\n\n const applyAxisConstraint = (v: Vector2): Vector2 => {\n const opts = optionsRef.current;\n const s = stateRef.current;\n\n if (opts.axis === 'x') {\n return [v[0], 0];\n }\n if (opts.axis === 'y') {\n return [0, v[1]];\n }\n if (opts.axis === 'lock') {\n if (s.lockedAxis === null) {\n const t = opts.axisThreshold ?? 1;\n if (Math.abs(v[0]) > t || Math.abs(v[1]) > t) {\n s.lockedAxis = Math.abs(v[0]) >= Math.abs(v[1]) ? 'x' : 'y';\n }\n }\n if (s.lockedAxis === 'x') {\n return [v[0], 0];\n }\n if (s.lockedAxis === 'y') {\n return [0, v[1]];\n }\n }\n return v;\n };\n\n const resetDrag = () => {\n const s = stateRef.current;\n s.isActive = false;\n s.pointerId = -1;\n s.thresholdMet = false;\n s.firstFired = false;\n s.lockedAxis = null;\n s.canceled = false;\n setActive(false);\n document.body.style.userSelect = '';\n document.body.style.webkitUserSelect = '';\n documentControllerRef.current?.abort();\n documentControllerRef.current = null;\n };\n\n const cancel = () => {\n if (stateRef.current.isActive) {\n stateRef.current.canceled = true;\n resetDrag();\n }\n };\n\n const activateDrag = () => {\n setActive(true);\n document.body.style.userSelect = 'none';\n document.body.style.webkitUserSelect = 'none';\n };\n\n const onPointerDown = (event: PointerEvent) => {\n if (optionsRef.current.enabled === false) {\n return;\n }\n if (event.button !== 0) {\n return;\n }\n if (stateRef.current.isActive) {\n return;\n }\n\n const s = stateRef.current;\n s.isActive = true;\n s.pointerId = event.pointerId;\n s.startXY = [event.clientX, event.clientY];\n s.prevXY = [event.clientX, event.clientY];\n s.startTimestamp = event.timeStamp;\n s.prevTimestamp = event.timeStamp;\n s.thresholdMet = false;\n s.firstFired = false;\n s.lockedAxis = null;\n s.canceled = false;\n s.lastVelocity = [0, 0];\n\n const [tx, ty] = getThresholdVector(optionsRef.current.threshold);\n if (tx === 0 && ty === 0) {\n s.thresholdMet = true;\n s.firstFired = true;\n activateDrag();\n\n handlerRef.current({\n xy: [event.clientX, event.clientY],\n initial: [event.clientX, event.clientY],\n movement: [0, 0],\n delta: [0, 0],\n distance: [0, 0],\n direction: [0, 0],\n velocity: [0, 0],\n elapsedTime: 0,\n first: true,\n last: false,\n active: true,\n tap: false,\n canceled: false,\n cancel,\n event,\n });\n }\n\n documentControllerRef.current?.abort();\n documentControllerRef.current = new AbortController();\n const sig = documentControllerRef.current.signal;\n\n document.addEventListener('pointermove', onPointerMove, { signal: sig });\n document.addEventListener('pointerup', onPointerUp, { signal: sig });\n document.addEventListener('pointercancel', onPointerCancel, { signal: sig });\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const s = stateRef.current;\n if (!s.isActive || event.pointerId !== s.pointerId) {\n return;\n }\n\n const rawMovement: Vector2 = [event.clientX - s.startXY[0], event.clientY - s.startXY[1]];\n\n if (!s.thresholdMet) {\n const [tx, ty] = getThresholdVector(optionsRef.current.threshold);\n if (Math.abs(rawMovement[0]) < tx && Math.abs(rawMovement[1]) < ty) {\n s.prevXY = [event.clientX, event.clientY];\n s.prevTimestamp = event.timeStamp;\n return;\n }\n s.thresholdMet = true;\n activateDrag();\n }\n\n const movement = applyAxisConstraint(rawMovement);\n const rawDelta: Vector2 = [event.clientX - s.prevXY[0], event.clientY - s.prevXY[1]];\n const delta = applyAxisConstraint(rawDelta);\n const timeDelta = event.timeStamp - s.prevTimestamp;\n const velocity: Vector2 =\n timeDelta > 0\n ? [Math.abs(delta[0]) / timeDelta, Math.abs(delta[1]) / timeDelta]\n : s.lastVelocity;\n\n s.lastVelocity = velocity;\n const isFirst = !s.firstFired;\n s.firstFired = true;\n s.prevXY = [event.clientX, event.clientY];\n s.prevTimestamp = event.timeStamp;\n\n handlerRef.current({\n xy: [event.clientX, event.clientY],\n initial: [...s.startXY],\n movement,\n delta,\n distance: [Math.abs(movement[0]), Math.abs(movement[1])],\n direction: [sign(delta[0]), sign(delta[1])],\n velocity,\n elapsedTime: event.timeStamp - s.startTimestamp,\n first: isFirst,\n last: false,\n active: true,\n tap: false,\n canceled: false,\n cancel,\n event,\n });\n };\n\n const onPointerUp = (event: PointerEvent) => {\n const s = stateRef.current;\n if (!s.isActive || event.pointerId !== s.pointerId) {\n return;\n }\n\n const opts = optionsRef.current;\n\n if (!s.thresholdMet) {\n if (opts.filterTaps) {\n const rawMov: Vector2 = [event.clientX - s.startXY[0], event.clientY - s.startXY[1]];\n const mov = applyAxisConstraint(rawMov);\n const dist: Vector2 = [Math.abs(mov[0]), Math.abs(mov[1])];\n const maxDist = Math.max(dist[0], dist[1]);\n const isTap = maxDist < (opts.tapThreshold ?? 3);\n\n handlerRef.current({\n xy: [event.clientX, event.clientY],\n initial: [...s.startXY],\n movement: mov,\n delta: mov,\n distance: dist,\n direction: [sign(mov[0]), sign(mov[1])],\n velocity: [0, 0],\n elapsedTime: event.timeStamp - s.startTimestamp,\n first: true,\n last: true,\n active: false,\n tap: isTap,\n canceled: false,\n cancel,\n event,\n });\n }\n resetDrag();\n return;\n }\n\n const rawMovement: Vector2 = [event.clientX - s.startXY[0], event.clientY - s.startXY[1]];\n const movement = applyAxisConstraint(rawMovement);\n const distance: Vector2 = [Math.abs(movement[0]), Math.abs(movement[1])];\n const rawDelta: Vector2 = [event.clientX - s.prevXY[0], event.clientY - s.prevXY[1]];\n const delta = applyAxisConstraint(rawDelta);\n\n const timeSinceLastMove = event.timeStamp - s.prevTimestamp;\n const velocity: Vector2 = timeSinceLastMove > VELOCITY_DECAY_MS ? [0, 0] : s.lastVelocity;\n\n const maxDistance = Math.max(distance[0], distance[1]);\n const tap = opts.filterTaps === true && maxDistance < (opts.tapThreshold ?? 3);\n\n handlerRef.current({\n xy: [event.clientX, event.clientY],\n initial: [...s.startXY],\n movement,\n delta,\n distance,\n direction: [sign(delta[0]), sign(delta[1])],\n velocity,\n elapsedTime: event.timeStamp - s.startTimestamp,\n first: !s.firstFired,\n last: true,\n active: false,\n tap,\n canceled: false,\n cancel,\n event,\n });\n\n resetDrag();\n };\n\n const onPointerCancel = (event: PointerEvent) => {\n const s = stateRef.current;\n if (!s.isActive || event.pointerId !== s.pointerId) {\n return;\n }\n\n const rawMovement: Vector2 = [event.clientX - s.startXY[0], event.clientY - s.startXY[1]];\n const movement = applyAxisConstraint(rawMovement);\n\n handlerRef.current({\n xy: [event.clientX, event.clientY],\n initial: [...s.startXY],\n movement,\n delta: [0, 0],\n distance: [Math.abs(movement[0]), Math.abs(movement[1])],\n direction: [0, 0],\n velocity: [0, 0],\n elapsedTime: event.timeStamp - s.startTimestamp,\n first: !s.firstFired,\n last: true,\n active: false,\n tap: false,\n canceled: true,\n cancel,\n event,\n });\n\n resetDrag();\n };\n\n node.addEventListener('pointerdown', onPointerDown, {\n signal: elementController.signal,\n });\n\n return () => {\n elementController.abort();\n documentControllerRef.current?.abort();\n documentControllerRef.current = null;\n if (stateRef.current.isActive) {\n stateRef.current.isActive = false;\n setActive(false);\n document.body.style.userSelect = '';\n document.body.style.webkitUserSelect = '';\n }\n };\n }, []);\n\n return { ref: refCallback, active };\n}\n\nexport namespace useDrag {\n export type State = UseDragState;\n export type Options = UseDragOptions;\n export type ReturnValue<T extends HTMLElement = any> = UseDragReturnValue<T>;\n}\n"],"mappings":"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"}