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