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.
Files changed (132) hide show
  1. package/components/Accordion.js +36 -63
  2. package/components/Accordion.js.map +1 -1
  3. package/components/BurgerButton.d.ts +15 -15
  4. package/components/BurgerButton.js +11 -35
  5. package/components/BurgerButton.js.map +1 -1
  6. package/components/Carousel.d.ts +2 -2
  7. package/components/Carousel.js +6 -31
  8. package/components/Carousel.js.map +1 -1
  9. package/components/Collection.js +7 -29
  10. package/components/Collection.js.map +1 -1
  11. package/components/Counter.d.ts +11 -11
  12. package/components/Counter.js +3 -28
  13. package/components/Counter.js.map +1 -1
  14. package/components/CoverImage.d.ts +6 -6
  15. package/components/CoverImage.js +10 -35
  16. package/components/CoverImage.js.map +1 -1
  17. package/components/CoverVideo.d.ts +6 -6
  18. package/components/CoverVideo.js +10 -35
  19. package/components/CoverVideo.js.map +1 -1
  20. package/components/DebugConsole.d.ts +8 -8
  21. package/components/DebugConsole.js +3 -28
  22. package/components/DebugConsole.js.map +1 -1
  23. package/components/Dial.d.ts +12 -12
  24. package/components/Dial.js +13 -39
  25. package/components/Dial.js.map +1 -1
  26. package/components/Dropdown.js +5 -32
  27. package/components/Dropdown.js.map +1 -1
  28. package/components/FlatSVG.d.ts +8 -8
  29. package/components/FlatSVG.js +3 -25
  30. package/components/FlatSVG.js.map +1 -1
  31. package/components/Image.d.ts +15 -15
  32. package/components/Image.js +3 -25
  33. package/components/Image.js.map +1 -1
  34. package/components/MasonryGrid.d.ts +2 -2
  35. package/components/MasonryGrid.js +3 -26
  36. package/components/MasonryGrid.js.map +1 -1
  37. package/components/Panorama.d.ts +2 -2
  38. package/components/Panorama.js +3 -26
  39. package/components/Panorama.js.map +1 -1
  40. package/components/PanoramaSlider.d.ts +11 -11
  41. package/components/PanoramaSlider.js +14 -43
  42. package/components/PanoramaSlider.js.map +1 -1
  43. package/components/RangeSlider.d.ts +16 -16
  44. package/components/RangeSlider.js +45 -74
  45. package/components/RangeSlider.js.map +1 -1
  46. package/components/RotatingGallery.d.ts +12 -12
  47. package/components/RotatingGallery.js +10 -33
  48. package/components/RotatingGallery.js.map +1 -1
  49. package/components/SelectableButton.d.ts +10 -10
  50. package/components/SelectableButton.js +3 -25
  51. package/components/SelectableButton.js.map +1 -1
  52. package/components/Slider.d.ts +20 -20
  53. package/components/Slider.js +32 -58
  54. package/components/Slider.js.map +1 -1
  55. package/components/StepwiseSlider.d.ts +22 -22
  56. package/components/StepwiseSlider.js +34 -60
  57. package/components/StepwiseSlider.js.map +1 -1
  58. package/components/SwipeContainer.d.ts +9 -9
  59. package/components/SwipeContainer.js +3 -25
  60. package/components/SwipeContainer.js.map +1 -1
  61. package/components/TextField.d.ts +11 -11
  62. package/components/TextField.js +3 -25
  63. package/components/TextField.js.map +1 -1
  64. package/components/Video.d.ts +18 -18
  65. package/components/Video.js +3 -26
  66. package/components/Video.js.map +1 -1
  67. package/components/WithTooltip.d.ts +2 -2
  68. package/components/WithTooltip.js +4 -27
  69. package/components/WithTooltip.js.map +1 -1
  70. package/hooks/useClickOutsideEffect.js +1 -2
  71. package/hooks/useClickOutsideEffect.js.map +1 -1
  72. package/hooks/useDragEffect.js +1 -2
  73. package/hooks/useDragEffect.js.map +1 -1
  74. package/hooks/useDragValueEffect.js +1 -2
  75. package/hooks/useDragValueEffect.js.map +1 -1
  76. package/hooks/useImageSize.js +1 -2
  77. package/hooks/useImageSize.js.map +1 -1
  78. package/hooks/useInterval.js +1 -2
  79. package/hooks/useInterval.js.map +1 -1
  80. package/hooks/useLoadImageEffect.js +1 -2
  81. package/hooks/useLoadImageEffect.js.map +1 -1
  82. package/hooks/useLoadVideoMetadataEffect.js +1 -2
  83. package/hooks/useLoadVideoMetadataEffect.js.map +1 -1
  84. package/hooks/useMounted.js +1 -2
  85. package/hooks/useMounted.js.map +1 -1
  86. package/hooks/usePrevious.js +1 -2
  87. package/hooks/usePrevious.js.map +1 -1
  88. package/hooks/useRect.js +1 -2
  89. package/hooks/useRect.js.map +1 -1
  90. package/hooks/useResizeEffect.js +1 -2
  91. package/hooks/useResizeEffect.js.map +1 -1
  92. package/hooks/useScrollPositionEffect.js +1 -2
  93. package/hooks/useScrollPositionEffect.js.map +1 -1
  94. package/hooks/useSearchParamState.js +1 -2
  95. package/hooks/useSearchParamState.js.map +1 -1
  96. package/hooks/useSize.js +1 -2
  97. package/hooks/useSize.js.map +1 -1
  98. package/hooks/useTimeout.js +1 -2
  99. package/hooks/useTimeout.js.map +1 -1
  100. package/hooks/useVideoSize.js +1 -2
  101. package/hooks/useVideoSize.js.map +1 -1
  102. package/hooks/useViewportSize.js +1 -2
  103. package/hooks/useViewportSize.js.map +1 -1
  104. package/operators/Conditional.d.ts +2 -2
  105. package/operators/Conditional.js +5 -9
  106. package/operators/Conditional.js.map +1 -1
  107. package/operators/Each.d.ts +2 -2
  108. package/operators/Each.js +8 -31
  109. package/operators/Each.js.map +1 -1
  110. package/operators/ExtractChild.d.ts +2 -2
  111. package/operators/ExtractChild.js +13 -35
  112. package/operators/ExtractChild.js.map +1 -1
  113. package/operators/ExtractChildren.d.ts +2 -2
  114. package/operators/ExtractChildren.js +11 -34
  115. package/operators/ExtractChildren.js.map +1 -1
  116. package/operators/Repeat.d.ts +2 -2
  117. package/operators/Repeat.js +7 -30
  118. package/operators/Repeat.js.map +1 -1
  119. package/package.json +33 -30
  120. package/providers/ScrollPositionProvider.d.ts +3 -3
  121. package/providers/ScrollPositionProvider.js +6 -28
  122. package/providers/ScrollPositionProvider.js.map +1 -1
  123. package/utils/asClassNameDict.js +1 -2
  124. package/utils/asClassNameDict.js.map +1 -1
  125. package/utils/asComponentDict.js +1 -2
  126. package/utils/asComponentDict.js.map +1 -1
  127. package/utils/asStyleDict.js +1 -2
  128. package/utils/asStyleDict.js.map +1 -1
  129. package/utils/cloneStyledElement.js +1 -2
  130. package/utils/cloneStyledElement.js.map +1 -1
  131. package/utils/styles.js +1 -2
  132. package/utils/styles.js.map +1 -1
@@ -1,4 +1,4 @@
1
- import React, { type PropsWithChildren } from 'react';
1
+ import { type HTMLAttributes, type PropsWithChildren } from 'react';
2
2
  import { type Size } from 'spase';
3
3
  import { type PanoramaProps } from './Panorama';
