@x-plat/design-system 0.5.20 → 0.5.22
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 +58 -29
- package/dist/components/Chart/index.css +2 -15
- package/dist/components/Chart/index.js +58 -29
- package/dist/components/ChatInput/index.cjs +214 -0
- package/dist/components/ChatInput/index.css +133 -0
- package/dist/components/ChatInput/index.d.cts +14 -0
- package/dist/components/ChatInput/index.d.ts +14 -0
- package/dist/components/ChatInput/index.js +177 -0
- package/dist/components/Dropdown/index.cjs +9 -0
- package/dist/components/Dropdown/index.js +9 -0
- package/dist/components/PopOver/index.cjs +9 -0
- package/dist/components/PopOver/index.js +9 -0
- package/dist/components/Select/index.cjs +9 -0
- package/dist/components/Select/index.js +9 -0
- package/dist/components/Table/index.cjs +2 -1
- package/dist/components/Table/index.css +117 -0
- package/dist/components/Table/index.d.cts +3 -1
- package/dist/components/Table/index.d.ts +3 -1
- package/dist/components/Table/index.js +2 -1
- package/dist/components/index.cjs +715 -595
- package/dist/components/index.css +253 -61
- package/dist/components/index.d.cts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +713 -594
- package/dist/index.cjs +724 -619
- package/dist/index.css +253 -61
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +722 -618
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -92,6 +92,7 @@ __export(index_exports, {
|
|
|
92
92
|
CardTab: () => CardTab_default,
|
|
93
93
|
CastIcon: () => CastIcon_default,
|
|
94
94
|
Chart: () => Chart_default,
|
|
95
|
+
ChatInput: () => ChatInput_default,
|
|
95
96
|
CheckBox: () => CheckBox_default,
|
|
96
97
|
CheckCircleIcon: () => CheckCircleIcon_default,
|
|
97
98
|
CheckIcon: () => CheckIcon_default,
|
|
@@ -6432,30 +6433,151 @@ var Calendar = (props) => {
|
|
|
6432
6433
|
Calendar.displayName = "Calendar";
|
|
6433
6434
|
var Calendar_default = Calendar;
|
|
6434
6435
|
|
|
6435
|
-
// src/components/
|
|
6436
|
+
// src/components/ChatInput/ChatInput.tsx
|
|
6437
|
+
var import_react5 = __toESM(require("react"), 1);
|
|
6438
|
+
|
|
6439
|
+
// src/components/TextArea/TextArea.tsx
|
|
6440
|
+
var import_react4 = __toESM(require("react"), 1);
|
|
6436
6441
|
var import_jsx_runtime302 = require("react/jsx-runtime");
|
|
6442
|
+
var TextArea = import_react4.default.forwardRef(
|
|
6443
|
+
(props, ref) => {
|
|
6444
|
+
const { value, onChange, disabled, ...textareaProps } = props;
|
|
6445
|
+
const localRef = import_react4.default.useRef(null);
|
|
6446
|
+
const setRefs = (el) => {
|
|
6447
|
+
localRef.current = el;
|
|
6448
|
+
if (!ref) return;
|
|
6449
|
+
if (typeof ref === "function") {
|
|
6450
|
+
ref(el);
|
|
6451
|
+
} else if (ref && typeof ref === "object" && "current" in ref) {
|
|
6452
|
+
ref.current = el;
|
|
6453
|
+
}
|
|
6454
|
+
};
|
|
6455
|
+
const handleOnChange = (e) => {
|
|
6456
|
+
const val = e.target.value;
|
|
6457
|
+
if (onChange) {
|
|
6458
|
+
const event = {
|
|
6459
|
+
...e,
|
|
6460
|
+
target: { value: val }
|
|
6461
|
+
};
|
|
6462
|
+
onChange(event);
|
|
6463
|
+
}
|
|
6464
|
+
};
|
|
6465
|
+
import_react4.default.useEffect(() => {
|
|
6466
|
+
const el = localRef.current;
|
|
6467
|
+
if (!el) return;
|
|
6468
|
+
el.style.height = "0px";
|
|
6469
|
+
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
6470
|
+
el.style.height = `${nextHeight}px`;
|
|
6471
|
+
}, [value]);
|
|
6472
|
+
return /* @__PURE__ */ (0, import_jsx_runtime302.jsx)("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
6473
|
+
"div",
|
|
6474
|
+
{
|
|
6475
|
+
className: clsx_default(
|
|
6476
|
+
"lib-xplat-textarea",
|
|
6477
|
+
disabled ? "disabled" : void 0
|
|
6478
|
+
),
|
|
6479
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime302.jsx)(
|
|
6480
|
+
"textarea",
|
|
6481
|
+
{
|
|
6482
|
+
...textareaProps,
|
|
6483
|
+
ref: setRefs,
|
|
6484
|
+
disabled,
|
|
6485
|
+
value,
|
|
6486
|
+
onChange: handleOnChange
|
|
6487
|
+
}
|
|
6488
|
+
)
|
|
6489
|
+
}
|
|
6490
|
+
) });
|
|
6491
|
+
}
|
|
6492
|
+
);
|
|
6493
|
+
TextArea.displayName = "TextArea";
|
|
6494
|
+
var TextArea_default = TextArea;
|
|
6495
|
+
|
|
6496
|
+
// src/components/ChatInput/ChatInput.tsx
|
|
6497
|
+
var import_jsx_runtime303 = require("react/jsx-runtime");
|
|
6498
|
+
var ChatInput = import_react5.default.forwardRef(
|
|
6499
|
+
(props, ref) => {
|
|
6500
|
+
const {
|
|
6501
|
+
placeholder,
|
|
6502
|
+
value: valueProp,
|
|
6503
|
+
disabled = false,
|
|
6504
|
+
buttonType = "primary",
|
|
6505
|
+
onSubmit,
|
|
6506
|
+
onChange
|
|
6507
|
+
} = props;
|
|
6508
|
+
const isControlled = valueProp !== void 0;
|
|
6509
|
+
const [internalValue, setInternalValue] = import_react5.default.useState("");
|
|
6510
|
+
const value = isControlled ? valueProp : internalValue;
|
|
6511
|
+
const hasText = value.trim().length > 0;
|
|
6512
|
+
const handleChange = (e) => {
|
|
6513
|
+
const val = e.target.value;
|
|
6514
|
+
if (!isControlled) setInternalValue(val);
|
|
6515
|
+
onChange?.(val);
|
|
6516
|
+
};
|
|
6517
|
+
const handleSubmit = () => {
|
|
6518
|
+
if (!hasText || disabled) return;
|
|
6519
|
+
onSubmit?.(value);
|
|
6520
|
+
if (!isControlled) setInternalValue("");
|
|
6521
|
+
};
|
|
6522
|
+
const handleKeyDown = (e) => {
|
|
6523
|
+
if (e.key === "Enter" && !e.shiftKey) {
|
|
6524
|
+
e.preventDefault();
|
|
6525
|
+
handleSubmit();
|
|
6526
|
+
}
|
|
6527
|
+
};
|
|
6528
|
+
return /* @__PURE__ */ (0, import_jsx_runtime303.jsxs)("div", { className: clsx_default("lib-xplat-chat-input", disabled && "disabled"), children: [
|
|
6529
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
6530
|
+
TextArea_default,
|
|
6531
|
+
{
|
|
6532
|
+
ref,
|
|
6533
|
+
placeholder,
|
|
6534
|
+
value,
|
|
6535
|
+
disabled,
|
|
6536
|
+
onChange: handleChange,
|
|
6537
|
+
onKeyDown: handleKeyDown
|
|
6538
|
+
}
|
|
6539
|
+
),
|
|
6540
|
+
/* @__PURE__ */ (0, import_jsx_runtime303.jsx)(
|
|
6541
|
+
"button",
|
|
6542
|
+
{
|
|
6543
|
+
type: "button",
|
|
6544
|
+
className: clsx_default("chat-input-send", `btn-${buttonType}`),
|
|
6545
|
+
disabled: !hasText || disabled,
|
|
6546
|
+
onClick: handleSubmit,
|
|
6547
|
+
"aria-label": "\uC804\uC1A1",
|
|
6548
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime303.jsx)(SendIcon_default, {})
|
|
6549
|
+
}
|
|
6550
|
+
)
|
|
6551
|
+
] });
|
|
6552
|
+
}
|
|
6553
|
+
);
|
|
6554
|
+
ChatInput.displayName = "ChatInput";
|
|
6555
|
+
var ChatInput_default = ChatInput;
|
|
6556
|
+
|
|
6557
|
+
// src/components/Box/Box.tsx
|
|
6558
|
+
var import_jsx_runtime304 = require("react/jsx-runtime");
|
|
6437
6559
|
var Box = ({
|
|
6438
6560
|
children,
|
|
6439
6561
|
title,
|
|
6440
6562
|
variant = "outlined",
|
|
6441
6563
|
padding = "md"
|
|
6442
6564
|
}) => {
|
|
6443
|
-
return /* @__PURE__ */ (0,
|
|
6444
|
-
title && /* @__PURE__ */ (0,
|
|
6445
|
-
/* @__PURE__ */ (0,
|
|
6565
|
+
return /* @__PURE__ */ (0, import_jsx_runtime304.jsxs)("div", { className: clsx_default("lib-xplat-box", variant, `pad-${padding}`), children: [
|
|
6566
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime304.jsx)("div", { className: "box-title", children: title }),
|
|
6567
|
+
/* @__PURE__ */ (0, import_jsx_runtime304.jsx)("div", { className: "box-content", children })
|
|
6446
6568
|
] });
|
|
6447
6569
|
};
|
|
6448
6570
|
Box.displayName = "Box";
|
|
6449
6571
|
var Box_default = Box;
|
|
6450
6572
|
|
|
6451
6573
|
// src/components/CardTab/CardTab.tsx
|
|
6452
|
-
var
|
|
6574
|
+
var import_react6 = __toESM(require("react"), 1);
|
|
6453
6575
|
|
|
6454
6576
|
// src/components/CardTab/CardTabPanel.tsx
|
|
6455
|
-
var
|
|
6577
|
+
var import_jsx_runtime305 = require("react/jsx-runtime");
|
|
6456
6578
|
var CardTabPanel = (props) => {
|
|
6457
6579
|
const { children, columns = 3 } = props;
|
|
6458
|
-
return /* @__PURE__ */ (0,
|
|
6580
|
+
return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
|
|
6459
6581
|
"div",
|
|
6460
6582
|
{
|
|
6461
6583
|
className: "card-tab-panel",
|
|
@@ -6468,7 +6590,7 @@ CardTabPanel.displayName = "CardTab.Panel";
|
|
|
6468
6590
|
var CardTabPanel_default = CardTabPanel;
|
|
6469
6591
|
|
|
6470
6592
|
// src/components/CardTab/CardTab.tsx
|
|
6471
|
-
var
|
|
6593
|
+
var import_jsx_runtime306 = require("react/jsx-runtime");
|
|
6472
6594
|
var CardTabRoot = (props) => {
|
|
6473
6595
|
const {
|
|
6474
6596
|
tabs,
|
|
@@ -6478,7 +6600,7 @@ var CardTabRoot = (props) => {
|
|
|
6478
6600
|
children
|
|
6479
6601
|
} = props;
|
|
6480
6602
|
const isControlled = activeValueProp !== void 0;
|
|
6481
|
-
const [uncontrolledValue, setUncontrolledValue] =
|
|
6603
|
+
const [uncontrolledValue, setUncontrolledValue] = import_react6.default.useState(tabs[0]?.value ?? "");
|
|
6482
6604
|
const activeValue = isControlled ? activeValueProp : uncontrolledValue;
|
|
6483
6605
|
const handleTabClick = (tab) => {
|
|
6484
6606
|
if (!isControlled) {
|
|
@@ -6486,16 +6608,16 @@ var CardTabRoot = (props) => {
|
|
|
6486
6608
|
}
|
|
6487
6609
|
onChange?.(tab);
|
|
6488
6610
|
};
|
|
6489
|
-
const panels =
|
|
6490
|
-
(child) =>
|
|
6611
|
+
const panels = import_react6.default.Children.toArray(children).filter(
|
|
6612
|
+
(child) => import_react6.default.isValidElement(child) && child.type === CardTabPanel_default
|
|
6491
6613
|
);
|
|
6492
6614
|
const activePanel = panels.find(
|
|
6493
6615
|
(panel) => panel.props.value === activeValue
|
|
6494
6616
|
);
|
|
6495
|
-
return /* @__PURE__ */ (0,
|
|
6496
|
-
/* @__PURE__ */ (0,
|
|
6617
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsxs)("div", { className: clsx_default("lib-xplat-card-tab", size), children: [
|
|
6618
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)("div", { className: "card-tab-bar", children: tabs.map((tab) => {
|
|
6497
6619
|
const isActive = tab.value === activeValue;
|
|
6498
|
-
return /* @__PURE__ */ (0,
|
|
6620
|
+
return /* @__PURE__ */ (0, import_jsx_runtime306.jsx)(
|
|
6499
6621
|
"button",
|
|
6500
6622
|
{
|
|
6501
6623
|
className: clsx_default("card-tab-trigger", isActive && "active"),
|
|
@@ -6507,7 +6629,7 @@ var CardTabRoot = (props) => {
|
|
|
6507
6629
|
tab.value
|
|
6508
6630
|
);
|
|
6509
6631
|
}) }),
|
|
6510
|
-
/* @__PURE__ */ (0,
|
|
6632
|
+
/* @__PURE__ */ (0, import_jsx_runtime306.jsx)("div", { className: "card-tab-body", children: activePanel })
|
|
6511
6633
|
] });
|
|
6512
6634
|
};
|
|
6513
6635
|
CardTabRoot.displayName = "CardTab";
|
|
@@ -6517,8 +6639,8 @@ var CardTab = Object.assign(CardTabRoot, {
|
|
|
6517
6639
|
var CardTab_default = CardTab;
|
|
6518
6640
|
|
|
6519
6641
|
// src/components/Chart/Chart.tsx
|
|
6520
|
-
var
|
|
6521
|
-
var
|
|
6642
|
+
var import_react7 = __toESM(require("react"), 1);
|
|
6643
|
+
var import_jsx_runtime307 = require("react/jsx-runtime");
|
|
6522
6644
|
var CATEGORICAL_COUNT2 = 8;
|
|
6523
6645
|
var LINE_BAR_PALETTES = Array.from({ length: CATEGORICAL_COUNT2 }, (_, i) => {
|
|
6524
6646
|
const n = i + 1;
|
|
@@ -6564,11 +6686,11 @@ var toSmoothPath = (points) => {
|
|
|
6564
6686
|
};
|
|
6565
6687
|
var RESIZE_SETTLE_MS = 150;
|
|
6566
6688
|
var useChartSize = (ref) => {
|
|
6567
|
-
const [size, setSize] =
|
|
6568
|
-
const settleTimer =
|
|
6569
|
-
const committedSize =
|
|
6570
|
-
const initialRef =
|
|
6571
|
-
|
|
6689
|
+
const [size, setSize] = import_react7.default.useState({ width: 0, height: 0 });
|
|
6690
|
+
const settleTimer = import_react7.default.useRef(0);
|
|
6691
|
+
const committedSize = import_react7.default.useRef({ width: 0, height: 0 });
|
|
6692
|
+
const initialRef = import_react7.default.useRef(true);
|
|
6693
|
+
import_react7.default.useEffect(() => {
|
|
6572
6694
|
const el = ref.current;
|
|
6573
6695
|
if (!el) return;
|
|
6574
6696
|
const observer = new ResizeObserver((entries) => {
|
|
@@ -6610,10 +6732,10 @@ var useChartSize = (ref) => {
|
|
|
6610
6732
|
};
|
|
6611
6733
|
var prefersReducedMotion = () => typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
6612
6734
|
var useChartAnimation = (containerRef, dataKey) => {
|
|
6613
|
-
const [animate, setAnimate] =
|
|
6614
|
-
const prevDataKey =
|
|
6615
|
-
const hasAnimated =
|
|
6616
|
-
|
|
6735
|
+
const [animate, setAnimate] = import_react7.default.useState(false);
|
|
6736
|
+
const prevDataKey = import_react7.default.useRef(dataKey);
|
|
6737
|
+
const hasAnimated = import_react7.default.useRef(false);
|
|
6738
|
+
import_react7.default.useEffect(() => {
|
|
6617
6739
|
if (prefersReducedMotion()) return;
|
|
6618
6740
|
const el = containerRef.current;
|
|
6619
6741
|
if (!el) return;
|
|
@@ -6629,7 +6751,7 @@ var useChartAnimation = (containerRef, dataKey) => {
|
|
|
6629
6751
|
observer.observe(el);
|
|
6630
6752
|
return () => observer.disconnect();
|
|
6631
6753
|
}, [containerRef]);
|
|
6632
|
-
|
|
6754
|
+
import_react7.default.useEffect(() => {
|
|
6633
6755
|
if (dataKey !== prevDataKey.current) {
|
|
6634
6756
|
prevDataKey.current = dataKey;
|
|
6635
6757
|
if (prefersReducedMotion()) return;
|
|
@@ -6640,15 +6762,15 @@ var useChartAnimation = (containerRef, dataKey) => {
|
|
|
6640
6762
|
return animate || prefersReducedMotion();
|
|
6641
6763
|
};
|
|
6642
6764
|
var useChartTooltip = (enabled) => {
|
|
6643
|
-
const [tooltip, setTooltip] =
|
|
6765
|
+
const [tooltip, setTooltip] = import_react7.default.useState({
|
|
6644
6766
|
visible: false,
|
|
6645
6767
|
x: 0,
|
|
6646
6768
|
y: 0,
|
|
6647
6769
|
content: ""
|
|
6648
6770
|
});
|
|
6649
|
-
const containerRef =
|
|
6650
|
-
const rafRef =
|
|
6651
|
-
const move =
|
|
6771
|
+
const containerRef = import_react7.default.useRef(null);
|
|
6772
|
+
const rafRef = import_react7.default.useRef(0);
|
|
6773
|
+
const move = import_react7.default.useCallback((e) => {
|
|
6652
6774
|
if (!enabled) return;
|
|
6653
6775
|
const clientX = e.clientX;
|
|
6654
6776
|
const clientY = e.clientY;
|
|
@@ -6663,7 +6785,7 @@ var useChartTooltip = (enabled) => {
|
|
|
6663
6785
|
}));
|
|
6664
6786
|
});
|
|
6665
6787
|
}, [enabled]);
|
|
6666
|
-
const show =
|
|
6788
|
+
const show = import_react7.default.useCallback((e, content) => {
|
|
6667
6789
|
if (!enabled) return;
|
|
6668
6790
|
const rect = containerRef.current?.getBoundingClientRect();
|
|
6669
6791
|
if (!rect) return;
|
|
@@ -6674,18 +6796,18 @@ var useChartTooltip = (enabled) => {
|
|
|
6674
6796
|
content
|
|
6675
6797
|
});
|
|
6676
6798
|
}, [enabled]);
|
|
6677
|
-
const hide =
|
|
6799
|
+
const hide = import_react7.default.useCallback(() => {
|
|
6678
6800
|
cancelAnimationFrame(rafRef.current);
|
|
6679
6801
|
setTooltip((prev) => ({ ...prev, visible: false }));
|
|
6680
6802
|
}, []);
|
|
6681
6803
|
return { tooltip, show, hide, move, containerRef };
|
|
6682
6804
|
};
|
|
6683
|
-
var GridLines =
|
|
6805
|
+
var GridLines = import_react7.default.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(import_jsx_runtime307.Fragment, { children: [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
|
|
6684
6806
|
const y = PADDING.top + (1 - ratio) * chartH;
|
|
6685
6807
|
const val = Math.round(maxVal * ratio);
|
|
6686
|
-
return /* @__PURE__ */ (0,
|
|
6687
|
-
/* @__PURE__ */ (0,
|
|
6688
|
-
/* @__PURE__ */ (0,
|
|
6808
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("g", { children: [
|
|
6809
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
|
|
6810
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
|
|
6689
6811
|
] }, ratio);
|
|
6690
6812
|
}) }));
|
|
6691
6813
|
GridLines.displayName = "GridLines";
|
|
@@ -6695,25 +6817,25 @@ var getLabelStep = (count, chartW) => {
|
|
|
6695
6817
|
if (count <= maxLabels) return 1;
|
|
6696
6818
|
return Math.ceil(count / maxLabels);
|
|
6697
6819
|
};
|
|
6698
|
-
var AxisLabels =
|
|
6820
|
+
var AxisLabels = import_react7.default.memo(({ labels, count, chartW, height }) => {
|
|
6699
6821
|
const step = getLabelStep(count, chartW);
|
|
6700
|
-
return /* @__PURE__ */ (0,
|
|
6822
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(import_jsx_runtime307.Fragment, { children: labels.map((label, i) => {
|
|
6701
6823
|
if (i % step !== 0) return null;
|
|
6702
6824
|
const x = PADDING.left + i / (count - 1 || 1) * chartW;
|
|
6703
|
-
return /* @__PURE__ */ (0,
|
|
6825
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
6704
6826
|
}) });
|
|
6705
6827
|
});
|
|
6706
6828
|
AxisLabels.displayName = "AxisLabels";
|
|
6707
|
-
var LineChart =
|
|
6708
|
-
const entries =
|
|
6709
|
-
const maxVal =
|
|
6829
|
+
var LineChart = import_react7.default.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
6830
|
+
const entries = import_react7.default.useMemo(() => Object.entries(data), [data]);
|
|
6831
|
+
const maxVal = import_react7.default.useMemo(() => {
|
|
6710
6832
|
const allValues = entries.flatMap(([, v]) => v);
|
|
6711
6833
|
return Math.max(...allValues) * 1.2 || 1;
|
|
6712
6834
|
}, [entries]);
|
|
6713
6835
|
const count = labels.length;
|
|
6714
6836
|
const chartW = width - PADDING.left - PADDING.right;
|
|
6715
6837
|
const chartH = height - PADDING.top - PADDING.bottom;
|
|
6716
|
-
const seriesPoints =
|
|
6838
|
+
const seriesPoints = import_react7.default.useMemo(
|
|
6717
6839
|
() => entries.map(
|
|
6718
6840
|
([, values]) => values.map((v, i) => ({
|
|
6719
6841
|
x: PADDING.left + i / (count - 1 || 1) * chartW,
|
|
@@ -6724,8 +6846,8 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, anima
|
|
|
6724
6846
|
[entries, count, chartW, chartH, maxVal]
|
|
6725
6847
|
);
|
|
6726
6848
|
const showPoints = count <= 100;
|
|
6727
|
-
const lineRefs =
|
|
6728
|
-
|
|
6849
|
+
const lineRefs = import_react7.default.useRef([]);
|
|
6850
|
+
import_react7.default.useEffect(() => {
|
|
6729
6851
|
if (!animate) return;
|
|
6730
6852
|
lineRefs.current.forEach((el) => {
|
|
6731
6853
|
if (!el) return;
|
|
@@ -6738,9 +6860,9 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, anima
|
|
|
6738
6860
|
});
|
|
6739
6861
|
});
|
|
6740
6862
|
}, [animate, seriesPoints]);
|
|
6741
|
-
return /* @__PURE__ */ (0,
|
|
6742
|
-
/* @__PURE__ */ (0,
|
|
6743
|
-
/* @__PURE__ */ (0,
|
|
6863
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
6864
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
6865
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(AxisLabels, { labels, count, chartW, height }),
|
|
6744
6866
|
entries.map(([key], di) => {
|
|
6745
6867
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
6746
6868
|
const color = palette[2];
|
|
@@ -6749,12 +6871,12 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, anima
|
|
|
6749
6871
|
const gradientId = `line-gradient-${di}`;
|
|
6750
6872
|
const polyPoints = points.map((p) => `${p.x},${p.y}`).join(" ");
|
|
6751
6873
|
const areaD = `M ${points[0].x},${points[0].y} ${points.map((p) => `L ${p.x},${p.y}`).join(" ")} L ${points[points.length - 1].x},${PADDING.top + chartH} L ${points[0].x},${PADDING.top + chartH} Z`;
|
|
6752
|
-
return /* @__PURE__ */ (0,
|
|
6753
|
-
/* @__PURE__ */ (0,
|
|
6754
|
-
/* @__PURE__ */ (0,
|
|
6755
|
-
/* @__PURE__ */ (0,
|
|
6874
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("g", { children: [
|
|
6875
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
6876
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("stop", { offset: "0%", stopColor: areaColor, stopOpacity: "0.2" }),
|
|
6877
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("stop", { offset: "100%", stopColor: areaColor, stopOpacity: "0" })
|
|
6756
6878
|
] }) }),
|
|
6757
|
-
/* @__PURE__ */ (0,
|
|
6879
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
6758
6880
|
"path",
|
|
6759
6881
|
{
|
|
6760
6882
|
d: areaD,
|
|
@@ -6763,7 +6885,7 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, anima
|
|
|
6763
6885
|
style: animate ? { animationDelay: "600ms" } : { opacity: 1 }
|
|
6764
6886
|
}
|
|
6765
6887
|
),
|
|
6766
|
-
/* @__PURE__ */ (0,
|
|
6888
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
6767
6889
|
"polyline",
|
|
6768
6890
|
{
|
|
6769
6891
|
ref: (el) => {
|
|
@@ -6775,7 +6897,7 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, anima
|
|
|
6775
6897
|
strokeWidth: "2"
|
|
6776
6898
|
}
|
|
6777
6899
|
),
|
|
6778
|
-
showPoints && points.map((p, i) => /* @__PURE__ */ (0,
|
|
6900
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
6779
6901
|
"circle",
|
|
6780
6902
|
{
|
|
6781
6903
|
cx: p.x,
|
|
@@ -6794,16 +6916,16 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, anima
|
|
|
6794
6916
|
] });
|
|
6795
6917
|
});
|
|
6796
6918
|
LineChart.displayName = "LineChart";
|
|
6797
|
-
var CurveChart =
|
|
6798
|
-
const entries =
|
|
6799
|
-
const maxVal =
|
|
6919
|
+
var CurveChart = import_react7.default.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
6920
|
+
const entries = import_react7.default.useMemo(() => Object.entries(data), [data]);
|
|
6921
|
+
const maxVal = import_react7.default.useMemo(() => {
|
|
6800
6922
|
const allValues = entries.flatMap(([, v]) => v);
|
|
6801
6923
|
return Math.max(...allValues) * 1.2 || 1;
|
|
6802
6924
|
}, [entries]);
|
|
6803
6925
|
const count = labels.length;
|
|
6804
6926
|
const chartW = width - PADDING.left - PADDING.right;
|
|
6805
6927
|
const chartH = height - PADDING.top - PADDING.bottom;
|
|
6806
|
-
const seriesPoints =
|
|
6928
|
+
const seriesPoints = import_react7.default.useMemo(
|
|
6807
6929
|
() => entries.map(
|
|
6808
6930
|
([, values]) => values.map((v, i) => ({
|
|
6809
6931
|
x: PADDING.left + i / (count - 1 || 1) * chartW,
|
|
@@ -6814,8 +6936,8 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, anim
|
|
|
6814
6936
|
[entries, count, chartW, chartH, maxVal]
|
|
6815
6937
|
);
|
|
6816
6938
|
const showPoints = count <= 100;
|
|
6817
|
-
const lineRefs =
|
|
6818
|
-
|
|
6939
|
+
const lineRefs = import_react7.default.useRef([]);
|
|
6940
|
+
import_react7.default.useEffect(() => {
|
|
6819
6941
|
if (!animate) return;
|
|
6820
6942
|
lineRefs.current.forEach((el) => {
|
|
6821
6943
|
if (!el) return;
|
|
@@ -6828,9 +6950,9 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, anim
|
|
|
6828
6950
|
});
|
|
6829
6951
|
});
|
|
6830
6952
|
}, [animate, seriesPoints]);
|
|
6831
|
-
return /* @__PURE__ */ (0,
|
|
6832
|
-
/* @__PURE__ */ (0,
|
|
6833
|
-
/* @__PURE__ */ (0,
|
|
6953
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
6954
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
6955
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(AxisLabels, { labels, count, chartW, height }),
|
|
6834
6956
|
entries.map(([key], di) => {
|
|
6835
6957
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
6836
6958
|
const color = palette[2];
|
|
@@ -6839,12 +6961,12 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, anim
|
|
|
6839
6961
|
const gradientId = `curve-gradient-${di}`;
|
|
6840
6962
|
const linePath = toSmoothPath(points);
|
|
6841
6963
|
const areaPath = linePath + ` L ${points[points.length - 1].x} ${PADDING.top + chartH} L ${points[0].x} ${PADDING.top + chartH} Z`;
|
|
6842
|
-
return /* @__PURE__ */ (0,
|
|
6843
|
-
/* @__PURE__ */ (0,
|
|
6844
|
-
/* @__PURE__ */ (0,
|
|
6845
|
-
/* @__PURE__ */ (0,
|
|
6964
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("g", { children: [
|
|
6965
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
6966
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("stop", { offset: "0%", stopColor: areaColor, stopOpacity: "0.4" }),
|
|
6967
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("stop", { offset: "100%", stopColor: areaColor, stopOpacity: "0.02" })
|
|
6846
6968
|
] }) }),
|
|
6847
|
-
/* @__PURE__ */ (0,
|
|
6969
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
6848
6970
|
"path",
|
|
6849
6971
|
{
|
|
6850
6972
|
d: areaPath,
|
|
@@ -6853,7 +6975,7 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, anim
|
|
|
6853
6975
|
style: animate ? { animationDelay: "600ms" } : { opacity: 1 }
|
|
6854
6976
|
}
|
|
6855
6977
|
),
|
|
6856
|
-
/* @__PURE__ */ (0,
|
|
6978
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
6857
6979
|
"path",
|
|
6858
6980
|
{
|
|
6859
6981
|
ref: (el) => {
|
|
@@ -6865,7 +6987,7 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, anim
|
|
|
6865
6987
|
strokeWidth: "2"
|
|
6866
6988
|
}
|
|
6867
6989
|
),
|
|
6868
|
-
showPoints && points.map((p, i) => /* @__PURE__ */ (0,
|
|
6990
|
+
showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
6869
6991
|
"circle",
|
|
6870
6992
|
{
|
|
6871
6993
|
cx: p.x,
|
|
@@ -6884,9 +7006,9 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, anim
|
|
|
6884
7006
|
] });
|
|
6885
7007
|
});
|
|
6886
7008
|
CurveChart.displayName = "CurveChart";
|
|
6887
|
-
var BarChart =
|
|
6888
|
-
const entries =
|
|
6889
|
-
const maxVal =
|
|
7009
|
+
var BarChart = import_react7.default.memo(({ data, labels, width, height, animate, onHover, onMove, onLeave }) => {
|
|
7010
|
+
const entries = import_react7.default.useMemo(() => Object.entries(data), [data]);
|
|
7011
|
+
const maxVal = import_react7.default.useMemo(() => {
|
|
6890
7012
|
const allValues = entries.flatMap(([, v]) => v);
|
|
6891
7013
|
return Math.max(...allValues) * 1.2 || 1;
|
|
6892
7014
|
}, [entries]);
|
|
@@ -6898,7 +7020,7 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, animat
|
|
|
6898
7020
|
const barGap = groupCount > 1 ? 2 : 0;
|
|
6899
7021
|
const barW = Math.max(1, Math.min(32, (groupW * 0.7 - barGap * (groupCount - 1)) / groupCount));
|
|
6900
7022
|
const baseline = PADDING.top + chartH;
|
|
6901
|
-
const bars =
|
|
7023
|
+
const bars = import_react7.default.useMemo(
|
|
6902
7024
|
() => entries.map(
|
|
6903
7025
|
([, values], di) => values.map((v, i) => {
|
|
6904
7026
|
const totalBarsW = barW * groupCount + barGap * (groupCount - 1);
|
|
@@ -6911,11 +7033,11 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, animat
|
|
|
6911
7033
|
[entries, maxVal, chartH, groupW, barW, barGap, groupCount]
|
|
6912
7034
|
);
|
|
6913
7035
|
const barLabelStep = getLabelStep(count, chartW);
|
|
6914
|
-
return /* @__PURE__ */ (0,
|
|
6915
|
-
/* @__PURE__ */ (0,
|
|
7036
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
|
|
7037
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)(GridLines, { width, height, chartH, maxVal }),
|
|
6916
7038
|
labels.map((label, i) => {
|
|
6917
7039
|
if (i % barLabelStep !== 0) return null;
|
|
6918
|
-
return /* @__PURE__ */ (0,
|
|
7040
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsx)("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
|
|
6919
7041
|
}),
|
|
6920
7042
|
entries.map(([key], di) => {
|
|
6921
7043
|
const palette = getPalette(LINE_BAR_PALETTES, di, key);
|
|
@@ -6924,7 +7046,7 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, animat
|
|
|
6924
7046
|
const r2 = Math.min(4, b.w / 2);
|
|
6925
7047
|
const d = b.h <= r2 ? `M ${b.x} ${b.y + b.h} V ${b.y} H ${b.x + b.w} V ${b.y + b.h} Z` : `M ${b.x} ${b.y + b.h} V ${b.y + r2} Q ${b.x} ${b.y} ${b.x + r2} ${b.y} H ${b.x + b.w - r2} Q ${b.x + b.w} ${b.y} ${b.x + b.w} ${b.y + r2} V ${b.y + b.h} Z`;
|
|
6926
7048
|
const delay = 100 + i * 80;
|
|
6927
|
-
return /* @__PURE__ */ (0,
|
|
7049
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
6928
7050
|
"path",
|
|
6929
7051
|
{
|
|
6930
7052
|
d,
|
|
@@ -6945,11 +7067,11 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, animat
|
|
|
6945
7067
|
] });
|
|
6946
7068
|
});
|
|
6947
7069
|
BarChart.displayName = "BarChart";
|
|
6948
|
-
var PieDonutChart =
|
|
7070
|
+
var PieDonutChart = import_react7.default.memo(
|
|
6949
7071
|
({ data, labels, width, height, animate, isDoughnut, onHover, onMove, onLeave }) => {
|
|
6950
|
-
const entries =
|
|
6951
|
-
const values =
|
|
6952
|
-
const total =
|
|
7072
|
+
const entries = import_react7.default.useMemo(() => Object.entries(data), [data]);
|
|
7073
|
+
const values = import_react7.default.useMemo(() => entries.flatMap(([, v]) => v), [entries]);
|
|
7074
|
+
const total = import_react7.default.useMemo(() => values.reduce((a, b) => a + b, 0) || 1, [values]);
|
|
6953
7075
|
const size = Math.min(width, height);
|
|
6954
7076
|
const cx = size / 2;
|
|
6955
7077
|
const cy = size / 2;
|
|
@@ -6957,8 +7079,22 @@ var PieDonutChart = import_react5.default.memo(
|
|
|
6957
7079
|
const innerR = isDoughnut ? r2 * 0.5 : 0;
|
|
6958
7080
|
const firstKey = entries[0]?.[0] ?? "";
|
|
6959
7081
|
const colorOffset = hashString(firstKey);
|
|
6960
|
-
const
|
|
7082
|
+
const maskRef = import_react7.default.useRef(null);
|
|
7083
|
+
const maskR = r2 + 10;
|
|
7084
|
+
const maskCircumference = 2 * Math.PI * maskR;
|
|
7085
|
+
import_react7.default.useEffect(() => {
|
|
7086
|
+
if (!animate || !maskRef.current) return;
|
|
7087
|
+
const el = maskRef.current;
|
|
7088
|
+
el.style.strokeDasharray = `${maskCircumference}`;
|
|
7089
|
+
el.style.strokeDashoffset = `${maskCircumference}`;
|
|
7090
|
+
requestAnimationFrame(() => {
|
|
7091
|
+
el.style.transition = "stroke-dashoffset 1000ms ease-out";
|
|
7092
|
+
el.style.strokeDashoffset = "0";
|
|
7093
|
+
});
|
|
7094
|
+
}, [animate, maskCircumference]);
|
|
7095
|
+
const sliceData = import_react7.default.useMemo(() => {
|
|
6961
7096
|
let angle0 = -Math.PI / 2;
|
|
7097
|
+
let cumulativeAngle = 0;
|
|
6962
7098
|
return values.map((v, i) => {
|
|
6963
7099
|
const angle = v / total * Math.PI * 2;
|
|
6964
7100
|
const endAngle = angle0 + angle;
|
|
@@ -6982,45 +7118,60 @@ var PieDonutChart = import_react5.default.memo(
|
|
|
6982
7118
|
const lx = cx + labelR * Math.cos(midAngle);
|
|
6983
7119
|
const ly = cy + labelR * Math.sin(midAngle);
|
|
6984
7120
|
const pct = Math.round(v / total * 100);
|
|
7121
|
+
cumulativeAngle += angle;
|
|
7122
|
+
const sliceEndRatio = cumulativeAngle / (Math.PI * 2);
|
|
7123
|
+
const labelDelay = 1e3 * sliceEndRatio + 150;
|
|
6985
7124
|
angle0 = endAngle;
|
|
6986
|
-
return { d, lx, ly, v, pct, angle, label: labels[i] || `${i + 1}
|
|
7125
|
+
return { d, lx, ly, v, pct, angle, label: labels[i] || `${i + 1}`, labelDelay };
|
|
6987
7126
|
});
|
|
6988
7127
|
}, [values, total, cx, cy, r2, innerR, labels]);
|
|
6989
|
-
|
|
6990
|
-
|
|
6991
|
-
|
|
6992
|
-
|
|
6993
|
-
|
|
6994
|
-
|
|
6995
|
-
|
|
6996
|
-
|
|
6997
|
-
|
|
6998
|
-
|
|
6999
|
-
|
|
7000
|
-
|
|
7001
|
-
}
|
|
7002
|
-
|
|
7003
|
-
|
|
7004
|
-
|
|
7005
|
-
|
|
7006
|
-
|
|
7007
|
-
|
|
7008
|
-
|
|
7009
|
-
|
|
7010
|
-
|
|
7011
|
-
|
|
7012
|
-
|
|
7013
|
-
|
|
7014
|
-
|
|
7015
|
-
|
|
7016
|
-
|
|
7128
|
+
const maskId = `pie-mask-${isDoughnut ? "d" : "p"}`;
|
|
7129
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("svg", { viewBox: `0 0 ${size} ${size}`, className: "chart-svg chart-pie", children: [
|
|
7130
|
+
animate && /* @__PURE__ */ (0, import_jsx_runtime307.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime307.jsx)("mask", { id: maskId, children: /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
7131
|
+
"circle",
|
|
7132
|
+
{
|
|
7133
|
+
ref: maskRef,
|
|
7134
|
+
cx,
|
|
7135
|
+
cy,
|
|
7136
|
+
r: maskR,
|
|
7137
|
+
fill: "none",
|
|
7138
|
+
stroke: "white",
|
|
7139
|
+
strokeWidth: maskR * 2,
|
|
7140
|
+
transform: `rotate(-90 ${cx} ${cy})`
|
|
7141
|
+
}
|
|
7142
|
+
) }) }),
|
|
7143
|
+
/* @__PURE__ */ (0, import_jsx_runtime307.jsx)("g", { mask: animate ? `url(#${maskId})` : void 0, children: sliceData.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime307.jsx)("g", { children: /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
7144
|
+
"path",
|
|
7145
|
+
{
|
|
7146
|
+
d: s.d,
|
|
7147
|
+
fill: PIE_COLORS[(i + colorOffset) % PIE_COLORS.length],
|
|
7148
|
+
className: "chart-slice",
|
|
7149
|
+
onMouseEnter: (e) => onHover(e, `${s.label}: ${s.v} (${s.pct}%)`),
|
|
7150
|
+
onMouseMove: onMove,
|
|
7151
|
+
onMouseLeave: onLeave
|
|
7152
|
+
}
|
|
7153
|
+
) }, i)) }),
|
|
7154
|
+
sliceData.map((s, i) => s.angle > 0.2 && /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
7155
|
+
"text",
|
|
7156
|
+
{
|
|
7157
|
+
x: s.lx,
|
|
7158
|
+
y: s.ly,
|
|
7159
|
+
className: `chart-pie-label ${animate ? "chart-pie-label-animate" : ""}`,
|
|
7160
|
+
style: animate ? { animationDelay: `${s.labelDelay}ms` } : void 0,
|
|
7161
|
+
textAnchor: "middle",
|
|
7162
|
+
dominantBaseline: "central",
|
|
7163
|
+
children: s.v
|
|
7164
|
+
},
|
|
7165
|
+
`label-${i}`
|
|
7166
|
+
))
|
|
7167
|
+
] });
|
|
7017
7168
|
}
|
|
7018
7169
|
);
|
|
7019
7170
|
PieDonutChart.displayName = "PieDonutChart";
|
|
7020
7171
|
var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
7021
|
-
const ref =
|
|
7022
|
-
const [adjustedX, setAdjustedX] =
|
|
7023
|
-
|
|
7172
|
+
const ref = import_react7.default.useRef(null);
|
|
7173
|
+
const [adjustedX, setAdjustedX] = import_react7.default.useState(x);
|
|
7174
|
+
import_react7.default.useEffect(() => {
|
|
7024
7175
|
const el = ref.current;
|
|
7025
7176
|
if (!el) return;
|
|
7026
7177
|
const w = el.offsetWidth;
|
|
@@ -7031,7 +7182,7 @@ var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
|
7031
7182
|
else if (x + half > containerWidth - margin) nx = containerWidth - half - margin;
|
|
7032
7183
|
setAdjustedX(nx);
|
|
7033
7184
|
}, [x, containerWidth]);
|
|
7034
|
-
return /* @__PURE__ */ (0,
|
|
7185
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
7035
7186
|
"div",
|
|
7036
7187
|
{
|
|
7037
7188
|
ref,
|
|
@@ -7041,22 +7192,22 @@ var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
|
7041
7192
|
}
|
|
7042
7193
|
);
|
|
7043
7194
|
};
|
|
7044
|
-
var Chart =
|
|
7195
|
+
var Chart = import_react7.default.memo((props) => {
|
|
7045
7196
|
const { type, data, labels, tooltip: showTooltip = true } = props;
|
|
7046
7197
|
const { tooltip, show, hide, move, containerRef } = useChartTooltip(showTooltip);
|
|
7047
7198
|
const { width, height } = useChartSize(containerRef);
|
|
7048
|
-
const stableData =
|
|
7049
|
-
const stableLabels =
|
|
7050
|
-
const dataKey =
|
|
7199
|
+
const stableData = import_react7.default.useMemo(() => data, [JSON.stringify(data)]);
|
|
7200
|
+
const stableLabels = import_react7.default.useMemo(() => labels, [JSON.stringify(labels)]);
|
|
7201
|
+
const dataKey = import_react7.default.useMemo(() => JSON.stringify(labels), [labels]);
|
|
7051
7202
|
const animate = useChartAnimation(containerRef, dataKey);
|
|
7052
7203
|
const ready = width > 0 && height > 0;
|
|
7053
|
-
return /* @__PURE__ */ (0,
|
|
7054
|
-
ready && type === "line" && /* @__PURE__ */ (0,
|
|
7055
|
-
ready && type === "curve" && /* @__PURE__ */ (0,
|
|
7056
|
-
ready && type === "bar" && /* @__PURE__ */ (0,
|
|
7057
|
-
ready && type === "pie" && /* @__PURE__ */ (0,
|
|
7058
|
-
ready && type === "doughnut" && /* @__PURE__ */ (0,
|
|
7059
|
-
tooltip.visible && /* @__PURE__ */ (0,
|
|
7204
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsxs)("div", { className: "lib-xplat-chart", ref: containerRef, children: [
|
|
7205
|
+
ready && type === "line" && /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(LineChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
7206
|
+
ready && type === "curve" && /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(CurveChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
7207
|
+
ready && type === "bar" && /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(BarChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
7208
|
+
ready && type === "pie" && /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(PieDonutChart, { data: stableData, labels: stableLabels, width, height, animate, onHover: show, onMove: move, onLeave: hide }),
|
|
7209
|
+
ready && type === "doughnut" && /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(PieDonutChart, { data: stableData, labels: stableLabels, width, height, animate, isDoughnut: true, onHover: show, onMove: move, onLeave: hide }),
|
|
7210
|
+
tooltip.visible && /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(TooltipBubble, { x: tooltip.x, y: tooltip.y, containerWidth: width, children: tooltip.content })
|
|
7060
7211
|
] });
|
|
7061
7212
|
});
|
|
7062
7213
|
Chart.displayName = "Chart";
|
|
@@ -7082,7 +7233,7 @@ var import_tokens_core = require("@x-plat/tokens-core");
|
|
|
7082
7233
|
var import_tokens_core2 = require("@x-plat/tokens-core");
|
|
7083
7234
|
|
|
7084
7235
|
// src/components/CheckBox/CheckBox.tsx
|
|
7085
|
-
var
|
|
7236
|
+
var import_jsx_runtime308 = require("react/jsx-runtime");
|
|
7086
7237
|
var CheckBox = (props) => {
|
|
7087
7238
|
const {
|
|
7088
7239
|
checked,
|
|
@@ -7100,8 +7251,8 @@ var CheckBox = (props) => {
|
|
|
7100
7251
|
const checkedClasses = `checked`;
|
|
7101
7252
|
const disabledClasses = "disabled";
|
|
7102
7253
|
const boxClasses = disabled ? disabledClasses : checked ? checkedClasses : uncheckedClasses;
|
|
7103
|
-
return /* @__PURE__ */ (0,
|
|
7104
|
-
/* @__PURE__ */ (0,
|
|
7254
|
+
return /* @__PURE__ */ (0, import_jsx_runtime308.jsxs)("label", { className: clsx_default("lib-xplat-checkbox", size, type), children: [
|
|
7255
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsx)(
|
|
7105
7256
|
"input",
|
|
7106
7257
|
{
|
|
7107
7258
|
type: "checkbox",
|
|
@@ -7111,44 +7262,44 @@ var CheckBox = (props) => {
|
|
|
7111
7262
|
...rest
|
|
7112
7263
|
}
|
|
7113
7264
|
),
|
|
7114
|
-
/* @__PURE__ */ (0,
|
|
7115
|
-
label && /* @__PURE__ */ (0,
|
|
7265
|
+
/* @__PURE__ */ (0, import_jsx_runtime308.jsx)("span", { className: clsx_default("checkbox", boxClasses), children: /* @__PURE__ */ (0, import_jsx_runtime308.jsx)("span", { className: clsx_default("check-icon", { visible: checked }), children: /* @__PURE__ */ (0, import_jsx_runtime308.jsx)(CheckIcon_default, {}) }) }),
|
|
7266
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime308.jsx)("span", { className: "label", children: label })
|
|
7116
7267
|
] });
|
|
7117
7268
|
};
|
|
7118
7269
|
CheckBox.displayName = "CheckBox";
|
|
7119
7270
|
var CheckBox_default = CheckBox;
|
|
7120
7271
|
|
|
7121
7272
|
// src/components/Chip/Chip.tsx
|
|
7122
|
-
var
|
|
7273
|
+
var import_jsx_runtime309 = require("react/jsx-runtime");
|
|
7123
7274
|
var Chip = (props) => {
|
|
7124
7275
|
const {
|
|
7125
7276
|
children,
|
|
7126
7277
|
type = "primary",
|
|
7127
7278
|
size = "md"
|
|
7128
7279
|
} = props;
|
|
7129
|
-
return /* @__PURE__ */ (0,
|
|
7280
|
+
return /* @__PURE__ */ (0, import_jsx_runtime309.jsx)("div", { className: clsx_default("lib-xplat-chip", type, size), children });
|
|
7130
7281
|
};
|
|
7131
7282
|
Chip.displayName = "Chip";
|
|
7132
7283
|
var Chip_default = Chip;
|
|
7133
7284
|
|
|
7134
7285
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
7135
|
-
var
|
|
7286
|
+
var import_react14 = __toESM(require("react"), 1);
|
|
7136
7287
|
|
|
7137
7288
|
// src/components/Input/Input.tsx
|
|
7138
|
-
var
|
|
7289
|
+
var import_react8 = __toESM(require("react"), 1);
|
|
7139
7290
|
|
|
7140
7291
|
// src/components/Input/InputValidations.tsx
|
|
7141
|
-
var
|
|
7292
|
+
var import_jsx_runtime310 = require("react/jsx-runtime");
|
|
7142
7293
|
var InputValidations = (props) => {
|
|
7143
7294
|
const { message, status = "default" } = props;
|
|
7144
|
-
return /* @__PURE__ */ (0,
|
|
7145
|
-
/* @__PURE__ */ (0,
|
|
7146
|
-
status === "default" && /* @__PURE__ */ (0,
|
|
7147
|
-
status === "success" && /* @__PURE__ */ (0,
|
|
7148
|
-
status === "warning" && /* @__PURE__ */ (0,
|
|
7149
|
-
status === "error" && /* @__PURE__ */ (0,
|
|
7295
|
+
return /* @__PURE__ */ (0, import_jsx_runtime310.jsxs)("div", { className: clsx_default("lib-xplat-input-validation", status), children: [
|
|
7296
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsxs)("div", { className: "icon", children: [
|
|
7297
|
+
status === "default" && /* @__PURE__ */ (0, import_jsx_runtime310.jsx)(InfoIcon_default, {}),
|
|
7298
|
+
status === "success" && /* @__PURE__ */ (0, import_jsx_runtime310.jsx)(SuccessIcon_default, {}),
|
|
7299
|
+
status === "warning" && /* @__PURE__ */ (0, import_jsx_runtime310.jsx)(InfoIcon_default, {}),
|
|
7300
|
+
status === "error" && /* @__PURE__ */ (0, import_jsx_runtime310.jsx)(ErrorIcon_default, {})
|
|
7150
7301
|
] }),
|
|
7151
|
-
/* @__PURE__ */ (0,
|
|
7302
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)("div", { className: "message", children: message })
|
|
7152
7303
|
] });
|
|
7153
7304
|
};
|
|
7154
7305
|
InputValidations.displayName = "InputValidations";
|
|
@@ -7189,8 +7340,8 @@ var handleTelBackspace = (prevValue, currValue) => {
|
|
|
7189
7340
|
};
|
|
7190
7341
|
|
|
7191
7342
|
// src/components/Input/Input.tsx
|
|
7192
|
-
var
|
|
7193
|
-
var
|
|
7343
|
+
var import_jsx_runtime311 = require("react/jsx-runtime");
|
|
7344
|
+
var import_react9 = require("react");
|
|
7194
7345
|
var formatValue = (type, value) => {
|
|
7195
7346
|
if (value === null || value === void 0) return "";
|
|
7196
7347
|
const strValue = Array.isArray(value) ? String(value[0] ?? "") : String(value);
|
|
@@ -7238,7 +7389,7 @@ var parseValue = (type, value) => {
|
|
|
7238
7389
|
return value;
|
|
7239
7390
|
}
|
|
7240
7391
|
};
|
|
7241
|
-
var Input =
|
|
7392
|
+
var Input = import_react8.default.forwardRef((props, ref) => {
|
|
7242
7393
|
const {
|
|
7243
7394
|
value,
|
|
7244
7395
|
onChange,
|
|
@@ -7264,13 +7415,13 @@ var Input = import_react6.default.forwardRef((props, ref) => {
|
|
|
7264
7415
|
onChange(event);
|
|
7265
7416
|
}
|
|
7266
7417
|
};
|
|
7267
|
-
return /* @__PURE__ */ (0,
|
|
7268
|
-
/* @__PURE__ */ (0,
|
|
7418
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)("div", { className: "lib-xplat-input-wrap", children: [
|
|
7419
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(
|
|
7269
7420
|
"div",
|
|
7270
7421
|
{
|
|
7271
7422
|
className: clsx_default("lib-xplat-input", size, disabled ? "disabled" : void 0),
|
|
7272
7423
|
children: [
|
|
7273
|
-
/* @__PURE__ */ (0,
|
|
7424
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
7274
7425
|
"input",
|
|
7275
7426
|
{
|
|
7276
7427
|
...inputProps,
|
|
@@ -7281,11 +7432,11 @@ var Input = import_react6.default.forwardRef((props, ref) => {
|
|
|
7281
7432
|
onChange: handleChange
|
|
7282
7433
|
}
|
|
7283
7434
|
),
|
|
7284
|
-
suffix && /* @__PURE__ */ (0,
|
|
7435
|
+
suffix && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: "suffix", children: suffix })
|
|
7285
7436
|
]
|
|
7286
7437
|
}
|
|
7287
7438
|
),
|
|
7288
|
-
validations && /* @__PURE__ */ (0,
|
|
7439
|
+
validations && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: "lib-xplat-input-validation-wrap", children: validations?.map((validation, idx) => /* @__PURE__ */ (0, import_react9.createElement)(
|
|
7289
7440
|
InputValidations_default,
|
|
7290
7441
|
{
|
|
7291
7442
|
...validation,
|
|
@@ -7298,20 +7449,20 @@ Input.displayName = "Input";
|
|
|
7298
7449
|
var Input_default = Input;
|
|
7299
7450
|
|
|
7300
7451
|
// src/components/Input/PasswordInput/PasswordInput.tsx
|
|
7301
|
-
var
|
|
7302
|
-
var
|
|
7303
|
-
var PasswordInput =
|
|
7452
|
+
var import_react10 = __toESM(require("react"), 1);
|
|
7453
|
+
var import_jsx_runtime312 = require("react/jsx-runtime");
|
|
7454
|
+
var PasswordInput = import_react10.default.forwardRef(
|
|
7304
7455
|
(props, ref) => {
|
|
7305
7456
|
const { reg: _reg, ...inputProps } = props;
|
|
7306
|
-
const [isView, setIsView] =
|
|
7457
|
+
const [isView, setIsView] = import_react10.default.useState(false);
|
|
7307
7458
|
const handleChangeView = () => {
|
|
7308
7459
|
setIsView((prev) => !prev);
|
|
7309
7460
|
};
|
|
7310
|
-
return /* @__PURE__ */ (0,
|
|
7461
|
+
return /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
7311
7462
|
Input_default,
|
|
7312
7463
|
{
|
|
7313
7464
|
...inputProps,
|
|
7314
|
-
suffix: /* @__PURE__ */ (0,
|
|
7465
|
+
suffix: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "wrapper pointer", onClick: handleChangeView, children: isView ? /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(OpenEyeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(CloseEyeIcon_default, {}) }),
|
|
7315
7466
|
type: isView ? "text" : "password",
|
|
7316
7467
|
ref
|
|
7317
7468
|
}
|
|
@@ -7322,17 +7473,17 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
7322
7473
|
var PasswordInput_default = PasswordInput;
|
|
7323
7474
|
|
|
7324
7475
|
// src/components/Modal/Modal.tsx
|
|
7325
|
-
var
|
|
7476
|
+
var import_react12 = __toESM(require("react"), 1);
|
|
7326
7477
|
var import_react_dom2 = require("react-dom");
|
|
7327
7478
|
|
|
7328
7479
|
// src/tokens/hooks/Portal.tsx
|
|
7329
|
-
var
|
|
7480
|
+
var import_react11 = __toESM(require("react"), 1);
|
|
7330
7481
|
var import_react_dom = __toESM(require("react-dom"), 1);
|
|
7331
|
-
var
|
|
7332
|
-
var PortalContainerContext =
|
|
7333
|
-
var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0,
|
|
7482
|
+
var import_jsx_runtime313 = require("react/jsx-runtime");
|
|
7483
|
+
var PortalContainerContext = import_react11.default.createContext(null);
|
|
7484
|
+
var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(PortalContainerContext.Provider, { value: container, children });
|
|
7334
7485
|
var Portal = ({ children }) => {
|
|
7335
|
-
const contextContainer =
|
|
7486
|
+
const contextContainer = import_react11.default.useContext(PortalContainerContext);
|
|
7336
7487
|
if (typeof document === "undefined") return null;
|
|
7337
7488
|
const container = contextContainer ?? document.body;
|
|
7338
7489
|
return import_react_dom.default.createPortal(children, container);
|
|
@@ -7341,14 +7492,14 @@ Portal.displayName = "Portal";
|
|
|
7341
7492
|
var Portal_default = Portal;
|
|
7342
7493
|
|
|
7343
7494
|
// src/components/Modal/Modal.tsx
|
|
7344
|
-
var
|
|
7495
|
+
var import_jsx_runtime314 = require("react/jsx-runtime");
|
|
7345
7496
|
var ANIMATION_DURATION_MS = 200;
|
|
7346
7497
|
var Modal = (props) => {
|
|
7347
7498
|
const { isOpen, onClose, children } = props;
|
|
7348
|
-
const [mounted, setMounted] =
|
|
7349
|
-
const [visible, setVisible] =
|
|
7350
|
-
const boxRef =
|
|
7351
|
-
|
|
7499
|
+
const [mounted, setMounted] = import_react12.default.useState(false);
|
|
7500
|
+
const [visible, setVisible] = import_react12.default.useState(false);
|
|
7501
|
+
const boxRef = import_react12.default.useRef(null);
|
|
7502
|
+
import_react12.default.useEffect(() => {
|
|
7352
7503
|
if (isOpen) {
|
|
7353
7504
|
setMounted(true);
|
|
7354
7505
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7362,12 +7513,12 @@ var Modal = (props) => {
|
|
|
7362
7513
|
if (!mounted) return null;
|
|
7363
7514
|
const stateClass = visible ? "enter" : "exit";
|
|
7364
7515
|
return (0, import_react_dom2.createPortal)(
|
|
7365
|
-
/* @__PURE__ */ (0,
|
|
7516
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
7366
7517
|
"div",
|
|
7367
7518
|
{
|
|
7368
7519
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
7369
7520
|
onClick: onClose,
|
|
7370
|
-
children: /* @__PURE__ */ (0,
|
|
7521
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
7371
7522
|
"div",
|
|
7372
7523
|
{
|
|
7373
7524
|
ref: boxRef,
|
|
@@ -7375,7 +7526,7 @@ var Modal = (props) => {
|
|
|
7375
7526
|
role: "dialog",
|
|
7376
7527
|
"aria-modal": "true",
|
|
7377
7528
|
onClick: (e) => e.stopPropagation(),
|
|
7378
|
-
children: /* @__PURE__ */ (0,
|
|
7529
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(PortalProvider, { container: boxRef.current, children })
|
|
7379
7530
|
}
|
|
7380
7531
|
)
|
|
7381
7532
|
}
|
|
@@ -7387,9 +7538,9 @@ Modal.displayName = "Modal";
|
|
|
7387
7538
|
var Modal_default = Modal;
|
|
7388
7539
|
|
|
7389
7540
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
7390
|
-
var
|
|
7391
|
-
var
|
|
7392
|
-
var DayCell2 =
|
|
7541
|
+
var import_react13 = __toESM(require("react"), 1);
|
|
7542
|
+
var import_jsx_runtime315 = require("react/jsx-runtime");
|
|
7543
|
+
var DayCell2 = import_react13.default.memo(
|
|
7393
7544
|
({
|
|
7394
7545
|
day,
|
|
7395
7546
|
disabled,
|
|
@@ -7399,7 +7550,7 @@ var DayCell2 = import_react11.default.memo(
|
|
|
7399
7550
|
isEnd,
|
|
7400
7551
|
inRange,
|
|
7401
7552
|
onSelect
|
|
7402
|
-
}) => /* @__PURE__ */ (0,
|
|
7553
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
7403
7554
|
"button",
|
|
7404
7555
|
{
|
|
7405
7556
|
type: "button",
|
|
@@ -7441,26 +7592,26 @@ var SingleDatePicker = (props) => {
|
|
|
7441
7592
|
initialYear,
|
|
7442
7593
|
initialMonth
|
|
7443
7594
|
);
|
|
7444
|
-
const [pickerMode, setPickerMode] =
|
|
7445
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
7595
|
+
const [pickerMode, setPickerMode] = import_react13.default.useState("days");
|
|
7596
|
+
const [yearRangeStart, setYearRangeStart] = import_react13.default.useState(
|
|
7446
7597
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
7447
7598
|
);
|
|
7448
|
-
const minTime =
|
|
7599
|
+
const minTime = import_react13.default.useMemo(
|
|
7449
7600
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
7450
7601
|
[minDate]
|
|
7451
7602
|
);
|
|
7452
|
-
const maxTime =
|
|
7603
|
+
const maxTime = import_react13.default.useMemo(
|
|
7453
7604
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
7454
7605
|
[maxDate]
|
|
7455
7606
|
);
|
|
7456
|
-
const highlightSet =
|
|
7607
|
+
const highlightSet = import_react13.default.useMemo(() => {
|
|
7457
7608
|
const set = /* @__PURE__ */ new Set();
|
|
7458
7609
|
for (const h of highlightDates) {
|
|
7459
7610
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
7460
7611
|
}
|
|
7461
7612
|
return set;
|
|
7462
7613
|
}, [highlightDates]);
|
|
7463
|
-
const handleSelect =
|
|
7614
|
+
const handleSelect = import_react13.default.useCallback(
|
|
7464
7615
|
(date) => {
|
|
7465
7616
|
onChange?.(date);
|
|
7466
7617
|
},
|
|
@@ -7497,20 +7648,20 @@ var SingleDatePicker = (props) => {
|
|
|
7497
7648
|
const monthLabels = MONTH_LABELS[locale];
|
|
7498
7649
|
const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
|
|
7499
7650
|
const hasRange = rangeStart != null && rangeEnd != null;
|
|
7500
|
-
return /* @__PURE__ */ (0,
|
|
7651
|
+
return /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)(
|
|
7501
7652
|
"div",
|
|
7502
7653
|
{
|
|
7503
7654
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
7504
7655
|
children: [
|
|
7505
|
-
/* @__PURE__ */ (0,
|
|
7506
|
-
/* @__PURE__ */ (0,
|
|
7507
|
-
/* @__PURE__ */ (0,
|
|
7508
|
-
/* @__PURE__ */ (0,
|
|
7656
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "datepicker-header", children: [
|
|
7657
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(ChevronLeftIcon_default, {}) }),
|
|
7658
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
|
|
7659
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(ChevronRightIcon_default, {}) })
|
|
7509
7660
|
] }),
|
|
7510
|
-
/* @__PURE__ */ (0,
|
|
7511
|
-
pickerMode === "years" && /* @__PURE__ */ (0,
|
|
7661
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "datepicker-body", children: [
|
|
7662
|
+
pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
|
|
7512
7663
|
const y = yearRangeStart + i;
|
|
7513
|
-
return /* @__PURE__ */ (0,
|
|
7664
|
+
return /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
7514
7665
|
"button",
|
|
7515
7666
|
{
|
|
7516
7667
|
type: "button",
|
|
@@ -7521,7 +7672,7 @@ var SingleDatePicker = (props) => {
|
|
|
7521
7672
|
y
|
|
7522
7673
|
);
|
|
7523
7674
|
}) }),
|
|
7524
|
-
pickerMode === "months" && /* @__PURE__ */ (0,
|
|
7675
|
+
pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
7525
7676
|
"button",
|
|
7526
7677
|
{
|
|
7527
7678
|
type: "button",
|
|
@@ -7531,8 +7682,8 @@ var SingleDatePicker = (props) => {
|
|
|
7531
7682
|
},
|
|
7532
7683
|
i
|
|
7533
7684
|
)) }),
|
|
7534
|
-
pickerMode === "days" && /* @__PURE__ */ (0,
|
|
7535
|
-
/* @__PURE__ */ (0,
|
|
7685
|
+
pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)(import_jsx_runtime315.Fragment, { children: [
|
|
7686
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
7536
7687
|
"div",
|
|
7537
7688
|
{
|
|
7538
7689
|
className: clsx_default(
|
|
@@ -7544,7 +7695,7 @@ var SingleDatePicker = (props) => {
|
|
|
7544
7695
|
},
|
|
7545
7696
|
label
|
|
7546
7697
|
)) }),
|
|
7547
|
-
/* @__PURE__ */ (0,
|
|
7698
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
7548
7699
|
const t = day.date.getTime();
|
|
7549
7700
|
const disabled = t < minTime || t > maxTime;
|
|
7550
7701
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -7554,7 +7705,7 @@ var SingleDatePicker = (props) => {
|
|
|
7554
7705
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
7555
7706
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
7556
7707
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
7557
|
-
return /* @__PURE__ */ (0,
|
|
7708
|
+
return /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
7558
7709
|
DayCell2,
|
|
7559
7710
|
{
|
|
7560
7711
|
day,
|
|
@@ -7579,7 +7730,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
7579
7730
|
var SingleDatePicker_default = SingleDatePicker;
|
|
7580
7731
|
|
|
7581
7732
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
7582
|
-
var
|
|
7733
|
+
var import_jsx_runtime316 = require("react/jsx-runtime");
|
|
7583
7734
|
var formatDate = (date) => {
|
|
7584
7735
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
7585
7736
|
const y = date.getFullYear();
|
|
@@ -7589,8 +7740,8 @@ var formatDate = (date) => {
|
|
|
7589
7740
|
};
|
|
7590
7741
|
var InputDatePicker = (props) => {
|
|
7591
7742
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
7592
|
-
const [isOpen, setIsOpen] =
|
|
7593
|
-
const [tempDate, setTempDate] =
|
|
7743
|
+
const [isOpen, setIsOpen] = import_react14.default.useState(false);
|
|
7744
|
+
const [tempDate, setTempDate] = import_react14.default.useState(value ?? /* @__PURE__ */ new Date());
|
|
7594
7745
|
const handleOpen = () => {
|
|
7595
7746
|
if (disabled) return;
|
|
7596
7747
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -7606,19 +7757,19 @@ var InputDatePicker = (props) => {
|
|
|
7606
7757
|
const handleClose = () => {
|
|
7607
7758
|
setIsOpen(false);
|
|
7608
7759
|
};
|
|
7609
|
-
return /* @__PURE__ */ (0,
|
|
7610
|
-
/* @__PURE__ */ (0,
|
|
7760
|
+
return /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
|
|
7761
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
7611
7762
|
Input_default,
|
|
7612
7763
|
{
|
|
7613
7764
|
value: formatDate(value),
|
|
7614
7765
|
placeholder,
|
|
7615
|
-
suffix: /* @__PURE__ */ (0,
|
|
7766
|
+
suffix: /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(CalenderIcon_default, {}),
|
|
7616
7767
|
disabled,
|
|
7617
7768
|
readOnly: true
|
|
7618
7769
|
}
|
|
7619
7770
|
) }),
|
|
7620
|
-
/* @__PURE__ */ (0,
|
|
7621
|
-
/* @__PURE__ */ (0,
|
|
7771
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: "lib-xplat-popup-datepicker-card", children: [
|
|
7772
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
|
|
7622
7773
|
SingleDatePicker_default,
|
|
7623
7774
|
{
|
|
7624
7775
|
value: tempDate,
|
|
@@ -7628,9 +7779,9 @@ var InputDatePicker = (props) => {
|
|
|
7628
7779
|
locale
|
|
7629
7780
|
}
|
|
7630
7781
|
) }),
|
|
7631
|
-
/* @__PURE__ */ (0,
|
|
7632
|
-
/* @__PURE__ */ (0,
|
|
7633
|
-
/* @__PURE__ */ (0,
|
|
7782
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
7783
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
|
|
7784
|
+
/* @__PURE__ */ (0, import_jsx_runtime316.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7634
7785
|
] })
|
|
7635
7786
|
] }) })
|
|
7636
7787
|
] });
|
|
@@ -7639,20 +7790,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
7639
7790
|
var InputDatePicker_default = InputDatePicker;
|
|
7640
7791
|
|
|
7641
7792
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7642
|
-
var
|
|
7793
|
+
var import_react18 = __toESM(require("react"), 1);
|
|
7643
7794
|
|
|
7644
7795
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7645
|
-
var
|
|
7796
|
+
var import_react17 = __toESM(require("react"), 1);
|
|
7646
7797
|
|
|
7647
7798
|
// src/components/Tab/Tab.tsx
|
|
7648
|
-
var
|
|
7799
|
+
var import_react16 = __toESM(require("react"), 1);
|
|
7649
7800
|
|
|
7650
7801
|
// src/components/Tab/TabItem.tsx
|
|
7651
|
-
var
|
|
7652
|
-
var
|
|
7653
|
-
var TabItem =
|
|
7802
|
+
var import_react15 = __toESM(require("react"), 1);
|
|
7803
|
+
var import_jsx_runtime317 = require("react/jsx-runtime");
|
|
7804
|
+
var TabItem = import_react15.default.forwardRef((props, ref) => {
|
|
7654
7805
|
const { isActive, title, onClick } = props;
|
|
7655
|
-
return /* @__PURE__ */ (0,
|
|
7806
|
+
return /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
7656
7807
|
"div",
|
|
7657
7808
|
{
|
|
7658
7809
|
ref,
|
|
@@ -7666,25 +7817,25 @@ TabItem.displayName = "TabItem";
|
|
|
7666
7817
|
var TabItem_default = TabItem;
|
|
7667
7818
|
|
|
7668
7819
|
// src/components/Tab/Tab.tsx
|
|
7669
|
-
var
|
|
7820
|
+
var import_jsx_runtime318 = require("react/jsx-runtime");
|
|
7670
7821
|
var Tab = (props) => {
|
|
7671
7822
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
7672
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
7823
|
+
const [underlineStyle, setUnderlineStyle] = import_react16.default.useState({
|
|
7673
7824
|
left: 0,
|
|
7674
7825
|
width: 0
|
|
7675
7826
|
});
|
|
7676
|
-
const itemRefs =
|
|
7827
|
+
const itemRefs = import_react16.default.useRef([]);
|
|
7677
7828
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
7678
7829
|
onChange(tabItem, tabIdx);
|
|
7679
7830
|
};
|
|
7680
|
-
|
|
7831
|
+
import_react16.default.useEffect(() => {
|
|
7681
7832
|
const el = itemRefs.current[activeIndex];
|
|
7682
7833
|
if (el) {
|
|
7683
7834
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
7684
7835
|
}
|
|
7685
7836
|
}, [activeIndex, tabs.length]);
|
|
7686
|
-
return /* @__PURE__ */ (0,
|
|
7687
|
-
tabs.map((tab, idx) => /* @__PURE__ */ (0,
|
|
7837
|
+
return /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
|
|
7838
|
+
tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
7688
7839
|
TabItem_default,
|
|
7689
7840
|
{
|
|
7690
7841
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -7696,7 +7847,7 @@ var Tab = (props) => {
|
|
|
7696
7847
|
},
|
|
7697
7848
|
`${tab.value}_${idx}`
|
|
7698
7849
|
)),
|
|
7699
|
-
type === "toggle" && /* @__PURE__ */ (0,
|
|
7850
|
+
type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
7700
7851
|
"div",
|
|
7701
7852
|
{
|
|
7702
7853
|
className: "tab-toggle-underline",
|
|
@@ -7712,7 +7863,7 @@ Tab.displayName = "Tab";
|
|
|
7712
7863
|
var Tab_default = Tab;
|
|
7713
7864
|
|
|
7714
7865
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7715
|
-
var
|
|
7866
|
+
var import_jsx_runtime319 = require("react/jsx-runtime");
|
|
7716
7867
|
var RangePicker = (props) => {
|
|
7717
7868
|
const {
|
|
7718
7869
|
startDate,
|
|
@@ -7722,7 +7873,7 @@ var RangePicker = (props) => {
|
|
|
7722
7873
|
maxDate,
|
|
7723
7874
|
locale = "ko"
|
|
7724
7875
|
} = props;
|
|
7725
|
-
const [activeTab, setActiveTab] =
|
|
7876
|
+
const [activeTab, setActiveTab] = import_react17.default.useState("start");
|
|
7726
7877
|
const handleStartChange = (date) => {
|
|
7727
7878
|
if (!date) return;
|
|
7728
7879
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -7735,8 +7886,8 @@ var RangePicker = (props) => {
|
|
|
7735
7886
|
};
|
|
7736
7887
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
7737
7888
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
7738
|
-
return /* @__PURE__ */ (0,
|
|
7739
|
-
/* @__PURE__ */ (0,
|
|
7889
|
+
return /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
|
|
7890
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7740
7891
|
Tab_default,
|
|
7741
7892
|
{
|
|
7742
7893
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -7749,8 +7900,8 @@ var RangePicker = (props) => {
|
|
|
7749
7900
|
size: "sm"
|
|
7750
7901
|
}
|
|
7751
7902
|
) }),
|
|
7752
|
-
/* @__PURE__ */ (0,
|
|
7753
|
-
/* @__PURE__ */ (0,
|
|
7903
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "datepicker-range-panels", children: [
|
|
7904
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7754
7905
|
SingleDatePicker_default,
|
|
7755
7906
|
{
|
|
7756
7907
|
value: startDate,
|
|
@@ -7762,7 +7913,7 @@ var RangePicker = (props) => {
|
|
|
7762
7913
|
locale
|
|
7763
7914
|
}
|
|
7764
7915
|
),
|
|
7765
|
-
/* @__PURE__ */ (0,
|
|
7916
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7766
7917
|
SingleDatePicker_default,
|
|
7767
7918
|
{
|
|
7768
7919
|
value: endDate,
|
|
@@ -7775,7 +7926,7 @@ var RangePicker = (props) => {
|
|
|
7775
7926
|
}
|
|
7776
7927
|
)
|
|
7777
7928
|
] }),
|
|
7778
|
-
/* @__PURE__ */ (0,
|
|
7929
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7779
7930
|
SingleDatePicker_default,
|
|
7780
7931
|
{
|
|
7781
7932
|
value: startDate,
|
|
@@ -7786,7 +7937,7 @@ var RangePicker = (props) => {
|
|
|
7786
7937
|
rangeEnd: endDate,
|
|
7787
7938
|
locale
|
|
7788
7939
|
}
|
|
7789
|
-
) : /* @__PURE__ */ (0,
|
|
7940
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7790
7941
|
SingleDatePicker_default,
|
|
7791
7942
|
{
|
|
7792
7943
|
value: endDate,
|
|
@@ -7804,10 +7955,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
7804
7955
|
var RangePicker_default = RangePicker;
|
|
7805
7956
|
|
|
7806
7957
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7807
|
-
var
|
|
7958
|
+
var import_jsx_runtime320 = require("react/jsx-runtime");
|
|
7808
7959
|
var PopupPicker = (props) => {
|
|
7809
7960
|
const { component, type, locale } = props;
|
|
7810
|
-
const [isOpen, setIsOpen] =
|
|
7961
|
+
const [isOpen, setIsOpen] = import_react18.default.useState(false);
|
|
7811
7962
|
const handleClick = () => setIsOpen(true);
|
|
7812
7963
|
const handleClose = () => setIsOpen(false);
|
|
7813
7964
|
const handleSingleChange = (date) => {
|
|
@@ -7815,11 +7966,11 @@ var PopupPicker = (props) => {
|
|
|
7815
7966
|
props.onChange?.(date);
|
|
7816
7967
|
handleClose();
|
|
7817
7968
|
};
|
|
7818
|
-
return /* @__PURE__ */ (0,
|
|
7819
|
-
|
|
7820
|
-
/* @__PURE__ */ (0,
|
|
7821
|
-
/* @__PURE__ */ (0,
|
|
7822
|
-
type === "single" && /* @__PURE__ */ (0,
|
|
7969
|
+
return /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
|
|
7970
|
+
import_react18.default.cloneElement(component, { onClick: handleClick }),
|
|
7971
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
|
|
7972
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "popup-datepicker-content", children: [
|
|
7973
|
+
type === "single" && /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
7823
7974
|
SingleDatePicker_default,
|
|
7824
7975
|
{
|
|
7825
7976
|
value: props.value,
|
|
@@ -7829,7 +7980,7 @@ var PopupPicker = (props) => {
|
|
|
7829
7980
|
locale
|
|
7830
7981
|
}
|
|
7831
7982
|
),
|
|
7832
|
-
type === "range" && /* @__PURE__ */ (0,
|
|
7983
|
+
type === "range" && /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
7833
7984
|
RangePicker_default,
|
|
7834
7985
|
{
|
|
7835
7986
|
startDate: props.startDate,
|
|
@@ -7841,8 +7992,8 @@ var PopupPicker = (props) => {
|
|
|
7841
7992
|
}
|
|
7842
7993
|
)
|
|
7843
7994
|
] }),
|
|
7844
|
-
/* @__PURE__ */ (0,
|
|
7845
|
-
/* @__PURE__ */ (0,
|
|
7995
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
7996
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
7846
7997
|
Button_default,
|
|
7847
7998
|
{
|
|
7848
7999
|
type: "secondary",
|
|
@@ -7850,7 +8001,7 @@ var PopupPicker = (props) => {
|
|
|
7850
8001
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
7851
8002
|
}
|
|
7852
8003
|
),
|
|
7853
|
-
/* @__PURE__ */ (0,
|
|
8004
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7854
8005
|
] })
|
|
7855
8006
|
] }) })
|
|
7856
8007
|
] });
|
|
@@ -7859,10 +8010,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
7859
8010
|
var PopupPicker_default = PopupPicker;
|
|
7860
8011
|
|
|
7861
8012
|
// src/components/Divider/Divider.tsx
|
|
7862
|
-
var
|
|
8013
|
+
var import_jsx_runtime321 = require("react/jsx-runtime");
|
|
7863
8014
|
var Divider = (props) => {
|
|
7864
8015
|
const { orientation = "horizontal" } = props;
|
|
7865
|
-
return /* @__PURE__ */ (0,
|
|
8016
|
+
return /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
7866
8017
|
"div",
|
|
7867
8018
|
{
|
|
7868
8019
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -7875,15 +8026,15 @@ Divider.displayName = "Divider";
|
|
|
7875
8026
|
var Divider_default = Divider;
|
|
7876
8027
|
|
|
7877
8028
|
// src/components/Drawer/Drawer.tsx
|
|
7878
|
-
var
|
|
8029
|
+
var import_react19 = __toESM(require("react"), 1);
|
|
7879
8030
|
var import_react_dom3 = require("react-dom");
|
|
7880
|
-
var
|
|
8031
|
+
var import_jsx_runtime322 = require("react/jsx-runtime");
|
|
7881
8032
|
var ANIMATION_DURATION_MS2 = 250;
|
|
7882
8033
|
var Drawer = (props) => {
|
|
7883
8034
|
const { isOpen, onClose, placement = "right", size = "md", title, children } = props;
|
|
7884
|
-
const [mounted, setMounted] =
|
|
7885
|
-
const [visible, setVisible] =
|
|
7886
|
-
|
|
8035
|
+
const [mounted, setMounted] = import_react19.default.useState(false);
|
|
8036
|
+
const [visible, setVisible] = import_react19.default.useState(false);
|
|
8037
|
+
import_react19.default.useEffect(() => {
|
|
7887
8038
|
if (isOpen) {
|
|
7888
8039
|
setMounted(true);
|
|
7889
8040
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7897,12 +8048,12 @@ var Drawer = (props) => {
|
|
|
7897
8048
|
if (!mounted) return null;
|
|
7898
8049
|
const stateClass = visible ? "enter" : "exit";
|
|
7899
8050
|
return (0, import_react_dom3.createPortal)(
|
|
7900
|
-
/* @__PURE__ */ (0,
|
|
8051
|
+
/* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
|
|
7901
8052
|
"div",
|
|
7902
8053
|
{
|
|
7903
8054
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
7904
8055
|
onClick: onClose,
|
|
7905
|
-
children: /* @__PURE__ */ (0,
|
|
8056
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)(
|
|
7906
8057
|
"div",
|
|
7907
8058
|
{
|
|
7908
8059
|
className: clsx_default("lib-xplat-drawer", placement, size, stateClass),
|
|
@@ -7910,11 +8061,11 @@ var Drawer = (props) => {
|
|
|
7910
8061
|
"aria-modal": "true",
|
|
7911
8062
|
onClick: (e) => e.stopPropagation(),
|
|
7912
8063
|
children: [
|
|
7913
|
-
title && /* @__PURE__ */ (0,
|
|
7914
|
-
/* @__PURE__ */ (0,
|
|
7915
|
-
/* @__PURE__ */ (0,
|
|
8064
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)("div", { className: "drawer-header", children: [
|
|
8065
|
+
/* @__PURE__ */ (0, import_jsx_runtime322.jsx)("span", { className: "drawer-title", children: title }),
|
|
8066
|
+
/* @__PURE__ */ (0, import_jsx_runtime322.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
7916
8067
|
] }),
|
|
7917
|
-
/* @__PURE__ */ (0,
|
|
8068
|
+
/* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "drawer-body", children })
|
|
7918
8069
|
]
|
|
7919
8070
|
}
|
|
7920
8071
|
)
|
|
@@ -7927,22 +8078,23 @@ Drawer.displayName = "Drawer";
|
|
|
7927
8078
|
var Drawer_default = Drawer;
|
|
7928
8079
|
|
|
7929
8080
|
// src/components/Dropdown/Dropdown.tsx
|
|
7930
|
-
var
|
|
8081
|
+
var import_react22 = __toESM(require("react"), 1);
|
|
7931
8082
|
|
|
7932
8083
|
// src/tokens/hooks/useAutoPosition.ts
|
|
7933
|
-
var
|
|
8084
|
+
var import_react20 = __toESM(require("react"), 1);
|
|
7934
8085
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
7935
|
-
const [position, setPosition] =
|
|
8086
|
+
const [position, setPosition] = import_react20.default.useState({
|
|
7936
8087
|
position: {},
|
|
7937
8088
|
direction: "bottom"
|
|
7938
8089
|
});
|
|
7939
|
-
const calculatePosition =
|
|
8090
|
+
const calculatePosition = import_react20.default.useCallback(() => {
|
|
7940
8091
|
if (!triggerRef.current || !popRef.current) return;
|
|
7941
8092
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
7942
8093
|
const popW = popRef.current.offsetWidth;
|
|
7943
8094
|
const popH = popRef.current.offsetHeight;
|
|
7944
8095
|
const viewportHeight = window.innerHeight;
|
|
7945
8096
|
const viewportWidth = window.innerWidth;
|
|
8097
|
+
if (popH === 0 || popW === 0) return;
|
|
7946
8098
|
let direction = "bottom";
|
|
7947
8099
|
let top;
|
|
7948
8100
|
let left;
|
|
@@ -7962,13 +8114,21 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7962
8114
|
direction
|
|
7963
8115
|
});
|
|
7964
8116
|
}, [triggerRef, popRef]);
|
|
7965
|
-
|
|
8117
|
+
import_react20.default.useLayoutEffect(() => {
|
|
7966
8118
|
if (!enabled) return;
|
|
7967
8119
|
calculatePosition();
|
|
7968
8120
|
const raf = requestAnimationFrame(calculatePosition);
|
|
7969
8121
|
return () => cancelAnimationFrame(raf);
|
|
7970
8122
|
}, [calculatePosition, enabled]);
|
|
7971
|
-
|
|
8123
|
+
import_react20.default.useEffect(() => {
|
|
8124
|
+
if (!enabled || !popRef.current) return;
|
|
8125
|
+
const observer = new ResizeObserver(() => {
|
|
8126
|
+
calculatePosition();
|
|
8127
|
+
});
|
|
8128
|
+
observer.observe(popRef.current);
|
|
8129
|
+
return () => observer.disconnect();
|
|
8130
|
+
}, [calculatePosition, enabled, popRef]);
|
|
8131
|
+
import_react20.default.useEffect(() => {
|
|
7972
8132
|
if (!enabled) return;
|
|
7973
8133
|
window.addEventListener("resize", calculatePosition);
|
|
7974
8134
|
window.addEventListener("scroll", calculatePosition, true);
|
|
@@ -7982,9 +8142,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7982
8142
|
var useAutoPosition_default = useAutoPosition;
|
|
7983
8143
|
|
|
7984
8144
|
// src/tokens/hooks/useClickOutside.ts
|
|
7985
|
-
var
|
|
8145
|
+
var import_react21 = __toESM(require("react"), 1);
|
|
7986
8146
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
7987
|
-
|
|
8147
|
+
import_react21.default.useEffect(() => {
|
|
7988
8148
|
if (!enabled) return;
|
|
7989
8149
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
7990
8150
|
const listener = (event) => {
|
|
@@ -8007,17 +8167,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
8007
8167
|
var useClickOutside_default = useClickOutside;
|
|
8008
8168
|
|
|
8009
8169
|
// src/components/Dropdown/Dropdown.tsx
|
|
8010
|
-
var
|
|
8170
|
+
var import_jsx_runtime323 = require("react/jsx-runtime");
|
|
8011
8171
|
var Dropdown = (props) => {
|
|
8012
8172
|
const { items, children } = props;
|
|
8013
|
-
const [isOpen, setIsOpen] =
|
|
8014
|
-
const [mounted, setMounted] =
|
|
8015
|
-
const [visible, setVisible] =
|
|
8016
|
-
const triggerRef =
|
|
8017
|
-
const menuRef =
|
|
8173
|
+
const [isOpen, setIsOpen] = import_react22.default.useState(false);
|
|
8174
|
+
const [mounted, setMounted] = import_react22.default.useState(false);
|
|
8175
|
+
const [visible, setVisible] = import_react22.default.useState(false);
|
|
8176
|
+
const triggerRef = import_react22.default.useRef(null);
|
|
8177
|
+
const menuRef = import_react22.default.useRef(null);
|
|
8018
8178
|
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
8019
8179
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
8020
|
-
|
|
8180
|
+
import_react22.default.useEffect(() => {
|
|
8021
8181
|
if (isOpen) {
|
|
8022
8182
|
setMounted(true);
|
|
8023
8183
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -8032,8 +8192,8 @@ var Dropdown = (props) => {
|
|
|
8032
8192
|
item.onClick?.();
|
|
8033
8193
|
setIsOpen(false);
|
|
8034
8194
|
};
|
|
8035
|
-
return /* @__PURE__ */ (0,
|
|
8036
|
-
/* @__PURE__ */ (0,
|
|
8195
|
+
return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)("div", { className: "lib-xplat-dropdown", children: [
|
|
8196
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
8037
8197
|
"div",
|
|
8038
8198
|
{
|
|
8039
8199
|
ref: triggerRef,
|
|
@@ -8042,14 +8202,14 @@ var Dropdown = (props) => {
|
|
|
8042
8202
|
children
|
|
8043
8203
|
}
|
|
8044
8204
|
),
|
|
8045
|
-
mounted && /* @__PURE__ */ (0,
|
|
8205
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
8046
8206
|
"div",
|
|
8047
8207
|
{
|
|
8048
8208
|
ref: menuRef,
|
|
8049
8209
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
8050
8210
|
style: { top: position.top, left: position.left },
|
|
8051
8211
|
role: "menu",
|
|
8052
|
-
children: items.map((item) => /* @__PURE__ */ (0,
|
|
8212
|
+
children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
8053
8213
|
"button",
|
|
8054
8214
|
{
|
|
8055
8215
|
className: clsx_default("dropdown-item", {
|
|
@@ -8071,23 +8231,23 @@ Dropdown.displayName = "Dropdown";
|
|
|
8071
8231
|
var Dropdown_default = Dropdown;
|
|
8072
8232
|
|
|
8073
8233
|
// src/components/EmptyState/EmptyState.tsx
|
|
8074
|
-
var
|
|
8234
|
+
var import_jsx_runtime324 = require("react/jsx-runtime");
|
|
8075
8235
|
var EmptyState = (props) => {
|
|
8076
8236
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
8077
|
-
return /* @__PURE__ */ (0,
|
|
8078
|
-
icon && /* @__PURE__ */ (0,
|
|
8079
|
-
!icon && /* @__PURE__ */ (0,
|
|
8080
|
-
/* @__PURE__ */ (0,
|
|
8081
|
-
description && /* @__PURE__ */ (0,
|
|
8082
|
-
action && /* @__PURE__ */ (0,
|
|
8237
|
+
return /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)("div", { className: "lib-xplat-empty-state", children: [
|
|
8238
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "empty-icon", children: icon }),
|
|
8239
|
+
!icon && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "empty-icon", children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime324.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" }) }) }),
|
|
8240
|
+
/* @__PURE__ */ (0, import_jsx_runtime324.jsx)("p", { className: "empty-title", children: title }),
|
|
8241
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("p", { className: "empty-description", children: description }),
|
|
8242
|
+
action && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "empty-action", children: action })
|
|
8083
8243
|
] });
|
|
8084
8244
|
};
|
|
8085
8245
|
EmptyState.displayName = "EmptyState";
|
|
8086
8246
|
var EmptyState_default = EmptyState;
|
|
8087
8247
|
|
|
8088
8248
|
// src/components/FileUpload/FileUpload.tsx
|
|
8089
|
-
var
|
|
8090
|
-
var
|
|
8249
|
+
var import_react23 = __toESM(require("react"), 1);
|
|
8250
|
+
var import_jsx_runtime325 = require("react/jsx-runtime");
|
|
8091
8251
|
var FileUpload = (props) => {
|
|
8092
8252
|
const {
|
|
8093
8253
|
accept,
|
|
@@ -8097,8 +8257,8 @@ var FileUpload = (props) => {
|
|
|
8097
8257
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
8098
8258
|
description
|
|
8099
8259
|
} = props;
|
|
8100
|
-
const [isDragOver, setIsDragOver] =
|
|
8101
|
-
const inputRef =
|
|
8260
|
+
const [isDragOver, setIsDragOver] = import_react23.default.useState(false);
|
|
8261
|
+
const inputRef = import_react23.default.useRef(null);
|
|
8102
8262
|
const handleFiles = (fileList) => {
|
|
8103
8263
|
let files = Array.from(fileList);
|
|
8104
8264
|
if (maxSize) {
|
|
@@ -8128,7 +8288,7 @@ var FileUpload = (props) => {
|
|
|
8128
8288
|
handleFiles(e.target.files);
|
|
8129
8289
|
}
|
|
8130
8290
|
};
|
|
8131
|
-
return /* @__PURE__ */ (0,
|
|
8291
|
+
return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)(
|
|
8132
8292
|
"div",
|
|
8133
8293
|
{
|
|
8134
8294
|
className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
|
|
@@ -8137,7 +8297,7 @@ var FileUpload = (props) => {
|
|
|
8137
8297
|
onDragLeave: handleDragLeave,
|
|
8138
8298
|
onClick: () => inputRef.current?.click(),
|
|
8139
8299
|
children: [
|
|
8140
|
-
/* @__PURE__ */ (0,
|
|
8300
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
8141
8301
|
"input",
|
|
8142
8302
|
{
|
|
8143
8303
|
ref: inputRef,
|
|
@@ -8147,9 +8307,9 @@ var FileUpload = (props) => {
|
|
|
8147
8307
|
onChange: handleChange
|
|
8148
8308
|
}
|
|
8149
8309
|
),
|
|
8150
|
-
/* @__PURE__ */ (0,
|
|
8151
|
-
/* @__PURE__ */ (0,
|
|
8152
|
-
description && /* @__PURE__ */ (0,
|
|
8310
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(UploadIcon_default, {}) }),
|
|
8311
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)("p", { className: "upload-label", children: label }),
|
|
8312
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("p", { className: "upload-description", children: description })
|
|
8153
8313
|
]
|
|
8154
8314
|
}
|
|
8155
8315
|
);
|
|
@@ -8158,10 +8318,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
8158
8318
|
var FileUpload_default = FileUpload;
|
|
8159
8319
|
|
|
8160
8320
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
8161
|
-
var
|
|
8321
|
+
var import_react25 = __toESM(require("react"), 1);
|
|
8162
8322
|
|
|
8163
8323
|
// src/components/HtmlTypeWriter/utils.ts
|
|
8164
|
-
var
|
|
8324
|
+
var import_react24 = __toESM(require("react"), 1);
|
|
8165
8325
|
var voidTags = /* @__PURE__ */ new Set([
|
|
8166
8326
|
"br",
|
|
8167
8327
|
"img",
|
|
@@ -8229,41 +8389,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
8229
8389
|
props[attr.name] = attr.value;
|
|
8230
8390
|
});
|
|
8231
8391
|
if (voidTags.has(tag)) {
|
|
8232
|
-
return
|
|
8392
|
+
return import_react24.default.createElement(tag, props);
|
|
8233
8393
|
}
|
|
8234
8394
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
8235
|
-
return
|
|
8395
|
+
return import_react24.default.createElement(tag, props, ...children);
|
|
8236
8396
|
};
|
|
8237
8397
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
8238
8398
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
8239
8399
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
8240
|
-
return node == null ? null :
|
|
8400
|
+
return node == null ? null : import_react24.default.createElement(import_react24.default.Fragment, { key: idx }, node);
|
|
8241
8401
|
}).filter(Boolean);
|
|
8242
8402
|
return nodes.length === 0 ? null : nodes;
|
|
8243
8403
|
};
|
|
8244
8404
|
|
|
8245
8405
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
8246
|
-
var
|
|
8406
|
+
var import_jsx_runtime326 = require("react/jsx-runtime");
|
|
8247
8407
|
var HtmlTypeWriter = ({
|
|
8248
8408
|
html,
|
|
8249
8409
|
duration = 20,
|
|
8250
8410
|
onDone,
|
|
8251
8411
|
onChange
|
|
8252
8412
|
}) => {
|
|
8253
|
-
const [typedLen, setTypedLen] =
|
|
8254
|
-
const doneCalledRef =
|
|
8255
|
-
const { doc, rangeMap, totalLength } =
|
|
8413
|
+
const [typedLen, setTypedLen] = import_react25.default.useState(0);
|
|
8414
|
+
const doneCalledRef = import_react25.default.useRef(false);
|
|
8415
|
+
const { doc, rangeMap, totalLength } = import_react25.default.useMemo(() => {
|
|
8256
8416
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
8257
8417
|
const decoded = decodeHtmlEntities(html);
|
|
8258
8418
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
8259
8419
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
8260
8420
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
8261
8421
|
}, [html]);
|
|
8262
|
-
|
|
8422
|
+
import_react25.default.useEffect(() => {
|
|
8263
8423
|
setTypedLen(0);
|
|
8264
8424
|
doneCalledRef.current = false;
|
|
8265
8425
|
}, [html]);
|
|
8266
|
-
|
|
8426
|
+
import_react25.default.useEffect(() => {
|
|
8267
8427
|
if (!totalLength) return;
|
|
8268
8428
|
if (typedLen >= totalLength) return;
|
|
8269
8429
|
const timer = window.setInterval(() => {
|
|
@@ -8271,33 +8431,33 @@ var HtmlTypeWriter = ({
|
|
|
8271
8431
|
}, duration);
|
|
8272
8432
|
return () => window.clearInterval(timer);
|
|
8273
8433
|
}, [typedLen, totalLength, duration]);
|
|
8274
|
-
|
|
8434
|
+
import_react25.default.useEffect(() => {
|
|
8275
8435
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
8276
8436
|
onChange?.();
|
|
8277
8437
|
}
|
|
8278
8438
|
}, [typedLen, totalLength, onChange]);
|
|
8279
|
-
|
|
8439
|
+
import_react25.default.useEffect(() => {
|
|
8280
8440
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
8281
8441
|
doneCalledRef.current = true;
|
|
8282
8442
|
onDone?.();
|
|
8283
8443
|
}
|
|
8284
8444
|
}, [typedLen, totalLength, onDone]);
|
|
8285
|
-
const parsed =
|
|
8445
|
+
const parsed = import_react25.default.useMemo(
|
|
8286
8446
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
8287
8447
|
[doc, typedLen, rangeMap]
|
|
8288
8448
|
);
|
|
8289
|
-
return /* @__PURE__ */ (0,
|
|
8449
|
+
return /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
8290
8450
|
};
|
|
8291
8451
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
8292
8452
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
8293
8453
|
|
|
8294
8454
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
8295
|
-
var
|
|
8296
|
-
var
|
|
8455
|
+
var import_react26 = __toESM(require("react"), 1);
|
|
8456
|
+
var import_jsx_runtime327 = require("react/jsx-runtime");
|
|
8297
8457
|
var ImageSelector = (props) => {
|
|
8298
8458
|
const { value, label, onChange } = props;
|
|
8299
|
-
const [previewUrl, setPreviewUrl] =
|
|
8300
|
-
|
|
8459
|
+
const [previewUrl, setPreviewUrl] = import_react26.default.useState();
|
|
8460
|
+
import_react26.default.useEffect(() => {
|
|
8301
8461
|
if (!value) {
|
|
8302
8462
|
setPreviewUrl(void 0);
|
|
8303
8463
|
return;
|
|
@@ -8306,7 +8466,7 @@ var ImageSelector = (props) => {
|
|
|
8306
8466
|
setPreviewUrl(url);
|
|
8307
8467
|
return () => URL.revokeObjectURL(url);
|
|
8308
8468
|
}, [value]);
|
|
8309
|
-
const inputRef =
|
|
8469
|
+
const inputRef = import_react26.default.useRef(null);
|
|
8310
8470
|
const handleFileChange = (e) => {
|
|
8311
8471
|
const selectedFile = e.target.files?.[0];
|
|
8312
8472
|
if (selectedFile) {
|
|
@@ -8319,8 +8479,8 @@ var ImageSelector = (props) => {
|
|
|
8319
8479
|
const handleOpenFileDialog = () => {
|
|
8320
8480
|
inputRef.current?.click();
|
|
8321
8481
|
};
|
|
8322
|
-
return /* @__PURE__ */ (0,
|
|
8323
|
-
/* @__PURE__ */ (0,
|
|
8482
|
+
return /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
|
|
8483
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
|
|
8324
8484
|
"input",
|
|
8325
8485
|
{
|
|
8326
8486
|
type: "file",
|
|
@@ -8330,13 +8490,13 @@ var ImageSelector = (props) => {
|
|
|
8330
8490
|
ref: inputRef
|
|
8331
8491
|
}
|
|
8332
8492
|
),
|
|
8333
|
-
value && /* @__PURE__ */ (0,
|
|
8334
|
-
/* @__PURE__ */ (0,
|
|
8335
|
-
/* @__PURE__ */ (0,
|
|
8493
|
+
value && /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("div", { className: "action-bar", children: [
|
|
8494
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(UploadIcon_default, {}) }),
|
|
8495
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(DeleteIcon_default, {}) })
|
|
8336
8496
|
] }),
|
|
8337
|
-
/* @__PURE__ */ (0,
|
|
8338
|
-
/* @__PURE__ */ (0,
|
|
8339
|
-
/* @__PURE__ */ (0,
|
|
8497
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "content", children: previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime327.jsx)("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
|
|
8498
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(ImageIcon_default, {}) }),
|
|
8499
|
+
/* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
|
|
8340
8500
|
] }) })
|
|
8341
8501
|
] });
|
|
8342
8502
|
};
|
|
@@ -8344,7 +8504,7 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
8344
8504
|
var ImageSelector_default = ImageSelector;
|
|
8345
8505
|
|
|
8346
8506
|
// src/components/Pagination/Pagination.tsx
|
|
8347
|
-
var
|
|
8507
|
+
var import_jsx_runtime328 = require("react/jsx-runtime");
|
|
8348
8508
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
8349
8509
|
const totalNumbers = siblingCount * 2 + 5;
|
|
8350
8510
|
if (totalPages <= totalNumbers) {
|
|
@@ -8387,19 +8547,19 @@ var Pagination = (props) => {
|
|
|
8387
8547
|
onChange?.(page);
|
|
8388
8548
|
}
|
|
8389
8549
|
};
|
|
8390
|
-
return /* @__PURE__ */ (0,
|
|
8391
|
-
/* @__PURE__ */ (0,
|
|
8550
|
+
return /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
|
|
8551
|
+
/* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
|
|
8392
8552
|
"button",
|
|
8393
8553
|
{
|
|
8394
8554
|
className: "page-btn prev",
|
|
8395
8555
|
disabled: current <= 1,
|
|
8396
8556
|
onClick: () => handleClick(current - 1),
|
|
8397
8557
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
8398
|
-
children: /* @__PURE__ */ (0,
|
|
8558
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(ChevronLeftIcon_default, {})
|
|
8399
8559
|
}
|
|
8400
8560
|
),
|
|
8401
8561
|
pages.map(
|
|
8402
|
-
(page, i) => page === "..." ? /* @__PURE__ */ (0,
|
|
8562
|
+
(page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
|
|
8403
8563
|
"button",
|
|
8404
8564
|
{
|
|
8405
8565
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -8410,14 +8570,14 @@ var Pagination = (props) => {
|
|
|
8410
8570
|
page
|
|
8411
8571
|
)
|
|
8412
8572
|
),
|
|
8413
|
-
/* @__PURE__ */ (0,
|
|
8573
|
+
/* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
|
|
8414
8574
|
"button",
|
|
8415
8575
|
{
|
|
8416
8576
|
className: "page-btn next",
|
|
8417
8577
|
disabled: current >= totalPages,
|
|
8418
8578
|
onClick: () => handleClick(current + 1),
|
|
8419
8579
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
8420
|
-
children: /* @__PURE__ */ (0,
|
|
8580
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(ChevronRightIcon_default, {})
|
|
8421
8581
|
}
|
|
8422
8582
|
)
|
|
8423
8583
|
] });
|
|
@@ -8426,17 +8586,17 @@ Pagination.displayName = "Pagination";
|
|
|
8426
8586
|
var Pagination_default = Pagination;
|
|
8427
8587
|
|
|
8428
8588
|
// src/components/PopOver/PopOver.tsx
|
|
8429
|
-
var
|
|
8430
|
-
var
|
|
8589
|
+
var import_react27 = __toESM(require("react"), 1);
|
|
8590
|
+
var import_jsx_runtime329 = require("react/jsx-runtime");
|
|
8431
8591
|
var PopOver = (props) => {
|
|
8432
8592
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
8433
|
-
const popRef =
|
|
8434
|
-
const triggerRef =
|
|
8435
|
-
const [localOpen, setLocalOpen] =
|
|
8436
|
-
const [eventTrigger, setEventTrigger] =
|
|
8593
|
+
const popRef = import_react27.default.useRef(null);
|
|
8594
|
+
const triggerRef = import_react27.default.useRef(null);
|
|
8595
|
+
const [localOpen, setLocalOpen] = import_react27.default.useState(false);
|
|
8596
|
+
const [eventTrigger, setEventTrigger] = import_react27.default.useState(false);
|
|
8437
8597
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
8438
8598
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
8439
|
-
|
|
8599
|
+
import_react27.default.useEffect(() => {
|
|
8440
8600
|
if (isOpen) {
|
|
8441
8601
|
setLocalOpen(isOpen);
|
|
8442
8602
|
setTimeout(() => {
|
|
@@ -8449,7 +8609,7 @@ var PopOver = (props) => {
|
|
|
8449
8609
|
}, 200);
|
|
8450
8610
|
}
|
|
8451
8611
|
}, [isOpen]);
|
|
8452
|
-
return /* @__PURE__ */ (0,
|
|
8612
|
+
return /* @__PURE__ */ (0, import_jsx_runtime329.jsxs)(
|
|
8453
8613
|
"div",
|
|
8454
8614
|
{
|
|
8455
8615
|
className: "lib-xplat-pop-over",
|
|
@@ -8459,7 +8619,7 @@ var PopOver = (props) => {
|
|
|
8459
8619
|
},
|
|
8460
8620
|
children: [
|
|
8461
8621
|
children,
|
|
8462
|
-
localOpen && /* @__PURE__ */ (0,
|
|
8622
|
+
localOpen && /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
|
|
8463
8623
|
"div",
|
|
8464
8624
|
{
|
|
8465
8625
|
className: clsx_default(
|
|
@@ -8482,7 +8642,7 @@ PopOver.displayName = "PopOver";
|
|
|
8482
8642
|
var PopOver_default = PopOver;
|
|
8483
8643
|
|
|
8484
8644
|
// src/components/Progress/Progress.tsx
|
|
8485
|
-
var
|
|
8645
|
+
var import_jsx_runtime330 = require("react/jsx-runtime");
|
|
8486
8646
|
var Progress = (props) => {
|
|
8487
8647
|
const {
|
|
8488
8648
|
value,
|
|
@@ -8492,8 +8652,8 @@ var Progress = (props) => {
|
|
|
8492
8652
|
showLabel = false
|
|
8493
8653
|
} = props;
|
|
8494
8654
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
8495
|
-
return /* @__PURE__ */ (0,
|
|
8496
|
-
/* @__PURE__ */ (0,
|
|
8655
|
+
return /* @__PURE__ */ (0, import_jsx_runtime330.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
|
|
8656
|
+
/* @__PURE__ */ (0, import_jsx_runtime330.jsx)(
|
|
8497
8657
|
"div",
|
|
8498
8658
|
{
|
|
8499
8659
|
className: "track",
|
|
@@ -8501,7 +8661,7 @@ var Progress = (props) => {
|
|
|
8501
8661
|
"aria-valuenow": value,
|
|
8502
8662
|
"aria-valuemin": 0,
|
|
8503
8663
|
"aria-valuemax": max,
|
|
8504
|
-
children: /* @__PURE__ */ (0,
|
|
8664
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(
|
|
8505
8665
|
"div",
|
|
8506
8666
|
{
|
|
8507
8667
|
className: "bar",
|
|
@@ -8510,7 +8670,7 @@ var Progress = (props) => {
|
|
|
8510
8670
|
)
|
|
8511
8671
|
}
|
|
8512
8672
|
),
|
|
8513
|
-
showLabel && /* @__PURE__ */ (0,
|
|
8673
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime330.jsxs)("span", { className: "label", children: [
|
|
8514
8674
|
Math.round(percentage),
|
|
8515
8675
|
"%"
|
|
8516
8676
|
] })
|
|
@@ -8520,17 +8680,17 @@ Progress.displayName = "Progress";
|
|
|
8520
8680
|
var Progress_default = Progress;
|
|
8521
8681
|
|
|
8522
8682
|
// src/components/Radio/RadioGroupContext.tsx
|
|
8523
|
-
var
|
|
8524
|
-
var RadioGroupContext =
|
|
8683
|
+
var import_react28 = __toESM(require("react"), 1);
|
|
8684
|
+
var RadioGroupContext = import_react28.default.createContext(
|
|
8525
8685
|
null
|
|
8526
8686
|
);
|
|
8527
8687
|
var useRadioGroupContext = () => {
|
|
8528
|
-
return
|
|
8688
|
+
return import_react28.default.useContext(RadioGroupContext);
|
|
8529
8689
|
};
|
|
8530
8690
|
var RadioGroupContext_default = RadioGroupContext;
|
|
8531
8691
|
|
|
8532
8692
|
// src/components/Radio/Radio.tsx
|
|
8533
|
-
var
|
|
8693
|
+
var import_jsx_runtime331 = require("react/jsx-runtime");
|
|
8534
8694
|
var Radio = (props) => {
|
|
8535
8695
|
const {
|
|
8536
8696
|
label,
|
|
@@ -8548,7 +8708,7 @@ var Radio = (props) => {
|
|
|
8548
8708
|
value,
|
|
8549
8709
|
onChange: rest.onChange
|
|
8550
8710
|
};
|
|
8551
|
-
return /* @__PURE__ */ (0,
|
|
8711
|
+
return /* @__PURE__ */ (0, import_jsx_runtime331.jsxs)(
|
|
8552
8712
|
"label",
|
|
8553
8713
|
{
|
|
8554
8714
|
className: clsx_default(
|
|
@@ -8558,18 +8718,18 @@ var Radio = (props) => {
|
|
|
8558
8718
|
localChecked ? "checked" : void 0
|
|
8559
8719
|
),
|
|
8560
8720
|
children: [
|
|
8561
|
-
/* @__PURE__ */ (0,
|
|
8562
|
-
/* @__PURE__ */ (0,
|
|
8721
|
+
/* @__PURE__ */ (0, import_jsx_runtime331.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
8722
|
+
/* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
|
|
8563
8723
|
"div",
|
|
8564
8724
|
{
|
|
8565
8725
|
className: clsx_default(
|
|
8566
8726
|
"circle",
|
|
8567
8727
|
localChecked ? "checked" : void 0
|
|
8568
8728
|
),
|
|
8569
|
-
children: localChecked && /* @__PURE__ */ (0,
|
|
8729
|
+
children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime331.jsx)("div", { className: "inner-circle" })
|
|
8570
8730
|
}
|
|
8571
8731
|
),
|
|
8572
|
-
label && /* @__PURE__ */ (0,
|
|
8732
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime331.jsx)("span", { children: label })
|
|
8573
8733
|
]
|
|
8574
8734
|
}
|
|
8575
8735
|
);
|
|
@@ -8578,28 +8738,28 @@ Radio.displayName = "Radio";
|
|
|
8578
8738
|
var Radio_default = Radio;
|
|
8579
8739
|
|
|
8580
8740
|
// src/components/Radio/RadioGroup.tsx
|
|
8581
|
-
var
|
|
8741
|
+
var import_jsx_runtime332 = require("react/jsx-runtime");
|
|
8582
8742
|
var RadioGroup = (props) => {
|
|
8583
8743
|
const { children, ...rest } = props;
|
|
8584
|
-
return /* @__PURE__ */ (0,
|
|
8744
|
+
return /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(import_jsx_runtime332.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
|
|
8585
8745
|
};
|
|
8586
8746
|
RadioGroup.displayName = "RadioGroup";
|
|
8587
8747
|
var RadioGroup_default = RadioGroup;
|
|
8588
8748
|
|
|
8589
8749
|
// src/components/Select/Select.tsx
|
|
8590
|
-
var
|
|
8750
|
+
var import_react31 = __toESM(require("react"), 1);
|
|
8591
8751
|
|
|
8592
8752
|
// src/components/Select/context.ts
|
|
8593
|
-
var
|
|
8594
|
-
var SelectContext =
|
|
8753
|
+
var import_react29 = __toESM(require("react"), 1);
|
|
8754
|
+
var SelectContext = import_react29.default.createContext(null);
|
|
8595
8755
|
var context_default = SelectContext;
|
|
8596
8756
|
|
|
8597
8757
|
// src/components/Select/SelectItem.tsx
|
|
8598
|
-
var
|
|
8599
|
-
var
|
|
8758
|
+
var import_react30 = __toESM(require("react"), 1);
|
|
8759
|
+
var import_jsx_runtime333 = require("react/jsx-runtime");
|
|
8600
8760
|
var SelectItem = (props) => {
|
|
8601
8761
|
const { children, value, onClick, disabled = false } = props;
|
|
8602
|
-
const ctx =
|
|
8762
|
+
const ctx = import_react30.default.useContext(context_default);
|
|
8603
8763
|
const handleClick = (e) => {
|
|
8604
8764
|
e.preventDefault();
|
|
8605
8765
|
e.stopPropagation();
|
|
@@ -8608,7 +8768,7 @@ var SelectItem = (props) => {
|
|
|
8608
8768
|
ctx?.close();
|
|
8609
8769
|
onClick?.();
|
|
8610
8770
|
};
|
|
8611
|
-
return /* @__PURE__ */ (0,
|
|
8771
|
+
return /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
|
|
8612
8772
|
"div",
|
|
8613
8773
|
{
|
|
8614
8774
|
className: clsx_default("select-item", disabled && "disabled"),
|
|
@@ -8629,7 +8789,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
8629
8789
|
var SelectItem_default = SelectItem;
|
|
8630
8790
|
|
|
8631
8791
|
// src/components/Select/Select.tsx
|
|
8632
|
-
var
|
|
8792
|
+
var import_jsx_runtime334 = require("react/jsx-runtime");
|
|
8633
8793
|
var ANIMATION_DURATION_MS3 = 200;
|
|
8634
8794
|
var SelectRoot = (props) => {
|
|
8635
8795
|
const {
|
|
@@ -8641,26 +8801,26 @@ var SelectRoot = (props) => {
|
|
|
8641
8801
|
error = false,
|
|
8642
8802
|
size = "md"
|
|
8643
8803
|
} = props;
|
|
8644
|
-
const itemChildren =
|
|
8645
|
-
(child) =>
|
|
8804
|
+
const itemChildren = import_react31.default.Children.toArray(children).filter(
|
|
8805
|
+
(child) => import_react31.default.isValidElement(child) && child.type === SelectItem_default
|
|
8646
8806
|
);
|
|
8647
8807
|
const isControlled = valueProp !== void 0;
|
|
8648
|
-
const [isOpen, setOpen] =
|
|
8649
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
8650
|
-
const controlledLabel =
|
|
8808
|
+
const [isOpen, setOpen] = import_react31.default.useState(false);
|
|
8809
|
+
const [uncontrolledLabel, setUncontrolledLabel] = import_react31.default.useState(null);
|
|
8810
|
+
const controlledLabel = import_react31.default.useMemo(() => {
|
|
8651
8811
|
if (!isControlled) return null;
|
|
8652
8812
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
8653
8813
|
return match ? match.props.children : null;
|
|
8654
8814
|
}, [isControlled, valueProp, itemChildren]);
|
|
8655
8815
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
8656
|
-
const triggerRef =
|
|
8657
|
-
const contentRef =
|
|
8658
|
-
const [mounted, setMounted] =
|
|
8659
|
-
const [visible, setVisible] =
|
|
8660
|
-
|
|
8816
|
+
const triggerRef = import_react31.default.useRef(null);
|
|
8817
|
+
const contentRef = import_react31.default.useRef(null);
|
|
8818
|
+
const [mounted, setMounted] = import_react31.default.useState(false);
|
|
8819
|
+
const [visible, setVisible] = import_react31.default.useState(false);
|
|
8820
|
+
import_react31.default.useEffect(() => {
|
|
8661
8821
|
if (disabled && isOpen) setOpen(false);
|
|
8662
8822
|
}, [disabled, isOpen]);
|
|
8663
|
-
|
|
8823
|
+
import_react31.default.useEffect(() => {
|
|
8664
8824
|
if (isOpen) {
|
|
8665
8825
|
setMounted(true);
|
|
8666
8826
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -8670,12 +8830,12 @@ var SelectRoot = (props) => {
|
|
|
8670
8830
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
8671
8831
|
return () => clearTimeout(t);
|
|
8672
8832
|
}, [isOpen]);
|
|
8673
|
-
const open =
|
|
8674
|
-
const close =
|
|
8675
|
-
const toggle =
|
|
8833
|
+
const open = import_react31.default.useCallback(() => setOpen(true), []);
|
|
8834
|
+
const close = import_react31.default.useCallback(() => setOpen(false), []);
|
|
8835
|
+
const toggle = import_react31.default.useCallback(() => setOpen((prev) => !prev), []);
|
|
8676
8836
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
8677
8837
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
8678
|
-
const setSelected =
|
|
8838
|
+
const setSelected = import_react31.default.useCallback(
|
|
8679
8839
|
(label, itemValue) => {
|
|
8680
8840
|
if (!isControlled) {
|
|
8681
8841
|
setUncontrolledLabel(label);
|
|
@@ -8684,7 +8844,7 @@ var SelectRoot = (props) => {
|
|
|
8684
8844
|
},
|
|
8685
8845
|
[isControlled, onChange]
|
|
8686
8846
|
);
|
|
8687
|
-
const ctxValue =
|
|
8847
|
+
const ctxValue = import_react31.default.useMemo(
|
|
8688
8848
|
() => ({
|
|
8689
8849
|
isOpen,
|
|
8690
8850
|
mounted,
|
|
@@ -8705,7 +8865,7 @@ var SelectRoot = (props) => {
|
|
|
8705
8865
|
if (disabled) return;
|
|
8706
8866
|
toggle();
|
|
8707
8867
|
};
|
|
8708
|
-
return /* @__PURE__ */ (0,
|
|
8868
|
+
return /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)(
|
|
8709
8869
|
"div",
|
|
8710
8870
|
{
|
|
8711
8871
|
className: clsx_default(
|
|
@@ -8716,7 +8876,7 @@ var SelectRoot = (props) => {
|
|
|
8716
8876
|
mounted && "is-open"
|
|
8717
8877
|
),
|
|
8718
8878
|
children: [
|
|
8719
|
-
/* @__PURE__ */ (0,
|
|
8879
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsxs)(
|
|
8720
8880
|
"div",
|
|
8721
8881
|
{
|
|
8722
8882
|
ref: triggerRef,
|
|
@@ -8740,7 +8900,7 @@ var SelectRoot = (props) => {
|
|
|
8740
8900
|
}
|
|
8741
8901
|
},
|
|
8742
8902
|
children: [
|
|
8743
|
-
/* @__PURE__ */ (0,
|
|
8903
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
8744
8904
|
"span",
|
|
8745
8905
|
{
|
|
8746
8906
|
className: clsx_default(
|
|
@@ -8750,25 +8910,25 @@ var SelectRoot = (props) => {
|
|
|
8750
8910
|
children: selectedLabel ?? placeholder
|
|
8751
8911
|
}
|
|
8752
8912
|
),
|
|
8753
|
-
/* @__PURE__ */ (0,
|
|
8913
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
8754
8914
|
"span",
|
|
8755
8915
|
{
|
|
8756
8916
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
8757
8917
|
"aria-hidden": true,
|
|
8758
|
-
children: /* @__PURE__ */ (0,
|
|
8918
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(ChevronDownIcon_default, {})
|
|
8759
8919
|
}
|
|
8760
8920
|
)
|
|
8761
8921
|
]
|
|
8762
8922
|
}
|
|
8763
8923
|
),
|
|
8764
|
-
mounted && /* @__PURE__ */ (0,
|
|
8924
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
8765
8925
|
"div",
|
|
8766
8926
|
{
|
|
8767
8927
|
className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
|
|
8768
8928
|
ref: contentRef,
|
|
8769
8929
|
style: { ...position.position, width: triggerRef.current?.offsetWidth },
|
|
8770
8930
|
role: "listbox",
|
|
8771
|
-
children: /* @__PURE__ */ (0,
|
|
8931
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
8772
8932
|
}
|
|
8773
8933
|
) })
|
|
8774
8934
|
]
|
|
@@ -8782,7 +8942,7 @@ var Select = Object.assign(SelectRoot, {
|
|
|
8782
8942
|
var Select_default = Select;
|
|
8783
8943
|
|
|
8784
8944
|
// src/components/Skeleton/Skeleton.tsx
|
|
8785
|
-
var
|
|
8945
|
+
var import_jsx_runtime335 = require("react/jsx-runtime");
|
|
8786
8946
|
var SIZE_MAP = {
|
|
8787
8947
|
xs: "var(--spacing-size-1)",
|
|
8788
8948
|
sm: "var(--spacing-size-2)",
|
|
@@ -8798,7 +8958,7 @@ var Skeleton = (props) => {
|
|
|
8798
8958
|
...width != null && { width: SIZE_MAP[width] },
|
|
8799
8959
|
...height != null && { height: SIZE_MAP[height] }
|
|
8800
8960
|
};
|
|
8801
|
-
return /* @__PURE__ */ (0,
|
|
8961
|
+
return /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
|
|
8802
8962
|
"div",
|
|
8803
8963
|
{
|
|
8804
8964
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -8811,20 +8971,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
8811
8971
|
var Skeleton_default = Skeleton;
|
|
8812
8972
|
|
|
8813
8973
|
// src/components/Spinner/Spinner.tsx
|
|
8814
|
-
var
|
|
8974
|
+
var import_jsx_runtime336 = require("react/jsx-runtime");
|
|
8815
8975
|
var Spinner = (props) => {
|
|
8816
8976
|
const {
|
|
8817
8977
|
size = "md",
|
|
8818
8978
|
type = "brand"
|
|
8819
8979
|
} = props;
|
|
8820
|
-
return /* @__PURE__ */ (0,
|
|
8980
|
+
return /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
8821
8981
|
"div",
|
|
8822
8982
|
{
|
|
8823
8983
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
8824
8984
|
role: "status",
|
|
8825
8985
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
8826
|
-
children: /* @__PURE__ */ (0,
|
|
8827
|
-
/* @__PURE__ */ (0,
|
|
8986
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime336.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
8987
|
+
/* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
8828
8988
|
"circle",
|
|
8829
8989
|
{
|
|
8830
8990
|
className: "track",
|
|
@@ -8834,7 +8994,7 @@ var Spinner = (props) => {
|
|
|
8834
8994
|
strokeWidth: "3"
|
|
8835
8995
|
}
|
|
8836
8996
|
),
|
|
8837
|
-
/* @__PURE__ */ (0,
|
|
8997
|
+
/* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
8838
8998
|
"circle",
|
|
8839
8999
|
{
|
|
8840
9000
|
className: "indicator",
|
|
@@ -8853,20 +9013,20 @@ Spinner.displayName = "Spinner";
|
|
|
8853
9013
|
var Spinner_default = Spinner;
|
|
8854
9014
|
|
|
8855
9015
|
// src/components/Steps/Steps.tsx
|
|
8856
|
-
var
|
|
9016
|
+
var import_jsx_runtime337 = require("react/jsx-runtime");
|
|
8857
9017
|
var Steps = (props) => {
|
|
8858
9018
|
const {
|
|
8859
9019
|
items,
|
|
8860
9020
|
current,
|
|
8861
9021
|
type = "brand"
|
|
8862
9022
|
} = props;
|
|
8863
|
-
return /* @__PURE__ */ (0,
|
|
9023
|
+
return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
8864
9024
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
8865
|
-
return /* @__PURE__ */ (0,
|
|
8866
|
-
/* @__PURE__ */ (0,
|
|
8867
|
-
/* @__PURE__ */ (0,
|
|
8868
|
-
/* @__PURE__ */ (0,
|
|
8869
|
-
item.description && /* @__PURE__ */ (0,
|
|
9025
|
+
return /* @__PURE__ */ (0, import_jsx_runtime337.jsxs)("div", { className: clsx_default("step-item", status), children: [
|
|
9026
|
+
/* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(CheckIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("span", { children: index + 1 }) }),
|
|
9027
|
+
/* @__PURE__ */ (0, import_jsx_runtime337.jsxs)("div", { className: "step-content", children: [
|
|
9028
|
+
/* @__PURE__ */ (0, import_jsx_runtime337.jsx)("span", { className: "step-title", children: item.title }),
|
|
9029
|
+
item.description && /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("span", { className: "step-description", children: item.description })
|
|
8870
9030
|
] })
|
|
8871
9031
|
] }, index);
|
|
8872
9032
|
}) });
|
|
@@ -8875,8 +9035,8 @@ Steps.displayName = "Steps";
|
|
|
8875
9035
|
var Steps_default = Steps;
|
|
8876
9036
|
|
|
8877
9037
|
// src/components/Swiper/Swiper.tsx
|
|
8878
|
-
var
|
|
8879
|
-
var
|
|
9038
|
+
var import_react32 = __toESM(require("react"), 1);
|
|
9039
|
+
var import_jsx_runtime338 = require("react/jsx-runtime");
|
|
8880
9040
|
var Swiper = (props) => {
|
|
8881
9041
|
const {
|
|
8882
9042
|
auto = false,
|
|
@@ -8899,23 +9059,23 @@ var Swiper = (props) => {
|
|
|
8899
9059
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
8900
9060
|
const useLoop = loop && canSlide;
|
|
8901
9061
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
8902
|
-
const extendedItems =
|
|
9062
|
+
const extendedItems = import_react32.default.useMemo(() => {
|
|
8903
9063
|
if (!useLoop) return items;
|
|
8904
9064
|
return [...items, ...items, ...items];
|
|
8905
9065
|
}, [items, useLoop]);
|
|
8906
9066
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
8907
|
-
const [innerIndex, setInnerIndex] =
|
|
9067
|
+
const [innerIndex, setInnerIndex] = import_react32.default.useState(
|
|
8908
9068
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
8909
9069
|
);
|
|
8910
|
-
const [isDragging, setIsDragging] =
|
|
8911
|
-
const [dragOffset, setDragOffset] =
|
|
8912
|
-
const [animated, setAnimated] =
|
|
8913
|
-
const [containerWidth, setContainerWidth] =
|
|
8914
|
-
const containerRef =
|
|
8915
|
-
const startXRef =
|
|
8916
|
-
const startTimeRef =
|
|
8917
|
-
const autoplayTimerRef =
|
|
8918
|
-
|
|
9070
|
+
const [isDragging, setIsDragging] = import_react32.default.useState(false);
|
|
9071
|
+
const [dragOffset, setDragOffset] = import_react32.default.useState(0);
|
|
9072
|
+
const [animated, setAnimated] = import_react32.default.useState(true);
|
|
9073
|
+
const [containerWidth, setContainerWidth] = import_react32.default.useState(0);
|
|
9074
|
+
const containerRef = import_react32.default.useRef(null);
|
|
9075
|
+
const startXRef = import_react32.default.useRef(0);
|
|
9076
|
+
const startTimeRef = import_react32.default.useRef(0);
|
|
9077
|
+
const autoplayTimerRef = import_react32.default.useRef(null);
|
|
9078
|
+
import_react32.default.useEffect(() => {
|
|
8919
9079
|
const el = containerRef.current;
|
|
8920
9080
|
if (!el) return;
|
|
8921
9081
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -8934,7 +9094,7 @@ var Swiper = (props) => {
|
|
|
8934
9094
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
8935
9095
|
};
|
|
8936
9096
|
const realIndex = getRealIndex(innerIndex);
|
|
8937
|
-
const moveToInner =
|
|
9097
|
+
const moveToInner = import_react32.default.useCallback(
|
|
8938
9098
|
(idx, withAnim = true) => {
|
|
8939
9099
|
if (!useLoop) {
|
|
8940
9100
|
setAnimated(withAnim);
|
|
@@ -8962,7 +9122,7 @@ var Swiper = (props) => {
|
|
|
8962
9122
|
},
|
|
8963
9123
|
[useLoop, cloneCount, totalSlides]
|
|
8964
9124
|
);
|
|
8965
|
-
const handleTransitionEnd =
|
|
9125
|
+
const handleTransitionEnd = import_react32.default.useCallback(() => {
|
|
8966
9126
|
if (!useLoop) return;
|
|
8967
9127
|
const real = getRealIndex(innerIndex);
|
|
8968
9128
|
const canonical = cloneCount + real;
|
|
@@ -8972,7 +9132,7 @@ var Swiper = (props) => {
|
|
|
8972
9132
|
}
|
|
8973
9133
|
onChange?.(Math.min(real, maxIndex));
|
|
8974
9134
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
8975
|
-
const slideTo =
|
|
9135
|
+
const slideTo = import_react32.default.useCallback(
|
|
8976
9136
|
(logicalIndex) => {
|
|
8977
9137
|
if (!canSlide) return;
|
|
8978
9138
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -8982,7 +9142,7 @@ var Swiper = (props) => {
|
|
|
8982
9142
|
},
|
|
8983
9143
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
8984
9144
|
);
|
|
8985
|
-
const slideNext =
|
|
9145
|
+
const slideNext = import_react32.default.useCallback(() => {
|
|
8986
9146
|
if (!canSlide) return;
|
|
8987
9147
|
const nextInner = innerIndex + slideBy;
|
|
8988
9148
|
if (useLoop) {
|
|
@@ -8991,7 +9151,7 @@ var Swiper = (props) => {
|
|
|
8991
9151
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
8992
9152
|
}
|
|
8993
9153
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
8994
|
-
const slidePrev =
|
|
9154
|
+
const slidePrev = import_react32.default.useCallback(() => {
|
|
8995
9155
|
if (!canSlide) return;
|
|
8996
9156
|
const prevInner = innerIndex - slideBy;
|
|
8997
9157
|
if (useLoop) {
|
|
@@ -9000,7 +9160,7 @@ var Swiper = (props) => {
|
|
|
9000
9160
|
moveToInner(Math.max(prevInner, 0), true);
|
|
9001
9161
|
}
|
|
9002
9162
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
9003
|
-
|
|
9163
|
+
import_react32.default.useEffect(() => {
|
|
9004
9164
|
if (indexProp === void 0) return;
|
|
9005
9165
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
9006
9166
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -9008,12 +9168,12 @@ var Swiper = (props) => {
|
|
|
9008
9168
|
moveToInner(target, true);
|
|
9009
9169
|
}
|
|
9010
9170
|
}, [indexProp]);
|
|
9011
|
-
|
|
9171
|
+
import_react32.default.useImperativeHandle(swiperRef, () => ({
|
|
9012
9172
|
slidePrev,
|
|
9013
9173
|
slideNext,
|
|
9014
9174
|
slideTo
|
|
9015
9175
|
}));
|
|
9016
|
-
|
|
9176
|
+
import_react32.default.useEffect(() => {
|
|
9017
9177
|
if (!auto || !canSlide) return;
|
|
9018
9178
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
9019
9179
|
return () => {
|
|
@@ -9036,7 +9196,7 @@ var Swiper = (props) => {
|
|
|
9036
9196
|
startXRef.current = getClientX(e);
|
|
9037
9197
|
startTimeRef.current = Date.now();
|
|
9038
9198
|
};
|
|
9039
|
-
|
|
9199
|
+
import_react32.default.useEffect(() => {
|
|
9040
9200
|
if (!isDragging) return;
|
|
9041
9201
|
const handleMove = (e) => {
|
|
9042
9202
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -9074,8 +9234,8 @@ var Swiper = (props) => {
|
|
|
9074
9234
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
9075
9235
|
const slideWidthPercent = 100 / viewItemCount;
|
|
9076
9236
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
9077
|
-
const slideElements =
|
|
9078
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0,
|
|
9237
|
+
const slideElements = import_react32.default.useMemo(
|
|
9238
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
9079
9239
|
"div",
|
|
9080
9240
|
{
|
|
9081
9241
|
className: "lib-xplat-swiper__slide",
|
|
@@ -9094,14 +9254,14 @@ var Swiper = (props) => {
|
|
|
9094
9254
|
Math.floor(realIndex / slideBy),
|
|
9095
9255
|
totalSteps - 1
|
|
9096
9256
|
);
|
|
9097
|
-
return /* @__PURE__ */ (0,
|
|
9098
|
-
/* @__PURE__ */ (0,
|
|
9257
|
+
return /* @__PURE__ */ (0, import_jsx_runtime338.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
|
|
9258
|
+
/* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
9099
9259
|
"div",
|
|
9100
9260
|
{
|
|
9101
9261
|
className: "lib-xplat-swiper__viewport",
|
|
9102
9262
|
onMouseDown: handleDragStart,
|
|
9103
9263
|
onTouchStart: handleDragStart,
|
|
9104
|
-
children: /* @__PURE__ */ (0,
|
|
9264
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
9105
9265
|
"div",
|
|
9106
9266
|
{
|
|
9107
9267
|
className: clsx_default(
|
|
@@ -9119,7 +9279,7 @@ var Swiper = (props) => {
|
|
|
9119
9279
|
)
|
|
9120
9280
|
}
|
|
9121
9281
|
),
|
|
9122
|
-
showProgress && canSlide && /* @__PURE__ */ (0,
|
|
9282
|
+
showProgress && canSlide && /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
9123
9283
|
"span",
|
|
9124
9284
|
{
|
|
9125
9285
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -9129,7 +9289,7 @@ var Swiper = (props) => {
|
|
|
9129
9289
|
}
|
|
9130
9290
|
}
|
|
9131
9291
|
) }) }),
|
|
9132
|
-
canSlide && /* @__PURE__ */ (0,
|
|
9292
|
+
canSlide && /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
9133
9293
|
"button",
|
|
9134
9294
|
{
|
|
9135
9295
|
className: clsx_default(
|
|
@@ -9147,8 +9307,8 @@ Swiper.displayName = "Swiper";
|
|
|
9147
9307
|
var Swiper_default = Swiper;
|
|
9148
9308
|
|
|
9149
9309
|
// src/components/Switch/Switch.tsx
|
|
9150
|
-
var
|
|
9151
|
-
var
|
|
9310
|
+
var import_react33 = __toESM(require("react"), 1);
|
|
9311
|
+
var import_jsx_runtime339 = require("react/jsx-runtime");
|
|
9152
9312
|
var KNOB_TRANSITION_MS = 250;
|
|
9153
9313
|
var Switch = (props) => {
|
|
9154
9314
|
const {
|
|
@@ -9158,9 +9318,9 @@ var Switch = (props) => {
|
|
|
9158
9318
|
disabled,
|
|
9159
9319
|
onChange
|
|
9160
9320
|
} = props;
|
|
9161
|
-
const [isAnimating, setIsAnimating] =
|
|
9162
|
-
const timeoutRef =
|
|
9163
|
-
|
|
9321
|
+
const [isAnimating, setIsAnimating] = import_react33.default.useState(false);
|
|
9322
|
+
const timeoutRef = import_react33.default.useRef(null);
|
|
9323
|
+
import_react33.default.useEffect(() => {
|
|
9164
9324
|
return () => {
|
|
9165
9325
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
9166
9326
|
};
|
|
@@ -9175,7 +9335,7 @@ var Switch = (props) => {
|
|
|
9175
9335
|
timeoutRef.current = null;
|
|
9176
9336
|
}, KNOB_TRANSITION_MS);
|
|
9177
9337
|
};
|
|
9178
|
-
return /* @__PURE__ */ (0,
|
|
9338
|
+
return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
|
|
9179
9339
|
"div",
|
|
9180
9340
|
{
|
|
9181
9341
|
className: clsx_default(
|
|
@@ -9188,7 +9348,7 @@ var Switch = (props) => {
|
|
|
9188
9348
|
),
|
|
9189
9349
|
onClick: handleClick,
|
|
9190
9350
|
"aria-disabled": disabled || isAnimating,
|
|
9191
|
-
children: /* @__PURE__ */ (0,
|
|
9351
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime339.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
9192
9352
|
}
|
|
9193
9353
|
);
|
|
9194
9354
|
};
|
|
@@ -9196,26 +9356,27 @@ Switch.displayName = "Switch";
|
|
|
9196
9356
|
var Switch_default = Switch;
|
|
9197
9357
|
|
|
9198
9358
|
// src/components/Table/TableContext.tsx
|
|
9199
|
-
var
|
|
9200
|
-
var TableContext =
|
|
9359
|
+
var import_react34 = __toESM(require("react"), 1);
|
|
9360
|
+
var TableContext = import_react34.default.createContext(null);
|
|
9201
9361
|
var useTableContext = () => {
|
|
9202
|
-
const ctx =
|
|
9362
|
+
const ctx = import_react34.default.useContext(TableContext);
|
|
9203
9363
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
9204
9364
|
return ctx;
|
|
9205
9365
|
};
|
|
9206
9366
|
var TableContext_default = TableContext;
|
|
9207
9367
|
|
|
9208
9368
|
// src/components/Table/Table.tsx
|
|
9209
|
-
var
|
|
9369
|
+
var import_jsx_runtime340 = require("react/jsx-runtime");
|
|
9210
9370
|
var Table = (props) => {
|
|
9211
9371
|
const {
|
|
9212
9372
|
children,
|
|
9373
|
+
size = "md",
|
|
9213
9374
|
rowBorderUse = true,
|
|
9214
9375
|
colBorderUse = true,
|
|
9215
9376
|
headerSticky = false,
|
|
9216
9377
|
stickyShadow = true
|
|
9217
9378
|
} = props;
|
|
9218
|
-
return /* @__PURE__ */ (0,
|
|
9379
|
+
return /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
|
|
9219
9380
|
TableContext_default.Provider,
|
|
9220
9381
|
{
|
|
9221
9382
|
value: {
|
|
@@ -9224,7 +9385,7 @@ var Table = (props) => {
|
|
|
9224
9385
|
headerSticky,
|
|
9225
9386
|
stickyShadow
|
|
9226
9387
|
},
|
|
9227
|
-
children: /* @__PURE__ */ (0,
|
|
9388
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("table", { className: "lib-xplat-table", children })
|
|
9228
9389
|
}
|
|
9229
9390
|
) });
|
|
9230
9391
|
};
|
|
@@ -9232,41 +9393,41 @@ Table.displayName = "Table";
|
|
|
9232
9393
|
var Table_default = Table;
|
|
9233
9394
|
|
|
9234
9395
|
// src/components/Table/TableBody.tsx
|
|
9235
|
-
var
|
|
9396
|
+
var import_jsx_runtime341 = require("react/jsx-runtime");
|
|
9236
9397
|
var TableBody = (props) => {
|
|
9237
9398
|
const { children } = props;
|
|
9238
|
-
return /* @__PURE__ */ (0,
|
|
9399
|
+
return /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("tbody", { children });
|
|
9239
9400
|
};
|
|
9240
9401
|
TableBody.displayName = "TableBody";
|
|
9241
9402
|
var TableBody_default = TableBody;
|
|
9242
9403
|
|
|
9243
9404
|
// src/components/Table/TableCell.tsx
|
|
9244
|
-
var
|
|
9405
|
+
var import_react37 = __toESM(require("react"), 1);
|
|
9245
9406
|
|
|
9246
9407
|
// src/components/Table/TableHeadContext.tsx
|
|
9247
|
-
var
|
|
9248
|
-
var TableHeadContext =
|
|
9408
|
+
var import_react35 = __toESM(require("react"), 1);
|
|
9409
|
+
var TableHeadContext = import_react35.default.createContext(
|
|
9249
9410
|
null
|
|
9250
9411
|
);
|
|
9251
9412
|
var useTableHeadContext = () => {
|
|
9252
|
-
const ctx =
|
|
9413
|
+
const ctx = import_react35.default.useContext(TableHeadContext);
|
|
9253
9414
|
return ctx;
|
|
9254
9415
|
};
|
|
9255
9416
|
var TableHeadContext_default = TableHeadContext;
|
|
9256
9417
|
|
|
9257
9418
|
// src/components/Table/TableRowContext.tsx
|
|
9258
|
-
var
|
|
9259
|
-
var TableRowContext =
|
|
9419
|
+
var import_react36 = __toESM(require("react"), 1);
|
|
9420
|
+
var TableRowContext = import_react36.default.createContext(null);
|
|
9260
9421
|
var useTableRowContext = () => {
|
|
9261
|
-
const ctx =
|
|
9422
|
+
const ctx = import_react36.default.useContext(TableRowContext);
|
|
9262
9423
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
9263
9424
|
return ctx;
|
|
9264
9425
|
};
|
|
9265
9426
|
var TableRowContext_default = TableRowContext;
|
|
9266
9427
|
|
|
9267
9428
|
// src/components/Table/TableCell.tsx
|
|
9268
|
-
var
|
|
9269
|
-
var TableCell =
|
|
9429
|
+
var import_jsx_runtime342 = require("react/jsx-runtime");
|
|
9430
|
+
var TableCell = import_react37.default.memo((props) => {
|
|
9270
9431
|
const {
|
|
9271
9432
|
children,
|
|
9272
9433
|
align = "center",
|
|
@@ -9278,9 +9439,9 @@ var TableCell = import_react35.default.memo((props) => {
|
|
|
9278
9439
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
9279
9440
|
const { stickyShadow } = useTableContext();
|
|
9280
9441
|
const headContext = useTableHeadContext();
|
|
9281
|
-
const [left, setLeft] =
|
|
9282
|
-
const cellRef =
|
|
9283
|
-
const calculateLeft =
|
|
9442
|
+
const [left, setLeft] = import_react37.default.useState(0);
|
|
9443
|
+
const cellRef = import_react37.default.useRef(null);
|
|
9444
|
+
const calculateLeft = import_react37.default.useCallback(() => {
|
|
9284
9445
|
if (!cellRef.current) return 0;
|
|
9285
9446
|
let totalLeft = 0;
|
|
9286
9447
|
for (const ref of stickyCells) {
|
|
@@ -9289,7 +9450,7 @@ var TableCell = import_react35.default.memo((props) => {
|
|
|
9289
9450
|
}
|
|
9290
9451
|
return totalLeft;
|
|
9291
9452
|
}, [stickyCells]);
|
|
9292
|
-
|
|
9453
|
+
import_react37.default.useEffect(() => {
|
|
9293
9454
|
if (!isSticky || !cellRef.current) return;
|
|
9294
9455
|
registerStickyCell(cellRef);
|
|
9295
9456
|
setLeft(calculateLeft());
|
|
@@ -9307,7 +9468,7 @@ var TableCell = import_react35.default.memo((props) => {
|
|
|
9307
9468
|
const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
|
|
9308
9469
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
9309
9470
|
const enableHover = headContext && headContext.cellHover;
|
|
9310
|
-
return /* @__PURE__ */ (0,
|
|
9471
|
+
return /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
|
|
9311
9472
|
CellTag,
|
|
9312
9473
|
{
|
|
9313
9474
|
ref: cellRef,
|
|
@@ -9332,21 +9493,21 @@ TableCell.displayName = "TableCell";
|
|
|
9332
9493
|
var TableCell_default = TableCell;
|
|
9333
9494
|
|
|
9334
9495
|
// src/components/Table/TableHead.tsx
|
|
9335
|
-
var
|
|
9496
|
+
var import_jsx_runtime343 = require("react/jsx-runtime");
|
|
9336
9497
|
var TableHead = ({
|
|
9337
9498
|
children,
|
|
9338
9499
|
cellHover = false
|
|
9339
9500
|
}) => {
|
|
9340
9501
|
const { headerSticky } = useTableContext();
|
|
9341
|
-
return /* @__PURE__ */ (0,
|
|
9502
|
+
return /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
|
|
9342
9503
|
};
|
|
9343
9504
|
TableHead.displayName = "TableHead";
|
|
9344
9505
|
var TableHead_default = TableHead;
|
|
9345
9506
|
|
|
9346
9507
|
// src/components/Table/TableRow.tsx
|
|
9347
|
-
var
|
|
9348
|
-
var
|
|
9349
|
-
var TableRow =
|
|
9508
|
+
var import_react38 = __toESM(require("react"), 1);
|
|
9509
|
+
var import_jsx_runtime344 = require("react/jsx-runtime");
|
|
9510
|
+
var TableRow = import_react38.default.memo((props) => {
|
|
9350
9511
|
const {
|
|
9351
9512
|
children,
|
|
9352
9513
|
type = "secondary",
|
|
@@ -9354,14 +9515,14 @@ var TableRow = import_react36.default.memo((props) => {
|
|
|
9354
9515
|
onClick
|
|
9355
9516
|
} = props;
|
|
9356
9517
|
const { rowBorderUse } = useTableContext();
|
|
9357
|
-
const [stickyCells, setStickyCells] =
|
|
9518
|
+
const [stickyCells, setStickyCells] = import_react38.default.useState([]);
|
|
9358
9519
|
const registerStickyCell = (ref) => {
|
|
9359
9520
|
setStickyCells((prev) => {
|
|
9360
9521
|
if (prev.includes(ref)) return prev;
|
|
9361
9522
|
return [...prev, ref];
|
|
9362
9523
|
});
|
|
9363
9524
|
};
|
|
9364
|
-
return /* @__PURE__ */ (0,
|
|
9525
|
+
return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
|
|
9365
9526
|
"tr",
|
|
9366
9527
|
{
|
|
9367
9528
|
className: clsx_default(
|
|
@@ -9379,7 +9540,7 @@ TableRow.displayName = "TableRow";
|
|
|
9379
9540
|
var TableRow_default = TableRow;
|
|
9380
9541
|
|
|
9381
9542
|
// src/components/Tag/Tag.tsx
|
|
9382
|
-
var
|
|
9543
|
+
var import_jsx_runtime345 = require("react/jsx-runtime");
|
|
9383
9544
|
var Tag = (props) => {
|
|
9384
9545
|
const {
|
|
9385
9546
|
children,
|
|
@@ -9389,7 +9550,7 @@ var Tag = (props) => {
|
|
|
9389
9550
|
disabled = false,
|
|
9390
9551
|
colorIndex
|
|
9391
9552
|
} = props;
|
|
9392
|
-
return /* @__PURE__ */ (0,
|
|
9553
|
+
return /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)(
|
|
9393
9554
|
"span",
|
|
9394
9555
|
{
|
|
9395
9556
|
className: clsx_default(
|
|
@@ -9400,8 +9561,8 @@ var Tag = (props) => {
|
|
|
9400
9561
|
disabled && "disabled"
|
|
9401
9562
|
),
|
|
9402
9563
|
children: [
|
|
9403
|
-
/* @__PURE__ */ (0,
|
|
9404
|
-
onClose && /* @__PURE__ */ (0,
|
|
9564
|
+
/* @__PURE__ */ (0, import_jsx_runtime345.jsx)("span", { className: "tag-label", children }),
|
|
9565
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(XIcon_default, {}) })
|
|
9405
9566
|
]
|
|
9406
9567
|
}
|
|
9407
9568
|
);
|
|
@@ -9409,83 +9570,26 @@ var Tag = (props) => {
|
|
|
9409
9570
|
Tag.displayName = "Tag";
|
|
9410
9571
|
var Tag_default = Tag;
|
|
9411
9572
|
|
|
9412
|
-
// src/components/TextArea/TextArea.tsx
|
|
9413
|
-
var import_react37 = __toESM(require("react"), 1);
|
|
9414
|
-
var import_jsx_runtime344 = require("react/jsx-runtime");
|
|
9415
|
-
var TextArea = import_react37.default.forwardRef(
|
|
9416
|
-
(props, ref) => {
|
|
9417
|
-
const { value, onChange, disabled, ...textareaProps } = props;
|
|
9418
|
-
const localRef = import_react37.default.useRef(null);
|
|
9419
|
-
const setRefs = (el) => {
|
|
9420
|
-
localRef.current = el;
|
|
9421
|
-
if (!ref) return;
|
|
9422
|
-
if (typeof ref === "function") {
|
|
9423
|
-
ref(el);
|
|
9424
|
-
} else if (ref && typeof ref === "object" && "current" in ref) {
|
|
9425
|
-
ref.current = el;
|
|
9426
|
-
}
|
|
9427
|
-
};
|
|
9428
|
-
const handleOnChange = (e) => {
|
|
9429
|
-
const val = e.target.value;
|
|
9430
|
-
if (onChange) {
|
|
9431
|
-
const event = {
|
|
9432
|
-
...e,
|
|
9433
|
-
target: { value: val }
|
|
9434
|
-
};
|
|
9435
|
-
onChange(event);
|
|
9436
|
-
}
|
|
9437
|
-
};
|
|
9438
|
-
import_react37.default.useEffect(() => {
|
|
9439
|
-
const el = localRef.current;
|
|
9440
|
-
if (!el) return;
|
|
9441
|
-
el.style.height = "0px";
|
|
9442
|
-
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
9443
|
-
el.style.height = `${nextHeight}px`;
|
|
9444
|
-
}, [value]);
|
|
9445
|
-
return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
|
|
9446
|
-
"div",
|
|
9447
|
-
{
|
|
9448
|
-
className: clsx_default(
|
|
9449
|
-
"lib-xplat-textarea",
|
|
9450
|
-
disabled ? "disabled" : void 0
|
|
9451
|
-
),
|
|
9452
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
|
|
9453
|
-
"textarea",
|
|
9454
|
-
{
|
|
9455
|
-
...textareaProps,
|
|
9456
|
-
ref: setRefs,
|
|
9457
|
-
disabled,
|
|
9458
|
-
value,
|
|
9459
|
-
onChange: handleOnChange
|
|
9460
|
-
}
|
|
9461
|
-
)
|
|
9462
|
-
}
|
|
9463
|
-
) });
|
|
9464
|
-
}
|
|
9465
|
-
);
|
|
9466
|
-
TextArea.displayName = "TextArea";
|
|
9467
|
-
var TextArea_default = TextArea;
|
|
9468
|
-
|
|
9469
9573
|
// src/components/Toast/Toast.tsx
|
|
9470
|
-
var
|
|
9574
|
+
var import_react39 = __toESM(require("react"), 1);
|
|
9471
9575
|
var import_react_dom4 = require("react-dom");
|
|
9472
|
-
var
|
|
9473
|
-
var ToastContext =
|
|
9576
|
+
var import_jsx_runtime346 = require("react/jsx-runtime");
|
|
9577
|
+
var ToastContext = import_react39.default.createContext(null);
|
|
9474
9578
|
var useToast = () => {
|
|
9475
|
-
const ctx =
|
|
9579
|
+
const ctx = import_react39.default.useContext(ToastContext);
|
|
9476
9580
|
if (!ctx) throw new Error("useToast must be used within ToastProvider");
|
|
9477
9581
|
return ctx;
|
|
9478
9582
|
};
|
|
9479
9583
|
var EXIT_DURATION = 300;
|
|
9480
9584
|
var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
9481
|
-
const ref =
|
|
9482
|
-
const [height, setHeight] =
|
|
9483
|
-
|
|
9585
|
+
const ref = import_react39.default.useRef(null);
|
|
9586
|
+
const [height, setHeight] = import_react39.default.useState(void 0);
|
|
9587
|
+
import_react39.default.useEffect(() => {
|
|
9484
9588
|
if (ref.current && !isExiting) {
|
|
9485
9589
|
setHeight(ref.current.offsetHeight);
|
|
9486
9590
|
}
|
|
9487
9591
|
}, [isExiting]);
|
|
9488
|
-
return /* @__PURE__ */ (0,
|
|
9592
|
+
return /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
|
|
9489
9593
|
"div",
|
|
9490
9594
|
{
|
|
9491
9595
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -9493,15 +9597,15 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
9493
9597
|
maxHeight: isExiting ? 0 : height ?? "none",
|
|
9494
9598
|
marginBottom: isExiting ? 0 : void 0
|
|
9495
9599
|
},
|
|
9496
|
-
children: /* @__PURE__ */ (0,
|
|
9600
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)(
|
|
9497
9601
|
"div",
|
|
9498
9602
|
{
|
|
9499
9603
|
ref,
|
|
9500
9604
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
9501
9605
|
role: "alert",
|
|
9502
9606
|
children: [
|
|
9503
|
-
/* @__PURE__ */ (0,
|
|
9504
|
-
/* @__PURE__ */ (0,
|
|
9607
|
+
/* @__PURE__ */ (0, import_jsx_runtime346.jsx)("span", { className: "message", children: item.message }),
|
|
9608
|
+
/* @__PURE__ */ (0, import_jsx_runtime346.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
|
|
9505
9609
|
]
|
|
9506
9610
|
}
|
|
9507
9611
|
)
|
|
@@ -9512,13 +9616,13 @@ var ToastProvider = ({
|
|
|
9512
9616
|
children,
|
|
9513
9617
|
position = "top-right"
|
|
9514
9618
|
}) => {
|
|
9515
|
-
const [toasts, setToasts] =
|
|
9516
|
-
const [removing, setRemoving] =
|
|
9517
|
-
const [mounted, setMounted] =
|
|
9518
|
-
|
|
9619
|
+
const [toasts, setToasts] = import_react39.default.useState([]);
|
|
9620
|
+
const [removing, setRemoving] = import_react39.default.useState(/* @__PURE__ */ new Set());
|
|
9621
|
+
const [mounted, setMounted] = import_react39.default.useState(false);
|
|
9622
|
+
import_react39.default.useEffect(() => {
|
|
9519
9623
|
setMounted(true);
|
|
9520
9624
|
}, []);
|
|
9521
|
-
const remove =
|
|
9625
|
+
const remove = import_react39.default.useCallback((id) => {
|
|
9522
9626
|
setRemoving((prev) => new Set(prev).add(id));
|
|
9523
9627
|
setTimeout(() => {
|
|
9524
9628
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
@@ -9529,7 +9633,7 @@ var ToastProvider = ({
|
|
|
9529
9633
|
});
|
|
9530
9634
|
}, EXIT_DURATION);
|
|
9531
9635
|
}, []);
|
|
9532
|
-
const toast =
|
|
9636
|
+
const toast = import_react39.default.useCallback(
|
|
9533
9637
|
(type, message, duration = 3e3) => {
|
|
9534
9638
|
const id = `${Date.now()}-${Math.random()}`;
|
|
9535
9639
|
setToasts((prev) => [...prev, { id, type, message }]);
|
|
@@ -9539,10 +9643,10 @@ var ToastProvider = ({
|
|
|
9539
9643
|
},
|
|
9540
9644
|
[remove]
|
|
9541
9645
|
);
|
|
9542
|
-
return /* @__PURE__ */ (0,
|
|
9646
|
+
return /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)(ToastContext.Provider, { value: { toast }, children: [
|
|
9543
9647
|
children,
|
|
9544
9648
|
mounted && (0, import_react_dom4.createPortal)(
|
|
9545
|
-
/* @__PURE__ */ (0,
|
|
9649
|
+
/* @__PURE__ */ (0, import_jsx_runtime346.jsx)("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
|
|
9546
9650
|
ToastItemComponent,
|
|
9547
9651
|
{
|
|
9548
9652
|
item: t,
|
|
@@ -9558,29 +9662,29 @@ var ToastProvider = ({
|
|
|
9558
9662
|
ToastProvider.displayName = "ToastProvider";
|
|
9559
9663
|
|
|
9560
9664
|
// src/components/Tooltip/Tooltip.tsx
|
|
9561
|
-
var
|
|
9562
|
-
var
|
|
9665
|
+
var import_react40 = __toESM(require("react"), 1);
|
|
9666
|
+
var import_jsx_runtime347 = require("react/jsx-runtime");
|
|
9563
9667
|
var Tooltip = (props) => {
|
|
9564
9668
|
const {
|
|
9565
9669
|
type = "primary",
|
|
9566
9670
|
description,
|
|
9567
9671
|
children
|
|
9568
9672
|
} = props;
|
|
9569
|
-
const iconRef =
|
|
9570
|
-
return /* @__PURE__ */ (0,
|
|
9571
|
-
/* @__PURE__ */ (0,
|
|
9572
|
-
/* @__PURE__ */ (0,
|
|
9673
|
+
const iconRef = import_react40.default.useRef(null);
|
|
9674
|
+
return /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "lib-xplat-tooltip", children: [
|
|
9675
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
|
|
9676
|
+
/* @__PURE__ */ (0, import_jsx_runtime347.jsx)("div", { className: clsx_default("tooltip-wrapper", type), children: description })
|
|
9573
9677
|
] });
|
|
9574
9678
|
};
|
|
9575
9679
|
Tooltip.displayName = "Tooltip";
|
|
9576
9680
|
var Tooltip_default = Tooltip;
|
|
9577
9681
|
|
|
9578
9682
|
// src/components/Video/Video.tsx
|
|
9579
|
-
var
|
|
9580
|
-
var
|
|
9581
|
-
var PipIcon = () => /* @__PURE__ */ (0,
|
|
9582
|
-
/* @__PURE__ */ (0,
|
|
9583
|
-
/* @__PURE__ */ (0,
|
|
9683
|
+
var import_react41 = __toESM(require("react"), 1);
|
|
9684
|
+
var import_jsx_runtime348 = require("react/jsx-runtime");
|
|
9685
|
+
var PipIcon = () => /* @__PURE__ */ (0, import_jsx_runtime348.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: [
|
|
9686
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
|
|
9687
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
|
|
9584
9688
|
] });
|
|
9585
9689
|
var formatTime = (sec) => {
|
|
9586
9690
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -9588,7 +9692,7 @@ var formatTime = (sec) => {
|
|
|
9588
9692
|
const s = Math.floor(sec % 60);
|
|
9589
9693
|
return `${m}:${s.toString().padStart(2, "0")}`;
|
|
9590
9694
|
};
|
|
9591
|
-
var Video =
|
|
9695
|
+
var Video = import_react41.default.forwardRef((props, ref) => {
|
|
9592
9696
|
const {
|
|
9593
9697
|
src,
|
|
9594
9698
|
poster,
|
|
@@ -9612,21 +9716,21 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9612
9716
|
children,
|
|
9613
9717
|
...rest
|
|
9614
9718
|
} = props;
|
|
9615
|
-
const containerRef =
|
|
9616
|
-
const videoRef =
|
|
9617
|
-
const [isPlaying, setIsPlaying] =
|
|
9618
|
-
const [isLoaded, setIsLoaded] =
|
|
9619
|
-
const [currentTime, setCurrentTime] =
|
|
9620
|
-
const [duration, setDuration] =
|
|
9621
|
-
const [buffered, setBuffered] =
|
|
9622
|
-
const [volume, setVolume] =
|
|
9623
|
-
const [isMuted, setIsMuted] =
|
|
9624
|
-
const [isFullscreen, setIsFullscreen] =
|
|
9625
|
-
const [playbackRate, setPlaybackRate] =
|
|
9626
|
-
const [rateMenuOpen, setRateMenuOpen] =
|
|
9627
|
-
const [captionsOn, setCaptionsOn] =
|
|
9628
|
-
const [isPip, setIsPip] =
|
|
9629
|
-
const setRefs =
|
|
9719
|
+
const containerRef = import_react41.default.useRef(null);
|
|
9720
|
+
const videoRef = import_react41.default.useRef(null);
|
|
9721
|
+
const [isPlaying, setIsPlaying] = import_react41.default.useState(Boolean(autoPlay));
|
|
9722
|
+
const [isLoaded, setIsLoaded] = import_react41.default.useState(false);
|
|
9723
|
+
const [currentTime, setCurrentTime] = import_react41.default.useState(0);
|
|
9724
|
+
const [duration, setDuration] = import_react41.default.useState(0);
|
|
9725
|
+
const [buffered, setBuffered] = import_react41.default.useState(0);
|
|
9726
|
+
const [volume, setVolume] = import_react41.default.useState(1);
|
|
9727
|
+
const [isMuted, setIsMuted] = import_react41.default.useState(Boolean(muted));
|
|
9728
|
+
const [isFullscreen, setIsFullscreen] = import_react41.default.useState(false);
|
|
9729
|
+
const [playbackRate, setPlaybackRate] = import_react41.default.useState(1);
|
|
9730
|
+
const [rateMenuOpen, setRateMenuOpen] = import_react41.default.useState(false);
|
|
9731
|
+
const [captionsOn, setCaptionsOn] = import_react41.default.useState(false);
|
|
9732
|
+
const [isPip, setIsPip] = import_react41.default.useState(false);
|
|
9733
|
+
const setRefs = import_react41.default.useCallback(
|
|
9630
9734
|
(el) => {
|
|
9631
9735
|
videoRef.current = el;
|
|
9632
9736
|
if (typeof ref === "function") ref(el);
|
|
@@ -9634,14 +9738,14 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9634
9738
|
},
|
|
9635
9739
|
[ref]
|
|
9636
9740
|
);
|
|
9637
|
-
|
|
9741
|
+
import_react41.default.useEffect(() => {
|
|
9638
9742
|
const onFsChange = () => {
|
|
9639
9743
|
setIsFullscreen(document.fullscreenElement === containerRef.current);
|
|
9640
9744
|
};
|
|
9641
9745
|
document.addEventListener("fullscreenchange", onFsChange);
|
|
9642
9746
|
return () => document.removeEventListener("fullscreenchange", onFsChange);
|
|
9643
9747
|
}, []);
|
|
9644
|
-
|
|
9748
|
+
import_react41.default.useEffect(() => {
|
|
9645
9749
|
const v = videoRef.current;
|
|
9646
9750
|
if (!v) return;
|
|
9647
9751
|
const onEnter = () => setIsPip(true);
|
|
@@ -9755,13 +9859,13 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9755
9859
|
const volumePct = (isMuted ? 0 : volume) * 100;
|
|
9756
9860
|
const VolumeGlyph = isMuted || volume === 0 ? VolumeXIcon_default : volume < 0.5 ? VolumeIcon_default : Volume2Icon_default;
|
|
9757
9861
|
const pipSupported = typeof document !== "undefined" && "pictureInPictureEnabled" in document && document.pictureInPictureEnabled;
|
|
9758
|
-
return /* @__PURE__ */ (0,
|
|
9862
|
+
return /* @__PURE__ */ (0, import_jsx_runtime348.jsxs)(
|
|
9759
9863
|
"div",
|
|
9760
9864
|
{
|
|
9761
9865
|
ref: containerRef,
|
|
9762
9866
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
9763
9867
|
children: [
|
|
9764
|
-
/* @__PURE__ */ (0,
|
|
9868
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9765
9869
|
"video",
|
|
9766
9870
|
{
|
|
9767
9871
|
ref: setRefs,
|
|
@@ -9782,7 +9886,7 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9782
9886
|
children
|
|
9783
9887
|
}
|
|
9784
9888
|
),
|
|
9785
|
-
showCenterPlay && /* @__PURE__ */ (0,
|
|
9889
|
+
showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9786
9890
|
"button",
|
|
9787
9891
|
{
|
|
9788
9892
|
type: "button",
|
|
@@ -9794,11 +9898,11 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9794
9898
|
onClick: togglePlay,
|
|
9795
9899
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
9796
9900
|
tabIndex: -1,
|
|
9797
|
-
children: /* @__PURE__ */ (0,
|
|
9901
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(PlayCircleIcon_default, {}) })
|
|
9798
9902
|
}
|
|
9799
9903
|
),
|
|
9800
|
-
showControls && /* @__PURE__ */ (0,
|
|
9801
|
-
/* @__PURE__ */ (0,
|
|
9904
|
+
showControls && /* @__PURE__ */ (0, import_jsx_runtime348.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
|
|
9905
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9802
9906
|
"input",
|
|
9803
9907
|
{
|
|
9804
9908
|
type: "range",
|
|
@@ -9815,29 +9919,29 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9815
9919
|
}
|
|
9816
9920
|
}
|
|
9817
9921
|
),
|
|
9818
|
-
/* @__PURE__ */ (0,
|
|
9819
|
-
/* @__PURE__ */ (0,
|
|
9922
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsxs)("div", { className: "controls-row", children: [
|
|
9923
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9820
9924
|
"button",
|
|
9821
9925
|
{
|
|
9822
9926
|
type: "button",
|
|
9823
9927
|
className: "control-btn",
|
|
9824
9928
|
onClick: togglePlay,
|
|
9825
9929
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
9826
|
-
children: isPlaying ? /* @__PURE__ */ (0,
|
|
9930
|
+
children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(PlayIcon_default, {})
|
|
9827
9931
|
}
|
|
9828
9932
|
),
|
|
9829
|
-
/* @__PURE__ */ (0,
|
|
9830
|
-
/* @__PURE__ */ (0,
|
|
9933
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsxs)("div", { className: "volume-group", children: [
|
|
9934
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9831
9935
|
"button",
|
|
9832
9936
|
{
|
|
9833
9937
|
type: "button",
|
|
9834
9938
|
className: "control-btn",
|
|
9835
9939
|
onClick: toggleMute,
|
|
9836
9940
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
9837
|
-
children: /* @__PURE__ */ (0,
|
|
9941
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(VolumeGlyph, {})
|
|
9838
9942
|
}
|
|
9839
9943
|
),
|
|
9840
|
-
/* @__PURE__ */ (0,
|
|
9944
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9841
9945
|
"input",
|
|
9842
9946
|
{
|
|
9843
9947
|
type: "range",
|
|
@@ -9852,14 +9956,14 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9852
9956
|
}
|
|
9853
9957
|
)
|
|
9854
9958
|
] }),
|
|
9855
|
-
/* @__PURE__ */ (0,
|
|
9959
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsxs)("span", { className: "time", children: [
|
|
9856
9960
|
formatTime(currentTime),
|
|
9857
9961
|
" / ",
|
|
9858
9962
|
formatTime(duration)
|
|
9859
9963
|
] }),
|
|
9860
|
-
/* @__PURE__ */ (0,
|
|
9861
|
-
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0,
|
|
9862
|
-
/* @__PURE__ */ (0,
|
|
9964
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)("div", { className: "controls-spacer" }),
|
|
9965
|
+
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime348.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
|
|
9966
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsxs)(
|
|
9863
9967
|
"button",
|
|
9864
9968
|
{
|
|
9865
9969
|
type: "button",
|
|
@@ -9873,7 +9977,7 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9873
9977
|
]
|
|
9874
9978
|
}
|
|
9875
9979
|
),
|
|
9876
|
-
rateMenuOpen && /* @__PURE__ */ (0,
|
|
9980
|
+
rateMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime348.jsx)("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ (0, import_jsx_runtime348.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime348.jsxs)(
|
|
9877
9981
|
"button",
|
|
9878
9982
|
{
|
|
9879
9983
|
type: "button",
|
|
@@ -9887,7 +9991,7 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9887
9991
|
}
|
|
9888
9992
|
) }, r2)) })
|
|
9889
9993
|
] }),
|
|
9890
|
-
showCaptions && /* @__PURE__ */ (0,
|
|
9994
|
+
showCaptions && /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9891
9995
|
"button",
|
|
9892
9996
|
{
|
|
9893
9997
|
type: "button",
|
|
@@ -9895,37 +9999,37 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9895
9999
|
onClick: toggleCaptions,
|
|
9896
10000
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
9897
10001
|
"aria-pressed": captionsOn,
|
|
9898
|
-
children: /* @__PURE__ */ (0,
|
|
10002
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(TypeIcon_default, {})
|
|
9899
10003
|
}
|
|
9900
10004
|
),
|
|
9901
|
-
showPip && pipSupported && /* @__PURE__ */ (0,
|
|
10005
|
+
showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9902
10006
|
"button",
|
|
9903
10007
|
{
|
|
9904
10008
|
type: "button",
|
|
9905
10009
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
9906
10010
|
onClick: togglePip,
|
|
9907
10011
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
9908
|
-
children: /* @__PURE__ */ (0,
|
|
10012
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(PipIcon, {})
|
|
9909
10013
|
}
|
|
9910
10014
|
),
|
|
9911
|
-
showDownload && /* @__PURE__ */ (0,
|
|
10015
|
+
showDownload && /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9912
10016
|
"a",
|
|
9913
10017
|
{
|
|
9914
10018
|
className: "control-btn",
|
|
9915
10019
|
href: src,
|
|
9916
10020
|
download: downloadFileName ?? true,
|
|
9917
10021
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
9918
|
-
children: /* @__PURE__ */ (0,
|
|
10022
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(DownloadIcon_default, {})
|
|
9919
10023
|
}
|
|
9920
10024
|
),
|
|
9921
|
-
/* @__PURE__ */ (0,
|
|
10025
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9922
10026
|
"button",
|
|
9923
10027
|
{
|
|
9924
10028
|
type: "button",
|
|
9925
10029
|
className: "control-btn",
|
|
9926
10030
|
onClick: toggleFullscreen,
|
|
9927
10031
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
9928
|
-
children: isFullscreen ? /* @__PURE__ */ (0,
|
|
10032
|
+
children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(MaximizeIcon_default, {})
|
|
9929
10033
|
}
|
|
9930
10034
|
)
|
|
9931
10035
|
] })
|
|
@@ -9938,7 +10042,7 @@ Video.displayName = "Video";
|
|
|
9938
10042
|
var Video_default = Video;
|
|
9939
10043
|
|
|
9940
10044
|
// src/layout/Grid/FullGrid/FullGrid.tsx
|
|
9941
|
-
var
|
|
10045
|
+
var import_jsx_runtime349 = require("react/jsx-runtime");
|
|
9942
10046
|
var GAP_MAP = {
|
|
9943
10047
|
none: "var(--spacing-space-none)",
|
|
9944
10048
|
xs: "var(--spacing-space-1)",
|
|
@@ -9951,13 +10055,13 @@ var GAP_MAP = {
|
|
|
9951
10055
|
var FullGrid = (props) => {
|
|
9952
10056
|
const { children, gap } = props;
|
|
9953
10057
|
const style = gap != null ? { gap: GAP_MAP[gap] } : void 0;
|
|
9954
|
-
return /* @__PURE__ */ (0,
|
|
10058
|
+
return /* @__PURE__ */ (0, import_jsx_runtime349.jsx)("div", { className: "lib-xplat-full-grid", style, children });
|
|
9955
10059
|
};
|
|
9956
10060
|
FullGrid.displayName = "FullGrid";
|
|
9957
10061
|
var FullGrid_default = FullGrid;
|
|
9958
10062
|
|
|
9959
10063
|
// src/layout/Grid/FullScreen/FullScreen.tsx
|
|
9960
|
-
var
|
|
10064
|
+
var import_jsx_runtime350 = require("react/jsx-runtime");
|
|
9961
10065
|
var GAP_MAP2 = {
|
|
9962
10066
|
none: "var(--spacing-space-none)",
|
|
9963
10067
|
xs: "var(--spacing-space-1)",
|
|
@@ -9970,13 +10074,13 @@ var GAP_MAP2 = {
|
|
|
9970
10074
|
var FullScreen = (props) => {
|
|
9971
10075
|
const { children, gap } = props;
|
|
9972
10076
|
const style = gap != null ? { gap: GAP_MAP2[gap] } : void 0;
|
|
9973
|
-
return /* @__PURE__ */ (0,
|
|
10077
|
+
return /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { className: "lib-xplat-full-screen", style, children });
|
|
9974
10078
|
};
|
|
9975
10079
|
FullScreen.displayName = "FullScreen";
|
|
9976
10080
|
var FullScreen_default = FullScreen;
|
|
9977
10081
|
|
|
9978
10082
|
// src/layout/Grid/Item/Item.tsx
|
|
9979
|
-
var
|
|
10083
|
+
var import_jsx_runtime351 = require("react/jsx-runtime");
|
|
9980
10084
|
var calculateSpans = (column) => {
|
|
9981
10085
|
const spans = {};
|
|
9982
10086
|
let inherited = column.default;
|
|
@@ -9993,35 +10097,35 @@ var GridItem = ({ column, children, className }) => {
|
|
|
9993
10097
|
Object.entries(spans).forEach(([key, value]) => {
|
|
9994
10098
|
style[`--column-${key}`] = value;
|
|
9995
10099
|
});
|
|
9996
|
-
return /* @__PURE__ */ (0,
|
|
10100
|
+
return /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { className: clsx_default("lib-xplat-grid-item", className), style, children });
|
|
9997
10101
|
};
|
|
9998
10102
|
GridItem.displayName = "GridItem";
|
|
9999
10103
|
var Item_default = GridItem;
|
|
10000
10104
|
|
|
10001
10105
|
// src/layout/Header/Header.tsx
|
|
10002
|
-
var
|
|
10106
|
+
var import_jsx_runtime352 = require("react/jsx-runtime");
|
|
10003
10107
|
var Header = ({
|
|
10004
10108
|
logo,
|
|
10005
10109
|
centerContent,
|
|
10006
10110
|
rightContent
|
|
10007
10111
|
}) => {
|
|
10008
|
-
return /* @__PURE__ */ (0,
|
|
10009
|
-
/* @__PURE__ */ (0,
|
|
10010
|
-
/* @__PURE__ */ (0,
|
|
10011
|
-
/* @__PURE__ */ (0,
|
|
10112
|
+
return /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: "lib-xplat-layout-header", children: [
|
|
10113
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { children: logo }),
|
|
10114
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { children: centerContent }),
|
|
10115
|
+
/* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { children: rightContent })
|
|
10012
10116
|
] });
|
|
10013
10117
|
};
|
|
10014
10118
|
Header.displayName = "Header";
|
|
10015
10119
|
var Header_default = Header;
|
|
10016
10120
|
|
|
10017
10121
|
// src/layout/Layout/Layout.tsx
|
|
10018
|
-
var
|
|
10122
|
+
var import_jsx_runtime353 = require("react/jsx-runtime");
|
|
10019
10123
|
var Layout = (props) => {
|
|
10020
10124
|
const { header, sideBar, children } = props;
|
|
10021
|
-
return /* @__PURE__ */ (0,
|
|
10022
|
-
sideBar && /* @__PURE__ */ (0,
|
|
10023
|
-
/* @__PURE__ */ (0,
|
|
10024
|
-
header && /* @__PURE__ */ (0,
|
|
10125
|
+
return /* @__PURE__ */ (0, import_jsx_runtime353.jsx)("div", { className: "lib-xplat-layout", children: /* @__PURE__ */ (0, import_jsx_runtime353.jsxs)("div", { className: "lib-xplat-layout-content-wrapper", children: [
|
|
10126
|
+
sideBar && /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(import_jsx_runtime353.Fragment, { children: sideBar }),
|
|
10127
|
+
/* @__PURE__ */ (0, import_jsx_runtime353.jsxs)("div", { className: "lib-xplat-layout-content", children: [
|
|
10128
|
+
header && /* @__PURE__ */ (0, import_jsx_runtime353.jsx)("div", { className: "lib-xplat-layout-conent-header", children: header }),
|
|
10025
10129
|
children
|
|
10026
10130
|
] })
|
|
10027
10131
|
] }) });
|
|
@@ -10030,31 +10134,31 @@ Layout.displayName = "Layout";
|
|
|
10030
10134
|
var Layout_default = Layout;
|
|
10031
10135
|
|
|
10032
10136
|
// src/layout/SideBar/SideBar.tsx
|
|
10033
|
-
var
|
|
10137
|
+
var import_react43 = __toESM(require("react"), 1);
|
|
10034
10138
|
|
|
10035
10139
|
// src/layout/SideBar/SideBarContext.tsx
|
|
10036
|
-
var
|
|
10037
|
-
var SideBarContext =
|
|
10140
|
+
var import_react42 = __toESM(require("react"), 1);
|
|
10141
|
+
var SideBarContext = import_react42.default.createContext(null);
|
|
10038
10142
|
var useSideBarContext = () => {
|
|
10039
|
-
const ctx =
|
|
10143
|
+
const ctx = import_react42.default.useContext(SideBarContext);
|
|
10040
10144
|
if (!ctx) throw new Error("Error");
|
|
10041
10145
|
return ctx;
|
|
10042
10146
|
};
|
|
10043
10147
|
var SideBarContext_default = SideBarContext;
|
|
10044
10148
|
|
|
10045
10149
|
// src/layout/SideBar/SideBar.tsx
|
|
10046
|
-
var
|
|
10150
|
+
var import_jsx_runtime354 = require("react/jsx-runtime");
|
|
10047
10151
|
var SideBar = (props) => {
|
|
10048
10152
|
const { children, className } = props;
|
|
10049
|
-
const [isOpen, setIsOpen] =
|
|
10153
|
+
const [isOpen, setIsOpen] = import_react43.default.useState(true);
|
|
10050
10154
|
const handleSwitchSideBar = () => {
|
|
10051
10155
|
setIsOpen((prev) => !prev);
|
|
10052
10156
|
};
|
|
10053
|
-
return /* @__PURE__ */ (0,
|
|
10157
|
+
return /* @__PURE__ */ (0, import_jsx_runtime354.jsx)(
|
|
10054
10158
|
SideBarContext_default.Provider,
|
|
10055
10159
|
{
|
|
10056
10160
|
value: { isSidebarOpen: isOpen, handleSwitchSideBar },
|
|
10057
|
-
children: /* @__PURE__ */ (0,
|
|
10161
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime354.jsx)(
|
|
10058
10162
|
"div",
|
|
10059
10163
|
{
|
|
10060
10164
|
className: clsx_default(
|
|
@@ -10134,6 +10238,7 @@ var SideBar_default = SideBar;
|
|
|
10134
10238
|
CardTab,
|
|
10135
10239
|
CastIcon,
|
|
10136
10240
|
Chart,
|
|
10241
|
+
ChatInput,
|
|
10137
10242
|
CheckBox,
|
|
10138
10243
|
CheckCircleIcon,
|
|
10139
10244
|
CheckIcon,
|