react-use-drag 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -19,7 +19,7 @@ var useDrag = function (options) {
19
19
  setIsMoving(true);
20
20
  onStart === null || onStart === void 0 ? void 0 : onStart();
21
21
  }, [onStart]);
22
- var onPointerUp = react.useMemo(function () {
22
+ var handleEnd = react.useCallback(function (byCancellation) {
23
23
  if (!isMoving) {
24
24
  return undefined;
25
25
  }
@@ -27,10 +27,12 @@ var useDrag = function (options) {
27
27
  event.preventDefault();
28
28
  setIsMoving(false);
29
29
  event.currentTarget.releasePointerCapture(event.pointerId);
30
- onEnd === null || onEnd === void 0 ? void 0 : onEnd(offsetPosition.x, offsetPosition.y);
30
+ onEnd === null || onEnd === void 0 ? void 0 : onEnd(byCancellation ? 0 : offsetPosition.x, byCancellation ? 0 : offsetPosition.y);
31
31
  setOffsetPosition({ x: 0, y: 0 });
32
32
  };
33
- }, [isMoving, onEnd, offsetPosition]);
33
+ }, []);
34
+ var onPointerUp = react.useMemo(function () { return handleEnd(false); }, [handleEnd]);
35
+ var onPointerCancel = react.useMemo(function () { return handleEnd(true); }, [handleEnd]);
34
36
  var onPointerMove = react.useMemo(function () {
35
37
  if (!isMoving) {
36
38
  return undefined;
@@ -55,7 +57,8 @@ var useDrag = function (options) {
55
57
  onPointerDown: onPointerDown,
56
58
  onPointerUp: onPointerUp,
57
59
  onPointerMove: onPointerMove,
58
- }); }, [onPointerDown, onPointerMove, onPointerUp]);
60
+ onPointerCancel: onPointerCancel,
61
+ }); }, [onPointerDown, onPointerMove, onPointerUp, onPointerCancel]);
59
62
  return react.useMemo(function () { return ({ isMoving: isMoving, elementProps: elementProps }); }, [isMoving, elementProps]);
60
63
  };