4
4
  export type PanoramaSliderProps = PanoramaProps & PropsWithChildren<{
@@ -37,35 +37,35 @@ export type PanoramaSliderProps = PanoramaProps & PropsWithChildren<{
37
37
  * backing {@link Panorama}.
38
38
  * @exports PanoramaSliderTrack The slide track.
39
39
  */
40
- export declare const PanoramaSlider: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & PanoramaProps & {
40
+ export declare const PanoramaSlider: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & PanoramaProps & {
41
41
  /**
42
42
  * Field-of-view (0.0 - 360.0 degrees, inclusive) that represents the size of
43
43
  * the reticle. 360 indicates the reticle covers the entire image. If this is
44
44
  * unspecified, the component will attempt to automatically calculate the FOV
45
45
  * using the `viewportSize` prop.
46
46
  */
47
- fov?: number | undefined;
47
+ fov?: number;
48
48
  /**
49
49
  * Specifies which length (width or height) should be automatically
50
50
  * calculated. The counterpart must be known (if `width` is specified here,
51
51
  * the component's height must be known, i.e. it is specified in the CSS).
52
52
  * Defaults to `width`.
53
53
  */
54
- autoDimension?: "width" | "height" | undefined;
54
+ autoDimension?: "width" | "height";
55
55
  /**
56
56
  * Size of the viewport that this component is controlling. A viewport can be
57
57
  * thought of as a DOM element containing an aspect-filled image. This is used
58
58
  * to automatically calculate the FOV if `fov` prop is not specified. If it
59
59
  * is, this prop is ignored.
60
60
  */
61
- viewportSize?: Size | undefined;
61
+ viewportSize?: Size;
62
62
  /**
63
63
  * Specifies if the component should use default styles.
64
64
  */
65
- usesDefaultStyles?: boolean | undefined;
65
+ usesDefaultStyles?: boolean;
66
66
  } & {
67
- children?: React.ReactNode;
68
- } & React.RefAttributes<HTMLDivElement>>;
69
- export declare const PanoramaSliderTrack: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
70
- export declare const PanoramaSliderReticle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
71
- export declare const PanoramaSliderIndicator: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
67
+ children?: import("react").ReactNode | undefined;
68
+ } & import("react").RefAttributes<HTMLDivElement>>;
69
+ export declare const PanoramaSliderTrack: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
70
+ export declare const PanoramaSliderReticle: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
71
+ export declare const PanoramaSliderIndicator: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & 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)
@@ -65,8 +42,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
65
42
  };
66
43
  Object.defineProperty(exports, "__esModule", { value: true });
67
44
  exports.PanoramaSliderIndicator = exports.PanoramaSliderReticle = exports.PanoramaSliderTrack = exports.PanoramaSlider = void 0;
45
+ var jsx_runtime_1 = require("react/jsx-runtime");
68
46
  var clsx_1 = __importDefault(require("clsx"));
69
- var react_1 = __importStar(require("react"));
47
+ var react_1 = require("react");
70
48
  var spase_1 = require("spase");
71
49
  var useRect_1 = require("../hooks/useRect");
72
50
  var utils_1 = require("../utils");
@@ -122,35 +100,28 @@ exports.PanoramaSlider = (0, react_1.forwardRef)(function (_a, ref) {
122
100
  });
123
101
  var fixedStyles = getFixedStyles({ autoDimension: autoDimension, panoramaRect: panoramaRect, aspectRatio: aspectRatio, reticleWidth: reticleWidth });
124
102
  var defaultStyles = usesDefaultStyles ? getDefaultStyles({ isDragging: isDragging }) : undefined;
125
- return (react_1.default.createElement("div", __assign({}, props, { ref: ref, className: (0, clsx_1.default)(className, { dragging: isDragging }), style: (0, utils_1.styles)(style, fixedStyles.root), "data-component": 'panorama-slider' }),
126
- react_1.default.createElement(Panorama_1.Panorama, { angle: angle, ref: panoramaRef, speed: speed, src: src, style: fixedStyles.panorama, zeroAnchor: adjustedZeroAnchor, onAngleChange: onAngleChange, onDragEnd: dragEndHandler, onDragStart: dragStartHandler, onLoadImageComplete: onLoadImageComplete, onLoadImageError: onLoadImageError, onLoadImageStart: onLoadImageStart, onImageSizeChange: setImageSize, onPositionChange: onPositionChange }),
127
- react_1.default.createElement("div", { style: fixedStyles.body },
128
- react_1.default.createElement("div", { style: fixedStyles.controls },
129
- (0, utils_1.cloneStyledElement)((_b = components.track) !== null && _b !== void 0 ? _b : react_1.default.createElement(exports.PanoramaSliderTrack, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.track }), {
130
- style: (0, utils_1.styles)(fixedStyles.track),
131
- }),
132
- (0, utils_1.cloneStyledElement)((_c = components.reticle) !== null && _c !== void 0 ? _c : react_1.default.createElement(exports.PanoramaSliderReticle, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.reticle }), {
133
- style: (0, utils_1.styles)(fixedStyles.reticle),
134
- }),
135
- (0, utils_1.cloneStyledElement)((_d = components.track) !== null && _d !== void 0 ? _d : react_1.default.createElement(exports.PanoramaSliderTrack, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.track }), {
136
- style: (0, utils_1.styles)(fixedStyles.track),
137
- }))),
138
- (0, utils_1.cloneStyledElement)((_e = components.indicator) !== null && _e !== void 0 ? _e : react_1.default.createElement(exports.PanoramaSliderIndicator, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.indicator }), {
139
- style: (0, utils_1.styles)(fixedStyles.indicator),
140
- })));
103
+ return ((0, jsx_runtime_1.jsxs)("div", __assign({}, props, { ref: ref, className: (0, clsx_1.default)(className, { dragging: isDragging }), "data-component": 'panorama-slider', style: (0, utils_1.styles)(style, fixedStyles.root), children: [(0, jsx_runtime_1.jsx)(Panorama_1.Panorama, { ref: panoramaRef, angle: angle, speed: speed, src: src, style: fixedStyles.panorama, zeroAnchor: adjustedZeroAnchor, onAngleChange: onAngleChange, onDragEnd: dragEndHandler, onDragStart: dragStartHandler, onImageSizeChange: setImageSize, onLoadImageComplete: onLoadImageComplete, onLoadImageError: onLoadImageError, onLoadImageStart: onLoadImageStart, onPositionChange: onPositionChange }), (0, jsx_runtime_1.jsx)("div", { style: fixedStyles.body, children: (0, jsx_runtime_1.jsxs)("div", { style: fixedStyles.controls, children: [(0, utils_1.cloneStyledElement)((_b = components.track) !== null && _b !== void 0 ? _b : (0, jsx_runtime_1.jsx)(exports.PanoramaSliderTrack, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.track }), {
104
+ style: (0, utils_1.styles)(fixedStyles.track),
105
+ }), (0, utils_1.cloneStyledElement)((_c = components.reticle) !== null && _c !== void 0 ? _c : (0, jsx_runtime_1.jsx)(exports.PanoramaSliderReticle, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.reticle }), {
106
+ style: (0, utils_1.styles)(fixedStyles.reticle),
107
+ }), (0, utils_1.cloneStyledElement)((_d = components.track) !== null && _d !== void 0 ? _d : (0, jsx_runtime_1.jsx)(exports.PanoramaSliderTrack, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.track }), {
108
+ style: (0, utils_1.styles)(fixedStyles.track),
109
+ })] }) }), (0, utils_1.cloneStyledElement)((_e = components.indicator) !== null && _e !== void 0 ? _e : (0, jsx_runtime_1.jsx)(exports.PanoramaSliderIndicator, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.indicator }), {
110
+ style: (0, utils_1.styles)(fixedStyles.indicator),
111
+ })] })));
141
112
  });
142
113
  Object.defineProperty(exports.PanoramaSlider, 'displayName', { value: 'PanoramaSlider', writable: false });
143
114
  exports.PanoramaSliderTrack = (0, react_1.forwardRef)(function (_a, ref) {
144
115
  var props = __rest(_a, []);
145
- return react_1.default.createElement("div", __assign({}, props, { ref: ref, "data-child": 'track' }));
116
+ return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, "data-child": 'track' }));
146
117
  });
147
118
  exports.PanoramaSliderReticle = (0, react_1.forwardRef)(function (_a, ref) {
148
119
  var props = __rest(_a, []);
149
- return react_1.default.createElement("div", __assign({}, props, { ref: ref, "data-child": 'reticle' }));
120
+ return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, "data-child": 'reticle' }));
150
121
  });
151
122
  exports.PanoramaSliderIndicator = (0, react_1.forwardRef)(function (_a, ref) {
152
123
  var props = __rest(_a, []);
153
- return react_1.default.createElement("div", __assign({}, props, { ref: ref, "data-child": 'indicator' }));
124
+ return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, "data-child": 'indicator' }));
154
125
  });
