etudes 5.2.0 → 5.3.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 (164) hide show
  1. package/components/Accordion.js +171 -205
  2. package/components/BurgerButton.js +40 -94
  3. package/components/Carousel.js +87 -123
  4. package/components/Collection.js +84 -120
  5. package/components/Counter.js +32 -63
  6. package/components/CoverImage.js +24 -68
  7. package/components/CoverVideo.js +25 -69
  8. package/components/DebugConsole.js +27 -79
  9. package/components/Dial.js +28 -65
  10. package/components/Dropdown.js +86 -98
  11. package/components/FlatSVG.js +22 -71
  12. package/components/Image.js +21 -50
  13. package/components/MasonryGrid.js +122 -257
  14. package/components/Panorama.js +48 -92
  15. package/components/PanoramaSlider.js +57 -113
  16. package/components/RangeSlider.js +125 -182
  17. package/components/RotatingGallery.js +28 -59
  18. package/components/SelectableButton.js +10 -54
  19. package/components/Slider.js +108 -159
  20. package/components/StepwiseSlider.js +124 -176
  21. package/components/SwipeContainer.js +30 -73
  22. package/components/TextField.js +12 -49
  23. package/components/Video.js +31 -61
  24. package/components/WithTooltip.js +117 -111
  25. package/components/index.js +24 -0
  26. package/hooks/index.js +17 -0
  27. package/hooks/useClickOutsideEffect.js +8 -38
  28. package/hooks/useDragEffect.js +20 -53
  29. package/hooks/useDragValueEffect.js +31 -81
  30. package/hooks/useImageSize.js +16 -38
  31. package/hooks/useInterval.js +9 -41
  32. package/hooks/useLoadImageEffect.js +15 -48
  33. package/hooks/useLoadVideoMetadataEffect.js +15 -48
  34. package/hooks/useMounted.js +5 -25
  35. package/hooks/usePrevious.js +4 -9
  36. package/hooks/useRect.js +9 -29
  37. package/hooks/useResizeEffect.js +10 -44
  38. package/hooks/useScrollPositionEffect.js +19 -50
  39. package/hooks/useSearchParamState.js +12 -34
  40. package/hooks/useSize.js +9 -29
  41. package/hooks/useTimeout.js +8 -38
  42. package/hooks/useVideoSize.js +16 -38
  43. package/hooks/useViewportSize.js +7 -27
  44. package/operators/Conditional.js +6 -11
  45. package/operators/Each.js +6 -14
  46. package/operators/ExtractChild.js +9 -36
  47. package/operators/ExtractChildren.js +7 -34
  48. package/operators/Repeat.js +4 -37
  49. package/operators/index.js +5 -0
  50. package/package.json +27 -41
  51. package/providers/ScrollPositionProvider.js +37 -60
  52. package/providers/index.js +1 -0
  53. package/utils/asClassNameDict.js +1 -5
  54. package/utils/asComponentDict.js +11 -16
  55. package/utils/asStyleDict.js +1 -5
  56. package/utils/cloneStyledElement.js +14 -61
  57. package/utils/index.js +5 -22
  58. package/utils/styles.js +5 -21
  59. package/components/Accordion.d.ts +0 -219
  60. package/components/Accordion.js.map +0 -1
  61. package/components/BurgerButton.d.ts +0 -34
  62. package/components/BurgerButton.js.map +0 -1
  63. package/components/Carousel.d.ts +0 -53
  64. package/components/Carousel.js.map +0 -1
  65. package/components/Collection.d.ts +0 -171
  66. package/components/Collection.js.map +0 -1
  67. package/components/Counter.d.ts +0 -11
  68. package/components/Counter.js.map +0 -1
  69. package/components/CoverImage.d.ts +0 -28
  70. package/components/CoverImage.js.map +0 -1
  71. package/components/CoverVideo.d.ts +0 -28
  72. package/components/CoverVideo.js.map +0 -1
  73. package/components/DebugConsole.d.ts +0 -15
  74. package/components/DebugConsole.js.map +0 -1
  75. package/components/Dial.d.ts +0 -79
  76. package/components/Dial.js.map +0 -1
  77. package/components/Dropdown.d.ts +0 -109
  78. package/components/Dropdown.js.map +0 -1
  79. package/components/FlatSVG.d.ts +0 -72
  80. package/components/FlatSVG.js.map +0 -1
  81. package/components/Image.d.ts +0 -144
  82. package/components/Image.js.map +0 -1
  83. package/components/MasonryGrid.d.ts +0 -29
  84. package/components/MasonryGrid.js.map +0 -1
  85. package/components/Panorama.d.ts +0 -77
  86. package/components/Panorama.js.map +0 -1
  87. package/components/PanoramaSlider.d.ts +0 -71
  88. package/components/PanoramaSlider.js.map +0 -1
  89. package/components/RangeSlider.d.ts +0 -34
  90. package/components/RangeSlider.js.map +0 -1
  91. package/components/RotatingGallery.d.ts +0 -91
  92. package/components/RotatingGallery.js.map +0 -1
  93. package/components/SelectableButton.d.ts +0 -19
  94. package/components/SelectableButton.js.map +0 -1
  95. package/components/Slider.d.ts +0 -160
  96. package/components/Slider.js.map +0 -1
  97. package/components/StepwiseSlider.d.ts +0 -215
  98. package/components/StepwiseSlider.js.map +0 -1
  99. package/components/SwipeContainer.d.ts +0 -21
  100. package/components/SwipeContainer.js.map +0 -1
  101. package/components/TextField.d.ts +0 -21
  102. package/components/TextField.js.map +0 -1
  103. package/components/Video.d.ts +0 -38
  104. package/components/Video.js.map +0 -1
  105. package/components/WithTooltip.d.ts +0 -32
  106. package/components/WithTooltip.js.map +0 -1
  107. package/hooks/useClickOutsideEffect.d.ts +0 -2
  108. package/hooks/useClickOutsideEffect.js.map +0 -1
  109. package/hooks/useDragEffect.d.ts +0 -48
  110. package/hooks/useDragEffect.js.map +0 -1
  111. package/hooks/useDragValueEffect.d.ts +0 -56
  112. package/hooks/useDragValueEffect.js.map +0 -1
  113. package/hooks/useImageSize.d.ts +0 -21
  114. package/hooks/useImageSize.js.map +0 -1
  115. package/hooks/useInterval.d.ts +0 -18
  116. package/hooks/useInterval.js.map +0 -1
  117. package/hooks/useLoadImageEffect.d.ts +0 -43
  118. package/hooks/useLoadImageEffect.js.map +0 -1
  119. package/hooks/useLoadVideoMetadataEffect.d.ts +0 -35
  120. package/hooks/useLoadVideoMetadataEffect.js.map +0 -1
  121. package/hooks/useMounted.d.ts +0 -1
  122. package/hooks/useMounted.js.map +0 -1
  123. package/hooks/usePrevious.d.ts +0 -19
  124. package/hooks/usePrevious.js.map +0 -1
  125. package/hooks/useRect.d.ts +0 -11
  126. package/hooks/useRect.js.map +0 -1
  127. package/hooks/useResizeEffect.d.ts +0 -17
  128. package/hooks/useResizeEffect.js.map +0 -1
  129. package/hooks/useScrollPositionEffect.d.ts +0 -13
  130. package/hooks/useScrollPositionEffect.js.map +0 -1
  131. package/hooks/useSearchParamState.d.ts +0 -34
  132. package/hooks/useSearchParamState.js.map +0 -1
  133. package/hooks/useSize.d.ts +0 -10
  134. package/hooks/useSize.js.map +0 -1
  135. package/hooks/useTimeout.d.ts +0 -10
  136. package/hooks/useTimeout.js.map +0 -1
  137. package/hooks/useVideoSize.d.ts +0 -21
  138. package/hooks/useVideoSize.js.map +0 -1
  139. package/hooks/useViewportSize.d.ts +0 -7
  140. package/hooks/useViewportSize.js.map +0 -1
  141. package/operators/Conditional.d.ts +0 -5
  142. package/operators/Conditional.js.map +0 -1
  143. package/operators/Each.d.ts +0 -7
  144. package/operators/Each.js.map +0 -1
  145. package/operators/ExtractChild.d.ts +0 -8
  146. package/operators/ExtractChild.js.map +0 -1
  147. package/operators/ExtractChildren.d.ts +0 -6
  148. package/operators/ExtractChildren.js.map +0 -1
  149. package/operators/Repeat.d.ts +0 -11
  150. package/operators/Repeat.js.map +0 -1
  151. package/providers/ScrollPositionProvider.d.ts +0 -15
  152. package/providers/ScrollPositionProvider.js.map +0 -1
  153. package/utils/asClassNameDict.d.ts +0 -3
  154. package/utils/asClassNameDict.js.map +0 -1
  155. package/utils/asComponentDict.d.ts +0 -5
  156. package/utils/asComponentDict.js.map +0 -1
  157. package/utils/asStyleDict.d.ts +0 -4
  158. package/utils/asStyleDict.js.map +0 -1
  159. package/utils/cloneStyledElement.d.ts +0 -18
  160. package/utils/cloneStyledElement.js.map +0 -1
  161. package/utils/index.d.ts +0 -5
  162. package/utils/index.js.map +0 -1
  163. package/utils/styles.d.ts +0 -2
  164. package/utils/styles.js.map +0 -1
