@x-plat/design-system 0.5.10 → 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,50 +3276,60 @@ 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();
3250
- const viewportWidth = window.innerWidth;
3251
3292
  const viewportHeight = window.innerHeight;
3252
- const position2 = {};
3293
+ const viewportWidth = window.innerWidth;
3253
3294
  let direction = "bottom";
3254
- if (triggerRect.bottom + popRect.height > viewportHeight) {
3295
+ let top;
3296
+ let left = triggerRect.left;
3297
+ if (triggerRect.bottom + popRect.height > viewportHeight && triggerRect.top - popRect.height > 0) {
3255
3298
  direction = "top";
3299
+ top = triggerRect.top - popRect.height;
3300
+ } else {
3301
+ top = triggerRect.bottom;
3256
3302
  }
3257
- if (triggerRect.left + popRect.width > viewportWidth) {
3258
- position2["right"] = 10;
3259
- }
3260
- if (triggerRect.left < 0) {
3261
- position2["left"] = 10;
3303
+ if (left + popRect.width > viewportWidth) {
3304
+ left = viewportWidth - popRect.width - 8;
3262
3305
  }
3306
+ if (left < 8) left = 8;
3263
3307
  setPosition({
3264
- position: position2,
3308
+ position: { top, left, width: triggerRect.width },
3265
3309
  direction
3266
3310
  });
3267
3311
  }, [triggerRef, popRef]);