155
126
  function getDefaultStyles(_a) {
156
127
  var _b = _a.isDragging, isDragging = _b === void 0 ? false : _b;
@@ -1 +1 @@
1
- {"version":3,"file":"PanoramaSlider.js","sourceRoot":"/","sources":["components/PanoramaSlider.tsx"],"names":[],"mappings":"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","sourcesContent":["import clsx from 'clsx'\nimport React, { forwardRef, useRef, useState, type HTMLAttributes, type PropsWithChildren } from 'react'\nimport { Rect, type Size } from 'spase'\nimport { useRect } from '../hooks/useRect'\nimport { asComponentDict, asStyleDict, cloneStyledElement, styles } from '../utils'\nimport { Panorama, type PanoramaProps } from './Panorama'\n\nexport type PanoramaSliderProps = PanoramaProps & PropsWithChildren<{\n /**\n * Field-of-view (0.0 - 360.0 degrees, inclusive) that represents the size of\n * the reticle. 360 indicates the reticle covers the entire image. If this is\n * unspecified, the component will attempt to automatically calculate the FOV\n * using the `viewportSize` prop.\n */\n fov?: number\n\n /**\n * Specifies which length (width or height) should be automatically\n * calculated. The counterpart must be known (if `width` is specified here,\n * the component's height must be known, i.e. it is specified in the CSS).\n * Defaults to `width`.\n */\n autoDimension?: 'width' | 'height'\n\n /**\n * Size of the viewport that this component is controlling. A viewport can be\n * thought of as a DOM element containing an aspect-filled image. This is used\n * to automatically calculate the FOV if `fov` prop is not specified. If it\n * is, this prop is ignored.\n */\n viewportSize?: Size\n\n /**\n * Specifies if the component should use default styles.\n */\n usesDefaultStyles?: boolean\n}>\n\n/**\n * A slider for a {@link Panorama} component.\n *\n * @exports PanoramaSliderIndicator The indicator that appears when the slider\n * is being dragged.\n * @exports PanoramaSliderReticle The reticle that indicates the FOV of the\n * backing {@link Panorama}.\n * @exports PanoramaSliderTrack The slide track.\n */\nexport const PanoramaSlider = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement> & PanoramaSliderProps>(({\n className,\n style,\n angle = 0,\n autoDimension = 'width',\n children,\n fov,\n speed = 1,\n src,\n usesDefaultStyles = false,\n viewportSize,\n zeroAnchor = 0,\n onAngleChange,\n onDragEnd,\n onDragStart,\n onLoadImageComplete,\n onLoadImageError,\n onLoadImageStart,\n onImageSizeChange,\n onPositionChange,\n ...props\n}, ref) => {\n const getAspectRatio = () => {\n if (!imageSize) return 0\n const { width, height } = imageSize\n if (height === 0) return 0\n\n return width / height\n }\n\n const getReticleWidth = () => {\n const deg = Math.min(360, Math.max(0, fov ?? (viewportSize ? viewportSize.width / (viewportSize.height * aspectRatio) * 360 : 0)))\n\n return panoramaRect.width * (deg / 360)\n }\n\n const getAdjustedZeroAnchor = () => {\n if (panoramaRect.width <= 0) return zeroAnchor\n\n return ((panoramaRect.width - reticleWidth) * 0.5 + zeroAnchor * reticleWidth) / panoramaRect.width\n }\n\n const dragStartHandler = () => {\n setIsDragging(true)\n onDragStart?.()\n }\n\n const dragEndHandler = () => {\n setIsDragging(false)\n onDragEnd?.()\n }\n\n const panoramaRef = useRef<HTMLDivElement>(null)\n const panoramaRect = useRect(panoramaRef)\n\n const [imageSize, setImageSize] = useState<Size | undefined>()\n const [isDragging, setIsDragging] = useState(false)\n\n const aspectRatio = getAspectRatio()\n const reticleWidth = getReticleWidth()\n const adjustedZeroAnchor = getAdjustedZeroAnchor()\n\n const components = asComponentDict(children, {\n track: PanoramaSliderTrack,\n reticle: PanoramaSliderReticle,\n indicator: PanoramaSliderIndicator,\n })\n\n const fixedStyles = getFixedStyles({ autoDimension, panoramaRect, aspectRatio, reticleWidth })\n const defaultStyles = usesDefaultStyles ? getDefaultStyles({ isDragging }) : undefined\n\n return (\n <div {...props} ref={ref} className={clsx(className, { dragging: isDragging })} style={styles(style, fixedStyles.root)} data-component='panorama-slider'>\n <Panorama\n angle={angle}\n ref={panoramaRef}\n speed={speed}\n src={src}\n style={fixedStyles.panorama}\n zeroAnchor={adjustedZeroAnchor}\n onAngleChange={onAngleChange}\n onDragEnd={dragEndHandler}\n onDragStart={dragStartHandler}\n onLoadImageComplete={onLoadImageComplete}\n onLoadImageError={onLoadImageError}\n onLoadImageStart={onLoadImageStart}\n onImageSizeChange={setImageSize}\n onPositionChange={onPositionChange}\n />\n <div style={fixedStyles.body}>\n <div style={fixedStyles.controls}>\n {cloneStyledElement(components.track ?? <PanoramaSliderTrack style={defaultStyles?.track}/>, {\n style: styles(fixedStyles.track),\n })}\n {cloneStyledElement(components.reticle ?? <PanoramaSliderReticle style={defaultStyles?.reticle}/>, {\n style: styles(fixedStyles.reticle),\n })}\n {cloneStyledElement(components.track ?? <PanoramaSliderTrack style={defaultStyles?.track}/>, {\n style: styles(fixedStyles.track),\n })}\n </div>\n </div>\n {cloneStyledElement(components.indicator ?? <PanoramaSliderIndicator style={defaultStyles?.indicator}/>, {\n style: styles(fixedStyles.indicator),\n })}\n </div>\n )\n})\n\nObject.defineProperty(PanoramaSlider, 'displayName', { value: 'PanoramaSlider', writable: false })\n\nexport const PanoramaSliderTrack = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='track'/>)\n\nexport const PanoramaSliderReticle = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='reticle'/>)\n\nexport const PanoramaSliderIndicator = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='indicator'/>)\n\nfunction getDefaultStyles({ isDragging = false }) {\n return asStyleDict({\n track: {\n background: 'rgba(0, 0, 0, .7)',\n height: '100%',\n },\n reticle: {\n background: `rgba(0, 0, 0, ${isDragging ? 0 : 0.3})`,\n flex: '0 0 auto',\n height: '100%',\n transitionDuration: '100ms',\n transitionProperty: 'background',\n transitionTimingFunction: 'ease-out',\n },\n indicator: {\n background: '#fff',\n borderRadius: '2px',\n bottom: '-10px',\n boxSizing: 'border-box',\n display: 'block',\n height: '2px',\n left: '0',\n margin: '0 auto',\n opacity: isDragging ? 1 : 0,\n position: 'absolute',\n right: '0',\n transition: 'opacity .3s ease-out',\n },\n })\n}\n\nfunction getFixedStyles({ autoDimension = 'width', panoramaRect = new Rect(), aspectRatio = 0, reticleWidth = 0 }) {\n return asStyleDict({\n root: {\n ...autoDimension === 'width' ? {\n width: `${panoramaRect.height * aspectRatio}px`,\n } : {\n height: `${panoramaRect.width / aspectRatio}px`,\n },\n },\n body: {\n height: '100%',\n left: '0',\n overflow: 'hidden',\n pointerEvents: 'none',\n position: 'absolute',\n top: '0',\n width: '100%',\n },\n panorama: {\n height: '100%',\n width: '100%',\n },\n controls: {\n alignItems: 'center',\n display: 'flex',\n height: '100%',\n justifyContent: 'flex-start',\n left: '0',\n overflow: 'visible',\n position: 'absolute',\n top: '0',\n width: '100%',\n },\n track: {\n flex: '1 0 auto',\n },\n reticle: {\n width: `${reticleWidth}px`,\n },\n indicator: {\n width: `${reticleWidth}px`,\n },\n })\n}\n"]}
1
+ {"version":3,"file":"PanoramaSlider.js","sourceRoot":"/","sources":["components/PanoramaSlider.tsx"],"names":[],"mappings":"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","sourcesContent":["import clsx from 'clsx'\nimport { forwardRef, useRef, useState, type HTMLAttributes, type PropsWithChildren } from 'react'\nimport { Rect, type Size } from 'spase'\nimport { useRect } from '../hooks/useRect'\nimport { asComponentDict, asStyleDict, cloneStyledElement, styles } from '../utils'\nimport { Panorama, type PanoramaProps } from './Panorama'\n\nexport type PanoramaSliderProps = PanoramaProps & PropsWithChildren<{\n /**\n * Field-of-view (0.0 - 360.0 degrees, inclusive) that represents the size of\n * the reticle. 360 indicates the reticle covers the entire image. If this is\n * unspecified, the component will attempt to automatically calculate the FOV\n * using the `viewportSize` prop.\n */\n fov?: number\n\n /**\n * Specifies which length (width or height) should be automatically\n * calculated. The counterpart must be known (if `width` is specified here,\n * the component's height must be known, i.e. it is specified in the CSS).\n * Defaults to `width`.\n */\n autoDimension?: 'width' | 'height'\n\n /**\n * Size of the viewport that this component is controlling. A viewport can be\n * thought of as a DOM element containing an aspect-filled image. This is used\n * to automatically calculate the FOV if `fov` prop is not specified. If it\n * is, this prop is ignored.\n */\n viewportSize?: Size\n\n /**\n * Specifies if the component should use default styles.\n */\n usesDefaultStyles?: boolean\n}>\n\n/**\n * A slider for a {@link Panorama} component.\n *\n * @exports PanoramaSliderIndicator The indicator that appears when the slider\n * is being dragged.\n * @exports PanoramaSliderReticle The reticle that indicates the FOV of the\n * backing {@link Panorama}.\n * @exports PanoramaSliderTrack The slide track.\n */\nexport const PanoramaSlider = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement> & PanoramaSliderProps>(({\n className,\n style,\n angle = 0,\n autoDimension = 'width',\n children,\n fov,\n speed = 1,\n src,\n usesDefaultStyles = false,\n viewportSize,\n zeroAnchor = 0,\n onAngleChange,\n onDragEnd,\n onDragStart,\n onLoadImageComplete,\n onLoadImageError,\n onLoadImageStart,\n onImageSizeChange,\n onPositionChange,\n ...props\n}, ref) => {\n const getAspectRatio = () => {\n if (!imageSize) return 0\n const { width, height } = imageSize\n if (height === 0) return 0\n\n return width / height\n }\n\n const getReticleWidth = () => {\n const deg = Math.min(360, Math.max(0, fov ?? (viewportSize ? viewportSize.width / (viewportSize.height * aspectRatio) * 360 : 0)))\n\n return panoramaRect.width * (deg / 360)\n }\n\n const getAdjustedZeroAnchor = () => {\n if (panoramaRect.width <= 0) return zeroAnchor\n\n return ((panoramaRect.width - reticleWidth) * 0.5 + zeroAnchor * reticleWidth) / panoramaRect.width\n }\n\n const dragStartHandler = () => {\n setIsDragging(true)\n onDragStart?.()\n }\n\n const dragEndHandler = () => {\n setIsDragging(false)\n onDragEnd?.()\n }\n\n const panoramaRef = useRef<HTMLDivElement>(null)\n const panoramaRect = useRect(panoramaRef)\n\n const [imageSize, setImageSize] = useState<Size | undefined>()\n const [isDragging, setIsDragging] = useState(false)\n\n const aspectRatio = getAspectRatio()\n const reticleWidth = getReticleWidth()\n const adjustedZeroAnchor = getAdjustedZeroAnchor()\n\n const components = asComponentDict(children, {\n track: PanoramaSliderTrack,\n reticle: PanoramaSliderReticle,\n indicator: PanoramaSliderIndicator,\n })\n\n const fixedStyles = getFixedStyles({ autoDimension, panoramaRect, aspectRatio, reticleWidth })\n const defaultStyles = usesDefaultStyles ? getDefaultStyles({ isDragging }) : undefined\n\n return (\n <div {...props} ref={ref} className={clsx(className, { dragging: isDragging })} data-component='panorama-slider' style={styles(style, fixedStyles.root)}>\n <Panorama\n ref={panoramaRef}\n angle={angle}\n speed={speed}\n src={src}\n style={fixedStyles.panorama}\n zeroAnchor={adjustedZeroAnchor}\n onAngleChange={onAngleChange}\n onDragEnd={dragEndHandler}\n onDragStart={dragStartHandler}\n onImageSizeChange={setImageSize}\n onLoadImageComplete={onLoadImageComplete}\n onLoadImageError={onLoadImageError}\n onLoadImageStart={onLoadImageStart}\n onPositionChange={onPositionChange}\n />\n <div style={fixedStyles.body}>\n <div style={fixedStyles.controls}>\n {cloneStyledElement(components.track ?? <PanoramaSliderTrack style={defaultStyles?.track}/>, {\n style: styles(fixedStyles.track),\n })}\n {cloneStyledElement(components.reticle ?? <PanoramaSliderReticle style={defaultStyles?.reticle}/>, {\n style: styles(fixedStyles.reticle),\n })}\n {cloneStyledElement(components.track ?? <PanoramaSliderTrack style={defaultStyles?.track}/>, {\n style: styles(fixedStyles.track),\n })}\n </div>\n </div>\n {cloneStyledElement(components.indicator ?? <PanoramaSliderIndicator style={defaultStyles?.indicator}/>, {\n style: styles(fixedStyles.indicator),\n })}\n </div>\n )\n})\n\nObject.defineProperty(PanoramaSlider, 'displayName', { value: 'PanoramaSlider', writable: false })\n\nexport const PanoramaSliderTrack = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='track'/>)\n\nexport const PanoramaSliderReticle = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='reticle'/>)\n\nexport const PanoramaSliderIndicator = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='indicator'/>)\n\nfunction getDefaultStyles({ isDragging = false }) {\n return asStyleDict({\n track: {\n background: 'rgba(0, 0, 0, .7)',\n height: '100%',\n },\n reticle: {\n background: `rgba(0, 0, 0, ${isDragging ? 0 : 0.3})`,\n flex: '0 0 auto',\n height: '100%',\n transitionDuration: '100ms',\n transitionProperty: 'background',\n transitionTimingFunction: 'ease-out',\n },\n indicator: {\n background: '#fff',\n borderRadius: '2px',\n bottom: '-10px',\n boxSizing: 'border-box',\n display: 'block',\n height: '2px',\n left: '0',\n margin: '0 auto',\n opacity: isDragging ? 1 : 0,\n position: 'absolute',\n right: '0',\n transition: 'opacity .3s ease-out',\n },\n })\n}\n\nfunction getFixedStyles({ autoDimension = 'width', panoramaRect = new Rect(), aspectRatio = 0, reticleWidth = 0 }) {\n return asStyleDict({\n root: {\n ...autoDimension === 'width' ? {\n width: `${panoramaRect.height * aspectRatio}px`,\n } : {\n height: `${panoramaRect.width / aspectRatio}px`,\n },\n },\n body: {\n height: '100%',\n left: '0',\n overflow: 'hidden',\n pointerEvents: 'none',\n position: 'absolute',\n top: '0',\n width: '100%',\n },\n panorama: {\n height: '100%',\n width: '100%',\n },\n controls: {\n alignItems: 'center',\n display: 'flex',\n height: '100%',\n justifyContent: 'flex-start',\n left: '0',\n overflow: 'visible',\n position: 'absolute',\n top: '0',\n width: '100%',\n },\n track: {\n flex: '1 0 auto',\n },\n reticle: {\n width: `${reticleWidth}px`,\n },\n indicator: {\n width: `${reticleWidth}px`,\n },\n })\n}\n"]}
@@ -1,4 +1,4 @@
1
- import React, { type PropsWithChildren } from 'react';
1
+ import { type HTMLAttributes, type PropsWithChildren } from 'react';
2
2
  type Orientation = 'horizontal' | 'vertical';
3
3
  type Range = [number, number];
4
4
  export type RangeSliderProps = PropsWithChildren<{
@@ -13,22 +13,22 @@ export type RangeSliderProps = PropsWithChildren<{
13
13
  usesDefaultStyles?: boolean;
14
14
  onRangeChange?: (range: Range) => void;
15
15
  }>;
16
- export declare const RangeSlider: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
17
- areLabelsVisible?: boolean | undefined;
18
- decimalPlaces?: number | undefined;
19
- knobPadding?: number | undefined;
16
+ export declare const RangeSlider: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & {
17
+ areLabelsVisible?: boolean;
18
+ decimalPlaces?: number;
19
+ knobPadding?: number;
20
20
  max: number;
21
21
  min: number;
22
- orientation?: Orientation | undefined;
23
- range?: Range | undefined;
24
- steps?: number | undefined;
25
- usesDefaultStyles?: boolean | undefined;
26
- onRangeChange?: ((range: Range) => void) | undefined;
22
+ orientation?: Orientation;
23
+ range?: Range;
24
+ steps?: number;
25
+ usesDefaultStyles?: boolean;
26
+ onRangeChange?: (range: Range) => void;
27
27
  } & {
28
- children?: React.ReactNode;
29
- } & React.RefAttributes<HTMLDivElement>>;
30
- export declare const RangeSliderGutter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
31
- export declare const RangeSliderLabel: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
32
- export declare const RangeSliderHighlight: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
33
- export declare const RangeSliderKnob: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
28
+ children?: import("react").ReactNode | undefined;
29
+ } & import("react").RefAttributes<HTMLDivElement>>;
30
+ export declare const RangeSliderGutter: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
31
+ export declare const RangeSliderLabel: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
32
+ export declare const RangeSliderHighlight: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
33
+ export declare const RangeSliderKnob: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
34
34
  export {};
@@ -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)
@@ -74,9 +51,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
74
51
  };
