@kimdw-rtk/ui 0.1.15 → 0.1.16
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/components/Range/Range.css.d.ts.map +1 -1
- package/dist/components/Range/Range.css.ts.vanilla.css +2 -0
- package/dist/components/ScrollArea/ScrollArea.cjs +7 -12
- package/dist/components/ScrollArea/ScrollArea.css.d.ts +2 -3
- package/dist/components/ScrollArea/ScrollArea.css.d.ts.map +1 -1
- package/dist/components/ScrollArea/ScrollArea.css.ts.vanilla.css +7 -18
- package/dist/components/ScrollArea/ScrollArea.css.vanilla.cjs +6 -8
- package/dist/components/ScrollArea/ScrollArea.css.vanilla.js +5 -6
- package/dist/components/ScrollArea/ScrollArea.d.ts +4 -1
- package/dist/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/components/ScrollArea/ScrollArea.js +9 -14
- package/dist/hooks/usePointerSlider/index.cjs +63 -12
- package/dist/hooks/usePointerSlider/index.d.ts.map +1 -1
- package/dist/hooks/usePointerSlider/index.js +63 -12
- package/dist/node_modules/.pnpm/@vanilla-extract_dynamic@2.1.5/node_modules/@vanilla-extract/dynamic/dist/vanilla-extract-dynamic.esm.cjs +26 -0
- package/dist/node_modules/.pnpm/@vanilla-extract_dynamic@2.1.5/node_modules/@vanilla-extract/dynamic/dist/vanilla-extract-dynamic.esm.js +24 -0
- package/dist/node_modules/.pnpm/@vanilla-extract_private@1.0.9/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.cjs +11 -0
- package/dist/node_modules/.pnpm/@vanilla-extract_private@1.0.9/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js +9 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Range.css.d.ts","sourceRoot":"","sources":["../../../src/components/Range/Range.css.ts"],"names":[],"mappings":"AAkCA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Range.css.d.ts","sourceRoot":"","sources":["../../../src/components/Range/Range.css.ts"],"names":[],"mappings":"AAkCA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BhB,CAAC;AAEH,eAAO,MAAM,KAAK,QA4ChB,CAAC;AAEH,eAAO,MAAM,IAAI,QAOf,CAAC;AAEH,eAAO,MAAM,GAAG,QAWd,CAAC"}
|
|
@@ -95,6 +95,7 @@
|
|
|
95
95
|
width: 100%;
|
|
96
96
|
height: 2em;
|
|
97
97
|
user-select: none;
|
|
98
|
+
touch-action: none;
|
|
98
99
|
}
|
|
99
100
|
.Range_styleWithLayer__biyxwow {
|
|
100
101
|
font-size: 0.75em;
|
|
@@ -116,6 +117,7 @@
|
|
|
116
117
|
background-color: rgb(var(--backgroundVar__biyxwo0));
|
|
117
118
|
transform: translate(-50%, -50%);
|
|
118
119
|
cursor: pointer;
|
|
120
|
+
touch-action: none;
|
|
119
121
|
}
|
|
120
122
|
.Range_styleWithLayer__biyxwo1x::before {
|
|
121
123
|
content: "";
|
|
@@ -4,16 +4,16 @@
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var utils = require('@kimdw-rtk/utils');
|
|
7
|
+
var vanillaExtractDynamic_esm = require('../../node_modules/.pnpm/@vanilla-extract_dynamic@2.1.5/node_modules/@vanilla-extract/dynamic/dist/vanilla-extract-dynamic.esm.cjs');
|
|
7
8
|
var clsx = require('../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.cjs');
|
|
8
9
|
var index = require('../../hooks/useMouseScroll/index.cjs');
|
|
9
10
|
var ScrollArea_css = require('./ScrollArea.css.vanilla.cjs');
|
|
11
|
+
var spacing = require('../../tokens/semantic/spacing.cjs');
|
|
10
12
|
var sx = require('../../styles/sx.cjs');
|
|
11
13
|
|
|
12
|
-
const ScrollArea = react.forwardRef(({ children, className, sx: propSx, ...props }, ref) => {
|
|
14
|
+
const ScrollArea = react.forwardRef(({ children, className, innerPadding = 'lg', sx: propSx, style, ...props }, ref) => {
|
|
13
15
|
const scrollAreaRef = react.useRef(null);
|
|
14
16
|
const targetRef = utils.useCombinedRefs(ref, scrollAreaRef);
|
|
15
|
-
const [hasLeftSpace, setHasLeftSpace] = react.useState(false);
|
|
16
|
-
const [hasRightSpace, setHasRightSpace] = react.useState(true);
|
|
17
17
|
index.useMouseScroll(scrollAreaRef);
|
|
18
18
|
react.useEffect(() => {
|
|
19
19
|
const element = scrollAreaRef.current;
|
|
@@ -28,20 +28,15 @@ const ScrollArea = react.forwardRef(({ children, className, sx: propSx, ...props
|
|
|
28
28
|
}
|
|
29
29
|
e.preventDefault();
|
|
30
30
|
};
|
|
31
|
-
const handleScroll = () => {
|
|
32
|
-
setHasLeftSpace(element.scrollLeft !== 0);
|
|
33
|
-
setHasRightSpace(Math.ceil(element.scrollLeft + element.clientWidth) <
|
|
34
|
-
Math.floor(element.scrollWidth));
|
|
35
|
-
};
|
|
36
|
-
handleScroll();
|
|
37
|
-
element.addEventListener('scroll', handleScroll);
|
|
38
31
|
element.addEventListener('wheel', handleWheel);
|
|
39
32
|
return () => {
|
|
40
|
-
element.removeEventListener('scroll', handleScroll);
|
|
41
33
|
element.removeEventListener('wheel', handleWheel);
|
|
42
34
|
};
|
|
43
35
|
}, []);
|
|
44
|
-
return (jsxRuntime.jsx("div", { ref: targetRef, className: clsx.clsx(ScrollArea_css.scrollArea, className, sx.sx(propSx),
|
|
36
|
+
return (jsxRuntime.jsx("div", { ref: targetRef, className: clsx.clsx(ScrollArea_css.scrollArea, className, sx.sx(propSx), ScrollArea_css.mask), ...props, style: {
|
|
37
|
+
...style,
|
|
38
|
+
...vanillaExtractDynamic_esm.assignInlineVars({ [ScrollArea_css.paddingVar]: spacing.spacing[innerPadding] }),
|
|
39
|
+
}, children: jsxRuntime.jsx("div", { className: ScrollArea_css.wrapper, children: children }) }));
|
|
45
40
|
});
|
|
46
41
|
ScrollArea.displayName = 'ScrollArea';
|
|
47
42
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
+
export declare const paddingVar: `var(--${string})`;
|
|
1
2
|
export declare const scrollArea: string;
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const maskRight: string;
|
|
4
|
-
export declare const maskBoth: string;
|
|
3
|
+
export declare const mask: string;
|
|
5
4
|
export declare const wrapper: string;
|
|
6
5
|
//# sourceMappingURL=ScrollArea.css.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollArea.css.d.ts","sourceRoot":"","sources":["../../../src/components/ScrollArea/ScrollArea.css.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ScrollArea.css.d.ts","sourceRoot":"","sources":["../../../src/components/ScrollArea/ScrollArea.css.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,oBAAc,CAAC;AAEtC,eAAO,MAAM,UAAU,QASrB,CAAC;AAEH,eAAO,MAAM,IAAI,QAMf,CAAC;AAEH,eAAO,MAAM,OAAO,QAGlB,CAAC"}
|
|
@@ -1,33 +1,22 @@
|
|
|
1
1
|
@layer components;
|
|
2
|
-
.
|
|
3
|
-
mask-image: linear-gradient(to left,
|
|
4
|
-
black 0%,
|
|
5
|
-
black calc(100% - 3rem),
|
|
6
|
-
transparent 100%);
|
|
7
|
-
}
|
|
8
|
-
.ScrollArea_maskRight__m6lfro2 {
|
|
9
|
-
mask-image: linear-gradient(to right,
|
|
10
|
-
black 0%,
|
|
11
|
-
black calc(100% - 3rem),
|
|
12
|
-
transparent 100%);
|
|
13
|
-
}
|
|
14
|
-
.ScrollArea_maskBoth__m6lfro3 {
|
|
2
|
+
.ScrollArea_mask__m6lfro2 {
|
|
15
3
|
mask-image: linear-gradient(to right,
|
|
16
4
|
transparent 0%,
|
|
17
|
-
black
|
|
18
|
-
black calc(100% -
|
|
5
|
+
black var(--paddingVar__m6lfro0),
|
|
6
|
+
black calc(100% - var(--paddingVar__m6lfro0)),
|
|
19
7
|
transparent 100%);
|
|
20
8
|
}
|
|
21
|
-
.
|
|
9
|
+
.ScrollArea_wrapper__m6lfro3 {
|
|
22
10
|
width: max-content;
|
|
11
|
+
padding-inline: var(--paddingVar__m6lfro0);
|
|
23
12
|
}
|
|
24
13
|
@layer components {
|
|
25
|
-
.
|
|
14
|
+
.ScrollArea_styleWithLayer__m6lfro1 {
|
|
26
15
|
width: 100%;
|
|
27
16
|
overflow-x: scroll;
|
|
28
17
|
user-select: none;
|
|
29
18
|
}
|
|
30
|
-
.
|
|
19
|
+
.ScrollArea_styleWithLayer__m6lfro1::-webkit-scrollbar {
|
|
31
20
|
display: none;
|
|
32
21
|
}
|
|
33
22
|
}
|
|
@@ -5,14 +5,12 @@ require('./../../styles/sprinkles.css.ts.vanilla.css');
|
|
|
5
5
|
require('./../../styles/globalStyle.css.ts.vanilla.css');
|
|
6
6
|
require('./ScrollArea.css.ts.vanilla.css');
|
|
7
7
|
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var wrapper = 'ScrollArea_wrapper__m6lfro4';
|
|
8
|
+
var mask = 'ScrollArea_mask__m6lfro2';
|
|
9
|
+
var paddingVar = 'var(--paddingVar__m6lfro0)';
|
|
10
|
+
var scrollArea = 'ScrollArea_styleWithLayer__m6lfro1';
|
|
11
|
+
var wrapper = 'ScrollArea_wrapper__m6lfro3';
|
|
13
12
|
|
|
14
|
-
exports.
|
|
15
|
-
exports.
|
|
16
|
-
exports.maskRight = maskRight;
|
|
13
|
+
exports.mask = mask;
|
|
14
|
+
exports.paddingVar = paddingVar;
|
|
17
15
|
exports.scrollArea = scrollArea;
|
|
18
16
|
exports.wrapper = wrapper;
|
|
@@ -3,10 +3,9 @@ import './../../styles/sprinkles.css.ts.vanilla.css';
|
|
|
3
3
|
import './../../styles/globalStyle.css.ts.vanilla.css';
|
|
4
4
|
import './ScrollArea.css.ts.vanilla.css';
|
|
5
5
|
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var wrapper = 'ScrollArea_wrapper__m6lfro4';
|
|
6
|
+
var mask = 'ScrollArea_mask__m6lfro2';
|
|
7
|
+
var paddingVar = 'var(--paddingVar__m6lfro0)';
|
|
8
|
+
var scrollArea = 'ScrollArea_styleWithLayer__m6lfro1';
|
|
9
|
+
var wrapper = 'ScrollArea_wrapper__m6lfro3';
|
|
11
10
|
|
|
12
|
-
export {
|
|
11
|
+
export { mask, paddingVar, scrollArea, wrapper };
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { spacing } from '#tokens';
|
|
1
2
|
import type { UIComponent } from '#types';
|
|
2
3
|
import * as s from './ScrollArea.css';
|
|
3
|
-
|
|
4
|
+
interface ScrollAreaProps extends UIComponent<'div'> {
|
|
5
|
+
innerPadding?: keyof typeof spacing;
|
|
6
|
+
}
|
|
4
7
|
export declare const ScrollArea: import("react").ForwardRefExoticComponent<Omit<ScrollAreaProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
|
|
5
8
|
export { s as scrollAreaCss };
|
|
6
9
|
//# sourceMappingURL=ScrollArea.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollArea.d.ts","sourceRoot":"","sources":["../../../src/components/ScrollArea/ScrollArea.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ScrollArea.d.ts","sourceRoot":"","sources":["../../../src/components/ScrollArea/ScrollArea.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,KAAK,CAAC,MAAM,kBAAkB,CAAC;AAEtC,UAAU,eAAgB,SAAQ,WAAW,CAAC,KAAK,CAAC;IAClD,YAAY,CAAC,EAAE,MAAM,OAAO,OAAO,CAAC;CACrC;AAED,eAAO,MAAM,UAAU,yHAiDtB,CAAC;AAGF,OAAO,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { forwardRef, useRef,
|
|
3
|
+
import { forwardRef, useRef, useEffect } from 'react';
|
|
4
4
|
import { useCombinedRefs } from '@kimdw-rtk/utils';
|
|
5
|
+
import { assignInlineVars } from '../../node_modules/.pnpm/@vanilla-extract_dynamic@2.1.5/node_modules/@vanilla-extract/dynamic/dist/vanilla-extract-dynamic.esm.js';
|
|
5
6
|
import { clsx } from '../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js';
|
|
6
7
|
import { useMouseScroll } from '../../hooks/useMouseScroll/index.js';
|
|
7
|
-
import { wrapper,
|
|
8
|
+
import { wrapper, paddingVar, scrollArea, mask } from './ScrollArea.css.vanilla.js';
|
|
8
9
|
import * as ScrollArea_css from './ScrollArea.css.vanilla.js';
|
|
9
10
|
export { ScrollArea_css as scrollAreaCss };
|
|
11
|
+
import { spacing } from '../../tokens/semantic/spacing.js';
|
|
10
12
|
import { sx } from '../../styles/sx.js';
|
|
11
13
|
|
|
12
|
-
const ScrollArea = forwardRef(({ children, className, sx: propSx, ...props }, ref) => {
|
|
14
|
+
const ScrollArea = forwardRef(({ children, className, innerPadding = 'lg', sx: propSx, style, ...props }, ref) => {
|
|
13
15
|
const scrollAreaRef = useRef(null);
|
|
14
16
|
const targetRef = useCombinedRefs(ref, scrollAreaRef);
|
|
15
|
-
const [hasLeftSpace, setHasLeftSpace] = useState(false);
|
|
16
|
-
const [hasRightSpace, setHasRightSpace] = useState(true);
|
|
17
17
|
useMouseScroll(scrollAreaRef);
|
|
18
18
|
useEffect(() => {
|
|
19
19
|
const element = scrollAreaRef.current;
|
|
@@ -28,20 +28,15 @@ const ScrollArea = forwardRef(({ children, className, sx: propSx, ...props }, re
|
|
|
28
28
|
}
|
|
29
29
|
e.preventDefault();
|
|
30
30
|
};
|
|
31
|
-
const handleScroll = () => {
|
|
32
|
-
setHasLeftSpace(element.scrollLeft !== 0);
|
|
33
|
-
setHasRightSpace(Math.ceil(element.scrollLeft + element.clientWidth) <
|
|
34
|
-
Math.floor(element.scrollWidth));
|
|
35
|
-
};
|
|
36
|
-
handleScroll();
|
|
37
|
-
element.addEventListener('scroll', handleScroll);
|
|
38
31
|
element.addEventListener('wheel', handleWheel);
|
|
39
32
|
return () => {
|
|
40
|
-
element.removeEventListener('scroll', handleScroll);
|
|
41
33
|
element.removeEventListener('wheel', handleWheel);
|
|
42
34
|
};
|
|
43
35
|
}, []);
|
|
44
|
-
return (jsx("div", { ref: targetRef, className: clsx(scrollArea, className, sx(propSx),
|
|
36
|
+
return (jsx("div", { ref: targetRef, className: clsx(scrollArea, className, sx(propSx), mask), ...props, style: {
|
|
37
|
+
...style,
|
|
38
|
+
...assignInlineVars({ [paddingVar]: spacing[innerPadding] }),
|
|
39
|
+
}, children: jsx("div", { className: wrapper, children: children }) }));
|
|
45
40
|
});
|
|
46
41
|
ScrollArea.displayName = 'ScrollArea';
|
|
47
42
|
|
|
@@ -7,40 +7,91 @@ const usePointerSlider = (ref, { min, max, defaultValue, }) => {
|
|
|
7
7
|
const [value, setValue] = react.useState(defaultValue);
|
|
8
8
|
react.useEffect(() => {
|
|
9
9
|
const element = ref.current;
|
|
10
|
-
let isDown = false, parentWidth = 0, parentX = 0;
|
|
11
10
|
if (element === null) {
|
|
12
11
|
return;
|
|
13
12
|
}
|
|
14
|
-
element.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
const ownerWindow = element.ownerDocument.defaultView;
|
|
14
|
+
if (ownerWindow === null) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
let isDragging = false, activePointerId = null, parentWidth = 0, parentX = 0;
|
|
18
|
+
const setThumbPosition = (nextValue) => {
|
|
19
|
+
element.style.left = `${((nextValue - min) / (max - min)) * 100}%`;
|
|
20
|
+
};
|
|
21
|
+
const syncParentRect = () => {
|
|
18
22
|
const boundingRect = element.parentElement?.getBoundingClientRect();
|
|
19
23
|
if (boundingRect === undefined) {
|
|
20
|
-
return;
|
|
24
|
+
return false;
|
|
21
25
|
}
|
|
22
26
|
parentWidth = boundingRect.width;
|
|
23
27
|
parentX = boundingRect.x;
|
|
28
|
+
return parentWidth > 0;
|
|
24
29
|
};
|
|
25
|
-
const
|
|
26
|
-
if (!
|
|
30
|
+
const updateValue = (clientX) => {
|
|
31
|
+
if (parentWidth <= 0 || !Number.isFinite(clientX)) {
|
|
27
32
|
return;
|
|
28
33
|
}
|
|
29
|
-
const currentValue = Math.min(max, Math.max(min, Math.round((
|
|
30
|
-
|
|
34
|
+
const currentValue = Math.min(max, Math.max(min, Math.round((clientX - parentX) / (parentWidth / (max - min))) + min));
|
|
35
|
+
setThumbPosition(currentValue);
|
|
31
36
|
setValue(currentValue);
|
|
32
37
|
};
|
|
38
|
+
setValue(defaultValue);
|
|
39
|
+
setThumbPosition(defaultValue);
|
|
40
|
+
const handlePointerDown = (e) => {
|
|
41
|
+
if (e.pointerType === 'mouse' && e.button !== 0) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (!syncParentRect()) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
e.preventDefault();
|
|
48
|
+
isDragging = true;
|
|
49
|
+
activePointerId = Number.isFinite(e.pointerId) ? e.pointerId : null;
|
|
50
|
+
if (activePointerId !== null &&
|
|
51
|
+
element.hasPointerCapture?.(activePointerId) === false) {
|
|
52
|
+
element.setPointerCapture?.(activePointerId);
|
|
53
|
+
}
|
|
54
|
+
updateValue(e.clientX);
|
|
55
|
+
};
|
|
56
|
+
const handlePointerMove = (e) => {
|
|
57
|
+
if (!isDragging ||
|
|
58
|
+
(activePointerId !== null && activePointerId !== e.pointerId)) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
updateValue(e.clientX);
|
|
62
|
+
};
|
|
33
63
|
const handlePointerUp = (e) => {
|
|
34
|
-
|
|
35
|
-
|
|
64
|
+
if (activePointerId !== null && activePointerId !== e.pointerId) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (activePointerId !== null &&
|
|
68
|
+
element.hasPointerCapture?.(activePointerId)) {
|
|
69
|
+
element.releasePointerCapture?.(activePointerId);
|
|
70
|
+
}
|
|
71
|
+
isDragging = false;
|
|
72
|
+
activePointerId = null;
|
|
73
|
+
};
|
|
74
|
+
const handleLostPointerCapture = () => {
|
|
75
|
+
isDragging = false;
|
|
76
|
+
activePointerId = null;
|
|
36
77
|
};
|
|
37
78
|
element.addEventListener('pointerdown', handlePointerDown);
|
|
38
79
|
element.addEventListener('pointermove', handlePointerMove);
|
|
39
80
|
element.addEventListener('pointerup', handlePointerUp);
|
|
81
|
+
element.addEventListener('pointercancel', handlePointerUp);
|
|
82
|
+
element.addEventListener('lostpointercapture', handleLostPointerCapture);
|
|
83
|
+
ownerWindow.addEventListener('pointermove', handlePointerMove);
|
|
84
|
+
ownerWindow.addEventListener('pointerup', handlePointerUp);
|
|
85
|
+
ownerWindow.addEventListener('pointercancel', handlePointerUp);
|
|
40
86
|
return () => {
|
|
41
87
|
element.removeEventListener('pointerdown', handlePointerDown);
|
|
42
88
|
element.removeEventListener('pointermove', handlePointerMove);
|
|
43
89
|
element.removeEventListener('pointerup', handlePointerUp);
|
|
90
|
+
element.removeEventListener('pointercancel', handlePointerUp);
|
|
91
|
+
element.removeEventListener('lostpointercapture', handleLostPointerCapture);
|
|
92
|
+
ownerWindow.removeEventListener('pointermove', handlePointerMove);
|
|
93
|
+
ownerWindow.removeEventListener('pointerup', handlePointerUp);
|
|
94
|
+
ownerWindow.removeEventListener('pointercancel', handlePointerUp);
|
|
44
95
|
};
|
|
45
96
|
}, [ref, max, min, defaultValue]);
|
|
46
97
|
return value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/usePointerSlider/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAC5E,KAAK,CAAC,EACN,6BAIG;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB,KACA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/usePointerSlider/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAC5E,KAAK,CAAC,EACN,6BAIG;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB,KACA,MA2IF,CAAC"}
|
|
@@ -5,40 +5,91 @@ const usePointerSlider = (ref, { min, max, defaultValue, }) => {
|
|
|
5
5
|
const [value, setValue] = useState(defaultValue);
|
|
6
6
|
useEffect(() => {
|
|
7
7
|
const element = ref.current;
|
|
8
|
-
let isDown = false, parentWidth = 0, parentX = 0;
|
|
9
8
|
if (element === null) {
|
|
10
9
|
return;
|
|
11
10
|
}
|
|
12
|
-
element.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
const ownerWindow = element.ownerDocument.defaultView;
|
|
12
|
+
if (ownerWindow === null) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
let isDragging = false, activePointerId = null, parentWidth = 0, parentX = 0;
|
|
16
|
+
const setThumbPosition = (nextValue) => {
|
|
17
|
+
element.style.left = `${((nextValue - min) / (max - min)) * 100}%`;
|
|
18
|
+
};
|
|
19
|
+
const syncParentRect = () => {
|
|
16
20
|
const boundingRect = element.parentElement?.getBoundingClientRect();
|
|
17
21
|
if (boundingRect === undefined) {
|
|
18
|
-
return;
|
|
22
|
+
return false;
|
|
19
23
|
}
|
|
20
24
|
parentWidth = boundingRect.width;
|
|
21
25
|
parentX = boundingRect.x;
|
|
26
|
+
return parentWidth > 0;
|
|
22
27
|
};
|
|
23
|
-
const
|
|
24
|
-
if (!
|
|
28
|
+
const updateValue = (clientX) => {
|
|
29
|
+
if (parentWidth <= 0 || !Number.isFinite(clientX)) {
|
|
25
30
|
return;
|
|
26
31
|
}
|
|
27
|
-
const currentValue = Math.min(max, Math.max(min, Math.round((
|
|
28
|
-
|
|
32
|
+
const currentValue = Math.min(max, Math.max(min, Math.round((clientX - parentX) / (parentWidth / (max - min))) + min));
|
|
33
|
+
setThumbPosition(currentValue);
|
|
29
34
|
setValue(currentValue);
|
|
30
35
|
};
|
|
36
|
+
setValue(defaultValue);
|
|
37
|
+
setThumbPosition(defaultValue);
|
|
38
|
+
const handlePointerDown = (e) => {
|
|
39
|
+
if (e.pointerType === 'mouse' && e.button !== 0) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (!syncParentRect()) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
isDragging = true;
|
|
47
|
+
activePointerId = Number.isFinite(e.pointerId) ? e.pointerId : null;
|
|
48
|
+
if (activePointerId !== null &&
|
|
49
|
+
element.hasPointerCapture?.(activePointerId) === false) {
|
|
50
|
+
element.setPointerCapture?.(activePointerId);
|
|
51
|
+
}
|
|
52
|
+
updateValue(e.clientX);
|
|
53
|
+
};
|
|
54
|
+
const handlePointerMove = (e) => {
|
|
55
|
+
if (!isDragging ||
|
|
56
|
+
(activePointerId !== null && activePointerId !== e.pointerId)) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
updateValue(e.clientX);
|
|
60
|
+
};
|
|
31
61
|
const handlePointerUp = (e) => {
|
|
32
|
-
|
|
33
|
-
|
|
62
|
+
if (activePointerId !== null && activePointerId !== e.pointerId) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (activePointerId !== null &&
|
|
66
|
+
element.hasPointerCapture?.(activePointerId)) {
|
|
67
|
+
element.releasePointerCapture?.(activePointerId);
|
|
68
|
+
}
|
|
69
|
+
isDragging = false;
|
|
70
|
+
activePointerId = null;
|
|
71
|
+
};
|
|
72
|
+
const handleLostPointerCapture = () => {
|
|
73
|
+
isDragging = false;
|
|
74
|
+
activePointerId = null;
|
|
34
75
|
};
|
|
35
76
|
element.addEventListener('pointerdown', handlePointerDown);
|
|
36
77
|
element.addEventListener('pointermove', handlePointerMove);
|
|
37
78
|
element.addEventListener('pointerup', handlePointerUp);
|
|
79
|
+
element.addEventListener('pointercancel', handlePointerUp);
|
|
80
|
+
element.addEventListener('lostpointercapture', handleLostPointerCapture);
|
|
81
|
+
ownerWindow.addEventListener('pointermove', handlePointerMove);
|
|
82
|
+
ownerWindow.addEventListener('pointerup', handlePointerUp);
|
|
83
|
+
ownerWindow.addEventListener('pointercancel', handlePointerUp);
|
|
38
84
|
return () => {
|
|
39
85
|
element.removeEventListener('pointerdown', handlePointerDown);
|
|
40
86
|
element.removeEventListener('pointermove', handlePointerMove);
|
|
41
87
|
element.removeEventListener('pointerup', handlePointerUp);
|
|
88
|
+
element.removeEventListener('pointercancel', handlePointerUp);
|
|
89
|
+
element.removeEventListener('lostpointercapture', handleLostPointerCapture);
|
|
90
|
+
ownerWindow.removeEventListener('pointermove', handlePointerMove);
|
|
91
|
+
ownerWindow.removeEventListener('pointerup', handlePointerUp);
|
|
92
|
+
ownerWindow.removeEventListener('pointercancel', handlePointerUp);
|
|
42
93
|
};
|
|
43
94
|
}, [ref, max, min, defaultValue]);
|
|
44
95
|
return value;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vanillaExtractPrivate_esm = require('../../../../../@vanilla-extract_private@1.0.9/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.cjs');
|
|
4
|
+
|
|
5
|
+
function assignInlineVars(varsOrContract, tokens) {
|
|
6
|
+
var styles = {};
|
|
7
|
+
{
|
|
8
|
+
var _vars = varsOrContract;
|
|
9
|
+
for (var varName in _vars) {
|
|
10
|
+
var value = _vars[varName];
|
|
11
|
+
if (value == null) {
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
styles[vanillaExtractPrivate_esm.getVarName(varName)] = value;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(styles, 'toString', {
|
|
18
|
+
value: function value() {
|
|
19
|
+
return Object.keys(this).map(key => "".concat(key, ":").concat(this[key])).join(';');
|
|
20
|
+
},
|
|
21
|
+
writable: false
|
|
22
|
+
});
|
|
23
|
+
return styles;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
exports.assignInlineVars = assignInlineVars;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getVarName } from '../../../../../@vanilla-extract_private@1.0.9/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js';
|
|
2
|
+
|
|
3
|
+
function assignInlineVars(varsOrContract, tokens) {
|
|
4
|
+
var styles = {};
|
|
5
|
+
{
|
|
6
|
+
var _vars = varsOrContract;
|
|
7
|
+
for (var varName in _vars) {
|
|
8
|
+
var value = _vars[varName];
|
|
9
|
+
if (value == null) {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
styles[getVarName(varName)] = value;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(styles, 'toString', {
|
|
16
|
+
value: function value() {
|
|
17
|
+
return Object.keys(this).map(key => "".concat(key, ":").concat(this[key])).join(';');
|
|
18
|
+
},
|
|
19
|
+
writable: false
|
|
20
|
+
});
|
|
21
|
+
return styles;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { assignInlineVars };
|