@aiszlab/relax 1.5.7 → 1.5.9

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.
@@ -15,6 +15,6 @@ import type { AnyFunction } from "@aiszlab/relax/types";
15
15
  * @example
16
16
  * 1000
17
17
  */
18
- declare function useDebounceCallback<T extends AnyFunction>(callback: T, wait: number): Debounced<T>;
19
- declare function useDebounceCallback<T extends AnyFunction, R = unknown>(debouncer: Debouncer<T, R>, wait: number): Debounced<T>;
18
+ declare function useDebounceCallback<T extends AnyFunction>(callback: T, wait?: number): Debounced<T>;
19
+ declare function useDebounceCallback<T extends AnyFunction, R = unknown>(debouncer: Debouncer<T, R>, wait?: number): Debounced<T>;
20
20
  export { useDebounceCallback };
@@ -5,6 +5,34 @@ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
5
  var useUpdateState = require('./use-update-state.cjs');
6
6
  var useEvent = require('./use-event.cjs');
7
7
 
8
+ /**
9
+ * @description convert any event to position
10
+ */
11
+ var toPosition = function toPosition(event) {
12
+ if (event instanceof MouseEvent) {
13
+ return {
14
+ x: event.pageX,
15
+ y: event.pageY,
16
+ offsetX: event.offsetX,
17
+ offsetY: event.offsetY
18
+ };
19
+ }
20
+ if (event instanceof TouchEvent && event.touches.length === 1) {
21
+ var _event$touches$item$p, _event$touches$item, _event$touches$item$p2, _event$touches$item2;
22
+ return {
23
+ x: (_event$touches$item$p = (_event$touches$item = event.touches.item(0)) === null || _event$touches$item === void 0 ? void 0 : _event$touches$item.pageX) !== null && _event$touches$item$p !== void 0 ? _event$touches$item$p : 0,
24
+ y: (_event$touches$item$p2 = (_event$touches$item2 = event.touches.item(0)) === null || _event$touches$item2 === void 0 ? void 0 : _event$touches$item2.pageY) !== null && _event$touches$item$p2 !== void 0 ? _event$touches$item$p2 : 0,
25
+ offsetX: 0,
26
+ offsetY: 0
27
+ };
28
+ }
29
+ return {
30
+ x: 0,
31
+ y: 0,
32
+ offsetX: 0,
33
+ offsetY: 0
34
+ };
35
+ };
8
36
  /**
9
37
  * @description
10
38
  * Hook for dragging
@@ -28,24 +56,28 @@ var useDrag = function useDrag() {
28
56
  dragState = _useUpdateState2[0],
29
57
  setDragState = _useUpdateState2[1];
30
58
  var onDragStart = useEvent.useEvent(function (event) {
31
- event.persist();
59
+ var _toPosition = toPosition(event),
60
+ x = _toPosition.x,
61
+ y = _toPosition.y,
62
+ offsetX = _toPosition.offsetX,
63
+ offsetY = _toPosition.offsetY;
32
64
  setDragState(function () {
33
65
  return {
34
66
  isDragging: true,
35
67
  isDragged: true,
36
- x: event.clientX,
37
- y: event.clientY,
68
+ x: x,
69
+ y: y,
38
70
  movementX: 0,
39
71
  movementY: 0,
40
- offsetX: event.nativeEvent.layerX,
41
- offsetY: event.nativeEvent.layerY
72
+ offsetX: offsetX,
73
+ offsetY: offsetY
42
74
  };
43
75
  }, _onDragStart && function (_state) {
44
76
  _onDragStart(event, _objectSpread({}, _state));
45
77
  });
46
78
  });
47
79
  var onDragMove = useEvent.useEvent(function (event) {
48
- event.persist();
80
+ var position = toPosition(event);
49
81
  setDragState(function (_state) {
50
82
  if (!_state.isDragging) return _state;
51
83
  var x = _state.x,
@@ -59,8 +91,8 @@ var useDrag = function useDrag() {
59
91
  y: y,
60
92
  offsetX: offsetX,
61
93
  offsetY: offsetY,
62
- movementX: event.clientX - x,
63
- movementY: event.clientY - y
94
+ movementX: position.x - x,
95
+ movementY: position.y - y
64
96
  };
65
97
  }, _onDragMove && function (_state) {
66
98
  if (!_state.isDragging) return;
@@ -68,13 +100,15 @@ var useDrag = function useDrag() {
68
100
  });
69
101
  });
70
102
  var onDragEnd = useEvent.useEvent(function (event) {
71
- event.persist();
103
+ var _toPosition2 = toPosition(event),
104
+ x = _toPosition2.x,
105
+ y = _toPosition2.y;
72
106
  setDragState(function (_state) {
73
107
  return {
74
108
  isDragging: false,
75
109
  isDragged: true,
76
- x: event.clientX - _state.offsetX,
77
- y: event.clientY - _state.offsetY,
110
+ x: x - _state.offsetX,
111
+ y: y - _state.offsetY,
78
112
  movementX: 0,
79
113
  movementY: 0,
80
114
  offsetX: 0,
@@ -1,11 +1,10 @@
1
- import { type MouseEvent } from "react";
2
1
  export type UsingDrag = {
3
2
  /** Optional callback invoked upon drag end. */