75
52
  Object.defineProperty(exports, "__esModule", { value: true });
76
53
  exports.RangeSliderKnob = exports.RangeSliderHighlight = exports.RangeSliderLabel = exports.RangeSliderGutter = exports.RangeSlider = void 0;
54
+ var jsx_runtime_1 = require("react/jsx-runtime");
77
55
  var clsx_1 = __importDefault(require("clsx"));
78
56
  var react_1 = __importDefault(require("fast-deep-equal/react"));
79
- var react_2 = __importStar(require("react"));
57
+ var react_2 = require("react");
80
58
  var useDragValueEffect_1 = require("../hooks/useDragValueEffect");
81
59
  var useRect_1 = require("../hooks/useRect");
82
60
  var utils_1 = require("../utils");
@@ -166,32 +144,27 @@ exports.RangeSlider = (0, react_2.forwardRef)(function (_a, ref) {
166
144
  });
167
145
  var fixedStyles = getFixedStyles({ orientation: orientation, highlightLength: highlightLength, start: start, knobPadding: knobPadding });
168
146
  var defaultStyles = usesDefaultStyles ? getDefaultStyles({ isReleasingStartKnob: isReleasingStartKnob, isReleasingEndKnob: isReleasingEndKnob, orientation: orientation }) : undefined;