61
64
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/useDrag.ts"],"sourcesContent":["import {\n\tPointerEvent,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react'\n\nexport const useDrag = (options: {\n\tonRelativePositionChange: (x: number, y: number) => void\n\tonStart?: () => void\n\tonEnd?: (x: number, y: number) => void\n}) => {\n\tconst { onRelativePositionChange, onStart, onEnd } = options\n\tconst [isMoving, setIsMoving] = useState(false)\n\tconst startPosition = useRef({ x: 0, y: 0, scrollX: 0, scrollY: 0 })\n\tconst [offsetPosition, setOffsetPosition] = useState({ x: 0, y: 0 })\n\n\tconst onPointerDown = useCallback(\n\t\t(event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tstartPosition.current = {\n\t\t\t\tx: event.clientX,\n\t\t\t\ty: event.clientY,\n\t\t\t\tscrollX: window.scrollX, // @TODO: handle any parent scroll\n\t\t\t\tscrollY: window.scrollY, // @TODO: handle any parent scroll\n\t\t\t}\n\t\t\tevent.currentTarget.setPointerCapture(event.pointerId)\n\t\t\tsetIsMoving(true)\n\t\t\tonStart?.()\n\t\t},\n\t\t[onStart],\n\t)\n\n\tconst onPointerUp = useMemo(() => {\n\t\tif (!isMoving) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn (event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tsetIsMoving(false)\n\t\t\tevent.currentTarget.releasePointerCapture(event.pointerId)\n\t\t\tonEnd?.(offsetPosition.x, offsetPosition.y)\n\t\t\tsetOffsetPosition({ x: 0, y: 0 })\n\t\t}\n\t}, [isMoving, onEnd, offsetPosition])\n\n\tconst onPointerMove = useMemo(() => {\n\t\tif (!isMoving) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn (event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tconst newOffsetPosition = {\n\t\t\t\tx:\n\t\t\t\t\tevent.clientX +\n\t\t\t\t\twindow.scrollX -\n\t\t\t\t\t(startPosition.current.x + startPosition.current.scrollX),\n\t\t\t\ty:\n\t\t\t\t\tevent.clientY +\n\t\t\t\t\twindow.scrollY -\n\t\t\t\t\t(startPosition.current.y + startPosition.current.scrollY),\n\t\t\t}\n\t\t\tsetOffsetPosition(newOffsetPosition)\n\t\t}\n\t}, [isMoving])\n\n\tuseEffect(() => {\n\t\tonRelativePositionChange(offsetPosition.x, offsetPosition.y)\n\t}, [offsetPosition.x, offsetPosition.y, onRelativePositionChange])\n\n\tconst elementProps = useMemo(\n\t\t() => ({\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerMove,\n\t\t}),\n\t\t[onPointerDown, onPointerMove, onPointerUp],\n\t)\n\n\treturn useMemo(() => ({ isMoving, elementProps }), [isMoving, elementProps])\n}\n"],"names":["useState","useRef","useCallback","useMemo","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/useDrag.ts"],"sourcesContent":["import {\n\tPointerEvent,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react'\n\nexport const useDrag = (options: {\n\tonRelativePositionChange: (x: number, y: number) => void\n\tonStart?: () => void\n\tonEnd?: (x: number, y: number) => void\n}) => {\n\tconst { onRelativePositionChange, onStart, onEnd } = options\n\tconst [isMoving, setIsMoving] = useState(false)\n\tconst startPosition = useRef({ x: 0, y: 0, scrollX: 0, scrollY: 0 })\n\tconst [offsetPosition, setOffsetPosition] = useState({ x: 0, y: 0 })\n\n\tconst onPointerDown = useCallback(\n\t\t(event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tstartPosition.current = {\n\t\t\t\tx: event.clientX,\n\t\t\t\ty: event.clientY,\n\t\t\t\tscrollX: window.scrollX, // @TODO: handle any parent scroll\n\t\t\t\tscrollY: window.scrollY, // @TODO: handle any parent scroll\n\t\t\t}\n\t\t\tevent.currentTarget.setPointerCapture(event.pointerId)\n\t\t\tsetIsMoving(true)\n\t\t\tonStart?.()\n\t\t},\n\t\t[onStart],\n\t)\n\n\tconst handleEnd = useCallback((byCancellation: boolean) => {\n\t\tif (!isMoving) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn (event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tsetIsMoving(false)\n\t\t\tevent.currentTarget.releasePointerCapture(event.pointerId)\n\t\t\tonEnd?.(\n\t\t\t\tbyCancellation ? 0 : offsetPosition.x,\n\t\t\t\tbyCancellation ? 0 : offsetPosition.y,\n\t\t\t)\n\t\t\tsetOffsetPosition({ x: 0, y: 0 })\n\t\t}\n\t}, [])\n\n\tconst onPointerUp = useMemo(() => handleEnd(false), [handleEnd])\n\tconst onPointerCancel = useMemo(() => handleEnd(true), [handleEnd])\n\n\tconst onPointerMove = useMemo(() => {\n\t\tif (!isMoving) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn (event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tconst newOffsetPosition = {\n\t\t\t\tx:\n\t\t\t\t\tevent.clientX +\n\t\t\t\t\twindow.scrollX -\n\t\t\t\t\t(startPosition.current.x + startPosition.current.scrollX),\n\t\t\t\ty:\n\t\t\t\t\tevent.clientY +\n\t\t\t\t\twindow.scrollY -\n\t\t\t\t\t(startPosition.current.y + startPosition.current.scrollY),\n\t\t\t}\n\t\t\tsetOffsetPosition(newOffsetPosition)\n\t\t}\n\t}, [isMoving])\n\n\tuseEffect(() => {\n\t\tonRelativePositionChange(offsetPosition.x, offsetPosition.y)\n\t}, [offsetPosition.x, offsetPosition.y, onRelativePositionChange])\n\n\tconst elementProps = useMemo(\n\t\t() => ({\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerMove,\n\t\t\tonPointerCancel,\n\t\t}),\n\t\t[onPointerDown, onPointerMove, onPointerUp, onPointerCancel],\n\t)\n\n\treturn useMemo(() => ({ isMoving, elementProps }), [isMoving, elementProps])\n}\n"],"names":["useState","useRef","useCallback","useMemo","useEffect"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -17,7 +17,7 @@ var useDrag = function (options) {
17
17
  setIsMoving(true);
18
18
  onStart === null || onStart === void 0 ? void 0 : onStart();
19
19
  }, [onStart]);
20
- var onPointerUp = useMemo(function () {
20
+ var handleEnd = useCallback(function (byCancellation) {
21
21
  if (!isMoving) {
22
22
  return undefined;
23
23
  }
@@ -25,10 +25,12 @@ var useDrag = function (options) {
25
25
  event.preventDefault();
26
26
  setIsMoving(false);
27
27
  event.currentTarget.releasePointerCapture(event.pointerId);
28
- onEnd === null || onEnd === void 0 ? void 0 : onEnd(offsetPosition.x, offsetPosition.y);
28
+ onEnd === null || onEnd === void 0 ? void 0 : onEnd(byCancellation ? 0 : offsetPosition.x, byCancellation ? 0 : offsetPosition.y);
29
29
  setOffsetPosition({ x: 0, y: 0 });
30
30
  };
31
- }, [isMoving, onEnd, offsetPosition]);
31
+ }, []);
32
+ var onPointerUp = useMemo(function () { return handleEnd(false); }, [handleEnd]);
33
+ var onPointerCancel = useMemo(function () { return handleEnd(true); }, [handleEnd]);
32
34
  var onPointerMove = useMemo(function () {
33
35
  if (!isMoving) {
34
36
  return undefined;
@@ -53,7 +55,8 @@ var useDrag = function (options) {
53
55
  onPointerDown: onPointerDown,
54
56
  onPointerUp: onPointerUp,
55
57
  onPointerMove: onPointerMove,
56
- }); }, [onPointerDown, onPointerMove, onPointerUp]);
58
+ onPointerCancel: onPointerCancel,
59
+ }); }, [onPointerDown, onPointerMove, onPointerUp, onPointerCancel]);
57
60
  return useMemo(function () { return ({ isMoving: isMoving, elementProps: elementProps }); }, [isMoving, elementProps]);