4
- onDragEnd?: (event: MouseEvent<HTMLDivElement>, state: DragState) => void;
3
+ onDragEnd?: (event: UIEvent, state: DragState) => void;
5
4
  /** Optional callback invoked upon drag movement. */
6
- onDragMove?: (event: MouseEvent<HTMLDivElement>, state: DragState) => void;
5
+ onDragMove?: (event: UIEvent, state: DragState) => void;
7
6
  /** Optional callback invoked upon drag start. */
8
- onDragStart?: (event: MouseEvent<HTMLDivElement>, state: DragState) => void;
7
+ onDragStart?: (event: UIEvent, state: DragState) => void;
9
8
  };
10
9
  export type DragState = {
11
10
  /**
@@ -52,9 +51,9 @@ export type DragState = {
52
51
  export type UsedDrag = [
53
52
  DragState,
54
53
  {
55
- onDragEnd: (event: MouseEvent<HTMLDivElement>) => void;
56
- onDragMove: (event: MouseEvent<HTMLDivElement>) => void;
57
- onDragStart: (event: MouseEvent<HTMLDivElement>) => void;
54
+ onDragEnd: (event: UIEvent) => void;
55
+ onDragMove: (event: UIEvent) => void;
56
+ onDragStart: (event: UIEvent) => void;
58
57
  }
59
58
  ];
60
59
  /**
@@ -3,6 +3,34 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
3
3
  import { useUpdateState } from './use-update-state.mjs';
4
4
  import { useEvent } from './use-event.mjs';
5
5
 
6
+ /**
7
+ * @description convert any event to position
8
+ */
9
+ var toPosition = function toPosition(event) {
10
+ if (event instanceof MouseEvent) {
11
+ return {
12
+ x: event.pageX,
13
+ y: event.pageY,
14
+ offsetX: event.offsetX,
15
+ offsetY: event.offsetY
16
+ };
17
+ }
18
+ if (event instanceof TouchEvent && event.touches.length === 1) {
19
+ var _event$touches$item$p, _event$touches$item, _event$touches$item$p2, _event$touches$item2;
20
+ return {
21
+ x: (_event$touches$item$p = (_event$touches$item = event.touches.item(0)) === null || _event$touches$item === void 0 ? void 0 : _event$touches$item.pageX) !== null && _event$touches$item$p !== void 0 ? _event$touches$item$p : 0,
22
+ y: (_event$touches$item$p2 = (_event$touches$item2 = event.touches.item(0)) === null || _event$touches$item2 === void 0 ? void 0 : _event$touches$item2.pageY) !== null && _event$touches$item$p2 !== void 0 ? _event$touches$item$p2 : 0,
23
+ offsetX: 0,
24
+ offsetY: 0
25
+ };
26
+ }
27
+ return {
28
+ x: 0,
29
+ y: 0,
30
+ offsetX: 0,
31
+ offsetY: 0
32
+ };
33
+ };
6
34
  /**
7
35
  * @description
8
36
  * Hook for dragging
@@ -26,24 +54,28 @@ var useDrag = function useDrag() {
26
54
  dragState = _useUpdateState2[0],
27
55
  setDragState = _useUpdateState2[1];
28
56
  var onDragStart = useEvent(function (event) {
29
- event.persist();
57
+ var _toPosition = toPosition(event),
58
+ x = _toPosition.x,
59
+ y = _toPosition.y,
60
+ offsetX = _toPosition.offsetX,
61
+ offsetY = _toPosition.offsetY;
30
62
  setDragState(function () {
31
63
  return {
32
64
  isDragging: true,
33
65
  isDragged: true,
34
- x: event.clientX,
35
- y: event.clientY,
66
+ x: x,
67
+ y: y,
36
68
  movementX: 0,
37
69
  movementY: 0,
38
- offsetX: event.nativeEvent.layerX,
39
- offsetY: event.nativeEvent.layerY
70
+ offsetX: offsetX,
71
+ offsetY: offsetY
40
72
  };
41
73
  }, _onDragStart && function (_state) {
42
74
  _onDragStart(event, _objectSpread({}, _state));
43
75
  });
44
76
  });
45
77
  var onDragMove = useEvent(function (event) {
46
- event.persist();
78
+ var position = toPosition(event);
47
79
  setDragState(function (_state) {
48
80
  if (!_state.isDragging) return _state;
49
81
  var x = _state.x,
@@ -57,8 +89,8 @@ var useDrag = function useDrag() {
57
89
  y: y,
58
90
  offsetX: offsetX,
59
91
  offsetY: offsetY,
60
- movementX: event.clientX - x,
61
- movementY: event.clientY - y
92
+ movementX: position.x - x,
93
+ movementY: position.y - y
62
94
  };
63
95
  }, _onDragMove && function (_state) {
64
96
  if (!_state.isDragging) return;
@@ -66,13 +98,15 @@ var useDrag = function useDrag() {
66
98
  });
67
99
  });
68
100
  var onDragEnd = useEvent(function (event) {
69
- event.persist();
101
+ var _toPosition2 = toPosition(event),
102
+ x = _toPosition2.x,
103
+ y = _toPosition2.y;
70
104
  setDragState(function (_state) {
71
105
  return {
72
106
  isDragging: false,
73
107
  isDragged: true,
74
- x: event.clientX - _state.offsetX,
75
- y: event.clientY - _state.offsetY,
108
+ x: x - _state.offsetX,
109
+ y: y - _state.offsetY,
76
110
  movementX: 0,
77
111
  movementY: 0,
78
112
  offsetX: 0,
@@ -0,0 +1,44 @@
1
+ 'use strict';
2
+
3
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
4
+ var react = require('react');
5
+ var useDrag = require('./use-drag.cjs');
6
+ var useMounted = require('./use-mounted.cjs');
7
+
8
+ var useDraggable = function useDraggable() {
9
+ var _useDrag = useDrag.useDrag(),
10
+ _useDrag2 = _slicedToArray(_useDrag, 2),
11
+ dragState = _useDrag2[0],
12
+ _useDrag2$ = _useDrag2[1],
13
+ onDragStart = _useDrag2$.onDragStart,
14
+ onDragEnd = _useDrag2$.onDragEnd,
15
+ onDragMove = _useDrag2$.onDragMove;
16
+ var draggableRef = react.useRef(null);
17
+ var isDragging = dragState.isDragging;
18
+ useMounted.useMounted(function () {
19
+ var _draggable = draggableRef.current;
20
+ if (!_draggable) return;
21
+ _draggable.addEventListener("mousedown", onDragStart);
22
+ _draggable.addEventListener("touchstart", onDragStart);
23
+ return function () {
24
+ _draggable.removeEventListener("mousedown", onDragStart);
25
+ _draggable.removeEventListener("touchstart", onDragStart);
26
+ };
27
+ });
28
+ react.useEffect(function () {
29
+ if (!isDragging) return;
30
+ window.addEventListener("mousemove", onDragMove);
31
+ window.addEventListener("touchmove", onDragMove);
32
+ window.addEventListener("mouseup", onDragEnd);
33
+ window.addEventListener("touchend", onDragEnd);
34
+ return function () {
35
+ window.removeEventListener("mousemove", onDragMove);
36
+ window.removeEventListener("touchmove", onDragMove);
37
+ window.removeEventListener("mouseup", onDragEnd);
38
+ window.removeEventListener("touchend", onDragEnd);
39
+ };
40
+ }, [isDragging]);
41
+ return [draggableRef, dragState];
42
+ };
43
+
44
+ exports.useDraggable = useDraggable;
@@ -0,0 +1 @@
1
+ export declare const useDraggable: <T extends HTMLElement = HTMLElement>() => readonly [import("react").RefObject<T>, import("./use-drag").DragState];
@@ -0,0 +1,42 @@
1
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
2
+ import { useRef, useEffect } from 'react';
3
+ import { useDrag } from './use-drag.mjs';
4
+ import { useMounted } from './use-mounted.mjs';
5
+
6
+ var useDraggable = function useDraggable() {
7
+ var _useDrag = useDrag(),
8
+ _useDrag2 = _slicedToArray(_useDrag, 2),
9
+ dragState = _useDrag2[0],
10
+ _useDrag2$ = _useDrag2[1],
11
+ onDragStart = _useDrag2$.onDragStart,
12
+ onDragEnd = _useDrag2$.onDragEnd,
13
+ onDragMove = _useDrag2$.onDragMove;
14
+ var draggableRef = useRef(null);
15
+ var isDragging = dragState.isDragging;
16
+ useMounted(function () {
17
+ var _draggable = draggableRef.current;
18
+ if (!_draggable) return;
19
+ _draggable.addEventListener("mousedown", onDragStart);
20
+ _draggable.addEventListener("touchstart", onDragStart);
21
+ return function () {
22
+ _draggable.removeEventListener("mousedown", onDragStart);
23
+ _draggable.removeEventListener("touchstart", onDragStart);
24
+ };
25
+ });
26
+ useEffect(function () {
27
+ if (!isDragging) return;
28
+ window.addEventListener("mousemove", onDragMove);
29
+ window.addEventListener("touchmove", onDragMove);
30
+ window.addEventListener("mouseup", onDragEnd);
31
+ window.addEventListener("touchend", onDragEnd);
32
+ return function () {
33
+ window.removeEventListener("mousemove", onDragMove);
34
+ window.removeEventListener("touchmove", onDragMove);
35
+ window.removeEventListener("mouseup", onDragEnd);
36
+ window.removeEventListener("touchend", onDragEnd);
37
+ };
38
+ }, [isDragging]);
39
+ return [draggableRef, dragState];
40
+ };
41
+
42
+ export { useDraggable };
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var useEvent = require('./use-event.cjs');
4
+ var useMount = require('./use-mount.cjs');
5
+
6
+ /**
7
+ * @description window resize callback hook
8
+ */
9
+ var useResize = function useResize(callback) {
10
+ var resize = useEvent.useEvent(function () {
11
+ callback();
12
+ });
13
+ useMount.useMount(function () {
14
+ window.addEventListener("resize", resize);
15
+ return function () {
16
+ window.removeEventListener("resize", resize);
17
+ };
18
+ });
19
+ };
20
+
21
+ exports.useResize = useResize;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @description window resize callback hook
3
+ */
4
+ declare const useResize: (callback: Function) => void;
5
+ export { useResize };
@@ -0,0 +1,19 @@
1
+ import { useEvent } from './use-event.mjs';
2
+ import { useMount } from './use-mount.mjs';
3
+
4
+ /**
5
+ * @description window resize callback hook
6
+ */
7
+ var useResize = function useResize(callback) {
8
+ var resize = useEvent(function () {
9
+ callback();
10
+ });
11
+ useMount(function () {
12
+ window.addEventListener("resize", resize);
13
+ return function () {
14
+ window.removeEventListener("resize", resize);
15
+ };
16
+ });
17
+ };
18
+
19
+ export { useResize };
@@ -15,6 +15,6 @@ import type { AnyFunction } from "@aiszlab/relax/types";
15
15
  * @example
16
16
  * 1000
17
17
  */
18
- declare function useThrottleCallback<T extends AnyFunction>(callback: T, wait: number): Throttled<T>;
19
- declare function useThrottleCallback<T extends AnyFunction, R>(throttler: Throttler<T, R>, wait: number): Throttled<T>;
18
+ declare function useThrottleCallback<T extends AnyFunction>(callback: T, wait?: number): Throttled<T>;
19
+ declare function useThrottleCallback<T extends AnyFunction, R>(throttler: Throttler<T, R>, wait?: number): Throttled<T>;
20
20
  export { useThrottleCallback };
@@ -8,10 +8,10 @@ function useUpdateState(initialState) {
8
8
  var _useState = react.useState(initialState),
9
9
  _useState2 = _slicedToArray(_useState, 2),
10
10
  state = _useState2[0],
11
- setState = _useState2[1];
11
+ _setState = _useState2[1];
12
12
  var callbackRef = react.useRef(null);
13
- var setter = react.useCallback(function (state, callback) {
14
- setState(state);
13
+ var setState = react.useCallback(function (state, callback) {
14
+ _setState(state);
15
15
  callbackRef.current = callback !== null && callback !== void 0 ? callback : null;
16
16
  }, []);
17
17
  useUpdateEffect.useUpdateEffect(function () {
@@ -21,7 +21,7 @@ function useUpdateState(initialState) {
21
21
  _callback(state);
22
22
  callbackRef.current = null;
23
23
  }, [state]);
24
- return [state, setter];
24
+ return [state, setState];
25
25
  }
26
26
 
27
27
  exports.useUpdateState = useUpdateState;
@@ -6,10 +6,10 @@ function useUpdateState(initialState) {
6
6
  var _useState = useState(initialState),
7
7
  _useState2 = _slicedToArray(_useState, 2),
8
8
  state = _useState2[0],
9
- setState = _useState2[1];
9
+ _setState = _useState2[1];
10
10
  var callbackRef = useRef(null);
11
- var setter = useCallback(function (state, callback) {
12
- setState(state);
11
+ var setState = useCallback(function (state, callback) {
12
+ _setState(state);
13
13
  callbackRef.current = callback !== null && callback !== void 0 ? callback : null;
14
14
  }, []);
15
15
  useUpdateEffect(function () {
@@ -19,7 +19,7 @@ function useUpdateState(initialState) {
19
19
  _callback(state);
20
20
  callbackRef.current = null;
21
21
  }, [state]);
22
- return [state, setter];
22
+ return [state, setState];
23
23
  }
24
24
 
25
25
  export { useUpdateState };
package/dist/index.cjs CHANGED
@@ -37,6 +37,8 @@ var useParentSize = require('./hooks/use-parent-size.cjs');
37
37
  var useScreenSize = require('./hooks/use-screen-size.cjs');
38
38
  var useDrag = require('./hooks/use-drag.cjs');
39
39
  var useEventSource = require('./hooks/use-event-source.cjs');
40
+ var useResize = require('./hooks/use-resize.cjs');
41
+ var useDraggable = require('./hooks/use-draggable.cjs');
40
42
  var isRefable = require('./is/is-refable.cjs');
41
43
  var isUndefined = require('./is/is-undefined.cjs');
42
44
  var isNull = require('./is/is-null.cjs');
@@ -115,6 +117,8 @@ exports.useParentSize = useParentSize.useParentSize;
115
117
  exports.useScreenSize = useScreenSize.useScreenSize;
116
118
  exports.useDrag = useDrag.useDrag;
117
119
  exports.useEventSource = useEventSource.useEventSource;
120
+ exports.useResize = useResize.useResize;
121
+ exports.useDraggable = useDraggable.useDraggable;
118
122
  exports.isRefable = isRefable.isRefable;
119
123
  exports.isUndefined = isUndefined.isUndefined;
120
124
  exports.isNull = isNull.isNull;
package/dist/index.d.ts CHANGED
@@ -39,6 +39,8 @@ export { useParentSize } from "./hooks/use-parent-size";
39
39
  export { useScreenSize } from "./hooks/use-screen-size";
40
40
  export { useDrag } from "./hooks/use-drag";
41
41
  export { useEventSource } from "./hooks/use-event-source";
42
+ export { useResize } from "./hooks/use-resize";
43
+ export { useDraggable } from "./hooks/use-draggable";
42
44
  /**
43
45
  * @description
44
46
  * is
package/dist/index.mjs CHANGED
@@ -35,6 +35,8 @@ export { useParentSize } from './hooks/use-parent-size.mjs';
35
35
  export { useScreenSize } from './hooks/use-screen-size.mjs';
36
36
  export { useDrag } from './hooks/use-drag.mjs';
37
37
  export { useEventSource } from './hooks/use-event-source.mjs';
38
+ export { useResize } from './hooks/use-resize.mjs';
39
+ export { useDraggable } from './hooks/use-draggable.mjs';
38
40
  export { isRefable } from './is/is-refable.mjs';
39
41
  export { isUndefined } from './is/is-undefined.mjs';
40
42
  export { isNull } from './is/is-null.mjs';
@@ -1,8 +1,12 @@
1
1
  'use strict';
2
2
 
3
3
  var isFunction = require('../is/is-function.cjs');
4
+ var isVoid = require('../is/is-void.cjs');
4
5
 
5
6
  var mountRef = function mountRef(refable, reference) {
7
+ if (isVoid.isVoid(refable)) {
8
+ return;
9
+ }
6
10
  if (isFunction.isFunction(refable)) {
7
11
  refable(reference);
8
12
  return;
@@ -1,3 +1,4 @@
1
1
  import type { MutableRefObject, RefCallback } from "react";
2
+ import { Voidable } from "../types";
2
3
  export type Refable<T> = RefCallback<T> | MutableRefObject<T> | string;
3
- export declare const mountRef: <T>(refable: Refable<T>, reference: T) => void;
4
+ export declare const mountRef: <T>(refable: Voidable<Refable<T>>, reference: T) => void;
@@ -1,6 +1,10 @@
1
1
  import { isFunction } from '../is/is-function.mjs';
2
+ import { isVoid } from '../is/is-void.mjs';
2
3
 
3
4
  var mountRef = function mountRef(refable, reference) {
5
+ if (isVoid(refable)) {
6
+ return;
7
+ }
4
8
  if (isFunction(refable)) {
5
9
  refable(reference);
6
10
  return;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @description
3
+ * concat array
4
+ */
5
+ declare const concat: <T>(...arrays: T[][]) => T[];
6
+ export { concat };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiszlab/relax",
3
- "version": "1.5.7",
3
+ "version": "1.5.9",
4
4
  "description": "react utils collection",
5
5
  "exports": {
6
6
  ".": {
@@ -43,7 +43,7 @@
43
43
  "@rollup/plugin-babel": "^6.0.4",
44
44
  "@rollup/plugin-node-resolve": "^15.3.0",
45
45
  "@rollup/plugin-typescript": "^12.1.1",
46
- "@testing-library/react": "^16.0.1",
46
+ "@testing-library/react": "^16.1.0",
47
47
  "@types/babel__core": "^7.20.5",
48
48
  "@types/react": "^18.3.12",
49
49
  "@types/react-dom": "^18.3.1",
@@ -52,8 +52,8 @@
52
52
  "jest-environment-jsdom": "^29.7.0",
53
53
  "react": "^18.3.1",
54
54
  "react-dom": "^18.3.1",
55
- "rollup": "^4.24.4",
56
- "typescript": "5.6.2"
55
+ "rollup": "^4.28.1",
56
+ "typescript": "5.7.3"
57
57
  },
58
58
  "peerDependencies": {
59
59
  "react": "18",