169
- return (react_2.default.createElement("div", __assign({}, props, { ref: ref, className: (0, clsx_1.default)(className, orientation), "data-component": 'range-slider' }),
170
- react_2.default.createElement("div", { ref: bodyRef, style: fixedStyles.body },
171
- (0, utils_1.cloneStyledElement)((_d = components.gutter) !== null && _d !== void 0 ? _d : react_2.default.createElement(exports.RangeSliderGutter, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.gutter }), {
172
- style: (0, utils_1.styles)(fixedStyles.gutter),
173
- }),
174
- (0, utils_1.cloneStyledElement)((_e = components.highlight) !== null && _e !== void 0 ? _e : react_2.default.createElement(exports.RangeSliderHighlight, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.highlight }), {
175
- style: (0, utils_1.styles)(fixedStyles.highlight),
176
- }),
177
- (0, utils_1.cloneStyledElement)((_f = components.knob) !== null && _f !== void 0 ? _f : react_2.default.createElement(exports.RangeSliderKnob, { style: (0, utils_1.styles)(defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.knob, {
178
- transitionProperty: isReleasingStartKnob ? 'opacity, transform' : 'opacity',
179
- }) }), {
180
- ref: startKnobRef,
181
- disabled: (0, react_1.default)([startValue, endValue], [maxValue, maxValue]),
182
- className: (0, clsx_1.default)({
183
- dragging: isDraggingStartKnob,
184
- releasing: isReleasingStartKnob,
185
- }),
186
- style: (0, utils_1.styles)(fixedStyles.knob, {
187
- pointerEvents: (0, react_1.default)([startValue, endValue], [minValue, minValue]) ? 'none' : 'auto',
188
- }, orientation === 'horizontal' ? {
189
- marginLeft: "".concat(start, "px"),
190
- } : {
191
- marginTop: "".concat(start, "px"),
192
- }),
193
- }, react_2.default.createElement("div", { style: fixedStyles.knobHitbox }), areLabelsVisible &&
194
- (0, utils_1.cloneStyledElement)((_g = components.label) !== null && _g !== void 0 ? _g : react_2.default.createElement(exports.RangeSliderLabel, { style: (0, utils_1.styles)(defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.label, {
147
+ return ((0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, className: (0, clsx_1.default)(className, orientation), "data-component": 'range-slider', children: (0, jsx_runtime_1.jsxs)("div", { ref: bodyRef, style: fixedStyles.body, children: [(0, utils_1.cloneStyledElement)((_d = components.gutter) !== null && _d !== void 0 ? _d : (0, jsx_runtime_1.jsx)(exports.RangeSliderGutter, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.gutter }), {
148
+ style: (0, utils_1.styles)(fixedStyles.gutter),
149
+ }), (0, utils_1.cloneStyledElement)((_e = components.highlight) !== null && _e !== void 0 ? _e : (0, jsx_runtime_1.jsx)(exports.RangeSliderHighlight, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.highlight }), {
150
+ style: (0, utils_1.styles)(fixedStyles.highlight),
151
+ }), (0, utils_1.cloneStyledElement)((_f = components.knob) !== null && _f !== void 0 ? _f : (0, jsx_runtime_1.jsx)(exports.RangeSliderKnob, { style: (0, utils_1.styles)(defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.knob, {
152
+ transitionProperty: isReleasingStartKnob ? 'opacity, transform' : 'opacity',
153
+ }) }), {
154
+ ref: startKnobRef,
155
+ disabled: (0, react_1.default)([startValue, endValue], [maxValue, maxValue]),
156
+ className: (0, clsx_1.default)({
157
+ dragging: isDraggingStartKnob,
158
+ releasing: isReleasingStartKnob,
159
+ }),
160
+ style: (0, utils_1.styles)(fixedStyles.knob, {
161
+ pointerEvents: (0, react_1.default)([startValue, endValue], [minValue, minValue]) ? 'none' : 'auto',
162
+ }, orientation === 'horizontal' ? {
163
+ marginLeft: "".concat(start, "px"),
164
+ } : {
165
+ marginTop: "".concat(start, "px"),
166
+ }),
167
+ }, (0, jsx_runtime_1.jsx)("div", { style: fixedStyles.knobHitbox }), areLabelsVisible && (0, utils_1.cloneStyledElement)((_g = components.label) !== null && _g !== void 0 ? _g : (0, jsx_runtime_1.jsx)(exports.RangeSliderLabel, { style: (0, utils_1.styles)(defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.label, {
195
168
  transitionProperty: isReleasingStartKnob ? 'opacity, transform' : 'opacity',
196
169
  }) }), {
197
170
  className: (0, clsx_1.default)({
@@ -199,25 +172,23 @@ exports.RangeSlider = (0, react_2.forwardRef)(function (_a, ref) {
199
172
  releasing: isReleasingStartKnob || isReleasingEndKnob,
200
173
  }),
201
174
  style: (0, utils_1.styles)(fixedStyles.label),
202
- }, Number(startValue.toFixed(decimalPlaces)).toLocaleString())),
203
- (0, utils_1.cloneStyledElement)((_h = components.knob) !== null && _h !== void 0 ? _h : react_2.default.createElement(exports.RangeSliderKnob, { style: (0, utils_1.styles)(defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.knob, {
204
- transitionProperty: isReleasingEndKnob ? 'opacity, transform' : 'opacity',
205
- }) }), {
206
- ref: endKnobRef,
207
- disabled: (0, react_1.default)([startValue, endValue], [maxValue, maxValue]),
208
- className: (0, clsx_1.default)({
209
- dragging: isDraggingEndKnob,
210
- releasing: isDraggingEndKnob,
211
- }),
212
- style: (0, utils_1.styles)(fixedStyles.knob, {
213
- pointerEvents: (0, react_1.default)([startValue, endValue], [maxValue, maxValue]) ? 'none' : 'auto',
214
- }, orientation === 'horizontal' ? {
215
- marginLeft: "".concat(end, "px"),
216
- } : {
217
- marginTop: "".concat(end, "px"),
218
- }),
219
- }, react_2.default.createElement("div", { style: fixedStyles.knobHitbox }), areLabelsVisible &&
220
- (0, utils_1.cloneStyledElement)((_j = components.label) !== null && _j !== void 0 ? _j : react_2.default.createElement(exports.RangeSliderLabel, { style: (0, utils_1.styles)(defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.label, {
175
+ }, Number(startValue.toFixed(decimalPlaces)).toLocaleString())), (0, utils_1.cloneStyledElement)((_h = components.knob) !== null && _h !== void 0 ? _h : (0, jsx_runtime_1.jsx)(exports.RangeSliderKnob, { style: (0, utils_1.styles)(defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.knob, {
176
+ transitionProperty: isReleasingEndKnob ? 'opacity, transform' : 'opacity',
177
+ }) }), {
178
+ ref: endKnobRef,
179
+ disabled: (0, react_1.default)([startValue, endValue], [maxValue, maxValue]),
180
+ className: (0, clsx_1.default)({
181
+ dragging: isDraggingEndKnob,
182
+ releasing: isDraggingEndKnob,
183
+ }),
184
+ style: (0, utils_1.styles)(fixedStyles.knob, {
185
+ pointerEvents: (0, react_1.default)([startValue, endValue], [maxValue, maxValue]) ? 'none' : 'auto',
186
+ }, orientation === 'horizontal' ? {
187
+ marginLeft: "".concat(end, "px"),
188
+ } : {
189
+ marginTop: "".concat(end, "px"),
190
+ }),
191
+ }, (0, jsx_runtime_1.jsx)("div", { style: fixedStyles.knobHitbox }), areLabelsVisible && (0, utils_1.cloneStyledElement)((_j = components.label) !== null && _j !== void 0 ? _j : (0, jsx_runtime_1.jsx)(exports.RangeSliderLabel, { style: (0, utils_1.styles)(defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.label, {
221
192
  transitionProperty: isReleasingEndKnob ? 'opacity, transform' : 'opacity',
222
193
  }) }), {
223
194
  className: (0, clsx_1.default)({
@@ -225,24 +196,24 @@ exports.RangeSlider = (0, react_2.forwardRef)(function (_a, ref) {
225
196
  releasing: isReleasingEndKnob,
226
197
  }),
227
198
  style: (0, utils_1.styles)(fixedStyles.label),
228
- }, Number(endValue.toFixed(decimalPlaces)).toLocaleString())))));
199
+ }, Number(endValue.toFixed(decimalPlaces)).toLocaleString()))] }) })));
229
200
  });
230
201
  Object.defineProperty(exports.RangeSlider, 'displayName', { value: 'RangeSlider', writable: false });
231
202
  exports.RangeSliderGutter = (0, react_2.forwardRef)(function (_a, ref) {
232
203
  var props = __rest(_a, []);
233
- return react_2.default.createElement("div", __assign({}, props, { ref: ref, "data-child": 'gutter' }));
204
+ return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, "data-child": 'gutter' }));
234
205
  });