@@ -1,54 +1,9 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __rest = (this && this.__rest) || function (s, e) {
14
- var t = {};
15
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
- t[p] = s[p];
17
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
- t[p[i]] = s[p[i]];
21
- }
22
- return t;
23
- };
24
- var __read = (this && this.__read) || function (o, n) {
25
- var m = typeof Symbol === "function" && o[Symbol.iterator];
26
- if (!m) return o;
27
- var i = m.call(o), r, ar = [], e;
28
- try {
29
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
30
- }
31
- catch (error) { e = { error: error }; }
32
- finally {
33
- try {
34
- if (r && !r.done && (m = i["return"])) m.call(i);
35
- }
36
- finally { if (e) throw e.error; }
37
- }
38
- return ar;
39
- };
40
- var __importDefault = (this && this.__importDefault) || function (mod) {
41
- return (mod && mod.__esModule) ? mod : { "default": mod };
42
- };
43
- Object.defineProperty(exports, "__esModule", { value: true });
44
- exports.StepwiseSliderLabel = exports.StepwiseSliderKnob = exports.StepwiseSliderTrack = exports.StepwiseSlider = void 0;
45
- exports.generateSteps = generateSteps;
46
- var jsx_runtime_1 = require("react/jsx-runtime");
47
- var clsx_1 = __importDefault(require("clsx"));
48
- var react_1 = require("react");
49
- var spase_1 = require("spase");
50
- var useDragValueEffect_1 = require("../hooks/useDragValueEffect");
51
- var utils_1 = require("../utils");
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import clsx from 'clsx';
3
+ import { forwardRef, useEffect, useRef, useState } from 'react';
4
+ import { Rect } from 'spase';
5
+ import { useDragValueEffect } from '../hooks/useDragValueEffect.js';
6
+ import { asClassNameDict, asComponentDict, asStyleDict, cloneStyledElement, styles } from '../utils/index.js';
52
7
  /**
53
8
  * A "stepwise" slider component supporting both horizontal and vertical
54
9
  * orientations that automatically snaps to a set of predefined points on the
@@ -67,34 +22,30 @@ var utils_1 = require("../utils");
67
22
  * @exports StepwiseSliderTrack The component for the slide track on either side
68
23
  * of the knob.
69
24
  */
