@x-plat/design-system 0.5.21 → 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/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/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 +655 -573
- package/dist/components/index.css +251 -46
- package/dist/components/index.d.cts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +653 -572
- package/dist/index.cjs +664 -597
- package/dist/index.css +251 -46
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +662 -596
- 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,10 +7079,10 @@ 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 maskRef =
|
|
7082
|
+
const maskRef = import_react7.default.useRef(null);
|
|
6961
7083
|
const maskR = r2 + 10;
|
|
6962
7084
|
const maskCircumference = 2 * Math.PI * maskR;
|
|
6963
|
-
|
|
7085
|
+
import_react7.default.useEffect(() => {
|
|
6964
7086
|
if (!animate || !maskRef.current) return;
|
|
6965
7087
|
const el = maskRef.current;
|
|
6966
7088
|
el.style.strokeDasharray = `${maskCircumference}`;
|
|
@@ -6970,7 +7092,7 @@ var PieDonutChart = import_react5.default.memo(
|
|
|
6970
7092
|
el.style.strokeDashoffset = "0";
|
|
6971
7093
|
});
|
|
6972
7094
|
}, [animate, maskCircumference]);
|
|
6973
|
-
const sliceData =
|
|
7095
|
+
const sliceData = import_react7.default.useMemo(() => {
|
|
6974
7096
|
let angle0 = -Math.PI / 2;
|
|
6975
7097
|
let cumulativeAngle = 0;
|
|
6976
7098
|
return values.map((v, i) => {
|
|
@@ -7004,8 +7126,8 @@ var PieDonutChart = import_react5.default.memo(
|
|
|
7004
7126
|
});
|
|
7005
7127
|
}, [values, total, cx, cy, r2, innerR, labels]);
|
|
7006
7128
|
const maskId = `pie-mask-${isDoughnut ? "d" : "p"}`;
|
|
7007
|
-
return /* @__PURE__ */ (0,
|
|
7008
|
-
animate && /* @__PURE__ */ (0,
|
|
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)(
|
|
7009
7131
|
"circle",
|
|
7010
7132
|
{
|
|
7011
7133
|
ref: maskRef,
|
|
@@ -7018,7 +7140,7 @@ var PieDonutChart = import_react5.default.memo(
|
|
|
7018
7140
|
transform: `rotate(-90 ${cx} ${cy})`
|
|
7019
7141
|
}
|
|
7020
7142
|
) }) }),
|
|
7021
|
-
/* @__PURE__ */ (0,
|
|
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)(
|
|
7022
7144
|
"path",
|
|
7023
7145
|
{
|
|
7024
7146
|
d: s.d,
|
|
@@ -7029,7 +7151,7 @@ var PieDonutChart = import_react5.default.memo(
|
|
|
7029
7151
|
onMouseLeave: onLeave
|
|
7030
7152
|
}
|
|
7031
7153
|
) }, i)) }),
|
|
7032
|
-
sliceData.map((s, i) => s.angle > 0.2 && /* @__PURE__ */ (0,
|
|
7154
|
+
sliceData.map((s, i) => s.angle > 0.2 && /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
7033
7155
|
"text",
|
|
7034
7156
|
{
|
|
7035
7157
|
x: s.lx,
|
|
@@ -7047,9 +7169,9 @@ var PieDonutChart = import_react5.default.memo(
|
|
|
7047
7169
|
);
|
|
7048
7170
|
PieDonutChart.displayName = "PieDonutChart";
|
|
7049
7171
|
var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
7050
|
-
const ref =
|
|
7051
|
-
const [adjustedX, setAdjustedX] =
|
|
7052
|
-
|
|
7172
|
+
const ref = import_react7.default.useRef(null);
|
|
7173
|
+
const [adjustedX, setAdjustedX] = import_react7.default.useState(x);
|
|
7174
|
+
import_react7.default.useEffect(() => {
|
|
7053
7175
|
const el = ref.current;
|
|
7054
7176
|
if (!el) return;
|
|
7055
7177
|
const w = el.offsetWidth;
|
|
@@ -7060,7 +7182,7 @@ var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
|
7060
7182
|
else if (x + half > containerWidth - margin) nx = containerWidth - half - margin;
|
|
7061
7183
|
setAdjustedX(nx);
|
|
7062
7184
|
}, [x, containerWidth]);
|
|
7063
|
-
return /* @__PURE__ */ (0,
|
|
7185
|
+
return /* @__PURE__ */ (0, import_jsx_runtime307.jsx)(
|
|
7064
7186
|
"div",
|
|
7065
7187
|
{
|
|
7066
7188
|
ref,
|
|
@@ -7070,22 +7192,22 @@ var TooltipBubble = ({ x, y, containerWidth, children }) => {
|
|
|
7070
7192
|
}
|
|
7071
7193
|
);
|
|
7072
7194
|
};
|
|
7073
|
-
var Chart =
|
|
7195
|
+
var Chart = import_react7.default.memo((props) => {
|
|
7074
7196
|
const { type, data, labels, tooltip: showTooltip = true } = props;
|
|
7075
7197
|
const { tooltip, show, hide, move, containerRef } = useChartTooltip(showTooltip);
|
|
7076
7198
|
const { width, height } = useChartSize(containerRef);
|
|
7077
|
-
const stableData =
|
|
7078
|
-
const stableLabels =
|
|
7079
|
-
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]);
|
|
7080
7202
|
const animate = useChartAnimation(containerRef, dataKey);
|
|
7081
7203
|
const ready = width > 0 && height > 0;
|
|
7082
|
-
return /* @__PURE__ */ (0,
|
|
7083
|
-
ready && type === "line" && /* @__PURE__ */ (0,
|
|
7084
|
-
ready && type === "curve" && /* @__PURE__ */ (0,
|
|
7085
|
-
ready && type === "bar" && /* @__PURE__ */ (0,
|
|
7086
|
-
ready && type === "pie" && /* @__PURE__ */ (0,
|
|
7087
|
-
ready && type === "doughnut" && /* @__PURE__ */ (0,
|
|
7088
|
-
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 })
|
|
7089
7211
|
] });
|
|
7090
7212
|
});
|
|
7091
7213
|
Chart.displayName = "Chart";
|
|
@@ -7111,7 +7233,7 @@ var import_tokens_core = require("@x-plat/tokens-core");
|
|
|
7111
7233
|
var import_tokens_core2 = require("@x-plat/tokens-core");
|
|
7112
7234
|
|
|
7113
7235
|
// src/components/CheckBox/CheckBox.tsx
|
|
7114
|
-
var
|
|
7236
|
+
var import_jsx_runtime308 = require("react/jsx-runtime");
|
|
7115
7237
|
var CheckBox = (props) => {
|
|
7116
7238
|
const {
|
|
7117
7239
|
checked,
|
|
@@ -7129,8 +7251,8 @@ var CheckBox = (props) => {
|
|
|
7129
7251
|
const checkedClasses = `checked`;
|
|
7130
7252
|
const disabledClasses = "disabled";
|
|
7131
7253
|
const boxClasses = disabled ? disabledClasses : checked ? checkedClasses : uncheckedClasses;
|
|
7132
|
-
return /* @__PURE__ */ (0,
|
|
7133
|
-
/* @__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)(
|
|
7134
7256
|
"input",
|
|
7135
7257
|
{
|
|
7136
7258
|
type: "checkbox",
|
|
@@ -7140,44 +7262,44 @@ var CheckBox = (props) => {
|
|
|
7140
7262
|
...rest
|
|
7141
7263
|
}
|
|
7142
7264
|
),
|
|
7143
|
-
/* @__PURE__ */ (0,
|
|
7144
|
-
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 })
|
|
7145
7267
|
] });
|
|
7146
7268
|
};
|
|
7147
7269
|
CheckBox.displayName = "CheckBox";
|
|
7148
7270
|
var CheckBox_default = CheckBox;
|
|
7149
7271
|
|
|
7150
7272
|
// src/components/Chip/Chip.tsx
|
|
7151
|
-
var
|
|
7273
|
+
var import_jsx_runtime309 = require("react/jsx-runtime");
|
|
7152
7274
|
var Chip = (props) => {
|
|
7153
7275
|
const {
|
|
7154
7276
|
children,
|
|
7155
7277
|
type = "primary",
|
|
7156
7278
|
size = "md"
|
|
7157
7279
|
} = props;
|
|
7158
|
-
return /* @__PURE__ */ (0,
|
|
7280
|
+
return /* @__PURE__ */ (0, import_jsx_runtime309.jsx)("div", { className: clsx_default("lib-xplat-chip", type, size), children });
|
|
7159
7281
|
};
|
|
7160
7282
|
Chip.displayName = "Chip";
|
|
7161
7283
|
var Chip_default = Chip;
|
|
7162
7284
|
|
|
7163
7285
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
7164
|
-
var
|
|
7286
|
+
var import_react14 = __toESM(require("react"), 1);
|
|
7165
7287
|
|
|
7166
7288
|
// src/components/Input/Input.tsx
|
|
7167
|
-
var
|
|
7289
|
+
var import_react8 = __toESM(require("react"), 1);
|
|
7168
7290
|
|
|
7169
7291
|
// src/components/Input/InputValidations.tsx
|
|
7170
|
-
var
|
|
7292
|
+
var import_jsx_runtime310 = require("react/jsx-runtime");
|
|
7171
7293
|
var InputValidations = (props) => {
|
|
7172
7294
|
const { message, status = "default" } = props;
|
|
7173
|
-
return /* @__PURE__ */ (0,
|
|
7174
|
-
/* @__PURE__ */ (0,
|
|
7175
|
-
status === "default" && /* @__PURE__ */ (0,
|
|
7176
|
-
status === "success" && /* @__PURE__ */ (0,
|
|
7177
|
-
status === "warning" && /* @__PURE__ */ (0,
|
|
7178
|
-
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, {})
|
|
7179
7301
|
] }),
|
|
7180
|
-
/* @__PURE__ */ (0,
|
|
7302
|
+
/* @__PURE__ */ (0, import_jsx_runtime310.jsx)("div", { className: "message", children: message })
|
|
7181
7303
|
] });
|
|
7182
7304
|
};
|
|
7183
7305
|
InputValidations.displayName = "InputValidations";
|
|
@@ -7218,8 +7340,8 @@ var handleTelBackspace = (prevValue, currValue) => {
|
|
|
7218
7340
|
};
|
|
7219
7341
|
|
|
7220
7342
|
// src/components/Input/Input.tsx
|
|
7221
|
-
var
|
|
7222
|
-
var
|
|
7343
|
+
var import_jsx_runtime311 = require("react/jsx-runtime");
|
|
7344
|
+
var import_react9 = require("react");
|
|
7223
7345
|
var formatValue = (type, value) => {
|
|
7224
7346
|
if (value === null || value === void 0) return "";
|
|
7225
7347
|
const strValue = Array.isArray(value) ? String(value[0] ?? "") : String(value);
|
|
@@ -7267,7 +7389,7 @@ var parseValue = (type, value) => {
|
|
|
7267
7389
|
return value;
|
|
7268
7390
|
}
|
|
7269
7391
|
};
|
|
7270
|
-
var Input =
|
|
7392
|
+
var Input = import_react8.default.forwardRef((props, ref) => {
|
|
7271
7393
|
const {
|
|
7272
7394
|
value,
|
|
7273
7395
|
onChange,
|
|
@@ -7293,13 +7415,13 @@ var Input = import_react6.default.forwardRef((props, ref) => {
|
|
|
7293
7415
|
onChange(event);
|
|
7294
7416
|
}
|
|
7295
7417
|
};
|
|
7296
|
-
return /* @__PURE__ */ (0,
|
|
7297
|
-
/* @__PURE__ */ (0,
|
|
7418
|
+
return /* @__PURE__ */ (0, import_jsx_runtime311.jsxs)("div", { className: "lib-xplat-input-wrap", children: [
|
|
7419
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsxs)(
|
|
7298
7420
|
"div",
|
|
7299
7421
|
{
|
|
7300
7422
|
className: clsx_default("lib-xplat-input", size, disabled ? "disabled" : void 0),
|
|
7301
7423
|
children: [
|
|
7302
|
-
/* @__PURE__ */ (0,
|
|
7424
|
+
/* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
|
|
7303
7425
|
"input",
|
|
7304
7426
|
{
|
|
7305
7427
|
...inputProps,
|
|
@@ -7310,11 +7432,11 @@ var Input = import_react6.default.forwardRef((props, ref) => {
|
|
|
7310
7432
|
onChange: handleChange
|
|
7311
7433
|
}
|
|
7312
7434
|
),
|
|
7313
|
-
suffix && /* @__PURE__ */ (0,
|
|
7435
|
+
suffix && /* @__PURE__ */ (0, import_jsx_runtime311.jsx)("div", { className: "suffix", children: suffix })
|
|
7314
7436
|
]
|
|
7315
7437
|
}
|
|
7316
7438
|
),
|
|
7317
|
-
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)(
|
|
7318
7440
|
InputValidations_default,
|
|
7319
7441
|
{
|
|
7320
7442
|
...validation,
|
|
@@ -7327,20 +7449,20 @@ Input.displayName = "Input";
|
|
|
7327
7449
|
var Input_default = Input;
|
|
7328
7450
|
|
|
7329
7451
|
// src/components/Input/PasswordInput/PasswordInput.tsx
|
|
7330
|
-
var
|
|
7331
|
-
var
|
|
7332
|
-
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(
|
|
7333
7455
|
(props, ref) => {
|
|
7334
7456
|
const { reg: _reg, ...inputProps } = props;
|
|
7335
|
-
const [isView, setIsView] =
|
|
7457
|
+
const [isView, setIsView] = import_react10.default.useState(false);
|
|
7336
7458
|
const handleChangeView = () => {
|
|
7337
7459
|
setIsView((prev) => !prev);
|
|
7338
7460
|
};
|
|
7339
|
-
return /* @__PURE__ */ (0,
|
|
7461
|
+
return /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
|
|
7340
7462
|
Input_default,
|
|
7341
7463
|
{
|
|
7342
7464
|
...inputProps,
|
|
7343
|
-
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, {}) }),
|
|
7344
7466
|
type: isView ? "text" : "password",
|
|
7345
7467
|
ref
|
|
7346
7468
|
}
|
|
@@ -7351,17 +7473,17 @@ PasswordInput.displayName = "PasswordInput";
|
|
|
7351
7473
|
var PasswordInput_default = PasswordInput;
|
|
7352
7474
|
|
|
7353
7475
|
// src/components/Modal/Modal.tsx
|
|
7354
|
-
var
|
|
7476
|
+
var import_react12 = __toESM(require("react"), 1);
|
|
7355
7477
|
var import_react_dom2 = require("react-dom");
|
|
7356
7478
|
|
|
7357
7479
|
// src/tokens/hooks/Portal.tsx
|
|
7358
|
-
var
|
|
7480
|
+
var import_react11 = __toESM(require("react"), 1);
|
|
7359
7481
|
var import_react_dom = __toESM(require("react-dom"), 1);
|
|
7360
|
-
var
|
|
7361
|
-
var PortalContainerContext =
|
|
7362
|
-
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 });
|
|
7363
7485
|
var Portal = ({ children }) => {
|
|
7364
|
-
const contextContainer =
|
|
7486
|
+
const contextContainer = import_react11.default.useContext(PortalContainerContext);
|
|
7365
7487
|
if (typeof document === "undefined") return null;
|
|
7366
7488
|
const container = contextContainer ?? document.body;
|
|
7367
7489
|
return import_react_dom.default.createPortal(children, container);
|
|
@@ -7370,14 +7492,14 @@ Portal.displayName = "Portal";
|
|
|
7370
7492
|
var Portal_default = Portal;
|
|
7371
7493
|
|
|
7372
7494
|
// src/components/Modal/Modal.tsx
|
|
7373
|
-
var
|
|
7495
|
+
var import_jsx_runtime314 = require("react/jsx-runtime");
|
|
7374
7496
|
var ANIMATION_DURATION_MS = 200;
|
|
7375
7497
|
var Modal = (props) => {
|
|
7376
7498
|
const { isOpen, onClose, children } = props;
|
|
7377
|
-
const [mounted, setMounted] =
|
|
7378
|
-
const [visible, setVisible] =
|
|
7379
|
-
const boxRef =
|
|
7380
|
-
|
|
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(() => {
|
|
7381
7503
|
if (isOpen) {
|
|
7382
7504
|
setMounted(true);
|
|
7383
7505
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7391,12 +7513,12 @@ var Modal = (props) => {
|
|
|
7391
7513
|
if (!mounted) return null;
|
|
7392
7514
|
const stateClass = visible ? "enter" : "exit";
|
|
7393
7515
|
return (0, import_react_dom2.createPortal)(
|
|
7394
|
-
/* @__PURE__ */ (0,
|
|
7516
|
+
/* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
7395
7517
|
"div",
|
|
7396
7518
|
{
|
|
7397
7519
|
className: clsx_default("lib-xplat-modal", "dim", stateClass),
|
|
7398
7520
|
onClick: onClose,
|
|
7399
|
-
children: /* @__PURE__ */ (0,
|
|
7521
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
|
|
7400
7522
|
"div",
|
|
7401
7523
|
{
|
|
7402
7524
|
ref: boxRef,
|
|
@@ -7404,7 +7526,7 @@ var Modal = (props) => {
|
|
|
7404
7526
|
role: "dialog",
|
|
7405
7527
|
"aria-modal": "true",
|
|
7406
7528
|
onClick: (e) => e.stopPropagation(),
|
|
7407
|
-
children: /* @__PURE__ */ (0,
|
|
7529
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(PortalProvider, { container: boxRef.current, children })
|
|
7408
7530
|
}
|
|
7409
7531
|
)
|
|
7410
7532
|
}
|
|
@@ -7416,9 +7538,9 @@ Modal.displayName = "Modal";
|
|
|
7416
7538
|
var Modal_default = Modal;
|
|
7417
7539
|
|
|
7418
7540
|
// src/components/DatePicker/SingleDatePicker/index.tsx
|
|
7419
|
-
var
|
|
7420
|
-
var
|
|
7421
|
-
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(
|
|
7422
7544
|
({
|
|
7423
7545
|
day,
|
|
7424
7546
|
disabled,
|
|
@@ -7428,7 +7550,7 @@ var DayCell2 = import_react11.default.memo(
|
|
|
7428
7550
|
isEnd,
|
|
7429
7551
|
inRange,
|
|
7430
7552
|
onSelect
|
|
7431
|
-
}) => /* @__PURE__ */ (0,
|
|
7553
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
7432
7554
|
"button",
|
|
7433
7555
|
{
|
|
7434
7556
|
type: "button",
|
|
@@ -7470,26 +7592,26 @@ var SingleDatePicker = (props) => {
|
|
|
7470
7592
|
initialYear,
|
|
7471
7593
|
initialMonth
|
|
7472
7594
|
);
|
|
7473
|
-
const [pickerMode, setPickerMode] =
|
|
7474
|
-
const [yearRangeStart, setYearRangeStart] =
|
|
7595
|
+
const [pickerMode, setPickerMode] = import_react13.default.useState("days");
|
|
7596
|
+
const [yearRangeStart, setYearRangeStart] = import_react13.default.useState(
|
|
7475
7597
|
Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
|
|
7476
7598
|
);
|
|
7477
|
-
const minTime =
|
|
7599
|
+
const minTime = import_react13.default.useMemo(
|
|
7478
7600
|
() => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
|
|
7479
7601
|
[minDate]
|
|
7480
7602
|
);
|
|
7481
|
-
const maxTime =
|
|
7603
|
+
const maxTime = import_react13.default.useMemo(
|
|
7482
7604
|
() => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
|
|
7483
7605
|
[maxDate]
|
|
7484
7606
|
);
|
|
7485
|
-
const highlightSet =
|
|
7607
|
+
const highlightSet = import_react13.default.useMemo(() => {
|
|
7486
7608
|
const set = /* @__PURE__ */ new Set();
|
|
7487
7609
|
for (const h of highlightDates) {
|
|
7488
7610
|
set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
|
|
7489
7611
|
}
|
|
7490
7612
|
return set;
|
|
7491
7613
|
}, [highlightDates]);
|
|
7492
|
-
const handleSelect =
|
|
7614
|
+
const handleSelect = import_react13.default.useCallback(
|
|
7493
7615
|
(date) => {
|
|
7494
7616
|
onChange?.(date);
|
|
7495
7617
|
},
|
|
@@ -7526,20 +7648,20 @@ var SingleDatePicker = (props) => {
|
|
|
7526
7648
|
const monthLabels = MONTH_LABELS[locale];
|
|
7527
7649
|
const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
|
|
7528
7650
|
const hasRange = rangeStart != null && rangeEnd != null;
|
|
7529
|
-
return /* @__PURE__ */ (0,
|
|
7651
|
+
return /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)(
|
|
7530
7652
|
"div",
|
|
7531
7653
|
{
|
|
7532
7654
|
className: clsx_default("lib-xplat-datepicker", "single"),
|
|
7533
7655
|
children: [
|
|
7534
|
-
/* @__PURE__ */ (0,
|
|
7535
|
-
/* @__PURE__ */ (0,
|
|
7536
|
-
/* @__PURE__ */ (0,
|
|
7537
|
-
/* @__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, {}) })
|
|
7538
7660
|
] }),
|
|
7539
|
-
/* @__PURE__ */ (0,
|
|
7540
|
-
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) => {
|
|
7541
7663
|
const y = yearRangeStart + i;
|
|
7542
|
-
return /* @__PURE__ */ (0,
|
|
7664
|
+
return /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
7543
7665
|
"button",
|
|
7544
7666
|
{
|
|
7545
7667
|
type: "button",
|
|
@@ -7550,7 +7672,7 @@ var SingleDatePicker = (props) => {
|
|
|
7550
7672
|
y
|
|
7551
7673
|
);
|
|
7552
7674
|
}) }),
|
|
7553
|
-
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)(
|
|
7554
7676
|
"button",
|
|
7555
7677
|
{
|
|
7556
7678
|
type: "button",
|
|
@@ -7560,8 +7682,8 @@ var SingleDatePicker = (props) => {
|
|
|
7560
7682
|
},
|
|
7561
7683
|
i
|
|
7562
7684
|
)) }),
|
|
7563
|
-
pickerMode === "days" && /* @__PURE__ */ (0,
|
|
7564
|
-
/* @__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)(
|
|
7565
7687
|
"div",
|
|
7566
7688
|
{
|
|
7567
7689
|
className: clsx_default(
|
|
@@ -7573,7 +7695,7 @@ var SingleDatePicker = (props) => {
|
|
|
7573
7695
|
},
|
|
7574
7696
|
label
|
|
7575
7697
|
)) }),
|
|
7576
|
-
/* @__PURE__ */ (0,
|
|
7698
|
+
/* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
|
|
7577
7699
|
const t = day.date.getTime();
|
|
7578
7700
|
const disabled = t < minTime || t > maxTime;
|
|
7579
7701
|
const selected = value ? isSameDay(day.date, value) : false;
|
|
@@ -7583,7 +7705,7 @@ var SingleDatePicker = (props) => {
|
|
|
7583
7705
|
const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
|
|
7584
7706
|
const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
|
|
7585
7707
|
const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
|
|
7586
|
-
return /* @__PURE__ */ (0,
|
|
7708
|
+
return /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
|
|
7587
7709
|
DayCell2,
|
|
7588
7710
|
{
|
|
7589
7711
|
day,
|
|
@@ -7608,7 +7730,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
|
|
|
7608
7730
|
var SingleDatePicker_default = SingleDatePicker;
|
|
7609
7731
|
|
|
7610
7732
|
// src/components/DatePicker/InputDatePicker/index.tsx
|
|
7611
|
-
var
|
|
7733
|
+
var import_jsx_runtime316 = require("react/jsx-runtime");
|
|
7612
7734
|
var formatDate = (date) => {
|
|
7613
7735
|
if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
|
|
7614
7736
|
const y = date.getFullYear();
|
|
@@ -7618,8 +7740,8 @@ var formatDate = (date) => {
|
|
|
7618
7740
|
};
|
|
7619
7741
|
var InputDatePicker = (props) => {
|
|
7620
7742
|
const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
|
|
7621
|
-
const [isOpen, setIsOpen] =
|
|
7622
|
-
const [tempDate, setTempDate] =
|
|
7743
|
+
const [isOpen, setIsOpen] = import_react14.default.useState(false);
|
|
7744
|
+
const [tempDate, setTempDate] = import_react14.default.useState(value ?? /* @__PURE__ */ new Date());
|
|
7623
7745
|
const handleOpen = () => {
|
|
7624
7746
|
if (disabled) return;
|
|
7625
7747
|
setTempDate(value ?? /* @__PURE__ */ new Date());
|
|
@@ -7635,19 +7757,19 @@ var InputDatePicker = (props) => {
|
|
|
7635
7757
|
const handleClose = () => {
|
|
7636
7758
|
setIsOpen(false);
|
|
7637
7759
|
};
|
|
7638
|
-
return /* @__PURE__ */ (0,
|
|
7639
|
-
/* @__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)(
|
|
7640
7762
|
Input_default,
|
|
7641
7763
|
{
|
|
7642
7764
|
value: formatDate(value),
|
|
7643
7765
|
placeholder,
|
|
7644
|
-
suffix: /* @__PURE__ */ (0,
|
|
7766
|
+
suffix: /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(CalenderIcon_default, {}),
|
|
7645
7767
|
disabled,
|
|
7646
7768
|
readOnly: true
|
|
7647
7769
|
}
|
|
7648
7770
|
) }),
|
|
7649
|
-
/* @__PURE__ */ (0,
|
|
7650
|
-
/* @__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)(
|
|
7651
7773
|
SingleDatePicker_default,
|
|
7652
7774
|
{
|
|
7653
7775
|
value: tempDate,
|
|
@@ -7657,9 +7779,9 @@ var InputDatePicker = (props) => {
|
|
|
7657
7779
|
locale
|
|
7658
7780
|
}
|
|
7659
7781
|
) }),
|
|
7660
|
-
/* @__PURE__ */ (0,
|
|
7661
|
-
/* @__PURE__ */ (0,
|
|
7662
|
-
/* @__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" })
|
|
7663
7785
|
] })
|
|
7664
7786
|
] }) })
|
|
7665
7787
|
] });
|
|
@@ -7668,20 +7790,20 @@ InputDatePicker.displayName = "InputDatePicker";
|
|
|
7668
7790
|
var InputDatePicker_default = InputDatePicker;
|
|
7669
7791
|
|
|
7670
7792
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7671
|
-
var
|
|
7793
|
+
var import_react18 = __toESM(require("react"), 1);
|
|
7672
7794
|
|
|
7673
7795
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7674
|
-
var
|
|
7796
|
+
var import_react17 = __toESM(require("react"), 1);
|
|
7675
7797
|
|
|
7676
7798
|
// src/components/Tab/Tab.tsx
|
|
7677
|
-
var
|
|
7799
|
+
var import_react16 = __toESM(require("react"), 1);
|
|
7678
7800
|
|
|
7679
7801
|
// src/components/Tab/TabItem.tsx
|
|
7680
|
-
var
|
|
7681
|
-
var
|
|
7682
|
-
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) => {
|
|
7683
7805
|
const { isActive, title, onClick } = props;
|
|
7684
|
-
return /* @__PURE__ */ (0,
|
|
7806
|
+
return /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
|
|
7685
7807
|
"div",
|
|
7686
7808
|
{
|
|
7687
7809
|
ref,
|
|
@@ -7695,25 +7817,25 @@ TabItem.displayName = "TabItem";
|
|
|
7695
7817
|
var TabItem_default = TabItem;
|
|
7696
7818
|
|
|
7697
7819
|
// src/components/Tab/Tab.tsx
|
|
7698
|
-
var
|
|
7820
|
+
var import_jsx_runtime318 = require("react/jsx-runtime");
|
|
7699
7821
|
var Tab = (props) => {
|
|
7700
7822
|
const { activeIndex, onChange, tabs, type, size = "md" } = props;
|
|
7701
|
-
const [underlineStyle, setUnderlineStyle] =
|
|
7823
|
+
const [underlineStyle, setUnderlineStyle] = import_react16.default.useState({
|
|
7702
7824
|
left: 0,
|
|
7703
7825
|
width: 0
|
|
7704
7826
|
});
|
|
7705
|
-
const itemRefs =
|
|
7827
|
+
const itemRefs = import_react16.default.useRef([]);
|
|
7706
7828
|
const handleChangeActiveTab = (tabItem, tabIdx) => {
|
|
7707
7829
|
onChange(tabItem, tabIdx);
|
|
7708
7830
|
};
|
|
7709
|
-
|
|
7831
|
+
import_react16.default.useEffect(() => {
|
|
7710
7832
|
const el = itemRefs.current[activeIndex];
|
|
7711
7833
|
if (el) {
|
|
7712
7834
|
setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
|
|
7713
7835
|
}
|
|
7714
7836
|
}, [activeIndex, tabs.length]);
|
|
7715
|
-
return /* @__PURE__ */ (0,
|
|
7716
|
-
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)(
|
|
7717
7839
|
TabItem_default,
|
|
7718
7840
|
{
|
|
7719
7841
|
onClick: () => handleChangeActiveTab(tab, idx),
|
|
@@ -7725,7 +7847,7 @@ var Tab = (props) => {
|
|
|
7725
7847
|
},
|
|
7726
7848
|
`${tab.value}_${idx}`
|
|
7727
7849
|
)),
|
|
7728
|
-
type === "toggle" && /* @__PURE__ */ (0,
|
|
7850
|
+
type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
|
|
7729
7851
|
"div",
|
|
7730
7852
|
{
|
|
7731
7853
|
className: "tab-toggle-underline",
|
|
@@ -7741,7 +7863,7 @@ Tab.displayName = "Tab";
|
|
|
7741
7863
|
var Tab_default = Tab;
|
|
7742
7864
|
|
|
7743
7865
|
// src/components/DatePicker/RangePicker/index.tsx
|
|
7744
|
-
var
|
|
7866
|
+
var import_jsx_runtime319 = require("react/jsx-runtime");
|
|
7745
7867
|
var RangePicker = (props) => {
|
|
7746
7868
|
const {
|
|
7747
7869
|
startDate,
|
|
@@ -7751,7 +7873,7 @@ var RangePicker = (props) => {
|
|
|
7751
7873
|
maxDate,
|
|
7752
7874
|
locale = "ko"
|
|
7753
7875
|
} = props;
|
|
7754
|
-
const [activeTab, setActiveTab] =
|
|
7876
|
+
const [activeTab, setActiveTab] = import_react17.default.useState("start");
|
|
7755
7877
|
const handleStartChange = (date) => {
|
|
7756
7878
|
if (!date) return;
|
|
7757
7879
|
const newStart = date > endDate ? endDate : date;
|
|
@@ -7764,8 +7886,8 @@ var RangePicker = (props) => {
|
|
|
7764
7886
|
};
|
|
7765
7887
|
const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
|
|
7766
7888
|
const endMinDate = minDate && startDate > minDate ? startDate : startDate;
|
|
7767
|
-
return /* @__PURE__ */ (0,
|
|
7768
|
-
/* @__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)(
|
|
7769
7891
|
Tab_default,
|
|
7770
7892
|
{
|
|
7771
7893
|
activeIndex: activeTab === "start" ? 0 : 1,
|
|
@@ -7778,8 +7900,8 @@ var RangePicker = (props) => {
|
|
|
7778
7900
|
size: "sm"
|
|
7779
7901
|
}
|
|
7780
7902
|
) }),
|
|
7781
|
-
/* @__PURE__ */ (0,
|
|
7782
|
-
/* @__PURE__ */ (0,
|
|
7903
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "datepicker-range-panels", children: [
|
|
7904
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7783
7905
|
SingleDatePicker_default,
|
|
7784
7906
|
{
|
|
7785
7907
|
value: startDate,
|
|
@@ -7791,7 +7913,7 @@ var RangePicker = (props) => {
|
|
|
7791
7913
|
locale
|
|
7792
7914
|
}
|
|
7793
7915
|
),
|
|
7794
|
-
/* @__PURE__ */ (0,
|
|
7916
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7795
7917
|
SingleDatePicker_default,
|
|
7796
7918
|
{
|
|
7797
7919
|
value: endDate,
|
|
@@ -7804,7 +7926,7 @@ var RangePicker = (props) => {
|
|
|
7804
7926
|
}
|
|
7805
7927
|
)
|
|
7806
7928
|
] }),
|
|
7807
|
-
/* @__PURE__ */ (0,
|
|
7929
|
+
/* @__PURE__ */ (0, import_jsx_runtime319.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7808
7930
|
SingleDatePicker_default,
|
|
7809
7931
|
{
|
|
7810
7932
|
value: startDate,
|
|
@@ -7815,7 +7937,7 @@ var RangePicker = (props) => {
|
|
|
7815
7937
|
rangeEnd: endDate,
|
|
7816
7938
|
locale
|
|
7817
7939
|
}
|
|
7818
|
-
) : /* @__PURE__ */ (0,
|
|
7940
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
|
|
7819
7941
|
SingleDatePicker_default,
|
|
7820
7942
|
{
|
|
7821
7943
|
value: endDate,
|
|
@@ -7833,10 +7955,10 @@ RangePicker.displayName = "RangePicker";
|
|
|
7833
7955
|
var RangePicker_default = RangePicker;
|
|
7834
7956
|
|
|
7835
7957
|
// src/components/DatePicker/PopupPicker/index.tsx
|
|
7836
|
-
var
|
|
7958
|
+
var import_jsx_runtime320 = require("react/jsx-runtime");
|
|
7837
7959
|
var PopupPicker = (props) => {
|
|
7838
7960
|
const { component, type, locale } = props;
|
|
7839
|
-
const [isOpen, setIsOpen] =
|
|
7961
|
+
const [isOpen, setIsOpen] = import_react18.default.useState(false);
|
|
7840
7962
|
const handleClick = () => setIsOpen(true);
|
|
7841
7963
|
const handleClose = () => setIsOpen(false);
|
|
7842
7964
|
const handleSingleChange = (date) => {
|
|
@@ -7844,11 +7966,11 @@ var PopupPicker = (props) => {
|
|
|
7844
7966
|
props.onChange?.(date);
|
|
7845
7967
|
handleClose();
|
|
7846
7968
|
};
|
|
7847
|
-
return /* @__PURE__ */ (0,
|
|
7848
|
-
|
|
7849
|
-
/* @__PURE__ */ (0,
|
|
7850
|
-
/* @__PURE__ */ (0,
|
|
7851
|
-
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)(
|
|
7852
7974
|
SingleDatePicker_default,
|
|
7853
7975
|
{
|
|
7854
7976
|
value: props.value,
|
|
@@ -7858,7 +7980,7 @@ var PopupPicker = (props) => {
|
|
|
7858
7980
|
locale
|
|
7859
7981
|
}
|
|
7860
7982
|
),
|
|
7861
|
-
type === "range" && /* @__PURE__ */ (0,
|
|
7983
|
+
type === "range" && /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
7862
7984
|
RangePicker_default,
|
|
7863
7985
|
{
|
|
7864
7986
|
startDate: props.startDate,
|
|
@@ -7870,8 +7992,8 @@ var PopupPicker = (props) => {
|
|
|
7870
7992
|
}
|
|
7871
7993
|
)
|
|
7872
7994
|
] }),
|
|
7873
|
-
/* @__PURE__ */ (0,
|
|
7874
|
-
/* @__PURE__ */ (0,
|
|
7995
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "popup-datepicker-footer", children: [
|
|
7996
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
|
|
7875
7997
|
Button_default,
|
|
7876
7998
|
{
|
|
7877
7999
|
type: "secondary",
|
|
@@ -7879,7 +8001,7 @@ var PopupPicker = (props) => {
|
|
|
7879
8001
|
children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
|
|
7880
8002
|
}
|
|
7881
8003
|
),
|
|
7882
|
-
/* @__PURE__ */ (0,
|
|
8004
|
+
/* @__PURE__ */ (0, import_jsx_runtime320.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
|
|
7883
8005
|
] })
|
|
7884
8006
|
] }) })
|
|
7885
8007
|
] });
|
|
@@ -7888,10 +8010,10 @@ PopupPicker.displayName = "PopupPicker";
|
|
|
7888
8010
|
var PopupPicker_default = PopupPicker;
|
|
7889
8011
|
|
|
7890
8012
|
// src/components/Divider/Divider.tsx
|
|
7891
|
-
var
|
|
8013
|
+
var import_jsx_runtime321 = require("react/jsx-runtime");
|
|
7892
8014
|
var Divider = (props) => {
|
|
7893
8015
|
const { orientation = "horizontal" } = props;
|
|
7894
|
-
return /* @__PURE__ */ (0,
|
|
8016
|
+
return /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
|
|
7895
8017
|
"div",
|
|
7896
8018
|
{
|
|
7897
8019
|
className: clsx_default("lib-xplat-divider", orientation),
|
|
@@ -7904,15 +8026,15 @@ Divider.displayName = "Divider";
|
|
|
7904
8026
|
var Divider_default = Divider;
|
|
7905
8027
|
|
|
7906
8028
|
// src/components/Drawer/Drawer.tsx
|
|
7907
|
-
var
|
|
8029
|
+
var import_react19 = __toESM(require("react"), 1);
|
|
7908
8030
|
var import_react_dom3 = require("react-dom");
|
|
7909
|
-
var
|
|
8031
|
+
var import_jsx_runtime322 = require("react/jsx-runtime");
|
|
7910
8032
|
var ANIMATION_DURATION_MS2 = 250;
|
|
7911
8033
|
var Drawer = (props) => {
|
|
7912
8034
|
const { isOpen, onClose, placement = "right", size = "md", title, children } = props;
|
|
7913
|
-
const [mounted, setMounted] =
|
|
7914
|
-
const [visible, setVisible] =
|
|
7915
|
-
|
|
8035
|
+
const [mounted, setMounted] = import_react19.default.useState(false);
|
|
8036
|
+
const [visible, setVisible] = import_react19.default.useState(false);
|
|
8037
|
+
import_react19.default.useEffect(() => {
|
|
7916
8038
|
if (isOpen) {
|
|
7917
8039
|
setMounted(true);
|
|
7918
8040
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -7926,12 +8048,12 @@ var Drawer = (props) => {
|
|
|
7926
8048
|
if (!mounted) return null;
|
|
7927
8049
|
const stateClass = visible ? "enter" : "exit";
|
|
7928
8050
|
return (0, import_react_dom3.createPortal)(
|
|
7929
|
-
/* @__PURE__ */ (0,
|
|
8051
|
+
/* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
|
|
7930
8052
|
"div",
|
|
7931
8053
|
{
|
|
7932
8054
|
className: clsx_default("lib-xplat-drawer-overlay", stateClass),
|
|
7933
8055
|
onClick: onClose,
|
|
7934
|
-
children: /* @__PURE__ */ (0,
|
|
8056
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)(
|
|
7935
8057
|
"div",
|
|
7936
8058
|
{
|
|
7937
8059
|
className: clsx_default("lib-xplat-drawer", placement, size, stateClass),
|
|
@@ -7939,11 +8061,11 @@ var Drawer = (props) => {
|
|
|
7939
8061
|
"aria-modal": "true",
|
|
7940
8062
|
onClick: (e) => e.stopPropagation(),
|
|
7941
8063
|
children: [
|
|
7942
|
-
title && /* @__PURE__ */ (0,
|
|
7943
|
-
/* @__PURE__ */ (0,
|
|
7944
|
-
/* @__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" })
|
|
7945
8067
|
] }),
|
|
7946
|
-
/* @__PURE__ */ (0,
|
|
8068
|
+
/* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "drawer-body", children })
|
|
7947
8069
|
]
|
|
7948
8070
|
}
|
|
7949
8071
|
)
|
|
@@ -7956,16 +8078,16 @@ Drawer.displayName = "Drawer";
|
|
|
7956
8078
|
var Drawer_default = Drawer;
|
|
7957
8079
|
|
|
7958
8080
|
// src/components/Dropdown/Dropdown.tsx
|
|
7959
|
-
var
|
|
8081
|
+
var import_react22 = __toESM(require("react"), 1);
|
|
7960
8082
|
|
|
7961
8083
|
// src/tokens/hooks/useAutoPosition.ts
|
|
7962
|
-
var
|
|
8084
|
+
var import_react20 = __toESM(require("react"), 1);
|
|
7963
8085
|
var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
7964
|
-
const [position, setPosition] =
|
|
8086
|
+
const [position, setPosition] = import_react20.default.useState({
|
|
7965
8087
|
position: {},
|
|
7966
8088
|
direction: "bottom"
|
|
7967
8089
|
});
|
|
7968
|
-
const calculatePosition =
|
|
8090
|
+
const calculatePosition = import_react20.default.useCallback(() => {
|
|
7969
8091
|
if (!triggerRef.current || !popRef.current) return;
|
|
7970
8092
|
const triggerRect = triggerRef.current.getBoundingClientRect();
|
|
7971
8093
|
const popW = popRef.current.offsetWidth;
|
|
@@ -7992,13 +8114,13 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
7992
8114
|
direction
|
|
7993
8115
|
});
|
|
7994
8116
|
}, [triggerRef, popRef]);
|
|
7995
|
-
|
|
8117
|
+
import_react20.default.useLayoutEffect(() => {
|
|
7996
8118
|
if (!enabled) return;
|
|
7997
8119
|
calculatePosition();
|
|
7998
8120
|
const raf = requestAnimationFrame(calculatePosition);
|
|
7999
8121
|
return () => cancelAnimationFrame(raf);
|
|
8000
8122
|
}, [calculatePosition, enabled]);
|
|
8001
|
-
|
|
8123
|
+
import_react20.default.useEffect(() => {
|
|
8002
8124
|
if (!enabled || !popRef.current) return;
|
|
8003
8125
|
const observer = new ResizeObserver(() => {
|
|
8004
8126
|
calculatePosition();
|
|
@@ -8006,7 +8128,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
8006
8128
|
observer.observe(popRef.current);
|
|
8007
8129
|
return () => observer.disconnect();
|
|
8008
8130
|
}, [calculatePosition, enabled, popRef]);
|
|
8009
|
-
|
|
8131
|
+
import_react20.default.useEffect(() => {
|
|
8010
8132
|
if (!enabled) return;
|
|
8011
8133
|
window.addEventListener("resize", calculatePosition);
|
|
8012
8134
|
window.addEventListener("scroll", calculatePosition, true);
|
|
@@ -8020,9 +8142,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
|
|
|
8020
8142
|
var useAutoPosition_default = useAutoPosition;
|
|
8021
8143
|
|
|
8022
8144
|
// src/tokens/hooks/useClickOutside.ts
|
|
8023
|
-
var
|
|
8145
|
+
var import_react21 = __toESM(require("react"), 1);
|
|
8024
8146
|
var useClickOutside = (refs, handler, enabled = true) => {
|
|
8025
|
-
|
|
8147
|
+
import_react21.default.useEffect(() => {
|
|
8026
8148
|
if (!enabled) return;
|
|
8027
8149
|
const refArray = Array.isArray(refs) ? refs : [refs];
|
|
8028
8150
|
const listener = (event) => {
|
|
@@ -8045,17 +8167,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
|
|
|
8045
8167
|
var useClickOutside_default = useClickOutside;
|
|
8046
8168
|
|
|
8047
8169
|
// src/components/Dropdown/Dropdown.tsx
|
|
8048
|
-
var
|
|
8170
|
+
var import_jsx_runtime323 = require("react/jsx-runtime");
|
|
8049
8171
|
var Dropdown = (props) => {
|
|
8050
8172
|
const { items, children } = props;
|
|
8051
|
-
const [isOpen, setIsOpen] =
|
|
8052
|
-
const [mounted, setMounted] =
|
|
8053
|
-
const [visible, setVisible] =
|
|
8054
|
-
const triggerRef =
|
|
8055
|
-
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);
|
|
8056
8178
|
const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
|
|
8057
8179
|
useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
|
|
8058
|
-
|
|
8180
|
+
import_react22.default.useEffect(() => {
|
|
8059
8181
|
if (isOpen) {
|
|
8060
8182
|
setMounted(true);
|
|
8061
8183
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -8070,8 +8192,8 @@ var Dropdown = (props) => {
|
|
|
8070
8192
|
item.onClick?.();
|
|
8071
8193
|
setIsOpen(false);
|
|
8072
8194
|
};
|
|
8073
|
-
return /* @__PURE__ */ (0,
|
|
8074
|
-
/* @__PURE__ */ (0,
|
|
8195
|
+
return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)("div", { className: "lib-xplat-dropdown", children: [
|
|
8196
|
+
/* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
8075
8197
|
"div",
|
|
8076
8198
|
{
|
|
8077
8199
|
ref: triggerRef,
|
|
@@ -8080,14 +8202,14 @@ var Dropdown = (props) => {
|
|
|
8080
8202
|
children
|
|
8081
8203
|
}
|
|
8082
8204
|
),
|
|
8083
|
-
mounted && /* @__PURE__ */ (0,
|
|
8205
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
8084
8206
|
"div",
|
|
8085
8207
|
{
|
|
8086
8208
|
ref: menuRef,
|
|
8087
8209
|
className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
|
|
8088
8210
|
style: { top: position.top, left: position.left },
|
|
8089
8211
|
role: "menu",
|
|
8090
|
-
children: items.map((item) => /* @__PURE__ */ (0,
|
|
8212
|
+
children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
|
|
8091
8213
|
"button",
|
|
8092
8214
|
{
|
|
8093
8215
|
className: clsx_default("dropdown-item", {
|
|
@@ -8109,23 +8231,23 @@ Dropdown.displayName = "Dropdown";
|
|
|
8109
8231
|
var Dropdown_default = Dropdown;
|
|
8110
8232
|
|
|
8111
8233
|
// src/components/EmptyState/EmptyState.tsx
|
|
8112
|
-
var
|
|
8234
|
+
var import_jsx_runtime324 = require("react/jsx-runtime");
|
|
8113
8235
|
var EmptyState = (props) => {
|
|
8114
8236
|
const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
|
|
8115
|
-
return /* @__PURE__ */ (0,
|
|
8116
|
-
icon && /* @__PURE__ */ (0,
|
|
8117
|
-
!icon && /* @__PURE__ */ (0,
|
|
8118
|
-
/* @__PURE__ */ (0,
|
|
8119
|
-
description && /* @__PURE__ */ (0,
|
|
8120
|
-
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 })
|
|
8121
8243
|
] });
|
|
8122
8244
|
};
|
|
8123
8245
|
EmptyState.displayName = "EmptyState";
|
|
8124
8246
|
var EmptyState_default = EmptyState;
|
|
8125
8247
|
|
|
8126
8248
|
// src/components/FileUpload/FileUpload.tsx
|
|
8127
|
-
var
|
|
8128
|
-
var
|
|
8249
|
+
var import_react23 = __toESM(require("react"), 1);
|
|
8250
|
+
var import_jsx_runtime325 = require("react/jsx-runtime");
|
|
8129
8251
|
var FileUpload = (props) => {
|
|
8130
8252
|
const {
|
|
8131
8253
|
accept,
|
|
@@ -8135,8 +8257,8 @@ var FileUpload = (props) => {
|
|
|
8135
8257
|
label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
|
|
8136
8258
|
description
|
|
8137
8259
|
} = props;
|
|
8138
|
-
const [isDragOver, setIsDragOver] =
|
|
8139
|
-
const inputRef =
|
|
8260
|
+
const [isDragOver, setIsDragOver] = import_react23.default.useState(false);
|
|
8261
|
+
const inputRef = import_react23.default.useRef(null);
|
|
8140
8262
|
const handleFiles = (fileList) => {
|
|
8141
8263
|
let files = Array.from(fileList);
|
|
8142
8264
|
if (maxSize) {
|
|
@@ -8166,7 +8288,7 @@ var FileUpload = (props) => {
|
|
|
8166
8288
|
handleFiles(e.target.files);
|
|
8167
8289
|
}
|
|
8168
8290
|
};
|
|
8169
|
-
return /* @__PURE__ */ (0,
|
|
8291
|
+
return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)(
|
|
8170
8292
|
"div",
|
|
8171
8293
|
{
|
|
8172
8294
|
className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
|
|
@@ -8175,7 +8297,7 @@ var FileUpload = (props) => {
|
|
|
8175
8297
|
onDragLeave: handleDragLeave,
|
|
8176
8298
|
onClick: () => inputRef.current?.click(),
|
|
8177
8299
|
children: [
|
|
8178
|
-
/* @__PURE__ */ (0,
|
|
8300
|
+
/* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
|
|
8179
8301
|
"input",
|
|
8180
8302
|
{
|
|
8181
8303
|
ref: inputRef,
|
|
@@ -8185,9 +8307,9 @@ var FileUpload = (props) => {
|
|
|
8185
8307
|
onChange: handleChange
|
|
8186
8308
|
}
|
|
8187
8309
|
),
|
|
8188
|
-
/* @__PURE__ */ (0,
|
|
8189
|
-
/* @__PURE__ */ (0,
|
|
8190
|
-
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 })
|
|
8191
8313
|
]
|
|
8192
8314
|
}
|
|
8193
8315
|
);
|
|
@@ -8196,10 +8318,10 @@ FileUpload.displayName = "FileUpload";
|
|
|
8196
8318
|
var FileUpload_default = FileUpload;
|
|
8197
8319
|
|
|
8198
8320
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
8199
|
-
var
|
|
8321
|
+
var import_react25 = __toESM(require("react"), 1);
|
|
8200
8322
|
|
|
8201
8323
|
// src/components/HtmlTypeWriter/utils.ts
|
|
8202
|
-
var
|
|
8324
|
+
var import_react24 = __toESM(require("react"), 1);
|
|
8203
8325
|
var voidTags = /* @__PURE__ */ new Set([
|
|
8204
8326
|
"br",
|
|
8205
8327
|
"img",
|
|
@@ -8267,41 +8389,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
|
|
|
8267
8389
|
props[attr.name] = attr.value;
|
|
8268
8390
|
});
|
|
8269
8391
|
if (voidTags.has(tag)) {
|
|
8270
|
-
return
|
|
8392
|
+
return import_react24.default.createElement(tag, props);
|
|
8271
8393
|
}
|
|
8272
8394
|
const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
|
|
8273
|
-
return
|
|
8395
|
+
return import_react24.default.createElement(tag, props, ...children);
|
|
8274
8396
|
};
|
|
8275
8397
|
var htmlToReactProgressive = (root, typedLen, rangeMap) => {
|
|
8276
8398
|
const nodes = Array.from(root.childNodes).map((child, idx) => {
|
|
8277
8399
|
const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
|
|
8278
|
-
return node == null ? null :
|
|
8400
|
+
return node == null ? null : import_react24.default.createElement(import_react24.default.Fragment, { key: idx }, node);
|
|
8279
8401
|
}).filter(Boolean);
|
|
8280
8402
|
return nodes.length === 0 ? null : nodes;
|
|
8281
8403
|
};
|
|
8282
8404
|
|
|
8283
8405
|
// src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
|
|
8284
|
-
var
|
|
8406
|
+
var import_jsx_runtime326 = require("react/jsx-runtime");
|
|
8285
8407
|
var HtmlTypeWriter = ({
|
|
8286
8408
|
html,
|
|
8287
8409
|
duration = 20,
|
|
8288
8410
|
onDone,
|
|
8289
8411
|
onChange
|
|
8290
8412
|
}) => {
|
|
8291
|
-
const [typedLen, setTypedLen] =
|
|
8292
|
-
const doneCalledRef =
|
|
8293
|
-
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(() => {
|
|
8294
8416
|
if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
|
|
8295
8417
|
const decoded = decodeHtmlEntities(html);
|
|
8296
8418
|
const doc2 = new DOMParser().parseFromString(decoded, "text/html");
|
|
8297
8419
|
const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
|
|
8298
8420
|
return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
|
|
8299
8421
|
}, [html]);
|
|
8300
|
-
|
|
8422
|
+
import_react25.default.useEffect(() => {
|
|
8301
8423
|
setTypedLen(0);
|
|
8302
8424
|
doneCalledRef.current = false;
|
|
8303
8425
|
}, [html]);
|
|
8304
|
-
|
|
8426
|
+
import_react25.default.useEffect(() => {
|
|
8305
8427
|
if (!totalLength) return;
|
|
8306
8428
|
if (typedLen >= totalLength) return;
|
|
8307
8429
|
const timer = window.setInterval(() => {
|
|
@@ -8309,33 +8431,33 @@ var HtmlTypeWriter = ({
|
|
|
8309
8431
|
}, duration);
|
|
8310
8432
|
return () => window.clearInterval(timer);
|
|
8311
8433
|
}, [typedLen, totalLength, duration]);
|
|
8312
|
-
|
|
8434
|
+
import_react25.default.useEffect(() => {
|
|
8313
8435
|
if (typedLen > 0 && typedLen < totalLength) {
|
|
8314
8436
|
onChange?.();
|
|
8315
8437
|
}
|
|
8316
8438
|
}, [typedLen, totalLength, onChange]);
|
|
8317
|
-
|
|
8439
|
+
import_react25.default.useEffect(() => {
|
|
8318
8440
|
if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
|
|
8319
8441
|
doneCalledRef.current = true;
|
|
8320
8442
|
onDone?.();
|
|
8321
8443
|
}
|
|
8322
8444
|
}, [typedLen, totalLength, onDone]);
|
|
8323
|
-
const parsed =
|
|
8445
|
+
const parsed = import_react25.default.useMemo(
|
|
8324
8446
|
() => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
|
|
8325
8447
|
[doc, typedLen, rangeMap]
|
|
8326
8448
|
);
|
|
8327
|
-
return /* @__PURE__ */ (0,
|
|
8449
|
+
return /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
|
|
8328
8450
|
};
|
|
8329
8451
|
HtmlTypeWriter.displayName = "HtmlTypeWriter";
|
|
8330
8452
|
var HtmlTypeWriter_default = HtmlTypeWriter;
|
|
8331
8453
|
|
|
8332
8454
|
// src/components/ImageSelector/ImageSelector.tsx
|
|
8333
|
-
var
|
|
8334
|
-
var
|
|
8455
|
+
var import_react26 = __toESM(require("react"), 1);
|
|
8456
|
+
var import_jsx_runtime327 = require("react/jsx-runtime");
|
|
8335
8457
|
var ImageSelector = (props) => {
|
|
8336
8458
|
const { value, label, onChange } = props;
|
|
8337
|
-
const [previewUrl, setPreviewUrl] =
|
|
8338
|
-
|
|
8459
|
+
const [previewUrl, setPreviewUrl] = import_react26.default.useState();
|
|
8460
|
+
import_react26.default.useEffect(() => {
|
|
8339
8461
|
if (!value) {
|
|
8340
8462
|
setPreviewUrl(void 0);
|
|
8341
8463
|
return;
|
|
@@ -8344,7 +8466,7 @@ var ImageSelector = (props) => {
|
|
|
8344
8466
|
setPreviewUrl(url);
|
|
8345
8467
|
return () => URL.revokeObjectURL(url);
|
|
8346
8468
|
}, [value]);
|
|
8347
|
-
const inputRef =
|
|
8469
|
+
const inputRef = import_react26.default.useRef(null);
|
|
8348
8470
|
const handleFileChange = (e) => {
|
|
8349
8471
|
const selectedFile = e.target.files?.[0];
|
|
8350
8472
|
if (selectedFile) {
|
|
@@ -8357,8 +8479,8 @@ var ImageSelector = (props) => {
|
|
|
8357
8479
|
const handleOpenFileDialog = () => {
|
|
8358
8480
|
inputRef.current?.click();
|
|
8359
8481
|
};
|
|
8360
|
-
return /* @__PURE__ */ (0,
|
|
8361
|
-
/* @__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)(
|
|
8362
8484
|
"input",
|
|
8363
8485
|
{
|
|
8364
8486
|
type: "file",
|
|
@@ -8368,13 +8490,13 @@ var ImageSelector = (props) => {
|
|
|
8368
8490
|
ref: inputRef
|
|
8369
8491
|
}
|
|
8370
8492
|
),
|
|
8371
|
-
value && /* @__PURE__ */ (0,
|
|
8372
|
-
/* @__PURE__ */ (0,
|
|
8373
|
-
/* @__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, {}) })
|
|
8374
8496
|
] }),
|
|
8375
|
-
/* @__PURE__ */ (0,
|
|
8376
|
-
/* @__PURE__ */ (0,
|
|
8377
|
-
/* @__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" })
|
|
8378
8500
|
] }) })
|
|
8379
8501
|
] });
|
|
8380
8502
|
};
|
|
@@ -8382,7 +8504,7 @@ ImageSelector.displayName = "ImageSelector";
|
|
|
8382
8504
|
var ImageSelector_default = ImageSelector;
|
|
8383
8505
|
|
|
8384
8506
|
// src/components/Pagination/Pagination.tsx
|
|
8385
|
-
var
|
|
8507
|
+
var import_jsx_runtime328 = require("react/jsx-runtime");
|
|
8386
8508
|
var getPageRange = (current, totalPages, siblingCount) => {
|
|
8387
8509
|
const totalNumbers = siblingCount * 2 + 5;
|
|
8388
8510
|
if (totalPages <= totalNumbers) {
|
|
@@ -8425,19 +8547,19 @@ var Pagination = (props) => {
|
|
|
8425
8547
|
onChange?.(page);
|
|
8426
8548
|
}
|
|
8427
8549
|
};
|
|
8428
|
-
return /* @__PURE__ */ (0,
|
|
8429
|
-
/* @__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)(
|
|
8430
8552
|
"button",
|
|
8431
8553
|
{
|
|
8432
8554
|
className: "page-btn prev",
|
|
8433
8555
|
disabled: current <= 1,
|
|
8434
8556
|
onClick: () => handleClick(current - 1),
|
|
8435
8557
|
"aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
8436
|
-
children: /* @__PURE__ */ (0,
|
|
8558
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(ChevronLeftIcon_default, {})
|
|
8437
8559
|
}
|
|
8438
8560
|
),
|
|
8439
8561
|
pages.map(
|
|
8440
|
-
(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)(
|
|
8441
8563
|
"button",
|
|
8442
8564
|
{
|
|
8443
8565
|
className: clsx_default("page-btn", { active: page === current }),
|
|
@@ -8448,14 +8570,14 @@ var Pagination = (props) => {
|
|
|
8448
8570
|
page
|
|
8449
8571
|
)
|
|
8450
8572
|
),
|
|
8451
|
-
/* @__PURE__ */ (0,
|
|
8573
|
+
/* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
|
|
8452
8574
|
"button",
|
|
8453
8575
|
{
|
|
8454
8576
|
className: "page-btn next",
|
|
8455
8577
|
disabled: current >= totalPages,
|
|
8456
8578
|
onClick: () => handleClick(current + 1),
|
|
8457
8579
|
"aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
8458
|
-
children: /* @__PURE__ */ (0,
|
|
8580
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(ChevronRightIcon_default, {})
|
|
8459
8581
|
}
|
|
8460
8582
|
)
|
|
8461
8583
|
] });
|
|
@@ -8464,17 +8586,17 @@ Pagination.displayName = "Pagination";
|
|
|
8464
8586
|
var Pagination_default = Pagination;
|
|
8465
8587
|
|
|
8466
8588
|
// src/components/PopOver/PopOver.tsx
|
|
8467
|
-
var
|
|
8468
|
-
var
|
|
8589
|
+
var import_react27 = __toESM(require("react"), 1);
|
|
8590
|
+
var import_jsx_runtime329 = require("react/jsx-runtime");
|
|
8469
8591
|
var PopOver = (props) => {
|
|
8470
8592
|
const { children, isOpen, onClose, PopOverEl } = props;
|
|
8471
|
-
const popRef =
|
|
8472
|
-
const triggerRef =
|
|
8473
|
-
const [localOpen, setLocalOpen] =
|
|
8474
|
-
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);
|
|
8475
8597
|
useClickOutside_default([popRef, triggerRef], onClose, isOpen);
|
|
8476
8598
|
const position = useAutoPosition_default(triggerRef, popRef, localOpen);
|
|
8477
|
-
|
|
8599
|
+
import_react27.default.useEffect(() => {
|
|
8478
8600
|
if (isOpen) {
|
|
8479
8601
|
setLocalOpen(isOpen);
|
|
8480
8602
|
setTimeout(() => {
|
|
@@ -8487,7 +8609,7 @@ var PopOver = (props) => {
|
|
|
8487
8609
|
}, 200);
|
|
8488
8610
|
}
|
|
8489
8611
|
}, [isOpen]);
|
|
8490
|
-
return /* @__PURE__ */ (0,
|
|
8612
|
+
return /* @__PURE__ */ (0, import_jsx_runtime329.jsxs)(
|
|
8491
8613
|
"div",
|
|
8492
8614
|
{
|
|
8493
8615
|
className: "lib-xplat-pop-over",
|
|
@@ -8497,7 +8619,7 @@ var PopOver = (props) => {
|
|
|
8497
8619
|
},
|
|
8498
8620
|
children: [
|
|
8499
8621
|
children,
|
|
8500
|
-
localOpen && /* @__PURE__ */ (0,
|
|
8622
|
+
localOpen && /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
|
|
8501
8623
|
"div",
|
|
8502
8624
|
{
|
|
8503
8625
|
className: clsx_default(
|
|
@@ -8520,7 +8642,7 @@ PopOver.displayName = "PopOver";
|
|
|
8520
8642
|
var PopOver_default = PopOver;
|
|
8521
8643
|
|
|
8522
8644
|
// src/components/Progress/Progress.tsx
|
|
8523
|
-
var
|
|
8645
|
+
var import_jsx_runtime330 = require("react/jsx-runtime");
|
|
8524
8646
|
var Progress = (props) => {
|
|
8525
8647
|
const {
|
|
8526
8648
|
value,
|
|
@@ -8530,8 +8652,8 @@ var Progress = (props) => {
|
|
|
8530
8652
|
showLabel = false
|
|
8531
8653
|
} = props;
|
|
8532
8654
|
const percentage = Math.min(100, Math.max(0, value / max * 100));
|
|
8533
|
-
return /* @__PURE__ */ (0,
|
|
8534
|
-
/* @__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)(
|
|
8535
8657
|
"div",
|
|
8536
8658
|
{
|
|
8537
8659
|
className: "track",
|
|
@@ -8539,7 +8661,7 @@ var Progress = (props) => {
|
|
|
8539
8661
|
"aria-valuenow": value,
|
|
8540
8662
|
"aria-valuemin": 0,
|
|
8541
8663
|
"aria-valuemax": max,
|
|
8542
|
-
children: /* @__PURE__ */ (0,
|
|
8664
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(
|
|
8543
8665
|
"div",
|
|
8544
8666
|
{
|
|
8545
8667
|
className: "bar",
|
|
@@ -8548,7 +8670,7 @@ var Progress = (props) => {
|
|
|
8548
8670
|
)
|
|
8549
8671
|
}
|
|
8550
8672
|
),
|
|
8551
|
-
showLabel && /* @__PURE__ */ (0,
|
|
8673
|
+
showLabel && /* @__PURE__ */ (0, import_jsx_runtime330.jsxs)("span", { className: "label", children: [
|
|
8552
8674
|
Math.round(percentage),
|
|
8553
8675
|
"%"
|
|
8554
8676
|
] })
|
|
@@ -8558,17 +8680,17 @@ Progress.displayName = "Progress";
|
|
|
8558
8680
|
var Progress_default = Progress;
|
|
8559
8681
|
|
|
8560
8682
|
// src/components/Radio/RadioGroupContext.tsx
|
|
8561
|
-
var
|
|
8562
|
-
var RadioGroupContext =
|
|
8683
|
+
var import_react28 = __toESM(require("react"), 1);
|
|
8684
|
+
var RadioGroupContext = import_react28.default.createContext(
|
|
8563
8685
|
null
|
|
8564
8686
|
);
|
|
8565
8687
|
var useRadioGroupContext = () => {
|
|
8566
|
-
return
|
|
8688
|
+
return import_react28.default.useContext(RadioGroupContext);
|
|
8567
8689
|
};
|
|
8568
8690
|
var RadioGroupContext_default = RadioGroupContext;
|
|
8569
8691
|
|
|
8570
8692
|
// src/components/Radio/Radio.tsx
|
|
8571
|
-
var
|
|
8693
|
+
var import_jsx_runtime331 = require("react/jsx-runtime");
|
|
8572
8694
|
var Radio = (props) => {
|
|
8573
8695
|
const {
|
|
8574
8696
|
label,
|
|
@@ -8586,7 +8708,7 @@ var Radio = (props) => {
|
|
|
8586
8708
|
value,
|
|
8587
8709
|
onChange: rest.onChange
|
|
8588
8710
|
};
|
|
8589
|
-
return /* @__PURE__ */ (0,
|
|
8711
|
+
return /* @__PURE__ */ (0, import_jsx_runtime331.jsxs)(
|
|
8590
8712
|
"label",
|
|
8591
8713
|
{
|
|
8592
8714
|
className: clsx_default(
|
|
@@ -8596,18 +8718,18 @@ var Radio = (props) => {
|
|
|
8596
8718
|
localChecked ? "checked" : void 0
|
|
8597
8719
|
),
|
|
8598
8720
|
children: [
|
|
8599
|
-
/* @__PURE__ */ (0,
|
|
8600
|
-
/* @__PURE__ */ (0,
|
|
8721
|
+
/* @__PURE__ */ (0, import_jsx_runtime331.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
|
|
8722
|
+
/* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
|
|
8601
8723
|
"div",
|
|
8602
8724
|
{
|
|
8603
8725
|
className: clsx_default(
|
|
8604
8726
|
"circle",
|
|
8605
8727
|
localChecked ? "checked" : void 0
|
|
8606
8728
|
),
|
|
8607
|
-
children: localChecked && /* @__PURE__ */ (0,
|
|
8729
|
+
children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime331.jsx)("div", { className: "inner-circle" })
|
|
8608
8730
|
}
|
|
8609
8731
|
),
|
|
8610
|
-
label && /* @__PURE__ */ (0,
|
|
8732
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime331.jsx)("span", { children: label })
|
|
8611
8733
|
]
|
|
8612
8734
|
}
|
|
8613
8735
|
);
|
|
@@ -8616,28 +8738,28 @@ Radio.displayName = "Radio";
|
|
|
8616
8738
|
var Radio_default = Radio;
|
|
8617
8739
|
|
|
8618
8740
|
// src/components/Radio/RadioGroup.tsx
|
|
8619
|
-
var
|
|
8741
|
+
var import_jsx_runtime332 = require("react/jsx-runtime");
|
|
8620
8742
|
var RadioGroup = (props) => {
|
|
8621
8743
|
const { children, ...rest } = props;
|
|
8622
|
-
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 }) });
|
|
8623
8745
|
};
|
|
8624
8746
|
RadioGroup.displayName = "RadioGroup";
|
|
8625
8747
|
var RadioGroup_default = RadioGroup;
|
|
8626
8748
|
|
|
8627
8749
|
// src/components/Select/Select.tsx
|
|
8628
|
-
var
|
|
8750
|
+
var import_react31 = __toESM(require("react"), 1);
|
|
8629
8751
|
|
|
8630
8752
|
// src/components/Select/context.ts
|
|
8631
|
-
var
|
|
8632
|
-
var SelectContext =
|
|
8753
|
+
var import_react29 = __toESM(require("react"), 1);
|
|
8754
|
+
var SelectContext = import_react29.default.createContext(null);
|
|
8633
8755
|
var context_default = SelectContext;
|
|
8634
8756
|
|
|
8635
8757
|
// src/components/Select/SelectItem.tsx
|
|
8636
|
-
var
|
|
8637
|
-
var
|
|
8758
|
+
var import_react30 = __toESM(require("react"), 1);
|
|
8759
|
+
var import_jsx_runtime333 = require("react/jsx-runtime");
|
|
8638
8760
|
var SelectItem = (props) => {
|
|
8639
8761
|
const { children, value, onClick, disabled = false } = props;
|
|
8640
|
-
const ctx =
|
|
8762
|
+
const ctx = import_react30.default.useContext(context_default);
|
|
8641
8763
|
const handleClick = (e) => {
|
|
8642
8764
|
e.preventDefault();
|
|
8643
8765
|
e.stopPropagation();
|
|
@@ -8646,7 +8768,7 @@ var SelectItem = (props) => {
|
|
|
8646
8768
|
ctx?.close();
|
|
8647
8769
|
onClick?.();
|
|
8648
8770
|
};
|
|
8649
|
-
return /* @__PURE__ */ (0,
|
|
8771
|
+
return /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
|
|
8650
8772
|
"div",
|
|
8651
8773
|
{
|
|
8652
8774
|
className: clsx_default("select-item", disabled && "disabled"),
|
|
@@ -8667,7 +8789,7 @@ SelectItem.displayName = "Select.Item";
|
|
|
8667
8789
|
var SelectItem_default = SelectItem;
|
|
8668
8790
|
|
|
8669
8791
|
// src/components/Select/Select.tsx
|
|
8670
|
-
var
|
|
8792
|
+
var import_jsx_runtime334 = require("react/jsx-runtime");
|
|
8671
8793
|
var ANIMATION_DURATION_MS3 = 200;
|
|
8672
8794
|
var SelectRoot = (props) => {
|
|
8673
8795
|
const {
|
|
@@ -8679,26 +8801,26 @@ var SelectRoot = (props) => {
|
|
|
8679
8801
|
error = false,
|
|
8680
8802
|
size = "md"
|
|
8681
8803
|
} = props;
|
|
8682
|
-
const itemChildren =
|
|
8683
|
-
(child) =>
|
|
8804
|
+
const itemChildren = import_react31.default.Children.toArray(children).filter(
|
|
8805
|
+
(child) => import_react31.default.isValidElement(child) && child.type === SelectItem_default
|
|
8684
8806
|
);
|
|
8685
8807
|
const isControlled = valueProp !== void 0;
|
|
8686
|
-
const [isOpen, setOpen] =
|
|
8687
|
-
const [uncontrolledLabel, setUncontrolledLabel] =
|
|
8688
|
-
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(() => {
|
|
8689
8811
|
if (!isControlled) return null;
|
|
8690
8812
|
const match = itemChildren.find((child) => child.props.value === valueProp);
|
|
8691
8813
|
return match ? match.props.children : null;
|
|
8692
8814
|
}, [isControlled, valueProp, itemChildren]);
|
|
8693
8815
|
const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
|
|
8694
|
-
const triggerRef =
|
|
8695
|
-
const contentRef =
|
|
8696
|
-
const [mounted, setMounted] =
|
|
8697
|
-
const [visible, setVisible] =
|
|
8698
|
-
|
|
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(() => {
|
|
8699
8821
|
if (disabled && isOpen) setOpen(false);
|
|
8700
8822
|
}, [disabled, isOpen]);
|
|
8701
|
-
|
|
8823
|
+
import_react31.default.useEffect(() => {
|
|
8702
8824
|
if (isOpen) {
|
|
8703
8825
|
setMounted(true);
|
|
8704
8826
|
const t2 = setTimeout(() => setVisible(true), 1);
|
|
@@ -8708,12 +8830,12 @@ var SelectRoot = (props) => {
|
|
|
8708
8830
|
const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
|
|
8709
8831
|
return () => clearTimeout(t);
|
|
8710
8832
|
}, [isOpen]);
|
|
8711
|
-
const open =
|
|
8712
|
-
const close =
|
|
8713
|
-
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), []);
|
|
8714
8836
|
useClickOutside_default([contentRef, triggerRef], close, isOpen);
|
|
8715
8837
|
const position = useAutoPosition_default(triggerRef, contentRef, mounted);
|
|
8716
|
-
const setSelected =
|
|
8838
|
+
const setSelected = import_react31.default.useCallback(
|
|
8717
8839
|
(label, itemValue) => {
|
|
8718
8840
|
if (!isControlled) {
|
|
8719
8841
|
setUncontrolledLabel(label);
|
|
@@ -8722,7 +8844,7 @@ var SelectRoot = (props) => {
|
|
|
8722
8844
|
},
|
|
8723
8845
|
[isControlled, onChange]
|
|
8724
8846
|
);
|
|
8725
|
-
const ctxValue =
|
|
8847
|
+
const ctxValue = import_react31.default.useMemo(
|
|
8726
8848
|
() => ({
|
|
8727
8849
|
isOpen,
|
|
8728
8850
|
mounted,
|
|
@@ -8743,7 +8865,7 @@ var SelectRoot = (props) => {
|
|
|
8743
8865
|
if (disabled) return;
|
|
8744
8866
|
toggle();
|
|
8745
8867
|
};
|
|
8746
|
-
return /* @__PURE__ */ (0,
|
|
8868
|
+
return /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)(
|
|
8747
8869
|
"div",
|
|
8748
8870
|
{
|
|
8749
8871
|
className: clsx_default(
|
|
@@ -8754,7 +8876,7 @@ var SelectRoot = (props) => {
|
|
|
8754
8876
|
mounted && "is-open"
|
|
8755
8877
|
),
|
|
8756
8878
|
children: [
|
|
8757
|
-
/* @__PURE__ */ (0,
|
|
8879
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsxs)(
|
|
8758
8880
|
"div",
|
|
8759
8881
|
{
|
|
8760
8882
|
ref: triggerRef,
|
|
@@ -8778,7 +8900,7 @@ var SelectRoot = (props) => {
|
|
|
8778
8900
|
}
|
|
8779
8901
|
},
|
|
8780
8902
|
children: [
|
|
8781
|
-
/* @__PURE__ */ (0,
|
|
8903
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
8782
8904
|
"span",
|
|
8783
8905
|
{
|
|
8784
8906
|
className: clsx_default(
|
|
@@ -8788,25 +8910,25 @@ var SelectRoot = (props) => {
|
|
|
8788
8910
|
children: selectedLabel ?? placeholder
|
|
8789
8911
|
}
|
|
8790
8912
|
),
|
|
8791
|
-
/* @__PURE__ */ (0,
|
|
8913
|
+
/* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
8792
8914
|
"span",
|
|
8793
8915
|
{
|
|
8794
8916
|
className: clsx_default("select-trigger-icon", isOpen && "open"),
|
|
8795
8917
|
"aria-hidden": true,
|
|
8796
|
-
children: /* @__PURE__ */ (0,
|
|
8918
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(ChevronDownIcon_default, {})
|
|
8797
8919
|
}
|
|
8798
8920
|
)
|
|
8799
8921
|
]
|
|
8800
8922
|
}
|
|
8801
8923
|
),
|
|
8802
|
-
mounted && /* @__PURE__ */ (0,
|
|
8924
|
+
mounted && /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
|
|
8803
8925
|
"div",
|
|
8804
8926
|
{
|
|
8805
8927
|
className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
|
|
8806
8928
|
ref: contentRef,
|
|
8807
8929
|
style: { ...position.position, width: triggerRef.current?.offsetWidth },
|
|
8808
8930
|
role: "listbox",
|
|
8809
|
-
children: /* @__PURE__ */ (0,
|
|
8931
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(context_default.Provider, { value: ctxValue, children: itemChildren })
|
|
8810
8932
|
}
|
|
8811
8933
|
) })
|
|
8812
8934
|
]
|
|
@@ -8820,7 +8942,7 @@ var Select = Object.assign(SelectRoot, {
|
|
|
8820
8942
|
var Select_default = Select;
|
|
8821
8943
|
|
|
8822
8944
|
// src/components/Skeleton/Skeleton.tsx
|
|
8823
|
-
var
|
|
8945
|
+
var import_jsx_runtime335 = require("react/jsx-runtime");
|
|
8824
8946
|
var SIZE_MAP = {
|
|
8825
8947
|
xs: "var(--spacing-size-1)",
|
|
8826
8948
|
sm: "var(--spacing-size-2)",
|
|
@@ -8836,7 +8958,7 @@ var Skeleton = (props) => {
|
|
|
8836
8958
|
...width != null && { width: SIZE_MAP[width] },
|
|
8837
8959
|
...height != null && { height: SIZE_MAP[height] }
|
|
8838
8960
|
};
|
|
8839
|
-
return /* @__PURE__ */ (0,
|
|
8961
|
+
return /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
|
|
8840
8962
|
"div",
|
|
8841
8963
|
{
|
|
8842
8964
|
className: clsx_default("lib-xplat-skeleton", variant),
|
|
@@ -8849,20 +8971,20 @@ Skeleton.displayName = "Skeleton";
|
|
|
8849
8971
|
var Skeleton_default = Skeleton;
|
|
8850
8972
|
|
|
8851
8973
|
// src/components/Spinner/Spinner.tsx
|
|
8852
|
-
var
|
|
8974
|
+
var import_jsx_runtime336 = require("react/jsx-runtime");
|
|
8853
8975
|
var Spinner = (props) => {
|
|
8854
8976
|
const {
|
|
8855
8977
|
size = "md",
|
|
8856
8978
|
type = "brand"
|
|
8857
8979
|
} = props;
|
|
8858
|
-
return /* @__PURE__ */ (0,
|
|
8980
|
+
return /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
8859
8981
|
"div",
|
|
8860
8982
|
{
|
|
8861
8983
|
className: clsx_default("lib-xplat-spinner", size, type),
|
|
8862
8984
|
role: "status",
|
|
8863
8985
|
"aria-label": "\uB85C\uB529 \uC911",
|
|
8864
|
-
children: /* @__PURE__ */ (0,
|
|
8865
|
-
/* @__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)(
|
|
8866
8988
|
"circle",
|
|
8867
8989
|
{
|
|
8868
8990
|
className: "track",
|
|
@@ -8872,7 +8994,7 @@ var Spinner = (props) => {
|
|
|
8872
8994
|
strokeWidth: "3"
|
|
8873
8995
|
}
|
|
8874
8996
|
),
|
|
8875
|
-
/* @__PURE__ */ (0,
|
|
8997
|
+
/* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
|
|
8876
8998
|
"circle",
|
|
8877
8999
|
{
|
|
8878
9000
|
className: "indicator",
|
|
@@ -8891,20 +9013,20 @@ Spinner.displayName = "Spinner";
|
|
|
8891
9013
|
var Spinner_default = Spinner;
|
|
8892
9014
|
|
|
8893
9015
|
// src/components/Steps/Steps.tsx
|
|
8894
|
-
var
|
|
9016
|
+
var import_jsx_runtime337 = require("react/jsx-runtime");
|
|
8895
9017
|
var Steps = (props) => {
|
|
8896
9018
|
const {
|
|
8897
9019
|
items,
|
|
8898
9020
|
current,
|
|
8899
9021
|
type = "brand"
|
|
8900
9022
|
} = props;
|
|
8901
|
-
return /* @__PURE__ */ (0,
|
|
9023
|
+
return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
|
|
8902
9024
|
const status = index < current ? "completed" : index === current ? "active" : "pending";
|
|
8903
|
-
return /* @__PURE__ */ (0,
|
|
8904
|
-
/* @__PURE__ */ (0,
|
|
8905
|
-
/* @__PURE__ */ (0,
|
|
8906
|
-
/* @__PURE__ */ (0,
|
|
8907
|
-
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 })
|
|
8908
9030
|
] })
|
|
8909
9031
|
] }, index);
|
|
8910
9032
|
}) });
|
|
@@ -8913,8 +9035,8 @@ Steps.displayName = "Steps";
|
|
|
8913
9035
|
var Steps_default = Steps;
|
|
8914
9036
|
|
|
8915
9037
|
// src/components/Swiper/Swiper.tsx
|
|
8916
|
-
var
|
|
8917
|
-
var
|
|
9038
|
+
var import_react32 = __toESM(require("react"), 1);
|
|
9039
|
+
var import_jsx_runtime338 = require("react/jsx-runtime");
|
|
8918
9040
|
var Swiper = (props) => {
|
|
8919
9041
|
const {
|
|
8920
9042
|
auto = false,
|
|
@@ -8937,23 +9059,23 @@ var Swiper = (props) => {
|
|
|
8937
9059
|
const maxIndex = Math.max(0, totalSlides - viewItemCount);
|
|
8938
9060
|
const useLoop = loop && canSlide;
|
|
8939
9061
|
const cloneCount = useLoop ? totalSlides : 0;
|
|
8940
|
-
const extendedItems =
|
|
9062
|
+
const extendedItems = import_react32.default.useMemo(() => {
|
|
8941
9063
|
if (!useLoop) return items;
|
|
8942
9064
|
return [...items, ...items, ...items];
|
|
8943
9065
|
}, [items, useLoop]);
|
|
8944
9066
|
const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
|
|
8945
|
-
const [innerIndex, setInnerIndex] =
|
|
9067
|
+
const [innerIndex, setInnerIndex] = import_react32.default.useState(
|
|
8946
9068
|
useLoop ? cloneCount + initialIdx : initialIdx
|
|
8947
9069
|
);
|
|
8948
|
-
const [isDragging, setIsDragging] =
|
|
8949
|
-
const [dragOffset, setDragOffset] =
|
|
8950
|
-
const [animated, setAnimated] =
|
|
8951
|
-
const [containerWidth, setContainerWidth] =
|
|
8952
|
-
const containerRef =
|
|
8953
|
-
const startXRef =
|
|
8954
|
-
const startTimeRef =
|
|
8955
|
-
const autoplayTimerRef =
|
|
8956
|
-
|
|
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(() => {
|
|
8957
9079
|
const el = containerRef.current;
|
|
8958
9080
|
if (!el) return;
|
|
8959
9081
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -8972,7 +9094,7 @@ var Swiper = (props) => {
|
|
|
8972
9094
|
return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
|
|
8973
9095
|
};
|
|
8974
9096
|
const realIndex = getRealIndex(innerIndex);
|
|
8975
|
-
const moveToInner =
|
|
9097
|
+
const moveToInner = import_react32.default.useCallback(
|
|
8976
9098
|
(idx, withAnim = true) => {
|
|
8977
9099
|
if (!useLoop) {
|
|
8978
9100
|
setAnimated(withAnim);
|
|
@@ -9000,7 +9122,7 @@ var Swiper = (props) => {
|
|
|
9000
9122
|
},
|
|
9001
9123
|
[useLoop, cloneCount, totalSlides]
|
|
9002
9124
|
);
|
|
9003
|
-
const handleTransitionEnd =
|
|
9125
|
+
const handleTransitionEnd = import_react32.default.useCallback(() => {
|
|
9004
9126
|
if (!useLoop) return;
|
|
9005
9127
|
const real = getRealIndex(innerIndex);
|
|
9006
9128
|
const canonical = cloneCount + real;
|
|
@@ -9010,7 +9132,7 @@ var Swiper = (props) => {
|
|
|
9010
9132
|
}
|
|
9011
9133
|
onChange?.(Math.min(real, maxIndex));
|
|
9012
9134
|
}, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
|
|
9013
|
-
const slideTo =
|
|
9135
|
+
const slideTo = import_react32.default.useCallback(
|
|
9014
9136
|
(logicalIndex) => {
|
|
9015
9137
|
if (!canSlide) return;
|
|
9016
9138
|
const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
|
|
@@ -9020,7 +9142,7 @@ var Swiper = (props) => {
|
|
|
9020
9142
|
},
|
|
9021
9143
|
[canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
|
|
9022
9144
|
);
|
|
9023
|
-
const slideNext =
|
|
9145
|
+
const slideNext = import_react32.default.useCallback(() => {
|
|
9024
9146
|
if (!canSlide) return;
|
|
9025
9147
|
const nextInner = innerIndex + slideBy;
|
|
9026
9148
|
if (useLoop) {
|
|
@@ -9029,7 +9151,7 @@ var Swiper = (props) => {
|
|
|
9029
9151
|
moveToInner(Math.min(nextInner, maxIndex), true);
|
|
9030
9152
|
}
|
|
9031
9153
|
}, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
|
|
9032
|
-
const slidePrev =
|
|
9154
|
+
const slidePrev = import_react32.default.useCallback(() => {
|
|
9033
9155
|
if (!canSlide) return;
|
|
9034
9156
|
const prevInner = innerIndex - slideBy;
|
|
9035
9157
|
if (useLoop) {
|
|
@@ -9038,7 +9160,7 @@ var Swiper = (props) => {
|
|
|
9038
9160
|
moveToInner(Math.max(prevInner, 0), true);
|
|
9039
9161
|
}
|
|
9040
9162
|
}, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
|
|
9041
|
-
|
|
9163
|
+
import_react32.default.useEffect(() => {
|
|
9042
9164
|
if (indexProp === void 0) return;
|
|
9043
9165
|
const clamped = Math.max(0, Math.min(indexProp, maxIndex));
|
|
9044
9166
|
const target = useLoop ? cloneCount + clamped : clamped;
|
|
@@ -9046,12 +9168,12 @@ var Swiper = (props) => {
|
|
|
9046
9168
|
moveToInner(target, true);
|
|
9047
9169
|
}
|
|
9048
9170
|
}, [indexProp]);
|
|
9049
|
-
|
|
9171
|
+
import_react32.default.useImperativeHandle(swiperRef, () => ({
|
|
9050
9172
|
slidePrev,
|
|
9051
9173
|
slideNext,
|
|
9052
9174
|
slideTo
|
|
9053
9175
|
}));
|
|
9054
|
-
|
|
9176
|
+
import_react32.default.useEffect(() => {
|
|
9055
9177
|
if (!auto || !canSlide) return;
|
|
9056
9178
|
autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
|
|
9057
9179
|
return () => {
|
|
@@ -9074,7 +9196,7 @@ var Swiper = (props) => {
|
|
|
9074
9196
|
startXRef.current = getClientX(e);
|
|
9075
9197
|
startTimeRef.current = Date.now();
|
|
9076
9198
|
};
|
|
9077
|
-
|
|
9199
|
+
import_react32.default.useEffect(() => {
|
|
9078
9200
|
if (!isDragging) return;
|
|
9079
9201
|
const handleMove = (e) => {
|
|
9080
9202
|
setDragOffset(getClientX(e) - startXRef.current);
|
|
@@ -9112,8 +9234,8 @@ var Swiper = (props) => {
|
|
|
9112
9234
|
}, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
|
|
9113
9235
|
const slideWidthPercent = 100 / viewItemCount;
|
|
9114
9236
|
const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
|
|
9115
|
-
const slideElements =
|
|
9116
|
-
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0,
|
|
9237
|
+
const slideElements = import_react32.default.useMemo(
|
|
9238
|
+
() => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
9117
9239
|
"div",
|
|
9118
9240
|
{
|
|
9119
9241
|
className: "lib-xplat-swiper__slide",
|
|
@@ -9132,14 +9254,14 @@ var Swiper = (props) => {
|
|
|
9132
9254
|
Math.floor(realIndex / slideBy),
|
|
9133
9255
|
totalSteps - 1
|
|
9134
9256
|
);
|
|
9135
|
-
return /* @__PURE__ */ (0,
|
|
9136
|
-
/* @__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)(
|
|
9137
9259
|
"div",
|
|
9138
9260
|
{
|
|
9139
9261
|
className: "lib-xplat-swiper__viewport",
|
|
9140
9262
|
onMouseDown: handleDragStart,
|
|
9141
9263
|
onTouchStart: handleDragStart,
|
|
9142
|
-
children: /* @__PURE__ */ (0,
|
|
9264
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
|
|
9143
9265
|
"div",
|
|
9144
9266
|
{
|
|
9145
9267
|
className: clsx_default(
|
|
@@ -9157,7 +9279,7 @@ var Swiper = (props) => {
|
|
|
9157
9279
|
)
|
|
9158
9280
|
}
|
|
9159
9281
|
),
|
|
9160
|
-
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)(
|
|
9161
9283
|
"span",
|
|
9162
9284
|
{
|
|
9163
9285
|
className: "lib-xplat-swiper__progress-fill",
|
|
@@ -9167,7 +9289,7 @@ var Swiper = (props) => {
|
|
|
9167
9289
|
}
|
|
9168
9290
|
}
|
|
9169
9291
|
) }) }),
|
|
9170
|
-
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)(
|
|
9171
9293
|
"button",
|
|
9172
9294
|
{
|
|
9173
9295
|
className: clsx_default(
|
|
@@ -9185,8 +9307,8 @@ Swiper.displayName = "Swiper";
|
|
|
9185
9307
|
var Swiper_default = Swiper;
|
|
9186
9308
|
|
|
9187
9309
|
// src/components/Switch/Switch.tsx
|
|
9188
|
-
var
|
|
9189
|
-
var
|
|
9310
|
+
var import_react33 = __toESM(require("react"), 1);
|
|
9311
|
+
var import_jsx_runtime339 = require("react/jsx-runtime");
|
|
9190
9312
|
var KNOB_TRANSITION_MS = 250;
|
|
9191
9313
|
var Switch = (props) => {
|
|
9192
9314
|
const {
|
|
@@ -9196,9 +9318,9 @@ var Switch = (props) => {
|
|
|
9196
9318
|
disabled,
|
|
9197
9319
|
onChange
|
|
9198
9320
|
} = props;
|
|
9199
|
-
const [isAnimating, setIsAnimating] =
|
|
9200
|
-
const timeoutRef =
|
|
9201
|
-
|
|
9321
|
+
const [isAnimating, setIsAnimating] = import_react33.default.useState(false);
|
|
9322
|
+
const timeoutRef = import_react33.default.useRef(null);
|
|
9323
|
+
import_react33.default.useEffect(() => {
|
|
9202
9324
|
return () => {
|
|
9203
9325
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
9204
9326
|
};
|
|
@@ -9213,7 +9335,7 @@ var Switch = (props) => {
|
|
|
9213
9335
|
timeoutRef.current = null;
|
|
9214
9336
|
}, KNOB_TRANSITION_MS);
|
|
9215
9337
|
};
|
|
9216
|
-
return /* @__PURE__ */ (0,
|
|
9338
|
+
return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
|
|
9217
9339
|
"div",
|
|
9218
9340
|
{
|
|
9219
9341
|
className: clsx_default(
|
|
@@ -9226,7 +9348,7 @@ var Switch = (props) => {
|
|
|
9226
9348
|
),
|
|
9227
9349
|
onClick: handleClick,
|
|
9228
9350
|
"aria-disabled": disabled || isAnimating,
|
|
9229
|
-
children: /* @__PURE__ */ (0,
|
|
9351
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime339.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
|
|
9230
9352
|
}
|
|
9231
9353
|
);
|
|
9232
9354
|
};
|
|
@@ -9234,26 +9356,27 @@ Switch.displayName = "Switch";
|
|
|
9234
9356
|
var Switch_default = Switch;
|
|
9235
9357
|
|
|
9236
9358
|
// src/components/Table/TableContext.tsx
|
|
9237
|
-
var
|
|
9238
|
-
var TableContext =
|
|
9359
|
+
var import_react34 = __toESM(require("react"), 1);
|
|
9360
|
+
var TableContext = import_react34.default.createContext(null);
|
|
9239
9361
|
var useTableContext = () => {
|
|
9240
|
-
const ctx =
|
|
9362
|
+
const ctx = import_react34.default.useContext(TableContext);
|
|
9241
9363
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
9242
9364
|
return ctx;
|
|
9243
9365
|
};
|
|
9244
9366
|
var TableContext_default = TableContext;
|
|
9245
9367
|
|
|
9246
9368
|
// src/components/Table/Table.tsx
|
|
9247
|
-
var
|
|
9369
|
+
var import_jsx_runtime340 = require("react/jsx-runtime");
|
|
9248
9370
|
var Table = (props) => {
|
|
9249
9371
|
const {
|
|
9250
9372
|
children,
|
|
9373
|
+
size = "md",
|
|
9251
9374
|
rowBorderUse = true,
|
|
9252
9375
|
colBorderUse = true,
|
|
9253
9376
|
headerSticky = false,
|
|
9254
9377
|
stickyShadow = true
|
|
9255
9378
|
} = props;
|
|
9256
|
-
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)(
|
|
9257
9380
|
TableContext_default.Provider,
|
|
9258
9381
|
{
|
|
9259
9382
|
value: {
|
|
@@ -9262,7 +9385,7 @@ var Table = (props) => {
|
|
|
9262
9385
|
headerSticky,
|
|
9263
9386
|
stickyShadow
|
|
9264
9387
|
},
|
|
9265
|
-
children: /* @__PURE__ */ (0,
|
|
9388
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("table", { className: "lib-xplat-table", children })
|
|
9266
9389
|
}
|
|
9267
9390
|
) });
|
|
9268
9391
|
};
|
|
@@ -9270,41 +9393,41 @@ Table.displayName = "Table";
|
|
|
9270
9393
|
var Table_default = Table;
|
|
9271
9394
|
|
|
9272
9395
|
// src/components/Table/TableBody.tsx
|
|
9273
|
-
var
|
|
9396
|
+
var import_jsx_runtime341 = require("react/jsx-runtime");
|
|
9274
9397
|
var TableBody = (props) => {
|
|
9275
9398
|
const { children } = props;
|
|
9276
|
-
return /* @__PURE__ */ (0,
|
|
9399
|
+
return /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("tbody", { children });
|
|
9277
9400
|
};
|
|
9278
9401
|
TableBody.displayName = "TableBody";
|
|
9279
9402
|
var TableBody_default = TableBody;
|
|
9280
9403
|
|
|
9281
9404
|
// src/components/Table/TableCell.tsx
|
|
9282
|
-
var
|
|
9405
|
+
var import_react37 = __toESM(require("react"), 1);
|
|
9283
9406
|
|
|
9284
9407
|
// src/components/Table/TableHeadContext.tsx
|
|
9285
|
-
var
|
|
9286
|
-
var TableHeadContext =
|
|
9408
|
+
var import_react35 = __toESM(require("react"), 1);
|
|
9409
|
+
var TableHeadContext = import_react35.default.createContext(
|
|
9287
9410
|
null
|
|
9288
9411
|
);
|
|
9289
9412
|
var useTableHeadContext = () => {
|
|
9290
|
-
const ctx =
|
|
9413
|
+
const ctx = import_react35.default.useContext(TableHeadContext);
|
|
9291
9414
|
return ctx;
|
|
9292
9415
|
};
|
|
9293
9416
|
var TableHeadContext_default = TableHeadContext;
|
|
9294
9417
|
|
|
9295
9418
|
// src/components/Table/TableRowContext.tsx
|
|
9296
|
-
var
|
|
9297
|
-
var TableRowContext =
|
|
9419
|
+
var import_react36 = __toESM(require("react"), 1);
|
|
9420
|
+
var TableRowContext = import_react36.default.createContext(null);
|
|
9298
9421
|
var useTableRowContext = () => {
|
|
9299
|
-
const ctx =
|
|
9422
|
+
const ctx = import_react36.default.useContext(TableRowContext);
|
|
9300
9423
|
if (!ctx) throw new Error("Table components must be used inside <Table>");
|
|
9301
9424
|
return ctx;
|
|
9302
9425
|
};
|
|
9303
9426
|
var TableRowContext_default = TableRowContext;
|
|
9304
9427
|
|
|
9305
9428
|
// src/components/Table/TableCell.tsx
|
|
9306
|
-
var
|
|
9307
|
-
var TableCell =
|
|
9429
|
+
var import_jsx_runtime342 = require("react/jsx-runtime");
|
|
9430
|
+
var TableCell = import_react37.default.memo((props) => {
|
|
9308
9431
|
const {
|
|
9309
9432
|
children,
|
|
9310
9433
|
align = "center",
|
|
@@ -9316,9 +9439,9 @@ var TableCell = import_react35.default.memo((props) => {
|
|
|
9316
9439
|
const { registerStickyCell, stickyCells } = useTableRowContext();
|
|
9317
9440
|
const { stickyShadow } = useTableContext();
|
|
9318
9441
|
const headContext = useTableHeadContext();
|
|
9319
|
-
const [left, setLeft] =
|
|
9320
|
-
const cellRef =
|
|
9321
|
-
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(() => {
|
|
9322
9445
|
if (!cellRef.current) return 0;
|
|
9323
9446
|
let totalLeft = 0;
|
|
9324
9447
|
for (const ref of stickyCells) {
|
|
@@ -9327,7 +9450,7 @@ var TableCell = import_react35.default.memo((props) => {
|
|
|
9327
9450
|
}
|
|
9328
9451
|
return totalLeft;
|
|
9329
9452
|
}, [stickyCells]);
|
|
9330
|
-
|
|
9453
|
+
import_react37.default.useEffect(() => {
|
|
9331
9454
|
if (!isSticky || !cellRef.current) return;
|
|
9332
9455
|
registerStickyCell(cellRef);
|
|
9333
9456
|
setLeft(calculateLeft());
|
|
@@ -9345,7 +9468,7 @@ var TableCell = import_react35.default.memo((props) => {
|
|
|
9345
9468
|
const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
|
|
9346
9469
|
const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
|
|
9347
9470
|
const enableHover = headContext && headContext.cellHover;
|
|
9348
|
-
return /* @__PURE__ */ (0,
|
|
9471
|
+
return /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
|
|
9349
9472
|
CellTag,
|
|
9350
9473
|
{
|
|
9351
9474
|
ref: cellRef,
|
|
@@ -9370,21 +9493,21 @@ TableCell.displayName = "TableCell";
|
|
|
9370
9493
|
var TableCell_default = TableCell;
|
|
9371
9494
|
|
|
9372
9495
|
// src/components/Table/TableHead.tsx
|
|
9373
|
-
var
|
|
9496
|
+
var import_jsx_runtime343 = require("react/jsx-runtime");
|
|
9374
9497
|
var TableHead = ({
|
|
9375
9498
|
children,
|
|
9376
9499
|
cellHover = false
|
|
9377
9500
|
}) => {
|
|
9378
9501
|
const { headerSticky } = useTableContext();
|
|
9379
|
-
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 }) });
|
|
9380
9503
|
};
|
|
9381
9504
|
TableHead.displayName = "TableHead";
|
|
9382
9505
|
var TableHead_default = TableHead;
|
|
9383
9506
|
|
|
9384
9507
|
// src/components/Table/TableRow.tsx
|
|
9385
|
-
var
|
|
9386
|
-
var
|
|
9387
|
-
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) => {
|
|
9388
9511
|
const {
|
|
9389
9512
|
children,
|
|
9390
9513
|
type = "secondary",
|
|
@@ -9392,14 +9515,14 @@ var TableRow = import_react36.default.memo((props) => {
|
|
|
9392
9515
|
onClick
|
|
9393
9516
|
} = props;
|
|
9394
9517
|
const { rowBorderUse } = useTableContext();
|
|
9395
|
-
const [stickyCells, setStickyCells] =
|
|
9518
|
+
const [stickyCells, setStickyCells] = import_react38.default.useState([]);
|
|
9396
9519
|
const registerStickyCell = (ref) => {
|
|
9397
9520
|
setStickyCells((prev) => {
|
|
9398
9521
|
if (prev.includes(ref)) return prev;
|
|
9399
9522
|
return [...prev, ref];
|
|
9400
9523
|
});
|
|
9401
9524
|
};
|
|
9402
|
-
return /* @__PURE__ */ (0,
|
|
9525
|
+
return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
|
|
9403
9526
|
"tr",
|
|
9404
9527
|
{
|
|
9405
9528
|
className: clsx_default(
|
|
@@ -9417,7 +9540,7 @@ TableRow.displayName = "TableRow";
|
|
|
9417
9540
|
var TableRow_default = TableRow;
|
|
9418
9541
|
|
|
9419
9542
|
// src/components/Tag/Tag.tsx
|
|
9420
|
-
var
|
|
9543
|
+
var import_jsx_runtime345 = require("react/jsx-runtime");
|
|
9421
9544
|
var Tag = (props) => {
|
|
9422
9545
|
const {
|
|
9423
9546
|
children,
|
|
@@ -9427,7 +9550,7 @@ var Tag = (props) => {
|
|
|
9427
9550
|
disabled = false,
|
|
9428
9551
|
colorIndex
|
|
9429
9552
|
} = props;
|
|
9430
|
-
return /* @__PURE__ */ (0,
|
|
9553
|
+
return /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)(
|
|
9431
9554
|
"span",
|
|
9432
9555
|
{
|
|
9433
9556
|
className: clsx_default(
|
|
@@ -9438,8 +9561,8 @@ var Tag = (props) => {
|
|
|
9438
9561
|
disabled && "disabled"
|
|
9439
9562
|
),
|
|
9440
9563
|
children: [
|
|
9441
|
-
/* @__PURE__ */ (0,
|
|
9442
|
-
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, {}) })
|
|
9443
9566
|
]
|
|
9444
9567
|
}
|
|
9445
9568
|
);
|
|
@@ -9447,83 +9570,26 @@ var Tag = (props) => {
|
|
|
9447
9570
|
Tag.displayName = "Tag";
|
|
9448
9571
|
var Tag_default = Tag;
|
|
9449
9572
|
|
|
9450
|
-
// src/components/TextArea/TextArea.tsx
|
|
9451
|
-
var import_react37 = __toESM(require("react"), 1);
|
|
9452
|
-
var import_jsx_runtime344 = require("react/jsx-runtime");
|
|
9453
|
-
var TextArea = import_react37.default.forwardRef(
|
|
9454
|
-
(props, ref) => {
|
|
9455
|
-
const { value, onChange, disabled, ...textareaProps } = props;
|
|
9456
|
-
const localRef = import_react37.default.useRef(null);
|
|
9457
|
-
const setRefs = (el) => {
|
|
9458
|
-
localRef.current = el;
|
|
9459
|
-
if (!ref) return;
|
|
9460
|
-
if (typeof ref === "function") {
|
|
9461
|
-
ref(el);
|
|
9462
|
-
} else if (ref && typeof ref === "object" && "current" in ref) {
|
|
9463
|
-
ref.current = el;
|
|
9464
|
-
}
|
|
9465
|
-
};
|
|
9466
|
-
const handleOnChange = (e) => {
|
|
9467
|
-
const val = e.target.value;
|
|
9468
|
-
if (onChange) {
|
|
9469
|
-
const event = {
|
|
9470
|
-
...e,
|
|
9471
|
-
target: { value: val }
|
|
9472
|
-
};
|
|
9473
|
-
onChange(event);
|
|
9474
|
-
}
|
|
9475
|
-
};
|
|
9476
|
-
import_react37.default.useEffect(() => {
|
|
9477
|
-
const el = localRef.current;
|
|
9478
|
-
if (!el) return;
|
|
9479
|
-
el.style.height = "0px";
|
|
9480
|
-
const nextHeight = Math.min(el.scrollHeight, 400);
|
|
9481
|
-
el.style.height = `${nextHeight}px`;
|
|
9482
|
-
}, [value]);
|
|
9483
|
-
return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
|
|
9484
|
-
"div",
|
|
9485
|
-
{
|
|
9486
|
-
className: clsx_default(
|
|
9487
|
-
"lib-xplat-textarea",
|
|
9488
|
-
disabled ? "disabled" : void 0
|
|
9489
|
-
),
|
|
9490
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
|
|
9491
|
-
"textarea",
|
|
9492
|
-
{
|
|
9493
|
-
...textareaProps,
|
|
9494
|
-
ref: setRefs,
|
|
9495
|
-
disabled,
|
|
9496
|
-
value,
|
|
9497
|
-
onChange: handleOnChange
|
|
9498
|
-
}
|
|
9499
|
-
)
|
|
9500
|
-
}
|
|
9501
|
-
) });
|
|
9502
|
-
}
|
|
9503
|
-
);
|
|
9504
|
-
TextArea.displayName = "TextArea";
|
|
9505
|
-
var TextArea_default = TextArea;
|
|
9506
|
-
|
|
9507
9573
|
// src/components/Toast/Toast.tsx
|
|
9508
|
-
var
|
|
9574
|
+
var import_react39 = __toESM(require("react"), 1);
|
|
9509
9575
|
var import_react_dom4 = require("react-dom");
|
|
9510
|
-
var
|
|
9511
|
-
var ToastContext =
|
|
9576
|
+
var import_jsx_runtime346 = require("react/jsx-runtime");
|
|
9577
|
+
var ToastContext = import_react39.default.createContext(null);
|
|
9512
9578
|
var useToast = () => {
|
|
9513
|
-
const ctx =
|
|
9579
|
+
const ctx = import_react39.default.useContext(ToastContext);
|
|
9514
9580
|
if (!ctx) throw new Error("useToast must be used within ToastProvider");
|
|
9515
9581
|
return ctx;
|
|
9516
9582
|
};
|
|
9517
9583
|
var EXIT_DURATION = 300;
|
|
9518
9584
|
var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
9519
|
-
const ref =
|
|
9520
|
-
const [height, setHeight] =
|
|
9521
|
-
|
|
9585
|
+
const ref = import_react39.default.useRef(null);
|
|
9586
|
+
const [height, setHeight] = import_react39.default.useState(void 0);
|
|
9587
|
+
import_react39.default.useEffect(() => {
|
|
9522
9588
|
if (ref.current && !isExiting) {
|
|
9523
9589
|
setHeight(ref.current.offsetHeight);
|
|
9524
9590
|
}
|
|
9525
9591
|
}, [isExiting]);
|
|
9526
|
-
return /* @__PURE__ */ (0,
|
|
9592
|
+
return /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
|
|
9527
9593
|
"div",
|
|
9528
9594
|
{
|
|
9529
9595
|
className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
|
|
@@ -9531,15 +9597,15 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
|
|
|
9531
9597
|
maxHeight: isExiting ? 0 : height ?? "none",
|
|
9532
9598
|
marginBottom: isExiting ? 0 : void 0
|
|
9533
9599
|
},
|
|
9534
|
-
children: /* @__PURE__ */ (0,
|
|
9600
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)(
|
|
9535
9601
|
"div",
|
|
9536
9602
|
{
|
|
9537
9603
|
ref,
|
|
9538
9604
|
className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
|
|
9539
9605
|
role: "alert",
|
|
9540
9606
|
children: [
|
|
9541
|
-
/* @__PURE__ */ (0,
|
|
9542
|
-
/* @__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" })
|
|
9543
9609
|
]
|
|
9544
9610
|
}
|
|
9545
9611
|
)
|
|
@@ -9550,13 +9616,13 @@ var ToastProvider = ({
|
|
|
9550
9616
|
children,
|
|
9551
9617
|
position = "top-right"
|
|
9552
9618
|
}) => {
|
|
9553
|
-
const [toasts, setToasts] =
|
|
9554
|
-
const [removing, setRemoving] =
|
|
9555
|
-
const [mounted, setMounted] =
|
|
9556
|
-
|
|
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(() => {
|
|
9557
9623
|
setMounted(true);
|
|
9558
9624
|
}, []);
|
|
9559
|
-
const remove =
|
|
9625
|
+
const remove = import_react39.default.useCallback((id) => {
|
|
9560
9626
|
setRemoving((prev) => new Set(prev).add(id));
|
|
9561
9627
|
setTimeout(() => {
|
|
9562
9628
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
@@ -9567,7 +9633,7 @@ var ToastProvider = ({
|
|
|
9567
9633
|
});
|
|
9568
9634
|
}, EXIT_DURATION);
|
|
9569
9635
|
}, []);
|
|
9570
|
-
const toast =
|
|
9636
|
+
const toast = import_react39.default.useCallback(
|
|
9571
9637
|
(type, message, duration = 3e3) => {
|
|
9572
9638
|
const id = `${Date.now()}-${Math.random()}`;
|
|
9573
9639
|
setToasts((prev) => [...prev, { id, type, message }]);
|
|
@@ -9577,10 +9643,10 @@ var ToastProvider = ({
|
|
|
9577
9643
|
},
|
|
9578
9644
|
[remove]
|
|
9579
9645
|
);
|
|
9580
|
-
return /* @__PURE__ */ (0,
|
|
9646
|
+
return /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)(ToastContext.Provider, { value: { toast }, children: [
|
|
9581
9647
|
children,
|
|
9582
9648
|
mounted && (0, import_react_dom4.createPortal)(
|
|
9583
|
-
/* @__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)(
|
|
9584
9650
|
ToastItemComponent,
|
|
9585
9651
|
{
|
|
9586
9652
|
item: t,
|
|
@@ -9596,29 +9662,29 @@ var ToastProvider = ({
|
|
|
9596
9662
|
ToastProvider.displayName = "ToastProvider";
|
|
9597
9663
|
|
|
9598
9664
|
// src/components/Tooltip/Tooltip.tsx
|
|
9599
|
-
var
|
|
9600
|
-
var
|
|
9665
|
+
var import_react40 = __toESM(require("react"), 1);
|
|
9666
|
+
var import_jsx_runtime347 = require("react/jsx-runtime");
|
|
9601
9667
|
var Tooltip = (props) => {
|
|
9602
9668
|
const {
|
|
9603
9669
|
type = "primary",
|
|
9604
9670
|
description,
|
|
9605
9671
|
children
|
|
9606
9672
|
} = props;
|
|
9607
|
-
const iconRef =
|
|
9608
|
-
return /* @__PURE__ */ (0,
|
|
9609
|
-
/* @__PURE__ */ (0,
|
|
9610
|
-
/* @__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 })
|
|
9611
9677
|
] });
|
|
9612
9678
|
};
|
|
9613
9679
|
Tooltip.displayName = "Tooltip";
|
|
9614
9680
|
var Tooltip_default = Tooltip;
|
|
9615
9681
|
|
|
9616
9682
|
// src/components/Video/Video.tsx
|
|
9617
|
-
var
|
|
9618
|
-
var
|
|
9619
|
-
var PipIcon = () => /* @__PURE__ */ (0,
|
|
9620
|
-
/* @__PURE__ */ (0,
|
|
9621
|
-
/* @__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" })
|
|
9622
9688
|
] });
|
|
9623
9689
|
var formatTime = (sec) => {
|
|
9624
9690
|
if (!Number.isFinite(sec) || sec < 0) return "0:00";
|
|
@@ -9626,7 +9692,7 @@ var formatTime = (sec) => {
|
|
|
9626
9692
|
const s = Math.floor(sec % 60);
|
|
9627
9693
|
return `${m}:${s.toString().padStart(2, "0")}`;
|
|
9628
9694
|
};
|
|
9629
|
-
var Video =
|
|
9695
|
+
var Video = import_react41.default.forwardRef((props, ref) => {
|
|
9630
9696
|
const {
|
|
9631
9697
|
src,
|
|
9632
9698
|
poster,
|
|
@@ -9650,21 +9716,21 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9650
9716
|
children,
|
|
9651
9717
|
...rest
|
|
9652
9718
|
} = props;
|
|
9653
|
-
const containerRef =
|
|
9654
|
-
const videoRef =
|
|
9655
|
-
const [isPlaying, setIsPlaying] =
|
|
9656
|
-
const [isLoaded, setIsLoaded] =
|
|
9657
|
-
const [currentTime, setCurrentTime] =
|
|
9658
|
-
const [duration, setDuration] =
|
|
9659
|
-
const [buffered, setBuffered] =
|
|
9660
|
-
const [volume, setVolume] =
|
|
9661
|
-
const [isMuted, setIsMuted] =
|
|
9662
|
-
const [isFullscreen, setIsFullscreen] =
|
|
9663
|
-
const [playbackRate, setPlaybackRate] =
|
|
9664
|
-
const [rateMenuOpen, setRateMenuOpen] =
|
|
9665
|
-
const [captionsOn, setCaptionsOn] =
|
|
9666
|
-
const [isPip, setIsPip] =
|
|
9667
|
-
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(
|
|
9668
9734
|
(el) => {
|
|
9669
9735
|
videoRef.current = el;
|
|
9670
9736
|
if (typeof ref === "function") ref(el);
|
|
@@ -9672,14 +9738,14 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9672
9738
|
},
|
|
9673
9739
|
[ref]
|
|
9674
9740
|
);
|
|
9675
|
-
|
|
9741
|
+
import_react41.default.useEffect(() => {
|
|
9676
9742
|
const onFsChange = () => {
|
|
9677
9743
|
setIsFullscreen(document.fullscreenElement === containerRef.current);
|
|
9678
9744
|
};
|
|
9679
9745
|
document.addEventListener("fullscreenchange", onFsChange);
|
|
9680
9746
|
return () => document.removeEventListener("fullscreenchange", onFsChange);
|
|
9681
9747
|
}, []);
|
|
9682
|
-
|
|
9748
|
+
import_react41.default.useEffect(() => {
|
|
9683
9749
|
const v = videoRef.current;
|
|
9684
9750
|
if (!v) return;
|
|
9685
9751
|
const onEnter = () => setIsPip(true);
|
|
@@ -9793,13 +9859,13 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9793
9859
|
const volumePct = (isMuted ? 0 : volume) * 100;
|
|
9794
9860
|
const VolumeGlyph = isMuted || volume === 0 ? VolumeXIcon_default : volume < 0.5 ? VolumeIcon_default : Volume2Icon_default;
|
|
9795
9861
|
const pipSupported = typeof document !== "undefined" && "pictureInPictureEnabled" in document && document.pictureInPictureEnabled;
|
|
9796
|
-
return /* @__PURE__ */ (0,
|
|
9862
|
+
return /* @__PURE__ */ (0, import_jsx_runtime348.jsxs)(
|
|
9797
9863
|
"div",
|
|
9798
9864
|
{
|
|
9799
9865
|
ref: containerRef,
|
|
9800
9866
|
className: clsx_default("lib-xplat-video", showControls && "has-controls"),
|
|
9801
9867
|
children: [
|
|
9802
|
-
/* @__PURE__ */ (0,
|
|
9868
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9803
9869
|
"video",
|
|
9804
9870
|
{
|
|
9805
9871
|
ref: setRefs,
|
|
@@ -9820,7 +9886,7 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9820
9886
|
children
|
|
9821
9887
|
}
|
|
9822
9888
|
),
|
|
9823
|
-
showCenterPlay && /* @__PURE__ */ (0,
|
|
9889
|
+
showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9824
9890
|
"button",
|
|
9825
9891
|
{
|
|
9826
9892
|
type: "button",
|
|
@@ -9832,11 +9898,11 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9832
9898
|
onClick: togglePlay,
|
|
9833
9899
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
9834
9900
|
tabIndex: -1,
|
|
9835
|
-
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, {}) })
|
|
9836
9902
|
}
|
|
9837
9903
|
),
|
|
9838
|
-
showControls && /* @__PURE__ */ (0,
|
|
9839
|
-
/* @__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)(
|
|
9840
9906
|
"input",
|
|
9841
9907
|
{
|
|
9842
9908
|
type: "range",
|
|
@@ -9853,29 +9919,29 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9853
9919
|
}
|
|
9854
9920
|
}
|
|
9855
9921
|
),
|
|
9856
|
-
/* @__PURE__ */ (0,
|
|
9857
|
-
/* @__PURE__ */ (0,
|
|
9922
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsxs)("div", { className: "controls-row", children: [
|
|
9923
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9858
9924
|
"button",
|
|
9859
9925
|
{
|
|
9860
9926
|
type: "button",
|
|
9861
9927
|
className: "control-btn",
|
|
9862
9928
|
onClick: togglePlay,
|
|
9863
9929
|
"aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
|
|
9864
|
-
children: isPlaying ? /* @__PURE__ */ (0,
|
|
9930
|
+
children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(PlayIcon_default, {})
|
|
9865
9931
|
}
|
|
9866
9932
|
),
|
|
9867
|
-
/* @__PURE__ */ (0,
|
|
9868
|
-
/* @__PURE__ */ (0,
|
|
9933
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsxs)("div", { className: "volume-group", children: [
|
|
9934
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9869
9935
|
"button",
|
|
9870
9936
|
{
|
|
9871
9937
|
type: "button",
|
|
9872
9938
|
className: "control-btn",
|
|
9873
9939
|
onClick: toggleMute,
|
|
9874
9940
|
"aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
|
|
9875
|
-
children: /* @__PURE__ */ (0,
|
|
9941
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(VolumeGlyph, {})
|
|
9876
9942
|
}
|
|
9877
9943
|
),
|
|
9878
|
-
/* @__PURE__ */ (0,
|
|
9944
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9879
9945
|
"input",
|
|
9880
9946
|
{
|
|
9881
9947
|
type: "range",
|
|
@@ -9890,14 +9956,14 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9890
9956
|
}
|
|
9891
9957
|
)
|
|
9892
9958
|
] }),
|
|
9893
|
-
/* @__PURE__ */ (0,
|
|
9959
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsxs)("span", { className: "time", children: [
|
|
9894
9960
|
formatTime(currentTime),
|
|
9895
9961
|
" / ",
|
|
9896
9962
|
formatTime(duration)
|
|
9897
9963
|
] }),
|
|
9898
|
-
/* @__PURE__ */ (0,
|
|
9899
|
-
playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0,
|
|
9900
|
-
/* @__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)(
|
|
9901
9967
|
"button",
|
|
9902
9968
|
{
|
|
9903
9969
|
type: "button",
|
|
@@ -9911,7 +9977,7 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9911
9977
|
]
|
|
9912
9978
|
}
|
|
9913
9979
|
),
|
|
9914
|
-
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)(
|
|
9915
9981
|
"button",
|
|
9916
9982
|
{
|
|
9917
9983
|
type: "button",
|
|
@@ -9925,7 +9991,7 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9925
9991
|
}
|
|
9926
9992
|
) }, r2)) })
|
|
9927
9993
|
] }),
|
|
9928
|
-
showCaptions && /* @__PURE__ */ (0,
|
|
9994
|
+
showCaptions && /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9929
9995
|
"button",
|
|
9930
9996
|
{
|
|
9931
9997
|
type: "button",
|
|
@@ -9933,37 +9999,37 @@ var Video = import_react40.default.forwardRef((props, ref) => {
|
|
|
9933
9999
|
onClick: toggleCaptions,
|
|
9934
10000
|
"aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
|
|
9935
10001
|
"aria-pressed": captionsOn,
|
|
9936
|
-
children: /* @__PURE__ */ (0,
|
|
10002
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(TypeIcon_default, {})
|
|
9937
10003
|
}
|
|
9938
10004
|
),
|
|
9939
|
-
showPip && pipSupported && /* @__PURE__ */ (0,
|
|
10005
|
+
showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9940
10006
|
"button",
|
|
9941
10007
|
{
|
|
9942
10008
|
type: "button",
|
|
9943
10009
|
className: clsx_default("control-btn", isPip && "is-active"),
|
|
9944
10010
|
onClick: togglePip,
|
|
9945
10011
|
"aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
|
|
9946
|
-
children: /* @__PURE__ */ (0,
|
|
10012
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(PipIcon, {})
|
|
9947
10013
|
}
|
|
9948
10014
|
),
|
|
9949
|
-
showDownload && /* @__PURE__ */ (0,
|
|
10015
|
+
showDownload && /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9950
10016
|
"a",
|
|
9951
10017
|
{
|
|
9952
10018
|
className: "control-btn",
|
|
9953
10019
|
href: src,
|
|
9954
10020
|
download: downloadFileName ?? true,
|
|
9955
10021
|
"aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
|
|
9956
|
-
children: /* @__PURE__ */ (0,
|
|
10022
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(DownloadIcon_default, {})
|
|
9957
10023
|
}
|
|
9958
10024
|
),
|
|
9959
|
-
/* @__PURE__ */ (0,
|
|
10025
|
+
/* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
|
|
9960
10026
|
"button",
|
|
9961
10027
|
{
|
|
9962
10028
|
type: "button",
|
|
9963
10029
|
className: "control-btn",
|
|
9964
10030
|
onClick: toggleFullscreen,
|
|
9965
10031
|
"aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
|
|
9966
|
-
children: isFullscreen ? /* @__PURE__ */ (0,
|
|
10032
|
+
children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(MaximizeIcon_default, {})
|
|
9967
10033
|
}
|
|
9968
10034
|
)
|
|
9969
10035
|
] })
|
|
@@ -9976,7 +10042,7 @@ Video.displayName = "Video";
|
|
|
9976
10042
|
var Video_default = Video;
|
|
9977
10043
|
|
|
9978
10044
|
// src/layout/Grid/FullGrid/FullGrid.tsx
|
|
9979
|
-
var
|
|
10045
|
+
var import_jsx_runtime349 = require("react/jsx-runtime");
|
|
9980
10046
|
var GAP_MAP = {
|
|
9981
10047
|
none: "var(--spacing-space-none)",
|
|
9982
10048
|
xs: "var(--spacing-space-1)",
|
|
@@ -9989,13 +10055,13 @@ var GAP_MAP = {
|
|
|
9989
10055
|
var FullGrid = (props) => {
|
|
9990
10056
|
const { children, gap } = props;
|
|
9991
10057
|
const style = gap != null ? { gap: GAP_MAP[gap] } : void 0;
|
|
9992
|
-
return /* @__PURE__ */ (0,
|
|
10058
|
+
return /* @__PURE__ */ (0, import_jsx_runtime349.jsx)("div", { className: "lib-xplat-full-grid", style, children });
|
|
9993
10059
|
};
|
|
9994
10060
|
FullGrid.displayName = "FullGrid";
|
|
9995
10061
|
var FullGrid_default = FullGrid;
|
|
9996
10062
|
|
|
9997
10063
|
// src/layout/Grid/FullScreen/FullScreen.tsx
|
|
9998
|
-
var
|
|
10064
|
+
var import_jsx_runtime350 = require("react/jsx-runtime");
|
|
9999
10065
|
var GAP_MAP2 = {
|
|
10000
10066
|
none: "var(--spacing-space-none)",
|
|
10001
10067
|
xs: "var(--spacing-space-1)",
|
|
@@ -10008,13 +10074,13 @@ var GAP_MAP2 = {
|
|
|
10008
10074
|
var FullScreen = (props) => {
|
|
10009
10075
|
const { children, gap } = props;
|
|
10010
10076
|
const style = gap != null ? { gap: GAP_MAP2[gap] } : void 0;
|
|
10011
|
-
return /* @__PURE__ */ (0,
|
|
10077
|
+
return /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { className: "lib-xplat-full-screen", style, children });
|
|
10012
10078
|
};
|
|
10013
10079
|
FullScreen.displayName = "FullScreen";
|
|
10014
10080
|
var FullScreen_default = FullScreen;
|
|
10015
10081
|
|
|
10016
10082
|
// src/layout/Grid/Item/Item.tsx
|
|
10017
|
-
var
|
|
10083
|
+
var import_jsx_runtime351 = require("react/jsx-runtime");
|
|
10018
10084
|
var calculateSpans = (column) => {
|
|
10019
10085
|
const spans = {};
|
|
10020
10086
|
let inherited = column.default;
|
|
@@ -10031,35 +10097,35 @@ var GridItem = ({ column, children, className }) => {
|
|
|
10031
10097
|
Object.entries(spans).forEach(([key, value]) => {
|
|
10032
10098
|
style[`--column-${key}`] = value;
|
|
10033
10099
|
});
|
|
10034
|
-
return /* @__PURE__ */ (0,
|
|
10100
|
+
return /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { className: clsx_default("lib-xplat-grid-item", className), style, children });
|
|
10035
10101
|
};
|
|
10036
10102
|
GridItem.displayName = "GridItem";
|
|
10037
10103
|
var Item_default = GridItem;
|
|
10038
10104
|
|
|
10039
10105
|
// src/layout/Header/Header.tsx
|
|
10040
|
-
var
|
|
10106
|
+
var import_jsx_runtime352 = require("react/jsx-runtime");
|
|
10041
10107
|
var Header = ({
|
|
10042
10108
|
logo,
|
|
10043
10109
|
centerContent,
|
|
10044
10110
|
rightContent
|
|
10045
10111
|
}) => {
|
|
10046
|
-
return /* @__PURE__ */ (0,
|
|
10047
|
-
/* @__PURE__ */ (0,
|
|
10048
|
-
/* @__PURE__ */ (0,
|
|
10049
|
-
/* @__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 })
|
|
10050
10116
|
] });
|
|
10051
10117
|
};
|
|
10052
10118
|
Header.displayName = "Header";
|
|
10053
10119
|
var Header_default = Header;
|
|
10054
10120
|
|
|
10055
10121
|
// src/layout/Layout/Layout.tsx
|
|
10056
|
-
var
|
|
10122
|
+
var import_jsx_runtime353 = require("react/jsx-runtime");
|
|
10057
10123
|
var Layout = (props) => {
|
|
10058
10124
|
const { header, sideBar, children } = props;
|
|
10059
|
-
return /* @__PURE__ */ (0,
|
|
10060
|
-
sideBar && /* @__PURE__ */ (0,
|
|
10061
|
-
/* @__PURE__ */ (0,
|
|
10062
|
-
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 }),
|
|
10063
10129
|
children
|
|
10064
10130
|
] })
|
|
10065
10131
|
] }) });
|
|
@@ -10068,31 +10134,31 @@ Layout.displayName = "Layout";
|
|
|
10068
10134
|
var Layout_default = Layout;
|
|
10069
10135
|
|
|
10070
10136
|
// src/layout/SideBar/SideBar.tsx
|
|
10071
|
-
var
|
|
10137
|
+
var import_react43 = __toESM(require("react"), 1);
|
|
10072
10138
|
|
|
10073
10139
|
// src/layout/SideBar/SideBarContext.tsx
|
|
10074
|
-
var
|
|
10075
|
-
var SideBarContext =
|
|
10140
|
+
var import_react42 = __toESM(require("react"), 1);
|
|
10141
|
+
var SideBarContext = import_react42.default.createContext(null);
|
|
10076
10142
|
var useSideBarContext = () => {
|
|
10077
|
-
const ctx =
|
|
10143
|
+
const ctx = import_react42.default.useContext(SideBarContext);
|
|
10078
10144
|
if (!ctx) throw new Error("Error");
|
|
10079
10145
|
return ctx;
|
|
10080
10146
|
};
|
|
10081
10147
|
var SideBarContext_default = SideBarContext;
|
|
10082
10148
|
|
|
10083
10149
|
// src/layout/SideBar/SideBar.tsx
|
|
10084
|
-
var
|
|
10150
|
+
var import_jsx_runtime354 = require("react/jsx-runtime");
|
|
10085
10151
|
var SideBar = (props) => {
|
|
10086
10152
|
const { children, className } = props;
|
|
10087
|
-
const [isOpen, setIsOpen] =
|
|
10153
|
+
const [isOpen, setIsOpen] = import_react43.default.useState(true);
|
|
10088
10154
|
const handleSwitchSideBar = () => {
|
|
10089
10155
|
setIsOpen((prev) => !prev);
|
|
10090
10156
|
};
|
|
10091
|
-
return /* @__PURE__ */ (0,
|
|
10157
|
+
return /* @__PURE__ */ (0, import_jsx_runtime354.jsx)(
|
|
10092
10158
|
SideBarContext_default.Provider,
|
|
10093
10159
|
{
|
|
10094
10160
|
value: { isSidebarOpen: isOpen, handleSwitchSideBar },
|
|
10095
|
-
children: /* @__PURE__ */ (0,
|
|
10161
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime354.jsx)(
|
|
10096
10162
|
"div",
|
|
10097
10163
|
{
|
|
10098
10164
|
className: clsx_default(
|
|
@@ -10172,6 +10238,7 @@ var SideBar_default = SideBar;
|
|
|
10172
10238
|
CardTab,
|
|
10173
10239
|
CastIcon,
|
|
10174
10240
|
Chart,
|
|
10241
|
+
ChatInput,
|
|
10175
10242
|
CheckBox,
|
|
10176
10243
|
CheckCircleIcon,
|
|
10177
10244
|
CheckIcon,
|