@x-plat/design-system 0.5.11 → 0.5.13
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/dist/components/Chart/index.cjs +67 -48
- package/dist/components/Chart/index.js +68 -49
- package/dist/components/DatePicker/index.cjs +398 -380
- package/dist/components/DatePicker/index.js +384 -366
- package/dist/components/Dropdown/index.cjs +34 -17
- package/dist/components/Dropdown/index.css +9 -9
- package/dist/components/Dropdown/index.js +33 -16
- package/dist/components/Modal/index.cjs +25 -9
- package/dist/components/Modal/index.d.cts +0 -3
- package/dist/components/Modal/index.d.ts +0 -3
- package/dist/components/Modal/index.js +24 -8
- package/dist/components/PopOver/index.cjs +29 -12
- package/dist/components/PopOver/index.css +6 -9
- package/dist/components/PopOver/index.js +28 -11
- package/dist/components/Select/index.cjs +348 -331
- package/dist/components/Select/index.css +12 -19
- package/dist/components/Select/index.js +346 -329
- package/dist/components/index.cjs +480 -439
- package/dist/components/index.css +27 -37
- package/dist/components/index.js +436 -395
- package/dist/index.cjs +504 -463
- package/dist/index.css +27 -37
- package/dist/index.js +458 -417
- package/package.json +1 -1
|
@@ -2156,14 +2156,23 @@ var useChartSize = (ref) => {
|
|
|
2156
2156
|
import_react5.default.useEffect(() => {
|
|
2157
2157
|
const el = ref.current;
|
|
2158
2158
|
if (!el) return;
|
|
2159
|
+
let rafId = 0;
|
|
2159
2160
|
const observer = new ResizeObserver((entries) => {
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2161
|
+
cancelAnimationFrame(rafId);
|
|
2162
|
+
rafId = requestAnimationFrame(() => {
|
|
2163
|
+
const entry = entries[0];
|
|
2164
|
+
if (!entry) return;
|
|
2165
|
+
const { width, height } = entry.contentRect;
|
|
2166
|
+
const w = Math.floor(width);
|
|
2167
|
+
const h = Math.floor(height);
|
|
2168
|
+
setSize((prev) => prev.width === w && prev.height === h ? prev : { width: w, height: h });
|
|
2169
|
+
});
|
|
2164
2170
|
});
|
|
2165
2171
|
observer.observe(el);
|
|
2166
|
-
return () =>
|
|
2172
|
+
return () => {
|
|
2173
|
+
cancelAnimationFrame(rafId);
|
|
2174
|
+
observer.disconnect();
|
|
2175
|
+
};
|
|
2167
2176
|
}, [ref]);
|
|
2168
2177
|
return size;
|
|
2169
2178
|
};
|
|
@@ -2175,15 +2184,21 @@ var useChartTooltip = (enabled) => {
|
|
|
2175
2184
|
content: ""
|
|
2176
2185
|
});
|
|
2177
2186
|
const containerRef = import_react5.default.useRef(null);
|
|
2187
|
+
const rafRef = import_react5.default.useRef(0);
|
|
2178
2188
|
const move = import_react5.default.useCallback((e) => {
|
|
2179
2189
|
if (!enabled) return;
|
|
2180
|
-
const
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2190
|
+
const clientX = e.clientX;
|
|
2191
|
+
const clientY = e.clientY;
|
|
2192
|
+
cancelAnimationFrame(rafRef.current);
|
|
2193
|
+
rafRef.current = requestAnimationFrame(() => {
|
|
2194
|
+
const rect = containerRef.current?.getBoundingClientRect();
|
|
2195
|
+
if (!rect) return;
|
|
2196
|
+
setTooltip((prev) => ({
|
|
2197
|
+
...prev,
|
|
2198
|
+
x: clientX - rect.left,
|
|
2199
|
+
y: clientY - rect.top - 12
|
|
2200
|
+
}));
|
|
2201
|
+
});
|
|
2187
2202
|
}, [enabled]);
|
|
2188
2203
|
const show = import_react5.default.useCallback((e, content) => {
|
|
2189
2204
|
if (!enabled) return;
|
|
@@ -2197,10 +2212,35 @@ var useChartTooltip = (enabled) => {
|
|
|
2197
2212
|
});
|
|
2198
2213
|
}, [enabled]);
|
|
2199
2214
|
const hide = import_react5.default.useCallback(() => {
|
|
2215
|
+
cancelAnimationFrame(rafRef.current);
|
|
2200
2216
|
setTooltip((prev) => ({ ...prev, visible: false }));
|
|
2201
2217
|
}, []);
|
|
2202
2218
|
return { tooltip, show, hide, move, containerRef };
|
|
2203
2219
|
};
|
|
2220
|
+
var GridLines = import_react5.default.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(import_jsx_runtime305.Fragment, { children: [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
|
|
2221
|
+
const y = PADDING.top + (1 - ratio) * chartH;
|
|
2222
|
+
const val = Math.round(maxVal * ratio);
|
|
2223
|
+
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
|
|
2224
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
2225
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
2226
|
+
] }, ratio);
|
|
2227
|
+
}) }));
|
|
2228
|
+
GridLines.displayName = "GridLines";
|
|
2229
|
+
var getLabelStep = (count, chartW) => {
|
|
2230
|
+
const minLabelWidth = 40;
|
|
2231
|
+
const maxLabels = Math.floor(chartW / minLabelWidth);
|
|
2232
|
+
if (count <= maxLabels) return 1;
|
|
2233
|
+
return Math.ceil(count / maxLabels);
|
|
2234
|
+
};
|
|
2235
|
+
var AxisLabels = import_react5.default.memo(({ labels, count, chartW, height }) => {
|
|
2236
|
+
const step = getLabelStep(count, chartW);
|
|
2237
|
+
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(import_jsx_runtime305.Fragment, { children: labels.map((label, i) => {
|
|
2238
|
+
if (i % step !== 0) return null;
|
|
2239
|
+
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
2240
|
+
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2241
|
+
}) });
|
|
2242
|
+
});
|
|
2243
|
+
AxisLabels.displayName = "AxisLabels";
|
|
2204
2244
|
var LineChart = import_react5.default.memo(({ data, labels, width, height, onHover, onMove, onLeave }) => {
|
|
2205
2245
|
const entries = import_react5.default.useMemo(() => Object.entries(data), [data]);
|
|
2206
2246
|
const maxVal = import_react5.default.useMemo(() => {
|
|
@@ -2220,19 +2260,10 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, onHov
|
|
|
2220
2260
|
),
|
|
2221
2261
|
[entries, count, chartW, chartH, maxVal]
|
|
2222
2262
|
);
|
|
2263
|
+
const showPoints = count <= 100;
|
|
2223
2264
|
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
const val = Math.round(maxVal * ratio);
|
|
2227
|
-
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
|
|
2228
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
2229
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
2230
|
-
] }, ratio);
|
|
2231
|
-
}),
|
|
2232
|
-
labels.map((label, i) => {
|
|
2233
|
-
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
2234
|
-
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2235
|
-
}),
|
|
2265
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
2266
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)(AxisLabels, { labels, count, chartW, height }),
|
|
2236
2267
|
entries.map(([key], di) => {
|
|
2237
2268
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
2238
2269
|
const color = palette[2];
|
|
@@ -2247,7 +2278,7 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, onHov
|
|
|
2247
2278
|
strokeWidth: "2"
|
|
2248
2279
|
}
|
|
2249
2280
|
),
|
|
2250
|
-
points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
2281
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
2251
2282
|
"circle",
|
|
2252
2283
|
{
|
|
2253
2284
|
cx: p.x,
|
|
@@ -2285,19 +2316,10 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, onHo
|
|
|
2285
2316
|
),
|
|
2286
2317
|
[entries, count, chartW, chartH, maxVal]
|
|
2287
2318
|
);
|
|
2319
|
+
const showPoints = count <= 100;
|
|
2288
2320
|
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
const val = Math.round(maxVal * ratio);
|
|
2292
|
-
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
|
|
2293
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
2294
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
2295
|
-
] }, ratio);
|
|
2296
|
-
}),
|
|
2297
|
-
labels.map((label, i) => {
|
|
2298
|
-
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
2299
|
-
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2300
|
-
}),
|
|
2321
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
2322
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)(AxisLabels, { labels, count, chartW, height }),
|
|
2301
2323
|
entries.map(([key], di) => {
|
|
2302
2324
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
2303
2325
|
const color = palette[2];
|
|
@@ -2313,7 +2335,7 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, onHo
|
|
|
2313
2335
|
] }) }),
|
|
2314
2336
|
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("path", { d: areaPath, fill: `url(#${gradientId})` }),
|
|
2315
2337
|
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("path", { d: linePath, fill: "none", stroke: color, strokeWidth: "2" }),
|
|
2316
|
-
points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
2338
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
2317
2339
|
"circle",
|
|
2318
2340
|
{
|
|
2319
2341
|
cx: p.x,
|
|
@@ -2343,11 +2365,11 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, onHove
|
|
|
2343
2365
|
const chartW = width - PADDING.left - PADDING.right;
|
|
2344
2366
|
const chartH = height - PADDING.top - PADDING.bottom;
|
|
2345
2367
|
const groupW = chartW / count;
|
|
2346
|
-
const barW = Math.min(32, groupW * 0.7 / groupCount);
|
|
2368
|
+
const barW = Math.max(1, Math.min(32, groupW * 0.7 / groupCount));
|
|
2347
2369
|
const bars = import_react5.default.useMemo(
|
|
2348
2370
|
() => entries.map(
|
|
2349
2371
|
([, values], di) => values.map((v, i) => {
|
|
2350
|
-
const h = v / maxVal * chartH;
|
|
2372
|
+
const h = Math.max(0, v / maxVal * chartH);
|
|
2351
2373
|
const x = PADDING.left + groupW * i + (groupW - barW * groupCount) / 2 + barW * di;
|
|
2352
2374
|
const y = PADDING.top + chartH - h;
|
|
2353
2375
|
return { x, y, w: barW, h, v };
|
|
@@ -2355,16 +2377,13 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, onHove
|
|
|
2355
2377
|
),
|
|
2356
2378
|
[entries, maxVal, chartH, groupW, barW, groupCount]
|
|
2357
2379
|
);
|
|
2380
|
+
const barLabelStep = getLabelStep(count, chartW);
|
|
2358
2381
|
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
return /* @__PURE__ */ (0, import_jsx_runtime305.
|
|
2363
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
2364
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
2365
|
-
] }, ratio);
|
|
2382
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
2383
|
+
labels.map((label, i) => {
|
|
2384
|
+
if (i % barLabelStep !== 0) return null;
|
|
2385
|
+
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
2366
2386
|
}),
|
|
2367
|
-
labels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i)),
|
|
2368
2387
|
entries.map(([key], di) => {
|
|
2369
2388
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
2370
2389
|
const color = palette[2];
|
|
@@ -2544,7 +2563,7 @@ Chip.displayName = "Chip";
|
|
|
2544
2563
|
var Chip_default = Chip;
|
|
2545
2564
|
|
|
2546
2565
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
2547
|
-
var
|
|
2566
|
+
var import_react12 = __toESM(require("react"), 1);
|
|
2548
2567
|
|
|
2549
2568
|
// src/components/Input/Input.tsx
|
|
2550
2569
|
var import_react6 = __toESM(require("react"), 1);
|
|
@@ -2734,15 +2753,33 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
2734
2753
|
var PasswordInput_default = PasswordInput;
|
|
2735
2754
|
|
|
2736
2755
|
// src/components/Modal/Modal.tsx
|
|
2756
|
+
var import_react10 = __toESM(require("react"), 1);
|
|
2757
|
+
var import_react_dom2 = require("react-dom");
|
|
2758
|
+
|
|
2759
|
+
// src/tokens/hooks/Portal.tsx
|
|
2737
2760
|
var import_react9 = __toESM(require("react"), 1);
|
|
2738
|
-
var import_react_dom = require("react-dom");
|
|
2761
|
+
var import_react_dom = __toESM(require("react-dom"), 1);
|
|
2739
2762
|
var import_jsx_runtime311 = require("react/jsx-runtime");
|
|
2763
|
+
var PortalContainerContext = import_react9.default.createContext(null);
|
|
2764
|
+
var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(PortalContainerContext.Provider, { value: container, children });
|
|
2765
|
+
var Portal = ({ children }) => {
|
|
2766
|
+
const contextContainer = import_react9.default.useContext(PortalContainerContext);
|
|
2767
|
+
if (typeof document === "undefined") return null;
|
|
2768
|
+
const container = contextContainer ?? document.body;
|
|
2769
|
+
return import_react_dom.default.createPortal(children, container);
|
|
2770
|
+
};
|
|
2771
|
+
Portal.displayName = "Portal";
|
|
2772
|
+
var Portal_default = Portal;
|
|
2773
|
+
|
|
2774
|
+
// src/components/Modal/Modal.tsx
|
|
2775
|
+
var import_jsx_runtime312 = require("react/jsx-runtime");
|
|
2740
2776
|
var ANIMATION_DURATION_MS = 200;
|
|
2741
2777
|
var Modal = (props) => {
|
|
2742
2778
|
const { isOpen, onClose, children } = props;
|
|
2743
|
-
const [mounted, setMounted] =
|
|
2744
|
-
const [visible, setVisible] =
|
|
2745
|
-
|
|
2779
|
+
const [mounted, setMounted] = import_react10.default.useState(false);
|
|
2780
|
+
const [visible, setVisible] = import_react10.default.useState(false);
|
|
2781
|
+
const boxRef = import_react10.default.useRef(null);
|
|
2782
|
+
import_react10.default.useEffect(() => {
|
|
2746
2783
|
if (isOpen) {
|
|
2747
2784
|
setMounted(true);
|
|
2748
2785
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -2755,20 +2792,21 @@ var Modal = (props) => {
|
|
|
2755
2792
|
if (typeof document === "undefined") return null;
|
|
2756
2793
|
if (!mounted) return null;
|
|
2757
2794
|
const stateClass = visible ? "enter" : "exit";
|
|
2758
|
-
return (0,
|
|
2759
|
-
/* @__PURE__ */ (0,
|
|
2795
|
+
return (0, import_react_dom2.createPortal)(
|
|
2796
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
2760
2797
|
"div",
|
|
2761
2798
|
{
|
|
2762
2799
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
2763
2800
|
onClick: onClose,
|
|
2764
|
-
children: /* @__PURE__ */ (0,
|
|
2801
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
2765
2802
|
"div",
|
|
2766
2803
|
{
|
|
2804
|
+
ref: boxRef,
|
|
2767
2805
|
className: clsx_default("lib-xplat-modal", "modal-box", stateClass),
|
|
2768
2806
|
role: "dialog",
|
|
2769
2807
|
"aria-modal": "true",
|
|
2770
2808
|
onClick: (e) => e.stopPropagation(),
|
|
2771
|
-
children
|
|
2809
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(PortalProvider, { container: boxRef.current, children })
|
|
2772
2810
|
}
|
|
2773
2811
|
)
|
|
2774
2812
|
}
|
|
@@ -2780,9 +2818,9 @@ Modal.displayName = "Modal";
|
|
|
2780
2818
|
var Modal_default = Modal;
|
|
2781
2819
|
|
|
2782
2820
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
2783
|
-
var
|
|
2784
|
-
var
|
|
2785
|
-
var DayCell2 =
|
|
2821
|
+
var import_react11 = __toESM(require("react"), 1);
|
|
2822
|
+
var import_jsx_runtime313 = require("react/jsx-runtime");
|
|
2823
|
+
var DayCell2 = import_react11.default.memo(
|
|
2786
2824
|
({
|
|
2787
2825
|
day,
|
|
2788
2826
|
disabled,
|
|
@@ -2792,7 +2830,7 @@ var DayCell2 = import_react10.default.memo(
|
|
|
2792
2830
|
isEnd,
|
|
2793
2831
|
inRange,
|
|
2794
2832
|
onSelect
|
|
2795
|
-
}) => /* @__PURE__ */ (0,
|
|
2833
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
2796
2834
|
"button",
|
|
2797
2835
|
{
|
|
2798
2836
|
type: "button",
|
|
@@ -2834,26 +2872,26 @@ var SingleDatePicker = (props) => {
|
|
|
2834
2872
|
initialYear,
|
|
2835
2873
|
initialMonth
|
|
2836
2874
|
);
|
|
2837
|
-
const [pickerMode, setPickerMode] =
|
|
2838
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
2875
|
+
const [pickerMode, setPickerMode] = import_react11.default.useState("days");
|
|
2876
|
+
const [yearRangeStart, setYearRangeStart] = import_react11.default.useState(
|
|
2839
2877
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
2840
2878
|
);
|
|
2841
|
-
const minTime =
|
|
2879
|
+
const minTime = import_react11.default.useMemo(
|
|
2842
2880
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
2843
2881
|
[minDate]
|
|
2844
2882
|
);
|
|
2845
|
-
const maxTime =
|
|
2883
|
+
const maxTime = import_react11.default.useMemo(
|
|
2846
2884
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
2847
2885
|
[maxDate]
|
|
2848
2886
|
);
|
|
2849
|
-
const highlightSet =
|
|
2887
|
+
const highlightSet = import_react11.default.useMemo(() => {
|
|
2850
2888
|
const set = /* @__PURE__ */ new Set();
|
|
2851
2889
|
for (const h of highlightDates) {
|
|
2852
2890
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
2853
2891
|
}
|
|
2854
2892
|
return set;
|
|
2855
2893
|
}, [highlightDates]);
|
|
2856
|
-
const handleSelect =
|
|
2894
|
+
const handleSelect = import_react11.default.useCallback(
|
|
2857
2895
|
(date) => {
|
|
2858
2896
|
onChange?.(date);
|
|
2859
2897
|
},
|
|
@@ -2890,20 +2928,20 @@ var SingleDatePicker = (props) => {
|
|
|
2890
2928
|
const monthLabels = MONTH_LABELS[locale];
|
|
2891
2929
|
const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
|
|
2892
2930
|
const hasRange = rangeStart != null && rangeEnd != null;
|
|
2893
|
-
return /* @__PURE__ */ (0,
|
|
2931
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(
|
|
2894
2932
|
"div",
|
|
2895
2933
|
{
|
|
2896
2934
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
2897
2935
|
children: [
|
|
2898
|
-
/* @__PURE__ */ (0,
|
|
2899
|
-
/* @__PURE__ */ (0,
|
|
2900
|
-
/* @__PURE__ */ (0,
|
|
2901
|
-
/* @__PURE__ */ (0,
|
|
2936
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "datepicker-header", children: [
|
|
2937
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(ChevronLeftIcon_default, {}) }),
|
|
2938
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
2939
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(ChevronRightIcon_default, {}) })
|
|
2902
2940
|
] }),
|
|
2903
|
-
/* @__PURE__ */ (0,
|
|
2904
|
-
pickerMode === "years" && /* @__PURE__ */ (0,
|
|
2941
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "datepicker-body", children: [
|
|
2942
|
+
pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
2905
2943
|
const y = yearRangeStart + i;
|
|
2906
|
-
return /* @__PURE__ */ (0,
|
|
2944
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
2907
2945
|
"button",
|
|
2908
2946
|
{
|
|
2909
2947
|
type: "button",
|
|
@@ -2914,7 +2952,7 @@ var SingleDatePicker = (props) => {
|
|
|
2914
2952
|
y
|
|
2915
2953
|
);
|
|
2916
2954
|
}) }),
|
|
2917
|
-
pickerMode === "months" && /* @__PURE__ */ (0,
|
|
2955
|
+
pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
2918
2956
|
"button",
|
|
2919
2957
|
{
|
|
2920
2958
|
type: "button",
|
|
@@ -2924,8 +2962,8 @@ var SingleDatePicker = (props) => {
|
|
|
2924
2962
|
},
|
|
2925
2963
|
i
|
|
2926
2964
|
)) }),
|
|
2927
|
-
pickerMode === "days" && /* @__PURE__ */ (0,
|
|
2928
|
-
/* @__PURE__ */ (0,
|
|
2965
|
+
pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(import_jsx_runtime313.Fragment, { children: [
|
|
2966
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
2929
2967
|
"div",
|
|
2930
2968
|
{
|
|
2931
2969
|
className: clsx_default(
|
|
@@ -2937,7 +2975,7 @@ var SingleDatePicker = (props) => {
|
|
|
2937
2975
|
},
|
|
2938
2976
|
label
|
|
2939
2977
|
)) }),
|
|
2940
|
-
/* @__PURE__ */ (0,
|
|
2978
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
2941
2979
|
const t = day.date.getTime();
|
|
2942
2980
|
const disabled = t < minTime || t > maxTime;
|
|
2943
2981
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -2947,7 +2985,7 @@ var SingleDatePicker = (props) => {
|
|
|
2947
2985
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
2948
2986
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
2949
2987
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
2950
|
-
return /* @__PURE__ */ (0,
|
|
2988
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
2951
2989
|
DayCell2,
|
|
2952
2990
|
{
|
|
2953
2991
|
day,
|
|
@@ -2972,7 +3010,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
2972
3010
|
var SingleDatePicker_default = SingleDatePicker;
|
|
2973
3011
|
|
|
2974
3012
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
2975
|
-
var
|
|
3013
|
+
var import_jsx_runtime314 = require("react/jsx-runtime");
|
|
2976
3014
|
var formatDate = (date) => {
|
|
2977
3015
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
2978
3016
|
const y = date.getFullYear();
|
|
@@ -2982,8 +3020,8 @@ var formatDate = (date) => {
|
|
|
2982
3020
|
};
|
|
2983
3021
|
var InputDatePicker = (props) => {
|
|
2984
3022
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
2985
|
-
const [isOpen, setIsOpen] =
|
|
2986
|
-
const [tempDate, setTempDate] =
|
|
3023
|
+
const [isOpen, setIsOpen] = import_react12.default.useState(false);
|
|
3024
|
+
const [tempDate, setTempDate] = import_react12.default.useState(value ?? /* @__PURE__ */ new Date());
|
|
2987
3025
|
const handleOpen = () => {
|
|
2988
3026
|
if (disabled) return;
|
|
2989
3027
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -2999,19 +3037,19 @@ var InputDatePicker = (props) => {
|
|
|
2999
3037
|
const handleClose = () => {
|
|
3000
3038
|
setIsOpen(false);
|
|
3001
3039
|
};
|
|
3002
|
-
return /* @__PURE__ */ (0,
|
|
3003
|
-
/* @__PURE__ */ (0,
|
|
3040
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
3041
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3004
3042
|
Input_default,
|
|
3005
3043
|
{
|
|
3006
3044
|
value: formatDate(value),
|
|
3007
3045
|
placeholder,
|
|
3008
|
-
suffix: /* @__PURE__ */ (0,
|
|
3046
|
+
suffix: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(CalenderIcon_default, {}),
|
|
3009
3047
|
disabled,
|
|
3010
3048
|
readOnly: true
|
|
3011
3049
|
}
|
|
3012
3050
|
) }),
|
|
3013
|
-
/* @__PURE__ */ (0,
|
|
3014
|
-
/* @__PURE__ */ (0,
|
|
3051
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "lib-xplat-popup-datepicker-card", children: [
|
|
3052
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
3015
3053
|
SingleDatePicker_default,
|
|
3016
3054
|
{
|
|
3017
3055
|
value: tempDate,
|
|
@@ -3021,9 +3059,9 @@ var InputDatePicker = (props) => {
|
|
|
3021
3059
|
locale
|
|
3022
3060
|
}
|
|
3023
3061
|
) }),
|
|
3024
|
-
/* @__PURE__ */ (0,
|
|
3025
|
-
/* @__PURE__ */ (0,
|
|
3026
|
-
/* @__PURE__ */ (0,
|
|
3062
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
3063
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
3064
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
3027
3065
|
] })
|
|
3028
3066
|
] }) })
|
|
3029
3067
|
] });
|
|
@@ -3032,20 +3070,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
3032
3070
|
var InputDatePicker_default = InputDatePicker;
|
|
3033
3071
|
|
|
3034
3072
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
3035
|
-
var
|
|
3073
|
+
var import_react16 = __toESM(require("react"), 1);
|
|
3036
3074
|
|
|
3037
3075
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
3038
|
-
var
|
|
3076
|
+
var import_react15 = __toESM(require("react"), 1);
|
|
3039
3077
|
|
|
3040
3078
|
// src/components/Tab/Tab.tsx
|
|
3041
|
-
var
|
|
3079
|
+
var import_react14 = __toESM(require("react"), 1);
|
|
3042
3080
|
|
|
3043
3081
|
// src/components/Tab/TabItem.tsx
|
|
3044
|
-
var
|
|
3045
|
-
var
|
|
3046
|
-
var TabItem =
|
|
3082
|
+
var import_react13 = __toESM(require("react"), 1);
|
|
3083
|
+
var import_jsx_runtime315 = require("react/jsx-runtime");
|
|
3084
|
+
var TabItem = import_react13.default.forwardRef((props, ref) => {
|
|
3047
3085
|
const { isActive, title, onClick } = props;
|
|
3048
|
-
return /* @__PURE__ */ (0,
|
|
3086
|
+
return /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
3049
3087
|
"div",
|
|
3050
3088
|
{
|
|
3051
3089
|
ref,
|
|
@@ -3059,25 +3097,25 @@ TabItem.displayName = "TabItem";
|
|
|
3059
3097
|
var TabItem_default = TabItem;
|
|
3060
3098
|
|
|
3061
3099
|
// src/components/Tab/Tab.tsx
|
|
3062
|
-
var
|
|
3100
|
+
var import_jsx_runtime316 = require("react/jsx-runtime");
|
|
3063
3101
|
var Tab = (props) => {
|
|
3064
3102
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
3065
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
3103
|
+
const [underlineStyle, setUnderlineStyle] = import_react14.default.useState({
|
|
3066
3104
|
left: 0,
|
|
3067
3105
|
width: 0
|
|
3068
3106
|
});
|
|
3069
|
-
const itemRefs =
|
|
3107
|
+
const itemRefs = import_react14.default.useRef([]);
|
|
3070
3108
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
3071
3109
|
onChange(tabItem, tabIdx);
|
|
3072
3110
|
};
|
|
3073
|
-
|
|
3111
|
+
import_react14.default.useEffect(() => {
|
|
3074
3112
|
const el = itemRefs.current[activeIndex];
|
|
3075
3113
|
if (el) {
|
|
3076
3114
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
3077
3115
|
}
|
|
3078
3116
|
}, [activeIndex, tabs.length]);
|
|
3079
|
-
return /* @__PURE__ */ (0,
|
|
3080
|
-
tabs.map((tab, idx) => /* @__PURE__ */ (0,
|
|
3117
|
+
return /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
3118
|
+
tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
3081
3119
|
TabItem_default,
|
|
3082
3120
|
{
|
|
3083
3121
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -3089,7 +3127,7 @@ var Tab = (props) => {
|
|
|
3089
3127
|
},
|
|
3090
3128
|
`${tab.value}_${idx}`
|
|
3091
3129
|
)),
|
|
3092
|
-
type === "toggle" && /* @__PURE__ */ (0,
|
|
3130
|
+
type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
3093
3131
|
"div",
|
|
3094
3132
|
{
|
|
3095
3133
|
className: "tab-toggle-underline",
|
|
@@ -3105,7 +3143,7 @@ Tab.displayName = "Tab";
|
|
|
3105
3143
|
var Tab_default = Tab;
|
|
3106
3144
|
|
|
3107
3145
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
3108
|
-
var
|
|
3146
|
+
var import_jsx_runtime317 = require("react/jsx-runtime");
|
|
3109
3147
|
var RangePicker = (props) => {
|
|
3110
3148
|
const {
|
|
3111
3149
|
startDate,
|
|
@@ -3115,7 +3153,7 @@ var RangePicker = (props) => {
|
|
|
3115
3153
|
maxDate,
|
|
3116
3154
|
locale = "ko"
|
|
3117
3155
|
} = props;
|
|
3118
|
-
const [activeTab, setActiveTab] =
|
|
3156
|
+
const [activeTab, setActiveTab] = import_react15.default.useState("start");
|
|
3119
3157
|
const handleStartChange = (date) => {
|
|
3120
3158
|
if (!date) return;
|
|
3121
3159
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -3128,8 +3166,8 @@ var RangePicker = (props) => {
|
|
|
3128
3166
|
};
|
|
3129
3167
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
3130
3168
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
3131
|
-
return /* @__PURE__ */ (0,
|
|
3132
|
-
/* @__PURE__ */ (0,
|
|
3169
|
+
return /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
3170
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
3133
3171
|
Tab_default,
|
|
3134
3172
|
{
|
|
3135
3173
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -3142,8 +3180,8 @@ var RangePicker = (props) => {
|
|
|
3142
3180
|
size: "sm"
|
|
3143
3181
|
}
|
|
3144
3182
|
) }),
|
|
3145
|
-
/* @__PURE__ */ (0,
|
|
3146
|
-
/* @__PURE__ */ (0,
|
|
3183
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "datepicker-range-panels", children: [
|
|
3184
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
3147
3185
|
SingleDatePicker_default,
|
|
3148
3186
|
{
|
|
3149
3187
|
value: startDate,
|
|
@@ -3155,7 +3193,7 @@ var RangePicker = (props) => {
|
|
|
3155
3193
|
locale
|
|
3156
3194
|
}
|
|
3157
3195
|
),
|
|
3158
|
-
/* @__PURE__ */ (0,
|
|
3196
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
3159
3197
|
SingleDatePicker_default,
|
|
3160
3198
|
{
|
|
3161
3199
|
value: endDate,
|
|
@@ -3168,7 +3206,7 @@ var RangePicker = (props) => {
|
|
|
3168
3206
|
}
|
|
3169
3207
|
)
|
|
3170
3208
|
] }),
|
|
3171
|
-
/* @__PURE__ */ (0,
|
|
3209
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
3172
3210
|
SingleDatePicker_default,
|
|
3173
3211
|
{
|
|
3174
3212
|
value: startDate,
|
|
@@ -3179,7 +3217,7 @@ var RangePicker = (props) => {
|
|
|
3179
3217
|
rangeEnd: endDate,
|
|
3180
3218
|
locale
|
|
3181
3219
|
}
|
|
3182
|
-
) : /* @__PURE__ */ (0,
|
|
3220
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
3183
3221
|
SingleDatePicker_default,
|
|
3184
3222
|
{
|
|
3185
3223
|
value: endDate,
|
|
@@ -3197,10 +3235,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
3197
3235
|
var RangePicker_default = RangePicker;
|
|
3198
3236
|
|
|
3199
3237
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
3200
|
-
var
|
|
3238
|
+
var import_jsx_runtime318 = require("react/jsx-runtime");
|
|
3201
3239
|
var PopupPicker = (props) => {
|
|
3202
3240
|
const { component, type, locale } = props;
|
|
3203
|
-
const [isOpen, setIsOpen] =
|
|
3241
|
+
const [isOpen, setIsOpen] = import_react16.default.useState(false);
|
|
3204
3242
|
const handleClick = () => setIsOpen(true);
|
|
3205
3243
|
const handleClose = () => setIsOpen(false);
|
|
3206
3244
|
const handleSingleChange = (date) => {
|
|
@@ -3208,11 +3246,11 @@ var PopupPicker = (props) => {
|
|
|
3208
3246
|
props.onChange?.(date);
|
|
3209
3247
|
handleClose();
|
|
3210
3248
|
};
|
|
3211
|
-
return /* @__PURE__ */ (0,
|
|
3212
|
-
|
|
3213
|
-
/* @__PURE__ */ (0,
|
|
3214
|
-
/* @__PURE__ */ (0,
|
|
3215
|
-
type === "single" && /* @__PURE__ */ (0,
|
|
3249
|
+
return /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
3250
|
+
import_react16.default.cloneElement(component, { onClick: handleClick }),
|
|
3251
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
|
|
3252
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "popup-datepicker-content", children: [
|
|
3253
|
+
type === "single" && /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3216
3254
|
SingleDatePicker_default,
|
|
3217
3255
|
{
|
|
3218
3256
|
value: props.value,
|
|
@@ -3222,7 +3260,7 @@ var PopupPicker = (props) => {
|
|
|
3222
3260
|
locale
|
|
3223
3261
|
}
|
|
3224
3262
|
),
|
|
3225
|
-
type === "range" && /* @__PURE__ */ (0,
|
|
3263
|
+
type === "range" && /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3226
3264
|
RangePicker_default,
|
|
3227
3265
|
{
|
|
3228
3266
|
startDate: props.startDate,
|
|
@@ -3234,8 +3272,8 @@ var PopupPicker = (props) => {
|
|
|
3234
3272
|
}
|
|
3235
3273
|
)
|
|
3236
3274
|
] }),
|
|
3237
|
-
/* @__PURE__ */ (0,
|
|
3238
|
-
/* @__PURE__ */ (0,
|
|
3275
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
3276
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
3239
3277
|
Button_default,
|
|
3240
3278
|
{
|
|
3241
3279
|
type: "secondary",
|
|
@@ -3243,7 +3281,7 @@ var PopupPicker = (props) => {
|
|
|
3243
3281
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
3244
3282
|
}
|
|
3245
3283
|
),
|
|
3246
|
-
/* @__PURE__ */ (0,
|
|
3284
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
3247
3285
|
] })
|
|
3248
3286
|
] }) })
|
|
3249
3287
|
] });
|
|
@@ -3252,10 +3290,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
3252
3290
|
var PopupPicker_default = PopupPicker;
|
|
3253
3291
|
|
|
3254
3292
|
// src/components/Divider/Divider.tsx
|
|
3255
|
-
var
|
|
3293
|
+
var import_jsx_runtime319 = require("react/jsx-runtime");
|
|
3256
3294
|
var Divider = (props) => {
|
|
3257
3295
|
const { orientation = "horizontal" } = props;
|
|
3258
|
-
return /* @__PURE__ */ (0,
|
|
3296
|
+
return /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
3259
3297
|
"div",
|
|
3260
3298
|
{
|
|
3261
3299
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -3268,15 +3306,15 @@ Divider.displayName = "Divider";
|
|
|
3268
3306
|
var Divider_default = Divider;
|
|
3269
3307
|
|
|
3270
3308
|
// src/components/Drawer/Drawer.tsx
|
|
3271
|
-
var
|
|
3272
|
-
var
|
|
3273
|
-
var
|
|
3309
|
+
var import_react17 = __toESM(require("react"), 1);
|
|
3310
|
+
var import_react_dom3 = require("react-dom");
|
|
3311
|
+
var import_jsx_runtime320 = require("react/jsx-runtime");
|
|
3274
3312
|
var ANIMATION_DURATION_MS2 = 250;
|
|
3275
3313
|
var Drawer = (props) => {
|
|
3276
3314
|
const { isOpen, onClose, placement = "right", width = 320, title, children } = props;
|
|
3277
|
-
const [mounted, setMounted] =
|
|
3278
|
-
const [visible, setVisible] =
|
|
3279
|
-
|
|
3315
|
+
const [mounted, setMounted] = import_react17.default.useState(false);
|
|
3316
|
+
const [visible, setVisible] = import_react17.default.useState(false);
|
|
3317
|
+
import_react17.default.useEffect(() => {
|
|
3280
3318
|
if (isOpen) {
|
|
3281
3319
|
setMounted(true);
|
|
3282
3320
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3290,13 +3328,13 @@ var Drawer = (props) => {
|
|
|
3290
3328
|
if (!mounted) return null;
|
|
3291
3329
|
const stateClass = visible ? "enter" : "exit";
|
|
3292
3330
|
const widthValue = typeof width === "number" ? `${width}px` : width;
|
|
3293
|
-
return (0,
|
|
3294
|
-
/* @__PURE__ */ (0,
|
|
3331
|
+
return (0, import_react_dom3.createPortal)(
|
|
3332
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
3295
3333
|
"div",
|
|
3296
3334
|
{
|
|
3297
3335
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
3298
3336
|
onClick: onClose,
|
|
3299
|
-
children: /* @__PURE__ */ (0,
|
|
3337
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)(
|
|
3300
3338
|
"div",
|
|
3301
3339
|
{
|
|
3302
3340
|
className: clsx_default("lib-xplat-drawer", placement, stateClass),
|
|
@@ -3305,11 +3343,11 @@ var Drawer = (props) => {
|
|
|
3305
3343
|
"aria-modal": "true",
|
|
3306
3344
|
onClick: (e) => e.stopPropagation(),
|
|
3307
3345
|
children: [
|
|
3308
|
-
title && /* @__PURE__ */ (0,
|
|
3309
|
-
/* @__PURE__ */ (0,
|
|
3310
|
-
/* @__PURE__ */ (0,
|
|
3346
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "drawer-header", children: [
|
|
3347
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)("span", { className: "drawer-title", children: title }),
|
|
3348
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
3311
3349
|
] }),
|
|
3312
|
-
/* @__PURE__ */ (0,
|
|
3350
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)("div", { className: "drawer-body", children })
|
|
3313
3351
|
]
|
|
3314
3352
|
}
|
|
3315
3353
|
)
|
|
@@ -3322,16 +3360,16 @@ Drawer.displayName = "Drawer";
|
|
|
3322
3360
|
var Drawer_default = Drawer;
|
|
3323
3361
|
|
|
3324
3362
|
// src/components/Dropdown/Dropdown.tsx
|
|
3325
|
-
var
|
|
3363
|
+
var import_react20 = __toESM(require("react"), 1);
|
|
3326
3364
|
|
|
3327
3365
|
// src/tokens/hooks/useAutoPosition.ts
|
|
3328
|
-
var
|
|
3366
|
+
var import_react18 = __toESM(require("react"), 1);
|
|
3329
3367
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
3330
|
-
const [position, setPosition] =
|
|
3368
|
+
const [position, setPosition] = import_react18.default.useState({
|
|
3331
3369
|
position: {},
|
|
3332
3370
|
direction: "bottom"
|
|
3333
3371
|
});
|
|
3334
|
-
const calculatePosition =
|
|
3372
|
+
const calculatePosition = import_react18.default.useCallback(() => {
|
|
3335
3373
|
if (!triggerRef.current || !popRef.current) return;
|
|
3336
3374
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
3337
3375
|
const popRect = popRef.current.getBoundingClientRect();
|
|
@@ -3355,9 +3393,12 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3355
3393
|
direction
|
|
3356
3394
|
});
|
|
3357
3395
|
}, [triggerRef, popRef]);
|
|
3358
|
-
|
|
3396
|
+
import_react18.default.useLayoutEffect(() => {
|
|
3359
3397
|
if (!enabled) return;
|
|
3360
3398
|
calculatePosition();
|
|
3399
|
+
}, [calculatePosition, enabled]);
|
|
3400
|
+
import_react18.default.useEffect(() => {
|
|
3401
|
+
if (!enabled) return;
|
|
3361
3402
|
window.addEventListener("resize", calculatePosition);
|
|
3362
3403
|
window.addEventListener("scroll", calculatePosition, true);
|
|
3363
3404
|
return () => {
|
|
@@ -3370,9 +3411,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
3370
3411
|
var useAutoPosition_default = useAutoPosition;
|
|
3371
3412
|
|
|
3372
3413
|
// src/tokens/hooks/useClickOutside.ts
|
|
3373
|
-
var
|
|
3414
|
+
var import_react19 = __toESM(require("react"), 1);
|
|
3374
3415
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
3375
|
-
|
|
3416
|
+
import_react19.default.useEffect(() => {
|
|
3376
3417
|
if (!enabled) return;
|
|
3377
3418
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
3378
3419
|
const listener = (event) => {
|
|
@@ -3395,17 +3436,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
3395
3436
|
var useClickOutside_default = useClickOutside;
|
|
3396
3437
|
|
|
3397
3438
|
// src/components/Dropdown/Dropdown.tsx
|
|
3398
|
-
var
|
|
3439
|
+
var import_jsx_runtime321 = require("react/jsx-runtime");
|
|
3399
3440
|
var Dropdown = (props) => {
|
|
3400
3441
|
const { items, children } = props;
|
|
3401
|
-
const [isOpen, setIsOpen] =
|
|
3402
|
-
const [mounted, setMounted] =
|
|
3403
|
-
const [visible, setVisible] =
|
|
3404
|
-
const triggerRef =
|
|
3405
|
-
const menuRef =
|
|
3406
|
-
const { position, direction } = useAutoPosition_default(triggerRef, menuRef,
|
|
3407
|
-
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false));
|
|
3408
|
-
|
|
3442
|
+
const [isOpen, setIsOpen] = import_react20.default.useState(false);
|
|
3443
|
+
const [mounted, setMounted] = import_react20.default.useState(false);
|
|
3444
|
+
const [visible, setVisible] = import_react20.default.useState(false);
|
|
3445
|
+
const triggerRef = import_react20.default.useRef(null);
|
|
3446
|
+
const menuRef = import_react20.default.useRef(null);
|
|
3447
|
+
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
3448
|
+
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
3449
|
+
import_react20.default.useEffect(() => {
|
|
3409
3450
|
if (isOpen) {
|
|
3410
3451
|
setMounted(true);
|
|
3411
3452
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -3420,8 +3461,8 @@ var Dropdown = (props) => {
|
|
|
3420
3461
|
item.onClick?.();
|
|
3421
3462
|
setIsOpen(false);
|
|
3422
3463
|
};
|
|
3423
|
-
return /* @__PURE__ */ (0,
|
|
3424
|
-
/* @__PURE__ */ (0,
|
|
3464
|
+
return /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "lib-xplat-dropdown", children: [
|
|
3465
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
3425
3466
|
"div",
|
|
3426
3467
|
{
|
|
3427
3468
|
ref: triggerRef,
|
|
@@ -3430,14 +3471,14 @@ var Dropdown = (props) => {
|
|
|
3430
3471
|
children
|
|
3431
3472
|
}
|
|
3432
3473
|
),
|
|
3433
|
-
mounted && /* @__PURE__ */ (0,
|
|
3474
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
3434
3475
|
"div",
|
|
3435
3476
|
{
|
|
3436
3477
|
ref: menuRef,
|
|
3437
|
-
className: clsx_default("dropdown-menu", direction, { visible }),
|
|
3478
|
+
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
3438
3479
|
style: { top: position.top, left: position.left },
|
|
3439
3480
|
role: "menu",
|
|
3440
|
-
children: items.map((item) => /* @__PURE__ */ (0,
|
|
3481
|
+
children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
3441
3482
|
"button",
|
|
3442
3483
|
{
|
|
3443
3484
|
className: clsx_default("dropdown-item", {
|
|
@@ -3452,30 +3493,30 @@ var Dropdown = (props) => {
|
|
|
3452
3493
|
item.key
|
|
3453
3494
|
))
|
|
3454
3495
|
}
|
|
3455
|
-
)
|
|
3496
|
+
) })
|
|
3456
3497
|
] });
|
|
3457
3498
|
};
|
|
3458
3499
|
Dropdown.displayName = "Dropdown";
|
|
3459
3500
|
var Dropdown_default = Dropdown;
|
|
3460
3501
|
|
|
3461
3502
|
// src/components/EmptyState/EmptyState.tsx
|
|
3462
|
-
var
|
|
3503
|
+
var import_jsx_runtime322 = require("react/jsx-runtime");
|
|
3463
3504
|
var EmptyState = (props) => {
|
|
3464
3505
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
3465
|
-
return /* @__PURE__ */ (0,
|
|
3466
|
-
icon && /* @__PURE__ */ (0,
|
|
3467
|
-
!icon && /* @__PURE__ */ (0,
|
|
3468
|
-
/* @__PURE__ */ (0,
|
|
3469
|
-
description && /* @__PURE__ */ (0,
|
|
3470
|
-
action && /* @__PURE__ */ (0,
|
|
3506
|
+
return /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)("div", { className: "lib-xplat-empty-state", children: [
|
|
3507
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "empty-icon", children: icon }),
|
|
3508
|
+
!icon && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "empty-icon", children: /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("path", { d: "M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" }) }) }),
|
|
3509
|
+
/* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "empty-title", children: title }),
|
|
3510
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "empty-description", children: description }),
|
|
3511
|
+
action && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "empty-action", children: action })
|
|
3471
3512
|
] });
|
|
3472
3513
|
};
|
|
3473
3514
|
EmptyState.displayName = "EmptyState";
|
|
3474
3515
|
var EmptyState_default = EmptyState;
|
|
3475
3516
|
|
|
3476
3517
|
// src/components/FileUpload/FileUpload.tsx
|
|
3477
|
-
var
|
|
3478
|
-
var
|
|
3518
|
+
var import_react21 = __toESM(require("react"), 1);
|
|
3519
|
+
var import_jsx_runtime323 = require("react/jsx-runtime");
|
|
3479
3520
|
var FileUpload = (props) => {
|
|
3480
3521
|
const {
|
|
3481
3522
|
accept,
|
|
@@ -3485,8 +3526,8 @@ var FileUpload = (props) => {
|
|
|
3485
3526
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
3486
3527
|
description
|
|
3487
3528
|
} = props;
|
|
3488
|
-
const [isDragOver, setIsDragOver] =
|
|
3489
|
-
const inputRef =
|
|
3529
|
+
const [isDragOver, setIsDragOver] = import_react21.default.useState(false);
|
|
3530
|
+
const inputRef = import_react21.default.useRef(null);
|
|
3490
3531
|
const handleFiles = (fileList) => {
|
|
3491
3532
|
let files = Array.from(fileList);
|
|
3492
3533
|
if (maxSize) {
|
|
@@ -3516,7 +3557,7 @@ var FileUpload = (props) => {
|
|
|
3516
3557
|
handleFiles(e.target.files);
|
|
3517
3558
|
}
|
|
3518
3559
|
};
|
|
3519
|
-
return /* @__PURE__ */ (0,
|
|
3560
|
+
return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)(
|
|
3520
3561
|
"div",
|
|
3521
3562
|
{
|
|
3522
3563
|
className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
|
|
@@ -3525,7 +3566,7 @@ var FileUpload = (props) => {
|
|
|
3525
3566
|
onDragLeave: handleDragLeave,
|
|
3526
3567
|
onClick: () => inputRef.current?.click(),
|
|
3527
3568
|
children: [
|
|
3528
|
-
/* @__PURE__ */ (0,
|
|
3569
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
3529
3570
|
"input",
|
|
3530
3571
|
{
|
|
3531
3572
|
ref: inputRef,
|
|
@@ -3535,9 +3576,9 @@ var FileUpload = (props) => {
|
|
|
3535
3576
|
onChange: handleChange
|
|
3536
3577
|
}
|
|
3537
3578
|
),
|
|
3538
|
-
/* @__PURE__ */ (0,
|
|
3539
|
-
/* @__PURE__ */ (0,
|
|
3540
|
-
description && /* @__PURE__ */ (0,
|
|
3579
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(UploadIcon_default, {}) }),
|
|
3580
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)("p", { className: "upload-label", children: label }),
|
|
3581
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("p", { className: "upload-description", children: description })
|
|
3541
3582
|
]
|
|
3542
3583
|
}
|
|
3543
3584
|
);
|
|
@@ -3546,10 +3587,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
3546
3587
|
var FileUpload_default = FileUpload;
|
|
3547
3588
|
|
|
3548
3589
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
3549
|
-
var
|
|
3590
|
+
var import_react23 = __toESM(require("react"), 1);
|
|
3550
3591
|
|
|
3551
3592
|
// src/components/HtmlTypeWriter/utils.ts
|
|
3552
|
-
var
|
|
3593
|
+
var import_react22 = __toESM(require("react"), 1);
|
|
3553
3594
|
var voidTags = /* @__PURE__ */ new Set([
|
|
3554
3595
|
"br",
|
|
3555
3596
|
"img",
|
|
@@ -3617,41 +3658,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
3617
3658
|
props[attr.name] = attr.value;
|
|
3618
3659
|
});
|
|
3619
3660
|
if (voidTags.has(tag)) {
|
|
3620
|
-
return
|
|
3661
|
+
return import_react22.default.createElement(tag, props);
|
|
3621
3662
|
}
|
|
3622
3663
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
3623
|
-
return
|
|
3664
|
+
return import_react22.default.createElement(tag, props, ...children);
|
|
3624
3665
|
};
|
|
3625
3666
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
3626
3667
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
3627
3668
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
3628
|
-
return node == null ? null :
|
|
3669
|
+
return node == null ? null : import_react22.default.createElement(import_react22.default.Fragment, { key: idx }, node);
|
|
3629
3670
|
}).filter(Boolean);
|
|
3630
3671
|
return nodes.length === 0 ? null : nodes;
|
|
3631
3672
|
};
|
|
3632
3673
|
|
|
3633
3674
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
3634
|
-
var
|
|
3675
|
+
var import_jsx_runtime324 = require("react/jsx-runtime");
|
|
3635
3676
|
var HtmlTypeWriter = ({
|
|
3636
3677
|
html,
|
|
3637
3678
|
duration = 20,
|
|
3638
3679
|
onDone,
|
|
3639
3680
|
onChange
|
|
3640
3681
|
}) => {
|
|
3641
|
-
const [typedLen, setTypedLen] =
|
|
3642
|
-
const doneCalledRef =
|
|
3643
|
-
const { doc, rangeMap, totalLength } =
|
|
3682
|
+
const [typedLen, setTypedLen] = import_react23.default.useState(0);
|
|
3683
|
+
const doneCalledRef = import_react23.default.useRef(false);
|
|
3684
|
+
const { doc, rangeMap, totalLength } = import_react23.default.useMemo(() => {
|
|
3644
3685
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
3645
3686
|
const decoded = decodeHtmlEntities(html);
|
|
3646
3687
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
3647
3688
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
3648
3689
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
3649
3690
|
}, [html]);
|
|
3650
|
-
|
|
3691
|
+
import_react23.default.useEffect(() => {
|
|
3651
3692
|
setTypedLen(0);
|
|
3652
3693
|
doneCalledRef.current = false;
|
|
3653
3694
|
}, [html]);
|
|
3654
|
-
|
|
3695
|
+
import_react23.default.useEffect(() => {
|
|
3655
3696
|
if (!totalLength) return;
|
|
3656
3697
|
if (typedLen >= totalLength) return;
|
|
3657
3698
|
const timer = window.setInterval(() => {
|
|
@@ -3659,33 +3700,33 @@ var HtmlTypeWriter = ({
|
|
|
3659
3700
|
}, duration);
|
|
3660
3701
|
return () => window.clearInterval(timer);
|
|
3661
3702
|
}, [typedLen, totalLength, duration]);
|
|
3662
|
-
|
|
3703
|
+
import_react23.default.useEffect(() => {
|
|
3663
3704
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
3664
3705
|
onChange?.();
|
|
3665
3706
|
}
|
|
3666
3707
|
}, [typedLen, totalLength, onChange]);
|
|
3667
|
-
|
|
3708
|
+
import_react23.default.useEffect(() => {
|
|
3668
3709
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
3669
3710
|
doneCalledRef.current = true;
|
|
3670
3711
|
onDone?.();
|
|
3671
3712
|
}
|
|
3672
3713
|
}, [typedLen, totalLength, onDone]);
|
|
3673
|
-
const parsed =
|
|
3714
|
+
const parsed = import_react23.default.useMemo(
|
|
3674
3715
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
3675
3716
|
[doc, typedLen, rangeMap]
|
|
3676
3717
|
);
|
|
3677
|
-
return /* @__PURE__ */ (0,
|
|
3718
|
+
return /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
3678
3719
|
};
|
|
3679
3720
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
3680
3721
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
3681
3722
|
|
|
3682
3723
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
3683
|
-
var
|
|
3684
|
-
var
|
|
3724
|
+
var import_react24 = __toESM(require("react"), 1);
|
|
3725
|
+
var import_jsx_runtime325 = require("react/jsx-runtime");
|
|
3685
3726
|
var ImageSelector = (props) => {
|
|
3686
3727
|
const { value, label, onChange } = props;
|
|
3687
|
-
const [previewUrl, setPreviewUrl] =
|
|
3688
|
-
|
|
3728
|
+
const [previewUrl, setPreviewUrl] = import_react24.default.useState();
|
|
3729
|
+
import_react24.default.useEffect(() => {
|
|
3689
3730
|
if (!value) {
|
|
3690
3731
|
setPreviewUrl(void 0);
|
|
3691
3732
|
return;
|
|
@@ -3694,7 +3735,7 @@ var ImageSelector = (props) => {
|
|
|
3694
3735
|
setPreviewUrl(url);
|
|
3695
3736
|
return () => URL.revokeObjectURL(url);
|
|
3696
3737
|
}, [value]);
|
|
3697
|
-
const inputRef =
|
|
3738
|
+
const inputRef = import_react24.default.useRef(null);
|
|
3698
3739
|
const handleFileChange = (e) => {
|
|
3699
3740
|
const selectedFile = e.target.files?.[0];
|
|
3700
3741
|
if (selectedFile) {
|
|
@@ -3707,8 +3748,8 @@ var ImageSelector = (props) => {
|
|
|
3707
3748
|
const handleOpenFileDialog = () => {
|
|
3708
3749
|
inputRef.current?.click();
|
|
3709
3750
|
};
|
|
3710
|
-
return /* @__PURE__ */ (0,
|
|
3711
|
-
/* @__PURE__ */ (0,
|
|
3751
|
+
return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
3752
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
3712
3753
|
"input",
|
|
3713
3754
|
{
|
|
3714
3755
|
type: "file",
|
|
@@ -3718,13 +3759,13 @@ var ImageSelector = (props) => {
|
|
|
3718
3759
|
ref: inputRef
|
|
3719
3760
|
}
|
|
3720
3761
|
),
|
|
3721
|
-
value && /* @__PURE__ */ (0,
|
|
3722
|
-
/* @__PURE__ */ (0,
|
|
3723
|
-
/* @__PURE__ */ (0,
|
|
3762
|
+
value && /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: "action-bar", children: [
|
|
3763
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(UploadIcon_default, {}) }),
|
|
3764
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(DeleteIcon_default, {}) })
|
|
3724
3765
|
] }),
|
|
3725
|
-
/* @__PURE__ */ (0,
|
|
3726
|
-
/* @__PURE__ */ (0,
|
|
3727
|
-
/* @__PURE__ */ (0,
|
|
3766
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "content", children: previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
3767
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(ImageIcon_default, {}) }),
|
|
3768
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
3728
3769
|
] }) })
|
|
3729
3770
|
] });
|
|
3730
3771
|
};
|
|
@@ -3732,7 +3773,7 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
3732
3773
|
var ImageSelector_default = ImageSelector;
|
|
3733
3774
|
|
|
3734
3775
|
// src/components/Pagination/Pagination.tsx
|
|
3735
|
-
var
|
|
3776
|
+
var import_jsx_runtime326 = require("react/jsx-runtime");
|
|
3736
3777
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
3737
3778
|
const totalNumbers = siblingCount * 2 + 5;
|
|
3738
3779
|
if (totalPages <= totalNumbers) {
|
|
@@ -3775,19 +3816,19 @@ var Pagination = (props) => {
|
|
|
3775
3816
|
onChange?.(page);
|
|
3776
3817
|
}
|
|
3777
3818
|
};
|
|
3778
|
-
return /* @__PURE__ */ (0,
|
|
3779
|
-
/* @__PURE__ */ (0,
|
|
3819
|
+
return /* @__PURE__ */ (0, import_jsx_runtime326.jsxs)("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
3820
|
+
/* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
|
|
3780
3821
|
"button",
|
|
3781
3822
|
{
|
|
3782
3823
|
className: "page-btn prev",
|
|
3783
3824
|
disabled: current <= 1,
|
|
3784
3825
|
onClick: () => handleClick(current - 1),
|
|
3785
3826
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
3786
|
-
children: /* @__PURE__ */ (0,
|
|
3827
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(ChevronLeftIcon_default, {})
|
|
3787
3828
|
}
|
|
3788
3829
|
),
|
|
3789
3830
|
pages.map(
|
|
3790
|
-
(page, i) => page === "..." ? /* @__PURE__ */ (0,
|
|
3831
|
+
(page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
|
|
3791
3832
|
"button",
|
|
3792
3833
|
{
|
|
3793
3834
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -3798,14 +3839,14 @@ var Pagination = (props) => {
|
|
|
3798
3839
|
page
|
|
3799
3840
|
)
|
|
3800
3841
|
),
|
|
3801
|
-
/* @__PURE__ */ (0,
|
|
3842
|
+
/* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
|
|
3802
3843
|
"button",
|
|
3803
3844
|
{
|
|
3804
3845
|
className: "page-btn next",
|
|
3805
3846
|
disabled: current >= totalPages,
|
|
3806
3847
|
onClick: () => handleClick(current + 1),
|
|
3807
3848
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
3808
|
-
children: /* @__PURE__ */ (0,
|
|
3849
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(ChevronRightIcon_default, {})
|
|
3809
3850
|
}
|
|
3810
3851
|
)
|
|
3811
3852
|
] });
|
|
@@ -3814,17 +3855,17 @@ Pagination.displayName = "Pagination";
|
|
|
3814
3855
|
var Pagination_default = Pagination;
|
|
3815
3856
|
|
|
3816
3857
|
// src/components/PopOver/PopOver.tsx
|
|
3817
|
-
var
|
|
3818
|
-
var
|
|
3858
|
+
var import_react25 = __toESM(require("react"), 1);
|
|
3859
|
+
var import_jsx_runtime327 = require("react/jsx-runtime");
|
|
3819
3860
|
var PopOver = (props) => {
|
|
3820
3861
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
3821
|
-
const popRef =
|
|
3822
|
-
const triggerRef =
|
|
3823
|
-
const [localOpen, setLocalOpen] =
|
|
3824
|
-
const [eventTrigger, setEventTrigger] =
|
|
3862
|
+
const popRef = import_react25.default.useRef(null);
|
|
3863
|
+
const triggerRef = import_react25.default.useRef(null);
|
|
3864
|
+
const [localOpen, setLocalOpen] = import_react25.default.useState(false);
|
|
3865
|
+
const [eventTrigger, setEventTrigger] = import_react25.default.useState(false);
|
|
3825
3866
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
3826
3867
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
3827
|
-
|
|
3868
|
+
import_react25.default.useEffect(() => {
|
|
3828
3869
|
if (isOpen) {
|
|
3829
3870
|
setLocalOpen(isOpen);
|
|
3830
3871
|
setTimeout(() => {
|
|
@@ -3837,7 +3878,7 @@ var PopOver = (props) => {
|
|
|
3837
3878
|
}, 200);
|
|
3838
3879
|
}
|
|
3839
3880
|
}, [isOpen]);
|
|
3840
|
-
return /* @__PURE__ */ (0,
|
|
3881
|
+
return /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)(
|
|
3841
3882
|
"div",
|
|
3842
3883
|
{
|
|
3843
3884
|
className: "lib-xplat-pop-over",
|
|
@@ -3847,11 +3888,11 @@ var PopOver = (props) => {
|
|
|
3847
3888
|
},
|
|
3848
3889
|
children: [
|
|
3849
3890
|
children,
|
|
3850
|
-
localOpen && /* @__PURE__ */ (0,
|
|
3891
|
+
localOpen && /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
|
|
3851
3892
|
"div",
|
|
3852
3893
|
{
|
|
3853
3894
|
className: clsx_default(
|
|
3854
|
-
"content
|
|
3895
|
+
"lib-xplat-pop-over-content",
|
|
3855
3896
|
position.direction,
|
|
3856
3897
|
eventTrigger && "visible"
|
|
3857
3898
|
),
|
|
@@ -3861,7 +3902,7 @@ var PopOver = (props) => {
|
|
|
3861
3902
|
},
|
|
3862
3903
|
children: PopOverEl
|
|
3863
3904
|
}
|
|
3864
|
-
)
|
|
3905
|
+
) })
|
|
3865
3906
|
]
|
|
3866
3907
|
}
|
|
3867
3908
|
);
|
|
@@ -3870,7 +3911,7 @@ PopOver.displayName = "PopOver";
|
|
|
3870
3911
|
var PopOver_default = PopOver;
|
|
3871
3912
|
|
|
3872
3913
|
// src/components/Progress/Progress.tsx
|
|
3873
|
-
var
|
|
3914
|
+
var import_jsx_runtime328 = require("react/jsx-runtime");
|
|
3874
3915
|
var Progress = (props) => {
|
|
3875
3916
|
const {
|
|
3876
3917
|
value,
|
|
@@ -3880,8 +3921,8 @@ var Progress = (props) => {
|
|
|
3880
3921
|
showLabel = false
|
|
3881
3922
|
} = props;
|
|
3882
3923
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
3883
|
-
return /* @__PURE__ */ (0,
|
|
3884
|
-
/* @__PURE__ */ (0,
|
|
3924
|
+
return /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
3925
|
+
/* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
|
|
3885
3926
|
"div",
|
|
3886
3927
|
{
|
|
3887
3928
|
className: "track",
|
|
@@ -3889,7 +3930,7 @@ var Progress = (props) => {
|
|
|
3889
3930
|
"aria-valuenow": value,
|
|
3890
3931
|
"aria-valuemin": 0,
|
|
3891
3932
|
"aria-valuemax": max,
|
|
3892
|
-
children: /* @__PURE__ */ (0,
|
|
3933
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
|
|
3893
3934
|
"div",
|
|
3894
3935
|
{
|
|
3895
3936
|
className: "bar",
|
|
@@ -3898,7 +3939,7 @@ var Progress = (props) => {
|
|
|
3898
3939
|
)
|
|
3899
3940
|
}
|
|
3900
3941
|
),
|
|
3901
|
-
showLabel && /* @__PURE__ */ (0,
|
|
3942
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("span", { className: "label", children: [
|
|
3902
3943
|
Math.round(percentage),
|
|
3903
3944
|
"%"
|
|
3904
3945
|
] })
|
|
@@ -3908,17 +3949,17 @@ Progress.displayName = "Progress";
|
|
|
3908
3949
|
var Progress_default = Progress;
|
|
3909
3950
|
|
|
3910
3951
|
// src/components/Radio/RadioGroupContext.tsx
|
|
3911
|
-
var
|
|
3912
|
-
var RadioGroupContext =
|
|
3952
|
+
var import_react26 = __toESM(require("react"), 1);
|
|
3953
|
+
var RadioGroupContext = import_react26.default.createContext(
|
|
3913
3954
|
null
|
|
3914
3955
|
);
|
|
3915
3956
|
var useRadioGroupContext = () => {
|
|
3916
|
-
return
|
|
3957
|
+
return import_react26.default.useContext(RadioGroupContext);
|
|
3917
3958
|
};
|
|
3918
3959
|
var RadioGroupContext_default = RadioGroupContext;
|
|
3919
3960
|
|
|
3920
3961
|
// src/components/Radio/Radio.tsx
|
|
3921
|
-
var
|
|
3962
|
+
var import_jsx_runtime329 = require("react/jsx-runtime");
|
|
3922
3963
|
var Radio = (props) => {
|
|
3923
3964
|
const {
|
|
3924
3965
|
label,
|
|
@@ -3936,7 +3977,7 @@ var Radio = (props) => {
|
|
|
3936
3977
|
value,
|
|
3937
3978
|
onChange: rest.onChange
|
|
3938
3979
|
};
|
|
3939
|
-
return /* @__PURE__ */ (0,
|
|
3980
|
+
return /* @__PURE__ */ (0, import_jsx_runtime329.jsxs)(
|
|
3940
3981
|
"label",
|
|
3941
3982
|
{
|
|
3942
3983
|
className: clsx_default(
|
|
@@ -3946,18 +3987,18 @@ var Radio = (props) => {
|
|
|
3946
3987
|
localChecked ? "checked" : void 0
|
|
3947
3988
|
),
|
|
3948
3989
|
children: [
|
|
3949
|
-
/* @__PURE__ */ (0,
|
|
3950
|
-
/* @__PURE__ */ (0,
|
|
3990
|
+
/* @__PURE__ */ (0, import_jsx_runtime329.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
3991
|
+
/* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
|
|
3951
3992
|
"div",
|
|
3952
3993
|
{
|
|
3953
3994
|
className: clsx_default(
|
|
3954
3995
|
"circle",
|
|
3955
3996
|
localChecked ? "checked" : void 0
|
|
3956
3997
|
),
|
|
3957
|
-
children: localChecked && /* @__PURE__ */ (0,
|
|
3998
|
+
children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime329.jsx)("div", { className: "inner-circle" })
|
|
3958
3999
|
}
|
|
3959
4000
|
),
|
|
3960
|
-
label && /* @__PURE__ */ (0,
|
|
4001
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime329.jsx)("span", { children: label })
|
|
3961
4002
|
]
|
|
3962
4003
|
}
|
|
3963
4004
|
);
|
|
@@ -3966,28 +4007,28 @@ Radio.displayName = "Radio";
|
|
|
3966
4007
|
var Radio_default = Radio;
|
|
3967
4008
|
|
|
3968
4009
|
// src/components/Radio/RadioGroup.tsx
|
|
3969
|
-
var
|
|
4010
|
+
var import_jsx_runtime330 = require("react/jsx-runtime");
|
|
3970
4011
|
var RadioGroup = (props) => {
|
|
3971
4012
|
const { children, ...rest } = props;
|
|
3972
|
-
return /* @__PURE__ */ (0,
|
|
4013
|
+
return /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(import_jsx_runtime330.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
3973
4014
|
};
|
|
3974
4015
|
RadioGroup.displayName = "RadioGroup";
|
|
3975
4016
|
var RadioGroup_default = RadioGroup;
|
|
3976
4017
|
|
|
3977
4018
|
// src/components/Select/Select.tsx
|
|
3978
|
-
var
|
|
4019
|
+
var import_react29 = __toESM(require("react"), 1);
|
|
3979
4020
|
|
|
3980
4021
|
// src/components/Select/context.ts
|
|
3981
|
-
var
|
|
3982
|
-
var SelectContext =
|
|
4022
|
+
var import_react27 = __toESM(require("react"), 1);
|
|
4023
|
+
var SelectContext = import_react27.default.createContext(null);
|
|
3983
4024
|
var context_default = SelectContext;
|
|
3984
4025
|
|
|
3985
4026
|
// src/components/Select/SelectItem.tsx
|
|
3986
|
-
var
|
|
3987
|
-
var
|
|
4027
|
+
var import_react28 = __toESM(require("react"), 1);
|
|
4028
|
+
var import_jsx_runtime331 = require("react/jsx-runtime");
|
|
3988
4029
|
var SelectItem = (props) => {
|
|
3989
4030
|
const { children, value, onClick, disabled = false } = props;
|
|
3990
|
-
const ctx =
|
|
4031
|
+
const ctx = import_react28.default.useContext(context_default);
|
|
3991
4032
|
const handleClick = (e) => {
|
|
3992
4033
|
e.preventDefault();
|
|
3993
4034
|
e.stopPropagation();
|
|
@@ -3996,7 +4037,7 @@ var SelectItem = (props) => {
|
|
|
3996
4037
|
ctx?.close();
|
|
3997
4038
|
onClick?.();
|
|
3998
4039
|
};
|
|
3999
|
-
return /* @__PURE__ */ (0,
|
|
4040
|
+
return /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
|
|
4000
4041
|
"div",
|
|
4001
4042
|
{
|
|
4002
4043
|
className: clsx_default("select-item", disabled && "disabled"),
|
|
@@ -4017,7 +4058,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
4017
4058
|
var SelectItem_default = SelectItem;
|
|
4018
4059
|
|
|
4019
4060
|
// src/components/Select/Select.tsx
|
|
4020
|
-
var
|
|
4061
|
+
var import_jsx_runtime332 = require("react/jsx-runtime");
|
|
4021
4062
|
var ANIMATION_DURATION_MS3 = 200;
|
|
4022
4063
|
var SelectRoot = (props) => {
|
|
4023
4064
|
const {
|
|
@@ -4029,26 +4070,26 @@ var SelectRoot = (props) => {
|
|
|
4029
4070
|
error = false,
|
|
4030
4071
|
size = "md"
|
|
4031
4072
|
} = props;
|
|
4032
|
-
const itemChildren =
|
|
4033
|
-
(child) =>
|
|
4073
|
+
const itemChildren = import_react29.default.Children.toArray(children).filter(
|
|
4074
|
+
(child) => import_react29.default.isValidElement(child) && child.type === SelectItem_default
|
|
4034
4075
|
);
|
|
4035
4076
|
const isControlled = valueProp !== void 0;
|
|
4036
|
-
const [isOpen, setOpen] =
|
|
4037
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
4038
|
-
const controlledLabel =
|
|
4077
|
+
const [isOpen, setOpen] = import_react29.default.useState(false);
|
|
4078
|
+
const [uncontrolledLabel, setUncontrolledLabel] = import_react29.default.useState(null);
|
|
4079
|
+
const controlledLabel = import_react29.default.useMemo(() => {
|
|
4039
4080
|
if (!isControlled) return null;
|
|
4040
4081
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
4041
4082
|
return match ? match.props.children : null;
|
|
4042
4083
|
}, [isControlled, valueProp, itemChildren]);
|
|
4043
4084
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
4044
|
-
const triggerRef =
|
|
4045
|
-
const contentRef =
|
|
4046
|
-
const [mounted, setMounted] =
|
|
4047
|
-
const [visible, setVisible] =
|
|
4048
|
-
|
|
4085
|
+
const triggerRef = import_react29.default.useRef(null);
|
|
4086
|
+
const contentRef = import_react29.default.useRef(null);
|
|
4087
|
+
const [mounted, setMounted] = import_react29.default.useState(false);
|
|
4088
|
+
const [visible, setVisible] = import_react29.default.useState(false);
|
|
4089
|
+
import_react29.default.useEffect(() => {
|
|
4049
4090
|
if (disabled && isOpen) setOpen(false);
|
|
4050
4091
|
}, [disabled, isOpen]);
|
|
4051
|
-
|
|
4092
|
+
import_react29.default.useEffect(() => {
|
|
4052
4093
|
if (isOpen) {
|
|
4053
4094
|
setMounted(true);
|
|
4054
4095
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -4058,12 +4099,12 @@ var SelectRoot = (props) => {
|
|
|
4058
4099
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
4059
4100
|
return () => clearTimeout(t);
|
|
4060
4101
|
}, [isOpen]);
|
|
4061
|
-
const open =
|
|
4062
|
-
const close =
|
|
4063
|
-
const toggle =
|
|
4102
|
+
const open = import_react29.default.useCallback(() => setOpen(true), []);
|
|
4103
|
+
const close = import_react29.default.useCallback(() => setOpen(false), []);
|
|
4104
|
+
const toggle = import_react29.default.useCallback(() => setOpen((prev) => !prev), []);
|
|
4064
4105
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
4065
4106
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
4066
|
-
const setSelected =
|
|
4107
|
+
const setSelected = import_react29.default.useCallback(
|
|
4067
4108
|
(label, itemValue) => {
|
|
4068
4109
|
if (!isControlled) {
|
|
4069
4110
|
setUncontrolledLabel(label);
|
|
@@ -4072,7 +4113,7 @@ var SelectRoot = (props) => {
|
|
|
4072
4113
|
},
|
|
4073
4114
|
[isControlled, onChange]
|
|
4074
4115
|
);
|
|
4075
|
-
const ctxValue =
|
|
4116
|
+
const ctxValue = import_react29.default.useMemo(
|
|
4076
4117
|
() => ({
|
|
4077
4118
|
isOpen,
|
|
4078
4119
|
mounted,
|
|
@@ -4093,7 +4134,7 @@ var SelectRoot = (props) => {
|
|
|
4093
4134
|
if (disabled) return;
|
|
4094
4135
|
toggle();
|
|
4095
4136
|
};
|
|
4096
|
-
return /* @__PURE__ */ (0,
|
|
4137
|
+
return /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime332.jsxs)(
|
|
4097
4138
|
"div",
|
|
4098
4139
|
{
|
|
4099
4140
|
className: clsx_default(
|
|
@@ -4104,7 +4145,7 @@ var SelectRoot = (props) => {
|
|
|
4104
4145
|
mounted && "is-open"
|
|
4105
4146
|
),
|
|
4106
4147
|
children: [
|
|
4107
|
-
/* @__PURE__ */ (0,
|
|
4148
|
+
/* @__PURE__ */ (0, import_jsx_runtime332.jsxs)(
|
|
4108
4149
|
"div",
|
|
4109
4150
|
{
|
|
4110
4151
|
ref: triggerRef,
|
|
@@ -4128,7 +4169,7 @@ var SelectRoot = (props) => {
|
|
|
4128
4169
|
}
|
|
4129
4170
|
},
|
|
4130
4171
|
children: [
|
|
4131
|
-
/* @__PURE__ */ (0,
|
|
4172
|
+
/* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
|
|
4132
4173
|
"span",
|
|
4133
4174
|
{
|
|
4134
4175
|
className: clsx_default(
|
|
@@ -4138,27 +4179,27 @@ var SelectRoot = (props) => {
|
|
|
4138
4179
|
children: selectedLabel ?? placeholder
|
|
4139
4180
|
}
|
|
4140
4181
|
),
|
|
4141
|
-
/* @__PURE__ */ (0,
|
|
4182
|
+
/* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
|
|
4142
4183
|
"span",
|
|
4143
4184
|
{
|
|
4144
4185
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
4145
4186
|
"aria-hidden": true,
|
|
4146
|
-
children: /* @__PURE__ */ (0,
|
|
4187
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(ChevronDownIcon_default, {})
|
|
4147
4188
|
}
|
|
4148
4189
|
)
|
|
4149
4190
|
]
|
|
4150
4191
|
}
|
|
4151
4192
|
),
|
|
4152
|
-
mounted && /* @__PURE__ */ (0,
|
|
4193
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
|
|
4153
4194
|
"div",
|
|
4154
4195
|
{
|
|
4155
|
-
className: clsx_default("select-content", position.direction, stateClass),
|
|
4196
|
+
className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
|
|
4156
4197
|
ref: contentRef,
|
|
4157
4198
|
style: { ...position.position, minWidth: position.position.width },
|
|
4158
4199
|
role: "listbox",
|
|
4159
|
-
children: itemChildren
|
|
4200
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
4160
4201
|
}
|
|
4161
|
-
)
|
|
4202
|
+
) })
|
|
4162
4203
|
]
|
|
4163
4204
|
}
|
|
4164
4205
|
) });
|
|
@@ -4170,14 +4211,14 @@ var Select = Object.assign(SelectRoot, {
|
|
|
4170
4211
|
var Select_default = Select;
|
|
4171
4212
|
|
|
4172
4213
|
// src/components/Skeleton/Skeleton.tsx
|
|
4173
|
-
var
|
|
4214
|
+
var import_jsx_runtime333 = require("react/jsx-runtime");
|
|
4174
4215
|
var Skeleton = (props) => {
|
|
4175
4216
|
const { variant = "text", width, height } = props;
|
|
4176
4217
|
const style = {
|
|
4177
4218
|
width: typeof width === "number" ? `${width}px` : width,
|
|
4178
4219
|
height: typeof height === "number" ? `${height}px` : height
|
|
4179
4220
|
};
|
|
4180
|
-
return /* @__PURE__ */ (0,
|
|
4221
|
+
return /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
|
|
4181
4222
|
"div",
|
|
4182
4223
|
{
|
|
4183
4224
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -4190,20 +4231,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
4190
4231
|
var Skeleton_default = Skeleton;
|
|
4191
4232
|
|
|
4192
4233
|
// src/components/Spinner/Spinner.tsx
|
|
4193
|
-
var
|
|
4234
|
+
var import_jsx_runtime334 = require("react/jsx-runtime");
|
|
4194
4235
|
var Spinner = (props) => {
|
|
4195
4236
|
const {
|
|
4196
4237
|
size = "md",
|
|
4197
4238
|
type = "brand"
|
|
4198
4239
|
} = props;
|
|
4199
|
-
return /* @__PURE__ */ (0,
|
|
4240
|
+
return /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
4200
4241
|
"div",
|
|
4201
4242
|
{
|
|
4202
4243
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
4203
4244
|
role: "status",
|
|
4204
4245
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
4205
|
-
children: /* @__PURE__ */ (0,
|
|
4206
|
-
/* @__PURE__ */ (0,
|
|
4246
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
4247
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
4207
4248
|
"circle",
|
|
4208
4249
|
{
|
|
4209
4250
|
className: "track",
|
|
@@ -4213,7 +4254,7 @@ var Spinner = (props) => {
|
|
|
4213
4254
|
strokeWidth: "3"
|
|
4214
4255
|
}
|
|
4215
4256
|
),
|
|
4216
|
-
/* @__PURE__ */ (0,
|
|
4257
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
4217
4258
|
"circle",
|
|
4218
4259
|
{
|
|
4219
4260
|
className: "indicator",
|
|
@@ -4232,20 +4273,20 @@ Spinner.displayName = "Spinner";
|
|
|
4232
4273
|
var Spinner_default = Spinner;
|
|
4233
4274
|
|
|
4234
4275
|
// src/components/Steps/Steps.tsx
|
|
4235
|
-
var
|
|
4276
|
+
var import_jsx_runtime335 = require("react/jsx-runtime");
|
|
4236
4277
|
var Steps = (props) => {
|
|
4237
4278
|
const {
|
|
4238
4279
|
items,
|
|
4239
4280
|
current,
|
|
4240
4281
|
type = "brand"
|
|
4241
4282
|
} = props;
|
|
4242
|
-
return /* @__PURE__ */ (0,
|
|
4283
|
+
return /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
4243
4284
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
4244
|
-
return /* @__PURE__ */ (0,
|
|
4245
|
-
/* @__PURE__ */ (0,
|
|
4246
|
-
/* @__PURE__ */ (0,
|
|
4247
|
-
/* @__PURE__ */ (0,
|
|
4248
|
-
item.description && /* @__PURE__ */ (0,
|
|
4285
|
+
return /* @__PURE__ */ (0, import_jsx_runtime335.jsxs)("div", { className: clsx_default("step-item", status), children: [
|
|
4286
|
+
/* @__PURE__ */ (0, import_jsx_runtime335.jsx)("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(CheckIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("span", { children: index + 1 }) }),
|
|
4287
|
+
/* @__PURE__ */ (0, import_jsx_runtime335.jsxs)("div", { className: "step-content", children: [
|
|
4288
|
+
/* @__PURE__ */ (0, import_jsx_runtime335.jsx)("span", { className: "step-title", children: item.title }),
|
|
4289
|
+
item.description && /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("span", { className: "step-description", children: item.description })
|
|
4249
4290
|
] })
|
|
4250
4291
|
] }, index);
|
|
4251
4292
|
}) });
|
|
@@ -4254,8 +4295,8 @@ Steps.displayName = "Steps";
|
|
|
4254
4295
|
var Steps_default = Steps;
|
|
4255
4296
|
|
|
4256
4297
|
// src/components/Swiper/Swiper.tsx
|
|
4257
|
-
var
|
|
4258
|
-
var
|
|
4298
|
+
var import_react30 = __toESM(require("react"), 1);
|
|
4299
|
+
var import_jsx_runtime336 = require("react/jsx-runtime");
|
|
4259
4300
|
var Swiper = (props) => {
|
|
4260
4301
|
const {
|
|
4261
4302
|
auto = false,
|
|
@@ -4278,23 +4319,23 @@ var Swiper = (props) => {
|
|
|
4278
4319
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
4279
4320
|
const useLoop = loop && canSlide;
|
|
4280
4321
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
4281
|
-
const extendedItems =
|
|
4322
|
+
const extendedItems = import_react30.default.useMemo(() => {
|
|
4282
4323
|
if (!useLoop) return items;
|
|
4283
4324
|
return [...items, ...items, ...items];
|
|
4284
4325
|
}, [items, useLoop]);
|
|
4285
4326
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
4286
|
-
const [innerIndex, setInnerIndex] =
|
|
4327
|
+
const [innerIndex, setInnerIndex] = import_react30.default.useState(
|
|
4287
4328
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
4288
4329
|
);
|
|
4289
|
-
const [isDragging, setIsDragging] =
|
|
4290
|
-
const [dragOffset, setDragOffset] =
|
|
4291
|
-
const [animated, setAnimated] =
|
|
4292
|
-
const [containerWidth, setContainerWidth] =
|
|
4293
|
-
const containerRef =
|
|
4294
|
-
const startXRef =
|
|
4295
|
-
const startTimeRef =
|
|
4296
|
-
const autoplayTimerRef =
|
|
4297
|
-
|
|
4330
|
+
const [isDragging, setIsDragging] = import_react30.default.useState(false);
|
|
4331
|
+
const [dragOffset, setDragOffset] = import_react30.default.useState(0);
|
|
4332
|
+
const [animated, setAnimated] = import_react30.default.useState(true);
|
|
4333
|
+
const [containerWidth, setContainerWidth] = import_react30.default.useState(0);
|
|
4334
|
+
const containerRef = import_react30.default.useRef(null);
|
|
4335
|
+
const startXRef = import_react30.default.useRef(0);
|
|
4336
|
+
const startTimeRef = import_react30.default.useRef(0);
|
|
4337
|
+
const autoplayTimerRef = import_react30.default.useRef(null);
|
|
4338
|
+
import_react30.default.useEffect(() => {
|
|
4298
4339
|
const el = containerRef.current;
|
|
4299
4340
|
if (!el) return;
|
|
4300
4341
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -4313,7 +4354,7 @@ var Swiper = (props) => {
|
|
|
4313
4354
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
4314
4355
|
};
|
|
4315
4356
|
const realIndex = getRealIndex(innerIndex);
|
|
4316
|
-
const moveToInner =
|
|
4357
|
+
const moveToInner = import_react30.default.useCallback(
|
|
4317
4358
|
(idx, withAnim = true) => {
|
|
4318
4359
|
if (!useLoop) {
|
|
4319
4360
|
setAnimated(withAnim);
|
|
@@ -4341,7 +4382,7 @@ var Swiper = (props) => {
|
|
|
4341
4382
|
},
|
|
4342
4383
|
[useLoop, cloneCount, totalSlides]
|
|
4343
4384
|
);
|
|
4344
|
-
const handleTransitionEnd =
|
|
4385
|
+
const handleTransitionEnd = import_react30.default.useCallback(() => {
|
|
4345
4386
|
if (!useLoop) return;
|
|
4346
4387
|
const real = getRealIndex(innerIndex);
|
|
4347
4388
|
const canonical = cloneCount + real;
|
|
@@ -4351,7 +4392,7 @@ var Swiper = (props) => {
|
|
|
4351
4392
|
}
|
|
4352
4393
|
onChange?.(Math.min(real, maxIndex));
|
|
4353
4394
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
4354
|
-
const slideTo =
|
|
4395
|
+
const slideTo = import_react30.default.useCallback(
|
|
4355
4396
|
(logicalIndex) => {
|
|
4356
4397
|
if (!canSlide) return;
|
|
4357
4398
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -4361,7 +4402,7 @@ var Swiper = (props) => {
|
|
|
4361
4402
|
},
|
|
4362
4403
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
4363
4404
|
);
|
|
4364
|
-
const slideNext =
|
|
4405
|
+
const slideNext = import_react30.default.useCallback(() => {
|
|
4365
4406
|
if (!canSlide) return;
|
|
4366
4407
|
const nextInner = innerIndex + slideBy;
|
|
4367
4408
|
if (useLoop) {
|
|
@@ -4370,7 +4411,7 @@ var Swiper = (props) => {
|
|
|
4370
4411
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
4371
4412
|
}
|
|
4372
4413
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
4373
|
-
const slidePrev =
|
|
4414
|
+
const slidePrev = import_react30.default.useCallback(() => {
|
|
4374
4415
|
if (!canSlide) return;
|
|
4375
4416
|
const prevInner = innerIndex - slideBy;
|
|
4376
4417
|
if (useLoop) {
|
|
@@ -4379,7 +4420,7 @@ var Swiper = (props) => {
|
|
|
4379
4420
|
moveToInner(Math.max(prevInner, 0), true);
|
|
4380
4421
|
}
|
|
4381
4422
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
4382
|
-
|
|
4423
|
+
import_react30.default.useEffect(() => {
|
|
4383
4424
|
if (indexProp === void 0) return;
|
|
4384
4425
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
4385
4426
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -4387,12 +4428,12 @@ var Swiper = (props) => {
|
|
|
4387
4428
|
moveToInner(target, true);
|
|
4388
4429
|
}
|
|
4389
4430
|
}, [indexProp]);
|
|
4390
|
-
|
|
4431
|
+
import_react30.default.useImperativeHandle(swiperRef, () => ({
|
|
4391
4432
|
slidePrev,
|
|
4392
4433
|
slideNext,
|
|
4393
4434
|
slideTo
|
|
4394
4435
|
}));
|
|
4395
|
-
|
|
4436
|
+
import_react30.default.useEffect(() => {
|
|
4396
4437
|
if (!auto || !canSlide) return;
|
|
4397
4438
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
4398
4439
|
return () => {
|
|
@@ -4415,7 +4456,7 @@ var Swiper = (props) => {
|
|
|
4415
4456
|
startXRef.current = getClientX(e);
|
|
4416
4457
|
startTimeRef.current = Date.now();
|
|
4417
4458
|
};
|
|
4418
|
-
|
|
4459
|
+
import_react30.default.useEffect(() => {
|
|
4419
4460
|
if (!isDragging) return;
|
|
4420
4461
|
const handleMove = (e) => {
|
|
4421
4462
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -4453,8 +4494,8 @@ var Swiper = (props) => {
|
|
|
4453
4494
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
4454
4495
|
const slideWidthPercent = 100 / viewItemCount;
|
|
4455
4496
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
4456
|
-
const slideElements =
|
|
4457
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0,
|
|
4497
|
+
const slideElements = import_react30.default.useMemo(
|
|
4498
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
4458
4499
|
"div",
|
|
4459
4500
|
{
|
|
4460
4501
|
className: "lib-xplat-swiper__slide",
|
|
@@ -4473,14 +4514,14 @@ var Swiper = (props) => {
|
|
|
4473
4514
|
Math.floor(realIndex / slideBy),
|
|
4474
4515
|
totalSteps - 1
|
|
4475
4516
|
);
|
|
4476
|
-
return /* @__PURE__ */ (0,
|
|
4477
|
-
/* @__PURE__ */ (0,
|
|
4517
|
+
return /* @__PURE__ */ (0, import_jsx_runtime336.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
4518
|
+
/* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
4478
4519
|
"div",
|
|
4479
4520
|
{
|
|
4480
4521
|
className: "lib-xplat-swiper__viewport",
|
|
4481
4522
|
onMouseDown: handleDragStart,
|
|
4482
4523
|
onTouchStart: handleDragStart,
|
|
4483
|
-
children: /* @__PURE__ */ (0,
|
|
4524
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
4484
4525
|
"div",
|
|
4485
4526
|
{
|
|
4486
4527
|
className: clsx_default(
|
|
@@ -4498,7 +4539,7 @@ var Swiper = (props) => {
|
|
|
4498
4539
|
)
|
|
4499
4540
|
}
|
|
4500
4541
|
),
|
|
4501
|
-
showProgress && canSlide && /* @__PURE__ */ (0,
|
|
4542
|
+
showProgress && canSlide && /* @__PURE__ */ (0, import_jsx_runtime336.jsx)("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
4502
4543
|
"span",
|
|
4503
4544
|
{
|
|
4504
4545
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -4508,7 +4549,7 @@ var Swiper = (props) => {
|
|
|
4508
4549
|
}
|
|
4509
4550
|
}
|
|
4510
4551
|
) }) }),
|
|
4511
|
-
canSlide && /* @__PURE__ */ (0,
|
|
4552
|
+
canSlide && /* @__PURE__ */ (0, import_jsx_runtime336.jsx)("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
4512
4553
|
"button",
|
|
4513
4554
|
{
|
|
4514
4555
|
className: clsx_default(
|
|
@@ -4526,8 +4567,8 @@ Swiper.displayName = "Swiper";
|
|
|
4526
4567
|
var Swiper_default = Swiper;
|
|
4527
4568
|
|
|
4528
4569
|
// src/components/Switch/Switch.tsx
|
|
4529
|
-
var
|
|
4530
|
-
var
|
|
4570
|
+
var import_react31 = __toESM(require("react"), 1);
|
|
4571
|
+
var import_jsx_runtime337 = require("react/jsx-runtime");
|
|
4531
4572
|
var KNOB_TRANSITION_MS = 250;
|
|
4532
4573
|
var Switch = (props) => {
|
|
4533
4574
|
const {
|
|
@@ -4537,9 +4578,9 @@ var Switch = (props) => {
|
|
|
4537
4578
|
disabled,
|
|
4538
4579
|
onChange
|
|
4539
4580
|
} = props;
|
|
4540
|
-
const [isAnimating, setIsAnimating] =
|
|
4541
|
-
const timeoutRef =
|
|
4542
|
-
|
|
4581
|
+
const [isAnimating, setIsAnimating] = import_react31.default.useState(false);
|
|
4582
|
+
const timeoutRef = import_react31.default.useRef(null);
|
|
4583
|
+
import_react31.default.useEffect(() => {
|
|
4543
4584
|
return () => {
|
|
4544
4585
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
4545
4586
|
};
|
|
@@ -4554,7 +4595,7 @@ var Switch = (props) => {
|
|
|
4554
4595
|
timeoutRef.current = null;
|
|
4555
4596
|
}, KNOB_TRANSITION_MS);
|
|
4556
4597
|
};
|
|
4557
|
-
return /* @__PURE__ */ (0,
|
|
4598
|
+
return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
4558
4599
|
"div",
|
|
4559
4600
|
{
|
|
4560
4601
|
className: clsx_default(
|
|
@@ -4567,7 +4608,7 @@ var Switch = (props) => {
|
|
|
4567
4608
|
),
|
|
4568
4609
|
onClick: handleClick,
|
|
4569
4610
|
"aria-disabled": disabled || isAnimating,
|
|
4570
|
-
children: /* @__PURE__ */ (0,
|
|
4611
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
4571
4612
|
}
|
|
4572
4613
|
);
|
|
4573
4614
|
};
|
|
@@ -4575,17 +4616,17 @@ Switch.displayName = "Switch";
|
|
|
4575
4616
|
var Switch_default = Switch;
|
|
4576
4617
|
|
|
4577
4618
|
// src/components/Table/TableContext.tsx
|
|
4578
|
-
var
|
|
4579
|
-
var TableContext =
|
|
4619
|
+
var import_react32 = __toESM(require("react"), 1);
|
|
4620
|
+
var TableContext = import_react32.default.createContext(null);
|
|
4580
4621
|
var useTableContext = () => {
|
|
4581
|
-
const ctx =
|
|
4622
|
+
const ctx = import_react32.default.useContext(TableContext);
|
|
4582
4623
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
4583
4624
|
return ctx;
|
|
4584
4625
|
};
|
|
4585
4626
|
var TableContext_default = TableContext;
|
|
4586
4627
|
|
|
4587
4628
|
// src/components/Table/Table.tsx
|
|
4588
|
-
var
|
|
4629
|
+
var import_jsx_runtime338 = require("react/jsx-runtime");
|
|
4589
4630
|
var Table = (props) => {
|
|
4590
4631
|
const {
|
|
4591
4632
|
children,
|
|
@@ -4594,7 +4635,7 @@ var Table = (props) => {
|
|
|
4594
4635
|
headerSticky = false,
|
|
4595
4636
|
stickyShadow = true
|
|
4596
4637
|
} = props;
|
|
4597
|
-
return /* @__PURE__ */ (0,
|
|
4638
|
+
return /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("div", { className: "lib-xplat-table-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
4598
4639
|
TableContext_default.Provider,
|
|
4599
4640
|
{
|
|
4600
4641
|
value: {
|
|
@@ -4603,7 +4644,7 @@ var Table = (props) => {
|
|
|
4603
4644
|
headerSticky,
|
|
4604
4645
|
stickyShadow
|
|
4605
4646
|
},
|
|
4606
|
-
children: /* @__PURE__ */ (0,
|
|
4647
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("table", { className: "lib-xplat-table", children })
|
|
4607
4648
|
}
|
|
4608
4649
|
) });
|
|
4609
4650
|
};
|
|
@@ -4611,41 +4652,41 @@ Table.displayName = "Table";
|
|
|
4611
4652
|
var Table_default = Table;
|
|
4612
4653
|
|
|
4613
4654
|
// src/components/Table/TableBody.tsx
|
|
4614
|
-
var
|
|
4655
|
+
var import_jsx_runtime339 = require("react/jsx-runtime");
|
|
4615
4656
|
var TableBody = (props) => {
|
|
4616
4657
|
const { children } = props;
|
|
4617
|
-
return /* @__PURE__ */ (0,
|
|
4658
|
+
return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)("tbody", { children });
|
|
4618
4659
|
};
|
|
4619
4660
|
TableBody.displayName = "TableBody";
|
|
4620
4661
|
var TableBody_default = TableBody;
|
|
4621
4662
|
|
|
4622
4663
|
// src/components/Table/TableCell.tsx
|
|
4623
|
-
var
|
|
4664
|
+
var import_react35 = __toESM(require("react"), 1);
|
|
4624
4665
|
|
|
4625
4666
|
// src/components/Table/TableHeadContext.tsx
|
|
4626
|
-
var
|
|
4627
|
-
var TableHeadContext =
|
|
4667
|
+
var import_react33 = __toESM(require("react"), 1);
|
|
4668
|
+
var TableHeadContext = import_react33.default.createContext(
|
|
4628
4669
|
null
|
|
4629
4670
|
);
|
|
4630
4671
|
var useTableHeadContext = () => {
|
|
4631
|
-
const ctx =
|
|
4672
|
+
const ctx = import_react33.default.useContext(TableHeadContext);
|
|
4632
4673
|
return ctx;
|
|
4633
4674
|
};
|
|
4634
4675
|
var TableHeadContext_default = TableHeadContext;
|
|
4635
4676
|
|
|
4636
4677
|
// src/components/Table/TableRowContext.tsx
|
|
4637
|
-
var
|
|
4638
|
-
var TableRowContext =
|
|
4678
|
+
var import_react34 = __toESM(require("react"), 1);
|
|
4679
|
+
var TableRowContext = import_react34.default.createContext(null);
|
|
4639
4680
|
var useTableRowContext = () => {
|
|
4640
|
-
const ctx =
|
|
4681
|
+
const ctx = import_react34.default.useContext(TableRowContext);
|
|
4641
4682
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
4642
4683
|
return ctx;
|
|
4643
4684
|
};
|
|
4644
4685
|
var TableRowContext_default = TableRowContext;
|
|
4645
4686
|
|
|
4646
4687
|
// src/components/Table/TableCell.tsx
|
|
4647
|
-
var
|
|
4648
|
-
var TableCell =
|
|
4688
|
+
var import_jsx_runtime340 = require("react/jsx-runtime");
|
|
4689
|
+
var TableCell = import_react35.default.memo((props) => {
|
|
4649
4690
|
const {
|
|
4650
4691
|
children,
|
|
4651
4692
|
align = "center",
|
|
@@ -4657,9 +4698,9 @@ var TableCell = import_react34.default.memo((props) => {
|
|
|
4657
4698
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
4658
4699
|
const { stickyShadow } = useTableContext();
|
|
4659
4700
|
const headContext = useTableHeadContext();
|
|
4660
|
-
const [left, setLeft] =
|
|
4661
|
-
const cellRef =
|
|
4662
|
-
const calculateLeft =
|
|
4701
|
+
const [left, setLeft] = import_react35.default.useState(0);
|
|
4702
|
+
const cellRef = import_react35.default.useRef(null);
|
|
4703
|
+
const calculateLeft = import_react35.default.useCallback(() => {
|
|
4663
4704
|
if (!cellRef.current) return 0;
|
|
4664
4705
|
let totalLeft = 0;
|
|
4665
4706
|
for (const ref of stickyCells) {
|
|
@@ -4668,7 +4709,7 @@ var TableCell = import_react34.default.memo((props) => {
|
|
|
4668
4709
|
}
|
|
4669
4710
|
return totalLeft;
|
|
4670
4711
|
}, [stickyCells]);
|
|
4671
|
-
|
|
4712
|
+
import_react35.default.useEffect(() => {
|
|
4672
4713
|
if (!isSticky || !cellRef.current) return;
|
|
4673
4714
|
registerStickyCell(cellRef);
|
|
4674
4715
|
setLeft(calculateLeft());
|
|
@@ -4686,7 +4727,7 @@ var TableCell = import_react34.default.memo((props) => {
|
|
|
4686
4727
|
const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
|
|
4687
4728
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
4688
4729
|
const enableHover = headContext && headContext.cellHover;
|
|
4689
|
-
return /* @__PURE__ */ (0,
|
|
4730
|
+
return /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
|
|
4690
4731
|
CellTag,
|
|
4691
4732
|
{
|
|
4692
4733
|
ref: cellRef,
|
|
@@ -4711,21 +4752,21 @@ TableCell.displayName = "TableCell";
|
|
|
4711
4752
|
var TableCell_default = TableCell;
|
|
4712
4753
|
|
|
4713
4754
|
// src/components/Table/TableHead.tsx
|
|
4714
|
-
var
|
|
4755
|
+
var import_jsx_runtime341 = require("react/jsx-runtime");
|
|
4715
4756
|
var TableHead = ({
|
|
4716
4757
|
children,
|
|
4717
4758
|
cellHover = false
|
|
4718
4759
|
}) => {
|
|
4719
4760
|
const { headerSticky } = useTableContext();
|
|
4720
|
-
return /* @__PURE__ */ (0,
|
|
4761
|
+
return /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
4721
4762
|
};
|
|
4722
4763
|
TableHead.displayName = "TableHead";
|
|
4723
4764
|
var TableHead_default = TableHead;
|
|
4724
4765
|
|
|
4725
4766
|
// src/components/Table/TableRow.tsx
|
|
4726
|
-
var
|
|
4727
|
-
var
|
|
4728
|
-
var TableRow =
|
|
4767
|
+
var import_react36 = __toESM(require("react"), 1);
|
|
4768
|
+
var import_jsx_runtime342 = require("react/jsx-runtime");
|
|
4769
|
+
var TableRow = import_react36.default.memo((props) => {
|
|
4729
4770
|
const {
|
|
4730
4771
|
children,
|
|
4731
4772
|
type = "secondary",
|
|
@@ -4733,14 +4774,14 @@ var TableRow = import_react35.default.memo((props) => {
|
|
|
4733
4774
|
onClick
|
|
4734
4775
|
} = props;
|
|
4735
4776
|
const { rowBorderUse } = useTableContext();
|
|
4736
|
-
const [stickyCells, setStickyCells] =
|
|
4777
|
+
const [stickyCells, setStickyCells] = import_react36.default.useState([]);
|
|
4737
4778
|
const registerStickyCell = (ref) => {
|
|
4738
4779
|
setStickyCells((prev) => {
|
|
4739
4780
|
if (prev.includes(ref)) return prev;
|
|
4740
4781
|
return [...prev, ref];
|
|
4741
4782
|
});
|
|
4742
4783
|
};
|
|
4743
|
-
return /* @__PURE__ */ (0,
|
|
4784
|
+
return /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
|
|
4744
4785
|
"tr",
|
|
4745
4786
|
{
|
|
4746
4787
|
className: clsx_default(
|
|
@@ -4758,7 +4799,7 @@ TableRow.displayName = "TableRow";
|
|
|
4758
4799
|
var TableRow_default = TableRow;
|
|
4759
4800
|
|
|
4760
4801
|
// src/components/Tag/Tag.tsx
|
|
4761
|
-
var
|
|
4802
|
+
var import_jsx_runtime343 = require("react/jsx-runtime");
|
|
4762
4803
|
var Tag = (props) => {
|
|
4763
4804
|
const {
|
|
4764
4805
|
children,
|
|
@@ -4768,7 +4809,7 @@ var Tag = (props) => {
|
|
|
4768
4809
|
disabled = false,
|
|
4769
4810
|
colorIndex
|
|
4770
4811
|
} = props;
|
|
4771
|
-
return /* @__PURE__ */ (0,
|
|
4812
|
+
return /* @__PURE__ */ (0, import_jsx_runtime343.jsxs)(
|
|
4772
4813
|
"span",
|
|
4773
4814
|
{
|
|
4774
4815
|
className: clsx_default(
|
|
@@ -4779,8 +4820,8 @@ var Tag = (props) => {
|
|
|
4779
4820
|
disabled && "disabled"
|
|
4780
4821
|
),
|
|
4781
4822
|
children: [
|
|
4782
|
-
/* @__PURE__ */ (0,
|
|
4783
|
-
onClose && /* @__PURE__ */ (0,
|
|
4823
|
+
/* @__PURE__ */ (0, import_jsx_runtime343.jsx)("span", { className: "tag-label", children }),
|
|
4824
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(XIcon_default, {}) })
|
|
4784
4825
|
]
|
|
4785
4826
|
}
|
|
4786
4827
|
);
|
|
@@ -4789,12 +4830,12 @@ Tag.displayName = "Tag";
|
|
|
4789
4830
|
var Tag_default = Tag;
|
|
4790
4831
|
|
|
4791
4832
|
// src/components/TextArea/TextArea.tsx
|
|
4792
|
-
var
|
|
4793
|
-
var
|
|
4794
|
-
var TextArea =
|
|
4833
|
+
var import_react37 = __toESM(require("react"), 1);
|
|
4834
|
+
var import_jsx_runtime344 = require("react/jsx-runtime");
|
|
4835
|
+
var TextArea = import_react37.default.forwardRef(
|
|
4795
4836
|
(props, ref) => {
|
|
4796
4837
|
const { value, onChange, disabled, ...textareaProps } = props;
|
|
4797
|
-
const localRef =
|
|
4838
|
+
const localRef = import_react37.default.useRef(null);
|
|
4798
4839
|
const setRefs = (el) => {
|
|
4799
4840
|
localRef.current = el;
|
|
4800
4841
|
if (!ref) return;
|
|
@@ -4814,21 +4855,21 @@ var TextArea = import_react36.default.forwardRef(
|
|
|
4814
4855
|
onChange(event);
|
|
4815
4856
|
}
|
|
4816
4857
|
};
|
|
4817
|
-
|
|
4858
|
+
import_react37.default.useEffect(() => {
|
|
4818
4859
|
const el = localRef.current;
|
|
4819
4860
|
if (!el) return;
|
|
4820
4861
|
el.style.height = "0px";
|
|
4821
4862
|
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
4822
4863
|
el.style.height = `${nextHeight}px`;
|
|
4823
4864
|
}, [value]);
|
|
4824
|
-
return /* @__PURE__ */ (0,
|
|
4865
|
+
return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
|
|
4825
4866
|
"div",
|
|
4826
4867
|
{
|
|
4827
4868
|
className: clsx_default(
|
|
4828
4869
|
"lib-xplat-textarea",
|
|
4829
4870
|
disabled ? "disabled" : void 0
|
|
4830
4871
|
),
|
|
4831
|
-
children: /* @__PURE__ */ (0,
|
|
4872
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
|
|
4832
4873
|
"textarea",
|
|
4833
4874
|
{
|
|
4834
4875
|
...textareaProps,
|
|
@@ -4846,25 +4887,25 @@ TextArea.displayName = "TextArea";
|
|
|
4846
4887
|
var TextArea_default = TextArea;
|
|
4847
4888
|
|
|
4848
4889
|
// src/components/Toast/Toast.tsx
|
|
4849
|
-
var
|
|
4850
|
-
var
|
|
4851
|
-
var
|
|
4852
|
-
var ToastContext =
|
|
4890
|
+
var import_react38 = __toESM(require("react"), 1);
|
|
4891
|
+
var import_react_dom4 = require("react-dom");
|
|
4892
|
+
var import_jsx_runtime345 = require("react/jsx-runtime");
|
|
4893
|
+
var ToastContext = import_react38.default.createContext(null);
|
|
4853
4894
|
var useToast = () => {
|
|
4854
|
-
const ctx =
|
|
4895
|
+
const ctx = import_react38.default.useContext(ToastContext);
|
|
4855
4896
|
if (!ctx) throw new Error("useToast must be used within ToastProvider");
|
|
4856
4897
|
return ctx;
|
|
4857
4898
|
};
|
|
4858
4899
|
var EXIT_DURATION = 300;
|
|
4859
4900
|
var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
4860
|
-
const ref =
|
|
4861
|
-
const [height, setHeight] =
|
|
4862
|
-
|
|
4901
|
+
const ref = import_react38.default.useRef(null);
|
|
4902
|
+
const [height, setHeight] = import_react38.default.useState(void 0);
|
|
4903
|
+
import_react38.default.useEffect(() => {
|
|
4863
4904
|
if (ref.current && !isExiting) {
|
|
4864
4905
|
setHeight(ref.current.offsetHeight);
|
|
4865
4906
|
}
|
|
4866
4907
|
}, [isExiting]);
|
|
4867
|
-
return /* @__PURE__ */ (0,
|
|
4908
|
+
return /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(
|
|
4868
4909
|
"div",
|
|
4869
4910
|
{
|
|
4870
4911
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -4872,15 +4913,15 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
4872
4913
|
maxHeight: isExiting ? 0 : height ?? "none",
|
|
4873
4914
|
marginBottom: isExiting ? 0 : void 0
|
|
4874
4915
|
},
|
|
4875
|
-
children: /* @__PURE__ */ (0,
|
|
4916
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)(
|
|
4876
4917
|
"div",
|
|
4877
4918
|
{
|
|
4878
4919
|
ref,
|
|
4879
4920
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
4880
4921
|
role: "alert",
|
|
4881
4922
|
children: [
|
|
4882
|
-
/* @__PURE__ */ (0,
|
|
4883
|
-
/* @__PURE__ */ (0,
|
|
4923
|
+
/* @__PURE__ */ (0, import_jsx_runtime345.jsx)("span", { className: "message", children: item.message }),
|
|
4924
|
+
/* @__PURE__ */ (0, import_jsx_runtime345.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
4884
4925
|
]
|
|
4885
4926
|
}
|
|
4886
4927
|
)
|
|
@@ -4891,13 +4932,13 @@ var ToastProvider = ({
|
|
|
4891
4932
|
children,
|
|
4892
4933
|
position = "top-right"
|
|
4893
4934
|
}) => {
|
|
4894
|
-
const [toasts, setToasts] =
|
|
4895
|
-
const [removing, setRemoving] =
|
|
4896
|
-
const [mounted, setMounted] =
|
|
4897
|
-
|
|
4935
|
+
const [toasts, setToasts] = import_react38.default.useState([]);
|
|
4936
|
+
const [removing, setRemoving] = import_react38.default.useState(/* @__PURE__ */ new Set());
|
|
4937
|
+
const [mounted, setMounted] = import_react38.default.useState(false);
|
|
4938
|
+
import_react38.default.useEffect(() => {
|
|
4898
4939
|
setMounted(true);
|
|
4899
4940
|
}, []);
|
|
4900
|
-
const remove =
|
|
4941
|
+
const remove = import_react38.default.useCallback((id) => {
|
|
4901
4942
|
setRemoving((prev) => new Set(prev).add(id));
|
|
4902
4943
|
setTimeout(() => {
|
|
4903
4944
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
@@ -4908,7 +4949,7 @@ var ToastProvider = ({
|
|
|
4908
4949
|
});
|
|
4909
4950
|
}, EXIT_DURATION);
|
|
4910
4951
|
}, []);
|
|
4911
|
-
const toast =
|
|
4952
|
+
const toast = import_react38.default.useCallback(
|
|
4912
4953
|
(type, message, duration = 3e3) => {
|
|
4913
4954
|
const id = `${Date.now()}-${Math.random()}`;
|
|
4914
4955
|
setToasts((prev) => [...prev, { id, type, message }]);
|
|
@@ -4918,10 +4959,10 @@ var ToastProvider = ({
|
|
|
4918
4959
|
},
|
|
4919
4960
|
[remove]
|
|
4920
4961
|
);
|
|
4921
|
-
return /* @__PURE__ */ (0,
|
|
4962
|
+
return /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)(ToastContext.Provider, { value: { toast }, children: [
|
|
4922
4963
|
children,
|
|
4923
|
-
mounted && (0,
|
|
4924
|
-
/* @__PURE__ */ (0,
|
|
4964
|
+
mounted && (0, import_react_dom4.createPortal)(
|
|
4965
|
+
/* @__PURE__ */ (0, import_jsx_runtime345.jsx)("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(
|
|
4925
4966
|
ToastItemComponent,
|
|
4926
4967
|
{
|
|
4927
4968
|
item: t,
|
|
@@ -4937,29 +4978,29 @@ var ToastProvider = ({
|
|
|
4937
4978
|
ToastProvider.displayName = "ToastProvider";
|
|
4938
4979
|
|
|
4939
4980
|
// src/components/Tooltip/Tooltip.tsx
|
|
4940
|
-
var
|
|
4941
|
-
var
|
|
4981
|
+
var import_react39 = __toESM(require("react"), 1);
|
|
4982
|
+
var import_jsx_runtime346 = require("react/jsx-runtime");
|
|
4942
4983
|
var Tooltip = (props) => {
|
|
4943
4984
|
const {
|
|
4944
4985
|
type = "primary",
|
|
4945
4986
|
description,
|
|
4946
4987
|
children
|
|
4947
4988
|
} = props;
|
|
4948
|
-
const iconRef =
|
|
4949
|
-
return /* @__PURE__ */ (0,
|
|
4950
|
-
/* @__PURE__ */ (0,
|
|
4951
|
-
/* @__PURE__ */ (0,
|
|
4989
|
+
const iconRef = import_react39.default.useRef(null);
|
|
4990
|
+
return /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: "lib-xplat-tooltip", children: [
|
|
4991
|
+
/* @__PURE__ */ (0, import_jsx_runtime346.jsx)("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
|
|
4992
|
+
/* @__PURE__ */ (0, import_jsx_runtime346.jsx)("div", { className: clsx_default("tooltip-wrapper", type), children: description })
|
|
4952
4993
|
] });
|
|
4953
4994
|
};
|
|
4954
4995
|
Tooltip.displayName = "Tooltip";
|
|
4955
4996
|
var Tooltip_default = Tooltip;
|
|
4956
4997
|
|
|
4957
4998
|
// src/components/Video/Video.tsx
|
|
4958
|
-
var
|
|
4959
|
-
var
|
|
4960
|
-
var PipIcon = () => /* @__PURE__ */ (0,
|
|
4961
|
-
/* @__PURE__ */ (0,
|
|
4962
|
-
/* @__PURE__ */ (0,
|
|
4999
|
+
var import_react40 = __toESM(require("react"), 1);
|
|
5000
|
+
var import_jsx_runtime347 = require("react/jsx-runtime");
|
|
5001
|
+
var PipIcon = () => /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
5002
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
5003
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
4963
5004
|
] });
|
|
4964
5005
|
var formatTime = (sec) => {
|
|
4965
5006
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -4967,7 +5008,7 @@ var formatTime = (sec) => {
|
|
|
4967
5008
|
const s = Math.floor(sec % 60);
|
|
4968
5009
|
return `${m}:${s.toString().padStart(2, "0")}`;
|
|
4969
5010
|
};
|
|
4970
|
-
var Video =
|
|
5011
|
+
var Video = import_react40.default.forwardRef((props, ref) => {
|
|
4971
5012
|
const {
|
|
4972
5013
|
src,
|
|
4973
5014
|
poster,
|
|
@@ -4991,21 +5032,21 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
4991
5032
|
children,
|
|
4992
5033
|
...rest
|
|
4993
5034
|
} = props;
|
|
4994
|
-
const containerRef =
|
|
4995
|
-
const videoRef =
|
|
4996
|
-
const [isPlaying, setIsPlaying] =
|
|
4997
|
-
const [isLoaded, setIsLoaded] =
|
|
4998
|
-
const [currentTime, setCurrentTime] =
|
|
4999
|
-
const [duration, setDuration] =
|
|
5000
|
-
const [buffered, setBuffered] =
|
|
5001
|
-
const [volume, setVolume] =
|
|
5002
|
-
const [isMuted, setIsMuted] =
|
|
5003
|
-
const [isFullscreen, setIsFullscreen] =
|
|
5004
|
-
const [playbackRate, setPlaybackRate] =
|
|
5005
|
-
const [rateMenuOpen, setRateMenuOpen] =
|
|
5006
|
-
const [captionsOn, setCaptionsOn] =
|
|
5007
|
-
const [isPip, setIsPip] =
|
|
5008
|
-
const setRefs =
|
|
5035
|
+
const containerRef = import_react40.default.useRef(null);
|
|
5036
|
+
const videoRef = import_react40.default.useRef(null);
|
|
5037
|
+
const [isPlaying, setIsPlaying] = import_react40.default.useState(Boolean(autoPlay));
|
|
5038
|
+
const [isLoaded, setIsLoaded] = import_react40.default.useState(false);
|
|
5039
|
+
const [currentTime, setCurrentTime] = import_react40.default.useState(0);
|
|
5040
|
+
const [duration, setDuration] = import_react40.default.useState(0);
|
|
5041
|
+
const [buffered, setBuffered] = import_react40.default.useState(0);
|
|
5042
|
+
const [volume, setVolume] = import_react40.default.useState(1);
|
|
5043
|
+
const [isMuted, setIsMuted] = import_react40.default.useState(Boolean(muted));
|
|
5044
|
+
const [isFullscreen, setIsFullscreen] = import_react40.default.useState(false);
|
|
5045
|
+
const [playbackRate, setPlaybackRate] = import_react40.default.useState(1);
|
|
5046
|
+
const [rateMenuOpen, setRateMenuOpen] = import_react40.default.useState(false);
|
|
5047
|
+
const [captionsOn, setCaptionsOn] = import_react40.default.useState(false);
|
|
5048
|
+
const [isPip, setIsPip] = import_react40.default.useState(false);
|
|
5049
|
+
const setRefs = import_react40.default.useCallback(
|
|
5009
5050
|
(el) => {
|
|
5010
5051
|
videoRef.current = el;
|
|
5011
5052
|
if (typeof ref === "function") ref(el);
|
|
@@ -5013,14 +5054,14 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
5013
5054
|
},
|
|
5014
5055
|
[ref]
|
|
5015
5056
|
);
|
|
5016
|
-
|
|
5057
|
+
import_react40.default.useEffect(() => {
|
|
5017
5058
|
const onFsChange = () => {
|
|
5018
5059
|
setIsFullscreen(document.fullscreenElement === containerRef.current);
|
|
5019
5060
|
};
|
|
5020
5061
|
document.addEventListener("fullscreenchange", onFsChange);
|
|
5021
5062
|
return () => document.removeEventListener("fullscreenchange", onFsChange);
|
|
5022
5063
|
}, []);
|
|
5023
|
-
|
|
5064
|
+
import_react40.default.useEffect(() => {
|
|
5024
5065
|
const v = videoRef.current;
|
|
5025
5066
|
if (!v) return;
|
|
5026
5067
|
const onEnter = () => setIsPip(true);
|
|
@@ -5134,13 +5175,13 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
5134
5175
|
const volumePct = (isMuted ? 0 : volume) * 100;
|
|
5135
5176
|
const VolumeGlyph = isMuted || volume === 0 ? VolumeXIcon_default : volume < 0.5 ? VolumeIcon_default : Volume2Icon_default;
|
|
5136
5177
|
const pipSupported = typeof document !== "undefined" && "pictureInPictureEnabled" in document && document.pictureInPictureEnabled;
|
|
5137
|
-
return /* @__PURE__ */ (0,
|
|
5178
|
+
return /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)(
|
|
5138
5179
|
"div",
|
|
5139
5180
|
{
|
|
5140
5181
|
ref: containerRef,
|
|
5141
5182
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
5142
5183
|
children: [
|
|
5143
|
-
/* @__PURE__ */ (0,
|
|
5184
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
5144
5185
|
"video",
|
|
5145
5186
|
{
|
|
5146
5187
|
ref: setRefs,
|
|
@@ -5161,7 +5202,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
5161
5202
|
children
|
|
5162
5203
|
}
|
|
5163
5204
|
),
|
|
5164
|
-
showCenterPlay && /* @__PURE__ */ (0,
|
|
5205
|
+
showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
5165
5206
|
"button",
|
|
5166
5207
|
{
|
|
5167
5208
|
type: "button",
|
|
@@ -5173,11 +5214,11 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
5173
5214
|
onClick: togglePlay,
|
|
5174
5215
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
5175
5216
|
tabIndex: -1,
|
|
5176
|
-
children: /* @__PURE__ */ (0,
|
|
5217
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PlayCircleIcon_default, {}) })
|
|
5177
5218
|
}
|
|
5178
5219
|
),
|
|
5179
|
-
showControls && /* @__PURE__ */ (0,
|
|
5180
|
-
/* @__PURE__ */ (0,
|
|
5220
|
+
showControls && /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
5221
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
5181
5222
|
"input",
|
|
5182
5223
|
{
|
|
5183
5224
|
type: "range",
|
|
@@ -5194,29 +5235,29 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
5194
5235
|
}
|
|
5195
5236
|
}
|
|
5196
5237
|
),
|
|
5197
|
-
/* @__PURE__ */ (0,
|
|
5198
|
-
/* @__PURE__ */ (0,
|
|
5238
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "controls-row", children: [
|
|
5239
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
5199
5240
|
"button",
|
|
5200
5241
|
{
|
|
5201
5242
|
type: "button",
|
|
5202
5243
|
className: "control-btn",
|
|
5203
5244
|
onClick: togglePlay,
|
|
5204
5245
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
5205
|
-
children: isPlaying ? /* @__PURE__ */ (0,
|
|
5246
|
+
children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PlayIcon_default, {})
|
|
5206
5247
|
}
|
|
5207
5248
|
),
|
|
5208
|
-
/* @__PURE__ */ (0,
|
|
5209
|
-
/* @__PURE__ */ (0,
|
|
5249
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "volume-group", children: [
|
|
5250
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
5210
5251
|
"button",
|
|
5211
5252
|
{
|
|
5212
5253
|
type: "button",
|
|
5213
5254
|
className: "control-btn",
|
|
5214
5255
|
onClick: toggleMute,
|
|
5215
5256
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
5216
|
-
children: /* @__PURE__ */ (0,
|
|
5257
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(VolumeGlyph, {})
|
|
5217
5258
|
}
|
|
5218
5259
|
),
|
|
5219
|
-
/* @__PURE__ */ (0,
|
|
5260
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
5220
5261
|
"input",
|
|
5221
5262
|
{
|
|
5222
5263
|
type: "range",
|
|
@@ -5231,14 +5272,14 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
5231
5272
|
}
|
|
5232
5273
|
)
|
|
5233
5274
|
] }),
|
|
5234
|
-
/* @__PURE__ */ (0,
|
|
5275
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("span", { className: "time", children: [
|
|
5235
5276
|
formatTime(currentTime),
|
|
5236
5277
|
" / ",
|
|
5237
5278
|
formatTime(duration)
|
|
5238
5279
|
] }),
|
|
5239
|
-
/* @__PURE__ */ (0,
|
|
5240
|
-
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0,
|
|
5241
|
-
/* @__PURE__ */ (0,
|
|
5280
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)("div", { className: "controls-spacer" }),
|
|
5281
|
+
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
5282
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsxs)(
|
|
5242
5283
|
"button",
|
|
5243
5284
|
{
|
|
5244
5285
|
type: "button",
|
|
@@ -5252,7 +5293,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
5252
5293
|
]
|
|
5253
5294
|
}
|
|
5254
5295
|
),
|
|
5255
|
-
rateMenuOpen && /* @__PURE__ */ (0,
|
|
5296
|
+
rateMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)(
|
|
5256
5297
|
"button",
|
|
5257
5298
|
{
|
|
5258
5299
|
type: "button",
|
|
@@ -5266,7 +5307,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
5266
5307
|
}
|
|
5267
5308
|
) }, r2)) })
|
|
5268
5309
|
] }),
|
|
5269
|
-
showCaptions && /* @__PURE__ */ (0,
|
|
5310
|
+
showCaptions && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
5270
5311
|
"button",
|
|
5271
5312
|
{
|
|
5272
5313
|
type: "button",
|
|
@@ -5274,37 +5315,37 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
5274
5315
|
onClick: toggleCaptions,
|
|
5275
5316
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
5276
5317
|
"aria-pressed": captionsOn,
|
|
5277
|
-
children: /* @__PURE__ */ (0,
|
|
5318
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(TypeIcon_default, {})
|
|
5278
5319
|
}
|
|
5279
5320
|
),
|
|
5280
|
-
showPip && pipSupported && /* @__PURE__ */ (0,
|
|
5321
|
+
showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
5281
5322
|
"button",
|
|
5282
5323
|
{
|
|
5283
5324
|
type: "button",
|
|
5284
5325
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
5285
5326
|
onClick: togglePip,
|
|
5286
5327
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
5287
|
-
children: /* @__PURE__ */ (0,
|
|
5328
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PipIcon, {})
|
|
5288
5329
|
}
|
|
5289
5330
|
),
|
|
5290
|
-
showDownload && /* @__PURE__ */ (0,
|
|
5331
|
+
showDownload && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
5291
5332
|
"a",
|
|
5292
5333
|
{
|
|
5293
5334
|
className: "control-btn",
|
|
5294
5335
|
href: src,
|
|
5295
5336
|
download: downloadFileName ?? true,
|
|
5296
5337
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
5297
|
-
children: /* @__PURE__ */ (0,
|
|
5338
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(DownloadIcon_default, {})
|
|
5298
5339
|
}
|
|
5299
5340
|
),
|
|
5300
|
-
/* @__PURE__ */ (0,
|
|
5341
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
5301
5342
|
"button",
|
|
5302
5343
|
{
|
|
5303
5344
|
type: "button",
|
|
5304
5345
|
className: "control-btn",
|
|
5305
5346
|
onClick: toggleFullscreen,
|
|
5306
5347
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
5307
|
-
children: isFullscreen ? /* @__PURE__ */ (0,
|
|
5348
|
+
children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(MaximizeIcon_default, {})
|
|
5308
5349
|
}
|
|
5309
5350
|
)
|
|
5310
5351
|
] })
|