70
- exports.StepwiseSlider = (0, react_1.forwardRef)(function (_a, ref) {
71
- var _b, _c, _d, _e;
72
- var children = _a.children, className = _a.className, _f = _a.index, externalIndex = _f === void 0 ? 0 : _f, _g = _a.isInverted, isInverted = _g === void 0 ? false : _g, _h = _a.isTrackInteractive, isTrackInteractive = _h === void 0 ? true : _h, _j = _a.knobHeight, knobHeight = _j === void 0 ? 30 : _j, _k = _a.knobWidth, knobWidth = _k === void 0 ? 30 : _k, labelProvider = _a.labelProvider, _l = _a.onlyDispatchesOnDragEnd, onlyDispatchesOnDragEnd = _l === void 0 ? false : _l, _m = _a.orientation, orientation = _m === void 0 ? 'vertical' : _m, _o = _a.steps, steps = _o === void 0 ? generateSteps(10) : _o, _p = _a.trackPadding, trackPadding = _p === void 0 ? 0 : _p, _q = _a.usesDefaultStyles, usesDefaultStyles = _q === void 0 ? false : _q, onDragEnd = _a.onDragEnd, onDragStart = _a.onDragStart, onIndexChange = _a.onIndexChange, onPositionChange = _a.onPositionChange, props = __rest(_a, ["children", "className", "index", "isInverted", "isTrackInteractive", "knobHeight", "knobWidth", "labelProvider", "onlyDispatchesOnDragEnd", "orientation", "steps", "trackPadding", "usesDefaultStyles", "onDragEnd", "onDragStart", "onIndexChange", "onPositionChange"]);
73
- var mapDragValueToPosition = function (value, dx, dy) {
74
- var _a;
75
- var rect = (_a = spase_1.Rect.from(bodyRef.current)) !== null && _a !== void 0 ? _a : new spase_1.Rect();
76
- var truePosition = isInverted ? 1 - value : value;
77
- var trueNewPositionX = truePosition * rect.width + dx;
78
- var trueNewPositionY = truePosition * rect.height + dy;
79
- var trueNewPosition = orientation === 'vertical' ? Math.max(0, Math.min(1, trueNewPositionY / rect.height)) : Math.max(0, Math.min(1, trueNewPositionX / rect.width));
80
- var normalizedPosition = isInverted ? 1 - trueNewPosition : trueNewPosition;
25
+ export const StepwiseSlider = forwardRef(({ children, className, index: externalIndex = 0, isInverted = false, isTrackInteractive = true, knobHeight = 30, knobWidth = 30, labelProvider, onlyDispatchesOnDragEnd = false, orientation = 'vertical', steps = generateSteps(10), trackPadding = 0, usesDefaultStyles = false, onDragEnd, onDragStart, onIndexChange, onPositionChange, ...props }, ref) => {
26
+ const mapDragValueToPosition = (value, dx, dy) => {
27
+ const rect = Rect.from(bodyRef.current) ?? new Rect();
28
+ const truePosition = isInverted ? 1 - value : value;
29
+ const trueNewPositionX = truePosition * rect.width + dx;
30
+ const trueNewPositionY = truePosition * rect.height + dy;
31
+ const trueNewPosition = orientation === 'vertical' ? Math.max(0, Math.min(1, trueNewPositionY / rect.height)) : Math.max(0, Math.min(1, trueNewPositionX / rect.width));
32
+ const normalizedPosition = isInverted ? 1 - trueNewPosition : trueNewPosition;
81
33
  return normalizedPosition;
82
34
  };
83
- var trackClickHandler = function (event) {
84
- var _a;
35
+ const trackClickHandler = (event) => {
85
36
  if (!isTrackInteractive)
86
37
  return;
87
- var rect = (_a = spase_1.Rect.from(bodyRef.current)) !== null && _a !== void 0 ? _a : new spase_1.Rect();
38
+ const rect = Rect.from(bodyRef.current) ?? new Rect();
88
39
  switch (orientation) {
89
40
  case 'horizontal': {
90
- var trackPosition = (event.clientX - rect.left) / rect.width;
91
- var normalizedPosition = isInverted ? 1 - trackPosition : trackPosition;
41
+ const trackPosition = (event.clientX - rect.left) / rect.width;
42
+ const normalizedPosition = isInverted ? 1 - trackPosition : trackPosition;
92
43
  setPosition(normalizedPosition);
93
44
  break;
94
45
  }
95
46
  case 'vertical': {
96
- var trackPosition = (event.clientY - rect.top) / rect.height;
97
- var normalizedPosition = isInverted ? 1 - trackPosition : trackPosition;
47
+ const trackPosition = (event.clientY - rect.top) / rect.height;
48
+ const normalizedPosition = isInverted ? 1 - trackPosition : trackPosition;
98
49
  setPosition(normalizedPosition);
99
50
  break;
100
51
  }
@@ -102,32 +53,32 @@ exports.StepwiseSlider = (0, react_1.forwardRef)(function (_a, ref) {
102
53
  break;
103
54
  }
104
55
  };
105
- var bodyRef = (0, react_1.useRef)(null);
106
- var knobContainerRef = (0, react_1.useRef)(null);
107
- var _r = __read((0, react_1.useState)(externalIndex), 2), index = _r[0], setIndex = _r[1];
108
- var _s = (0, useDragValueEffect_1.useDragValueEffect)(knobContainerRef, {
56
+ const bodyRef = useRef(null);
57
+ const knobContainerRef = useRef(null);
58
+ const [index, setIndex] = useState(externalIndex);
59
+ const { isDragging: [isDragging], isReleasing: [isReleasing], value: [position, setPosition] } = useDragValueEffect(knobContainerRef, {
109
60
  initialValue: getPositionAt(externalIndex, steps),
110
61
  transform: mapDragValueToPosition,
111
- onDragStart: onDragStart,
112
- onDragEnd: onDragEnd,
113
- }), _t = __read(_s.isDragging, 1), isDragging = _t[0], _u = __read(_s.isReleasing, 1), isReleasing = _u[0], _v = __read(_s.value, 2), position = _v[0], setPosition = _v[1];
62
+ onDragStart,
63
+ onDragEnd,
64
+ });
114
65
  // Natural position is the position affecting internal components accounting
115
66
  // for `isInverted`.
116
- var naturalPosition = isInverted ? 1 - position : position;
117
- var isAtEnd = isInverted ? position === 0 : position === 1;
118
- var isAtStart = isInverted ? position === 1 : position === 0;
119
- var components = (0, utils_1.asComponentDict)(children, {
120
- knob: exports.StepwiseSliderKnob,
121
- label: exports.StepwiseSliderLabel,
122
- track: exports.StepwiseSliderTrack,
67
+ const naturalPosition = isInverted ? 1 - position : position;
68
+ const isAtEnd = isInverted ? position === 0 : position === 1;
69
+ const isAtStart = isInverted ? position === 1 : position === 0;
70
+ const components = asComponentDict(children, {
71
+ knob: StepwiseSliderKnob,
72
+ label: StepwiseSliderLabel,
73
+ track: StepwiseSliderTrack,
123
74
  });
124
- var fixedClassNames = getFixedClassNames({ orientation: orientation, isAtEnd: isAtEnd, isAtStart: isAtStart, isDragging: isDragging, isReleasing: isReleasing });
125
- var fixedStyles = getFixedStyles({ orientation: orientation, naturalPosition: naturalPosition, isDragging: isDragging, knobHeight: knobHeight, knobWidth: knobWidth, isTrackInteractive: isTrackInteractive });
126
- var defaultStyles = usesDefaultStyles ? getDefaultStyles({ knobHeight: knobHeight }) : undefined;
127
- (0, react_1.useEffect)(function () {
75
+ const fixedClassNames = getFixedClassNames({ orientation, isAtEnd, isAtStart, isDragging, isReleasing });
76
+ const fixedStyles = getFixedStyles({ orientation, naturalPosition, isDragging, knobHeight, knobWidth, isTrackInteractive });
77
+ const defaultStyles = usesDefaultStyles ? getDefaultStyles({ knobHeight }) : undefined;
78
+ useEffect(() => {
128
79
  if (isDragging)
129
80
  return;
130
- var newPosition = getPositionAt(externalIndex, steps);
81
+ const newPosition = getPositionAt(externalIndex, steps);
131
82
  if (position !== newPosition) {
132
83
  setPosition(newPosition);
133
84
  }
@@ -135,71 +86,59 @@ exports.StepwiseSlider = (0, react_1.forwardRef)(function (_a, ref) {
135
86
  setIndex(externalIndex);
136
87
  }
137
88
  }, [externalIndex]);
138
- (0, react_1.useEffect)(function () {
89
+ useEffect(() => {
139
90
  if (isDragging && onlyDispatchesOnDragEnd)
140
91
  return;
141
- onPositionChange === null || onPositionChange === void 0 ? void 0 : onPositionChange(position, isDragging);
142
- var newIndex = getNearestIndexByPosition(position, steps);
92
+ onPositionChange?.(position, isDragging);
93
+ const newIndex = getNearestIndexByPosition(position, steps);
143
94
  if (index !== newIndex)
144
95
  setIndex(newIndex);
145
96
  }, [position]);
146
- (0, react_1.useEffect)(function () {
147
- onIndexChange === null || onIndexChange === void 0 ? void 0 : onIndexChange(index, isDragging);
97
+ useEffect(() => {
98
+ onIndexChange?.(index, isDragging);
148
99
  }, [index]);
149
- (0, react_1.useEffect)(function () {
100
+ useEffect(() => {
150
101
  if (isDragging)
151
102
  return;
152
- var nearestIndex = getNearestIndexByPosition(position, steps);
153
- var nearestPosition = getPositionAt(nearestIndex, steps);
103
+ const nearestIndex = getNearestIndexByPosition(position, steps);
104
+ const nearestPosition = getPositionAt(nearestIndex, steps);
154
105
  if (nearestPosition !== position || onlyDispatchesOnDragEnd) {
155
106
  setPosition(nearestPosition);
156
- onPositionChange === null || onPositionChange === void 0 ? void 0 : onPositionChange(nearestPosition, true);
107
+ onPositionChange?.(nearestPosition, true);
157
108
  }
158
109
  }, [isDragging]);
159
- return ((0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, className: (0, clsx_1.default)(className, fixedClassNames.root), "data-component": 'stepwise-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.StepwiseSliderTrack, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.track }), {
160
- className: (0, clsx_1.default)('start', fixedClassNames.track),
161
- style: (0, utils_1.styles)(fixedStyles.track, orientation === 'vertical' ? {
162
- height: "calc(".concat(naturalPosition * 100, "% - ").concat(trackPadding <= 0 ? 0 : knobHeight * 0.5, "px - ").concat(trackPadding, "px)"),
110
+ return (_jsx("div", { ...props, ref: ref, className: clsx(className, fixedClassNames.root), "data-component": 'stepwise-slider', children: _jsxs("div", { ref: bodyRef, style: fixedStyles.body, children: [cloneStyledElement(components.track ?? _jsx(StepwiseSliderTrack, { style: defaultStyles?.track }), {
111
+ className: clsx('start', fixedClassNames.track),
112
+ style: styles(fixedStyles.track, orientation === 'vertical' ? {
113
+ height: `calc(${naturalPosition * 100}% - ${trackPadding <= 0 ? 0 : knobHeight * 0.5}px - ${trackPadding}px)`,
163
114
  top: '0',
164
115
  } : {
165
116
  left: '0',
166
- width: "calc(".concat(naturalPosition * 100, "% - ").concat(trackPadding <= 0 ? 0 : knobWidth * 0.5, "px - ").concat(trackPadding, "px)"),
117
+ width: `calc(${naturalPosition * 100}% - ${trackPadding <= 0 ? 0 : knobWidth * 0.5}px - ${trackPadding}px)`,
167
118
  }),
168
119
  onClick: trackClickHandler,
169
- }, (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.StepwiseSliderTrack, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.track }), {
170
- className: (0, clsx_1.default)('end', fixedClassNames.track),
171
- style: (0, utils_1.styles)(fixedStyles.track, orientation === 'vertical' ? {
120
+ }, _jsx("div", { style: fixedStyles.trackHitbox })), cloneStyledElement(components.track ?? _jsx(StepwiseSliderTrack, { style: defaultStyles?.track }), {
121
+ className: clsx('end', fixedClassNames.track),
122
+ style: styles(fixedStyles.track, orientation === 'vertical' ? {
172
123
  bottom: '0',
173
- height: "calc(".concat((1 - naturalPosition) * 100, "% - ").concat(trackPadding <= 0 ? 0 : knobHeight * 0.5, "px - ").concat(trackPadding, "px)"),
124
+ height: `calc(${(1 - naturalPosition) * 100}% - ${trackPadding <= 0 ? 0 : knobHeight * 0.5}px - ${trackPadding}px)`,
174
125
  } : {
175
126
  right: '0',
176
- width: "calc(".concat((1 - naturalPosition) * 100, "% - ").concat(trackPadding <= 0 ? 0 : knobWidth * 0.5, "px - ").concat(trackPadding, "px)"),
127
+ width: `calc(${(1 - naturalPosition) * 100}% - ${trackPadding <= 0 ? 0 : knobWidth * 0.5}px - ${trackPadding}px)`,
177
128
  }),
178
129
  onClick: trackClickHandler,
179
- }, (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.StepwiseSliderKnob, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.knob }), {
180
- className: (0, clsx_1.default)(fixedClassNames.knob),
181
- style: (0, utils_1.styles)(fixedStyles.knob),
182
- }, steps && labelProvider && (0, utils_1.cloneStyledElement)((_e = components.label) !== null && _e !== void 0 ? _e : (0, jsx_runtime_1.jsx)(exports.StepwiseSliderLabel, { style: defaultStyles === null || defaultStyles === void 0 ? void 0 : defaultStyles.label }), {
183
- className: (0, clsx_1.default)(fixedClassNames.label),
184
- style: (0, utils_1.styles)(fixedStyles.label),
185
- }, labelProvider(position, getNearestIndexByPosition(position, steps)))) })] }) })));
130
+ }, _jsx("div", { style: fixedStyles.trackHitbox })), _jsx("button", { ref: knobContainerRef, style: fixedStyles.knobContainer, children: cloneStyledElement(components.knob ?? _jsx(StepwiseSliderKnob, { style: defaultStyles?.knob }), {
131
+ className: clsx(fixedClassNames.knob),
132
+ style: styles(fixedStyles.knob),
133
+ }, steps && labelProvider && cloneStyledElement(components.label ?? _jsx(StepwiseSliderLabel, { style: defaultStyles?.label }), {
134
+ className: clsx(fixedClassNames.label),
135
+ style: styles(fixedStyles.label),
136
+ }, labelProvider(position, getNearestIndexByPosition(position, steps)))) })] }) }));
186
137
  });
187
- Object.defineProperty(exports.StepwiseSlider, 'displayName', { value: 'StepwiseSlider', writable: false });
188
- var StepwiseSliderTrack = function (_a) {
189
- var props = __rest(_a, []);
190
- return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { "data-child": 'track' }));
191
- };
192
- exports.StepwiseSliderTrack = StepwiseSliderTrack;
193
- var StepwiseSliderKnob = function (_a) {
194
- var props = __rest(_a, []);
195
- return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { "data-child": 'knob' }));
196
- };
197
- exports.StepwiseSliderKnob = StepwiseSliderKnob;
198
- var StepwiseSliderLabel = function (_a) {
199
- var props = __rest(_a, []);
200
- return (0, jsx_runtime_1.jsx)("div", __assign({}, props, { "data-child": 'label' }));
201
- };
202
- exports.StepwiseSliderLabel = StepwiseSliderLabel;
138
+ Object.defineProperty(StepwiseSlider, 'displayName', { value: 'StepwiseSlider', writable: false });
139
+ export const StepwiseSliderTrack = ({ ...props }) => _jsx("div", { ...props, "data-child": 'track' });
140
+ export const StepwiseSliderKnob = ({ ...props }) => _jsx("div", { ...props, "data-child": 'knob' });
141
+ export const StepwiseSliderLabel = ({ ...props }) => _jsx("div", { ...props, "data-child": 'label' });
203
142
  /**
204
143
  * Generates a set of steps compatible with this component.
205
144
  *
@@ -208,14 +147,14 @@ exports.StepwiseSliderLabel = StepwiseSliderLabel;
208
147
  *
209
148
  * @returns An array of steps.
210
149
  */
211
- function generateSteps(length) {
150
+ export function generateSteps(length) {
212
151
  if (length <= 1)
213
152
  throw new Error('`length` value must be greater than or equal to 2');
214
153
  if (Math.round(length) !== length)
215
154
  throw new Error('`length` value must be an integer');
216
- var interval = 1 / (length - 1);
217
- return Array(length).fill(null).map(function (v, i) {
218
- var position = interval * i;
155
+ const interval = 1 / (length - 1);
156
+ return Array(length).fill(null).map((v, i) => {
157
+ const position = interval * i;
219
158
  return position;
220
159
  });
221
160
  }
@@ -229,13 +168,13 @@ function generateSteps(length) {
229
168
  * @returns The nearest index.
230
169
  */
231
170
  function getNearestIndexByPosition(position, steps) {
232
- var index = -1;
233
- var minDelta = NaN;
234
- for (var i = 0, n = steps.length; i < n; i++) {
235
- var step = getPositionAt(i, steps);
171
+ let index = -1;
172
+ let minDelta = NaN;
173
+ for (let i = 0, n = steps.length; i < n; i++) {
174
+ const step = getPositionAt(i, steps);
236
175
  if (isNaN(step))
237
176
  continue;
238
- var delta = Math.abs(position - step);
177
+ const delta = Math.abs(position - step);
239
178
  if (isNaN(minDelta) || delta < minDelta) {
240
179
  minDelta = delta;
241
180
  index = i;
@@ -257,28 +196,27 @@ function getPositionAt(index, steps) {
257
196
  return NaN;
258
197
  return steps[index];
259
198
  }
260
- function getFixedClassNames(_a) {
261
- var _b = _a.orientation, orientation = _b === void 0 ? 'vertical' : _b, _c = _a.isAtEnd, isAtEnd = _c === void 0 ? false : _c, _d = _a.isAtStart, isAtStart = _d === void 0 ? false : _d, _e = _a.isDragging, isDragging = _e === void 0 ? false : _e, _f = _a.isReleasing, isReleasing = _f === void 0 ? false : _f;
262
- return (0, utils_1.asClassNameDict)({
263
- root: (0, clsx_1.default)(orientation, {
199
+ function getFixedClassNames({ orientation = 'vertical', isAtEnd = false, isAtStart = false, isDragging = false, isReleasing = false }) {
200
+ return asClassNameDict({
201
+ root: clsx(orientation, {
264
202
  'at-end': isAtEnd,
265
203
  'at-start': isAtStart,
266
204
  'dragging': isDragging,
267
205
  'releasing': isReleasing,
268
206
  }),
269
- track: (0, clsx_1.default)(orientation, {
207
+ track: clsx(orientation, {
270
208
  'at-end': isAtEnd,
271
209
  'at-start': isAtStart,
272
210
  'dragging': isDragging,
273
211
  'releasing': isReleasing,
274
212
  }),
275
- knob: (0, clsx_1.default)(orientation, {
213
+ knob: clsx(orientation, {
276
214
  'at-end': isAtEnd,
277
215
  'at-start': isAtStart,
278
216
  'dragging': isDragging,
279
217
  'releasing': isReleasing,
280
218
  }),
281
- label: (0, clsx_1.default)(orientation, {
219
+ label: clsx(orientation, {
282
220
  'at-end': isAtEnd,
283
221
  'at-start': isAtStart,
284
222
  'dragging': isDragging,
@@ -286,42 +224,54 @@ function getFixedClassNames(_a) {
286
224
  }),
287
225
  });
288
226
  }
289
- function getFixedStyles(_a) {
290
- var _b = _a.orientation, orientation = _b === void 0 ? 'vertical' : _b, _c = _a.naturalPosition, naturalPosition = _c === void 0 ? 0 : _c, _d = _a.isDragging, isDragging = _d === void 0 ? false : _d, _e = _a.knobHeight, knobHeight = _e === void 0 ? 0 : _e, _f = _a.knobWidth, knobWidth = _f === void 0 ? 0 : _f, _g = _a.isTrackInteractive, isTrackInteractive = _g === void 0 ? false : _g;
291
- return (0, utils_1.asStyleDict)({
227
+ function getFixedStyles({ orientation = 'vertical', naturalPosition = 0, isDragging = false, knobHeight = 0, knobWidth = 0, isTrackInteractive = false }) {
228
+ return asStyleDict({
292
229
  body: {
293
230
  height: '100%',
294
231
  width: '100%',
295
232
  },
296
- knobContainer: __assign({ background: 'none', border: 'none', outline: 'none', position: 'absolute', transform: 'translate3d(-50%, -50%, 0)', zIndex: '1' }, orientation === 'vertical' ? {
297
- left: '50%',
298
- top: "".concat(naturalPosition * 100, "%"),
299
- transition: isDragging === false ? 'top 100ms ease-out' : 'none',
300
- } : {
301
- left: "".concat(naturalPosition * 100, "%"),
302
- top: '50%',
303
- transition: isDragging === false ? 'left 100ms ease-out' : 'none',
304
- }),
233
+ knobContainer: {
234
+ background: 'none',
235
+ border: 'none',
236
+ outline: 'none',
237
+ position: 'absolute',
238
+ transform: 'translate3d(-50%, -50%, 0)',
239
+ zIndex: '1',
240
+ ...orientation === 'vertical' ? {
241
+ left: '50%',
242
+ top: `${naturalPosition * 100}%`,
243
+ transition: isDragging === false ? 'top 100ms ease-out' : 'none',
244
+ } : {
245
+ left: `${naturalPosition * 100}%`,
246
+ top: '50%',
247
+ transition: isDragging === false ? 'left 100ms ease-out' : 'none',
248
+ },
249
+ },
305
250
  knob: {
306
- height: "".concat(knobHeight, "px"),
251
+ height: `${knobHeight}px`,
307
252
  touchAction: 'none',
308
- width: "".concat(knobWidth, "px"),
253
+ width: `${knobWidth}px`,
309
254
  },
310
255
  label: {
311
256
  pointerEvents: 'none',
312
257
  userSelect: 'none',
313
258
  },
314
- track: __assign({ cursor: isTrackInteractive ? 'pointer' : 'auto', pointerEvents: isTrackInteractive ? 'auto' : 'none', position: 'absolute' }, orientation === 'vertical' ? {
315
- left: '0',
316
- margin: '0 auto',
317
- right: '0',
318
- width: '100%',
319
- } : {
320
- bottom: '0',
321
- height: '100%',
322
- margin: 'auto 0',
323
- top: '0',
324
- }),
259
+ track: {
260
+ cursor: isTrackInteractive ? 'pointer' : 'auto',
261
+ pointerEvents: isTrackInteractive ? 'auto' : 'none',
262
+ position: 'absolute',
263
+ ...orientation === 'vertical' ? {
264
+ left: '0',
265
+ margin: '0 auto',
266
+ right: '0',
267
+ width: '100%',
268
+ } : {
269
+ bottom: '0',
270
+ height: '100%',
271
+ margin: 'auto 0',
272
+ top: '0',
273
+ },
274
+ },
325
275
  trackHitbox: {
326
276
  height: '100%',
327
277
  minHeight: '20px',
@@ -332,9 +282,8 @@ function getFixedStyles(_a) {
332
282
  },
333
283
  });
334
284
  }
335
- function getDefaultStyles(_a) {
336
- var _b = _a.knobHeight, knobHeight = _b === void 0 ? 0 : _b;
337
- return (0, utils_1.asStyleDict)({
285
+ function getDefaultStyles({ knobHeight = 0 }) {
286
+ return asStyleDict({
338
287
  knob: {
339
288
  alignItems: 'center',
340
289
  background: '#fff',
@@ -345,11 +294,10 @@ function getDefaultStyles(_a) {
345
294
  label: {
346
295
  color: '#000',
347
296
  fontSize: '12px',
348
- lineHeight: "".concat(knobHeight, "px"),
297
+ lineHeight: `${knobHeight}px`,
349
298
  },
350
299
  track: {
351
300
  background: '#fff',
352
301
  },
353
302
  });
354
303
  }
355
- //# sourceMappingURL=StepwiseSlider.js.map
@@ -1,110 +1,67 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __rest = (this && this.__rest) || function (s, e) {
14
- var t = {};
15
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
- t[p] = s[p];
17
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
- t[p[i]] = s[p[i]];
21
- }
22
- return t;
23
- };
24
- var __read = (this && this.__read) || function (o, n) {
25
- var m = typeof Symbol === "function" && o[Symbol.iterator];
26
- if (!m) return o;
27
- var i = m.call(o), r, ar = [], e;
28
- try {
29
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
30
- }
31
- catch (error) { e = { error: error }; }
32
- finally {
33
- try {
34
- if (r && !r.done && (m = i["return"])) m.call(i);
35
- }
36
- finally { if (e) throw e.error; }
37
- }
38
- return ar;
39
- };
40
- Object.defineProperty(exports, "__esModule", { value: true });
41
- exports.SwipeContainer = void 0;
42
- var jsx_runtime_1 = require("react/jsx-runtime");
43
- var react_1 = require("react");
44
- var spase_1 = require("spase");
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef, useState } from 'react';
3
+ import { Point } from 'spase';
45
4
  /**
46
5
  * An empty component with a backing `<div>` element that detects swipe
47
6
  * gestures.
48
7
  */
49
- exports.SwipeContainer = (0, react_1.forwardRef)(function (_a, ref) {
50
- var children = _a.children, _b = _a.isEnabled, isEnabled = _b === void 0 ? true : _b, _c = _a.threshold, threshold = _c === void 0 ? 0.5 : _c, onSwipeDown = _a.onSwipeDown, onSwipeLeft = _a.onSwipeLeft, onSwipeRight = _a.onSwipeRight, onSwipeUp = _a.onSwipeUp, props = __rest(_a, ["children", "isEnabled", "threshold", "onSwipeDown", "onSwipeLeft", "onSwipeRight", "onSwipeUp"]);
51
- var _d = __read((0, react_1.useState)(undefined), 2), dragStartPosition = _d[0], setDragStartPosition = _d[1];
52
- var _e = __read((0, react_1.useState)(undefined), 2), dragEndPosition = _e[0], setDragEndPosition = _e[1];
53
- var _f = __read((0, react_1.useState)(NaN), 2), dragStartTime = _f[0], setDragStartTime = _f[1];
54
- var onDragStart = function (x, y) {
8
+ export const SwipeContainer = forwardRef(({ children, isEnabled = true, threshold = 0.5, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp, ...props }, ref) => {
9
+ const [dragStartPosition, setDragStartPosition] = useState(undefined);
10
+ const [dragEndPosition, setDragEndPosition] = useState(undefined);
11
+ const [dragStartTime, setDragStartTime] = useState(NaN);
12
+ const onDragStart = (x, y) => {
55
13
  if (isNaN(x) || isNaN(y))
56
14
  return onDragCancel();
57
- setDragStartPosition(new spase_1.Point([x, y]));
15
+ setDragStartPosition(new Point([x, y]));
58
16
  };
59
- var onDragMove = function (x, y) {
60
- var startPosition = dragStartPosition;
17
+ const onDragMove = (x, y) => {
18
+ const startPosition = dragStartPosition;
61
19
  if (startPosition === undefined)
62
20
  return;
63
- var hasMovement = startPosition.x !== x || startPosition.y !== y;
64
- var hasStartTime = !isNaN(dragStartTime);
21
+ const hasMovement = startPosition.x !== x || startPosition.y !== y;
22
+ const hasStartTime = !isNaN(dragStartTime);
65
23
  if (!hasMovement)
66
24
  return;
67
25
  if (!hasStartTime)
68
26
  setDragStartTime(Date.now());
69
- setDragEndPosition(new spase_1.Point([x, y]));
27
+ setDragEndPosition(new Point([x, y]));
70
28
  };
71
- var onDragEnd = function () {
72
- var time = dragStartTime;
73
- var startPosition = dragStartPosition;
74
- var endPosition = dragEndPosition;
29
+ const onDragEnd = () => {
30
+ const time = dragStartTime;
31
+ const startPosition = dragStartPosition;
32
+ const endPosition = dragEndPosition;
75
33
  if (isNaN(time) || startPosition === undefined || endPosition === undefined)
76
34
  return;
77
- var dt = Date.now() - time;
78
- var dx = endPosition.x - startPosition.x;
79
- var dy = endPosition.y - startPosition.y;
80
- var vx = dx / dt;
81
- var vy = dy / dt;
35
+ const dt = Date.now() - time;
36
+ const dx = endPosition.x - startPosition.x;
37
+ const dy = endPosition.y - startPosition.y;
38
+ const vx = dx / dt;
39
+ const vy = dy / dt;
82
40
  if (isEnabled) {
83
41
  if (Math.abs(vx) >= threshold && Math.abs(vx) > Math.abs(vy)) {
84
42
  if (vx > 0) {
85
- onSwipeRight === null || onSwipeRight === void 0 ? void 0 : onSwipeRight();
43
+ onSwipeRight?.();
86
44
  }
87
45
  else {
88
- onSwipeLeft === null || onSwipeLeft === void 0 ? void 0 : onSwipeLeft();
46
+ onSwipeLeft?.();
89
47
  }
90
48
  }
91
49
  else if (Math.abs(vy) >= threshold && Math.abs(vy) > Math.abs(vx)) {
92
50
  if (vy > 0) {
93
- onSwipeDown === null || onSwipeDown === void 0 ? void 0 : onSwipeDown();
51
+ onSwipeDown?.();
94
52
  }
95
53
  else {
96
- onSwipeUp === null || onSwipeUp === void 0 ? void 0 : onSwipeUp();
54
+ onSwipeUp?.();
97
55
  }
98
56
  }
99
57
  }
100
58
  onDragCancel();
101
59
  };
102
- var onDragCancel = function () {
60
+ const onDragCancel = () => {
103
61
  setDragStartPosition(undefined);
104
62
  setDragEndPosition(undefined);
105
63
  setDragStartTime(NaN);
106
64
  };
107
- return ((0, jsx_runtime_1.jsx)("div", __assign({}, props, { ref: ref, "data-component": 'swipe-container', onMouseDown: function (event) { return onDragStart(event.clientX, event.clientY); }, onMouseLeave: function () { return onDragCancel(); }, onMouseMove: function (event) { return onDragMove(event.clientX, event.clientY); }, onMouseUp: function () { return onDragEnd(); }, onTouchEnd: function () { return onDragEnd(); }, onTouchMove: function (event) { return onDragMove(event.targetTouches[0].clientX, event.targetTouches[0].clientY); }, onTouchStart: function (event) { return onDragStart(event.targetTouches[0].clientX, event.targetTouches[0].clientY); }, children: children })));
65
+ return (_jsx("div", { ...props, ref: ref, "data-component": 'swipe-container', onMouseDown: event => onDragStart(event.clientX, event.clientY), onMouseLeave: () => onDragCancel(), onMouseMove: event => onDragMove(event.clientX, event.clientY), onMouseUp: () => onDragEnd(), onTouchEnd: () => onDragEnd(), onTouchMove: event => onDragMove(event.targetTouches[0].clientX, event.targetTouches[0].clientY), onTouchStart: event => onDragStart(event.targetTouches[0].clientX, event.targetTouches[0].clientY), children: children }));
108
66
  });
109
- Object.defineProperty(exports.SwipeContainer, 'displayName', { value: 'SwipeContainer', writable: false });
110
- //# sourceMappingURL=SwipeContainer.js.map
67
+ Object.defineProperty(SwipeContainer, 'displayName', { value: 'SwipeContainer', writable: false });