@x-plat/design-system 0.5.11 → 0.5.13

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