etudes 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/Accordion.d.ts +80 -71
- package/lib/Accordion.js +173 -183
- package/lib/Accordion.js.map +1 -1
- package/lib/BurgerButton.d.ts +20 -7
- package/lib/BurgerButton.js +113 -20
- package/lib/BurgerButton.js.map +1 -1
- package/lib/Conditional.d.ts +2 -3
- package/lib/Conditional.js +0 -1
- package/lib/Conditional.js.map +1 -1
- package/lib/DebugConsole.d.ts +14 -23
- package/lib/DebugConsole.js +86 -87
- package/lib/DebugConsole.js.map +1 -1
- package/lib/Dial.d.ts +53 -16
- package/lib/Dial.js +121 -35
- package/lib/Dial.js.map +1 -1
- package/lib/Dropdown.d.ts +68 -83
- package/lib/Dropdown.js +226 -161
- package/lib/Dropdown.js.map +1 -1
- package/lib/Each.d.ts +2 -2
- package/lib/Each.js.map +1 -1
- package/lib/ExtractChild.d.ts +5 -4
- package/lib/ExtractChild.js +13 -11
- package/lib/ExtractChild.js.map +1 -1
- package/lib/ExtractChildren.d.ts +2 -2
- package/lib/ExtractChildren.js +7 -5
- package/lib/ExtractChildren.js.map +1 -1
- package/lib/FlatSVG.d.ts +30 -25
- package/lib/FlatSVG.js +28 -37
- package/lib/FlatSVG.js.map +1 -1
- package/lib/List.d.ts +97 -54
- package/lib/List.js +124 -63
- package/lib/List.js.map +1 -1
- package/lib/MasonryGrid.d.ts +27 -15
- package/lib/MasonryGrid.js +163 -148
- package/lib/MasonryGrid.js.map +1 -1
- package/lib/Panorama.d.ts +100 -21
- package/lib/Panorama.js +45 -44
- package/lib/Panorama.js.map +1 -1
- package/lib/PanoramaSlider.d.ts +65 -23
- package/lib/PanoramaSlider.js +150 -45
- package/lib/PanoramaSlider.js.map +1 -1
- package/lib/RangeSlider.d.ts +29 -89
- package/lib/RangeSlider.js +272 -286
- package/lib/RangeSlider.js.map +1 -1
- package/lib/Repeat.d.ts +4 -3
- package/lib/Repeat.js +3 -2
- package/lib/Repeat.js.map +1 -1
- package/lib/RotatingGallery.d.ts +38 -36
- package/lib/RotatingGallery.js +47 -17
- package/lib/RotatingGallery.js.map +1 -1
- package/lib/SelectableButton.d.ts +13 -4
- package/lib/SelectableButton.js +3 -14
- package/lib/SelectableButton.js.map +1 -1
- package/lib/Slider.d.ts +103 -41
- package/lib/Slider.js +182 -82
- package/lib/Slider.js.map +1 -1
- package/lib/StepwiseSlider.d.ts +146 -59
- package/lib/StepwiseSlider.js +248 -142
- package/lib/StepwiseSlider.js.map +1 -1
- package/lib/SwipeContainer.d.ts +13 -5
- package/lib/SwipeContainer.js +5 -15
- package/lib/SwipeContainer.js.map +1 -1
- package/lib/TextField.d.ts +1 -1
- package/lib/TextField.js +5 -15
- package/lib/TextField.js.map +1 -1
- package/lib/Video.d.ts +30 -51
- package/lib/Video.js +77 -119
- package/lib/Video.js.map +1 -1
- package/lib/WithTooltip.d.ts +16 -18
- package/lib/WithTooltip.js +167 -101
- package/lib/WithTooltip.js.map +1 -1
- package/lib/hooks/useDocumentTitle.d.ts +2 -1
- package/lib/hooks/useDocumentTitle.js +2 -1
- package/lib/hooks/useDocumentTitle.js.map +1 -1
- package/lib/hooks/useDragEffect.d.ts +25 -16
- package/lib/hooks/useDragEffect.js +30 -20
- package/lib/hooks/useDragEffect.js.map +1 -1
- package/lib/hooks/useElementRect.d.ts +2 -1
- package/lib/hooks/useElementRect.js +5 -4
- package/lib/hooks/useElementRect.js.map +1 -1
- package/lib/hooks/useInterval.d.ts +2 -2
- package/lib/hooks/useInterval.js +1 -1
- package/lib/hooks/useInterval.js.map +1 -1
- package/lib/hooks/useLoadImageEffect.d.ts +6 -6
- package/lib/hooks/useLoadImageEffect.js.map +1 -1
- package/lib/hooks/usePrevious.d.ts +6 -0
- package/lib/hooks/usePrevious.js +17 -0
- package/lib/hooks/usePrevious.js.map +1 -0
- package/lib/hooks/useResizeEffect.d.ts +2 -2
- package/lib/hooks/useResizeEffect.js +5 -8
- package/lib/hooks/useResizeEffect.js.map +1 -1
- package/lib/hooks/useSearchParamState.d.ts +10 -7
- package/lib/hooks/useSearchParamState.js +14 -10
- package/lib/hooks/useSearchParamState.js.map +1 -1
- package/lib/utils/asClassNameDict.d.ts +3 -0
- package/lib/utils/asClassNameDict.js +7 -0
- package/lib/utils/asClassNameDict.js.map +1 -0
- package/lib/utils/asComponentDict.d.ts +5 -0
- package/lib/utils/asComponentDict.js +23 -0
- package/lib/utils/asComponentDict.js.map +1 -0
- package/lib/utils/asStyleDict.d.ts +4 -0
- package/lib/utils/asStyleDict.js +7 -0
- package/lib/utils/asStyleDict.js.map +1 -0
- package/lib/utils/cloneStyledElement.d.ts +18 -0
- package/lib/utils/cloneStyledElement.js +63 -0
- package/lib/utils/cloneStyledElement.js.map +1 -0
- package/lib/utils/styles.d.ts +2 -0
- package/lib/utils/styles.js +22 -0
- package/lib/utils/styles.js.map +1 -0
- package/lib/utils/useDebug.d.ts +2 -0
- package/lib/utils/useDebug.js +46 -0
- package/lib/utils/useDebug.js.map +1 -0
- package/package.json +25 -33
- package/lib/AbstractSelectableCollection.d.ts +0 -94
- package/lib/AbstractSelectableCollection.js +0 -151
- package/lib/AbstractSelectableCollection.js.map +0 -1
- package/lib/types/index.d.ts +0 -7
- package/lib/types/index.js +0 -3
- package/lib/types/index.js.map +0 -1
package/lib/PanoramaSlider.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
-
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
-
return cooked;
|
|
5
|
-
};
|
|
6
2
|
var __assign = (this && this.__assign) || function () {
|
|
7
3
|
__assign = Object.assign || function(t) {
|
|
8
4
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
@@ -68,23 +64,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
68
64
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
69
65
|
};
|
|
70
66
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
71
|
-
exports.
|
|
67
|
+
exports.PanoramaSliderIndicator = exports.PanoramaSliderReticle = exports.PanoramaSliderTrack = void 0;
|
|
72
68
|
var classnames_1 = __importDefault(require("classnames"));
|
|
73
|
-
var lodash_1 = __importDefault(require("lodash"));
|
|
74
69
|
var react_1 = __importStar(require("react"));
|
|
75
|
-
var styled_components_1 = __importDefault(require("styled-components"));
|
|
76
70
|
var useResizeEffect_1 = __importDefault(require("./hooks/useResizeEffect"));
|
|
77
71
|
var Panorama_1 = __importDefault(require("./Panorama"));
|
|
72
|
+
var asClassNameDict_1 = __importDefault(require("./utils/asClassNameDict"));
|
|
73
|
+
var asComponentDict_1 = __importDefault(require("./utils/asComponentDict"));
|
|
74
|
+
var asStyleDict_1 = __importDefault(require("./utils/asStyleDict"));
|
|
75
|
+
var cloneStyledElement_1 = __importDefault(require("./utils/cloneStyledElement"));
|
|
76
|
+
var styles_1 = __importDefault(require("./utils/styles"));
|
|
78
77
|
/**
|
|
79
|
-
* A slider for {@link Panorama}
|
|
78
|
+
* A slider for a {@link Panorama} component.
|
|
80
79
|
*
|
|
81
|
-
* @exports
|
|
82
|
-
*
|
|
83
|
-
* @exports
|
|
84
|
-
* @
|
|
80
|
+
* @exports PanoramaSliderIndicator - The indicator that appears when the slider
|
|
81
|
+
* is being dragged.
|
|
82
|
+
* @exports PanoramaSliderReticle - The reticle that indicates the FOV of the
|
|
83
|
+
* backing {@link Panorama}.
|
|
84
|
+
* @exports PanoramaSliderTrack - The slide track.
|
|
85
85
|
*/
|
|
86
|
-
function
|
|
87
|
-
var
|
|
86
|
+
exports.default = (0, react_1.forwardRef)(function (_a, ref) {
|
|
87
|
+
var _b, _c, _d, _e;
|
|
88
|
+
var className = _a.className, style = _a.style, _f = _a.angle, angle = _f === void 0 ? 0 : _f, _g = _a.autoDimension, autoDimension = _g === void 0 ? 'width' : _g, children = _a.children, fov = _a.fov, _h = _a.speed, speed = _h === void 0 ? 1 : _h, src = _a.src, viewportSize = _a.viewportSize, _j = _a.zeroAnchor, zeroAnchor = _j === void 0 ? 0 : _j, onAngleChange = _a.onAngleChange, onDragEnd = _a.onDragEnd, onDragStart = _a.onDragStart, onImageLoadComplete = _a.onImageLoadComplete, onImageLoadError = _a.onImageLoadError, onImageLoadStart = _a.onImageLoadStart, onImageSizeChange = _a.onImageSizeChange, onPositionChange = _a.onPositionChange, onResize = _a.onResize, props = __rest(_a, ["className", "style", "angle", "autoDimension", "children", "fov", "speed", "src", "viewportSize", "zeroAnchor", "onAngleChange", "onDragEnd", "onDragStart", "onImageLoadComplete", "onImageLoadError", "onImageLoadStart", "onImageSizeChange", "onPositionChange", "onResize"]);
|
|
88
89
|
var getAspectRatio = function () {
|
|
89
90
|
if (!imageSize)
|
|
90
91
|
return 0;
|
|
@@ -94,46 +95,150 @@ function PanoramaSlider(_a) {
|
|
|
94
95
|
return width / height;
|
|
95
96
|
};
|
|
96
97
|
var getReticleWidth = function () {
|
|
97
|
-
var
|
|
98
|
-
return size.width * (
|
|
98
|
+
var deg = Math.min(360, Math.max(0, fov !== null && fov !== void 0 ? fov : (viewportSize ? viewportSize.width / (viewportSize.height * aspectRatio) * 360 : 0)));
|
|
99
|
+
return size.width * (deg / 360);
|
|
99
100
|
};
|
|
100
101
|
var getAdjustedZeroAnchor = function () {
|
|
101
102
|
if (size.width <= 0)
|
|
102
103
|
return zeroAnchor;
|
|
103
|
-
return ((size.width - reticleWidth) * 0.5 +
|
|
104
|
+
return ((size.width - reticleWidth) * 0.5 + zeroAnchor * reticleWidth) / size.width;
|
|
105
|
+
};
|
|
106
|
+
var dragStartHandler = function () {
|
|
107
|
+
setIsDragging(true);
|
|
108
|
+
onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart();
|
|
104
109
|
};
|
|
105
|
-
var
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
110
|
+
var dragEndHandler = function () {
|
|
111
|
+
setIsDragging(false);
|
|
112
|
+
onDragEnd === null || onDragEnd === void 0 ? void 0 : onDragEnd();
|
|
113
|
+
};
|
|
114
|
+
var panoramaRef = (0, react_1.useRef)(null);
|
|
115
|
+
var _k = __read((0, react_1.useState)(undefined), 2), imageSize = _k[0], setImageSize = _k[1];
|
|
116
|
+
var _l = __read((0, react_1.useState)(false), 2), isDragging = _l[0], setIsDragging = _l[1];
|
|
117
|
+
var _m = __read((0, useResizeEffect_1.default)(panoramaRef, { onResize: onResize }), 1), size = _m[0];
|
|
109
118
|
var aspectRatio = getAspectRatio();
|
|
110
119
|
var reticleWidth = getReticleWidth();
|
|
111
120
|
var adjustedZeroAnchor = getAdjustedZeroAnchor();
|
|
112
|
-
|
|
121
|
+
var components = (0, asComponentDict_1.default)(children, {
|
|
122
|
+
track: exports.PanoramaSliderTrack,
|
|
123
|
+
reticle: exports.PanoramaSliderReticle,
|
|
124
|
+
indicator: exports.PanoramaSliderIndicator,
|
|
125
|
+
});
|
|
126
|
+
var fixedClassNames = (0, asClassNameDict_1.default)({
|
|
127
|
+
root: (0, classnames_1.default)({
|
|
128
|
+
dragging: isDragging,
|
|
129
|
+
}),
|
|
130
|
+
track: (0, classnames_1.default)({
|
|
131
|
+
dragging: isDragging,
|
|
132
|
+
}),
|
|
133
|
+
reticle: (0, classnames_1.default)({
|
|
134
|
+
dragging: isDragging,
|
|
135
|
+
}),
|
|
136
|
+
indicator: (0, classnames_1.default)({
|
|
137
|
+
dragging: isDragging,
|
|
138
|
+
}),
|
|
139
|
+
});
|
|
140
|
+
var fixedStyles = (0, asStyleDict_1.default)({
|
|
141
|
+
root: __assign({}, autoDimension === 'width' ? {
|
|
113
142
|
width: "".concat(size.height * aspectRatio, "px"),
|
|
114
143
|
} : {
|
|
115
144
|
height: "".concat(size.width / aspectRatio, "px"),
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
145
|
+
}),
|
|
146
|
+
body: {
|
|
147
|
+
height: '100%',
|
|
148
|
+
left: '0',
|
|
149
|
+
overflow: 'hidden',
|
|
150
|
+
pointerEvents: 'none',
|
|
151
|
+
position: 'absolute',
|
|
152
|
+
top: '0',
|
|
153
|
+
width: '100%',
|
|
154
|
+
},
|
|
155
|
+
panorama: {
|
|
156
|
+
height: '100%',
|
|
157
|
+
width: '100%',
|
|
158
|
+
},
|
|
159
|
+
controls: {
|
|
160
|
+
alignItems: 'center',
|
|
161
|
+
display: 'flex',
|
|
162
|
+
height: '100%',
|
|
163
|
+
justifyContent: 'flex-start',
|
|
164
|
+
left: '0',
|
|
165
|
+
overflow: 'visible',
|
|
166
|
+
position: 'absolute',
|
|
167
|
+
top: '0',
|
|
168
|
+
width: '100%',
|
|
169
|
+
},
|
|
170
|
+
track: {
|
|
171
|
+
flex: '1 0 auto',
|
|
172
|
+
},
|
|
173
|
+
reticle: {
|
|
174
|
+
width: "".concat(reticleWidth, "px"),
|
|
175
|
+
},
|
|
176
|
+
indicator: {
|
|
177
|
+
width: "".concat(reticleWidth, "px"),
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
var defaultStyles = (0, asStyleDict_1.default)({
|
|
181
|
+
track: {
|
|
182
|
+
background: 'rgba(0, 0, 0, .7)',
|
|
183
|
+
height: '100%',
|
|
184
|
+
},
|
|
185
|
+
reticle: {
|
|
186
|
+
background: "rgba(0, 0, 0, ".concat(isDragging ? 0 : 0.3, ")"),
|
|
187
|
+
flex: '0 0 auto',
|
|
188
|
+
height: '100%',
|
|
189
|
+
transitionDuration: '100ms',
|
|
190
|
+
transitionProperty: 'background',
|
|
191
|
+
transitionTimingFunction: 'ease-out',
|
|
192
|
+
},
|
|
193
|
+
indicator: {
|
|
194
|
+
background: '#fff',
|
|
195
|
+
borderRadius: '2px',
|
|
196
|
+
bottom: '-10px',
|
|
197
|
+
boxSizing: 'border-box',
|
|
198
|
+
display: 'block',
|
|
199
|
+
height: '2px',
|
|
200
|
+
left: '0',
|
|
201
|
+
margin: '0 auto',
|
|
202
|
+
opacity: isDragging ? 1 : 0,
|
|
203
|
+
position: 'absolute',
|
|
204
|
+
right: '0',
|
|
205
|
+
transition: 'opacity .3s ease-out',
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
return (react_1.default.createElement("div", __assign({}, props, { ref: ref, className: (0, classnames_1.default)(className, fixedClassNames.root), style: (0, styles_1.default)(style, fixedStyles.root) }),
|
|
209
|
+
react_1.default.createElement(Panorama_1.default, { angle: angle, ref: panoramaRef, speed: speed, src: src, style: fixedStyles.panorama, zeroAnchor: adjustedZeroAnchor, onAngleChange: onAngleChange, onDragEnd: dragEndHandler, onDragStart: dragStartHandler, onImageLoadComplete: onImageLoadComplete, onImageLoadError: onImageLoadError, onImageLoadStart: onImageLoadStart, onImageSizeChange: setImageSize, onPositionChange: onPositionChange }),
|
|
210
|
+
react_1.default.createElement("div", { style: fixedStyles.body },
|
|
211
|
+
react_1.default.createElement("div", { style: fixedStyles.controls },
|
|
212
|
+
(0, cloneStyledElement_1.default)((_b = components.track) !== null && _b !== void 0 ? _b : react_1.default.createElement(exports.PanoramaSliderTrack, { style: defaultStyles.track }), {
|
|
213
|
+
className: (0, classnames_1.default)(fixedClassNames.track),
|
|
214
|
+
style: (0, styles_1.default)(fixedStyles.track),
|
|
215
|
+
}),
|
|
216
|
+
(0, cloneStyledElement_1.default)((_c = components.reticle) !== null && _c !== void 0 ? _c : react_1.default.createElement(exports.PanoramaSliderReticle, { style: defaultStyles.reticle }), {
|
|
217
|
+
className: (0, classnames_1.default)(fixedClassNames.reticle),
|
|
218
|
+
style: (0, styles_1.default)(fixedStyles.reticle),
|
|
219
|
+
}),
|
|
220
|
+
(0, cloneStyledElement_1.default)((_d = components.track) !== null && _d !== void 0 ? _d : react_1.default.createElement(exports.PanoramaSliderTrack, { style: defaultStyles.track }), {
|
|
221
|
+
className: (0, classnames_1.default)(fixedClassNames.track),
|
|
222
|
+
style: (0, styles_1.default)(fixedStyles.track),
|
|
223
|
+
}))),
|
|
224
|
+
(0, cloneStyledElement_1.default)((_e = components.indicator) !== null && _e !== void 0 ? _e : react_1.default.createElement(exports.PanoramaSliderIndicator, { style: defaultStyles.indicator }), {
|
|
225
|
+
className: (0, classnames_1.default)(fixedClassNames.indicator),
|
|
226
|
+
style: (0, styles_1.default)(fixedStyles.indicator),
|
|
227
|
+
})));
|
|
228
|
+
});
|
|
229
|
+
var PanoramaSliderTrack = function (_a) {
|
|
230
|
+
var props = __rest(_a, []);
|
|
231
|
+
return react_1.default.createElement("div", __assign({}, props));
|
|
232
|
+
};
|
|
233
|
+
exports.PanoramaSliderTrack = PanoramaSliderTrack;
|
|
234
|
+
var PanoramaSliderReticle = function (_a) {
|
|
235
|
+
var props = __rest(_a, []);
|
|
236
|
+
return react_1.default.createElement("div", __assign({}, props));
|
|
237
|
+
};
|
|
238
|
+
exports.PanoramaSliderReticle = PanoramaSliderReticle;
|
|
239
|
+
var PanoramaSliderIndicator = function (_a) {
|
|
240
|
+
var props = __rest(_a, []);
|
|
241
|
+
return react_1.default.createElement("div", __assign({}, props));
|
|
242
|
+
};
|
|
243
|
+
exports.PanoramaSliderIndicator = PanoramaSliderIndicator;
|
|
139
244
|
//# sourceMappingURL=PanoramaSlider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanoramaSlider.js","sourceRoot":"/","sources":["PanoramaSlider.tsx"],"names":[],"mappings":"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","sourcesContent":["import classNames from 'classnames'\nimport _ from 'lodash'\nimport React, { HTMLAttributes, useRef, useState } from 'react'\nimport { Size } from 'spase'\nimport styled from 'styled-components'\nimport useResizeEffect from './hooks/useResizeEffect'\nimport Panorama, { Props as PanoramaProps } from './Panorama'\n\nexport type Props = HTMLAttributes<HTMLDivElement> & PanoramaProps & {\n /**\n * Field-of-view (0.0 - 360.0 degrees, inclusive) that represents the size of the reticle. 360\n * indicates the reticle covers the entire image. If this is unspecified, the component will\n * attempt to automatically calculate the FOV using the `viewportSize` prop.\n */\n fov?: number\n\n /**\n * Specifies which length (width or height) should be automatically calculated. The counterpart\n * must be known (if `width` is specified here, the component's height must be known, i.e. it is\n * specified in the CSS). Defaults to `width`.\n */\n autoDimension?: 'width' | 'height'\n\n /**\n * Size of the viewport that this component is controlling. A viewport can be thought of as a DOM\n * element containing an aspect-filled image. This is used to automatically calculate the FOV if\n * `fov` prop is not specified. If it is, this prop is ignored.\n */\n viewportSize?: Size\n}\n\n/**\n * A slider for {@link Panorama} components.\n *\n * @exports PanoramaSliderImage\n * @exports PanoramaSliderIndicator\n * @exports PanoramaSliderTrack\n * @exports PanoramaSliderReticle\n */\nexport default function PanoramaSlider({\n fov,\n autoDimension = 'width',\n viewportSize,\n angle = 0,\n speed = 1,\n src,\n zeroAnchor = 0,\n onAngleChange,\n onPositionChange,\n onDragStart,\n onDragEnd,\n onImageLoadStart,\n onImageLoadComplete,\n onImageLoadError,\n onImageSizeChange,\n onResize,\n style,\n ...props\n}: Props) {\n const getAspectRatio = (): number => {\n if (!imageSize) return 0\n const { width, height } = imageSize\n if (height === 0) return 0\n return width / height\n }\n\n const getReticleWidth = (): number => {\n const angle = _.clamp(fov ?? (viewportSize ? (viewportSize.width / (viewportSize.height * aspectRatio)) * 360 : 0), 0, 360)\n return size.width * (angle / 360)\n }\n\n const getAdjustedZeroAnchor = () => {\n if (size.width <= 0) return zeroAnchor\n return ((size.width - reticleWidth) * 0.5 + (zeroAnchor * reticleWidth)) / size.width\n }\n\n const rootRef = useRef<HTMLDivElement>(null)\n const [imageSize, setImageSize] = useState<Size | undefined>(undefined)\n const [isDragging, setIsDragging] = useState(false)\n const [size] = useResizeEffect(rootRef, { onResize })\n const aspectRatio = getAspectRatio()\n const reticleWidth = getReticleWidth()\n const adjustedZeroAnchor = getAdjustedZeroAnchor()\n\n return (\n <StyledRoot ref={rootRef} style={{\n ...style,\n ...autoDimension === 'width' ? {\n width: `${size.height * aspectRatio}px`,\n } : {\n height: `${size.width / aspectRatio}px`,\n },\n }} {...props}>\n <PanoramaSliderImage\n angle={angle}\n onAngleChange={onAngleChange}\n onDragEnd={() => {\n setIsDragging(false)\n onDragEnd?.()\n }}\n onDragStart={() => {\n setIsDragging(true)\n onDragStart?.()\n }}\n onImageLoadComplete={onImageLoadComplete}\n onImageLoadError={onImageLoadError}\n onImageLoadStart={onImageLoadStart}\n onImageSizeChange={size => setImageSize(size)}\n onPositionChange={onPositionChange}\n speed={speed}\n src={src}\n style={{ height: '100%', width: '100%' }}\n zeroAnchor={adjustedZeroAnchor}\n />\n <StyledTrackContainer>\n <div>\n <PanoramaSliderTrack className={classNames({ dragging: isDragging })}/>\n <PanoramaSliderReticle className={classNames({ dragging: isDragging })} style={{ width: `${reticleWidth}px` }}/>\n <PanoramaSliderTrack className={classNames({ dragging: isDragging })}/>\n </div>\n </StyledTrackContainer>\n <PanoramaSliderIndicator className={classNames({ dragging: isDragging })} style={{ width: `${reticleWidth}px` }}/>\n </StyledRoot>\n )\n}\n\nexport const PanoramaSliderReticle = styled.div`\n background: rgba(0, 0, 0, .3);\n flex: 0 0 auto;\n height: 100%;\n transition-duration: 100ms;\n transition-property: background;\n transition-timing-function: ease-out;\n\n &.dragging {\n background: rgba(0, 0, 0, 0);\n }\n`\n\nexport const PanoramaSliderTrack = styled.div`\n background: rgba(0, 0, 0, .7);\n display: block;\n flex: 1 0 auto;\n height: 100%;\n pointer-events: none;\n`\n\nexport const PanoramaSliderIndicator = styled.div`\n background: #fff;\n border-radius: 2px;\n bottom: -10px;\n box-sizing: border-box;\n display: block;\n height: 2px;\n left: 0;\n margin: 0 auto;\n opacity: 0;\n right: 0;\n transition: opacity .3s ease-out;\n\n &.dragging {\n opacity: 1;\n }\n`\n\nexport const PanoramaSliderImage = styled(Panorama)`\n\n`\n\nconst StyledTrackContainer = styled.div`\n box-sizing: border-box;\n display: block;\n height: 100%;\n left: 0;\n overflow: hidden;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n\n > div {\n align-items: center;\n display: flex;\n height: 100%;\n justify-content: flex-start;\n left: 0;\n overflow: visible;\n position: absolute;\n top: 0;\n width: 100%;\n }\n`\n\nconst StyledRoot = styled.div`\n box-sizing: border-box;\n display: block;\n flex: 0 0 auto;\n height: 100%;\n width: 100%;\n`\n"]}
|
|
1
|
+
{"version":3,"file":"PanoramaSlider.js","sourceRoot":"/","sources":["PanoramaSlider.tsx"],"names":[],"mappings":"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","sourcesContent":["import classNames from 'classnames'\nimport React, { forwardRef, HTMLAttributes, PropsWithChildren, useRef, useState } from 'react'\nimport { Size } from 'spase'\nimport useResizeEffect from './hooks/useResizeEffect'\nimport Panorama, { PanoramaProps } from './Panorama'\nimport asClassNameDict from './utils/asClassNameDict'\nimport asComponentDict from './utils/asComponentDict'\nimport asStyleDict from './utils/asStyleDict'\nimport cloneStyledElement from './utils/cloneStyledElement'\nimport styles from './utils/styles'\n\nexport type PanoramaSliderProps = HTMLAttributes<HTMLDivElement> & 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/**\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 default forwardRef<HTMLDivElement, PanoramaSliderProps>(({\n className,\n style,\n angle = 0,\n autoDimension = 'width',\n children,\n fov,\n speed = 1,\n src,\n viewportSize,\n zeroAnchor = 0,\n onAngleChange,\n onDragEnd,\n onDragStart,\n onImageLoadComplete,\n onImageLoadError,\n onImageLoadStart,\n onImageSizeChange,\n onPositionChange,\n onResize,\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 size.width * (deg / 360)\n }\n\n const getAdjustedZeroAnchor = () => {\n if (size.width <= 0) return zeroAnchor\n\n return ((size.width - reticleWidth) * 0.5 + zeroAnchor * reticleWidth) / size.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\n const [imageSize, setImageSize] = useState<Size | undefined>(undefined)\n const [isDragging, setIsDragging] = useState(false)\n\n const [size] = useResizeEffect(panoramaRef, { onResize })\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 fixedClassNames = asClassNameDict({\n root: classNames({\n dragging: isDragging,\n }),\n track: classNames({\n dragging: isDragging,\n }),\n reticle: classNames({\n dragging: isDragging,\n }),\n indicator: classNames({\n dragging: isDragging,\n }),\n })\n\n const fixedStyles = asStyleDict({\n root: {\n ...autoDimension === 'width' ? {\n width: `${size.height * aspectRatio}px`,\n } : {\n height: `${size.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 const defaultStyles = 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 return (\n <div\n {...props}\n ref={ref}\n className={classNames(className, fixedClassNames.root)}\n style={styles(style, fixedStyles.root)}\n >\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 onImageLoadComplete={onImageLoadComplete}\n onImageLoadError={onImageLoadError}\n onImageLoadStart={onImageLoadStart}\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 className: classNames(fixedClassNames.track),\n style: styles(fixedStyles.track),\n })}\n {cloneStyledElement(components.reticle ?? <PanoramaSliderReticle style={defaultStyles.reticle}/>, {\n className: classNames(fixedClassNames.reticle),\n style: styles(fixedStyles.reticle),\n })}\n {cloneStyledElement(components.track ?? <PanoramaSliderTrack style={defaultStyles.track}/>, {\n className: classNames(fixedClassNames.track),\n style: styles(fixedStyles.track),\n })}\n </div>\n </div>\n {cloneStyledElement(components.indicator ?? <PanoramaSliderIndicator style={defaultStyles.indicator}/>, {\n className: classNames(fixedClassNames.indicator),\n style: styles(fixedStyles.indicator),\n })}\n </div>\n )\n})\n\nexport const PanoramaSliderTrack = ({ ...props }: HTMLAttributes<HTMLDivElement>) => <div {...props}/>\n\nexport const PanoramaSliderReticle = ({ ...props }: HTMLAttributes<HTMLDivElement>) => <div {...props}/>\n\nexport const PanoramaSliderIndicator = ({ ...props }: HTMLAttributes<HTMLDivElement>) => <div {...props}/>\n"]}
|
package/lib/RangeSlider.d.ts
CHANGED
|
@@ -1,92 +1,32 @@
|
|
|
1
|
-
import React, {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export declare type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
orientation: Orientation;
|
|
15
|
-
isDragging: boolean;
|
|
16
|
-
isReleasing: boolean;
|
|
17
|
-
}>;
|
|
18
|
-
export declare type HighlightCSSProps = Readonly<{
|
|
19
|
-
tintColor: string;
|
|
20
|
-
isDragging: boolean;
|
|
21
|
-
isReleasing: boolean;
|
|
1
|
+
import React, { HTMLAttributes, PropsWithChildren } from 'react';
|
|
2
|
+
declare type Orientation = 'horizontal' | 'vertical';
|
|
3
|
+
declare type Range = [number, number];
|
|
4
|
+
export declare type RangeSliderProps = HTMLAttributes<HTMLDivElement> & PropsWithChildren<{
|
|
5
|
+
areLabelsVisible?: boolean;
|
|
6
|
+
decimalPlaces?: number;
|
|
7
|
+
knobPadding?: number;
|
|
8
|
+
max: number;
|
|
9
|
+
min: number;
|
|
10
|
+
orientation?: Orientation;
|
|
11
|
+
range?: Range;
|
|
12
|
+
steps?: number;
|
|
13
|
+
onRangeChange?: (range: Range) => void;
|
|
22
14
|
}>;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
areLabelsVisible: boolean;
|
|
28
|
-
decimalPlaces: number;
|
|
29
|
-
hitboxPadding: number;
|
|
30
|
-
knobRadius: number;
|
|
15
|
+
declare const _default: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
|
|
16
|
+
areLabelsVisible?: boolean | undefined;
|
|
17
|
+
decimalPlaces?: number | undefined;
|
|
18
|
+
knobPadding?: number | undefined;
|
|
31
19
|
max: number;
|
|
32
20
|
min: number;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
onRangeChange
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
export
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
isReleasingStartingKnob: boolean;
|
|
46
|
-
isDraggingEndingKnob: boolean;
|
|
47
|
-
isReleasingEndingKnob: boolean;
|
|
48
|
-
}
|
|
49
|
-
export default class RangeSlider extends PureComponent<Props, State> {
|
|
50
|
-
static defaultProps: {
|
|
51
|
-
style: {};
|
|
52
|
-
areLabelsVisible: boolean;
|
|
53
|
-
decimalPlaces: number;
|
|
54
|
-
hitboxPadding: number;
|
|
55
|
-
knobRadius: number;
|
|
56
|
-
steps: number;
|
|
57
|
-
tintColor: string;
|
|
58
|
-
orientation: string;
|
|
59
|
-
onRangeChange: () => void;
|
|
60
|
-
cssGutter: () => import("styled-components").FlattenSimpleInterpolation;
|
|
61
|
-
cssHighlight: () => import("styled-components").FlattenSimpleInterpolation;
|
|
62
|
-
cssKnob: () => import("styled-components").FlattenSimpleInterpolation;
|
|
63
|
-
cssLabel: () => import("styled-components").FlattenSimpleInterpolation;
|
|
64
|
-
};
|
|
65
|
-
nodeRefs: {
|
|
66
|
-
root: React.RefObject<HTMLDivElement>;
|
|
67
|
-
knobA: React.RefObject<HTMLDivElement>;
|
|
68
|
-
knobB: React.RefObject<HTMLDivElement>;
|
|
69
|
-
};
|
|
70
|
-
constructor(props: Props);
|
|
71
|
-
get rect(): Rect;
|
|
72
|
-
get highlightLength(): number;
|
|
73
|
-
get breakpoints(): readonly number[];
|
|
74
|
-
componentDidMount(): void;
|
|
75
|
-
componentDidUpdate(prevProps: Props, prevState: State): void;
|
|
76
|
-
render(): JSX.Element;
|
|
77
|
-
private reconfigureInteractivityIfNeeded;
|
|
78
|
-
private snapToClosestBreakpoint;
|
|
79
|
-
private areRangesEqual;
|
|
80
|
-
private getPositionByValue;
|
|
81
|
-
private getDisplacementByPosition;
|
|
82
|
-
private getDisplacementByValue;
|
|
83
|
-
private getPositionByDisplacement;
|
|
84
|
-
private getValueByPosition;
|
|
85
|
-
private getClosestSteppedValueOfValue;
|
|
86
|
-
private onKnobADragStart;
|
|
87
|
-
private onKnobADragEnd;
|
|
88
|
-
private onKnobADragMove;
|
|
89
|
-
private onKnobBDragStart;
|
|
90
|
-
private onKnobBDragEnd;
|
|
91
|
-
private onKnobBDragMove;
|
|
92
|
-
}
|
|
21
|
+
orientation?: Orientation | undefined;
|
|
22
|
+
range?: Range | undefined;
|
|
23
|
+
steps?: number | undefined;
|
|
24
|
+
onRangeChange?: ((range: Range) => void) | undefined;
|
|
25
|
+
} & {
|
|
26
|
+
children?: React.ReactNode;
|
|
27
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
28
|
+
export default _default;
|
|
29
|
+
export declare const RangeSliderGutter: ({ ...props }: HTMLAttributes<HTMLDivElement>) => JSX.Element;
|
|
30
|
+
export declare const RangeSliderLabel: ({ ...props }: HTMLAttributes<HTMLDivElement>) => JSX.Element;
|
|
31
|
+
export declare const RangeSliderHighlight: ({ ...props }: HTMLAttributes<HTMLDivElement>) => JSX.Element;
|
|
32
|
+
export declare const RangeSliderKnob: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|