@x-plat/design-system 0.5.20 → 0.5.22

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