@x-plat/design-system 0.5.11 → 0.5.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2019,7 +2019,7 @@ var CardTab_default = CardTab;
2019
2019
 
2020
2020
  // src/components/Chart/Chart.tsx
2021
2021
  import React5 from "react";
2022
- import { jsx as jsx305, jsxs as jsxs196 } from "react/jsx-runtime";
2022
+ import { Fragment as Fragment2, jsx as jsx305, jsxs as jsxs196 } from "react/jsx-runtime";
2023
2023
  var CATEGORICAL_COUNT2 = 8;
2024
2024
  var LINE_BAR_PALETTES = Array.from({ length: CATEGORICAL_COUNT2 }, (_, i) => {
2025
2025
  const n = i + 1;
@@ -2068,14 +2068,23 @@ var useChartSize = (ref) => {
2068
2068
  React5.useEffect(() => {
2069
2069
  const el = ref.current;
2070
2070
  if (!el) return;
2071
+ let rafId = 0;
2071
2072
  const observer = new ResizeObserver((entries) => {
2072
- const entry = entries[0];
2073
- if (!entry) return;
2074
- const { width, height } = entry.contentRect;
2075
- setSize({ width: Math.floor(width), height: Math.floor(height) });
2073
+ cancelAnimationFrame(rafId);
2074
+ rafId = requestAnimationFrame(() => {
2075
+ const entry = entries[0];
2076
+ if (!entry) return;
2077
+ const { width, height } = entry.contentRect;
2078
+ const w = Math.floor(width);
2079
+ const h = Math.floor(height);
2080
+ setSize((prev) => prev.width === w && prev.height === h ? prev : { width: w, height: h });
2081
+ });
2076
2082
  });
2077
2083
  observer.observe(el);
2078
- return () => observer.disconnect();
2084
+ return () => {
2085
+ cancelAnimationFrame(rafId);
2086
+ observer.disconnect();
2087
+ };
2079
2088
  }, [ref]);
2080
2089
  return size;
2081
2090
  };
@@ -2087,15 +2096,21 @@ var useChartTooltip = (enabled) => {
2087
2096
  content: ""
2088
2097
  });
2089
2098
  const containerRef = React5.useRef(null);
2099
+ const rafRef = React5.useRef(0);
2090
2100
  const move = React5.useCallback((e) => {
2091
2101
  if (!enabled) return;
2092
- const rect = containerRef.current?.getBoundingClientRect();
2093
- if (!rect) return;
2094
- setTooltip((prev) => ({
2095
- ...prev,
2096
- x: e.clientX - rect.left,
2097
- y: e.clientY - rect.top - 12
2098
- }));
2102
+ const clientX = e.clientX;
2103
+ const clientY = e.clientY;
2104
+ cancelAnimationFrame(rafRef.current);
2105
+ rafRef.current = requestAnimationFrame(() => {
2106
+ const rect = containerRef.current?.getBoundingClientRect();
2107
+ if (!rect) return;
2108
+ setTooltip((prev) => ({
2109
+ ...prev,
2110
+ x: clientX - rect.left,
2111
+ y: clientY - rect.top - 12
2112
+ }));
2113
+ });
2099
2114
  }, [enabled]);
2100
2115
  const show = React5.useCallback((e, content) => {
2101
2116
  if (!enabled) return;
@@ -2109,10 +2124,35 @@ var useChartTooltip = (enabled) => {
2109
2124
  });
2110
2125
  }, [enabled]);
2111
2126
  const hide = React5.useCallback(() => {
2127
+ cancelAnimationFrame(rafRef.current);
2112
2128
  setTooltip((prev) => ({ ...prev, visible: false }));
2113
2129
  }, []);
2114
2130
  return { tooltip, show, hide, move, containerRef };
2115
2131
  };
