@x-plat/design-system 0.5.11 → 0.5.12
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 +401 -379
- package/dist/components/DatePicker/index.js +388 -366
- package/dist/components/Dropdown/index.cjs +38 -17
- package/dist/components/Dropdown/index.css +9 -9
- package/dist/components/Dropdown/index.js +37 -16
- package/dist/components/Modal/index.cjs +29 -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 +28 -8
- package/dist/components/PopOver/index.cjs +33 -12
- package/dist/components/PopOver/index.css +6 -9
- package/dist/components/PopOver/index.js +32 -11
- package/dist/components/Select/index.cjs +351 -330
- package/dist/components/Select/index.css +12 -19
- package/dist/components/Select/index.js +350 -329
- package/dist/components/index.cjs +485 -440
- package/dist/components/index.css +27 -37
- package/dist/components/index.js +441 -396
- package/dist/index.cjs +509 -464
- package/dist/index.css +27 -37
- package/dist/index.js +463 -418
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -6567,14 +6567,23 @@ var useChartSize = (ref) => {
|
|
|
6567
6567
|
import_react5.default.useEffect(() => {
|
|
6568
6568
|
const el = ref.current;
|
|
6569
6569
|
if (!el) return;
|
|
6570
|
+
let rafId = 0;
|
|
6570
6571
|
const observer = new ResizeObserver((entries) => {
|
|
6571
|
-
|
|
6572
|
-
|
|
6573
|
-
|
|
6574
|
-
|
|
6572
|
+
cancelAnimationFrame(rafId);
|
|
6573
|
+
rafId = requestAnimationFrame(() => {
|
|
6574
|
+
const entry = entries[0];
|
|
6575
|
+
if (!entry) return;
|
|
6576
|
+
const { width, height } = entry.contentRect;
|
|
6577
|
+
const w = Math.floor(width);
|
|
6578
|
+
const h = Math.floor(height);
|
|
6579
|
+
setSize((prev) => prev.width === w && prev.height === h ? prev : { width: w, height: h });
|
|
6580
|
+
});
|
|
6575
6581
|
});
|
|
6576
6582
|
observer.observe(el);
|
|
6577
|
-
return () =>
|
|
6583
|
+
return () => {
|
|
6584
|
+
cancelAnimationFrame(rafId);
|
|
6585
|
+
observer.disconnect();
|
|
6586
|
+
};
|
|
6578
6587
|
}, [ref]);
|
|
6579
6588
|
return size;
|
|
6580
6589
|
};
|
|
@@ -6586,15 +6595,21 @@ var useChartTooltip = (enabled) => {
|
|
|
6586
6595
|
content: ""
|
|
6587
6596
|
});
|
|
6588
6597
|
const containerRef = import_react5.default.useRef(null);
|
|
6598
|
+
const rafRef = import_react5.default.useRef(0);
|
|
6589
6599
|
const move = import_react5.default.useCallback((e) => {
|
|
6590
6600
|
if (!enabled) return;
|
|
6591
|
-
const
|
|
6592
|
-
|
|
6593
|
-
|
|
6594
|
-
|
|
6595
|
-
|
|
6596
|
-
|
|
6597
|
-
|
|
6601
|
+
const clientX = e.clientX;
|
|
6602
|
+
const clientY = e.clientY;
|
|
6603
|
+
cancelAnimationFrame(rafRef.current);
|
|
6604
|
+
rafRef.current = requestAnimationFrame(() => {
|
|
6605
|
+
const rect = containerRef.current?.getBoundingClientRect();
|
|
6606
|
+
if (!rect) return;
|
|
6607
|
+
setTooltip((prev) => ({
|
|
6608
|
+
...prev,
|
|
6609
|
+
x: clientX - rect.left,
|
|
6610
|
+
y: clientY - rect.top - 12
|
|
6611
|
+
}));
|
|
6612
|
+
});
|
|
6598
6613
|
}, [enabled]);
|
|
6599
6614
|
const show = import_react5.default.useCallback((e, content) => {
|
|
6600
6615
|
if (!enabled) return;
|
|
@@ -6608,10 +6623,35 @@ var useChartTooltip = (enabled) => {
|
|
|
6608
6623
|
});
|
|
6609
6624
|
}, [enabled]);
|
|
6610
6625
|
const hide = import_react5.default.useCallback(() => {
|
|
6626
|
+
cancelAnimationFrame(rafRef.current);
|
|
6611
6627
|
setTooltip((prev) => ({ ...prev, visible: false }));
|
|
6612
6628
|
}, []);
|
|
6613
6629
|
return { tooltip, show, hide, move, containerRef };
|
|
6614
6630
|
};
|
|
6631
|
+
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) => {
|
|
6632
|
+
const y = PADDING.top + (1 - ratio) * chartH;
|
|
6633
|
+
const val = Math.round(maxVal * ratio);
|
|
6634
|
+
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
|
|
6635
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
6636
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
6637
|
+
] }, ratio);
|
|
6638
|
+
}) }));
|
|
6639
|
+
GridLines.displayName = "GridLines";
|
|
6640
|
+
var getLabelStep = (count, chartW) => {
|
|
6641
|
+
const minLabelWidth = 40;
|
|
6642
|
+
const maxLabels = Math.floor(chartW / minLabelWidth);
|
|
6643
|
+
if (count <= maxLabels) return 1;
|
|
6644
|
+
return Math.ceil(count / maxLabels);
|
|
6645
|
+
};
|
|
6646
|
+
var AxisLabels = import_react5.default.memo(({ labels, count, chartW, height }) => {
|
|
6647
|
+
const step = getLabelStep(count, chartW);
|
|
6648
|
+
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(import_jsx_runtime305.Fragment, { children: labels.map((label, i) => {
|
|
6649
|
+
if (i % step !== 0) return null;
|
|
6650
|
+
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
6651
|
+
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
6652
|
+
}) });
|
|
6653
|
+
});
|
|
6654
|
+
AxisLabels.displayName = "AxisLabels";
|
|
6615
6655
|
var LineChart = import_react5.default.memo(({ data, labels, width, height, onHover, onMove, onLeave }) => {
|
|
6616
6656
|
const entries = import_react5.default.useMemo(() => Object.entries(data), [data]);
|
|
6617
6657
|
const maxVal = import_react5.default.useMemo(() => {
|
|
@@ -6631,19 +6671,10 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, onHov
|
|
|
6631
6671
|
),
|
|
6632
6672
|
[entries, count, chartW, chartH, maxVal]
|
|
6633
6673
|
);
|
|
6674
|
+
const showPoints = count <= 100;
|
|
6634
6675
|
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
6635
|
-
|
|
6636
|
-
|
|
6637
|
-
const val = Math.round(maxVal * ratio);
|
|
6638
|
-
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
|
|
6639
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
6640
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
6641
|
-
] }, ratio);
|
|
6642
|
-
}),
|
|
6643
|
-
labels.map((label, i) => {
|
|
6644
|
-
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
6645
|
-
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
6646
|
-
}),
|
|
6676
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
6677
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)(AxisLabels, { labels, count, chartW, height }),
|
|
6647
6678
|
entries.map(([key], di) => {
|
|
6648
6679
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
6649
6680
|
const color = palette[2];
|
|
@@ -6658,7 +6689,7 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, onHov
|
|
|
6658
6689
|
strokeWidth: "2"
|
|
6659
6690
|
}
|
|
6660
6691
|
),
|
|
6661
|
-
points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
6692
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
6662
6693
|
"circle",
|
|
6663
6694
|
{
|
|
6664
6695
|
cx: p.x,
|
|
@@ -6696,19 +6727,10 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, onHo
|
|
|
6696
6727
|
),
|
|
6697
6728
|
[entries, count, chartW, chartH, maxVal]
|
|
6698
6729
|
);
|
|
6730
|
+
const showPoints = count <= 100;
|
|
6699
6731
|
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
6700
|
-
|
|
6701
|
-
|
|
6702
|
-
const val = Math.round(maxVal * ratio);
|
|
6703
|
-
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
|
|
6704
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
6705
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
6706
|
-
] }, ratio);
|
|
6707
|
-
}),
|
|
6708
|
-
labels.map((label, i) => {
|
|
6709
|
-
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
6710
|
-
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
6711
|
-
}),
|
|
6732
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
6733
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)(AxisLabels, { labels, count, chartW, height }),
|
|
6712
6734
|
entries.map(([key], di) => {
|
|
6713
6735
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
6714
6736
|
const color = palette[2];
|
|
@@ -6724,7 +6746,7 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, onHo
|
|
|
6724
6746
|
] }) }),
|
|
6725
6747
|
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("path", { d: areaPath, fill: `url(#${gradientId})` }),
|
|
6726
6748
|
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("path", { d: linePath, fill: "none", stroke: color, strokeWidth: "2" }),
|
|
6727
|
-
points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
6749
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
6728
6750
|
"circle",
|
|
6729
6751
|
{
|
|
6730
6752
|
cx: p.x,
|
|
@@ -6754,11 +6776,11 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, onHove
|
|
|
6754
6776
|
const chartW = width - PADDING.left - PADDING.right;
|
|
6755
6777
|
const chartH = height - PADDING.top - PADDING.bottom;
|
|
6756
6778
|
const groupW = chartW / count;
|
|
6757
|
-
const barW = Math.min(32, groupW * 0.7 / groupCount);
|
|
6779
|
+
const barW = Math.max(1, Math.min(32, groupW * 0.7 / groupCount));
|
|
6758
6780
|
const bars = import_react5.default.useMemo(
|
|
6759
6781
|
() => entries.map(
|
|
6760
6782
|
([, values], di) => values.map((v, i) => {
|
|
6761
|
-
const h = v / maxVal * chartH;
|
|
6783
|
+
const h = Math.max(0, v / maxVal * chartH);
|
|
6762
6784
|
const x = PADDING.left + groupW * i + (groupW - barW * groupCount) / 2 + barW * di;
|
|
6763
6785
|
const y = PADDING.top + chartH - h;
|
|
6764
6786
|
return { x, y, w: barW, h, v };
|
|
@@ -6766,16 +6788,13 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, onHove
|
|
|
6766
6788
|
),
|
|
6767
6789
|
[entries, maxVal, chartH, groupW, barW, groupCount]
|
|
6768
6790
|
);
|
|
6791
|
+
const barLabelStep = getLabelStep(count, chartW);
|
|
6769
6792
|
return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
6770
|
-
|
|
6771
|
-
|
|
6772
|
-
|
|
6773
|
-
return /* @__PURE__ */ (0, import_jsx_runtime305.
|
|
6774
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
6775
|
-
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
6776
|
-
] }, ratio);
|
|
6793
|
+
/* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
6794
|
+
labels.map((label, i) => {
|
|
6795
|
+
if (i % barLabelStep !== 0) return null;
|
|
6796
|
+
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);
|
|
6777
6797
|
}),
|
|
6778
|
-
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)),
|
|
6779
6798
|
entries.map(([key], di) => {
|
|
6780
6799
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
6781
6800
|
const color = palette[2];
|
|
@@ -6968,7 +6987,7 @@ Chip.displayName = "Chip";
|
|
|
6968
6987
|
var Chip_default = Chip;
|
|
6969
6988
|
|
|
6970
6989
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
6971
|
-
var
|
|
6990
|
+
var import_react12 = __toESM(require("react"), 1);
|
|
6972
6991
|
|
|
6973
6992
|
// src/components/Input/Input.tsx
|
|
6974
6993
|
var import_react6 = __toESM(require("react"), 1);
|
|
@@ -7158,15 +7177,37 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
7158
7177
|
var PasswordInput_default = PasswordInput;
|
|
7159
7178
|
|
|
7160
7179
|
// src/components/Modal/Modal.tsx
|
|
7180
|
+
var import_react10 = __toESM(require("react"), 1);
|
|
7181
|
+
var import_react_dom2 = require("react-dom");
|
|
7182
|
+
|
|
7183
|
+
// src/tokens/hooks/Portal.tsx
|
|
7161
7184
|
var import_react9 = __toESM(require("react"), 1);
|
|
7162
|
-
var import_react_dom = require("react-dom");
|
|
7185
|
+
var import_react_dom = __toESM(require("react-dom"), 1);
|
|
7163
7186
|
var import_jsx_runtime311 = require("react/jsx-runtime");
|
|
7187
|
+
var PortalContainerContext = import_react9.default.createContext(null);
|
|
7188
|
+
var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(PortalContainerContext.Provider, { value: container, children });
|
|
7189
|
+
var Portal = ({ children }) => {
|
|
7190
|
+
const contextContainer = import_react9.default.useContext(PortalContainerContext);
|
|
7191
|
+
const [fallback, setFallback] = import_react9.default.useState(null);
|
|
7192
|
+
import_react9.default.useEffect(() => {
|
|
7193
|
+
if (!contextContainer) setFallback(document.body);
|
|
7194
|
+
}, [contextContainer]);
|
|
7195
|
+
const container = contextContainer ?? fallback;
|
|
7196
|
+
if (!container) return null;
|
|
7197
|
+
return import_react_dom.default.createPortal(children, container);
|
|
7198
|
+
};
|
|
7199
|
+
Portal.displayName = "Portal";
|
|
7200
|
+
var Portal_default = Portal;
|
|
7201
|
+
|
|
7202
|
+
// src/components/Modal/Modal.tsx
|
|
7203
|
+
var import_jsx_runtime312 = require("react/jsx-runtime");
|
|
7164
7204
|
var ANIMATION_DURATION_MS = 200;
|
|
7165
7205
|
var Modal = (props) => {
|
|
7166
7206
|
const { isOpen, onClose, children } = props;
|
|
7167
|
-
const [mounted, setMounted] =
|
|
7168
|
-
const [visible, setVisible] =
|
|
7169
|
-
|
|
7207
|
+
const [mounted, setMounted] = import_react10.default.useState(false);
|
|
7208
|
+
const [visible, setVisible] = import_react10.default.useState(false);
|
|
7209
|
+
const boxRef = import_react10.default.useRef(null);
|
|
7210
|
+
import_react10.default.useEffect(() => {
|
|
7170
7211
|
if (isOpen) {
|
|
7171
7212
|
setMounted(true);
|
|
7172
7213
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7179,20 +7220,21 @@ var Modal = (props) => {
|
|
|
7179
7220
|
if (typeof document === "undefined") return null;
|
|
7180
7221
|
if (!mounted) return null;
|
|
7181
7222
|
const stateClass = visible ? "enter" : "exit";
|
|
7182
|
-
return (0,
|
|
7183
|
-
/* @__PURE__ */ (0,
|
|
7223
|
+
return (0, import_react_dom2.createPortal)(
|
|
7224
|
+
/* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
7184
7225
|
"div",
|
|
7185
7226
|
{
|
|
7186
7227
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
7187
7228
|
onClick: onClose,
|
|
7188
|
-
children: /* @__PURE__ */ (0,
|
|
7229
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
7189
7230
|
"div",
|
|
7190
7231
|
{
|
|
7232
|
+
ref: boxRef,
|
|
7191
7233
|
className: clsx_default("lib-xplat-modal", "modal-box", stateClass),
|
|
7192
7234
|
role: "dialog",
|
|
7193
7235
|
"aria-modal": "true",
|
|
7194
7236
|
onClick: (e) => e.stopPropagation(),
|
|
7195
|
-
children
|
|
7237
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(PortalProvider, { container: boxRef.current, children })
|
|
7196
7238
|
}
|
|
7197
7239
|
)
|
|
7198
7240
|
}
|
|
@@ -7204,9 +7246,9 @@ Modal.displayName = "Modal";
|
|
|
7204
7246
|
var Modal_default = Modal;
|
|
7205
7247
|
|
|
7206
7248
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
7207
|
-
var
|
|
7208
|
-
var
|
|
7209
|
-
var DayCell2 =
|
|
7249
|
+
var import_react11 = __toESM(require("react"), 1);
|
|
7250
|
+
var import_jsx_runtime313 = require("react/jsx-runtime");
|
|
7251
|
+
var DayCell2 = import_react11.default.memo(
|
|
7210
7252
|
({
|
|
7211
7253
|
day,
|
|
7212
7254
|
disabled,
|
|
@@ -7216,7 +7258,7 @@ var DayCell2 = import_react10.default.memo(
|
|
|
7216
7258
|
isEnd,
|
|
7217
7259
|
inRange,
|
|
7218
7260
|
onSelect
|
|
7219
|
-
}) => /* @__PURE__ */ (0,
|
|
7261
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
7220
7262
|
"button",
|
|
7221
7263
|
{
|
|
7222
7264
|
type: "button",
|
|
@@ -7258,26 +7300,26 @@ var SingleDatePicker = (props) => {
|
|
|
7258
7300
|
initialYear,
|
|
7259
7301
|
initialMonth
|
|
7260
7302
|
);
|
|
7261
|
-
const [pickerMode, setPickerMode] =
|
|
7262
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
7303
|
+
const [pickerMode, setPickerMode] = import_react11.default.useState("days");
|
|
7304
|
+
const [yearRangeStart, setYearRangeStart] = import_react11.default.useState(
|
|
7263
7305
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
7264
7306
|
);
|
|
7265
|
-
const minTime =
|
|
7307
|
+
const minTime = import_react11.default.useMemo(
|
|
7266
7308
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
7267
7309
|
[minDate]
|
|
7268
7310
|
);
|
|
7269
|
-
const maxTime =
|
|
7311
|
+
const maxTime = import_react11.default.useMemo(
|
|
7270
7312
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
7271
7313
|
[maxDate]
|
|
7272
7314
|
);
|
|
7273
|
-
const highlightSet =
|
|
7315
|
+
const highlightSet = import_react11.default.useMemo(() => {
|
|
7274
7316
|
const set = /* @__PURE__ */ new Set();
|
|
7275
7317
|
for (const h of highlightDates) {
|
|
7276
7318
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
7277
7319
|
}
|
|
7278
7320
|
return set;
|
|
7279
7321
|
}, [highlightDates]);
|
|
7280
|
-
const handleSelect =
|
|
7322
|
+
const handleSelect = import_react11.default.useCallback(
|
|
7281
7323
|
(date) => {
|
|
7282
7324
|
onChange?.(date);
|
|
7283
7325
|
},
|
|
@@ -7314,20 +7356,20 @@ var SingleDatePicker = (props) => {
|
|
|
7314
7356
|
const monthLabels = MONTH_LABELS[locale];
|
|
7315
7357
|
const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
|
|
7316
7358
|
const hasRange = rangeStart != null && rangeEnd != null;
|
|
7317
|
-
return /* @__PURE__ */ (0,
|
|
7359
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(
|
|
7318
7360
|
"div",
|
|
7319
7361
|
{
|
|
7320
7362
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
7321
7363
|
children: [
|
|
7322
|
-
/* @__PURE__ */ (0,
|
|
7323
|
-
/* @__PURE__ */ (0,
|
|
7324
|
-
/* @__PURE__ */ (0,
|
|
7325
|
-
/* @__PURE__ */ (0,
|
|
7364
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "datepicker-header", children: [
|
|
7365
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(ChevronLeftIcon_default, {}) }),
|
|
7366
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
7367
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(ChevronRightIcon_default, {}) })
|
|
7326
7368
|
] }),
|
|
7327
|
-
/* @__PURE__ */ (0,
|
|
7328
|
-
pickerMode === "years" && /* @__PURE__ */ (0,
|
|
7369
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "datepicker-body", children: [
|
|
7370
|
+
pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
7329
7371
|
const y = yearRangeStart + i;
|
|
7330
|
-
return /* @__PURE__ */ (0,
|
|
7372
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
7331
7373
|
"button",
|
|
7332
7374
|
{
|
|
7333
7375
|
type: "button",
|
|
@@ -7338,7 +7380,7 @@ var SingleDatePicker = (props) => {
|
|
|
7338
7380
|
y
|
|
7339
7381
|
);
|
|
7340
7382
|
}) }),
|
|
7341
|
-
pickerMode === "months" && /* @__PURE__ */ (0,
|
|
7383
|
+
pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
7342
7384
|
"button",
|
|
7343
7385
|
{
|
|
7344
7386
|
type: "button",
|
|
@@ -7348,8 +7390,8 @@ var SingleDatePicker = (props) => {
|
|
|
7348
7390
|
},
|
|
7349
7391
|
i
|
|
7350
7392
|
)) }),
|
|
7351
|
-
pickerMode === "days" && /* @__PURE__ */ (0,
|
|
7352
|
-
/* @__PURE__ */ (0,
|
|
7393
|
+
pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(import_jsx_runtime313.Fragment, { children: [
|
|
7394
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
7353
7395
|
"div",
|
|
7354
7396
|
{
|
|
7355
7397
|
className: clsx_default(
|
|
@@ -7361,7 +7403,7 @@ var SingleDatePicker = (props) => {
|
|
|
7361
7403
|
},
|
|
7362
7404
|
label
|
|
7363
7405
|
)) }),
|
|
7364
|
-
/* @__PURE__ */ (0,
|
|
7406
|
+
/* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
7365
7407
|
const t = day.date.getTime();
|
|
7366
7408
|
const disabled = t < minTime || t > maxTime;
|
|
7367
7409
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -7371,7 +7413,7 @@ var SingleDatePicker = (props) => {
|
|
|
7371
7413
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
7372
7414
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
7373
7415
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
7374
|
-
return /* @__PURE__ */ (0,
|
|
7416
|
+
return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
|
|
7375
7417
|
DayCell2,
|
|
7376
7418
|
{
|
|
7377
7419
|
day,
|
|
@@ -7396,7 +7438,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
7396
7438
|
var SingleDatePicker_default = SingleDatePicker;
|
|
7397
7439
|
|
|
7398
7440
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
7399
|
-
var
|
|
7441
|
+
var import_jsx_runtime314 = require("react/jsx-runtime");
|
|
7400
7442
|
var formatDate = (date) => {
|
|
7401
7443
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
7402
7444
|
const y = date.getFullYear();
|
|
@@ -7406,8 +7448,8 @@ var formatDate = (date) => {
|
|
|
7406
7448
|
};
|
|
7407
7449
|
var InputDatePicker = (props) => {
|
|
7408
7450
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
7409
|
-
const [isOpen, setIsOpen] =
|
|
7410
|
-
const [tempDate, setTempDate] =
|
|
7451
|
+
const [isOpen, setIsOpen] = import_react12.default.useState(false);
|
|
7452
|
+
const [tempDate, setTempDate] = import_react12.default.useState(value ?? /* @__PURE__ */ new Date());
|
|
7411
7453
|
const handleOpen = () => {
|
|
7412
7454
|
if (disabled) return;
|
|
7413
7455
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -7423,19 +7465,19 @@ var InputDatePicker = (props) => {
|
|
|
7423
7465
|
const handleClose = () => {
|
|
7424
7466
|
setIsOpen(false);
|
|
7425
7467
|
};
|
|
7426
|
-
return /* @__PURE__ */ (0,
|
|
7427
|
-
/* @__PURE__ */ (0,
|
|
7468
|
+
return /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
7469
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
7428
7470
|
Input_default,
|
|
7429
7471
|
{
|
|
7430
7472
|
value: formatDate(value),
|
|
7431
7473
|
placeholder,
|
|
7432
|
-
suffix: /* @__PURE__ */ (0,
|
|
7474
|
+
suffix: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(CalenderIcon_default, {}),
|
|
7433
7475
|
disabled,
|
|
7434
7476
|
readOnly: true
|
|
7435
7477
|
}
|
|
7436
7478
|
) }),
|
|
7437
|
-
/* @__PURE__ */ (0,
|
|
7438
|
-
/* @__PURE__ */ (0,
|
|
7479
|
+
/* @__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: [
|
|
7480
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
7439
7481
|
SingleDatePicker_default,
|
|
7440
7482
|
{
|
|
7441
7483
|
value: tempDate,
|
|
@@ -7445,9 +7487,9 @@ var InputDatePicker = (props) => {
|
|
|
7445
7487
|
locale
|
|
7446
7488
|
}
|
|
7447
7489
|
) }),
|
|
7448
|
-
/* @__PURE__ */ (0,
|
|
7449
|
-
/* @__PURE__ */ (0,
|
|
7450
|
-
/* @__PURE__ */ (0,
|
|
7490
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
7491
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
7492
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7451
7493
|
] })
|
|
7452
7494
|
] }) })
|
|
7453
7495
|
] });
|
|
@@ -7456,20 +7498,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
7456
7498
|
var InputDatePicker_default = InputDatePicker;
|
|
7457
7499
|
|
|
7458
7500
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7459
|
-
var
|
|
7501
|
+
var import_react16 = __toESM(require("react"), 1);
|
|
7460
7502
|
|
|
7461
7503
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7462
|
-
var
|
|
7504
|
+
var import_react15 = __toESM(require("react"), 1);
|
|
7463
7505
|
|
|
7464
7506
|
// src/components/Tab/Tab.tsx
|
|
7465
|
-
var
|
|
7507
|
+
var import_react14 = __toESM(require("react"), 1);
|
|
7466
7508
|
|
|
7467
7509
|
// src/components/Tab/TabItem.tsx
|
|
7468
|
-
var
|
|
7469
|
-
var
|
|
7470
|
-
var TabItem =
|
|
7510
|
+
var import_react13 = __toESM(require("react"), 1);
|
|
7511
|
+
var import_jsx_runtime315 = require("react/jsx-runtime");
|
|
7512
|
+
var TabItem = import_react13.default.forwardRef((props, ref) => {
|
|
7471
7513
|
const { isActive, title, onClick } = props;
|
|
7472
|
-
return /* @__PURE__ */ (0,
|
|
7514
|
+
return /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
7473
7515
|
"div",
|
|
7474
7516
|
{
|
|
7475
7517
|
ref,
|
|
@@ -7483,25 +7525,25 @@ TabItem.displayName = "TabItem";
|
|
|
7483
7525
|
var TabItem_default = TabItem;
|
|
7484
7526
|
|
|
7485
7527
|
// src/components/Tab/Tab.tsx
|
|
7486
|
-
var
|
|
7528
|
+
var import_jsx_runtime316 = require("react/jsx-runtime");
|
|
7487
7529
|
var Tab = (props) => {
|
|
7488
7530
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
7489
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
7531
|
+
const [underlineStyle, setUnderlineStyle] = import_react14.default.useState({
|
|
7490
7532
|
left: 0,
|
|
7491
7533
|
width: 0
|
|
7492
7534
|
});
|
|
7493
|
-
const itemRefs =
|
|
7535
|
+
const itemRefs = import_react14.default.useRef([]);
|
|
7494
7536
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
7495
7537
|
onChange(tabItem, tabIdx);
|
|
7496
7538
|
};
|
|
7497
|
-
|
|
7539
|
+
import_react14.default.useEffect(() => {
|
|
7498
7540
|
const el = itemRefs.current[activeIndex];
|
|
7499
7541
|
if (el) {
|
|
7500
7542
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
7501
7543
|
}
|
|
7502
7544
|
}, [activeIndex, tabs.length]);
|
|
7503
|
-
return /* @__PURE__ */ (0,
|
|
7504
|
-
tabs.map((tab, idx) => /* @__PURE__ */ (0,
|
|
7545
|
+
return /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
7546
|
+
tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
7505
7547
|
TabItem_default,
|
|
7506
7548
|
{
|
|
7507
7549
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -7513,7 +7555,7 @@ var Tab = (props) => {
|
|
|
7513
7555
|
},
|
|
7514
7556
|
`${tab.value}_${idx}`
|
|
7515
7557
|
)),
|
|
7516
|
-
type === "toggle" && /* @__PURE__ */ (0,
|
|
7558
|
+
type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
7517
7559
|
"div",
|
|
7518
7560
|
{
|
|
7519
7561
|
className: "tab-toggle-underline",
|
|
@@ -7529,7 +7571,7 @@ Tab.displayName = "Tab";
|
|
|
7529
7571
|
var Tab_default = Tab;
|
|
7530
7572
|
|
|
7531
7573
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7532
|
-
var
|
|
7574
|
+
var import_jsx_runtime317 = require("react/jsx-runtime");
|
|
7533
7575
|
var RangePicker = (props) => {
|
|
7534
7576
|
const {
|
|
7535
7577
|
startDate,
|
|
@@ -7539,7 +7581,7 @@ var RangePicker = (props) => {
|
|
|
7539
7581
|
maxDate,
|
|
7540
7582
|
locale = "ko"
|
|
7541
7583
|
} = props;
|
|
7542
|
-
const [activeTab, setActiveTab] =
|
|
7584
|
+
const [activeTab, setActiveTab] = import_react15.default.useState("start");
|
|
7543
7585
|
const handleStartChange = (date) => {
|
|
7544
7586
|
if (!date) return;
|
|
7545
7587
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -7552,8 +7594,8 @@ var RangePicker = (props) => {
|
|
|
7552
7594
|
};
|
|
7553
7595
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
7554
7596
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
7555
|
-
return /* @__PURE__ */ (0,
|
|
7556
|
-
/* @__PURE__ */ (0,
|
|
7597
|
+
return /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
7598
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
7557
7599
|
Tab_default,
|
|
7558
7600
|
{
|
|
7559
7601
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -7566,8 +7608,8 @@ var RangePicker = (props) => {
|
|
|
7566
7608
|
size: "sm"
|
|
7567
7609
|
}
|
|
7568
7610
|
) }),
|
|
7569
|
-
/* @__PURE__ */ (0,
|
|
7570
|
-
/* @__PURE__ */ (0,
|
|
7611
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "datepicker-range-panels", children: [
|
|
7612
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
7571
7613
|
SingleDatePicker_default,
|
|
7572
7614
|
{
|
|
7573
7615
|
value: startDate,
|
|
@@ -7579,7 +7621,7 @@ var RangePicker = (props) => {
|
|
|
7579
7621
|
locale
|
|
7580
7622
|
}
|
|
7581
7623
|
),
|
|
7582
|
-
/* @__PURE__ */ (0,
|
|
7624
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
7583
7625
|
SingleDatePicker_default,
|
|
7584
7626
|
{
|
|
7585
7627
|
value: endDate,
|
|
@@ -7592,7 +7634,7 @@ var RangePicker = (props) => {
|
|
|
7592
7634
|
}
|
|
7593
7635
|
)
|
|
7594
7636
|
] }),
|
|
7595
|
-
/* @__PURE__ */ (0,
|
|
7637
|
+
/* @__PURE__ */ (0, import_jsx_runtime317.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
7596
7638
|
SingleDatePicker_default,
|
|
7597
7639
|
{
|
|
7598
7640
|
value: startDate,
|
|
@@ -7603,7 +7645,7 @@ var RangePicker = (props) => {
|
|
|
7603
7645
|
rangeEnd: endDate,
|
|
7604
7646
|
locale
|
|
7605
7647
|
}
|
|
7606
|
-
) : /* @__PURE__ */ (0,
|
|
7648
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
7607
7649
|
SingleDatePicker_default,
|
|
7608
7650
|
{
|
|
7609
7651
|
value: endDate,
|
|
@@ -7621,10 +7663,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
7621
7663
|
var RangePicker_default = RangePicker;
|
|
7622
7664
|
|
|
7623
7665
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7624
|
-
var
|
|
7666
|
+
var import_jsx_runtime318 = require("react/jsx-runtime");
|
|
7625
7667
|
var PopupPicker = (props) => {
|
|
7626
7668
|
const { component, type, locale } = props;
|
|
7627
|
-
const [isOpen, setIsOpen] =
|
|
7669
|
+
const [isOpen, setIsOpen] = import_react16.default.useState(false);
|
|
7628
7670
|
const handleClick = () => setIsOpen(true);
|
|
7629
7671
|
const handleClose = () => setIsOpen(false);
|
|
7630
7672
|
const handleSingleChange = (date) => {
|
|
@@ -7632,11 +7674,11 @@ var PopupPicker = (props) => {
|
|
|
7632
7674
|
props.onChange?.(date);
|
|
7633
7675
|
handleClose();
|
|
7634
7676
|
};
|
|
7635
|
-
return /* @__PURE__ */ (0,
|
|
7636
|
-
|
|
7637
|
-
/* @__PURE__ */ (0,
|
|
7638
|
-
/* @__PURE__ */ (0,
|
|
7639
|
-
type === "single" && /* @__PURE__ */ (0,
|
|
7677
|
+
return /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
7678
|
+
import_react16.default.cloneElement(component, { onClick: handleClick }),
|
|
7679
|
+
/* @__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: [
|
|
7680
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "popup-datepicker-content", children: [
|
|
7681
|
+
type === "single" && /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
7640
7682
|
SingleDatePicker_default,
|
|
7641
7683
|
{
|
|
7642
7684
|
value: props.value,
|
|
@@ -7646,7 +7688,7 @@ var PopupPicker = (props) => {
|
|
|
7646
7688
|
locale
|
|
7647
7689
|
}
|
|
7648
7690
|
),
|
|
7649
|
-
type === "range" && /* @__PURE__ */ (0,
|
|
7691
|
+
type === "range" && /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
7650
7692
|
RangePicker_default,
|
|
7651
7693
|
{
|
|
7652
7694
|
startDate: props.startDate,
|
|
@@ -7658,8 +7700,8 @@ var PopupPicker = (props) => {
|
|
|
7658
7700
|
}
|
|
7659
7701
|
)
|
|
7660
7702
|
] }),
|
|
7661
|
-
/* @__PURE__ */ (0,
|
|
7662
|
-
/* @__PURE__ */ (0,
|
|
7703
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
7704
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
7663
7705
|
Button_default,
|
|
7664
7706
|
{
|
|
7665
7707
|
type: "secondary",
|
|
@@ -7667,7 +7709,7 @@ var PopupPicker = (props) => {
|
|
|
7667
7709
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
7668
7710
|
}
|
|
7669
7711
|
),
|
|
7670
|
-
/* @__PURE__ */ (0,
|
|
7712
|
+
/* @__PURE__ */ (0, import_jsx_runtime318.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7671
7713
|
] })
|
|
7672
7714
|
] }) })
|
|
7673
7715
|
] });
|
|
@@ -7676,10 +7718,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
7676
7718
|
var PopupPicker_default = PopupPicker;
|
|
7677
7719
|
|
|
7678
7720
|
// src/components/Divider/Divider.tsx
|
|
7679
|
-
var
|
|
7721
|
+
var import_jsx_runtime319 = require("react/jsx-runtime");
|
|
7680
7722
|
var Divider = (props) => {
|
|
7681
7723
|
const { orientation = "horizontal" } = props;
|
|
7682
|
-
return /* @__PURE__ */ (0,
|
|
7724
|
+
return /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7683
7725
|
"div",
|
|
7684
7726
|
{
|
|
7685
7727
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -7692,15 +7734,15 @@ Divider.displayName = "Divider";
|
|
|
7692
7734
|
var Divider_default = Divider;
|
|
7693
7735
|
|
|
7694
7736
|
// src/components/Drawer/Drawer.tsx
|
|
7695
|
-
var
|
|
7696
|
-
var
|
|
7697
|
-
var
|
|
7737
|
+
var import_react17 = __toESM(require("react"), 1);
|
|
7738
|
+
var import_react_dom3 = require("react-dom");
|
|
7739
|
+
var import_jsx_runtime320 = require("react/jsx-runtime");
|
|
7698
7740
|
var ANIMATION_DURATION_MS2 = 250;
|
|
7699
7741
|
var Drawer = (props) => {
|
|
7700
7742
|
const { isOpen, onClose, placement = "right", width = 320, title, children } = props;
|
|
7701
|
-
const [mounted, setMounted] =
|
|
7702
|
-
const [visible, setVisible] =
|
|
7703
|
-
|
|
7743
|
+
const [mounted, setMounted] = import_react17.default.useState(false);
|
|
7744
|
+
const [visible, setVisible] = import_react17.default.useState(false);
|
|
7745
|
+
import_react17.default.useEffect(() => {
|
|
7704
7746
|
if (isOpen) {
|
|
7705
7747
|
setMounted(true);
|
|
7706
7748
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7714,13 +7756,13 @@ var Drawer = (props) => {
|
|
|
7714
7756
|
if (!mounted) return null;
|
|
7715
7757
|
const stateClass = visible ? "enter" : "exit";
|
|
7716
7758
|
const widthValue = typeof width === "number" ? `${width}px` : width;
|
|
7717
|
-
return (0,
|
|
7718
|
-
/* @__PURE__ */ (0,
|
|
7759
|
+
return (0, import_react_dom3.createPortal)(
|
|
7760
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
7719
7761
|
"div",
|
|
7720
7762
|
{
|
|
7721
7763
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
7722
7764
|
onClick: onClose,
|
|
7723
|
-
children: /* @__PURE__ */ (0,
|
|
7765
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)(
|
|
7724
7766
|
"div",
|
|
7725
7767
|
{
|
|
7726
7768
|
className: clsx_default("lib-xplat-drawer", placement, stateClass),
|
|
@@ -7729,11 +7771,11 @@ var Drawer = (props) => {
|
|
|
7729
7771
|
"aria-modal": "true",
|
|
7730
7772
|
onClick: (e) => e.stopPropagation(),
|
|
7731
7773
|
children: [
|
|
7732
|
-
title && /* @__PURE__ */ (0,
|
|
7733
|
-
/* @__PURE__ */ (0,
|
|
7734
|
-
/* @__PURE__ */ (0,
|
|
7774
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "drawer-header", children: [
|
|
7775
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)("span", { className: "drawer-title", children: title }),
|
|
7776
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
7735
7777
|
] }),
|
|
7736
|
-
/* @__PURE__ */ (0,
|
|
7778
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)("div", { className: "drawer-body", children })
|
|
7737
7779
|
]
|
|
7738
7780
|
}
|
|
7739
7781
|
)
|
|
@@ -7746,16 +7788,16 @@ Drawer.displayName = "Drawer";
|
|
|
7746
7788
|
var Drawer_default = Drawer;
|
|
7747
7789
|
|
|
7748
7790
|
// src/components/Dropdown/Dropdown.tsx
|
|
7749
|
-
var
|
|
7791
|
+
var import_react20 = __toESM(require("react"), 1);
|
|
7750
7792
|
|
|
7751
7793
|
// src/tokens/hooks/useAutoPosition.ts
|
|
7752
|
-
var
|
|
7794
|
+
var import_react18 = __toESM(require("react"), 1);
|
|
7753
7795
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
7754
|
-
const [position, setPosition] =
|
|
7796
|
+
const [position, setPosition] = import_react18.default.useState({
|
|
7755
7797
|
position: {},
|
|
7756
7798
|
direction: "bottom"
|
|
7757
7799
|
});
|
|
7758
|
-
const calculatePosition =
|
|
7800
|
+
const calculatePosition = import_react18.default.useCallback(() => {
|
|
7759
7801
|
if (!triggerRef.current || !popRef.current) return;
|
|
7760
7802
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
7761
7803
|
const popRect = popRef.current.getBoundingClientRect();
|
|
@@ -7779,12 +7821,15 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7779
7821
|
direction
|
|
7780
7822
|
});
|
|
7781
7823
|
}, [triggerRef, popRef]);
|
|
7782
|
-
|
|
7824
|
+
import_react18.default.useEffect(() => {
|
|
7783
7825
|
if (!enabled) return;
|
|
7784
|
-
|
|
7826
|
+
const raf = requestAnimationFrame(() => {
|
|
7827
|
+
calculatePosition();
|
|
7828
|
+
});
|
|
7785
7829
|
window.addEventListener("resize", calculatePosition);
|
|
7786
7830
|
window.addEventListener("scroll", calculatePosition, true);
|
|
7787
7831
|
return () => {
|
|
7832
|
+
cancelAnimationFrame(raf);
|
|
7788
7833
|
window.removeEventListener("resize", calculatePosition);
|
|
7789
7834
|
window.removeEventListener("scroll", calculatePosition, true);
|
|
7790
7835
|
};
|
|
@@ -7794,9 +7839,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7794
7839
|
var useAutoPosition_default = useAutoPosition;
|
|
7795
7840
|
|
|
7796
7841
|
// src/tokens/hooks/useClickOutside.ts
|
|
7797
|
-
var
|
|
7842
|
+
var import_react19 = __toESM(require("react"), 1);
|
|
7798
7843
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
7799
|
-
|
|
7844
|
+
import_react19.default.useEffect(() => {
|
|
7800
7845
|
if (!enabled) return;
|
|
7801
7846
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
7802
7847
|
const listener = (event) => {
|
|
@@ -7819,17 +7864,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
7819
7864
|
var useClickOutside_default = useClickOutside;
|
|
7820
7865
|
|
|
7821
7866
|
// src/components/Dropdown/Dropdown.tsx
|
|
7822
|
-
var
|
|
7867
|
+
var import_jsx_runtime321 = require("react/jsx-runtime");
|
|
7823
7868
|
var Dropdown = (props) => {
|
|
7824
7869
|
const { items, children } = props;
|
|
7825
|
-
const [isOpen, setIsOpen] =
|
|
7826
|
-
const [mounted, setMounted] =
|
|
7827
|
-
const [visible, setVisible] =
|
|
7828
|
-
const triggerRef =
|
|
7829
|
-
const menuRef =
|
|
7830
|
-
const { position, direction } = useAutoPosition_default(triggerRef, menuRef,
|
|
7831
|
-
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false));
|
|
7832
|
-
|
|
7870
|
+
const [isOpen, setIsOpen] = import_react20.default.useState(false);
|
|
7871
|
+
const [mounted, setMounted] = import_react20.default.useState(false);
|
|
7872
|
+
const [visible, setVisible] = import_react20.default.useState(false);
|
|
7873
|
+
const triggerRef = import_react20.default.useRef(null);
|
|
7874
|
+
const menuRef = import_react20.default.useRef(null);
|
|
7875
|
+
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
7876
|
+
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
7877
|
+
import_react20.default.useEffect(() => {
|
|
7833
7878
|
if (isOpen) {
|
|
7834
7879
|
setMounted(true);
|
|
7835
7880
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7844,8 +7889,8 @@ var Dropdown = (props) => {
|
|
|
7844
7889
|
item.onClick?.();
|
|
7845
7890
|
setIsOpen(false);
|
|
7846
7891
|
};
|
|
7847
|
-
return /* @__PURE__ */ (0,
|
|
7848
|
-
/* @__PURE__ */ (0,
|
|
7892
|
+
return /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "lib-xplat-dropdown", children: [
|
|
7893
|
+
/* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
7849
7894
|
"div",
|
|
7850
7895
|
{
|
|
7851
7896
|
ref: triggerRef,
|
|
@@ -7854,14 +7899,14 @@ var Dropdown = (props) => {
|
|
|
7854
7899
|
children
|
|
7855
7900
|
}
|
|
7856
7901
|
),
|
|
7857
|
-
mounted && /* @__PURE__ */ (0,
|
|
7902
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
7858
7903
|
"div",
|
|
7859
7904
|
{
|
|
7860
7905
|
ref: menuRef,
|
|
7861
|
-
className: clsx_default("dropdown-menu", direction, { visible }),
|
|
7906
|
+
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
7862
7907
|
style: { top: position.top, left: position.left },
|
|
7863
7908
|
role: "menu",
|
|
7864
|
-
children: items.map((item) => /* @__PURE__ */ (0,
|
|
7909
|
+
children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
7865
7910
|
"button",
|
|
7866
7911
|
{
|
|
7867
7912
|
className: clsx_default("dropdown-item", {
|
|
@@ -7876,30 +7921,30 @@ var Dropdown = (props) => {
|
|
|
7876
7921
|
item.key
|
|
7877
7922
|
))
|
|
7878
7923
|
}
|
|
7879
|
-
)
|
|
7924
|
+
) })
|
|
7880
7925
|
] });
|
|
7881
7926
|
};
|
|
7882
7927
|
Dropdown.displayName = "Dropdown";
|
|
7883
7928
|
var Dropdown_default = Dropdown;
|
|
7884
7929
|
|
|
7885
7930
|
// src/components/EmptyState/EmptyState.tsx
|
|
7886
|
-
var
|
|
7931
|
+
var import_jsx_runtime322 = require("react/jsx-runtime");
|
|
7887
7932
|
var EmptyState = (props) => {
|
|
7888
7933
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
7889
|
-
return /* @__PURE__ */ (0,
|
|
7890
|
-
icon && /* @__PURE__ */ (0,
|
|
7891
|
-
!icon && /* @__PURE__ */ (0,
|
|
7892
|
-
/* @__PURE__ */ (0,
|
|
7893
|
-
description && /* @__PURE__ */ (0,
|
|
7894
|
-
action && /* @__PURE__ */ (0,
|
|
7934
|
+
return /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)("div", { className: "lib-xplat-empty-state", children: [
|
|
7935
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "empty-icon", children: icon }),
|
|
7936
|
+
!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" }) }) }),
|
|
7937
|
+
/* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "empty-title", children: title }),
|
|
7938
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "empty-description", children: description }),
|
|
7939
|
+
action && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "empty-action", children: action })
|
|
7895
7940
|
] });
|
|
7896
7941
|
};
|
|
7897
7942
|
EmptyState.displayName = "EmptyState";
|
|
7898
7943
|
var EmptyState_default = EmptyState;
|
|
7899
7944
|
|
|
7900
7945
|
// src/components/FileUpload/FileUpload.tsx
|
|
7901
|
-
var
|
|
7902
|
-
var
|
|
7946
|
+
var import_react21 = __toESM(require("react"), 1);
|
|
7947
|
+
var import_jsx_runtime323 = require("react/jsx-runtime");
|
|
7903
7948
|
var FileUpload = (props) => {
|
|
7904
7949
|
const {
|
|
7905
7950
|
accept,
|
|
@@ -7909,8 +7954,8 @@ var FileUpload = (props) => {
|
|
|
7909
7954
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
7910
7955
|
description
|
|
7911
7956
|
} = props;
|
|
7912
|
-
const [isDragOver, setIsDragOver] =
|
|
7913
|
-
const inputRef =
|
|
7957
|
+
const [isDragOver, setIsDragOver] = import_react21.default.useState(false);
|
|
7958
|
+
const inputRef = import_react21.default.useRef(null);
|
|
7914
7959
|
const handleFiles = (fileList) => {
|
|
7915
7960
|
let files = Array.from(fileList);
|
|
7916
7961
|
if (maxSize) {
|
|
@@ -7940,7 +7985,7 @@ var FileUpload = (props) => {
|
|
|
7940
7985
|
handleFiles(e.target.files);
|
|
7941
7986
|
}
|
|
7942
7987
|
};
|
|
7943
|
-
return /* @__PURE__ */ (0,
|
|
7988
|
+
return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)(
|
|
7944
7989
|
"div",
|
|
7945
7990
|
{
|
|
7946
7991
|
className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
|
|
@@ -7949,7 +7994,7 @@ var FileUpload = (props) => {
|
|
|
7949
7994
|
onDragLeave: handleDragLeave,
|
|
7950
7995
|
onClick: () => inputRef.current?.click(),
|
|
7951
7996
|
children: [
|
|
7952
|
-
/* @__PURE__ */ (0,
|
|
7997
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
7953
7998
|
"input",
|
|
7954
7999
|
{
|
|
7955
8000
|
ref: inputRef,
|
|
@@ -7959,9 +8004,9 @@ var FileUpload = (props) => {
|
|
|
7959
8004
|
onChange: handleChange
|
|
7960
8005
|
}
|
|
7961
8006
|
),
|
|
7962
|
-
/* @__PURE__ */ (0,
|
|
7963
|
-
/* @__PURE__ */ (0,
|
|
7964
|
-
description && /* @__PURE__ */ (0,
|
|
8007
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(UploadIcon_default, {}) }),
|
|
8008
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)("p", { className: "upload-label", children: label }),
|
|
8009
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("p", { className: "upload-description", children: description })
|
|
7965
8010
|
]
|
|
7966
8011
|
}
|
|
7967
8012
|
);
|
|
@@ -7970,10 +8015,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
7970
8015
|
var FileUpload_default = FileUpload;
|
|
7971
8016
|
|
|
7972
8017
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
7973
|
-
var
|
|
8018
|
+
var import_react23 = __toESM(require("react"), 1);
|
|
7974
8019
|
|
|
7975
8020
|
// src/components/HtmlTypeWriter/utils.ts
|
|
7976
|
-
var
|
|
8021
|
+
var import_react22 = __toESM(require("react"), 1);
|
|
7977
8022
|
var voidTags = /* @__PURE__ */ new Set([
|
|
7978
8023
|
"br",
|
|
7979
8024
|
"img",
|
|
@@ -8041,41 +8086,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
8041
8086
|
props[attr.name] = attr.value;
|
|
8042
8087
|
});
|
|
8043
8088
|
if (voidTags.has(tag)) {
|
|
8044
|
-
return
|
|
8089
|
+
return import_react22.default.createElement(tag, props);
|
|
8045
8090
|
}
|
|
8046
8091
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
8047
|
-
return
|
|
8092
|
+
return import_react22.default.createElement(tag, props, ...children);
|
|
8048
8093
|
};
|
|
8049
8094
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
8050
8095
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
8051
8096
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
8052
|
-
return node == null ? null :
|
|
8097
|
+
return node == null ? null : import_react22.default.createElement(import_react22.default.Fragment, { key: idx }, node);
|
|
8053
8098
|
}).filter(Boolean);
|
|
8054
8099
|
return nodes.length === 0 ? null : nodes;
|
|
8055
8100
|
};
|
|
8056
8101
|
|
|
8057
8102
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
8058
|
-
var
|
|
8103
|
+
var import_jsx_runtime324 = require("react/jsx-runtime");
|
|
8059
8104
|
var HtmlTypeWriter = ({
|
|
8060
8105
|
html,
|
|
8061
8106
|
duration = 20,
|
|
8062
8107
|
onDone,
|
|
8063
8108
|
onChange
|
|
8064
8109
|
}) => {
|
|
8065
|
-
const [typedLen, setTypedLen] =
|
|
8066
|
-
const doneCalledRef =
|
|
8067
|
-
const { doc, rangeMap, totalLength } =
|
|
8110
|
+
const [typedLen, setTypedLen] = import_react23.default.useState(0);
|
|
8111
|
+
const doneCalledRef = import_react23.default.useRef(false);
|
|
8112
|
+
const { doc, rangeMap, totalLength } = import_react23.default.useMemo(() => {
|
|
8068
8113
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
8069
8114
|
const decoded = decodeHtmlEntities(html);
|
|
8070
8115
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
8071
8116
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
8072
8117
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
8073
8118
|
}, [html]);
|
|
8074
|
-
|
|
8119
|
+
import_react23.default.useEffect(() => {
|
|
8075
8120
|
setTypedLen(0);
|
|
8076
8121
|
doneCalledRef.current = false;
|
|
8077
8122
|
}, [html]);
|
|
8078
|
-
|
|
8123
|
+
import_react23.default.useEffect(() => {
|
|
8079
8124
|
if (!totalLength) return;
|
|
8080
8125
|
if (typedLen >= totalLength) return;
|
|
8081
8126
|
const timer = window.setInterval(() => {
|
|
@@ -8083,33 +8128,33 @@ var HtmlTypeWriter = ({
|
|
|
8083
8128
|
}, duration);
|
|
8084
8129
|
return () => window.clearInterval(timer);
|
|
8085
8130
|
}, [typedLen, totalLength, duration]);
|
|
8086
|
-
|
|
8131
|
+
import_react23.default.useEffect(() => {
|
|
8087
8132
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
8088
8133
|
onChange?.();
|
|
8089
8134
|
}
|
|
8090
8135
|
}, [typedLen, totalLength, onChange]);
|
|
8091
|
-
|
|
8136
|
+
import_react23.default.useEffect(() => {
|
|
8092
8137
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
8093
8138
|
doneCalledRef.current = true;
|
|
8094
8139
|
onDone?.();
|
|
8095
8140
|
}
|
|
8096
8141
|
}, [typedLen, totalLength, onDone]);
|
|
8097
|
-
const parsed =
|
|
8142
|
+
const parsed = import_react23.default.useMemo(
|
|
8098
8143
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
8099
8144
|
[doc, typedLen, rangeMap]
|
|
8100
8145
|
);
|
|
8101
|
-
return /* @__PURE__ */ (0,
|
|
8146
|
+
return /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
8102
8147
|
};
|
|
8103
8148
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
8104
8149
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
8105
8150
|
|
|
8106
8151
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
8107
|
-
var
|
|
8108
|
-
var
|
|
8152
|
+
var import_react24 = __toESM(require("react"), 1);
|
|
8153
|
+
var import_jsx_runtime325 = require("react/jsx-runtime");
|
|
8109
8154
|
var ImageSelector = (props) => {
|
|
8110
8155
|
const { value, label, onChange } = props;
|
|
8111
|
-
const [previewUrl, setPreviewUrl] =
|
|
8112
|
-
|
|
8156
|
+
const [previewUrl, setPreviewUrl] = import_react24.default.useState();
|
|
8157
|
+
import_react24.default.useEffect(() => {
|
|
8113
8158
|
if (!value) {
|
|
8114
8159
|
setPreviewUrl(void 0);
|
|
8115
8160
|
return;
|
|
@@ -8118,7 +8163,7 @@ var ImageSelector = (props) => {
|
|
|
8118
8163
|
setPreviewUrl(url);
|
|
8119
8164
|
return () => URL.revokeObjectURL(url);
|
|
8120
8165
|
}, [value]);
|
|
8121
|
-
const inputRef =
|
|
8166
|
+
const inputRef = import_react24.default.useRef(null);
|
|
8122
8167
|
const handleFileChange = (e) => {
|
|
8123
8168
|
const selectedFile = e.target.files?.[0];
|
|
8124
8169
|
if (selectedFile) {
|
|
@@ -8131,8 +8176,8 @@ var ImageSelector = (props) => {
|
|
|
8131
8176
|
const handleOpenFileDialog = () => {
|
|
8132
8177
|
inputRef.current?.click();
|
|
8133
8178
|
};
|
|
8134
|
-
return /* @__PURE__ */ (0,
|
|
8135
|
-
/* @__PURE__ */ (0,
|
|
8179
|
+
return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
8180
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
8136
8181
|
"input",
|
|
8137
8182
|
{
|
|
8138
8183
|
type: "file",
|
|
@@ -8142,13 +8187,13 @@ var ImageSelector = (props) => {
|
|
|
8142
8187
|
ref: inputRef
|
|
8143
8188
|
}
|
|
8144
8189
|
),
|
|
8145
|
-
value && /* @__PURE__ */ (0,
|
|
8146
|
-
/* @__PURE__ */ (0,
|
|
8147
|
-
/* @__PURE__ */ (0,
|
|
8190
|
+
value && /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: "action-bar", children: [
|
|
8191
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(UploadIcon_default, {}) }),
|
|
8192
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(DeleteIcon_default, {}) })
|
|
8148
8193
|
] }),
|
|
8149
|
-
/* @__PURE__ */ (0,
|
|
8150
|
-
/* @__PURE__ */ (0,
|
|
8151
|
-
/* @__PURE__ */ (0,
|
|
8194
|
+
/* @__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: [
|
|
8195
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(ImageIcon_default, {}) }),
|
|
8196
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
8152
8197
|
] }) })
|
|
8153
8198
|
] });
|
|
8154
8199
|
};
|
|
@@ -8156,7 +8201,7 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
8156
8201
|
var ImageSelector_default = ImageSelector;
|
|
8157
8202
|
|
|
8158
8203
|
// src/components/Pagination/Pagination.tsx
|
|
8159
|
-
var
|
|
8204
|
+
var import_jsx_runtime326 = require("react/jsx-runtime");
|
|
8160
8205
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
8161
8206
|
const totalNumbers = siblingCount * 2 + 5;
|
|
8162
8207
|
if (totalPages <= totalNumbers) {
|
|
@@ -8199,19 +8244,19 @@ var Pagination = (props) => {
|
|
|
8199
8244
|
onChange?.(page);
|
|
8200
8245
|
}
|
|
8201
8246
|
};
|
|
8202
|
-
return /* @__PURE__ */ (0,
|
|
8203
|
-
/* @__PURE__ */ (0,
|
|
8247
|
+
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: [
|
|
8248
|
+
/* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
|
|
8204
8249
|
"button",
|
|
8205
8250
|
{
|
|
8206
8251
|
className: "page-btn prev",
|
|
8207
8252
|
disabled: current <= 1,
|
|
8208
8253
|
onClick: () => handleClick(current - 1),
|
|
8209
8254
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
8210
|
-
children: /* @__PURE__ */ (0,
|
|
8255
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(ChevronLeftIcon_default, {})
|
|
8211
8256
|
}
|
|
8212
8257
|
),
|
|
8213
8258
|
pages.map(
|
|
8214
|
-
(page, i) => page === "..." ? /* @__PURE__ */ (0,
|
|
8259
|
+
(page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
|
|
8215
8260
|
"button",
|
|
8216
8261
|
{
|
|
8217
8262
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -8222,14 +8267,14 @@ var Pagination = (props) => {
|
|
|
8222
8267
|
page
|
|
8223
8268
|
)
|
|
8224
8269
|
),
|
|
8225
|
-
/* @__PURE__ */ (0,
|
|
8270
|
+
/* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
|
|
8226
8271
|
"button",
|
|
8227
8272
|
{
|
|
8228
8273
|
className: "page-btn next",
|
|
8229
8274
|
disabled: current >= totalPages,
|
|
8230
8275
|
onClick: () => handleClick(current + 1),
|
|
8231
8276
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
8232
|
-
children: /* @__PURE__ */ (0,
|
|
8277
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(ChevronRightIcon_default, {})
|
|
8233
8278
|
}
|
|
8234
8279
|
)
|
|
8235
8280
|
] });
|
|
@@ -8238,17 +8283,17 @@ Pagination.displayName = "Pagination";
|
|
|
8238
8283
|
var Pagination_default = Pagination;
|
|
8239
8284
|
|
|
8240
8285
|
// src/components/PopOver/PopOver.tsx
|
|
8241
|
-
var
|
|
8242
|
-
var
|
|
8286
|
+
var import_react25 = __toESM(require("react"), 1);
|
|
8287
|
+
var import_jsx_runtime327 = require("react/jsx-runtime");
|
|
8243
8288
|
var PopOver = (props) => {
|
|
8244
8289
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
8245
|
-
const popRef =
|
|
8246
|
-
const triggerRef =
|
|
8247
|
-
const [localOpen, setLocalOpen] =
|
|
8248
|
-
const [eventTrigger, setEventTrigger] =
|
|
8290
|
+
const popRef = import_react25.default.useRef(null);
|
|
8291
|
+
const triggerRef = import_react25.default.useRef(null);
|
|
8292
|
+
const [localOpen, setLocalOpen] = import_react25.default.useState(false);
|
|
8293
|
+
const [eventTrigger, setEventTrigger] = import_react25.default.useState(false);
|
|
8249
8294
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
8250
8295
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
8251
|
-
|
|
8296
|
+
import_react25.default.useEffect(() => {
|
|
8252
8297
|
if (isOpen) {
|
|
8253
8298
|
setLocalOpen(isOpen);
|
|
8254
8299
|
setTimeout(() => {
|
|
@@ -8261,7 +8306,7 @@ var PopOver = (props) => {
|
|
|
8261
8306
|
}, 200);
|
|
8262
8307
|
}
|
|
8263
8308
|
}, [isOpen]);
|
|
8264
|
-
return /* @__PURE__ */ (0,
|
|
8309
|
+
return /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)(
|
|
8265
8310
|
"div",
|
|
8266
8311
|
{
|
|
8267
8312
|
className: "lib-xplat-pop-over",
|
|
@@ -8271,11 +8316,11 @@ var PopOver = (props) => {
|
|
|
8271
8316
|
},
|
|
8272
8317
|
children: [
|
|
8273
8318
|
children,
|
|
8274
|
-
localOpen && /* @__PURE__ */ (0,
|
|
8319
|
+
localOpen && /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
|
|
8275
8320
|
"div",
|
|
8276
8321
|
{
|
|
8277
8322
|
className: clsx_default(
|
|
8278
|
-
"content
|
|
8323
|
+
"lib-xplat-pop-over-content",
|
|
8279
8324
|
position.direction,
|
|
8280
8325
|
eventTrigger && "visible"
|
|
8281
8326
|
),
|
|
@@ -8285,7 +8330,7 @@ var PopOver = (props) => {
|
|
|
8285
8330
|
},
|
|
8286
8331
|
children: PopOverEl
|
|
8287
8332
|
}
|
|
8288
|
-
)
|
|
8333
|
+
) })
|
|
8289
8334
|
]
|
|
8290
8335
|
}
|
|
8291
8336
|
);
|
|
@@ -8294,7 +8339,7 @@ PopOver.displayName = "PopOver";
|
|
|
8294
8339
|
var PopOver_default = PopOver;
|
|
8295
8340
|
|
|
8296
8341
|
// src/components/Progress/Progress.tsx
|
|
8297
|
-
var
|
|
8342
|
+
var import_jsx_runtime328 = require("react/jsx-runtime");
|
|
8298
8343
|
var Progress = (props) => {
|
|
8299
8344
|
const {
|
|
8300
8345
|
value,
|
|
@@ -8304,8 +8349,8 @@ var Progress = (props) => {
|
|
|
8304
8349
|
showLabel = false
|
|
8305
8350
|
} = props;
|
|
8306
8351
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
8307
|
-
return /* @__PURE__ */ (0,
|
|
8308
|
-
/* @__PURE__ */ (0,
|
|
8352
|
+
return /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
8353
|
+
/* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
|
|
8309
8354
|
"div",
|
|
8310
8355
|
{
|
|
8311
8356
|
className: "track",
|
|
@@ -8313,7 +8358,7 @@ var Progress = (props) => {
|
|
|
8313
8358
|
"aria-valuenow": value,
|
|
8314
8359
|
"aria-valuemin": 0,
|
|
8315
8360
|
"aria-valuemax": max,
|
|
8316
|
-
children: /* @__PURE__ */ (0,
|
|
8361
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
|
|
8317
8362
|
"div",
|
|
8318
8363
|
{
|
|
8319
8364
|
className: "bar",
|
|
@@ -8322,7 +8367,7 @@ var Progress = (props) => {
|
|
|
8322
8367
|
)
|
|
8323
8368
|
}
|
|
8324
8369
|
),
|
|
8325
|
-
showLabel && /* @__PURE__ */ (0,
|
|
8370
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("span", { className: "label", children: [
|
|
8326
8371
|
Math.round(percentage),
|
|
8327
8372
|
"%"
|
|
8328
8373
|
] })
|
|
@@ -8332,17 +8377,17 @@ Progress.displayName = "Progress";
|
|
|
8332
8377
|
var Progress_default = Progress;
|
|
8333
8378
|
|
|
8334
8379
|
// src/components/Radio/RadioGroupContext.tsx
|
|
8335
|
-
var
|
|
8336
|
-
var RadioGroupContext =
|
|
8380
|
+
var import_react26 = __toESM(require("react"), 1);
|
|
8381
|
+
var RadioGroupContext = import_react26.default.createContext(
|
|
8337
8382
|
null
|
|
8338
8383
|
);
|
|
8339
8384
|
var useRadioGroupContext = () => {
|
|
8340
|
-
return
|
|
8385
|
+
return import_react26.default.useContext(RadioGroupContext);
|
|
8341
8386
|
};
|
|
8342
8387
|
var RadioGroupContext_default = RadioGroupContext;
|
|
8343
8388
|
|
|
8344
8389
|
// src/components/Radio/Radio.tsx
|
|
8345
|
-
var
|
|
8390
|
+
var import_jsx_runtime329 = require("react/jsx-runtime");
|
|
8346
8391
|
var Radio = (props) => {
|
|
8347
8392
|
const {
|
|
8348
8393
|
label,
|
|
@@ -8360,7 +8405,7 @@ var Radio = (props) => {
|
|
|
8360
8405
|
value,
|
|
8361
8406
|
onChange: rest.onChange
|
|
8362
8407
|
};
|
|
8363
|
-
return /* @__PURE__ */ (0,
|
|
8408
|
+
return /* @__PURE__ */ (0, import_jsx_runtime329.jsxs)(
|
|
8364
8409
|
"label",
|
|
8365
8410
|
{
|
|
8366
8411
|
className: clsx_default(
|
|
@@ -8370,18 +8415,18 @@ var Radio = (props) => {
|
|
|
8370
8415
|
localChecked ? "checked" : void 0
|
|
8371
8416
|
),
|
|
8372
8417
|
children: [
|
|
8373
|
-
/* @__PURE__ */ (0,
|
|
8374
|
-
/* @__PURE__ */ (0,
|
|
8418
|
+
/* @__PURE__ */ (0, import_jsx_runtime329.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
8419
|
+
/* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
|
|
8375
8420
|
"div",
|
|
8376
8421
|
{
|
|
8377
8422
|
className: clsx_default(
|
|
8378
8423
|
"circle",
|
|
8379
8424
|
localChecked ? "checked" : void 0
|
|
8380
8425
|
),
|
|
8381
|
-
children: localChecked && /* @__PURE__ */ (0,
|
|
8426
|
+
children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime329.jsx)("div", { className: "inner-circle" })
|
|
8382
8427
|
}
|
|
8383
8428
|
),
|
|
8384
|
-
label && /* @__PURE__ */ (0,
|
|
8429
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime329.jsx)("span", { children: label })
|
|
8385
8430
|
]
|
|
8386
8431
|
}
|
|
8387
8432
|
);
|
|
@@ -8390,28 +8435,28 @@ Radio.displayName = "Radio";
|
|
|
8390
8435
|
var Radio_default = Radio;
|
|
8391
8436
|
|
|
8392
8437
|
// src/components/Radio/RadioGroup.tsx
|
|
8393
|
-
var
|
|
8438
|
+
var import_jsx_runtime330 = require("react/jsx-runtime");
|
|
8394
8439
|
var RadioGroup = (props) => {
|
|
8395
8440
|
const { children, ...rest } = props;
|
|
8396
|
-
return /* @__PURE__ */ (0,
|
|
8441
|
+
return /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(import_jsx_runtime330.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
8397
8442
|
};
|
|
8398
8443
|
RadioGroup.displayName = "RadioGroup";
|
|
8399
8444
|
var RadioGroup_default = RadioGroup;
|
|
8400
8445
|
|
|
8401
8446
|
// src/components/Select/Select.tsx
|
|
8402
|
-
var
|
|
8447
|
+
var import_react29 = __toESM(require("react"), 1);
|
|
8403
8448
|
|
|
8404
8449
|
// src/components/Select/context.ts
|
|
8405
|
-
var
|
|
8406
|
-
var SelectContext =
|
|
8450
|
+
var import_react27 = __toESM(require("react"), 1);
|
|
8451
|
+
var SelectContext = import_react27.default.createContext(null);
|
|
8407
8452
|
var context_default = SelectContext;
|
|
8408
8453
|
|
|
8409
8454
|
// src/components/Select/SelectItem.tsx
|
|
8410
|
-
var
|
|
8411
|
-
var
|
|
8455
|
+
var import_react28 = __toESM(require("react"), 1);
|
|
8456
|
+
var import_jsx_runtime331 = require("react/jsx-runtime");
|
|
8412
8457
|
var SelectItem = (props) => {
|
|
8413
8458
|
const { children, value, onClick, disabled = false } = props;
|
|
8414
|
-
const ctx =
|
|
8459
|
+
const ctx = import_react28.default.useContext(context_default);
|
|
8415
8460
|
const handleClick = (e) => {
|
|
8416
8461
|
e.preventDefault();
|
|
8417
8462
|
e.stopPropagation();
|
|
@@ -8420,7 +8465,7 @@ var SelectItem = (props) => {
|
|
|
8420
8465
|
ctx?.close();
|
|
8421
8466
|
onClick?.();
|
|
8422
8467
|
};
|
|
8423
|
-
return /* @__PURE__ */ (0,
|
|
8468
|
+
return /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
|
|
8424
8469
|
"div",
|
|
8425
8470
|
{
|
|
8426
8471
|
className: clsx_default("select-item", disabled && "disabled"),
|
|
@@ -8441,7 +8486,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
8441
8486
|
var SelectItem_default = SelectItem;
|
|
8442
8487
|
|
|
8443
8488
|
// src/components/Select/Select.tsx
|
|
8444
|
-
var
|
|
8489
|
+
var import_jsx_runtime332 = require("react/jsx-runtime");
|
|
8445
8490
|
var ANIMATION_DURATION_MS3 = 200;
|
|
8446
8491
|
var SelectRoot = (props) => {
|
|
8447
8492
|
const {
|
|
@@ -8453,26 +8498,26 @@ var SelectRoot = (props) => {
|
|
|
8453
8498
|
error = false,
|
|
8454
8499
|
size = "md"
|
|
8455
8500
|
} = props;
|
|
8456
|
-
const itemChildren =
|
|
8457
|
-
(child) =>
|
|
8501
|
+
const itemChildren = import_react29.default.Children.toArray(children).filter(
|
|
8502
|
+
(child) => import_react29.default.isValidElement(child) && child.type === SelectItem_default
|
|
8458
8503
|
);
|
|
8459
8504
|
const isControlled = valueProp !== void 0;
|
|
8460
|
-
const [isOpen, setOpen] =
|
|
8461
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
8462
|
-
const controlledLabel =
|
|
8505
|
+
const [isOpen, setOpen] = import_react29.default.useState(false);
|
|
8506
|
+
const [uncontrolledLabel, setUncontrolledLabel] = import_react29.default.useState(null);
|
|
8507
|
+
const controlledLabel = import_react29.default.useMemo(() => {
|
|
8463
8508
|
if (!isControlled) return null;
|
|
8464
8509
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
8465
8510
|
return match ? match.props.children : null;
|
|
8466
8511
|
}, [isControlled, valueProp, itemChildren]);
|
|
8467
8512
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
8468
|
-
const triggerRef =
|
|
8469
|
-
const contentRef =
|
|
8470
|
-
const [mounted, setMounted] =
|
|
8471
|
-
const [visible, setVisible] =
|
|
8472
|
-
|
|
8513
|
+
const triggerRef = import_react29.default.useRef(null);
|
|
8514
|
+
const contentRef = import_react29.default.useRef(null);
|
|
8515
|
+
const [mounted, setMounted] = import_react29.default.useState(false);
|
|
8516
|
+
const [visible, setVisible] = import_react29.default.useState(false);
|
|
8517
|
+
import_react29.default.useEffect(() => {
|
|
8473
8518
|
if (disabled && isOpen) setOpen(false);
|
|
8474
8519
|
}, [disabled, isOpen]);
|
|
8475
|
-
|
|
8520
|
+
import_react29.default.useEffect(() => {
|
|
8476
8521
|
if (isOpen) {
|
|
8477
8522
|
setMounted(true);
|
|
8478
8523
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -8482,12 +8527,12 @@ var SelectRoot = (props) => {
|
|
|
8482
8527
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
8483
8528
|
return () => clearTimeout(t);
|
|
8484
8529
|
}, [isOpen]);
|
|
8485
|
-
const open =
|
|
8486
|
-
const close =
|
|
8487
|
-
const toggle =
|
|
8530
|
+
const open = import_react29.default.useCallback(() => setOpen(true), []);
|
|
8531
|
+
const close = import_react29.default.useCallback(() => setOpen(false), []);
|
|
8532
|
+
const toggle = import_react29.default.useCallback(() => setOpen((prev) => !prev), []);
|
|
8488
8533
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
8489
8534
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
8490
|
-
const setSelected =
|
|
8535
|
+
const setSelected = import_react29.default.useCallback(
|
|
8491
8536
|
(label, itemValue) => {
|
|
8492
8537
|
if (!isControlled) {
|
|
8493
8538
|
setUncontrolledLabel(label);
|
|
@@ -8496,7 +8541,7 @@ var SelectRoot = (props) => {
|
|
|
8496
8541
|
},
|
|
8497
8542
|
[isControlled, onChange]
|
|
8498
8543
|
);
|
|
8499
|
-
const ctxValue =
|
|
8544
|
+
const ctxValue = import_react29.default.useMemo(
|
|
8500
8545
|
() => ({
|
|
8501
8546
|
isOpen,
|
|
8502
8547
|
mounted,
|
|
@@ -8517,7 +8562,7 @@ var SelectRoot = (props) => {
|
|
|
8517
8562
|
if (disabled) return;
|
|
8518
8563
|
toggle();
|
|
8519
8564
|
};
|
|
8520
|
-
return /* @__PURE__ */ (0,
|
|
8565
|
+
return /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime332.jsxs)(
|
|
8521
8566
|
"div",
|
|
8522
8567
|
{
|
|
8523
8568
|
className: clsx_default(
|
|
@@ -8528,7 +8573,7 @@ var SelectRoot = (props) => {
|
|
|
8528
8573
|
mounted && "is-open"
|
|
8529
8574
|
),
|
|
8530
8575
|
children: [
|
|
8531
|
-
/* @__PURE__ */ (0,
|
|
8576
|
+
/* @__PURE__ */ (0, import_jsx_runtime332.jsxs)(
|
|
8532
8577
|
"div",
|
|
8533
8578
|
{
|
|
8534
8579
|
ref: triggerRef,
|
|
@@ -8552,7 +8597,7 @@ var SelectRoot = (props) => {
|
|
|
8552
8597
|
}
|
|
8553
8598
|
},
|
|
8554
8599
|
children: [
|
|
8555
|
-
/* @__PURE__ */ (0,
|
|
8600
|
+
/* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
|
|
8556
8601
|
"span",
|
|
8557
8602
|
{
|
|
8558
8603
|
className: clsx_default(
|
|
@@ -8562,27 +8607,27 @@ var SelectRoot = (props) => {
|
|
|
8562
8607
|
children: selectedLabel ?? placeholder
|
|
8563
8608
|
}
|
|
8564
8609
|
),
|
|
8565
|
-
/* @__PURE__ */ (0,
|
|
8610
|
+
/* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
|
|
8566
8611
|
"span",
|
|
8567
8612
|
{
|
|
8568
8613
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
8569
8614
|
"aria-hidden": true,
|
|
8570
|
-
children: /* @__PURE__ */ (0,
|
|
8615
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(ChevronDownIcon_default, {})
|
|
8571
8616
|
}
|
|
8572
8617
|
)
|
|
8573
8618
|
]
|
|
8574
8619
|
}
|
|
8575
8620
|
),
|
|
8576
|
-
mounted && /* @__PURE__ */ (0,
|
|
8621
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
|
|
8577
8622
|
"div",
|
|
8578
8623
|
{
|
|
8579
|
-
className: clsx_default("select-content", position.direction, stateClass),
|
|
8624
|
+
className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
|
|
8580
8625
|
ref: contentRef,
|
|
8581
8626
|
style: { ...position.position, minWidth: position.position.width },
|
|
8582
8627
|
role: "listbox",
|
|
8583
|
-
children: itemChildren
|
|
8628
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
8584
8629
|
}
|
|
8585
|
-
)
|
|
8630
|
+
) })
|
|
8586
8631
|
]
|
|
8587
8632
|
}
|
|
8588
8633
|
) });
|
|
@@ -8594,14 +8639,14 @@ var Select = Object.assign(SelectRoot, {
|
|
|
8594
8639
|
var Select_default = Select;
|
|
8595
8640
|
|
|
8596
8641
|
// src/components/Skeleton/Skeleton.tsx
|
|
8597
|
-
var
|
|
8642
|
+
var import_jsx_runtime333 = require("react/jsx-runtime");
|
|
8598
8643
|
var Skeleton = (props) => {
|
|
8599
8644
|
const { variant = "text", width, height } = props;
|
|
8600
8645
|
const style = {
|
|
8601
8646
|
width: typeof width === "number" ? `${width}px` : width,
|
|
8602
8647
|
height: typeof height === "number" ? `${height}px` : height
|
|
8603
8648
|
};
|
|
8604
|
-
return /* @__PURE__ */ (0,
|
|
8649
|
+
return /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
|
|
8605
8650
|
"div",
|
|
8606
8651
|
{
|
|
8607
8652
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -8614,20 +8659,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
8614
8659
|
var Skeleton_default = Skeleton;
|
|
8615
8660
|
|
|
8616
8661
|
// src/components/Spinner/Spinner.tsx
|
|
8617
|
-
var
|
|
8662
|
+
var import_jsx_runtime334 = require("react/jsx-runtime");
|
|
8618
8663
|
var Spinner = (props) => {
|
|
8619
8664
|
const {
|
|
8620
8665
|
size = "md",
|
|
8621
8666
|
type = "brand"
|
|
8622
8667
|
} = props;
|
|
8623
|
-
return /* @__PURE__ */ (0,
|
|
8668
|
+
return /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
8624
8669
|
"div",
|
|
8625
8670
|
{
|
|
8626
8671
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
8627
8672
|
role: "status",
|
|
8628
8673
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
8629
|
-
children: /* @__PURE__ */ (0,
|
|
8630
|
-
/* @__PURE__ */ (0,
|
|
8674
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
8675
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
8631
8676
|
"circle",
|
|
8632
8677
|
{
|
|
8633
8678
|
className: "track",
|
|
@@ -8637,7 +8682,7 @@ var Spinner = (props) => {
|
|
|
8637
8682
|
strokeWidth: "3"
|
|
8638
8683
|
}
|
|
8639
8684
|
),
|
|
8640
|
-
/* @__PURE__ */ (0,
|
|
8685
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
8641
8686
|
"circle",
|
|
8642
8687
|
{
|
|
8643
8688
|
className: "indicator",
|
|
@@ -8656,20 +8701,20 @@ Spinner.displayName = "Spinner";
|
|
|
8656
8701
|
var Spinner_default = Spinner;
|
|
8657
8702
|
|
|
8658
8703
|
// src/components/Steps/Steps.tsx
|
|
8659
|
-
var
|
|
8704
|
+
var import_jsx_runtime335 = require("react/jsx-runtime");
|
|
8660
8705
|
var Steps = (props) => {
|
|
8661
8706
|
const {
|
|
8662
8707
|
items,
|
|
8663
8708
|
current,
|
|
8664
8709
|
type = "brand"
|
|
8665
8710
|
} = props;
|
|
8666
|
-
return /* @__PURE__ */ (0,
|
|
8711
|
+
return /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
8667
8712
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
8668
|
-
return /* @__PURE__ */ (0,
|
|
8669
|
-
/* @__PURE__ */ (0,
|
|
8670
|
-
/* @__PURE__ */ (0,
|
|
8671
|
-
/* @__PURE__ */ (0,
|
|
8672
|
-
item.description && /* @__PURE__ */ (0,
|
|
8713
|
+
return /* @__PURE__ */ (0, import_jsx_runtime335.jsxs)("div", { className: clsx_default("step-item", status), children: [
|
|
8714
|
+
/* @__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 }) }),
|
|
8715
|
+
/* @__PURE__ */ (0, import_jsx_runtime335.jsxs)("div", { className: "step-content", children: [
|
|
8716
|
+
/* @__PURE__ */ (0, import_jsx_runtime335.jsx)("span", { className: "step-title", children: item.title }),
|
|
8717
|
+
item.description && /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("span", { className: "step-description", children: item.description })
|
|
8673
8718
|
] })
|
|
8674
8719
|
] }, index);
|
|
8675
8720
|
}) });
|
|
@@ -8678,8 +8723,8 @@ Steps.displayName = "Steps";
|
|
|
8678
8723
|
var Steps_default = Steps;
|
|
8679
8724
|
|
|
8680
8725
|
// src/components/Swiper/Swiper.tsx
|
|
8681
|
-
var
|
|
8682
|
-
var
|
|
8726
|
+
var import_react30 = __toESM(require("react"), 1);
|
|
8727
|
+
var import_jsx_runtime336 = require("react/jsx-runtime");
|
|
8683
8728
|
var Swiper = (props) => {
|
|
8684
8729
|
const {
|
|
8685
8730
|
auto = false,
|
|
@@ -8702,23 +8747,23 @@ var Swiper = (props) => {
|
|
|
8702
8747
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
8703
8748
|
const useLoop = loop && canSlide;
|
|
8704
8749
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
8705
|
-
const extendedItems =
|
|
8750
|
+
const extendedItems = import_react30.default.useMemo(() => {
|
|
8706
8751
|
if (!useLoop) return items;
|
|
8707
8752
|
return [...items, ...items, ...items];
|
|
8708
8753
|
}, [items, useLoop]);
|
|
8709
8754
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
8710
|
-
const [innerIndex, setInnerIndex] =
|
|
8755
|
+
const [innerIndex, setInnerIndex] = import_react30.default.useState(
|
|
8711
8756
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
8712
8757
|
);
|
|
8713
|
-
const [isDragging, setIsDragging] =
|
|
8714
|
-
const [dragOffset, setDragOffset] =
|
|
8715
|
-
const [animated, setAnimated] =
|
|
8716
|
-
const [containerWidth, setContainerWidth] =
|
|
8717
|
-
const containerRef =
|
|
8718
|
-
const startXRef =
|
|
8719
|
-
const startTimeRef =
|
|
8720
|
-
const autoplayTimerRef =
|
|
8721
|
-
|
|
8758
|
+
const [isDragging, setIsDragging] = import_react30.default.useState(false);
|
|
8759
|
+
const [dragOffset, setDragOffset] = import_react30.default.useState(0);
|
|
8760
|
+
const [animated, setAnimated] = import_react30.default.useState(true);
|
|
8761
|
+
const [containerWidth, setContainerWidth] = import_react30.default.useState(0);
|
|
8762
|
+
const containerRef = import_react30.default.useRef(null);
|
|
8763
|
+
const startXRef = import_react30.default.useRef(0);
|
|
8764
|
+
const startTimeRef = import_react30.default.useRef(0);
|
|
8765
|
+
const autoplayTimerRef = import_react30.default.useRef(null);
|
|
8766
|
+
import_react30.default.useEffect(() => {
|
|
8722
8767
|
const el = containerRef.current;
|
|
8723
8768
|
if (!el) return;
|
|
8724
8769
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -8737,7 +8782,7 @@ var Swiper = (props) => {
|
|
|
8737
8782
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
8738
8783
|
};
|
|
8739
8784
|
const realIndex = getRealIndex(innerIndex);
|
|
8740
|
-
const moveToInner =
|
|
8785
|
+
const moveToInner = import_react30.default.useCallback(
|
|
8741
8786
|
(idx, withAnim = true) => {
|
|
8742
8787
|
if (!useLoop) {
|
|
8743
8788
|
setAnimated(withAnim);
|
|
@@ -8765,7 +8810,7 @@ var Swiper = (props) => {
|
|
|
8765
8810
|
},
|
|
8766
8811
|
[useLoop, cloneCount, totalSlides]
|
|
8767
8812
|
);
|
|
8768
|
-
const handleTransitionEnd =
|
|
8813
|
+
const handleTransitionEnd = import_react30.default.useCallback(() => {
|
|
8769
8814
|
if (!useLoop) return;
|
|
8770
8815
|
const real = getRealIndex(innerIndex);
|
|
8771
8816
|
const canonical = cloneCount + real;
|
|
@@ -8775,7 +8820,7 @@ var Swiper = (props) => {
|
|
|
8775
8820
|
}
|
|
8776
8821
|
onChange?.(Math.min(real, maxIndex));
|
|
8777
8822
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
8778
|
-
const slideTo =
|
|
8823
|
+
const slideTo = import_react30.default.useCallback(
|
|
8779
8824
|
(logicalIndex) => {
|
|
8780
8825
|
if (!canSlide) return;
|
|
8781
8826
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -8785,7 +8830,7 @@ var Swiper = (props) => {
|
|
|
8785
8830
|
},
|
|
8786
8831
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
8787
8832
|
);
|
|
8788
|
-
const slideNext =
|
|
8833
|
+
const slideNext = import_react30.default.useCallback(() => {
|
|
8789
8834
|
if (!canSlide) return;
|
|
8790
8835
|
const nextInner = innerIndex + slideBy;
|
|
8791
8836
|
if (useLoop) {
|
|
@@ -8794,7 +8839,7 @@ var Swiper = (props) => {
|
|
|
8794
8839
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
8795
8840
|
}
|
|
8796
8841
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
8797
|
-
const slidePrev =
|
|
8842
|
+
const slidePrev = import_react30.default.useCallback(() => {
|
|
8798
8843
|
if (!canSlide) return;
|
|
8799
8844
|
const prevInner = innerIndex - slideBy;
|
|
8800
8845
|
if (useLoop) {
|
|
@@ -8803,7 +8848,7 @@ var Swiper = (props) => {
|
|
|
8803
8848
|
moveToInner(Math.max(prevInner, 0), true);
|
|
8804
8849
|
}
|
|
8805
8850
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
8806
|
-
|
|
8851
|
+
import_react30.default.useEffect(() => {
|
|
8807
8852
|
if (indexProp === void 0) return;
|
|
8808
8853
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
8809
8854
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -8811,12 +8856,12 @@ var Swiper = (props) => {
|
|
|
8811
8856
|
moveToInner(target, true);
|
|
8812
8857
|
}
|
|
8813
8858
|
}, [indexProp]);
|
|
8814
|
-
|
|
8859
|
+
import_react30.default.useImperativeHandle(swiperRef, () => ({
|
|
8815
8860
|
slidePrev,
|
|
8816
8861
|
slideNext,
|
|
8817
8862
|
slideTo
|
|
8818
8863
|
}));
|
|
8819
|
-
|
|
8864
|
+
import_react30.default.useEffect(() => {
|
|
8820
8865
|
if (!auto || !canSlide) return;
|
|
8821
8866
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
8822
8867
|
return () => {
|
|
@@ -8839,7 +8884,7 @@ var Swiper = (props) => {
|
|
|
8839
8884
|
startXRef.current = getClientX(e);
|
|
8840
8885
|
startTimeRef.current = Date.now();
|
|
8841
8886
|
};
|
|
8842
|
-
|
|
8887
|
+
import_react30.default.useEffect(() => {
|
|
8843
8888
|
if (!isDragging) return;
|
|
8844
8889
|
const handleMove = (e) => {
|
|
8845
8890
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -8877,8 +8922,8 @@ var Swiper = (props) => {
|
|
|
8877
8922
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
8878
8923
|
const slideWidthPercent = 100 / viewItemCount;
|
|
8879
8924
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
8880
|
-
const slideElements =
|
|
8881
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0,
|
|
8925
|
+
const slideElements = import_react30.default.useMemo(
|
|
8926
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
8882
8927
|
"div",
|
|
8883
8928
|
{
|
|
8884
8929
|
className: "lib-xplat-swiper__slide",
|
|
@@ -8897,14 +8942,14 @@ var Swiper = (props) => {
|
|
|
8897
8942
|
Math.floor(realIndex / slideBy),
|
|
8898
8943
|
totalSteps - 1
|
|
8899
8944
|
);
|
|
8900
|
-
return /* @__PURE__ */ (0,
|
|
8901
|
-
/* @__PURE__ */ (0,
|
|
8945
|
+
return /* @__PURE__ */ (0, import_jsx_runtime336.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
8946
|
+
/* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
8902
8947
|
"div",
|
|
8903
8948
|
{
|
|
8904
8949
|
className: "lib-xplat-swiper__viewport",
|
|
8905
8950
|
onMouseDown: handleDragStart,
|
|
8906
8951
|
onTouchStart: handleDragStart,
|
|
8907
|
-
children: /* @__PURE__ */ (0,
|
|
8952
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
8908
8953
|
"div",
|
|
8909
8954
|
{
|
|
8910
8955
|
className: clsx_default(
|
|
@@ -8922,7 +8967,7 @@ var Swiper = (props) => {
|
|
|
8922
8967
|
)
|
|
8923
8968
|
}
|
|
8924
8969
|
),
|
|
8925
|
-
showProgress && canSlide && /* @__PURE__ */ (0,
|
|
8970
|
+
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)(
|
|
8926
8971
|
"span",
|
|
8927
8972
|
{
|
|
8928
8973
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -8932,7 +8977,7 @@ var Swiper = (props) => {
|
|
|
8932
8977
|
}
|
|
8933
8978
|
}
|
|
8934
8979
|
) }) }),
|
|
8935
|
-
canSlide && /* @__PURE__ */ (0,
|
|
8980
|
+
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)(
|
|
8936
8981
|
"button",
|
|
8937
8982
|
{
|
|
8938
8983
|
className: clsx_default(
|
|
@@ -8950,8 +8995,8 @@ Swiper.displayName = "Swiper";
|
|
|
8950
8995
|
var Swiper_default = Swiper;
|
|
8951
8996
|
|
|
8952
8997
|
// src/components/Switch/Switch.tsx
|
|
8953
|
-
var
|
|
8954
|
-
var
|
|
8998
|
+
var import_react31 = __toESM(require("react"), 1);
|
|
8999
|
+
var import_jsx_runtime337 = require("react/jsx-runtime");
|
|
8955
9000
|
var KNOB_TRANSITION_MS = 250;
|
|
8956
9001
|
var Switch = (props) => {
|
|
8957
9002
|
const {
|
|
@@ -8961,9 +9006,9 @@ var Switch = (props) => {
|
|
|
8961
9006
|
disabled,
|
|
8962
9007
|
onChange
|
|
8963
9008
|
} = props;
|
|
8964
|
-
const [isAnimating, setIsAnimating] =
|
|
8965
|
-
const timeoutRef =
|
|
8966
|
-
|
|
9009
|
+
const [isAnimating, setIsAnimating] = import_react31.default.useState(false);
|
|
9010
|
+
const timeoutRef = import_react31.default.useRef(null);
|
|
9011
|
+
import_react31.default.useEffect(() => {
|
|
8967
9012
|
return () => {
|
|
8968
9013
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
8969
9014
|
};
|
|
@@ -8978,7 +9023,7 @@ var Switch = (props) => {
|
|
|
8978
9023
|
timeoutRef.current = null;
|
|
8979
9024
|
}, KNOB_TRANSITION_MS);
|
|
8980
9025
|
};
|
|
8981
|
-
return /* @__PURE__ */ (0,
|
|
9026
|
+
return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
|
|
8982
9027
|
"div",
|
|
8983
9028
|
{
|
|
8984
9029
|
className: clsx_default(
|
|
@@ -8991,7 +9036,7 @@ var Switch = (props) => {
|
|
|
8991
9036
|
),
|
|
8992
9037
|
onClick: handleClick,
|
|
8993
9038
|
"aria-disabled": disabled || isAnimating,
|
|
8994
|
-
children: /* @__PURE__ */ (0,
|
|
9039
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
8995
9040
|
}
|
|
8996
9041
|
);
|
|
8997
9042
|
};
|
|
@@ -8999,17 +9044,17 @@ Switch.displayName = "Switch";
|
|
|
8999
9044
|
var Switch_default = Switch;
|
|
9000
9045
|
|
|
9001
9046
|
// src/components/Table/TableContext.tsx
|
|
9002
|
-
var
|
|
9003
|
-
var TableContext =
|
|
9047
|
+
var import_react32 = __toESM(require("react"), 1);
|
|
9048
|
+
var TableContext = import_react32.default.createContext(null);
|
|
9004
9049
|
var useTableContext = () => {
|
|
9005
|
-
const ctx =
|
|
9050
|
+
const ctx = import_react32.default.useContext(TableContext);
|
|
9006
9051
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
9007
9052
|
return ctx;
|
|
9008
9053
|
};
|
|
9009
9054
|
var TableContext_default = TableContext;
|
|
9010
9055
|
|
|
9011
9056
|
// src/components/Table/Table.tsx
|
|
9012
|
-
var
|
|
9057
|
+
var import_jsx_runtime338 = require("react/jsx-runtime");
|
|
9013
9058
|
var Table = (props) => {
|
|
9014
9059
|
const {
|
|
9015
9060
|
children,
|
|
@@ -9018,7 +9063,7 @@ var Table = (props) => {
|
|
|
9018
9063
|
headerSticky = false,
|
|
9019
9064
|
stickyShadow = true
|
|
9020
9065
|
} = props;
|
|
9021
|
-
return /* @__PURE__ */ (0,
|
|
9066
|
+
return /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("div", { className: "lib-xplat-table-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
9022
9067
|
TableContext_default.Provider,
|
|
9023
9068
|
{
|
|
9024
9069
|
value: {
|
|
@@ -9027,7 +9072,7 @@ var Table = (props) => {
|
|
|
9027
9072
|
headerSticky,
|
|
9028
9073
|
stickyShadow
|
|
9029
9074
|
},
|
|
9030
|
-
children: /* @__PURE__ */ (0,
|
|
9075
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("table", { className: "lib-xplat-table", children })
|
|
9031
9076
|
}
|
|
9032
9077
|
) });
|
|
9033
9078
|
};
|
|
@@ -9035,41 +9080,41 @@ Table.displayName = "Table";
|
|
|
9035
9080
|
var Table_default = Table;
|
|
9036
9081
|
|
|
9037
9082
|
// src/components/Table/TableBody.tsx
|
|
9038
|
-
var
|
|
9083
|
+
var import_jsx_runtime339 = require("react/jsx-runtime");
|
|
9039
9084
|
var TableBody = (props) => {
|
|
9040
9085
|
const { children } = props;
|
|
9041
|
-
return /* @__PURE__ */ (0,
|
|
9086
|
+
return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)("tbody", { children });
|
|
9042
9087
|
};
|
|
9043
9088
|
TableBody.displayName = "TableBody";
|
|
9044
9089
|
var TableBody_default = TableBody;
|
|
9045
9090
|
|
|
9046
9091
|
// src/components/Table/TableCell.tsx
|
|
9047
|
-
var
|
|
9092
|
+
var import_react35 = __toESM(require("react"), 1);
|
|
9048
9093
|
|
|
9049
9094
|
// src/components/Table/TableHeadContext.tsx
|
|
9050
|
-
var
|
|
9051
|
-
var TableHeadContext =
|
|
9095
|
+
var import_react33 = __toESM(require("react"), 1);
|
|
9096
|
+
var TableHeadContext = import_react33.default.createContext(
|
|
9052
9097
|
null
|
|
9053
9098
|
);
|
|
9054
9099
|
var useTableHeadContext = () => {
|
|
9055
|
-
const ctx =
|
|
9100
|
+
const ctx = import_react33.default.useContext(TableHeadContext);
|
|
9056
9101
|
return ctx;
|
|
9057
9102
|
};
|
|
9058
9103
|
var TableHeadContext_default = TableHeadContext;
|
|
9059
9104
|
|
|
9060
9105
|
// src/components/Table/TableRowContext.tsx
|
|
9061
|
-
var
|
|
9062
|
-
var TableRowContext =
|
|
9106
|
+
var import_react34 = __toESM(require("react"), 1);
|
|
9107
|
+
var TableRowContext = import_react34.default.createContext(null);
|
|
9063
9108
|
var useTableRowContext = () => {
|
|
9064
|
-
const ctx =
|
|
9109
|
+
const ctx = import_react34.default.useContext(TableRowContext);
|
|
9065
9110
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
9066
9111
|
return ctx;
|
|
9067
9112
|
};
|
|
9068
9113
|
var TableRowContext_default = TableRowContext;
|
|
9069
9114
|
|
|
9070
9115
|
// src/components/Table/TableCell.tsx
|
|
9071
|
-
var
|
|
9072
|
-
var TableCell =
|
|
9116
|
+
var import_jsx_runtime340 = require("react/jsx-runtime");
|
|
9117
|
+
var TableCell = import_react35.default.memo((props) => {
|
|
9073
9118
|
const {
|
|
9074
9119
|
children,
|
|
9075
9120
|
align = "center",
|
|
@@ -9081,9 +9126,9 @@ var TableCell = import_react34.default.memo((props) => {
|
|
|
9081
9126
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
9082
9127
|
const { stickyShadow } = useTableContext();
|
|
9083
9128
|
const headContext = useTableHeadContext();
|
|
9084
|
-
const [left, setLeft] =
|
|
9085
|
-
const cellRef =
|
|
9086
|
-
const calculateLeft =
|
|
9129
|
+
const [left, setLeft] = import_react35.default.useState(0);
|
|
9130
|
+
const cellRef = import_react35.default.useRef(null);
|
|
9131
|
+
const calculateLeft = import_react35.default.useCallback(() => {
|
|
9087
9132
|
if (!cellRef.current) return 0;
|
|
9088
9133
|
let totalLeft = 0;
|
|
9089
9134
|
for (const ref of stickyCells) {
|
|
@@ -9092,7 +9137,7 @@ var TableCell = import_react34.default.memo((props) => {
|
|
|
9092
9137
|
}
|
|
9093
9138
|
return totalLeft;
|
|
9094
9139
|
}, [stickyCells]);
|
|
9095
|
-
|
|
9140
|
+
import_react35.default.useEffect(() => {
|
|
9096
9141
|
if (!isSticky || !cellRef.current) return;
|
|
9097
9142
|
registerStickyCell(cellRef);
|
|
9098
9143
|
setLeft(calculateLeft());
|
|
@@ -9110,7 +9155,7 @@ var TableCell = import_react34.default.memo((props) => {
|
|
|
9110
9155
|
const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
|
|
9111
9156
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
9112
9157
|
const enableHover = headContext && headContext.cellHover;
|
|
9113
|
-
return /* @__PURE__ */ (0,
|
|
9158
|
+
return /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
|
|
9114
9159
|
CellTag,
|
|
9115
9160
|
{
|
|
9116
9161
|
ref: cellRef,
|
|
@@ -9135,21 +9180,21 @@ TableCell.displayName = "TableCell";
|
|
|
9135
9180
|
var TableCell_default = TableCell;
|
|
9136
9181
|
|
|
9137
9182
|
// src/components/Table/TableHead.tsx
|
|
9138
|
-
var
|
|
9183
|
+
var import_jsx_runtime341 = require("react/jsx-runtime");
|
|
9139
9184
|
var TableHead = ({
|
|
9140
9185
|
children,
|
|
9141
9186
|
cellHover = false
|
|
9142
9187
|
}) => {
|
|
9143
9188
|
const { headerSticky } = useTableContext();
|
|
9144
|
-
return /* @__PURE__ */ (0,
|
|
9189
|
+
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 }) });
|
|
9145
9190
|
};
|
|
9146
9191
|
TableHead.displayName = "TableHead";
|
|
9147
9192
|
var TableHead_default = TableHead;
|
|
9148
9193
|
|
|
9149
9194
|
// src/components/Table/TableRow.tsx
|
|
9150
|
-
var
|
|
9151
|
-
var
|
|
9152
|
-
var TableRow =
|
|
9195
|
+
var import_react36 = __toESM(require("react"), 1);
|
|
9196
|
+
var import_jsx_runtime342 = require("react/jsx-runtime");
|
|
9197
|
+
var TableRow = import_react36.default.memo((props) => {
|
|
9153
9198
|
const {
|
|
9154
9199
|
children,
|
|
9155
9200
|
type = "secondary",
|
|
@@ -9157,14 +9202,14 @@ var TableRow = import_react35.default.memo((props) => {
|
|
|
9157
9202
|
onClick
|
|
9158
9203
|
} = props;
|
|
9159
9204
|
const { rowBorderUse } = useTableContext();
|
|
9160
|
-
const [stickyCells, setStickyCells] =
|
|
9205
|
+
const [stickyCells, setStickyCells] = import_react36.default.useState([]);
|
|
9161
9206
|
const registerStickyCell = (ref) => {
|
|
9162
9207
|
setStickyCells((prev) => {
|
|
9163
9208
|
if (prev.includes(ref)) return prev;
|
|
9164
9209
|
return [...prev, ref];
|
|
9165
9210
|
});
|
|
9166
9211
|
};
|
|
9167
|
-
return /* @__PURE__ */ (0,
|
|
9212
|
+
return /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
|
|
9168
9213
|
"tr",
|
|
9169
9214
|
{
|
|
9170
9215
|
className: clsx_default(
|
|
@@ -9182,7 +9227,7 @@ TableRow.displayName = "TableRow";
|
|
|
9182
9227
|
var TableRow_default = TableRow;
|
|
9183
9228
|
|
|
9184
9229
|
// src/components/Tag/Tag.tsx
|
|
9185
|
-
var
|
|
9230
|
+
var import_jsx_runtime343 = require("react/jsx-runtime");
|
|
9186
9231
|
var Tag = (props) => {
|
|
9187
9232
|
const {
|
|
9188
9233
|
children,
|
|
@@ -9192,7 +9237,7 @@ var Tag = (props) => {
|
|
|
9192
9237
|
disabled = false,
|
|
9193
9238
|
colorIndex
|
|
9194
9239
|
} = props;
|
|
9195
|
-
return /* @__PURE__ */ (0,
|
|
9240
|
+
return /* @__PURE__ */ (0, import_jsx_runtime343.jsxs)(
|
|
9196
9241
|
"span",
|
|
9197
9242
|
{
|
|
9198
9243
|
className: clsx_default(
|
|
@@ -9203,8 +9248,8 @@ var Tag = (props) => {
|
|
|
9203
9248
|
disabled && "disabled"
|
|
9204
9249
|
),
|
|
9205
9250
|
children: [
|
|
9206
|
-
/* @__PURE__ */ (0,
|
|
9207
|
-
onClose && /* @__PURE__ */ (0,
|
|
9251
|
+
/* @__PURE__ */ (0, import_jsx_runtime343.jsx)("span", { className: "tag-label", children }),
|
|
9252
|
+
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, {}) })
|
|
9208
9253
|
]
|
|
9209
9254
|
}
|
|
9210
9255
|
);
|
|
@@ -9213,12 +9258,12 @@ Tag.displayName = "Tag";
|
|
|
9213
9258
|
var Tag_default = Tag;
|
|
9214
9259
|
|
|
9215
9260
|
// src/components/TextArea/TextArea.tsx
|
|
9216
|
-
var
|
|
9217
|
-
var
|
|
9218
|
-
var TextArea =
|
|
9261
|
+
var import_react37 = __toESM(require("react"), 1);
|
|
9262
|
+
var import_jsx_runtime344 = require("react/jsx-runtime");
|
|
9263
|
+
var TextArea = import_react37.default.forwardRef(
|
|
9219
9264
|
(props, ref) => {
|
|
9220
9265
|
const { value, onChange, disabled, ...textareaProps } = props;
|
|
9221
|
-
const localRef =
|
|
9266
|
+
const localRef = import_react37.default.useRef(null);
|
|
9222
9267
|
const setRefs = (el) => {
|
|
9223
9268
|
localRef.current = el;
|
|
9224
9269
|
if (!ref) return;
|
|
@@ -9238,21 +9283,21 @@ var TextArea = import_react36.default.forwardRef(
|
|
|
9238
9283
|
onChange(event);
|
|
9239
9284
|
}
|
|
9240
9285
|
};
|
|
9241
|
-
|
|
9286
|
+
import_react37.default.useEffect(() => {
|
|
9242
9287
|
const el = localRef.current;
|
|
9243
9288
|
if (!el) return;
|
|
9244
9289
|
el.style.height = "0px";
|
|
9245
9290
|
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
9246
9291
|
el.style.height = `${nextHeight}px`;
|
|
9247
9292
|
}, [value]);
|
|
9248
|
-
return /* @__PURE__ */ (0,
|
|
9293
|
+
return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
|
|
9249
9294
|
"div",
|
|
9250
9295
|
{
|
|
9251
9296
|
className: clsx_default(
|
|
9252
9297
|
"lib-xplat-textarea",
|
|
9253
9298
|
disabled ? "disabled" : void 0
|
|
9254
9299
|
),
|
|
9255
|
-
children: /* @__PURE__ */ (0,
|
|
9300
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
|
|
9256
9301
|
"textarea",
|
|
9257
9302
|
{
|
|
9258
9303
|
...textareaProps,
|
|
@@ -9270,25 +9315,25 @@ TextArea.displayName = "TextArea";
|
|
|
9270
9315
|
var TextArea_default = TextArea;
|
|
9271
9316
|
|
|
9272
9317
|
// src/components/Toast/Toast.tsx
|
|
9273
|
-
var
|
|
9274
|
-
var
|
|
9275
|
-
var
|
|
9276
|
-
var ToastContext =
|
|
9318
|
+
var import_react38 = __toESM(require("react"), 1);
|
|
9319
|
+
var import_react_dom4 = require("react-dom");
|
|
9320
|
+
var import_jsx_runtime345 = require("react/jsx-runtime");
|
|
9321
|
+
var ToastContext = import_react38.default.createContext(null);
|
|
9277
9322
|
var useToast = () => {
|
|
9278
|
-
const ctx =
|
|
9323
|
+
const ctx = import_react38.default.useContext(ToastContext);
|
|
9279
9324
|
if (!ctx) throw new Error("useToast must be used within ToastProvider");
|
|
9280
9325
|
return ctx;
|
|
9281
9326
|
};
|
|
9282
9327
|
var EXIT_DURATION = 300;
|
|
9283
9328
|
var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
9284
|
-
const ref =
|
|
9285
|
-
const [height, setHeight] =
|
|
9286
|
-
|
|
9329
|
+
const ref = import_react38.default.useRef(null);
|
|
9330
|
+
const [height, setHeight] = import_react38.default.useState(void 0);
|
|
9331
|
+
import_react38.default.useEffect(() => {
|
|
9287
9332
|
if (ref.current && !isExiting) {
|
|
9288
9333
|
setHeight(ref.current.offsetHeight);
|
|
9289
9334
|
}
|
|
9290
9335
|
}, [isExiting]);
|
|
9291
|
-
return /* @__PURE__ */ (0,
|
|
9336
|
+
return /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(
|
|
9292
9337
|
"div",
|
|
9293
9338
|
{
|
|
9294
9339
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -9296,15 +9341,15 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
9296
9341
|
maxHeight: isExiting ? 0 : height ?? "none",
|
|
9297
9342
|
marginBottom: isExiting ? 0 : void 0
|
|
9298
9343
|
},
|
|
9299
|
-
children: /* @__PURE__ */ (0,
|
|
9344
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)(
|
|
9300
9345
|
"div",
|
|
9301
9346
|
{
|
|
9302
9347
|
ref,
|
|
9303
9348
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
9304
9349
|
role: "alert",
|
|
9305
9350
|
children: [
|
|
9306
|
-
/* @__PURE__ */ (0,
|
|
9307
|
-
/* @__PURE__ */ (0,
|
|
9351
|
+
/* @__PURE__ */ (0, import_jsx_runtime345.jsx)("span", { className: "message", children: item.message }),
|
|
9352
|
+
/* @__PURE__ */ (0, import_jsx_runtime345.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
9308
9353
|
]
|
|
9309
9354
|
}
|
|
9310
9355
|
)
|
|
@@ -9315,13 +9360,13 @@ var ToastProvider = ({
|
|
|
9315
9360
|
children,
|
|
9316
9361
|
position = "top-right"
|
|
9317
9362
|
}) => {
|
|
9318
|
-
const [toasts, setToasts] =
|
|
9319
|
-
const [removing, setRemoving] =
|
|
9320
|
-
const [mounted, setMounted] =
|
|
9321
|
-
|
|
9363
|
+
const [toasts, setToasts] = import_react38.default.useState([]);
|
|
9364
|
+
const [removing, setRemoving] = import_react38.default.useState(/* @__PURE__ */ new Set());
|
|
9365
|
+
const [mounted, setMounted] = import_react38.default.useState(false);
|
|
9366
|
+
import_react38.default.useEffect(() => {
|
|
9322
9367
|
setMounted(true);
|
|
9323
9368
|
}, []);
|
|
9324
|
-
const remove =
|
|
9369
|
+
const remove = import_react38.default.useCallback((id) => {
|
|
9325
9370
|
setRemoving((prev) => new Set(prev).add(id));
|
|
9326
9371
|
setTimeout(() => {
|
|
9327
9372
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
@@ -9332,7 +9377,7 @@ var ToastProvider = ({
|
|
|
9332
9377
|
});
|
|
9333
9378
|
}, EXIT_DURATION);
|
|
9334
9379
|
}, []);
|
|
9335
|
-
const toast =
|
|
9380
|
+
const toast = import_react38.default.useCallback(
|
|
9336
9381
|
(type, message, duration = 3e3) => {
|
|
9337
9382
|
const id = `${Date.now()}-${Math.random()}`;
|
|
9338
9383
|
setToasts((prev) => [...prev, { id, type, message }]);
|
|
@@ -9342,10 +9387,10 @@ var ToastProvider = ({
|
|
|
9342
9387
|
},
|
|
9343
9388
|
[remove]
|
|
9344
9389
|
);
|
|
9345
|
-
return /* @__PURE__ */ (0,
|
|
9390
|
+
return /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)(ToastContext.Provider, { value: { toast }, children: [
|
|
9346
9391
|
children,
|
|
9347
|
-
mounted && (0,
|
|
9348
|
-
/* @__PURE__ */ (0,
|
|
9392
|
+
mounted && (0, import_react_dom4.createPortal)(
|
|
9393
|
+
/* @__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)(
|
|
9349
9394
|
ToastItemComponent,
|
|
9350
9395
|
{
|
|
9351
9396
|
item: t,
|
|
@@ -9361,29 +9406,29 @@ var ToastProvider = ({
|
|
|
9361
9406
|
ToastProvider.displayName = "ToastProvider";
|
|
9362
9407
|
|
|
9363
9408
|
// src/components/Tooltip/Tooltip.tsx
|
|
9364
|
-
var
|
|
9365
|
-
var
|
|
9409
|
+
var import_react39 = __toESM(require("react"), 1);
|
|
9410
|
+
var import_jsx_runtime346 = require("react/jsx-runtime");
|
|
9366
9411
|
var Tooltip = (props) => {
|
|
9367
9412
|
const {
|
|
9368
9413
|
type = "primary",
|
|
9369
9414
|
description,
|
|
9370
9415
|
children
|
|
9371
9416
|
} = props;
|
|
9372
|
-
const iconRef =
|
|
9373
|
-
return /* @__PURE__ */ (0,
|
|
9374
|
-
/* @__PURE__ */ (0,
|
|
9375
|
-
/* @__PURE__ */ (0,
|
|
9417
|
+
const iconRef = import_react39.default.useRef(null);
|
|
9418
|
+
return /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: "lib-xplat-tooltip", children: [
|
|
9419
|
+
/* @__PURE__ */ (0, import_jsx_runtime346.jsx)("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
|
|
9420
|
+
/* @__PURE__ */ (0, import_jsx_runtime346.jsx)("div", { className: clsx_default("tooltip-wrapper", type), children: description })
|
|
9376
9421
|
] });
|
|
9377
9422
|
};
|
|
9378
9423
|
Tooltip.displayName = "Tooltip";
|
|
9379
9424
|
var Tooltip_default = Tooltip;
|
|
9380
9425
|
|
|
9381
9426
|
// src/components/Video/Video.tsx
|
|
9382
|
-
var
|
|
9383
|
-
var
|
|
9384
|
-
var PipIcon = () => /* @__PURE__ */ (0,
|
|
9385
|
-
/* @__PURE__ */ (0,
|
|
9386
|
-
/* @__PURE__ */ (0,
|
|
9427
|
+
var import_react40 = __toESM(require("react"), 1);
|
|
9428
|
+
var import_jsx_runtime347 = require("react/jsx-runtime");
|
|
9429
|
+
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: [
|
|
9430
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
9431
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
9387
9432
|
] });
|
|
9388
9433
|
var formatTime = (sec) => {
|
|
9389
9434
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -9391,7 +9436,7 @@ var formatTime = (sec) => {
|
|
|
9391
9436
|
const s = Math.floor(sec % 60);
|
|
9392
9437
|
return `${m}:${s.toString().padStart(2, "0")}`;
|
|
9393
9438
|
};
|
|
9394
|
-
var Video =
|
|
9439
|
+
var Video = import_react40.default.forwardRef((props, ref) => {
|
|
9395
9440
|
const {
|
|
9396
9441
|
src,
|
|
9397
9442
|
poster,
|
|
@@ -9415,21 +9460,21 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
9415
9460
|
children,
|
|
9416
9461
|
...rest
|
|
9417
9462
|
} = props;
|
|
9418
|
-
const containerRef =
|
|
9419
|
-
const videoRef =
|
|
9420
|
-
const [isPlaying, setIsPlaying] =
|
|
9421
|
-
const [isLoaded, setIsLoaded] =
|
|
9422
|
-
const [currentTime, setCurrentTime] =
|
|
9423
|
-
const [duration, setDuration] =
|
|
9424
|
-
const [buffered, setBuffered] =
|
|
9425
|
-
const [volume, setVolume] =
|
|
9426
|
-
const [isMuted, setIsMuted] =
|
|
9427
|
-
const [isFullscreen, setIsFullscreen] =
|
|
9428
|
-
const [playbackRate, setPlaybackRate] =
|
|
9429
|
-
const [rateMenuOpen, setRateMenuOpen] =
|
|
9430
|
-
const [captionsOn, setCaptionsOn] =
|
|
9431
|
-
const [isPip, setIsPip] =
|
|
9432
|
-
const setRefs =
|
|
9463
|
+
const containerRef = import_react40.default.useRef(null);
|
|
9464
|
+
const videoRef = import_react40.default.useRef(null);
|
|
9465
|
+
const [isPlaying, setIsPlaying] = import_react40.default.useState(Boolean(autoPlay));
|
|
9466
|
+
const [isLoaded, setIsLoaded] = import_react40.default.useState(false);
|
|
9467
|
+
const [currentTime, setCurrentTime] = import_react40.default.useState(0);
|
|
9468
|
+
const [duration, setDuration] = import_react40.default.useState(0);
|
|
9469
|
+
const [buffered, setBuffered] = import_react40.default.useState(0);
|
|
9470
|
+
const [volume, setVolume] = import_react40.default.useState(1);
|
|
9471
|
+
const [isMuted, setIsMuted] = import_react40.default.useState(Boolean(muted));
|
|
9472
|
+
const [isFullscreen, setIsFullscreen] = import_react40.default.useState(false);
|
|
9473
|
+
const [playbackRate, setPlaybackRate] = import_react40.default.useState(1);
|
|
9474
|
+
const [rateMenuOpen, setRateMenuOpen] = import_react40.default.useState(false);
|
|
9475
|
+
const [captionsOn, setCaptionsOn] = import_react40.default.useState(false);
|
|
9476
|
+
const [isPip, setIsPip] = import_react40.default.useState(false);
|
|
9477
|
+
const setRefs = import_react40.default.useCallback(
|
|
9433
9478
|
(el) => {
|
|
9434
9479
|
videoRef.current = el;
|
|
9435
9480
|
if (typeof ref === "function") ref(el);
|
|
@@ -9437,14 +9482,14 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
9437
9482
|
},
|
|
9438
9483
|
[ref]
|
|
9439
9484
|
);
|
|
9440
|
-
|
|
9485
|
+
import_react40.default.useEffect(() => {
|
|
9441
9486
|
const onFsChange = () => {
|
|
9442
9487
|
setIsFullscreen(document.fullscreenElement === containerRef.current);
|
|
9443
9488
|
};
|
|
9444
9489
|
document.addEventListener("fullscreenchange", onFsChange);
|
|
9445
9490
|
return () => document.removeEventListener("fullscreenchange", onFsChange);
|
|
9446
9491
|
}, []);
|
|
9447
|
-
|
|
9492
|
+
import_react40.default.useEffect(() => {
|
|
9448
9493
|
const v = videoRef.current;
|
|
9449
9494
|
if (!v) return;
|
|
9450
9495
|
const onEnter = () => setIsPip(true);
|
|
@@ -9558,13 +9603,13 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
9558
9603
|
const volumePct = (isMuted ? 0 : volume) * 100;
|
|
9559
9604
|
const VolumeGlyph = isMuted || volume === 0 ? VolumeXIcon_default : volume < 0.5 ? VolumeIcon_default : Volume2Icon_default;
|
|
9560
9605
|
const pipSupported = typeof document !== "undefined" && "pictureInPictureEnabled" in document && document.pictureInPictureEnabled;
|
|
9561
|
-
return /* @__PURE__ */ (0,
|
|
9606
|
+
return /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)(
|
|
9562
9607
|
"div",
|
|
9563
9608
|
{
|
|
9564
9609
|
ref: containerRef,
|
|
9565
9610
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
9566
9611
|
children: [
|
|
9567
|
-
/* @__PURE__ */ (0,
|
|
9612
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
9568
9613
|
"video",
|
|
9569
9614
|
{
|
|
9570
9615
|
ref: setRefs,
|
|
@@ -9585,7 +9630,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
9585
9630
|
children
|
|
9586
9631
|
}
|
|
9587
9632
|
),
|
|
9588
|
-
showCenterPlay && /* @__PURE__ */ (0,
|
|
9633
|
+
showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
9589
9634
|
"button",
|
|
9590
9635
|
{
|
|
9591
9636
|
type: "button",
|
|
@@ -9597,11 +9642,11 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
9597
9642
|
onClick: togglePlay,
|
|
9598
9643
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
9599
9644
|
tabIndex: -1,
|
|
9600
|
-
children: /* @__PURE__ */ (0,
|
|
9645
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PlayCircleIcon_default, {}) })
|
|
9601
9646
|
}
|
|
9602
9647
|
),
|
|
9603
|
-
showControls && /* @__PURE__ */ (0,
|
|
9604
|
-
/* @__PURE__ */ (0,
|
|
9648
|
+
showControls && /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
9649
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
9605
9650
|
"input",
|
|
9606
9651
|
{
|
|
9607
9652
|
type: "range",
|
|
@@ -9618,29 +9663,29 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
9618
9663
|
}
|
|
9619
9664
|
}
|
|
9620
9665
|
),
|
|
9621
|
-
/* @__PURE__ */ (0,
|
|
9622
|
-
/* @__PURE__ */ (0,
|
|
9666
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "controls-row", children: [
|
|
9667
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
9623
9668
|
"button",
|
|
9624
9669
|
{
|
|
9625
9670
|
type: "button",
|
|
9626
9671
|
className: "control-btn",
|
|
9627
9672
|
onClick: togglePlay,
|
|
9628
9673
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
9629
|
-
children: isPlaying ? /* @__PURE__ */ (0,
|
|
9674
|
+
children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PlayIcon_default, {})
|
|
9630
9675
|
}
|
|
9631
9676
|
),
|
|
9632
|
-
/* @__PURE__ */ (0,
|
|
9633
|
-
/* @__PURE__ */ (0,
|
|
9677
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "volume-group", children: [
|
|
9678
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
9634
9679
|
"button",
|
|
9635
9680
|
{
|
|
9636
9681
|
type: "button",
|
|
9637
9682
|
className: "control-btn",
|
|
9638
9683
|
onClick: toggleMute,
|
|
9639
9684
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
9640
|
-
children: /* @__PURE__ */ (0,
|
|
9685
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(VolumeGlyph, {})
|
|
9641
9686
|
}
|
|
9642
9687
|
),
|
|
9643
|
-
/* @__PURE__ */ (0,
|
|
9688
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
9644
9689
|
"input",
|
|
9645
9690
|
{
|
|
9646
9691
|
type: "range",
|
|
@@ -9655,14 +9700,14 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
9655
9700
|
}
|
|
9656
9701
|
)
|
|
9657
9702
|
] }),
|
|
9658
|
-
/* @__PURE__ */ (0,
|
|
9703
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("span", { className: "time", children: [
|
|
9659
9704
|
formatTime(currentTime),
|
|
9660
9705
|
" / ",
|
|
9661
9706
|
formatTime(duration)
|
|
9662
9707
|
] }),
|
|
9663
|
-
/* @__PURE__ */ (0,
|
|
9664
|
-
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0,
|
|
9665
|
-
/* @__PURE__ */ (0,
|
|
9708
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)("div", { className: "controls-spacer" }),
|
|
9709
|
+
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
9710
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsxs)(
|
|
9666
9711
|
"button",
|
|
9667
9712
|
{
|
|
9668
9713
|
type: "button",
|
|
@@ -9676,7 +9721,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
9676
9721
|
]
|
|
9677
9722
|
}
|
|
9678
9723
|
),
|
|
9679
|
-
rateMenuOpen && /* @__PURE__ */ (0,
|
|
9724
|
+
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)(
|
|
9680
9725
|
"button",
|
|
9681
9726
|
{
|
|
9682
9727
|
type: "button",
|
|
@@ -9690,7 +9735,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
9690
9735
|
}
|
|
9691
9736
|
) }, r2)) })
|
|
9692
9737
|
] }),
|
|
9693
|
-
showCaptions && /* @__PURE__ */ (0,
|
|
9738
|
+
showCaptions && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
9694
9739
|
"button",
|
|
9695
9740
|
{
|
|
9696
9741
|
type: "button",
|
|
@@ -9698,37 +9743,37 @@ var Video = import_react39.default.forwardRef((props, ref) => {
|
|
|
9698
9743
|
onClick: toggleCaptions,
|
|
9699
9744
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
9700
9745
|
"aria-pressed": captionsOn,
|
|
9701
|
-
children: /* @__PURE__ */ (0,
|
|
9746
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(TypeIcon_default, {})
|
|
9702
9747
|
}
|
|
9703
9748
|
),
|
|
9704
|
-
showPip && pipSupported && /* @__PURE__ */ (0,
|
|
9749
|
+
showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
9705
9750
|
"button",
|
|
9706
9751
|
{
|
|
9707
9752
|
type: "button",
|
|
9708
9753
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
9709
9754
|
onClick: togglePip,
|
|
9710
9755
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
9711
|
-
children: /* @__PURE__ */ (0,
|
|
9756
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PipIcon, {})
|
|
9712
9757
|
}
|
|
9713
9758
|
),
|
|
9714
|
-
showDownload && /* @__PURE__ */ (0,
|
|
9759
|
+
showDownload && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
9715
9760
|
"a",
|
|
9716
9761
|
{
|
|
9717
9762
|
className: "control-btn",
|
|
9718
9763
|
href: src,
|
|
9719
9764
|
download: downloadFileName ?? true,
|
|
9720
9765
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
9721
|
-
children: /* @__PURE__ */ (0,
|
|
9766
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(DownloadIcon_default, {})
|
|
9722
9767
|
}
|
|
9723
9768
|
),
|
|
9724
|
-
/* @__PURE__ */ (0,
|
|
9769
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
|
|
9725
9770
|
"button",
|
|
9726
9771
|
{
|
|
9727
9772
|
type: "button",
|
|
9728
9773
|
className: "control-btn",
|
|
9729
9774
|
onClick: toggleFullscreen,
|
|
9730
9775
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
9731
|
-
children: isFullscreen ? /* @__PURE__ */ (0,
|
|
9776
|
+
children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(MaximizeIcon_default, {})
|
|
9732
9777
|
}
|
|
9733
9778
|
)
|
|
9734
9779
|
] })
|
|
@@ -9741,10 +9786,10 @@ Video.displayName = "Video";
|
|
|
9741
9786
|
var Video_default = Video;
|
|
9742
9787
|
|
|
9743
9788
|
// src/layout/Grid/FullGrid/FullGrid.tsx
|
|
9744
|
-
var
|
|
9789
|
+
var import_jsx_runtime348 = require("react/jsx-runtime");
|
|
9745
9790
|
var FullGrid = (props) => {
|
|
9746
9791
|
const { children, gap } = props;
|
|
9747
|
-
return /* @__PURE__ */ (0,
|
|
9792
|
+
return /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9748
9793
|
"div",
|
|
9749
9794
|
{
|
|
9750
9795
|
className: "lib-xplat-full-grid",
|
|
@@ -9757,10 +9802,10 @@ FullGrid.displayName = "FullGrid";
|
|
|
9757
9802
|
var FullGrid_default = FullGrid;
|
|
9758
9803
|
|
|
9759
9804
|
// src/layout/Grid/FullScreen/FullScreen.tsx
|
|
9760
|
-
var
|
|
9805
|
+
var import_jsx_runtime349 = require("react/jsx-runtime");
|
|
9761
9806
|
var FullScreen = (props) => {
|
|
9762
9807
|
const { children, gap } = props;
|
|
9763
|
-
return /* @__PURE__ */ (0,
|
|
9808
|
+
return /* @__PURE__ */ (0, import_jsx_runtime349.jsx)(
|
|
9764
9809
|
"div",
|
|
9765
9810
|
{
|
|
9766
9811
|
className: "lib-xplat-full-screen",
|
|
@@ -9773,7 +9818,7 @@ FullScreen.displayName = "FullScreen";
|
|
|
9773
9818
|
var FullScreen_default = FullScreen;
|
|
9774
9819
|
|
|
9775
9820
|
// src/layout/Grid/Item/Item.tsx
|
|
9776
|
-
var
|
|
9821
|
+
var import_jsx_runtime350 = require("react/jsx-runtime");
|
|
9777
9822
|
var calculateSpans = (column) => {
|
|
9778
9823
|
const spans = {};
|
|
9779
9824
|
let inherited = column.default;
|
|
@@ -9790,35 +9835,35 @@ var GridItem = ({ column, children, className }) => {
|
|
|
9790
9835
|
Object.entries(spans).forEach(([key, value]) => {
|
|
9791
9836
|
style[`--column-${key}`] = value;
|
|
9792
9837
|
});
|
|
9793
|
-
return /* @__PURE__ */ (0,
|
|
9838
|
+
return /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { className: clsx_default("lib-xplat-grid-item", className), style, children });
|
|
9794
9839
|
};
|
|
9795
9840
|
GridItem.displayName = "GridItem";
|
|
9796
9841
|
var Item_default = GridItem;
|
|
9797
9842
|
|
|
9798
9843
|
// src/layout/Header/Header.tsx
|
|
9799
|
-
var
|
|
9844
|
+
var import_jsx_runtime351 = require("react/jsx-runtime");
|
|
9800
9845
|
var Header = ({
|
|
9801
9846
|
logo,
|
|
9802
9847
|
centerContent,
|
|
9803
9848
|
rightContent
|
|
9804
9849
|
}) => {
|
|
9805
|
-
return /* @__PURE__ */ (0,
|
|
9806
|
-
/* @__PURE__ */ (0,
|
|
9807
|
-
/* @__PURE__ */ (0,
|
|
9808
|
-
/* @__PURE__ */ (0,
|
|
9850
|
+
return /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)("div", { className: "lib-xplat-layout-header", children: [
|
|
9851
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { children: logo }),
|
|
9852
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { children: centerContent }),
|
|
9853
|
+
/* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { children: rightContent })
|
|
9809
9854
|
] });
|
|
9810
9855
|
};
|
|
9811
9856
|
Header.displayName = "Header";
|
|
9812
9857
|
var Header_default = Header;
|
|
9813
9858
|
|
|
9814
9859
|
// src/layout/Layout/Layout.tsx
|
|
9815
|
-
var
|
|
9860
|
+
var import_jsx_runtime352 = require("react/jsx-runtime");
|
|
9816
9861
|
var Layout = (props) => {
|
|
9817
9862
|
const { header, sideBar, children } = props;
|
|
9818
|
-
return /* @__PURE__ */ (0,
|
|
9819
|
-
sideBar && /* @__PURE__ */ (0,
|
|
9820
|
-
/* @__PURE__ */ (0,
|
|
9821
|
-
header && /* @__PURE__ */ (0,
|
|
9863
|
+
return /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { className: "lib-xplat-layout", children: /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: "lib-xplat-layout-content-wrapper", children: [
|
|
9864
|
+
sideBar && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(import_jsx_runtime352.Fragment, { children: sideBar }),
|
|
9865
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: "lib-xplat-layout-content", children: [
|
|
9866
|
+
header && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { className: "lib-xplat-layout-conent-header", children: header }),
|
|
9822
9867
|
children
|
|
9823
9868
|
] })
|
|
9824
9869
|
] }) });
|
|
@@ -9827,31 +9872,31 @@ Layout.displayName = "Layout";
|
|
|
9827
9872
|
var Layout_default = Layout;
|
|
9828
9873
|
|
|
9829
9874
|
// src/layout/SideBar/SideBar.tsx
|
|
9830
|
-
var
|
|
9875
|
+
var import_react42 = __toESM(require("react"), 1);
|
|
9831
9876
|
|
|
9832
9877
|
// src/layout/SideBar/SideBarContext.tsx
|
|
9833
|
-
var
|
|
9834
|
-
var SideBarContext =
|
|
9878
|
+
var import_react41 = __toESM(require("react"), 1);
|
|
9879
|
+
var SideBarContext = import_react41.default.createContext(null);
|
|
9835
9880
|
var useSideBarContext = () => {
|
|
9836
|
-
const ctx =
|
|
9881
|
+
const ctx = import_react41.default.useContext(SideBarContext);
|
|
9837
9882
|
if (!ctx) throw new Error("Error");
|
|
9838
9883
|
return ctx;
|
|
9839
9884
|
};
|
|
9840
9885
|
var SideBarContext_default = SideBarContext;
|
|
9841
9886
|
|
|
9842
9887
|
// src/layout/SideBar/SideBar.tsx
|
|
9843
|
-
var
|
|
9888
|
+
var import_jsx_runtime353 = require("react/jsx-runtime");
|
|
9844
9889
|
var SideBar = (props) => {
|
|
9845
9890
|
const { children, className } = props;
|
|
9846
|
-
const [isOpen, setIsOpen] =
|
|
9891
|
+
const [isOpen, setIsOpen] = import_react42.default.useState(true);
|
|
9847
9892
|
const handleSwitchSideBar = () => {
|
|
9848
9893
|
setIsOpen((prev) => !prev);
|
|
9849
9894
|
};
|
|
9850
|
-
return /* @__PURE__ */ (0,
|
|
9895
|
+
return /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
|
|
9851
9896
|
SideBarContext_default.Provider,
|
|
9852
9897
|
{
|
|
9853
9898
|
value: { isSidebarOpen: isOpen, handleSwitchSideBar },
|
|
9854
|
-
children: /* @__PURE__ */ (0,
|
|
9899
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
|
|
9855
9900
|
"div",
|
|
9856
9901
|
{
|
|
9857
9902
|
className: clsx_default(
|