etudes 5.0.0 → 5.2.0
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/components/Accordion.js +36 -63
- package/components/Accordion.js.map +1 -1
- package/components/BurgerButton.d.ts +15 -15
- package/components/BurgerButton.js +11 -35
- package/components/BurgerButton.js.map +1 -1
- package/components/Carousel.d.ts +2 -2
- package/components/Carousel.js +6 -31
- package/components/Carousel.js.map +1 -1
- package/components/Collection.js +7 -29
- package/components/Collection.js.map +1 -1
- package/components/Counter.d.ts +11 -11
- package/components/Counter.js +3 -28
- package/components/Counter.js.map +1 -1
- package/components/CoverImage.d.ts +6 -6
- package/components/CoverImage.js +10 -35
- package/components/CoverImage.js.map +1 -1
- package/components/CoverVideo.d.ts +6 -6
- package/components/CoverVideo.js +10 -35
- package/components/CoverVideo.js.map +1 -1
- package/components/DebugConsole.d.ts +8 -8
- package/components/DebugConsole.js +3 -28
- package/components/DebugConsole.js.map +1 -1
- package/components/Dial.d.ts +12 -12
- package/components/Dial.js +13 -39
- package/components/Dial.js.map +1 -1
- package/components/Dropdown.js +5 -32
- package/components/Dropdown.js.map +1 -1
- package/components/FlatSVG.d.ts +8 -8
- package/components/FlatSVG.js +3 -25
- package/components/FlatSVG.js.map +1 -1
- package/components/Image.d.ts +15 -15
- package/components/Image.js +3 -25
- package/components/Image.js.map +1 -1
- package/components/MasonryGrid.d.ts +2 -2
- package/components/MasonryGrid.js +3 -26
- package/components/MasonryGrid.js.map +1 -1
- package/components/Panorama.d.ts +2 -2
- package/components/Panorama.js +3 -26
- package/components/Panorama.js.map +1 -1
- package/components/PanoramaSlider.d.ts +11 -11
- package/components/PanoramaSlider.js +14 -43
- package/components/PanoramaSlider.js.map +1 -1
- package/components/RangeSlider.d.ts +16 -16
- package/components/RangeSlider.js +45 -74
- package/components/RangeSlider.js.map +1 -1
- package/components/RotatingGallery.d.ts +12 -12
- package/components/RotatingGallery.js +10 -33
- package/components/RotatingGallery.js.map +1 -1
- package/components/SelectableButton.d.ts +10 -10
- package/components/SelectableButton.js +3 -25
- package/components/SelectableButton.js.map +1 -1
- package/components/Slider.d.ts +20 -20
- package/components/Slider.js +32 -58
- package/components/Slider.js.map +1 -1
- package/components/StepwiseSlider.d.ts +22 -22
- package/components/StepwiseSlider.js +34 -60
- package/components/StepwiseSlider.js.map +1 -1
- package/components/SwipeContainer.d.ts +9 -9
- package/components/SwipeContainer.js +3 -25
- package/components/SwipeContainer.js.map +1 -1
- package/components/TextField.d.ts +11 -11
- package/components/TextField.js +3 -25
- package/components/TextField.js.map +1 -1
- package/components/Video.d.ts +18 -18
- package/components/Video.js +3 -26
- package/components/Video.js.map +1 -1
- package/components/WithTooltip.d.ts +2 -2
- package/components/WithTooltip.js +4 -27
- package/components/WithTooltip.js.map +1 -1
- package/hooks/useClickOutsideEffect.js +1 -2
- package/hooks/useClickOutsideEffect.js.map +1 -1
- package/hooks/useDragEffect.js +1 -2
- package/hooks/useDragEffect.js.map +1 -1
- package/hooks/useDragValueEffect.js +1 -2
- package/hooks/useDragValueEffect.js.map +1 -1
- package/hooks/useImageSize.js +1 -2
- package/hooks/useImageSize.js.map +1 -1
- package/hooks/useInterval.js +1 -2
- package/hooks/useInterval.js.map +1 -1
- package/hooks/useLoadImageEffect.js +1 -2
- package/hooks/useLoadImageEffect.js.map +1 -1
- package/hooks/useLoadVideoMetadataEffect.js +1 -2
- package/hooks/useLoadVideoMetadataEffect.js.map +1 -1
- package/hooks/useMounted.js +1 -2
- package/hooks/useMounted.js.map +1 -1
- package/hooks/usePrevious.js +1 -2
- package/hooks/usePrevious.js.map +1 -1
- package/hooks/useRect.js +1 -2
- package/hooks/useRect.js.map +1 -1
- package/hooks/useResizeEffect.js +1 -2
- package/hooks/useResizeEffect.js.map +1 -1
- package/hooks/useScrollPositionEffect.js +1 -2
- package/hooks/useScrollPositionEffect.js.map +1 -1
- package/hooks/useSearchParamState.js +1 -2
- package/hooks/useSearchParamState.js.map +1 -1
- package/hooks/useSize.js +1 -2
- package/hooks/useSize.js.map +1 -1
- package/hooks/useTimeout.js +1 -2
- package/hooks/useTimeout.js.map +1 -1
- package/hooks/useVideoSize.js +1 -2
- package/hooks/useVideoSize.js.map +1 -1
- package/hooks/useViewportSize.js +1 -2
- package/hooks/useViewportSize.js.map +1 -1
- package/operators/Conditional.d.ts +2 -2
- package/operators/Conditional.js +5 -9
- package/operators/Conditional.js.map +1 -1
- package/operators/Each.d.ts +2 -2
- package/operators/Each.js +8 -31
- package/operators/Each.js.map +1 -1
- package/operators/ExtractChild.d.ts +2 -2
- package/operators/ExtractChild.js +13 -35
- package/operators/ExtractChild.js.map +1 -1
- package/operators/ExtractChildren.d.ts +2 -2
- package/operators/ExtractChildren.js +11 -34
- package/operators/ExtractChildren.js.map +1 -1
- package/operators/Repeat.d.ts +2 -2
- package/operators/Repeat.js +7 -30
- package/operators/Repeat.js.map +1 -1
- package/package.json +33 -30
- package/providers/ScrollPositionProvider.d.ts +3 -3
- package/providers/ScrollPositionProvider.js +6 -28
- package/providers/ScrollPositionProvider.js.map +1 -1
- package/utils/asClassNameDict.js +1 -2
- package/utils/asClassNameDict.js.map +1 -1
- package/utils/asComponentDict.js +1 -2
- package/utils/asComponentDict.js.map +1 -1
- package/utils/asStyleDict.js +1 -2
- package/utils/asStyleDict.js.map +1 -1
- package/utils/cloneStyledElement.js +1 -2
- package/utils/cloneStyledElement.js.map +1 -1
- package/utils/styles.js +1 -2
- package/utils/styles.js.map +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type ComponentType, type HTMLAttributes, type PropsWithChildren } from 'react';
|
|
2
2
|
export type RotatingGalleryImageProps = HTMLAttributes<HTMLElement> & {
|
|
3
3
|
index: number;
|
|
4
4
|
isVisible: boolean;
|
|
@@ -47,45 +47,45 @@ export type RotatingGalleryProps = HTMLAttributes<HTMLDivElement> & PropsWithChi
|
|
|
47
47
|
/**
|
|
48
48
|
* A component displaying rotating images.
|
|
49
49
|
*/
|
|
50
|
-
export declare const RotatingGallery:
|
|
50
|
+
export declare const RotatingGallery: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
51
51
|
/**
|
|
52
52
|
* Current image index. An error is thrown if the index is invalid (must be
|
|
53
53
|
* between 0 and length of `srcs` - 1, inclusive). This prop supports two-way
|
|
54
54
|
* binding.
|
|
55
55
|
*/
|
|
56
|
-
index?: number
|
|
56
|
+
index?: number;
|
|
57
57
|
/**
|
|
58
58
|
* Specifies if lazy loading of images should be enabled.
|
|
59
59
|
*/
|
|
60
|
-
lazy?: boolean
|
|
60
|
+
lazy?: boolean;
|
|
61
61
|
/**
|
|
62
62
|
* The duration of one rotation in milliseconds (how long one image stays
|
|
63
63
|
* before transitioning to the next). Specifying `NaN` or a negative number
|
|
64
64
|
* will prevent the component from automatically rotating.
|
|
65
65
|
*/
|
|
66
|
-
rotationDuration?: number
|
|
66
|
+
rotationDuration?: number;
|
|
67
67
|
/**
|
|
68
68
|
* An array of image paths.
|
|
69
69
|
*/
|
|
70
|
-
srcs?: string[]
|
|
70
|
+
srcs?: string[];
|
|
71
71
|
/**
|
|
72
72
|
* The duration of an image transition in milliseconds.
|
|
73
73
|
*/
|
|
74
|
-
transitionDuration?: number
|
|
74
|
+
transitionDuration?: number;
|
|
75
75
|
/**
|
|
76
76
|
* Specifies if the component should use default styles.
|
|
77
77
|
*/
|
|
78
|
-
usesDefaultStyles?: boolean
|
|
78
|
+
usesDefaultStyles?: boolean;
|
|
79
79
|
/**
|
|
80
80
|
* Handler invoked when the image index changes.
|
|
81
81
|
*
|
|
82
82
|
* @param index The current image index.
|
|
83
83
|
*/
|
|
84
|
-
onIndexChange?: (
|
|
84
|
+
onIndexChange?: (index: number) => void;
|
|
85
85
|
/**
|
|
86
86
|
* Component type for generating images in this collection.
|
|
87
87
|
*/
|
|
88
|
-
ImageComponent?:
|
|
88
|
+
ImageComponent?: ComponentType<RotatingGalleryImageProps>;
|
|
89
89
|
} & {
|
|
90
|
-
children?:
|
|
91
|
-
} &
|
|
90
|
+
children?: import("react").ReactNode | undefined;
|
|
91
|
+
} & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -10,29 +10,6 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
-
}
|
|
19
|
-
Object.defineProperty(o, k2, desc);
|
|
20
|
-
}) : (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
o[k2] = m[k];
|
|
23
|
-
}));
|
|
24
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
-
}) : function(o, v) {
|
|
27
|
-
o["default"] = v;
|
|
28
|
-
});
|
|
29
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
-
if (mod && mod.__esModule) return mod;
|
|
31
|
-
var result = {};
|
|
32
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
-
__setModuleDefault(result, mod);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
13
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
37
14
|
var t = {};
|
|
38
15
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -49,8 +26,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
49
26
|
};
|
|
50
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
28
|
exports.RotatingGallery = void 0;
|
|
29
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
52
30
|
var clsx_1 = __importDefault(require("clsx"));
|
|
53
|
-
var react_1 =
|
|
31
|
+
var react_1 = require("react");
|
|
54
32
|
var useInterval_1 = require("../hooks/useInterval");
|
|
55
33
|
var Each_1 = require("../operators/Each");
|
|
56
34
|
var utils_1 = require("../utils");
|
|
@@ -71,15 +49,14 @@ exports.RotatingGallery = (0, react_1.forwardRef)(function (_a, ref) {
|
|
|
71
49
|
(0, react_1.useEffect)(function () {
|
|
72
50
|
onIndexChange === null || onIndexChange === void 0 ? void 0 : onIndexChange(index);
|
|
73
51
|
}, [index]);
|
|
74
|
-
return (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
})));
|
|
52
|
+
return ((0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, className: (0, clsx_1.default)(className, fixedClassNames.root), "data-component": 'rotating-gallery', children: (0, jsx_runtime_1.jsx)(Each_1.Each, { in: srcs, children: function (src, idx) {
|
|
53
|
+
var isVisible = idx === index;
|
|
54
|
+
return ImageComponent ? ((0, jsx_runtime_1.jsx)(ImageComponent, { className: (0, clsx_1.default)(fixedClassNames.image), "data-child": 'item', index: idx, isVisible: isVisible, src: src, style: (0, utils_1.styles)(fixedStyles.image, defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.image, usesDefaultStyles ? {
|
|
55
|
+
opacity: isVisible ? '1' : '0',
|
|
56
|
+
} : {}) })) : ((0, jsx_runtime_1.jsx)("img", { className: (0, clsx_1.default)(fixedClassNames.image), "data-child": 'item', loading: lazy ? 'lazy' : 'eager', src: src, style: (0, utils_1.styles)(fixedStyles.image, defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.image, usesDefaultStyles ? {
|
|
57
|
+
opacity: isVisible ? '1' : '0',
|
|
58
|
+
} : {}) }));
|
|
59
|
+
} }) })));
|
|
83
60
|
});
|
|
84
61
|
Object.defineProperty(exports.RotatingGallery, 'displayName', { value: 'RotatingGallery', writable: false });
|
|
85
62
|
function getFixedClassNames() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RotatingGallery.js","sourceRoot":"/","sources":["components/RotatingGallery.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RotatingGallery.js","sourceRoot":"/","sources":["components/RotatingGallery.tsx"],"names":[],"mappings":"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","sourcesContent":["import clsx from 'clsx'\nimport { forwardRef, useEffect, type ComponentType, type HTMLAttributes, type PropsWithChildren } from 'react'\nimport { useInterval } from '../hooks/useInterval'\nimport { Each } from '../operators/Each'\nimport { asClassNameDict, asStyleDict, styles } from '../utils'\n\nexport type RotatingGalleryImageProps = HTMLAttributes<HTMLElement> & {\n index: number\n isVisible: boolean\n src: string\n}\n\nexport type RotatingGalleryProps = HTMLAttributes<HTMLDivElement> & PropsWithChildren<{\n /**\n * Current image index. An error is thrown if the index is invalid (must be\n * between 0 and length of `srcs` - 1, inclusive). This prop supports two-way\n * binding.\n */\n index?: number\n\n /**\n * Specifies if lazy loading of images should be enabled.\n */\n lazy?: boolean\n\n /**\n * The duration of one rotation in milliseconds (how long one image stays\n * before transitioning to the next). Specifying `NaN` or a negative number\n * will prevent the component from automatically rotating.\n */\n rotationDuration?: number\n\n /**\n * An array of image paths.\n */\n srcs?: string[]\n\n /**\n * The duration of an image transition in milliseconds.\n */\n transitionDuration?: number\n\n /**\n * Specifies if the component should use default styles.\n */\n usesDefaultStyles?: boolean\n\n /**\n * Handler invoked when the image index changes.\n *\n * @param index The current image index.\n */\n onIndexChange?: (index: number) => void\n\n /**\n * Component type for generating images in this collection.\n */\n ImageComponent?: ComponentType<RotatingGalleryImageProps>\n}>\n\n/**\n * A component displaying rotating images.\n */\nexport const RotatingGallery = forwardRef<HTMLDivElement, RotatingGalleryProps>(({\n children,\n className,\n index = 0,\n lazy = true,\n rotationDuration = 5000,\n srcs = [],\n transitionDuration = 500,\n usesDefaultStyles = true,\n onIndexChange,\n ImageComponent,\n ...props\n}, ref) => {\n const handleIndexChange = (newValue: number) => {\n onIndexChange?.(newValue)\n }\n\n const fixedClassNames = getFixedClassNames()\n const fixedStyles = getFixedStyles({ transitionDuration })\n const defaultStyles = usesDefaultStyles ? getDefaultStyles() : undefined\n\n useInterval(() => {\n handleIndexChange((index + 1) % srcs.length)\n }, rotationDuration, undefined, [JSON.stringify(srcs), index])\n\n useEffect(() => {\n onIndexChange?.(index)\n }, [index])\n\n return (\n <div {...props} ref={ref} className={clsx(className, fixedClassNames.root)} data-component='rotating-gallery'>\n <Each in={srcs}>\n {(src, idx) => {\n const isVisible = idx === index\n\n return ImageComponent ? (\n <ImageComponent\n className={clsx(fixedClassNames.image)}\n data-child='item'\n index={idx}\n isVisible={isVisible}\n src={src}\n style={styles(\n fixedStyles.image,\n defaultStyles?.image,\n usesDefaultStyles ? {\n opacity: isVisible ? '1' : '0',\n } : {},\n )}\n />\n ) : (\n <img\n className={clsx(fixedClassNames.image)}\n data-child='item'\n loading={lazy ? 'lazy' : 'eager'}\n src={src}\n style={styles(\n fixedStyles.image,\n defaultStyles?.image,\n usesDefaultStyles ? {\n opacity: isVisible ? '1' : '0',\n } : {},\n )}\n />\n )\n }}\n </Each>\n </div>\n )\n})\n\nObject.defineProperty(RotatingGallery, 'displayName', { value: 'RotatingGallery', writable: false })\n\nfunction getFixedClassNames() {\n return asClassNameDict({\n root: clsx('rotating-gallery'),\n image: clsx('image'),\n })\n}\n\nfunction getFixedStyles({ transitionDuration = 0 }) {\n return asStyleDict({\n image: {\n height: '100%',\n left: '0',\n position: 'absolute',\n top: '0',\n width: '100%',\n transitionDuration: `${transitionDuration}ms`,\n },\n })\n}\n\nfunction getDefaultStyles() {\n return asStyleDict({\n image: {\n transitionProperty: 'opacity',\n transitionTimingFunction: 'linear',\n },\n })\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
2
|
export type SelectableButtonProps = Omit<HTMLAttributes<HTMLButtonElement>, 'children'> & {
|
|
3
3
|
children?: (props: Pick<SelectableButtonProps, 'isDeselectable' | 'isDisabled' | 'isSelected' | 'label'>) => ReactNode;
|
|
4
4
|
isDeselectable?: boolean;
|
|
@@ -8,12 +8,12 @@ export type SelectableButtonProps = Omit<HTMLAttributes<HTMLButtonElement>, 'chi
|
|
|
8
8
|
onDeselect?: () => void;
|
|
9
9
|
onSelect?: () => void;
|
|
10
10
|
};
|
|
11
|
-
export declare const SelectableButton:
|
|
12
|
-
children?: (
|
|
13
|
-
isDeselectable?: boolean
|
|
14
|
-
isDisabled?: boolean
|
|
15
|
-
isSelected?: boolean
|
|
16
|
-
label?: string
|
|
17
|
-
onDeselect?: (
|
|
18
|
-
onSelect?: (
|
|
19
|
-
} &
|
|
11
|
+
export declare const SelectableButton: import("react").ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLButtonElement>, "children"> & {
|
|
12
|
+
children?: (props: Pick<SelectableButtonProps, "isDeselectable" | "isDisabled" | "isSelected" | "label">) => ReactNode;
|
|
13
|
+
isDeselectable?: boolean;
|
|
14
|
+
isDisabled?: boolean;
|
|
15
|
+
isSelected?: boolean;
|
|
16
|
+
label?: string;
|
|
17
|
+
onDeselect?: () => void;
|
|
18
|
+
onSelect?: () => void;
|
|
19
|
+
} & import("react").RefAttributes<HTMLButtonElement>>;
|
|
@@ -10,29 +10,6 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
-
}
|
|
19
|
-
Object.defineProperty(o, k2, desc);
|
|
20
|
-
}) : (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
o[k2] = m[k];
|
|
23
|
-
}));
|
|
24
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
-
}) : function(o, v) {
|
|
27
|
-
o["default"] = v;
|
|
28
|
-
});
|
|
29
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
-
if (mod && mod.__esModule) return mod;
|
|
31
|
-
var result = {};
|
|
32
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
-
__setModuleDefault(result, mod);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
13
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
37
14
|
var t = {};
|
|
38
15
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -62,7 +39,8 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
62
39
|
};
|
|
63
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
64
41
|
exports.SelectableButton = void 0;
|
|
65
|
-
var
|
|
42
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
43
|
+
var react_1 = require("react");
|
|
66
44
|
exports.SelectableButton = (0, react_1.forwardRef)(function (_a, ref) {
|
|
67
45
|
var _b;
|
|
68
46
|
var children = _a.children, _c = _a.isDeselectable, isDeselectable = _c === void 0 ? false : _c, _d = _a.isDisabled, isDisabled = _d === void 0 ? false : _d, _e = _a.isSelected, externalIsSelected = _e === void 0 ? false : _e, label = _a.label, onDeselect = _a.onDeselect, onSelect = _a.onSelect, props = __rest(_a, ["children", "isDeselectable", "isDisabled", "isSelected", "label", "onDeselect", "onSelect"]);
|
|
@@ -84,7 +62,7 @@ exports.SelectableButton = (0, react_1.forwardRef)(function (_a, ref) {
|
|
|
84
62
|
(0, react_1.useEffect)(function () {
|
|
85
63
|
setIsSelected(externalIsSelected);
|
|
86
64
|
}, [externalIsSelected]);
|
|
87
|
-
return (
|
|
65
|
+
return ((0, jsx_runtime_1.jsx)("button", __assign({}, props, { ref: ref, "data-component": 'selectable-button', disabled: isDisabled || isSelected && !isDeselectable, onClick: function () { return toggleSelection(); }, children: (_b = children === null || children === void 0 ? void 0 : children({ isDeselectable: isDeselectable, isDisabled: isDisabled, isSelected: isSelected, label: label })) !== null && _b !== void 0 ? _b : label })));
|
|
88
66
|
});
|
|
89
67
|
Object.defineProperty(exports.SelectableButton, 'displayName', { value: 'SelectableButton', writable: false });
|
|
90
68
|
//# sourceMappingURL=SelectableButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectableButton.js","sourceRoot":"/","sources":["components/SelectableButton.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SelectableButton.js","sourceRoot":"/","sources":["components/SelectableButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA4F;AAY/E,QAAA,gBAAgB,GAAG,IAAA,kBAAU,EAA2C,UAAC,EASrF,EAAE,GAAG;;IARJ,IAAA,QAAQ,cAAA,EACR,sBAAsB,EAAtB,cAAc,mBAAG,KAAK,KAAA,EACtB,kBAAkB,EAAlB,UAAU,mBAAG,KAAK,KAAA,EAClB,kBAAsC,EAA1B,kBAAkB,mBAAG,KAAK,KAAA,EACtC,KAAK,WAAA,EACL,UAAU,gBAAA,EACV,QAAQ,cAAA,EACL,KAAK,cAR4E,6FASrF,CADS;IAEF,IAAA,KAAA,OAA8B,IAAA,gBAAQ,EAAC,kBAAkB,CAAC,IAAA,EAAzD,UAAU,QAAA,EAAE,aAAa,QAAgC,CAAA;IAEhE,IAAM,eAAe,GAAG;QACtB,IAAI,UAAU;YAAE,OAAM;QAEtB,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,cAAc;gBAAE,OAAM;YAC3B,aAAa,CAAC,KAAK,CAAC,CAAA;YACpB,UAAU,aAAV,UAAU,uBAAV,UAAU,EAAI,CAAA;QAChB,CAAC;aACI,CAAC;YACJ,aAAa,CAAC,IAAI,CAAC,CAAA;YACnB,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,EAAI,CAAA;QACd,CAAC;IACH,CAAC,CAAA;IAED,IAAA,iBAAS,EAAC;QACR,aAAa,CAAC,kBAAkB,CAAC,CAAA;IACnC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAExB,OAAO,CACL,8CACM,KAAK,IACT,GAAG,EAAE,GAAG,oBACO,mBAAmB,EAClC,QAAQ,EAAE,UAAU,IAAI,UAAU,IAAI,CAAC,cAAc,EACrD,OAAO,EAAE,cAAM,OAAA,eAAe,EAAE,EAAjB,CAAiB,YAE/B,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,EAAE,cAAc,gBAAA,EAAE,UAAU,YAAA,EAAE,UAAU,YAAA,EAAE,KAAK,OAAA,EAAE,CAAC,mCAAI,KAAK,IAChE,CACV,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,cAAc,CAAC,wBAAgB,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA","sourcesContent":["import { forwardRef, useEffect, useState, type HTMLAttributes, type ReactNode } from 'react'\n\nexport type SelectableButtonProps = Omit<HTMLAttributes<HTMLButtonElement>, 'children'> & {\n children?: (props: Pick<SelectableButtonProps, 'isDeselectable' | 'isDisabled' | 'isSelected' | 'label'>) => ReactNode\n isDeselectable?: boolean\n isDisabled?: boolean\n isSelected?: boolean\n label?: string\n onDeselect?: () => void\n onSelect?: () => void\n}\n\nexport const SelectableButton = forwardRef<HTMLButtonElement, SelectableButtonProps>(({\n children,\n isDeselectable = false,\n isDisabled = false,\n isSelected: externalIsSelected = false,\n label,\n onDeselect,\n onSelect,\n ...props\n}, ref) => {\n const [isSelected, setIsSelected] = useState(externalIsSelected)\n\n const toggleSelection = () => {\n if (isDisabled) return\n\n if (isSelected) {\n if (!isDeselectable) return\n setIsSelected(false)\n onDeselect?.()\n }\n else {\n setIsSelected(true)\n onSelect?.()\n }\n }\n\n useEffect(() => {\n setIsSelected(externalIsSelected)\n }, [externalIsSelected])\n\n return (\n <button\n {...props}\n ref={ref}\n data-component='selectable-button'\n disabled={isDisabled || isSelected && !isDeselectable}\n onClick={() => toggleSelection()}\n >\n {children?.({ isDeselectable, isDisabled, isSelected, label }) ?? label}\n </button>\n )\n})\n\nObject.defineProperty(SelectableButton, 'displayName', { value: 'SelectableButton', writable: false })\n"]}
|
package/components/Slider.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type HTMLAttributes, type PropsWithChildren } from 'react';
|
|
2
2
|
type Orientation = 'horizontal' | 'vertical';
|
|
3
3
|
export type SliderProps = HTMLAttributes<HTMLDivElement> & PropsWithChildren<{
|
|
4
4
|
/**
|
|
@@ -83,42 +83,42 @@ export type SliderProps = HTMLAttributes<HTMLDivElement> & PropsWithChildren<{
|
|
|
83
83
|
* @exports SliderTrack The component for the slide track on either side of the
|
|
84
84
|
* knob.
|
|
85
85
|
*/
|
|
86
|
-
export declare const Slider:
|
|
86
|
+
export declare const Slider: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
|
|
87
87
|
/**
|
|
88
88
|
* By default the position is a value from 0 - 1, 0 being the start of the
|
|
89
89
|
* slider and 1 being the end. Switching on this flag inverts this behavior,
|
|
90
90
|
* where 0 becomes the end of the slider and 1 being the start.
|
|
91
91
|
*/
|
|
92
|
-
isInverted?: boolean
|
|
92
|
+
isInverted?: boolean;
|
|
93
93
|
/**
|
|
94
94
|
* Specifies if the track is clickable to set the position of the knob.
|
|
95
95
|
*/
|
|
96
|
-
isTrackInteractive?: boolean
|
|
96
|
+
isTrackInteractive?: boolean;
|
|
97
97
|
/**
|
|
98
98
|
* Indicates if position change events are dispatched only when dragging ends.
|
|
99
99
|
* When disabled, aforementioned events are fired repeatedly while dragging.
|
|
100
100
|
*/
|
|
101
|
-
onlyDispatchesOnDragEnd?: boolean
|
|
101
|
+
onlyDispatchesOnDragEnd?: boolean;
|
|
102
102
|
/**
|
|
103
103
|
* Padding between the track and the knob in pixels.
|
|
104
104
|
*/
|
|
105
|
-
trackPadding?: number
|
|
105
|
+
trackPadding?: number;
|
|
106
106
|
/**
|
|
107
107
|
* Height of the knob in pixels.
|
|
108
108
|
*/
|
|
109
|
-
knobHeight?: number
|
|
109
|
+
knobHeight?: number;
|
|
110
110
|
/**
|
|
111
111
|
* Width of the knob in pixels.
|
|
112
112
|
*/
|
|
113
|
-
knobWidth?: number
|
|
113
|
+
knobWidth?: number;
|
|
114
114
|
/**
|
|
115
115
|
* Orientation of the slider.
|
|
116
116
|
*/
|
|
117
|
-
orientation?: Orientation
|
|
117
|
+
orientation?: Orientation;
|
|
118
118
|
/**
|
|
119
119
|
* The current position.
|
|
120
120
|
*/
|
|
121
|
-
position?: number
|
|
121
|
+
position?: number;
|
|
122
122
|
/**
|
|
123
123
|
* A function that returns the label to be displayed at a given slider
|
|
124
124
|
* position.
|
|
@@ -127,11 +127,11 @@ export declare const Slider: React.ForwardRefExoticComponent<React.HTMLAttribute
|
|
|
127
127
|
*
|
|
128
128
|
* @returns The label.
|
|
129
129
|
*/
|
|
130
|
-
labelProvider?: (
|
|
130
|
+
labelProvider?: (position: number) => string;
|
|
131
131
|
/**
|
|
132
132
|
* Specifies if the component should use default styles.
|
|
133
133
|
*/
|
|
134
|
-
usesDefaultStyles?: boolean
|
|
134
|
+
usesDefaultStyles?: boolean;
|
|
135
135
|
/**
|
|
136
136
|
* Handler invoked when position changes. This can either be invoked from the
|
|
137
137
|
* `position` prop being changed or from the slider being dragged. Note that
|
|
@@ -142,19 +142,19 @@ export declare const Slider: React.ForwardRefExoticComponent<React.HTMLAttribute
|
|
|
142
142
|
* @param position The current slider position.
|
|
143
143
|
* @param isDragging Specifies if the position change is due to dragging.
|
|
144
144
|
*/
|
|
145
|
-
onPositionChange?: (
|
|
145
|
+
onPositionChange?: (position: number, isDragging: boolean) => void;
|
|
146
146
|
/**
|
|
147
147
|
* Handler invoked when dragging ends.
|
|
148
148
|
*/
|
|
149
|
-
onDragEnd?: (
|
|
149
|
+
onDragEnd?: () => void;
|
|
150
150
|
/**
|
|
151
151
|
* Handler invoked when dragging begins.
|
|
152
152
|
*/
|
|
153
|
-
onDragStart?: (
|
|
153
|
+
onDragStart?: () => void;
|
|
154
154
|
} & {
|
|
155
|
-
children?:
|
|
156
|
-
} &
|
|
157
|
-
export declare const SliderTrack: ({ ...props }: HTMLAttributes<HTMLDivElement>) =>
|
|
158
|
-
export declare const SliderKnob: ({ ...props }: HTMLAttributes<HTMLDivElement>) =>
|
|
159
|
-
export declare const SliderLabel: ({ ...props }: HTMLAttributes<HTMLDivElement>) =>
|
|
155
|
+
children?: import("react").ReactNode | undefined;
|
|
156
|
+
} & import("react").RefAttributes<HTMLDivElement>>;
|
|
157
|
+
export declare const SliderTrack: ({ ...props }: HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
|
|
158
|
+
export declare const SliderKnob: ({ ...props }: HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
|
|
159
|
+
export declare const SliderLabel: ({ ...props }: HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
|
|
160
160
|
export {};
|
package/components/Slider.js
CHANGED
|
@@ -10,29 +10,6 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
-
}
|
|
19
|
-
Object.defineProperty(o, k2, desc);
|
|
20
|
-
}) : (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
o[k2] = m[k];
|
|
23
|
-
}));
|
|
24
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
-
}) : function(o, v) {
|
|
27
|
-
o["default"] = v;
|
|
28
|
-
});
|
|
29
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
-
if (mod && mod.__esModule) return mod;
|
|
31
|
-
var result = {};
|
|
32
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
-
__setModuleDefault(result, mod);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
13
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
37
14
|
var t = {};
|
|
38
15
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -65,8 +42,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
65
42
|
};
|
|
66
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
44
|
exports.SliderLabel = exports.SliderKnob = exports.SliderTrack = exports.Slider = void 0;
|
|
45
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
68
46
|
var clsx_1 = __importDefault(require("clsx"));
|
|
69
|
-
var react_1 =
|
|
47
|
+
var react_1 = require("react");
|
|
70
48
|
var spase_1 = require("spase");
|
|
71
49
|
var useDragValueEffect_1 = require("../hooks/useDragValueEffect");
|
|
72
50
|
var utils_1 = require("../utils");
|
|
@@ -154,52 +132,48 @@ exports.Slider = (0, react_1.forwardRef)(function (_a, ref) {
|
|
|
154
132
|
var fixedClassNames = getFixedClassNames({ orientation: orientation, isAtEnd: isAtEnd, isAtStart: isAtStart, isDragging: isDragging, isReleasing: isReleasing });
|
|
155
133
|
var fixedStyles = getFixedStyles({ orientation: orientation, isDragging: isDragging, naturalPosition: naturalPosition, knobHeight: knobHeight, knobWidth: knobWidth, isTrackInteractive: isTrackInteractive });
|
|
156
134
|
var defaultStyles = usesDefaultStyles ? getDefaultStyles({ knobHeight: knobHeight }) : undefined;
|
|
157
|
-
return (
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}),
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}, labelProvider && (0, utils_1.cloneStyledElement)((_e = components.label) !== null && _e !== void 0 ? _e : react_1.default.createElement(exports.SliderLabel, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.label }), {
|
|
185
|
-
className: (0, clsx_1.default)(fixedClassNames.label),
|
|
186
|
-
style: (0, utils_1.styles)(fixedStyles.label),
|
|
187
|
-
}, labelProvider(position)))))));
|
|
135
|
+
return ((0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, className: (0, clsx_1.default)(className, fixedClassNames.root), "data-component": 'slider', children: (0, jsx_runtime_1.jsxs)("div", { ref: bodyRef, style: fixedStyles.body, children: [(0, utils_1.cloneStyledElement)((_b = components.track) !== null && _b !== void 0 ? _b : (0, jsx_runtime_1.jsx)(exports.SliderTrack, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.track }), {
|
|
136
|
+
className: (0, clsx_1.default)('start', fixedClassNames.track),
|
|
137
|
+
style: (0, utils_1.styles)(fixedStyles.track, orientation === 'vertical' ? {
|
|
138
|
+
height: "calc(".concat(naturalPosition * 100, "% - ").concat(trackPadding <= 0 ? 0 : knobHeight * 0.5, "px - ").concat(trackPadding, "px)"),
|
|
139
|
+
top: '0',
|
|
140
|
+
} : {
|
|
141
|
+
left: '0',
|
|
142
|
+
width: "calc(".concat(naturalPosition * 100, "% - ").concat(trackPadding <= 0 ? 0 : knobWidth * 0.5, "px - ").concat(trackPadding, "px)"),
|
|
143
|
+
}),
|
|
144
|
+
onClick: trackClickHandler,
|
|
145
|
+
}, (0, jsx_runtime_1.jsx)("div", { style: fixedStyles.trackHitbox })), (0, utils_1.cloneStyledElement)((_c = components.track) !== null && _c !== void 0 ? _c : (0, jsx_runtime_1.jsx)(exports.SliderTrack, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.track }), {
|
|
146
|
+
className: (0, clsx_1.default)('end', fixedClassNames.track),
|
|
147
|
+
style: (0, utils_1.styles)(fixedStyles.track, orientation === 'vertical' ? {
|
|
148
|
+
bottom: '0',
|
|
149
|
+
height: "calc(".concat((1 - naturalPosition) * 100, "% - ").concat(trackPadding <= 0 ? 0 : knobHeight * 0.5, "px - ").concat(trackPadding, "px)"),
|
|
150
|
+
} : {
|
|
151
|
+
right: '0',
|
|
152
|
+
width: "calc(".concat((1 - naturalPosition) * 100, "% - ").concat(trackPadding <= 0 ? 0 : knobWidth * 0.5, "px - ").concat(trackPadding, "px)"),
|
|
153
|
+
}),
|
|
154
|
+
onClick: trackClickHandler,
|
|
155
|
+
}, (0, jsx_runtime_1.jsx)("div", { style: fixedStyles.trackHitbox })), (0, jsx_runtime_1.jsx)("button", { ref: knobContainerRef, style: fixedStyles.knobContainer, children: (0, utils_1.cloneStyledElement)((_d = components.knob) !== null && _d !== void 0 ? _d : (0, jsx_runtime_1.jsx)(exports.SliderKnob, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.knob }), {
|
|
156
|
+
className: (0, clsx_1.default)(fixedClassNames.knob),
|
|
157
|
+
style: (0, utils_1.styles)(fixedStyles.knob),
|
|
158
|
+
}, labelProvider && (0, utils_1.cloneStyledElement)((_e = components.label) !== null && _e !== void 0 ? _e : (0, jsx_runtime_1.jsx)(exports.SliderLabel, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.label }), {
|
|
159
|
+
className: (0, clsx_1.default)(fixedClassNames.label),
|
|
160
|
+
style: (0, utils_1.styles)(fixedStyles.label),
|
|
161
|
+
}, labelProvider(position))) })] }) })));
|
|
188
162
|
});
|
|
189
163
|
Object.defineProperty(exports.Slider, 'displayName', { value: 'Slider', writable: false });
|
|
190
164
|
var SliderTrack = function (_a) {
|
|
191
165
|
var props = __rest(_a, []);
|
|
192
|
-
return
|
|
166
|
+
return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { "data-child": 'track' }));
|
|
193
167
|
};
|
|
194
168
|
exports.SliderTrack = SliderTrack;
|
|
195
169
|
var SliderKnob = function (_a) {
|
|
196
170
|
var props = __rest(_a, []);
|
|
197
|
-
return
|
|
171
|
+
return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { "data-child": 'knob' }));
|
|
198
172
|
};
|
|
199
173
|
exports.SliderKnob = SliderKnob;
|
|
200
174
|
var SliderLabel = function (_a) {
|
|
201
175
|
var props = __rest(_a, []);
|
|
202
|
-
return
|
|
176
|
+
return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { "data-child": 'label' }));
|
|
203
177
|
};
|
|
204
178
|
exports.SliderLabel = SliderLabel;
|
|
205
179
|
function getFixedClassNames(_a) {
|
package/components/Slider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider.js","sourceRoot":"/","sources":["components/Slider.tsx"],"names":[],"mappings":"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","sourcesContent":["import clsx from 'clsx'\nimport React, { forwardRef, useEffect, useRef, type HTMLAttributes, type MouseEvent, type PropsWithChildren } from 'react'\nimport { Rect } from 'spase'\nimport { useDragValueEffect } from '../hooks/useDragValueEffect'\nimport { asClassNameDict, asComponentDict, asStyleDict, cloneStyledElement, styles } from '../utils'\n\ntype Orientation = 'horizontal' | 'vertical'\n\nexport type SliderProps = HTMLAttributes<HTMLDivElement> & PropsWithChildren<{\n /**\n * By default the position is a value from 0 - 1, 0 being the start of the\n * slider and 1 being the end. Switching on this flag inverts this behavior,\n * where 0 becomes the end of the slider and 1 being the start.\n */\n isInverted?: boolean\n\n /**\n * Specifies if the track is clickable to set the position of the knob.\n */\n isTrackInteractive?: boolean\n\n /**\n * Indicates if position change events are dispatched only when dragging ends.\n * When disabled, aforementioned events are fired repeatedly while dragging.\n */\n onlyDispatchesOnDragEnd?: boolean\n\n /**\n * Padding between the track and the knob in pixels.\n */\n trackPadding?: number\n\n /**\n * Height of the knob in pixels.\n */\n knobHeight?: number\n\n /**\n * Width of the knob in pixels.\n */\n knobWidth?: number\n\n /**\n * Orientation of the slider.\n */\n orientation?: Orientation\n\n /**\n * The current position.\n */\n position?: number\n\n /**\n * A function that returns the label to be displayed at a given slider\n * position.\n *\n * @param position The current slider position.\n *\n * @returns The label.\n */\n labelProvider?: (position: number) => string\n\n /**\n * Specifies if the component should use default styles.\n */\n usesDefaultStyles?: boolean\n\n /**\n * Handler invoked when position changes. This can either be invoked from the\n * `position` prop being changed or from the slider being dragged. Note that\n * if the event is emitted at the end of dragging due to\n * `onlyDispatchesOnDragEnd` set to `true`, the `isDragging` parameter here is\n * still `true`.\n *\n * @param position The current slider position.\n * @param isDragging Specifies if the position change is due to dragging.\n */\n onPositionChange?: (position: number, isDragging: boolean) => void\n\n /**\n * Handler invoked when dragging ends.\n */\n onDragEnd?: () => void\n\n /**\n * Handler invoked when dragging begins.\n */\n onDragStart?: () => void\n}>\n\n/**\n * A slider component supporting both horizontal and vertical orientations whose\n * sliding position (a decimal between 0.0 and 1.0, inclusive) can be two-way\n * binded. The component consists of three customizable elements: a draggable\n * knob, a label on the knob, and a scroll track on either side of the knob.\n * While the width and height of the slider is inferred from its CSS rules, the\n * width and height of the knob are set via props (`knobWidth` and `knobHeight`,\n * respectively). The size of the knob does not impact the size of the slider.\n *\n * @exports SliderKnob The component for the knob.\n * @exports SliderLabel The component for the label on the knob.\n * @exports SliderTrack The component for the slide track on either side of the\n * knob.\n */\nexport const Slider = forwardRef<HTMLDivElement, SliderProps>(({\n children,\n className,\n isInverted = false,\n isTrackInteractive = true,\n knobHeight = 30,\n knobWidth = 30,\n labelProvider,\n onlyDispatchesOnDragEnd = false,\n orientation = 'vertical',\n position: externalPosition = 0,\n trackPadding = 0,\n usesDefaultStyles = false,\n onDragEnd,\n onDragStart,\n onPositionChange,\n ...props\n}, ref) => {\n const mapDragValueToPosition = (value: number, dx: number, dy: number) => {\n const rect = Rect.from(bodyRef.current) ?? new Rect()\n const truePosition = isInverted ? 1 - value : value\n const trueNewPositionX = truePosition * rect.width + dx\n const trueNewPositionY = truePosition * rect.height + dy\n const trueNewPosition = orientation === 'vertical' ? Math.max(0, Math.min(1, trueNewPositionY / rect.height)) : Math.max(0, Math.min(1, trueNewPositionX / rect.width))\n const normalizedPosition = isInverted ? 1 - trueNewPosition : trueNewPosition\n\n return normalizedPosition\n }\n\n const trackClickHandler = (event: MouseEvent) => {\n if (!isTrackInteractive) return\n\n const rect = Rect.from(bodyRef.current) ?? new Rect()\n\n switch (orientation) {\n case 'horizontal': {\n const trackPosition = (event.clientX - rect.left) / rect.width\n const normalizedPosition = isInverted ? 1 - trackPosition : trackPosition\n setPosition(normalizedPosition)\n break\n }\n case 'vertical': {\n const trackPosition = (event.clientY - rect.top) / rect.height\n const normalizedPosition = isInverted ? 1 - trackPosition : trackPosition\n setPosition(normalizedPosition)\n break\n }\n default: break\n }\n }\n\n const bodyRef = useRef<HTMLDivElement>(null)\n const knobContainerRef = useRef<HTMLButtonElement>(null)\n\n const { isDragging: [isDragging], isReleasing: [isReleasing], value: [position, setPosition] } = useDragValueEffect(knobContainerRef, {\n initialValue: externalPosition,\n transform: mapDragValueToPosition,\n onDragStart,\n onDragEnd,\n })\n\n // Natural position is the position affecting internal components accounting\n // for `isInverted`.\n const naturalPosition = isInverted ? 1 - position : position\n const isAtEnd = isInverted ? position === 0 : position === 1\n const isAtStart = isInverted ? position === 1 : position === 0\n\n useEffect(() => {\n if (isDragging || externalPosition === position) return\n setPosition(externalPosition)\n }, [externalPosition])\n\n useEffect(() => {\n if (isDragging && onlyDispatchesOnDragEnd) return\n onPositionChange?.(position, isDragging)\n }, [position])\n\n useEffect(() => {\n if (isDragging || !onlyDispatchesOnDragEnd) return\n onPositionChange?.(position, true)\n }, [isDragging])\n\n const components = asComponentDict(children, {\n knob: SliderKnob,\n label: SliderLabel,\n track: SliderTrack,\n })\n\n const fixedClassNames = getFixedClassNames({ orientation, isAtEnd, isAtStart, isDragging, isReleasing })\n const fixedStyles = getFixedStyles({ orientation, isDragging, naturalPosition, knobHeight, knobWidth, isTrackInteractive })\n const defaultStyles = usesDefaultStyles ? getDefaultStyles({ knobHeight }) : undefined\n\n return (\n <div {...props} ref={ref} className={clsx(className, fixedClassNames.root)} data-component='slider'>\n <div ref={bodyRef} style={fixedStyles.body}>\n {cloneStyledElement(components.track ?? <SliderTrack style={defaultStyles?.track}/>, {\n className: clsx('start', fixedClassNames.track),\n style: styles(fixedStyles.track, orientation === 'vertical' ? {\n height: `calc(${naturalPosition * 100}% - ${trackPadding <= 0 ? 0 : knobHeight * 0.5}px - ${trackPadding}px)`,\n top: '0',\n } : {\n left: '0',\n width: `calc(${naturalPosition * 100}% - ${trackPadding <= 0 ? 0 : knobWidth * 0.5}px - ${trackPadding}px)`,\n }),\n onClick: trackClickHandler,\n }, <div style={fixedStyles.trackHitbox}/>)}\n {cloneStyledElement(components.track ?? <SliderTrack style={defaultStyles?.track}/>, {\n className: clsx('end', fixedClassNames.track),\n style: styles(fixedStyles.track, orientation === 'vertical' ? {\n bottom: '0',\n height: `calc(${(1 - naturalPosition) * 100}% - ${trackPadding <= 0 ? 0 : knobHeight * 0.5}px - ${trackPadding}px)`,\n } : {\n right: '0',\n width: `calc(${(1 - naturalPosition) * 100}% - ${trackPadding <= 0 ? 0 : knobWidth * 0.5}px - ${trackPadding}px)`,\n }),\n onClick: trackClickHandler,\n }, <div style={fixedStyles.trackHitbox}/>)}\n <button ref={knobContainerRef} style={fixedStyles.knobContainer}>\n {cloneStyledElement(components.knob ?? <SliderKnob style={defaultStyles?.knob}/>, {\n className: clsx(fixedClassNames.knob),\n style: styles(fixedStyles.knob),\n }, labelProvider && cloneStyledElement(components.label ?? <SliderLabel style={defaultStyles?.label}/>, {\n className: clsx(fixedClassNames.label),\n style: styles(fixedStyles.label),\n }, labelProvider(position)))}\n </button>\n </div>\n </div>\n )\n})\n\nObject.defineProperty(Slider, 'displayName', { value: 'Slider', writable: false })\n\nexport const SliderTrack = ({ ...props }: HTMLAttributes<HTMLDivElement>) => <div {...props} data-child='track'/>\n\nexport const SliderKnob = ({ ...props }: HTMLAttributes<HTMLDivElement>) => <div {...props} data-child='knob'/>\n\nexport const SliderLabel = ({ ...props }: HTMLAttributes<HTMLDivElement>) => <div {...props} data-child='label'/>\n\nfunction getFixedClassNames({ orientation = 'vertical', isAtEnd = false, isAtStart = false, isDragging = false, isReleasing = false }) {\n return asClassNameDict({\n root: clsx(orientation, {\n 'at-end': isAtEnd,\n 'at-start': isAtStart,\n 'dragging': isDragging,\n 'releasing': isReleasing,\n }),\n track: clsx(orientation, {\n 'at-end': isAtEnd,\n 'at-start': isAtStart,\n 'dragging': isDragging,\n 'releasing': isReleasing,\n }),\n knob: clsx(orientation, {\n 'at-end': isAtEnd,\n 'at-start': isAtStart,\n 'dragging': isDragging,\n 'releasing': isReleasing,\n }),\n label: clsx(orientation, {\n 'at-end': isAtEnd,\n 'at-start': isAtStart,\n 'dragging': isDragging,\n 'releasing': isReleasing,\n }),\n })\n}\n\nfunction getFixedStyles({ orientation = 'vertical', isDragging = false, naturalPosition = 0, knobHeight = 0, knobWidth = 0, isTrackInteractive = true }) {\n return asStyleDict({\n body: {\n height: '100%',\n width: '100%',\n },\n knobContainer: {\n background: 'none',\n border: 'none',\n outline: 'none',\n position: 'absolute',\n transform: 'translate3d(-50%, -50%, 0)',\n zIndex: '1',\n ...orientation === 'vertical' ? {\n left: '50%',\n top: `${naturalPosition * 100}%`,\n transition: isDragging === false ? 'top 100ms ease-out' : 'none',\n } : {\n left: `${naturalPosition * 100}%`,\n top: '50%',\n transition: isDragging === false ? 'left 100ms ease-out' : 'none',\n },\n },\n knob: {\n height: `${knobHeight}px`,\n touchAction: 'none',\n width: `${knobWidth}px`,\n },\n label: {\n pointerEvents: 'none',\n userSelect: 'none',\n },\n track: {\n cursor: isTrackInteractive ? 'pointer' : 'auto',\n pointerEvents: isTrackInteractive ? 'auto' : 'none',\n position: 'absolute',\n ...orientation === 'vertical' ? {\n left: '0',\n margin: '0 auto',\n right: '0',\n width: '100%',\n } : {\n bottom: '0',\n height: '100%',\n margin: 'auto 0',\n top: '0',\n },\n },\n trackHitbox: {\n height: '100%',\n minHeight: '20px',\n minWidth: '20px',\n position: 'absolute',\n transform: orientation === 'horizontal' ? 'translate3d(0, -50%, 0)' : 'translate3d(-50%, 0, 0)',\n width: '100%',\n },\n })\n}\n\nfunction getDefaultStyles({ knobHeight = 0 }) {\n return asStyleDict({\n knob: {\n alignItems: 'center',\n background: '#fff',\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'center',\n },\n label: {\n color: '#000',\n fontSize: '12px',\n lineHeight: `${knobHeight}px`,\n },\n track: {\n background: '#fff',\n },\n })\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Slider.js","sourceRoot":"/","sources":["components/Slider.tsx"],"names":[],"mappings":"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","sourcesContent":["import clsx from 'clsx'\nimport { forwardRef, useEffect, useRef, type HTMLAttributes, type MouseEvent, type PropsWithChildren } from 'react'\nimport { Rect } from 'spase'\nimport { useDragValueEffect } from '../hooks/useDragValueEffect'\nimport { asClassNameDict, asComponentDict, asStyleDict, cloneStyledElement, styles } from '../utils'\n\ntype Orientation = 'horizontal' | 'vertical'\n\nexport type SliderProps = HTMLAttributes<HTMLDivElement> & PropsWithChildren<{\n /**\n * By default the position is a value from 0 - 1, 0 being the start of the\n * slider and 1 being the end. Switching on this flag inverts this behavior,\n * where 0 becomes the end of the slider and 1 being the start.\n */\n isInverted?: boolean\n\n /**\n * Specifies if the track is clickable to set the position of the knob.\n */\n isTrackInteractive?: boolean\n\n /**\n * Indicates if position change events are dispatched only when dragging ends.\n * When disabled, aforementioned events are fired repeatedly while dragging.\n */\n onlyDispatchesOnDragEnd?: boolean\n\n /**\n * Padding between the track and the knob in pixels.\n */\n trackPadding?: number\n\n /**\n * Height of the knob in pixels.\n */\n knobHeight?: number\n\n /**\n * Width of the knob in pixels.\n */\n knobWidth?: number\n\n /**\n * Orientation of the slider.\n */\n orientation?: Orientation\n\n /**\n * The current position.\n */\n position?: number\n\n /**\n * A function that returns the label to be displayed at a given slider\n * position.\n *\n * @param position The current slider position.\n *\n * @returns The label.\n */\n labelProvider?: (position: number) => string\n\n /**\n * Specifies if the component should use default styles.\n */\n usesDefaultStyles?: boolean\n\n /**\n * Handler invoked when position changes. This can either be invoked from the\n * `position` prop being changed or from the slider being dragged. Note that\n * if the event is emitted at the end of dragging due to\n * `onlyDispatchesOnDragEnd` set to `true`, the `isDragging` parameter here is\n * still `true`.\n *\n * @param position The current slider position.\n * @param isDragging Specifies if the position change is due to dragging.\n */\n onPositionChange?: (position: number, isDragging: boolean) => void\n\n /**\n * Handler invoked when dragging ends.\n */\n onDragEnd?: () => void\n\n /**\n * Handler invoked when dragging begins.\n */\n onDragStart?: () => void\n}>\n\n/**\n * A slider component supporting both horizontal and vertical orientations whose\n * sliding position (a decimal between 0.0 and 1.0, inclusive) can be two-way\n * binded. The component consists of three customizable elements: a draggable\n * knob, a label on the knob, and a scroll track on either side of the knob.\n * While the width and height of the slider is inferred from its CSS rules, the\n * width and height of the knob are set via props (`knobWidth` and `knobHeight`,\n * respectively). The size of the knob does not impact the size of the slider.\n *\n * @exports SliderKnob The component for the knob.\n * @exports SliderLabel The component for the label on the knob.\n * @exports SliderTrack The component for the slide track on either side of the\n * knob.\n */\nexport const Slider = forwardRef<HTMLDivElement, SliderProps>(({\n children,\n className,\n isInverted = false,\n isTrackInteractive = true,\n knobHeight = 30,\n knobWidth = 30,\n labelProvider,\n onlyDispatchesOnDragEnd = false,\n orientation = 'vertical',\n position: externalPosition = 0,\n trackPadding = 0,\n usesDefaultStyles = false,\n onDragEnd,\n onDragStart,\n onPositionChange,\n ...props\n}, ref) => {\n const mapDragValueToPosition = (value: number, dx: number, dy: number) => {\n const rect = Rect.from(bodyRef.current) ?? new Rect()\n const truePosition = isInverted ? 1 - value : value\n const trueNewPositionX = truePosition * rect.width + dx\n const trueNewPositionY = truePosition * rect.height + dy\n const trueNewPosition = orientation === 'vertical' ? Math.max(0, Math.min(1, trueNewPositionY / rect.height)) : Math.max(0, Math.min(1, trueNewPositionX / rect.width))\n const normalizedPosition = isInverted ? 1 - trueNewPosition : trueNewPosition\n\n return normalizedPosition\n }\n\n const trackClickHandler = (event: MouseEvent) => {\n if (!isTrackInteractive) return\n\n const rect = Rect.from(bodyRef.current) ?? new Rect()\n\n switch (orientation) {\n case 'horizontal': {\n const trackPosition = (event.clientX - rect.left) / rect.width\n const normalizedPosition = isInverted ? 1 - trackPosition : trackPosition\n setPosition(normalizedPosition)\n break\n }\n case 'vertical': {\n const trackPosition = (event.clientY - rect.top) / rect.height\n const normalizedPosition = isInverted ? 1 - trackPosition : trackPosition\n setPosition(normalizedPosition)\n break\n }\n default: break\n }\n }\n\n const bodyRef = useRef<HTMLDivElement>(null)\n const knobContainerRef = useRef<HTMLButtonElement>(null)\n\n const { isDragging: [isDragging], isReleasing: [isReleasing], value: [position, setPosition] } = useDragValueEffect(knobContainerRef, {\n initialValue: externalPosition,\n transform: mapDragValueToPosition,\n onDragStart,\n onDragEnd,\n })\n\n // Natural position is the position affecting internal components accounting\n // for `isInverted`.\n const naturalPosition = isInverted ? 1 - position : position\n const isAtEnd = isInverted ? position === 0 : position === 1\n const isAtStart = isInverted ? position === 1 : position === 0\n\n useEffect(() => {\n if (isDragging || externalPosition === position) return\n setPosition(externalPosition)\n }, [externalPosition])\n\n useEffect(() => {\n if (isDragging && onlyDispatchesOnDragEnd) return\n onPositionChange?.(position, isDragging)\n }, [position])\n\n useEffect(() => {\n if (isDragging || !onlyDispatchesOnDragEnd) return\n onPositionChange?.(position, true)\n }, [isDragging])\n\n const components = asComponentDict(children, {\n knob: SliderKnob,\n label: SliderLabel,\n track: SliderTrack,\n })\n\n const fixedClassNames = getFixedClassNames({ orientation, isAtEnd, isAtStart, isDragging, isReleasing })\n const fixedStyles = getFixedStyles({ orientation, isDragging, naturalPosition, knobHeight, knobWidth, isTrackInteractive })\n const defaultStyles = usesDefaultStyles ? getDefaultStyles({ knobHeight }) : undefined\n\n return (\n <div {...props} ref={ref} className={clsx(className, fixedClassNames.root)} data-component='slider'>\n <div ref={bodyRef} style={fixedStyles.body}>\n {cloneStyledElement(components.track ?? <SliderTrack style={defaultStyles?.track}/>, {\n className: clsx('start', fixedClassNames.track),\n style: styles(fixedStyles.track, orientation === 'vertical' ? {\n height: `calc(${naturalPosition * 100}% - ${trackPadding <= 0 ? 0 : knobHeight * 0.5}px - ${trackPadding}px)`,\n top: '0',\n } : {\n left: '0',\n width: `calc(${naturalPosition * 100}% - ${trackPadding <= 0 ? 0 : knobWidth * 0.5}px - ${trackPadding}px)`,\n }),\n onClick: trackClickHandler,\n }, <div style={fixedStyles.trackHitbox}/>)}\n {cloneStyledElement(components.track ?? <SliderTrack style={defaultStyles?.track}/>, {\n className: clsx('end', fixedClassNames.track),\n style: styles(fixedStyles.track, orientation === 'vertical' ? {\n bottom: '0',\n height: `calc(${(1 - naturalPosition) * 100}% - ${trackPadding <= 0 ? 0 : knobHeight * 0.5}px - ${trackPadding}px)`,\n } : {\n right: '0',\n width: `calc(${(1 - naturalPosition) * 100}% - ${trackPadding <= 0 ? 0 : knobWidth * 0.5}px - ${trackPadding}px)`,\n }),\n onClick: trackClickHandler,\n }, <div style={fixedStyles.trackHitbox}/>)}\n <button ref={knobContainerRef} style={fixedStyles.knobContainer}>\n {cloneStyledElement(components.knob ?? <SliderKnob style={defaultStyles?.knob}/>, {\n className: clsx(fixedClassNames.knob),\n style: styles(fixedStyles.knob),\n }, labelProvider && cloneStyledElement(components.label ?? <SliderLabel style={defaultStyles?.label}/>, {\n className: clsx(fixedClassNames.label),\n style: styles(fixedStyles.label),\n }, labelProvider(position)))}\n </button>\n </div>\n </div>\n )\n})\n\nObject.defineProperty(Slider, 'displayName', { value: 'Slider', writable: false })\n\nexport const SliderTrack = ({ ...props }: HTMLAttributes<HTMLDivElement>) => <div {...props} data-child='track'/>\n\nexport const SliderKnob = ({ ...props }: HTMLAttributes<HTMLDivElement>) => <div {...props} data-child='knob'/>\n\nexport const SliderLabel = ({ ...props }: HTMLAttributes<HTMLDivElement>) => <div {...props} data-child='label'/>\n\nfunction getFixedClassNames({ orientation = 'vertical', isAtEnd = false, isAtStart = false, isDragging = false, isReleasing = false }) {\n return asClassNameDict({\n root: clsx(orientation, {\n 'at-end': isAtEnd,\n 'at-start': isAtStart,\n 'dragging': isDragging,\n 'releasing': isReleasing,\n }),\n track: clsx(orientation, {\n 'at-end': isAtEnd,\n 'at-start': isAtStart,\n 'dragging': isDragging,\n 'releasing': isReleasing,\n }),\n knob: clsx(orientation, {\n 'at-end': isAtEnd,\n 'at-start': isAtStart,\n 'dragging': isDragging,\n 'releasing': isReleasing,\n }),\n label: clsx(orientation, {\n 'at-end': isAtEnd,\n 'at-start': isAtStart,\n 'dragging': isDragging,\n 'releasing': isReleasing,\n }),\n })\n}\n\nfunction getFixedStyles({ orientation = 'vertical', isDragging = false, naturalPosition = 0, knobHeight = 0, knobWidth = 0, isTrackInteractive = true }) {\n return asStyleDict({\n body: {\n height: '100%',\n width: '100%',\n },\n knobContainer: {\n background: 'none',\n border: 'none',\n outline: 'none',\n position: 'absolute',\n transform: 'translate3d(-50%, -50%, 0)',\n zIndex: '1',\n ...orientation === 'vertical' ? {\n left: '50%',\n top: `${naturalPosition * 100}%`,\n transition: isDragging === false ? 'top 100ms ease-out' : 'none',\n } : {\n left: `${naturalPosition * 100}%`,\n top: '50%',\n transition: isDragging === false ? 'left 100ms ease-out' : 'none',\n },\n },\n knob: {\n height: `${knobHeight}px`,\n touchAction: 'none',\n width: `${knobWidth}px`,\n },\n label: {\n pointerEvents: 'none',\n userSelect: 'none',\n },\n track: {\n cursor: isTrackInteractive ? 'pointer' : 'auto',\n pointerEvents: isTrackInteractive ? 'auto' : 'none',\n position: 'absolute',\n ...orientation === 'vertical' ? {\n left: '0',\n margin: '0 auto',\n right: '0',\n width: '100%',\n } : {\n bottom: '0',\n height: '100%',\n margin: 'auto 0',\n top: '0',\n },\n },\n trackHitbox: {\n height: '100%',\n minHeight: '20px',\n minWidth: '20px',\n position: 'absolute',\n transform: orientation === 'horizontal' ? 'translate3d(0, -50%, 0)' : 'translate3d(-50%, 0, 0)',\n width: '100%',\n },\n })\n}\n\nfunction getDefaultStyles({ knobHeight = 0 }) {\n return asStyleDict({\n knob: {\n alignItems: 'center',\n background: '#fff',\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'center',\n },\n label: {\n color: '#000',\n fontSize: '12px',\n lineHeight: `${knobHeight}px`,\n },\n track: {\n background: '#fff',\n },\n })\n}\n"]}
|