@canvas-components/react-components 0.1.4 → 0.1.5
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 +8 -1
- package/dist/index.cjs +254 -224
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/package.json +7 -3
package/dist/index.cjs
CHANGED
|
@@ -1,9 +1,29 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var React = require('react');
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
5
|
var reactDom = require('react-dom');
|
|
6
6
|
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule) return e;
|
|
9
|
+
var n = Object.create(null);
|
|
10
|
+
if (e) {
|
|
11
|
+
Object.keys(e).forEach(function (k) {
|
|
12
|
+
if (k !== 'default') {
|
|
13
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return e[k]; }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
n.default = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
26
|
+
|
|
7
27
|
// #style-inject:#style-inject
|
|
8
28
|
function styleInject(css, { insertAt } = {}) {
|
|
9
29
|
if (!css || typeof document === "undefined") return;
|
|
@@ -39,7 +59,7 @@ var REACT_COMPONENT_PREFIX = "canvas-react";
|
|
|
39
59
|
|
|
40
60
|
// src/components/checkbox/style.css
|
|
41
61
|
styleInject('@import "../../styles/variables.css";\n.canvas-react-checkbox {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n cursor: pointer;\n user-select: none;\n}\n.canvas-react-checkbox-disabled {\n opacity: 0.56;\n cursor: not-allowed;\n}\n.canvas-react-checkbox-input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n.canvas-react-checkbox-box {\n position: relative;\n flex: none;\n width: 16px;\n height: 16px;\n box-sizing: border-box;\n border: 1px solid var(--canvas-react-color-border-strong);\n border-radius: 4px;\n background: var(--canvas-react-color-bg);\n transition:\n border-color 0.2s ease,\n background-color 0.2s ease,\n box-shadow 0.2s ease;\n}\n.canvas-react-checkbox:hover .canvas-react-checkbox-box {\n border-color: var(--canvas-react-color-primary-hover);\n}\n.canvas-react-checkbox-input:focus-visible + .canvas-react-checkbox-box {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-checkbox-checked .canvas-react-checkbox-box,\n.canvas-react-checkbox-indeterminate .canvas-react-checkbox-box {\n border-color: var(--canvas-react-color-primary);\n background: var(--canvas-react-color-primary);\n}\n.canvas-react-checkbox-box::after {\n position: absolute;\n content: "";\n opacity: 0;\n box-sizing: border-box;\n transform: scale(0);\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.canvas-react-checkbox-checked .canvas-react-checkbox-box::after {\n top: 50%;\n left: 22%;\n width: 5.5px;\n height: 9px;\n border-right: 2px solid #fff;\n border-bottom: 2px solid #fff;\n transform: translateY(-58%) rotate(45deg) scale(1);\n transform-origin: center;\n opacity: 1;\n}\n.canvas-react-checkbox-indeterminate .canvas-react-checkbox-box::after {\n top: 50%;\n left: 50%;\n width: 8px;\n border-bottom: 2px solid #fff;\n transform: translate(-50%, -50%);\n opacity: 1;\n}\n.canvas-react-checkbox-label {\n min-width: 0;\n}\n');
|
|
42
|
-
var ReactCheckbox =
|
|
62
|
+
var ReactCheckbox = React.forwardRef(
|
|
43
63
|
function ReactCheckbox2(props, ref) {
|
|
44
64
|
const {
|
|
45
65
|
checked,
|
|
@@ -50,14 +70,14 @@ var ReactCheckbox = react.forwardRef(
|
|
|
50
70
|
style,
|
|
51
71
|
...restProps
|
|
52
72
|
} = props;
|
|
53
|
-
const inputRef =
|
|
54
|
-
|
|
73
|
+
const inputRef = React.useRef(null);
|
|
74
|
+
React.useEffect(() => {
|
|
55
75
|
if (!inputRef.current) {
|
|
56
76
|
return;
|
|
57
77
|
}
|
|
58
78
|
inputRef.current.indeterminate = indeterminate;
|
|
59
79
|
}, [indeterminate]);
|
|
60
|
-
|
|
80
|
+
React.useImperativeHandle(ref, () => ({
|
|
61
81
|
focus: () => inputRef.current?.focus(),
|
|
62
82
|
blur: () => inputRef.current?.blur(),
|
|
63
83
|
input: inputRef.current
|
|
@@ -95,7 +115,7 @@ var ReactCheckbox = react.forwardRef(
|
|
|
95
115
|
|
|
96
116
|
// src/components/input/style.css
|
|
97
117
|
styleInject('@import "../../styles/variables.css";\n.canvas-react-input-affix-wrapper {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n height: var(--canvas-react-control-height);\n border: 1px solid var(--canvas-react-color-border);\n border-radius: var(--canvas-react-radius-sm);\n background: var(--canvas-react-color-bg);\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n outline: none;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease,\n background-color 0.2s ease;\n}\n.canvas-react-input-affix-wrapper:hover {\n border-color: var(--canvas-react-color-primary-hover);\n}\n.canvas-react-input-affix-wrapper:focus-within {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-input-affix-wrapper-disabled {\n background: #fafafa;\n color: #9ca3af;\n cursor: not-allowed;\n}\n.canvas-react-input {\n box-sizing: border-box;\n flex: 1 1 auto;\n width: 100%;\n min-width: 0;\n height: 100%;\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\n border: none;\n background: transparent;\n color: inherit;\n font-size: inherit;\n outline: none;\n}\n.canvas-react-input::placeholder {\n color: #9ca3af;\n}\n.canvas-react-input-suffix {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding-right: var(--canvas-react-control-padding-inline, 11px);\n}\n.canvas-react-input-clear {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n padding: 0;\n border: none;\n background: transparent;\n color: #9ca3af;\n opacity: 0;\n pointer-events: none;\n cursor: pointer;\n transition:\n color 0.2s ease,\n opacity 0.2s ease,\n transform 0.18s ease;\n}\n.canvas-react-input-affix-wrapper:hover .canvas-react-input-clear,\n.canvas-react-input-affix-wrapper:focus-within .canvas-react-input-clear {\n opacity: 1;\n pointer-events: auto;\n}\n.canvas-react-input-clear:hover {\n color: #6b7280;\n transform: rotate(90deg);\n}\n.canvas-react-input-clear-icon,\n.canvas-react-input-clear-icon::before {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 8px;\n height: 1.25px;\n margin-top: -0.625px;\n margin-left: -4px;\n border-radius: 999px;\n background: currentColor;\n content: "";\n}\n.canvas-react-input-clear-icon {\n transform: rotate(45deg);\n}\n.canvas-react-input-clear-icon::before {\n transform: rotate(90deg);\n}\n');
|
|
98
|
-
var ReactInput =
|
|
118
|
+
var ReactInput = React.forwardRef(
|
|
99
119
|
function ReactInput2(props, ref) {
|
|
100
120
|
const {
|
|
101
121
|
allowClear = true,
|
|
@@ -179,17 +199,17 @@ var ReactInput = react.forwardRef(
|
|
|
179
199
|
var DEFAULT_CONTENT_SCALE = {
|
|
180
200
|
scale: 1
|
|
181
201
|
};
|
|
182
|
-
var ReactContentScaleContext =
|
|
202
|
+
var ReactContentScaleContext = React.createContext(DEFAULT_CONTENT_SCALE);
|
|
183
203
|
function ReactContentScaleProvider(props) {
|
|
184
204
|
const { children, scale = 1 } = props;
|
|
185
|
-
const value =
|
|
205
|
+
const value = React.useMemo(() => {
|
|
186
206
|
const nextScale = typeof scale === "number" && Number.isFinite(scale) && scale > 0 ? scale : 1;
|
|
187
207
|
return { scale: nextScale };
|
|
188
208
|
}, [scale]);
|
|
189
209
|
return /* @__PURE__ */ jsxRuntime.jsx(ReactContentScaleContext.Provider, { value, children });
|
|
190
210
|
}
|
|
191
211
|
function useReactContentScale() {
|
|
192
|
-
return
|
|
212
|
+
return React.useContext(ReactContentScaleContext);
|
|
193
213
|
}
|
|
194
214
|
function toContentLayoutSize(size, scale) {
|
|
195
215
|
const nextScale = typeof scale === "number" && Number.isFinite(scale) && scale > 0 ? scale : 1;
|
|
@@ -207,15 +227,15 @@ function useReactTransition(options) {
|
|
|
207
227
|
} = options;
|
|
208
228
|
const enterDuration = resolveDuration(duration, "enter");
|
|
209
229
|
const leaveDuration = resolveDuration(duration, "leave");
|
|
210
|
-
const previousShowRef =
|
|
211
|
-
const [rendered, setRendered] =
|
|
212
|
-
const [phase, setPhase] =
|
|
230
|
+
const previousShowRef = React.useRef(show);
|
|
231
|
+
const [rendered, setRendered] = React.useState(show);
|
|
232
|
+
const [phase, setPhase] = React.useState(() => {
|
|
213
233
|
if (!show) {
|
|
214
234
|
return "leave-to";
|
|
215
235
|
}
|
|
216
236
|
return appear ? "enter-from" : "entered";
|
|
217
237
|
});
|
|
218
|
-
|
|
238
|
+
React.useLayoutEffect(() => {
|
|
219
239
|
if (previousShowRef.current === show) {
|
|
220
240
|
return;
|
|
221
241
|
}
|
|
@@ -227,7 +247,7 @@ function useReactTransition(options) {
|
|
|
227
247
|
}
|
|
228
248
|
setPhase("leave-from");
|
|
229
249
|
}, [show]);
|
|
230
|
-
|
|
250
|
+
React.useLayoutEffect(() => {
|
|
231
251
|
let firstFrameId = null;
|
|
232
252
|
let secondFrameId = null;
|
|
233
253
|
let timerId = null;
|
|
@@ -308,9 +328,9 @@ function ReactPopup(props) {
|
|
|
308
328
|
show: open
|
|
309
329
|
});
|
|
310
330
|
const { rendered } = transition;
|
|
311
|
-
const [position, setPosition] =
|
|
312
|
-
const surfaceRef =
|
|
313
|
-
|
|
331
|
+
const [position, setPosition] = React.useState(null);
|
|
332
|
+
const surfaceRef = React.useRef(null);
|
|
333
|
+
React.useLayoutEffect(() => {
|
|
314
334
|
if (!rendered) {
|
|
315
335
|
return;
|
|
316
336
|
}
|
|
@@ -362,7 +382,7 @@ function ReactPopup(props) {
|
|
|
362
382
|
rendered,
|
|
363
383
|
placement
|
|
364
384
|
]);
|
|
365
|
-
|
|
385
|
+
React.useLayoutEffect(() => {
|
|
366
386
|
if (!rendered || !position || !surfaceRef.current) {
|
|
367
387
|
return;
|
|
368
388
|
}
|
|
@@ -406,7 +426,7 @@ function ReactPopup(props) {
|
|
|
406
426
|
placement,
|
|
407
427
|
position
|
|
408
428
|
]);
|
|
409
|
-
|
|
429
|
+
React.useEffect(() => {
|
|
410
430
|
if (!rendered) {
|
|
411
431
|
return;
|
|
412
432
|
}
|
|
@@ -621,7 +641,7 @@ var PRESET_COLORS = [
|
|
|
621
641
|
"#8c8c8c",
|
|
622
642
|
"#ffffff"
|
|
623
643
|
];
|
|
624
|
-
var ReactColorPicker =
|
|
644
|
+
var ReactColorPicker = React.forwardRef(function ReactColorPicker2(props, ref) {
|
|
625
645
|
const {
|
|
626
646
|
autoFocus,
|
|
627
647
|
className,
|
|
@@ -638,20 +658,20 @@ var ReactColorPicker = react.forwardRef(function ReactColorPicker2(props, ref) {
|
|
|
638
658
|
showArrow = true,
|
|
639
659
|
...restProps
|
|
640
660
|
} = props;
|
|
641
|
-
const triggerRef =
|
|
642
|
-
const inputRef =
|
|
643
|
-
const popupRef =
|
|
661
|
+
const triggerRef = React.useRef(null);
|
|
662
|
+
const inputRef = React.useRef(null);
|
|
663
|
+
const popupRef = React.useRef(null);
|
|
644
664
|
const resolvedValue = normalizeHexColor(value) ?? DEFAULT_COLOR;
|
|
645
|
-
const [open, setOpen] =
|
|
646
|
-
const [draftValue, setDraftValue] =
|
|
647
|
-
const [hexText, setHexText] =
|
|
648
|
-
const hsv =
|
|
649
|
-
|
|
650
|
-
|
|
665
|
+
const [open, setOpen] = React.useState(false);
|
|
666
|
+
const [draftValue, setDraftValue] = React.useState(resolvedValue);
|
|
667
|
+
const [hexText, setHexText] = React.useState(resolvedValue.toUpperCase());
|
|
668
|
+
const hsv = React.useMemo(() => hexToHsv(draftValue), [draftValue]);
|
|
669
|
+
React.useImperativeHandle(ref, () => inputRef.current);
|
|
670
|
+
React.useEffect(() => {
|
|
651
671
|
setDraftValue(resolvedValue);
|
|
652
672
|
setHexText(resolvedValue.toUpperCase());
|
|
653
673
|
}, [resolvedValue]);
|
|
654
|
-
|
|
674
|
+
React.useEffect(() => {
|
|
655
675
|
if (autoFocus) {
|
|
656
676
|
inputRef.current?.focus();
|
|
657
677
|
}
|
|
@@ -905,7 +925,7 @@ var MONTHS = Array.from(
|
|
|
905
925
|
(_, index) => String(index + 1).padStart(2, "0")
|
|
906
926
|
);
|
|
907
927
|
var WEEKDAY_LABELS = ["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"];
|
|
908
|
-
var ReactDatePicker =
|
|
928
|
+
var ReactDatePicker = React.forwardRef(
|
|
909
929
|
function ReactDatePicker2(props, ref) {
|
|
910
930
|
const {
|
|
911
931
|
autoFocus,
|
|
@@ -923,47 +943,47 @@ var ReactDatePicker = react.forwardRef(
|
|
|
923
943
|
value,
|
|
924
944
|
...restProps
|
|
925
945
|
} = props;
|
|
926
|
-
const triggerRef =
|
|
927
|
-
const inputRef =
|
|
928
|
-
const popupRef =
|
|
929
|
-
const skipFocusOpenRef =
|
|
930
|
-
const [open, setOpen] =
|
|
931
|
-
const [mode, setMode] =
|
|
932
|
-
const parsedValue =
|
|
933
|
-
const [panelDate, setPanelDate] =
|
|
946
|
+
const triggerRef = React.useRef(null);
|
|
947
|
+
const inputRef = React.useRef(null);
|
|
948
|
+
const popupRef = React.useRef(null);
|
|
949
|
+
const skipFocusOpenRef = React.useRef(false);
|
|
950
|
+
const [open, setOpen] = React.useState(false);
|
|
951
|
+
const [mode, setMode] = React.useState("date");
|
|
952
|
+
const parsedValue = React.useMemo(() => parseDateValue(value), [value]);
|
|
953
|
+
const [panelDate, setPanelDate] = React.useState(() => ({
|
|
934
954
|
day: parsedValue?.day ?? 1,
|
|
935
955
|
month: parsedValue?.month ?? (/* @__PURE__ */ new Date()).getMonth() + 1,
|
|
936
956
|
year: parsedValue?.year ?? (/* @__PURE__ */ new Date()).getFullYear()
|
|
937
957
|
}));
|
|
938
|
-
const yearPanelStart =
|
|
958
|
+
const yearPanelStart = React.useMemo(
|
|
939
959
|
() => resolveDecadeStart(panelDate.year),
|
|
940
960
|
[panelDate.year]
|
|
941
961
|
);
|
|
942
|
-
const decadePanelStart =
|
|
962
|
+
const decadePanelStart = React.useMemo(
|
|
943
963
|
() => Math.floor(yearPanelStart / 100) * 100,
|
|
944
964
|
[yearPanelStart]
|
|
945
965
|
);
|
|
946
|
-
const yearItems =
|
|
966
|
+
const yearItems = React.useMemo(
|
|
947
967
|
() => Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index),
|
|
948
968
|
[yearPanelStart]
|
|
949
969
|
);
|
|
950
|
-
const decadeItems =
|
|
970
|
+
const decadeItems = React.useMemo(
|
|
951
971
|
() => Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10),
|
|
952
972
|
[decadePanelStart]
|
|
953
973
|
);
|
|
954
|
-
const calendarDays =
|
|
974
|
+
const calendarDays = React.useMemo(
|
|
955
975
|
() => buildCalendarDays(panelDate.year, panelDate.month),
|
|
956
976
|
[panelDate.month, panelDate.year]
|
|
957
977
|
);
|
|
958
978
|
const displayValue = parsedValue == null ? "" : `${parsedValue.year}-${String(parsedValue.month).padStart(2, "0")}-${String(parsedValue.day).padStart(2, "0")}`;
|
|
959
979
|
const showClear = allowClear && !disabled && displayValue.length > 0;
|
|
960
|
-
|
|
961
|
-
|
|
980
|
+
React.useImperativeHandle(ref, () => inputRef.current);
|
|
981
|
+
React.useEffect(() => {
|
|
962
982
|
if (autoFocus) {
|
|
963
983
|
inputRef.current?.focus();
|
|
964
984
|
}
|
|
965
985
|
}, [autoFocus]);
|
|
966
|
-
|
|
986
|
+
React.useEffect(() => {
|
|
967
987
|
if (!open) {
|
|
968
988
|
return;
|
|
969
989
|
}
|
|
@@ -1420,7 +1440,7 @@ function resolveDecadeStart(year) {
|
|
|
1420
1440
|
// src/components/date-range/style.css
|
|
1421
1441
|
styleInject('@import "../../styles/variables.css";\n@import "../date/style.css";\n@import "../time/style.css";\n.canvas-react-date-range-wrap {\n position: relative;\n display: inline-flex;\n width: 100%;\n height: 100%;\n}\n.canvas-react-date-range {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n height: var(--canvas-react-control-height);\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\n border: 1px solid var(--canvas-react-color-border);\n border-radius: var(--canvas-react-radius-sm);\n background: var(--canvas-react-color-bg);\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n outline: none;\n cursor: pointer;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease,\n background-color 0.2s ease;\n}\n.canvas-react-date-range-control {\n position: relative;\n}\n.canvas-react-date-range:hover {\n border-color: var(--canvas-react-color-primary-hover);\n}\n.canvas-react-date-range-open {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-date-range-disabled {\n color: #9ca3af;\n background: #fafafa;\n cursor: not-allowed;\n}\n.canvas-react-date-range-input-wrap {\n flex: 1 1 auto;\n width: 100%;\n height: 100%;\n border: none;\n background: transparent;\n box-shadow: none;\n}\n.canvas-react-date-range .canvas-react-input-affix-wrapper {\n height: 100%;\n min-height: 0;\n}\n.canvas-react-date-range-input-wrap:hover,\n.canvas-react-date-range-input-wrap:focus-within {\n border-color: transparent;\n box-shadow: none;\n}\n.canvas-react-date-range-hidden-input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n border: 0;\n opacity: 0;\n pointer-events: none;\n}\n.canvas-react-date-range-input {\n width: 100%;\n min-width: 0;\n height: 100%;\n padding: 0;\n line-height: 1;\n}\n.canvas-react-date-range-values {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n min-width: 0;\n height: 100%;\n}\n.canvas-react-date-range-value {\n position: relative;\n display: flex;\n flex: 1 1 0;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n min-width: 0;\n height: 100%;\n padding: 0;\n border: none;\n background: transparent;\n color: inherit;\n font: inherit;\n line-height: 1;\n text-align: left;\n box-sizing: border-box;\n cursor: pointer;\n}\n.canvas-react-date-range-value::after {\n position: absolute;\n right: 0;\n bottom: -1px;\n left: 0;\n height: 2px;\n border-radius: 999px;\n background: transparent;\n content: "";\n transition: background-color 0.18s ease;\n}\n.canvas-react-date-range-value-active::after {\n background: var(--canvas-react-color-primary);\n}\n.canvas-react-date-range-value-text {\n display: block;\n width: 100%;\n min-width: 0;\n height: auto;\n padding: 0;\n border: none;\n outline: none;\n overflow: hidden;\n background: transparent;\n color: inherit;\n font: inherit;\n line-height: normal;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n@supports (height: 1lh) {\n .canvas-react-date-range-value-text {\n height: 1lh;\n }\n}\n.canvas-react-date-range-value-text::placeholder {\n color: inherit;\n opacity: 1;\n}\n.canvas-react-date-range-separator {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n padding: 0 8px;\n color: var(--canvas-react-color-text-muted);\n font-size: 12px;\n}\n.canvas-react-date-range-actions {\n position: relative;\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 1em;\n min-width: 12px;\n height: 1em;\n min-height: 12px;\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\n}\n.canvas-react-date-range-arrow {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 0.5em;\n height: 0.5em;\n min-width: 6px;\n min-height: 6px;\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\n transform: translate(-50%, -58%) rotate(45deg);\n transition:\n opacity 0.18s ease,\n transform 0.18s ease,\n border-color 0.18s ease;\n}\n.canvas-react-date-range:hover .canvas-react-date-range-arrow,\n.canvas-react-date-range-open .canvas-react-date-range-arrow {\n border-color: #6b7280;\n}\n.canvas-react-date-range-arrow-open {\n border-color: #6b7280;\n transform: translate(-50%, -42%) rotate(225deg);\n}\n.canvas-react-date-range-clear {\n position: absolute;\n top: 50%;\n left: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n padding: 0;\n border: none;\n background: transparent;\n color: #9ca3af;\n opacity: 0;\n pointer-events: none;\n cursor: pointer;\n transform: translate(-50%, -50%) rotate(0deg);\n transition:\n color 0.2s ease,\n opacity 0.2s ease,\n transform 0.18s ease;\n}\n.canvas-react-date-range:hover .canvas-react-date-range-clear,\n.canvas-react-date-range-open .canvas-react-date-range-clear,\n.canvas-react-date-range:focus-within .canvas-react-date-range-clear {\n opacity: 1;\n pointer-events: auto;\n}\n.canvas-react-date-range-clear-icon,\n.canvas-react-date-range-clear-icon::before {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 8px;\n height: 1.25px;\n margin-top: -0.625px;\n margin-left: -4px;\n border-radius: 999px;\n background: currentColor;\n content: "";\n}\n.canvas-react-date-range-clear-icon {\n transform: rotate(45deg);\n}\n.canvas-react-date-range-clear-icon::before {\n transform: rotate(90deg);\n}\n.canvas-react-date-range-dropdown {\n padding: 4px;\n}\n.canvas-react-date-range-panel {\n display: flex;\n flex-direction: column;\n height: 400px;\n box-sizing: border-box;\n}\n.canvas-react-date-range-calendars {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n flex: 1 1 auto;\n min-height: 0;\n}\n.canvas-react-date-range-calendar {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n}\n.canvas-react-date-range-calendar + .canvas-react-date-range-calendar {\n border-left: 1px solid var(--canvas-react-color-split, #f0f0f0);\n}\n.canvas-react-date-range-calendar .canvas-react-year-title {\n cursor: default;\n}\n.canvas-react-date-range-calendar .canvas-react-year-nav:disabled {\n cursor: default;\n opacity: 0;\n}\n.canvas-react-date-range-calendar .canvas-react-date-grid {\n flex: 1 1 auto;\n min-height: 0;\n}\n.canvas-react-date-range-cell {\n position: relative;\n border-radius: 0;\n}\n.canvas-react-date-range-cell.canvas-react-year-cell-selected {\n background: rgba(22, 119, 255, 0.12);\n color: var(--canvas-react-color-primary);\n font-weight: 600;\n}\n.canvas-react-date-range-cell::before {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: transparent;\n content: "";\n}\n.canvas-react-date-range-cell-in-range {\n background: rgba(22, 119, 255, 0.12);\n}\n.canvas-react-date-range-cell-in-range::before {\n background: transparent;\n}\n.canvas-react-date-range-cell-range-start {\n border-top-left-radius: var(--canvas-react-radius-sm);\n border-bottom-left-radius: var(--canvas-react-radius-sm);\n}\n.canvas-react-date-range-cell-range-start::before {\n left: 0;\n}\n.canvas-react-date-range-cell-range-end {\n border-top-right-radius: var(--canvas-react-radius-sm);\n border-bottom-right-radius: var(--canvas-react-radius-sm);\n}\n.canvas-react-date-range-cell-range-end::before {\n right: 0;\n}\n.canvas-react-date-range-cell-range-start.canvas-react-date-range-cell-range-end {\n border-radius: var(--canvas-react-radius-sm);\n}\n.canvas-react-date-range-cell-range-start.canvas-react-date-range-cell-range-end::before {\n left: 0;\n right: 0;\n}\n.canvas-react-date-range-cell-text {\n position: relative;\n z-index: 1;\n}\n.canvas-react-date-range-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 8px 4px 4px;\n border-top: 1px solid var(--canvas-react-color-border);\n}\n');
|
|
1422
1442
|
var WEEKDAY_LABELS2 = ["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"];
|
|
1423
|
-
var ReactDateRangePicker =
|
|
1443
|
+
var ReactDateRangePicker = React.forwardRef(function ReactDateRangePicker2(props, ref) {
|
|
1424
1444
|
const {
|
|
1425
1445
|
autoFocus,
|
|
1426
1446
|
className,
|
|
@@ -1438,37 +1458,37 @@ var ReactDateRangePicker = react.forwardRef(function ReactDateRangePicker2(props
|
|
|
1438
1458
|
value,
|
|
1439
1459
|
...restProps
|
|
1440
1460
|
} = props;
|
|
1441
|
-
const triggerRef =
|
|
1442
|
-
const startInputRef =
|
|
1443
|
-
const endInputRef =
|
|
1444
|
-
const popupRef =
|
|
1445
|
-
const skipFocusOpenRef =
|
|
1446
|
-
const [open, setOpen] =
|
|
1447
|
-
const [activePart, setActivePart] =
|
|
1448
|
-
const [draftRange, setDraftRange] =
|
|
1461
|
+
const triggerRef = React.useRef(null);
|
|
1462
|
+
const startInputRef = React.useRef(null);
|
|
1463
|
+
const endInputRef = React.useRef(null);
|
|
1464
|
+
const popupRef = React.useRef(null);
|
|
1465
|
+
const skipFocusOpenRef = React.useRef(false);
|
|
1466
|
+
const [open, setOpen] = React.useState(false);
|
|
1467
|
+
const [activePart, setActivePart] = React.useState("start");
|
|
1468
|
+
const [draftRange, setDraftRange] = React.useState(
|
|
1449
1469
|
() => parseDateRangeValue(value)
|
|
1450
1470
|
);
|
|
1451
|
-
const [hoverDate, setHoverDate] =
|
|
1452
|
-
const [leftPanel, setLeftPanel] =
|
|
1471
|
+
const [hoverDate, setHoverDate] = React.useState(null);
|
|
1472
|
+
const [leftPanel, setLeftPanel] = React.useState(
|
|
1453
1473
|
() => resolveInitialPanelMonth(parseDateRangeValue(value))
|
|
1454
1474
|
);
|
|
1455
|
-
const rightPanel =
|
|
1456
|
-
const leftCalendarDays =
|
|
1475
|
+
const rightPanel = React.useMemo(() => shiftMonth2(leftPanel, 1), [leftPanel]);
|
|
1476
|
+
const leftCalendarDays = React.useMemo(
|
|
1457
1477
|
() => buildCalendarDays2(leftPanel.year, leftPanel.month),
|
|
1458
1478
|
[leftPanel.month, leftPanel.year]
|
|
1459
1479
|
);
|
|
1460
|
-
const rightCalendarDays =
|
|
1480
|
+
const rightCalendarDays = React.useMemo(
|
|
1461
1481
|
() => buildCalendarDays2(rightPanel.year, rightPanel.month),
|
|
1462
1482
|
[rightPanel.month, rightPanel.year]
|
|
1463
1483
|
);
|
|
1464
1484
|
const showClear = allowClear && !disabled && (draftRange.start.length > 0 || draftRange.end.length > 0);
|
|
1465
|
-
|
|
1466
|
-
|
|
1485
|
+
React.useImperativeHandle(ref, () => startInputRef.current);
|
|
1486
|
+
React.useEffect(() => {
|
|
1467
1487
|
if (autoFocus) {
|
|
1468
1488
|
startInputRef.current?.focus();
|
|
1469
1489
|
}
|
|
1470
1490
|
}, [autoFocus]);
|
|
1471
|
-
|
|
1491
|
+
React.useEffect(() => {
|
|
1472
1492
|
const nextRange = parseDateRangeValue(value);
|
|
1473
1493
|
setDraftRange(nextRange);
|
|
1474
1494
|
setLeftPanel(resolveInitialPanelMonth(nextRange));
|
|
@@ -2155,9 +2175,9 @@ function TimeSelectionPanel(props) {
|
|
|
2155
2175
|
}
|
|
2156
2176
|
function TimeColumn(props) {
|
|
2157
2177
|
const { onSelect, options, selectedValue } = props;
|
|
2158
|
-
const listRef =
|
|
2159
|
-
const scrollTimerRef =
|
|
2160
|
-
const ignoreScrollRef =
|
|
2178
|
+
const listRef = React.useRef(null);
|
|
2179
|
+
const scrollTimerRef = React.useRef(null);
|
|
2180
|
+
const ignoreScrollRef = React.useRef(false);
|
|
2161
2181
|
const scrollToValue = (nextValue, behavior) => {
|
|
2162
2182
|
const listElement = listRef.current;
|
|
2163
2183
|
if (!listElement) {
|
|
@@ -2194,14 +2214,14 @@ function TimeColumn(props) {
|
|
|
2194
2214
|
ignoreScrollRef.current = false;
|
|
2195
2215
|
}, behavior === "smooth" ? 180 : 120);
|
|
2196
2216
|
};
|
|
2197
|
-
|
|
2217
|
+
React.useEffect(() => {
|
|
2198
2218
|
return () => {
|
|
2199
2219
|
if (scrollTimerRef.current != null) {
|
|
2200
2220
|
window.clearTimeout(scrollTimerRef.current);
|
|
2201
2221
|
}
|
|
2202
2222
|
};
|
|
2203
2223
|
}, []);
|
|
2204
|
-
|
|
2224
|
+
React.useEffect(() => {
|
|
2205
2225
|
const listElement = listRef.current;
|
|
2206
2226
|
if (!listElement) {
|
|
2207
2227
|
return;
|
|
@@ -2322,7 +2342,7 @@ var MONTHS2 = Array.from(
|
|
|
2322
2342
|
(_, index) => String(index + 1).padStart(2, "0")
|
|
2323
2343
|
);
|
|
2324
2344
|
var WEEKDAY_LABELS3 = ["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"];
|
|
2325
|
-
var ReactDateTimePicker =
|
|
2345
|
+
var ReactDateTimePicker = React.forwardRef(function ReactDateTimePicker2(props, ref) {
|
|
2326
2346
|
const {
|
|
2327
2347
|
autoFocus,
|
|
2328
2348
|
className,
|
|
@@ -2339,45 +2359,45 @@ var ReactDateTimePicker = react.forwardRef(function ReactDateTimePicker2(props,
|
|
|
2339
2359
|
value,
|
|
2340
2360
|
...restProps
|
|
2341
2361
|
} = props;
|
|
2342
|
-
const triggerRef =
|
|
2343
|
-
const inputRef =
|
|
2344
|
-
const popupRef =
|
|
2345
|
-
const skipFocusOpenRef =
|
|
2346
|
-
const [open, setOpen] =
|
|
2347
|
-
const [mode, setMode] =
|
|
2348
|
-
const parsedValue =
|
|
2349
|
-
const [draftDateTime, setDraftDateTime] =
|
|
2362
|
+
const triggerRef = React.useRef(null);
|
|
2363
|
+
const inputRef = React.useRef(null);
|
|
2364
|
+
const popupRef = React.useRef(null);
|
|
2365
|
+
const skipFocusOpenRef = React.useRef(false);
|
|
2366
|
+
const [open, setOpen] = React.useState(false);
|
|
2367
|
+
const [mode, setMode] = React.useState("date");
|
|
2368
|
+
const parsedValue = React.useMemo(() => parseDateTimeValue(value), [value]);
|
|
2369
|
+
const [draftDateTime, setDraftDateTime] = React.useState(
|
|
2350
2370
|
() => createDraftDateTime(parsedValue)
|
|
2351
2371
|
);
|
|
2352
|
-
const yearPanelStart =
|
|
2372
|
+
const yearPanelStart = React.useMemo(
|
|
2353
2373
|
() => resolveDecadeStart2(draftDateTime.year),
|
|
2354
2374
|
[draftDateTime.year]
|
|
2355
2375
|
);
|
|
2356
|
-
const decadePanelStart =
|
|
2376
|
+
const decadePanelStart = React.useMemo(
|
|
2357
2377
|
() => Math.floor(yearPanelStart / 100) * 100,
|
|
2358
2378
|
[yearPanelStart]
|
|
2359
2379
|
);
|
|
2360
|
-
const yearItems =
|
|
2380
|
+
const yearItems = React.useMemo(
|
|
2361
2381
|
() => Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index),
|
|
2362
2382
|
[yearPanelStart]
|
|
2363
2383
|
);
|
|
2364
|
-
const decadeItems =
|
|
2384
|
+
const decadeItems = React.useMemo(
|
|
2365
2385
|
() => Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10),
|
|
2366
2386
|
[decadePanelStart]
|
|
2367
2387
|
);
|
|
2368
|
-
const calendarDays =
|
|
2388
|
+
const calendarDays = React.useMemo(
|
|
2369
2389
|
() => buildCalendarDays3(draftDateTime.year, draftDateTime.month),
|
|
2370
2390
|
[draftDateTime.month, draftDateTime.year]
|
|
2371
2391
|
);
|
|
2372
2392
|
const displayValue = parsedValue == null ? "" : `${formatDateValue(parsedValue)} ${formatTimeValue(parsedValue)}`;
|
|
2373
2393
|
const showClear = allowClear && !disabled && displayValue.length > 0;
|
|
2374
|
-
|
|
2375
|
-
|
|
2394
|
+
React.useImperativeHandle(ref, () => inputRef.current);
|
|
2395
|
+
React.useEffect(() => {
|
|
2376
2396
|
if (autoFocus) {
|
|
2377
2397
|
inputRef.current?.focus();
|
|
2378
2398
|
}
|
|
2379
2399
|
}, [autoFocus]);
|
|
2380
|
-
|
|
2400
|
+
React.useEffect(() => {
|
|
2381
2401
|
if (!open) {
|
|
2382
2402
|
return;
|
|
2383
2403
|
}
|
|
@@ -2960,7 +2980,7 @@ var MONTHS3 = Array.from(
|
|
|
2960
2980
|
(_, index) => String(index + 1).padStart(2, "0")
|
|
2961
2981
|
);
|
|
2962
2982
|
var WEEKDAY_LABELS4 = ["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"];
|
|
2963
|
-
var ReactDateTimeRangePicker =
|
|
2983
|
+
var ReactDateTimeRangePicker = React.forwardRef(function ReactDateTimeRangePicker2(props, ref) {
|
|
2964
2984
|
const {
|
|
2965
2985
|
autoFocus,
|
|
2966
2986
|
className,
|
|
@@ -2978,64 +2998,64 @@ var ReactDateTimeRangePicker = react.forwardRef(function ReactDateTimeRangePicke
|
|
|
2978
2998
|
value,
|
|
2979
2999
|
...restProps
|
|
2980
3000
|
} = props;
|
|
2981
|
-
const triggerRef =
|
|
2982
|
-
const startInputRef =
|
|
2983
|
-
const endInputRef =
|
|
2984
|
-
const popupRef =
|
|
2985
|
-
const skipFocusOpenRef =
|
|
2986
|
-
const [open, setOpen] =
|
|
2987
|
-
const [activePart, setActivePart] =
|
|
2988
|
-
const [mode, setMode] =
|
|
3001
|
+
const triggerRef = React.useRef(null);
|
|
3002
|
+
const startInputRef = React.useRef(null);
|
|
3003
|
+
const endInputRef = React.useRef(null);
|
|
3004
|
+
const popupRef = React.useRef(null);
|
|
3005
|
+
const skipFocusOpenRef = React.useRef(false);
|
|
3006
|
+
const [open, setOpen] = React.useState(false);
|
|
3007
|
+
const [activePart, setActivePart] = React.useState("start");
|
|
3008
|
+
const [mode, setMode] = React.useState(
|
|
2989
3009
|
"date"
|
|
2990
3010
|
);
|
|
2991
|
-
const [draftRange, setDraftRange] =
|
|
3011
|
+
const [draftRange, setDraftRange] = React.useState(
|
|
2992
3012
|
() => parseDateTimeRangeValue(value)
|
|
2993
3013
|
);
|
|
2994
|
-
const activeValue =
|
|
3014
|
+
const activeValue = React.useMemo(
|
|
2995
3015
|
() => activePart === "start" ? draftRange.start : draftRange.end,
|
|
2996
3016
|
[activePart, draftRange.end, draftRange.start]
|
|
2997
3017
|
);
|
|
2998
|
-
const parsedActiveValue =
|
|
3018
|
+
const parsedActiveValue = React.useMemo(
|
|
2999
3019
|
() => parseDateTimeValue2(activeValue),
|
|
3000
3020
|
[activeValue]
|
|
3001
3021
|
);
|
|
3002
|
-
const [draftDateTime, setDraftDateTime] =
|
|
3022
|
+
const [draftDateTime, setDraftDateTime] = React.useState(
|
|
3003
3023
|
() => createDraftDateTime2(parsedActiveValue)
|
|
3004
3024
|
);
|
|
3005
3025
|
const showClear = allowClear && !disabled && (draftRange.start.length > 0 || draftRange.end.length > 0);
|
|
3006
|
-
const yearPanelStart =
|
|
3026
|
+
const yearPanelStart = React.useMemo(
|
|
3007
3027
|
() => resolveDecadeStart3(draftDateTime.year),
|
|
3008
3028
|
[draftDateTime.year]
|
|
3009
3029
|
);
|
|
3010
|
-
const decadePanelStart =
|
|
3030
|
+
const decadePanelStart = React.useMemo(
|
|
3011
3031
|
() => Math.floor(yearPanelStart / 100) * 100,
|
|
3012
3032
|
[yearPanelStart]
|
|
3013
3033
|
);
|
|
3014
|
-
const yearItems =
|
|
3034
|
+
const yearItems = React.useMemo(
|
|
3015
3035
|
() => Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index),
|
|
3016
3036
|
[yearPanelStart]
|
|
3017
3037
|
);
|
|
3018
|
-
const decadeItems =
|
|
3038
|
+
const decadeItems = React.useMemo(
|
|
3019
3039
|
() => Array.from(
|
|
3020
3040
|
{ length: 12 },
|
|
3021
3041
|
(_, index) => decadePanelStart - 10 + index * 10
|
|
3022
3042
|
),
|
|
3023
3043
|
[decadePanelStart]
|
|
3024
3044
|
);
|
|
3025
|
-
const calendarDays =
|
|
3045
|
+
const calendarDays = React.useMemo(
|
|
3026
3046
|
() => buildCalendarDays4(draftDateTime.year, draftDateTime.month),
|
|
3027
3047
|
[draftDateTime.month, draftDateTime.year]
|
|
3028
3048
|
);
|
|
3029
|
-
|
|
3030
|
-
|
|
3049
|
+
React.useImperativeHandle(ref, () => startInputRef.current);
|
|
3050
|
+
React.useEffect(() => {
|
|
3031
3051
|
if (autoFocus) {
|
|
3032
3052
|
startInputRef.current?.focus();
|
|
3033
3053
|
}
|
|
3034
3054
|
}, [autoFocus]);
|
|
3035
|
-
|
|
3055
|
+
React.useEffect(() => {
|
|
3036
3056
|
setDraftRange(parseDateTimeRangeValue(value));
|
|
3037
3057
|
}, [rangeSeparator, value]);
|
|
3038
|
-
|
|
3058
|
+
React.useEffect(() => {
|
|
3039
3059
|
if (!open) {
|
|
3040
3060
|
return;
|
|
3041
3061
|
}
|
|
@@ -3769,20 +3789,20 @@ function compareDateTimeValue(left, right) {
|
|
|
3769
3789
|
styleInject(".canvas-react-image-preview {\n position: fixed;\n inset: 0;\n z-index: 1100;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px;\n background: rgba(0, 0, 0, 0.72);\n backdrop-filter: blur(2px);\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n.canvas-react-image-preview-entered {\n opacity: 1;\n}\n.canvas-react-image-preview-leave {\n opacity: 0;\n}\n.canvas-react-image-preview-image {\n max-width: 90vw;\n max-height: 86vh;\n object-fit: contain;\n border-radius: 4px;\n box-shadow: 0 12px 48px rgba(0, 0, 0, 0.32);\n opacity: 0;\n transition: transform 0.2s ease, opacity 0.2s ease;\n user-select: none;\n}\n.canvas-react-image-preview-entered .canvas-react-image-preview-image {\n opacity: 1;\n}\n.canvas-react-image-preview-leave .canvas-react-image-preview-image {\n opacity: 0;\n}\n.canvas-react-image-preview-close {\n position: fixed;\n top: 20px;\n right: 24px;\n width: 40px;\n height: 40px;\n padding: 0;\n border: 0;\n border-radius: 50%;\n color: #fff;\n background: rgba(255, 255, 255, 0.14);\n font: 30px/38px sans-serif;\n cursor: pointer;\n}\n.canvas-react-image-preview-toolbar {\n position: fixed;\n bottom: 28px;\n left: 50%;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 6px 10px;\n color: #fff;\n background: rgba(0, 0, 0, 0.64);\n border-radius: 22px;\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.24);\n transform: translateX(-50%);\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n.canvas-react-image-preview-entered .canvas-react-image-preview-toolbar {\n opacity: 1;\n}\n.canvas-react-image-preview-tool {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: 0;\n border-radius: 6px;\n color: inherit;\n background: transparent;\n font: 20px/1 sans-serif;\n cursor: pointer;\n}\n.canvas-react-image-preview-tool:hover:not(:disabled) {\n background: rgba(255, 255, 255, 0.16);\n}\n.canvas-react-image-preview-tool:disabled {\n color: rgba(255, 255, 255, 0.35);\n cursor: not-allowed;\n}\n.canvas-react-image-preview-scale {\n min-width: 48px;\n color: rgba(255, 255, 255, 0.88);\n font-size: 12px;\n text-align: center;\n}\n");
|
|
3770
3790
|
function ReactImagePreview(props) {
|
|
3771
3791
|
const { open, src, alt = "preview", onClose } = props;
|
|
3772
|
-
const [scale, setScale] =
|
|
3773
|
-
const [rotation, setRotation] =
|
|
3774
|
-
const [flipX, setFlipX] =
|
|
3775
|
-
const [flipY, setFlipY] =
|
|
3776
|
-
const [motionState, setMotionState] =
|
|
3792
|
+
const [scale, setScale] = React.useState(1);
|
|
3793
|
+
const [rotation, setRotation] = React.useState(0);
|
|
3794
|
+
const [flipX, setFlipX] = React.useState(false);
|
|
3795
|
+
const [flipY, setFlipY] = React.useState(false);
|
|
3796
|
+
const [motionState, setMotionState] = React.useState(
|
|
3777
3797
|
"enter"
|
|
3778
3798
|
);
|
|
3779
|
-
const closeTimerRef =
|
|
3799
|
+
const closeTimerRef = React.useRef(null);
|
|
3780
3800
|
const requestClose = () => {
|
|
3781
3801
|
if (motionState === "leave") return;
|
|
3782
3802
|
setMotionState("leave");
|
|
3783
3803
|
closeTimerRef.current = window.setTimeout(onClose, 200);
|
|
3784
3804
|
};
|
|
3785
|
-
|
|
3805
|
+
React.useEffect(() => {
|
|
3786
3806
|
if (!open) return;
|
|
3787
3807
|
setScale(1);
|
|
3788
3808
|
setRotation(0);
|
|
@@ -3792,7 +3812,7 @@ function ReactImagePreview(props) {
|
|
|
3792
3812
|
const frame = requestAnimationFrame(() => setMotionState("entered"));
|
|
3793
3813
|
return () => cancelAnimationFrame(frame);
|
|
3794
3814
|
}, [open, src]);
|
|
3795
|
-
|
|
3815
|
+
React.useEffect(() => {
|
|
3796
3816
|
if (!open) return;
|
|
3797
3817
|
const handleKeyDown = (event) => {
|
|
3798
3818
|
if (event.key === "Escape") requestClose();
|
|
@@ -3800,7 +3820,7 @@ function ReactImagePreview(props) {
|
|
|
3800
3820
|
window.addEventListener("keydown", handleKeyDown);
|
|
3801
3821
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
3802
3822
|
}, [open, motionState]);
|
|
3803
|
-
|
|
3823
|
+
React.useEffect(
|
|
3804
3824
|
() => () => {
|
|
3805
3825
|
if (closeTimerRef.current != null) {
|
|
3806
3826
|
window.clearTimeout(closeTimerRef.current);
|
|
@@ -3929,7 +3949,7 @@ var MONTHS4 = Array.from(
|
|
|
3929
3949
|
{ length: 12 },
|
|
3930
3950
|
(_, index) => String(index + 1).padStart(2, "0")
|
|
3931
3951
|
);
|
|
3932
|
-
var ReactMonthPicker =
|
|
3952
|
+
var ReactMonthPicker = React.forwardRef(
|
|
3933
3953
|
function ReactMonthPicker2(props, ref) {
|
|
3934
3954
|
const {
|
|
3935
3955
|
autoFocus,
|
|
@@ -3947,36 +3967,36 @@ var ReactMonthPicker = react.forwardRef(
|
|
|
3947
3967
|
value,
|
|
3948
3968
|
...restProps
|
|
3949
3969
|
} = props;
|
|
3950
|
-
const triggerRef =
|
|
3951
|
-
const inputRef =
|
|
3952
|
-
const popupRef =
|
|
3953
|
-
const skipFocusOpenRef =
|
|
3954
|
-
const [open, setOpen] =
|
|
3955
|
-
const [mode, setMode] =
|
|
3956
|
-
const parsedValue =
|
|
3957
|
-
const [panelYear, setPanelYear] =
|
|
3970
|
+
const triggerRef = React.useRef(null);
|
|
3971
|
+
const inputRef = React.useRef(null);
|
|
3972
|
+
const popupRef = React.useRef(null);
|
|
3973
|
+
const skipFocusOpenRef = React.useRef(false);
|
|
3974
|
+
const [open, setOpen] = React.useState(false);
|
|
3975
|
+
const [mode, setMode] = React.useState("month");
|
|
3976
|
+
const parsedValue = React.useMemo(() => parseMonthValue(value), [value]);
|
|
3977
|
+
const [panelYear, setPanelYear] = React.useState(
|
|
3958
3978
|
() => parsedValue?.year ?? (/* @__PURE__ */ new Date()).getFullYear()
|
|
3959
3979
|
);
|
|
3960
|
-
const yearPanelStart =
|
|
3961
|
-
const decadePanelStart =
|
|
3980
|
+
const yearPanelStart = React.useMemo(() => resolveDecadeStart4(panelYear), [panelYear]);
|
|
3981
|
+
const decadePanelStart = React.useMemo(
|
|
3962
3982
|
() => Math.floor(yearPanelStart / 100) * 100,
|
|
3963
3983
|
[yearPanelStart]
|
|
3964
3984
|
);
|
|
3965
|
-
const yearItems =
|
|
3985
|
+
const yearItems = React.useMemo(() => {
|
|
3966
3986
|
return Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index);
|
|
3967
3987
|
}, [yearPanelStart]);
|
|
3968
|
-
const decadeItems =
|
|
3988
|
+
const decadeItems = React.useMemo(() => {
|
|
3969
3989
|
return Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10);
|
|
3970
3990
|
}, [decadePanelStart]);
|
|
3971
3991
|
const displayValue = parsedValue == null ? "" : `${parsedValue.year}-${parsedValue.month}`;
|
|
3972
3992
|
const showClear = allowClear && !disabled && displayValue.length > 0;
|
|
3973
|
-
|
|
3974
|
-
|
|
3993
|
+
React.useImperativeHandle(ref, () => inputRef.current);
|
|
3994
|
+
React.useEffect(() => {
|
|
3975
3995
|
if (autoFocus) {
|
|
3976
3996
|
inputRef.current?.focus();
|
|
3977
3997
|
}
|
|
3978
3998
|
}, [autoFocus]);
|
|
3979
|
-
|
|
3999
|
+
React.useEffect(() => {
|
|
3980
4000
|
if (!open) {
|
|
3981
4001
|
return;
|
|
3982
4002
|
}
|
|
@@ -4321,7 +4341,7 @@ function resolveDecadeStart4(year) {
|
|
|
4321
4341
|
|
|
4322
4342
|
// src/components/number-input/style.css
|
|
4323
4343
|
styleInject('@import "../../styles/variables.css";\n.canvas-react-number-input-affix-wrapper {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n height: var(--canvas-react-control-height);\n border: 1px solid var(--canvas-react-color-border);\n border-radius: var(--canvas-react-radius-sm);\n background: var(--canvas-react-color-bg);\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n outline: none;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease,\n background-color 0.2s ease;\n}\n.canvas-react-number-input-affix-wrapper:hover {\n border-color: var(--canvas-react-color-primary-hover);\n}\n.canvas-react-number-input-affix-wrapper:focus-within {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-number-input-affix-wrapper-disabled {\n background: #fafafa;\n color: #9ca3af;\n cursor: not-allowed;\n}\n.canvas-react-number-input {\n box-sizing: border-box;\n flex: 1 1 auto;\n width: 100%;\n min-width: 0;\n height: 100%;\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\n border: none;\n background: transparent;\n color: inherit;\n font-size: inherit;\n outline: none;\n appearance: textfield;\n -moz-appearance: textfield;\n}\n.canvas-react-number-input::placeholder {\n color: #9ca3af;\n}\n.canvas-react-number-input::-webkit-outer-spin-button,\n.canvas-react-number-input::-webkit-inner-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n.canvas-react-number-input-suffix {\n display: inline-flex;\n align-items: center;\n padding-right: var(--canvas-react-control-padding-inline, 11px);\n}\n.canvas-react-number-input-clear {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n padding: 0;\n border: none;\n background: transparent;\n color: #9ca3af;\n opacity: 0;\n pointer-events: none;\n cursor: pointer;\n transition:\n color 0.2s ease,\n opacity 0.2s ease,\n transform 0.18s ease;\n}\n.canvas-react-number-input-affix-wrapper:hover .canvas-react-number-input-clear,\n.canvas-react-number-input-affix-wrapper:focus-within .canvas-react-number-input-clear {\n opacity: 1;\n pointer-events: auto;\n}\n.canvas-react-number-input-clear:hover {\n color: #6b7280;\n transform: rotate(90deg);\n}\n.canvas-react-number-input-clear-icon,\n.canvas-react-number-input-clear-icon::before {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 8px;\n height: 1.25px;\n margin-top: -0.625px;\n margin-left: -4px;\n border-radius: 999px;\n background: currentColor;\n content: "";\n}\n.canvas-react-number-input-clear-icon {\n transform: rotate(45deg);\n}\n.canvas-react-number-input-clear-icon::before {\n transform: rotate(90deg);\n}\n');
|
|
4324
|
-
var ReactNumberInput =
|
|
4344
|
+
var ReactNumberInput = React.forwardRef(
|
|
4325
4345
|
function ReactNumberInput2(props, ref) {
|
|
4326
4346
|
const {
|
|
4327
4347
|
className,
|
|
@@ -4334,8 +4354,8 @@ var ReactNumberInput = react.forwardRef(
|
|
|
4334
4354
|
value,
|
|
4335
4355
|
...restProps
|
|
4336
4356
|
} = props;
|
|
4337
|
-
const [inputValue, setInputValue] =
|
|
4338
|
-
|
|
4357
|
+
const [inputValue, setInputValue] = React.useState(toDisplayValue(value));
|
|
4358
|
+
React.useEffect(() => {
|
|
4339
4359
|
setInputValue(toDisplayValue(value));
|
|
4340
4360
|
}, [value]);
|
|
4341
4361
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4392,7 +4412,7 @@ function toDisplayValue(value) {
|
|
|
4392
4412
|
|
|
4393
4413
|
// src/components/input-number/style.css
|
|
4394
4414
|
styleInject('@import "../../styles/variables.css";\n.canvas-react-input-number {\n box-sizing: border-box;\n display: inline-flex;\n align-items: stretch;\n width: 100%;\n min-width: 0;\n height: var(--canvas-react-control-height);\n border: 1px solid var(--canvas-react-color-border);\n border-radius: var(--canvas-react-radius-sm);\n background: var(--canvas-react-color-bg);\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n overflow: hidden;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease,\n background-color 0.2s ease;\n}\n.canvas-react-input-number:hover {\n border-color: var(--canvas-react-color-primary-hover);\n}\n.canvas-react-input-number-focused {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-input-number-disabled {\n background: #fafafa;\n color: #9ca3af;\n cursor: not-allowed;\n}\n.canvas-react-input-number-handler {\n position: relative;\n display: flex;\n flex: 0 0 28px;\n align-items: center;\n justify-content: center;\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n color: var(--canvas-react-color-text-muted);\n cursor: pointer;\n transition: color 0.16s ease, background-color 0.16s ease;\n}\n.canvas-react-input-number-handler-down {\n border-right: 1px solid var(--canvas-react-color-border);\n}\n.canvas-react-input-number-handler-up {\n border-left: 1px solid var(--canvas-react-color-border);\n}\n.canvas-react-input-number-handler:hover:not(:disabled) {\n color: var(--canvas-react-color-primary);\n background: rgba(22, 119, 255, 0.06);\n}\n.canvas-react-input-number-handler:disabled {\n color: #c4c7cf;\n cursor: not-allowed;\n}\n.canvas-react-input-number-handler-icon {\n position: relative;\n display: block;\n width: 10px;\n height: 10px;\n}\n.canvas-react-input-number-handler-icon::before,\n.canvas-react-input-number-handler-icon::after {\n content: "";\n position: absolute;\n top: 50%;\n left: 50%;\n background: currentColor;\n border-radius: 1px;\n transform: translate(-50%, -50%);\n}\n.canvas-react-input-number-handler-icon::before {\n width: 10px;\n height: 1.5px;\n}\n.canvas-react-input-number-handler-up .canvas-react-input-number-handler-icon::after {\n width: 1.5px;\n height: 10px;\n}\n.canvas-react-input-number-input-wrap {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n min-width: 0;\n height: 100%;\n}\n.canvas-react-input-number-input {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n height: 100%;\n padding: 0 8px;\n border: none;\n background: transparent;\n color: inherit;\n font-size: inherit;\n outline: none;\n text-align: center;\n appearance: textfield;\n -moz-appearance: textfield;\n}\n.canvas-react-input-number-input::placeholder {\n color: #9ca3af;\n}\n.canvas-react-input-number-input::-webkit-outer-spin-button,\n.canvas-react-input-number-input::-webkit-inner-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n.canvas-react-input-number-addon {\n flex: 0 0 auto;\n padding-right: 8px;\n color: var(--canvas-react-color-text-muted);\n font-size: 12px;\n line-height: 1;\n user-select: none;\n}\n');
|
|
4395
|
-
var ReactInputNumber =
|
|
4415
|
+
var ReactInputNumber = React.forwardRef(
|
|
4396
4416
|
function ReactInputNumber2(props, ref) {
|
|
4397
4417
|
const {
|
|
4398
4418
|
addonAfter,
|
|
@@ -4415,11 +4435,11 @@ var ReactInputNumber = react.forwardRef(
|
|
|
4415
4435
|
...restProps
|
|
4416
4436
|
} = props;
|
|
4417
4437
|
const isControlled = value !== void 0;
|
|
4418
|
-
const [innerValue, setInnerValue] =
|
|
4438
|
+
const [innerValue, setInnerValue] = React.useState(
|
|
4419
4439
|
isControlled ? value ?? null : defaultValue
|
|
4420
4440
|
);
|
|
4421
4441
|
const currentValue = isControlled ? value ?? null : innerValue;
|
|
4422
|
-
const [draftText, setDraftText] =
|
|
4442
|
+
const [draftText, setDraftText] = React.useState(
|
|
4423
4443
|
formatDisplayValue(
|
|
4424
4444
|
currentValue,
|
|
4425
4445
|
formatter,
|
|
@@ -4427,12 +4447,12 @@ var ReactInputNumber = react.forwardRef(
|
|
|
4427
4447
|
step
|
|
4428
4448
|
)
|
|
4429
4449
|
);
|
|
4430
|
-
const [focused, setFocused] =
|
|
4431
|
-
const resolvedPrecision =
|
|
4450
|
+
const [focused, setFocused] = React.useState(false);
|
|
4451
|
+
const resolvedPrecision = React.useMemo(
|
|
4432
4452
|
() => resolvePrecision(precision, step),
|
|
4433
4453
|
[precision, step]
|
|
4434
4454
|
);
|
|
4435
|
-
|
|
4455
|
+
React.useEffect(() => {
|
|
4436
4456
|
if (!focused) {
|
|
4437
4457
|
setDraftText(
|
|
4438
4458
|
formatDisplayValue(currentValue, formatter, resolvedPrecision, step)
|
|
@@ -4624,7 +4644,7 @@ function formatDisplayValue(value, formatter, precision, step) {
|
|
|
4624
4644
|
|
|
4625
4645
|
// src/components/virtual-list/style.css
|
|
4626
4646
|
styleInject('@import "../../styles/variables.css";\n.canvas-react-virtual-list {\n position: relative;\n overflow-y: auto;\n}\n.canvas-react-virtual-list-inner {\n position: relative;\n min-width: 100%;\n}\n.canvas-react-virtual-list-empty {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 0 11px;\n color: #9ca3af;\n font-size: var(--canvas-react-font-size);\n}\n');
|
|
4627
|
-
var ReactVirtualList =
|
|
4647
|
+
var ReactVirtualList = React.forwardRef(function ReactVirtualListInner(props, ref) {
|
|
4628
4648
|
const {
|
|
4629
4649
|
className,
|
|
4630
4650
|
empty,
|
|
@@ -4638,19 +4658,19 @@ var ReactVirtualList = react.forwardRef(function ReactVirtualListInner(props, re
|
|
|
4638
4658
|
style,
|
|
4639
4659
|
virtual = true
|
|
4640
4660
|
} = props;
|
|
4641
|
-
const hostRef =
|
|
4642
|
-
const [scrollTop, setScrollTop] =
|
|
4661
|
+
const hostRef = React.useRef(null);
|
|
4662
|
+
const [scrollTop, setScrollTop] = React.useState(0);
|
|
4643
4663
|
const useVirtual = virtual && items.length * itemHeight > height;
|
|
4644
4664
|
const startIndex = useVirtual ? Math.max(0, Math.floor(scrollTop / itemHeight) - overscan) : 0;
|
|
4645
4665
|
const endIndex = useVirtual ? Math.min(
|
|
4646
4666
|
items.length - 1,
|
|
4647
4667
|
Math.ceil((scrollTop + height) / itemHeight) + overscan
|
|
4648
4668
|
) : items.length - 1;
|
|
4649
|
-
const visibleItems =
|
|
4669
|
+
const visibleItems = React.useMemo(
|
|
4650
4670
|
() => items.slice(startIndex, endIndex + 1),
|
|
4651
4671
|
[endIndex, items, startIndex]
|
|
4652
4672
|
);
|
|
4653
|
-
|
|
4673
|
+
React.useImperativeHandle(ref, () => ({
|
|
4654
4674
|
scrollToIndex: (index) => {
|
|
4655
4675
|
const element = hostRef.current;
|
|
4656
4676
|
if (!element || index < 0) {
|
|
@@ -4709,7 +4729,7 @@ var ReactVirtualList = react.forwardRef(function ReactVirtualListInner(props, re
|
|
|
4709
4729
|
|
|
4710
4730
|
// src/components/select/style.css
|
|
4711
4731
|
styleInject('@import "../../styles/variables.css";\n.canvas-react-select-wrap {\n position: relative;\n display: inline-flex;\n width: 100%;\n height: 100%;\n}\n.canvas-react-select {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n height: var(--canvas-react-control-height);\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\n border: 1px solid var(--canvas-react-color-border);\n border-radius: var(--canvas-react-radius-sm);\n background: var(--canvas-react-color-bg);\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n outline: none;\n cursor: pointer;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease,\n background-color 0.2s ease;\n}\n.canvas-react-select-input-wrap {\n flex: 1 1 auto;\n width: 100%;\n height: 100%;\n border: none;\n background: transparent;\n box-shadow: none;\n}\n.canvas-react-select .canvas-react-input-affix-wrapper {\n height: 100%;\n min-height: 0;\n}\n.canvas-react-select-input-wrap:hover,\n.canvas-react-select-input-wrap:focus-within {\n border-color: transparent;\n box-shadow: none;\n}\n.canvas-react-select-input {\n width: 100%;\n min-width: 0;\n height: 100%;\n padding: 0;\n line-height: normal;\n}\n.canvas-react-select-input::placeholder {\n color: #9ca3af;\n}\n.canvas-react-select:hover {\n border-color: var(--canvas-react-color-primary-hover);\n}\n.canvas-react-select:focus {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-select-open {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-select-disabled {\n color: #9ca3af;\n background: #fafafa;\n cursor: not-allowed;\n}\n.canvas-react-select-actions {\n position: relative;\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 1em;\n min-width: 12px;\n height: 1em;\n min-height: 12px;\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\n}\n.canvas-react-select-arrow {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 0.5em;\n height: 0.5em;\n min-width: 6px;\n min-height: 6px;\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\n transform: translate(-50%, -58%) rotate(45deg);\n opacity: 1;\n transition:\n opacity 0.18s ease,\n transform 0.18s ease,\n border-color 0.18s ease;\n}\n.canvas-react-select:hover .canvas-react-select-arrow,\n.canvas-react-select-open .canvas-react-select-arrow {\n border-color: #6b7280;\n}\n.canvas-react-select-arrow-open {\n border-color: #6b7280;\n transform: translate(-50%, -42%) rotate(225deg);\n}\n.canvas-react-select-clear {\n position: absolute;\n top: 50%;\n left: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n padding: 0;\n border: none;\n background: transparent;\n color: #9ca3af;\n opacity: 0;\n pointer-events: none;\n cursor: pointer;\n transform: translate(-50%, -50%) rotate(0deg);\n transition:\n color 0.2s ease,\n opacity 0.2s ease,\n transform 0.18s ease;\n}\n.canvas-react-select-clear:hover {\n color: #6b7280;\n transform: translate(-50%, -50%) rotate(90deg);\n}\n.canvas-react-select:hover .canvas-react-select-clear,\n.canvas-react-select-open .canvas-react-select-clear,\n.canvas-react-select:focus-within .canvas-react-select-clear {\n opacity: 1;\n pointer-events: auto;\n}\n.canvas-react-select:hover .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-select-open .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-select:focus-within .canvas-react-select-actions-clearable .canvas-react-select-arrow {\n opacity: 0;\n}\n.canvas-react-select-clear-icon,\n.canvas-react-select-clear-icon::before {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 8px;\n height: 1.25px;\n margin-top: -0.625px;\n margin-left: -4px;\n border-radius: 999px;\n background: currentColor;\n content: "";\n}\n.canvas-react-select-clear-icon {\n transform: rotate(45deg);\n}\n.canvas-react-select-clear-icon::before {\n transform: rotate(90deg);\n}\n.canvas-react-select-dropdown {\n padding: 4px;\n}\n.canvas-react-select-list {\n position: relative;\n overflow-y: auto;\n}\n.canvas-react-select-list-inner {\n position: relative;\n}\n.canvas-react-select-option {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n padding: 0 11px;\n border-radius: var(--canvas-react-radius-sm);\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n cursor: pointer;\n}\n.canvas-react-select-option:hover,\n.canvas-react-select-option-active {\n background: var(--canvas-react-color-bg-hover);\n}\n.canvas-react-select-option-selected {\n background: var(--canvas-react-color-bg-active);\n color: var(--canvas-react-color-primary);\n}\n.canvas-react-select-option-disabled {\n color: #9ca3af;\n cursor: not-allowed;\n}\n.canvas-react-select-empty {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 0 11px;\n color: #9ca3af;\n font-size: var(--canvas-react-font-size);\n}\n');
|
|
4712
|
-
var ReactSelect =
|
|
4732
|
+
var ReactSelect = React.forwardRef(
|
|
4713
4733
|
function ReactSelect2(props, ref) {
|
|
4714
4734
|
const {
|
|
4715
4735
|
autoFocus,
|
|
@@ -4732,18 +4752,18 @@ var ReactSelect = react.forwardRef(
|
|
|
4732
4752
|
virtual = true,
|
|
4733
4753
|
...restProps
|
|
4734
4754
|
} = props;
|
|
4735
|
-
const triggerRef =
|
|
4736
|
-
const inputRef =
|
|
4737
|
-
const listRef =
|
|
4738
|
-
const skipFocusOpenRef =
|
|
4739
|
-
const [open, setOpen] =
|
|
4740
|
-
const selectedIndex =
|
|
4755
|
+
const triggerRef = React.useRef(null);
|
|
4756
|
+
const inputRef = React.useRef(null);
|
|
4757
|
+
const listRef = React.useRef(null);
|
|
4758
|
+
const skipFocusOpenRef = React.useRef(false);
|
|
4759
|
+
const [open, setOpen] = React.useState(false);
|
|
4760
|
+
const selectedIndex = React.useMemo(
|
|
4741
4761
|
() => options.findIndex((option) => String(option.value) === String(value ?? "")),
|
|
4742
4762
|
[options, value]
|
|
4743
4763
|
);
|
|
4744
4764
|
const selectedOption = selectedIndex >= 0 ? options[selectedIndex] : void 0;
|
|
4745
|
-
const [keyword, setKeyword] =
|
|
4746
|
-
const filteredOptions =
|
|
4765
|
+
const [keyword, setKeyword] = React.useState(selectedOption?.label ?? "");
|
|
4766
|
+
const filteredOptions = React.useMemo(() => {
|
|
4747
4767
|
if (!showSearch) {
|
|
4748
4768
|
return options;
|
|
4749
4769
|
}
|
|
@@ -4755,27 +4775,27 @@ var ReactSelect = react.forwardRef(
|
|
|
4755
4775
|
return option.label.toLowerCase().includes(search) || String(option.value).toLowerCase().includes(search);
|
|
4756
4776
|
});
|
|
4757
4777
|
}, [keyword, options]);
|
|
4758
|
-
const [activeIndex, setActiveIndex] =
|
|
4778
|
+
const [activeIndex, setActiveIndex] = React.useState(() => {
|
|
4759
4779
|
return selectedIndex >= 0 ? selectedIndex : 0;
|
|
4760
4780
|
});
|
|
4761
|
-
|
|
4762
|
-
|
|
4781
|
+
React.useImperativeHandle(ref, () => inputRef.current);
|
|
4782
|
+
React.useEffect(() => {
|
|
4763
4783
|
if (autoFocus) {
|
|
4764
4784
|
inputRef.current?.focus();
|
|
4765
4785
|
}
|
|
4766
4786
|
}, [autoFocus]);
|
|
4767
|
-
|
|
4787
|
+
React.useEffect(() => {
|
|
4768
4788
|
if (!open) {
|
|
4769
4789
|
setKeyword(selectedOption?.label ?? "");
|
|
4770
4790
|
}
|
|
4771
4791
|
}, [open, selectedOption]);
|
|
4772
|
-
|
|
4792
|
+
React.useEffect(() => {
|
|
4773
4793
|
const nextIndex = filteredOptions.findIndex(
|
|
4774
4794
|
(option) => String(option.value) === String(value ?? "")
|
|
4775
4795
|
);
|
|
4776
4796
|
setActiveIndex(nextIndex >= 0 ? nextIndex : 0);
|
|
4777
4797
|
}, [filteredOptions, value]);
|
|
4778
|
-
|
|
4798
|
+
React.useEffect(() => {
|
|
4779
4799
|
if (!open) {
|
|
4780
4800
|
return;
|
|
4781
4801
|
}
|
|
@@ -5041,14 +5061,14 @@ function ReactPagination(props) {
|
|
|
5041
5061
|
simple,
|
|
5042
5062
|
total
|
|
5043
5063
|
} = props;
|
|
5044
|
-
const [quickValue, setQuickValue] =
|
|
5064
|
+
const [quickValue, setQuickValue] = React.useState("");
|
|
5045
5065
|
const totalPages = Math.max(1, Math.ceil(total / pageSize));
|
|
5046
5066
|
const safeCurrent = clampPage(current, totalPages);
|
|
5047
5067
|
const range = total === 0 ? [0, 0] : [
|
|
5048
5068
|
(safeCurrent - 1) * pageSize + 1,
|
|
5049
5069
|
Math.min(safeCurrent * pageSize, total)
|
|
5050
5070
|
];
|
|
5051
|
-
const pages =
|
|
5071
|
+
const pages = React.useMemo(
|
|
5052
5072
|
() => buildPageItems(safeCurrent, totalPages, showLessItems),
|
|
5053
5073
|
[safeCurrent, totalPages, showLessItems]
|
|
5054
5074
|
);
|
|
@@ -5195,6 +5215,16 @@ function clampPage(page, totalPages) {
|
|
|
5195
5215
|
}
|
|
5196
5216
|
return Math.min(Math.max(1, Math.trunc(page)), totalPages);
|
|
5197
5217
|
}
|
|
5218
|
+
var compatibleIdSeed = 0;
|
|
5219
|
+
function useCompatibleId(prefix = "canvas-react-id") {
|
|
5220
|
+
const nativeUseId = React__namespace.useId;
|
|
5221
|
+
const fallbackIdRef = React__namespace.useRef();
|
|
5222
|
+
if (!fallbackIdRef.current) {
|
|
5223
|
+
compatibleIdSeed += 1;
|
|
5224
|
+
fallbackIdRef.current = `${prefix}-${compatibleIdSeed}`;
|
|
5225
|
+
}
|
|
5226
|
+
return nativeUseId ? nativeUseId() : fallbackIdRef.current;
|
|
5227
|
+
}
|
|
5198
5228
|
|
|
5199
5229
|
// src/components/popconfirm/style.css
|
|
5200
5230
|
styleInject('@import "../../styles/variables.css";\n.canvas-react-popconfirm-trigger {\n display: inline-flex;\n max-width: 100%;\n}\n.canvas-react-popconfirm-trigger-disabled {\n cursor: not-allowed;\n}\n.canvas-react-popconfirm-popup {\n overflow: visible;\n}\n.canvas-react-popconfirm {\n position: relative;\n box-sizing: border-box;\n width: max-content;\n min-width: 180px;\n max-width: 320px;\n padding: 12px;\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n line-height: 1.5;\n}\n.canvas-react-popconfirm-arrow {\n position: absolute;\n z-index: 1;\n box-sizing: border-box;\n width: 10px;\n height: 10px;\n border: 0;\n background: var(--canvas-react-color-bg, #ffffff);\n pointer-events: none;\n transform: rotate(45deg);\n}\n.canvas-react-popup[data-placement^=bottom] .canvas-react-popconfirm-arrow {\n top: -5px;\n border-top: 1px solid var(--canvas-react-color-border, #d9d9d9);\n border-left: 1px solid var(--canvas-react-color-border, #d9d9d9);\n}\n.canvas-react-popup[data-placement^=top] .canvas-react-popconfirm-arrow {\n bottom: -5px;\n border-right: 1px solid var(--canvas-react-color-border, #d9d9d9);\n border-bottom: 1px solid var(--canvas-react-color-border, #d9d9d9);\n}\n.canvas-react-popup[data-placement$=Left] .canvas-react-popconfirm-arrow {\n left: 24px;\n}\n.canvas-react-popup[data-placement$=Right] .canvas-react-popconfirm-arrow {\n right: 24px;\n}\n.canvas-react-popup[data-placement^=left] .canvas-react-popconfirm-arrow {\n right: -5px;\n border-top: 1px solid var(--canvas-react-color-border, #d9d9d9);\n border-right: 1px solid var(--canvas-react-color-border, #d9d9d9);\n}\n.canvas-react-popup[data-placement^=right] .canvas-react-popconfirm-arrow {\n left: -5px;\n border-bottom: 1px solid var(--canvas-react-color-border, #d9d9d9);\n border-left: 1px solid var(--canvas-react-color-border, #d9d9d9);\n}\n.canvas-react-popup[data-placement$=Top] .canvas-react-popconfirm-arrow {\n top: 18px;\n}\n.canvas-react-popup[data-placement$=Bottom] .canvas-react-popconfirm-arrow {\n bottom: 18px;\n}\n.canvas-react-popconfirm-message {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n.canvas-react-popconfirm-icon {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-top: 2px;\n color: #faad14;\n font-size: 12px;\n line-height: 1;\n}\n.canvas-react-popconfirm-default-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n background: #faad14;\n color: #ffffff;\n font-size: 11px;\n font-weight: 700;\n line-height: 1;\n}\n.canvas-react-popconfirm-text {\n min-width: 0;\n}\n.canvas-react-popconfirm-title {\n color: var(--canvas-react-color-text);\n font-weight: 500;\n word-break: break-word;\n}\n.canvas-react-popconfirm-description {\n margin-top: 4px;\n color: var(--canvas-react-color-text-muted);\n word-break: break-word;\n}\n.canvas-react-popconfirm-actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 12px;\n}\n.canvas-react-popconfirm-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n height: 26px;\n min-width: 48px;\n padding: 0 10px;\n border: 1px solid var(--canvas-react-color-border);\n border-radius: var(--canvas-react-radius-sm);\n background: var(--canvas-react-color-bg);\n color: var(--canvas-react-color-text);\n font-size: 12px;\n line-height: 1;\n white-space: nowrap;\n cursor: pointer;\n transition:\n border-color 0.18s ease,\n background-color 0.18s ease,\n color 0.18s ease,\n opacity 0.18s ease;\n}\n.canvas-react-popconfirm-button:hover {\n border-color: var(--canvas-react-color-primary-hover);\n color: var(--canvas-react-color-primary-hover);\n}\n.canvas-react-popconfirm-button-primary {\n border-color: var(--canvas-react-color-primary);\n background: var(--canvas-react-color-primary);\n color: #ffffff;\n}\n.canvas-react-popconfirm-button-primary:hover {\n border-color: var(--canvas-react-color-primary-hover);\n background: var(--canvas-react-color-primary-hover);\n color: #ffffff;\n}\n.canvas-react-popconfirm-button:disabled {\n opacity: 0.56;\n cursor: not-allowed;\n}\n.canvas-react-popconfirm-button:disabled:hover {\n border-color: var(--canvas-react-color-border);\n color: var(--canvas-react-color-text);\n}\n.canvas-react-popconfirm-button-primary:disabled:hover {\n border-color: var(--canvas-react-color-primary);\n background: var(--canvas-react-color-primary);\n color: #ffffff;\n}\n.canvas-react-popconfirm-loading {\n width: 12px;\n height: 12px;\n border: 2px solid rgba(255, 255, 255, 0.45);\n border-top-color: #ffffff;\n border-radius: 50%;\n animation: canvas-react-popconfirm-loading 0.8s linear infinite;\n}\n@keyframes canvas-react-popconfirm-loading {\n to {\n transform: rotate(360deg);\n }\n}\n');
|
|
@@ -5224,11 +5254,11 @@ function ReactPopconfirm(props) {
|
|
|
5224
5254
|
title,
|
|
5225
5255
|
zIndex
|
|
5226
5256
|
} = props;
|
|
5227
|
-
const triggerRef =
|
|
5228
|
-
const [innerOpen, setInnerOpen] =
|
|
5229
|
-
const [innerConfirmLoading, setInnerConfirmLoading] =
|
|
5230
|
-
const titleId = react
|
|
5231
|
-
const descriptionId = react
|
|
5257
|
+
const triggerRef = React.useRef(null);
|
|
5258
|
+
const [innerOpen, setInnerOpen] = React.useState(defaultOpen);
|
|
5259
|
+
const [innerConfirmLoading, setInnerConfirmLoading] = React.useState(false);
|
|
5260
|
+
const titleId = useCompatibleId("canvas-react-popconfirm-title");
|
|
5261
|
+
const descriptionId = useCompatibleId("canvas-react-popconfirm-description");
|
|
5232
5262
|
const controlled = open !== void 0;
|
|
5233
5263
|
const mergedOpen = controlled ? Boolean(open) : innerOpen;
|
|
5234
5264
|
const popupOpen = mergedOpen && !disabled;
|
|
@@ -5245,7 +5275,7 @@ function ReactPopconfirm(props) {
|
|
|
5245
5275
|
disabled: cancelButtonDisabled,
|
|
5246
5276
|
...restCancelButtonProps
|
|
5247
5277
|
} = cancelButtonProps ?? {};
|
|
5248
|
-
|
|
5278
|
+
React.useEffect(() => {
|
|
5249
5279
|
if (!disabled || !mergedOpen) {
|
|
5250
5280
|
return;
|
|
5251
5281
|
}
|
|
@@ -5423,7 +5453,7 @@ function isPromiseLike(value) {
|
|
|
5423
5453
|
// src/components/quarter/style.css
|
|
5424
5454
|
styleInject('@import "../year/style.css";\n.canvas-react-quarter-grid {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px 8px;\n}\n.canvas-react-quarter-cell {\n height: 56px;\n font-size: 16px;\n font-weight: 600;\n}\n');
|
|
5425
5455
|
var QUARTERS = ["Q1", "Q2", "Q3", "Q4"];
|
|
5426
|
-
var ReactQuarterPicker =
|
|
5456
|
+
var ReactQuarterPicker = React.forwardRef(
|
|
5427
5457
|
function ReactQuarterPicker2(props, ref) {
|
|
5428
5458
|
const {
|
|
5429
5459
|
autoFocus,
|
|
@@ -5441,35 +5471,35 @@ var ReactQuarterPicker = react.forwardRef(
|
|
|
5441
5471
|
value,
|
|
5442
5472
|
...restProps
|
|
5443
5473
|
} = props;
|
|
5444
|
-
const triggerRef =
|
|
5445
|
-
const inputRef =
|
|
5446
|
-
const popupRef =
|
|
5447
|
-
const skipFocusOpenRef =
|
|
5448
|
-
const [open, setOpen] =
|
|
5449
|
-
const [mode, setMode] =
|
|
5450
|
-
const parsedValue =
|
|
5451
|
-
const [panelYear, setPanelYear] =
|
|
5474
|
+
const triggerRef = React.useRef(null);
|
|
5475
|
+
const inputRef = React.useRef(null);
|
|
5476
|
+
const popupRef = React.useRef(null);
|
|
5477
|
+
const skipFocusOpenRef = React.useRef(false);
|
|
5478
|
+
const [open, setOpen] = React.useState(false);
|
|
5479
|
+
const [mode, setMode] = React.useState("quarter");
|
|
5480
|
+
const parsedValue = React.useMemo(() => parseQuarterValue(value), [value]);
|
|
5481
|
+
const [panelYear, setPanelYear] = React.useState(
|
|
5452
5482
|
() => parsedValue?.year ?? (/* @__PURE__ */ new Date()).getFullYear()
|
|
5453
5483
|
);
|
|
5454
|
-
const yearPanelStart =
|
|
5455
|
-
const decadePanelStart =
|
|
5484
|
+
const yearPanelStart = React.useMemo(() => resolveDecadeStart5(panelYear), [panelYear]);
|
|
5485
|
+
const decadePanelStart = React.useMemo(() => {
|
|
5456
5486
|
return Math.floor(yearPanelStart / 100) * 100;
|
|
5457
5487
|
}, [yearPanelStart]);
|
|
5458
|
-
const yearItems =
|
|
5488
|
+
const yearItems = React.useMemo(() => {
|
|
5459
5489
|
return Array.from({ length: 12 }, (_, index) => yearPanelStart - 1 + index);
|
|
5460
5490
|
}, [yearPanelStart]);
|
|
5461
|
-
const decadeItems =
|
|
5491
|
+
const decadeItems = React.useMemo(() => {
|
|
5462
5492
|
return Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10);
|
|
5463
5493
|
}, [decadePanelStart]);
|
|
5464
5494
|
const displayValue = parsedValue == null ? "" : `${parsedValue.year}-${parsedValue.quarter}`;
|
|
5465
5495
|
const showClear = allowClear && !disabled && displayValue.length > 0;
|
|
5466
|
-
|
|
5467
|
-
|
|
5496
|
+
React.useImperativeHandle(ref, () => inputRef.current);
|
|
5497
|
+
React.useEffect(() => {
|
|
5468
5498
|
if (autoFocus) {
|
|
5469
5499
|
inputRef.current?.focus();
|
|
5470
5500
|
}
|
|
5471
5501
|
}, [autoFocus]);
|
|
5472
|
-
|
|
5502
|
+
React.useEffect(() => {
|
|
5473
5503
|
if (!open) {
|
|
5474
5504
|
return;
|
|
5475
5505
|
}
|
|
@@ -5804,7 +5834,7 @@ function parseQuarterValue(value) {
|
|
|
5804
5834
|
function resolveDecadeStart5(year) {
|
|
5805
5835
|
return Math.floor(year / 10) * 10;
|
|
5806
5836
|
}
|
|
5807
|
-
var ReactTimePicker =
|
|
5837
|
+
var ReactTimePicker = React.forwardRef(
|
|
5808
5838
|
function ReactTimePicker2(props, ref) {
|
|
5809
5839
|
const {
|
|
5810
5840
|
autoFocus,
|
|
@@ -5822,22 +5852,22 @@ var ReactTimePicker = react.forwardRef(
|
|
|
5822
5852
|
value,
|
|
5823
5853
|
...restProps
|
|
5824
5854
|
} = props;
|
|
5825
|
-
const triggerRef =
|
|
5826
|
-
const inputRef =
|
|
5827
|
-
const popupRef =
|
|
5828
|
-
const skipFocusOpenRef =
|
|
5829
|
-
const [open, setOpen] =
|
|
5830
|
-
const [draftValue, setDraftValue] =
|
|
5831
|
-
const parsedValue =
|
|
5855
|
+
const triggerRef = React.useRef(null);
|
|
5856
|
+
const inputRef = React.useRef(null);
|
|
5857
|
+
const popupRef = React.useRef(null);
|
|
5858
|
+
const skipFocusOpenRef = React.useRef(false);
|
|
5859
|
+
const [open, setOpen] = React.useState(false);
|
|
5860
|
+
const [draftValue, setDraftValue] = React.useState(value ?? "");
|
|
5861
|
+
const parsedValue = React.useMemo(() => parseTimeValue(value), [value]);
|
|
5832
5862
|
const displayValue = parsedValue ? formatTimeValue(parsedValue) : value ?? "";
|
|
5833
5863
|
const showClear = allowClear && !disabled && typeof value === "string" && value.trim().length > 0;
|
|
5834
|
-
|
|
5835
|
-
|
|
5864
|
+
React.useImperativeHandle(ref, () => inputRef.current);
|
|
5865
|
+
React.useEffect(() => {
|
|
5836
5866
|
if (autoFocus) {
|
|
5837
5867
|
inputRef.current?.focus();
|
|
5838
5868
|
}
|
|
5839
5869
|
}, [autoFocus]);
|
|
5840
|
-
|
|
5870
|
+
React.useEffect(() => {
|
|
5841
5871
|
setDraftValue(value ?? "");
|
|
5842
5872
|
}, [value]);
|
|
5843
5873
|
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${REACT_COMPONENT_PREFIX}-time-wrap`, children: [
|
|
@@ -6042,7 +6072,7 @@ function handleInputBlur4(params) {
|
|
|
6042
6072
|
setOpen(false);
|
|
6043
6073
|
onBlur?.(event);
|
|
6044
6074
|
}
|
|
6045
|
-
var ReactTimeRangePicker =
|
|
6075
|
+
var ReactTimeRangePicker = React.forwardRef(function ReactTimeRangePicker2(props, ref) {
|
|
6046
6076
|
const {
|
|
6047
6077
|
autoFocus,
|
|
6048
6078
|
className,
|
|
@@ -6059,23 +6089,23 @@ var ReactTimeRangePicker = react.forwardRef(function ReactTimeRangePicker2(props
|
|
|
6059
6089
|
showArrow = true,
|
|
6060
6090
|
...restProps
|
|
6061
6091
|
} = props;
|
|
6062
|
-
const triggerRef =
|
|
6063
|
-
const startInputRef =
|
|
6064
|
-
const endInputRef =
|
|
6065
|
-
const popupRef =
|
|
6066
|
-
const [open, setOpen] =
|
|
6067
|
-
const [activePart, setActivePart] =
|
|
6068
|
-
const skipFocusOpenRef =
|
|
6069
|
-
const [draftRange, setDraftRange] =
|
|
6092
|
+
const triggerRef = React.useRef(null);
|
|
6093
|
+
const startInputRef = React.useRef(null);
|
|
6094
|
+
const endInputRef = React.useRef(null);
|
|
6095
|
+
const popupRef = React.useRef(null);
|
|
6096
|
+
const [open, setOpen] = React.useState(false);
|
|
6097
|
+
const [activePart, setActivePart] = React.useState("start");
|
|
6098
|
+
const skipFocusOpenRef = React.useRef(false);
|
|
6099
|
+
const [draftRange, setDraftRange] = React.useState(
|
|
6070
6100
|
() => parseTimeRangeValue(value)
|
|
6071
6101
|
);
|
|
6072
|
-
|
|
6073
|
-
|
|
6102
|
+
React.useImperativeHandle(ref, () => startInputRef.current);
|
|
6103
|
+
React.useEffect(() => {
|
|
6074
6104
|
if (autoFocus) {
|
|
6075
6105
|
startInputRef.current?.focus();
|
|
6076
6106
|
}
|
|
6077
6107
|
}, [autoFocus]);
|
|
6078
|
-
|
|
6108
|
+
React.useEffect(() => {
|
|
6079
6109
|
setDraftRange(parseTimeRangeValue(value));
|
|
6080
6110
|
}, [rangeSeparator, value]);
|
|
6081
6111
|
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${REACT_COMPONENT_PREFIX}-time-wrap`, children: [
|
|
@@ -6362,7 +6392,7 @@ function compareTimeValue(left, right) {
|
|
|
6362
6392
|
const rightSeconds = Number(rightValue.hour) * 3600 + Number(rightValue.minute) * 60 + Number(rightValue.second);
|
|
6363
6393
|
return leftSeconds - rightSeconds;
|
|
6364
6394
|
}
|
|
6365
|
-
var ReactYearPicker =
|
|
6395
|
+
var ReactYearPicker = React.forwardRef(
|
|
6366
6396
|
function ReactYearPicker2(props, ref) {
|
|
6367
6397
|
const {
|
|
6368
6398
|
autoFocus,
|
|
@@ -6380,34 +6410,34 @@ var ReactYearPicker = react.forwardRef(
|
|
|
6380
6410
|
value,
|
|
6381
6411
|
...restProps
|
|
6382
6412
|
} = props;
|
|
6383
|
-
const triggerRef =
|
|
6384
|
-
const inputRef =
|
|
6385
|
-
const popupRef =
|
|
6386
|
-
const skipFocusOpenRef =
|
|
6387
|
-
const [open, setOpen] =
|
|
6388
|
-
const [mode, setMode] =
|
|
6389
|
-
const selectedYear =
|
|
6390
|
-
const [panelStartYear, setPanelStartYear] =
|
|
6413
|
+
const triggerRef = React.useRef(null);
|
|
6414
|
+
const inputRef = React.useRef(null);
|
|
6415
|
+
const popupRef = React.useRef(null);
|
|
6416
|
+
const skipFocusOpenRef = React.useRef(false);
|
|
6417
|
+
const [open, setOpen] = React.useState(false);
|
|
6418
|
+
const [mode, setMode] = React.useState("year");
|
|
6419
|
+
const selectedYear = React.useMemo(() => parseYearValue(value), [value]);
|
|
6420
|
+
const [panelStartYear, setPanelStartYear] = React.useState(
|
|
6391
6421
|
() => resolveDecadeStart6(selectedYear ?? (/* @__PURE__ */ new Date()).getFullYear())
|
|
6392
6422
|
);
|
|
6393
6423
|
const displayValue = selectedYear == null ? "" : String(selectedYear);
|
|
6394
6424
|
const showClear = allowClear && !disabled && displayValue.length > 0;
|
|
6395
|
-
const yearItems =
|
|
6425
|
+
const yearItems = React.useMemo(() => {
|
|
6396
6426
|
return Array.from({ length: 12 }, (_, index) => panelStartYear - 1 + index);
|
|
6397
6427
|
}, [panelStartYear]);
|
|
6398
|
-
const decadePanelStart =
|
|
6428
|
+
const decadePanelStart = React.useMemo(() => {
|
|
6399
6429
|
return Math.floor(panelStartYear / 100) * 100;
|
|
6400
6430
|
}, [panelStartYear]);
|
|
6401
|
-
const decadeItems =
|
|
6431
|
+
const decadeItems = React.useMemo(() => {
|
|
6402
6432
|
return Array.from({ length: 12 }, (_, index) => decadePanelStart - 10 + index * 10);
|
|
6403
6433
|
}, [decadePanelStart]);
|
|
6404
|
-
|
|
6405
|
-
|
|
6434
|
+
React.useImperativeHandle(ref, () => inputRef.current);
|
|
6435
|
+
React.useEffect(() => {
|
|
6406
6436
|
if (autoFocus) {
|
|
6407
6437
|
inputRef.current?.focus();
|
|
6408
6438
|
}
|
|
6409
6439
|
}, [autoFocus]);
|
|
6410
|
-
|
|
6440
|
+
React.useEffect(() => {
|
|
6411
6441
|
if (!open) {
|
|
6412
6442
|
return;
|
|
6413
6443
|
}
|