3268
- React16.useEffect(() => {
3269
- calculatePosition();
3312
+ React17.useEffect(() => {
3313
+ if (!enabled) return;
3314
+ const raf = requestAnimationFrame(() => {
3315
+ calculatePosition();
3316
+ });
3270
3317
  window.addEventListener("resize", calculatePosition);
3271
- return () => window.removeEventListener("resize", calculatePosition);
3318
+ window.addEventListener("scroll", calculatePosition, true);
3319
+ return () => {
3320
+ cancelAnimationFrame(raf);
3321
+ window.removeEventListener("resize", calculatePosition);
3322
+ window.removeEventListener("scroll", calculatePosition, true);
3323
+ };
3272
3324
  }, [calculatePosition, enabled]);
3273
3325
  return position;
3274
3326
  };
3275
3327
  var useAutoPosition_default = useAutoPosition;
3276
3328
 
3277
3329
  // src/tokens/hooks/useClickOutside.ts
3278
- import React17 from "react";
3330
+ import React18 from "react";
3279
3331
  var useClickOutside = (refs, handler, enabled = true) => {
3280
- React17.useEffect(() => {
3332
+ React18.useEffect(() => {
3281
3333
  if (!enabled) return;
3282
3334
  const refArray = Array.isArray(refs) ? refs : [refs];
3283
3335
  const listener = (event) => {
@@ -3300,17 +3352,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
3300
3352
  var useClickOutside_default = useClickOutside;
3301
3353
 
3302
3354
  // src/components/Dropdown/Dropdown.tsx
3303
- import { jsx as jsx320, jsxs as jsxs206 } from "react/jsx-runtime";
3355
+ import { jsx as jsx321, jsxs as jsxs206 } from "react/jsx-runtime";
3304
3356
  var Dropdown = (props) => {
3305
3357
  const { items, children } = props;
3306
- const [isOpen, setIsOpen] = React18.useState(false);
3307
- const [mounted, setMounted] = React18.useState(false);
3308
- const [visible, setVisible] = React18.useState(false);
3309
- const triggerRef = React18.useRef(null);
3310
- const menuRef = React18.useRef(null);
3311
- const { position, direction } = useAutoPosition_default(triggerRef, menuRef, isOpen);
3312
- useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false));
3313
- 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(() => {
3314
3366
  if (isOpen) {
3315
3367
  setMounted(true);
3316
3368
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -3326,7 +3378,7 @@ var Dropdown = (props) => {
3326
3378
  setIsOpen(false);
3327
3379
  };
3328
3380
  return /* @__PURE__ */ jsxs206("div", { className: "lib-xplat-dropdown", children: [
3329
- /* @__PURE__ */ jsx320(
3381
+ /* @__PURE__ */ jsx321(
3330
3382
  "div",
3331
3383
  {
3332
3384
  ref: triggerRef,
@@ -3335,14 +3387,14 @@ var Dropdown = (props) => {
3335
3387
  children
3336
3388
  }
3337
3389
  ),
3338
- mounted && /* @__PURE__ */ jsx320(
3390
+ mounted && /* @__PURE__ */ jsx321(Portal_default, { children: /* @__PURE__ */ jsx321(
3339
3391
  "div",
3340
3392
  {
3341
3393
  ref: menuRef,
3342
- className: clsx_default("dropdown-menu", direction, { visible }),
3394
+ className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
3343
3395
  style: { top: position.top, left: position.left },
3344
3396
  role: "menu",
3345
- children: items.map((item) => /* @__PURE__ */ jsx320(
3397
+ children: items.map((item) => /* @__PURE__ */ jsx321(
3346
3398
  "button",
3347
3399
  {
3348
3400
  className: clsx_default("dropdown-item", {
@@ -3357,30 +3409,30 @@ var Dropdown = (props) => {
3357
3409
  item.key
3358
3410
  ))
3359
3411
  }
3360
- )
3412
+ ) })
3361
3413
  ] });
3362
3414
  };
3363
3415
  Dropdown.displayName = "Dropdown";
3364
3416
  var Dropdown_default = Dropdown;
3365
3417
 
3366
3418
  // src/components/EmptyState/EmptyState.tsx
3367
- import { jsx as jsx321, jsxs as jsxs207 } from "react/jsx-runtime";
3419
+ import { jsx as jsx322, jsxs as jsxs207 } from "react/jsx-runtime";
3368
3420
  var EmptyState = (props) => {
3369
3421
  const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
3370
3422
  return /* @__PURE__ */ jsxs207("div", { className: "lib-xplat-empty-state", children: [
3371
- icon && /* @__PURE__ */ jsx321("div", { className: "empty-icon", children: icon }),
3372
- !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" }) }) }),
3373
- /* @__PURE__ */ jsx321("p", { className: "empty-title", children: title }),
3374
- description && /* @__PURE__ */ jsx321("p", { className: "empty-description", children: description }),
3375
- 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 })
3376
3428
  ] });
3377
3429
  };
3378
3430
  EmptyState.displayName = "EmptyState";
3379
3431
  var EmptyState_default = EmptyState;
3380
3432
 
3381
3433
  // src/components/FileUpload/FileUpload.tsx
3382
- import React19 from "react";
3383
- 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";
3384
3436
  var FileUpload = (props) => {
3385
3437
  const {
3386
3438
  accept,
@@ -3390,8 +3442,8 @@ var FileUpload = (props) => {
3390
3442
  label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
3391
3443
  description
3392
3444
  } = props;
3393
- const [isDragOver, setIsDragOver] = React19.useState(false);
3394
- const inputRef = React19.useRef(null);
3445
+ const [isDragOver, setIsDragOver] = React20.useState(false);
3446
+ const inputRef = React20.useRef(null);
3395
3447
  const handleFiles = (fileList) => {
3396
3448
  let files = Array.from(fileList);
3397
3449
  if (maxSize) {
@@ -3430,7 +3482,7 @@ var FileUpload = (props) => {
3430
3482
  onDragLeave: handleDragLeave,
3431
3483
  onClick: () => inputRef.current?.click(),
3432
3484
  children: [
3433
- /* @__PURE__ */ jsx322(
3485
+ /* @__PURE__ */ jsx323(
3434
3486
  "input",
3435
3487
  {
3436
3488
  ref: inputRef,
@@ -3440,9 +3492,9 @@ var FileUpload = (props) => {
3440
3492
  onChange: handleChange
3441
3493
  }
3442
3494
  ),
3443
- /* @__PURE__ */ jsx322("div", { className: "upload-icon", children: /* @__PURE__ */ jsx322(UploadIcon_default, {}) }),
3444
- /* @__PURE__ */ jsx322("p", { className: "upload-label", children: label }),
3445
- 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 })
3446
3498
  ]
3447
3499
  }
3448
3500
  );
@@ -3451,10 +3503,10 @@ FileUpload.displayName = "FileUpload";
3451
3503
  var FileUpload_default = FileUpload;
3452
3504
 
3453
3505
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
3454
- import React21 from "react";
3506
+ import React22 from "react";
3455
3507
 
3456
3508
  // src/components/HtmlTypeWriter/utils.ts
3457
- import React20 from "react";
3509
+ import React21 from "react";
3458
3510
  var voidTags = /* @__PURE__ */ new Set([
3459
3511
  "br",
3460
3512
  "img",
@@ -3522,41 +3574,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
3522
3574
  props[attr.name] = attr.value;
3523
3575
  });
3524
3576
  if (voidTags.has(tag)) {
3525
- return React20.createElement(tag, props);
3577
+ return React21.createElement(tag, props);
3526
3578
  }
3527
3579
  const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
3528
- return React20.createElement(tag, props, ...children);
3580
+ return React21.createElement(tag, props, ...children);
3529
3581
  };
3530
3582
  var htmlToReactProgressive = (root, typedLen, rangeMap) => {
3531
3583
  const nodes = Array.from(root.childNodes).map((child, idx) => {
3532
3584
  const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
3533
- return node == null ? null : React20.createElement(React20.Fragment, { key: idx }, node);
3585
+ return node == null ? null : React21.createElement(React21.Fragment, { key: idx }, node);
3534
3586
  }).filter(Boolean);
3535
3587
  return nodes.length === 0 ? null : nodes;
3536
3588
  };
3537
3589
 
3538
3590
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
3539
- import { jsx as jsx323 } from "react/jsx-runtime";
3591
+ import { jsx as jsx324 } from "react/jsx-runtime";
3540
3592
  var HtmlTypeWriter = ({
3541
3593
  html,
3542
3594
  duration = 20,
3543
3595
  onDone,
3544
3596
  onChange
3545
3597
  }) => {
3546
- const [typedLen, setTypedLen] = React21.useState(0);
3547
- const doneCalledRef = React21.useRef(false);
3548
- 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(() => {
3549
3601
  if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
3550
3602
  const decoded = decodeHtmlEntities(html);
3551
3603
  const doc2 = new DOMParser().parseFromString(decoded, "text/html");
3552
3604
  const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
3553
3605
  return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
3554
3606
  }, [html]);
3555
- React21.useEffect(() => {
3607
+ React22.useEffect(() => {
3556
3608
  setTypedLen(0);
3557
3609
  doneCalledRef.current = false;
3558
3610
  }, [html]);
3559
- React21.useEffect(() => {
3611
+ React22.useEffect(() => {
3560
3612
  if (!totalLength) return;
3561
3613
  if (typedLen >= totalLength) return;
3562
3614
  const timer = window.setInterval(() => {
@@ -3564,33 +3616,33 @@ var HtmlTypeWriter = ({
3564
3616
  }, duration);
3565
3617
  return () => window.clearInterval(timer);
3566
3618
  }, [typedLen, totalLength, duration]);
3567
- React21.useEffect(() => {
3619
+ React22.useEffect(() => {
3568
3620
  if (typedLen > 0 && typedLen < totalLength) {
3569
3621
  onChange?.();
3570
3622
  }
3571
3623
  }, [typedLen, totalLength, onChange]);
3572
- React21.useEffect(() => {
3624
+ React22.useEffect(() => {
3573
3625
  if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
3574
3626
  doneCalledRef.current = true;
3575
3627
  onDone?.();
3576
3628
  }
3577
3629
  }, [typedLen, totalLength, onDone]);
3578
- const parsed = React21.useMemo(
3630
+ const parsed = React22.useMemo(
3579
3631
  () => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
3580
3632
  [doc, typedLen, rangeMap]
3581
3633
  );
3582
- return /* @__PURE__ */ jsx323("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
3634
+ return /* @__PURE__ */ jsx324("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
3583
3635
  };
3584
3636
  HtmlTypeWriter.displayName = "HtmlTypeWriter";
3585
3637
  var HtmlTypeWriter_default = HtmlTypeWriter;
3586
3638
 
3587
3639
  // src/components/ImageSelector/ImageSelector.tsx
3588
- import React22 from "react";
3589
- 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";
3590
3642
  var ImageSelector = (props) => {
3591
3643
  const { value, label, onChange } = props;
3592
- const [previewUrl, setPreviewUrl] = React22.useState();
3593
- React22.useEffect(() => {
3644
+ const [previewUrl, setPreviewUrl] = React23.useState();
3645
+ React23.useEffect(() => {
3594
3646
  if (!value) {
3595
3647
  setPreviewUrl(void 0);
3596
3648
  return;
@@ -3599,7 +3651,7 @@ var ImageSelector = (props) => {
3599
3651
  setPreviewUrl(url);
3600
3652
  return () => URL.revokeObjectURL(url);
3601
3653
  }, [value]);
3602
- const inputRef = React22.useRef(null);
3654
+ const inputRef = React23.useRef(null);
3603
3655
  const handleFileChange = (e) => {
3604
3656
  const selectedFile = e.target.files?.[0];
3605
3657
  if (selectedFile) {
@@ -3613,7 +3665,7 @@ var ImageSelector = (props) => {
3613
3665
  inputRef.current?.click();
3614
3666
  };
3615
3667
  return /* @__PURE__ */ jsxs209("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
3616
- /* @__PURE__ */ jsx324(
3668
+ /* @__PURE__ */ jsx325(
3617
3669
  "input",
3618
3670
  {
3619
3671
  type: "file",
@@ -3624,12 +3676,12 @@ var ImageSelector = (props) => {
3624
3676
  }
3625
3677
  ),
3626
3678
  value && /* @__PURE__ */ jsxs209("div", { className: "action-bar", children: [
3627
- /* @__PURE__ */ jsx324("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ jsx324(UploadIcon_default, {}) }),
3628
- /* @__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, {}) })
3629
3681
  ] }),
3630
- /* @__PURE__ */ jsx324("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx324("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs209("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
3631
- /* @__PURE__ */ jsx324("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx324(ImageIcon_default, {}) }),
3632
- /* @__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" })
3633
3685
  ] }) })
3634
3686
  ] });
3635
3687
  };
@@ -3637,7 +3689,7 @@ ImageSelector.displayName = "ImageSelector";
3637
3689
  var ImageSelector_default = ImageSelector;
3638
3690
 
3639
3691
  // src/components/Pagination/Pagination.tsx
3640
- import { jsx as jsx325, jsxs as jsxs210 } from "react/jsx-runtime";
3692
+ import { jsx as jsx326, jsxs as jsxs210 } from "react/jsx-runtime";
3641
3693
  var getPageRange = (current, totalPages, siblingCount) => {
3642
3694
  const totalNumbers = siblingCount * 2 + 5;
3643
3695
  if (totalPages <= totalNumbers) {
@@ -3681,18 +3733,18 @@ var Pagination = (props) => {
3681
3733
  }
3682
3734
  };
3683
3735
  return /* @__PURE__ */ jsxs210("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
3684
- /* @__PURE__ */ jsx325(
3736
+ /* @__PURE__ */ jsx326(
3685
3737
  "button",
3686
3738
  {
3687
3739
  className: "page-btn prev",
3688
3740
  disabled: current <= 1,
3689
3741
  onClick: () => handleClick(current - 1),
3690
3742
  "aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
3691
- children: /* @__PURE__ */ jsx325(ChevronLeftIcon_default, {})
3743
+ children: /* @__PURE__ */ jsx326(ChevronLeftIcon_default, {})
3692
3744
  }
3693
3745
  ),
3694
3746
  pages.map(
3695
- (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(
3696
3748
  "button",
3697
3749
  {
3698
3750
  className: clsx_default("page-btn", { active: page === current }),
@@ -3703,14 +3755,14 @@ var Pagination = (props) => {
3703
3755
  page
3704
3756
  )
3705
3757
  ),
3706
- /* @__PURE__ */ jsx325(
3758
+ /* @__PURE__ */ jsx326(
3707
3759
  "button",
3708
3760
  {
3709
3761
  className: "page-btn next",
3710
3762
  disabled: current >= totalPages,
3711
3763
  onClick: () => handleClick(current + 1),
3712
3764
  "aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
3713
- children: /* @__PURE__ */ jsx325(ChevronRightIcon_default, {})
3765
+ children: /* @__PURE__ */ jsx326(ChevronRightIcon_default, {})
3714
3766
  }
3715
3767
  )
3716
3768
  ] });
@@ -3719,17 +3771,17 @@ Pagination.displayName = "Pagination";
3719
3771
  var Pagination_default = Pagination;
3720
3772
 
3721
3773
  // src/components/PopOver/PopOver.tsx
3722
- import React23 from "react";
3723
- 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";
3724
3776
  var PopOver = (props) => {
3725
3777
  const { children, isOpen, onClose, PopOverEl } = props;
3726
- const popRef = React23.useRef(null);
3727
- const triggerRef = React23.useRef(null);
3728
- const [localOpen, setLocalOpen] = React23.useState(false);
3729
- 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);
3730
3782
  useClickOutside_default([popRef, triggerRef], onClose, isOpen);
3731
3783
  const position = useAutoPosition_default(triggerRef, popRef, localOpen);
3732
- React23.useEffect(() => {
3784
+ React24.useEffect(() => {
3733
3785
  if (isOpen) {
3734
3786
  setLocalOpen(isOpen);
3735
3787
  setTimeout(() => {
@@ -3752,11 +3804,11 @@ var PopOver = (props) => {
3752
3804
  },
3753
3805
  children: [
3754
3806
  children,
3755
- localOpen && /* @__PURE__ */ jsx326(
3807
+ localOpen && /* @__PURE__ */ jsx327(Portal_default, { children: /* @__PURE__ */ jsx327(
3756
3808
  "div",
3757
3809
  {
3758
3810
  className: clsx_default(
3759
- "content-wrap",
3811
+ "lib-xplat-pop-over-content",
3760
3812
  position.direction,
3761
3813
  eventTrigger && "visible"
3762
3814
  ),
@@ -3766,7 +3818,7 @@ var PopOver = (props) => {
3766
3818
  },
3767
3819
  children: PopOverEl
3768
3820
  }
3769
- )
3821
+ ) })
3770
3822
  ]
3771
3823
  }
3772
3824
  );
@@ -3775,7 +3827,7 @@ PopOver.displayName = "PopOver";
3775
3827
  var PopOver_default = PopOver;
3776
3828
 
3777
3829
  // src/components/Progress/Progress.tsx
3778
- import { jsx as jsx327, jsxs as jsxs212 } from "react/jsx-runtime";
3830
+ import { jsx as jsx328, jsxs as jsxs212 } from "react/jsx-runtime";
3779
3831
  var Progress = (props) => {
3780
3832
  const {
3781
3833
  value,
@@ -3786,7 +3838,7 @@ var Progress = (props) => {
3786
3838
  } = props;
3787
3839
  const percentage = Math.min(100, Math.max(0, value / max * 100));
3788
3840
  return /* @__PURE__ */ jsxs212("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
3789
- /* @__PURE__ */ jsx327(
3841
+ /* @__PURE__ */ jsx328(
3790
3842
  "div",
3791
3843
  {
3792
3844
  className: "track",
@@ -3794,7 +3846,7 @@ var Progress = (props) => {
3794
3846
  "aria-valuenow": value,
3795
3847
  "aria-valuemin": 0,
3796
3848
  "aria-valuemax": max,
3797
- children: /* @__PURE__ */ jsx327(
3849
+ children: /* @__PURE__ */ jsx328(
3798
3850
  "div",
3799
3851
  {
3800
3852
  className: "bar",
@@ -3813,17 +3865,17 @@ Progress.displayName = "Progress";
3813
3865
  var Progress_default = Progress;
3814
3866
 
3815
3867
  // src/components/Radio/RadioGroupContext.tsx
3816
- import React24 from "react";
3817
- var RadioGroupContext = React24.createContext(
3868
+ import React25 from "react";
3869
+ var RadioGroupContext = React25.createContext(
3818
3870
  null
3819
3871
  );
3820
3872
  var useRadioGroupContext = () => {
3821
- return React24.useContext(RadioGroupContext);
3873
+ return React25.useContext(RadioGroupContext);
3822
3874
  };
3823
3875
  var RadioGroupContext_default = RadioGroupContext;
3824
3876
 
3825
3877
  // src/components/Radio/Radio.tsx
3826
- import { jsx as jsx328, jsxs as jsxs213 } from "react/jsx-runtime";
3878
+ import { jsx as jsx329, jsxs as jsxs213 } from "react/jsx-runtime";
3827
3879
  var Radio = (props) => {
3828
3880
  const {
3829
3881
  label,
@@ -3851,18 +3903,18 @@ var Radio = (props) => {
3851
3903
  localChecked ? "checked" : void 0
3852
3904
  ),
3853
3905
  children: [
3854
- /* @__PURE__ */ jsx328("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
3855
- /* @__PURE__ */ jsx328(
3906
+ /* @__PURE__ */ jsx329("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
3907
+ /* @__PURE__ */ jsx329(
3856
3908
  "div",
3857
3909
  {
3858
3910
  className: clsx_default(
3859
3911
  "circle",
3860
3912
  localChecked ? "checked" : void 0
3861
3913
  ),
3862
- children: localChecked && /* @__PURE__ */ jsx328("div", { className: "inner-circle" })
3914
+ children: localChecked && /* @__PURE__ */ jsx329("div", { className: "inner-circle" })
3863
3915
  }
3864
3916
  ),
3865
- label && /* @__PURE__ */ jsx328("span", { children: label })
3917
+ label && /* @__PURE__ */ jsx329("span", { children: label })
3866
3918
  ]
3867
3919
  }
3868
3920
  );
@@ -3871,28 +3923,28 @@ Radio.displayName = "Radio";
3871
3923
  var Radio_default = Radio;
3872
3924
 
3873
3925
  // src/components/Radio/RadioGroup.tsx
3874
- import { Fragment as Fragment3, jsx as jsx329 } from "react/jsx-runtime";
3926
+ import { Fragment as Fragment4, jsx as jsx330 } from "react/jsx-runtime";
3875
3927
  var RadioGroup = (props) => {
3876
3928
  const { children, ...rest } = props;
3877
- 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 }) });
3878
3930
  };
3879
3931
  RadioGroup.displayName = "RadioGroup";
3880
3932
  var RadioGroup_default = RadioGroup;
3881
3933
 
3882
3934
  // src/components/Select/Select.tsx
3883
- import React27 from "react";
3935
+ import React28 from "react";
3884
3936
 
3885
3937
  // src/components/Select/context.ts
3886
- import React25 from "react";
3887
- var SelectContext = React25.createContext(null);
3938
+ import React26 from "react";
3939
+ var SelectContext = React26.createContext(null);
3888
3940
  var context_default = SelectContext;
3889
3941
 
3890
3942
  // src/components/Select/SelectItem.tsx
3891
- import React26 from "react";
3892
- import { jsx as jsx330 } from "react/jsx-runtime";
3943
+ import React27 from "react";
3944
+ import { jsx as jsx331 } from "react/jsx-runtime";
3893
3945
  var SelectItem = (props) => {
3894
3946
  const { children, value, onClick, disabled = false } = props;
3895
- const ctx = React26.useContext(context_default);
3947
+ const ctx = React27.useContext(context_default);
3896
3948
  const handleClick = (e) => {
3897
3949
  e.preventDefault();
3898
3950
  e.stopPropagation();
@@ -3901,7 +3953,7 @@ var SelectItem = (props) => {
3901
3953
  ctx?.close();
3902
3954
  onClick?.();
3903
3955
  };
3904
- return /* @__PURE__ */ jsx330(
3956
+ return /* @__PURE__ */ jsx331(
3905
3957
  "div",
3906
3958
  {
3907
3959
  className: clsx_default("select-item", disabled && "disabled"),
@@ -3922,7 +3974,7 @@ SelectItem.displayName = "Select.Item";
3922
3974
  var SelectItem_default = SelectItem;
3923
3975
 
3924
3976
  // src/components/Select/Select.tsx
3925
- import { jsx as jsx331, jsxs as jsxs214 } from "react/jsx-runtime";
3977
+ import { jsx as jsx332, jsxs as jsxs214 } from "react/jsx-runtime";
3926
3978
  var ANIMATION_DURATION_MS3 = 200;
3927
3979
  var SelectRoot = (props) => {
3928
3980
  const {
@@ -3934,26 +3986,26 @@ var SelectRoot = (props) => {
3934
3986
  error = false,
3935
3987
  size = "md"
3936
3988
  } = props;
3937
- const itemChildren = React27.Children.toArray(children).filter(
3938
- (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
3939
3991
  );
3940
3992
  const isControlled = valueProp !== void 0;
3941
- const [isOpen, setOpen] = React27.useState(false);
3942
- const [uncontrolledLabel, setUncontrolledLabel] = React27.useState(null);
3943
- const controlledLabel = React27.useMemo(() => {
3993
+ const [isOpen, setOpen] = React28.useState(false);
3994
+ const [uncontrolledLabel, setUncontrolledLabel] = React28.useState(null);
3995
+ const controlledLabel = React28.useMemo(() => {
3944
3996
  if (!isControlled) return null;
3945
3997
  const match = itemChildren.find((child) => child.props.value === valueProp);
3946
3998
  return match ? match.props.children : null;
3947
3999
  }, [isControlled, valueProp, itemChildren]);
3948
4000
  const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
3949
- const triggerRef = React27.useRef(null);
3950
- const contentRef = React27.useRef(null);
3951
- const [mounted, setMounted] = React27.useState(false);
3952
- const [visible, setVisible] = React27.useState(false);
3953
- 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(() => {
3954
4006
  if (disabled && isOpen) setOpen(false);
3955
4007
  }, [disabled, isOpen]);
3956
- React27.useEffect(() => {
4008
+ React28.useEffect(() => {
3957
4009
  if (isOpen) {
3958
4010
  setMounted(true);
3959
4011
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -3963,12 +4015,12 @@ var SelectRoot = (props) => {
3963
4015
  const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
3964
4016
  return () => clearTimeout(t);
3965
4017
  }, [isOpen]);
3966
- const open = React27.useCallback(() => setOpen(true), []);
3967
- const close = React27.useCallback(() => setOpen(false), []);
3968
- 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), []);
3969
4021
  useClickOutside_default([contentRef, triggerRef], close, isOpen);
3970
4022
  const position = useAutoPosition_default(triggerRef, contentRef, mounted);
3971
- const setSelected = React27.useCallback(
4023
+ const setSelected = React28.useCallback(
3972
4024
  (label, itemValue) => {
3973
4025
  if (!isControlled) {
3974
4026
  setUncontrolledLabel(label);
@@ -3977,7 +4029,7 @@ var SelectRoot = (props) => {
3977
4029
  },
3978
4030
  [isControlled, onChange]
3979
4031
  );
3980
- const ctxValue = React27.useMemo(
4032
+ const ctxValue = React28.useMemo(
3981
4033
  () => ({
3982
4034
  isOpen,
3983
4035
  mounted,
@@ -3998,7 +4050,7 @@ var SelectRoot = (props) => {
3998
4050
  if (disabled) return;
3999
4051
  toggle();
4000
4052
  };
4001
- return /* @__PURE__ */ jsx331(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs214(
4053
+ return /* @__PURE__ */ jsx332(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs214(
4002
4054
  "div",
4003
4055
  {
4004
4056
  className: clsx_default(
@@ -4033,7 +4085,7 @@ var SelectRoot = (props) => {
4033
4085
  }
4034
4086
  },
4035
4087
  children: [
4036
- /* @__PURE__ */ jsx331(
4088
+ /* @__PURE__ */ jsx332(
4037
4089
  "span",
4038
4090
  {
4039
4091
  className: clsx_default(
@@ -4043,27 +4095,27 @@ var SelectRoot = (props) => {
4043
4095
  children: selectedLabel ?? placeholder
4044
4096
  }
4045
4097
  ),
4046
- /* @__PURE__ */ jsx331(
4098
+ /* @__PURE__ */ jsx332(
4047
4099
  "span",
4048
4100
  {
4049
4101
  className: clsx_default("select-trigger-icon", isOpen && "open"),
4050
4102
  "aria-hidden": true,
4051
- children: /* @__PURE__ */ jsx331(ChevronDownIcon_default, {})
4103
+ children: /* @__PURE__ */ jsx332(ChevronDownIcon_default, {})
4052
4104
  }
4053
4105
  )
4054
4106
  ]
4055
4107
  }
4056
4108
  ),
4057
- mounted && /* @__PURE__ */ jsx331(
4109
+ mounted && /* @__PURE__ */ jsx332(Portal_default, { children: /* @__PURE__ */ jsx332(
4058
4110
  "div",
4059
4111
  {
4060
- className: clsx_default("select-content", position.direction, stateClass),
4112
+ className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
4061
4113
  ref: contentRef,
4062
- style: { ...position.position },
4114
+ style: { ...position.position, minWidth: position.position.width },
4063
4115
  role: "listbox",
4064
- children: itemChildren
4116
+ children: /* @__PURE__ */ jsx332(context_default.Provider, { value: ctxValue, children: itemChildren })
4065
4117
  }
4066
- )
4118
+ ) })
4067
4119
  ]
4068
4120
  }
4069
4121
  ) });
@@ -4075,14 +4127,14 @@ var Select = Object.assign(SelectRoot, {
4075
4127
  var Select_default = Select;
4076
4128
 
4077
4129
  // src/components/Skeleton/Skeleton.tsx
4078
- import { jsx as jsx332 } from "react/jsx-runtime";
4130
+ import { jsx as jsx333 } from "react/jsx-runtime";
4079
4131
  var Skeleton = (props) => {
4080
4132
  const { variant = "text", width, height } = props;
4081
4133
  const style = {
4082
4134
  width: typeof width === "number" ? `${width}px` : width,
4083
4135
  height: typeof height === "number" ? `${height}px` : height
4084
4136
  };
4085
- return /* @__PURE__ */ jsx332(
4137
+ return /* @__PURE__ */ jsx333(
4086
4138
  "div",
4087
4139
  {
4088
4140
  className: clsx_default("lib-xplat-skeleton", variant),
@@ -4095,20 +4147,20 @@ Skeleton.displayName = "Skeleton";
4095
4147
  var Skeleton_default = Skeleton;
4096
4148
 
4097
4149
  // src/components/Spinner/Spinner.tsx
4098
- import { jsx as jsx333, jsxs as jsxs215 } from "react/jsx-runtime";
4150
+ import { jsx as jsx334, jsxs as jsxs215 } from "react/jsx-runtime";
4099
4151
  var Spinner = (props) => {
4100
4152
  const {
4101
4153
  size = "md",
4102
4154
  type = "brand"
4103
4155
  } = props;
4104
- return /* @__PURE__ */ jsx333(
4156
+ return /* @__PURE__ */ jsx334(
4105
4157
  "div",
4106
4158
  {
4107
4159
  className: clsx_default("lib-xplat-spinner", size, type),
4108
4160
  role: "status",
4109
4161
  "aria-label": "\uB85C\uB529 \uC911",
4110
4162
  children: /* @__PURE__ */ jsxs215("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
4111
- /* @__PURE__ */ jsx333(
4163
+ /* @__PURE__ */ jsx334(
4112
4164
  "circle",
4113
4165
  {
4114
4166
  className: "track",
@@ -4118,7 +4170,7 @@ var Spinner = (props) => {
4118
4170
  strokeWidth: "3"
4119
4171
  }
4120
4172
  ),
4121
- /* @__PURE__ */ jsx333(
4173
+ /* @__PURE__ */ jsx334(
4122
4174
  "circle",
4123
4175
  {
4124
4176
  className: "indicator",
@@ -4137,20 +4189,20 @@ Spinner.displayName = "Spinner";
4137
4189
  var Spinner_default = Spinner;
4138
4190
 
4139
4191
  // src/components/Steps/Steps.tsx
4140
- import { jsx as jsx334, jsxs as jsxs216 } from "react/jsx-runtime";
4192
+ import { jsx as jsx335, jsxs as jsxs216 } from "react/jsx-runtime";
4141
4193
  var Steps = (props) => {
4142
4194
  const {
4143
4195
  items,
4144
4196
  current,
4145
4197
  type = "brand"
4146
4198
  } = props;
4147
- 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) => {
4148
4200
  const status = index < current ? "completed" : index === current ? "active" : "pending";
4149
4201
  return /* @__PURE__ */ jsxs216("div", { className: clsx_default("step-item", status), children: [
4150
- /* @__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 }) }),
4151
4203
  /* @__PURE__ */ jsxs216("div", { className: "step-content", children: [
4152
- /* @__PURE__ */ jsx334("span", { className: "step-title", children: item.title }),
4153
- 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 })
4154
4206
  ] })
4155
4207
  ] }, index);
4156
4208
  }) });
@@ -4159,8 +4211,8 @@ Steps.displayName = "Steps";
4159
4211
  var Steps_default = Steps;
4160
4212
 
4161
4213
  // src/components/Swiper/Swiper.tsx
4162
- import React28 from "react";
4163
- 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";
4164
4216
  var Swiper = (props) => {
4165
4217
  const {
4166
4218
  auto = false,
@@ -4183,23 +4235,23 @@ var Swiper = (props) => {
4183
4235
  const maxIndex = Math.max(0, totalSlides - viewItemCount);
4184
4236
  const useLoop = loop && canSlide;
4185
4237
  const cloneCount = useLoop ? totalSlides : 0;
4186
- const extendedItems = React28.useMemo(() => {
4238
+ const extendedItems = React29.useMemo(() => {
4187
4239
  if (!useLoop) return items;
4188
4240
  return [...items, ...items, ...items];
4189
4241
  }, [items, useLoop]);
4190
4242
  const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
4191
- const [innerIndex, setInnerIndex] = React28.useState(
4243
+ const [innerIndex, setInnerIndex] = React29.useState(
4192
4244
  useLoop ? cloneCount + initialIdx : initialIdx
4193
4245
  );
4194
- const [isDragging, setIsDragging] = React28.useState(false);
4195
- const [dragOffset, setDragOffset] = React28.useState(0);
4196
- const [animated, setAnimated] = React28.useState(true);
4197
- const [containerWidth, setContainerWidth] = React28.useState(0);
4198
- const containerRef = React28.useRef(null);
4199
- const startXRef = React28.useRef(0);
4200
- const startTimeRef = React28.useRef(0);
4201
- const autoplayTimerRef = React28.useRef(null);
4202
- 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(() => {
4203
4255
  const el = containerRef.current;
4204
4256
  if (!el) return;
4205
4257
  const ro = new ResizeObserver((entries) => {
@@ -4218,7 +4270,7 @@ var Swiper = (props) => {
4218
4270
  return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
4219
4271
  };
4220
4272
  const realIndex = getRealIndex(innerIndex);
4221
- const moveToInner = React28.useCallback(
4273
+ const moveToInner = React29.useCallback(
4222
4274
  (idx, withAnim = true) => {
4223
4275
  if (!useLoop) {
4224
4276
  setAnimated(withAnim);
@@ -4246,7 +4298,7 @@ var Swiper = (props) => {
4246
4298
  },
4247
4299
  [useLoop, cloneCount, totalSlides]
4248
4300
  );
4249
- const handleTransitionEnd = React28.useCallback(() => {
4301
+ const handleTransitionEnd = React29.useCallback(() => {
4250
4302
  if (!useLoop) return;
4251
4303
  const real = getRealIndex(innerIndex);
4252
4304
  const canonical = cloneCount + real;
@@ -4256,7 +4308,7 @@ var Swiper = (props) => {
4256
4308
  }
4257
4309
  onChange?.(Math.min(real, maxIndex));
4258
4310
  }, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
4259
- const slideTo = React28.useCallback(
4311
+ const slideTo = React29.useCallback(
4260
4312
  (logicalIndex) => {
4261
4313
  if (!canSlide) return;
4262
4314
  const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
@@ -4266,7 +4318,7 @@ var Swiper = (props) => {
4266
4318
  },
4267
4319
  [canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
4268
4320
  );
4269
- const slideNext = React28.useCallback(() => {
4321
+ const slideNext = React29.useCallback(() => {
4270
4322
  if (!canSlide) return;
4271
4323
  const nextInner = innerIndex + slideBy;
4272
4324
  if (useLoop) {
@@ -4275,7 +4327,7 @@ var Swiper = (props) => {
4275
4327
  moveToInner(Math.min(nextInner, maxIndex), true);
4276
4328
  }
4277
4329
  }, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
4278
- const slidePrev = React28.useCallback(() => {
4330
+ const slidePrev = React29.useCallback(() => {
4279
4331
  if (!canSlide) return;
4280
4332
  const prevInner = innerIndex - slideBy;
4281
4333
  if (useLoop) {
@@ -4284,7 +4336,7 @@ var Swiper = (props) => {
4284
4336
  moveToInner(Math.max(prevInner, 0), true);
4285
4337
  }
4286
4338
  }, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
4287
- React28.useEffect(() => {
4339
+ React29.useEffect(() => {
4288
4340
  if (indexProp === void 0) return;
4289
4341
  const clamped = Math.max(0, Math.min(indexProp, maxIndex));
4290
4342
  const target = useLoop ? cloneCount + clamped : clamped;
@@ -4292,12 +4344,12 @@ var Swiper = (props) => {
4292
4344
  moveToInner(target, true);
4293
4345
  }
4294
4346
  }, [indexProp]);
4295
- React28.useImperativeHandle(swiperRef, () => ({
4347
+ React29.useImperativeHandle(swiperRef, () => ({
4296
4348
  slidePrev,
4297
4349
  slideNext,
4298
4350
  slideTo
4299
4351
  }));
4300
- React28.useEffect(() => {
4352
+ React29.useEffect(() => {
4301
4353
  if (!auto || !canSlide) return;
4302
4354
  autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
4303
4355
  return () => {
@@ -4320,7 +4372,7 @@ var Swiper = (props) => {
4320
4372
  startXRef.current = getClientX(e);
4321
4373
  startTimeRef.current = Date.now();
4322
4374
  };
4323
- React28.useEffect(() => {
4375
+ React29.useEffect(() => {
4324
4376
  if (!isDragging) return;
4325
4377
  const handleMove = (e) => {
4326
4378
  setDragOffset(getClientX(e) - startXRef.current);
@@ -4358,8 +4410,8 @@ var Swiper = (props) => {
4358
4410
  }, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
4359
4411
  const slideWidthPercent = 100 / viewItemCount;
4360
4412
  const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
4361
- const slideElements = React28.useMemo(
4362
- () => extendedItems.map((item, idx) => /* @__PURE__ */ jsx335(
4413
+ const slideElements = React29.useMemo(
4414
+ () => extendedItems.map((item, idx) => /* @__PURE__ */ jsx336(
4363
4415
  "div",
4364
4416
  {
4365
4417
  className: "lib-xplat-swiper__slide",
@@ -4379,13 +4431,13 @@ var Swiper = (props) => {
4379
4431
  totalSteps - 1
4380
4432
  );
4381
4433
  return /* @__PURE__ */ jsxs217("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
4382
- /* @__PURE__ */ jsx335(
4434
+ /* @__PURE__ */ jsx336(
4383
4435
  "div",
4384
4436
  {
4385
4437
  className: "lib-xplat-swiper__viewport",
4386
4438
  onMouseDown: handleDragStart,
4387
4439
  onTouchStart: handleDragStart,
4388
- children: /* @__PURE__ */ jsx335(
4440
+ children: /* @__PURE__ */ jsx336(
4389
4441
  "div",
4390
4442
  {
4391
4443
  className: clsx_default(
@@ -4403,7 +4455,7 @@ var Swiper = (props) => {
4403
4455
  )
4404
4456
  }
4405
4457
  ),
4406
- 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(
4407
4459
  "span",
4408
4460
  {
4409
4461
  className: "lib-xplat-swiper__progress-fill",
@@ -4413,7 +4465,7 @@ var Swiper = (props) => {
4413
4465
  }
4414
4466
  }
4415
4467
  ) }) }),
4416
- 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(
4417
4469
  "button",
4418
4470
  {
4419
4471
  className: clsx_default(
@@ -4431,8 +4483,8 @@ Swiper.displayName = "Swiper";
4431
4483
  var Swiper_default = Swiper;
4432
4484
 
4433
4485
  // src/components/Switch/Switch.tsx
4434
- import React29 from "react";
4435
- import { jsx as jsx336 } from "react/jsx-runtime";
4486
+ import React30 from "react";
4487
+ import { jsx as jsx337 } from "react/jsx-runtime";
4436
4488
  var KNOB_TRANSITION_MS = 250;
4437
4489
  var Switch = (props) => {
4438
4490
  const {
@@ -4442,9 +4494,9 @@ var Switch = (props) => {
4442
4494
  disabled,
4443
4495
  onChange
4444
4496
  } = props;
4445
- const [isAnimating, setIsAnimating] = React29.useState(false);
4446
- const timeoutRef = React29.useRef(null);
4447
- React29.useEffect(() => {
4497
+ const [isAnimating, setIsAnimating] = React30.useState(false);
4498
+ const timeoutRef = React30.useRef(null);
4499
+ React30.useEffect(() => {
4448
4500
  return () => {
4449
4501
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
4450
4502
  };
@@ -4459,7 +4511,7 @@ var Switch = (props) => {
4459
4511
  timeoutRef.current = null;
4460
4512
  }, KNOB_TRANSITION_MS);
4461
4513
  };
4462
- return /* @__PURE__ */ jsx336(
4514
+ return /* @__PURE__ */ jsx337(
4463
4515
  "div",
4464
4516
  {
4465
4517
  className: clsx_default(
@@ -4472,7 +4524,7 @@ var Switch = (props) => {
4472
4524
  ),
4473
4525
  onClick: handleClick,
4474
4526
  "aria-disabled": disabled || isAnimating,
4475
- 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) })
4476
4528
  }
4477
4529
  );
4478
4530
  };
@@ -4480,17 +4532,17 @@ Switch.displayName = "Switch";
4480
4532
  var Switch_default = Switch;
4481
4533
 
4482
4534
  // src/components/Table/TableContext.tsx
4483
- import React30 from "react";
4484
- var TableContext = React30.createContext(null);
4535
+ import React31 from "react";
4536
+ var TableContext = React31.createContext(null);
4485
4537
  var useTableContext = () => {
4486
- const ctx = React30.useContext(TableContext);
4538
+ const ctx = React31.useContext(TableContext);
4487
4539
  if (!ctx) throw new Error("Table components must be used inside <Table>");
4488
4540
  return ctx;
4489
4541
  };
4490
4542
  var TableContext_default = TableContext;
4491
4543
 
4492
4544
  // src/components/Table/Table.tsx
4493
- import { jsx as jsx337 } from "react/jsx-runtime";
4545
+ import { jsx as jsx338 } from "react/jsx-runtime";
4494
4546
  var Table = (props) => {
4495
4547
  const {
4496
4548
  children,
@@ -4499,7 +4551,7 @@ var Table = (props) => {
4499
4551
  headerSticky = false,
4500
4552
  stickyShadow = true
4501
4553
  } = props;
4502
- 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(
4503
4555
  TableContext_default.Provider,
4504
4556
  {
4505
4557
  value: {
@@ -4508,7 +4560,7 @@ var Table = (props) => {
4508
4560
  headerSticky,
4509
4561
  stickyShadow
4510
4562
  },
4511
- children: /* @__PURE__ */ jsx337("table", { className: "lib-xplat-table", children })
4563
+ children: /* @__PURE__ */ jsx338("table", { className: "lib-xplat-table", children })
4512
4564
  }
4513
4565
  ) });
4514
4566
  };
@@ -4516,41 +4568,41 @@ Table.displayName = "Table";
4516
4568
  var Table_default = Table;
4517
4569
 
4518
4570
  // src/components/Table/TableBody.tsx
4519
- import { jsx as jsx338 } from "react/jsx-runtime";
4571
+ import { jsx as jsx339 } from "react/jsx-runtime";
4520
4572
  var TableBody = (props) => {
4521
4573
  const { children } = props;
4522
- return /* @__PURE__ */ jsx338("tbody", { children });
4574
+ return /* @__PURE__ */ jsx339("tbody", { children });
4523
4575
  };
4524
4576
  TableBody.displayName = "TableBody";
4525
4577
  var TableBody_default = TableBody;
4526
4578
 
4527
4579
  // src/components/Table/TableCell.tsx
4528
- import React33 from "react";
4580
+ import React34 from "react";
4529
4581
 
4530
4582
  // src/components/Table/TableHeadContext.tsx
4531
- import React31 from "react";
4532
- var TableHeadContext = React31.createContext(
4583
+ import React32 from "react";
4584
+ var TableHeadContext = React32.createContext(
4533
4585
  null
4534
4586
  );
4535
4587
  var useTableHeadContext = () => {
4536
- const ctx = React31.useContext(TableHeadContext);
4588
+ const ctx = React32.useContext(TableHeadContext);
4537
4589
  return ctx;
4538
4590
  };
4539
4591
  var TableHeadContext_default = TableHeadContext;
4540
4592
 
4541
4593
  // src/components/Table/TableRowContext.tsx
4542
- import React32 from "react";
4543
- var TableRowContext = React32.createContext(null);
4594
+ import React33 from "react";
4595
+ var TableRowContext = React33.createContext(null);
4544
4596
  var useTableRowContext = () => {
4545
- const ctx = React32.useContext(TableRowContext);
4597
+ const ctx = React33.useContext(TableRowContext);
4546
4598
  if (!ctx) throw new Error("Table components must be used inside <Table>");
4547
4599
  return ctx;
4548
4600
  };
4549
4601
  var TableRowContext_default = TableRowContext;
4550
4602
 
4551
4603
  // src/components/Table/TableCell.tsx
4552
- import { jsx as jsx339 } from "react/jsx-runtime";
4553
- var TableCell = React33.memo((props) => {
4604
+ import { jsx as jsx340 } from "react/jsx-runtime";
4605
+ var TableCell = React34.memo((props) => {
4554
4606
  const {
4555
4607
  children,
4556
4608
  align = "center",
@@ -4562,9 +4614,9 @@ var TableCell = React33.memo((props) => {
4562
4614
  const { registerStickyCell, stickyCells } = useTableRowContext();
4563
4615
  const { stickyShadow } = useTableContext();
4564
4616
  const headContext = useTableHeadContext();
4565
- const [left, setLeft] = React33.useState(0);
4566
- const cellRef = React33.useRef(null);
4567
- const calculateLeft = React33.useCallback(() => {
4617
+ const [left, setLeft] = React34.useState(0);
4618
+ const cellRef = React34.useRef(null);
4619
+ const calculateLeft = React34.useCallback(() => {
4568
4620
  if (!cellRef.current) return 0;
4569
4621
  let totalLeft = 0;
4570
4622
  for (const ref of stickyCells) {
@@ -4573,7 +4625,7 @@ var TableCell = React33.memo((props) => {
4573
4625
  }
4574
4626
  return totalLeft;
4575
4627
  }, [stickyCells]);
4576
- React33.useEffect(() => {
4628
+ React34.useEffect(() => {
4577
4629
  if (!isSticky || !cellRef.current) return;
4578
4630
  registerStickyCell(cellRef);
4579
4631
  setLeft(calculateLeft());
@@ -4591,7 +4643,7 @@ var TableCell = React33.memo((props) => {
4591
4643
  const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
4592
4644
  const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
4593
4645
  const enableHover = headContext && headContext.cellHover;
4594
- return /* @__PURE__ */ jsx339(
4646
+ return /* @__PURE__ */ jsx340(
4595
4647
  CellTag,
4596
4648
  {
4597
4649
  ref: cellRef,
@@ -4616,21 +4668,21 @@ TableCell.displayName = "TableCell";
4616
4668
  var TableCell_default = TableCell;
4617
4669
 
4618
4670
  // src/components/Table/TableHead.tsx
4619
- import { jsx as jsx340 } from "react/jsx-runtime";
4671
+ import { jsx as jsx341 } from "react/jsx-runtime";
4620
4672
  var TableHead = ({
4621
4673
  children,
4622
4674
  cellHover = false
4623
4675
  }) => {
4624
4676
  const { headerSticky } = useTableContext();
4625
- 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 }) });
4626
4678
  };
4627
4679
  TableHead.displayName = "TableHead";
4628
4680
  var TableHead_default = TableHead;
4629
4681
 
4630
4682
  // src/components/Table/TableRow.tsx
4631
- import React34 from "react";
4632
- import { jsx as jsx341 } from "react/jsx-runtime";
4633
- 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) => {
4634
4686
  const {
4635
4687
  children,
4636
4688
  type = "secondary",
@@ -4638,14 +4690,14 @@ var TableRow = React34.memo((props) => {
4638
4690
  onClick
4639
4691
  } = props;
4640
4692
  const { rowBorderUse } = useTableContext();
4641
- const [stickyCells, setStickyCells] = React34.useState([]);
4693
+ const [stickyCells, setStickyCells] = React35.useState([]);
4642
4694
  const registerStickyCell = (ref) => {
4643
4695
  setStickyCells((prev) => {
4644
4696
  if (prev.includes(ref)) return prev;
4645
4697
  return [...prev, ref];
4646
4698
  });
4647
4699
  };
4648
- 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(
4649
4701
  "tr",
4650
4702
  {
4651
4703
  className: clsx_default(
@@ -4663,7 +4715,7 @@ TableRow.displayName = "TableRow";
4663
4715
  var TableRow_default = TableRow;
4664
4716
 
4665
4717
  // src/components/Tag/Tag.tsx
4666
- import { jsx as jsx342, jsxs as jsxs218 } from "react/jsx-runtime";
4718
+ import { jsx as jsx343, jsxs as jsxs218 } from "react/jsx-runtime";
4667
4719
  var Tag = (props) => {
4668
4720
  const {
4669
4721
  children,
@@ -4684,8 +4736,8 @@ var Tag = (props) => {
4684
4736
  disabled && "disabled"
4685
4737
  ),
4686
4738
  children: [
4687
- /* @__PURE__ */ jsx342("span", { className: "tag-label", children }),
4688
- 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, {}) })
4689
4741
  ]
4690
4742
  }
4691
4743
  );
@@ -4694,12 +4746,12 @@ Tag.displayName = "Tag";
4694
4746
  var Tag_default = Tag;
4695
4747
 
4696
4748
  // src/components/TextArea/TextArea.tsx
4697
- import React35 from "react";
4698
- import { jsx as jsx343 } from "react/jsx-runtime";
4699
- var TextArea = React35.forwardRef(
4749
+ import React36 from "react";
4750
+ import { jsx as jsx344 } from "react/jsx-runtime";
4751
+ var TextArea = React36.forwardRef(
4700
4752
  (props, ref) => {
4701
4753
  const { value, onChange, disabled, ...textareaProps } = props;
4702
- const localRef = React35.useRef(null);
4754
+ const localRef = React36.useRef(null);
4703
4755
  const setRefs = (el) => {
4704
4756
  localRef.current = el;
4705
4757
  if (!ref) return;
@@ -4719,21 +4771,21 @@ var TextArea = React35.forwardRef(
4719
4771
  onChange(event);
4720
4772
  }
4721
4773
  };
4722
- React35.useEffect(() => {
4774
+ React36.useEffect(() => {
4723
4775
  const el = localRef.current;
4724
4776
  if (!el) return;
4725
4777
  el.style.height = "0px";
4726
4778
  const nextHeight = Math.min(el.scrollHeight, 400);
4727
4779
  el.style.height = `${nextHeight}px`;
4728
4780
  }, [value]);
4729
- 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(
4730
4782
  "div",
4731
4783
  {
4732
4784
  className: clsx_default(
4733
4785
  "lib-xplat-textarea",
4734
4786
  disabled ? "disabled" : void 0
4735
4787
  ),
4736
- children: /* @__PURE__ */ jsx343(
4788
+ children: /* @__PURE__ */ jsx344(
4737
4789
  "textarea",
4738
4790
  {
4739
4791
  ...textareaProps,
@@ -4751,25 +4803,25 @@ TextArea.displayName = "TextArea";
4751
4803
  var TextArea_default = TextArea;
4752
4804
 
4753
4805
  // src/components/Toast/Toast.tsx
4754
- import React36 from "react";
4806
+ import React37 from "react";
4755
4807
  import { createPortal as createPortal3 } from "react-dom";
4756
- import { jsx as jsx344, jsxs as jsxs219 } from "react/jsx-runtime";
4757
- var ToastContext = React36.createContext(null);
4808
+ import { jsx as jsx345, jsxs as jsxs219 } from "react/jsx-runtime";
4809
+ var ToastContext = React37.createContext(null);
4758
4810
  var useToast = () => {
4759
- const ctx = React36.useContext(ToastContext);
4811
+ const ctx = React37.useContext(ToastContext);
4760
4812
  if (!ctx) throw new Error("useToast must be used within ToastProvider");
4761
4813
  return ctx;
4762
4814
  };
4763
4815
  var EXIT_DURATION = 300;
4764
4816
  var ToastItemComponent = ({ item, isExiting, onClose }) => {
4765
- const ref = React36.useRef(null);
4766
- const [height, setHeight] = React36.useState(void 0);
4767
- React36.useEffect(() => {
4817
+ const ref = React37.useRef(null);
4818
+ const [height, setHeight] = React37.useState(void 0);
4819
+ React37.useEffect(() => {
4768
4820
  if (ref.current && !isExiting) {
4769
4821
  setHeight(ref.current.offsetHeight);
4770
4822
  }
4771
4823
  }, [isExiting]);
4772
- return /* @__PURE__ */ jsx344(
4824
+ return /* @__PURE__ */ jsx345(
4773
4825
  "div",
4774
4826
  {
4775
4827
  className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
@@ -4784,8 +4836,8 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
4784
4836
  className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
4785
4837
  role: "alert",
4786
4838
  children: [
4787
- /* @__PURE__ */ jsx344("span", { className: "message", children: item.message }),
4788
- /* @__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" })
4789
4841
  ]
4790
4842
  }
4791
4843
  )
@@ -4796,13 +4848,13 @@ var ToastProvider = ({
4796
4848
  children,
4797
4849
  position = "top-right"
4798
4850
  }) => {
4799
- const [toasts, setToasts] = React36.useState([]);
4800
- const [removing, setRemoving] = React36.useState(/* @__PURE__ */ new Set());
4801
- const [mounted, setMounted] = React36.useState(false);
4802
- 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(() => {
4803
4855
  setMounted(true);
4804
4856
  }, []);
4805
- const remove = React36.useCallback((id) => {
4857
+ const remove = React37.useCallback((id) => {
4806
4858
  setRemoving((prev) => new Set(prev).add(id));
4807
4859
  setTimeout(() => {
4808
4860
  setToasts((prev) => prev.filter((t) => t.id !== id));
@@ -4813,7 +4865,7 @@ var ToastProvider = ({
4813
4865
  });
4814
4866
  }, EXIT_DURATION);
4815
4867
  }, []);
4816
- const toast = React36.useCallback(
4868
+ const toast = React37.useCallback(
4817
4869
  (type, message, duration = 3e3) => {
4818
4870
  const id = `${Date.now()}-${Math.random()}`;
4819
4871
  setToasts((prev) => [...prev, { id, type, message }]);
@@ -4826,7 +4878,7 @@ var ToastProvider = ({
4826
4878
  return /* @__PURE__ */ jsxs219(ToastContext.Provider, { value: { toast }, children: [
4827
4879
  children,
4828
4880
  mounted && createPortal3(
4829
- /* @__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(
4830
4882
  ToastItemComponent,
4831
4883
  {
4832
4884
  item: t,
@@ -4842,29 +4894,29 @@ var ToastProvider = ({
4842
4894
  ToastProvider.displayName = "ToastProvider";
4843
4895
 
4844
4896
  // src/components/Tooltip/Tooltip.tsx
4845
- import React37 from "react";
4846
- 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";
4847
4899
  var Tooltip = (props) => {
4848
4900
  const {
4849
4901
  type = "primary",
4850
4902
  description,
4851
4903
  children
4852
4904
  } = props;
4853
- const iconRef = React37.useRef(null);
4905
+ const iconRef = React38.useRef(null);
4854
4906
  return /* @__PURE__ */ jsxs220("div", { className: "lib-xplat-tooltip", children: [
4855
- /* @__PURE__ */ jsx345("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
4856
- /* @__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 })
4857
4909
  ] });
4858
4910
  };
4859
4911
  Tooltip.displayName = "Tooltip";
4860
4912
  var Tooltip_default = Tooltip;
4861
4913
 
4862
4914
  // src/components/Video/Video.tsx
4863
- import React38 from "react";
4864
- 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";
4865
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: [
4866
- /* @__PURE__ */ jsx346("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
4867
- /* @__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" })
4868
4920
  ] });
4869
4921
  var formatTime = (sec) => {
4870
4922
  if (!Number.isFinite(sec) || sec < 0) return "0:00";
@@ -4872,7 +4924,7 @@ var formatTime = (sec) => {
4872
4924
  const s = Math.floor(sec % 60);
4873
4925
  return `${m}:${s.toString().padStart(2, "0")}`;
4874
4926
  };
4875
- var Video = React38.forwardRef((props, ref) => {
4927
+ var Video = React39.forwardRef((props, ref) => {
4876
4928
  const {
4877
4929
  src,
4878
4930
  poster,
@@ -4896,21 +4948,21 @@ var Video = React38.forwardRef((props, ref) => {
4896
4948
  children,
4897
4949
  ...rest
4898
4950
  } = props;
4899
- const containerRef = React38.useRef(null);
4900
- const videoRef = React38.useRef(null);
4901
- const [isPlaying, setIsPlaying] = React38.useState(Boolean(autoPlay));
4902
- const [isLoaded, setIsLoaded] = React38.useState(false);
4903
- const [currentTime, setCurrentTime] = React38.useState(0);
4904
- const [duration, setDuration] = React38.useState(0);
4905
- const [buffered, setBuffered] = React38.useState(0);
4906
- const [volume, setVolume] = React38.useState(1);
4907
- const [isMuted, setIsMuted] = React38.useState(Boolean(muted));
4908
- const [isFullscreen, setIsFullscreen] = React38.useState(false);
4909
- const [playbackRate, setPlaybackRate] = React38.useState(1);
4910
- const [rateMenuOpen, setRateMenuOpen] = React38.useState(false);
4911
- const [captionsOn, setCaptionsOn] = React38.useState(false);
4912
- const [isPip, setIsPip] = React38.useState(false);
4913
- 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(
4914
4966
  (el) => {
4915
4967
  videoRef.current = el;
4916
4968
  if (typeof ref === "function") ref(el);
@@ -4918,14 +4970,14 @@ var Video = React38.forwardRef((props, ref) => {
4918
4970
  },
4919
4971
  [ref]
4920
4972
  );
4921
- React38.useEffect(() => {
4973
+ React39.useEffect(() => {
4922
4974
  const onFsChange = () => {
4923
4975
  setIsFullscreen(document.fullscreenElement === containerRef.current);
4924
4976
  };
4925
4977
  document.addEventListener("fullscreenchange", onFsChange);
4926
4978
  return () => document.removeEventListener("fullscreenchange", onFsChange);
4927
4979
  }, []);
4928
- React38.useEffect(() => {
4980
+ React39.useEffect(() => {
4929
4981
  const v = videoRef.current;
4930
4982
  if (!v) return;
4931
4983
  const onEnter = () => setIsPip(true);
@@ -5045,7 +5097,7 @@ var Video = React38.forwardRef((props, ref) => {
5045
5097
  ref: containerRef,
5046
5098
  className: clsx_default("lib-xplat-video", showControls && "has-controls"),
5047
5099
  children: [
5048
- /* @__PURE__ */ jsx346(
5100
+ /* @__PURE__ */ jsx347(
5049
5101
  "video",
5050
5102
  {
5051
5103
  ref: setRefs,
@@ -5066,7 +5118,7 @@ var Video = React38.forwardRef((props, ref) => {
5066
5118
  children
5067
5119
  }
5068
5120
  ),
5069
- showCenterPlay && /* @__PURE__ */ jsx346(
5121
+ showCenterPlay && /* @__PURE__ */ jsx347(
5070
5122
  "button",
5071
5123
  {
5072
5124
  type: "button",
@@ -5078,11 +5130,11 @@ var Video = React38.forwardRef((props, ref) => {
5078
5130
  onClick: togglePlay,
5079
5131
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
5080
5132
  tabIndex: -1,
5081
- 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, {}) })
5082
5134
  }
5083
5135
  ),
5084
5136
  showControls && /* @__PURE__ */ jsxs221("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
5085
- /* @__PURE__ */ jsx346(
5137
+ /* @__PURE__ */ jsx347(
5086
5138
  "input",
5087
5139
  {
5088
5140
  type: "range",
@@ -5100,28 +5152,28 @@ var Video = React38.forwardRef((props, ref) => {
5100
5152
  }
5101
5153
  ),
5102
5154
  /* @__PURE__ */ jsxs221("div", { className: "controls-row", children: [
5103
- /* @__PURE__ */ jsx346(
5155
+ /* @__PURE__ */ jsx347(
5104
5156
  "button",
5105
5157
  {
5106
5158
  type: "button",
5107
5159
  className: "control-btn",
5108
5160
  onClick: togglePlay,
5109
5161
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
5110
- children: isPlaying ? /* @__PURE__ */ jsx346(PauseIcon_default, {}) : /* @__PURE__ */ jsx346(PlayIcon_default, {})
5162
+ children: isPlaying ? /* @__PURE__ */ jsx347(PauseIcon_default, {}) : /* @__PURE__ */ jsx347(PlayIcon_default, {})
5111
5163
  }
5112
5164
  ),
5113
5165
  /* @__PURE__ */ jsxs221("div", { className: "volume-group", children: [
5114
- /* @__PURE__ */ jsx346(
5166
+ /* @__PURE__ */ jsx347(
5115
5167
  "button",
5116
5168
  {
5117
5169
  type: "button",
5118
5170
  className: "control-btn",
5119
5171
  onClick: toggleMute,
5120
5172
  "aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
5121
- children: /* @__PURE__ */ jsx346(VolumeGlyph, {})
5173
+ children: /* @__PURE__ */ jsx347(VolumeGlyph, {})
5122
5174
  }
5123
5175
  ),
5124
- /* @__PURE__ */ jsx346(
5176
+ /* @__PURE__ */ jsx347(
5125
5177
  "input",
5126
5178
  {
5127
5179
  type: "range",
@@ -5141,7 +5193,7 @@ var Video = React38.forwardRef((props, ref) => {
5141
5193
  " / ",
5142
5194
  formatTime(duration)
5143
5195
  ] }),
5144
- /* @__PURE__ */ jsx346("div", { className: "controls-spacer" }),
5196
+ /* @__PURE__ */ jsx347("div", { className: "controls-spacer" }),
5145
5197
  playbackRates && playbackRates.length > 0 && /* @__PURE__ */ jsxs221("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
5146
5198
  /* @__PURE__ */ jsxs221(
5147
5199
  "button",
@@ -5157,7 +5209,7 @@ var Video = React38.forwardRef((props, ref) => {
5157
5209
  ]
5158
5210
  }
5159
5211
  ),
5160
- 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(
5161
5213
  "button",
5162
5214
  {
5163
5215
  type: "button",
@@ -5171,7 +5223,7 @@ var Video = React38.forwardRef((props, ref) => {
5171
5223
  }
5172
5224
  ) }, r2)) })
5173
5225
  ] }),
5174
- showCaptions && /* @__PURE__ */ jsx346(
5226
+ showCaptions && /* @__PURE__ */ jsx347(
5175
5227
  "button",
5176
5228
  {
5177
5229
  type: "button",
@@ -5179,37 +5231,37 @@ var Video = React38.forwardRef((props, ref) => {
5179
5231
  onClick: toggleCaptions,
5180
5232
  "aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
5181
5233
  "aria-pressed": captionsOn,
5182
- children: /* @__PURE__ */ jsx346(TypeIcon_default, {})
5234
+ children: /* @__PURE__ */ jsx347(TypeIcon_default, {})
5183
5235
  }
5184
5236
  ),
5185
- showPip && pipSupported && /* @__PURE__ */ jsx346(
5237
+ showPip && pipSupported && /* @__PURE__ */ jsx347(
5186
5238
  "button",
5187
5239
  {
5188
5240
  type: "button",
5189
5241
  className: clsx_default("control-btn", isPip && "is-active"),
5190
5242
  onClick: togglePip,
5191
5243
  "aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
5192
- children: /* @__PURE__ */ jsx346(PipIcon, {})
5244
+ children: /* @__PURE__ */ jsx347(PipIcon, {})
5193
5245
  }
5194
5246
  ),
5195
- showDownload && /* @__PURE__ */ jsx346(
5247
+ showDownload && /* @__PURE__ */ jsx347(
5196
5248
  "a",
5197
5249
  {
5198
5250
  className: "control-btn",
5199
5251
  href: src,
5200
5252
  download: downloadFileName ?? true,
5201
5253
  "aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
5202
- children: /* @__PURE__ */ jsx346(DownloadIcon_default, {})
5254
+ children: /* @__PURE__ */ jsx347(DownloadIcon_default, {})
5203
5255
  }
5204
5256
  ),
5205
- /* @__PURE__ */ jsx346(
5257
+ /* @__PURE__ */ jsx347(
5206
5258
  "button",
5207
5259
  {
5208
5260
  type: "button",
5209
5261
  className: "control-btn",
5210
5262
  onClick: toggleFullscreen,
5211
5263
  "aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
5212
- children: isFullscreen ? /* @__PURE__ */ jsx346(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx346(MaximizeIcon_default, {})
5264
+ children: isFullscreen ? /* @__PURE__ */ jsx347(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx347(MaximizeIcon_default, {})
5213
5265
  }
5214
5266
  )
5215
5267
  ] })