@os-design/use-drag 1.0.1 → 1.0.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["userSelection","disable","document","body","style","userSelect","enable","useDrag","props","minMouseDistPx","longPressMs","isDraggingRef","startMousePosRef","minMouseDistPxRef","handlersRef","onDragStart","onDragMove","onDragEnd","current","dragStartHandler","position","startPosition","dragEndHandler","onMouseDown","e","button","x","clientX","y","clientY","onMouseMove","pos","startPos","diffX","Math","abs","diffY","diff","sqrt","onMouseUp","longPressHandler","touches","length","onTouchStart","onTouchMove","onTouchEnd","touchStartHandler","touchMoveHandler","touchEndHandler"],"mappings":"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","sourcesContent":["import {\n MouseEventHandler,\n TouchEventHandler,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport useLongPress from '@os-design/use-long-press';\nimport useEvent from '@os-design/use-event';\n\nexport interface Position {\n x: number;\n y: number;\n}\n\nexport type OnDragStart = (position: Position, startPosition: Position) => void;\nexport type OnDragMove = (position: Position) => void;\nexport type OnDragEnd = () => void;\n\nexport interface UseDragProps {\n minMouseDistPx?: number;\n longPressMs?: number;\n onDragStart?: OnDragStart;\n onDragMove?: OnDragMove;\n onDragEnd?: OnDragEnd;\n}\n\nconst userSelection = {\n disable: () => {\n document.body.style.userSelect = 'none';\n },\n enable: () => {\n document.body.style.userSelect = '';\n },\n};\n\nexport interface DragHandlers {\n onMouseDown: MouseEventHandler;\n onTouchStart: TouchEventHandler;\n}\n\nconst useDrag = (props: UseDragProps): DragHandlers => {\n const { minMouseDistPx = 10, longPressMs = 500 } = props;\n\n const isDraggingRef = useRef(false);\n const startMousePosRef = useRef<Position | null>(null);\n const minMouseDistPxRef = useRef(minMouseDistPx);\n const handlersRef = useRef({\n onDragStart: props.onDragStart || (() => {}),\n onDragMove: props.onDragMove || (() => {}),\n onDragEnd: props.onDragEnd || (() => {}),\n });\n\n useEffect(() => {\n minMouseDistPxRef.current = minMouseDistPx;\n }, [minMouseDistPx]);\n\n useEffect(() => {\n handlersRef.current = {\n onDragStart: props.onDragStart || (() => {}),\n onDragMove: props.onDragMove || (() => {}),\n onDragEnd: props.onDragEnd || (() => {}),\n };\n }, [props.onDragEnd, props.onDragMove, props.onDragStart]);\n\n const dragStartHandler = useCallback(\n (position: Position, startPosition: Position) => {\n const { onDragStart } = handlersRef.current;\n onDragStart(position, startPosition);\n isDraggingRef.current = true;\n startMousePosRef.current = null;\n },\n []\n );\n\n const dragEndHandler = useCallback(() => {\n const { onDragEnd } = handlersRef.current;\n if (isDraggingRef.current) onDragEnd();\n isDraggingRef.current = false;\n startMousePosRef.current = null;\n userSelection.enable();\n }, []);\n\n const onMouseDown = useCallback<MouseEventHandler>((e) => {\n if (e.button !== 0) return; // Allow only the left mouse button\n startMousePosRef.current = { x: e.clientX, y: e.clientY };\n userSelection.disable();\n }, []);\n\n const onMouseMove = useCallback(\n (e: MouseEvent) => {\n const pos = { x: e.clientX, y: e.clientY };\n if (isDraggingRef.current) {\n const { onDragMove } = handlersRef.current;\n onDragMove(pos);\n return;\n }\n const startPos = startMousePosRef.current;\n if (!startPos) return;\n const diffX = Math.abs(pos.x - startPos.x);\n const diffY = Math.abs(pos.y - startPos.y);\n const diff = Math.sqrt(diffX ** 2 + diffY ** 2);\n if (diff >= minMouseDistPxRef.current) {\n dragStartHandler(pos, startPos);\n }\n },\n [dragStartHandler]\n );\n\n const onMouseUp = useCallback(() => {\n dragEndHandler();\n }, [dragEndHandler]);\n\n const longPressHandler = useCallback<TouchEventHandler>(\n (e) => {\n if (e.touches.length === 0) return;\n const pos = { x: e.touches[0].clientX, y: e.touches[0].clientY };\n dragStartHandler(pos, pos);\n },\n [dragStartHandler]\n );\n\n const { onTouchStart, onTouchMove, onTouchEnd } = useLongPress(\n longPressHandler,\n longPressMs\n );\n\n const touchStartHandler = useCallback<TouchEventHandler>(\n (e) => {\n onTouchStart(e);\n userSelection.disable();\n },\n [onTouchStart]\n );\n\n const touchMoveHandler = useCallback(\n (e: TouchEvent) => {\n onTouchMove();\n if (!isDraggingRef.current || e.touches.length === 0) return;\n const { onDragMove } = handlersRef.current;\n onDragMove({ x: e.touches[0].clientX, y: e.touches[0].clientY });\n },\n [onTouchMove]\n );\n\n const touchEndHandler = useCallback(() => {\n onTouchEnd();\n dragEndHandler();\n }, [dragEndHandler, onTouchEnd]);\n\n useEvent(document, 'mousemove', onMouseMove);\n useEvent(document, 'mouseup', onMouseUp);\n useEvent(document, 'touchmove', touchMoveHandler);\n useEvent(document, 'touchend', touchEndHandler);\n\n return {\n onMouseDown,\n onTouchStart: touchStartHandler,\n };\n};\n\nexport default useDrag;\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["userSelection","disable","document","body","style","userSelect","enable","useDrag","props","minMouseDistPx","longPressMs","isDraggingRef","useRef","startMousePosRef","minMouseDistPxRef","handlersRef","onDragStart","onDragMove","onDragEnd","useEffect","current","dragStartHandler","useCallback","position","startPosition","dragEndHandler","onMouseDown","e","button","x","clientX","y","clientY","onMouseMove","pos","startPos","diffX","Math","abs","diffY","diff","sqrt","onMouseUp","longPressHandler","touches","length","useLongPress","onTouchStart","onTouchMove","onTouchEnd","touchStartHandler","touchMoveHandler","touchEndHandler","useEvent"],"sources":["../../src/index.ts"],"sourcesContent":["import {\n MouseEventHandler,\n TouchEventHandler,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport useLongPress from '@os-design/use-long-press';\nimport useEvent from '@os-design/use-event';\n\nexport interface Position {\n x: number;\n y: number;\n}\n\nexport type OnDragStart = (position: Position, startPosition: Position) => void;\nexport type OnDragMove = (position: Position) => void;\nexport type OnDragEnd = () => void;\n\nexport interface UseDragProps {\n minMouseDistPx?: number;\n longPressMs?: number;\n onDragStart?: OnDragStart;\n onDragMove?: OnDragMove;\n onDragEnd?: OnDragEnd;\n}\n\nconst userSelection = {\n disable: () => {\n document.body.style.userSelect = 'none';\n },\n enable: () => {\n document.body.style.userSelect = '';\n },\n};\n\nexport interface DragHandlers {\n onMouseDown: MouseEventHandler;\n onTouchStart: TouchEventHandler;\n}\n\nconst useDrag = (props: UseDragProps): DragHandlers => {\n const { minMouseDistPx = 10, longPressMs = 500 } = props;\n\n const isDraggingRef = useRef(false);\n const startMousePosRef = useRef<Position | null>(null);\n const minMouseDistPxRef = useRef(minMouseDistPx);\n const handlersRef = useRef({\n onDragStart: props.onDragStart || (() => {}),\n onDragMove: props.onDragMove || (() => {}),\n onDragEnd: props.onDragEnd || (() => {}),\n });\n\n useEffect(() => {\n minMouseDistPxRef.current = minMouseDistPx;\n }, [minMouseDistPx]);\n\n useEffect(() => {\n handlersRef.current = {\n onDragStart: props.onDragStart || (() => {}),\n onDragMove: props.onDragMove || (() => {}),\n onDragEnd: props.onDragEnd || (() => {}),\n };\n }, [props.onDragEnd, props.onDragMove, props.onDragStart]);\n\n const dragStartHandler = useCallback(\n (position: Position, startPosition: Position) => {\n const { onDragStart } = handlersRef.current;\n onDragStart(position, startPosition);\n isDraggingRef.current = true;\n startMousePosRef.current = null;\n },\n []\n );\n\n const dragEndHandler = useCallback(() => {\n const { onDragEnd } = handlersRef.current;\n if (isDraggingRef.current) onDragEnd();\n isDraggingRef.current = false;\n startMousePosRef.current = null;\n userSelection.enable();\n }, []);\n\n const onMouseDown = useCallback<MouseEventHandler>((e) => {\n if (e.button !== 0) return; // Allow only the left mouse button\n startMousePosRef.current = { x: e.clientX, y: e.clientY };\n userSelection.disable();\n }, []);\n\n const onMouseMove = useCallback(\n (e: MouseEvent) => {\n const pos = { x: e.clientX, y: e.clientY };\n if (isDraggingRef.current) {\n const { onDragMove } = handlersRef.current;\n onDragMove(pos);\n return;\n }\n const startPos = startMousePosRef.current;\n if (!startPos) return;\n const diffX = Math.abs(pos.x - startPos.x);\n const diffY = Math.abs(pos.y - startPos.y);\n const diff = Math.sqrt(diffX ** 2 + diffY ** 2);\n if (diff >= minMouseDistPxRef.current) {\n dragStartHandler(pos, startPos);\n }\n },\n [dragStartHandler]\n );\n\n const onMouseUp = useCallback(() => {\n dragEndHandler();\n }, [dragEndHandler]);\n\n const longPressHandler = useCallback<TouchEventHandler>(\n (e) => {\n if (e.touches.length === 0) return;\n const pos = { x: e.touches[0].clientX, y: e.touches[0].clientY };\n dragStartHandler(pos, pos);\n },\n [dragStartHandler]\n );\n\n const { onTouchStart, onTouchMove, onTouchEnd } = useLongPress(\n longPressHandler,\n longPressMs\n );\n\n const touchStartHandler = useCallback<TouchEventHandler>(\n (e) => {\n onTouchStart(e);\n userSelection.disable();\n },\n [onTouchStart]\n );\n\n const touchMoveHandler = useCallback(\n (e: TouchEvent) => {\n onTouchMove();\n if (!isDraggingRef.current || e.touches.length === 0) return;\n const { onDragMove } = handlersRef.current;\n onDragMove({ x: e.touches[0].clientX, y: e.touches[0].clientY });\n },\n [onTouchMove]\n );\n\n const touchEndHandler = useCallback(() => {\n onTouchEnd();\n dragEndHandler();\n }, [dragEndHandler, onTouchEnd]);\n\n useEvent(document, 'mousemove', onMouseMove);\n useEvent(document, 'mouseup', onMouseUp);\n useEvent(document, 'touchmove', touchMoveHandler);\n useEvent(document, 'touchend', touchEndHandler);\n\n return {\n onMouseDown,\n onTouchStart: touchStartHandler,\n };\n};\n\nexport default useDrag;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["useCallback","useEffect","useRef","useLongPress","useEvent","userSelection","disable","document","body","style","userSelect","enable","useDrag","props","minMouseDistPx","longPressMs","isDraggingRef","startMousePosRef","minMouseDistPxRef","handlersRef","onDragStart","onDragMove","onDragEnd","current","dragStartHandler","position","startPosition","dragEndHandler","onMouseDown","e","button","x","clientX","y","clientY","onMouseMove","pos","startPos","diffX","Math","abs","diffY","diff","sqrt","onMouseUp","longPressHandler","touches","length","onTouchStart","onTouchMove","onTouchEnd","touchStartHandler","touchMoveHandler","touchEndHandler"],"mappings":"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","sourcesContent":["import {\n MouseEventHandler,\n TouchEventHandler,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport useLongPress from '@os-design/use-long-press';\nimport useEvent from '@os-design/use-event';\n\nexport interface Position {\n x: number;\n y: number;\n}\n\nexport type OnDragStart = (position: Position, startPosition: Position) => void;\nexport type OnDragMove = (position: Position) => void;\nexport type OnDragEnd = () => void;\n\nexport interface UseDragProps {\n minMouseDistPx?: number;\n longPressMs?: number;\n onDragStart?: OnDragStart;\n onDragMove?: OnDragMove;\n onDragEnd?: OnDragEnd;\n}\n\nconst userSelection = {\n disable: () => {\n document.body.style.userSelect = 'none';\n },\n enable: () => {\n document.body.style.userSelect = '';\n },\n};\n\nexport interface DragHandlers {\n onMouseDown: MouseEventHandler;\n onTouchStart: TouchEventHandler;\n}\n\nconst useDrag = (props: UseDragProps): DragHandlers => {\n const { minMouseDistPx = 10, longPressMs = 500 } = props;\n\n const isDraggingRef = useRef(false);\n const startMousePosRef = useRef<Position | null>(null);\n const minMouseDistPxRef = useRef(minMouseDistPx);\n const handlersRef = useRef({\n onDragStart: props.onDragStart || (() => {}),\n onDragMove: props.onDragMove || (() => {}),\n onDragEnd: props.onDragEnd || (() => {}),\n });\n\n useEffect(() => {\n minMouseDistPxRef.current = minMouseDistPx;\n }, [minMouseDistPx]);\n\n useEffect(() => {\n handlersRef.current = {\n onDragStart: props.onDragStart || (() => {}),\n onDragMove: props.onDragMove || (() => {}),\n onDragEnd: props.onDragEnd || (() => {}),\n };\n }, [props.onDragEnd, props.onDragMove, props.onDragStart]);\n\n const dragStartHandler = useCallback(\n (position: Position, startPosition: Position) => {\n const { onDragStart } = handlersRef.current;\n onDragStart(position, startPosition);\n isDraggingRef.current = true;\n startMousePosRef.current = null;\n },\n []\n );\n\n const dragEndHandler = useCallback(() => {\n const { onDragEnd } = handlersRef.current;\n if (isDraggingRef.current) onDragEnd();\n isDraggingRef.current = false;\n startMousePosRef.current = null;\n userSelection.enable();\n }, []);\n\n const onMouseDown = useCallback<MouseEventHandler>((e) => {\n if (e.button !== 0) return; // Allow only the left mouse button\n startMousePosRef.current = { x: e.clientX, y: e.clientY };\n userSelection.disable();\n }, []);\n\n const onMouseMove = useCallback(\n (e: MouseEvent) => {\n const pos = { x: e.clientX, y: e.clientY };\n if (isDraggingRef.current) {\n const { onDragMove } = handlersRef.current;\n onDragMove(pos);\n return;\n }\n const startPos = startMousePosRef.current;\n if (!startPos) return;\n const diffX = Math.abs(pos.x - startPos.x);\n const diffY = Math.abs(pos.y - startPos.y);\n const diff = Math.sqrt(diffX ** 2 + diffY ** 2);\n if (diff >= minMouseDistPxRef.current) {\n dragStartHandler(pos, startPos);\n }\n },\n [dragStartHandler]\n );\n\n const onMouseUp = useCallback(() => {\n dragEndHandler();\n }, [dragEndHandler]);\n\n const longPressHandler = useCallback<TouchEventHandler>(\n (e) => {\n if (e.touches.length === 0) return;\n const pos = { x: e.touches[0].clientX, y: e.touches[0].clientY };\n dragStartHandler(pos, pos);\n },\n [dragStartHandler]\n );\n\n const { onTouchStart, onTouchMove, onTouchEnd } = useLongPress(\n longPressHandler,\n longPressMs\n );\n\n const touchStartHandler = useCallback<TouchEventHandler>(\n (e) => {\n onTouchStart(e);\n userSelection.disable();\n },\n [onTouchStart]\n );\n\n const touchMoveHandler = useCallback(\n (e: TouchEvent) => {\n onTouchMove();\n if (!isDraggingRef.current || e.touches.length === 0) return;\n const { onDragMove } = handlersRef.current;\n onDragMove({ x: e.touches[0].clientX, y: e.touches[0].clientY });\n },\n [onTouchMove]\n );\n\n const touchEndHandler = useCallback(() => {\n onTouchEnd();\n dragEndHandler();\n }, [dragEndHandler, onTouchEnd]);\n\n useEvent(document, 'mousemove', onMouseMove);\n useEvent(document, 'mouseup', onMouseUp);\n useEvent(document, 'touchmove', touchMoveHandler);\n useEvent(document, 'touchend', touchEndHandler);\n\n return {\n onMouseDown,\n onTouchStart: touchStartHandler,\n };\n};\n\nexport default useDrag;\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["useCallback","useEffect","useRef","useLongPress","useEvent","userSelection","disable","document","body","style","userSelect","enable","useDrag","props","minMouseDistPx","longPressMs","isDraggingRef","startMousePosRef","minMouseDistPxRef","handlersRef","onDragStart","onDragMove","onDragEnd","current","dragStartHandler","position","startPosition","dragEndHandler","onMouseDown","e","button","x","clientX","y","clientY","onMouseMove","pos","startPos","diffX","Math","abs","diffY","diff","sqrt","onMouseUp","longPressHandler","touches","length","onTouchStart","onTouchMove","onTouchEnd","touchStartHandler","touchMoveHandler","touchEndHandler"],"sources":["../../src/index.ts"],"sourcesContent":["import {\n MouseEventHandler,\n TouchEventHandler,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport useLongPress from '@os-design/use-long-press';\nimport useEvent from '@os-design/use-event';\n\nexport interface Position {\n x: number;\n y: number;\n}\n\nexport type OnDragStart = (position: Position, startPosition: Position) => void;\nexport type OnDragMove = (position: Position) => void;\nexport type OnDragEnd = () => void;\n\nexport interface UseDragProps {\n minMouseDistPx?: number;\n longPressMs?: number;\n onDragStart?: OnDragStart;\n onDragMove?: OnDragMove;\n onDragEnd?: OnDragEnd;\n}\n\nconst userSelection = {\n disable: () => {\n document.body.style.userSelect = 'none';\n },\n enable: () => {\n document.body.style.userSelect = '';\n },\n};\n\nexport interface DragHandlers {\n onMouseDown: MouseEventHandler;\n onTouchStart: TouchEventHandler;\n}\n\nconst useDrag = (props: UseDragProps): DragHandlers => {\n const { minMouseDistPx = 10, longPressMs = 500 } = props;\n\n const isDraggingRef = useRef(false);\n const startMousePosRef = useRef<Position | null>(null);\n const minMouseDistPxRef = useRef(minMouseDistPx);\n const handlersRef = useRef({\n onDragStart: props.onDragStart || (() => {}),\n onDragMove: props.onDragMove || (() => {}),\n onDragEnd: props.onDragEnd || (() => {}),\n });\n\n useEffect(() => {\n minMouseDistPxRef.current = minMouseDistPx;\n }, [minMouseDistPx]);\n\n useEffect(() => {\n handlersRef.current = {\n onDragStart: props.onDragStart || (() => {}),\n onDragMove: props.onDragMove || (() => {}),\n onDragEnd: props.onDragEnd || (() => {}),\n };\n }, [props.onDragEnd, props.onDragMove, props.onDragStart]);\n\n const dragStartHandler = useCallback(\n (position: Position, startPosition: Position) => {\n const { onDragStart } = handlersRef.current;\n onDragStart(position, startPosition);\n isDraggingRef.current = true;\n startMousePosRef.current = null;\n },\n []\n );\n\n const dragEndHandler = useCallback(() => {\n const { onDragEnd } = handlersRef.current;\n if (isDraggingRef.current) onDragEnd();\n isDraggingRef.current = false;\n startMousePosRef.current = null;\n userSelection.enable();\n }, []);\n\n const onMouseDown = useCallback<MouseEventHandler>((e) => {\n if (e.button !== 0) return; // Allow only the left mouse button\n startMousePosRef.current = { x: e.clientX, y: e.clientY };\n userSelection.disable();\n }, []);\n\n const onMouseMove = useCallback(\n (e: MouseEvent) => {\n const pos = { x: e.clientX, y: e.clientY };\n if (isDraggingRef.current) {\n const { onDragMove } = handlersRef.current;\n onDragMove(pos);\n return;\n }\n const startPos = startMousePosRef.current;\n if (!startPos) return;\n const diffX = Math.abs(pos.x - startPos.x);\n const diffY = Math.abs(pos.y - startPos.y);\n const diff = Math.sqrt(diffX ** 2 + diffY ** 2);\n if (diff >= minMouseDistPxRef.current) {\n dragStartHandler(pos, startPos);\n }\n },\n [dragStartHandler]\n );\n\n const onMouseUp = useCallback(() => {\n dragEndHandler();\n }, [dragEndHandler]);\n\n const longPressHandler = useCallback<TouchEventHandler>(\n (e) => {\n if (e.touches.length === 0) return;\n const pos = { x: e.touches[0].clientX, y: e.touches[0].clientY };\n dragStartHandler(pos, pos);\n },\n [dragStartHandler]\n );\n\n const { onTouchStart, onTouchMove, onTouchEnd } = useLongPress(\n longPressHandler,\n longPressMs\n );\n\n const touchStartHandler = useCallback<TouchEventHandler>(\n (e) => {\n onTouchStart(e);\n userSelection.disable();\n },\n [onTouchStart]\n );\n\n const touchMoveHandler = useCallback(\n (e: TouchEvent) => {\n onTouchMove();\n if (!isDraggingRef.current || e.touches.length === 0) return;\n const { onDragMove } = handlersRef.current;\n onDragMove({ x: e.touches[0].clientX, y: e.touches[0].clientY });\n },\n [onTouchMove]\n );\n\n const touchEndHandler = useCallback(() => {\n onTouchEnd();\n dragEndHandler();\n }, [dragEndHandler, onTouchEnd]);\n\n useEvent(document, 'mousemove', onMouseMove);\n useEvent(document, 'mouseup', onMouseUp);\n useEvent(document, 'touchmove', touchMoveHandler);\n useEvent(document, 'touchend', touchEndHandler);\n\n return {\n onMouseDown,\n onTouchStart: touchStartHandler,\n };\n};\n\nexport default useDrag;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@os-design/use-drag",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "license": "UNLICENSED",
5
5
  "repository": "git@gitlab.com:os-team/libs/os-design.git",
6
6
  "main": "dist/cjs/index.js",
@@ -28,11 +28,11 @@
28
28
  "access": "public"
29
29
  },
30
30
  "dependencies": {
31
- "@os-design/use-event": "^1.0.6",
32
- "@os-design/use-long-press": "^1.0.1"
31
+ "@os-design/use-event": "^1.0.7",
32
+ "@os-design/use-long-press": "^1.0.2"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "react": ">=18"
36
36
  },
37
- "gitHead": "990fa0eb8e38bbb94ebea1ba0c825574ff11fe5e"
37
+ "gitHead": "d68e1f41705b52f8a0c5d2fbf7846839c2176a5d"
38
38
  }