@cites/react-hooks 0.0.2 → 0.0.3
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/core/useDragGesture.d.ts +27 -0
- package/dist/core/useDragGesture.d.ts.map +1 -0
- package/dist/core/useDragGesture.js +113 -0
- package/dist/core/useDragGesture.js.map +1 -0
- package/dist/core/useDraggable.d.ts +18 -9
- package/dist/core/useDraggable.d.ts.map +1 -1
- package/dist/core/useDraggable.js +67 -73
- package/dist/core/useDraggable.js.map +1 -1
- package/dist/core/useResizable.d.ts +25 -0
- package/dist/core/useResizable.d.ts.map +1 -0
- package/dist/core/useResizable.js +79 -0
- package/dist/core/useResizable.js.map +1 -0
- package/dist/core/useSlider.d.ts +22 -0
- package/dist/core/useSlider.d.ts.map +1 -0
- package/dist/core/useSlider.js +66 -0
- package/dist/core/useSlider.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface DragDelta {
|
|
2
|
+
deltaX: number;
|
|
3
|
+
deltaY: number;
|
|
4
|
+
}
|
|
5
|
+
export interface HitArea {
|
|
6
|
+
top: number;
|
|
7
|
+
right: number;
|
|
8
|
+
bottom: number;
|
|
9
|
+
left: number;
|
|
10
|
+
}
|
|
11
|
+
export interface DragGestureOptions {
|
|
12
|
+
onDragStart?: (event: PointerEvent) => void;
|
|
13
|
+
onDrag?: (state: DragDelta) => void;
|
|
14
|
+
onDragEnd?: (event: PointerEvent) => void;
|
|
15
|
+
hitArea?: number | Partial<HitArea>;
|
|
16
|
+
shouldPreventDrag?: (event: React.PointerEvent) => boolean | void;
|
|
17
|
+
}
|
|
18
|
+
export interface DragHandleProps {
|
|
19
|
+
onPointerDown: (event: React.PointerEvent) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function useDragGesture(options: DragGestureOptions): {
|
|
22
|
+
isDragging: boolean;
|
|
23
|
+
getDragHandleProps: () => {
|
|
24
|
+
onPointerDown: (event: React.PointerEvent) => void;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=useDragGesture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDragGesture.d.ts","sourceRoot":"","sources":["../../src/core/useDragGesture.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,OAAO,GAAG,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,eAAe;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC;CACtD;AAmBD,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB;;;+BA0ER,KAAK,CAAC,YAAY;;EAuCnE"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { useRef, useState, useCallback, useEffect } from "react";
|
|
2
|
+
import { useEventCallback } from "./useEventCallback"; // 根据你的实际路径调整
|
|
3
|
+
function normalizeHitArea(input) {
|
|
4
|
+
if (typeof input === "number") {
|
|
5
|
+
return {
|
|
6
|
+
top: input,
|
|
7
|
+
right: input,
|
|
8
|
+
bottom: input,
|
|
9
|
+
left: input,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
top: input?.top ?? 0,
|
|
14
|
+
right: input?.right ?? 0,
|
|
15
|
+
bottom: input?.bottom ?? 0,
|
|
16
|
+
left: input?.left ?? 0,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function useDragGesture(options) {
|
|
20
|
+
const [isDragging, setIsDragging] = useState(false);
|
|
21
|
+
const startPositionRef = useRef({ x: 0, y: 0 });
|
|
22
|
+
const dragTargetRef = useRef(null);
|
|
23
|
+
const latestDeltaRef = useRef(null);
|
|
24
|
+
const rafIdRef = useRef(null);
|
|
25
|
+
const handleDragStart = useEventCallback((event) => {
|
|
26
|
+
options.onDragStart?.(event);
|
|
27
|
+
});
|
|
28
|
+
const handleDrag = useEventCallback((delta) => {
|
|
29
|
+
options.onDrag?.(delta);
|
|
30
|
+
});
|
|
31
|
+
const handleDragEnd = useEventCallback((event) => {
|
|
32
|
+
options.onDragEnd?.(event);
|
|
33
|
+
});
|
|
34
|
+
const handlePointerMove = useEventCallback((event) => {
|
|
35
|
+
if (!isDragging)
|
|
36
|
+
return;
|
|
37
|
+
latestDeltaRef.current = {
|
|
38
|
+
deltaX: event.clientX - startPositionRef.current.x,
|
|
39
|
+
deltaY: event.clientY - startPositionRef.current.y,
|
|
40
|
+
};
|
|
41
|
+
if (rafIdRef.current === null) {
|
|
42
|
+
rafIdRef.current = requestAnimationFrame(() => {
|
|
43
|
+
if (latestDeltaRef.current) {
|
|
44
|
+
handleDrag(latestDeltaRef.current);
|
|
45
|
+
latestDeltaRef.current = null;
|
|
46
|
+
}
|
|
47
|
+
rafIdRef.current = null;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
const handlePointerUp = useEventCallback((event) => {
|
|
52
|
+
setIsDragging(false);
|
|
53
|
+
if (dragTargetRef.current) {
|
|
54
|
+
dragTargetRef.current.releasePointerCapture(event.pointerId);
|
|
55
|
+
}
|
|
56
|
+
handleDragEnd(event);
|
|
57
|
+
window.removeEventListener("pointermove", handlePointerMove);
|
|
58
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
59
|
+
dragTargetRef.current = null;
|
|
60
|
+
if (rafIdRef.current !== null) {
|
|
61
|
+
cancelAnimationFrame(rafIdRef.current);
|
|
62
|
+
rafIdRef.current = null;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
const onHitTest = useEventCallback((event) => {
|
|
66
|
+
const el = event.currentTarget;
|
|
67
|
+
const rect = el.getBoundingClientRect();
|
|
68
|
+
const hit = normalizeHitArea(options.hitArea);
|
|
69
|
+
const within = event.clientX >= rect.left - hit.left &&
|
|
70
|
+
event.clientX <= rect.right + hit.right &&
|
|
71
|
+
event.clientY >= rect.top - hit.top &&
|
|
72
|
+
event.clientY <= rect.bottom + hit.bottom;
|
|
73
|
+
return within;
|
|
74
|
+
});
|
|
75
|
+
const onStartingDragTest = useEventCallback((event) => {
|
|
76
|
+
return options.shouldPreventDrag?.(event);
|
|
77
|
+
});
|
|
78
|
+
const handlePointerDown = useCallback((event) => {
|
|
79
|
+
if (onStartingDragTest(event) === true)
|
|
80
|
+
return;
|
|
81
|
+
const within = onHitTest(event);
|
|
82
|
+
if (!within)
|
|
83
|
+
return;
|
|
84
|
+
event.preventDefault();
|
|
85
|
+
event.stopPropagation();
|
|
86
|
+
setIsDragging(true);
|
|
87
|
+
startPositionRef.current = { x: event.clientX, y: event.clientY };
|
|
88
|
+
const target = event.currentTarget;
|
|
89
|
+
dragTargetRef.current = target;
|
|
90
|
+
target.setPointerCapture(event.pointerId);
|
|
91
|
+
handleDragStart(event.nativeEvent);
|
|
92
|
+
window.addEventListener("pointermove", handlePointerMove);
|
|
93
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
94
|
+
}, [onStartingDragTest, onHitTest, handleDragStart, handlePointerMove, handlePointerUp]); // 这些引用是稳定的
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
return () => {
|
|
97
|
+
window.removeEventListener("pointermove", handlePointerMove);
|
|
98
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
99
|
+
if (rafIdRef.current !== null) {
|
|
100
|
+
cancelAnimationFrame(rafIdRef.current);
|
|
101
|
+
rafIdRef.current = null;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}, [handlePointerMove, handlePointerUp]);
|
|
105
|
+
return {
|
|
106
|
+
isDragging,
|
|
107
|
+
getDragHandleProps: () => ({
|
|
108
|
+
onPointerDown: handlePointerDown,
|
|
109
|
+
}),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
;
|
|
113
|
+
//# sourceMappingURL=useDragGesture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDragGesture.js","sourceRoot":"","sources":["../../src/core/useDragGesture.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,31 @@
|
|
|
1
|
-
import
|
|
2
|
-
export interface
|
|
1
|
+
import { type DragHandleProps } from "./useDragGesture.js";
|
|
2
|
+
export interface Position {
|
|
3
3
|
x: number;
|
|
4
4
|
y: number;
|
|
5
5
|
}
|
|
6
|
-
|
|
6
|
+
interface Bounds {
|
|
7
7
|
left: number;
|
|
8
|
-
top: number;
|
|
9
8
|
right: number;
|
|
9
|
+
top: number;
|
|
10
10
|
bottom: number;
|
|
11
11
|
}
|
|
12
|
-
export interface
|
|
13
|
-
|
|
12
|
+
export interface DraggableInfo {
|
|
13
|
+
position: Position;
|
|
14
14
|
isDragging: boolean;
|
|
15
|
+
draggableProps: DragHandleProps;
|
|
15
16
|
}
|
|
16
17
|
export interface DraggableOptions {
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
position?: Position;
|
|
19
|
+
onPositionChange?: (pos: Position) => void;
|
|
20
|
+
initialPosition?: Position;
|
|
19
21
|
bounds?: Bounds;
|
|
22
|
+
gridSize?: number;
|
|
23
|
+
lockAxis?: "x" | "y";
|
|
24
|
+
onDragStart?: (pos: Position) => void;
|
|
25
|
+
onDragEnd?: (pos: Position) => void;
|
|
26
|
+
updatePositionOnDragStart?: boolean;
|
|
27
|
+
shouldPreventDrag?: (event: React.PointerEvent) => boolean | undefined;
|
|
20
28
|
}
|
|
21
|
-
export declare
|
|
29
|
+
export declare function useDraggable(options?: DraggableOptions): DraggableInfo;
|
|
30
|
+
export {};
|
|
22
31
|
//# sourceMappingURL=useDraggable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDraggable.d.ts","sourceRoot":"","sources":["../../src/core/useDraggable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDraggable.d.ts","sourceRoot":"","sources":["../../src/core/useDraggable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3E,MAAM,WAAW,QAAQ;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,UAAU,MAAM;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,OAAO,GAAG,SAAS,CAAC;CAC1E;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,aAAa,CAuF1E"}
|
|
@@ -1,82 +1,76 @@
|
|
|
1
|
-
import { useState,
|
|
1
|
+
import { useState, useRef } from "react";
|
|
2
2
|
import { useEventCallback } from "./useEventCallback.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
import { useDragGesture } from "./useDragGesture.js";
|
|
4
|
+
import { clamp } from "../utils/index.js";
|
|
5
|
+
export function useDraggable(options = {}) {
|
|
6
|
+
const { position: controlledPosition, onPositionChange, initialPosition = { x: 0, y: 0 }, bounds, gridSize, lockAxis, onDragStart, onDragEnd, updatePositionOnDragStart, shouldPreventDrag, } = options;
|
|
7
|
+
const [uncontrolledPosition, setUncontrolledPosition] = useState(initialPosition);
|
|
8
|
+
const isControlled = controlledPosition !== undefined && typeof onPositionChange === "function";
|
|
9
|
+
const position = isControlled ? controlledPosition : uncontrolledPosition;
|
|
10
|
+
const dragStartPosRef = useRef({ x: 0, y: 0 });
|
|
11
|
+
const clampPosition = (pos) => {
|
|
12
|
+
if (!bounds)
|
|
13
|
+
return pos;
|
|
14
|
+
return {
|
|
15
|
+
x: clamp(pos.x, bounds.left, bounds.right),
|
|
16
|
+
y: clamp(pos.y, bounds.top, bounds.bottom),
|
|
14
17
|
};
|
|
15
|
-
}
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
y: dragInfo.current.initialPosition.y + (dragInfo.current.lastPoint.y - dragInfo.current.startPoint.y),
|
|
18
|
+
};
|
|
19
|
+
const snapToGrid = (pos) => {
|
|
20
|
+
if (!gridSize || gridSize <= 1)
|
|
21
|
+
return pos;
|
|
22
|
+
return {
|
|
23
|
+
x: Math.round(pos.x / gridSize) * gridSize,
|
|
24
|
+
y: Math.round(pos.y / gridSize) * gridSize,
|
|
23
25
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
};
|
|
27
|
+
const updatePosition = useEventCallback((nextPos) => {
|
|
28
|
+
let pos = snapToGrid(clampPosition(nextPos));
|
|
29
|
+
if (lockAxis === "x") {
|
|
30
|
+
pos.y = position.y;
|
|
27
31
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
});
|
|
31
|
-
const handlePointerMove = useEventCallback((event) => {
|
|
32
|
-
if (dragInfo.current) {
|
|
33
|
-
dragInfo.current.lastPoint = { x: event.clientX, y: event.clientY };
|
|
32
|
+
else if (lockAxis === "y") {
|
|
33
|
+
pos.x = position.x;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
cancelAnimationFrame(animationFrameId.current);
|
|
35
|
+
if (isControlled) {
|
|
36
|
+
onPositionChange(pos);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
setUncontrolledPosition(pos);
|
|
41
40
|
}
|
|
42
|
-
dragInfo.current = null;
|
|
43
|
-
setIsDragging(false);
|
|
44
41
|
});
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
: {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
42
|
+
// Use our perfected, underlying drag gesture hook.
|
|
43
|
+
const { isDragging, getDragHandleProps } = useDragGesture({
|
|
44
|
+
onDragStart: (event) => {
|
|
45
|
+
// When the drag starts, lock in the current position.
|
|
46
|
+
const startPosition = updatePositionOnDragStart ? {
|
|
47
|
+
x: event.clientX,
|
|
48
|
+
y: event.clientY,
|
|
49
|
+
} : {
|
|
50
|
+
...position,
|
|
51
|
+
};
|
|
52
|
+
dragStartPosRef.current = startPosition;
|
|
53
|
+
onDragStart?.(startPosition);
|
|
54
|
+
updatePositionOnDragStart && updatePosition(startPosition);
|
|
55
|
+
},
|
|
56
|
+
onDrag: ({ deltaX, deltaY }) => {
|
|
57
|
+
let nextPos = {
|
|
58
|
+
x: dragStartPosRef.current.x + deltaX,
|
|
59
|
+
y: dragStartPosRef.current.y + deltaY,
|
|
60
|
+
};
|
|
61
|
+
updatePosition(nextPos);
|
|
62
|
+
},
|
|
63
|
+
onDragEnd: () => {
|
|
64
|
+
onDragEnd?.(position);
|
|
65
|
+
},
|
|
66
|
+
shouldPreventDrag,
|
|
62
67
|
});
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (animationFrameId.current) {
|
|
72
|
-
cancelAnimationFrame(animationFrameId.current);
|
|
73
|
-
if (animationFrameId) {
|
|
74
|
-
animationFrameId.current = null;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
dragInfo.current = null;
|
|
78
|
-
};
|
|
79
|
-
}, [handleNode]);
|
|
80
|
-
return { ...currentPosition, isDragging, ref: handleRefCallback };
|
|
81
|
-
};
|
|
68
|
+
// Return the current state and the props getter for the component to use.
|
|
69
|
+
return {
|
|
70
|
+
position,
|
|
71
|
+
isDragging,
|
|
72
|
+
draggableProps: getDragHandleProps(),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
;
|
|
82
76
|
//# sourceMappingURL=useDraggable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDraggable.js","sourceRoot":"","sources":["../../src/core/useDraggable.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"useDraggable.js","sourceRoot":"","sources":["../../src/core/useDraggable.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type DragHandleProps, type HitArea } from "./useDragGesture.js";
|
|
2
|
+
export interface Size {
|
|
3
|
+
width: number;
|
|
4
|
+
height: number;
|
|
5
|
+
}
|
|
6
|
+
export interface ResizableInfo {
|
|
7
|
+
size: Size;
|
|
8
|
+
isResizing: boolean;
|
|
9
|
+
getResizeHandleProps: (direction?: ResizeDirection, hitArea?: number | Partial<HitArea>) => DragHandleProps;
|
|
10
|
+
}
|
|
11
|
+
export interface ResizableOptions {
|
|
12
|
+
size?: Size;
|
|
13
|
+
onSizeChange?: (size: Size) => void;
|
|
14
|
+
initialSize?: Size;
|
|
15
|
+
minWidth?: number;
|
|
16
|
+
maxWidth?: number;
|
|
17
|
+
minHeight?: number;
|
|
18
|
+
maxHeight?: number;
|
|
19
|
+
axis?: "both" | "x" | "y";
|
|
20
|
+
lockAspectRatio?: boolean;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export type ResizeDirection = "right" | "bottom" | "bottom-right";
|
|
24
|
+
export declare function useResizable(options?: ResizableOptions): ResizableInfo;
|
|
25
|
+
//# sourceMappingURL=useResizable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResizable.d.ts","sourceRoot":"","sources":["../../src/core/useResizable.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAIzF,MAAM,WAAW,IAAI;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB,EAAE,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,eAAe,CAAC;CAC/G;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAC;AAElE,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,aAAa,CA0F1E"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { useState, useRef } from "react";
|
|
2
|
+
import { useDragGesture } from "./useDragGesture.js";
|
|
3
|
+
import { useEventCallback } from "./useEventCallback.js";
|
|
4
|
+
import { clamp } from "../utils/index.js";
|
|
5
|
+
export function useResizable(options = {}) {
|
|
6
|
+
const { size: controlledSize, onSizeChange, initialSize = { width: 100, height: 100 }, minWidth = 0, maxWidth = Infinity, minHeight = 0, maxHeight = Infinity, axis = "both", lockAspectRatio = false, disabled = false, } = options;
|
|
7
|
+
const [uncontrolledSize, setUncontrolledSize] = useState(initialSize);
|
|
8
|
+
const dragStartSizeRef = useRef({ width: 0, height: 0 });
|
|
9
|
+
const isControlled = controlledSize !== undefined && typeof onSizeChange === "function";
|
|
10
|
+
const size = isControlled ? controlledSize : uncontrolledSize;
|
|
11
|
+
const updateSize = useEventCallback((newSize) => {
|
|
12
|
+
const clampedSize = {
|
|
13
|
+
width: clamp(newSize.width, minWidth, maxWidth),
|
|
14
|
+
height: clamp(newSize.height, minHeight, maxHeight),
|
|
15
|
+
};
|
|
16
|
+
if (isControlled) {
|
|
17
|
+
onSizeChange?.(clampedSize);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
setUncontrolledSize(clampedSize);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
function createResizeHandler(direction, hitArea) {
|
|
24
|
+
return useDragGesture({
|
|
25
|
+
hitArea,
|
|
26
|
+
onDragStart: () => {
|
|
27
|
+
if (disabled)
|
|
28
|
+
return;
|
|
29
|
+
dragStartSizeRef.current = size;
|
|
30
|
+
},
|
|
31
|
+
onDrag: ({ deltaX, deltaY }) => {
|
|
32
|
+
if (disabled)
|
|
33
|
+
return;
|
|
34
|
+
let width = dragStartSizeRef.current.width;
|
|
35
|
+
let height = dragStartSizeRef.current.height;
|
|
36
|
+
if (direction === "right" || direction === "bottom-right") {
|
|
37
|
+
width += deltaX;
|
|
38
|
+
}
|
|
39
|
+
if (direction === "bottom" || direction === "bottom-right") {
|
|
40
|
+
height += deltaY;
|
|
41
|
+
}
|
|
42
|
+
if (axis === "x") {
|
|
43
|
+
height = dragStartSizeRef.current.height;
|
|
44
|
+
}
|
|
45
|
+
else if (axis === "y") {
|
|
46
|
+
width = dragStartSizeRef.current.width;
|
|
47
|
+
}
|
|
48
|
+
if (lockAspectRatio) {
|
|
49
|
+
const aspect = dragStartSizeRef.current.width / dragStartSizeRef.current.height;
|
|
50
|
+
if (direction === "right") {
|
|
51
|
+
height = width / aspect;
|
|
52
|
+
}
|
|
53
|
+
else if (direction === "bottom") {
|
|
54
|
+
width = height * aspect;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
const avgDelta = (deltaX + deltaY) / 2;
|
|
58
|
+
width = dragStartSizeRef.current.width + avgDelta;
|
|
59
|
+
height = width / aspect;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
updateSize({ width, height });
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
const handlers = {
|
|
67
|
+
right: (hitArea) => createResizeHandler("right", hitArea),
|
|
68
|
+
bottom: (hitArea) => createResizeHandler("bottom", hitArea),
|
|
69
|
+
"bottom-right": (hitArea) => createResizeHandler("bottom-right", hitArea),
|
|
70
|
+
};
|
|
71
|
+
return {
|
|
72
|
+
size,
|
|
73
|
+
isResizing: handlers.right().isDragging || handlers.bottom().isDragging || handlers["bottom-right"]().isDragging,
|
|
74
|
+
getResizeHandleProps: (direction = "bottom-right", hitArea) => {
|
|
75
|
+
return handlers[direction](hitArea).getDragHandleProps();
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=useResizable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResizable.js","sourceRoot":"","sources":["../../src/core/useResizable.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface SliderInfo {
|
|
2
|
+
value: number;
|
|
3
|
+
isDragging: boolean;
|
|
4
|
+
trackProps: React.HTMLAttributes<HTMLDivElement> & {
|
|
5
|
+
ref: React.Ref<HTMLDivElement>;
|
|
6
|
+
};
|
|
7
|
+
handleProps: React.HTMLAttributes<HTMLElement>;
|
|
8
|
+
axis: "horizontal" | "vertical";
|
|
9
|
+
direction: "ltr" | "rtl";
|
|
10
|
+
}
|
|
11
|
+
export interface SliderOptions {
|
|
12
|
+
value?: number;
|
|
13
|
+
onChange?: (value: number) => void;
|
|
14
|
+
initialValue?: number;
|
|
15
|
+
min?: number;
|
|
16
|
+
max?: number;
|
|
17
|
+
step?: number;
|
|
18
|
+
axis?: "horizontal" | "vertical";
|
|
19
|
+
direction?: "ltr" | "rtl";
|
|
20
|
+
}
|
|
21
|
+
export declare function useSlider(options?: SliderOptions): SliderInfo;
|
|
22
|
+
//# sourceMappingURL=useSlider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlider.d.ts","sourceRoot":"","sources":["../../src/core/useSlider.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;QAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;KAAE,CAAC;IACtF,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,EAAE,YAAY,GAAG,UAAU,CAAC;IAChC,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACjC,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CAC7B;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,UAAU,CA0EjE"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { useState, useRef, useMemo } from "react";
|
|
2
|
+
import { useDragGesture } from "./useDragGesture.js";
|
|
3
|
+
import { useEventCallback } from "./useEventCallback.js";
|
|
4
|
+
import { clamp } from "../utils/index.js";
|
|
5
|
+
export function useSlider(options = {}) {
|
|
6
|
+
const { value: controlledValue, onChange, initialValue = 0, min = 0, max = 100, step = 1, axis = "horizontal", direction = "ltr", } = options;
|
|
7
|
+
const [uncontrolledValue, setUncontrolledValue] = useState(initialValue);
|
|
8
|
+
const trackRef = useRef(null);
|
|
9
|
+
const isControlled = controlledValue !== undefined && typeof onChange === "function";
|
|
10
|
+
const value = isControlled ? controlledValue : uncontrolledValue;
|
|
11
|
+
const updateValue = useEventCallback((rawValue) => {
|
|
12
|
+
const clamped = clamp(rawValue, min, max);
|
|
13
|
+
const stepped = Math.round((clamped - min) / step) * step + min;
|
|
14
|
+
const final = clamp(Number(stepped.toFixed(6)), min, max);
|
|
15
|
+
if (isControlled) {
|
|
16
|
+
onChange(final);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
setUncontrolledValue(final);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
const { isDragging, getDragHandleProps } = useDragGesture({
|
|
23
|
+
onDrag: ({ deltaX, deltaY }) => {
|
|
24
|
+
if (!trackRef.current)
|
|
25
|
+
return;
|
|
26
|
+
const rect = trackRef.current.getBoundingClientRect();
|
|
27
|
+
const trackLength = axis === "horizontal" ? rect.width : rect.height;
|
|
28
|
+
const range = max - min;
|
|
29
|
+
let delta = axis === "horizontal" ? deltaX : deltaY;
|
|
30
|
+
if (axis === "horizontal" && direction === "rtl")
|
|
31
|
+
delta = -delta;
|
|
32
|
+
const deltaValue = (delta / trackLength) * range;
|
|
33
|
+
updateValue(value + deltaValue);
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
const handleTrackClick = useEventCallback((event) => {
|
|
37
|
+
if (!trackRef.current)
|
|
38
|
+
return;
|
|
39
|
+
const rect = trackRef.current.getBoundingClientRect();
|
|
40
|
+
let clickOffset = axis === "horizontal"
|
|
41
|
+
? event.clientX - rect.left
|
|
42
|
+
: event.clientY - rect.top;
|
|
43
|
+
if (axis === "horizontal" && direction === "rtl") {
|
|
44
|
+
clickOffset = rect.width - clickOffset;
|
|
45
|
+
}
|
|
46
|
+
const ratio = clamp(clickOffset / (axis === "horizontal" ? rect.width : rect.height), 0, 1);
|
|
47
|
+
const newValue = min + ratio * (max - min);
|
|
48
|
+
updateValue(newValue);
|
|
49
|
+
});
|
|
50
|
+
const trackProps = useMemo(() => ({
|
|
51
|
+
ref: trackRef,
|
|
52
|
+
onClick: handleTrackClick,
|
|
53
|
+
"aria-orientation": axis,
|
|
54
|
+
"data-direction": direction,
|
|
55
|
+
}), [handleTrackClick, axis, direction]);
|
|
56
|
+
const handleProps = useMemo(() => getDragHandleProps(), [getDragHandleProps]);
|
|
57
|
+
return {
|
|
58
|
+
value,
|
|
59
|
+
isDragging,
|
|
60
|
+
trackProps,
|
|
61
|
+
handleProps,
|
|
62
|
+
axis,
|
|
63
|
+
direction,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=useSlider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlider.js","sourceRoot":"","sources":["../../src/core/useSlider.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export * from "./core/useBoundingClientRect.js";
|
|
2
2
|
export * from "./core/useComposedRefs.js";
|
|
3
|
+
export * from "./core/useDragGesture.js";
|
|
3
4
|
export * from "./core/useDraggable.js";
|
|
5
|
+
export * from "./core/useSlider.js";
|
|
6
|
+
export * from "./core/useResizable.js";
|
|
4
7
|
export * from "./core/useEventCallback.js";
|
|
5
8
|
export * from "./core/useIsomorphicLayoutEffect.js";
|
|
6
9
|
export * from "./core/useCustomScroller.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export * from "./core/useBoundingClientRect.js";
|
|
2
2
|
export * from "./core/useComposedRefs.js";
|
|
3
|
+
export * from "./core/useDragGesture.js";
|
|
3
4
|
export * from "./core/useDraggable.js";
|
|
5
|
+
export * from "./core/useSlider.js";
|
|
6
|
+
export * from "./core/useResizable.js";
|
|
4
7
|
export * from "./core/useEventCallback.js";
|
|
5
8
|
export * from "./core/useIsomorphicLayoutEffect.js";
|
|
6
9
|
export * from "./core/useCustomScroller.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,CAK/D"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,CAK/D;AAED,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,WAAwC,CAAC"}
|
package/dist/utils/index.js
CHANGED
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAI,KAA2B;IACxD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAI,KAA2B;IACxD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC"}
|