2132
+ var GridLines = React5.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */ jsx305(Fragment2, { children: [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
2133
+ const y = PADDING.top + (1 - ratio) * chartH;
2134
+ const val = Math.round(maxVal * ratio);
2135
+ return /* @__PURE__ */ jsxs196("g", { children: [
2136
+ /* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
2137
+ /* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
2138
+ ] }, ratio);
2139
+ }) }));
2140
+ GridLines.displayName = "GridLines";
2141
+ var getLabelStep = (count, chartW) => {
2142
+ const minLabelWidth = 40;
2143
+ const maxLabels = Math.floor(chartW / minLabelWidth);
2144
+ if (count <= maxLabels) return 1;
2145
+ return Math.ceil(count / maxLabels);
2146
+ };
2147
+ var AxisLabels = React5.memo(({ labels, count, chartW, height }) => {
2148
+ const step = getLabelStep(count, chartW);
2149
+ return /* @__PURE__ */ jsx305(Fragment2, { children: labels.map((label, i) => {
2150
+ if (i % step !== 0) return null;
2151
+ const x = PADDING.left + i / (count - 1 || 1) * chartW;
2152
+ return /* @__PURE__ */ jsx305("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
2153
+ }) });
2154
+ });
2155
+ AxisLabels.displayName = "AxisLabels";
2116
2156
  var LineChart = React5.memo(({ data, labels, width, height, onHover, onMove, onLeave }) => {
2117
2157
  const entries = React5.useMemo(() => Object.entries(data), [data]);
2118
2158
  const maxVal = React5.useMemo(() => {
@@ -2132,19 +2172,10 @@ var LineChart = React5.memo(({ data, labels, width, height, onHover, onMove, onL
2132
2172
  ),
2133
2173
  [entries, count, chartW, chartH, maxVal]
2134
2174
  );
2175
+ const showPoints = count <= 100;
2135
2176
  return /* @__PURE__ */ jsxs196("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
2136
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
2137
- const y = PADDING.top + (1 - ratio) * chartH;
2138
- const val = Math.round(maxVal * ratio);
2139
- return /* @__PURE__ */ jsxs196("g", { children: [
2140
- /* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
2141
- /* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
2142
- ] }, ratio);
2143
- }),
2144
- labels.map((label, i) => {
2145
- const x = PADDING.left + i / (count - 1 || 1) * chartW;
2146
- return /* @__PURE__ */ jsx305("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
2147
- }),
2177
+ /* @__PURE__ */ jsx305(GridLines, { width, height, chartH, maxVal }),
2178
+ /* @__PURE__ */ jsx305(AxisLabels, { labels, count, chartW, height }),
2148
2179
  entries.map(([key], di) => {
2149
2180
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
2150
2181
  const color = palette[2];
@@ -2159,7 +2190,7 @@ var LineChart = React5.memo(({ data, labels, width, height, onHover, onMove, onL
2159
2190
  strokeWidth: "2"
2160
2191
  }
2161
2192
  ),
2162
- points.map((p, i) => /* @__PURE__ */ jsx305(
2193
+ showPoints && points.map((p, i) => /* @__PURE__ */ jsx305(
2163
2194
  "circle",
2164
2195
  {
2165
2196
  cx: p.x,
@@ -2197,19 +2228,10 @@ var CurveChart = React5.memo(({ data, labels, width, height, onHover, onMove, on
2197
2228
  ),
2198
2229
  [entries, count, chartW, chartH, maxVal]
2199
2230
  );
2231
+ const showPoints = count <= 100;
2200
2232
  return /* @__PURE__ */ jsxs196("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
2201
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
2202
- const y = PADDING.top + (1 - ratio) * chartH;
2203
- const val = Math.round(maxVal * ratio);
2204
- return /* @__PURE__ */ jsxs196("g", { children: [
2205
- /* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
2206
- /* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
2207
- ] }, ratio);
2208
- }),
2209
- labels.map((label, i) => {
2210
- const x = PADDING.left + i / (count - 1 || 1) * chartW;
2211
- return /* @__PURE__ */ jsx305("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
2212
- }),
2233
+ /* @__PURE__ */ jsx305(GridLines, { width, height, chartH, maxVal }),
2234
+ /* @__PURE__ */ jsx305(AxisLabels, { labels, count, chartW, height }),
2213
2235
  entries.map(([key], di) => {
2214
2236
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
2215
2237
  const color = palette[2];
@@ -2225,7 +2247,7 @@ var CurveChart = React5.memo(({ data, labels, width, height, onHover, onMove, on
2225
2247
  ] }) }),
2226
2248
  /* @__PURE__ */ jsx305("path", { d: areaPath, fill: `url(#${gradientId})` }),
2227
2249
  /* @__PURE__ */ jsx305("path", { d: linePath, fill: "none", stroke: color, strokeWidth: "2" }),
2228
- points.map((p, i) => /* @__PURE__ */ jsx305(
2250
+ showPoints && points.map((p, i) => /* @__PURE__ */ jsx305(
2229
2251
  "circle",
2230
2252
  {
2231
2253
  cx: p.x,
@@ -2255,11 +2277,11 @@ var BarChart = React5.memo(({ data, labels, width, height, onHover, onMove, onLe
2255
2277
  const chartW = width - PADDING.left - PADDING.right;
2256
2278
  const chartH = height - PADDING.top - PADDING.bottom;
2257
2279
  const groupW = chartW / count;
2258
- const barW = Math.min(32, groupW * 0.7 / groupCount);
2280
+ const barW = Math.max(1, Math.min(32, groupW * 0.7 / groupCount));
2259
2281
  const bars = React5.useMemo(
2260
2282
  () => entries.map(
2261
2283
  ([, values], di) => values.map((v, i) => {
2262
- const h = v / maxVal * chartH;
2284
+ const h = Math.max(0, v / maxVal * chartH);
2263
2285
  const x = PADDING.left + groupW * i + (groupW - barW * groupCount) / 2 + barW * di;
2264
2286
  const y = PADDING.top + chartH - h;
2265
2287
  return { x, y, w: barW, h, v };
@@ -2267,16 +2289,13 @@ var BarChart = React5.memo(({ data, labels, width, height, onHover, onMove, onLe
2267
2289
  ),
2268
2290
  [entries, maxVal, chartH, groupW, barW, groupCount]
2269
2291
  );
2292
+ const barLabelStep = getLabelStep(count, chartW);
2270
2293
  return /* @__PURE__ */ jsxs196("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
2271
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
2272
- const y = PADDING.top + (1 - ratio) * chartH;
2273
- const val = Math.round(maxVal * ratio);
2274
- return /* @__PURE__ */ jsxs196("g", { children: [
2275
- /* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
2276
- /* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
2277
- ] }, ratio);
2294
+ /* @__PURE__ */ jsx305(GridLines, { width, height, chartH, maxVal }),
2295
+ labels.map((label, i) => {
2296
+ if (i % barLabelStep !== 0) return null;
2297
+ return /* @__PURE__ */ jsx305("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
2278
2298
  }),
2279
- labels.map((label, i) => /* @__PURE__ */ jsx305("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i)),
2280
2299
  entries.map(([key], di) => {
2281
2300
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
2282
2301
  const color = palette[2];
@@ -2456,7 +2475,7 @@ Chip.displayName = "Chip";
2456
2475
  var Chip_default = Chip;
2457
2476
 
2458
2477
  // src/components/DatePicker/InputDatePicker/index.tsx
2459
- import React10 from "react";
2478
+ import React11 from "react";
2460
2479
 
2461
2480
  // src/components/Input/Input.tsx
2462
2481
  import React6 from "react";
@@ -2646,15 +2665,37 @@ PasswordInput.displayName = "PasswordInput";
2646
2665
  var PasswordInput_default = PasswordInput;
2647
2666
 
2648
2667
  // src/components/Modal/Modal.tsx
2649
- import React8 from "react";
2668
+ import React9 from "react";
2650
2669
  import { createPortal } from "react-dom";
2670
+
2671
+ // src/tokens/hooks/Portal.tsx
2672
+ import React8 from "react";
2673
+ import ReactDOM from "react-dom";
2651
2674
  import { jsx as jsx311 } from "react/jsx-runtime";
2675
+ var PortalContainerContext = React8.createContext(null);
2676
+ var PortalProvider = ({ container, children }) => /* @__PURE__ */ jsx311(PortalContainerContext.Provider, { value: container, children });
2677
+ var Portal = ({ children }) => {
2678
+ const contextContainer = React8.useContext(PortalContainerContext);
2679
+ const [fallback, setFallback] = React8.useState(null);
2680
+ React8.useEffect(() => {
2681
+ if (!contextContainer) setFallback(document.body);
2682
+ }, [contextContainer]);
2683
+ const container = contextContainer ?? fallback;
2684
+ if (!container) return null;
2685
+ return ReactDOM.createPortal(children, container);
2686
+ };
2687
+ Portal.displayName = "Portal";
2688
+ var Portal_default = Portal;
2689
+
2690
+ // src/components/Modal/Modal.tsx
2691
+ import { jsx as jsx312 } from "react/jsx-runtime";
2652
2692
  var ANIMATION_DURATION_MS = 200;
2653
2693
  var Modal = (props) => {
2654
2694
  const { isOpen, onClose, children } = props;
2655
- const [mounted, setMounted] = React8.useState(false);
2656
- const [visible, setVisible] = React8.useState(false);
2657
- React8.useEffect(() => {
2695
+ const [mounted, setMounted] = React9.useState(false);
2696
+ const [visible, setVisible] = React9.useState(false);
2697
+ const boxRef = React9.useRef(null);
2698
+ React9.useEffect(() => {
2658
2699
  if (isOpen) {
2659
2700
  setMounted(true);
2660
2701
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -2668,19 +2709,20 @@ var Modal = (props) => {
2668
2709
  if (!mounted) return null;
2669
2710
  const stateClass = visible ? "enter" : "exit";
2670
2711
  return createPortal(
2671
- /* @__PURE__ */ jsx311(
2712
+ /* @__PURE__ */ jsx312(
2672
2713
  "div",
2673
2714
  {
2674
2715
  className: clsx_default("lib-xplat-modal", "dim", stateClass),
2675
2716
  onClick: onClose,
2676
- children: /* @__PURE__ */ jsx311(
2717
+ children: /* @__PURE__ */ jsx312(
2677
2718
  "div",
2678
2719
  {
2720
+ ref: boxRef,
2679
2721
  className: clsx_default("lib-xplat-modal", "modal-box", stateClass),
2680
2722
  role: "dialog",
2681
2723
  "aria-modal": "true",
2682
2724
  onClick: (e) => e.stopPropagation(),
2683
- children
2725
+ children: /* @__PURE__ */ jsx312(PortalProvider, { container: boxRef.current, children })
2684
2726
  }
2685
2727
  )
2686
2728
  }
@@ -2692,9 +2734,9 @@ Modal.displayName = "Modal";
2692
2734
  var Modal_default = Modal;
2693
2735
 
2694
2736
  // src/components/DatePicker/SingleDatePicker/index.tsx
2695
- import React9 from "react";
2696
- import { Fragment as Fragment2, jsx as jsx312, jsxs as jsxs200 } from "react/jsx-runtime";
2697
- var DayCell2 = React9.memo(
2737
+ import React10 from "react";
2738
+ import { Fragment as Fragment3, jsx as jsx313, jsxs as jsxs200 } from "react/jsx-runtime";
2739
+ var DayCell2 = React10.memo(
2698
2740
  ({
2699
2741
  day,
2700
2742
  disabled,
@@ -2704,7 +2746,7 @@ var DayCell2 = React9.memo(
2704
2746
  isEnd,
2705
2747
  inRange,
2706
2748
  onSelect
2707
- }) => /* @__PURE__ */ jsx312(
2749
+ }) => /* @__PURE__ */ jsx313(
2708
2750
  "button",
2709
2751
  {
2710
2752
  type: "button",
@@ -2746,26 +2788,26 @@ var SingleDatePicker = (props) => {
2746
2788
  initialYear,
2747
2789
  initialMonth
2748
2790
  );
2749
- const [pickerMode, setPickerMode] = React9.useState("days");
2750
- const [yearRangeStart, setYearRangeStart] = React9.useState(
2791
+ const [pickerMode, setPickerMode] = React10.useState("days");
2792
+ const [yearRangeStart, setYearRangeStart] = React10.useState(
2751
2793
  Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
2752
2794
  );
2753
- const minTime = React9.useMemo(
2795
+ const minTime = React10.useMemo(
2754
2796
  () => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
2755
2797
  [minDate]
2756
2798
  );
2757
- const maxTime = React9.useMemo(
2799
+ const maxTime = React10.useMemo(
2758
2800
  () => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
2759
2801
  [maxDate]
2760
2802
  );
2761
- const highlightSet = React9.useMemo(() => {
2803
+ const highlightSet = React10.useMemo(() => {
2762
2804
  const set = /* @__PURE__ */ new Set();
2763
2805
  for (const h of highlightDates) {
2764
2806
  set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
2765
2807
  }
2766
2808
  return set;
2767
2809
  }, [highlightDates]);
2768
- const handleSelect = React9.useCallback(
2810
+ const handleSelect = React10.useCallback(
2769
2811
  (date) => {
2770
2812
  onChange?.(date);
2771
2813
  },
@@ -2808,14 +2850,14 @@ var SingleDatePicker = (props) => {
2808
2850
  className: clsx_default("lib-xplat-datepicker", "single"),
2809
2851
  children: [
2810
2852
  /* @__PURE__ */ jsxs200("div", { className: "datepicker-header", children: [
2811
- /* @__PURE__ */ jsx312("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ jsx312(ChevronLeftIcon_default, {}) }),
2812
- /* @__PURE__ */ jsx312("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
2813
- /* @__PURE__ */ jsx312("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ jsx312(ChevronRightIcon_default, {}) })
2853
+ /* @__PURE__ */ jsx313("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ jsx313(ChevronLeftIcon_default, {}) }),
2854
+ /* @__PURE__ */ jsx313("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
2855
+ /* @__PURE__ */ jsx313("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ jsx313(ChevronRightIcon_default, {}) })
2814
2856
  ] }),
2815
2857
  /* @__PURE__ */ jsxs200("div", { className: "datepicker-body", children: [
2816
- pickerMode === "years" && /* @__PURE__ */ jsx312("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
2858
+ pickerMode === "years" && /* @__PURE__ */ jsx313("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
2817
2859
  const y = yearRangeStart + i;
2818
- return /* @__PURE__ */ jsx312(
2860
+ return /* @__PURE__ */ jsx313(
2819
2861
  "button",
2820
2862
  {
2821
2863
  type: "button",
@@ -2826,7 +2868,7 @@ var SingleDatePicker = (props) => {
2826
2868
  y
2827
2869
  );
2828
2870
  }) }),
2829
- pickerMode === "months" && /* @__PURE__ */ jsx312("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ jsx312(
2871
+ pickerMode === "months" && /* @__PURE__ */ jsx313("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ jsx313(
2830
2872
  "button",
2831
2873
  {
2832
2874
  type: "button",
@@ -2836,8 +2878,8 @@ var SingleDatePicker = (props) => {
2836
2878
  },
2837
2879
  i
2838
2880
  )) }),
2839
- pickerMode === "days" && /* @__PURE__ */ jsxs200(Fragment2, { children: [
2840
- /* @__PURE__ */ jsx312("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx312(
2881
+ pickerMode === "days" && /* @__PURE__ */ jsxs200(Fragment3, { children: [
2882
+ /* @__PURE__ */ jsx313("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx313(
2841
2883
  "div",
2842
2884
  {
2843
2885
  className: clsx_default(
@@ -2849,7 +2891,7 @@ var SingleDatePicker = (props) => {
2849
2891
  },
2850
2892
  label
2851
2893
  )) }),
2852
- /* @__PURE__ */ jsx312("div", { className: "datepicker-grid", children: days.map((day, idx) => {
2894
+ /* @__PURE__ */ jsx313("div", { className: "datepicker-grid", children: days.map((day, idx) => {
2853
2895
  const t = day.date.getTime();
2854
2896
  const disabled = t < minTime || t > maxTime;
2855
2897
  const selected = value ? isSameDay(day.date, value) : false;
@@ -2859,7 +2901,7 @@ var SingleDatePicker = (props) => {
2859
2901
  const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
2860
2902
  const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
2861
2903
  const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
2862
- return /* @__PURE__ */ jsx312(
2904
+ return /* @__PURE__ */ jsx313(
2863
2905
  DayCell2,
2864
2906
  {
2865
2907
  day,
@@ -2884,7 +2926,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
2884
2926
  var SingleDatePicker_default = SingleDatePicker;
2885
2927
 
2886
2928
  // src/components/DatePicker/InputDatePicker/index.tsx
2887
- import { jsx as jsx313, jsxs as jsxs201 } from "react/jsx-runtime";
2929
+ import { jsx as jsx314, jsxs as jsxs201 } from "react/jsx-runtime";
2888
2930
  var formatDate = (date) => {
2889
2931
  if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
2890
2932
  const y = date.getFullYear();
@@ -2894,8 +2936,8 @@ var formatDate = (date) => {
2894
2936
  };
2895
2937
  var InputDatePicker = (props) => {
2896
2938
  const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
2897
- const [isOpen, setIsOpen] = React10.useState(false);
2898
- const [tempDate, setTempDate] = React10.useState(value ?? /* @__PURE__ */ new Date());
2939
+ const [isOpen, setIsOpen] = React11.useState(false);
2940
+ const [tempDate, setTempDate] = React11.useState(value ?? /* @__PURE__ */ new Date());
2899
2941
  const handleOpen = () => {
2900
2942
  if (disabled) return;
2901
2943
  setTempDate(value ?? /* @__PURE__ */ new Date());
@@ -2912,18 +2954,18 @@ var InputDatePicker = (props) => {
2912
2954
  setIsOpen(false);
2913
2955
  };
2914
2956
  return /* @__PURE__ */ jsxs201("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
2915
- /* @__PURE__ */ jsx313("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ jsx313(
2957
+ /* @__PURE__ */ jsx314("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ jsx314(
2916
2958
  Input_default,
2917
2959
  {
2918
2960
  value: formatDate(value),
2919
2961
  placeholder,
2920
- suffix: /* @__PURE__ */ jsx313(CalenderIcon_default, {}),
2962
+ suffix: /* @__PURE__ */ jsx314(CalenderIcon_default, {}),
2921
2963
  disabled,
2922
2964
  readOnly: true
2923
2965
  }
2924
2966
  ) }),
2925
- /* @__PURE__ */ jsx313(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs201("div", { className: "lib-xplat-popup-datepicker-card", children: [
2926
- /* @__PURE__ */ jsx313("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ jsx313(
2967
+ /* @__PURE__ */ jsx314(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs201("div", { className: "lib-xplat-popup-datepicker-card", children: [
2968
+ /* @__PURE__ */ jsx314("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ jsx314(
2927
2969
  SingleDatePicker_default,
2928
2970
  {
2929
2971
  value: tempDate,
@@ -2934,8 +2976,8 @@ var InputDatePicker = (props) => {
2934
2976
  }
2935
2977
  ) }),
2936
2978
  /* @__PURE__ */ jsxs201("div", { className: "popup-datepicker-footer", children: [
2937
- /* @__PURE__ */ jsx313(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
2938
- /* @__PURE__ */ jsx313(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
2979
+ /* @__PURE__ */ jsx314(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
2980
+ /* @__PURE__ */ jsx314(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
2939
2981
  ] })
2940
2982
  ] }) })
2941
2983
  ] });
@@ -2944,20 +2986,20 @@ InputDatePicker.displayName = "InputDatePicker";
2944
2986
  var InputDatePicker_default = InputDatePicker;
2945
2987
 
2946
2988
  // src/components/DatePicker/PopupPicker/index.tsx
2947
- import React14 from "react";
2989
+ import React15 from "react";
2948
2990
 
2949
2991
  // src/components/DatePicker/RangePicker/index.tsx
2950
- import React13 from "react";
2992
+ import React14 from "react";
2951
2993
 
2952
2994
  // src/components/Tab/Tab.tsx
2953
- import React12 from "react";
2995
+ import React13 from "react";
2954
2996
 
2955
2997
  // src/components/Tab/TabItem.tsx
2956
- import React11 from "react";
2957
- import { jsx as jsx314 } from "react/jsx-runtime";
2958
- var TabItem = React11.forwardRef((props, ref) => {
2998
+ import React12 from "react";
2999
+ import { jsx as jsx315 } from "react/jsx-runtime";
3000
+ var TabItem = React12.forwardRef((props, ref) => {
2959
3001
  const { isActive, title, onClick } = props;
2960
- return /* @__PURE__ */ jsx314(
3002
+ return /* @__PURE__ */ jsx315(
2961
3003
  "div",
2962
3004
  {
2963
3005
  ref,
@@ -2971,25 +3013,25 @@ TabItem.displayName = "TabItem";
2971
3013
  var TabItem_default = TabItem;
2972
3014
 
2973
3015
  // src/components/Tab/Tab.tsx
2974
- import { jsx as jsx315, jsxs as jsxs202 } from "react/jsx-runtime";
3016
+ import { jsx as jsx316, jsxs as jsxs202 } from "react/jsx-runtime";
2975
3017
  var Tab = (props) => {
2976
3018
  const { activeIndex, onChange, tabs, type, size = "md" } = props;
2977
- const [underlineStyle, setUnderlineStyle] = React12.useState({
3019
+ const [underlineStyle, setUnderlineStyle] = React13.useState({
2978
3020
  left: 0,
2979
3021
  width: 0
2980
3022
  });
2981
- const itemRefs = React12.useRef([]);
3023
+ const itemRefs = React13.useRef([]);
2982
3024
  const handleChangeActiveTab = (tabItem, tabIdx) => {
2983
3025
  onChange(tabItem, tabIdx);
2984
3026
  };
2985
- React12.useEffect(() => {
3027
+ React13.useEffect(() => {
2986
3028
  const el = itemRefs.current[activeIndex];
2987
3029
  if (el) {
2988
3030
  setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
2989
3031
  }
2990
3032
  }, [activeIndex, tabs.length]);
2991
3033
  return /* @__PURE__ */ jsxs202("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
2992
- tabs.map((tab, idx) => /* @__PURE__ */ jsx315(
3034
+ tabs.map((tab, idx) => /* @__PURE__ */ jsx316(
2993
3035
  TabItem_default,
2994
3036
  {
2995
3037
  onClick: () => handleChangeActiveTab(tab, idx),
@@ -3001,7 +3043,7 @@ var Tab = (props) => {
3001
3043
  },
3002
3044
  `${tab.value}_${idx}`
3003
3045
  )),
3004
- type === "toggle" && /* @__PURE__ */ jsx315(
3046
+ type === "toggle" && /* @__PURE__ */ jsx316(
3005
3047
  "div",
3006
3048
  {
3007
3049
  className: "tab-toggle-underline",
@@ -3017,7 +3059,7 @@ Tab.displayName = "Tab";
3017
3059
  var Tab_default = Tab;
3018
3060
 
3019
3061
  // src/components/DatePicker/RangePicker/index.tsx
3020
- import { jsx as jsx316, jsxs as jsxs203 } from "react/jsx-runtime";
3062
+ import { jsx as jsx317, jsxs as jsxs203 } from "react/jsx-runtime";
3021
3063
  var RangePicker = (props) => {
3022
3064
  const {
3023
3065
  startDate,
@@ -3027,7 +3069,7 @@ var RangePicker = (props) => {
3027
3069
  maxDate,
3028
3070
  locale = "ko"
3029
3071
  } = props;
3030
- const [activeTab, setActiveTab] = React13.useState("start");
3072
+ const [activeTab, setActiveTab] = React14.useState("start");
3031
3073
  const handleStartChange = (date) => {
3032
3074
  if (!date) return;
3033
3075
  const newStart = date > endDate ? endDate : date;
@@ -3041,7 +3083,7 @@ var RangePicker = (props) => {
3041
3083
  const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
3042
3084
  const endMinDate = minDate && startDate > minDate ? startDate : startDate;
3043
3085
  return /* @__PURE__ */ jsxs203("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
3044
- /* @__PURE__ */ jsx316("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ jsx316(
3086
+ /* @__PURE__ */ jsx317("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ jsx317(
3045
3087
  Tab_default,
3046
3088
  {
3047
3089
  activeIndex: activeTab === "start" ? 0 : 1,
@@ -3055,7 +3097,7 @@ var RangePicker = (props) => {
3055
3097
  }
3056
3098
  ) }),
3057
3099
  /* @__PURE__ */ jsxs203("div", { className: "datepicker-range-panels", children: [
3058
- /* @__PURE__ */ jsx316(
3100
+ /* @__PURE__ */ jsx317(
3059
3101
  SingleDatePicker_default,
3060
3102
  {
3061
3103
  value: startDate,
@@ -3067,7 +3109,7 @@ var RangePicker = (props) => {
3067
3109
  locale
3068
3110
  }
3069
3111
  ),
3070
- /* @__PURE__ */ jsx316(
3112
+ /* @__PURE__ */ jsx317(
3071
3113
  SingleDatePicker_default,
3072
3114
  {
3073
3115
  value: endDate,
@@ -3080,7 +3122,7 @@ var RangePicker = (props) => {
3080
3122
  }
3081
3123
  )
3082
3124
  ] }),
3083
- /* @__PURE__ */ jsx316("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ jsx316(
3125
+ /* @__PURE__ */ jsx317("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ jsx317(
3084
3126
  SingleDatePicker_default,
3085
3127
  {
3086
3128
  value: startDate,
@@ -3091,7 +3133,7 @@ var RangePicker = (props) => {
3091
3133
  rangeEnd: endDate,
3092
3134
  locale
3093
3135
  }
3094
- ) : /* @__PURE__ */ jsx316(
3136
+ ) : /* @__PURE__ */ jsx317(
3095
3137
  SingleDatePicker_default,
3096
3138
  {
3097
3139
  value: endDate,
@@ -3109,10 +3151,10 @@ RangePicker.displayName = "RangePicker";
3109
3151
  var RangePicker_default = RangePicker;
3110
3152
 
3111
3153
  // src/components/DatePicker/PopupPicker/index.tsx
3112
- import { jsx as jsx317, jsxs as jsxs204 } from "react/jsx-runtime";
3154
+ import { jsx as jsx318, jsxs as jsxs204 } from "react/jsx-runtime";
3113
3155
  var PopupPicker = (props) => {
3114
3156
  const { component, type, locale } = props;
3115
- const [isOpen, setIsOpen] = React14.useState(false);
3157
+ const [isOpen, setIsOpen] = React15.useState(false);
3116
3158
  const handleClick = () => setIsOpen(true);
3117
3159
  const handleClose = () => setIsOpen(false);
3118
3160
  const handleSingleChange = (date) => {
@@ -3121,10 +3163,10 @@ var PopupPicker = (props) => {
3121
3163
  handleClose();
3122
3164
  };
3123
3165
  return /* @__PURE__ */ jsxs204("div", { className: "lib-xplat-popup-datepicker", children: [
3124
- React14.cloneElement(component, { onClick: handleClick }),
3125
- /* @__PURE__ */ jsx317(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs204("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
3166
+ React15.cloneElement(component, { onClick: handleClick }),
3167
+ /* @__PURE__ */ jsx318(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs204("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
3126
3168
  /* @__PURE__ */ jsxs204("div", { className: "popup-datepicker-content", children: [
3127
- type === "single" && /* @__PURE__ */ jsx317(
3169
+ type === "single" && /* @__PURE__ */ jsx318(
3128
3170
  SingleDatePicker_default,
3129
3171
  {
3130
3172
  value: props.value,
@@ -3134,7 +3176,7 @@ var PopupPicker = (props) => {
3134
3176
  locale
3135
3177
  }
3136
3178
  ),
3137
- type === "range" && /* @__PURE__ */ jsx317(
3179
+ type === "range" && /* @__PURE__ */ jsx318(
3138
3180
  RangePicker_default,
3139
3181
  {
3140
3182
  startDate: props.startDate,
@@ -3147,7 +3189,7 @@ var PopupPicker = (props) => {
3147
3189
  )
3148
3190
  ] }),
3149
3191
  /* @__PURE__ */ jsxs204("div", { className: "popup-datepicker-footer", children: [
3150
- /* @__PURE__ */ jsx317(
3192
+ /* @__PURE__ */ jsx318(
3151
3193
  Button_default,
3152
3194
  {
3153
3195
  type: "secondary",
@@ -3155,7 +3197,7 @@ var PopupPicker = (props) => {
3155
3197
  children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
3156
3198
  }
3157
3199
  ),
3158
- /* @__PURE__ */ jsx317(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
3200
+ /* @__PURE__ */ jsx318(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
3159
3201
  ] })
3160
3202
  ] }) })
3161
3203
  ] });
@@ -3164,10 +3206,10 @@ PopupPicker.displayName = "PopupPicker";
3164
3206
  var PopupPicker_default = PopupPicker;
3165
3207
 
3166
3208
  // src/components/Divider/Divider.tsx
3167
- import { jsx as jsx318 } from "react/jsx-runtime";
3209
+ import { jsx as jsx319 } from "react/jsx-runtime";
3168
3210
  var Divider = (props) => {
3169
3211
  const { orientation = "horizontal" } = props;
3170
- return /* @__PURE__ */ jsx318(
3212
+ return /* @__PURE__ */ jsx319(
3171
3213
  "div",
3172
3214
  {
3173
3215
  className: clsx_default("lib-xplat-divider", orientation),
@@ -3180,15 +3222,15 @@ Divider.displayName = "Divider";
3180
3222
  var Divider_default = Divider;
3181
3223
 
3182
3224
  // src/components/Drawer/Drawer.tsx
3183
- import React15 from "react";
3225
+ import React16 from "react";
3184
3226
  import { createPortal as createPortal2 } from "react-dom";
3185
- import { jsx as jsx319, jsxs as jsxs205 } from "react/jsx-runtime";
3227
+ import { jsx as jsx320, jsxs as jsxs205 } from "react/jsx-runtime";
3186
3228
  var ANIMATION_DURATION_MS2 = 250;
3187
3229
  var Drawer = (props) => {
3188
3230
  const { isOpen, onClose, placement = "right", width = 320, title, children } = props;
3189
- const [mounted, setMounted] = React15.useState(false);
3190
- const [visible, setVisible] = React15.useState(false);
3191
- React15.useEffect(() => {
3231
+ const [mounted, setMounted] = React16.useState(false);
3232
+ const [visible, setVisible] = React16.useState(false);
3233
+ React16.useEffect(() => {
3192
3234
  if (isOpen) {
3193
3235
  setMounted(true);
3194
3236
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -3203,7 +3245,7 @@ var Drawer = (props) => {
3203
3245
  const stateClass = visible ? "enter" : "exit";
3204
3246
  const widthValue = typeof width === "number" ? `${width}px` : width;
3205
3247
  return createPortal2(
3206
- /* @__PURE__ */ jsx319(
3248
+ /* @__PURE__ */ jsx320(
3207
3249
  "div",
3208
3250
  {
3209
3251
  className: clsx_default("lib-xplat-drawer-overlay", stateClass),
@@ -3218,10 +3260,10 @@ var Drawer = (props) => {
3218
3260
  onClick: (e) => e.stopPropagation(),
3219
3261
  children: [
3220
3262
  title && /* @__PURE__ */ jsxs205("div", { className: "drawer-header", children: [
3221
- /* @__PURE__ */ jsx319("span", { className: "drawer-title", children: title }),
3222
- /* @__PURE__ */ jsx319("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
3263
+ /* @__PURE__ */ jsx320("span", { className: "drawer-title", children: title }),
3264
+ /* @__PURE__ */ jsx320("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
3223
3265
  ] }),
3224
- /* @__PURE__ */ jsx319("div", { className: "drawer-body", children })
3266
+ /* @__PURE__ */ jsx320("div", { className: "drawer-body", children })
3225
3267
  ]
3226
3268
  }
3227
3269
  )
@@ -3234,16 +3276,16 @@ Drawer.displayName = "Drawer";
3234
3276
  var Drawer_default = Drawer;
3235
3277
 
3236
3278
  // src/components/Dropdown/Dropdown.tsx
3237
- import React18 from "react";
3279
+ import React19 from "react";
3238
3280
 
3239
3281
  // src/tokens/hooks/useAutoPosition.ts
3240
- import React16 from "react";
3282
+ import React17 from "react";
3241
3283
  var useAutoPosition = (triggerRef, popRef, enabled = true) => {
3242
- const [position, setPosition] = React16.useState({
3284
+ const [position, setPosition] = React17.useState({
3243
3285
  position: {},
3244
3286
  direction: "bottom"
3245
3287
  });
3246
- const calculatePosition = React16.useCallback(() => {
3288
+ const calculatePosition = React17.useCallback(() => {
3247
3289
  if (!triggerRef.current || !popRef.current) return;
3248
3290
  const triggerRect = triggerRef.current.getBoundingClientRect();
3249
3291
  const popRect = popRef.current.getBoundingClientRect();
@@ -3267,12 +3309,15 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
3267
3309
  direction
3268
3310
  });
3269
3311
  }, [triggerRef, popRef]);
3270
- React16.useEffect(() => {
3312
+ React17.useEffect(() => {
3271
3313
  if (!enabled) return;
3272
- calculatePosition();
3314
+ const raf = requestAnimationFrame(() => {
3315
+ calculatePosition();
3316
+ });
3273
3317
  window.addEventListener("resize", calculatePosition);
3274
3318
  window.addEventListener("scroll", calculatePosition, true);
3275
3319
  return () => {
3320
+ cancelAnimationFrame(raf);
3276
3321
  window.removeEventListener("resize", calculatePosition);
3277
3322
  window.removeEventListener("scroll", calculatePosition, true);
3278
3323
  };
@@ -3282,9 +3327,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
3282
3327
  var useAutoPosition_default = useAutoPosition;
3283
3328
 
3284
3329
  // src/tokens/hooks/useClickOutside.ts
3285
- import React17 from "react";
3330
+ import React18 from "react";
3286
3331
  var useClickOutside = (refs, handler, enabled = true) => {
3287
- React17.useEffect(() => {
3332
+ React18.useEffect(() => {
3288
3333
  if (!enabled) return;
3289
3334
  const refArray = Array.isArray(refs) ? refs : [refs];
3290
3335
  const listener = (event) => {
@@ -3307,17 +3352,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
3307
3352
  var useClickOutside_default = useClickOutside;
3308
3353
 
3309
3354
  // src/components/Dropdown/Dropdown.tsx
3310
- import { jsx as jsx320, jsxs as jsxs206 } from "react/jsx-runtime";
3355
+ import { jsx as jsx321, jsxs as jsxs206 } from "react/jsx-runtime";
3311
3356
  var Dropdown = (props) => {
3312
3357
  const { items, children } = props;
3313
- const [isOpen, setIsOpen] = React18.useState(false);
3314
- const [mounted, setMounted] = React18.useState(false);
3315
- const [visible, setVisible] = React18.useState(false);
3316
- const triggerRef = React18.useRef(null);
3317
- const menuRef = React18.useRef(null);
3318
- const { position, direction } = useAutoPosition_default(triggerRef, menuRef, isOpen);
3319
- useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false));
3320
- React18.useEffect(() => {
3358
+ const [isOpen, setIsOpen] = React19.useState(false);
3359
+ const [mounted, setMounted] = React19.useState(false);
3360
+ const [visible, setVisible] = React19.useState(false);
3361
+ const triggerRef = React19.useRef(null);
3362
+ const menuRef = React19.useRef(null);
3363
+ const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
3364
+ useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
3365
+ React19.useEffect(() => {
3321
3366
  if (isOpen) {
3322
3367
  setMounted(true);
3323
3368
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -3333,7 +3378,7 @@ var Dropdown = (props) => {
3333
3378
  setIsOpen(false);
3334
3379
  };
3335
3380
  return /* @__PURE__ */ jsxs206("div", { className: "lib-xplat-dropdown", children: [
3336
- /* @__PURE__ */ jsx320(
3381
+ /* @__PURE__ */ jsx321(
3337
3382
  "div",
3338
3383
  {
3339
3384
  ref: triggerRef,
@@ -3342,14 +3387,14 @@ var Dropdown = (props) => {
3342
3387
  children
3343
3388
  }
3344
3389
  ),
3345
- mounted && /* @__PURE__ */ jsx320(
3390
+ mounted && /* @__PURE__ */ jsx321(Portal_default, { children: /* @__PURE__ */ jsx321(
3346
3391
  "div",
3347
3392
  {
3348
3393
  ref: menuRef,
3349
- className: clsx_default("dropdown-menu", direction, { visible }),
3394
+ className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
3350
3395
  style: { top: position.top, left: position.left },
3351
3396
  role: "menu",
3352
- children: items.map((item) => /* @__PURE__ */ jsx320(
3397
+ children: items.map((item) => /* @__PURE__ */ jsx321(
3353
3398
  "button",
3354
3399
  {
3355
3400
  className: clsx_default("dropdown-item", {
@@ -3364,30 +3409,30 @@ var Dropdown = (props) => {
3364
3409
  item.key
3365
3410
  ))
3366
3411
  }
3367
- )
3412
+ ) })
3368
3413
  ] });
3369
3414
  };
3370
3415
  Dropdown.displayName = "Dropdown";
3371
3416
  var Dropdown_default = Dropdown;
3372
3417
 
3373
3418
  // src/components/EmptyState/EmptyState.tsx
3374
- import { jsx as jsx321, jsxs as jsxs207 } from "react/jsx-runtime";
3419
+ import { jsx as jsx322, jsxs as jsxs207 } from "react/jsx-runtime";
3375
3420
  var EmptyState = (props) => {
3376
3421
  const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
3377
3422
  return /* @__PURE__ */ jsxs207("div", { className: "lib-xplat-empty-state", children: [
3378
- icon && /* @__PURE__ */ jsx321("div", { className: "empty-icon", children: icon }),
3379
- !icon && /* @__PURE__ */ jsx321("div", { className: "empty-icon", children: /* @__PURE__ */ jsx321("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx321("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" }) }) }),
3380
- /* @__PURE__ */ jsx321("p", { className: "empty-title", children: title }),
3381
- description && /* @__PURE__ */ jsx321("p", { className: "empty-description", children: description }),
3382
- action && /* @__PURE__ */ jsx321("div", { className: "empty-action", children: action })
3423
+ icon && /* @__PURE__ */ jsx322("div", { className: "empty-icon", children: icon }),
3424
+ !icon && /* @__PURE__ */ jsx322("div", { className: "empty-icon", children: /* @__PURE__ */ jsx322("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx322("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" }) }) }),
3425
+ /* @__PURE__ */ jsx322("p", { className: "empty-title", children: title }),
3426
+ description && /* @__PURE__ */ jsx322("p", { className: "empty-description", children: description }),
3427
+ action && /* @__PURE__ */ jsx322("div", { className: "empty-action", children: action })
3383
3428
  ] });
3384
3429
  };
3385
3430
  EmptyState.displayName = "EmptyState";
3386
3431
  var EmptyState_default = EmptyState;
3387
3432
 
3388
3433
  // src/components/FileUpload/FileUpload.tsx
3389
- import React19 from "react";
3390
- import { jsx as jsx322, jsxs as jsxs208 } from "react/jsx-runtime";
3434
+ import React20 from "react";
3435
+ import { jsx as jsx323, jsxs as jsxs208 } from "react/jsx-runtime";
3391
3436
  var FileUpload = (props) => {
3392
3437
  const {
3393
3438
  accept,
@@ -3397,8 +3442,8 @@ var FileUpload = (props) => {
3397
3442
  label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
3398
3443
  description
3399
3444
  } = props;
3400
- const [isDragOver, setIsDragOver] = React19.useState(false);
3401
- const inputRef = React19.useRef(null);
3445
+ const [isDragOver, setIsDragOver] = React20.useState(false);
3446
+ const inputRef = React20.useRef(null);
3402
3447
  const handleFiles = (fileList) => {
3403
3448
  let files = Array.from(fileList);
3404
3449
  if (maxSize) {
@@ -3437,7 +3482,7 @@ var FileUpload = (props) => {
3437
3482
  onDragLeave: handleDragLeave,
3438
3483
  onClick: () => inputRef.current?.click(),
3439
3484
  children: [
3440
- /* @__PURE__ */ jsx322(
3485
+ /* @__PURE__ */ jsx323(
3441
3486
  "input",
3442
3487
  {
3443
3488
  ref: inputRef,
@@ -3447,9 +3492,9 @@ var FileUpload = (props) => {
3447
3492
  onChange: handleChange
3448
3493
  }
3449
3494
  ),
3450
- /* @__PURE__ */ jsx322("div", { className: "upload-icon", children: /* @__PURE__ */ jsx322(UploadIcon_default, {}) }),
3451
- /* @__PURE__ */ jsx322("p", { className: "upload-label", children: label }),
3452
- description && /* @__PURE__ */ jsx322("p", { className: "upload-description", children: description })
3495
+ /* @__PURE__ */ jsx323("div", { className: "upload-icon", children: /* @__PURE__ */ jsx323(UploadIcon_default, {}) }),
3496
+ /* @__PURE__ */ jsx323("p", { className: "upload-label", children: label }),
3497
+ description && /* @__PURE__ */ jsx323("p", { className: "upload-description", children: description })
3453
3498
  ]
3454
3499
  }
3455
3500
  );
@@ -3458,10 +3503,10 @@ FileUpload.displayName = "FileUpload";
3458
3503
  var FileUpload_default = FileUpload;
3459
3504
 
3460
3505
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
3461
- import React21 from "react";
3506
+ import React22 from "react";
3462
3507
 
3463
3508
  // src/components/HtmlTypeWriter/utils.ts
3464
- import React20 from "react";
3509
+ import React21 from "react";
3465
3510
  var voidTags = /* @__PURE__ */ new Set([
3466
3511
  "br",
3467
3512
  "img",
@@ -3529,41 +3574,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
3529
3574
  props[attr.name] = attr.value;
3530
3575
  });
3531
3576
  if (voidTags.has(tag)) {
3532
- return React20.createElement(tag, props);
3577
+ return React21.createElement(tag, props);
3533
3578
  }
3534
3579
  const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
3535
- return React20.createElement(tag, props, ...children);
3580
+ return React21.createElement(tag, props, ...children);
3536
3581
  };
3537
3582
  var htmlToReactProgressive = (root, typedLen, rangeMap) => {
3538
3583
  const nodes = Array.from(root.childNodes).map((child, idx) => {
3539
3584
  const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
3540
- return node == null ? null : React20.createElement(React20.Fragment, { key: idx }, node);
3585
+ return node == null ? null : React21.createElement(React21.Fragment, { key: idx }, node);
3541
3586
  }).filter(Boolean);
3542
3587
  return nodes.length === 0 ? null : nodes;
3543
3588
  };
3544
3589
 
3545
3590
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
3546
- import { jsx as jsx323 } from "react/jsx-runtime";
3591
+ import { jsx as jsx324 } from "react/jsx-runtime";
3547
3592
  var HtmlTypeWriter = ({
3548
3593
  html,
3549
3594
  duration = 20,
3550
3595
  onDone,
3551
3596
  onChange
3552
3597
  }) => {
3553
- const [typedLen, setTypedLen] = React21.useState(0);
3554
- const doneCalledRef = React21.useRef(false);
3555
- const { doc, rangeMap, totalLength } = React21.useMemo(() => {
3598
+ const [typedLen, setTypedLen] = React22.useState(0);
3599
+ const doneCalledRef = React22.useRef(false);
3600
+ const { doc, rangeMap, totalLength } = React22.useMemo(() => {
3556
3601
  if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
3557
3602
  const decoded = decodeHtmlEntities(html);
3558
3603
  const doc2 = new DOMParser().parseFromString(decoded, "text/html");
3559
3604
  const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
3560
3605
  return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
3561
3606
  }, [html]);
3562
- React21.useEffect(() => {
3607
+ React22.useEffect(() => {
3563
3608
  setTypedLen(0);
3564
3609
  doneCalledRef.current = false;
3565
3610
  }, [html]);
3566
- React21.useEffect(() => {
3611
+ React22.useEffect(() => {
3567
3612
  if (!totalLength) return;
3568
3613
  if (typedLen >= totalLength) return;
3569
3614
  const timer = window.setInterval(() => {
@@ -3571,33 +3616,33 @@ var HtmlTypeWriter = ({
3571
3616
  }, duration);
3572
3617
  return () => window.clearInterval(timer);
3573
3618
  }, [typedLen, totalLength, duration]);
3574
- React21.useEffect(() => {
3619
+ React22.useEffect(() => {
3575
3620
  if (typedLen > 0 && typedLen < totalLength) {
3576
3621
  onChange?.();
3577
3622
  }
3578
3623
  }, [typedLen, totalLength, onChange]);
3579
- React21.useEffect(() => {
3624
+ React22.useEffect(() => {
3580
3625
  if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
3581
3626
  doneCalledRef.current = true;
3582
3627
  onDone?.();
3583
3628
  }
3584
3629
  }, [typedLen, totalLength, onDone]);
3585
- const parsed = React21.useMemo(
3630
+ const parsed = React22.useMemo(
3586
3631
  () => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
3587
3632
  [doc, typedLen, rangeMap]
3588
3633
  );
3589
- return /* @__PURE__ */ jsx323("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
3634
+ return /* @__PURE__ */ jsx324("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
3590
3635
  };
3591
3636
  HtmlTypeWriter.displayName = "HtmlTypeWriter";
3592
3637
  var HtmlTypeWriter_default = HtmlTypeWriter;
3593
3638
 
3594
3639
  // src/components/ImageSelector/ImageSelector.tsx
3595
- import React22 from "react";
3596
- import { jsx as jsx324, jsxs as jsxs209 } from "react/jsx-runtime";
3640
+ import React23 from "react";
3641
+ import { jsx as jsx325, jsxs as jsxs209 } from "react/jsx-runtime";
3597
3642
  var ImageSelector = (props) => {
3598
3643
  const { value, label, onChange } = props;
3599
- const [previewUrl, setPreviewUrl] = React22.useState();
3600
- React22.useEffect(() => {
3644
+ const [previewUrl, setPreviewUrl] = React23.useState();
3645
+ React23.useEffect(() => {
3601
3646
  if (!value) {
3602
3647
  setPreviewUrl(void 0);
3603
3648
  return;
@@ -3606,7 +3651,7 @@ var ImageSelector = (props) => {
3606
3651
  setPreviewUrl(url);
3607
3652
  return () => URL.revokeObjectURL(url);
3608
3653
  }, [value]);
3609
- const inputRef = React22.useRef(null);
3654
+ const inputRef = React23.useRef(null);
3610
3655
  const handleFileChange = (e) => {
3611
3656
  const selectedFile = e.target.files?.[0];
3612
3657
  if (selectedFile) {
@@ -3620,7 +3665,7 @@ var ImageSelector = (props) => {
3620
3665
  inputRef.current?.click();
3621
3666
  };
3622
3667
  return /* @__PURE__ */ jsxs209("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
3623
- /* @__PURE__ */ jsx324(
3668
+ /* @__PURE__ */ jsx325(
3624
3669
  "input",
3625
3670
  {
3626
3671
  type: "file",
@@ -3631,12 +3676,12 @@ var ImageSelector = (props) => {
3631
3676
  }
3632
3677
  ),
3633
3678
  value && /* @__PURE__ */ jsxs209("div", { className: "action-bar", children: [
3634
- /* @__PURE__ */ jsx324("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ jsx324(UploadIcon_default, {}) }),
3635
- /* @__PURE__ */ jsx324("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ jsx324(DeleteIcon_default, {}) })
3679
+ /* @__PURE__ */ jsx325("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ jsx325(UploadIcon_default, {}) }),
3680
+ /* @__PURE__ */ jsx325("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ jsx325(DeleteIcon_default, {}) })
3636
3681
  ] }),
3637
- /* @__PURE__ */ jsx324("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx324("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs209("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
3638
- /* @__PURE__ */ jsx324("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx324(ImageIcon_default, {}) }),
3639
- /* @__PURE__ */ jsx324("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
3682
+ /* @__PURE__ */ jsx325("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx325("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs209("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
3683
+ /* @__PURE__ */ jsx325("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx325(ImageIcon_default, {}) }),
3684
+ /* @__PURE__ */ jsx325("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
3640
3685
  ] }) })
3641
3686
  ] });
3642
3687
  };
@@ -3644,7 +3689,7 @@ ImageSelector.displayName = "ImageSelector";
3644
3689
  var ImageSelector_default = ImageSelector;
3645
3690
 
3646
3691
  // src/components/Pagination/Pagination.tsx
3647
- import { jsx as jsx325, jsxs as jsxs210 } from "react/jsx-runtime";
3692
+ import { jsx as jsx326, jsxs as jsxs210 } from "react/jsx-runtime";
3648
3693
  var getPageRange = (current, totalPages, siblingCount) => {
3649
3694
  const totalNumbers = siblingCount * 2 + 5;
3650
3695
  if (totalPages <= totalNumbers) {
@@ -3688,18 +3733,18 @@ var Pagination = (props) => {
3688
3733
  }
3689
3734
  };
3690
3735
  return /* @__PURE__ */ jsxs210("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
3691
- /* @__PURE__ */ jsx325(
3736
+ /* @__PURE__ */ jsx326(
3692
3737
  "button",
3693
3738
  {
3694
3739
  className: "page-btn prev",
3695
3740
  disabled: current <= 1,
3696
3741
  onClick: () => handleClick(current - 1),
3697
3742
  "aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
3698
- children: /* @__PURE__ */ jsx325(ChevronLeftIcon_default, {})
3743
+ children: /* @__PURE__ */ jsx326(ChevronLeftIcon_default, {})
3699
3744
  }
3700
3745
  ),
3701
3746
  pages.map(
3702
- (page, i) => page === "..." ? /* @__PURE__ */ jsx325("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ jsx325(
3747
+ (page, i) => page === "..." ? /* @__PURE__ */ jsx326("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ jsx326(
3703
3748
  "button",
3704
3749
  {
3705
3750
  className: clsx_default("page-btn", { active: page === current }),
@@ -3710,14 +3755,14 @@ var Pagination = (props) => {
3710
3755
  page
3711
3756
  )
3712
3757
  ),
3713
- /* @__PURE__ */ jsx325(
3758
+ /* @__PURE__ */ jsx326(
3714
3759
  "button",
3715
3760
  {
3716
3761
  className: "page-btn next",
3717
3762
  disabled: current >= totalPages,
3718
3763
  onClick: () => handleClick(current + 1),
3719
3764
  "aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
3720
- children: /* @__PURE__ */ jsx325(ChevronRightIcon_default, {})
3765
+ children: /* @__PURE__ */ jsx326(ChevronRightIcon_default, {})
3721
3766
  }
3722
3767
  )
3723
3768
  ] });
@@ -3726,17 +3771,17 @@ Pagination.displayName = "Pagination";
3726
3771
  var Pagination_default = Pagination;
3727
3772
 
3728
3773
  // src/components/PopOver/PopOver.tsx
3729
- import React23 from "react";
3730
- import { jsx as jsx326, jsxs as jsxs211 } from "react/jsx-runtime";
3774
+ import React24 from "react";
3775
+ import { jsx as jsx327, jsxs as jsxs211 } from "react/jsx-runtime";
3731
3776
  var PopOver = (props) => {
3732
3777
  const { children, isOpen, onClose, PopOverEl } = props;
3733
- const popRef = React23.useRef(null);
3734
- const triggerRef = React23.useRef(null);
3735
- const [localOpen, setLocalOpen] = React23.useState(false);
3736
- const [eventTrigger, setEventTrigger] = React23.useState(false);
3778
+ const popRef = React24.useRef(null);
3779
+ const triggerRef = React24.useRef(null);
3780
+ const [localOpen, setLocalOpen] = React24.useState(false);
3781
+ const [eventTrigger, setEventTrigger] = React24.useState(false);
3737
3782
  useClickOutside_default([popRef, triggerRef], onClose, isOpen);
3738
3783
  const position = useAutoPosition_default(triggerRef, popRef, localOpen);
3739
- React23.useEffect(() => {
3784
+ React24.useEffect(() => {
3740
3785
  if (isOpen) {
3741
3786
  setLocalOpen(isOpen);
3742
3787
  setTimeout(() => {
@@ -3759,11 +3804,11 @@ var PopOver = (props) => {
3759
3804
  },
3760
3805
  children: [
3761
3806
  children,
3762
- localOpen && /* @__PURE__ */ jsx326(
3807
+ localOpen && /* @__PURE__ */ jsx327(Portal_default, { children: /* @__PURE__ */ jsx327(
3763
3808
  "div",
3764
3809
  {
3765
3810
  className: clsx_default(
3766
- "content-wrap",
3811
+ "lib-xplat-pop-over-content",
3767
3812
  position.direction,
3768
3813
  eventTrigger && "visible"
3769
3814
  ),
@@ -3773,7 +3818,7 @@ var PopOver = (props) => {
3773
3818
  },
3774
3819
  children: PopOverEl
3775
3820
  }
3776
- )
3821
+ ) })
3777
3822
  ]
3778
3823
  }
3779
3824
  );
@@ -3782,7 +3827,7 @@ PopOver.displayName = "PopOver";
3782
3827
  var PopOver_default = PopOver;
3783
3828
 
3784
3829
  // src/components/Progress/Progress.tsx
3785
- import { jsx as jsx327, jsxs as jsxs212 } from "react/jsx-runtime";
3830
+ import { jsx as jsx328, jsxs as jsxs212 } from "react/jsx-runtime";
3786
3831
  var Progress = (props) => {
3787
3832
  const {
3788
3833
  value,
@@ -3793,7 +3838,7 @@ var Progress = (props) => {
3793
3838
  } = props;
3794
3839
  const percentage = Math.min(100, Math.max(0, value / max * 100));
3795
3840
  return /* @__PURE__ */ jsxs212("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
3796
- /* @__PURE__ */ jsx327(
3841
+ /* @__PURE__ */ jsx328(
3797
3842
  "div",
3798
3843
  {
3799
3844
  className: "track",
@@ -3801,7 +3846,7 @@ var Progress = (props) => {
3801
3846
  "aria-valuenow": value,
3802
3847
  "aria-valuemin": 0,
3803
3848
  "aria-valuemax": max,
3804
- children: /* @__PURE__ */ jsx327(
3849
+ children: /* @__PURE__ */ jsx328(
3805
3850
  "div",
3806
3851
  {
3807
3852
  className: "bar",
@@ -3820,17 +3865,17 @@ Progress.displayName = "Progress";
3820
3865
  var Progress_default = Progress;
3821
3866
 
3822
3867
  // src/components/Radio/RadioGroupContext.tsx
3823
- import React24 from "react";
3824
- var RadioGroupContext = React24.createContext(
3868
+ import React25 from "react";
3869
+ var RadioGroupContext = React25.createContext(
3825
3870
  null
3826
3871
  );
3827
3872
  var useRadioGroupContext = () => {
3828
- return React24.useContext(RadioGroupContext);
3873
+ return React25.useContext(RadioGroupContext);
3829
3874
  };
3830
3875
  var RadioGroupContext_default = RadioGroupContext;
3831
3876
 
3832
3877
  // src/components/Radio/Radio.tsx
3833
- import { jsx as jsx328, jsxs as jsxs213 } from "react/jsx-runtime";
3878
+ import { jsx as jsx329, jsxs as jsxs213 } from "react/jsx-runtime";
3834
3879
  var Radio = (props) => {
3835
3880
  const {
3836
3881
  label,
@@ -3858,18 +3903,18 @@ var Radio = (props) => {
3858
3903
  localChecked ? "checked" : void 0
3859
3904
  ),
3860
3905
  children: [
3861
- /* @__PURE__ */ jsx328("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
3862
- /* @__PURE__ */ jsx328(
3906
+ /* @__PURE__ */ jsx329("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
3907
+ /* @__PURE__ */ jsx329(
3863
3908
  "div",
3864
3909
  {
3865
3910
  className: clsx_default(
3866
3911
  "circle",
3867
3912
  localChecked ? "checked" : void 0
3868
3913
  ),
3869
- children: localChecked && /* @__PURE__ */ jsx328("div", { className: "inner-circle" })
3914
+ children: localChecked && /* @__PURE__ */ jsx329("div", { className: "inner-circle" })
3870
3915
  }
3871
3916
  ),
3872
- label && /* @__PURE__ */ jsx328("span", { children: label })
3917
+ label && /* @__PURE__ */ jsx329("span", { children: label })
3873
3918
  ]
3874
3919
  }
3875
3920
  );
@@ -3878,28 +3923,28 @@ Radio.displayName = "Radio";
3878
3923
  var Radio_default = Radio;
3879
3924
 
3880
3925
  // src/components/Radio/RadioGroup.tsx
3881
- import { Fragment as Fragment3, jsx as jsx329 } from "react/jsx-runtime";
3926
+ import { Fragment as Fragment4, jsx as jsx330 } from "react/jsx-runtime";
3882
3927
  var RadioGroup = (props) => {
3883
3928
  const { children, ...rest } = props;
3884
- return /* @__PURE__ */ jsx329(Fragment3, { children: /* @__PURE__ */ jsx329(RadioGroupContext_default.Provider, { value: rest, children }) });
3929
+ return /* @__PURE__ */ jsx330(Fragment4, { children: /* @__PURE__ */ jsx330(RadioGroupContext_default.Provider, { value: rest, children }) });
3885
3930
  };
3886
3931
  RadioGroup.displayName = "RadioGroup";
3887
3932
  var RadioGroup_default = RadioGroup;
3888
3933
 
3889
3934
  // src/components/Select/Select.tsx
3890
- import React27 from "react";
3935
+ import React28 from "react";
3891
3936
 
3892
3937
  // src/components/Select/context.ts
3893
- import React25 from "react";
3894
- var SelectContext = React25.createContext(null);
3938
+ import React26 from "react";
3939
+ var SelectContext = React26.createContext(null);
3895
3940
  var context_default = SelectContext;
3896
3941
 
3897
3942
  // src/components/Select/SelectItem.tsx
3898
- import React26 from "react";
3899
- import { jsx as jsx330 } from "react/jsx-runtime";
3943
+ import React27 from "react";
3944
+ import { jsx as jsx331 } from "react/jsx-runtime";
3900
3945
  var SelectItem = (props) => {
3901
3946
  const { children, value, onClick, disabled = false } = props;
3902
- const ctx = React26.useContext(context_default);
3947
+ const ctx = React27.useContext(context_default);
3903
3948
  const handleClick = (e) => {
3904
3949
  e.preventDefault();
3905
3950
  e.stopPropagation();
@@ -3908,7 +3953,7 @@ var SelectItem = (props) => {
3908
3953
  ctx?.close();
3909
3954
  onClick?.();
3910
3955
  };
3911
- return /* @__PURE__ */ jsx330(
3956
+ return /* @__PURE__ */ jsx331(
3912
3957
  "div",
3913
3958
  {
3914
3959
  className: clsx_default("select-item", disabled && "disabled"),
@@ -3929,7 +3974,7 @@ SelectItem.displayName = "Select.Item";
3929
3974
  var SelectItem_default = SelectItem;
3930
3975
 
3931
3976
  // src/components/Select/Select.tsx
3932
- import { jsx as jsx331, jsxs as jsxs214 } from "react/jsx-runtime";
3977
+ import { jsx as jsx332, jsxs as jsxs214 } from "react/jsx-runtime";
3933
3978
  var ANIMATION_DURATION_MS3 = 200;
3934
3979
  var SelectRoot = (props) => {
3935
3980
  const {
@@ -3941,26 +3986,26 @@ var SelectRoot = (props) => {
3941
3986
  error = false,
3942
3987
  size = "md"
3943
3988
  } = props;
3944
- const itemChildren = React27.Children.toArray(children).filter(
3945
- (child) => React27.isValidElement(child) && child.type === SelectItem_default
3989
+ const itemChildren = React28.Children.toArray(children).filter(
3990
+ (child) => React28.isValidElement(child) && child.type === SelectItem_default
3946
3991
  );
3947
3992
  const isControlled = valueProp !== void 0;
3948
- const [isOpen, setOpen] = React27.useState(false);
3949
- const [uncontrolledLabel, setUncontrolledLabel] = React27.useState(null);
3950
- const controlledLabel = React27.useMemo(() => {
3993
+ const [isOpen, setOpen] = React28.useState(false);
3994
+ const [uncontrolledLabel, setUncontrolledLabel] = React28.useState(null);
3995
+ const controlledLabel = React28.useMemo(() => {
3951
3996
  if (!isControlled) return null;
3952
3997
  const match = itemChildren.find((child) => child.props.value === valueProp);
3953
3998
  return match ? match.props.children : null;
3954
3999
  }, [isControlled, valueProp, itemChildren]);
3955
4000
  const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
3956
- const triggerRef = React27.useRef(null);
3957
- const contentRef = React27.useRef(null);
3958
- const [mounted, setMounted] = React27.useState(false);
3959
- const [visible, setVisible] = React27.useState(false);
3960
- React27.useEffect(() => {
4001
+ const triggerRef = React28.useRef(null);
4002
+ const contentRef = React28.useRef(null);
4003
+ const [mounted, setMounted] = React28.useState(false);
4004
+ const [visible, setVisible] = React28.useState(false);
4005
+ React28.useEffect(() => {
3961
4006
  if (disabled && isOpen) setOpen(false);
3962
4007
  }, [disabled, isOpen]);
3963
- React27.useEffect(() => {
4008
+ React28.useEffect(() => {
3964
4009
  if (isOpen) {
3965
4010
  setMounted(true);
3966
4011
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -3970,12 +4015,12 @@ var SelectRoot = (props) => {
3970
4015
  const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
3971
4016
  return () => clearTimeout(t);
3972
4017
  }, [isOpen]);
3973
- const open = React27.useCallback(() => setOpen(true), []);
3974
- const close = React27.useCallback(() => setOpen(false), []);
3975
- const toggle = React27.useCallback(() => setOpen((prev) => !prev), []);
4018
+ const open = React28.useCallback(() => setOpen(true), []);
4019
+ const close = React28.useCallback(() => setOpen(false), []);
4020
+ const toggle = React28.useCallback(() => setOpen((prev) => !prev), []);
3976
4021
  useClickOutside_default([contentRef, triggerRef], close, isOpen);
3977
4022
  const position = useAutoPosition_default(triggerRef, contentRef, mounted);
3978
- const setSelected = React27.useCallback(
4023
+ const setSelected = React28.useCallback(
3979
4024
  (label, itemValue) => {
3980
4025
  if (!isControlled) {
3981
4026
  setUncontrolledLabel(label);
@@ -3984,7 +4029,7 @@ var SelectRoot = (props) => {
3984
4029
  },
3985
4030
  [isControlled, onChange]
3986
4031
  );
3987
- const ctxValue = React27.useMemo(
4032
+ const ctxValue = React28.useMemo(
3988
4033
  () => ({
3989
4034
  isOpen,
3990
4035
  mounted,
@@ -4005,7 +4050,7 @@ var SelectRoot = (props) => {
4005
4050
  if (disabled) return;
4006
4051
  toggle();
4007
4052
  };
4008
- return /* @__PURE__ */ jsx331(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs214(
4053
+ return /* @__PURE__ */ jsx332(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs214(
4009
4054
  "div",
4010
4055
  {
4011
4056
  className: clsx_default(
@@ -4040,7 +4085,7 @@ var SelectRoot = (props) => {
4040
4085
  }
4041
4086
  },
4042
4087
  children: [
4043
- /* @__PURE__ */ jsx331(
4088
+ /* @__PURE__ */ jsx332(
4044
4089
  "span",
4045
4090
  {
4046
4091
  className: clsx_default(
@@ -4050,27 +4095,27 @@ var SelectRoot = (props) => {
4050
4095
  children: selectedLabel ?? placeholder
4051
4096
  }
4052
4097
  ),
4053
- /* @__PURE__ */ jsx331(
4098
+ /* @__PURE__ */ jsx332(
4054
4099
  "span",
4055
4100
  {
4056
4101
  className: clsx_default("select-trigger-icon", isOpen && "open"),
4057
4102
  "aria-hidden": true,
4058
- children: /* @__PURE__ */ jsx331(ChevronDownIcon_default, {})
4103
+ children: /* @__PURE__ */ jsx332(ChevronDownIcon_default, {})
4059
4104
  }
4060
4105
  )
4061
4106
  ]
4062
4107
  }
4063
4108
  ),
4064
- mounted && /* @__PURE__ */ jsx331(
4109
+ mounted && /* @__PURE__ */ jsx332(Portal_default, { children: /* @__PURE__ */ jsx332(
4065
4110
  "div",
4066
4111
  {
4067
- className: clsx_default("select-content", position.direction, stateClass),
4112
+ className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
4068
4113
  ref: contentRef,
4069
4114
  style: { ...position.position, minWidth: position.position.width },
4070
4115
  role: "listbox",
4071
- children: itemChildren
4116
+ children: /* @__PURE__ */ jsx332(context_default.Provider, { value: ctxValue, children: itemChildren })
4072
4117
  }
4073
- )
4118
+ ) })
4074
4119
  ]
4075
4120
  }
4076
4121
  ) });
@@ -4082,14 +4127,14 @@ var Select = Object.assign(SelectRoot, {
4082
4127
  var Select_default = Select;
4083
4128
 
4084
4129
  // src/components/Skeleton/Skeleton.tsx
4085
- import { jsx as jsx332 } from "react/jsx-runtime";
4130
+ import { jsx as jsx333 } from "react/jsx-runtime";
4086
4131
  var Skeleton = (props) => {
4087
4132
  const { variant = "text", width, height } = props;
4088
4133
  const style = {
4089
4134
  width: typeof width === "number" ? `${width}px` : width,
4090
4135
  height: typeof height === "number" ? `${height}px` : height
4091
4136
  };
4092
- return /* @__PURE__ */ jsx332(
4137
+ return /* @__PURE__ */ jsx333(
4093
4138
  "div",
4094
4139
  {
4095
4140
  className: clsx_default("lib-xplat-skeleton", variant),
@@ -4102,20 +4147,20 @@ Skeleton.displayName = "Skeleton";
4102
4147
  var Skeleton_default = Skeleton;
4103
4148
 
4104
4149
  // src/components/Spinner/Spinner.tsx
4105
- import { jsx as jsx333, jsxs as jsxs215 } from "react/jsx-runtime";
4150
+ import { jsx as jsx334, jsxs as jsxs215 } from "react/jsx-runtime";
4106
4151
  var Spinner = (props) => {
4107
4152
  const {
4108
4153
  size = "md",
4109
4154
  type = "brand"
4110
4155
  } = props;
4111
- return /* @__PURE__ */ jsx333(
4156
+ return /* @__PURE__ */ jsx334(
4112
4157
  "div",
4113
4158
  {
4114
4159
  className: clsx_default("lib-xplat-spinner", size, type),
4115
4160
  role: "status",
4116
4161
  "aria-label": "\uB85C\uB529 \uC911",
4117
4162
  children: /* @__PURE__ */ jsxs215("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
4118
- /* @__PURE__ */ jsx333(
4163
+ /* @__PURE__ */ jsx334(
4119
4164
  "circle",
4120
4165
  {
4121
4166
  className: "track",
@@ -4125,7 +4170,7 @@ var Spinner = (props) => {
4125
4170
  strokeWidth: "3"
4126
4171
  }
4127
4172
  ),
4128
- /* @__PURE__ */ jsx333(
4173
+ /* @__PURE__ */ jsx334(
4129
4174
  "circle",
4130
4175
  {
4131
4176
  className: "indicator",
@@ -4144,20 +4189,20 @@ Spinner.displayName = "Spinner";
4144
4189
  var Spinner_default = Spinner;
4145
4190
 
4146
4191
  // src/components/Steps/Steps.tsx
4147
- import { jsx as jsx334, jsxs as jsxs216 } from "react/jsx-runtime";
4192
+ import { jsx as jsx335, jsxs as jsxs216 } from "react/jsx-runtime";
4148
4193
  var Steps = (props) => {
4149
4194
  const {
4150
4195
  items,
4151
4196
  current,
4152
4197
  type = "brand"
4153
4198
  } = props;
4154
- return /* @__PURE__ */ jsx334("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
4199
+ return /* @__PURE__ */ jsx335("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
4155
4200
  const status = index < current ? "completed" : index === current ? "active" : "pending";
4156
4201
  return /* @__PURE__ */ jsxs216("div", { className: clsx_default("step-item", status), children: [
4157
- /* @__PURE__ */ jsx334("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx334(CheckIcon_default, {}) : /* @__PURE__ */ jsx334("span", { children: index + 1 }) }),
4202
+ /* @__PURE__ */ jsx335("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx335(CheckIcon_default, {}) : /* @__PURE__ */ jsx335("span", { children: index + 1 }) }),
4158
4203
  /* @__PURE__ */ jsxs216("div", { className: "step-content", children: [
4159
- /* @__PURE__ */ jsx334("span", { className: "step-title", children: item.title }),
4160
- item.description && /* @__PURE__ */ jsx334("span", { className: "step-description", children: item.description })
4204
+ /* @__PURE__ */ jsx335("span", { className: "step-title", children: item.title }),
4205
+ item.description && /* @__PURE__ */ jsx335("span", { className: "step-description", children: item.description })
4161
4206
  ] })
4162
4207
  ] }, index);
4163
4208
  }) });
@@ -4166,8 +4211,8 @@ Steps.displayName = "Steps";
4166
4211
  var Steps_default = Steps;
4167
4212
 
4168
4213
  // src/components/Swiper/Swiper.tsx
4169
- import React28 from "react";
4170
- import { jsx as jsx335, jsxs as jsxs217 } from "react/jsx-runtime";
4214
+ import React29 from "react";
4215
+ import { jsx as jsx336, jsxs as jsxs217 } from "react/jsx-runtime";
4171
4216
  var Swiper = (props) => {
4172
4217
  const {
4173
4218
  auto = false,
@@ -4190,23 +4235,23 @@ var Swiper = (props) => {
4190
4235
  const maxIndex = Math.max(0, totalSlides - viewItemCount);
4191
4236
  const useLoop = loop && canSlide;
4192
4237
  const cloneCount = useLoop ? totalSlides : 0;
4193
- const extendedItems = React28.useMemo(() => {
4238
+ const extendedItems = React29.useMemo(() => {
4194
4239
  if (!useLoop) return items;
4195
4240
  return [...items, ...items, ...items];
4196
4241
  }, [items, useLoop]);
4197
4242
  const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
4198
- const [innerIndex, setInnerIndex] = React28.useState(
4243
+ const [innerIndex, setInnerIndex] = React29.useState(
4199
4244
  useLoop ? cloneCount + initialIdx : initialIdx
4200
4245
  );
4201
- const [isDragging, setIsDragging] = React28.useState(false);
4202
- const [dragOffset, setDragOffset] = React28.useState(0);
4203
- const [animated, setAnimated] = React28.useState(true);
4204
- const [containerWidth, setContainerWidth] = React28.useState(0);
4205
- const containerRef = React28.useRef(null);
4206
- const startXRef = React28.useRef(0);
4207
- const startTimeRef = React28.useRef(0);
4208
- const autoplayTimerRef = React28.useRef(null);
4209
- React28.useEffect(() => {
4246
+ const [isDragging, setIsDragging] = React29.useState(false);
4247
+ const [dragOffset, setDragOffset] = React29.useState(0);
4248
+ const [animated, setAnimated] = React29.useState(true);
4249
+ const [containerWidth, setContainerWidth] = React29.useState(0);
4250
+ const containerRef = React29.useRef(null);
4251
+ const startXRef = React29.useRef(0);
4252
+ const startTimeRef = React29.useRef(0);
4253
+ const autoplayTimerRef = React29.useRef(null);
4254
+ React29.useEffect(() => {
4210
4255
  const el = containerRef.current;
4211
4256
  if (!el) return;
4212
4257
  const ro = new ResizeObserver((entries) => {
@@ -4225,7 +4270,7 @@ var Swiper = (props) => {
4225
4270
  return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
4226
4271
  };
4227
4272
  const realIndex = getRealIndex(innerIndex);
4228
- const moveToInner = React28.useCallback(
4273
+ const moveToInner = React29.useCallback(
4229
4274
  (idx, withAnim = true) => {
4230
4275
  if (!useLoop) {
4231
4276
  setAnimated(withAnim);
@@ -4253,7 +4298,7 @@ var Swiper = (props) => {
4253
4298
  },
4254
4299
  [useLoop, cloneCount, totalSlides]
4255
4300
  );
4256
- const handleTransitionEnd = React28.useCallback(() => {
4301
+ const handleTransitionEnd = React29.useCallback(() => {
4257
4302
  if (!useLoop) return;
4258
4303
  const real = getRealIndex(innerIndex);
4259
4304
  const canonical = cloneCount + real;
@@ -4263,7 +4308,7 @@ var Swiper = (props) => {
4263
4308
  }
4264
4309
  onChange?.(Math.min(real, maxIndex));
4265
4310
  }, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
4266
- const slideTo = React28.useCallback(
4311
+ const slideTo = React29.useCallback(
4267
4312
  (logicalIndex) => {
4268
4313
  if (!canSlide) return;
4269
4314
  const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
@@ -4273,7 +4318,7 @@ var Swiper = (props) => {
4273
4318
  },
4274
4319
  [canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
4275
4320
  );
4276
- const slideNext = React28.useCallback(() => {
4321
+ const slideNext = React29.useCallback(() => {
4277
4322
  if (!canSlide) return;
4278
4323
  const nextInner = innerIndex + slideBy;
4279
4324
  if (useLoop) {
@@ -4282,7 +4327,7 @@ var Swiper = (props) => {
4282
4327
  moveToInner(Math.min(nextInner, maxIndex), true);
4283
4328
  }
4284
4329
  }, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
4285
- const slidePrev = React28.useCallback(() => {
4330
+ const slidePrev = React29.useCallback(() => {
4286
4331
  if (!canSlide) return;
4287
4332
  const prevInner = innerIndex - slideBy;
4288
4333
  if (useLoop) {
@@ -4291,7 +4336,7 @@ var Swiper = (props) => {
4291
4336
  moveToInner(Math.max(prevInner, 0), true);
4292
4337
  }
4293
4338
  }, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
4294
- React28.useEffect(() => {
4339
+ React29.useEffect(() => {
4295
4340
  if (indexProp === void 0) return;
4296
4341
  const clamped = Math.max(0, Math.min(indexProp, maxIndex));
4297
4342
  const target = useLoop ? cloneCount + clamped : clamped;
@@ -4299,12 +4344,12 @@ var Swiper = (props) => {
4299
4344
  moveToInner(target, true);
4300
4345
  }
4301
4346
  }, [indexProp]);
4302
- React28.useImperativeHandle(swiperRef, () => ({
4347
+ React29.useImperativeHandle(swiperRef, () => ({
4303
4348
  slidePrev,
4304
4349
  slideNext,
4305
4350
  slideTo
4306
4351
  }));
4307
- React28.useEffect(() => {
4352
+ React29.useEffect(() => {
4308
4353
  if (!auto || !canSlide) return;
4309
4354
  autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
4310
4355
  return () => {
@@ -4327,7 +4372,7 @@ var Swiper = (props) => {
4327
4372
  startXRef.current = getClientX(e);
4328
4373
  startTimeRef.current = Date.now();
4329
4374
  };
4330
- React28.useEffect(() => {
4375
+ React29.useEffect(() => {
4331
4376
  if (!isDragging) return;
4332
4377
  const handleMove = (e) => {
4333
4378
  setDragOffset(getClientX(e) - startXRef.current);
@@ -4365,8 +4410,8 @@ var Swiper = (props) => {
4365
4410
  }, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
4366
4411
  const slideWidthPercent = 100 / viewItemCount;
4367
4412
  const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
4368
- const slideElements = React28.useMemo(
4369
- () => extendedItems.map((item, idx) => /* @__PURE__ */ jsx335(
4413
+ const slideElements = React29.useMemo(
4414
+ () => extendedItems.map((item, idx) => /* @__PURE__ */ jsx336(
4370
4415
  "div",
4371
4416
  {
4372
4417
  className: "lib-xplat-swiper__slide",
@@ -4386,13 +4431,13 @@ var Swiper = (props) => {
4386
4431
  totalSteps - 1
4387
4432
  );
4388
4433
  return /* @__PURE__ */ jsxs217("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
4389
- /* @__PURE__ */ jsx335(
4434
+ /* @__PURE__ */ jsx336(
4390
4435
  "div",
4391
4436
  {
4392
4437
  className: "lib-xplat-swiper__viewport",
4393
4438
  onMouseDown: handleDragStart,
4394
4439
  onTouchStart: handleDragStart,
4395
- children: /* @__PURE__ */ jsx335(
4440
+ children: /* @__PURE__ */ jsx336(
4396
4441
  "div",
4397
4442
  {
4398
4443
  className: clsx_default(
@@ -4410,7 +4455,7 @@ var Swiper = (props) => {
4410
4455
  )
4411
4456
  }
4412
4457
  ),
4413
- showProgress && canSlide && /* @__PURE__ */ jsx335("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ jsx335("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ jsx335(
4458
+ showProgress && canSlide && /* @__PURE__ */ jsx336("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ jsx336("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ jsx336(
4414
4459
  "span",
4415
4460
  {
4416
4461
  className: "lib-xplat-swiper__progress-fill",
@@ -4420,7 +4465,7 @@ var Swiper = (props) => {
4420
4465
  }
4421
4466
  }
4422
4467
  ) }) }),
4423
- canSlide && /* @__PURE__ */ jsx335("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsx335(
4468
+ canSlide && /* @__PURE__ */ jsx336("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsx336(
4424
4469
  "button",
4425
4470
  {
4426
4471
  className: clsx_default(
@@ -4438,8 +4483,8 @@ Swiper.displayName = "Swiper";
4438
4483
  var Swiper_default = Swiper;
4439
4484
 
4440
4485
  // src/components/Switch/Switch.tsx
4441
- import React29 from "react";
4442
- import { jsx as jsx336 } from "react/jsx-runtime";
4486
+ import React30 from "react";
4487
+ import { jsx as jsx337 } from "react/jsx-runtime";
4443
4488
  var KNOB_TRANSITION_MS = 250;
4444
4489
  var Switch = (props) => {
4445
4490
  const {
@@ -4449,9 +4494,9 @@ var Switch = (props) => {
4449
4494
  disabled,
4450
4495
  onChange
4451
4496
  } = props;
4452
- const [isAnimating, setIsAnimating] = React29.useState(false);
4453
- const timeoutRef = React29.useRef(null);
4454
- React29.useEffect(() => {
4497
+ const [isAnimating, setIsAnimating] = React30.useState(false);
4498
+ const timeoutRef = React30.useRef(null);
4499
+ React30.useEffect(() => {
4455
4500
  return () => {
4456
4501
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
4457
4502
  };
@@ -4466,7 +4511,7 @@ var Switch = (props) => {
4466
4511
  timeoutRef.current = null;
4467
4512
  }, KNOB_TRANSITION_MS);
4468
4513
  };
4469
- return /* @__PURE__ */ jsx336(
4514
+ return /* @__PURE__ */ jsx337(
4470
4515
  "div",
4471
4516
  {
4472
4517
  className: clsx_default(
@@ -4479,7 +4524,7 @@ var Switch = (props) => {
4479
4524
  ),
4480
4525
  onClick: handleClick,
4481
4526
  "aria-disabled": disabled || isAnimating,
4482
- children: /* @__PURE__ */ jsx336("div", { className: clsx_default("knob", value ? "checked" : void 0) })
4527
+ children: /* @__PURE__ */ jsx337("div", { className: clsx_default("knob", value ? "checked" : void 0) })
4483
4528
  }
4484
4529
  );
4485
4530
  };
@@ -4487,17 +4532,17 @@ Switch.displayName = "Switch";
4487
4532
  var Switch_default = Switch;
4488
4533
 
4489
4534
  // src/components/Table/TableContext.tsx
4490
- import React30 from "react";
4491
- var TableContext = React30.createContext(null);
4535
+ import React31 from "react";
4536
+ var TableContext = React31.createContext(null);
4492
4537
  var useTableContext = () => {
4493
- const ctx = React30.useContext(TableContext);
4538
+ const ctx = React31.useContext(TableContext);
4494
4539
  if (!ctx) throw new Error("Table components must be used inside <Table>");
4495
4540
  return ctx;
4496
4541
  };
4497
4542
  var TableContext_default = TableContext;
4498
4543
 
4499
4544
  // src/components/Table/Table.tsx
4500
- import { jsx as jsx337 } from "react/jsx-runtime";
4545
+ import { jsx as jsx338 } from "react/jsx-runtime";
4501
4546
  var Table = (props) => {
4502
4547
  const {
4503
4548
  children,
@@ -4506,7 +4551,7 @@ var Table = (props) => {
4506
4551
  headerSticky = false,
4507
4552
  stickyShadow = true
4508
4553
  } = props;
4509
- return /* @__PURE__ */ jsx337("div", { className: "lib-xplat-table-wrapper", children: /* @__PURE__ */ jsx337(
4554
+ return /* @__PURE__ */ jsx338("div", { className: "lib-xplat-table-wrapper", children: /* @__PURE__ */ jsx338(
4510
4555
  TableContext_default.Provider,
4511
4556
  {
4512
4557
  value: {
@@ -4515,7 +4560,7 @@ var Table = (props) => {
4515
4560
  headerSticky,
4516
4561
  stickyShadow
4517
4562
  },
4518
- children: /* @__PURE__ */ jsx337("table", { className: "lib-xplat-table", children })
4563
+ children: /* @__PURE__ */ jsx338("table", { className: "lib-xplat-table", children })
4519
4564
  }
4520
4565
  ) });
4521
4566
  };
@@ -4523,41 +4568,41 @@ Table.displayName = "Table";
4523
4568
  var Table_default = Table;
4524
4569
 
4525
4570
  // src/components/Table/TableBody.tsx
4526
- import { jsx as jsx338 } from "react/jsx-runtime";
4571
+ import { jsx as jsx339 } from "react/jsx-runtime";
4527
4572
  var TableBody = (props) => {
4528
4573
  const { children } = props;
4529
- return /* @__PURE__ */ jsx338("tbody", { children });
4574
+ return /* @__PURE__ */ jsx339("tbody", { children });
4530
4575
  };
4531
4576
  TableBody.displayName = "TableBody";
4532
4577
  var TableBody_default = TableBody;
4533
4578
 
4534
4579
  // src/components/Table/TableCell.tsx
4535
- import React33 from "react";
4580
+ import React34 from "react";
4536
4581
 
4537
4582
  // src/components/Table/TableHeadContext.tsx
4538
- import React31 from "react";
4539
- var TableHeadContext = React31.createContext(
4583
+ import React32 from "react";
4584
+ var TableHeadContext = React32.createContext(
4540
4585
  null
4541
4586
  );
4542
4587
  var useTableHeadContext = () => {
4543
- const ctx = React31.useContext(TableHeadContext);
4588
+ const ctx = React32.useContext(TableHeadContext);
4544
4589
  return ctx;
4545
4590
  };
4546
4591
  var TableHeadContext_default = TableHeadContext;
4547
4592
 
4548
4593
  // src/components/Table/TableRowContext.tsx
4549
- import React32 from "react";
4550
- var TableRowContext = React32.createContext(null);
4594
+ import React33 from "react";
4595
+ var TableRowContext = React33.createContext(null);
4551
4596
  var useTableRowContext = () => {
4552
- const ctx = React32.useContext(TableRowContext);
4597
+ const ctx = React33.useContext(TableRowContext);
4553
4598
  if (!ctx) throw new Error("Table components must be used inside <Table>");
4554
4599
  return ctx;
4555
4600
  };
4556
4601
  var TableRowContext_default = TableRowContext;
4557
4602
 
4558
4603
  // src/components/Table/TableCell.tsx
4559
- import { jsx as jsx339 } from "react/jsx-runtime";
4560
- var TableCell = React33.memo((props) => {
4604
+ import { jsx as jsx340 } from "react/jsx-runtime";
4605
+ var TableCell = React34.memo((props) => {
4561
4606
  const {
4562
4607
  children,
4563
4608
  align = "center",
@@ -4569,9 +4614,9 @@ var TableCell = React33.memo((props) => {
4569
4614
  const { registerStickyCell, stickyCells } = useTableRowContext();
4570
4615
  const { stickyShadow } = useTableContext();
4571
4616
  const headContext = useTableHeadContext();
4572
- const [left, setLeft] = React33.useState(0);
4573
- const cellRef = React33.useRef(null);
4574
- const calculateLeft = React33.useCallback(() => {
4617
+ const [left, setLeft] = React34.useState(0);
4618
+ const cellRef = React34.useRef(null);
4619
+ const calculateLeft = React34.useCallback(() => {
4575
4620
  if (!cellRef.current) return 0;
4576
4621
  let totalLeft = 0;
4577
4622
  for (const ref of stickyCells) {
@@ -4580,7 +4625,7 @@ var TableCell = React33.memo((props) => {
4580
4625
  }
4581
4626
  return totalLeft;
4582
4627
  }, [stickyCells]);
4583
- React33.useEffect(() => {
4628
+ React34.useEffect(() => {
4584
4629
  if (!isSticky || !cellRef.current) return;
4585
4630
  registerStickyCell(cellRef);
4586
4631
  setLeft(calculateLeft());
@@ -4598,7 +4643,7 @@ var TableCell = React33.memo((props) => {
4598
4643
  const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
4599
4644
  const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
4600
4645
  const enableHover = headContext && headContext.cellHover;
4601
- return /* @__PURE__ */ jsx339(
4646
+ return /* @__PURE__ */ jsx340(
4602
4647
  CellTag,
4603
4648
  {
4604
4649
  ref: cellRef,
@@ -4623,21 +4668,21 @@ TableCell.displayName = "TableCell";
4623
4668
  var TableCell_default = TableCell;
4624
4669
 
4625
4670
  // src/components/Table/TableHead.tsx
4626
- import { jsx as jsx340 } from "react/jsx-runtime";
4671
+ import { jsx as jsx341 } from "react/jsx-runtime";
4627
4672
  var TableHead = ({
4628
4673
  children,
4629
4674
  cellHover = false
4630
4675
  }) => {
4631
4676
  const { headerSticky } = useTableContext();
4632
- return /* @__PURE__ */ jsx340(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ jsx340("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
4677
+ return /* @__PURE__ */ jsx341(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ jsx341("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
4633
4678
  };
4634
4679
  TableHead.displayName = "TableHead";
4635
4680
  var TableHead_default = TableHead;
4636
4681
 
4637
4682
  // src/components/Table/TableRow.tsx
4638
- import React34 from "react";
4639
- import { jsx as jsx341 } from "react/jsx-runtime";
4640
- var TableRow = React34.memo((props) => {
4683
+ import React35 from "react";
4684
+ import { jsx as jsx342 } from "react/jsx-runtime";
4685
+ var TableRow = React35.memo((props) => {
4641
4686
  const {
4642
4687
  children,
4643
4688
  type = "secondary",
@@ -4645,14 +4690,14 @@ var TableRow = React34.memo((props) => {
4645
4690
  onClick
4646
4691
  } = props;
4647
4692
  const { rowBorderUse } = useTableContext();
4648
- const [stickyCells, setStickyCells] = React34.useState([]);
4693
+ const [stickyCells, setStickyCells] = React35.useState([]);
4649
4694
  const registerStickyCell = (ref) => {
4650
4695
  setStickyCells((prev) => {
4651
4696
  if (prev.includes(ref)) return prev;
4652
4697
  return [...prev, ref];
4653
4698
  });
4654
4699
  };
4655
- return /* @__PURE__ */ jsx341(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ jsx341(
4700
+ return /* @__PURE__ */ jsx342(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ jsx342(
4656
4701
  "tr",
4657
4702
  {
4658
4703
  className: clsx_default(
@@ -4670,7 +4715,7 @@ TableRow.displayName = "TableRow";
4670
4715
  var TableRow_default = TableRow;
4671
4716
 
4672
4717
  // src/components/Tag/Tag.tsx
4673
- import { jsx as jsx342, jsxs as jsxs218 } from "react/jsx-runtime";
4718
+ import { jsx as jsx343, jsxs as jsxs218 } from "react/jsx-runtime";
4674
4719
  var Tag = (props) => {
4675
4720
  const {
4676
4721
  children,
@@ -4691,8 +4736,8 @@ var Tag = (props) => {
4691
4736
  disabled && "disabled"
4692
4737
  ),
4693
4738
  children: [
4694
- /* @__PURE__ */ jsx342("span", { className: "tag-label", children }),
4695
- onClose && /* @__PURE__ */ jsx342("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ jsx342(XIcon_default, {}) })
4739
+ /* @__PURE__ */ jsx343("span", { className: "tag-label", children }),
4740
+ onClose && /* @__PURE__ */ jsx343("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ jsx343(XIcon_default, {}) })
4696
4741
  ]
4697
4742
  }
4698
4743
  );
@@ -4701,12 +4746,12 @@ Tag.displayName = "Tag";
4701
4746
  var Tag_default = Tag;
4702
4747
 
4703
4748
  // src/components/TextArea/TextArea.tsx
4704
- import React35 from "react";
4705
- import { jsx as jsx343 } from "react/jsx-runtime";
4706
- var TextArea = React35.forwardRef(
4749
+ import React36 from "react";
4750
+ import { jsx as jsx344 } from "react/jsx-runtime";
4751
+ var TextArea = React36.forwardRef(
4707
4752
  (props, ref) => {
4708
4753
  const { value, onChange, disabled, ...textareaProps } = props;
4709
- const localRef = React35.useRef(null);
4754
+ const localRef = React36.useRef(null);
4710
4755
  const setRefs = (el) => {
4711
4756
  localRef.current = el;
4712
4757
  if (!ref) return;
@@ -4726,21 +4771,21 @@ var TextArea = React35.forwardRef(
4726
4771
  onChange(event);
4727
4772
  }
4728
4773
  };
4729
- React35.useEffect(() => {
4774
+ React36.useEffect(() => {
4730
4775
  const el = localRef.current;
4731
4776
  if (!el) return;
4732
4777
  el.style.height = "0px";
4733
4778
  const nextHeight = Math.min(el.scrollHeight, 400);
4734
4779
  el.style.height = `${nextHeight}px`;
4735
4780
  }, [value]);
4736
- return /* @__PURE__ */ jsx343("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ jsx343(
4781
+ return /* @__PURE__ */ jsx344("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ jsx344(
4737
4782
  "div",
4738
4783
  {
4739
4784
  className: clsx_default(
4740
4785
  "lib-xplat-textarea",
4741
4786
  disabled ? "disabled" : void 0
4742
4787
  ),
4743
- children: /* @__PURE__ */ jsx343(
4788
+ children: /* @__PURE__ */ jsx344(
4744
4789
  "textarea",
4745
4790
  {
4746
4791
  ...textareaProps,
@@ -4758,25 +4803,25 @@ TextArea.displayName = "TextArea";
4758
4803
  var TextArea_default = TextArea;
4759
4804
 
4760
4805
  // src/components/Toast/Toast.tsx
4761
- import React36 from "react";
4806
+ import React37 from "react";
4762
4807
  import { createPortal as createPortal3 } from "react-dom";
4763
- import { jsx as jsx344, jsxs as jsxs219 } from "react/jsx-runtime";
4764
- var ToastContext = React36.createContext(null);
4808
+ import { jsx as jsx345, jsxs as jsxs219 } from "react/jsx-runtime";
4809
+ var ToastContext = React37.createContext(null);
4765
4810
  var useToast = () => {
4766
- const ctx = React36.useContext(ToastContext);
4811
+ const ctx = React37.useContext(ToastContext);
4767
4812
  if (!ctx) throw new Error("useToast must be used within ToastProvider");
4768
4813
  return ctx;
4769
4814
  };
4770
4815
  var EXIT_DURATION = 300;
4771
4816
  var ToastItemComponent = ({ item, isExiting, onClose }) => {
4772
- const ref = React36.useRef(null);
4773
- const [height, setHeight] = React36.useState(void 0);
4774
- React36.useEffect(() => {
4817
+ const ref = React37.useRef(null);
4818
+ const [height, setHeight] = React37.useState(void 0);
4819
+ React37.useEffect(() => {
4775
4820
  if (ref.current && !isExiting) {
4776
4821
  setHeight(ref.current.offsetHeight);
4777
4822
  }
4778
4823
  }, [isExiting]);
4779
- return /* @__PURE__ */ jsx344(
4824
+ return /* @__PURE__ */ jsx345(
4780
4825
  "div",
4781
4826
  {
4782
4827
  className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
@@ -4791,8 +4836,8 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
4791
4836
  className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
4792
4837
  role: "alert",
4793
4838
  children: [
4794
- /* @__PURE__ */ jsx344("span", { className: "message", children: item.message }),
4795
- /* @__PURE__ */ jsx344("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
4839
+ /* @__PURE__ */ jsx345("span", { className: "message", children: item.message }),
4840
+ /* @__PURE__ */ jsx345("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
4796
4841
  ]
4797
4842
  }
4798
4843
  )
@@ -4803,13 +4848,13 @@ var ToastProvider = ({
4803
4848
  children,
4804
4849
  position = "top-right"
4805
4850
  }) => {
4806
- const [toasts, setToasts] = React36.useState([]);
4807
- const [removing, setRemoving] = React36.useState(/* @__PURE__ */ new Set());
4808
- const [mounted, setMounted] = React36.useState(false);
4809
- React36.useEffect(() => {
4851
+ const [toasts, setToasts] = React37.useState([]);
4852
+ const [removing, setRemoving] = React37.useState(/* @__PURE__ */ new Set());
4853
+ const [mounted, setMounted] = React37.useState(false);
4854
+ React37.useEffect(() => {
4810
4855
  setMounted(true);
4811
4856
  }, []);
4812
- const remove = React36.useCallback((id) => {
4857
+ const remove = React37.useCallback((id) => {
4813
4858
  setRemoving((prev) => new Set(prev).add(id));
4814
4859
  setTimeout(() => {
4815
4860
  setToasts((prev) => prev.filter((t) => t.id !== id));
@@ -4820,7 +4865,7 @@ var ToastProvider = ({
4820
4865
  });
4821
4866
  }, EXIT_DURATION);
4822
4867
  }, []);
4823
- const toast = React36.useCallback(
4868
+ const toast = React37.useCallback(
4824
4869
  (type, message, duration = 3e3) => {
4825
4870
  const id = `${Date.now()}-${Math.random()}`;
4826
4871
  setToasts((prev) => [...prev, { id, type, message }]);
@@ -4833,7 +4878,7 @@ var ToastProvider = ({
4833
4878
  return /* @__PURE__ */ jsxs219(ToastContext.Provider, { value: { toast }, children: [
4834
4879
  children,
4835
4880
  mounted && createPortal3(
4836
- /* @__PURE__ */ jsx344("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ jsx344(
4881
+ /* @__PURE__ */ jsx345("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ jsx345(
4837
4882
  ToastItemComponent,
4838
4883
  {
4839
4884
  item: t,
@@ -4849,29 +4894,29 @@ var ToastProvider = ({
4849
4894
  ToastProvider.displayName = "ToastProvider";
4850
4895
 
4851
4896
  // src/components/Tooltip/Tooltip.tsx
4852
- import React37 from "react";
4853
- import { jsx as jsx345, jsxs as jsxs220 } from "react/jsx-runtime";
4897
+ import React38 from "react";
4898
+ import { jsx as jsx346, jsxs as jsxs220 } from "react/jsx-runtime";
4854
4899
  var Tooltip = (props) => {
4855
4900
  const {
4856
4901
  type = "primary",
4857
4902
  description,
4858
4903
  children
4859
4904
  } = props;
4860
- const iconRef = React37.useRef(null);
4905
+ const iconRef = React38.useRef(null);
4861
4906
  return /* @__PURE__ */ jsxs220("div", { className: "lib-xplat-tooltip", children: [
4862
- /* @__PURE__ */ jsx345("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
4863
- /* @__PURE__ */ jsx345("div", { className: clsx_default("tooltip-wrapper", type), children: description })
4907
+ /* @__PURE__ */ jsx346("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
4908
+ /* @__PURE__ */ jsx346("div", { className: clsx_default("tooltip-wrapper", type), children: description })
4864
4909
  ] });
4865
4910
  };
4866
4911
  Tooltip.displayName = "Tooltip";
4867
4912
  var Tooltip_default = Tooltip;
4868
4913
 
4869
4914
  // src/components/Video/Video.tsx
4870
- import React38 from "react";
4871
- import { jsx as jsx346, jsxs as jsxs221 } from "react/jsx-runtime";
4915
+ import React39 from "react";
4916
+ import { jsx as jsx347, jsxs as jsxs221 } from "react/jsx-runtime";
4872
4917
  var PipIcon = () => /* @__PURE__ */ jsxs221("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
4873
- /* @__PURE__ */ jsx346("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
4874
- /* @__PURE__ */ jsx346("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
4918
+ /* @__PURE__ */ jsx347("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
4919
+ /* @__PURE__ */ jsx347("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
4875
4920
  ] });
4876
4921
  var formatTime = (sec) => {
4877
4922
  if (!Number.isFinite(sec) || sec < 0) return "0:00";
@@ -4879,7 +4924,7 @@ var formatTime = (sec) => {
4879
4924
  const s = Math.floor(sec % 60);
4880
4925
  return `${m}:${s.toString().padStart(2, "0")}`;
4881
4926
  };
4882
- var Video = React38.forwardRef((props, ref) => {
4927
+ var Video = React39.forwardRef((props, ref) => {
4883
4928
  const {
4884
4929
  src,
4885
4930
  poster,
@@ -4903,21 +4948,21 @@ var Video = React38.forwardRef((props, ref) => {
4903
4948
  children,
4904
4949
  ...rest
4905
4950
  } = props;
4906
- const containerRef = React38.useRef(null);
4907
- const videoRef = React38.useRef(null);
4908
- const [isPlaying, setIsPlaying] = React38.useState(Boolean(autoPlay));
4909
- const [isLoaded, setIsLoaded] = React38.useState(false);
4910
- const [currentTime, setCurrentTime] = React38.useState(0);
4911
- const [duration, setDuration] = React38.useState(0);
4912
- const [buffered, setBuffered] = React38.useState(0);
4913
- const [volume, setVolume] = React38.useState(1);
4914
- const [isMuted, setIsMuted] = React38.useState(Boolean(muted));
4915
- const [isFullscreen, setIsFullscreen] = React38.useState(false);
4916
- const [playbackRate, setPlaybackRate] = React38.useState(1);
4917
- const [rateMenuOpen, setRateMenuOpen] = React38.useState(false);
4918
- const [captionsOn, setCaptionsOn] = React38.useState(false);
4919
- const [isPip, setIsPip] = React38.useState(false);
4920
- const setRefs = React38.useCallback(
4951
+ const containerRef = React39.useRef(null);
4952
+ const videoRef = React39.useRef(null);
4953
+ const [isPlaying, setIsPlaying] = React39.useState(Boolean(autoPlay));
4954
+ const [isLoaded, setIsLoaded] = React39.useState(false);
4955
+ const [currentTime, setCurrentTime] = React39.useState(0);
4956
+ const [duration, setDuration] = React39.useState(0);
4957
+ const [buffered, setBuffered] = React39.useState(0);
4958
+ const [volume, setVolume] = React39.useState(1);
4959
+ const [isMuted, setIsMuted] = React39.useState(Boolean(muted));
4960
+ const [isFullscreen, setIsFullscreen] = React39.useState(false);
4961
+ const [playbackRate, setPlaybackRate] = React39.useState(1);
4962
+ const [rateMenuOpen, setRateMenuOpen] = React39.useState(false);
4963
+ const [captionsOn, setCaptionsOn] = React39.useState(false);
4964
+ const [isPip, setIsPip] = React39.useState(false);
4965
+ const setRefs = React39.useCallback(
4921
4966
  (el) => {
4922
4967
  videoRef.current = el;
4923
4968
  if (typeof ref === "function") ref(el);
@@ -4925,14 +4970,14 @@ var Video = React38.forwardRef((props, ref) => {
4925
4970
  },
4926
4971
  [ref]
4927
4972
  );
4928
- React38.useEffect(() => {
4973
+ React39.useEffect(() => {
4929
4974
  const onFsChange = () => {
4930
4975
  setIsFullscreen(document.fullscreenElement === containerRef.current);
4931
4976
  };
4932
4977
  document.addEventListener("fullscreenchange", onFsChange);
4933
4978
  return () => document.removeEventListener("fullscreenchange", onFsChange);
4934
4979
  }, []);
4935
- React38.useEffect(() => {
4980
+ React39.useEffect(() => {
4936
4981
  const v = videoRef.current;
4937
4982
  if (!v) return;
4938
4983
  const onEnter = () => setIsPip(true);
@@ -5052,7 +5097,7 @@ var Video = React38.forwardRef((props, ref) => {
5052
5097
  ref: containerRef,
5053
5098
  className: clsx_default("lib-xplat-video", showControls && "has-controls"),
5054
5099
  children: [
5055
- /* @__PURE__ */ jsx346(
5100
+ /* @__PURE__ */ jsx347(
5056
5101
  "video",
5057
5102
  {
5058
5103
  ref: setRefs,
@@ -5073,7 +5118,7 @@ var Video = React38.forwardRef((props, ref) => {
5073
5118
  children
5074
5119
  }
5075
5120
  ),
5076
- showCenterPlay && /* @__PURE__ */ jsx346(
5121
+ showCenterPlay && /* @__PURE__ */ jsx347(
5077
5122
  "button",
5078
5123
  {
5079
5124
  type: "button",
@@ -5085,11 +5130,11 @@ var Video = React38.forwardRef((props, ref) => {
5085
5130
  onClick: togglePlay,
5086
5131
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
5087
5132
  tabIndex: -1,
5088
- children: /* @__PURE__ */ jsx346("span", { className: "center-play-icon", children: /* @__PURE__ */ jsx346(PlayCircleIcon_default, {}) })
5133
+ children: /* @__PURE__ */ jsx347("span", { className: "center-play-icon", children: /* @__PURE__ */ jsx347(PlayCircleIcon_default, {}) })
5089
5134
  }
5090
5135
  ),
5091
5136
  showControls && /* @__PURE__ */ jsxs221("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
5092
- /* @__PURE__ */ jsx346(
5137
+ /* @__PURE__ */ jsx347(
5093
5138
  "input",
5094
5139
  {
5095
5140
  type: "range",
@@ -5107,28 +5152,28 @@ var Video = React38.forwardRef((props, ref) => {
5107
5152
  }
5108
5153
  ),
5109
5154
  /* @__PURE__ */ jsxs221("div", { className: "controls-row", children: [
5110
- /* @__PURE__ */ jsx346(
5155
+ /* @__PURE__ */ jsx347(
5111
5156
  "button",
5112
5157
  {
5113
5158
  type: "button",
5114
5159
  className: "control-btn",
5115
5160
  onClick: togglePlay,
5116
5161
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
5117
- children: isPlaying ? /* @__PURE__ */ jsx346(PauseIcon_default, {}) : /* @__PURE__ */ jsx346(PlayIcon_default, {})
5162
+ children: isPlaying ? /* @__PURE__ */ jsx347(PauseIcon_default, {}) : /* @__PURE__ */ jsx347(PlayIcon_default, {})
5118
5163
  }
5119
5164
  ),
5120
5165
  /* @__PURE__ */ jsxs221("div", { className: "volume-group", children: [
5121
- /* @__PURE__ */ jsx346(
5166
+ /* @__PURE__ */ jsx347(
5122
5167
  "button",
5123
5168
  {
5124
5169
  type: "button",
5125
5170
  className: "control-btn",
5126
5171
  onClick: toggleMute,
5127
5172
  "aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
5128
- children: /* @__PURE__ */ jsx346(VolumeGlyph, {})
5173
+ children: /* @__PURE__ */ jsx347(VolumeGlyph, {})
5129
5174
  }
5130
5175
  ),
5131
- /* @__PURE__ */ jsx346(
5176
+ /* @__PURE__ */ jsx347(
5132
5177
  "input",
5133
5178
  {
5134
5179
  type: "range",
@@ -5148,7 +5193,7 @@ var Video = React38.forwardRef((props, ref) => {
5148
5193
  " / ",
5149
5194
  formatTime(duration)
5150
5195
  ] }),
5151
- /* @__PURE__ */ jsx346("div", { className: "controls-spacer" }),
5196
+ /* @__PURE__ */ jsx347("div", { className: "controls-spacer" }),
5152
5197
  playbackRates && playbackRates.length > 0 && /* @__PURE__ */ jsxs221("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
5153
5198
  /* @__PURE__ */ jsxs221(
5154
5199
  "button",
@@ -5164,7 +5209,7 @@ var Video = React38.forwardRef((props, ref) => {
5164
5209
  ]
5165
5210
  }
5166
5211
  ),
5167
- rateMenuOpen && /* @__PURE__ */ jsx346("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ jsx346("li", { children: /* @__PURE__ */ jsxs221(
5212
+ rateMenuOpen && /* @__PURE__ */ jsx347("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ jsx347("li", { children: /* @__PURE__ */ jsxs221(
5168
5213
  "button",
5169
5214
  {
5170
5215
  type: "button",
@@ -5178,7 +5223,7 @@ var Video = React38.forwardRef((props, ref) => {
5178
5223
  }
5179
5224
  ) }, r2)) })
5180
5225
  ] }),
5181
- showCaptions && /* @__PURE__ */ jsx346(
5226
+ showCaptions && /* @__PURE__ */ jsx347(
5182
5227
  "button",
5183
5228
  {
5184
5229
  type: "button",
@@ -5186,37 +5231,37 @@ var Video = React38.forwardRef((props, ref) => {
5186
5231
  onClick: toggleCaptions,
5187
5232
  "aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
5188
5233
  "aria-pressed": captionsOn,
5189
- children: /* @__PURE__ */ jsx346(TypeIcon_default, {})
5234
+ children: /* @__PURE__ */ jsx347(TypeIcon_default, {})
5190
5235
  }
5191
5236
  ),
5192
- showPip && pipSupported && /* @__PURE__ */ jsx346(
5237
+ showPip && pipSupported && /* @__PURE__ */ jsx347(
5193
5238
  "button",
5194
5239
  {
5195
5240
  type: "button",
5196
5241
  className: clsx_default("control-btn", isPip && "is-active"),
5197
5242
  onClick: togglePip,
5198
5243
  "aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
5199
- children: /* @__PURE__ */ jsx346(PipIcon, {})
5244
+ children: /* @__PURE__ */ jsx347(PipIcon, {})
5200
5245
  }
5201
5246
  ),
5202
- showDownload && /* @__PURE__ */ jsx346(
5247
+ showDownload && /* @__PURE__ */ jsx347(
5203
5248
  "a",
5204
5249
  {
5205
5250
  className: "control-btn",
5206
5251
  href: src,
5207
5252
  download: downloadFileName ?? true,
5208
5253
  "aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
5209
- children: /* @__PURE__ */ jsx346(DownloadIcon_default, {})
5254
+ children: /* @__PURE__ */ jsx347(DownloadIcon_default, {})
5210
5255
  }
5211
5256
  ),
5212
- /* @__PURE__ */ jsx346(
5257
+ /* @__PURE__ */ jsx347(
5213
5258
  "button",
5214
5259
  {
5215
5260
  type: "button",
5216
5261
  className: "control-btn",
5217
5262
  onClick: toggleFullscreen,
5218
5263
  "aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
5219
- children: isFullscreen ? /* @__PURE__ */ jsx346(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx346(MaximizeIcon_default, {})
5264
+ children: isFullscreen ? /* @__PURE__ */ jsx347(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx347(MaximizeIcon_default, {})
5220
5265
  }
5221
5266
  )
5222
5267
  ] })