etudes 1.2.0 → 2.1.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 +26 -17
- 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 +3 -3
- package/lib/hooks/useInterval.js +1 -1
- package/lib/hooks/useInterval.js.map +1 -1
- package/lib/hooks/useLoadImageEffect.d.ts +8 -8
- 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 +3 -3
- package/lib/hooks/useResizeEffect.js +5 -8
- package/lib/hooks/useResizeEffect.js.map +1 -1
- package/lib/hooks/useSearchParamState.d.ts +11 -8
- package/lib/hooks/useSearchParamState.js +14 -10
- package/lib/hooks/useSearchParamState.js.map +1 -1
- package/lib/providers/I18nProvider.d.ts +179 -0
- package/lib/providers/I18nProvider.js +470 -0
- package/lib/providers/I18nProvider.js.map +1 -0
- package/lib/providers/ScrollPositionProvider.d.ts +15 -0
- package/lib/providers/ScrollPositionProvider.js +112 -0
- package/lib/providers/ScrollPositionProvider.js.map +1 -0
- 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 +31 -38
- 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/DebugConsole.js
CHANGED
|
@@ -1,23 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
|
-
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
18
|
-
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
19
|
-
return cooked;
|
|
20
|
-
};
|
|
21
2
|
var __assign = (this && this.__assign) || function () {
|
|
22
3
|
__assign = Object.assign || function(t) {
|
|
23
4
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
@@ -52,6 +33,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
52
33
|
__setModuleDefault(result, mod);
|
|
53
34
|
return result;
|
|
54
35
|
};
|
|
36
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
37
|
+
var t = {};
|
|
38
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
39
|
+
t[p] = s[p];
|
|
40
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
41
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
42
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
43
|
+
t[p[i]] = s[p[i]];
|
|
44
|
+
}
|
|
45
|
+
return t;
|
|
46
|
+
};
|
|
55
47
|
var __read = (this && this.__read) || function (o, n) {
|
|
56
48
|
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
57
49
|
if (!m) return o;
|
|
@@ -82,75 +74,82 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
82
74
|
};
|
|
83
75
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
84
76
|
var react_1 = __importStar(require("react"));
|
|
85
|
-
var
|
|
86
|
-
var
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
};
|
|
96
|
-
return _this;
|
|
97
|
-
}
|
|
98
|
-
DebugConsole.prototype.componentDidUpdate = function (prevProps, prevState) {
|
|
99
|
-
var _a, _b, _c, _d;
|
|
100
|
-
if (prevProps.message !== this.props.message) {
|
|
101
|
-
this.push((_a = this.props.message) !== null && _a !== void 0 ? _a : '');
|
|
102
|
-
}
|
|
103
|
-
if (prevState.messages.length !== this.state.messages.length) {
|
|
104
|
-
var m = (_c = (_b = this.nodeRefs.messages.current) === null || _b === void 0 ? void 0 : _b.scrollHeight) !== null && _c !== void 0 ? _c : 0;
|
|
105
|
-
(_d = this.nodeRefs.messages.current) === null || _d === void 0 ? void 0 : _d.scrollTo(0, m);
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
DebugConsole.prototype.push = function (message) {
|
|
109
|
-
if (this.props.maxEntries < 0) {
|
|
110
|
-
this.setState({
|
|
111
|
-
messages: __spreadArray(__spreadArray([], __read(this.state.messages), false), [message], false),
|
|
112
|
-
});
|
|
77
|
+
var Each_1 = __importDefault(require("./Each"));
|
|
78
|
+
var asStyleDict_1 = __importDefault(require("./utils/asStyleDict"));
|
|
79
|
+
var styles_1 = __importDefault(require("./utils/styles"));
|
|
80
|
+
exports.default = (0, react_1.forwardRef)(function (_a, ref) {
|
|
81
|
+
var _b = _a.align, align = _b === void 0 ? 'br' : _b, _c = _a.margin, margin = _c === void 0 ? 0 : _c, _d = _a.maxEntries, maxEntries = _d === void 0 ? -1 : _d, message = _a.message, _e = _a.style, style = _e === void 0 ? {} : _e, title = _a.title, props = __rest(_a, ["align", "margin", "maxEntries", "message", "style", "title"]);
|
|
82
|
+
var _f = __read((0, react_1.useState)([]), 2), messages = _f[0], setMessages = _f[1];
|
|
83
|
+
var messagesRef = (0, react_1.useRef)(null);
|
|
84
|
+
(0, react_1.useEffect)(function () {
|
|
85
|
+
if (message === undefined) {
|
|
86
|
+
setMessages([]);
|
|
113
87
|
}
|
|
114
88
|
else {
|
|
115
|
-
var
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
89
|
+
var numMessages = messages.length;
|
|
90
|
+
setMessages(__spreadArray(__spreadArray([], __read(maxEntries < 0
|
|
91
|
+
? messages
|
|
92
|
+
: messages.slice(Math.max(0, numMessages - (maxEntries - 1)), numMessages)), false), [
|
|
93
|
+
message,
|
|
94
|
+
], false));
|
|
119
95
|
}
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
96
|
+
}, [message]);
|
|
97
|
+
(0, react_1.useEffect)(function () {
|
|
98
|
+
var _a, _b;
|
|
99
|
+
(_a = messagesRef.current) === null || _a === void 0 ? void 0 : _a.scrollTo(0, (_b = messagesRef.current) === null || _b === void 0 ? void 0 : _b.scrollHeight);
|
|
100
|
+
}, [messages]);
|
|
101
|
+
var fixedStyles = (0, asStyleDict_1.default)({
|
|
102
|
+
root: {
|
|
103
|
+
background: '#000',
|
|
104
|
+
fontFamily: 'monospace',
|
|
105
|
+
position: 'fixed',
|
|
106
|
+
width: '300px',
|
|
107
|
+
},
|
|
108
|
+
title: {
|
|
109
|
+
background: '#fff',
|
|
110
|
+
boxSizing: 'border-box',
|
|
111
|
+
color: '#000',
|
|
112
|
+
fontSize: '14px',
|
|
113
|
+
fontWeight: '700',
|
|
114
|
+
height: '30px',
|
|
115
|
+
lineHeight: '30px',
|
|
116
|
+
overflow: 'hidden',
|
|
117
|
+
padding: '0 10px',
|
|
118
|
+
textOverflow: 'ellipsis',
|
|
119
|
+
textTransform: 'uppercase',
|
|
120
|
+
whiteSpace: 'nowrap',
|
|
121
|
+
width: '100%',
|
|
122
|
+
},
|
|
123
|
+
messages: {
|
|
124
|
+
boxSizing: 'border-box',
|
|
125
|
+
color: '#fff',
|
|
126
|
+
fontSize: '12px',
|
|
127
|
+
lineHeight: '150%',
|
|
128
|
+
maxHeight: '200px',
|
|
129
|
+
minHeight: '100px',
|
|
130
|
+
overflowX: 'hidden',
|
|
131
|
+
overflowY: 'scroll',
|
|
132
|
+
padding: '10px',
|
|
133
|
+
WebkitOverflowScrolling: 'touch',
|
|
134
|
+
width: '100%',
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
return (react_1.default.createElement("div", __assign({}, props, { ref: ref, style: (0, styles_1.default)(style, fixedStyles.root, getStyleByAlignment(align, margin)) }),
|
|
138
|
+
react_1.default.createElement("div", { style: fixedStyles.title }, title !== null && title !== void 0 ? title : 'Untitled'),
|
|
139
|
+
react_1.default.createElement("div", { ref: messagesRef, style: fixedStyles.messages },
|
|
140
|
+
react_1.default.createElement(Each_1.default, { in: messages, render: function (msg) { return react_1.default.createElement("div", { dangerouslySetInnerHTML: { __html: msg } }); } }))));
|
|
141
|
+
});
|
|
142
|
+
function getStyleByAlignment(align, margin) {
|
|
143
|
+
switch (align) {
|
|
144
|
+
case 'tl': return { top: "".concat(margin, "px"), left: "".concat(margin, "px") };
|
|
145
|
+
case 'tc': return { top: "".concat(margin, "px"), left: 0, right: 0, margin: '0 auto' };
|
|
146
|
+
case 'tr': return { top: "".concat(margin, "px"), right: "".concat(margin, "px") };
|
|
147
|
+
case 'cl': return { top: 0, left: "".concat(margin, "px"), bottom: 0, margin: 'auto 0' };
|
|
148
|
+
case 'cc': return { top: 0, left: 0, right: 0, bottom: 0, margin: 'auto' };
|
|
149
|
+
case 'cr': return { top: 0, bottom: 0, right: "".concat(margin, "px"), margin: 'auto 0' };
|
|
150
|
+
case 'bl': return { bottom: "".concat(margin, "px"), left: "".concat(margin, "px") };
|
|
151
|
+
case 'bc': return { bottom: "".concat(margin, "px"), left: 0, right: 0, margin: '0 auto' };
|
|
152
|
+
default: return { bottom: "".concat(margin, "px"), right: "".concat(margin, "px") };
|
|
153
|
+
}
|
|
154
|
+
}
|
|
156
155
|
//# sourceMappingURL=DebugConsole.js.map
|
package/lib/DebugConsole.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DebugConsole.js","sourceRoot":"/","sources":["DebugConsole.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DebugConsole.js","sourceRoot":"/","sources":["DebugConsole.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { CSSProperties, forwardRef, HTMLAttributes, useEffect, useRef, useState } from 'react'\nimport Each from './Each'\nimport asStyleDict from './utils/asStyleDict'\nimport styles from './utils/styles'\n\nexport type DebugConsoleProps = HTMLAttributes<HTMLDivElement> & {\n align?: 'tl' | 'tc' | 'tr' | 'cl' | 'cc' | 'cr' | 'bl' | 'bc' | 'br'\n margin?: number\n maxEntries?: number\n message?: string\n title?: string\n}\n\nexport default forwardRef<HTMLDivElement, DebugConsoleProps>(({\n align = 'br',\n margin = 0,\n maxEntries = -1,\n message,\n style = {},\n title,\n ...props\n}, ref) => {\n const [messages, setMessages] = useState<string[]>([])\n const messagesRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (message === undefined) {\n setMessages([])\n }\n else {\n const numMessages = messages.length\n\n setMessages([\n ...maxEntries < 0\n ? messages\n : messages.slice(Math.max(0, numMessages - (maxEntries - 1)), numMessages),\n message,\n ])\n }\n }, [message])\n\n useEffect(() => {\n messagesRef.current?.scrollTo(0, messagesRef.current?.scrollHeight)\n }, [messages])\n\n const fixedStyles = asStyleDict({\n root: {\n background: '#000',\n fontFamily: 'monospace',\n position: 'fixed',\n width: '300px',\n },\n title: {\n background: '#fff',\n boxSizing: 'border-box',\n color: '#000',\n fontSize: '14px',\n fontWeight: '700',\n height: '30px',\n lineHeight: '30px',\n overflow: 'hidden',\n padding: '0 10px',\n textOverflow: 'ellipsis',\n textTransform: 'uppercase',\n whiteSpace: 'nowrap',\n width: '100%',\n },\n messages: {\n boxSizing: 'border-box',\n color: '#fff',\n fontSize: '12px',\n lineHeight: '150%',\n maxHeight: '200px',\n minHeight: '100px',\n overflowX: 'hidden',\n overflowY: 'scroll',\n padding: '10px',\n WebkitOverflowScrolling: 'touch',\n width: '100%',\n },\n })\n\n return (\n <div\n {...props}\n ref={ref}\n style={styles(style, fixedStyles.root, getStyleByAlignment(align, margin))}\n >\n <div style={fixedStyles.title}>{title ?? 'Untitled'}</div>\n <div ref={messagesRef} style={fixedStyles.messages}>\n <Each in={messages} render={msg => <div dangerouslySetInnerHTML={{ __html: msg }}/>}/>\n </div>\n </div>\n )\n})\n\nfunction getStyleByAlignment(align: DebugConsoleProps['align'], margin: number): CSSProperties {\n switch (align) {\n case 'tl': return { top: `${margin}px`, left: `${margin}px` }\n case 'tc': return { top: `${margin}px`, left: 0, right: 0, margin: '0 auto' }\n case 'tr': return { top: `${margin}px`, right: `${margin}px` }\n case 'cl': return { top: 0, left: `${margin}px`, bottom: 0, margin: 'auto 0' }\n case 'cc': return { top: 0, left: 0, right: 0, bottom: 0, margin: 'auto' }\n case 'cr': return { top: 0, bottom: 0, right: `${margin}px`, margin: 'auto 0' }\n case 'bl': return { bottom: `${margin}px`, left: `${margin}px` }\n case 'bc': return { bottom: `${margin}px`, left: 0, right: 0, margin: '0 auto' }\n default: return { bottom: `${margin}px`, right: `${margin}px` }\n }\n}\n"]}
|
package/lib/Dial.d.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { HTMLAttributes } from 'react';
|
|
2
|
-
export
|
|
1
|
+
import React, { HTMLAttributes, PropsWithChildren, SVGAttributes } from 'react';
|
|
2
|
+
export type DialProps = HTMLAttributes<HTMLDivElement> & PropsWithChildren<{
|
|
3
3
|
/**
|
|
4
|
-
* Current angle reading of the compass, between 0.0 - 360.0 degrees,
|
|
4
|
+
* Current angle reading of the compass, between 0.0 - 360.0 degrees,
|
|
5
|
+
* inclusive.
|
|
5
6
|
*/
|
|
6
7
|
angle?: number;
|
|
7
8
|
/**
|
|
8
|
-
* Length of the knob along the track expressed in degrees, between 0.0 and
|
|
9
|
-
* exclusive. If set to 0 or 360, the knob disappears.
|
|
9
|
+
* Length of the knob along the track expressed in degrees, between 0.0 and
|
|
10
|
+
* 360.0 degrees, exclusive. If set to 0 or 360, the knob disappears.
|
|
10
11
|
*
|
|
11
|
-
* @example Suppose the compass were to be used to control a photosphere of an
|
|
12
|
-
* x 500, and the window size is 500 x 500, that
|
|
13
|
-
* 180 degrees.
|
|
12
|
+
* @example Suppose the compass were to be used to control a photosphere of an
|
|
13
|
+
* image that is 1000 x 500, and the window size is 500 x 500, that
|
|
14
|
+
* would mean the FOV is 500 / 1000 * 360 = 180 degrees.
|
|
14
15
|
*/
|
|
15
16
|
knobLength?: number;
|
|
16
17
|
/**
|
|
@@ -18,22 +19,58 @@ export declare type Props = HTMLAttributes<HTMLDivElement> & {
|
|
|
18
19
|
*/
|
|
19
20
|
radius?: number;
|
|
20
21
|
/**
|
|
21
|
-
* The thickness of the knob, which is equivalent to the `stroke-width` of the
|
|
22
|
-
* Note that this overwrites the `stroke-width` set inside
|
|
22
|
+
* The thickness of the knob, which is equivalent to the `stroke-width` of the
|
|
23
|
+
* `<path>` element. Note that this overwrites the `stroke-width` set inside
|
|
24
|
+
* `cssKnob`.
|
|
23
25
|
*/
|
|
24
26
|
knobThickness?: number;
|
|
25
27
|
/**
|
|
26
|
-
* The thickness of the circular track, which is equivalent to the
|
|
27
|
-
* `<circle>` element. Note that this overwrites the
|
|
28
|
+
* The thickness of the circular track, which is equivalent to the
|
|
29
|
+
* `stroke-width` of the `<circle>` element. Note that this overwrites the
|
|
30
|
+
* `stroke-width` set inside `cssTrack`.
|
|
28
31
|
*/
|
|
29
32
|
trackThickness?: number;
|
|
30
|
-
}
|
|
33
|
+
}>;
|
|
31
34
|
/**
|
|
32
35
|
* A circular dial with a knob and a track.
|
|
33
36
|
*
|
|
34
37
|
* @exports DialKnob
|
|
35
38
|
* @exports DialTrack
|
|
36
39
|
*/
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
declare const _default: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
|
|
41
|
+
/**
|
|
42
|
+
* Current angle reading of the compass, between 0.0 - 360.0 degrees,
|
|
43
|
+
* inclusive.
|
|
44
|
+
*/
|
|
45
|
+
angle?: number | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Length of the knob along the track expressed in degrees, between 0.0 and
|
|
48
|
+
* 360.0 degrees, exclusive. If set to 0 or 360, the knob disappears.
|
|
49
|
+
*
|
|
50
|
+
* @example Suppose the compass were to be used to control a photosphere of an
|
|
51
|
+
* image that is 1000 x 500, and the window size is 500 x 500, that
|
|
52
|
+
* would mean the FOV is 500 / 1000 * 360 = 180 degrees.
|
|
53
|
+
*/
|
|
54
|
+
knobLength?: number | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Radius of the compass.
|
|
57
|
+
*/
|
|
58
|
+
radius?: number | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* The thickness of the knob, which is equivalent to the `stroke-width` of the
|
|
61
|
+
* `<path>` element. Note that this overwrites the `stroke-width` set inside
|
|
62
|
+
* `cssKnob`.
|
|
63
|
+
*/
|
|
64
|
+
knobThickness?: number | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* The thickness of the circular track, which is equivalent to the
|
|
67
|
+
* `stroke-width` of the `<circle>` element. Note that this overwrites the
|
|
68
|
+
* `stroke-width` set inside `cssTrack`.
|
|
69
|
+
*/
|
|
70
|
+
trackThickness?: number | undefined;
|
|
71
|
+
} & {
|
|
72
|
+
children?: React.ReactNode;
|
|
73
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
74
|
+
export default _default;
|
|
75
|
+
export declare const DialTrack: ({ ...props }: SVGAttributes<SVGCircleElement>) => JSX.Element;
|
|
76
|
+
export declare const DialKnob: ({ ...props }: SVGAttributes<SVGPathElement>) => JSX.Element;
|
package/lib/Dial.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++) {
|
|
@@ -14,6 +10,29 @@ var __assign = (this && this.__assign) || function () {
|
|
|
14
10
|
};
|
|
15
11
|
return __assign.apply(this, arguments);
|
|
16
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
|
+
};
|
|
17
36
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
18
37
|
var t = {};
|
|
19
38
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -30,13 +49,96 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
30
49
|
};
|
|
31
50
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
51
|
exports.DialKnob = exports.DialTrack = void 0;
|
|
33
|
-
var react_1 =
|
|
34
|
-
var
|
|
52
|
+
var react_1 = __importStar(require("react"));
|
|
53
|
+
var asComponentDict_1 = __importDefault(require("./utils/asComponentDict"));
|
|
54
|
+
var asStyleDict_1 = __importDefault(require("./utils/asStyleDict"));
|
|
55
|
+
var cloneStyledElement_1 = __importDefault(require("./utils/cloneStyledElement"));
|
|
56
|
+
var styles_1 = __importDefault(require("./utils/styles"));
|
|
57
|
+
/**
|
|
58
|
+
* A circular dial with a knob and a track.
|
|
59
|
+
*
|
|
60
|
+
* @exports DialKnob
|
|
61
|
+
* @exports DialTrack
|
|
62
|
+
*/
|
|
63
|
+
exports.default = (0, react_1.forwardRef)(function (_a, ref) {
|
|
64
|
+
var _b, _c;
|
|
65
|
+
var _d = _a.angle, angle = _d === void 0 ? 0 : _d, children = _a.children, _e = _a.knobLength, knobLength = _e === void 0 ? 30 : _e, _f = _a.knobThickness, knobThickness = _f === void 0 ? 10 : _f, _g = _a.radius, radius = _g === void 0 ? 50 : _g, _h = _a.trackThickness, trackThickness = _h === void 0 ? 2 : _h, style = _a.style, props = __rest(_a, ["angle", "children", "knobLength", "knobThickness", "radius", "trackThickness", "style"]);
|
|
66
|
+
var diameter = radius * 2;
|
|
67
|
+
var clampedKnobAngle = Math.max(0, Math.min(360, knobLength));
|
|
68
|
+
var components = (0, asComponentDict_1.default)(children, {
|
|
69
|
+
track: exports.DialTrack,
|
|
70
|
+
knob: exports.DialKnob,
|
|
71
|
+
});
|
|
72
|
+
var fixedStyles = (0, asStyleDict_1.default)({
|
|
73
|
+
root: {
|
|
74
|
+
height: "".concat(diameter, "px"),
|
|
75
|
+
width: "".concat(diameter, "px"),
|
|
76
|
+
},
|
|
77
|
+
knobContainer: {
|
|
78
|
+
backgroundPosition: 'center',
|
|
79
|
+
backgroundRepeat: 'no-repeat',
|
|
80
|
+
backgroundSize: '100%',
|
|
81
|
+
height: '100%',
|
|
82
|
+
left: '0',
|
|
83
|
+
position: 'absolute',
|
|
84
|
+
top: '0',
|
|
85
|
+
transformOrigin: 'center',
|
|
86
|
+
width: '100%',
|
|
87
|
+
transform: "rotate(".concat((angle + 360) % 360, "deg)"),
|
|
88
|
+
},
|
|
89
|
+
trackContainer: {
|
|
90
|
+
height: '100%',
|
|
91
|
+
left: '0',
|
|
92
|
+
position: 'absolute',
|
|
93
|
+
top: '0',
|
|
94
|
+
transformOrigin: 'center',
|
|
95
|
+
width: '100%',
|
|
96
|
+
},
|
|
97
|
+
svgContainer: {
|
|
98
|
+
overflow: 'visible',
|
|
99
|
+
position: 'absolute',
|
|
100
|
+
right: '0',
|
|
101
|
+
top: '0',
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
var defaultStyles = (0, asStyleDict_1.default)({
|
|
105
|
+
knob: {
|
|
106
|
+
stroke: '#fff',
|
|
107
|
+
},
|
|
108
|
+
track: {
|
|
109
|
+
strokeDasharray: '4',
|
|
110
|
+
stroke: '#fff',
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
return (react_1.default.createElement("div", __assign({}, props, { ref: ref, style: (0, styles_1.default)(style, fixedStyles.root) }),
|
|
114
|
+
react_1.default.createElement("div", { style: fixedStyles.trackContainer },
|
|
115
|
+
react_1.default.createElement("svg", { width: diameter, height: diameter, viewBox: "0 0 ".concat(diameter, " ").concat(diameter), style: fixedStyles.svgContainer }, (0, cloneStyledElement_1.default)((_b = components.track) !== null && _b !== void 0 ? _b : react_1.default.createElement(exports.DialTrack, { style: defaultStyles.track }), {
|
|
116
|
+
cx: radius,
|
|
117
|
+
cy: radius,
|
|
118
|
+
r: radius - trackThickness / 2,
|
|
119
|
+
strokeWidth: trackThickness,
|
|
120
|
+
}))),
|
|
121
|
+
react_1.default.createElement("div", { style: (0, styles_1.default)(fixedStyles.knobContainer) },
|
|
122
|
+
react_1.default.createElement("svg", { viewBox: "0 0 ".concat(diameter, " ").concat(diameter), xmlns: 'http://www.w3.org/2000/svg', style: fixedStyles.svgContainer }, (0, cloneStyledElement_1.default)((_c = components.knob) !== null && _c !== void 0 ? _c : react_1.default.createElement(exports.DialKnob, { style: defaultStyles.knob }), {
|
|
123
|
+
strokeWidth: knobThickness,
|
|
124
|
+
d: arcPath(radius, radius, radius - knobThickness / 2 - (trackThickness - knobThickness) / 2, -clampedKnobAngle / 2, clampedKnobAngle / 2),
|
|
125
|
+
})))));
|
|
126
|
+
});
|
|
127
|
+
var DialTrack = function (_a) {
|
|
128
|
+
var props = __rest(_a, []);
|
|
129
|
+
return react_1.default.createElement("circle", __assign({}, props));
|
|
130
|
+
};
|
|
131
|
+
exports.DialTrack = DialTrack;
|
|
132
|
+
var DialKnob = function (_a) {
|
|
133
|
+
var props = __rest(_a, []);
|
|
134
|
+
return react_1.default.createElement("path", __assign({}, props));
|
|
135
|
+
};
|
|
136
|
+
exports.DialKnob = DialKnob;
|
|
35
137
|
function polarToCartesian(centerX, centerY, radius, angleInDegrees) {
|
|
36
138
|
var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0;
|
|
37
139
|
return {
|
|
38
|
-
x: centerX +
|
|
39
|
-
y: centerY +
|
|
140
|
+
x: centerX + radius * Math.cos(angleInRadians),
|
|
141
|
+
y: centerY + radius * Math.sin(angleInRadians),
|
|
40
142
|
};
|
|
41
143
|
}
|
|
42
144
|
function arcPath(x, y, radius, startAngle, endAngle) {
|
|
@@ -44,34 +146,18 @@ function arcPath(x, y, radius, startAngle, endAngle) {
|
|
|
44
146
|
var end = polarToCartesian(x, y, radius, startAngle);
|
|
45
147
|
var largeArcFlag = endAngle - startAngle <= 180 ? '0' : '1';
|
|
46
148
|
var d = [
|
|
47
|
-
'M',
|
|
48
|
-
|
|
149
|
+
'M',
|
|
150
|
+
start.x,
|
|
151
|
+
start.y,
|
|
152
|
+
'A',
|
|
153
|
+
radius,
|
|
154
|
+
radius,
|
|
155
|
+
0,
|
|
156
|
+
largeArcFlag,
|
|
157
|
+
0,
|
|
158
|
+
end.x,
|
|
159
|
+
end.y,
|
|
49
160
|
];
|
|
50
161
|
return d.join(' ');
|
|
51
162
|
}
|
|
52
|
-
/**
|
|
53
|
-
* A circular dial with a knob and a track.
|
|
54
|
-
*
|
|
55
|
-
* @exports DialKnob
|
|
56
|
-
* @exports DialTrack
|
|
57
|
-
*/
|
|
58
|
-
function Dial(_a) {
|
|
59
|
-
var _b = _a.angle, angle = _b === void 0 ? 0 : _b, _c = _a.radius, radius = _c === void 0 ? 50 : _c, _d = _a.knobLength, knobLength = _d === void 0 ? 30 : _d, _e = _a.knobThickness, knobThickness = _e === void 0 ? 10 : _e, _f = _a.trackThickness, trackThickness = _f === void 0 ? 2 : _f, style = _a.style, props = __rest(_a, ["angle", "radius", "knobLength", "knobThickness", "trackThickness", "style"]);
|
|
60
|
-
var diameter = radius * 2;
|
|
61
|
-
var clampedKnobAngle = Math.max(0, Math.min(360, knobLength));
|
|
62
|
-
return (react_1.default.createElement(StyledRoot, __assign({ style: __assign(__assign({}, style), { width: "".concat(diameter, "px"), height: "".concat(diameter, "px") }) }, props),
|
|
63
|
-
react_1.default.createElement(StyledTrackContainer, null,
|
|
64
|
-
react_1.default.createElement("svg", { width: diameter, height: diameter, viewBox: "0 0 ".concat(diameter, " ").concat(diameter) },
|
|
65
|
-
react_1.default.createElement(exports.DialTrack, { cx: radius, cy: radius, r: radius - trackThickness / 2, strokeWidth: trackThickness }))),
|
|
66
|
-
react_1.default.createElement(StyledKnobContainer, { style: { transform: "rotate(".concat((angle + 360) % 360, "deg)") } },
|
|
67
|
-
react_1.default.createElement("svg", { viewBox: "0 0 ".concat(diameter, " ").concat(diameter), xmlns: 'http://www.w3.org/2000/svg' },
|
|
68
|
-
react_1.default.createElement(exports.DialKnob, { strokeWidth: knobThickness, d: arcPath(radius, radius, radius - knobThickness / 2 - (trackThickness - knobThickness) / 2, -clampedKnobAngle / 2, clampedKnobAngle / 2) })))));
|
|
69
|
-
}
|
|
70
|
-
exports.default = Dial;
|
|
71
|
-
exports.DialTrack = styled_components_1.default.circle(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n stroke-dasharray: 4;\n stroke: #fff;\n"], ["\n stroke-dasharray: 4;\n stroke: #fff;\n"])));
|
|
72
|
-
exports.DialKnob = styled_components_1.default.path(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n stroke: #fff;\n"], ["\n stroke: #fff;\n"])));
|
|
73
|
-
var StyledTrackContainer = styled_components_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n transform-origin: center;\n width: 100%;\n"], ["\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n transform-origin: center;\n width: 100%;\n"])));
|
|
74
|
-
var StyledKnobContainer = styled_components_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n background-position: center;\n background-repeat: no-repeat;\n background-size: 100%;\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n transform-origin: center;\n width: 100%;\n\n svg {\n overflow: visible;\n position: absolute;\n right: 0;\n top: 0;\n }\n"], ["\n background-position: center;\n background-repeat: no-repeat;\n background-size: 100%;\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n transform-origin: center;\n width: 100%;\n\n svg {\n overflow: visible;\n position: absolute;\n right: 0;\n top: 0;\n }\n"])));
|
|
75
|
-
var StyledRoot = styled_components_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n box-sizing: border-box;\n display: block;\n"], ["\n box-sizing: border-box;\n display: block;\n"])));
|
|
76
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
|
|
77
163
|
//# sourceMappingURL=Dial.js.map
|
package/lib/Dial.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dial.js","sourceRoot":"/","sources":["Dial.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Dial.js","sourceRoot":"/","sources":["Dial.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { forwardRef, HTMLAttributes, PropsWithChildren, SVGAttributes } from 'react'\nimport asComponentDict from './utils/asComponentDict'\nimport asStyleDict from './utils/asStyleDict'\nimport cloneStyledElement from './utils/cloneStyledElement'\nimport styles from './utils/styles'\n\nexport type DialProps = HTMLAttributes<HTMLDivElement> & PropsWithChildren<{\n /**\n * Current angle reading of the compass, between 0.0 - 360.0 degrees,\n * inclusive.\n */\n angle?: number\n\n /**\n * Length of the knob along the track expressed in degrees, between 0.0 and\n * 360.0 degrees, exclusive. If set to 0 or 360, the knob disappears.\n *\n * @example Suppose the compass were to be used to control a photosphere of an\n * image that is 1000 x 500, and the window size is 500 x 500, that\n * would mean the FOV is 500 / 1000 * 360 = 180 degrees.\n */\n knobLength?: number\n\n /**\n * Radius of the compass.\n */\n radius?: number\n\n /**\n * The thickness of the knob, which is equivalent to the `stroke-width` of the\n * `<path>` element. Note that this overwrites the `stroke-width` set inside\n * `cssKnob`.\n */\n knobThickness?: number\n\n /**\n * The thickness of the circular track, which is equivalent to the\n * `stroke-width` of the `<circle>` element. Note that this overwrites the\n * `stroke-width` set inside `cssTrack`.\n */\n trackThickness?: number\n}>\n\n/**\n * A circular dial with a knob and a track.\n *\n * @exports DialKnob\n * @exports DialTrack\n */\nexport default forwardRef<HTMLDivElement, DialProps>(({\n angle = 0,\n children,\n knobLength = 30,\n knobThickness = 10,\n radius = 50,\n trackThickness = 2,\n style,\n ...props\n}, ref) => {\n const diameter = radius * 2\n const clampedKnobAngle = Math.max(0, Math.min(360, knobLength))\n\n const components = asComponentDict(children, {\n track: DialTrack,\n knob: DialKnob,\n })\n\n const fixedStyles = asStyleDict({\n root: {\n height: `${diameter}px`,\n width: `${diameter}px`,\n },\n knobContainer: {\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '100%',\n height: '100%',\n left: '0',\n position: 'absolute',\n top: '0',\n transformOrigin: 'center',\n width: '100%',\n transform: `rotate(${(angle + 360) % 360}deg)`,\n },\n trackContainer: {\n height: '100%',\n left: '0',\n position: 'absolute',\n top: '0',\n transformOrigin: 'center',\n width: '100%',\n },\n svgContainer: {\n overflow: 'visible',\n position: 'absolute',\n right: '0',\n top: '0',\n },\n })\n\n const defaultStyles = asStyleDict({\n knob: {\n stroke: '#fff',\n },\n track: {\n strokeDasharray: '4',\n stroke: '#fff',\n },\n })\n\n return (\n <div {...props} ref={ref} style={styles(style, fixedStyles.root)}>\n <div style={fixedStyles.trackContainer}>\n <svg width={diameter} height={diameter} viewBox={`0 0 ${diameter} ${diameter}`} style={fixedStyles.svgContainer}>\n {cloneStyledElement(components.track ?? <DialTrack style={defaultStyles.track}/>, {\n cx: radius,\n cy: radius,\n r: radius - trackThickness / 2,\n strokeWidth: trackThickness,\n })}\n </svg>\n </div>\n <div style={styles(fixedStyles.knobContainer)}>\n <svg viewBox={`0 0 ${diameter} ${diameter}`} xmlns='http://www.w3.org/2000/svg' style={fixedStyles.svgContainer}>\n {cloneStyledElement(components.knob ?? <DialKnob style={defaultStyles.knob}/>, {\n strokeWidth: knobThickness,\n d: arcPath(radius, radius, radius - knobThickness / 2 - (trackThickness - knobThickness) / 2, -clampedKnobAngle / 2, clampedKnobAngle / 2),\n })}\n </svg>\n </div>\n </div>\n )\n})\n\nexport const DialTrack = ({ ...props }: SVGAttributes<SVGCircleElement>) => <circle {...props}/>\n\nexport const DialKnob = ({ ...props }: SVGAttributes<SVGPathElement>) => <path {...props}/>\n\nfunction polarToCartesian(centerX: number, centerY: number, radius: number, angleInDegrees: number) {\n const angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0\n\n return {\n x: centerX + radius * Math.cos(angleInRadians),\n y: centerY + radius * Math.sin(angleInRadians),\n }\n}\n\nfunction arcPath(x: number, y: number, radius: number, startAngle: number, endAngle: number) {\n const start = polarToCartesian(x, y, radius, endAngle)\n const end = polarToCartesian(x, y, radius, startAngle)\n const largeArcFlag = endAngle - startAngle <= 180 ? '0' : '1'\n const d = [\n 'M',\n start.x,\n start.y,\n 'A',\n radius,\n radius,\n 0,\n largeArcFlag,\n 0,\n end.x,\n end.y,\n ]\n\n return d.join(' ')\n}\n"]}
|