58
61
  };
59
62
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/useDrag.ts"],"sourcesContent":["import {\n\tPointerEvent,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react'\n\nexport const useDrag = (options: {\n\tonRelativePositionChange: (x: number, y: number) => void\n\tonStart?: () => void\n\tonEnd?: (x: number, y: number) => void\n}) => {\n\tconst { onRelativePositionChange, onStart, onEnd } = options\n\tconst [isMoving, setIsMoving] = useState(false)\n\tconst startPosition = useRef({ x: 0, y: 0, scrollX: 0, scrollY: 0 })\n\tconst [offsetPosition, setOffsetPosition] = useState({ x: 0, y: 0 })\n\n\tconst onPointerDown = useCallback(\n\t\t(event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tstartPosition.current = {\n\t\t\t\tx: event.clientX,\n\t\t\t\ty: event.clientY,\n\t\t\t\tscrollX: window.scrollX, // @TODO: handle any parent scroll\n\t\t\t\tscrollY: window.scrollY, // @TODO: handle any parent scroll\n\t\t\t}\n\t\t\tevent.currentTarget.setPointerCapture(event.pointerId)\n\t\t\tsetIsMoving(true)\n\t\t\tonStart?.()\n\t\t},\n\t\t[onStart],\n\t)\n\n\tconst onPointerUp = useMemo(() => {\n\t\tif (!isMoving) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn (event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tsetIsMoving(false)\n\t\t\tevent.currentTarget.releasePointerCapture(event.pointerId)\n\t\t\tonEnd?.(offsetPosition.x, offsetPosition.y)\n\t\t\tsetOffsetPosition({ x: 0, y: 0 })\n\t\t}\n\t}, [isMoving, onEnd, offsetPosition])\n\n\tconst onPointerMove = useMemo(() => {\n\t\tif (!isMoving) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn (event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tconst newOffsetPosition = {\n\t\t\t\tx:\n\t\t\t\t\tevent.clientX +\n\t\t\t\t\twindow.scrollX -\n\t\t\t\t\t(startPosition.current.x + startPosition.current.scrollX),\n\t\t\t\ty:\n\t\t\t\t\tevent.clientY +\n\t\t\t\t\twindow.scrollY -\n\t\t\t\t\t(startPosition.current.y + startPosition.current.scrollY),\n\t\t\t}\n\t\t\tsetOffsetPosition(newOffsetPosition)\n\t\t}\n\t}, [isMoving])\n\n\tuseEffect(() => {\n\t\tonRelativePositionChange(offsetPosition.x, offsetPosition.y)\n\t}, [offsetPosition.x, offsetPosition.y, onRelativePositionChange])\n\n\tconst elementProps = useMemo(\n\t\t() => ({\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerMove,\n\t\t}),\n\t\t[onPointerDown, onPointerMove, onPointerUp],\n\t)\n\n\treturn useMemo(() => ({ isMoving, elementProps }), [isMoving, elementProps])\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/useDrag.ts"],"sourcesContent":["import {\n\tPointerEvent,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react'\n\nexport const useDrag = (options: {\n\tonRelativePositionChange: (x: number, y: number) => void\n\tonStart?: () => void\n\tonEnd?: (x: number, y: number) => void\n}) => {\n\tconst { onRelativePositionChange, onStart, onEnd } = options\n\tconst [isMoving, setIsMoving] = useState(false)\n\tconst startPosition = useRef({ x: 0, y: 0, scrollX: 0, scrollY: 0 })\n\tconst [offsetPosition, setOffsetPosition] = useState({ x: 0, y: 0 })\n\n\tconst onPointerDown = useCallback(\n\t\t(event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tstartPosition.current = {\n\t\t\t\tx: event.clientX,\n\t\t\t\ty: event.clientY,\n\t\t\t\tscrollX: window.scrollX, // @TODO: handle any parent scroll\n\t\t\t\tscrollY: window.scrollY, // @TODO: handle any parent scroll\n\t\t\t}\n\t\t\tevent.currentTarget.setPointerCapture(event.pointerId)\n\t\t\tsetIsMoving(true)\n\t\t\tonStart?.()\n\t\t},\n\t\t[onStart],\n\t)\n\n\tconst handleEnd = useCallback((byCancellation: boolean) => {\n\t\tif (!isMoving) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn (event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tsetIsMoving(false)\n\t\t\tevent.currentTarget.releasePointerCapture(event.pointerId)\n\t\t\tonEnd?.(\n\t\t\t\tbyCancellation ? 0 : offsetPosition.x,\n\t\t\t\tbyCancellation ? 0 : offsetPosition.y,\n\t\t\t)\n\t\t\tsetOffsetPosition({ x: 0, y: 0 })\n\t\t}\n\t}, [])\n\n\tconst onPointerUp = useMemo(() => handleEnd(false), [handleEnd])\n\tconst onPointerCancel = useMemo(() => handleEnd(true), [handleEnd])\n\n\tconst onPointerMove = useMemo(() => {\n\t\tif (!isMoving) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn (event: PointerEvent<HTMLElement>) => {\n\t\t\tevent.preventDefault()\n\t\t\tconst newOffsetPosition = {\n\t\t\t\tx:\n\t\t\t\t\tevent.clientX +\n\t\t\t\t\twindow.scrollX -\n\t\t\t\t\t(startPosition.current.x + startPosition.current.scrollX),\n\t\t\t\ty:\n\t\t\t\t\tevent.clientY +\n\t\t\t\t\twindow.scrollY -\n\t\t\t\t\t(startPosition.current.y + startPosition.current.scrollY),\n\t\t\t}\n\t\t\tsetOffsetPosition(newOffsetPosition)\n\t\t}\n\t}, [isMoving])\n\n\tuseEffect(() => {\n\t\tonRelativePositionChange(offsetPosition.x, offsetPosition.y)\n\t}, [offsetPosition.x, offsetPosition.y, onRelativePositionChange])\n\n\tconst elementProps = useMemo(\n\t\t() => ({\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerMove,\n\t\t\tonPointerCancel,\n\t\t}),\n\t\t[onPointerDown, onPointerMove, onPointerUp, onPointerCancel],\n\t)\n\n\treturn useMemo(() => ({ isMoving, elementProps }), [isMoving, elementProps])\n}\n"],"names":[],"mappings":"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"}
package/dist/useDrag.d.ts CHANGED
@@ -9,5 +9,6 @@ export declare const useDrag: (options: {
9
9
  onPointerDown: (event: PointerEvent<HTMLElement>) => void;
10
10
  onPointerUp: ((event: PointerEvent<HTMLElement>) => void) | undefined;
11
11
  onPointerMove: ((event: PointerEvent<HTMLElement>) => void) | undefined;
12
+ onPointerCancel: ((event: PointerEvent<HTMLElement>) => void) | undefined;
12
13
  };
13
14
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-use-drag",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "Drag interactions made easier.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",