twico-ui 1.45.0 → 1.45.1
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/CHANGELOG.md +13 -0
- package/dist/index.cjs +885 -865
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +96 -10
- package/dist/index.d.ts +96 -10
- package/dist/index.mjs +885 -865
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import * as
|
|
3
|
-
import
|
|
2
|
+
import * as React55 from 'react';
|
|
3
|
+
import React55__default from 'react';
|
|
4
4
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
import { createPortal } from 'react-dom';
|
|
6
6
|
|
|
7
7
|
// components/TwicoProvider.jsx
|
|
8
|
-
var SUPPORTS_STYLE_HOIST = parseInt(String(
|
|
9
|
-
var NonceContext =
|
|
8
|
+
var SUPPORTS_STYLE_HOIST = parseInt(String(React55.version), 10) >= 19;
|
|
9
|
+
var NonceContext = React55.createContext(void 0);
|
|
10
10
|
function useScopedStyles(id, css) {
|
|
11
|
-
const nonce =
|
|
12
|
-
|
|
11
|
+
const nonce = React55.useContext(NonceContext);
|
|
12
|
+
React55.useInsertionEffect(() => {
|
|
13
13
|
if (SUPPORTS_STYLE_HOIST) return;
|
|
14
14
|
if (typeof document === "undefined") return;
|
|
15
15
|
if (!css) return;
|
|
@@ -25,12 +25,12 @@ function useScopedStyles(id, css) {
|
|
|
25
25
|
}
|
|
26
26
|
if (el.textContent !== css) el.textContent = css;
|
|
27
27
|
}, [id, css, nonce]);
|
|
28
|
-
return SUPPORTS_STYLE_HOIST && css ?
|
|
28
|
+
return SUPPORTS_STYLE_HOIST && css ? React55.createElement("style", { href: id, precedence: "twc-ui" }, css) : null;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
// components/TwicoProvider.jsx
|
|
32
32
|
function TwicoProvider({ nonce, children }) {
|
|
33
|
-
return
|
|
33
|
+
return React55__default.createElement(NonceContext.Provider, { value: nonce }, children);
|
|
34
34
|
}
|
|
35
35
|
var GROUPS = { colors: "color", space: "space", radius: "radius", font: "font", shadow: "shadow", motion: "" };
|
|
36
36
|
function createTheme(partial = {}) {
|
|
@@ -50,8 +50,8 @@ function toVars(theme) {
|
|
|
50
50
|
return Object.keys(theme).some((k) => k.startsWith("--")) ? theme : createTheme(theme);
|
|
51
51
|
}
|
|
52
52
|
function ThemeProvider({ theme, mode = "inline", className = "", style, children, ...rest }) {
|
|
53
|
-
const vars =
|
|
54
|
-
const uid =
|
|
53
|
+
const vars = React55__default.useMemo(() => toVars(theme), [theme]);
|
|
54
|
+
const uid = React55__default.useId();
|
|
55
55
|
const scopeId = `twc-theme-${uid.replace(/[^a-zA-Z0-9]/g, "")}`;
|
|
56
56
|
const css = mode === "stylesheet" ? `[data-twc-theme="${scopeId}"] { ${Object.entries(vars).map(([k, v]) => `${k}: ${v};`).join(" ")} }` : "";
|
|
57
57
|
const __twcStyles = useScopedStyles(mode === "stylesheet" ? scopeId : "twc-theme-noop", css);
|
|
@@ -73,7 +73,7 @@ var FORM_CSS = `
|
|
|
73
73
|
.twc-form { display: flex; flex-direction: column; gap: var(--space-4); font-family: var(--font-sans); }
|
|
74
74
|
.twc-form__fieldset { border: 0; margin: 0; padding: 0; min-width: 0; display: flex; flex-direction: column; gap: inherit; }
|
|
75
75
|
`;
|
|
76
|
-
var Form =
|
|
76
|
+
var Form = /* @__PURE__ */ React55__default.forwardRef(function Form2({
|
|
77
77
|
onSubmit,
|
|
78
78
|
preventDefault = true,
|
|
79
79
|
loading = false,
|
|
@@ -104,18 +104,16 @@ var Form = React54__default.forwardRef(function Form2({
|
|
|
104
104
|
}
|
|
105
105
|
);
|
|
106
106
|
});
|
|
107
|
-
Form.displayName = "Form";
|
|
108
107
|
var VH_CSS = `
|
|
109
108
|
.twc-visually-hidden { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0; }
|
|
110
109
|
`;
|
|
111
|
-
var VisuallyHidden =
|
|
110
|
+
var VisuallyHidden = /* @__PURE__ */ React55__default.forwardRef(function VisuallyHidden2({ as: Tag2 = "span", className = "", children, ...rest }, ref) {
|
|
112
111
|
const __twcStyles = useScopedStyles("twc-visually-hidden-styles", VH_CSS);
|
|
113
112
|
return /* @__PURE__ */ jsxs(Tag2, { ref, className: `twc-visually-hidden ${className}`.trim(), ...rest, children: [
|
|
114
113
|
__twcStyles,
|
|
115
114
|
children
|
|
116
115
|
] });
|
|
117
116
|
});
|
|
118
|
-
VisuallyHidden.displayName = "VisuallyHidden";
|
|
119
117
|
|
|
120
118
|
// components/_warn.js
|
|
121
119
|
var seen = /* @__PURE__ */ new Set();
|
|
@@ -128,7 +126,7 @@ function warnOnce(key, message) {
|
|
|
128
126
|
|
|
129
127
|
// components/_overlay.js
|
|
130
128
|
var canUseDOM = typeof window !== "undefined" && typeof document !== "undefined";
|
|
131
|
-
var useIsoLayoutEffect = canUseDOM ?
|
|
129
|
+
var useIsoLayoutEffect = canUseDOM ? React55__default.useLayoutEffect : React55__default.useEffect;
|
|
132
130
|
var FOCUSABLE = 'a[href]:not([tabindex="-1"]), button:not([disabled]):not([tabindex="-1"]), textarea:not([disabled]):not([tabindex="-1"]), input:not([disabled]):not([tabindex="-1"]), select:not([disabled]):not([tabindex="-1"]), [tabindex]:not([tabindex="-1"])';
|
|
133
131
|
var CONTROL_TAGS = "|button|input|select|textarea|";
|
|
134
132
|
var ROLE_OK = "|button|link|menuitem|menuitemcheckbox|menuitemradio|combobox|tab|treeitem|checkbox|switch|option|";
|
|
@@ -142,7 +140,7 @@ function triggerIsControl(el) {
|
|
|
142
140
|
}
|
|
143
141
|
var NATIVE_CONTROL = "button,a[href],summary,input,select,textarea";
|
|
144
142
|
function useTriggerAudit(ref, name) {
|
|
145
|
-
|
|
143
|
+
React55__default.useEffect(() => {
|
|
146
144
|
const el = ref.current && ref.current.firstElementChild;
|
|
147
145
|
if (!el) return;
|
|
148
146
|
if (el.classList.contains("twc-tooltip-wrap")) {
|
|
@@ -157,7 +155,7 @@ function useTriggerAudit(ref, name) {
|
|
|
157
155
|
}, []);
|
|
158
156
|
}
|
|
159
157
|
function useFocusTrap(ref, active = true, { restoreFocus = true, initialFocus } = {}) {
|
|
160
|
-
|
|
158
|
+
React55__default.useEffect(() => {
|
|
161
159
|
if (!active || !canUseDOM) return void 0;
|
|
162
160
|
const node = ref.current;
|
|
163
161
|
if (!node) return void 0;
|
|
@@ -168,7 +166,7 @@ function useFocusTrap(ref, active = true, { restoreFocus = true, initialFocus }
|
|
|
168
166
|
if (restoreFocus && prevFocused && typeof prevFocused.focus === "function") prevFocused.focus();
|
|
169
167
|
};
|
|
170
168
|
}, [active]);
|
|
171
|
-
|
|
169
|
+
React55__default.useEffect(() => {
|
|
172
170
|
if (!active || !canUseDOM) return void 0;
|
|
173
171
|
const node = ref.current;
|
|
174
172
|
const onKey = (e) => {
|
|
@@ -195,7 +193,7 @@ function useFocusTrap(ref, active = true, { restoreFocus = true, initialFocus }
|
|
|
195
193
|
}, [active]);
|
|
196
194
|
}
|
|
197
195
|
function usePortal() {
|
|
198
|
-
return
|
|
196
|
+
return React55__default.useCallback((node) => {
|
|
199
197
|
if (typeof document === "undefined") return null;
|
|
200
198
|
return typeof createPortal === "function" ? createPortal(node, document.body) : node;
|
|
201
199
|
}, []);
|
|
@@ -225,8 +223,8 @@ function useScrollLock(locked = true) {
|
|
|
225
223
|
var __layerSeq = 0;
|
|
226
224
|
var __openLayers = /* @__PURE__ */ new Set();
|
|
227
225
|
function useLayer(active) {
|
|
228
|
-
const depth =
|
|
229
|
-
|
|
226
|
+
const depth = React55__default.useRef(0);
|
|
227
|
+
React55__default.useEffect(() => {
|
|
230
228
|
if (!active) return void 0;
|
|
231
229
|
const d = ++__layerSeq;
|
|
232
230
|
depth.current = d;
|
|
@@ -235,10 +233,10 @@ function useLayer(active) {
|
|
|
235
233
|
__openLayers.delete(d);
|
|
236
234
|
};
|
|
237
235
|
}, [active]);
|
|
238
|
-
return
|
|
236
|
+
return React55__default.useCallback(() => __openLayers.size === 0 || depth.current === Math.max(...__openLayers), []);
|
|
239
237
|
}
|
|
240
238
|
function useInertBackground(ref, active) {
|
|
241
|
-
|
|
239
|
+
React55__default.useEffect(() => {
|
|
242
240
|
if (!active || !canUseDOM) return void 0;
|
|
243
241
|
const node = ref.current;
|
|
244
242
|
if (!node) return void 0;
|
|
@@ -273,7 +271,7 @@ function getColorSchemeScript({ storageKey = "twico-theme", attribute = "class",
|
|
|
273
271
|
return `(function(){try{var k=${k},a=${a},d=${d},t=localStorage.getItem(k);if(t!=='light'){if(t!=='dark'){t=d?d:(window.matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light');}}if(a==='class'){document.documentElement.classList.toggle('dark',t==='dark');}else{document.documentElement.setAttribute(a,t);}}catch(e){}})();`;
|
|
274
272
|
}
|
|
275
273
|
function ColorSchemeScript({ storageKey = "twico-theme", attribute = "class", nonce, defaultScheme }) {
|
|
276
|
-
return
|
|
274
|
+
return React55__default.createElement("script", { nonce }, getColorSchemeScript({ storageKey, attribute, defaultScheme }));
|
|
277
275
|
}
|
|
278
276
|
var KBD_CSS = `
|
|
279
277
|
.twc-kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; padding: 2px 6px;
|
|
@@ -281,14 +279,13 @@ var KBD_CSS = `
|
|
|
281
279
|
background: var(--color-surface-sunken); border: var(--border-thin) solid var(--color-border);
|
|
282
280
|
border-bottom-width: 2px; border-radius: var(--radius-sm); }
|
|
283
281
|
`;
|
|
284
|
-
var Kbd =
|
|
282
|
+
var Kbd = /* @__PURE__ */ React55__default.forwardRef(function Kbd2({ className = "", children, ...rest }, ref) {
|
|
285
283
|
const __twcStyles = useScopedStyles("twc-kbd-styles", KBD_CSS);
|
|
286
284
|
return /* @__PURE__ */ jsxs("kbd", { ref, className: `twc-kbd ${className}`.trim(), ...rest, children: [
|
|
287
285
|
__twcStyles,
|
|
288
286
|
children
|
|
289
287
|
] });
|
|
290
288
|
});
|
|
291
|
-
Kbd.displayName = "Kbd";
|
|
292
289
|
var PRE_CSS = `
|
|
293
290
|
.twc-pre { margin: 0; padding: var(--space-4); overflow-x: auto; max-width: 100%;
|
|
294
291
|
font-family: var(--font-mono); font-size: var(--text-sm); line-height: var(--leading-normal);
|
|
@@ -296,14 +293,13 @@ var PRE_CSS = `
|
|
|
296
293
|
border: var(--border-thin) solid var(--color-border); border-radius: var(--radius-lg);
|
|
297
294
|
white-space: pre; -webkit-overflow-scrolling: touch; }
|
|
298
295
|
`;
|
|
299
|
-
var Pre =
|
|
296
|
+
var Pre = /* @__PURE__ */ React55__default.forwardRef(function Pre2({ className = "", children, ...rest }, ref) {
|
|
300
297
|
const __twcStyles = useScopedStyles("twc-pre-styles", PRE_CSS);
|
|
301
298
|
return /* @__PURE__ */ jsxs("pre", { ref, className: `twc-pre ${className}`.trim(), ...rest, children: [
|
|
302
299
|
__twcStyles,
|
|
303
300
|
children
|
|
304
301
|
] });
|
|
305
302
|
});
|
|
306
|
-
Pre.displayName = "Pre";
|
|
307
303
|
var ANCHOR_CSS = `
|
|
308
304
|
.twc-anchor { color: var(--color-primary-subtle-fg); text-decoration: none; border-radius: var(--radius-sm);
|
|
309
305
|
transition: color var(--duration-fast) var(--ease-standard); }
|
|
@@ -316,7 +312,7 @@ function safeHref(url) {
|
|
|
316
312
|
const s = String(url).replace(/[\x00-\x20]+/g, "").toLowerCase();
|
|
317
313
|
return s.startsWith("javascript:") || s.startsWith("data:") || s.startsWith("vbscript:") ? void 0 : url;
|
|
318
314
|
}
|
|
319
|
-
var Anchor =
|
|
315
|
+
var Anchor = /* @__PURE__ */ React55__default.forwardRef(function Anchor2({ as: Tag2 = "a", href, external = false, className = "", children, ...rest }, ref) {
|
|
320
316
|
const __twcStyles = useScopedStyles("twc-anchor-styles", ANCHOR_CSS);
|
|
321
317
|
const extra = external ? { target: "_blank", rel: "noopener noreferrer" } : {};
|
|
322
318
|
return /* @__PURE__ */ jsxs(Tag2, { ref, className: `twc-anchor ${className}`.trim(), href: Tag2 === "a" ? safeHref(href) : href, ...extra, ...rest, children: [
|
|
@@ -325,14 +321,13 @@ var Anchor = React54__default.forwardRef(function Anchor2({ as: Tag2 = "a", href
|
|
|
325
321
|
external ? /* @__PURE__ */ jsx("span", { className: "twc-anchor__ext", "aria-hidden": "true", children: "\u2197" }) : null
|
|
326
322
|
] });
|
|
327
323
|
});
|
|
328
|
-
Anchor.displayName = "Anchor";
|
|
329
324
|
var LABEL_CSS = `
|
|
330
325
|
.twc-label { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-text); display: inline-flex; gap: 4px; align-items: center; }
|
|
331
326
|
.twc-label[data-size="sm"] { font-size: var(--text-xs); }
|
|
332
327
|
.twc-label[data-size="lg"] { font-size: var(--text-base); }
|
|
333
328
|
.twc-label__req { color: var(--color-danger); }
|
|
334
329
|
`;
|
|
335
|
-
var Label =
|
|
330
|
+
var Label = /* @__PURE__ */ React55__default.forwardRef(function Label2({ htmlFor, required = false, size = "md", className = "", children, ...rest }, ref) {
|
|
336
331
|
const __twcStyles = useScopedStyles("twc-label-styles", LABEL_CSS);
|
|
337
332
|
return /* @__PURE__ */ jsxs("label", { ref, htmlFor, className: `twc-label ${className}`.trim(), "data-size": size, ...rest, children: [
|
|
338
333
|
__twcStyles,
|
|
@@ -340,12 +335,11 @@ var Label = React54__default.forwardRef(function Label2({ htmlFor, required = fa
|
|
|
340
335
|
required ? /* @__PURE__ */ jsx("span", { className: "twc-label__req", "aria-hidden": "true", children: "*" }) : null
|
|
341
336
|
] });
|
|
342
337
|
});
|
|
343
|
-
Label.displayName = "Label";
|
|
344
338
|
var IMAGE_CSS = `
|
|
345
339
|
.twc-image { display: block; max-width: 100%; }
|
|
346
340
|
.twc-image[data-fit] { width: 100%; height: 100%; }
|
|
347
341
|
`;
|
|
348
|
-
var Image =
|
|
342
|
+
var Image = /* @__PURE__ */ React55__default.forwardRef(function Image2({
|
|
349
343
|
src,
|
|
350
344
|
alt,
|
|
351
345
|
fit,
|
|
@@ -361,7 +355,7 @@ var Image = React54__default.forwardRef(function Image2({
|
|
|
361
355
|
...rest
|
|
362
356
|
}, ref) {
|
|
363
357
|
const __twcStyles = useScopedStyles("twc-image-styles", IMAGE_CSS);
|
|
364
|
-
const [failed, setFailed] =
|
|
358
|
+
const [failed, setFailed] = React55__default.useState(false);
|
|
365
359
|
const shownSrc = failed && fallback ? fallback : src;
|
|
366
360
|
const s = {
|
|
367
361
|
objectFit: fit,
|
|
@@ -400,7 +394,6 @@ var Image = React54__default.forwardRef(function Image2({
|
|
|
400
394
|
)
|
|
401
395
|
] });
|
|
402
396
|
});
|
|
403
|
-
Image.displayName = "Image";
|
|
404
397
|
var ICONBTN_CSS = `
|
|
405
398
|
.twc-iconbtn {
|
|
406
399
|
--_sz: var(--control-h-md);
|
|
@@ -470,7 +463,7 @@ function safeHref2(url) {
|
|
|
470
463
|
const s = String(url).replace(/[\x00-\x20]+/g, "").toLowerCase();
|
|
471
464
|
return s.startsWith("javascript:") || s.startsWith("data:") || s.startsWith("vbscript:") ? void 0 : url;
|
|
472
465
|
}
|
|
473
|
-
|
|
466
|
+
var IconButton = /* @__PURE__ */ React55__default.forwardRef(function IconButton2({
|
|
474
467
|
children,
|
|
475
468
|
icon,
|
|
476
469
|
variant = "ghost",
|
|
@@ -487,7 +480,7 @@ function IconButton({
|
|
|
487
480
|
"aria-label": ariaLabel,
|
|
488
481
|
onClick,
|
|
489
482
|
...rest
|
|
490
|
-
}) {
|
|
483
|
+
}, ref) {
|
|
491
484
|
const __twcStyles = useScopedStyles("twc-iconbtn-styles", ICONBTN_CSS);
|
|
492
485
|
const Tag2 = as;
|
|
493
486
|
const inert = Tag2 === "a" && disabled;
|
|
@@ -495,6 +488,7 @@ function IconButton({
|
|
|
495
488
|
return /* @__PURE__ */ jsxs(
|
|
496
489
|
Tag2,
|
|
497
490
|
{
|
|
491
|
+
ref,
|
|
498
492
|
className: `twc-iconbtn ${className}`,
|
|
499
493
|
"data-variant": variant,
|
|
500
494
|
"data-tone": tone,
|
|
@@ -516,7 +510,7 @@ function IconButton({
|
|
|
516
510
|
]
|
|
517
511
|
}
|
|
518
512
|
);
|
|
519
|
-
}
|
|
513
|
+
});
|
|
520
514
|
|
|
521
515
|
// components/_compose.js
|
|
522
516
|
function compose(theirs, ours) {
|
|
@@ -592,14 +586,14 @@ function Tooltip({
|
|
|
592
586
|
}) {
|
|
593
587
|
const __twcStyles = useScopedStyles("twc-tooltip-styles", TOOLTIP_CSS);
|
|
594
588
|
const anchored = anchor !== void 0;
|
|
595
|
-
const id =
|
|
596
|
-
const [showU, setShowU] =
|
|
589
|
+
const id = React55__default.useId();
|
|
590
|
+
const [showU, setShowU] = React55__default.useState(false);
|
|
597
591
|
const show = anchored ? !!openProp : showU;
|
|
598
|
-
const [coords, setCoords] =
|
|
599
|
-
const timer =
|
|
600
|
-
const closeTimer =
|
|
601
|
-
const wrapRef =
|
|
602
|
-
const tipRef =
|
|
592
|
+
const [coords, setCoords] = React55__default.useState(null);
|
|
593
|
+
const timer = React55__default.useRef(null);
|
|
594
|
+
const closeTimer = React55__default.useRef(null);
|
|
595
|
+
const wrapRef = React55__default.useRef(null);
|
|
596
|
+
const tipRef = React55__default.useRef(null);
|
|
603
597
|
const open = () => {
|
|
604
598
|
clearTimeout(closeTimer.current);
|
|
605
599
|
clearTimeout(timer.current);
|
|
@@ -610,11 +604,11 @@ function Tooltip({
|
|
|
610
604
|
clearTimeout(closeTimer.current);
|
|
611
605
|
closeTimer.current = setTimeout(() => setShowU(false), 120);
|
|
612
606
|
};
|
|
613
|
-
|
|
607
|
+
React55__default.useEffect(() => () => {
|
|
614
608
|
clearTimeout(timer.current);
|
|
615
609
|
clearTimeout(closeTimer.current);
|
|
616
610
|
}, []);
|
|
617
|
-
const place =
|
|
611
|
+
const place = React55__default.useCallback(() => {
|
|
618
612
|
const el = anchored ? anchor : wrapRef.current;
|
|
619
613
|
if (!el || !el.getBoundingClientRect) return;
|
|
620
614
|
const r2 = el.getBoundingClientRect();
|
|
@@ -649,10 +643,10 @@ function Tooltip({
|
|
|
649
643
|
setCoords({ ...base, left: c, bottom: Math.round(vh - r2.top + gap), arrowX: arrowX(c) });
|
|
650
644
|
}
|
|
651
645
|
}, [placement, anchored, anchor]);
|
|
652
|
-
|
|
646
|
+
React55__default.useEffect(() => {
|
|
653
647
|
place();
|
|
654
648
|
}, [place]);
|
|
655
|
-
|
|
649
|
+
React55__default.useEffect(() => {
|
|
656
650
|
if (!show) return void 0;
|
|
657
651
|
place();
|
|
658
652
|
const onMove = () => place();
|
|
@@ -663,7 +657,7 @@ function Tooltip({
|
|
|
663
657
|
window.removeEventListener("resize", onMove);
|
|
664
658
|
};
|
|
665
659
|
}, [show, place]);
|
|
666
|
-
|
|
660
|
+
React55__default.useEffect(() => {
|
|
667
661
|
if (!show || anchored) return;
|
|
668
662
|
const onKeyDown = (e) => {
|
|
669
663
|
if (e.key === "Escape") {
|
|
@@ -707,7 +701,7 @@ function Tooltip({
|
|
|
707
701
|
bubble
|
|
708
702
|
] });
|
|
709
703
|
const describedBy = show ? id : void 0;
|
|
710
|
-
const trigger =
|
|
704
|
+
const trigger = React55__default.isValidElement(children) && children.type !== React55__default.Fragment ? React55__default.cloneElement(children, {
|
|
711
705
|
"aria-describedby": [children.props["aria-describedby"], describedBy].filter(Boolean).join(" ") || void 0
|
|
712
706
|
}) : /* @__PURE__ */ jsx("span", { "aria-describedby": describedBy, children });
|
|
713
707
|
return /* @__PURE__ */ jsxs(
|
|
@@ -756,7 +750,7 @@ var IcoReset = /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none",
|
|
|
756
750
|
/* @__PURE__ */ jsx("path", { d: "M3 12a9 9 0 1 0 9-9 9 9 0 0 0-6.3 2.6L3 8" }),
|
|
757
751
|
/* @__PURE__ */ jsx("path", { d: "M3 3v5h5" })
|
|
758
752
|
] });
|
|
759
|
-
var ImageViewer = /* @__PURE__ */
|
|
753
|
+
var ImageViewer = /* @__PURE__ */ React55__default.forwardRef(function ImageViewer2({
|
|
760
754
|
src,
|
|
761
755
|
alt,
|
|
762
756
|
minZoom = 1,
|
|
@@ -775,16 +769,16 @@ var ImageViewer = /* @__PURE__ */ React54__default.forwardRef(function ImageView
|
|
|
775
769
|
...rest
|
|
776
770
|
}, ref) {
|
|
777
771
|
const __twcStyles = useScopedStyles("twc-imageviewer-styles", IV_CSS);
|
|
778
|
-
const stageRef =
|
|
779
|
-
const natRef =
|
|
780
|
-
const [internalZoom, setInternalZoom] =
|
|
772
|
+
const stageRef = React55__default.useRef(null);
|
|
773
|
+
const natRef = React55__default.useRef({ w: 0, h: 0 });
|
|
774
|
+
const [internalZoom, setInternalZoom] = React55__default.useState(clamp(defaultZoom, minZoom, maxZoom));
|
|
781
775
|
const zoomControlled = zoomProp !== void 0;
|
|
782
776
|
const zoom = clamp(zoomControlled ? zoomProp : internalZoom, minZoom, maxZoom);
|
|
783
|
-
const [offset, setOffset] =
|
|
784
|
-
const [dragging, setDragging] =
|
|
785
|
-
const zoomRef =
|
|
777
|
+
const [offset, setOffset] = React55__default.useState({ x: 0, y: 0 });
|
|
778
|
+
const [dragging, setDragging] = React55__default.useState(false);
|
|
779
|
+
const zoomRef = React55__default.useRef(zoom);
|
|
786
780
|
zoomRef.current = zoom;
|
|
787
|
-
const offsetRef =
|
|
781
|
+
const offsetRef = React55__default.useRef(offset);
|
|
788
782
|
offsetRef.current = offset;
|
|
789
783
|
const applyZoom = (next) => {
|
|
790
784
|
const z = clamp(next, minZoom, maxZoom);
|
|
@@ -834,12 +828,12 @@ var ImageViewer = /* @__PURE__ */ React54__default.forwardRef(function ImageView
|
|
|
834
828
|
if (r2) zoomAt(r2.left + r2.width / 2, r2.top + r2.height / 2, next);
|
|
835
829
|
else if (applyZoom(next) <= minZoom) setOffset({ x: 0, y: 0 });
|
|
836
830
|
};
|
|
837
|
-
const mountedRef =
|
|
838
|
-
|
|
831
|
+
const mountedRef = React55__default.useRef(false);
|
|
832
|
+
React55__default.useEffect(() => {
|
|
839
833
|
if (mountedRef.current) reset();
|
|
840
834
|
else mountedRef.current = true;
|
|
841
835
|
}, [src]);
|
|
842
|
-
|
|
836
|
+
React55__default.useEffect(() => {
|
|
843
837
|
const stage = stageRef.current;
|
|
844
838
|
if (!stage) return void 0;
|
|
845
839
|
const onWheel = (e) => {
|
|
@@ -850,9 +844,9 @@ var ImageViewer = /* @__PURE__ */ React54__default.forwardRef(function ImageView
|
|
|
850
844
|
stage.addEventListener("wheel", onWheel, { passive: false });
|
|
851
845
|
return () => stage.removeEventListener("wheel", onWheel);
|
|
852
846
|
}, [step, minZoom, maxZoom, fit]);
|
|
853
|
-
const pointers =
|
|
854
|
-
const pinchRef =
|
|
855
|
-
const panRef =
|
|
847
|
+
const pointers = React55__default.useRef(/* @__PURE__ */ new Map());
|
|
848
|
+
const pinchRef = React55__default.useRef(null);
|
|
849
|
+
const panRef = React55__default.useRef(null);
|
|
856
850
|
const onPointerDown = (e) => {
|
|
857
851
|
pointers.current.set(e.pointerId, { x: e.clientX, y: e.clientY });
|
|
858
852
|
e.currentTarget.setPointerCapture?.(e.pointerId);
|
|
@@ -904,13 +898,13 @@ var ImageViewer = /* @__PURE__ */ React54__default.forwardRef(function ImageView
|
|
|
904
898
|
};
|
|
905
899
|
const canZoomIn = zoom < maxZoom, canZoomOut = zoom > minZoom;
|
|
906
900
|
const api = { zoom, zoomIn: () => zoomFromCenter(zoom + step), zoomOut: () => zoomFromCenter(zoom - step), reset, canZoomIn, canZoomOut };
|
|
907
|
-
|
|
908
|
-
const onStateChangeRef =
|
|
901
|
+
React55__default.useImperativeHandle(ref, () => api);
|
|
902
|
+
const onStateChangeRef = React55__default.useRef(onStateChange);
|
|
909
903
|
onStateChangeRef.current = onStateChange;
|
|
910
|
-
|
|
904
|
+
React55__default.useEffect(() => {
|
|
911
905
|
onStateChangeRef.current?.({ zoom, canZoomIn, canZoomOut });
|
|
912
906
|
}, [zoom, canZoomIn, canZoomOut]);
|
|
913
|
-
|
|
907
|
+
React55__default.useEffect(() => {
|
|
914
908
|
setOffset((o) => clampOffset(o, zoomRef.current));
|
|
915
909
|
}, [fit]);
|
|
916
910
|
const defaultControls = /* @__PURE__ */ jsxs("div", { className: "twc-iv__controls", children: [
|
|
@@ -1004,11 +998,11 @@ function Accordion({
|
|
|
1004
998
|
...rest
|
|
1005
999
|
}) {
|
|
1006
1000
|
const __twcStyles = useScopedStyles("twc-accordion-styles", ACCORDION_CSS);
|
|
1007
|
-
const rootRef =
|
|
1008
|
-
const [internal, setInternal] =
|
|
1001
|
+
const rootRef = React55__default.useRef(null);
|
|
1002
|
+
const [internal, setInternal] = React55__default.useState(() => new Set(defaultOpen));
|
|
1009
1003
|
const open = openProp !== void 0 ? new Set(openProp) : internal;
|
|
1010
|
-
const baseId =
|
|
1011
|
-
const [ever, setEver] =
|
|
1004
|
+
const baseId = React55__default.useId();
|
|
1005
|
+
const [ever, setEver] = React55__default.useState(() => new Set(open));
|
|
1012
1006
|
const defer = mountOnOpen || unmountOnClose;
|
|
1013
1007
|
let mounted = ever;
|
|
1014
1008
|
if (defer) {
|
|
@@ -1020,7 +1014,7 @@ function Accordion({
|
|
|
1020
1014
|
}
|
|
1021
1015
|
}
|
|
1022
1016
|
const openKey = defer ? JSON.stringify([...open].sort()) : "";
|
|
1023
|
-
|
|
1017
|
+
React55__default.useEffect(() => {
|
|
1024
1018
|
if (!unmountOnClose) return void 0;
|
|
1025
1019
|
const drop = [...ever].filter((v) => !open.has(v));
|
|
1026
1020
|
if (!drop.length) return void 0;
|
|
@@ -1225,7 +1219,7 @@ function Avatar({
|
|
|
1225
1219
|
...rest
|
|
1226
1220
|
}) {
|
|
1227
1221
|
const __twcStyles = useScopedStyles("twc-avatar-styles", AVATAR_CSS);
|
|
1228
|
-
const [errored, setErrored] =
|
|
1222
|
+
const [errored, setErrored] = React55__default.useState(false);
|
|
1229
1223
|
const cleanSrc = safeSrc(src);
|
|
1230
1224
|
const showImg = cleanSrc && !errored;
|
|
1231
1225
|
const _statusLabel = status ? statusLabel ?? statusLabels?.[status] ?? STATUS_LABELS[status] : void 0;
|
|
@@ -1307,28 +1301,28 @@ function Menu({
|
|
|
1307
1301
|
...rest
|
|
1308
1302
|
}) {
|
|
1309
1303
|
const __twcStyles = useScopedStyles("twc-menu-styles", MENU_CSS);
|
|
1310
|
-
const _tp =
|
|
1304
|
+
const _tp = React55__default.isValidElement(trigger) ? trigger.props : {};
|
|
1311
1305
|
const triggerDisabled = _tp.disabled === true || _tp["aria-disabled"] === true || _tp["aria-disabled"] === "true";
|
|
1312
|
-
const [openState, setOpenState] =
|
|
1313
|
-
const [render, setRender] =
|
|
1314
|
-
const [pos, setPos] =
|
|
1315
|
-
const [active, setActive] =
|
|
1316
|
-
const wrapRef =
|
|
1306
|
+
const [openState, setOpenState] = React55__default.useState(defaultOpen);
|
|
1307
|
+
const [render, setRender] = React55__default.useState(false);
|
|
1308
|
+
const [pos, setPos] = React55__default.useState(null);
|
|
1309
|
+
const [active, setActive] = React55__default.useState(-1);
|
|
1310
|
+
const wrapRef = React55__default.useRef(null);
|
|
1317
1311
|
useTriggerAudit(wrapRef, "Menu");
|
|
1318
|
-
const menuRef =
|
|
1319
|
-
const typeBufRef =
|
|
1320
|
-
const typeTimerRef =
|
|
1321
|
-
const menuId =
|
|
1312
|
+
const menuRef = React55__default.useRef(null);
|
|
1313
|
+
const typeBufRef = React55__default.useRef("");
|
|
1314
|
+
const typeTimerRef = React55__default.useRef(null);
|
|
1315
|
+
const menuId = React55__default.useId();
|
|
1322
1316
|
const headerId = `${menuId}-header`;
|
|
1323
1317
|
const controlled = openProp !== void 0;
|
|
1324
1318
|
const open = controlled ? !!openProp : openState;
|
|
1325
|
-
const openRef =
|
|
1319
|
+
const openRef = React55__default.useRef(open);
|
|
1326
1320
|
openRef.current = open;
|
|
1327
|
-
const controlledRef =
|
|
1321
|
+
const controlledRef = React55__default.useRef(controlled);
|
|
1328
1322
|
controlledRef.current = controlled;
|
|
1329
|
-
const onOpenChangeRef =
|
|
1323
|
+
const onOpenChangeRef = React55__default.useRef(onOpenChange);
|
|
1330
1324
|
onOpenChangeRef.current = onOpenChange;
|
|
1331
|
-
const setOpen =
|
|
1325
|
+
const setOpen = React55__default.useCallback((next) => {
|
|
1332
1326
|
const value = typeof next === "function" ? next(openRef.current) : next;
|
|
1333
1327
|
if (value === openRef.current) return;
|
|
1334
1328
|
if (!controlledRef.current) setOpenState(value);
|
|
@@ -1336,7 +1330,7 @@ function Menu({
|
|
|
1336
1330
|
}, []);
|
|
1337
1331
|
const RD = { createPortal: typeof createPortal === "function" ? createPortal : typeof window !== "undefined" && window.ReactDOM && window.ReactDOM.createPortal };
|
|
1338
1332
|
const interactiveIdx = items.map((it, i) => !it.separator && !it.heading ? i : -1).filter((i) => i >= 0);
|
|
1339
|
-
const place =
|
|
1333
|
+
const place = React55__default.useCallback(() => {
|
|
1340
1334
|
const t = wrapRef.current;
|
|
1341
1335
|
if (!t) return;
|
|
1342
1336
|
const r2 = t.getBoundingClientRect();
|
|
@@ -1352,7 +1346,7 @@ function Menu({
|
|
|
1352
1346
|
setPos({ top, bottom, left, width: w, flip, maxHeight: Math.max(120, avail) });
|
|
1353
1347
|
}, [align, width]);
|
|
1354
1348
|
const isTop = useLayer(open && render);
|
|
1355
|
-
|
|
1349
|
+
React55__default.useEffect(() => {
|
|
1356
1350
|
if (!open) return;
|
|
1357
1351
|
place();
|
|
1358
1352
|
const onMove = () => place();
|
|
@@ -1371,18 +1365,18 @@ function Menu({
|
|
|
1371
1365
|
document.removeEventListener("mousedown", onDown);
|
|
1372
1366
|
};
|
|
1373
1367
|
}, [open, place, isTop]);
|
|
1374
|
-
const kbdRef =
|
|
1375
|
-
|
|
1368
|
+
const kbdRef = React55__default.useRef(false);
|
|
1369
|
+
React55__default.useEffect(() => {
|
|
1376
1370
|
if (!open || !render || active < 0 || !kbdRef.current) return;
|
|
1377
1371
|
kbdRef.current = false;
|
|
1378
1372
|
const el = document.getElementById(`${menuId}-item-${active}`);
|
|
1379
1373
|
if (el) el.focus();
|
|
1380
1374
|
}, [open, render, active, menuId]);
|
|
1381
|
-
const focusTrigger =
|
|
1375
|
+
const focusTrigger = React55__default.useCallback(() => {
|
|
1382
1376
|
const t = wrapRef.current && wrapRef.current.querySelector('button, a[href], [role="button"], [tabindex]');
|
|
1383
1377
|
if (t) t.focus();
|
|
1384
1378
|
}, []);
|
|
1385
|
-
|
|
1379
|
+
React55__default.useEffect(() => {
|
|
1386
1380
|
if (open) return;
|
|
1387
1381
|
kbdRef.current = false;
|
|
1388
1382
|
setActive(-1);
|
|
@@ -1390,7 +1384,7 @@ function Menu({
|
|
|
1390
1384
|
if (!m || typeof document === "undefined" || !m.contains(document.activeElement)) return;
|
|
1391
1385
|
focusTrigger();
|
|
1392
1386
|
}, [open, focusTrigger]);
|
|
1393
|
-
|
|
1387
|
+
React55__default.useEffect(() => {
|
|
1394
1388
|
if (open) {
|
|
1395
1389
|
setRender(true);
|
|
1396
1390
|
return;
|
|
@@ -1523,8 +1517,8 @@ function Menu({
|
|
|
1523
1517
|
]
|
|
1524
1518
|
}
|
|
1525
1519
|
) : null;
|
|
1526
|
-
const fix =
|
|
1527
|
-
const triggerEl =
|
|
1520
|
+
const fix = React55__default.isValidElement(trigger) && !triggerIsControl(trigger) ? { role: "button" } : null;
|
|
1521
|
+
const triggerEl = React55__default.isValidElement(trigger) ? React55__default.cloneElement(trigger, {
|
|
1528
1522
|
onClick: (e) => {
|
|
1529
1523
|
trigger.props.onClick?.(e);
|
|
1530
1524
|
toggle();
|
|
@@ -1715,7 +1709,7 @@ function Breadcrumb({
|
|
|
1715
1709
|
...rest
|
|
1716
1710
|
}) {
|
|
1717
1711
|
const __twcStyles = useScopedStyles("twc-breadcrumb-styles", BREADCRUMB_CSS);
|
|
1718
|
-
const [expanded, setExpanded] =
|
|
1712
|
+
const [expanded, setExpanded] = React55__default.useState(false);
|
|
1719
1713
|
const sep = separator || /* @__PURE__ */ jsx(ChevronSep, {});
|
|
1720
1714
|
let display = items;
|
|
1721
1715
|
if (maxItems > 0 && items.length > maxItems && !expanded) {
|
|
@@ -1728,7 +1722,7 @@ function Breadcrumb({
|
|
|
1728
1722
|
__twcStyles,
|
|
1729
1723
|
display.map((it, i) => {
|
|
1730
1724
|
const last = i === display.length - 1;
|
|
1731
|
-
return /* @__PURE__ */ jsxs(
|
|
1725
|
+
return /* @__PURE__ */ jsxs(React55__default.Fragment, { children: [
|
|
1732
1726
|
it.ellipsis ? /* @__PURE__ */ jsx("button", { className: "twc-breadcrumb__ellipsis", "aria-label": "Show more", onClick: () => setExpanded(true), children: "\u2026" }) : last ? /* @__PURE__ */ jsxs(
|
|
1733
1727
|
"span",
|
|
1734
1728
|
{
|
|
@@ -1877,7 +1871,7 @@ function safeHref5(url) {
|
|
|
1877
1871
|
const s = String(url).replace(/[\x00-\x20]+/g, "").toLowerCase();
|
|
1878
1872
|
return s.startsWith("javascript:") || s.startsWith("data:") || s.startsWith("vbscript:") ? void 0 : url;
|
|
1879
1873
|
}
|
|
1880
|
-
|
|
1874
|
+
var Button = /* @__PURE__ */ React55__default.forwardRef(function Button2({
|
|
1881
1875
|
children,
|
|
1882
1876
|
variant = "solid",
|
|
1883
1877
|
tone = "primary",
|
|
@@ -1895,9 +1889,9 @@ function Button({
|
|
|
1895
1889
|
className = "",
|
|
1896
1890
|
onClick,
|
|
1897
1891
|
...rest
|
|
1898
|
-
}) {
|
|
1892
|
+
}, ref) {
|
|
1899
1893
|
const __twcStyles = useScopedStyles("twc-btn-styles", CSS2);
|
|
1900
|
-
const [ripples, setRipples] =
|
|
1894
|
+
const [ripples, setRipples] = React55__default.useState([]);
|
|
1901
1895
|
const Tag2 = as;
|
|
1902
1896
|
const inert = Tag2 === "a" && (disabled || loading);
|
|
1903
1897
|
const softDisabled = disabled && focusableWhenDisabled && !loading && Tag2 === "button";
|
|
@@ -1919,6 +1913,7 @@ function Button({
|
|
|
1919
1913
|
return /* @__PURE__ */ jsxs(
|
|
1920
1914
|
Tag2,
|
|
1921
1915
|
{
|
|
1916
|
+
ref,
|
|
1922
1917
|
className: `twc-btn ${className}`,
|
|
1923
1918
|
"data-variant": variant,
|
|
1924
1919
|
"data-tone": tone,
|
|
@@ -1954,7 +1949,7 @@ function Button({
|
|
|
1954
1949
|
]
|
|
1955
1950
|
}
|
|
1956
1951
|
);
|
|
1957
|
-
}
|
|
1952
|
+
});
|
|
1958
1953
|
var UNITLESS = /* @__PURE__ */ new Set([
|
|
1959
1954
|
"animationIterationCount",
|
|
1960
1955
|
"aspectRatio",
|
|
@@ -2127,9 +2122,9 @@ function buildSx(sx, uid) {
|
|
|
2127
2122
|
return { flatStyle, css };
|
|
2128
2123
|
}
|
|
2129
2124
|
function useSx(sx) {
|
|
2130
|
-
const rawId =
|
|
2125
|
+
const rawId = React55__default.useId();
|
|
2131
2126
|
const uid = `sx${rawId.replace(/[^a-zA-Z0-9]/g, "")}`;
|
|
2132
|
-
const { flatStyle, css } =
|
|
2127
|
+
const { flatStyle, css } = React55__default.useMemo(() => buildSx(sx, uid), [sx, uid]);
|
|
2133
2128
|
const styleNode = useScopedStyles(`twc-sx-${uid}`, css);
|
|
2134
2129
|
return { flatStyle, styleNode, sxAttr: css ? uid : void 0 };
|
|
2135
2130
|
}
|
|
@@ -2265,14 +2260,14 @@ function Carousel({
|
|
|
2265
2260
|
...rest
|
|
2266
2261
|
}) {
|
|
2267
2262
|
const __twcStyles = useScopedStyles("twc-carousel-styles", CAROUSEL_CSS);
|
|
2268
|
-
const slides =
|
|
2263
|
+
const slides = React55__default.Children.toArray(children);
|
|
2269
2264
|
const count = slides.length;
|
|
2270
|
-
const [internal, setInternal] =
|
|
2265
|
+
const [internal, setInternal] = React55__default.useState(defaultIndex);
|
|
2271
2266
|
const index = indexProp !== void 0 ? indexProp : internal;
|
|
2272
|
-
const [paused, setPaused] =
|
|
2273
|
-
const [userPaused, setUserPaused] =
|
|
2274
|
-
const [prefersReduced, setPrefersReduced] =
|
|
2275
|
-
|
|
2267
|
+
const [paused, setPaused] = React55__default.useState(false);
|
|
2268
|
+
const [userPaused, setUserPaused] = React55__default.useState(false);
|
|
2269
|
+
const [prefersReduced, setPrefersReduced] = React55__default.useState(false);
|
|
2270
|
+
React55__default.useEffect(() => {
|
|
2276
2271
|
if (typeof window === "undefined" || !window.matchMedia) return void 0;
|
|
2277
2272
|
const mql = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
2278
2273
|
const on = () => setPrefersReduced(mql.matches);
|
|
@@ -2280,16 +2275,16 @@ function Carousel({
|
|
|
2280
2275
|
mql.addEventListener("change", on);
|
|
2281
2276
|
return () => mql.removeEventListener("change", on);
|
|
2282
2277
|
}, []);
|
|
2283
|
-
const setIndex =
|
|
2278
|
+
const setIndex = React55__default.useCallback((i) => {
|
|
2284
2279
|
if (indexProp === void 0) setInternal(i);
|
|
2285
2280
|
onIndexChange?.(i);
|
|
2286
2281
|
}, [indexProp, onIndexChange]);
|
|
2287
|
-
const go =
|
|
2282
|
+
const go = React55__default.useCallback((i) => {
|
|
2288
2283
|
if (count <= 0) return;
|
|
2289
2284
|
setIndex(loop ? (i % count + count) % count : Math.min(Math.max(i, 0), count - 1));
|
|
2290
2285
|
}, [count, loop, setIndex]);
|
|
2291
2286
|
const autoRotating = autoPlay && !paused && !userPaused && !prefersReduced && count > 1;
|
|
2292
|
-
|
|
2287
|
+
React55__default.useEffect(() => {
|
|
2293
2288
|
if (!autoRotating) return void 0;
|
|
2294
2289
|
const t = setInterval(() => {
|
|
2295
2290
|
const next = loop ? (index + 1) % count : index + 1 >= count ? index : index + 1;
|
|
@@ -2549,7 +2544,7 @@ var CHART_BASE_CSS = `
|
|
|
2549
2544
|
}
|
|
2550
2545
|
`;
|
|
2551
2546
|
function ChartTable({ id, caption, columns, rows }) {
|
|
2552
|
-
const h =
|
|
2547
|
+
const h = React55__default.createElement;
|
|
2553
2548
|
return h(
|
|
2554
2549
|
"table",
|
|
2555
2550
|
{ className: "twc-chart__sr", id },
|
|
@@ -2579,7 +2574,7 @@ function ChartTable({ id, caption, columns, rows }) {
|
|
|
2579
2574
|
);
|
|
2580
2575
|
}
|
|
2581
2576
|
function ChartLegend({ items, onToggle, hidden, onFocus, onBlur }) {
|
|
2582
|
-
const h =
|
|
2577
|
+
const h = React55__default.createElement;
|
|
2583
2578
|
return h(
|
|
2584
2579
|
"div",
|
|
2585
2580
|
{ className: "twc-chart__legend" },
|
|
@@ -2610,23 +2605,23 @@ function ChartLegend({ items, onToggle, hidden, onFocus, onBlur }) {
|
|
|
2610
2605
|
);
|
|
2611
2606
|
}
|
|
2612
2607
|
function useChartTooltip() {
|
|
2613
|
-
const containerRef =
|
|
2614
|
-
const [tip, setTip] =
|
|
2615
|
-
const show =
|
|
2608
|
+
const containerRef = React55__default.useRef(null);
|
|
2609
|
+
const [tip, setTip] = React55__default.useState(null);
|
|
2610
|
+
const show = React55__default.useCallback((content, e) => {
|
|
2616
2611
|
const el = containerRef.current;
|
|
2617
2612
|
const rect = el && el.getBoundingClientRect ? el.getBoundingClientRect() : null;
|
|
2618
2613
|
const left = rect ? e.clientX - rect.left : 0;
|
|
2619
2614
|
const top = rect ? e.clientY - rect.top : 0;
|
|
2620
2615
|
setTip({ title: content.title, items: content.items || [], left, top });
|
|
2621
2616
|
}, []);
|
|
2622
|
-
const hide =
|
|
2617
|
+
const hide = React55__default.useCallback(() => setTip(null), []);
|
|
2623
2618
|
return { containerRef, tip, show, hide };
|
|
2624
2619
|
}
|
|
2625
2620
|
function ChartTooltip({ tip }) {
|
|
2626
|
-
const h =
|
|
2627
|
-
const ref =
|
|
2628
|
-
const [pos, setPos] =
|
|
2629
|
-
|
|
2621
|
+
const h = React55__default.createElement;
|
|
2622
|
+
const ref = React55__default.useRef(null);
|
|
2623
|
+
const [pos, setPos] = React55__default.useState({ dx: 0, below: false });
|
|
2624
|
+
React55__default.useLayoutEffect(() => {
|
|
2630
2625
|
const el = ref.current;
|
|
2631
2626
|
if (!tip || !el) return;
|
|
2632
2627
|
const parent = el.offsetParent;
|
|
@@ -2703,17 +2698,17 @@ function Chart({
|
|
|
2703
2698
|
}) {
|
|
2704
2699
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
2705
2700
|
const styles = useScopedStyles("twc-chart-styles", CHART_CSS);
|
|
2706
|
-
const uid =
|
|
2701
|
+
const uid = React55__default.useId();
|
|
2707
2702
|
const gid = uid.replace(/[^a-zA-Z0-9]/g, "");
|
|
2708
2703
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
2709
2704
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
2710
|
-
const [hidden, setHidden] =
|
|
2711
|
-
const [focusSeries, setFocusSeries] =
|
|
2712
|
-
const [selected, setSelected] =
|
|
2713
|
-
const [hoverIdx, setHoverIdx] =
|
|
2714
|
-
const [zoom, setZoom] =
|
|
2715
|
-
const [drag, setDrag] =
|
|
2716
|
-
const svgRef =
|
|
2705
|
+
const [hidden, setHidden] = React55__default.useState(() => /* @__PURE__ */ new Set());
|
|
2706
|
+
const [focusSeries, setFocusSeries] = React55__default.useState(null);
|
|
2707
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
2708
|
+
const [hoverIdx, setHoverIdx] = React55__default.useState(null);
|
|
2709
|
+
const [zoom, setZoom] = React55__default.useState(null);
|
|
2710
|
+
const [drag, setDrag] = React55__default.useState(null);
|
|
2711
|
+
const svgRef = React55__default.useRef(null);
|
|
2717
2712
|
const isBar = type === "bar" || type === "column";
|
|
2718
2713
|
const isArea = type === "area";
|
|
2719
2714
|
const crv = smooth ? "smooth" : curve;
|
|
@@ -2818,7 +2813,7 @@ function Chart({
|
|
|
2818
2813
|
onDataClick({ label: d.label, series: null, seriesIndex: -1, value: void 0, index: baseIdx + idx, row: d });
|
|
2819
2814
|
selectMark(`${idx}:*`);
|
|
2820
2815
|
};
|
|
2821
|
-
|
|
2816
|
+
React55__default.useEffect(() => {
|
|
2822
2817
|
if (!zoomable) return void 0;
|
|
2823
2818
|
const svg = svgRef.current;
|
|
2824
2819
|
if (!svg) return void 0;
|
|
@@ -3128,12 +3123,12 @@ function PieChart({
|
|
|
3128
3123
|
}) {
|
|
3129
3124
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
3130
3125
|
const styles = useScopedStyles("twc-piechart-styles", CHART_CSS2);
|
|
3131
|
-
const uid =
|
|
3126
|
+
const uid = React55__default.useId();
|
|
3132
3127
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
3133
3128
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
3134
|
-
const [active, setActive] =
|
|
3135
|
-
const [focus, setFocus] =
|
|
3136
|
-
const [selected, setSelected] =
|
|
3129
|
+
const [active, setActive] = React55__default.useState(null);
|
|
3130
|
+
const [focus, setFocus] = React55__default.useState(null);
|
|
3131
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
3137
3132
|
const clickable = !!onDataClick;
|
|
3138
3133
|
const rows = data || [];
|
|
3139
3134
|
const fmt = valueFormat || fmtNumber;
|
|
@@ -3282,11 +3277,11 @@ function Gauge({
|
|
|
3282
3277
|
}) {
|
|
3283
3278
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
3284
3279
|
const styles = useScopedStyles("twc-gauge-styles", GAUGE_CSS);
|
|
3285
|
-
const uid =
|
|
3280
|
+
const uid = React55__default.useId();
|
|
3286
3281
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
3287
3282
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
3288
|
-
const [selected, setSelected] =
|
|
3289
|
-
const [focus, setFocus] =
|
|
3283
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
3284
|
+
const [focus, setFocus] = React55__default.useState(null);
|
|
3290
3285
|
const fmt = valueFormat || ((n) => String(Math.round(Number(n) || 0)));
|
|
3291
3286
|
const cx = size / 2, cy = size / 2;
|
|
3292
3287
|
const span = endAngle - startAngle;
|
|
@@ -3447,11 +3442,11 @@ function Sparkline({
|
|
|
3447
3442
|
}) {
|
|
3448
3443
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
3449
3444
|
const styles = useScopedStyles("twc-sparkline-styles", SPARK_CSS);
|
|
3450
|
-
const uid =
|
|
3445
|
+
const uid = React55__default.useId();
|
|
3451
3446
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
3452
3447
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
3453
|
-
const [hover, setHover] =
|
|
3454
|
-
const [selected, setSelected] =
|
|
3448
|
+
const [hover, setHover] = React55__default.useState(null);
|
|
3449
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
3455
3450
|
const clickable = !!onDataClick;
|
|
3456
3451
|
const kind = area ? "area" : type;
|
|
3457
3452
|
const isBar = kind === "bar";
|
|
@@ -3651,17 +3646,17 @@ function ScatterChart({
|
|
|
3651
3646
|
}) {
|
|
3652
3647
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
3653
3648
|
const styles = useScopedStyles("twc-scatter-styles", SCATTER_CSS);
|
|
3654
|
-
const uid =
|
|
3649
|
+
const uid = React55__default.useId();
|
|
3655
3650
|
const gid = uid.replace(/[^a-zA-Z0-9]/g, "");
|
|
3656
3651
|
const clipId = `twc-sc-clip-${gid}`;
|
|
3657
3652
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
3658
3653
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
3659
|
-
const [focus, setFocus] =
|
|
3660
|
-
const [selected, setSelected] =
|
|
3661
|
-
const [zoom, setZoom] =
|
|
3662
|
-
const [drag, setDrag] =
|
|
3663
|
-
const svgRef =
|
|
3664
|
-
const movedRef =
|
|
3654
|
+
const [focus, setFocus] = React55__default.useState(null);
|
|
3655
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
3656
|
+
const [zoom, setZoom] = React55__default.useState(null);
|
|
3657
|
+
const [drag, setDrag] = React55__default.useState(null);
|
|
3658
|
+
const svgRef = React55__default.useRef(null);
|
|
3659
|
+
const movedRef = React55__default.useRef(false);
|
|
3665
3660
|
const list = Array.isArray(series) ? series : [];
|
|
3666
3661
|
const vFmt = valueFormat || fmtNumber;
|
|
3667
3662
|
const xFmt = xFormat || vFmt;
|
|
@@ -3834,7 +3829,7 @@ function ScatterChart({
|
|
|
3834
3829
|
selectPoint(hit.key);
|
|
3835
3830
|
}
|
|
3836
3831
|
};
|
|
3837
|
-
|
|
3832
|
+
React55__default.useEffect(() => {
|
|
3838
3833
|
if (!canZoom) return void 0;
|
|
3839
3834
|
const svg = svgRef.current;
|
|
3840
3835
|
if (!svg) return void 0;
|
|
@@ -4020,11 +4015,11 @@ function RadarChart({
|
|
|
4020
4015
|
}) {
|
|
4021
4016
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
4022
4017
|
const styles = useScopedStyles("twc-radarchart-styles", CHART_CSS3);
|
|
4023
|
-
const uid =
|
|
4018
|
+
const uid = React55__default.useId();
|
|
4024
4019
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
4025
4020
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
4026
|
-
const [focus, setFocus] =
|
|
4027
|
-
const [selected, setSelected] =
|
|
4021
|
+
const [focus, setFocus] = React55__default.useState(null);
|
|
4022
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
4028
4023
|
const rows = data || [];
|
|
4029
4024
|
const keys = series && series.length ? series : ["value"];
|
|
4030
4025
|
const fmt = valueFormat || fmtNumber;
|
|
@@ -4174,12 +4169,12 @@ function PolarAreaChart({
|
|
|
4174
4169
|
}) {
|
|
4175
4170
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
4176
4171
|
const styles = useScopedStyles("twc-polar-styles", CHART_CSS4);
|
|
4177
|
-
const uid =
|
|
4172
|
+
const uid = React55__default.useId();
|
|
4178
4173
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
4179
4174
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
4180
|
-
const [active, setActive] =
|
|
4181
|
-
const [focus, setFocus] =
|
|
4182
|
-
const [selected, setSelected] =
|
|
4175
|
+
const [active, setActive] = React55__default.useState(null);
|
|
4176
|
+
const [focus, setFocus] = React55__default.useState(null);
|
|
4177
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
4183
4178
|
const rows = data || [];
|
|
4184
4179
|
const n = rows.length;
|
|
4185
4180
|
const fmt = valueFormat || fmtNumber;
|
|
@@ -4329,15 +4324,15 @@ function Heatmap({
|
|
|
4329
4324
|
}) {
|
|
4330
4325
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
4331
4326
|
const styles = useScopedStyles("twc-heatmap-styles", HEATMAP_CSS);
|
|
4332
|
-
const uid =
|
|
4327
|
+
const uid = React55__default.useId();
|
|
4333
4328
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
4334
4329
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
4335
|
-
const [hovered, setHovered] =
|
|
4336
|
-
const [selected, setSelected] =
|
|
4337
|
-
const [zoom, setZoom] =
|
|
4338
|
-
const [drag, setDrag] =
|
|
4339
|
-
const svgRef =
|
|
4340
|
-
const movedRef =
|
|
4330
|
+
const [hovered, setHovered] = React55__default.useState(null);
|
|
4331
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
4332
|
+
const [zoom, setZoom] = React55__default.useState(null);
|
|
4333
|
+
const [drag, setDrag] = React55__default.useState(null);
|
|
4334
|
+
const svgRef = React55__default.useRef(null);
|
|
4335
|
+
const movedRef = React55__default.useRef(false);
|
|
4341
4336
|
const clickable = !!onDataClick;
|
|
4342
4337
|
const selectMark = (key) => setSelected((s) => s === key ? null : key);
|
|
4343
4338
|
const rows = Array.isArray(data) ? data : [];
|
|
@@ -4500,7 +4495,7 @@ function Heatmap({
|
|
|
4500
4495
|
selectMark(cell.key);
|
|
4501
4496
|
}
|
|
4502
4497
|
};
|
|
4503
|
-
|
|
4498
|
+
React55__default.useEffect(() => {
|
|
4504
4499
|
if (!canZoom) return void 0;
|
|
4505
4500
|
const svg = svgRef.current;
|
|
4506
4501
|
if (!svg) return void 0;
|
|
@@ -4670,11 +4665,11 @@ function FunnelChart({
|
|
|
4670
4665
|
}) {
|
|
4671
4666
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
4672
4667
|
const styles = useScopedStyles("twc-funnel-styles", FUNNEL_CSS);
|
|
4673
|
-
const uid =
|
|
4668
|
+
const uid = React55__default.useId();
|
|
4674
4669
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
4675
4670
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
4676
|
-
const [active, setActive] =
|
|
4677
|
-
const [selected, setSelected] =
|
|
4671
|
+
const [active, setActive] = React55__default.useState(null);
|
|
4672
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
4678
4673
|
const clickable = !!onDataClick;
|
|
4679
4674
|
const rows = data || [];
|
|
4680
4675
|
const n = rows.length;
|
|
@@ -4792,11 +4787,11 @@ function Treemap({
|
|
|
4792
4787
|
}) {
|
|
4793
4788
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
4794
4789
|
const styles = useScopedStyles("twc-treemap-styles", TREEMAP_CSS);
|
|
4795
|
-
const uid =
|
|
4790
|
+
const uid = React55__default.useId();
|
|
4796
4791
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
4797
4792
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
4798
|
-
const [hovered, setHovered] =
|
|
4799
|
-
const [selected, setSelected] =
|
|
4793
|
+
const [hovered, setHovered] = React55__default.useState(null);
|
|
4794
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
4800
4795
|
const rows = data || [];
|
|
4801
4796
|
const fmt = valueFormat || fmtNumber;
|
|
4802
4797
|
const svgAriaLabel = ariaLabelProp ?? ariaLabel ?? "treemap";
|
|
@@ -4954,13 +4949,13 @@ function Candlestick({
|
|
|
4954
4949
|
}) {
|
|
4955
4950
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
4956
4951
|
const styles = useScopedStyles("twc-candlestick-styles", CANDLE_CSS);
|
|
4957
|
-
const uid =
|
|
4952
|
+
const uid = React55__default.useId();
|
|
4958
4953
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
4959
4954
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
4960
|
-
const [selected, setSelected] =
|
|
4961
|
-
const [zoom, setZoom] =
|
|
4962
|
-
const [drag, setDrag] =
|
|
4963
|
-
const svgRef =
|
|
4955
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
4956
|
+
const [zoom, setZoom] = React55__default.useState(null);
|
|
4957
|
+
const [drag, setDrag] = React55__default.useState(null);
|
|
4958
|
+
const svgRef = React55__default.useRef(null);
|
|
4964
4959
|
const fmt = valueFormat || fmtNumber;
|
|
4965
4960
|
const clickable = !!onDataClick;
|
|
4966
4961
|
const allRows = data || [];
|
|
@@ -5061,7 +5056,7 @@ function Candlestick({
|
|
|
5061
5056
|
clickCandle(rows[idx], baseIdx + idx);
|
|
5062
5057
|
selectMark(baseIdx + idx);
|
|
5063
5058
|
};
|
|
5064
|
-
|
|
5059
|
+
React55__default.useEffect(() => {
|
|
5065
5060
|
if (!zoomable) return void 0;
|
|
5066
5061
|
const svg = svgRef.current;
|
|
5067
5062
|
if (!svg) return void 0;
|
|
@@ -5257,13 +5252,13 @@ function Boxplot({
|
|
|
5257
5252
|
}) {
|
|
5258
5253
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
5259
5254
|
const styles = useScopedStyles("twc-boxplot-styles", CHART_CSS5);
|
|
5260
|
-
const uid =
|
|
5255
|
+
const uid = React55__default.useId();
|
|
5261
5256
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
5262
5257
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
5263
|
-
const [selected, setSelected] =
|
|
5264
|
-
const [zoom, setZoom] =
|
|
5265
|
-
const [drag, setDrag] =
|
|
5266
|
-
const svgRef =
|
|
5258
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
5259
|
+
const [zoom, setZoom] = React55__default.useState(null);
|
|
5260
|
+
const [drag, setDrag] = React55__default.useState(null);
|
|
5261
|
+
const svgRef = React55__default.useRef(null);
|
|
5267
5262
|
const allRows = data || [];
|
|
5268
5263
|
const baseIdx = zoom ? zoom.s : 0;
|
|
5269
5264
|
const rows = zoom ? allRows.slice(zoom.s, zoom.e + 1) : allRows;
|
|
@@ -5363,7 +5358,7 @@ function Boxplot({
|
|
|
5363
5358
|
if (idx == null) return;
|
|
5364
5359
|
clickBox(rows[idx], idx);
|
|
5365
5360
|
};
|
|
5366
|
-
|
|
5361
|
+
React55__default.useEffect(() => {
|
|
5367
5362
|
if (!zoomable) return void 0;
|
|
5368
5363
|
const svg = svgRef.current;
|
|
5369
5364
|
if (!svg) return void 0;
|
|
@@ -5524,13 +5519,13 @@ function RangeChart({
|
|
|
5524
5519
|
}) {
|
|
5525
5520
|
const baseStyles = useScopedStyles("twc-chart-base", CHART_BASE_CSS);
|
|
5526
5521
|
const styles = useScopedStyles("twc-rangechart-styles", RANGE_CSS);
|
|
5527
|
-
const uid =
|
|
5522
|
+
const uid = React55__default.useId();
|
|
5528
5523
|
const tableId = tableFallback ? `${uid}-table` : void 0;
|
|
5529
5524
|
const { containerRef, tip, show, hide } = useChartTooltip();
|
|
5530
|
-
const [selected, setSelected] =
|
|
5531
|
-
const [zoom, setZoom] =
|
|
5532
|
-
const [drag, setDrag] =
|
|
5533
|
-
const svgRef =
|
|
5525
|
+
const [selected, setSelected] = React55__default.useState(null);
|
|
5526
|
+
const [zoom, setZoom] = React55__default.useState(null);
|
|
5527
|
+
const [drag, setDrag] = React55__default.useState(null);
|
|
5528
|
+
const svgRef = React55__default.useRef(null);
|
|
5534
5529
|
const isArea = type === "area";
|
|
5535
5530
|
const clickable = !!onDataClick;
|
|
5536
5531
|
const fmt = valueFormat || fmtNumber;
|
|
@@ -5625,7 +5620,7 @@ function RangeChart({
|
|
|
5625
5620
|
if (idx == null) return;
|
|
5626
5621
|
clickAt(idx);
|
|
5627
5622
|
};
|
|
5628
|
-
|
|
5623
|
+
React55__default.useEffect(() => {
|
|
5629
5624
|
if (!zoomable) return void 0;
|
|
5630
5625
|
const svg = svgRef.current;
|
|
5631
5626
|
if (!svg) return void 0;
|
|
@@ -5813,7 +5808,25 @@ function RangeChart({
|
|
|
5813
5808
|
function labelText7(label) {
|
|
5814
5809
|
return typeof label === "string" || typeof label === "number" ? String(label) : "";
|
|
5815
5810
|
}
|
|
5816
|
-
function
|
|
5811
|
+
function useMergedRef(...refs) {
|
|
5812
|
+
return React55.useCallback((node) => {
|
|
5813
|
+
const cleanups = [];
|
|
5814
|
+
for (const r2 of refs) {
|
|
5815
|
+
if (typeof r2 === "function") {
|
|
5816
|
+
const cleanup = r2(node);
|
|
5817
|
+
if (typeof cleanup === "function") cleanups.push(cleanup);
|
|
5818
|
+
} else if (r2 && typeof r2 === "object") {
|
|
5819
|
+
r2.current = node;
|
|
5820
|
+
}
|
|
5821
|
+
}
|
|
5822
|
+
if (cleanups.length === 0) return void 0;
|
|
5823
|
+
return () => {
|
|
5824
|
+
for (const r2 of refs) if (r2 && typeof r2 === "object") r2.current = null;
|
|
5825
|
+
for (const cleanup of cleanups) cleanup();
|
|
5826
|
+
};
|
|
5827
|
+
}, refs);
|
|
5828
|
+
}
|
|
5829
|
+
var Checkbox = /* @__PURE__ */ React55__default.forwardRef(function Checkbox2({
|
|
5817
5830
|
label,
|
|
5818
5831
|
description,
|
|
5819
5832
|
error,
|
|
@@ -5828,7 +5841,7 @@ function Checkbox({
|
|
|
5828
5841
|
className = "",
|
|
5829
5842
|
onChange,
|
|
5830
5843
|
...rest
|
|
5831
|
-
}) {
|
|
5844
|
+
}, forwardedRef) {
|
|
5832
5845
|
const __twcStyles = useScopedStyles("twc-checkbox-styles", `
|
|
5833
5846
|
.twc-check { display: inline-flex; align-items: flex-start; gap: var(--space-2-5); cursor: pointer; font-family: var(--font-sans); }
|
|
5834
5847
|
/* tone \u2192 accent set (default primary). Mirrors Button's --_accent model; Badge's tone vocabulary. */
|
|
@@ -5869,13 +5882,14 @@ function Checkbox({
|
|
|
5869
5882
|
.twc-field { display: flex; flex-direction: column; gap: var(--space-1-5); font-family: var(--font-sans); }
|
|
5870
5883
|
.twc-field__error { font-size: var(--text-xs); color: var(--color-danger-subtle-fg); font-weight: var(--font-medium); }
|
|
5871
5884
|
`);
|
|
5872
|
-
const autoId =
|
|
5885
|
+
const autoId = React55__default.useId();
|
|
5873
5886
|
const fieldId = id || autoId;
|
|
5874
5887
|
const errId = `${fieldId}-error`;
|
|
5875
5888
|
const invalid = Boolean(error);
|
|
5876
|
-
const ref =
|
|
5889
|
+
const ref = React55__default.useRef(null);
|
|
5890
|
+
const setRef = useMergedRef(ref, forwardedRef);
|
|
5877
5891
|
const mixed = indeterminate && !checked;
|
|
5878
|
-
|
|
5892
|
+
React55__default.useEffect(() => {
|
|
5879
5893
|
if (ref.current) ref.current.indeterminate = mixed;
|
|
5880
5894
|
}, [mixed]);
|
|
5881
5895
|
if (process.env.NODE_ENV !== "production" && !label && !description && !rest["aria-label"] && !rest["aria-labelledby"]) {
|
|
@@ -5887,7 +5901,7 @@ function Checkbox({
|
|
|
5887
5901
|
/* @__PURE__ */ jsx(
|
|
5888
5902
|
"input",
|
|
5889
5903
|
{
|
|
5890
|
-
ref,
|
|
5904
|
+
ref: setRef,
|
|
5891
5905
|
id: fieldId,
|
|
5892
5906
|
type: "checkbox",
|
|
5893
5907
|
className: "twc-check__input",
|
|
@@ -5917,7 +5931,7 @@ function Checkbox({
|
|
|
5917
5931
|
control,
|
|
5918
5932
|
/* @__PURE__ */ jsx("span", { id: errId, className: "twc-field__error", children: error })
|
|
5919
5933
|
] });
|
|
5920
|
-
}
|
|
5934
|
+
});
|
|
5921
5935
|
var FIELD_CSS = `
|
|
5922
5936
|
.twc-field { display: flex; flex-direction: column; gap: var(--space-1-5); font-family: var(--font-sans); }
|
|
5923
5937
|
.twc-field__label { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-text); display: flex; gap: 4px; align-items: center; }
|
|
@@ -6035,22 +6049,22 @@ function ColorPicker({
|
|
|
6035
6049
|
}) {
|
|
6036
6050
|
const __twcStyles0 = useScopedStyles("twc-field-styles", FIELD_CSS);
|
|
6037
6051
|
const __twcStyles1 = useScopedStyles("twc-colorpicker-styles", COLORPICKER_CSS);
|
|
6038
|
-
const [internal, setInternal] =
|
|
6052
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
6039
6053
|
const hex = (value !== void 0 ? value : internal) || "#000000";
|
|
6040
6054
|
const hexRe = alpha ? /^#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i : /^#([0-9a-f]{3}|[0-9a-f]{6})$/i;
|
|
6041
|
-
const lastValidRef =
|
|
6055
|
+
const lastValidRef = React55__default.useRef(hex);
|
|
6042
6056
|
if (hexRe.test(hex)) lastValidRef.current = hex;
|
|
6043
|
-
const [open, setOpen] =
|
|
6044
|
-
const [hsv, setHsv] =
|
|
6045
|
-
const [coords, setCoords] =
|
|
6046
|
-
const wrapRef =
|
|
6047
|
-
const triggerRef =
|
|
6048
|
-
const popRef =
|
|
6049
|
-
const areaRef =
|
|
6050
|
-
const hueRef =
|
|
6051
|
-
const alphaRef =
|
|
6057
|
+
const [open, setOpen] = React55__default.useState(false);
|
|
6058
|
+
const [hsv, setHsv] = React55__default.useState(() => hexToHsv(hex) || { h: 239, s: 60, v: 94, a: 1 });
|
|
6059
|
+
const [coords, setCoords] = React55__default.useState(null);
|
|
6060
|
+
const wrapRef = React55__default.useRef(null);
|
|
6061
|
+
const triggerRef = React55__default.useRef(null);
|
|
6062
|
+
const popRef = React55__default.useRef(null);
|
|
6063
|
+
const areaRef = React55__default.useRef(null);
|
|
6064
|
+
const hueRef = React55__default.useRef(null);
|
|
6065
|
+
const alphaRef = React55__default.useRef(null);
|
|
6052
6066
|
const POP_W = 240;
|
|
6053
|
-
const place =
|
|
6067
|
+
const place = React55__default.useCallback(() => {
|
|
6054
6068
|
const el = triggerRef.current;
|
|
6055
6069
|
if (!el) return;
|
|
6056
6070
|
const r2 = el.getBoundingClientRect();
|
|
@@ -6061,7 +6075,7 @@ function ColorPicker({
|
|
|
6061
6075
|
left = Math.max(8, left);
|
|
6062
6076
|
setCoords({ left, top: flip ? void 0 : Math.round(r2.bottom + 6), bottom: flip ? Math.round(vh - r2.top + 6) : void 0 });
|
|
6063
6077
|
}, []);
|
|
6064
|
-
|
|
6078
|
+
React55__default.useEffect(() => {
|
|
6065
6079
|
if (!open) return void 0;
|
|
6066
6080
|
place();
|
|
6067
6081
|
const onMove = () => place();
|
|
@@ -6079,17 +6093,17 @@ function ColorPicker({
|
|
|
6079
6093
|
ro?.disconnect();
|
|
6080
6094
|
};
|
|
6081
6095
|
}, [open, place]);
|
|
6082
|
-
const labelId =
|
|
6096
|
+
const labelId = React55__default.useId();
|
|
6083
6097
|
const descId = `${labelId}-desc`;
|
|
6084
6098
|
const invalid = Boolean(error);
|
|
6085
|
-
|
|
6099
|
+
React55__default.useEffect(() => {
|
|
6086
6100
|
if (disabled) setOpen(false);
|
|
6087
6101
|
}, [disabled]);
|
|
6088
|
-
|
|
6102
|
+
React55__default.useEffect(() => {
|
|
6089
6103
|
const v = hexToHsv(hex);
|
|
6090
6104
|
if (v && hsvToHex(v.h, v.s, v.v).toLowerCase() !== hsvToHex(hsv.h, hsv.s, hsv.v).toLowerCase()) setHsv(v);
|
|
6091
6105
|
}, [hex]);
|
|
6092
|
-
|
|
6106
|
+
React55__default.useEffect(() => {
|
|
6093
6107
|
if (!open) return;
|
|
6094
6108
|
const onDown = (e) => {
|
|
6095
6109
|
if (wrapRef.current && wrapRef.current.contains(e.target)) return;
|
|
@@ -6439,7 +6453,7 @@ function ensureVisible(list, el) {
|
|
|
6439
6453
|
if (top < list.scrollTop) list.scrollTop = top - 4;
|
|
6440
6454
|
else if (bottom > list.scrollTop + list.clientHeight) list.scrollTop = bottom - list.clientHeight + 4;
|
|
6441
6455
|
}
|
|
6442
|
-
|
|
6456
|
+
var Combobox = /* @__PURE__ */ React55__default.forwardRef(function Combobox2({
|
|
6443
6457
|
label,
|
|
6444
6458
|
hint,
|
|
6445
6459
|
error,
|
|
@@ -6472,38 +6486,39 @@ function Combobox({
|
|
|
6472
6486
|
onFocus,
|
|
6473
6487
|
onKeyDown,
|
|
6474
6488
|
...rest
|
|
6475
|
-
}) {
|
|
6489
|
+
}, ref) {
|
|
6476
6490
|
const __twcStyles = useScopedStyles("twc-combo-styles", COMBO_CSS);
|
|
6477
6491
|
if (virtualizedProp && (wrapOptions || renderOption)) warnOnce("combobox-var-height-virtualized", "twico-ui Combobox: `wrapOptions`/`renderOption` disable `virtualized` \u2014 those rows aren't a fixed height.");
|
|
6478
6492
|
const virtualized = virtualizedProp && !wrapOptions && !renderOption;
|
|
6479
|
-
const groups =
|
|
6480
|
-
const flat =
|
|
6481
|
-
const autoId =
|
|
6493
|
+
const groups = React55__default.useMemo(() => normalizeGroups(options), [options]);
|
|
6494
|
+
const flat = React55__default.useMemo(() => groups.flatMap((g) => g.options), [groups]);
|
|
6495
|
+
const autoId = React55__default.useId();
|
|
6482
6496
|
const fieldId = id || autoId;
|
|
6483
|
-
const [internal, setInternal] =
|
|
6497
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
6484
6498
|
const current = value !== void 0 ? value : internal;
|
|
6485
6499
|
const selected = flat.find((o) => o.value === current);
|
|
6486
|
-
const [open, setOpen] =
|
|
6487
|
-
const [query, setQuery] =
|
|
6488
|
-
const [active, setActive] =
|
|
6489
|
-
const [coords, setCoords] =
|
|
6490
|
-
const [scrollTop, setScrollTop] =
|
|
6491
|
-
const [listH, setListH] =
|
|
6492
|
-
const wrapRef =
|
|
6493
|
-
const controlRef =
|
|
6494
|
-
const inputRef =
|
|
6495
|
-
const
|
|
6496
|
-
const
|
|
6497
|
-
const
|
|
6498
|
-
const
|
|
6500
|
+
const [open, setOpen] = React55__default.useState(false);
|
|
6501
|
+
const [query, setQuery] = React55__default.useState("");
|
|
6502
|
+
const [active, setActive] = React55__default.useState(0);
|
|
6503
|
+
const [coords, setCoords] = React55__default.useState(null);
|
|
6504
|
+
const [scrollTop, setScrollTop] = React55__default.useState(0);
|
|
6505
|
+
const [listH, setListH] = React55__default.useState(260);
|
|
6506
|
+
const wrapRef = React55__default.useRef(null);
|
|
6507
|
+
const controlRef = React55__default.useRef(null);
|
|
6508
|
+
const inputRef = React55__default.useRef(null);
|
|
6509
|
+
const setInputRef = useMergedRef(inputRef, ref);
|
|
6510
|
+
const popRef = React55__default.useRef(null);
|
|
6511
|
+
const listRef = React55__default.useRef(null);
|
|
6512
|
+
const activeRef = React55__default.useRef(null);
|
|
6513
|
+
const fGroups = React55__default.useMemo(() => {
|
|
6499
6514
|
const q = query.trim();
|
|
6500
6515
|
const fn = filter === false ? null : typeof filter === "function" ? filter : matches;
|
|
6501
6516
|
return groups.map((g) => ({ group: g.group, options: fn ? g.options.filter((o) => fn(o, q)) : g.options })).filter((g) => g.options.length);
|
|
6502
6517
|
}, [groups, query, filter]);
|
|
6503
|
-
const visible =
|
|
6504
|
-
const rowH =
|
|
6518
|
+
const visible = React55__default.useMemo(() => fGroups.flatMap((g) => g.options), [fGroups]);
|
|
6519
|
+
const rowH = React55__default.useMemo(() => visible.some((o) => o.description) ? 48 : 36, [visible]);
|
|
6505
6520
|
const GROUP_H = 30;
|
|
6506
|
-
const { rows, totalH } =
|
|
6521
|
+
const { rows, totalH } = React55__default.useMemo(() => {
|
|
6507
6522
|
if (!virtualized) return { rows: [], totalH: 0 };
|
|
6508
6523
|
const rows2 = [];
|
|
6509
6524
|
let off = 0;
|
|
@@ -6529,7 +6544,7 @@ function Combobox({
|
|
|
6529
6544
|
}
|
|
6530
6545
|
return from;
|
|
6531
6546
|
};
|
|
6532
|
-
const place =
|
|
6547
|
+
const place = React55__default.useCallback(() => {
|
|
6533
6548
|
const el = controlRef.current;
|
|
6534
6549
|
if (!el) return;
|
|
6535
6550
|
const r2 = el.getBoundingClientRect();
|
|
@@ -6544,7 +6559,7 @@ function Combobox({
|
|
|
6544
6559
|
flip
|
|
6545
6560
|
});
|
|
6546
6561
|
}, [placement, minWidth]);
|
|
6547
|
-
|
|
6562
|
+
React55__default.useEffect(() => {
|
|
6548
6563
|
if (!open || !portal) return;
|
|
6549
6564
|
place();
|
|
6550
6565
|
const onMove = () => place();
|
|
@@ -6562,7 +6577,7 @@ function Combobox({
|
|
|
6562
6577
|
ro?.disconnect();
|
|
6563
6578
|
};
|
|
6564
6579
|
}, [open, portal, place]);
|
|
6565
|
-
|
|
6580
|
+
React55__default.useEffect(() => {
|
|
6566
6581
|
if (!open) return;
|
|
6567
6582
|
const onDown = (e) => {
|
|
6568
6583
|
if (wrapRef.current && wrapRef.current.contains(e.target)) return;
|
|
@@ -6572,33 +6587,33 @@ function Combobox({
|
|
|
6572
6587
|
document.addEventListener("mousedown", onDown);
|
|
6573
6588
|
return () => document.removeEventListener("mousedown", onDown);
|
|
6574
6589
|
}, [open]);
|
|
6575
|
-
|
|
6590
|
+
React55__default.useEffect(() => {
|
|
6576
6591
|
setActive(0);
|
|
6577
6592
|
}, [query]);
|
|
6578
|
-
|
|
6593
|
+
React55__default.useEffect(() => {
|
|
6579
6594
|
if (visible.length === 0) return;
|
|
6580
6595
|
setActive((a) => Math.min(a, visible.length - 1));
|
|
6581
6596
|
}, [visible.length]);
|
|
6582
|
-
const onOpenChangeRef =
|
|
6597
|
+
const onOpenChangeRef = React55__default.useRef(onOpenChange);
|
|
6583
6598
|
onOpenChangeRef.current = onOpenChange;
|
|
6584
|
-
const prevOpenRef =
|
|
6585
|
-
|
|
6599
|
+
const prevOpenRef = React55__default.useRef(open);
|
|
6600
|
+
React55__default.useEffect(() => {
|
|
6586
6601
|
if (prevOpenRef.current !== open) {
|
|
6587
6602
|
prevOpenRef.current = open;
|
|
6588
6603
|
onOpenChangeRef.current?.(open);
|
|
6589
6604
|
}
|
|
6590
6605
|
}, [open]);
|
|
6591
|
-
|
|
6606
|
+
React55__default.useEffect(() => {
|
|
6592
6607
|
if (!open) return;
|
|
6593
6608
|
const idx = visible.findIndex((o) => o.value === current);
|
|
6594
6609
|
setActive(idx >= 0 ? idx : 0);
|
|
6595
6610
|
}, [open]);
|
|
6596
|
-
|
|
6611
|
+
React55__default.useEffect(() => {
|
|
6597
6612
|
if (!open || !virtualized) return;
|
|
6598
6613
|
const el = listRef.current;
|
|
6599
6614
|
if (el && el.clientHeight) setListH(el.clientHeight);
|
|
6600
6615
|
}, [open, virtualized]);
|
|
6601
|
-
|
|
6616
|
+
React55__default.useEffect(() => {
|
|
6602
6617
|
if (!open) return;
|
|
6603
6618
|
if (!virtualized) {
|
|
6604
6619
|
ensureVisible(listRef.current, activeRef.current);
|
|
@@ -6727,7 +6742,7 @@ function Combobox({
|
|
|
6727
6742
|
/* @__PURE__ */ jsx("div", { className: "twc-pop__group", role: "presentation", children: r2.label }, `g${r2.gi}`)
|
|
6728
6743
|
) : renderRow(r2.o, r2.idx)),
|
|
6729
6744
|
vBottom > 0 ? /* @__PURE__ */ jsx("div", { "aria-hidden": "true", style: { height: vBottom } }) : null
|
|
6730
|
-
] }) : fGroups.map((g, gi) => /* @__PURE__ */ jsxs(
|
|
6745
|
+
] }) : fGroups.map((g, gi) => /* @__PURE__ */ jsxs(React55__default.Fragment, { children: [
|
|
6731
6746
|
g.group ? /* @__PURE__ */ jsx("div", { className: "twc-pop__group", role: "presentation", children: g.group }) : null,
|
|
6732
6747
|
g.options.map((o) => {
|
|
6733
6748
|
counter += 1;
|
|
@@ -6785,7 +6800,7 @@ function Combobox({
|
|
|
6785
6800
|
/* @__PURE__ */ jsx(
|
|
6786
6801
|
"input",
|
|
6787
6802
|
{
|
|
6788
|
-
ref:
|
|
6803
|
+
ref: setInputRef,
|
|
6789
6804
|
id: fieldId,
|
|
6790
6805
|
className: "twc-cb__input",
|
|
6791
6806
|
role: "combobox",
|
|
@@ -6840,7 +6855,7 @@ function Combobox({
|
|
|
6840
6855
|
] }),
|
|
6841
6856
|
error ? /* @__PURE__ */ jsx("span", { id: descId, className: "twc-field__error", children: error }) : hint ? /* @__PURE__ */ jsx("span", { id: descId, className: "twc-field__hint", children: hint }) : null
|
|
6842
6857
|
] });
|
|
6843
|
-
}
|
|
6858
|
+
});
|
|
6844
6859
|
var COMMAND_CSS = `
|
|
6845
6860
|
.twc-cmdk__overlay { position: fixed; inset: 0; z-index: var(--z-modal); background: var(--color-overlay); backdrop-filter: blur(3px);
|
|
6846
6861
|
display: flex; align-items: flex-start; justify-content: center; padding-top: 12vh; }
|
|
@@ -6891,14 +6906,14 @@ function CommandPalette({
|
|
|
6891
6906
|
}) {
|
|
6892
6907
|
const __twcStyles = useScopedStyles("twc-cmdk-styles", COMMAND_CSS);
|
|
6893
6908
|
const renderPortal = usePortal();
|
|
6894
|
-
const [query, setQuery] =
|
|
6895
|
-
const [active, setActive] =
|
|
6896
|
-
const inputRef =
|
|
6897
|
-
const listRef =
|
|
6898
|
-
const paletteRef =
|
|
6899
|
-
const baseId =
|
|
6900
|
-
const [mounted, setMounted] =
|
|
6901
|
-
|
|
6909
|
+
const [query, setQuery] = React55__default.useState("");
|
|
6910
|
+
const [active, setActive] = React55__default.useState(0);
|
|
6911
|
+
const inputRef = React55__default.useRef(null);
|
|
6912
|
+
const listRef = React55__default.useRef(null);
|
|
6913
|
+
const paletteRef = React55__default.useRef(null);
|
|
6914
|
+
const baseId = React55__default.useId();
|
|
6915
|
+
const [mounted, setMounted] = React55__default.useState(open);
|
|
6916
|
+
React55__default.useEffect(() => {
|
|
6902
6917
|
if (open) {
|
|
6903
6918
|
setMounted(true);
|
|
6904
6919
|
return;
|
|
@@ -6907,7 +6922,7 @@ function CommandPalette({
|
|
|
6907
6922
|
return () => clearTimeout(t);
|
|
6908
6923
|
}, [open]);
|
|
6909
6924
|
useScrollLock(open);
|
|
6910
|
-
|
|
6925
|
+
React55__default.useEffect(() => {
|
|
6911
6926
|
if (open) {
|
|
6912
6927
|
setQuery("");
|
|
6913
6928
|
setActive(0);
|
|
@@ -6915,7 +6930,7 @@ function CommandPalette({
|
|
|
6915
6930
|
}, [open]);
|
|
6916
6931
|
useFocusTrap(paletteRef, open && mounted);
|
|
6917
6932
|
const isTop = useLayer(open && mounted);
|
|
6918
|
-
|
|
6933
|
+
React55__default.useEffect(() => {
|
|
6919
6934
|
if (!open) return void 0;
|
|
6920
6935
|
const onKey = (e) => {
|
|
6921
6936
|
if (e.defaultPrevented || !isTop()) return;
|
|
@@ -6928,7 +6943,7 @@ function CommandPalette({
|
|
|
6928
6943
|
return () => document.removeEventListener("keydown", onKey);
|
|
6929
6944
|
}, [open, onClose, isTop]);
|
|
6930
6945
|
const q = query.trim().toLowerCase();
|
|
6931
|
-
const filtered =
|
|
6946
|
+
const filtered = React55__default.useMemo(() => commands.filter(
|
|
6932
6947
|
(c) => !q || c.label.toLowerCase().includes(q) || (c.keywords || "").toLowerCase().includes(q) || (c.group || "").toLowerCase().includes(q)
|
|
6933
6948
|
), [commands, q]);
|
|
6934
6949
|
const groups = [];
|
|
@@ -6943,7 +6958,7 @@ function CommandPalette({
|
|
|
6943
6958
|
g.items.push(c);
|
|
6944
6959
|
flat.push(c);
|
|
6945
6960
|
});
|
|
6946
|
-
|
|
6961
|
+
React55__default.useEffect(() => {
|
|
6947
6962
|
setActive(0);
|
|
6948
6963
|
}, [query]);
|
|
6949
6964
|
const run = (cmd) => {
|
|
@@ -6963,7 +6978,7 @@ function CommandPalette({
|
|
|
6963
6978
|
if (cmd) run(cmd);
|
|
6964
6979
|
}
|
|
6965
6980
|
}
|
|
6966
|
-
|
|
6981
|
+
React55__default.useEffect(() => {
|
|
6967
6982
|
const node = listRef.current?.querySelector('[data-active="true"]');
|
|
6968
6983
|
if (node) node.scrollIntoView({ block: "nearest" });
|
|
6969
6984
|
}, [active]);
|
|
@@ -7153,13 +7168,13 @@ function Currency({
|
|
|
7153
7168
|
const prec = precision != null ? precision : meta.precision;
|
|
7154
7169
|
const sym = symbol != null ? symbol : meta.symbol;
|
|
7155
7170
|
const cur = code != null ? code : meta.code;
|
|
7156
|
-
const autoId =
|
|
7171
|
+
const autoId = React55__default.useId();
|
|
7157
7172
|
const fieldId = id || autoId;
|
|
7158
7173
|
const invalid = Boolean(error);
|
|
7159
7174
|
const controlled = value !== void 0;
|
|
7160
|
-
const [internal, setInternal] =
|
|
7175
|
+
const [internal, setInternal] = React55__default.useState(() => clampPrecision(String(defaultValue ?? ""), prec));
|
|
7161
7176
|
const shown = controlled ? clampPrecision(String(value ?? ""), prec) : internal;
|
|
7162
|
-
|
|
7177
|
+
React55__default.useEffect(() => {
|
|
7163
7178
|
if (!controlled) return;
|
|
7164
7179
|
const raw = String(value ?? "");
|
|
7165
7180
|
if (shown !== raw) {
|
|
@@ -7167,7 +7182,7 @@ function Currency({
|
|
|
7167
7182
|
onValueChange?.(shown === "" || Number.isNaN(n) ? null : n, shown);
|
|
7168
7183
|
}
|
|
7169
7184
|
}, [controlled, shown, value]);
|
|
7170
|
-
|
|
7185
|
+
React55__default.useEffect(() => {
|
|
7171
7186
|
if (controlled) return;
|
|
7172
7187
|
const next = clampPrecision(internal, prec);
|
|
7173
7188
|
if (next === internal) return;
|
|
@@ -7226,8 +7241,8 @@ function Currency({
|
|
|
7226
7241
|
] });
|
|
7227
7242
|
}
|
|
7228
7243
|
function useFallbackName(ref, hasOwnName) {
|
|
7229
|
-
const [needsFallback, setNeedsFallback] =
|
|
7230
|
-
const useIso2 = typeof document !== "undefined" ?
|
|
7244
|
+
const [needsFallback, setNeedsFallback] = React55__default.useState(false);
|
|
7245
|
+
const useIso2 = typeof document !== "undefined" ? React55__default.useLayoutEffect : React55__default.useEffect;
|
|
7231
7246
|
useIso2(() => {
|
|
7232
7247
|
if (hasOwnName) {
|
|
7233
7248
|
setNeedsFallback(false);
|
|
@@ -7354,7 +7369,7 @@ function ensureVisible2(list, el) {
|
|
|
7354
7369
|
if (top < list.scrollTop) list.scrollTop = top - 4;
|
|
7355
7370
|
else if (bottom > list.scrollTop + list.clientHeight) list.scrollTop = bottom - list.clientHeight + 4;
|
|
7356
7371
|
}
|
|
7357
|
-
|
|
7372
|
+
var Select = /* @__PURE__ */ React55__default.forwardRef(function Select2({
|
|
7358
7373
|
label,
|
|
7359
7374
|
hint,
|
|
7360
7375
|
error,
|
|
@@ -7385,46 +7400,47 @@ function Select({
|
|
|
7385
7400
|
onClick,
|
|
7386
7401
|
onKeyDown,
|
|
7387
7402
|
...rest
|
|
7388
|
-
}) {
|
|
7403
|
+
}, ref) {
|
|
7389
7404
|
const __twcStyles = useScopedStyles("twc-select-styles", SELECT_CSS);
|
|
7390
7405
|
if (virtualizedProp && renderOption) warnOnce("select-renderoption-virtualized", "twico-ui Select: `renderOption` disables `virtualized` \u2014 custom rows aren't a fixed height.");
|
|
7391
7406
|
const virtualized = virtualizedProp && !renderOption;
|
|
7392
|
-
const bufferRef =
|
|
7393
|
-
const bufferTimerRef =
|
|
7394
|
-
const groups =
|
|
7395
|
-
const flat =
|
|
7396
|
-
const autoId =
|
|
7407
|
+
const bufferRef = React55__default.useRef("");
|
|
7408
|
+
const bufferTimerRef = React55__default.useRef(null);
|
|
7409
|
+
const groups = React55__default.useMemo(() => normalizeGroups2(options), [options]);
|
|
7410
|
+
const flat = React55__default.useMemo(() => groups.flatMap((g) => g.options), [groups]);
|
|
7411
|
+
const autoId = React55__default.useId();
|
|
7397
7412
|
const fieldId = id || autoId;
|
|
7398
|
-
const [internal, setInternal] =
|
|
7413
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
7399
7414
|
const current = value !== void 0 ? value : internal;
|
|
7400
|
-
const [open, setOpen] =
|
|
7401
|
-
const [render, setRender] =
|
|
7402
|
-
const [active, setActive] =
|
|
7403
|
-
const [coords, setCoords] =
|
|
7404
|
-
const [query, setQuery] =
|
|
7405
|
-
const [scrollTop, setScrollTop] =
|
|
7406
|
-
const [listH, setListH] =
|
|
7407
|
-
const wrapRef =
|
|
7408
|
-
const triggerRef =
|
|
7409
|
-
const
|
|
7410
|
-
const
|
|
7411
|
-
const
|
|
7412
|
-
const
|
|
7415
|
+
const [open, setOpen] = React55__default.useState(false);
|
|
7416
|
+
const [render, setRender] = React55__default.useState(false);
|
|
7417
|
+
const [active, setActive] = React55__default.useState(0);
|
|
7418
|
+
const [coords, setCoords] = React55__default.useState(null);
|
|
7419
|
+
const [query, setQuery] = React55__default.useState("");
|
|
7420
|
+
const [scrollTop, setScrollTop] = React55__default.useState(0);
|
|
7421
|
+
const [listH, setListH] = React55__default.useState(260);
|
|
7422
|
+
const wrapRef = React55__default.useRef(null);
|
|
7423
|
+
const triggerRef = React55__default.useRef(null);
|
|
7424
|
+
const setTriggerRef = useMergedRef(triggerRef, ref);
|
|
7425
|
+
const popRef = React55__default.useRef(null);
|
|
7426
|
+
const listRef = React55__default.useRef(null);
|
|
7427
|
+
const activeRef = React55__default.useRef(null);
|
|
7428
|
+
const searchRef = React55__default.useRef(null);
|
|
7413
7429
|
const showSearch = searchable === void 0 ? flat.length > 5 : searchable;
|
|
7414
|
-
const fGroupsLive =
|
|
7430
|
+
const fGroupsLive = React55__default.useMemo(() => {
|
|
7415
7431
|
const q = query.trim().toLowerCase();
|
|
7416
7432
|
if (!q) return groups;
|
|
7417
7433
|
return groups.map((g) => ({ group: g.group, options: g.options.filter((o) => o.label.toLowerCase().includes(q) || o.description && o.description.toLowerCase().includes(q)) })).filter((g) => g.options.length);
|
|
7418
7434
|
}, [groups, query]);
|
|
7419
|
-
const fGroupsFrozen =
|
|
7420
|
-
|
|
7435
|
+
const fGroupsFrozen = React55__default.useRef(fGroupsLive);
|
|
7436
|
+
React55__default.useEffect(() => {
|
|
7421
7437
|
if (open) fGroupsFrozen.current = fGroupsLive;
|
|
7422
7438
|
}, [open, fGroupsLive]);
|
|
7423
7439
|
const fGroups = open ? fGroupsLive : fGroupsFrozen.current;
|
|
7424
|
-
const visible =
|
|
7425
|
-
const rowH =
|
|
7440
|
+
const visible = React55__default.useMemo(() => fGroups.flatMap((g) => g.options), [fGroups]);
|
|
7441
|
+
const rowH = React55__default.useMemo(() => visible.some((o) => o.description) ? 48 : 36, [visible]);
|
|
7426
7442
|
const GROUP_H = 30;
|
|
7427
|
-
const { rows, totalH } =
|
|
7443
|
+
const { rows, totalH } = React55__default.useMemo(() => {
|
|
7428
7444
|
if (!virtualized) return { rows: [], totalH: 0 };
|
|
7429
7445
|
const rows2 = [];
|
|
7430
7446
|
let off = 0;
|
|
@@ -7451,7 +7467,7 @@ function Select({
|
|
|
7451
7467
|
}
|
|
7452
7468
|
return from;
|
|
7453
7469
|
};
|
|
7454
|
-
const place =
|
|
7470
|
+
const place = React55__default.useCallback(() => {
|
|
7455
7471
|
const el = triggerRef.current;
|
|
7456
7472
|
if (!el) return;
|
|
7457
7473
|
const r2 = el.getBoundingClientRect();
|
|
@@ -7467,7 +7483,7 @@ function Select({
|
|
|
7467
7483
|
flip
|
|
7468
7484
|
});
|
|
7469
7485
|
}, [placement, minWidth, matchTriggerWidth]);
|
|
7470
|
-
|
|
7486
|
+
React55__default.useEffect(() => {
|
|
7471
7487
|
if (!open || !portal) return;
|
|
7472
7488
|
place();
|
|
7473
7489
|
const onMove = () => place();
|
|
@@ -7485,7 +7501,7 @@ function Select({
|
|
|
7485
7501
|
ro?.disconnect();
|
|
7486
7502
|
};
|
|
7487
7503
|
}, [open, portal, place]);
|
|
7488
|
-
|
|
7504
|
+
React55__default.useEffect(() => {
|
|
7489
7505
|
if (!open) return;
|
|
7490
7506
|
const idx = flat.findIndex((o) => o.value === current);
|
|
7491
7507
|
setActive(idx >= 0 ? idx : 0);
|
|
@@ -7500,19 +7516,19 @@ function Select({
|
|
|
7500
7516
|
document.addEventListener("mousedown", onDown);
|
|
7501
7517
|
return () => document.removeEventListener("mousedown", onDown);
|
|
7502
7518
|
}, [open]);
|
|
7503
|
-
|
|
7519
|
+
React55__default.useEffect(() => {
|
|
7504
7520
|
setActive(0);
|
|
7505
7521
|
}, [query]);
|
|
7506
|
-
|
|
7522
|
+
React55__default.useEffect(() => {
|
|
7507
7523
|
if (visible.length === 0) return;
|
|
7508
7524
|
setActive((a) => Math.min(a, visible.length - 1));
|
|
7509
7525
|
}, [visible.length]);
|
|
7510
|
-
|
|
7526
|
+
React55__default.useEffect(() => {
|
|
7511
7527
|
if (!open || !virtualized) return;
|
|
7512
7528
|
const el = listRef.current;
|
|
7513
7529
|
if (el && el.clientHeight) setListH(el.clientHeight);
|
|
7514
7530
|
}, [open, virtualized, render]);
|
|
7515
|
-
|
|
7531
|
+
React55__default.useEffect(() => {
|
|
7516
7532
|
if (!open) return;
|
|
7517
7533
|
if (!virtualized) {
|
|
7518
7534
|
ensureVisible2(listRef.current, activeRef.current);
|
|
@@ -7529,7 +7545,7 @@ function Select({
|
|
|
7529
7545
|
if (next !== el.scrollTop) el.scrollTop = next;
|
|
7530
7546
|
setScrollTop(next);
|
|
7531
7547
|
}, [active, open, virtualized, rows, listH]);
|
|
7532
|
-
|
|
7548
|
+
React55__default.useEffect(() => {
|
|
7533
7549
|
if (open) {
|
|
7534
7550
|
setRender(true);
|
|
7535
7551
|
return;
|
|
@@ -7538,8 +7554,8 @@ function Select({
|
|
|
7538
7554
|
const t = setTimeout(() => setRender(false), 170);
|
|
7539
7555
|
return () => clearTimeout(t);
|
|
7540
7556
|
}, [open]);
|
|
7541
|
-
const prevOpen =
|
|
7542
|
-
|
|
7557
|
+
const prevOpen = React55__default.useRef(false);
|
|
7558
|
+
React55__default.useEffect(() => {
|
|
7543
7559
|
if (prevOpen.current && !open) {
|
|
7544
7560
|
const ae = typeof document !== "undefined" ? document.activeElement : null;
|
|
7545
7561
|
if (popRef.current && ae && popRef.current.contains(ae)) triggerRef.current?.focus();
|
|
@@ -7692,7 +7708,7 @@ function Select({
|
|
|
7692
7708
|
/* @__PURE__ */ jsx("div", { className: "twc-pop__group", role: "presentation", children: r2.label }, `g${r2.gi}`)
|
|
7693
7709
|
) : renderRow(r2.o, r2.idx)),
|
|
7694
7710
|
vBottom > 0 ? /* @__PURE__ */ jsx("div", { "aria-hidden": "true", style: { height: vBottom } }) : null
|
|
7695
|
-
] }) : fGroups.map((g, gi) => /* @__PURE__ */ jsxs(
|
|
7711
|
+
] }) : fGroups.map((g, gi) => /* @__PURE__ */ jsxs(React55__default.Fragment, { children: [
|
|
7696
7712
|
g.group ? /* @__PURE__ */ jsx("div", { className: "twc-pop__group", role: "presentation", children: g.group }) : null,
|
|
7697
7713
|
g.options.map((o) => {
|
|
7698
7714
|
counter += 1;
|
|
@@ -7739,7 +7755,7 @@ function Select({
|
|
|
7739
7755
|
{
|
|
7740
7756
|
type: "button",
|
|
7741
7757
|
id: fieldId,
|
|
7742
|
-
ref:
|
|
7758
|
+
ref: setTriggerRef,
|
|
7743
7759
|
className: "twc-sel__trigger",
|
|
7744
7760
|
"data-size": size,
|
|
7745
7761
|
"data-tone": tone,
|
|
@@ -7777,7 +7793,7 @@ function Select({
|
|
|
7777
7793
|
] }),
|
|
7778
7794
|
error ? /* @__PURE__ */ jsx("span", { id: descId, className: "twc-field__error", children: error }) : hint ? /* @__PURE__ */ jsx("span", { id: descId, className: "twc-field__hint", children: hint }) : null
|
|
7779
7795
|
] });
|
|
7780
|
-
}
|
|
7796
|
+
});
|
|
7781
7797
|
var CURF_CSS = `
|
|
7782
7798
|
/* Shared input shell (self-contained \u2014 CurrencyField must not depend on the
|
|
7783
7799
|
Currency component being rendered on the same page to get these styles). */
|
|
@@ -7854,21 +7870,21 @@ function CurrencyField({
|
|
|
7854
7870
|
...rest
|
|
7855
7871
|
}) {
|
|
7856
7872
|
const __twcStyles = useScopedStyles("twc-curf-styles", CURF_CSS);
|
|
7857
|
-
const autoId =
|
|
7873
|
+
const autoId = React55__default.useId();
|
|
7858
7874
|
const fieldId = id || autoId;
|
|
7859
7875
|
const invalid = Boolean(error);
|
|
7860
7876
|
const curControlled = currency !== void 0;
|
|
7861
|
-
const [curInternal, setCurInternal] =
|
|
7877
|
+
const [curInternal, setCurInternal] = React55__default.useState(defaultCurrency);
|
|
7862
7878
|
const cur = curControlled ? currency : curInternal;
|
|
7863
7879
|
const meta = CURRENCIES[cur] || CURRENCIES.USD;
|
|
7864
7880
|
const prec = meta.precision;
|
|
7865
7881
|
const valControlled = value !== void 0;
|
|
7866
|
-
const [valInternal, setValInternal] =
|
|
7882
|
+
const [valInternal, setValInternal] = React55__default.useState(() => clampPrecision(String(defaultValue ?? ""), prec));
|
|
7867
7883
|
const shown = valControlled ? clampPrecision(String(value ?? ""), prec) : valInternal;
|
|
7868
7884
|
const descId = `${fieldId}-desc`;
|
|
7869
7885
|
const describedBy = [error || hint ? descId : null, rest["aria-describedby"]].filter(Boolean).join(" ") || void 0;
|
|
7870
7886
|
const ariaInvalid = invalid ? true : rest["aria-invalid"] ?? void 0;
|
|
7871
|
-
|
|
7887
|
+
React55__default.useEffect(() => {
|
|
7872
7888
|
if (!valControlled) {
|
|
7873
7889
|
const clamped = clampPrecision(valInternal, prec);
|
|
7874
7890
|
if (clamped !== valInternal) {
|
|
@@ -7884,7 +7900,7 @@ function CurrencyField({
|
|
|
7884
7900
|
}
|
|
7885
7901
|
}
|
|
7886
7902
|
}, [prec, cur, shown, value, valControlled, valInternal]);
|
|
7887
|
-
const options =
|
|
7903
|
+
const options = React55__default.useMemo(() => {
|
|
7888
7904
|
if (!currencies) return CURRENCY_OPTIONS;
|
|
7889
7905
|
return currencies.map((c) => typeof c === "string" ? { value: c, label: `${c} \u2014 ${(CURRENCIES[c] || {}).label || c}` } : c);
|
|
7890
7906
|
}, [currencies]);
|
|
@@ -8032,7 +8048,7 @@ var INPUT_EXTRA_CSS = `
|
|
|
8032
8048
|
.twc-field__count { margin-inline-start: auto; font-size: var(--text-xs); color: var(--color-text-muted); font-variant-numeric: tabular-nums; flex: none; }
|
|
8033
8049
|
.twc-field__count[data-danger="true"] { color: var(--color-danger-subtle-fg); }
|
|
8034
8050
|
`;
|
|
8035
|
-
|
|
8051
|
+
var Input = /* @__PURE__ */ React55__default.forwardRef(function Input2({
|
|
8036
8052
|
label,
|
|
8037
8053
|
hint,
|
|
8038
8054
|
error,
|
|
@@ -8050,16 +8066,16 @@ function Input({
|
|
|
8050
8066
|
id,
|
|
8051
8067
|
className = "",
|
|
8052
8068
|
...rest
|
|
8053
|
-
}) {
|
|
8069
|
+
}, ref) {
|
|
8054
8070
|
const __twcStyles = useScopedStyles("twc-field-styles", FIELD_CSS2);
|
|
8055
8071
|
const __twcExtra = useScopedStyles("twc-input-extra-styles", INPUT_EXTRA_CSS);
|
|
8056
|
-
const autoId =
|
|
8072
|
+
const autoId = React55__default.useId();
|
|
8057
8073
|
const fieldId = id || autoId;
|
|
8058
8074
|
const descId = `${fieldId}-desc`;
|
|
8059
8075
|
const countId = `${fieldId}-count`;
|
|
8060
8076
|
const invalid = Boolean(error);
|
|
8061
8077
|
const countControlled = rest.value !== void 0;
|
|
8062
|
-
const [len2, setLen] =
|
|
8078
|
+
const [len2, setLen] = React55__default.useState(() => String(rest.defaultValue ?? "").length);
|
|
8063
8079
|
const count = countControlled ? String(rest.value ?? "").length : len2;
|
|
8064
8080
|
const max = rest.maxLength;
|
|
8065
8081
|
const showCounter = showCount && max != null;
|
|
@@ -8068,13 +8084,20 @@ function Input({
|
|
|
8068
8084
|
rest.onChange?.(e);
|
|
8069
8085
|
if ((showCount || clearable) && !countControlled) setLen(e.target.value.length);
|
|
8070
8086
|
};
|
|
8071
|
-
const inputRef =
|
|
8072
|
-
const
|
|
8073
|
-
const setRef = React54__default.useCallback((node) => {
|
|
8087
|
+
const inputRef = React55__default.useRef(null);
|
|
8088
|
+
const setRef = React55__default.useCallback((node) => {
|
|
8074
8089
|
inputRef.current = node;
|
|
8075
|
-
if (typeof
|
|
8076
|
-
|
|
8077
|
-
|
|
8090
|
+
if (typeof ref === "function") {
|
|
8091
|
+
const cleanup = ref(node);
|
|
8092
|
+
if (typeof cleanup === "function") return () => {
|
|
8093
|
+
inputRef.current = null;
|
|
8094
|
+
cleanup();
|
|
8095
|
+
};
|
|
8096
|
+
} else if (ref && typeof ref === "object") {
|
|
8097
|
+
ref.current = node;
|
|
8098
|
+
}
|
|
8099
|
+
return void 0;
|
|
8100
|
+
}, [ref]);
|
|
8078
8101
|
const clearField = () => {
|
|
8079
8102
|
const el = inputRef.current;
|
|
8080
8103
|
if (!el) return;
|
|
@@ -8088,7 +8111,7 @@ function Input({
|
|
|
8088
8111
|
const ariaInvalid = invalid ? true : rest["aria-invalid"] ?? void 0;
|
|
8089
8112
|
const describedBy = [error || hint ? descId : null, showCounter ? countId : null, rest["aria-describedby"]].filter(Boolean).join(" ") || void 0;
|
|
8090
8113
|
const isPassword = type === "password";
|
|
8091
|
-
const [revealed, setRevealed] =
|
|
8114
|
+
const [revealed, setRevealed] = React55__default.useState(false);
|
|
8092
8115
|
const effectiveType = isPassword && revealed ? "text" : type;
|
|
8093
8116
|
const suffix = rightIcon ? /* @__PURE__ */ jsx("span", { className: "twc-input__affix", children: rightIcon }) : isPassword ? /* @__PURE__ */ jsx(
|
|
8094
8117
|
"button",
|
|
@@ -8153,7 +8176,7 @@ function Input({
|
|
|
8153
8176
|
] }) : null
|
|
8154
8177
|
] }) : null
|
|
8155
8178
|
] });
|
|
8156
|
-
}
|
|
8179
|
+
});
|
|
8157
8180
|
var MULTI_CSS = `
|
|
8158
8181
|
.twc-field { display: flex; flex-direction: column; gap: var(--space-1-5); font-family: var(--font-sans); }
|
|
8159
8182
|
.twc-field__label { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-text); display: flex; gap: 4px; align-items: center; }
|
|
@@ -8270,7 +8293,7 @@ function ensureVisible3(list, el) {
|
|
|
8270
8293
|
if (top < list.scrollTop) list.scrollTop = top - 4;
|
|
8271
8294
|
else if (bottom > list.scrollTop + list.clientHeight) list.scrollTop = bottom - list.clientHeight + 4;
|
|
8272
8295
|
}
|
|
8273
|
-
|
|
8296
|
+
var MultiSelect = /* @__PURE__ */ React55__default.forwardRef(function MultiSelect2({
|
|
8274
8297
|
label,
|
|
8275
8298
|
hint,
|
|
8276
8299
|
error,
|
|
@@ -8302,37 +8325,38 @@ function MultiSelect({
|
|
|
8302
8325
|
onFocus,
|
|
8303
8326
|
onKeyDown,
|
|
8304
8327
|
...rest
|
|
8305
|
-
}) {
|
|
8328
|
+
}, ref) {
|
|
8306
8329
|
const __twcStyles = useScopedStyles("twc-ms-styles", MULTI_CSS);
|
|
8307
8330
|
if (virtualizedProp && renderOption) warnOnce("multiselect-renderoption-virtualized", "twico-ui MultiSelect: `renderOption` disables `virtualized` \u2014 custom rows aren't a fixed height.");
|
|
8308
8331
|
const virtualized = virtualizedProp && !renderOption;
|
|
8309
|
-
const groups =
|
|
8310
|
-
const flat =
|
|
8311
|
-
const autoId =
|
|
8332
|
+
const groups = React55__default.useMemo(() => normalizeGroups3(options), [options]);
|
|
8333
|
+
const flat = React55__default.useMemo(() => groups.flatMap((g) => g.options), [groups]);
|
|
8334
|
+
const autoId = React55__default.useId();
|
|
8312
8335
|
const fieldId = id || autoId;
|
|
8313
|
-
const [internal, setInternal] =
|
|
8336
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
8314
8337
|
const selected = value !== void 0 ? value : internal;
|
|
8315
|
-
const [open, setOpen] =
|
|
8316
|
-
const [query, setQuery] =
|
|
8317
|
-
const [active, setActive] =
|
|
8318
|
-
const [coords, setCoords] =
|
|
8319
|
-
const [scrollTop, setScrollTop] =
|
|
8320
|
-
const [listH, setListH] =
|
|
8321
|
-
const wrapRef =
|
|
8322
|
-
const controlRef =
|
|
8323
|
-
const inputRef =
|
|
8324
|
-
const
|
|
8325
|
-
const
|
|
8326
|
-
const
|
|
8327
|
-
const
|
|
8338
|
+
const [open, setOpen] = React55__default.useState(false);
|
|
8339
|
+
const [query, setQuery] = React55__default.useState("");
|
|
8340
|
+
const [active, setActive] = React55__default.useState(0);
|
|
8341
|
+
const [coords, setCoords] = React55__default.useState(null);
|
|
8342
|
+
const [scrollTop, setScrollTop] = React55__default.useState(0);
|
|
8343
|
+
const [listH, setListH] = React55__default.useState(260);
|
|
8344
|
+
const wrapRef = React55__default.useRef(null);
|
|
8345
|
+
const controlRef = React55__default.useRef(null);
|
|
8346
|
+
const inputRef = React55__default.useRef(null);
|
|
8347
|
+
const setInputRef = useMergedRef(inputRef, ref);
|
|
8348
|
+
const popRef = React55__default.useRef(null);
|
|
8349
|
+
const listRef = React55__default.useRef(null);
|
|
8350
|
+
const activeRef = React55__default.useRef(null);
|
|
8351
|
+
const fGroups = React55__default.useMemo(() => {
|
|
8328
8352
|
const q = query.trim();
|
|
8329
8353
|
const fn = filter === false ? null : typeof filter === "function" ? filter : matches2;
|
|
8330
8354
|
return groups.map((g) => ({ group: g.group, options: fn ? g.options.filter((o) => fn(o, q)) : g.options })).filter((g) => g.options.length);
|
|
8331
8355
|
}, [groups, query, filter]);
|
|
8332
|
-
const visible =
|
|
8333
|
-
const rowH =
|
|
8356
|
+
const visible = React55__default.useMemo(() => fGroups.flatMap((g) => g.options), [fGroups]);
|
|
8357
|
+
const rowH = React55__default.useMemo(() => visible.some((o) => o.description) ? 48 : 36, [visible]);
|
|
8334
8358
|
const GROUP_H = 30;
|
|
8335
|
-
const { rows, totalH } =
|
|
8359
|
+
const { rows, totalH } = React55__default.useMemo(() => {
|
|
8336
8360
|
if (!virtualized) return { rows: [], totalH: 0 };
|
|
8337
8361
|
const rows2 = [];
|
|
8338
8362
|
let off = 0;
|
|
@@ -8360,7 +8384,7 @@ function MultiSelect({
|
|
|
8360
8384
|
}
|
|
8361
8385
|
return from;
|
|
8362
8386
|
};
|
|
8363
|
-
const place =
|
|
8387
|
+
const place = React55__default.useCallback(() => {
|
|
8364
8388
|
const el = controlRef.current;
|
|
8365
8389
|
if (!el) return;
|
|
8366
8390
|
const r2 = el.getBoundingClientRect();
|
|
@@ -8375,7 +8399,7 @@ function MultiSelect({
|
|
|
8375
8399
|
flip
|
|
8376
8400
|
});
|
|
8377
8401
|
}, [placement, minWidth]);
|
|
8378
|
-
|
|
8402
|
+
React55__default.useEffect(() => {
|
|
8379
8403
|
if (!open || !portal) return;
|
|
8380
8404
|
place();
|
|
8381
8405
|
const onMove = () => place();
|
|
@@ -8393,7 +8417,7 @@ function MultiSelect({
|
|
|
8393
8417
|
ro?.disconnect();
|
|
8394
8418
|
};
|
|
8395
8419
|
}, [open, portal, place]);
|
|
8396
|
-
|
|
8420
|
+
React55__default.useEffect(() => {
|
|
8397
8421
|
if (!open) return;
|
|
8398
8422
|
const onDown = (e) => {
|
|
8399
8423
|
if (wrapRef.current && wrapRef.current.contains(e.target)) return;
|
|
@@ -8404,19 +8428,19 @@ function MultiSelect({
|
|
|
8404
8428
|
document.addEventListener("mousedown", onDown);
|
|
8405
8429
|
return () => document.removeEventListener("mousedown", onDown);
|
|
8406
8430
|
}, [open]);
|
|
8407
|
-
|
|
8431
|
+
React55__default.useEffect(() => {
|
|
8408
8432
|
setActive(0);
|
|
8409
8433
|
}, [query]);
|
|
8410
|
-
|
|
8434
|
+
React55__default.useEffect(() => {
|
|
8411
8435
|
if (visible.length === 0) return;
|
|
8412
8436
|
setActive((a) => Math.min(a, visible.length - 1));
|
|
8413
8437
|
}, [visible.length]);
|
|
8414
|
-
|
|
8438
|
+
React55__default.useEffect(() => {
|
|
8415
8439
|
if (!open || !virtualized) return;
|
|
8416
8440
|
const el = listRef.current;
|
|
8417
8441
|
if (el && el.clientHeight) setListH(el.clientHeight);
|
|
8418
8442
|
}, [open, virtualized]);
|
|
8419
|
-
|
|
8443
|
+
React55__default.useEffect(() => {
|
|
8420
8444
|
if (!open) return;
|
|
8421
8445
|
if (!virtualized) {
|
|
8422
8446
|
ensureVisible3(listRef.current, activeRef.current);
|
|
@@ -8540,7 +8564,7 @@ function MultiSelect({
|
|
|
8540
8564
|
/* @__PURE__ */ jsx("div", { className: "twc-pop__group", role: "presentation", children: r2.label }, `g${r2.gi}`)
|
|
8541
8565
|
) : renderRow(r2.o, r2.idx)),
|
|
8542
8566
|
vBottom > 0 ? /* @__PURE__ */ jsx("div", { "aria-hidden": "true", style: { height: vBottom } }) : null
|
|
8543
|
-
] }) : fGroups.map((g, gi) => /* @__PURE__ */ jsxs(
|
|
8567
|
+
] }) : fGroups.map((g, gi) => /* @__PURE__ */ jsxs(React55__default.Fragment, { children: [
|
|
8544
8568
|
g.group ? /* @__PURE__ */ jsx("div", { className: "twc-pop__group", role: "presentation", children: g.group }) : null,
|
|
8545
8569
|
g.options.map((o) => {
|
|
8546
8570
|
counter += 1;
|
|
@@ -8613,7 +8637,7 @@ function MultiSelect({
|
|
|
8613
8637
|
/* @__PURE__ */ jsx(
|
|
8614
8638
|
"input",
|
|
8615
8639
|
{
|
|
8616
|
-
ref:
|
|
8640
|
+
ref: setInputRef,
|
|
8617
8641
|
id: fieldId,
|
|
8618
8642
|
className: "twc-ms__input",
|
|
8619
8643
|
role: "combobox",
|
|
@@ -8672,7 +8696,7 @@ function MultiSelect({
|
|
|
8672
8696
|
] }),
|
|
8673
8697
|
error ? /* @__PURE__ */ jsx("span", { id: descId, className: "twc-field__error", children: error }) : hint ? /* @__PURE__ */ jsx("span", { id: descId, className: "twc-field__hint", children: hint }) : null
|
|
8674
8698
|
] });
|
|
8675
|
-
}
|
|
8699
|
+
});
|
|
8676
8700
|
var PAGINATION_CSS = `
|
|
8677
8701
|
.twc-pagination { display: inline-flex; align-items: center; gap: 4px; font-family: var(--font-sans); }
|
|
8678
8702
|
.twc-page {
|
|
@@ -8747,7 +8771,7 @@ function Pagination({
|
|
|
8747
8771
|
}
|
|
8748
8772
|
const jumperEnabled = showPageJumper ?? showJumper;
|
|
8749
8773
|
const __twcStyles = useScopedStyles("twc-pagination-styles", PAGINATION_CSS);
|
|
8750
|
-
const [internal, setInternal] =
|
|
8774
|
+
const [internal, setInternal] = React55__default.useState(defaultPage);
|
|
8751
8775
|
const page = pageProp !== void 0 ? pageProp : internal;
|
|
8752
8776
|
const pages = buildPages(page, total, siblings, boundaries);
|
|
8753
8777
|
const go = (p) => {
|
|
@@ -8755,7 +8779,7 @@ function Pagination({
|
|
|
8755
8779
|
if (pageProp === void 0) setInternal(p);
|
|
8756
8780
|
onChange?.(p);
|
|
8757
8781
|
};
|
|
8758
|
-
const [jump, setJump] =
|
|
8782
|
+
const [jump, setJump] = React55__default.useState("");
|
|
8759
8783
|
const submitJump = () => {
|
|
8760
8784
|
const n = parseInt(jump, 10);
|
|
8761
8785
|
if (!Number.isNaN(n)) go(Math.min(Math.max(n, 1), total));
|
|
@@ -9632,27 +9656,27 @@ function renderCombined(srcCols, row, cfg) {
|
|
|
9632
9656
|
const v = getColVal(sc, row);
|
|
9633
9657
|
if (v == null || v === "") return;
|
|
9634
9658
|
const disp = sc.valueFormatter ? sc.valueFormatter(v, row) : v;
|
|
9635
|
-
const label = cfg.labels ?
|
|
9636
|
-
if (count > 0 && cfg.layout !== "stack") nodes.push(
|
|
9637
|
-
nodes.push(
|
|
9659
|
+
const label = cfg.labels ? React55__default.createElement("span", { className: "twc-dt__combine-label" }, colLabel(sc) + ": ") : null;
|
|
9660
|
+
if (count > 0 && cfg.layout !== "stack") nodes.push(React55__default.createElement("span", { key: "sep" + idx, className: "twc-dt__combine-sep", "aria-hidden": "true" }, cfg.separator));
|
|
9661
|
+
nodes.push(React55__default.createElement("span", { key: idx, className: "twc-dt__combine-item" }, label, disp));
|
|
9638
9662
|
count++;
|
|
9639
9663
|
});
|
|
9640
9664
|
if (!nodes.length) return "";
|
|
9641
|
-
return
|
|
9665
|
+
return React55__default.createElement("span", { className: cfg.layout === "stack" ? "twc-dt__combine twc-dt__combine--stack" : "twc-dt__combine" }, nodes);
|
|
9642
9666
|
}
|
|
9643
9667
|
var diffValueNode = (col, v, row) => col.renderCell ? col.renderCell(v, row) : col.valueFormatter ? col.valueFormatter(v, row) : v == null ? "" : v;
|
|
9644
9668
|
function renderDiffCell(col, val, row) {
|
|
9645
9669
|
const meta = row && row.__diffMeta;
|
|
9646
9670
|
if (!meta) return diffValueNode(col, val, row);
|
|
9647
|
-
if (meta.op === "removed") return
|
|
9648
|
-
if (meta.op === "added") return
|
|
9671
|
+
if (meta.op === "removed") return React55__default.createElement("span", { className: "twc-dt__diff-old" }, diffValueNode(col, getColVal(col, meta.from), meta.from));
|
|
9672
|
+
if (meta.op === "added") return React55__default.createElement("span", { className: "twc-dt__diff-new" }, diffValueNode(col, getColVal(col, meta.to), meta.to));
|
|
9649
9673
|
if (meta.op === "modified" && meta.changed.has(col.field)) {
|
|
9650
|
-
return
|
|
9674
|
+
return React55__default.createElement(
|
|
9651
9675
|
"span",
|
|
9652
9676
|
{ className: "twc-dt__diff-change" },
|
|
9653
|
-
|
|
9654
|
-
|
|
9655
|
-
|
|
9677
|
+
React55__default.createElement("span", { className: "twc-dt__diff-old" }, diffValueNode(col, getColVal(col, meta.from), meta.from)),
|
|
9678
|
+
React55__default.createElement("span", { className: "twc-dt__diff-arrow", "aria-hidden": "true" }, "\u2192"),
|
|
9679
|
+
React55__default.createElement("span", { className: "twc-dt__diff-new" }, diffValueNode(col, getColVal(col, meta.to), meta.to))
|
|
9656
9680
|
);
|
|
9657
9681
|
}
|
|
9658
9682
|
return diffValueNode(col, val, row);
|
|
@@ -9669,7 +9693,7 @@ var DIFF_OP_COLUMN = {
|
|
|
9669
9693
|
resizable: true,
|
|
9670
9694
|
wrappable: false,
|
|
9671
9695
|
hideable: false,
|
|
9672
|
-
renderCell: (v) => v && DIFF_OPS[v] ?
|
|
9696
|
+
renderCell: (v) => v && DIFF_OPS[v] ? React55__default.createElement(Badge, { size: "sm", variant: "soft", tone: DIFF_OPS[v].tone }, DIFF_OPS[v].label) : null,
|
|
9673
9697
|
exportValue: (v) => v && DIFF_OPS[v] ? DIFF_OPS[v].label : ""
|
|
9674
9698
|
};
|
|
9675
9699
|
function testFilter(raw, op, target, type) {
|
|
@@ -9742,9 +9766,9 @@ function runDatatableQuery(rows, query, options = {}) {
|
|
|
9742
9766
|
return { rows: page, total, filtered: out };
|
|
9743
9767
|
}
|
|
9744
9768
|
function useFloating() {
|
|
9745
|
-
const [pos, setPos] =
|
|
9746
|
-
const cfg =
|
|
9747
|
-
const place =
|
|
9769
|
+
const [pos, setPos] = React55__default.useState(null);
|
|
9770
|
+
const cfg = React55__default.useRef(null);
|
|
9771
|
+
const place = React55__default.useCallback(() => {
|
|
9748
9772
|
const c = cfg.current;
|
|
9749
9773
|
if (!c || !c.el || !c.el.isConnected) return null;
|
|
9750
9774
|
const r2 = c.el.getBoundingClientRect();
|
|
@@ -9755,17 +9779,17 @@ function useFloating() {
|
|
|
9755
9779
|
const top = r2.bottom + 6;
|
|
9756
9780
|
return { top, left, width: c.width, anchorX: r2.left + r2.width / 2, maxHeight: Math.max(180, vh - top - M) };
|
|
9757
9781
|
}, []);
|
|
9758
|
-
const open =
|
|
9782
|
+
const open = React55__default.useCallback((el, align = "left", width = 220) => {
|
|
9759
9783
|
cfg.current = { el, align, width };
|
|
9760
9784
|
const p = place();
|
|
9761
9785
|
if (p) setPos(p);
|
|
9762
9786
|
}, [place]);
|
|
9763
|
-
const close =
|
|
9787
|
+
const close = React55__default.useCallback(() => {
|
|
9764
9788
|
cfg.current = null;
|
|
9765
9789
|
setPos(null);
|
|
9766
9790
|
}, []);
|
|
9767
9791
|
const isOpen = pos != null;
|
|
9768
|
-
|
|
9792
|
+
React55__default.useEffect(() => {
|
|
9769
9793
|
if (!isOpen) return void 0;
|
|
9770
9794
|
const update = () => {
|
|
9771
9795
|
const p = place();
|
|
@@ -9789,11 +9813,11 @@ function Caret({ pos }) {
|
|
|
9789
9813
|
return /* @__PURE__ */ jsx("span", { className: "twc-dt__caret", style: { left } });
|
|
9790
9814
|
}
|
|
9791
9815
|
function AsyncFilterValue({ col, value, onChange }) {
|
|
9792
|
-
const [opts, setOpts] =
|
|
9793
|
-
const [loading, setLoading] =
|
|
9794
|
-
const reqRef =
|
|
9795
|
-
const debRef =
|
|
9796
|
-
const load =
|
|
9816
|
+
const [opts, setOpts] = React55__default.useState([]);
|
|
9817
|
+
const [loading, setLoading] = React55__default.useState(false);
|
|
9818
|
+
const reqRef = React55__default.useRef(0);
|
|
9819
|
+
const debRef = React55__default.useRef();
|
|
9820
|
+
const load = React55__default.useCallback((query) => {
|
|
9797
9821
|
const id = ++reqRef.current;
|
|
9798
9822
|
setLoading(true);
|
|
9799
9823
|
Promise.resolve(col.loadValueOptions(query)).then(
|
|
@@ -9808,16 +9832,16 @@ function AsyncFilterValue({ col, value, onChange }) {
|
|
|
9808
9832
|
}
|
|
9809
9833
|
);
|
|
9810
9834
|
}, [col]);
|
|
9811
|
-
|
|
9835
|
+
React55__default.useEffect(() => {
|
|
9812
9836
|
load("");
|
|
9813
9837
|
return () => clearTimeout(debRef.current);
|
|
9814
9838
|
}, [load]);
|
|
9815
|
-
const onInput =
|
|
9839
|
+
const onInput = React55__default.useCallback((q) => {
|
|
9816
9840
|
clearTimeout(debRef.current);
|
|
9817
9841
|
debRef.current = setTimeout(() => load(q), 250);
|
|
9818
9842
|
}, [load]);
|
|
9819
9843
|
const selected = Array.isArray(value) ? value : [];
|
|
9820
|
-
const merged =
|
|
9844
|
+
const merged = React55__default.useMemo(() => {
|
|
9821
9845
|
const seen2 = new Set(opts.map((o) => o.value));
|
|
9822
9846
|
return [...selected.filter((v) => !seen2.has(v)).map((v) => ({ value: v, label: String(v) })), ...opts];
|
|
9823
9847
|
}, [opts, selected]);
|
|
@@ -9836,9 +9860,9 @@ function AsyncFilterValue({ col, value, onChange }) {
|
|
|
9836
9860
|
);
|
|
9837
9861
|
}
|
|
9838
9862
|
function EditCell({ col, value, options, onChange, onCommit, onCommitValue, onCancel, onKeyDown }) {
|
|
9839
|
-
const ref =
|
|
9863
|
+
const ref = React55__default.useRef(null);
|
|
9840
9864
|
const isSelect = col.editType === "select" || options && col.editType !== "text";
|
|
9841
|
-
|
|
9865
|
+
React55__default.useEffect(() => {
|
|
9842
9866
|
if (isSelect) {
|
|
9843
9867
|
const t = setTimeout(() => ref.current?.querySelector(".twc-sel__trigger")?.click(), 0);
|
|
9844
9868
|
return () => clearTimeout(t);
|
|
@@ -10103,21 +10127,21 @@ function Datatable({
|
|
|
10103
10127
|
}) {
|
|
10104
10128
|
const __twcStyles = useScopedStyles("twc-dt-styles", DT_CSS);
|
|
10105
10129
|
const isDiff = !!diff;
|
|
10106
|
-
const [diffOnly, setDiffOnly] =
|
|
10130
|
+
const [diffOnly, setDiffOnly] = React55__default.useState(diff && diff.onlyChanged !== void 0 ? diff.onlyChanged : true);
|
|
10107
10131
|
const diffRowKey = diff && diff.rowKey || rowKeyProp || ((r2) => r2 == null ? r2 : r2.id);
|
|
10108
|
-
const diffData =
|
|
10132
|
+
const diffData = React55__default.useMemo(
|
|
10109
10133
|
() => isDiff ? classifyDiff(diff.from || [], diff.to || [], columnsProp, diffRowKey, { moveDetection: diff.moveDetection, compare: diff.compare }) : null,
|
|
10110
10134
|
[isDiff, diff, columnsProp]
|
|
10111
10135
|
// eslint-disable-line react-hooks/exhaustive-deps
|
|
10112
10136
|
);
|
|
10113
|
-
const onClassifiedRef =
|
|
10137
|
+
const onClassifiedRef = React55__default.useRef(diff && diff.onClassified);
|
|
10114
10138
|
onClassifiedRef.current = diff && diff.onClassified;
|
|
10115
|
-
|
|
10139
|
+
React55__default.useEffect(() => {
|
|
10116
10140
|
if (diffData && onClassifiedRef.current) onClassifiedRef.current(diffData.counts);
|
|
10117
10141
|
}, [diffData]);
|
|
10118
|
-
const diffRowKeyFn =
|
|
10119
|
-
const [userCombine, setUserCombine] =
|
|
10120
|
-
const columns =
|
|
10142
|
+
const diffRowKeyFn = React55__default.useCallback((r2) => r2.__diffKey, []);
|
|
10143
|
+
const [userCombine, setUserCombine] = React55__default.useState({});
|
|
10144
|
+
const columns = React55__default.useMemo(
|
|
10121
10145
|
() => {
|
|
10122
10146
|
if (!isDiff) return columnsProp;
|
|
10123
10147
|
const byField = {};
|
|
@@ -10130,12 +10154,12 @@ function Datatable({
|
|
|
10130
10154
|
},
|
|
10131
10155
|
[isDiff, columnsProp, userCombine]
|
|
10132
10156
|
);
|
|
10133
|
-
const rows =
|
|
10157
|
+
const rows = React55__default.useMemo(
|
|
10134
10158
|
() => isDiff ? diffData.rows.filter((r2) => !diffOnly || r2.op !== "unchanged").map((r2) => ({ ...r2.to || r2.from, __diffop: r2.op, __diffMeta: r2, __diffKey: r2.key })) : rowsProp,
|
|
10135
10159
|
[isDiff, diffData, diffOnly, rowsProp]
|
|
10136
10160
|
);
|
|
10137
10161
|
const rowKey = isDiff ? diffRowKeyFn : rowKeyProp;
|
|
10138
|
-
const cols =
|
|
10162
|
+
const cols = React55__default.useMemo(() => {
|
|
10139
10163
|
const seenFields = /* @__PURE__ */ new Map();
|
|
10140
10164
|
for (const c of columns) {
|
|
10141
10165
|
if (!c || c.field == null) continue;
|
|
@@ -10203,9 +10227,9 @@ function Datatable({
|
|
|
10203
10227
|
}
|
|
10204
10228
|
return out;
|
|
10205
10229
|
}, [columns, rowPinning, userCombine, defaultColumn]);
|
|
10206
|
-
const _autoKey =
|
|
10230
|
+
const _autoKey = React55__default.useRef();
|
|
10207
10231
|
if (!_autoKey.current) _autoKey.current = { map: /* @__PURE__ */ new WeakMap(), n: 0 };
|
|
10208
|
-
const keyOf =
|
|
10232
|
+
const keyOf = React55__default.useCallback(rowKey || ((r2, i) => {
|
|
10209
10233
|
if (r2 != null && r2.id != null) return r2.id;
|
|
10210
10234
|
if (r2 != null && typeof r2 === "object") {
|
|
10211
10235
|
const m = _autoKey.current.map;
|
|
@@ -10218,19 +10242,19 @@ function Datatable({
|
|
|
10218
10242
|
}
|
|
10219
10243
|
return i;
|
|
10220
10244
|
}), [rowKey]);
|
|
10221
|
-
const [sort, setSort] =
|
|
10222
|
-
const [filters, setFilters] =
|
|
10245
|
+
const [sort, setSort] = React55__default.useState(null);
|
|
10246
|
+
const [filters, setFilters] = React55__default.useState([]);
|
|
10223
10247
|
const filterLogicControlled = filterLogicProp !== void 0;
|
|
10224
|
-
const [filterLogicInternal, setFilterLogicInternal] =
|
|
10248
|
+
const [filterLogicInternal, setFilterLogicInternal] = React55__default.useState(defaultFilterLogic === "or" ? "or" : "and");
|
|
10225
10249
|
const filterLogic = filterLogicControlled ? filterLogicProp === "or" ? "or" : "and" : filterLogicInternal;
|
|
10226
10250
|
const setFilterLogic = (next) => {
|
|
10227
10251
|
const v = next === "or" ? "or" : "and";
|
|
10228
10252
|
if (!filterLogicControlled) setFilterLogicInternal(v);
|
|
10229
10253
|
onFilterLogicChange?.(v);
|
|
10230
10254
|
};
|
|
10231
|
-
const [hidden, setHidden] =
|
|
10232
|
-
const [showRowNum, setShowRowNum] =
|
|
10233
|
-
const [wrapped, setWrapped] =
|
|
10255
|
+
const [hidden, setHidden] = React55__default.useState(() => /* @__PURE__ */ new Set());
|
|
10256
|
+
const [showRowNum, setShowRowNum] = React55__default.useState(rowNumbers);
|
|
10257
|
+
const [wrapped, setWrapped] = React55__default.useState(() => new Set((columns || []).filter((c) => c.wrapText).map((c) => c.field)));
|
|
10234
10258
|
const toggleWrap = (field) => setWrapped((w) => {
|
|
10235
10259
|
const n = new Set(w);
|
|
10236
10260
|
n.has(field) ? n.delete(field) : n.add(field);
|
|
@@ -10272,7 +10296,7 @@ function Datatable({
|
|
|
10272
10296
|
});
|
|
10273
10297
|
closeCombineEditor();
|
|
10274
10298
|
};
|
|
10275
|
-
const [pins, setPins] =
|
|
10299
|
+
const [pins, setPins] = React55__default.useState(() => {
|
|
10276
10300
|
const left = [], right = [];
|
|
10277
10301
|
columns.forEach((c) => {
|
|
10278
10302
|
if (c.pinned === "left") left.push(c.field);
|
|
@@ -10280,23 +10304,23 @@ function Datatable({
|
|
|
10280
10304
|
});
|
|
10281
10305
|
return { left, right };
|
|
10282
10306
|
});
|
|
10283
|
-
const [density, setDensity] =
|
|
10284
|
-
const [internalQuick, setInternalQuick] =
|
|
10307
|
+
const [density, setDensity] = React55__default.useState(densityProp);
|
|
10308
|
+
const [internalQuick, setInternalQuick] = React55__default.useState("");
|
|
10285
10309
|
const quick = quickFilter !== void 0 ? quickFilter : internalQuick;
|
|
10286
10310
|
const commitQuick = (v) => {
|
|
10287
10311
|
onQuickFilterChange?.(v);
|
|
10288
10312
|
if (quickFilter === void 0) setInternalQuick(v);
|
|
10289
10313
|
commitPage(0);
|
|
10290
10314
|
};
|
|
10291
|
-
const [selected, setSelected] =
|
|
10292
|
-
const [activeRow, setActiveRow] =
|
|
10315
|
+
const [selected, setSelected] = React55__default.useState(() => /* @__PURE__ */ new Set());
|
|
10316
|
+
const [activeRow, setActiveRow] = React55__default.useState(null);
|
|
10293
10317
|
const activeRowControlled = activeRowId !== void 0;
|
|
10294
10318
|
const activeRowVal = activeRowControlled ? activeRowId : activeRow;
|
|
10295
|
-
const [internalActiveCell, setInternalActiveCell] =
|
|
10319
|
+
const [internalActiveCell, setInternalActiveCell] = React55__default.useState(null);
|
|
10296
10320
|
const activeCellControlled = activeCell !== void 0;
|
|
10297
10321
|
const activeCellVal = activeCellControlled ? activeCell : internalActiveCell;
|
|
10298
|
-
const selfCellSigRef =
|
|
10299
|
-
const jumpAppliedRef =
|
|
10322
|
+
const selfCellSigRef = React55__default.useRef(null);
|
|
10323
|
+
const jumpAppliedRef = React55__default.useRef(null);
|
|
10300
10324
|
const commitActiveCell = (next) => {
|
|
10301
10325
|
const sig = next ? next.key + "\0" + next.field : null;
|
|
10302
10326
|
selfCellSigRef.current = sig;
|
|
@@ -10304,10 +10328,10 @@ function Datatable({
|
|
|
10304
10328
|
onActiveCellChange?.(next);
|
|
10305
10329
|
if (!activeCellControlled) setInternalActiveCell(next);
|
|
10306
10330
|
};
|
|
10307
|
-
const [anchorCell, setAnchorCell] =
|
|
10308
|
-
const gridId =
|
|
10309
|
-
const [internalPage, setInternalPage] =
|
|
10310
|
-
const [internalRpp, setInternalRpp] =
|
|
10331
|
+
const [anchorCell, setAnchorCell] = React55__default.useState(null);
|
|
10332
|
+
const gridId = React55__default.useId();
|
|
10333
|
+
const [internalPage, setInternalPage] = React55__default.useState(0);
|
|
10334
|
+
const [internalRpp, setInternalRpp] = React55__default.useState(pageSize > 0 ? pageSize : 10);
|
|
10311
10335
|
const pageControlled = page !== void 0;
|
|
10312
10336
|
const pageSizeControlled = onPageSizeChange !== void 0;
|
|
10313
10337
|
const pageVal = pageControlled ? page : internalPage;
|
|
@@ -10321,42 +10345,42 @@ function Datatable({
|
|
|
10321
10345
|
if (!pageSizeControlled) setInternalRpp(next);
|
|
10322
10346
|
commitPage(0);
|
|
10323
10347
|
};
|
|
10324
|
-
const [colQuery, setColQuery] =
|
|
10325
|
-
const [widths, setWidths] =
|
|
10326
|
-
const [order, setOrder] =
|
|
10327
|
-
const [drag, setDrag] =
|
|
10328
|
-
const [aggOn, setAggOn] =
|
|
10329
|
-
const [focus, setFocus] =
|
|
10330
|
-
const [interacting, setInteracting] =
|
|
10331
|
-
const gridRef =
|
|
10332
|
-
const [groupBy, setGroupBy] =
|
|
10333
|
-
const [internalCollapsed, setInternalCollapsed] =
|
|
10348
|
+
const [colQuery, setColQuery] = React55__default.useState("");
|
|
10349
|
+
const [widths, setWidths] = React55__default.useState({});
|
|
10350
|
+
const [order, setOrder] = React55__default.useState(() => columns.map((c) => c.field));
|
|
10351
|
+
const [drag, setDrag] = React55__default.useState({ from: null, over: null, after: false });
|
|
10352
|
+
const [aggOn, setAggOn] = React55__default.useState(showAggregation);
|
|
10353
|
+
const [focus, setFocus] = React55__default.useState({ r: 0, c: 0 });
|
|
10354
|
+
const [interacting, setInteracting] = React55__default.useState(null);
|
|
10355
|
+
const gridRef = React55__default.useRef(null);
|
|
10356
|
+
const [groupBy, setGroupBy] = React55__default.useState(rowGrouping || []);
|
|
10357
|
+
const [internalCollapsed, setInternalCollapsed] = React55__default.useState(() => new Set(defaultCollapsedGroups));
|
|
10334
10358
|
const collapsedControlled = collapsedGroups !== void 0;
|
|
10335
|
-
const collapsedSet =
|
|
10336
|
-
const collapsedKey =
|
|
10337
|
-
const [internalExpanded, setInternalExpanded] =
|
|
10359
|
+
const collapsedSet = React55__default.useMemo(() => new Set(collapsedControlled ? collapsedGroups : internalCollapsed), [collapsedControlled, collapsedGroups, internalCollapsed]);
|
|
10360
|
+
const collapsedKey = React55__default.useMemo(() => [...collapsedSet].sort().join("\0"), [collapsedSet]);
|
|
10361
|
+
const [internalExpanded, setInternalExpanded] = React55__default.useState(() => /* @__PURE__ */ new Set());
|
|
10338
10362
|
const expandControlled = expandedRowIds !== void 0;
|
|
10339
|
-
const expandedSet =
|
|
10363
|
+
const expandedSet = React55__default.useMemo(
|
|
10340
10364
|
() => new Set(expandControlled ? expandedRowIds : internalExpanded),
|
|
10341
10365
|
[expandControlled, expandedRowIds, internalExpanded]
|
|
10342
10366
|
);
|
|
10343
|
-
const expandedKey =
|
|
10344
|
-
const [pinnedRows, setPinnedRows] =
|
|
10345
|
-
const [headH, setHeadH] =
|
|
10346
|
-
const theadRef =
|
|
10347
|
-
const [rowOrder, setRowOrder] =
|
|
10348
|
-
|
|
10367
|
+
const expandedKey = React55__default.useMemo(() => JSON.stringify([...expandedSet].sort()), [expandedSet]);
|
|
10368
|
+
const [pinnedRows, setPinnedRows] = React55__default.useState({ top: [], bottom: [] });
|
|
10369
|
+
const [headH, setHeadH] = React55__default.useState(41);
|
|
10370
|
+
const theadRef = React55__default.useRef(null);
|
|
10371
|
+
const [rowOrder, setRowOrder] = React55__default.useState(null);
|
|
10372
|
+
React55__default.useEffect(() => {
|
|
10349
10373
|
if (serverMode) setRowOrder(null);
|
|
10350
10374
|
}, [rows, serverMode]);
|
|
10351
|
-
const [rowHeights, setRowHeights] =
|
|
10352
|
-
const [rowDrag, setRowDrag] =
|
|
10353
|
-
const [rowGrab, setRowGrab] =
|
|
10354
|
-
const [reorderMsg, setReorderMsg] =
|
|
10355
|
-
const rowFocusRef =
|
|
10356
|
-
const [fWidths, setFWidths] =
|
|
10357
|
-
const [fPanelSize, setFPanelSize] =
|
|
10358
|
-
const [batchNameW, setBatchNameW] =
|
|
10359
|
-
const [popSizes, setPopSizes] =
|
|
10375
|
+
const [rowHeights, setRowHeights] = React55__default.useState({});
|
|
10376
|
+
const [rowDrag, setRowDrag] = React55__default.useState({ from: null, over: null, after: false });
|
|
10377
|
+
const [rowGrab, setRowGrab] = React55__default.useState(null);
|
|
10378
|
+
const [reorderMsg, setReorderMsg] = React55__default.useState("");
|
|
10379
|
+
const rowFocusRef = React55__default.useRef(null);
|
|
10380
|
+
const [fWidths, setFWidths] = React55__default.useState({});
|
|
10381
|
+
const [fPanelSize, setFPanelSize] = React55__default.useState(null);
|
|
10382
|
+
const [batchNameW, setBatchNameW] = React55__default.useState(null);
|
|
10383
|
+
const [popSizes, setPopSizes] = React55__default.useState({});
|
|
10360
10384
|
const serializeState = () => ({
|
|
10361
10385
|
filters: filters.map(({ id, ...f }) => f),
|
|
10362
10386
|
// strip the internal row id
|
|
@@ -10441,11 +10465,11 @@ function Datatable({
|
|
|
10441
10465
|
if (Array.isArray(s.grouping)) setGroupBy(s.grouping.filter((f) => known.has(f)));
|
|
10442
10466
|
if (Array.isArray(s.collapsedGroups) && !collapsedControlled) setInternalCollapsed(new Set(s.collapsedGroups.filter((k) => typeof k === "string")));
|
|
10443
10467
|
};
|
|
10444
|
-
const stateReadyRef =
|
|
10445
|
-
const stateRestoredRef =
|
|
10446
|
-
const onStateChangeRef =
|
|
10468
|
+
const stateReadyRef = React55__default.useRef(false);
|
|
10469
|
+
const stateRestoredRef = React55__default.useRef(false);
|
|
10470
|
+
const onStateChangeRef = React55__default.useRef(onStateChange);
|
|
10447
10471
|
onStateChangeRef.current = onStateChange;
|
|
10448
|
-
|
|
10472
|
+
React55__default.useEffect(() => {
|
|
10449
10473
|
if (!stateReadyRef.current) return void 0;
|
|
10450
10474
|
if (!stateKey && !onStateChange) return void 0;
|
|
10451
10475
|
const state = serializeState();
|
|
@@ -10471,7 +10495,7 @@ function Datatable({
|
|
|
10471
10495
|
if (saved) applyState(saved);
|
|
10472
10496
|
stateRestoredRef.current = true;
|
|
10473
10497
|
};
|
|
10474
|
-
|
|
10498
|
+
React55__default.useEffect(() => {
|
|
10475
10499
|
if (columns.length) {
|
|
10476
10500
|
restoreState();
|
|
10477
10501
|
stateReadyRef.current = true;
|
|
@@ -10480,14 +10504,14 @@ function Datatable({
|
|
|
10480
10504
|
stateReadyRef.current = false;
|
|
10481
10505
|
};
|
|
10482
10506
|
}, []);
|
|
10483
|
-
|
|
10507
|
+
React55__default.useEffect(() => {
|
|
10484
10508
|
if (stateRestoredRef.current || !columns.length) return;
|
|
10485
10509
|
restoreState();
|
|
10486
10510
|
stateReadyRef.current = true;
|
|
10487
10511
|
}, [columns.length]);
|
|
10488
|
-
const rootRef =
|
|
10489
|
-
const [compact, setCompact] =
|
|
10490
|
-
|
|
10512
|
+
const rootRef = React55__default.useRef(null);
|
|
10513
|
+
const [compact, setCompact] = React55__default.useState(false);
|
|
10514
|
+
React55__default.useEffect(() => {
|
|
10491
10515
|
const el = rootRef.current;
|
|
10492
10516
|
if (!el) return void 0;
|
|
10493
10517
|
const measure = () => setCompact((el.clientWidth || 0) < 720);
|
|
@@ -10500,13 +10524,13 @@ function Datatable({
|
|
|
10500
10524
|
else if (typeof window !== "undefined") window.removeEventListener("resize", measure);
|
|
10501
10525
|
};
|
|
10502
10526
|
}, []);
|
|
10503
|
-
const scrollRef =
|
|
10504
|
-
const filterPanelRef =
|
|
10505
|
-
const measureCanvas =
|
|
10506
|
-
const [scrollTop, setScrollTop] =
|
|
10507
|
-
const [viewportH, setViewportH] =
|
|
10508
|
-
const [ovTip, setOvTip] =
|
|
10509
|
-
const ovTimer =
|
|
10527
|
+
const scrollRef = React55__default.useRef(null);
|
|
10528
|
+
const filterPanelRef = React55__default.useRef(null);
|
|
10529
|
+
const measureCanvas = React55__default.useRef(null);
|
|
10530
|
+
const [scrollTop, setScrollTop] = React55__default.useState(0);
|
|
10531
|
+
const [viewportH, setViewportH] = React55__default.useState(0);
|
|
10532
|
+
const [ovTip, setOvTip] = React55__default.useState(null);
|
|
10533
|
+
const ovTimer = React55__default.useRef(null);
|
|
10510
10534
|
const hideOverflowTip = () => {
|
|
10511
10535
|
clearTimeout(ovTimer.current);
|
|
10512
10536
|
setOvTip((t) => t ? null : t);
|
|
@@ -10530,8 +10554,8 @@ function Datatable({
|
|
|
10530
10554
|
if (el && el.scrollWidth > el.clientWidth + 1) setOvTip({ anchor: el, text: el.getAttribute("data-ovtext") });
|
|
10531
10555
|
else hideOverflowTip();
|
|
10532
10556
|
};
|
|
10533
|
-
|
|
10534
|
-
|
|
10557
|
+
React55__default.useEffect(() => () => clearTimeout(ovTimer.current), []);
|
|
10558
|
+
React55__default.useEffect(() => {
|
|
10535
10559
|
if (!ovTip) return void 0;
|
|
10536
10560
|
const onKey = (e) => {
|
|
10537
10561
|
if (e.key === "Escape") setOvTip(null);
|
|
@@ -10539,8 +10563,8 @@ function Datatable({
|
|
|
10539
10563
|
document.addEventListener("keydown", onKey);
|
|
10540
10564
|
return () => document.removeEventListener("keydown", onKey);
|
|
10541
10565
|
}, [ovTip]);
|
|
10542
|
-
const [pivotOn, setPivotOn] =
|
|
10543
|
-
const [aggConfig, setAggConfig] =
|
|
10566
|
+
const [pivotOn, setPivotOn] = React55__default.useState(pivotMode);
|
|
10567
|
+
const [aggConfig, setAggConfig] = React55__default.useState(() => {
|
|
10544
10568
|
const m = {};
|
|
10545
10569
|
(columns || []).forEach((c) => {
|
|
10546
10570
|
if (typeof c.aggregation === "string") m[c.field] = c.aggregation;
|
|
@@ -10548,26 +10572,26 @@ function Datatable({
|
|
|
10548
10572
|
return m;
|
|
10549
10573
|
});
|
|
10550
10574
|
const aggOf = (c) => aggConfig[c.field] || (typeof c.aggregation === "function" ? c.aggregation : null);
|
|
10551
|
-
const [pivotConfig, setPivotConfig] =
|
|
10575
|
+
const [pivotConfig, setPivotConfig] = React55__default.useState(() => ({
|
|
10552
10576
|
rows: pivot && pivot.rows || [],
|
|
10553
10577
|
columns: pivot && pivot.columns || [],
|
|
10554
10578
|
values: pivot && pivot.values || []
|
|
10555
10579
|
}));
|
|
10556
10580
|
const pivotActive = pivotOn && pivotConfig.rows.length > 0 && pivotConfig.values.length > 0;
|
|
10557
|
-
|
|
10581
|
+
React55__default.useEffect(() => {
|
|
10558
10582
|
setOrder((prev) => mergeColOrder(prev, columns.map((c) => c.field).filter(Boolean)));
|
|
10559
10583
|
}, [columns]);
|
|
10560
|
-
const densityPropRef =
|
|
10561
|
-
|
|
10584
|
+
const densityPropRef = React55__default.useRef(densityProp);
|
|
10585
|
+
React55__default.useEffect(() => {
|
|
10562
10586
|
if (densityPropRef.current === densityProp) return;
|
|
10563
10587
|
densityPropRef.current = densityProp;
|
|
10564
10588
|
setDensity(densityProp);
|
|
10565
10589
|
}, [densityProp]);
|
|
10566
|
-
|
|
10590
|
+
React55__default.useEffect(() => {
|
|
10567
10591
|
setAggOn(showAggregation);
|
|
10568
10592
|
}, [showAggregation]);
|
|
10569
|
-
const pageSizePropRef =
|
|
10570
|
-
|
|
10593
|
+
const pageSizePropRef = React55__default.useRef(pageSize);
|
|
10594
|
+
React55__default.useEffect(() => {
|
|
10571
10595
|
if (pageSizePropRef.current === pageSize) return;
|
|
10572
10596
|
pageSizePropRef.current = pageSize;
|
|
10573
10597
|
if (pageSizeControlled) return;
|
|
@@ -10575,8 +10599,8 @@ function Datatable({
|
|
|
10575
10599
|
setInternalPage(0);
|
|
10576
10600
|
}, [pageSize]);
|
|
10577
10601
|
const rowGroupingKey = (rowGrouping || []).join("\0");
|
|
10578
|
-
const rowGroupingKeyRef =
|
|
10579
|
-
|
|
10602
|
+
const rowGroupingKeyRef = React55__default.useRef(rowGroupingKey);
|
|
10603
|
+
React55__default.useEffect(() => {
|
|
10580
10604
|
if (rowGroupingKeyRef.current === rowGroupingKey) return;
|
|
10581
10605
|
rowGroupingKeyRef.current = rowGroupingKey;
|
|
10582
10606
|
setGroupBy(rowGrouping || []);
|
|
@@ -10594,29 +10618,29 @@ function Datatable({
|
|
|
10594
10618
|
};
|
|
10595
10619
|
const intrinsicWidth = (c) => c.width === "auto" ? autoWidth(c) : typeof c.width === "number" ? c.width : 160;
|
|
10596
10620
|
const widthOf = (c) => clampWidth(widths[c.field] ?? intrinsicWidth(c), c);
|
|
10597
|
-
const [colMenu, setColMenu] =
|
|
10621
|
+
const [colMenu, setColMenu] = React55__default.useState(null);
|
|
10598
10622
|
const [menuPos, openMenu, closeMenu] = useFloating();
|
|
10599
|
-
const [panel, setPanel] =
|
|
10623
|
+
const [panel, setPanel] = React55__default.useState(null);
|
|
10600
10624
|
const [panelPos, openPanel, closePanel] = useFloating();
|
|
10601
|
-
const [combineTarget, setCombineTarget] =
|
|
10602
|
-
const [combineDraft, setCombineDraft] =
|
|
10603
|
-
const combinePanelRef =
|
|
10604
|
-
|
|
10625
|
+
const [combineTarget, setCombineTarget] = React55__default.useState(null);
|
|
10626
|
+
const [combineDraft, setCombineDraft] = React55__default.useState(null);
|
|
10627
|
+
const combinePanelRef = React55__default.useRef(null);
|
|
10628
|
+
React55__default.useEffect(() => {
|
|
10605
10629
|
if (panel === "combine" && combinePanelRef.current) {
|
|
10606
10630
|
const el = combinePanelRef.current.querySelector('[role="switch"], button, [tabindex]');
|
|
10607
10631
|
(el || combinePanelRef.current).focus?.();
|
|
10608
10632
|
}
|
|
10609
10633
|
}, [panel]);
|
|
10610
|
-
const [rowMenu, setRowMenu] =
|
|
10634
|
+
const [rowMenu, setRowMenu] = React55__default.useState(null);
|
|
10611
10635
|
const [rowMenuPos, openRowMenu, closeRowMenu] = useFloating();
|
|
10612
|
-
const [exportOpen, setExportOpen] =
|
|
10636
|
+
const [exportOpen, setExportOpen] = React55__default.useState(false);
|
|
10613
10637
|
const [exportPos, openExport, closeExport] = useFloating();
|
|
10614
|
-
const menuTriggerRef =
|
|
10615
|
-
const colMenuRef =
|
|
10616
|
-
const rowMenuRef =
|
|
10617
|
-
const exportMenuRef =
|
|
10618
|
-
const quickSearchRef =
|
|
10619
|
-
const colSearchRef =
|
|
10638
|
+
const menuTriggerRef = React55__default.useRef(null);
|
|
10639
|
+
const colMenuRef = React55__default.useRef(null);
|
|
10640
|
+
const rowMenuRef = React55__default.useRef(null);
|
|
10641
|
+
const exportMenuRef = React55__default.useRef(null);
|
|
10642
|
+
const quickSearchRef = React55__default.useRef(null);
|
|
10643
|
+
const colSearchRef = React55__default.useRef(null);
|
|
10620
10644
|
function focusFirstItem(container) {
|
|
10621
10645
|
if (!container) return;
|
|
10622
10646
|
const first = container.querySelector('[role="menuitem"]:not([disabled])');
|
|
@@ -10655,16 +10679,16 @@ function Datatable({
|
|
|
10655
10679
|
restoreTriggerFocus();
|
|
10656
10680
|
}
|
|
10657
10681
|
}
|
|
10658
|
-
|
|
10682
|
+
React55__default.useEffect(() => {
|
|
10659
10683
|
if (colMenu) focusFirstItem(colMenuRef.current);
|
|
10660
10684
|
}, [colMenu]);
|
|
10661
|
-
|
|
10685
|
+
React55__default.useEffect(() => {
|
|
10662
10686
|
if (rowMenu) focusFirstItem(rowMenuRef.current);
|
|
10663
10687
|
}, [rowMenu]);
|
|
10664
|
-
|
|
10688
|
+
React55__default.useEffect(() => {
|
|
10665
10689
|
if (exportOpen) focusFirstItem(exportMenuRef.current);
|
|
10666
10690
|
}, [exportOpen]);
|
|
10667
|
-
|
|
10691
|
+
React55__default.useEffect(() => {
|
|
10668
10692
|
if (!colMenu && !panel && !rowMenu) return;
|
|
10669
10693
|
const closeAll = () => {
|
|
10670
10694
|
setColMenu(null);
|
|
@@ -10687,7 +10711,7 @@ function Datatable({
|
|
|
10687
10711
|
document.removeEventListener("keydown", onKey);
|
|
10688
10712
|
};
|
|
10689
10713
|
}, [colMenu, panel, rowMenu]);
|
|
10690
|
-
|
|
10714
|
+
React55__default.useEffect(() => {
|
|
10691
10715
|
if (!exportOpen) return;
|
|
10692
10716
|
const close = () => {
|
|
10693
10717
|
setExportOpen(false);
|
|
@@ -10706,37 +10730,37 @@ function Datatable({
|
|
|
10706
10730
|
document.removeEventListener("keydown", onKey);
|
|
10707
10731
|
};
|
|
10708
10732
|
}, [exportOpen]);
|
|
10709
|
-
const colByField =
|
|
10733
|
+
const colByField = React55__default.useMemo(() => Object.fromEntries(cols.map((c) => [c.field, c])), [cols]);
|
|
10710
10734
|
const fieldLabel = (f) => colLabel(colByField[f] || { field: f });
|
|
10711
|
-
const combineSources =
|
|
10735
|
+
const combineSources = React55__default.useMemo(() => {
|
|
10712
10736
|
const s = /* @__PURE__ */ new Set();
|
|
10713
10737
|
for (const cfg of Object.values(userCombine)) (cfg && cfg.fields ? cfg.fields : []).slice(1).forEach((f) => s.add(f));
|
|
10714
10738
|
return s;
|
|
10715
10739
|
}, [userCombine]);
|
|
10716
|
-
const stackCombineTargets =
|
|
10740
|
+
const stackCombineTargets = React55__default.useMemo(
|
|
10717
10741
|
() => new Set(cols.filter((c) => {
|
|
10718
10742
|
const cfg = combineCfg(userCombine[c.field] || c.combine);
|
|
10719
10743
|
return cfg && cfg.layout === "stack";
|
|
10720
10744
|
}).map((c) => c.field)),
|
|
10721
10745
|
[cols, userCombine]
|
|
10722
10746
|
);
|
|
10723
|
-
const effectiveHidden =
|
|
10724
|
-
const effectiveWrapped =
|
|
10725
|
-
const visibleCols =
|
|
10747
|
+
const effectiveHidden = React55__default.useMemo(() => combineSources.size ? /* @__PURE__ */ new Set([...hidden, ...combineSources]) : hidden, [hidden, combineSources]);
|
|
10748
|
+
const effectiveWrapped = React55__default.useMemo(() => stackCombineTargets.size ? /* @__PURE__ */ new Set([...wrapped, ...stackCombineTargets]) : wrapped, [wrapped, stackCombineTargets]);
|
|
10749
|
+
const visibleCols = React55__default.useMemo(() => cols.filter((c) => !effectiveHidden.has(c.field)), [cols, effectiveHidden]);
|
|
10726
10750
|
const colFieldsKey = JSON.stringify(
|
|
10727
10751
|
cols.filter((c) => typeof c.field === "string" && c.type !== "actions").map((c) => c.field)
|
|
10728
10752
|
);
|
|
10729
|
-
const colFields =
|
|
10753
|
+
const colFields = React55__default.useMemo(() => JSON.parse(colFieldsKey), [colFieldsKey]);
|
|
10730
10754
|
const hiddenKey = JSON.stringify([...hidden].filter((f) => typeof f === "string").sort());
|
|
10731
|
-
const visibleColumns =
|
|
10755
|
+
const visibleColumns = React55__default.useMemo(() => {
|
|
10732
10756
|
const h = new Set(JSON.parse(hiddenKey));
|
|
10733
10757
|
return colFields.filter((f) => !h.has(f));
|
|
10734
10758
|
}, [colFields, hiddenKey]);
|
|
10735
|
-
const hiddenColumns =
|
|
10759
|
+
const hiddenColumns = React55__default.useMemo(() => {
|
|
10736
10760
|
const h = new Set(JSON.parse(hiddenKey));
|
|
10737
10761
|
return colFields.filter((f) => h.has(f));
|
|
10738
10762
|
}, [colFields, hiddenKey]);
|
|
10739
|
-
const ordered =
|
|
10763
|
+
const ordered = React55__default.useMemo(() => {
|
|
10740
10764
|
const orderIdx = (f) => {
|
|
10741
10765
|
const i = order.indexOf(f);
|
|
10742
10766
|
return i === -1 ? 9999 : i;
|
|
@@ -10755,8 +10779,8 @@ function Datatable({
|
|
|
10755
10779
|
const EXP_W = hasExpandCol ? 44 : 0;
|
|
10756
10780
|
const numLeft = EXP_W + CHK_W;
|
|
10757
10781
|
const leadW = numLeft + (showRowNum ? NUM_W : 0);
|
|
10758
|
-
const visLeft =
|
|
10759
|
-
const visRight =
|
|
10782
|
+
const visLeft = React55__default.useMemo(() => pins.left.filter((f) => colByField[f] && !effectiveHidden.has(f)), [pins.left, colByField, effectiveHidden]);
|
|
10783
|
+
const visRight = React55__default.useMemo(() => pins.right.filter((f) => colByField[f] && !effectiveHidden.has(f)), [pins.right, colByField, effectiveHidden]);
|
|
10760
10784
|
const stickyOf = (field) => {
|
|
10761
10785
|
if (visLeft.includes(field)) {
|
|
10762
10786
|
let off = leadW;
|
|
@@ -10779,7 +10803,7 @@ function Datatable({
|
|
|
10779
10803
|
}
|
|
10780
10804
|
return {};
|
|
10781
10805
|
};
|
|
10782
|
-
const processed =
|
|
10806
|
+
const processed = React55__default.useMemo(() => {
|
|
10783
10807
|
if (serverMode) {
|
|
10784
10808
|
if (rowOrder) {
|
|
10785
10809
|
const idx = new Map(rowOrder.map((k, i) => [k, i]));
|
|
@@ -10821,14 +10845,14 @@ function Datatable({
|
|
|
10821
10845
|
const serverTotal = rowCount == null ? processed.length : rowCount;
|
|
10822
10846
|
const totalRows = serverMode ? serverTotal : processed.length;
|
|
10823
10847
|
const totalPages = paginated ? Math.max(1, Math.ceil(totalRows / sizeVal)) : 1;
|
|
10824
|
-
const paged =
|
|
10848
|
+
const paged = React55__default.useMemo(
|
|
10825
10849
|
() => !paginated || serverMode ? processed : processed.slice(pageVal * sizeVal, pageVal * sizeVal + sizeVal),
|
|
10826
10850
|
[processed, paginated, serverMode, pageVal, sizeVal]
|
|
10827
10851
|
);
|
|
10828
|
-
|
|
10852
|
+
React55__default.useEffect(() => {
|
|
10829
10853
|
if (pageVal > totalPages - 1) commitPage(0);
|
|
10830
10854
|
}, [totalPages]);
|
|
10831
|
-
const treeRows =
|
|
10855
|
+
const treeRows = React55__default.useMemo(() => {
|
|
10832
10856
|
if (serverMode || typeof getSubRows !== "function") return null;
|
|
10833
10857
|
const out = [];
|
|
10834
10858
|
const seen2 = /* @__PURE__ */ new Set();
|
|
@@ -10842,12 +10866,12 @@ function Datatable({
|
|
|
10842
10866
|
for (const r2 of paged) walk(r2, 0);
|
|
10843
10867
|
return out;
|
|
10844
10868
|
}, [serverMode, getSubRows, paged, expandedSet, keyOf]);
|
|
10845
|
-
const depthByKey =
|
|
10869
|
+
const depthByKey = React55__default.useMemo(() => {
|
|
10846
10870
|
const m = /* @__PURE__ */ new Map();
|
|
10847
10871
|
if (treeRows) for (const t of treeRows) m.set(keyOf(t.row), t.depth);
|
|
10848
10872
|
return m;
|
|
10849
10873
|
}, [treeRows, keyOf]);
|
|
10850
|
-
const treeSeqByKey =
|
|
10874
|
+
const treeSeqByKey = React55__default.useMemo(() => {
|
|
10851
10875
|
if (!treeRows) return null;
|
|
10852
10876
|
const m = /* @__PURE__ */ new Map();
|
|
10853
10877
|
const seen2 = /* @__PURE__ */ new Set();
|
|
@@ -10862,7 +10886,7 @@ function Datatable({
|
|
|
10862
10886
|
for (const r2 of processed) walk(r2);
|
|
10863
10887
|
return m;
|
|
10864
10888
|
}, [treeRows, processed, expandedSet, getSubRows, keyOf]);
|
|
10865
|
-
const activeGroupBy =
|
|
10889
|
+
const activeGroupBy = React55__default.useMemo(() => groupBy.filter((f) => colByField[f]), [groupBy, colByField]);
|
|
10866
10890
|
function subtotalText(rowsIn) {
|
|
10867
10891
|
const parts = [];
|
|
10868
10892
|
for (const c of ordered) {
|
|
@@ -10889,7 +10913,7 @@ function Datatable({
|
|
|
10889
10913
|
if (agg === "max") return Math.max(...nums);
|
|
10890
10914
|
return null;
|
|
10891
10915
|
}
|
|
10892
|
-
const displayItems =
|
|
10916
|
+
const displayItems = React55__default.useMemo(() => {
|
|
10893
10917
|
if (!activeGroupBy.length) return null;
|
|
10894
10918
|
const build = (rowsIn, depth, prefix) => {
|
|
10895
10919
|
if (depth >= activeGroupBy.length) return rowsIn.map((row) => ({ kind: "leaf", row }));
|
|
@@ -10912,7 +10936,7 @@ function Datatable({
|
|
|
10912
10936
|
};
|
|
10913
10937
|
return build(paged, 0, "");
|
|
10914
10938
|
}, [activeGroupBy, collapsedSet, paged, ordered, aggOn]);
|
|
10915
|
-
const leafRows =
|
|
10939
|
+
const leafRows = React55__default.useMemo(
|
|
10916
10940
|
() => displayItems ? displayItems.filter((i) => i.kind === "leaf").map((i) => i.row) : treeRows ? treeRows.map((t) => t.row) : paged,
|
|
10917
10941
|
[displayItems, treeRows, paged]
|
|
10918
10942
|
);
|
|
@@ -10942,7 +10966,7 @@ function Datatable({
|
|
|
10942
10966
|
return { top, bottom };
|
|
10943
10967
|
});
|
|
10944
10968
|
}
|
|
10945
|
-
|
|
10969
|
+
React55__default.useEffect(() => {
|
|
10946
10970
|
if (!rowPinning) return;
|
|
10947
10971
|
const measure = () => {
|
|
10948
10972
|
if (theadRef.current) setHeadH(theadRef.current.offsetHeight || 41);
|
|
@@ -10956,18 +10980,18 @@ function Datatable({
|
|
|
10956
10980
|
const pinnedTopRows = canPinRows ? pinnedRows.top.map((k) => leafRows.find((r2, i) => keyOf(r2, i) === k)).filter(Boolean) : [];
|
|
10957
10981
|
const pinnedBottomRows = canPinRows ? pinnedRows.bottom.map((k) => leafRows.find((r2, i) => keyOf(r2, i) === k)).filter(Boolean) : [];
|
|
10958
10982
|
const middleRows = canPinRows ? leafRows.filter((r2, i) => !pinSideOf(keyOf(r2, i))) : leafRows;
|
|
10959
|
-
const keyIndex =
|
|
10983
|
+
const keyIndex = React55__default.useMemo(() => {
|
|
10960
10984
|
const m = /* @__PURE__ */ new Map();
|
|
10961
10985
|
leafRows.forEach((r2, i) => m.set(keyOf(r2, i), i));
|
|
10962
10986
|
return m;
|
|
10963
10987
|
}, [leafRows]);
|
|
10964
|
-
const keyIndexMid =
|
|
10988
|
+
const keyIndexMid = React55__default.useMemo(() => {
|
|
10965
10989
|
const m = /* @__PURE__ */ new Map();
|
|
10966
10990
|
middleRows.forEach((r2, i) => m.set(keyOf(r2, keyIndex.get(keyOf(r2)) ?? i), i));
|
|
10967
10991
|
return m;
|
|
10968
10992
|
}, [middleRows, keyIndex]);
|
|
10969
|
-
const cellColIndex =
|
|
10970
|
-
const cellRect =
|
|
10993
|
+
const cellColIndex = React55__default.useCallback((field) => ordered.findIndex((c) => c.field === field), [ordered]);
|
|
10994
|
+
const cellRect = React55__default.useMemo(() => {
|
|
10971
10995
|
if (selectionMode !== "cell" || !activeCellVal) return null;
|
|
10972
10996
|
const ar = keyIndex.get(activeCellVal.key), ac = cellColIndex(activeCellVal.field);
|
|
10973
10997
|
if (ar == null || ac < 0) return null;
|
|
@@ -10977,15 +11001,15 @@ function Datatable({
|
|
|
10977
11001
|
const c0 = nc < 0 ? ac : Math.min(ac, nc), c1 = nc < 0 ? ac : Math.max(ac, nc);
|
|
10978
11002
|
return { r0, r1, c0, c1 };
|
|
10979
11003
|
}, [selectionMode, activeCellVal, anchorCell, keyIndex, cellColIndex]);
|
|
10980
|
-
const activeCellId =
|
|
11004
|
+
const activeCellId = React55__default.useMemo(() => {
|
|
10981
11005
|
if (selectionMode !== "cell" || !activeCellVal) return void 0;
|
|
10982
11006
|
const ar = keyIndex.get(activeCellVal.key), ac = cellColIndex(activeCellVal.field);
|
|
10983
11007
|
return ar == null || ac < 0 ? void 0 : `${gridId}-${ar}-${ac}`;
|
|
10984
11008
|
}, [selectionMode, activeCellVal, keyIndex, cellColIndex, gridId]);
|
|
10985
|
-
const onCellSelRef =
|
|
11009
|
+
const onCellSelRef = React55__default.useRef(onCellSelectionChange);
|
|
10986
11010
|
onCellSelRef.current = onCellSelectionChange;
|
|
10987
|
-
const prevSelSigRef =
|
|
10988
|
-
|
|
11011
|
+
const prevSelSigRef = React55__default.useRef("");
|
|
11012
|
+
React55__default.useEffect(() => {
|
|
10989
11013
|
const cb = onCellSelRef.current;
|
|
10990
11014
|
if (selectionMode !== "cell" || !cb) return;
|
|
10991
11015
|
const cells = [];
|
|
@@ -11078,7 +11102,7 @@ function Datatable({
|
|
|
11078
11102
|
setReorderMsg("Reorder cancelled.");
|
|
11079
11103
|
}
|
|
11080
11104
|
}
|
|
11081
|
-
|
|
11105
|
+
React55__default.useEffect(() => {
|
|
11082
11106
|
if (rowFocusRef.current == null) return;
|
|
11083
11107
|
const key = rowFocusRef.current;
|
|
11084
11108
|
rowFocusRef.current = null;
|
|
@@ -11090,7 +11114,7 @@ function Datatable({
|
|
|
11090
11114
|
});
|
|
11091
11115
|
const estRowH = rowHeight ?? (density === "compact" ? 36 : density === "comfortable" ? 56 : 44);
|
|
11092
11116
|
const virtualizing = virtualized && !paginated && !activeGroupBy.length && !loading;
|
|
11093
|
-
|
|
11117
|
+
React55__default.useEffect(() => {
|
|
11094
11118
|
if (!virtualizing) return;
|
|
11095
11119
|
const el = scrollRef.current;
|
|
11096
11120
|
if (!el) return;
|
|
@@ -11100,13 +11124,13 @@ function Datatable({
|
|
|
11100
11124
|
if (ro) ro.observe(el);
|
|
11101
11125
|
return () => ro && ro.disconnect();
|
|
11102
11126
|
}, [virtualizing, height]);
|
|
11103
|
-
const onScrollVirtual =
|
|
11127
|
+
const onScrollVirtual = React55__default.useCallback((e) => {
|
|
11104
11128
|
setScrollTop(e.currentTarget.scrollTop);
|
|
11105
11129
|
}, []);
|
|
11106
11130
|
const vh = viewportH || (typeof height === "number" ? height : 440);
|
|
11107
|
-
const rowHRef =
|
|
11108
|
-
const [measureTick, setMeasureTick] =
|
|
11109
|
-
const offsets =
|
|
11131
|
+
const rowHRef = React55__default.useRef(/* @__PURE__ */ new Map());
|
|
11132
|
+
const [measureTick, setMeasureTick] = React55__default.useState(0);
|
|
11133
|
+
const offsets = React55__default.useMemo(() => {
|
|
11110
11134
|
if (!virtualizing) return null;
|
|
11111
11135
|
const total = middleRows.length;
|
|
11112
11136
|
const arr = new Float64Array(total + 1);
|
|
@@ -11116,7 +11140,7 @@ function Datatable({
|
|
|
11116
11140
|
}
|
|
11117
11141
|
return arr;
|
|
11118
11142
|
}, [virtualizing, middleRows, estRowH, measureTick]);
|
|
11119
|
-
const vWindow =
|
|
11143
|
+
const vWindow = React55__default.useMemo(() => {
|
|
11120
11144
|
if (!virtualizing || !offsets) return null;
|
|
11121
11145
|
const total = middleRows.length;
|
|
11122
11146
|
const totalH = offsets[total];
|
|
@@ -11145,7 +11169,7 @@ function Datatable({
|
|
|
11145
11169
|
if (start > end) start = end;
|
|
11146
11170
|
return { start, end, padTop: offsets[start], padBottom: Math.max(0, totalH - offsets[end]) };
|
|
11147
11171
|
}, [virtualizing, offsets, middleRows.length, vh, scrollTop, overscan]);
|
|
11148
|
-
|
|
11172
|
+
React55__default.useLayoutEffect(() => {
|
|
11149
11173
|
if (!virtualizing) return;
|
|
11150
11174
|
const el = scrollRef.current;
|
|
11151
11175
|
if (!el) return;
|
|
@@ -11160,9 +11184,9 @@ function Datatable({
|
|
|
11160
11184
|
}
|
|
11161
11185
|
if (changed) setMeasureTick((t) => t + 1);
|
|
11162
11186
|
});
|
|
11163
|
-
const onServerChangeRef =
|
|
11187
|
+
const onServerChangeRef = React55__default.useRef(onServerChange);
|
|
11164
11188
|
onServerChangeRef.current = onServerChange;
|
|
11165
|
-
|
|
11189
|
+
React55__default.useEffect(() => {
|
|
11166
11190
|
if (!serverMode) return;
|
|
11167
11191
|
const t = setTimeout(() => {
|
|
11168
11192
|
onServerChangeRef.current?.({
|
|
@@ -11182,10 +11206,10 @@ function Datatable({
|
|
|
11182
11206
|
}, 250);
|
|
11183
11207
|
return () => clearTimeout(t);
|
|
11184
11208
|
}, [serverMode, pageVal, sizeVal, sort, filters, filterLogic, quick, visibleColumns, hiddenColumns, treeExpandedKey]);
|
|
11185
|
-
const onColVisRef =
|
|
11209
|
+
const onColVisRef = React55__default.useRef(onColumnVisibilityChange);
|
|
11186
11210
|
onColVisRef.current = onColumnVisibilityChange;
|
|
11187
|
-
const lastVisibleKey =
|
|
11188
|
-
|
|
11211
|
+
const lastVisibleKey = React55__default.useRef(null);
|
|
11212
|
+
React55__default.useEffect(() => {
|
|
11189
11213
|
const key = JSON.stringify(visibleColumns);
|
|
11190
11214
|
if (lastVisibleKey.current === null) {
|
|
11191
11215
|
lastVisibleKey.current = key;
|
|
@@ -11217,7 +11241,7 @@ function Datatable({
|
|
|
11217
11241
|
return n;
|
|
11218
11242
|
});
|
|
11219
11243
|
}
|
|
11220
|
-
const movableMidFields =
|
|
11244
|
+
const movableMidFields = React55__default.useMemo(
|
|
11221
11245
|
() => ordered.filter((c) => !pins.left.includes(c.field) && !pins.right.includes(c.field) && c.reorderable !== false).map((c) => c.field),
|
|
11222
11246
|
[ordered, pins]
|
|
11223
11247
|
);
|
|
@@ -11252,7 +11276,7 @@ function Datatable({
|
|
|
11252
11276
|
}
|
|
11253
11277
|
return [...seen2.values()].sort((a, b) => String(a.label).localeCompare(String(b.label)));
|
|
11254
11278
|
}
|
|
11255
|
-
const [resizing, setResizing] =
|
|
11279
|
+
const [resizing, setResizing] = React55__default.useState(false);
|
|
11256
11280
|
function startResize(e, field) {
|
|
11257
11281
|
e.preventDefault();
|
|
11258
11282
|
e.stopPropagation();
|
|
@@ -11359,7 +11383,7 @@ function Datatable({
|
|
|
11359
11383
|
if (!agg) return null;
|
|
11360
11384
|
if (aggregationValues && col.field in aggregationValues) {
|
|
11361
11385
|
const pre = aggregationValues[col.field];
|
|
11362
|
-
if (pre && typeof pre === "object" && !
|
|
11386
|
+
if (pre && typeof pre === "object" && !React55__default.isValidElement(pre)) {
|
|
11363
11387
|
if (typeof agg === "string" && agg in pre) return pre[agg];
|
|
11364
11388
|
} else {
|
|
11365
11389
|
return pre;
|
|
@@ -11564,10 +11588,10 @@ function Datatable({
|
|
|
11564
11588
|
}
|
|
11565
11589
|
}
|
|
11566
11590
|
}
|
|
11567
|
-
|
|
11591
|
+
React55__default.useEffect(() => {
|
|
11568
11592
|
setFocus((f) => ({ r: Math.min(f.r, Math.max(0, leafRows.length - 1)), c: Math.min(f.c, Math.max(0, ordered.length - 1)) }));
|
|
11569
11593
|
}, [leafRows.length, ordered.length, pageVal]);
|
|
11570
|
-
|
|
11594
|
+
React55__default.useLayoutEffect(() => {
|
|
11571
11595
|
if (cellNavigation !== "widget") return;
|
|
11572
11596
|
const grid = gridRef.current;
|
|
11573
11597
|
if (!grid) return;
|
|
@@ -11582,12 +11606,12 @@ function Datatable({
|
|
|
11582
11606
|
td.tabIndex = active && ws.length === 0 ? 0 : -1;
|
|
11583
11607
|
});
|
|
11584
11608
|
}, [cellNavigation, focus.r, focus.c, leafRows, ordered, pageVal, interacting, hidden, pins, scrollTop, loading, measureTick, viewportH, pinnedRows]);
|
|
11585
|
-
const selectedRows =
|
|
11586
|
-
const selKeys =
|
|
11587
|
-
const onRowSelRef =
|
|
11609
|
+
const selectedRows = React55__default.useMemo(() => rows.filter((r2, i) => selected.has(keyOf(r2, i))), [rows, selected]);
|
|
11610
|
+
const selKeys = React55__default.useMemo(() => [...selected], [selected]);
|
|
11611
|
+
const onRowSelRef = React55__default.useRef(onRowSelectionChange);
|
|
11588
11612
|
onRowSelRef.current = onRowSelectionChange;
|
|
11589
|
-
const prevRowSelSigRef =
|
|
11590
|
-
|
|
11613
|
+
const prevRowSelSigRef = React55__default.useRef("");
|
|
11614
|
+
React55__default.useEffect(() => {
|
|
11591
11615
|
const cb = onRowSelRef.current;
|
|
11592
11616
|
if (!cb) return;
|
|
11593
11617
|
const sig = selKeys.join(",");
|
|
@@ -11596,7 +11620,7 @@ function Datatable({
|
|
|
11596
11620
|
cb(selKeys, selectedRows);
|
|
11597
11621
|
}, [selKeys, selectedRows]);
|
|
11598
11622
|
const revealRowRi = activeRowVal != null ? keyIndex.get(activeRowVal) : void 0;
|
|
11599
|
-
|
|
11623
|
+
React55__default.useEffect(() => {
|
|
11600
11624
|
if (!activeRowControlled || !scrollActiveRowIntoView || activeRowId == null) return;
|
|
11601
11625
|
const el = gridRef.current && gridRef.current.querySelector('.twc-dt__row[data-active="true"]');
|
|
11602
11626
|
if (el && el.scrollIntoView) el.scrollIntoView({ block: "nearest" });
|
|
@@ -11606,11 +11630,11 @@ function Datatable({
|
|
|
11606
11630
|
const revealInline = scrollActiveCellIntoView && typeof scrollActiveCellIntoView === "object" && scrollActiveCellIntoView.inline === "center" ? "center" : "nearest";
|
|
11607
11631
|
const revealRi = activeCellVal ? keyIndex.get(activeCellVal.key) : void 0;
|
|
11608
11632
|
const revealCi = activeCellVal ? cellColIndex(activeCellVal.field) : -1;
|
|
11609
|
-
const revealOffsetsRef =
|
|
11633
|
+
const revealOffsetsRef = React55__default.useRef(offsets);
|
|
11610
11634
|
revealOffsetsRef.current = offsets;
|
|
11611
|
-
const revealMidRef =
|
|
11635
|
+
const revealMidRef = React55__default.useRef(keyIndexMid);
|
|
11612
11636
|
revealMidRef.current = keyIndexMid;
|
|
11613
|
-
|
|
11637
|
+
React55__default.useEffect(() => {
|
|
11614
11638
|
if (!revealOn || !activeCellVal) return void 0;
|
|
11615
11639
|
const block = revealBlock, inline = revealInline;
|
|
11616
11640
|
const ri = revealRi, ci = revealCi;
|
|
@@ -11656,7 +11680,7 @@ function Datatable({
|
|
|
11656
11680
|
if (raf) cancelAnimationFrame(raf);
|
|
11657
11681
|
};
|
|
11658
11682
|
}, [activeCellVal?.key, activeCellVal?.field, revealOn, revealBlock, revealInline, revealRi, revealCi, virtualizing, headH, loading]);
|
|
11659
|
-
|
|
11683
|
+
React55__default.useEffect(() => {
|
|
11660
11684
|
if (!activeCellControlled || !activeCellVal) {
|
|
11661
11685
|
jumpAppliedRef.current = null;
|
|
11662
11686
|
return;
|
|
@@ -11674,11 +11698,11 @@ function Datatable({
|
|
|
11674
11698
|
function clearSelection() {
|
|
11675
11699
|
setSelected(/* @__PURE__ */ new Set());
|
|
11676
11700
|
}
|
|
11677
|
-
const [editing, setEditing] =
|
|
11678
|
-
const stagedEditRef =
|
|
11679
|
-
const onEditingChangeRef =
|
|
11701
|
+
const [editing, setEditing] = React55__default.useState(null);
|
|
11702
|
+
const stagedEditRef = React55__default.useRef(null);
|
|
11703
|
+
const onEditingChangeRef = React55__default.useRef(onEditingChange);
|
|
11680
11704
|
onEditingChangeRef.current = onEditingChange;
|
|
11681
|
-
const editStoppedRef =
|
|
11705
|
+
const editStoppedRef = React55__default.useRef(false);
|
|
11682
11706
|
const isColEditable = (c) => c.type !== "actions" && c.editable !== false && (c.editable === true || typeof c.editable === "function" || c.renderEditCell != null || editMode);
|
|
11683
11707
|
const isCellEditable = (c, row) => isColEditable(c) && (typeof c.editable !== "function" || !!c.editable(row, { field: c.field }));
|
|
11684
11708
|
function applyRowUpdate(rowKey2, updated, orig, field) {
|
|
@@ -11739,7 +11763,7 @@ function Datatable({
|
|
|
11739
11763
|
}
|
|
11740
11764
|
}
|
|
11741
11765
|
const batchEditKey = batchEditFields ? batchEditFields.join("\0") : "";
|
|
11742
|
-
const batchEditableCols =
|
|
11766
|
+
const batchEditableCols = React55__default.useMemo(
|
|
11743
11767
|
() => {
|
|
11744
11768
|
const base = cols.filter((c) => c.type !== "actions" && (c.editable ?? (editMode && c.editable !== false)));
|
|
11745
11769
|
return batchEditFields ? base.filter((c) => batchEditFields.includes(c.field)) : base;
|
|
@@ -11747,7 +11771,7 @@ function Datatable({
|
|
|
11747
11771
|
[cols, editMode, batchEditKey]
|
|
11748
11772
|
// eslint-disable-line react-hooks/exhaustive-deps
|
|
11749
11773
|
);
|
|
11750
|
-
const batchSel =
|
|
11774
|
+
const batchSel = React55__default.useMemo(() => {
|
|
11751
11775
|
if (!selected.size) return EMPTY_BATCH_SEL;
|
|
11752
11776
|
const testable = [], resolved = /* @__PURE__ */ new Set();
|
|
11753
11777
|
const take = (r2, i) => {
|
|
@@ -11768,18 +11792,18 @@ function Datatable({
|
|
|
11768
11792
|
}
|
|
11769
11793
|
return { testable, hasUntestable };
|
|
11770
11794
|
}, [rows, leafRows, selected, serverMode]);
|
|
11771
|
-
const batchEditableColsSel =
|
|
11795
|
+
const batchEditableColsSel = React55__default.useMemo(
|
|
11772
11796
|
() => batchEditableCols.filter((c) => typeof c.editable !== "function" || batchSel.hasUntestable || batchSel.testable.some((r2) => c.editable(r2, { field: c.field }))),
|
|
11773
11797
|
[batchEditableCols, batchSel]
|
|
11774
11798
|
);
|
|
11775
11799
|
const hasBatchEditor = showBatchEdit && batchEditableCols.length > 0;
|
|
11776
|
-
const [batchEdit, setBatchEdit] =
|
|
11800
|
+
const [batchEdit, setBatchEdit] = React55__default.useState(null);
|
|
11777
11801
|
const [batchEditPos, openBatchEdit, closeBatchEdit] = useFloating();
|
|
11778
11802
|
function openBatchEditor(el) {
|
|
11779
11803
|
setBatchEdit({ fields: {}, values: {} });
|
|
11780
11804
|
openBatchEdit(el, "left", 320);
|
|
11781
11805
|
}
|
|
11782
|
-
|
|
11806
|
+
React55__default.useEffect(() => {
|
|
11783
11807
|
if (!batchEdit) return;
|
|
11784
11808
|
const close = () => {
|
|
11785
11809
|
setBatchEdit(null);
|
|
@@ -11798,7 +11822,7 @@ function Datatable({
|
|
|
11798
11822
|
document.removeEventListener("keydown", onKey);
|
|
11799
11823
|
};
|
|
11800
11824
|
}, [batchEdit]);
|
|
11801
|
-
|
|
11825
|
+
React55__default.useEffect(() => {
|
|
11802
11826
|
if (batchEdit && selected.size === 0) {
|
|
11803
11827
|
setBatchEdit(null);
|
|
11804
11828
|
closeBatchEdit();
|
|
@@ -11868,17 +11892,17 @@ function Datatable({
|
|
|
11868
11892
|
setBatchEdit(null);
|
|
11869
11893
|
closeBatchEdit();
|
|
11870
11894
|
}
|
|
11871
|
-
const [clipboardMsg, setClipboardMsg] =
|
|
11872
|
-
const clipboardRef =
|
|
11873
|
-
const [clipFx, setClipFx] =
|
|
11874
|
-
const clipFxTimer =
|
|
11875
|
-
const onCellsCopyRef =
|
|
11895
|
+
const [clipboardMsg, setClipboardMsg] = React55__default.useState("");
|
|
11896
|
+
const clipboardRef = React55__default.useRef(null);
|
|
11897
|
+
const [clipFx, setClipFx] = React55__default.useState(null);
|
|
11898
|
+
const clipFxTimer = React55__default.useRef(null);
|
|
11899
|
+
const onCellsCopyRef = React55__default.useRef(onCellsCopy);
|
|
11876
11900
|
onCellsCopyRef.current = onCellsCopy;
|
|
11877
|
-
const onCellsPasteRef =
|
|
11901
|
+
const onCellsPasteRef = React55__default.useRef(onCellsPaste);
|
|
11878
11902
|
onCellsPasteRef.current = onCellsPaste;
|
|
11879
|
-
const onCellsCommitRef =
|
|
11903
|
+
const onCellsCommitRef = React55__default.useRef(onCellsCommit);
|
|
11880
11904
|
onCellsCommitRef.current = onCellsCommit;
|
|
11881
|
-
|
|
11905
|
+
React55__default.useEffect(() => () => {
|
|
11882
11906
|
if (clipFxTimer.current) clearTimeout(clipFxTimer.current);
|
|
11883
11907
|
}, []);
|
|
11884
11908
|
const announceClip = (msg, rect) => {
|
|
@@ -12047,7 +12071,7 @@ function Datatable({
|
|
|
12047
12071
|
e.preventDefault();
|
|
12048
12072
|
applyPastedText(text);
|
|
12049
12073
|
};
|
|
12050
|
-
|
|
12074
|
+
React55__default.useEffect(() => {
|
|
12051
12075
|
if (!editing) return;
|
|
12052
12076
|
const onDown = (e) => {
|
|
12053
12077
|
if (e.target.closest(".twc-dt__editor-wrap") || e.target.closest(".twc-pop")) return;
|
|
@@ -12139,10 +12163,10 @@ function Datatable({
|
|
|
12139
12163
|
] });
|
|
12140
12164
|
}
|
|
12141
12165
|
const tableMinWidth = leadW + ordered.reduce((a, c) => a + widthOf(c), 0);
|
|
12142
|
-
const filterableCols =
|
|
12166
|
+
const filterableCols = React55__default.useMemo(() => cols.filter((c) => c.filterable), [cols]);
|
|
12143
12167
|
const columnsShown = showColumns !== void 0 ? showColumns : cols.some((c) => c.hideable) || rowNumbers;
|
|
12144
12168
|
const filtersShown = showFilters !== void 0 ? showFilters : filterableCols.length > 0;
|
|
12145
|
-
|
|
12169
|
+
React55__default.useEffect(() => {
|
|
12146
12170
|
const el = filterPanelRef.current;
|
|
12147
12171
|
if (panel !== "filters" || !el || typeof document === "undefined") return void 0;
|
|
12148
12172
|
const measure = () => {
|
|
@@ -12604,7 +12628,7 @@ function Datatable({
|
|
|
12604
12628
|
const reorderable = canReorderRows && !pinSide;
|
|
12605
12629
|
const grabbed = rowGrab && rowGrab.key === k;
|
|
12606
12630
|
const grabTarget = rowGrab && !grabbed && midIdx != null && rowGrab.index === midIdx ? rowGrab.index >= keyIndexMid.get(rowGrab.key) ? "after" : "before" : void 0;
|
|
12607
|
-
return /* @__PURE__ */ jsxs(
|
|
12631
|
+
return /* @__PURE__ */ jsxs(React55__default.Fragment, { children: [
|
|
12608
12632
|
/* @__PURE__ */ jsxs(
|
|
12609
12633
|
"tr",
|
|
12610
12634
|
{
|
|
@@ -14262,7 +14286,7 @@ function safeHref7(url) {
|
|
|
14262
14286
|
const s = String(url).replace(/[\x00-\x20]+/g, "").toLowerCase();
|
|
14263
14287
|
return s.startsWith("javascript:") || s.startsWith("data:") || s.startsWith("vbscript:") ? void 0 : url;
|
|
14264
14288
|
}
|
|
14265
|
-
var Grid =
|
|
14289
|
+
var Grid = /* @__PURE__ */ React55__default.forwardRef(function Grid2({
|
|
14266
14290
|
as: Tag2 = "div",
|
|
14267
14291
|
columns,
|
|
14268
14292
|
minChildWidth,
|
|
@@ -14282,7 +14306,7 @@ var Grid = React54__default.forwardRef(function Grid2({
|
|
|
14282
14306
|
}, ref) {
|
|
14283
14307
|
const { flatStyle, styleNode, sxAttr } = useSx(sx);
|
|
14284
14308
|
const responsive = columns != null && typeof columns === "object";
|
|
14285
|
-
const uid =
|
|
14309
|
+
const uid = React55__default.useId();
|
|
14286
14310
|
const gridId = responsive ? `g${uid.replace(/[^a-zA-Z0-9]/g, "")}` : null;
|
|
14287
14311
|
let css = "";
|
|
14288
14312
|
if (responsive) {
|
|
@@ -14328,7 +14352,6 @@ var Grid = React54__default.forwardRef(function Grid2({
|
|
|
14328
14352
|
}
|
|
14329
14353
|
);
|
|
14330
14354
|
});
|
|
14331
|
-
Grid.displayName = "Grid";
|
|
14332
14355
|
var CARDGRID_CSS = `
|
|
14333
14356
|
.twc-cardgrid { font-family: var(--font-sans); display: flex; flex-direction: column; gap: var(--space-3); }
|
|
14334
14357
|
.twc-cardgrid__label { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-text); }
|
|
@@ -14439,15 +14462,15 @@ function CardGrid({
|
|
|
14439
14462
|
...rest
|
|
14440
14463
|
}) {
|
|
14441
14464
|
const styles = useScopedStyles("twc-cardgrid-styles", CARDGRID_CSS);
|
|
14442
|
-
const autoId =
|
|
14465
|
+
const autoId = React55__default.useId();
|
|
14443
14466
|
const fieldId = id || autoId;
|
|
14444
|
-
const [internalPage, setInternalPage] =
|
|
14467
|
+
const [internalPage, setInternalPage] = React55__default.useState(defaultPage);
|
|
14445
14468
|
const pageVal = page !== void 0 ? page : internalPage;
|
|
14446
14469
|
const commitPage = (p) => {
|
|
14447
14470
|
onPageChange?.(p);
|
|
14448
14471
|
if (page === void 0) setInternalPage(p);
|
|
14449
14472
|
};
|
|
14450
|
-
const [internalSize, setInternalSize] =
|
|
14473
|
+
const [internalSize, setInternalSize] = React55__default.useState(pageSize > 0 ? pageSize : 12);
|
|
14451
14474
|
const sizeControlled = onPageSizeChange !== void 0;
|
|
14452
14475
|
const sizeVal = sizeControlled ? pageSize > 0 ? pageSize : 12 : internalSize;
|
|
14453
14476
|
const commitSize = (n) => {
|
|
@@ -14455,17 +14478,17 @@ function CardGrid({
|
|
|
14455
14478
|
if (!sizeControlled) setInternalSize(n);
|
|
14456
14479
|
commitPage(0);
|
|
14457
14480
|
};
|
|
14458
|
-
|
|
14481
|
+
React55__default.useEffect(() => {
|
|
14459
14482
|
if (!sizeControlled) setInternalSize(pageSize > 0 ? pageSize : 12);
|
|
14460
14483
|
}, [pageSize]);
|
|
14461
|
-
const [internalQuick, setInternalQuick] =
|
|
14484
|
+
const [internalQuick, setInternalQuick] = React55__default.useState(defaultQuickFilter);
|
|
14462
14485
|
const quickVal = quickFilter !== void 0 ? quickFilter : internalQuick;
|
|
14463
14486
|
const commitQuick = (q) => {
|
|
14464
14487
|
onQuickFilterChange?.(q);
|
|
14465
14488
|
if (quickFilter === void 0) setInternalQuick(q);
|
|
14466
14489
|
commitPage(0);
|
|
14467
14490
|
};
|
|
14468
|
-
const [internalSort, setInternalSort] =
|
|
14491
|
+
const [internalSort, setInternalSort] = React55__default.useState(defaultSort);
|
|
14469
14492
|
const sortVal = sort !== void 0 ? sort : internalSort;
|
|
14470
14493
|
const commitSort = (s) => {
|
|
14471
14494
|
onSortChange?.(s);
|
|
@@ -14473,8 +14496,8 @@ function CardGrid({
|
|
|
14473
14496
|
commitPage(0);
|
|
14474
14497
|
};
|
|
14475
14498
|
const filtersKey = JSON.stringify(filters);
|
|
14476
|
-
const mounted =
|
|
14477
|
-
|
|
14499
|
+
const mounted = React55__default.useRef(false);
|
|
14500
|
+
React55__default.useEffect(() => {
|
|
14478
14501
|
if (!mounted.current) {
|
|
14479
14502
|
mounted.current = true;
|
|
14480
14503
|
return;
|
|
@@ -14491,36 +14514,36 @@ function CardGrid({
|
|
|
14491
14514
|
const pageKnowable = !(serverMode && rowCount == null) && !loading;
|
|
14492
14515
|
const shownPage = pageKnowable ? Math.min(pageVal, lastPage) : pageVal;
|
|
14493
14516
|
const pageRows = serverMode ? rows : paginated && shownPage !== pageVal ? client.filtered.slice(shownPage * sizeVal, shownPage * sizeVal + sizeVal) : client.rows;
|
|
14494
|
-
const clampedFiltersKey =
|
|
14495
|
-
|
|
14517
|
+
const clampedFiltersKey = React55__default.useRef(filtersKey);
|
|
14518
|
+
React55__default.useEffect(() => {
|
|
14496
14519
|
if (clampedFiltersKey.current !== filtersKey) {
|
|
14497
14520
|
clampedFiltersKey.current = filtersKey;
|
|
14498
14521
|
return;
|
|
14499
14522
|
}
|
|
14500
14523
|
if (pageKnowable && pageVal > lastPage) commitPage(lastPage);
|
|
14501
14524
|
}, [lastPage, pageVal, pageKnowable, filtersKey]);
|
|
14502
|
-
const onServerChangeRef =
|
|
14525
|
+
const onServerChangeRef = React55__default.useRef(onServerChange);
|
|
14503
14526
|
onServerChangeRef.current = onServerChange;
|
|
14504
14527
|
const queryKey = JSON.stringify(query);
|
|
14505
|
-
|
|
14528
|
+
React55__default.useEffect(() => {
|
|
14506
14529
|
if (!serverMode) return void 0;
|
|
14507
14530
|
const t = setTimeout(() => onServerChangeRef.current?.(JSON.parse(queryKey)), 250);
|
|
14508
14531
|
return () => clearTimeout(t);
|
|
14509
14532
|
}, [serverMode, queryKey]);
|
|
14510
14533
|
const keyOf = typeof rowKey === "function" ? rowKey : (r2) => r2 && r2[rowKey];
|
|
14511
|
-
const [selected, setSelected] =
|
|
14534
|
+
const [selected, setSelected] = React55__default.useState(() => /* @__PURE__ */ new Set());
|
|
14512
14535
|
const retainCap = retainSelectedRows === true ? 1e3 : retainSelectedRows || 0;
|
|
14513
|
-
const retainedRef =
|
|
14514
|
-
const selKeys =
|
|
14515
|
-
const selectedRows =
|
|
14536
|
+
const retainedRef = React55__default.useRef(/* @__PURE__ */ new Map());
|
|
14537
|
+
const selKeys = React55__default.useMemo(() => [...selected], [selected]);
|
|
14538
|
+
const selectedRows = React55__default.useMemo(() => {
|
|
14516
14539
|
const onPage = new Map(pageRows.map((r2, i) => [keyOf(r2, i), r2]));
|
|
14517
14540
|
return selKeys.map((k) => onPage.get(k) ?? retainedRef.current.get(k)).filter((r2) => r2 !== void 0);
|
|
14518
14541
|
}, [selKeys, pageRows]);
|
|
14519
|
-
const clearSelection =
|
|
14542
|
+
const clearSelection = React55__default.useCallback(() => {
|
|
14520
14543
|
retainedRef.current.clear();
|
|
14521
14544
|
setSelected(/* @__PURE__ */ new Set());
|
|
14522
14545
|
}, []);
|
|
14523
|
-
const toggleKey =
|
|
14546
|
+
const toggleKey = React55__default.useCallback((key, row) => {
|
|
14524
14547
|
setSelected((prev) => {
|
|
14525
14548
|
const next = new Set(prev);
|
|
14526
14549
|
if (next.has(key)) {
|
|
@@ -14553,10 +14576,10 @@ function CardGrid({
|
|
|
14553
14576
|
return next;
|
|
14554
14577
|
});
|
|
14555
14578
|
};
|
|
14556
|
-
const onSelRef =
|
|
14579
|
+
const onSelRef = React55__default.useRef(onRowSelectionChange);
|
|
14557
14580
|
onSelRef.current = onRowSelectionChange;
|
|
14558
|
-
const prevSelSigRef =
|
|
14559
|
-
|
|
14581
|
+
const prevSelSigRef = React55__default.useRef(null);
|
|
14582
|
+
React55__default.useEffect(() => {
|
|
14560
14583
|
const cb = onSelRef.current;
|
|
14561
14584
|
if (!cb) return;
|
|
14562
14585
|
const sig = selKeys.join(",");
|
|
@@ -14769,8 +14792,8 @@ function DiffTable({
|
|
|
14769
14792
|
className = "",
|
|
14770
14793
|
...rest
|
|
14771
14794
|
}) {
|
|
14772
|
-
const dtColumns =
|
|
14773
|
-
const diff =
|
|
14795
|
+
const dtColumns = React55__default.useMemo(() => columns.map(toDatatableColumn), [columns]);
|
|
14796
|
+
const diff = React55__default.useMemo(
|
|
14774
14797
|
() => ({ from, to, rowKey, onlyChanged, showToggle, showSummary, moveDetection, compare, toggleLabel }),
|
|
14775
14798
|
[from, to, rowKey, onlyChanged, showToggle, showSummary, moveDetection, compare, toggleLabel]
|
|
14776
14799
|
);
|
|
@@ -14927,26 +14950,26 @@ function DatePicker({
|
|
|
14927
14950
|
}) {
|
|
14928
14951
|
const __twcStyles0 = useScopedStyles("twc-field-styles", FIELD_CSS3);
|
|
14929
14952
|
const __twcStyles1 = useScopedStyles("twc-datepicker-styles", DATEPICKER_CSS);
|
|
14930
|
-
const autoId =
|
|
14953
|
+
const autoId = React55__default.useId();
|
|
14931
14954
|
const fieldId = id || autoId;
|
|
14932
14955
|
const descId = `${fieldId}-desc`;
|
|
14933
14956
|
const invalid = Boolean(error);
|
|
14934
|
-
const [internal, setInternal] =
|
|
14957
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
14935
14958
|
const selected = value !== void 0 ? value : internal;
|
|
14936
|
-
const [open, setOpen] =
|
|
14937
|
-
const [view, setView] =
|
|
14938
|
-
const [mode, setMode] =
|
|
14939
|
-
const [focusDate, setFocusDate] =
|
|
14940
|
-
const [focusMonth, setFocusMonth] =
|
|
14941
|
-
const [focusYear, setFocusYear] =
|
|
14942
|
-
const [editText, setEditText] =
|
|
14943
|
-
const [coords, setCoords] =
|
|
14944
|
-
const wrapRef =
|
|
14945
|
-
const triggerRef =
|
|
14946
|
-
const popRef =
|
|
14947
|
-
const gridRef =
|
|
14959
|
+
const [open, setOpen] = React55__default.useState(false);
|
|
14960
|
+
const [view, setView] = React55__default.useState(selected || /* @__PURE__ */ new Date());
|
|
14961
|
+
const [mode, setMode] = React55__default.useState("days");
|
|
14962
|
+
const [focusDate, setFocusDate] = React55__default.useState(null);
|
|
14963
|
+
const [focusMonth, setFocusMonth] = React55__default.useState(null);
|
|
14964
|
+
const [focusYear, setFocusYear] = React55__default.useState(null);
|
|
14965
|
+
const [editText, setEditText] = React55__default.useState(null);
|
|
14966
|
+
const [coords, setCoords] = React55__default.useState(null);
|
|
14967
|
+
const wrapRef = React55__default.useRef(null);
|
|
14968
|
+
const triggerRef = React55__default.useRef(null);
|
|
14969
|
+
const popRef = React55__default.useRef(null);
|
|
14970
|
+
const gridRef = React55__default.useRef(null);
|
|
14948
14971
|
const POP_W = 280;
|
|
14949
|
-
const place =
|
|
14972
|
+
const place = React55__default.useCallback(() => {
|
|
14950
14973
|
const el = triggerRef.current;
|
|
14951
14974
|
if (!el) return;
|
|
14952
14975
|
const r2 = el.getBoundingClientRect();
|
|
@@ -14957,7 +14980,7 @@ function DatePicker({
|
|
|
14957
14980
|
left = Math.max(8, left);
|
|
14958
14981
|
setCoords({ left, top: flip ? void 0 : Math.round(r2.bottom + 6), bottom: flip ? Math.round(vh - r2.top + 6) : void 0 });
|
|
14959
14982
|
}, []);
|
|
14960
|
-
|
|
14983
|
+
React55__default.useEffect(() => {
|
|
14961
14984
|
if (!open) return void 0;
|
|
14962
14985
|
place();
|
|
14963
14986
|
const onMove = () => place();
|
|
@@ -14975,7 +14998,7 @@ function DatePicker({
|
|
|
14975
14998
|
ro?.disconnect();
|
|
14976
14999
|
};
|
|
14977
15000
|
}, [open, place]);
|
|
14978
|
-
|
|
15001
|
+
React55__default.useEffect(() => {
|
|
14979
15002
|
if (!open) return;
|
|
14980
15003
|
setView(selected || /* @__PURE__ */ new Date());
|
|
14981
15004
|
setMode("days");
|
|
@@ -14996,9 +15019,9 @@ function DatePicker({
|
|
|
14996
15019
|
};
|
|
14997
15020
|
}, [open]);
|
|
14998
15021
|
useFocusTrap(popRef, open && !!coords, { initialFocus: () => gridRef.current?.querySelector('[tabindex="0"]') });
|
|
14999
|
-
const months =
|
|
15000
|
-
const monthsShort =
|
|
15001
|
-
const dows =
|
|
15022
|
+
const months = React55__default.useMemo(() => locale === void 0 ? MONTHS : monthNames(locale), [locale]);
|
|
15023
|
+
const monthsShort = React55__default.useMemo(() => locale === void 0 ? MONTHS.map((n) => n.slice(0, 3)) : monthShortNames(locale), [locale]);
|
|
15024
|
+
const dows = React55__default.useMemo(
|
|
15002
15025
|
() => locale === void 0 ? Array.from({ length: 7 }, (_, i) => DOW[(i + weekStartsOn) % 7]) : weekdayNames(locale, weekStartsOn),
|
|
15003
15026
|
[locale, weekStartsOn]
|
|
15004
15027
|
);
|
|
@@ -15053,11 +15076,11 @@ function DatePicker({
|
|
|
15053
15076
|
};
|
|
15054
15077
|
const cells = Array.from({ length: 42 }, (_, i) => new Date(gridStart.getFullYear(), gridStart.getMonth(), gridStart.getDate() + i));
|
|
15055
15078
|
const tabbableDate = (focusDate && cells.some((c) => sameDay(c, focusDate)) ? focusDate : null) || (selected && cells.some((c) => sameDay(c, selected)) ? selected : null) || (cells.some((c) => sameDay(c, today)) ? today : null) || new Date(y, m, 1);
|
|
15056
|
-
|
|
15079
|
+
React55__default.useEffect(() => {
|
|
15057
15080
|
if (!open || mode !== "days" || !focusDate) return;
|
|
15058
15081
|
gridRef.current?.querySelector(`[data-key="${keyOf(focusDate)}"]`)?.focus();
|
|
15059
15082
|
}, [focusDate, open, mode]);
|
|
15060
|
-
|
|
15083
|
+
React55__default.useEffect(() => {
|
|
15061
15084
|
if (!open || mode !== "months" || focusMonth == null) return;
|
|
15062
15085
|
gridRef.current?.querySelector(`[data-mo="${focusMonth}"]`)?.focus();
|
|
15063
15086
|
}, [focusMonth, open, mode]);
|
|
@@ -15081,7 +15104,7 @@ function DatePicker({
|
|
|
15081
15104
|
}
|
|
15082
15105
|
setFocusMonth(next);
|
|
15083
15106
|
};
|
|
15084
|
-
|
|
15107
|
+
React55__default.useEffect(() => {
|
|
15085
15108
|
if (!open || mode !== "years" || focusYear == null) return;
|
|
15086
15109
|
gridRef.current?.querySelector(`[data-yr="${focusYear}"]`)?.focus();
|
|
15087
15110
|
}, [focusYear, open, mode]);
|
|
@@ -15488,29 +15511,29 @@ function DateRangePicker({
|
|
|
15488
15511
|
}) {
|
|
15489
15512
|
const __twcStyles0 = useScopedStyles("twc-field-styles", FIELD_CSS4);
|
|
15490
15513
|
const __twcStyles1 = useScopedStyles("twc-drp-styles", RANGE_CSS2);
|
|
15491
|
-
const [internal, setInternal] =
|
|
15514
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
15492
15515
|
const range2 = value !== void 0 ? value : internal;
|
|
15493
|
-
const [open, setOpen] =
|
|
15494
|
-
const [view, setView] =
|
|
15495
|
-
const [hover, setHover] =
|
|
15496
|
-
const [focusDate, setFocusDate] =
|
|
15497
|
-
const [mode, setMode] =
|
|
15498
|
-
const [focusMonth, setFocusMonth] =
|
|
15499
|
-
const [focusYear, setFocusYear] =
|
|
15500
|
-
const [editText, setEditText] =
|
|
15501
|
-
const [coords, setCoords] =
|
|
15502
|
-
const wrapRef =
|
|
15503
|
-
const triggerRef =
|
|
15504
|
-
const popRef =
|
|
15505
|
-
const gridRef =
|
|
15506
|
-
const labelId =
|
|
15516
|
+
const [open, setOpen] = React55__default.useState(false);
|
|
15517
|
+
const [view, setView] = React55__default.useState(range2.start || /* @__PURE__ */ new Date());
|
|
15518
|
+
const [hover, setHover] = React55__default.useState(null);
|
|
15519
|
+
const [focusDate, setFocusDate] = React55__default.useState(null);
|
|
15520
|
+
const [mode, setMode] = React55__default.useState("days");
|
|
15521
|
+
const [focusMonth, setFocusMonth] = React55__default.useState(null);
|
|
15522
|
+
const [focusYear, setFocusYear] = React55__default.useState(null);
|
|
15523
|
+
const [editText, setEditText] = React55__default.useState(null);
|
|
15524
|
+
const [coords, setCoords] = React55__default.useState(null);
|
|
15525
|
+
const wrapRef = React55__default.useRef(null);
|
|
15526
|
+
const triggerRef = React55__default.useRef(null);
|
|
15527
|
+
const popRef = React55__default.useRef(null);
|
|
15528
|
+
const gridRef = React55__default.useRef(null);
|
|
15529
|
+
const labelId = React55__default.useId();
|
|
15507
15530
|
const descId = `${labelId}-desc`;
|
|
15508
15531
|
const invalid = Boolean(error);
|
|
15509
|
-
|
|
15532
|
+
React55__default.useEffect(() => {
|
|
15510
15533
|
if (disabled) setOpen(false);
|
|
15511
15534
|
}, [disabled]);
|
|
15512
15535
|
const POP_W = 420;
|
|
15513
|
-
const place =
|
|
15536
|
+
const place = React55__default.useCallback(() => {
|
|
15514
15537
|
const el = triggerRef.current;
|
|
15515
15538
|
if (!el) return;
|
|
15516
15539
|
const r2 = el.getBoundingClientRect();
|
|
@@ -15521,7 +15544,7 @@ function DateRangePicker({
|
|
|
15521
15544
|
left = Math.max(8, left);
|
|
15522
15545
|
setCoords({ left, top: flip ? void 0 : Math.round(r2.bottom + 6), bottom: flip ? Math.round(vh - r2.top + 6) : void 0 });
|
|
15523
15546
|
}, []);
|
|
15524
|
-
|
|
15547
|
+
React55__default.useEffect(() => {
|
|
15525
15548
|
if (!open) return void 0;
|
|
15526
15549
|
place();
|
|
15527
15550
|
const onMove = () => place();
|
|
@@ -15539,7 +15562,7 @@ function DateRangePicker({
|
|
|
15539
15562
|
ro?.disconnect();
|
|
15540
15563
|
};
|
|
15541
15564
|
}, [open, place]);
|
|
15542
|
-
|
|
15565
|
+
React55__default.useEffect(() => {
|
|
15543
15566
|
if (!open) return;
|
|
15544
15567
|
const onDown = (e) => {
|
|
15545
15568
|
if (wrapRef.current && wrapRef.current.contains(e.target)) return;
|
|
@@ -15603,20 +15626,20 @@ function DateRangePicker({
|
|
|
15603
15626
|
const last = new Date(d.getFullYear(), d.getMonth() + n + 1, 0);
|
|
15604
15627
|
return new Date(last.getFullYear(), last.getMonth(), Math.min(d.getDate(), last.getDate()));
|
|
15605
15628
|
};
|
|
15606
|
-
|
|
15629
|
+
React55__default.useEffect(() => {
|
|
15607
15630
|
if (!open) {
|
|
15608
15631
|
setFocusDate(null);
|
|
15609
15632
|
setHover(null);
|
|
15610
15633
|
setMode("days");
|
|
15611
15634
|
}
|
|
15612
15635
|
}, [open]);
|
|
15613
|
-
|
|
15636
|
+
React55__default.useEffect(() => {
|
|
15614
15637
|
if (open && mode === "months" && focusMonth != null) gridRef.current?.querySelector(`[data-mo="${focusMonth}"]`)?.focus();
|
|
15615
15638
|
}, [focusMonth, open, mode]);
|
|
15616
|
-
|
|
15639
|
+
React55__default.useEffect(() => {
|
|
15617
15640
|
if (open && mode === "years" && focusYear != null) gridRef.current?.querySelector(`[data-yr="${focusYear}"]`)?.focus();
|
|
15618
15641
|
}, [focusYear, open, mode]);
|
|
15619
|
-
|
|
15642
|
+
React55__default.useEffect(() => {
|
|
15620
15643
|
if (!open || !focusDate) return;
|
|
15621
15644
|
gridRef.current?.querySelector(`[data-key="${keyOf(focusDate)}"]`)?.focus();
|
|
15622
15645
|
}, [focusDate, open]);
|
|
@@ -15701,9 +15724,9 @@ function DateRangePicker({
|
|
|
15701
15724
|
if (r2.start) setView(r2.start);
|
|
15702
15725
|
setOpen(false);
|
|
15703
15726
|
};
|
|
15704
|
-
const months =
|
|
15705
|
-
const monthsShort =
|
|
15706
|
-
const dows =
|
|
15727
|
+
const months = React55__default.useMemo(() => locale === void 0 ? MONTHS2 : monthNames2(locale), [locale]);
|
|
15728
|
+
const monthsShort = React55__default.useMemo(() => months.map((n) => n.slice(0, 3)), [months]);
|
|
15729
|
+
const dows = React55__default.useMemo(
|
|
15707
15730
|
() => locale === void 0 ? Array.from({ length: 7 }, (_, i) => DOW2[(i + weekStartsOn) % 7]) : weekdayNames2(locale, weekStartsOn),
|
|
15708
15731
|
[locale, weekStartsOn]
|
|
15709
15732
|
);
|
|
@@ -16058,19 +16081,19 @@ function TimePicker({
|
|
|
16058
16081
|
}) {
|
|
16059
16082
|
const __twcStyles0 = useScopedStyles("twc-field-styles", FIELD_CSS5);
|
|
16060
16083
|
const __twcStyles1 = useScopedStyles("twc-timepicker-styles", TIMEPICKER_CSS);
|
|
16061
|
-
const autoId =
|
|
16084
|
+
const autoId = React55__default.useId();
|
|
16062
16085
|
const fieldId = id || autoId;
|
|
16063
16086
|
const descId = `${fieldId}-desc`;
|
|
16064
16087
|
const invalid = Boolean(error);
|
|
16065
|
-
const [internal, setInternal] =
|
|
16088
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
16066
16089
|
const selected = value !== void 0 ? value : internal;
|
|
16067
|
-
const [open, setOpen] =
|
|
16068
|
-
const [editText, setEditText] =
|
|
16069
|
-
const [coords, setCoords] =
|
|
16070
|
-
const wrapRef =
|
|
16071
|
-
const triggerRef =
|
|
16072
|
-
const popRef =
|
|
16073
|
-
const place =
|
|
16090
|
+
const [open, setOpen] = React55__default.useState(false);
|
|
16091
|
+
const [editText, setEditText] = React55__default.useState(null);
|
|
16092
|
+
const [coords, setCoords] = React55__default.useState(null);
|
|
16093
|
+
const wrapRef = React55__default.useRef(null);
|
|
16094
|
+
const triggerRef = React55__default.useRef(null);
|
|
16095
|
+
const popRef = React55__default.useRef(null);
|
|
16096
|
+
const place = React55__default.useCallback(() => {
|
|
16074
16097
|
const el = triggerRef.current;
|
|
16075
16098
|
if (!el) return;
|
|
16076
16099
|
const r2 = el.getBoundingClientRect();
|
|
@@ -16081,7 +16104,7 @@ function TimePicker({
|
|
|
16081
16104
|
left = Math.max(8, left);
|
|
16082
16105
|
setCoords({ left, top: flip ? void 0 : Math.round(r2.bottom + 6), bottom: flip ? Math.round(vh - r2.top + 6) : void 0 });
|
|
16083
16106
|
}, []);
|
|
16084
|
-
|
|
16107
|
+
React55__default.useEffect(() => {
|
|
16085
16108
|
if (!open) return void 0;
|
|
16086
16109
|
place();
|
|
16087
16110
|
const onMove = () => place();
|
|
@@ -16099,7 +16122,7 @@ function TimePicker({
|
|
|
16099
16122
|
ro?.disconnect();
|
|
16100
16123
|
};
|
|
16101
16124
|
}, [open, place]);
|
|
16102
|
-
|
|
16125
|
+
React55__default.useEffect(() => {
|
|
16103
16126
|
if (!open) return void 0;
|
|
16104
16127
|
const onDown = (e) => {
|
|
16105
16128
|
if (wrapRef.current && wrapRef.current.contains(e.target)) return;
|
|
@@ -16119,7 +16142,7 @@ function TimePicker({
|
|
|
16119
16142
|
useFocusTrap(popRef, open && !!coords, {
|
|
16120
16143
|
initialFocus: () => popRef.current?.querySelector('.twc-tp__opt[data-selected="true"]') || popRef.current?.querySelector('.twc-tp__opt[tabindex="0"]')
|
|
16121
16144
|
});
|
|
16122
|
-
|
|
16145
|
+
React55__default.useEffect(() => {
|
|
16123
16146
|
if (!open || !coords) return;
|
|
16124
16147
|
popRef.current?.querySelectorAll('.twc-tp__opt[data-selected="true"]').forEach((el) => el.scrollIntoView({ block: "center" }));
|
|
16125
16148
|
}, [open, coords]);
|
|
@@ -16467,10 +16490,10 @@ function DateTimePicker({
|
|
|
16467
16490
|
}) {
|
|
16468
16491
|
const __twcStyles0 = useScopedStyles("twc-field-styles", FIELD_CSS6);
|
|
16469
16492
|
const __twcStyles1 = useScopedStyles("twc-datetimepicker-styles", DTP_CSS);
|
|
16470
|
-
const autoId =
|
|
16493
|
+
const autoId = React55__default.useId();
|
|
16471
16494
|
const fieldId = id || autoId;
|
|
16472
16495
|
const descId = `${fieldId}-desc`;
|
|
16473
|
-
const [internal, setInternal] =
|
|
16496
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
16474
16497
|
const selected = value !== void 0 ? value : internal;
|
|
16475
16498
|
const commitVal = (d) => {
|
|
16476
16499
|
if (value === void 0) setInternal(d);
|
|
@@ -16614,11 +16637,11 @@ function FilterBar({
|
|
|
16614
16637
|
...rest
|
|
16615
16638
|
}) {
|
|
16616
16639
|
const styles = useScopedStyles("twc-filterbar-styles", FILTERBAR_CSS);
|
|
16617
|
-
const autoId =
|
|
16640
|
+
const autoId = React55__default.useId();
|
|
16618
16641
|
const fieldId = id || autoId;
|
|
16619
|
-
const [internal, setInternal] =
|
|
16642
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
16620
16643
|
const clauses = value !== void 0 ? value : internal;
|
|
16621
|
-
const values =
|
|
16644
|
+
const values = React55__default.useMemo(() => clausesToValues(fields, clauses), [fields, clauses]);
|
|
16622
16645
|
const emit = (nextValues) => {
|
|
16623
16646
|
const next = valuesToClauses(fields, nextValues);
|
|
16624
16647
|
if (value === void 0) setInternal(next);
|
|
@@ -16802,14 +16825,14 @@ function Dialog({
|
|
|
16802
16825
|
className = "",
|
|
16803
16826
|
...rest
|
|
16804
16827
|
}) {
|
|
16805
|
-
const autoId =
|
|
16828
|
+
const autoId = React55__default.useId();
|
|
16806
16829
|
const titleId = `${autoId}-title`;
|
|
16807
16830
|
const descId = `${autoId}-desc`;
|
|
16808
|
-
const dialogRef =
|
|
16831
|
+
const dialogRef = React55__default.useRef(null);
|
|
16809
16832
|
const __twcStyles = useScopedStyles("twc-dialog-styles", DIALOG_CSS);
|
|
16810
16833
|
const renderPortal = usePortal();
|
|
16811
|
-
const [mounted, setMounted] =
|
|
16812
|
-
|
|
16834
|
+
const [mounted, setMounted] = React55__default.useState(open);
|
|
16835
|
+
React55__default.useEffect(() => {
|
|
16813
16836
|
if (open) {
|
|
16814
16837
|
setMounted(true);
|
|
16815
16838
|
return;
|
|
@@ -16821,7 +16844,7 @@ function Dialog({
|
|
|
16821
16844
|
useInertBackground(dialogRef, open && mounted);
|
|
16822
16845
|
useFocusTrap(dialogRef, open && mounted);
|
|
16823
16846
|
const isTop = useLayer(open && mounted);
|
|
16824
|
-
|
|
16847
|
+
React55__default.useEffect(() => {
|
|
16825
16848
|
if (!open) return void 0;
|
|
16826
16849
|
const onKey = (e) => {
|
|
16827
16850
|
if (e.defaultPrevented || !isTop()) return;
|
|
@@ -16974,14 +16997,14 @@ function Drawer({
|
|
|
16974
16997
|
style,
|
|
16975
16998
|
...rest
|
|
16976
16999
|
}) {
|
|
16977
|
-
const autoId =
|
|
17000
|
+
const autoId = React55__default.useId();
|
|
16978
17001
|
const titleId = `${autoId}-title`;
|
|
16979
17002
|
const descId = `${autoId}-desc`;
|
|
16980
|
-
const panelRef =
|
|
17003
|
+
const panelRef = React55__default.useRef(null);
|
|
16981
17004
|
const __twcStyles = useScopedStyles("twc-drawer-styles", DRAWER_CSS);
|
|
16982
17005
|
const renderPortal = usePortal();
|
|
16983
|
-
const [mounted, setMounted] =
|
|
16984
|
-
|
|
17006
|
+
const [mounted, setMounted] = React55__default.useState(open);
|
|
17007
|
+
React55__default.useEffect(() => {
|
|
16985
17008
|
if (open) {
|
|
16986
17009
|
setMounted(true);
|
|
16987
17010
|
return;
|
|
@@ -16993,7 +17016,7 @@ function Drawer({
|
|
|
16993
17016
|
useInertBackground(panelRef, open && mounted);
|
|
16994
17017
|
useFocusTrap(panelRef, open && mounted);
|
|
16995
17018
|
const isTop = useLayer(open && mounted);
|
|
16996
|
-
|
|
17019
|
+
React55__default.useEffect(() => {
|
|
16997
17020
|
if (!open) return void 0;
|
|
16998
17021
|
const onKey = (e) => {
|
|
16999
17022
|
if (e.defaultPrevented || !isTop()) return;
|
|
@@ -17083,11 +17106,11 @@ function Field({
|
|
|
17083
17106
|
...rest
|
|
17084
17107
|
}) {
|
|
17085
17108
|
const __twcStyles = useScopedStyles("twc-field-styles", FIELD_CSS7);
|
|
17086
|
-
const autoId =
|
|
17109
|
+
const autoId = React55__default.useId();
|
|
17087
17110
|
const fieldId = id || autoId;
|
|
17088
17111
|
const descId = `${fieldId}-desc`;
|
|
17089
17112
|
const hasMsg = Boolean(error || hint);
|
|
17090
|
-
const control =
|
|
17113
|
+
const control = React55__default.isValidElement(children) ? React55__default.cloneElement(children, {
|
|
17091
17114
|
"aria-describedby": [children.props["aria-describedby"], hasMsg ? descId : null].filter(Boolean).join(" ") || void 0,
|
|
17092
17115
|
"aria-invalid": children.props["aria-invalid"] !== void 0 ? children.props["aria-invalid"] : error ? true : void 0
|
|
17093
17116
|
}) : children;
|
|
@@ -17187,7 +17210,7 @@ function fmtSize(bytes) {
|
|
|
17187
17210
|
if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + " KB";
|
|
17188
17211
|
return (bytes / (1024 * 1024)).toFixed(1) + " MB";
|
|
17189
17212
|
}
|
|
17190
|
-
var FileUpload =
|
|
17213
|
+
var FileUpload = /* @__PURE__ */ React55__default.forwardRef(function FileUpload2({
|
|
17191
17214
|
accept,
|
|
17192
17215
|
multiple = false,
|
|
17193
17216
|
disabled = false,
|
|
@@ -17212,12 +17235,12 @@ var FileUpload = React54__default.forwardRef(function FileUpload2({
|
|
|
17212
17235
|
...rest
|
|
17213
17236
|
}, ref) {
|
|
17214
17237
|
const __twcStyles = useScopedStyles("twc-upload-styles", UPLOAD_CSS);
|
|
17215
|
-
const [internal, setInternal] =
|
|
17238
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
17216
17239
|
const files = value !== void 0 ? value : internal;
|
|
17217
|
-
const [drag, setDrag] =
|
|
17218
|
-
const inputRef =
|
|
17219
|
-
|
|
17220
|
-
const autoId =
|
|
17240
|
+
const [drag, setDrag] = React55__default.useState(false);
|
|
17241
|
+
const inputRef = React55__default.useRef(null);
|
|
17242
|
+
React55__default.useImperativeHandle(ref, () => ({ open: () => inputRef.current?.click() }), []);
|
|
17243
|
+
const autoId = React55__default.useId();
|
|
17221
17244
|
const fieldId = id || autoId;
|
|
17222
17245
|
const descId = `${fieldId}-desc`;
|
|
17223
17246
|
const labelId = `${fieldId}-label`;
|
|
@@ -17260,7 +17283,7 @@ var FileUpload = React54__default.forwardRef(function FileUpload2({
|
|
|
17260
17283
|
)
|
|
17261
17284
|
);
|
|
17262
17285
|
if (trigger) {
|
|
17263
|
-
const triggerEl =
|
|
17286
|
+
const triggerEl = React55__default.isValidElement(trigger) && error ? React55__default.cloneElement(trigger, {
|
|
17264
17287
|
"aria-describedby": [trigger.props["aria-describedby"], descId].filter(Boolean).join(" ") || void 0
|
|
17265
17288
|
}) : trigger;
|
|
17266
17289
|
return /* @__PURE__ */ jsxs("div", { className: `twc-upload ${className}`, "data-size": size, ...rest, children: [
|
|
@@ -17354,7 +17377,6 @@ var FileUpload = React54__default.forwardRef(function FileUpload2({
|
|
|
17354
17377
|
error ? /* @__PURE__ */ jsx("span", { id: descId, className: "twc-field__error", children: error }) : null
|
|
17355
17378
|
] });
|
|
17356
17379
|
});
|
|
17357
|
-
FileUpload.displayName = "FileUpload";
|
|
17358
17380
|
var TOGGLEGROUP_CSS = `
|
|
17359
17381
|
.twc-togglegroup { display: inline-flex; gap: var(--space-1); }
|
|
17360
17382
|
.twc-togglegroup[data-orientation="vertical"] { flex-direction: column; align-items: stretch; }
|
|
@@ -17376,10 +17398,10 @@ function ToggleGroup({
|
|
|
17376
17398
|
...rest
|
|
17377
17399
|
}) {
|
|
17378
17400
|
const __twcStyles = useScopedStyles("twc-togglegroup-styles", TOGGLEGROUP_CSS);
|
|
17379
|
-
const groupRef =
|
|
17401
|
+
const groupRef = React55__default.useRef(null);
|
|
17380
17402
|
const multiple = type === "multiple";
|
|
17381
|
-
const [focusedIdx, setFocusedIdx] =
|
|
17382
|
-
const [internal, setInternal] =
|
|
17403
|
+
const [focusedIdx, setFocusedIdx] = React55__default.useState(null);
|
|
17404
|
+
const [internal, setInternal] = React55__default.useState(defaultValue !== void 0 ? defaultValue : multiple ? [] : null);
|
|
17383
17405
|
const current = value !== void 0 ? value : internal;
|
|
17384
17406
|
const isSelected = (v) => multiple ? Array.isArray(current) && current.includes(v) : current === v;
|
|
17385
17407
|
const commit = (next) => {
|
|
@@ -17500,15 +17522,15 @@ function Kanban({
|
|
|
17500
17522
|
...rest
|
|
17501
17523
|
}) {
|
|
17502
17524
|
const __twcStyles = useScopedStyles("twc-kanban-styles", KANBAN_CSS);
|
|
17503
|
-
const [internal, setInternal] =
|
|
17525
|
+
const [internal, setInternal] = React55__default.useState(cards ?? defaultCards ?? []);
|
|
17504
17526
|
const items = cards !== void 0 ? cards : internal;
|
|
17505
|
-
const [drag, setDrag] =
|
|
17506
|
-
const [overCol, setOverCol] =
|
|
17507
|
-
const [grab, setGrab] =
|
|
17508
|
-
const [announce, setAnnounce] =
|
|
17509
|
-
const rootRef =
|
|
17510
|
-
const focusIdRef =
|
|
17511
|
-
|
|
17527
|
+
const [drag, setDrag] = React55__default.useState(null);
|
|
17528
|
+
const [overCol, setOverCol] = React55__default.useState(null);
|
|
17529
|
+
const [grab, setGrab] = React55__default.useState(null);
|
|
17530
|
+
const [announce, setAnnounce] = React55__default.useState("");
|
|
17531
|
+
const rootRef = React55__default.useRef(null);
|
|
17532
|
+
const focusIdRef = React55__default.useRef(null);
|
|
17533
|
+
React55__default.useEffect(() => {
|
|
17512
17534
|
if (focusIdRef.current == null) return void 0;
|
|
17513
17535
|
const raf = requestAnimationFrame(() => {
|
|
17514
17536
|
const id = focusIdRef.current;
|
|
@@ -17827,22 +17849,22 @@ function Popover({
|
|
|
17827
17849
|
...rest
|
|
17828
17850
|
}) {
|
|
17829
17851
|
const __twcStyles = useScopedStyles("twc-popover-styles", POPOVER_CSS);
|
|
17830
|
-
const [openState, setOpenState] =
|
|
17831
|
-
const [render, setRender] =
|
|
17832
|
-
const [pos, setPos] =
|
|
17833
|
-
const wrapRef =
|
|
17852
|
+
const [openState, setOpenState] = React55__default.useState(defaultOpen);
|
|
17853
|
+
const [render, setRender] = React55__default.useState(false);
|
|
17854
|
+
const [pos, setPos] = React55__default.useState(null);
|
|
17855
|
+
const wrapRef = React55__default.useRef(null);
|
|
17834
17856
|
useTriggerAudit(wrapRef, "Popover");
|
|
17835
|
-
const popRef =
|
|
17836
|
-
const popId =
|
|
17857
|
+
const popRef = React55__default.useRef(null);
|
|
17858
|
+
const popId = React55__default.useId();
|
|
17837
17859
|
const controlled = openProp !== void 0;
|
|
17838
17860
|
const open = controlled ? !!openProp : openState;
|
|
17839
|
-
const openRef =
|
|
17861
|
+
const openRef = React55__default.useRef(open);
|
|
17840
17862
|
openRef.current = open;
|
|
17841
|
-
const controlledRef =
|
|
17863
|
+
const controlledRef = React55__default.useRef(controlled);
|
|
17842
17864
|
controlledRef.current = controlled;
|
|
17843
|
-
const onOpenChangeRef =
|
|
17865
|
+
const onOpenChangeRef = React55__default.useRef(onOpenChange);
|
|
17844
17866
|
onOpenChangeRef.current = onOpenChange;
|
|
17845
|
-
const setOpen =
|
|
17867
|
+
const setOpen = React55__default.useCallback((next) => {
|
|
17846
17868
|
const value = typeof next === "function" ? next(openRef.current) : next;
|
|
17847
17869
|
if (value === openRef.current) return;
|
|
17848
17870
|
if (!controlledRef.current) setOpenState(value);
|
|
@@ -17850,7 +17872,7 @@ function Popover({
|
|
|
17850
17872
|
}, []);
|
|
17851
17873
|
const toggle = () => setOpen((o) => !o);
|
|
17852
17874
|
const RD = { createPortal: typeof createPortal === "function" ? createPortal : typeof window !== "undefined" && window.ReactDOM && window.ReactDOM.createPortal };
|
|
17853
|
-
const place =
|
|
17875
|
+
const place = React55__default.useCallback(() => {
|
|
17854
17876
|
const t = wrapRef.current;
|
|
17855
17877
|
if (!t) return;
|
|
17856
17878
|
const r2 = t.getBoundingClientRect();
|
|
@@ -17888,7 +17910,7 @@ function Popover({
|
|
|
17888
17910
|
setPos({ top, left, width: w, flip: false, arrow, maxHeight: vh - 2 * M });
|
|
17889
17911
|
}, [placement, align, width]);
|
|
17890
17912
|
const isTop = useLayer(open && render);
|
|
17891
|
-
|
|
17913
|
+
React55__default.useEffect(() => {
|
|
17892
17914
|
if (!open) return;
|
|
17893
17915
|
place();
|
|
17894
17916
|
const onMove = () => place();
|
|
@@ -17915,7 +17937,7 @@ function Popover({
|
|
|
17915
17937
|
document.removeEventListener("keydown", onKey);
|
|
17916
17938
|
};
|
|
17917
17939
|
}, [open, place, isTop]);
|
|
17918
|
-
|
|
17940
|
+
React55__default.useEffect(() => {
|
|
17919
17941
|
if (open) {
|
|
17920
17942
|
setRender(true);
|
|
17921
17943
|
return;
|
|
@@ -17923,12 +17945,12 @@ function Popover({
|
|
|
17923
17945
|
const t = setTimeout(() => setRender(false), 170);
|
|
17924
17946
|
return () => clearTimeout(t);
|
|
17925
17947
|
}, [open]);
|
|
17926
|
-
|
|
17948
|
+
React55__default.useEffect(() => {
|
|
17927
17949
|
if (render && open) place();
|
|
17928
17950
|
}, [render, place]);
|
|
17929
|
-
const restoreRef =
|
|
17930
|
-
const needFocusRef =
|
|
17931
|
-
|
|
17951
|
+
const restoreRef = React55__default.useRef(null);
|
|
17952
|
+
const needFocusRef = React55__default.useRef(false);
|
|
17953
|
+
React55__default.useEffect(() => {
|
|
17932
17954
|
if (open) {
|
|
17933
17955
|
restoreRef.current = document.activeElement;
|
|
17934
17956
|
needFocusRef.current = true;
|
|
@@ -17964,7 +17986,7 @@ function Popover({
|
|
|
17964
17986
|
}
|
|
17965
17987
|
) : null;
|
|
17966
17988
|
const fix = {};
|
|
17967
|
-
if (
|
|
17989
|
+
if (React55__default.isValidElement(trigger)) {
|
|
17968
17990
|
if (!triggerIsControl(trigger)) fix.role = "button";
|
|
17969
17991
|
fix.onKeyDown = (e) => {
|
|
17970
17992
|
trigger.props.onKeyDown?.(e);
|
|
@@ -17976,7 +17998,7 @@ function Popover({
|
|
|
17976
17998
|
}
|
|
17977
17999
|
};
|
|
17978
18000
|
}
|
|
17979
|
-
const triggerEl =
|
|
18001
|
+
const triggerEl = React55__default.isValidElement(trigger) ? React55__default.cloneElement(trigger, {
|
|
17980
18002
|
onClick: (e) => {
|
|
17981
18003
|
trigger.props.onClick?.(e);
|
|
17982
18004
|
toggle();
|
|
@@ -18023,7 +18045,7 @@ function Progress({
|
|
|
18023
18045
|
className = "",
|
|
18024
18046
|
...rest
|
|
18025
18047
|
}) {
|
|
18026
|
-
const labelId =
|
|
18048
|
+
const labelId = React55__default.useId();
|
|
18027
18049
|
const { "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, ...restProps } = rest;
|
|
18028
18050
|
const __twcStyles = useScopedStyles("twc-progress-styles", `
|
|
18029
18051
|
.twc-progress-wrap { display: flex; flex-direction: column; gap: 6px; font-family: var(--font-sans); }
|
|
@@ -18094,7 +18116,7 @@ function Progress({
|
|
|
18094
18116
|
] })
|
|
18095
18117
|
);
|
|
18096
18118
|
}
|
|
18097
|
-
|
|
18119
|
+
var Radio = /* @__PURE__ */ React55__default.forwardRef(function Radio2({
|
|
18098
18120
|
label,
|
|
18099
18121
|
description,
|
|
18100
18122
|
error,
|
|
@@ -18110,7 +18132,7 @@ function Radio({
|
|
|
18110
18132
|
className = "",
|
|
18111
18133
|
onChange,
|
|
18112
18134
|
...rest
|
|
18113
|
-
}) {
|
|
18135
|
+
}, ref) {
|
|
18114
18136
|
const __twcStyles = useScopedStyles("twc-radio-styles", `
|
|
18115
18137
|
.twc-radio { display: inline-flex; align-items: flex-start; gap: var(--space-2-5); cursor: pointer; font-family: var(--font-sans); }
|
|
18116
18138
|
/* tone \u2192 accent set (default primary). Mirrors Button's --_accent model; Badge's tone vocabulary. */
|
|
@@ -18150,7 +18172,7 @@ function Radio({
|
|
|
18150
18172
|
.twc-field { display: flex; flex-direction: column; gap: var(--space-1-5); font-family: var(--font-sans); }
|
|
18151
18173
|
.twc-field__error { font-size: var(--text-xs); color: var(--color-danger-subtle-fg); font-weight: var(--font-medium); }
|
|
18152
18174
|
`);
|
|
18153
|
-
const autoId =
|
|
18175
|
+
const autoId = React55__default.useId();
|
|
18154
18176
|
const fieldId = id || autoId;
|
|
18155
18177
|
const errId = `${fieldId}-error`;
|
|
18156
18178
|
const invalid = Boolean(error);
|
|
@@ -18163,6 +18185,7 @@ function Radio({
|
|
|
18163
18185
|
/* @__PURE__ */ jsx(
|
|
18164
18186
|
"input",
|
|
18165
18187
|
{
|
|
18188
|
+
ref,
|
|
18166
18189
|
id: fieldId,
|
|
18167
18190
|
type: "radio",
|
|
18168
18191
|
className: "twc-radio__input",
|
|
@@ -18193,7 +18216,7 @@ function Radio({
|
|
|
18193
18216
|
control,
|
|
18194
18217
|
/* @__PURE__ */ jsx("span", { id: errId, className: "twc-field__error", children: error })
|
|
18195
18218
|
] });
|
|
18196
|
-
}
|
|
18219
|
+
});
|
|
18197
18220
|
var RADIO_GROUP_CSS = `
|
|
18198
18221
|
.twc-field { display: flex; flex-direction: column; gap: var(--space-1-5); font-family: var(--font-sans); }
|
|
18199
18222
|
.twc-field__label { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-text); display: flex; gap: 4px; align-items: center; }
|
|
@@ -18223,13 +18246,13 @@ function RadioGroup({
|
|
|
18223
18246
|
...rest
|
|
18224
18247
|
}) {
|
|
18225
18248
|
const __twcStyles = useScopedStyles("twc-radio-group-styles", RADIO_GROUP_CSS);
|
|
18226
|
-
const autoId =
|
|
18249
|
+
const autoId = React55__default.useId();
|
|
18227
18250
|
const fieldId = id || autoId;
|
|
18228
18251
|
const labelId = `${fieldId}-label`;
|
|
18229
18252
|
const descId = `${fieldId}-desc`;
|
|
18230
18253
|
const groupName = name || `${fieldId}-name`;
|
|
18231
18254
|
const invalid = Boolean(error);
|
|
18232
|
-
const [internal, setInternal] =
|
|
18255
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
18233
18256
|
const current = value !== void 0 ? value : internal;
|
|
18234
18257
|
const select = (v) => {
|
|
18235
18258
|
if (value === void 0) setInternal(v);
|
|
@@ -18250,10 +18273,10 @@ function RadioGroup({
|
|
|
18250
18273
|
tone
|
|
18251
18274
|
},
|
|
18252
18275
|
o.value
|
|
18253
|
-
)) :
|
|
18254
|
-
if (!
|
|
18276
|
+
)) : React55__default.Children.map(children, (child) => {
|
|
18277
|
+
if (!React55__default.isValidElement(child)) return child;
|
|
18255
18278
|
const v = child.props.value;
|
|
18256
|
-
return
|
|
18279
|
+
return React55__default.cloneElement(child, {
|
|
18257
18280
|
name: child.props.name ?? groupName,
|
|
18258
18281
|
checked: child.props.checked ?? current === v,
|
|
18259
18282
|
onChange: child.props.onChange ?? (() => select(v)),
|
|
@@ -18333,12 +18356,12 @@ function Rating({
|
|
|
18333
18356
|
...rest
|
|
18334
18357
|
}) {
|
|
18335
18358
|
const __twcStyles = useScopedStyles("twc-rating-styles", RATING_CSS);
|
|
18336
|
-
const [internal, setInternal] =
|
|
18337
|
-
const [hover, setHover] =
|
|
18359
|
+
const [internal, setInternal] = React55__default.useState(defaultValue);
|
|
18360
|
+
const [hover, setHover] = React55__default.useState(0);
|
|
18338
18361
|
const val = value !== void 0 ? value : internal;
|
|
18339
18362
|
const shown = hover || val;
|
|
18340
18363
|
const interactive = !readOnly && !disabled;
|
|
18341
|
-
const btnRefs =
|
|
18364
|
+
const btnRefs = React55__default.useRef([]);
|
|
18342
18365
|
const tabStar = Math.min(count, Math.max(1, Math.round(val) || 1));
|
|
18343
18366
|
const fmt = (v) => format ? format(v) : Number.isInteger(v) ? String(v) : v.toFixed(1);
|
|
18344
18367
|
if (process.env.NODE_ENV !== "production" && interactive && !Number.isInteger(val)) {
|
|
@@ -18543,24 +18566,24 @@ function Sidebar({
|
|
|
18543
18566
|
...rest
|
|
18544
18567
|
}) {
|
|
18545
18568
|
const __twcStyles = useScopedStyles("twc-sidebar-styles", SIDEBAR_CSS);
|
|
18546
|
-
const navId =
|
|
18547
|
-
const panelRef =
|
|
18569
|
+
const navId = React55__default.useId();
|
|
18570
|
+
const panelRef = React55__default.useRef(null);
|
|
18548
18571
|
const renderPortal = usePortal();
|
|
18549
|
-
const [internal, setInternal] =
|
|
18572
|
+
const [internal, setInternal] = React55__default.useState(defaultCollapsed);
|
|
18550
18573
|
const collapsed = collapsedProp !== void 0 ? collapsedProp : internal;
|
|
18551
18574
|
const toggle = () => {
|
|
18552
18575
|
const next = !collapsed;
|
|
18553
18576
|
if (collapsedProp === void 0) setInternal(next);
|
|
18554
18577
|
onCollapsedChange?.(next);
|
|
18555
18578
|
};
|
|
18556
|
-
const [openInternal, setOpenInternal] =
|
|
18579
|
+
const [openInternal, setOpenInternal] = React55__default.useState(defaultOpen);
|
|
18557
18580
|
const open = openProp !== void 0 ? openProp : openInternal;
|
|
18558
18581
|
const setOpen = (next) => {
|
|
18559
18582
|
if (openProp === void 0) setOpenInternal(next);
|
|
18560
18583
|
onOpenChange?.(next);
|
|
18561
18584
|
};
|
|
18562
|
-
const [mounted, setMounted] =
|
|
18563
|
-
|
|
18585
|
+
const [mounted, setMounted] = React55__default.useState(open);
|
|
18586
|
+
React55__default.useEffect(() => {
|
|
18564
18587
|
if (!overlay) return void 0;
|
|
18565
18588
|
if (open) {
|
|
18566
18589
|
setMounted(true);
|
|
@@ -18569,7 +18592,7 @@ function Sidebar({
|
|
|
18569
18592
|
const t = setTimeout(() => setMounted(false), 170);
|
|
18570
18593
|
return () => clearTimeout(t);
|
|
18571
18594
|
}, [overlay, open]);
|
|
18572
|
-
|
|
18595
|
+
React55__default.useEffect(() => {
|
|
18573
18596
|
if (!overlay || !open) return void 0;
|
|
18574
18597
|
const prev = document.body.style.overflow;
|
|
18575
18598
|
document.body.style.overflow = "hidden";
|
|
@@ -18578,7 +18601,7 @@ function Sidebar({
|
|
|
18578
18601
|
};
|
|
18579
18602
|
}, [overlay, open]);
|
|
18580
18603
|
useFocusTrap(panelRef, overlay && open && mounted);
|
|
18581
|
-
|
|
18604
|
+
React55__default.useEffect(() => {
|
|
18582
18605
|
if (!overlay || !open) return void 0;
|
|
18583
18606
|
const onKey = (e) => {
|
|
18584
18607
|
if (e.key === "Escape") {
|
|
@@ -18630,7 +18653,7 @@ function Sidebar({
|
|
|
18630
18653
|
const body = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
18631
18654
|
__twcStyles,
|
|
18632
18655
|
brand ? /* @__PURE__ */ jsx("div", { className: "twc-sidebar__head", children: /* @__PURE__ */ jsx("span", { className: "twc-sidebar__brand", children: brand }) }) : null,
|
|
18633
|
-
/* @__PURE__ */ jsx("nav", { id: navId, className: "twc-sidebar__nav", "aria-label": navLabel, children: groups.map((g, gi) => /* @__PURE__ */ jsxs(
|
|
18656
|
+
/* @__PURE__ */ jsx("nav", { id: navId, className: "twc-sidebar__nav", "aria-label": navLabel, children: groups.map((g, gi) => /* @__PURE__ */ jsxs(React55__default.Fragment, { children: [
|
|
18634
18657
|
g.section != null ? /* @__PURE__ */ jsx("div", { className: "twc-sidebar__section", id: g.sid, children: g.section }) : null,
|
|
18635
18658
|
/* @__PURE__ */ jsx("ul", { className: "twc-sidebar__list", ...g.section != null ? { "aria-labelledby": g.sid } : {}, children: g.entries.map(({ it, i }) => /* @__PURE__ */ jsx("li", { children: renderItem(it) }, i)) })
|
|
18636
18659
|
] }, gi)) }),
|
|
@@ -18816,10 +18839,10 @@ function Slider({
|
|
|
18816
18839
|
return Math.min(max, Math.max(min, Math.round(stepped * 1e6) / 1e6));
|
|
18817
18840
|
};
|
|
18818
18841
|
const __twcStyles = useScopedStyles("twc-slider-styles", SLIDER_CSS);
|
|
18819
|
-
const autoId =
|
|
18842
|
+
const autoId = React55__default.useId();
|
|
18820
18843
|
const fieldId = id || autoId;
|
|
18821
18844
|
const isRange = range2 || Array.isArray(value) || Array.isArray(defaultValue);
|
|
18822
|
-
const [internal, setInternal] =
|
|
18845
|
+
const [internal, setInternal] = React55__default.useState(() => {
|
|
18823
18846
|
if (isRange) {
|
|
18824
18847
|
const dv = Array.isArray(defaultValue) ? defaultValue : [min, max];
|
|
18825
18848
|
return [clampSnap(dv[0]), clampSnap(dv[1])];
|
|
@@ -18829,9 +18852,9 @@ function Slider({
|
|
|
18829
18852
|
const rawVal = value !== void 0 ? value : internal;
|
|
18830
18853
|
const clampedVals = (isRange ? [Number(rawVal[0]), Number(rawVal[1])] : [Number(rawVal)]).map((v) => Math.min(max, Math.max(min, Number.isFinite(v) ? v : min)));
|
|
18831
18854
|
const indices = isRange ? [0, 1] : [0];
|
|
18832
|
-
const trackRef =
|
|
18833
|
-
const [dragging, setDragging] =
|
|
18834
|
-
const [typed, setTyped] =
|
|
18855
|
+
const trackRef = React55__default.useRef(null);
|
|
18856
|
+
const [dragging, setDragging] = React55__default.useState(false);
|
|
18857
|
+
const [typed, setTyped] = React55__default.useState({});
|
|
18835
18858
|
const fmt = (v) => formatValue ? formatValue(v) : v.toFixed(decimals);
|
|
18836
18859
|
const valueTextFor = (v) => {
|
|
18837
18860
|
if (getAriaValueText) return getAriaValueText(v);
|
|
@@ -18883,8 +18906,8 @@ function Slider({
|
|
|
18883
18906
|
const ratio = Math.min(1, Math.max(0, (clientX - r2.left) / r2.width));
|
|
18884
18907
|
return clampSnap(min + ratio * (max - min));
|
|
18885
18908
|
};
|
|
18886
|
-
const dragCleanupRef =
|
|
18887
|
-
|
|
18909
|
+
const dragCleanupRef = React55__default.useRef(null);
|
|
18910
|
+
React55__default.useEffect(() => () => dragCleanupRef.current?.(), []);
|
|
18888
18911
|
function onPointerDown(e) {
|
|
18889
18912
|
if (disabled) return;
|
|
18890
18913
|
e.preventDefault();
|
|
@@ -18933,7 +18956,7 @@ function Slider({
|
|
|
18933
18956
|
name ? clampedVals.map((v, i) => /* @__PURE__ */ jsx("input", { type: "hidden", name, value: v, disabled: disabled || void 0 }, i)) : null,
|
|
18934
18957
|
label || showValue || editable ? /* @__PURE__ */ jsxs("div", { className: "twc-slider__head", children: [
|
|
18935
18958
|
label ? /* @__PURE__ */ jsx("label", { className: "twc-slider__label", id: labelId, children: label }) : /* @__PURE__ */ jsx("span", {}),
|
|
18936
|
-
editable ? /* @__PURE__ */ jsx("span", { className: "twc-slider__inputs", children: indices.map((i) => /* @__PURE__ */ jsxs(
|
|
18959
|
+
editable ? /* @__PURE__ */ jsx("span", { className: "twc-slider__inputs", children: indices.map((i) => /* @__PURE__ */ jsxs(React55__default.Fragment, { children: [
|
|
18937
18960
|
i > 0 ? /* @__PURE__ */ jsx("span", { className: "twc-slider__input-sep", "aria-hidden": "true", children: "\u2013" }) : null,
|
|
18938
18961
|
/* @__PURE__ */ jsx(
|
|
18939
18962
|
"input",
|
|
@@ -19146,7 +19169,7 @@ function Stepper({
|
|
|
19146
19169
|
...rest
|
|
19147
19170
|
}) {
|
|
19148
19171
|
const __twcStyles = useScopedStyles("twc-stepper-styles", STEPPER_CSS);
|
|
19149
|
-
const [activeInternal, setActiveInternal] =
|
|
19172
|
+
const [activeInternal, setActiveInternal] = React55__default.useState(defaultActive);
|
|
19150
19173
|
const active = activeProp !== void 0 ? activeProp : activeInternal;
|
|
19151
19174
|
const handleStep = (i) => {
|
|
19152
19175
|
if (activeProp === void 0) setActiveInternal(i);
|
|
@@ -19226,7 +19249,7 @@ function Stepper({
|
|
|
19226
19249
|
})
|
|
19227
19250
|
] });
|
|
19228
19251
|
}
|
|
19229
|
-
|
|
19252
|
+
var Switch = /* @__PURE__ */ React55__default.forwardRef(function Switch2({
|
|
19230
19253
|
label,
|
|
19231
19254
|
description,
|
|
19232
19255
|
error,
|
|
@@ -19240,7 +19263,7 @@ function Switch({
|
|
|
19240
19263
|
className = "",
|
|
19241
19264
|
onChange,
|
|
19242
19265
|
...rest
|
|
19243
|
-
}) {
|
|
19266
|
+
}, ref) {
|
|
19244
19267
|
const __twcStyles = useScopedStyles("twc-switch-styles", `
|
|
19245
19268
|
/* tone \u2192 accent set (default primary). Mirrors Button's --_accent model; Badge's tone vocabulary. */
|
|
19246
19269
|
.twc-switch { --_accent: var(--color-primary); --_accent-fg: var(--color-primary-fg); --_accent-subtle: var(--color-primary-subtle); --_accent-subtle-fg: var(--color-primary-subtle-fg); --_accent-border: var(--color-primary-border); }
|
|
@@ -19293,7 +19316,7 @@ function Switch({
|
|
|
19293
19316
|
.twc-field { display: flex; flex-direction: column; gap: var(--space-1-5); font-family: var(--font-sans); }
|
|
19294
19317
|
.twc-field__error { font-size: var(--text-xs); color: var(--color-danger-subtle-fg); font-weight: var(--font-medium); }
|
|
19295
19318
|
`);
|
|
19296
|
-
const autoId =
|
|
19319
|
+
const autoId = React55__default.useId();
|
|
19297
19320
|
const fieldId = id || autoId;
|
|
19298
19321
|
const errId = `${fieldId}-error`;
|
|
19299
19322
|
const invalid = Boolean(error);
|
|
@@ -19306,6 +19329,7 @@ function Switch({
|
|
|
19306
19329
|
/* @__PURE__ */ jsx(
|
|
19307
19330
|
"input",
|
|
19308
19331
|
{
|
|
19332
|
+
ref,
|
|
19309
19333
|
id: fieldId,
|
|
19310
19334
|
type: "checkbox",
|
|
19311
19335
|
role: "switch",
|
|
@@ -19335,7 +19359,7 @@ function Switch({
|
|
|
19335
19359
|
control,
|
|
19336
19360
|
/* @__PURE__ */ jsx("span", { id: errId, className: "twc-field__error", children: error })
|
|
19337
19361
|
] });
|
|
19338
|
-
}
|
|
19362
|
+
});
|
|
19339
19363
|
var TABLE_CSS = `
|
|
19340
19364
|
.twc-table-wrap { width: 100%; overflow-x: auto; border-radius: var(--radius-lg); border: var(--border-thin) solid var(--color-border); background: var(--color-surface); }
|
|
19341
19365
|
.twc-table { width: 100%; border-collapse: collapse; font-family: var(--font-sans); font-size: var(--text-sm); color: var(--color-text); }
|
|
@@ -19401,14 +19425,14 @@ function Table({
|
|
|
19401
19425
|
...rest
|
|
19402
19426
|
}) {
|
|
19403
19427
|
const __twcStyles = useScopedStyles("twc-table-styles", TABLE_CSS);
|
|
19404
|
-
const cols =
|
|
19428
|
+
const cols = React55__default.useMemo(
|
|
19405
19429
|
() => (columns || []).map((c) => ({ ...c, header: c.headerName, render: c.renderCell })),
|
|
19406
19430
|
[columns]
|
|
19407
19431
|
);
|
|
19408
19432
|
const dataRows = rowsProp || [];
|
|
19409
|
-
const [internalSort, setInternalSort] =
|
|
19433
|
+
const [internalSort, setInternalSort] = React55__default.useState(defaultSort || { field: null, dir: "asc" });
|
|
19410
19434
|
const sort = (sortProp !== void 0 ? sortProp : internalSort) || { field: null, dir: "asc" };
|
|
19411
|
-
const rows =
|
|
19435
|
+
const rows = React55__default.useMemo(() => {
|
|
19412
19436
|
if (!sortable || !sort.field) return dataRows;
|
|
19413
19437
|
const col = cols.find((c) => c.field === sort.field);
|
|
19414
19438
|
if (!col) return dataRows;
|
|
@@ -19560,15 +19584,15 @@ function Tabs({
|
|
|
19560
19584
|
}) {
|
|
19561
19585
|
const vertical = orientation === "vertical";
|
|
19562
19586
|
const __twcStyles = useScopedStyles("twc-tabs-styles", TABS_CSS);
|
|
19563
|
-
const [internal, setInternal] =
|
|
19587
|
+
const [internal, setInternal] = React55__default.useState(defaultValue ?? items[0]?.value);
|
|
19564
19588
|
const active = value ?? internal;
|
|
19565
|
-
const listRef =
|
|
19566
|
-
const [ind, setInd] =
|
|
19567
|
-
const baseId =
|
|
19589
|
+
const listRef = React55__default.useRef(null);
|
|
19590
|
+
const [ind, setInd] = React55__default.useState({ left: 0, width: 0, top: 0, height: 0 });
|
|
19591
|
+
const baseId = React55__default.useId();
|
|
19568
19592
|
const tabIdAt = (i) => `${baseId}-tab-${i}`;
|
|
19569
19593
|
const panelId = `${baseId}-panel`;
|
|
19570
19594
|
const activeIndex = items.findIndex((it) => it.value === active);
|
|
19571
|
-
const updateIndicator =
|
|
19595
|
+
const updateIndicator = React55__default.useCallback(() => {
|
|
19572
19596
|
const list = listRef.current;
|
|
19573
19597
|
if (!list) return;
|
|
19574
19598
|
const el = list.querySelector('[data-active="true"]');
|
|
@@ -19577,10 +19601,10 @@ function Tabs({
|
|
|
19577
19601
|
if (!vertical) el.scrollIntoView?.({ inline: "nearest", block: "nearest" });
|
|
19578
19602
|
}
|
|
19579
19603
|
}, [vertical]);
|
|
19580
|
-
|
|
19604
|
+
React55__default.useEffect(() => {
|
|
19581
19605
|
updateIndicator();
|
|
19582
19606
|
}, [active, updateIndicator, items, orientation]);
|
|
19583
|
-
|
|
19607
|
+
React55__default.useEffect(() => {
|
|
19584
19608
|
const r2 = () => updateIndicator();
|
|
19585
19609
|
window.addEventListener("resize", r2);
|
|
19586
19610
|
if (typeof document !== "undefined" && document.fonts && document.fonts.ready) {
|
|
@@ -19726,7 +19750,7 @@ function Tag({
|
|
|
19726
19750
|
}, "aria-label": _removeLabel, type: "button", children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.4", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M18 6 6 18M6 6l12 12" }) }) }) : null
|
|
19727
19751
|
] });
|
|
19728
19752
|
}
|
|
19729
|
-
var useIso = typeof document !== "undefined" ?
|
|
19753
|
+
var useIso = typeof document !== "undefined" ? React55__default.useLayoutEffect : React55__default.useEffect;
|
|
19730
19754
|
var TEXTAREA_CSS = `
|
|
19731
19755
|
.twc-field { display: flex; flex-direction: column; gap: var(--space-1-5); font-family: var(--font-sans); }
|
|
19732
19756
|
.twc-field__label { font-size: var(--text-sm); font-weight: var(--font-semibold); color: var(--color-text); display: flex; gap: 4px; align-items: center; }
|
|
@@ -19775,7 +19799,7 @@ var TEXTAREA_CSS = `
|
|
|
19775
19799
|
.twc-field__count { margin-inline-start: auto; font-size: var(--text-xs); color: var(--color-text-muted); font-variant-numeric: tabular-nums; flex: none; }
|
|
19776
19800
|
.twc-field__count[data-danger="true"] { color: var(--color-danger-subtle-fg); }
|
|
19777
19801
|
`;
|
|
19778
|
-
var Textarea =
|
|
19802
|
+
var Textarea = /* @__PURE__ */ React55__default.forwardRef(function Textarea2({
|
|
19779
19803
|
label,
|
|
19780
19804
|
hint,
|
|
19781
19805
|
error,
|
|
@@ -19794,19 +19818,19 @@ var Textarea = React54__default.forwardRef(function Textarea2({
|
|
|
19794
19818
|
...rest
|
|
19795
19819
|
}, ref) {
|
|
19796
19820
|
const __twcStyles = useScopedStyles("twc-textarea-styles", TEXTAREA_CSS);
|
|
19797
|
-
const autoId =
|
|
19821
|
+
const autoId = React55__default.useId();
|
|
19798
19822
|
const fieldId = id || autoId;
|
|
19799
19823
|
const descId = `${fieldId}-desc`;
|
|
19800
19824
|
const countId = `${fieldId}-count`;
|
|
19801
19825
|
const invalid = Boolean(error);
|
|
19802
|
-
const innerRef =
|
|
19826
|
+
const innerRef = React55__default.useRef(null);
|
|
19803
19827
|
const setRef = (el) => {
|
|
19804
19828
|
innerRef.current = el;
|
|
19805
19829
|
if (typeof ref === "function") ref(el);
|
|
19806
19830
|
else if (ref) ref.current = el;
|
|
19807
19831
|
};
|
|
19808
19832
|
const countControlled = rest.value !== void 0;
|
|
19809
|
-
const [len2, setLen] =
|
|
19833
|
+
const [len2, setLen] = React55__default.useState(() => String(rest.defaultValue ?? "").length);
|
|
19810
19834
|
const count = countControlled ? String(rest.value ?? "").length : len2;
|
|
19811
19835
|
const max = rest.maxLength;
|
|
19812
19836
|
const showCounter = showCount && max != null;
|
|
@@ -20008,19 +20032,19 @@ function Toast({
|
|
|
20008
20032
|
}) {
|
|
20009
20033
|
const resolvedTone = tone === "neutral" ? "default" : tone;
|
|
20010
20034
|
const __twcStyles = useScopedStyles("twc-toast-styles", TOAST_CSS);
|
|
20011
|
-
const onCloseRef =
|
|
20012
|
-
|
|
20035
|
+
const onCloseRef = React55__default.useRef(onClose);
|
|
20036
|
+
React55__default.useEffect(() => {
|
|
20013
20037
|
onCloseRef.current = onClose;
|
|
20014
20038
|
}, [onClose]);
|
|
20015
|
-
const timer =
|
|
20016
|
-
const stop =
|
|
20017
|
-
const start =
|
|
20039
|
+
const timer = React55__default.useRef();
|
|
20040
|
+
const stop = React55__default.useCallback(() => clearTimeout(timer.current), []);
|
|
20041
|
+
const start = React55__default.useCallback(() => {
|
|
20018
20042
|
stop();
|
|
20019
20043
|
if (duration && duration !== Infinity && onCloseRef.current) {
|
|
20020
20044
|
timer.current = setTimeout(() => onCloseRef.current && onCloseRef.current(), duration);
|
|
20021
20045
|
}
|
|
20022
20046
|
}, [duration, stop]);
|
|
20023
|
-
|
|
20047
|
+
React55__default.useEffect(() => {
|
|
20024
20048
|
start();
|
|
20025
20049
|
return stop;
|
|
20026
20050
|
}, [start, stop]);
|
|
@@ -20065,32 +20089,32 @@ function Toast({
|
|
|
20065
20089
|
}
|
|
20066
20090
|
function ToastViewport({ children, limit, className = "", ...rest }) {
|
|
20067
20091
|
const __twcStyles = useScopedStyles("twc-toast-styles", TOAST_CSS);
|
|
20068
|
-
const shown = limit && limit > 0 ?
|
|
20092
|
+
const shown = limit && limit > 0 ? React55__default.Children.toArray(children).slice(-limit) : children;
|
|
20069
20093
|
return /* @__PURE__ */ jsxs("div", { className: `twc-toast-viewport ${className}`, role: "region", "aria-label": "Notifications", ...rest, children: [
|
|
20070
20094
|
__twcStyles,
|
|
20071
20095
|
shown
|
|
20072
20096
|
] });
|
|
20073
20097
|
}
|
|
20074
|
-
var ToastContext =
|
|
20098
|
+
var ToastContext = React55__default.createContext(null);
|
|
20075
20099
|
function useToast() {
|
|
20076
|
-
const ctx =
|
|
20100
|
+
const ctx = React55__default.useContext(ToastContext);
|
|
20077
20101
|
if (!ctx) throw new Error("useToast must be used within a <ToastProvider>.");
|
|
20078
20102
|
return ctx;
|
|
20079
20103
|
}
|
|
20080
20104
|
function ToastProvider({ children, limit = 4, duration = 4500, ...viewportProps }) {
|
|
20081
|
-
const [toasts, setToasts] =
|
|
20082
|
-
const [politeMsg, setPoliteMsg] =
|
|
20083
|
-
const [assertiveMsg, setAssertiveMsg] =
|
|
20084
|
-
const idRef =
|
|
20085
|
-
const limitRef =
|
|
20086
|
-
|
|
20105
|
+
const [toasts, setToasts] = React55__default.useState([]);
|
|
20106
|
+
const [politeMsg, setPoliteMsg] = React55__default.useState("");
|
|
20107
|
+
const [assertiveMsg, setAssertiveMsg] = React55__default.useState("");
|
|
20108
|
+
const idRef = React55__default.useRef(0);
|
|
20109
|
+
const limitRef = React55__default.useRef(limit);
|
|
20110
|
+
React55__default.useEffect(() => {
|
|
20087
20111
|
limitRef.current = limit;
|
|
20088
20112
|
}, [limit]);
|
|
20089
|
-
const dismiss =
|
|
20113
|
+
const dismiss = React55__default.useCallback((id) => {
|
|
20090
20114
|
setToasts((s) => s.filter((t) => t.id !== id));
|
|
20091
20115
|
}, []);
|
|
20092
|
-
const clear =
|
|
20093
|
-
const api =
|
|
20116
|
+
const clear = React55__default.useCallback(() => setToasts([]), []);
|
|
20117
|
+
const api = React55__default.useMemo(() => {
|
|
20094
20118
|
const push = (opts) => {
|
|
20095
20119
|
const id = idRef.current += 1;
|
|
20096
20120
|
const next = typeof opts === "string" ? { title: opts } : opts && typeof opts === "object" ? opts : {};
|
|
@@ -20117,7 +20141,7 @@ function ToastProvider({ children, limit = 4, duration = 4500, ...viewportProps
|
|
|
20117
20141
|
toast.show = withTone("default");
|
|
20118
20142
|
return { toast, dismiss, clear };
|
|
20119
20143
|
}, [dismiss, clear]);
|
|
20120
|
-
const value =
|
|
20144
|
+
const value = React55__default.useMemo(() => ({ ...api, toasts }), [api, toasts]);
|
|
20121
20145
|
return /* @__PURE__ */ jsxs(ToastContext.Provider, { value, children: [
|
|
20122
20146
|
children,
|
|
20123
20147
|
/* @__PURE__ */ jsx("div", { className: "twc-toast-sr", "aria-live": "polite", "aria-atomic": "true", children: politeMsg }),
|
|
@@ -20231,13 +20255,13 @@ function TreeView({
|
|
|
20231
20255
|
}) {
|
|
20232
20256
|
const nodes = items;
|
|
20233
20257
|
const __twcStyles = useScopedStyles("twc-tree-styles", TREE_CSS);
|
|
20234
|
-
const [expInternal, setExpInternal] =
|
|
20258
|
+
const [expInternal, setExpInternal] = React55__default.useState(() => new Set(defaultExpanded));
|
|
20235
20259
|
const expanded = expandedProp !== void 0 ? new Set(expandedProp) : expInternal;
|
|
20236
|
-
const [selInternal, setSelInternal] =
|
|
20260
|
+
const [selInternal, setSelInternal] = React55__default.useState(defaultSelectedId);
|
|
20237
20261
|
const selectedId = selectedProp !== void 0 ? selectedProp : selInternal;
|
|
20238
|
-
const [focusId, setFocusId] =
|
|
20239
|
-
const rowRefs =
|
|
20240
|
-
const taRef =
|
|
20262
|
+
const [focusId, setFocusId] = React55__default.useState(null);
|
|
20263
|
+
const rowRefs = React55__default.useRef(/* @__PURE__ */ new Map());
|
|
20264
|
+
const taRef = React55__default.useRef({ str: "", t: 0 });
|
|
20241
20265
|
const toggle = (id) => {
|
|
20242
20266
|
const n = new Set(expanded);
|
|
20243
20267
|
n.has(id) ? n.delete(id) : n.add(id);
|
|
@@ -20375,7 +20399,7 @@ function AppShell({
|
|
|
20375
20399
|
...rest
|
|
20376
20400
|
}) {
|
|
20377
20401
|
const __twcStyles = useScopedStyles("twc-shell-styles", SHELL_CSS);
|
|
20378
|
-
const wiredSidebar =
|
|
20402
|
+
const wiredSidebar = React55__default.isValidElement(sidebar) && (sidebarOpen !== void 0 || onSidebarOpenChange !== void 0) ? React55__default.cloneElement(sidebar, {
|
|
20379
20403
|
overlay: sidebar.props.overlay !== void 0 ? sidebar.props.overlay : true,
|
|
20380
20404
|
open: sidebar.props.open !== void 0 ? sidebar.props.open : sidebarOpen,
|
|
20381
20405
|
onOpenChange: sidebar.props.onOpenChange !== void 0 ? sidebar.props.onOpenChange : onSidebarOpenChange
|
|
@@ -20410,7 +20434,7 @@ function safeHref9(url) {
|
|
|
20410
20434
|
const s = String(url).replace(/[\x00-\x20]+/g, "").toLowerCase();
|
|
20411
20435
|
return s.startsWith("javascript:") || s.startsWith("data:") || s.startsWith("vbscript:") ? void 0 : url;
|
|
20412
20436
|
}
|
|
20413
|
-
var Box =
|
|
20437
|
+
var Box = /* @__PURE__ */ React55__default.forwardRef(function Box2({
|
|
20414
20438
|
as: Tag2 = "div",
|
|
20415
20439
|
p,
|
|
20416
20440
|
px,
|
|
@@ -20459,14 +20483,13 @@ var Box = React54__default.forwardRef(function Box2({
|
|
|
20459
20483
|
children
|
|
20460
20484
|
] });
|
|
20461
20485
|
});
|
|
20462
|
-
Box.displayName = "Box";
|
|
20463
20486
|
var SIZES = { sm: 640, md: 768, lg: 1024, xl: 1280, full: "100%" };
|
|
20464
20487
|
function safeHref10(url) {
|
|
20465
20488
|
if (url == null) return void 0;
|
|
20466
20489
|
const s = String(url).replace(/[\x00-\x20]+/g, "").toLowerCase();
|
|
20467
20490
|
return s.startsWith("javascript:") || s.startsWith("data:") || s.startsWith("vbscript:") ? void 0 : url;
|
|
20468
20491
|
}
|
|
20469
|
-
var Container =
|
|
20492
|
+
var Container = /* @__PURE__ */ React55__default.forwardRef(function Container2({
|
|
20470
20493
|
as: Tag2 = "div",
|
|
20471
20494
|
size = "lg",
|
|
20472
20495
|
padded = true,
|
|
@@ -20503,7 +20526,6 @@ var Container = React54__default.forwardRef(function Container2({
|
|
|
20503
20526
|
}
|
|
20504
20527
|
);
|
|
20505
20528
|
});
|
|
20506
|
-
Container.displayName = "Container";
|
|
20507
20529
|
function space2(v) {
|
|
20508
20530
|
if (v == null) return void 0;
|
|
20509
20531
|
if (typeof v === "number") return `var(--space-${String(v).replace(".", "-")})`;
|
|
@@ -20514,7 +20536,7 @@ function safeHref11(url) {
|
|
|
20514
20536
|
const s = String(url).replace(/[\x00-\x20]+/g, "").toLowerCase();
|
|
20515
20537
|
return s.startsWith("javascript:") || s.startsWith("data:") || s.startsWith("vbscript:") ? void 0 : url;
|
|
20516
20538
|
}
|
|
20517
|
-
var Stack =
|
|
20539
|
+
var Stack = /* @__PURE__ */ React55__default.forwardRef(function Stack2({
|
|
20518
20540
|
as: Tag2 = "div",
|
|
20519
20541
|
direction = "column",
|
|
20520
20542
|
gap = 4,
|
|
@@ -20538,7 +20560,7 @@ var Stack = React54__default.forwardRef(function Stack2({
|
|
|
20538
20560
|
}, ref) {
|
|
20539
20561
|
const { flatStyle, styleNode, sxAttr } = useSx(sx);
|
|
20540
20562
|
if (Tag2 === "a" && rest.href != null) rest.href = safeHref11(rest.href);
|
|
20541
|
-
const kids = divider != null ?
|
|
20563
|
+
const kids = divider != null ? React55__default.Children.toArray(children).flatMap((child, i, arr) => i < arr.length - 1 ? [child, /* @__PURE__ */ jsx(React55__default.Fragment, { children: divider }, `twc-stack-div-${i}`)] : [child]) : children;
|
|
20542
20564
|
return /* @__PURE__ */ jsxs(
|
|
20543
20565
|
Tag2,
|
|
20544
20566
|
{
|
|
@@ -20568,7 +20590,6 @@ var Stack = React54__default.forwardRef(function Stack2({
|
|
|
20568
20590
|
}
|
|
20569
20591
|
);
|
|
20570
20592
|
});
|
|
20571
|
-
Stack.displayName = "Stack";
|
|
20572
20593
|
var CODE_CSS = `
|
|
20573
20594
|
.twc-code {
|
|
20574
20595
|
font-family: var(--font-mono); font-size: 0.875em;
|
|
@@ -20597,7 +20618,7 @@ function safeHref12(url) {
|
|
|
20597
20618
|
const s = String(url).replace(/[\x00-\x20]+/g, "").toLowerCase();
|
|
20598
20619
|
return s.startsWith("javascript:") || s.startsWith("data:") || s.startsWith("vbscript:") ? void 0 : url;
|
|
20599
20620
|
}
|
|
20600
|
-
|
|
20621
|
+
var Code = /* @__PURE__ */ React55__default.forwardRef(function Code2({
|
|
20601
20622
|
as,
|
|
20602
20623
|
block = false,
|
|
20603
20624
|
copyable = false,
|
|
@@ -20606,14 +20627,15 @@ function Code({
|
|
|
20606
20627
|
className = "",
|
|
20607
20628
|
children,
|
|
20608
20629
|
...rest
|
|
20609
|
-
}) {
|
|
20630
|
+
}, ref) {
|
|
20610
20631
|
const __twcStyles = useScopedStyles("twc-code-styles", CODE_CSS);
|
|
20611
20632
|
const Tag2 = as ?? (block ? "pre" : "code");
|
|
20612
20633
|
if (Tag2 === "a" && rest.href != null) rest.href = safeHref12(rest.href);
|
|
20613
|
-
const rootRef =
|
|
20614
|
-
const
|
|
20615
|
-
const
|
|
20616
|
-
|
|
20634
|
+
const rootRef = React55__default.useRef(null);
|
|
20635
|
+
const setRootRef = useMergedRef(rootRef, ref);
|
|
20636
|
+
const [copied, setCopied] = React55__default.useState(false);
|
|
20637
|
+
const timerRef = React55__default.useRef(null);
|
|
20638
|
+
React55__default.useEffect(() => () => clearTimeout(timerRef.current), []);
|
|
20617
20639
|
const doCopy = () => {
|
|
20618
20640
|
const text = typeof children === "string" ? children : rootRef.current?.textContent ?? "";
|
|
20619
20641
|
const flash = () => {
|
|
@@ -20646,7 +20668,7 @@ function Code({
|
|
|
20646
20668
|
}
|
|
20647
20669
|
execFallback();
|
|
20648
20670
|
};
|
|
20649
|
-
return /* @__PURE__ */ jsxs(Tag2, { ref:
|
|
20671
|
+
return /* @__PURE__ */ jsxs(Tag2, { ref: setRootRef, className: `twc-code ${className}`.trim(), "data-block": block || void 0, ...rest, children: [
|
|
20650
20672
|
__twcStyles,
|
|
20651
20673
|
copyable ? /* @__PURE__ */ jsx("button", { type: "button", className: "twc-code__copy", "aria-label": copied ? copiedLabel : copyLabel, onClick: doCopy, children: copied ? /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.4", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "m20 6-11 11-5-5" }) }) : /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
20652
20674
|
/* @__PURE__ */ jsx("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2" }),
|
|
@@ -20654,14 +20676,14 @@ function Code({
|
|
|
20654
20676
|
] }) }) : null,
|
|
20655
20677
|
children
|
|
20656
20678
|
] });
|
|
20657
|
-
}
|
|
20679
|
+
});
|
|
20658
20680
|
var LEVEL_SIZE = { 1: "4xl", 2: "2xl", 3: "xl", 4: "lg", 5: "base", 6: "sm" };
|
|
20659
20681
|
function safeHref13(url) {
|
|
20660
20682
|
if (url == null) return void 0;
|
|
20661
20683
|
const s = String(url).replace(/[\x00-\x20]+/g, "").toLowerCase();
|
|
20662
20684
|
return s.startsWith("javascript:") || s.startsWith("data:") || s.startsWith("vbscript:") ? void 0 : url;
|
|
20663
20685
|
}
|
|
20664
|
-
var Heading =
|
|
20686
|
+
var Heading = /* @__PURE__ */ React55__default.forwardRef(function Heading2({
|
|
20665
20687
|
as,
|
|
20666
20688
|
level = 2,
|
|
20667
20689
|
size,
|
|
@@ -20709,7 +20731,6 @@ var Heading = React54__default.forwardRef(function Heading2({
|
|
|
20709
20731
|
}
|
|
20710
20732
|
);
|
|
20711
20733
|
});
|
|
20712
|
-
Heading.displayName = "Heading";
|
|
20713
20734
|
var TONE = {
|
|
20714
20735
|
default: "--color-text",
|
|
20715
20736
|
muted: "--color-text-muted",
|
|
@@ -20730,7 +20751,7 @@ function safeHref14(url) {
|
|
|
20730
20751
|
const s = String(url).replace(/[\x00-\x20]+/g, "").toLowerCase();
|
|
20731
20752
|
return s.startsWith("javascript:") || s.startsWith("data:") || s.startsWith("vbscript:") ? void 0 : url;
|
|
20732
20753
|
}
|
|
20733
|
-
var Text =
|
|
20754
|
+
var Text = /* @__PURE__ */ React55__default.forwardRef(function Text2({
|
|
20734
20755
|
as: Tag2 = "p",
|
|
20735
20756
|
size = "base",
|
|
20736
20757
|
tone = "default",
|
|
@@ -20776,47 +20797,46 @@ var Text = React54__default.forwardRef(function Text2({
|
|
|
20776
20797
|
}
|
|
20777
20798
|
);
|
|
20778
20799
|
});
|
|
20779
|
-
Text.displayName = "Text";
|
|
20780
20800
|
var canUseDOM2 = typeof window !== "undefined" && typeof document !== "undefined";
|
|
20781
|
-
var useIsomorphicLayoutEffect = canUseDOM2 ?
|
|
20801
|
+
var useIsomorphicLayoutEffect = canUseDOM2 ? React55__default.useLayoutEffect : React55__default.useEffect;
|
|
20782
20802
|
function useMounted() {
|
|
20783
|
-
const [mounted, setMounted] =
|
|
20784
|
-
|
|
20803
|
+
const [mounted, setMounted] = React55__default.useState(false);
|
|
20804
|
+
React55__default.useEffect(() => {
|
|
20785
20805
|
setMounted(true);
|
|
20786
20806
|
}, []);
|
|
20787
20807
|
return mounted;
|
|
20788
20808
|
}
|
|
20789
20809
|
function usePrevious(value) {
|
|
20790
|
-
const ref =
|
|
20791
|
-
|
|
20810
|
+
const ref = React55__default.useRef(void 0);
|
|
20811
|
+
React55__default.useEffect(() => {
|
|
20792
20812
|
ref.current = value;
|
|
20793
20813
|
}, [value]);
|
|
20794
20814
|
return ref.current;
|
|
20795
20815
|
}
|
|
20796
20816
|
function useToggle(initial = false) {
|
|
20797
|
-
const [on, setOn] =
|
|
20798
|
-
const toggle =
|
|
20817
|
+
const [on, setOn] = React55__default.useState(initial);
|
|
20818
|
+
const toggle = React55__default.useCallback((next) => {
|
|
20799
20819
|
setOn((prev) => typeof next === "boolean" ? next : !prev);
|
|
20800
20820
|
}, []);
|
|
20801
20821
|
return [on, toggle, setOn];
|
|
20802
20822
|
}
|
|
20803
20823
|
function useDisclosure(initial = false) {
|
|
20804
|
-
const [open, setOpen] =
|
|
20805
|
-
const onOpen =
|
|
20806
|
-
const onClose =
|
|
20807
|
-
const onToggle =
|
|
20824
|
+
const [open, setOpen] = React55__default.useState(initial);
|
|
20825
|
+
const onOpen = React55__default.useCallback(() => setOpen(true), []);
|
|
20826
|
+
const onClose = React55__default.useCallback(() => setOpen(false), []);
|
|
20827
|
+
const onToggle = React55__default.useCallback(() => setOpen((p) => !p), []);
|
|
20808
20828
|
return { open, onOpen, onClose, onToggle, setOpen };
|
|
20809
20829
|
}
|
|
20810
20830
|
function useControllableState({ value, defaultValue, onChange } = {}) {
|
|
20811
20831
|
const isControlled = value !== void 0;
|
|
20812
|
-
const [uncontrolled, setUncontrolled] =
|
|
20832
|
+
const [uncontrolled, setUncontrolled] = React55__default.useState(defaultValue);
|
|
20813
20833
|
const current = isControlled ? value : uncontrolled;
|
|
20814
|
-
const ref =
|
|
20834
|
+
const ref = React55__default.useRef({ current, isControlled, onChange });
|
|
20815
20835
|
useIsomorphicLayoutEffect(() => {
|
|
20816
20836
|
ref.current = { current, isControlled, onChange };
|
|
20817
20837
|
});
|
|
20818
|
-
const wasControlled =
|
|
20819
|
-
|
|
20838
|
+
const wasControlled = React55__default.useRef(isControlled);
|
|
20839
|
+
React55__default.useEffect(() => {
|
|
20820
20840
|
if (wasControlled.current !== isControlled) {
|
|
20821
20841
|
warnOnce(
|
|
20822
20842
|
"useControllableState:switch",
|
|
@@ -20825,7 +20845,7 @@ function useControllableState({ value, defaultValue, onChange } = {}) {
|
|
|
20825
20845
|
wasControlled.current = isControlled;
|
|
20826
20846
|
}
|
|
20827
20847
|
});
|
|
20828
|
-
const setValue =
|
|
20848
|
+
const setValue = React55__default.useCallback((next) => {
|
|
20829
20849
|
const { current: cur, isControlled: ctrl, onChange: cb } = ref.current;
|
|
20830
20850
|
const resolved = typeof next === "function" ? next(cur) : next;
|
|
20831
20851
|
if (resolved === cur) return;
|
|
@@ -20836,7 +20856,7 @@ function useControllableState({ value, defaultValue, onChange } = {}) {
|
|
|
20836
20856
|
}
|
|
20837
20857
|
function useMediaQuery(query, { defaultValue = false, initializeWithValue = false } = {}) {
|
|
20838
20858
|
const get = () => canUseDOM2 ? window.matchMedia(query).matches : defaultValue;
|
|
20839
|
-
const [matches3, setMatches] =
|
|
20859
|
+
const [matches3, setMatches] = React55__default.useState(initializeWithValue ? get : defaultValue);
|
|
20840
20860
|
useIsomorphicLayoutEffect(() => {
|
|
20841
20861
|
if (!canUseDOM2) return void 0;
|
|
20842
20862
|
const mql = window.matchMedia(query);
|
|
@@ -20852,7 +20872,7 @@ function usePrefersReducedMotion() {
|
|
|
20852
20872
|
}
|
|
20853
20873
|
function useColorScheme({ storageKey = "twico-theme", attribute = "class", element, disableTransitionsOnChange = true, initializeWithValue = false } = {}) {
|
|
20854
20874
|
const getTarget = () => element || (canUseDOM2 ? document.documentElement : null);
|
|
20855
|
-
const firstApply =
|
|
20875
|
+
const firstApply = React55__default.useRef(true);
|
|
20856
20876
|
const read = () => {
|
|
20857
20877
|
if (!canUseDOM2) return "light";
|
|
20858
20878
|
try {
|
|
@@ -20862,8 +20882,8 @@ function useColorScheme({ storageKey = "twico-theme", attribute = "class", eleme
|
|
|
20862
20882
|
}
|
|
20863
20883
|
return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
20864
20884
|
};
|
|
20865
|
-
const [theme, setThemeState] =
|
|
20866
|
-
const apply =
|
|
20885
|
+
const [theme, setThemeState] = React55__default.useState(initializeWithValue ? read : "light");
|
|
20886
|
+
const apply = React55__default.useCallback(
|
|
20867
20887
|
(t) => {
|
|
20868
20888
|
const target = getTarget();
|
|
20869
20889
|
if (!target) return;
|
|
@@ -20886,7 +20906,7 @@ function useColorScheme({ storageKey = "twico-theme", attribute = "class", eleme
|
|
|
20886
20906
|
},
|
|
20887
20907
|
[attribute, element, disableTransitionsOnChange]
|
|
20888
20908
|
);
|
|
20889
|
-
const resolved =
|
|
20909
|
+
const resolved = React55__default.useRef(false);
|
|
20890
20910
|
useIsomorphicLayoutEffect(() => {
|
|
20891
20911
|
if (!resolved.current) {
|
|
20892
20912
|
resolved.current = true;
|
|
@@ -20899,11 +20919,11 @@ function useColorScheme({ storageKey = "twico-theme", attribute = "class", eleme
|
|
|
20899
20919
|
}
|
|
20900
20920
|
apply(theme);
|
|
20901
20921
|
}, [theme, apply]);
|
|
20902
|
-
const themeRef =
|
|
20922
|
+
const themeRef = React55__default.useRef(theme);
|
|
20903
20923
|
useIsomorphicLayoutEffect(() => {
|
|
20904
20924
|
themeRef.current = theme;
|
|
20905
20925
|
}, [theme]);
|
|
20906
|
-
const setTheme =
|
|
20926
|
+
const setTheme = React55__default.useCallback(
|
|
20907
20927
|
(t) => {
|
|
20908
20928
|
setThemeState(t);
|
|
20909
20929
|
try {
|
|
@@ -20914,10 +20934,10 @@ function useColorScheme({ storageKey = "twico-theme", attribute = "class", eleme
|
|
|
20914
20934
|
},
|
|
20915
20935
|
[storageKey]
|
|
20916
20936
|
);
|
|
20917
|
-
const toggle =
|
|
20937
|
+
const toggle = React55__default.useCallback(() => {
|
|
20918
20938
|
setTheme(themeRef.current === "dark" ? "light" : "dark");
|
|
20919
20939
|
}, [setTheme]);
|
|
20920
|
-
|
|
20940
|
+
React55__default.useEffect(() => {
|
|
20921
20941
|
if (!canUseDOM2) return void 0;
|
|
20922
20942
|
const sync = () => setThemeState(read());
|
|
20923
20943
|
const onStorage = (e) => {
|
|
@@ -20933,14 +20953,14 @@ function useColorScheme({ storageKey = "twico-theme", attribute = "class", eleme
|
|
|
20933
20953
|
return { theme, setTheme, toggle, isDark: theme === "dark" };
|
|
20934
20954
|
}
|
|
20935
20955
|
function useEventListener(eventName, handler, element, options) {
|
|
20936
|
-
const saved =
|
|
20956
|
+
const saved = React55__default.useRef(handler);
|
|
20937
20957
|
useIsomorphicLayoutEffect(() => {
|
|
20938
20958
|
saved.current = handler;
|
|
20939
20959
|
}, [handler]);
|
|
20940
20960
|
const capture = typeof options === "boolean" ? options : options && options.capture;
|
|
20941
20961
|
const passive = typeof options === "object" && options ? options.passive : void 0;
|
|
20942
20962
|
const once = typeof options === "object" && options ? options.once : void 0;
|
|
20943
|
-
|
|
20963
|
+
React55__default.useEffect(() => {
|
|
20944
20964
|
const target = element && element.current || element || (canUseDOM2 ? window : null);
|
|
20945
20965
|
if (!target || !target.addEventListener) return void 0;
|
|
20946
20966
|
const opts = typeof options === "boolean" ? options : { capture, passive, once };
|
|
@@ -20950,11 +20970,11 @@ function useEventListener(eventName, handler, element, options) {
|
|
|
20950
20970
|
}, [eventName, element, capture, passive, once]);
|
|
20951
20971
|
}
|
|
20952
20972
|
function useClickOutside(ref, handler, events = ["mousedown", "touchstart"]) {
|
|
20953
|
-
const saved =
|
|
20973
|
+
const saved = React55__default.useRef(handler);
|
|
20954
20974
|
useIsomorphicLayoutEffect(() => {
|
|
20955
20975
|
saved.current = handler;
|
|
20956
20976
|
}, [handler]);
|
|
20957
|
-
|
|
20977
|
+
React55__default.useEffect(() => {
|
|
20958
20978
|
if (!canUseDOM2) return void 0;
|
|
20959
20979
|
const listener = (e) => {
|
|
20960
20980
|
const el = ref && ref.current;
|
|
@@ -20989,12 +21009,12 @@ function useLocalStorage(key, initialValue, { initializeWithValue = false } = {}
|
|
|
20989
21009
|
return initialValue;
|
|
20990
21010
|
}
|
|
20991
21011
|
};
|
|
20992
|
-
const [stored, setStored] =
|
|
21012
|
+
const [stored, setStored] = React55__default.useState(initializeWithValue ? read : initialValue);
|
|
20993
21013
|
useIsomorphicLayoutEffect(() => {
|
|
20994
21014
|
if (!canUseDOM2) return;
|
|
20995
21015
|
setStored(read());
|
|
20996
21016
|
}, [key]);
|
|
20997
|
-
const setValue =
|
|
21017
|
+
const setValue = React55__default.useCallback(
|
|
20998
21018
|
(value) => {
|
|
20999
21019
|
setStored((prev) => {
|
|
21000
21020
|
const next = typeof value === "function" ? value(prev) : value;
|
|
@@ -21033,9 +21053,9 @@ function legacyCopy(text) {
|
|
|
21033
21053
|
}
|
|
21034
21054
|
}
|
|
21035
21055
|
function useCopyToClipboard(timeout = 1500) {
|
|
21036
|
-
const [copied, setCopied] =
|
|
21037
|
-
const [copyTick, setCopyTick] =
|
|
21038
|
-
const copy =
|
|
21056
|
+
const [copied, setCopied] = React55__default.useState(false);
|
|
21057
|
+
const [copyTick, setCopyTick] = React55__default.useState(0);
|
|
21058
|
+
const copy = React55__default.useCallback(async (text) => {
|
|
21039
21059
|
if (!canUseDOM2) {
|
|
21040
21060
|
setCopied(false);
|
|
21041
21061
|
return false;
|
|
@@ -21054,7 +21074,7 @@ function useCopyToClipboard(timeout = 1500) {
|
|
|
21054
21074
|
if (ok) setCopyTick((t) => t + 1);
|
|
21055
21075
|
return ok;
|
|
21056
21076
|
}, []);
|
|
21057
|
-
|
|
21077
|
+
React55__default.useEffect(() => {
|
|
21058
21078
|
if (!copied) return void 0;
|
|
21059
21079
|
const t = setTimeout(() => setCopied(false), timeout);
|
|
21060
21080
|
return () => clearTimeout(t);
|
|
@@ -21062,23 +21082,23 @@ function useCopyToClipboard(timeout = 1500) {
|
|
|
21062
21082
|
return { copied, copy };
|
|
21063
21083
|
}
|
|
21064
21084
|
function useDebouncedValue(value, delay = 200) {
|
|
21065
|
-
const [debounced, setDebounced] =
|
|
21066
|
-
|
|
21085
|
+
const [debounced, setDebounced] = React55__default.useState(value);
|
|
21086
|
+
React55__default.useEffect(() => {
|
|
21067
21087
|
const t = setTimeout(() => setDebounced(value), delay);
|
|
21068
21088
|
return () => clearTimeout(t);
|
|
21069
21089
|
}, [value, delay]);
|
|
21070
21090
|
return debounced;
|
|
21071
21091
|
}
|
|
21072
21092
|
function useDebouncedCallback(callback, delay = 200) {
|
|
21073
|
-
const saved =
|
|
21074
|
-
const timer =
|
|
21093
|
+
const saved = React55__default.useRef(callback);
|
|
21094
|
+
const timer = React55__default.useRef(null);
|
|
21075
21095
|
useIsomorphicLayoutEffect(() => {
|
|
21076
21096
|
saved.current = callback;
|
|
21077
21097
|
}, [callback]);
|
|
21078
|
-
|
|
21098
|
+
React55__default.useEffect(() => () => {
|
|
21079
21099
|
if (timer.current) clearTimeout(timer.current);
|
|
21080
21100
|
}, []);
|
|
21081
|
-
return
|
|
21101
|
+
return React55__default.useCallback(
|
|
21082
21102
|
(...args) => {
|
|
21083
21103
|
if (timer.current) clearTimeout(timer.current);
|
|
21084
21104
|
timer.current = setTimeout(() => saved.current(...args), delay);
|
|
@@ -21087,22 +21107,22 @@ function useDebouncedCallback(callback, delay = 200) {
|
|
|
21087
21107
|
);
|
|
21088
21108
|
}
|
|
21089
21109
|
function useInterval(callback, delay) {
|
|
21090
|
-
const saved =
|
|
21110
|
+
const saved = React55__default.useRef(callback);
|
|
21091
21111
|
useIsomorphicLayoutEffect(() => {
|
|
21092
21112
|
saved.current = callback;
|
|
21093
21113
|
}, [callback]);
|
|
21094
|
-
|
|
21114
|
+
React55__default.useEffect(() => {
|
|
21095
21115
|
if (delay == null) return void 0;
|
|
21096
21116
|
const id = setInterval(() => saved.current(), delay);
|
|
21097
21117
|
return () => clearInterval(id);
|
|
21098
21118
|
}, [delay]);
|
|
21099
21119
|
}
|
|
21100
21120
|
function useTimeout(callback, delay) {
|
|
21101
|
-
const saved =
|
|
21121
|
+
const saved = React55__default.useRef(callback);
|
|
21102
21122
|
useIsomorphicLayoutEffect(() => {
|
|
21103
21123
|
saved.current = callback;
|
|
21104
21124
|
}, [callback]);
|
|
21105
|
-
|
|
21125
|
+
React55__default.useEffect(() => {
|
|
21106
21126
|
if (delay == null) return void 0;
|
|
21107
21127
|
const id = setTimeout(() => saved.current(), delay);
|
|
21108
21128
|
return () => clearTimeout(id);
|
|
@@ -21113,7 +21133,7 @@ function useWindowSize({ initializeWithValue = false } = {}) {
|
|
|
21113
21133
|
width: canUseDOM2 ? window.innerWidth : 0,
|
|
21114
21134
|
height: canUseDOM2 ? window.innerHeight : 0
|
|
21115
21135
|
});
|
|
21116
|
-
const [size, setSize] =
|
|
21136
|
+
const [size, setSize] = React55__default.useState(initializeWithValue ? get : { width: 0, height: 0 });
|
|
21117
21137
|
useIsomorphicLayoutEffect(() => {
|
|
21118
21138
|
if (!canUseDOM2) return void 0;
|
|
21119
21139
|
const onResize = () => setSize({ width: window.innerWidth, height: window.innerHeight });
|
|
@@ -21124,8 +21144,8 @@ function useWindowSize({ initializeWithValue = false } = {}) {
|
|
|
21124
21144
|
return size;
|
|
21125
21145
|
}
|
|
21126
21146
|
function useHover(ref) {
|
|
21127
|
-
const [hovered, setHovered] =
|
|
21128
|
-
|
|
21147
|
+
const [hovered, setHovered] = React55__default.useState(false);
|
|
21148
|
+
React55__default.useEffect(() => {
|
|
21129
21149
|
const el = ref && ref.current;
|
|
21130
21150
|
if (!el) return void 0;
|
|
21131
21151
|
const on = () => setHovered(true);
|
|
@@ -21141,8 +21161,8 @@ function useHover(ref) {
|
|
|
21141
21161
|
}
|
|
21142
21162
|
function useIntersectionObserver(ref, options = {}) {
|
|
21143
21163
|
const { root = null, rootMargin = "0px", threshold = 0 } = options;
|
|
21144
|
-
const [entry, setEntry] =
|
|
21145
|
-
|
|
21164
|
+
const [entry, setEntry] = React55__default.useState(null);
|
|
21165
|
+
React55__default.useEffect(() => {
|
|
21146
21166
|
const el = ref && ref.current;
|
|
21147
21167
|
if (!canUseDOM2 || !el || typeof IntersectionObserver === "undefined") return void 0;
|
|
21148
21168
|
const obs = new IntersectionObserver(([e]) => setEntry(e), { root, rootMargin, threshold });
|
|
@@ -21152,20 +21172,20 @@ function useIntersectionObserver(ref, options = {}) {
|
|
|
21152
21172
|
return entry;
|
|
21153
21173
|
}
|
|
21154
21174
|
function useId(prefix = "twc") {
|
|
21155
|
-
const raw =
|
|
21175
|
+
const raw = React55__default.useId();
|
|
21156
21176
|
return prefix ? `${prefix}-${raw.replace(/:/g, "")}` : raw;
|
|
21157
21177
|
}
|
|
21158
21178
|
var useFocusTrap2 = useFocusTrap;
|
|
21159
21179
|
var usePortal2 = usePortal;
|
|
21160
21180
|
var useScrollLock2 = useScrollLock;
|
|
21161
21181
|
function useFilePicker({ accept, multiple = false, maxSize, maxFiles, onFiles, onReject } = {}) {
|
|
21162
|
-
const inputRef =
|
|
21163
|
-
const cbRef =
|
|
21182
|
+
const inputRef = React55__default.useRef(null);
|
|
21183
|
+
const cbRef = React55__default.useRef({ onFiles, onReject });
|
|
21164
21184
|
cbRef.current = { onFiles, onReject };
|
|
21165
|
-
const open =
|
|
21185
|
+
const open = React55__default.useCallback(() => {
|
|
21166
21186
|
inputRef.current?.click();
|
|
21167
21187
|
}, []);
|
|
21168
|
-
const getInputProps =
|
|
21188
|
+
const getInputProps = React55__default.useCallback(() => ({
|
|
21169
21189
|
ref: inputRef,
|
|
21170
21190
|
type: "file",
|
|
21171
21191
|
accept,
|