235
206
  exports.RangeSliderLabel = (0, react_2.forwardRef)(function (_a, ref) {
236
207
  var props = __rest(_a, []);
237
- return react_2.default.createElement("div", __assign({}, props, { ref: ref, "data-child": 'label' }));
208
+ return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, "data-child": 'label' }));
238
209
  });
239
210
  exports.RangeSliderHighlight = (0, react_2.forwardRef)(function (_a, ref) {
240
211
  var props = __rest(_a, []);
241
- return react_2.default.createElement("div", __assign({}, props, { ref: ref, "data-child": 'highlight' }));
212
+ return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, "data-child": 'highlight' }));
242
213
  });
243
214
  exports.RangeSliderKnob = (0, react_2.forwardRef)(function (_a, ref) {
244
215
  var props = __rest(_a, []);
245
- return react_2.default.createElement("div", __assign({}, props, { ref: ref, "data-child": 'knob' }));
216
+ return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, "data-child": 'knob' }));
246
217
  });
247
218
  function getFixedStyles(_a) {
248
219
  var _b = _a.orientation, orientation = _b === void 0 ? 'horizontal' : _b, _c = _a.highlightLength, highlightLength = _c === void 0 ? 0 : _c, _d = _a.start, start = _d === void 0 ? 0 : _d, _e = _a.knobPadding, knobPadding = _e === void 0 ? 0 : _e;
@@ -1 +1 @@
1
- {"version":3,"file":"RangeSlider.js","sourceRoot":"/","sources":["components/RangeSlider.tsx"],"names":[],"mappings":"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","sourcesContent":["import clsx from 'clsx'\nimport isDeepEqual from 'fast-deep-equal/react'\nimport React, { forwardRef, useEffect, useRef, useState, type HTMLAttributes, type PropsWithChildren } from 'react'\nimport { useDragValueEffect } from '../hooks/useDragValueEffect'\nimport { useRect } from '../hooks/useRect'\nimport { asComponentDict, asStyleDict, cloneStyledElement, styles } from '../utils'\n\ntype Orientation = 'horizontal' | 'vertical'\n\ntype Range = [number, number]\n\nexport type RangeSliderProps = PropsWithChildren<{\n areLabelsVisible?: boolean\n decimalPlaces?: number\n knobPadding?: number\n max: number\n min: number\n orientation?: Orientation\n range?: Range\n steps?: number\n usesDefaultStyles?: boolean\n onRangeChange?: (range: Range) => void\n}>\n\nexport const RangeSlider = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement> & RangeSliderProps>(({\n children,\n className,\n areLabelsVisible = true,\n decimalPlaces = 2,\n knobPadding = 20,\n max: maxValue,\n min: minValue,\n orientation = 'vertical',\n range: externalRange,\n steps = -1,\n usesDefaultStyles = false,\n onRangeChange,\n ...props\n}, ref) => {\n const getPositionByValue = (value: number) => (value - minValue) / (maxValue - minValue)\n const getPositionByDisplacement = (displacement: number) => displacement / (orientation === 'horizontal' ? bodyRect.width : bodyRect.height)\n const getValueByPosition = (position: number) => position * (maxValue - minValue) + minValue\n const getValueByDisplacement = (displacement: number) => getValueByPosition(getPositionByDisplacement(displacement))\n const getDisplacementByPosition = (position: number) => position * (orientation === 'horizontal' ? bodyRect.width : bodyRect.height)\n const getDisplacementByValue = (value: number) => getDisplacementByPosition(getPositionByValue(value))\n\n const getClosestSteppedValue = (value: number) => {\n const n = breakpoints.length\n let idx = 0\n let diff = Infinity\n\n for (let i = 0; i < n; i++) {\n const t = breakpoints[i]\n const d = Math.abs(value - t)\n\n if (d < diff) {\n diff = d\n idx = i\n }\n }\n\n return breakpoints[idx]\n }\n\n const bodyRef = useRef<HTMLDivElement>(null)\n const bodyRect = useRect(bodyRef)\n const startKnobRef = useRef<HTMLDivElement>(null)\n const endKnobRef = useRef<HTMLDivElement>(null)\n const [range, setRange] = useState<Range>(externalRange ?? [minValue, maxValue])\n\n const { isDragging: [isDraggingStartKnob], isReleasing: [isReleasingStartKnob], value: [startValue, setStartValue] } = useDragValueEffect(startKnobRef, {\n initialValue: externalRange?.[0] ?? minValue,\n transform: (value: number, dx: number, dy: number) => {\n const delta = orientation === 'horizontal' ? dx : dy\n const dMin = getDisplacementByValue(minValue)\n const dMax = getDisplacementByValue(range[1])\n const dCurr = getDisplacementByValue(value) + delta\n\n return getValueByDisplacement(Math.max(dMin, Math.min(dMax, dCurr)))\n },\n }, [minValue, orientation, bodyRect.size.width, bodyRect.size.height, range[1]])\n\n const { isDragging: [isDraggingEndKnob], isReleasing: [isReleasingEndKnob], value: [endValue, setEndValue] } = useDragValueEffect(endKnobRef, {\n initialValue: externalRange?.[1] ?? maxValue,\n transform: (value: number, dx: number, dy: number) => {\n const delta = orientation === 'horizontal' ? dx : dy\n const dMin = getDisplacementByValue(range[0])\n const dMax = getDisplacementByValue(maxValue)\n const dCurr = getDisplacementByValue(value) + delta\n\n return getValueByDisplacement(Math.max(dMin, Math.min(dMax, dCurr)))\n },\n }, [maxValue, orientation, bodyRect.size.width, bodyRect.size.height, range[0]])\n\n const breakpoints = [minValue, ...[...Array(steps)].map((v, i) => minValue + (i + 1) * (maxValue - minValue) / (1 + steps)), maxValue]\n const [start, end] = range.map(getDisplacementByValue)\n const highlightLength = end - start\n\n useEffect(() => {\n if (range[0] === startValue) return\n setRange([startValue, range[1]])\n onRangeChange?.(range)\n }, [startValue])\n\n useEffect(() => {\n if (range[1] === endValue) return\n setRange([range[0], endValue])\n onRangeChange?.(range)\n }, [endValue])\n\n useEffect(() => {\n if (isDraggingStartKnob || isDraggingEndKnob || isDeepEqual(externalRange, range)) return\n setRange(externalRange ?? [minValue, maxValue])\n }, [externalRange])\n\n useEffect(() => {\n if (steps < 0) return\n setStartValue(getClosestSteppedValue(startValue))\n }, [isReleasingStartKnob])\n\n useEffect(() => {\n if (steps < 0 || !isReleasingEndKnob) return\n setEndValue(getClosestSteppedValue(endValue))\n }, [isReleasingEndKnob])\n\n const components = asComponentDict(children, {\n gutter: RangeSliderGutter,\n highlight: RangeSliderHighlight,\n knob: RangeSliderKnob,\n label: RangeSliderLabel,\n })\n\n const fixedStyles = getFixedStyles({ orientation, highlightLength, start, knobPadding })\n const defaultStyles = usesDefaultStyles ? getDefaultStyles({ isReleasingStartKnob, isReleasingEndKnob, orientation }) : undefined\n\n return (\n <div {...props} ref={ref} className={clsx(className, orientation)} data-component='range-slider'>\n <div ref={bodyRef} style={fixedStyles.body}>\n {cloneStyledElement(components.gutter ?? <RangeSliderGutter style={defaultStyles?.gutter}/>, {\n style: styles(fixedStyles.gutter),\n })}\n {cloneStyledElement(components.highlight ?? <RangeSliderHighlight style={defaultStyles?.highlight}/>, {\n style: styles(fixedStyles.highlight),\n })}\n {cloneStyledElement(components.knob ?? <RangeSliderKnob style={styles(defaultStyles?.knob, {\n transitionProperty: isReleasingStartKnob ? 'opacity, transform' : 'opacity',\n })}/>, {\n ref: startKnobRef,\n disabled: isDeepEqual([startValue, endValue], [maxValue, maxValue]),\n className: clsx({\n dragging: isDraggingStartKnob,\n releasing: isReleasingStartKnob,\n }),\n style: styles(fixedStyles.knob, {\n pointerEvents: isDeepEqual([startValue, endValue], [minValue, minValue]) ? 'none' : 'auto',\n }, orientation === 'horizontal' ? {\n marginLeft: `${start}px`,\n } : {\n marginTop: `${start}px`,\n }),\n }, <div style={fixedStyles.knobHitbox}/>, areLabelsVisible &&\n cloneStyledElement(components.label ?? <RangeSliderLabel style={styles(defaultStyles?.label, {\n transitionProperty: isReleasingStartKnob ? 'opacity, transform' : 'opacity',\n })}/>, {\n className: clsx({\n dragging: isDraggingStartKnob || isDraggingEndKnob,\n releasing: isReleasingStartKnob || isReleasingEndKnob,\n }),\n style: styles(fixedStyles.label),\n }, Number(startValue.toFixed(decimalPlaces)).toLocaleString())\n )}\n {cloneStyledElement(components.knob ?? <RangeSliderKnob style={styles(defaultStyles?.knob, {\n transitionProperty: isReleasingEndKnob ? 'opacity, transform' : 'opacity',\n })}/>, {\n ref: endKnobRef,\n disabled: isDeepEqual([startValue, endValue], [maxValue, maxValue]),\n className: clsx({\n dragging: isDraggingEndKnob,\n releasing: isDraggingEndKnob,\n }),\n style: styles(fixedStyles.knob, {\n pointerEvents: isDeepEqual([startValue, endValue], [maxValue, maxValue]) ? 'none' : 'auto',\n }, orientation === 'horizontal' ? {\n marginLeft: `${end}px`,\n } : {\n marginTop: `${end}px`,\n }),\n }, <div style={fixedStyles.knobHitbox}/>, areLabelsVisible &&\n cloneStyledElement(components.label ?? <RangeSliderLabel style={styles(defaultStyles?.label, {\n transitionProperty: isReleasingEndKnob ? 'opacity, transform' : 'opacity',\n })}/>, {\n className: clsx({\n dragging: isDraggingEndKnob,\n releasing: isReleasingEndKnob,\n }),\n style: styles(fixedStyles.label),\n }, Number(endValue.toFixed(decimalPlaces)).toLocaleString())\n )}\n </div>\n </div>\n )\n})\n\nObject.defineProperty(RangeSlider, 'displayName', { value: 'RangeSlider', writable: false })\n\nexport const RangeSliderGutter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='gutter'/>)\n\nexport const RangeSliderLabel = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='label'/>)\n\nexport const RangeSliderHighlight = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='highlight'/>)\n\nexport const RangeSliderKnob = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='knob'/>)\n\nfunction getFixedStyles({ orientation = 'horizontal', highlightLength = 0, start = 0, knobPadding = 0 }) {\n return asStyleDict({\n body: {\n height: '100%',\n width: '100%',\n },\n gutter: {\n display: 'block',\n top: '0',\n left: '0',\n position: 'absolute',\n width: '100%',\n height: '100%',\n },\n highlight: {\n height: '100%',\n left: '0',\n position: 'absolute',\n top: '0',\n ...orientation === 'horizontal' ? {\n width: `${highlightLength}px`,\n transform: `translate3d(${start}px, 0, 0)`,\n } : {\n height: `${highlightLength}px`,\n transform: `translate3d(0, ${start}px, 0)`,\n },\n },\n knob: {\n bottom: '0',\n left: '0',\n margin: 'auto',\n position: 'absolute',\n right: '0',\n top: '0',\n touchAction: 'none',\n zIndex: '1',\n },\n knobHitbox: {\n background: 'transparent',\n height: `calc(100% + ${knobPadding * 2}px)`,\n left: `-${knobPadding}px`,\n padding: `${knobPadding}px`,\n position: 'absolute',\n top: `-${knobPadding}px`,\n width: `calc(100% + ${knobPadding * 2}px)`,\n },\n label: {\n pointerEvents: 'none',\n position: 'relative',\n userSelect: 'none',\n },\n })\n}\n\nfunction getDefaultStyles({ isReleasingStartKnob = false, isReleasingEndKnob = false, orientation = 'horizontal' }) {\n return asStyleDict({\n gutter: {\n background: 'rgba(255, 255, 255, .2)',\n },\n highlight: {\n background: '#fff',\n transitionDuration: '100ms',\n transitionProperty: (isReleasingStartKnob ? !isReleasingEndKnob : isReleasingEndKnob) ? 'opacity, width, transform' : 'opacity',\n transitionTimingFunction: 'ease-out',\n },\n knob: {\n alignItems: 'center',\n background: '#fff',\n borderRadius: '10px',\n boxSizing: 'border-box',\n display: 'flex',\n height: '20px',\n justifyContent: 'center',\n transitionDuration: '100ms',\n transitionTimingFunction: 'ease-out',\n width: '20px',\n },\n label: {\n background: 'transparent',\n color: '#fff',\n textAlign: 'center',\n transitionDuration: '100ms',\n transitionTimingFunction: 'ease-out',\n ...orientation === 'horizontal' ? {\n top: 'calc(100% + 10px)',\n } : {\n left: 'calc(100% + 10px)',\n },\n },\n })\n}\n"]}
1
+ {"version":3,"file":"RangeSlider.js","sourceRoot":"/","sources":["components/RangeSlider.tsx"],"names":[],"mappings":"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","sourcesContent":["import clsx from 'clsx'\nimport isDeepEqual from 'fast-deep-equal/react'\nimport { forwardRef, useEffect, useRef, useState, type HTMLAttributes, type PropsWithChildren } from 'react'\nimport { useDragValueEffect } from '../hooks/useDragValueEffect'\nimport { useRect } from '../hooks/useRect'\nimport { asComponentDict, asStyleDict, cloneStyledElement, styles } from '../utils'\n\ntype Orientation = 'horizontal' | 'vertical'\n\ntype Range = [number, number]\n\nexport type RangeSliderProps = PropsWithChildren<{\n areLabelsVisible?: boolean\n decimalPlaces?: number\n knobPadding?: number\n max: number\n min: number\n orientation?: Orientation\n range?: Range\n steps?: number\n usesDefaultStyles?: boolean\n onRangeChange?: (range: Range) => void\n}>\n\nexport const RangeSlider = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement> & RangeSliderProps>(({\n children,\n className,\n areLabelsVisible = true,\n decimalPlaces = 2,\n knobPadding = 20,\n max: maxValue,\n min: minValue,\n orientation = 'vertical',\n range: externalRange,\n steps = -1,\n usesDefaultStyles = false,\n onRangeChange,\n ...props\n}, ref) => {\n const getPositionByValue = (value: number) => (value - minValue) / (maxValue - minValue)\n const getPositionByDisplacement = (displacement: number) => displacement / (orientation === 'horizontal' ? bodyRect.width : bodyRect.height)\n const getValueByPosition = (position: number) => position * (maxValue - minValue) + minValue\n const getValueByDisplacement = (displacement: number) => getValueByPosition(getPositionByDisplacement(displacement))\n const getDisplacementByPosition = (position: number) => position * (orientation === 'horizontal' ? bodyRect.width : bodyRect.height)\n const getDisplacementByValue = (value: number) => getDisplacementByPosition(getPositionByValue(value))\n\n const getClosestSteppedValue = (value: number) => {\n const n = breakpoints.length\n let idx = 0\n let diff = Infinity\n\n for (let i = 0; i < n; i++) {\n const t = breakpoints[i]\n const d = Math.abs(value - t)\n\n if (d < diff) {\n diff = d\n idx = i\n }\n }\n\n return breakpoints[idx]\n }\n\n const bodyRef = useRef<HTMLDivElement>(null)\n const bodyRect = useRect(bodyRef)\n const startKnobRef = useRef<HTMLDivElement>(null)\n const endKnobRef = useRef<HTMLDivElement>(null)\n const [range, setRange] = useState<Range>(externalRange ?? [minValue, maxValue])\n\n const { isDragging: [isDraggingStartKnob], isReleasing: [isReleasingStartKnob], value: [startValue, setStartValue] } = useDragValueEffect(startKnobRef, {\n initialValue: externalRange?.[0] ?? minValue,\n transform: (value: number, dx: number, dy: number) => {\n const delta = orientation === 'horizontal' ? dx : dy\n const dMin = getDisplacementByValue(minValue)\n const dMax = getDisplacementByValue(range[1])\n const dCurr = getDisplacementByValue(value) + delta\n\n return getValueByDisplacement(Math.max(dMin, Math.min(dMax, dCurr)))\n },\n }, [minValue, orientation, bodyRect.size.width, bodyRect.size.height, range[1]])\n\n const { isDragging: [isDraggingEndKnob], isReleasing: [isReleasingEndKnob], value: [endValue, setEndValue] } = useDragValueEffect(endKnobRef, {\n initialValue: externalRange?.[1] ?? maxValue,\n transform: (value: number, dx: number, dy: number) => {\n const delta = orientation === 'horizontal' ? dx : dy\n const dMin = getDisplacementByValue(range[0])\n const dMax = getDisplacementByValue(maxValue)\n const dCurr = getDisplacementByValue(value) + delta\n\n return getValueByDisplacement(Math.max(dMin, Math.min(dMax, dCurr)))\n },\n }, [maxValue, orientation, bodyRect.size.width, bodyRect.size.height, range[0]])\n\n const breakpoints = [minValue, ...[...Array(steps)].map((v, i) => minValue + (i + 1) * (maxValue - minValue) / (1 + steps)), maxValue]\n const [start, end] = range.map(getDisplacementByValue)\n const highlightLength = end - start\n\n useEffect(() => {\n if (range[0] === startValue) return\n setRange([startValue, range[1]])\n onRangeChange?.(range)\n }, [startValue])\n\n useEffect(() => {\n if (range[1] === endValue) return\n setRange([range[0], endValue])\n onRangeChange?.(range)\n }, [endValue])\n\n useEffect(() => {\n if (isDraggingStartKnob || isDraggingEndKnob || isDeepEqual(externalRange, range)) return\n setRange(externalRange ?? [minValue, maxValue])\n }, [externalRange])\n\n useEffect(() => {\n if (steps < 0) return\n setStartValue(getClosestSteppedValue(startValue))\n }, [isReleasingStartKnob])\n\n useEffect(() => {\n if (steps < 0 || !isReleasingEndKnob) return\n setEndValue(getClosestSteppedValue(endValue))\n }, [isReleasingEndKnob])\n\n const components = asComponentDict(children, {\n gutter: RangeSliderGutter,\n highlight: RangeSliderHighlight,\n knob: RangeSliderKnob,\n label: RangeSliderLabel,\n })\n\n const fixedStyles = getFixedStyles({ orientation, highlightLength, start, knobPadding })\n const defaultStyles = usesDefaultStyles ? getDefaultStyles({ isReleasingStartKnob, isReleasingEndKnob, orientation }) : undefined\n\n return (\n <div {...props} ref={ref} className={clsx(className, orientation)} data-component='range-slider'>\n <div ref={bodyRef} style={fixedStyles.body}>\n {cloneStyledElement(components.gutter ?? <RangeSliderGutter style={defaultStyles?.gutter}/>, {\n style: styles(fixedStyles.gutter),\n })}\n {cloneStyledElement(components.highlight ?? <RangeSliderHighlight style={defaultStyles?.highlight}/>, {\n style: styles(fixedStyles.highlight),\n })}\n {cloneStyledElement(components.knob ?? <RangeSliderKnob\n style={styles(defaultStyles?.knob, {\n transitionProperty: isReleasingStartKnob ? 'opacity, transform' : 'opacity',\n })}\n />, {\n ref: startKnobRef,\n disabled: isDeepEqual([startValue, endValue], [maxValue, maxValue]),\n className: clsx({\n dragging: isDraggingStartKnob,\n releasing: isReleasingStartKnob,\n }),\n style: styles(fixedStyles.knob, {\n pointerEvents: isDeepEqual([startValue, endValue], [minValue, minValue]) ? 'none' : 'auto',\n }, orientation === 'horizontal' ? {\n marginLeft: `${start}px`,\n } : {\n marginTop: `${start}px`,\n }),\n }, <div style={fixedStyles.knobHitbox}/>, areLabelsVisible && cloneStyledElement(components.label ?? <RangeSliderLabel\n style={styles(defaultStyles?.label, {\n transitionProperty: isReleasingStartKnob ? 'opacity, transform' : 'opacity',\n })}\n />, {\n className: clsx({\n dragging: isDraggingStartKnob || isDraggingEndKnob,\n releasing: isReleasingStartKnob || isReleasingEndKnob,\n }),\n style: styles(fixedStyles.label),\n }, Number(startValue.toFixed(decimalPlaces)).toLocaleString()))}\n {cloneStyledElement(components.knob ?? <RangeSliderKnob\n style={styles(defaultStyles?.knob, {\n transitionProperty: isReleasingEndKnob ? 'opacity, transform' : 'opacity',\n })}\n />, {\n ref: endKnobRef,\n disabled: isDeepEqual([startValue, endValue], [maxValue, maxValue]),\n className: clsx({\n dragging: isDraggingEndKnob,\n releasing: isDraggingEndKnob,\n }),\n style: styles(fixedStyles.knob, {\n pointerEvents: isDeepEqual([startValue, endValue], [maxValue, maxValue]) ? 'none' : 'auto',\n }, orientation === 'horizontal' ? {\n marginLeft: `${end}px`,\n } : {\n marginTop: `${end}px`,\n }),\n }, <div style={fixedStyles.knobHitbox}/>, areLabelsVisible && cloneStyledElement(components.label ?? <RangeSliderLabel\n style={styles(defaultStyles?.label, {\n transitionProperty: isReleasingEndKnob ? 'opacity, transform' : 'opacity',\n })}\n />, {\n className: clsx({\n dragging: isDraggingEndKnob,\n releasing: isReleasingEndKnob,\n }),\n style: styles(fixedStyles.label),\n }, Number(endValue.toFixed(decimalPlaces)).toLocaleString()))}\n </div>\n </div>\n )\n})\n\nObject.defineProperty(RangeSlider, 'displayName', { value: 'RangeSlider', writable: false })\n\nexport const RangeSliderGutter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='gutter'/>)\n\nexport const RangeSliderLabel = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='label'/>)\n\nexport const RangeSliderHighlight = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='highlight'/>)\n\nexport const RangeSliderKnob = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(({ ...props }, ref) => <div {...props} ref={ref} data-child='knob'/>)\n\nfunction getFixedStyles({ orientation = 'horizontal', highlightLength = 0, start = 0, knobPadding = 0 }) {\n return asStyleDict({\n body: {\n height: '100%',\n width: '100%',\n },\n gutter: {\n display: 'block',\n top: '0',\n left: '0',\n position: 'absolute',\n width: '100%',\n height: '100%',\n },\n highlight: {\n height: '100%',\n left: '0',\n position: 'absolute',\n top: '0',\n ...orientation === 'horizontal' ? {\n width: `${highlightLength}px`,\n transform: `translate3d(${start}px, 0, 0)`,\n } : {\n height: `${highlightLength}px`,\n transform: `translate3d(0, ${start}px, 0)`,\n },\n },\n knob: {\n bottom: '0',\n left: '0',\n margin: 'auto',\n position: 'absolute',\n right: '0',\n top: '0',\n touchAction: 'none',\n zIndex: '1',\n },\n knobHitbox: {\n background: 'transparent',\n height: `calc(100% + ${knobPadding * 2}px)`,\n left: `-${knobPadding}px`,\n padding: `${knobPadding}px`,\n position: 'absolute',\n top: `-${knobPadding}px`,\n width: `calc(100% + ${knobPadding * 2}px)`,\n },\n label: {\n pointerEvents: 'none',\n position: 'relative',\n userSelect: 'none',\n },\n })\n}\n\nfunction getDefaultStyles({ isReleasingStartKnob = false, isReleasingEndKnob = false, orientation = 'horizontal' }) {\n return asStyleDict({\n gutter: {\n background: 'rgba(255, 255, 255, .2)',\n },\n highlight: {\n background: '#fff',\n transitionDuration: '100ms',\n transitionProperty: (isReleasingStartKnob ? !isReleasingEndKnob : isReleasingEndKnob) ? 'opacity, width, transform' : 'opacity',\n transitionTimingFunction: 'ease-out',\n },\n knob: {\n alignItems: 'center',\n background: '#fff',\n borderRadius: '10px',\n boxSizing: 'border-box',\n display: 'flex',\n height: '20px',\n justifyContent: 'center',\n transitionDuration: '100ms',\n transitionTimingFunction: 'ease-out',\n width: '20px',\n },\n label: {\n background: 'transparent',\n color: '#fff',\n textAlign: 'center',\n transitionDuration: '100ms',\n transitionTimingFunction: 'ease-out',\n ...orientation === 'horizontal' ? {\n top: 'calc(100% + 10px)',\n } : {\n left: 'calc(100% + 10px)',\n },\n },\n })\n}\n"]}