@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.
@@ -2156,14 +2156,23 @@ var useChartSize = (ref) => {
2156
2156
  import_react5.default.useEffect(() => {
2157
2157
  const el = ref.current;
2158
2158
  if (!el) return;
2159
+ let rafId = 0;
2159
2160
  const observer = new ResizeObserver((entries) => {
2160
- const entry = entries[0];
2161
- if (!entry) return;
2162
- const { width, height } = entry.contentRect;
2163
- setSize({ width: Math.floor(width), height: Math.floor(height) });
2161
+ cancelAnimationFrame(rafId);
2162
+ rafId = requestAnimationFrame(() => {
2163
+ const entry = entries[0];
2164
+ if (!entry) return;
2165
+ const { width, height } = entry.contentRect;
2166
+ const w = Math.floor(width);
2167
+ const h = Math.floor(height);
2168
+ setSize((prev) => prev.width === w && prev.height === h ? prev : { width: w, height: h });
2169
+ });
2164
2170
  });
2165
2171
  observer.observe(el);
2166
- return () => observer.disconnect();
2172
+ return () => {
2173
+ cancelAnimationFrame(rafId);
2174
+ observer.disconnect();
2175
+ };
2167
2176
  }, [ref]);
2168
2177
  return size;
2169
2178
  };
@@ -2175,15 +2184,21 @@ var useChartTooltip = (enabled) => {
2175
2184
  content: ""
2176
2185
  });
2177
2186
  const containerRef = import_react5.default.useRef(null);
2187
+ const rafRef = import_react5.default.useRef(0);
2178
2188
  const move = import_react5.default.useCallback((e) => {
2179
2189
  if (!enabled) return;
2180
- const rect = containerRef.current?.getBoundingClientRect();
2181
- if (!rect) return;
2182
- setTooltip((prev) => ({
2183
- ...prev,
2184
- x: e.clientX - rect.left,
2185
- y: e.clientY - rect.top - 12
2186
- }));
2190
+ const clientX = e.clientX;
2191
+ const clientY = e.clientY;
2192
+ cancelAnimationFrame(rafRef.current);
2193
+ rafRef.current = requestAnimationFrame(() => {
2194
+ const rect = containerRef.current?.getBoundingClientRect();
2195
+ if (!rect) return;
2196
+ setTooltip((prev) => ({
2197
+ ...prev,
2198
+ x: clientX - rect.left,
2199
+ y: clientY - rect.top - 12
2200
+ }));
2201
+ });
2187
2202
  }, [enabled]);
2188
2203
  const show = import_react5.default.useCallback((e, content) => {
2189
2204
  if (!enabled) return;
@@ -2197,10 +2212,35 @@ var useChartTooltip = (enabled) => {
2197
2212
  });
2198
2213
  }, [enabled]);
2199
2214
  const hide = import_react5.default.useCallback(() => {
2215
+ cancelAnimationFrame(rafRef.current);
2200
2216
  setTooltip((prev) => ({ ...prev, visible: false }));
2201
2217
  }, []);
2202
2218
  return { tooltip, show, hide, move, containerRef };
2203
2219
  };
2220
+ var GridLines = import_react5.default.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(import_jsx_runtime305.Fragment, { children: [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
2221
+ const y = PADDING.top + (1 - ratio) * chartH;
2222
+ const val = Math.round(maxVal * ratio);
2223
+ return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
2224
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
2225
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
2226
+ ] }, ratio);
2227
+ }) }));
2228
+ GridLines.displayName = "GridLines";
2229
+ var getLabelStep = (count, chartW) => {
2230
+ const minLabelWidth = 40;
2231
+ const maxLabels = Math.floor(chartW / minLabelWidth);
2232
+ if (count <= maxLabels) return 1;
2233
+ return Math.ceil(count / maxLabels);
2234
+ };
2235
+ var AxisLabels = import_react5.default.memo(({ labels, count, chartW, height }) => {
2236
+ const step = getLabelStep(count, chartW);
2237
+ return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(import_jsx_runtime305.Fragment, { children: labels.map((label, i) => {
2238
+ if (i % step !== 0) return null;
2239
+ const x = PADDING.left + i / (count - 1 || 1) * chartW;
2240
+ return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
2241
+ }) });
2242
+ });
2243
+ AxisLabels.displayName = "AxisLabels";
2204
2244
  var LineChart = import_react5.default.memo(({ data, labels, width, height, onHover, onMove, onLeave }) => {
2205
2245
  const entries = import_react5.default.useMemo(() => Object.entries(data), [data]);
2206
2246
  const maxVal = import_react5.default.useMemo(() => {
@@ -2220,19 +2260,10 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, onHov
2220
2260
  ),
2221
2261
  [entries, count, chartW, chartH, maxVal]
2222
2262
  );
2263
+ const showPoints = count <= 100;
2223
2264
  return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
2224
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
2225
- const y = PADDING.top + (1 - ratio) * chartH;
2226
- const val = Math.round(maxVal * ratio);
2227
- return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
2228
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
2229
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
2230
- ] }, ratio);
2231
- }),
2232
- labels.map((label, i) => {
2233
- const x = PADDING.left + i / (count - 1 || 1) * chartW;
2234
- return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
2235
- }),
2265
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
2266
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(AxisLabels, { labels, count, chartW, height }),
2236
2267
  entries.map(([key], di) => {
2237
2268
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
2238
2269
  const color = palette[2];
@@ -2247,7 +2278,7 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, onHov
2247
2278
  strokeWidth: "2"
2248
2279
  }
2249
2280
  ),
2250
- points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
2281
+ showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
2251
2282
  "circle",
2252
2283
  {
2253
2284
  cx: p.x,
@@ -2285,19 +2316,10 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, onHo
2285
2316
  ),
2286
2317
  [entries, count, chartW, chartH, maxVal]
2287
2318
  );
2319
+ const showPoints = count <= 100;
2288
2320
  return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
2289
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
2290
- const y = PADDING.top + (1 - ratio) * chartH;
2291
- const val = Math.round(maxVal * ratio);
2292
- return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
2293
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
2294
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
2295
- ] }, ratio);
2296
- }),
2297
- labels.map((label, i) => {
2298
- const x = PADDING.left + i / (count - 1 || 1) * chartW;
2299
- return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
2300
- }),
2321
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
2322
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(AxisLabels, { labels, count, chartW, height }),
2301
2323
  entries.map(([key], di) => {
2302
2324
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
2303
2325
  const color = palette[2];
@@ -2313,7 +2335,7 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, onHo
2313
2335
  ] }) }),
2314
2336
  /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("path", { d: areaPath, fill: `url(#${gradientId})` }),
2315
2337
  /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("path", { d: linePath, fill: "none", stroke: color, strokeWidth: "2" }),
2316
- points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
2338
+ showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
2317
2339
  "circle",
2318
2340
  {
2319
2341
  cx: p.x,
@@ -2343,11 +2365,11 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, onHove
2343
2365
  const chartW = width - PADDING.left - PADDING.right;
2344
2366
  const chartH = height - PADDING.top - PADDING.bottom;
2345
2367
  const groupW = chartW / count;
2346
- const barW = Math.min(32, groupW * 0.7 / groupCount);
2368
+ const barW = Math.max(1, Math.min(32, groupW * 0.7 / groupCount));
2347
2369
  const bars = import_react5.default.useMemo(
2348
2370
  () => entries.map(
2349
2371
  ([, values], di) => values.map((v, i) => {
2350
- const h = v / maxVal * chartH;
2372
+ const h = Math.max(0, v / maxVal * chartH);
2351
2373
  const x = PADDING.left + groupW * i + (groupW - barW * groupCount) / 2 + barW * di;
2352
2374
  const y = PADDING.top + chartH - h;
2353
2375
  return { x, y, w: barW, h, v };
@@ -2355,16 +2377,13 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, onHove
2355
2377
  ),
2356
2378
  [entries, maxVal, chartH, groupW, barW, groupCount]
2357
2379
  );
2380
+ const barLabelStep = getLabelStep(count, chartW);
2358
2381
  return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
2359
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
2360
- const y = PADDING.top + (1 - ratio) * chartH;
2361
- const val = Math.round(maxVal * ratio);
2362
- return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
2363
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
2364
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
2365
- ] }, ratio);
2382
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
2383
+ labels.map((label, i) => {
2384
+ if (i % barLabelStep !== 0) return null;
2385
+ return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
2366
2386
  }),
2367
- labels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i)),
2368
2387
  entries.map(([key], di) => {
2369
2388
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
2370
2389
  const color = palette[2];
@@ -2544,7 +2563,7 @@ Chip.displayName = "Chip";
2544
2563
  var Chip_default = Chip;
2545
2564
 
2546
2565
  // src/components/DatePicker/InputDatePicker/index.tsx
2547
- var import_react11 = __toESM(require("react"), 1);
2566
+ var import_react12 = __toESM(require("react"), 1);
2548
2567
 
2549
2568
  // src/components/Input/Input.tsx
2550
2569
  var import_react6 = __toESM(require("react"), 1);
@@ -2734,15 +2753,33 @@ PasswordInput.displayName = "PasswordInput";
2734
2753
  var PasswordInput_default = PasswordInput;
2735
2754
 
2736
2755
  // src/components/Modal/Modal.tsx
2756
+ var import_react10 = __toESM(require("react"), 1);
2757
+ var import_react_dom2 = require("react-dom");
2758
+
2759
+ // src/tokens/hooks/Portal.tsx
2737
2760
  var import_react9 = __toESM(require("react"), 1);
2738
- var import_react_dom = require("react-dom");
2761
+ var import_react_dom = __toESM(require("react-dom"), 1);
2739
2762
  var import_jsx_runtime311 = require("react/jsx-runtime");
2763
+ var PortalContainerContext = import_react9.default.createContext(null);
2764
+ var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(PortalContainerContext.Provider, { value: container, children });
2765
+ var Portal = ({ children }) => {
2766
+ const contextContainer = import_react9.default.useContext(PortalContainerContext);
2767
+ if (typeof document === "undefined") return null;
2768
+ const container = contextContainer ?? document.body;
2769
+ return import_react_dom.default.createPortal(children, container);
2770
+ };
2771
+ Portal.displayName = "Portal";
2772
+ var Portal_default = Portal;
2773
+
2774
+ // src/components/Modal/Modal.tsx
2775
+ var import_jsx_runtime312 = require("react/jsx-runtime");
2740
2776
  var ANIMATION_DURATION_MS = 200;
2741
2777
  var Modal = (props) => {
2742
2778
  const { isOpen, onClose, children } = props;
2743
- const [mounted, setMounted] = import_react9.default.useState(false);
2744
- const [visible, setVisible] = import_react9.default.useState(false);
2745
- import_react9.default.useEffect(() => {
2779
+ const [mounted, setMounted] = import_react10.default.useState(false);
2780
+ const [visible, setVisible] = import_react10.default.useState(false);
2781
+ const boxRef = import_react10.default.useRef(null);
2782
+ import_react10.default.useEffect(() => {
2746
2783
  if (isOpen) {
2747
2784
  setMounted(true);
2748
2785
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -2755,20 +2792,21 @@ var Modal = (props) => {
2755
2792
  if (typeof document === "undefined") return null;
2756
2793
  if (!mounted) return null;
2757
2794
  const stateClass = visible ? "enter" : "exit";
2758
- return (0, import_react_dom.createPortal)(
2759
- /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
2795
+ return (0, import_react_dom2.createPortal)(
2796
+ /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
2760
2797
  "div",
2761
2798
  {
2762
2799
  className: clsx_default("lib-xplat-modal", "dim", stateClass),
2763
2800
  onClick: onClose,
2764
- children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
2801
+ children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
2765
2802
  "div",
2766
2803
  {
2804
+ ref: boxRef,
2767
2805
  className: clsx_default("lib-xplat-modal", "modal-box", stateClass),
2768
2806
  role: "dialog",
2769
2807
  "aria-modal": "true",
2770
2808
  onClick: (e) => e.stopPropagation(),
2771
- children
2809
+ children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(PortalProvider, { container: boxRef.current, children })
2772
2810
  }
2773
2811
  )
2774
2812
  }
@@ -2780,9 +2818,9 @@ Modal.displayName = "Modal";
2780
2818
  var Modal_default = Modal;
2781
2819
 
2782
2820
  // src/components/DatePicker/SingleDatePicker/index.tsx
2783
- var import_react10 = __toESM(require("react"), 1);
2784
- var import_jsx_runtime312 = require("react/jsx-runtime");
2785
- var DayCell2 = import_react10.default.memo(
2821
+ var import_react11 = __toESM(require("react"), 1);
2822
+ var import_jsx_runtime313 = require("react/jsx-runtime");
2823
+ var DayCell2 = import_react11.default.memo(
2786
2824
  ({
2787
2825
  day,
2788
2826
  disabled,
@@ -2792,7 +2830,7 @@ var DayCell2 = import_react10.default.memo(
2792
2830
  isEnd,
2793
2831
  inRange,
2794
2832
  onSelect
2795
- }) => /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
2833
+ }) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
2796
2834
  "button",
2797
2835
  {
2798
2836
  type: "button",
@@ -2834,26 +2872,26 @@ var SingleDatePicker = (props) => {
2834
2872
  initialYear,
2835
2873
  initialMonth
2836
2874
  );
2837
- const [pickerMode, setPickerMode] = import_react10.default.useState("days");
2838
- const [yearRangeStart, setYearRangeStart] = import_react10.default.useState(
2875
+ const [pickerMode, setPickerMode] = import_react11.default.useState("days");
2876
+ const [yearRangeStart, setYearRangeStart] = import_react11.default.useState(
2839
2877
  Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
2840
2878
  );
2841
- const minTime = import_react10.default.useMemo(
2879
+ const minTime = import_react11.default.useMemo(
2842
2880
  () => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
2843
2881
  [minDate]
2844
2882
  );
2845
- const maxTime = import_react10.default.useMemo(
2883
+ const maxTime = import_react11.default.useMemo(
2846
2884
  () => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
2847
2885
  [maxDate]
2848
2886
  );
2849
- const highlightSet = import_react10.default.useMemo(() => {
2887
+ const highlightSet = import_react11.default.useMemo(() => {
2850
2888
  const set = /* @__PURE__ */ new Set();
2851
2889
  for (const h of highlightDates) {
2852
2890
  set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
2853
2891
  }
2854
2892
  return set;
2855
2893
  }, [highlightDates]);
2856
- const handleSelect = import_react10.default.useCallback(
2894
+ const handleSelect = import_react11.default.useCallback(
2857
2895
  (date) => {
2858
2896
  onChange?.(date);
2859
2897
  },
@@ -2890,20 +2928,20 @@ var SingleDatePicker = (props) => {
2890
2928
  const monthLabels = MONTH_LABELS[locale];
2891
2929
  const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
2892
2930
  const hasRange = rangeStart != null && rangeEnd != null;
2893
- return /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(
2931
+ return /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(
2894
2932
  "div",
2895
2933
  {
2896
2934
  className: clsx_default("lib-xplat-datepicker", "single"),
2897
2935
  children: [
2898
- /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)("div", { className: "datepicker-header", children: [
2899
- /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(ChevronLeftIcon_default, {}) }),
2900
- /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
2901
- /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(ChevronRightIcon_default, {}) })
2936
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "datepicker-header", children: [
2937
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(ChevronLeftIcon_default, {}) }),
2938
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
2939
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(ChevronRightIcon_default, {}) })
2902
2940
  ] }),
2903
- /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)("div", { className: "datepicker-body", children: [
2904
- pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
2941
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "datepicker-body", children: [
2942
+ pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
2905
2943
  const y = yearRangeStart + i;
2906
- return /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
2944
+ return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
2907
2945
  "button",
2908
2946
  {
2909
2947
  type: "button",
@@ -2914,7 +2952,7 @@ var SingleDatePicker = (props) => {
2914
2952
  y
2915
2953
  );
2916
2954
  }) }),
2917
- pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
2955
+ pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
2918
2956
  "button",
2919
2957
  {
2920
2958
  type: "button",
@@ -2924,8 +2962,8 @@ var SingleDatePicker = (props) => {
2924
2962
  },
2925
2963
  i
2926
2964
  )) }),
2927
- pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(import_jsx_runtime312.Fragment, { children: [
2928
- /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
2965
+ pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(import_jsx_runtime313.Fragment, { children: [
2966
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
2929
2967
  "div",
2930
2968
  {
2931
2969
  className: clsx_default(
@@ -2937,7 +2975,7 @@ var SingleDatePicker = (props) => {
2937
2975
  },
2938
2976
  label
2939
2977
  )) }),
2940
- /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
2978
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
2941
2979
  const t = day.date.getTime();
2942
2980
  const disabled = t < minTime || t > maxTime;
2943
2981
  const selected = value ? isSameDay(day.date, value) : false;
@@ -2947,7 +2985,7 @@ var SingleDatePicker = (props) => {
2947
2985
  const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
2948
2986
  const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
2949
2987
  const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
2950
- return /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
2988
+ return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
2951
2989
  DayCell2,
2952
2990
  {
2953
2991
  day,
@@ -2972,7 +3010,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
2972
3010
  var SingleDatePicker_default = SingleDatePicker;
2973
3011
 
2974
3012
  // src/components/DatePicker/InputDatePicker/index.tsx
2975
- var import_jsx_runtime313 = require("react/jsx-runtime");
3013
+ var import_jsx_runtime314 = require("react/jsx-runtime");
2976
3014
  var formatDate = (date) => {
2977
3015
  if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
2978
3016
  const y = date.getFullYear();
@@ -2982,8 +3020,8 @@ var formatDate = (date) => {
2982
3020
  };
2983
3021
  var InputDatePicker = (props) => {
2984
3022
  const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
2985
- const [isOpen, setIsOpen] = import_react11.default.useState(false);
2986
- const [tempDate, setTempDate] = import_react11.default.useState(value ?? /* @__PURE__ */ new Date());
3023
+ const [isOpen, setIsOpen] = import_react12.default.useState(false);
3024
+ const [tempDate, setTempDate] = import_react12.default.useState(value ?? /* @__PURE__ */ new Date());
2987
3025
  const handleOpen = () => {
2988
3026
  if (disabled) return;
2989
3027
  setTempDate(value ?? /* @__PURE__ */ new Date());
@@ -2999,19 +3037,19 @@ var InputDatePicker = (props) => {
2999
3037
  const handleClose = () => {
3000
3038
  setIsOpen(false);
3001
3039
  };
3002
- return /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
3003
- /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
3040
+ return /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
3041
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
3004
3042
  Input_default,
3005
3043
  {
3006
3044
  value: formatDate(value),
3007
3045
  placeholder,
3008
- suffix: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(CalenderIcon_default, {}),
3046
+ suffix: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(CalenderIcon_default, {}),
3009
3047
  disabled,
3010
3048
  readOnly: true
3011
3049
  }
3012
3050
  ) }),
3013
- /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "lib-xplat-popup-datepicker-card", children: [
3014
- /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
3051
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "lib-xplat-popup-datepicker-card", children: [
3052
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
3015
3053
  SingleDatePicker_default,
3016
3054
  {
3017
3055
  value: tempDate,
@@ -3021,9 +3059,9 @@ var InputDatePicker = (props) => {
3021
3059
  locale
3022
3060
  }
3023
3061
  ) }),
3024
- /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "popup-datepicker-footer", children: [
3025
- /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
3026
- /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
3062
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "popup-datepicker-footer", children: [
3063
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
3064
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
3027
3065
  ] })
3028
3066
  ] }) })
3029
3067
  ] });
@@ -3032,20 +3070,20 @@ InputDatePicker.displayName = "InputDatePicker";
3032
3070
  var InputDatePicker_default = InputDatePicker;
3033
3071
 
3034
3072
  // src/components/DatePicker/PopupPicker/index.tsx
3035
- var import_react15 = __toESM(require("react"), 1);
3073
+ var import_react16 = __toESM(require("react"), 1);
3036
3074
 
3037
3075
  // src/components/DatePicker/RangePicker/index.tsx
3038
- var import_react14 = __toESM(require("react"), 1);
3076
+ var import_react15 = __toESM(require("react"), 1);
3039
3077
 
3040
3078
  // src/components/Tab/Tab.tsx
3041
- var import_react13 = __toESM(require("react"), 1);
3079
+ var import_react14 = __toESM(require("react"), 1);
3042
3080
 
3043
3081
  // src/components/Tab/TabItem.tsx
3044
- var import_react12 = __toESM(require("react"), 1);
3045
- var import_jsx_runtime314 = require("react/jsx-runtime");
3046
- var TabItem = import_react12.default.forwardRef((props, ref) => {
3082
+ var import_react13 = __toESM(require("react"), 1);
3083
+ var import_jsx_runtime315 = require("react/jsx-runtime");
3084
+ var TabItem = import_react13.default.forwardRef((props, ref) => {
3047
3085
  const { isActive, title, onClick } = props;
3048
- return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
3086
+ return /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
3049
3087
  "div",
3050
3088
  {
3051
3089
  ref,
@@ -3059,25 +3097,25 @@ TabItem.displayName = "TabItem";
3059
3097
  var TabItem_default = TabItem;
3060
3098
 
3061
3099
  // src/components/Tab/Tab.tsx
3062
- var import_jsx_runtime315 = require("react/jsx-runtime");
3100
+ var import_jsx_runtime316 = require("react/jsx-runtime");
3063
3101
  var Tab = (props) => {
3064
3102
  const { activeIndex, onChange, tabs, type, size = "md" } = props;
3065
- const [underlineStyle, setUnderlineStyle] = import_react13.default.useState({
3103
+ const [underlineStyle, setUnderlineStyle] = import_react14.default.useState({
3066
3104
  left: 0,
3067
3105
  width: 0
3068
3106
  });
3069
- const itemRefs = import_react13.default.useRef([]);
3107
+ const itemRefs = import_react14.default.useRef([]);
3070
3108
  const handleChangeActiveTab = (tabItem, tabIdx) => {
3071
3109
  onChange(tabItem, tabIdx);
3072
3110
  };
3073
- import_react13.default.useEffect(() => {
3111
+ import_react14.default.useEffect(() => {
3074
3112
  const el = itemRefs.current[activeIndex];
3075
3113
  if (el) {
3076
3114
  setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
3077
3115
  }
3078
3116
  }, [activeIndex, tabs.length]);
3079
- return /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
3080
- tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
3117
+ return /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
3118
+ tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
3081
3119
  TabItem_default,
3082
3120
  {
3083
3121
  onClick: () => handleChangeActiveTab(tab, idx),
@@ -3089,7 +3127,7 @@ var Tab = (props) => {
3089
3127
  },
3090
3128
  `${tab.value}_${idx}`
3091
3129
  )),
3092
- type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
3130
+ type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
3093
3131
  "div",
3094
3132
  {
3095
3133
  className: "tab-toggle-underline",
@@ -3105,7 +3143,7 @@ Tab.displayName = "Tab";
3105
3143
  var Tab_default = Tab;
3106
3144
 
3107
3145
  // src/components/DatePicker/RangePicker/index.tsx
3108
- var import_jsx_runtime316 = require("react/jsx-runtime");
3146
+ var import_jsx_runtime317 = require("react/jsx-runtime");
3109
3147
  var RangePicker = (props) => {
3110
3148
  const {
3111
3149
  startDate,
@@ -3115,7 +3153,7 @@ var RangePicker = (props) => {
3115
3153
  maxDate,
3116
3154
  locale = "ko"
3117
3155
  } = props;
3118
- const [activeTab, setActiveTab] = import_react14.default.useState("start");
3156
+ const [activeTab, setActiveTab] = import_react15.default.useState("start");
3119
3157
  const handleStartChange = (date) => {
3120
3158
  if (!date) return;
3121
3159
  const newStart = date > endDate ? endDate : date;
@@ -3128,8 +3166,8 @@ var RangePicker = (props) => {
3128
3166
  };
3129
3167
  const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
3130
3168
  const endMinDate = minDate && startDate > minDate ? startDate : startDate;
3131
- return /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
3132
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
3169
+ return /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
3170
+ /* @__PURE__ */ (0, import_jsx_runtime317.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
3133
3171
  Tab_default,
3134
3172
  {
3135
3173
  activeIndex: activeTab === "start" ? 0 : 1,
@@ -3142,8 +3180,8 @@ var RangePicker = (props) => {
3142
3180
  size: "sm"
3143
3181
  }
3144
3182
  ) }),
3145
- /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: "datepicker-range-panels", children: [
3146
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
3183
+ /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "datepicker-range-panels", children: [
3184
+ /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
3147
3185
  SingleDatePicker_default,
3148
3186
  {
3149
3187
  value: startDate,
@@ -3155,7 +3193,7 @@ var RangePicker = (props) => {
3155
3193
  locale
3156
3194
  }
3157
3195
  ),
3158
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
3196
+ /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
3159
3197
  SingleDatePicker_default,
3160
3198
  {
3161
3199
  value: endDate,
@@ -3168,7 +3206,7 @@ var RangePicker = (props) => {
3168
3206
  }
3169
3207
  )
3170
3208
  ] }),
3171
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
3209
+ /* @__PURE__ */ (0, import_jsx_runtime317.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
3172
3210
  SingleDatePicker_default,
3173
3211
  {
3174
3212
  value: startDate,
@@ -3179,7 +3217,7 @@ var RangePicker = (props) => {
3179
3217
  rangeEnd: endDate,
3180
3218
  locale
3181
3219
  }
3182
- ) : /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
3220
+ ) : /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
3183
3221
  SingleDatePicker_default,
3184
3222
  {
3185
3223
  value: endDate,
@@ -3197,10 +3235,10 @@ RangePicker.displayName = "RangePicker";
3197
3235
  var RangePicker_default = RangePicker;
3198
3236
 
3199
3237
  // src/components/DatePicker/PopupPicker/index.tsx
3200
- var import_jsx_runtime317 = require("react/jsx-runtime");
3238
+ var import_jsx_runtime318 = require("react/jsx-runtime");
3201
3239
  var PopupPicker = (props) => {
3202
3240
  const { component, type, locale } = props;
3203
- const [isOpen, setIsOpen] = import_react15.default.useState(false);
3241
+ const [isOpen, setIsOpen] = import_react16.default.useState(false);
3204
3242
  const handleClick = () => setIsOpen(true);
3205
3243
  const handleClose = () => setIsOpen(false);
3206
3244
  const handleSingleChange = (date) => {
@@ -3208,11 +3246,11 @@ var PopupPicker = (props) => {
3208
3246
  props.onChange?.(date);
3209
3247
  handleClose();
3210
3248
  };
3211
- return /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
3212
- import_react15.default.cloneElement(component, { onClick: handleClick }),
3213
- /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
3214
- /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "popup-datepicker-content", children: [
3215
- type === "single" && /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
3249
+ return /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
3250
+ import_react16.default.cloneElement(component, { onClick: handleClick }),
3251
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
3252
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "popup-datepicker-content", children: [
3253
+ type === "single" && /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
3216
3254
  SingleDatePicker_default,
3217
3255
  {
3218
3256
  value: props.value,
@@ -3222,7 +3260,7 @@ var PopupPicker = (props) => {
3222
3260
  locale
3223
3261
  }
3224
3262
  ),
3225
- type === "range" && /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
3263
+ type === "range" && /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
3226
3264
  RangePicker_default,
3227
3265
  {
3228
3266
  startDate: props.startDate,
@@ -3234,8 +3272,8 @@ var PopupPicker = (props) => {
3234
3272
  }
3235
3273
  )
3236
3274
  ] }),
3237
- /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "popup-datepicker-footer", children: [
3238
- /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
3275
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "popup-datepicker-footer", children: [
3276
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
3239
3277
  Button_default,
3240
3278
  {
3241
3279
  type: "secondary",
@@ -3243,7 +3281,7 @@ var PopupPicker = (props) => {
3243
3281
  children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
3244
3282
  }
3245
3283
  ),
3246
- /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
3284
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
3247
3285
  ] })
3248
3286
  ] }) })
3249
3287
  ] });
@@ -3252,10 +3290,10 @@ PopupPicker.displayName = "PopupPicker";
3252
3290
  var PopupPicker_default = PopupPicker;
3253
3291
 
3254
3292
  // src/components/Divider/Divider.tsx
3255
- var import_jsx_runtime318 = require("react/jsx-runtime");
3293
+ var import_jsx_runtime319 = require("react/jsx-runtime");
3256
3294
  var Divider = (props) => {
3257
3295
  const { orientation = "horizontal" } = props;
3258
- return /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
3296
+ return /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
3259
3297
  "div",
3260
3298
  {
3261
3299
  className: clsx_default("lib-xplat-divider", orientation),
@@ -3268,15 +3306,15 @@ Divider.displayName = "Divider";
3268
3306
  var Divider_default = Divider;
3269
3307
 
3270
3308
  // src/components/Drawer/Drawer.tsx
3271
- var import_react16 = __toESM(require("react"), 1);
3272
- var import_react_dom2 = require("react-dom");
3273
- var import_jsx_runtime319 = require("react/jsx-runtime");
3309
+ var import_react17 = __toESM(require("react"), 1);
3310
+ var import_react_dom3 = require("react-dom");
3311
+ var import_jsx_runtime320 = require("react/jsx-runtime");
3274
3312
  var ANIMATION_DURATION_MS2 = 250;
3275
3313
  var Drawer = (props) => {
3276
3314
  const { isOpen, onClose, placement = "right", width = 320, title, children } = props;
3277
- const [mounted, setMounted] = import_react16.default.useState(false);
3278
- const [visible, setVisible] = import_react16.default.useState(false);
3279
- import_react16.default.useEffect(() => {
3315
+ const [mounted, setMounted] = import_react17.default.useState(false);
3316
+ const [visible, setVisible] = import_react17.default.useState(false);
3317
+ import_react17.default.useEffect(() => {
3280
3318
  if (isOpen) {
3281
3319
  setMounted(true);
3282
3320
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -3290,13 +3328,13 @@ var Drawer = (props) => {
3290
3328
  if (!mounted) return null;
3291
3329
  const stateClass = visible ? "enter" : "exit";
3292
3330
  const widthValue = typeof width === "number" ? `${width}px` : width;
3293
- return (0, import_react_dom2.createPortal)(
3294
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
3331
+ return (0, import_react_dom3.createPortal)(
3332
+ /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
3295
3333
  "div",
3296
3334
  {
3297
3335
  className: clsx_default("lib-xplat-drawer-overlay", stateClass),
3298
3336
  onClick: onClose,
3299
- children: /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)(
3337
+ children: /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)(
3300
3338
  "div",
3301
3339
  {
3302
3340
  className: clsx_default("lib-xplat-drawer", placement, stateClass),
@@ -3305,11 +3343,11 @@ var Drawer = (props) => {
3305
3343
  "aria-modal": "true",
3306
3344
  onClick: (e) => e.stopPropagation(),
3307
3345
  children: [
3308
- title && /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "drawer-header", children: [
3309
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)("span", { className: "drawer-title", children: title }),
3310
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
3346
+ title && /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "drawer-header", children: [
3347
+ /* @__PURE__ */ (0, import_jsx_runtime320.jsx)("span", { className: "drawer-title", children: title }),
3348
+ /* @__PURE__ */ (0, import_jsx_runtime320.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
3311
3349
  ] }),
3312
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)("div", { className: "drawer-body", children })
3350
+ /* @__PURE__ */ (0, import_jsx_runtime320.jsx)("div", { className: "drawer-body", children })
3313
3351
  ]
3314
3352
  }
3315
3353
  )
@@ -3322,16 +3360,16 @@ Drawer.displayName = "Drawer";
3322
3360
  var Drawer_default = Drawer;
3323
3361
 
3324
3362
  // src/components/Dropdown/Dropdown.tsx
3325
- var import_react19 = __toESM(require("react"), 1);
3363
+ var import_react20 = __toESM(require("react"), 1);
3326
3364
 
3327
3365
  // src/tokens/hooks/useAutoPosition.ts
3328
- var import_react17 = __toESM(require("react"), 1);
3366
+ var import_react18 = __toESM(require("react"), 1);
3329
3367
  var useAutoPosition = (triggerRef, popRef, enabled = true) => {
3330
- const [position, setPosition] = import_react17.default.useState({
3368
+ const [position, setPosition] = import_react18.default.useState({
3331
3369
  position: {},
3332
3370
  direction: "bottom"
3333
3371
  });
3334
- const calculatePosition = import_react17.default.useCallback(() => {
3372
+ const calculatePosition = import_react18.default.useCallback(() => {
3335
3373
  if (!triggerRef.current || !popRef.current) return;
3336
3374
  const triggerRect = triggerRef.current.getBoundingClientRect();
3337
3375
  const popRect = popRef.current.getBoundingClientRect();
@@ -3355,9 +3393,12 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
3355
3393
  direction
3356
3394
  });
3357
3395
  }, [triggerRef, popRef]);
3358
- import_react17.default.useEffect(() => {
3396
+ import_react18.default.useLayoutEffect(() => {
3359
3397
  if (!enabled) return;
3360
3398
  calculatePosition();
3399
+ }, [calculatePosition, enabled]);
3400
+ import_react18.default.useEffect(() => {
3401
+ if (!enabled) return;
3361
3402
  window.addEventListener("resize", calculatePosition);
3362
3403
  window.addEventListener("scroll", calculatePosition, true);
3363
3404
  return () => {
@@ -3370,9 +3411,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
3370
3411
  var useAutoPosition_default = useAutoPosition;
3371
3412
 
3372
3413
  // src/tokens/hooks/useClickOutside.ts
3373
- var import_react18 = __toESM(require("react"), 1);
3414
+ var import_react19 = __toESM(require("react"), 1);
3374
3415
  var useClickOutside = (refs, handler, enabled = true) => {
3375
- import_react18.default.useEffect(() => {
3416
+ import_react19.default.useEffect(() => {
3376
3417
  if (!enabled) return;
3377
3418
  const refArray = Array.isArray(refs) ? refs : [refs];
3378
3419
  const listener = (event) => {
@@ -3395,17 +3436,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
3395
3436
  var useClickOutside_default = useClickOutside;
3396
3437
 
3397
3438
  // src/components/Dropdown/Dropdown.tsx
3398
- var import_jsx_runtime320 = require("react/jsx-runtime");
3439
+ var import_jsx_runtime321 = require("react/jsx-runtime");
3399
3440
  var Dropdown = (props) => {
3400
3441
  const { items, children } = props;
3401
- const [isOpen, setIsOpen] = import_react19.default.useState(false);
3402
- const [mounted, setMounted] = import_react19.default.useState(false);
3403
- const [visible, setVisible] = import_react19.default.useState(false);
3404
- const triggerRef = import_react19.default.useRef(null);
3405
- const menuRef = import_react19.default.useRef(null);
3406
- const { position, direction } = useAutoPosition_default(triggerRef, menuRef, isOpen);
3407
- useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false));
3408
- import_react19.default.useEffect(() => {
3442
+ const [isOpen, setIsOpen] = import_react20.default.useState(false);
3443
+ const [mounted, setMounted] = import_react20.default.useState(false);
3444
+ const [visible, setVisible] = import_react20.default.useState(false);
3445
+ const triggerRef = import_react20.default.useRef(null);
3446
+ const menuRef = import_react20.default.useRef(null);
3447
+ const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
3448
+ useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
3449
+ import_react20.default.useEffect(() => {
3409
3450
  if (isOpen) {
3410
3451
  setMounted(true);
3411
3452
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -3420,8 +3461,8 @@ var Dropdown = (props) => {
3420
3461
  item.onClick?.();
3421
3462
  setIsOpen(false);
3422
3463
  };
3423
- return /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "lib-xplat-dropdown", children: [
3424
- /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
3464
+ return /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "lib-xplat-dropdown", children: [
3465
+ /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
3425
3466
  "div",
3426
3467
  {
3427
3468
  ref: triggerRef,
@@ -3430,14 +3471,14 @@ var Dropdown = (props) => {
3430
3471
  children
3431
3472
  }
3432
3473
  ),
3433
- mounted && /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
3474
+ mounted && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
3434
3475
  "div",
3435
3476
  {
3436
3477
  ref: menuRef,
3437
- className: clsx_default("dropdown-menu", direction, { visible }),
3478
+ className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
3438
3479
  style: { top: position.top, left: position.left },
3439
3480
  role: "menu",
3440
- children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
3481
+ children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
3441
3482
  "button",
3442
3483
  {
3443
3484
  className: clsx_default("dropdown-item", {
@@ -3452,30 +3493,30 @@ var Dropdown = (props) => {
3452
3493
  item.key
3453
3494
  ))
3454
3495
  }
3455
- )
3496
+ ) })
3456
3497
  ] });
3457
3498
  };
3458
3499
  Dropdown.displayName = "Dropdown";
3459
3500
  var Dropdown_default = Dropdown;
3460
3501
 
3461
3502
  // src/components/EmptyState/EmptyState.tsx
3462
- var import_jsx_runtime321 = require("react/jsx-runtime");
3503
+ var import_jsx_runtime322 = require("react/jsx-runtime");
3463
3504
  var EmptyState = (props) => {
3464
3505
  const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
3465
- return /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "lib-xplat-empty-state", children: [
3466
- icon && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("div", { className: "empty-icon", children: icon }),
3467
- !icon && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("div", { className: "empty-icon", children: /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("path", { d: "M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" }) }) }),
3468
- /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("p", { className: "empty-title", children: title }),
3469
- description && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("p", { className: "empty-description", children: description }),
3470
- action && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("div", { className: "empty-action", children: action })
3506
+ return /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)("div", { className: "lib-xplat-empty-state", children: [
3507
+ icon && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "empty-icon", children: icon }),
3508
+ !icon && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "empty-icon", children: /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("path", { d: "M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" }) }) }),
3509
+ /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "empty-title", children: title }),
3510
+ description && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "empty-description", children: description }),
3511
+ action && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "empty-action", children: action })
3471
3512
  ] });
3472
3513
  };
3473
3514
  EmptyState.displayName = "EmptyState";
3474
3515
  var EmptyState_default = EmptyState;
3475
3516
 
3476
3517
  // src/components/FileUpload/FileUpload.tsx
3477
- var import_react20 = __toESM(require("react"), 1);
3478
- var import_jsx_runtime322 = require("react/jsx-runtime");
3518
+ var import_react21 = __toESM(require("react"), 1);
3519
+ var import_jsx_runtime323 = require("react/jsx-runtime");
3479
3520
  var FileUpload = (props) => {
3480
3521
  const {
3481
3522
  accept,
@@ -3485,8 +3526,8 @@ var FileUpload = (props) => {
3485
3526
  label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
3486
3527
  description
3487
3528
  } = props;
3488
- const [isDragOver, setIsDragOver] = import_react20.default.useState(false);
3489
- const inputRef = import_react20.default.useRef(null);
3529
+ const [isDragOver, setIsDragOver] = import_react21.default.useState(false);
3530
+ const inputRef = import_react21.default.useRef(null);
3490
3531
  const handleFiles = (fileList) => {
3491
3532
  let files = Array.from(fileList);
3492
3533
  if (maxSize) {
@@ -3516,7 +3557,7 @@ var FileUpload = (props) => {
3516
3557
  handleFiles(e.target.files);
3517
3558
  }
3518
3559
  };
3519
- return /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)(
3560
+ return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)(
3520
3561
  "div",
3521
3562
  {
3522
3563
  className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
@@ -3525,7 +3566,7 @@ var FileUpload = (props) => {
3525
3566
  onDragLeave: handleDragLeave,
3526
3567
  onClick: () => inputRef.current?.click(),
3527
3568
  children: [
3528
- /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
3569
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
3529
3570
  "input",
3530
3571
  {
3531
3572
  ref: inputRef,
@@ -3535,9 +3576,9 @@ var FileUpload = (props) => {
3535
3576
  onChange: handleChange
3536
3577
  }
3537
3578
  ),
3538
- /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(UploadIcon_default, {}) }),
3539
- /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "upload-label", children: label }),
3540
- description && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "upload-description", children: description })
3579
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(UploadIcon_default, {}) }),
3580
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("p", { className: "upload-label", children: label }),
3581
+ description && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("p", { className: "upload-description", children: description })
3541
3582
  ]
3542
3583
  }
3543
3584
  );
@@ -3546,10 +3587,10 @@ FileUpload.displayName = "FileUpload";
3546
3587
  var FileUpload_default = FileUpload;
3547
3588
 
3548
3589
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
3549
- var import_react22 = __toESM(require("react"), 1);
3590
+ var import_react23 = __toESM(require("react"), 1);
3550
3591
 
3551
3592
  // src/components/HtmlTypeWriter/utils.ts
3552
- var import_react21 = __toESM(require("react"), 1);
3593
+ var import_react22 = __toESM(require("react"), 1);
3553
3594
  var voidTags = /* @__PURE__ */ new Set([
3554
3595
  "br",
3555
3596
  "img",
@@ -3617,41 +3658,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
3617
3658
  props[attr.name] = attr.value;
3618
3659
  });
3619
3660
  if (voidTags.has(tag)) {
3620
- return import_react21.default.createElement(tag, props);
3661
+ return import_react22.default.createElement(tag, props);
3621
3662
  }
3622
3663
  const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
3623
- return import_react21.default.createElement(tag, props, ...children);
3664
+ return import_react22.default.createElement(tag, props, ...children);
3624
3665
  };
3625
3666
  var htmlToReactProgressive = (root, typedLen, rangeMap) => {
3626
3667
  const nodes = Array.from(root.childNodes).map((child, idx) => {
3627
3668
  const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
3628
- return node == null ? null : import_react21.default.createElement(import_react21.default.Fragment, { key: idx }, node);
3669
+ return node == null ? null : import_react22.default.createElement(import_react22.default.Fragment, { key: idx }, node);
3629
3670
  }).filter(Boolean);
3630
3671
  return nodes.length === 0 ? null : nodes;
3631
3672
  };
3632
3673
 
3633
3674
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
3634
- var import_jsx_runtime323 = require("react/jsx-runtime");
3675
+ var import_jsx_runtime324 = require("react/jsx-runtime");
3635
3676
  var HtmlTypeWriter = ({
3636
3677
  html,
3637
3678
  duration = 20,
3638
3679
  onDone,
3639
3680
  onChange
3640
3681
  }) => {
3641
- const [typedLen, setTypedLen] = import_react22.default.useState(0);
3642
- const doneCalledRef = import_react22.default.useRef(false);
3643
- const { doc, rangeMap, totalLength } = import_react22.default.useMemo(() => {
3682
+ const [typedLen, setTypedLen] = import_react23.default.useState(0);
3683
+ const doneCalledRef = import_react23.default.useRef(false);
3684
+ const { doc, rangeMap, totalLength } = import_react23.default.useMemo(() => {
3644
3685
  if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
3645
3686
  const decoded = decodeHtmlEntities(html);
3646
3687
  const doc2 = new DOMParser().parseFromString(decoded, "text/html");
3647
3688
  const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
3648
3689
  return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
3649
3690
  }, [html]);
3650
- import_react22.default.useEffect(() => {
3691
+ import_react23.default.useEffect(() => {
3651
3692
  setTypedLen(0);
3652
3693
  doneCalledRef.current = false;
3653
3694
  }, [html]);
3654
- import_react22.default.useEffect(() => {
3695
+ import_react23.default.useEffect(() => {
3655
3696
  if (!totalLength) return;
3656
3697
  if (typedLen >= totalLength) return;
3657
3698
  const timer = window.setInterval(() => {
@@ -3659,33 +3700,33 @@ var HtmlTypeWriter = ({
3659
3700
  }, duration);
3660
3701
  return () => window.clearInterval(timer);
3661
3702
  }, [typedLen, totalLength, duration]);
3662
- import_react22.default.useEffect(() => {
3703
+ import_react23.default.useEffect(() => {
3663
3704
  if (typedLen > 0 && typedLen < totalLength) {
3664
3705
  onChange?.();
3665
3706
  }
3666
3707
  }, [typedLen, totalLength, onChange]);
3667
- import_react22.default.useEffect(() => {
3708
+ import_react23.default.useEffect(() => {
3668
3709
  if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
3669
3710
  doneCalledRef.current = true;
3670
3711
  onDone?.();
3671
3712
  }
3672
3713
  }, [typedLen, totalLength, onDone]);
3673
- const parsed = import_react22.default.useMemo(
3714
+ const parsed = import_react23.default.useMemo(
3674
3715
  () => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
3675
3716
  [doc, typedLen, rangeMap]
3676
3717
  );
3677
- return /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
3718
+ return /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
3678
3719
  };
3679
3720
  HtmlTypeWriter.displayName = "HtmlTypeWriter";
3680
3721
  var HtmlTypeWriter_default = HtmlTypeWriter;
3681
3722
 
3682
3723
  // src/components/ImageSelector/ImageSelector.tsx
3683
- var import_react23 = __toESM(require("react"), 1);
3684
- var import_jsx_runtime324 = require("react/jsx-runtime");
3724
+ var import_react24 = __toESM(require("react"), 1);
3725
+ var import_jsx_runtime325 = require("react/jsx-runtime");
3685
3726
  var ImageSelector = (props) => {
3686
3727
  const { value, label, onChange } = props;
3687
- const [previewUrl, setPreviewUrl] = import_react23.default.useState();
3688
- import_react23.default.useEffect(() => {
3728
+ const [previewUrl, setPreviewUrl] = import_react24.default.useState();
3729
+ import_react24.default.useEffect(() => {
3689
3730
  if (!value) {
3690
3731
  setPreviewUrl(void 0);
3691
3732
  return;
@@ -3694,7 +3735,7 @@ var ImageSelector = (props) => {
3694
3735
  setPreviewUrl(url);
3695
3736
  return () => URL.revokeObjectURL(url);
3696
3737
  }, [value]);
3697
- const inputRef = import_react23.default.useRef(null);
3738
+ const inputRef = import_react24.default.useRef(null);
3698
3739
  const handleFileChange = (e) => {
3699
3740
  const selectedFile = e.target.files?.[0];
3700
3741
  if (selectedFile) {
@@ -3707,8 +3748,8 @@ var ImageSelector = (props) => {
3707
3748
  const handleOpenFileDialog = () => {
3708
3749
  inputRef.current?.click();
3709
3750
  };
3710
- return /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
3711
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
3751
+ return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
3752
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
3712
3753
  "input",
3713
3754
  {
3714
3755
  type: "file",
@@ -3718,13 +3759,13 @@ var ImageSelector = (props) => {
3718
3759
  ref: inputRef
3719
3760
  }
3720
3761
  ),
3721
- value && /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)("div", { className: "action-bar", children: [
3722
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(UploadIcon_default, {}) }),
3723
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(DeleteIcon_default, {}) })
3762
+ value && /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: "action-bar", children: [
3763
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(UploadIcon_default, {}) }),
3764
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(DeleteIcon_default, {}) })
3724
3765
  ] }),
3725
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "content", children: previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
3726
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(ImageIcon_default, {}) }),
3727
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
3766
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "content", children: previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
3767
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(ImageIcon_default, {}) }),
3768
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
3728
3769
  ] }) })
3729
3770
  ] });
3730
3771
  };
@@ -3732,7 +3773,7 @@ ImageSelector.displayName = "ImageSelector";
3732
3773
  var ImageSelector_default = ImageSelector;
3733
3774
 
3734
3775
  // src/components/Pagination/Pagination.tsx
3735
- var import_jsx_runtime325 = require("react/jsx-runtime");
3776
+ var import_jsx_runtime326 = require("react/jsx-runtime");
3736
3777
  var getPageRange = (current, totalPages, siblingCount) => {
3737
3778
  const totalNumbers = siblingCount * 2 + 5;
3738
3779
  if (totalPages <= totalNumbers) {
@@ -3775,19 +3816,19 @@ var Pagination = (props) => {
3775
3816
  onChange?.(page);
3776
3817
  }
3777
3818
  };
3778
- return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
3779
- /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
3819
+ return /* @__PURE__ */ (0, import_jsx_runtime326.jsxs)("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
3820
+ /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
3780
3821
  "button",
3781
3822
  {
3782
3823
  className: "page-btn prev",
3783
3824
  disabled: current <= 1,
3784
3825
  onClick: () => handleClick(current - 1),
3785
3826
  "aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
3786
- children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(ChevronLeftIcon_default, {})
3827
+ children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(ChevronLeftIcon_default, {})
3787
3828
  }
3788
3829
  ),
3789
3830
  pages.map(
3790
- (page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
3831
+ (page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
3791
3832
  "button",
3792
3833
  {
3793
3834
  className: clsx_default("page-btn", { active: page === current }),
@@ -3798,14 +3839,14 @@ var Pagination = (props) => {
3798
3839
  page
3799
3840
  )
3800
3841
  ),
3801
- /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
3842
+ /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
3802
3843
  "button",
3803
3844
  {
3804
3845
  className: "page-btn next",
3805
3846
  disabled: current >= totalPages,
3806
3847
  onClick: () => handleClick(current + 1),
3807
3848
  "aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
3808
- children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(ChevronRightIcon_default, {})
3849
+ children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(ChevronRightIcon_default, {})
3809
3850
  }
3810
3851
  )
3811
3852
  ] });
@@ -3814,17 +3855,17 @@ Pagination.displayName = "Pagination";
3814
3855
  var Pagination_default = Pagination;
3815
3856
 
3816
3857
  // src/components/PopOver/PopOver.tsx
3817
- var import_react24 = __toESM(require("react"), 1);
3818
- var import_jsx_runtime326 = require("react/jsx-runtime");
3858
+ var import_react25 = __toESM(require("react"), 1);
3859
+ var import_jsx_runtime327 = require("react/jsx-runtime");
3819
3860
  var PopOver = (props) => {
3820
3861
  const { children, isOpen, onClose, PopOverEl } = props;
3821
- const popRef = import_react24.default.useRef(null);
3822
- const triggerRef = import_react24.default.useRef(null);
3823
- const [localOpen, setLocalOpen] = import_react24.default.useState(false);
3824
- const [eventTrigger, setEventTrigger] = import_react24.default.useState(false);
3862
+ const popRef = import_react25.default.useRef(null);
3863
+ const triggerRef = import_react25.default.useRef(null);
3864
+ const [localOpen, setLocalOpen] = import_react25.default.useState(false);
3865
+ const [eventTrigger, setEventTrigger] = import_react25.default.useState(false);
3825
3866
  useClickOutside_default([popRef, triggerRef], onClose, isOpen);
3826
3867
  const position = useAutoPosition_default(triggerRef, popRef, localOpen);
3827
- import_react24.default.useEffect(() => {
3868
+ import_react25.default.useEffect(() => {
3828
3869
  if (isOpen) {
3829
3870
  setLocalOpen(isOpen);
3830
3871
  setTimeout(() => {
@@ -3837,7 +3878,7 @@ var PopOver = (props) => {
3837
3878
  }, 200);
3838
3879
  }
3839
3880
  }, [isOpen]);
3840
- return /* @__PURE__ */ (0, import_jsx_runtime326.jsxs)(
3881
+ return /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)(
3841
3882
  "div",
3842
3883
  {
3843
3884
  className: "lib-xplat-pop-over",
@@ -3847,11 +3888,11 @@ var PopOver = (props) => {
3847
3888
  },
3848
3889
  children: [
3849
3890
  children,
3850
- localOpen && /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
3891
+ localOpen && /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
3851
3892
  "div",
3852
3893
  {
3853
3894
  className: clsx_default(
3854
- "content-wrap",
3895
+ "lib-xplat-pop-over-content",
3855
3896
  position.direction,
3856
3897
  eventTrigger && "visible"
3857
3898
  ),
@@ -3861,7 +3902,7 @@ var PopOver = (props) => {
3861
3902
  },
3862
3903
  children: PopOverEl
3863
3904
  }
3864
- )
3905
+ ) })
3865
3906
  ]
3866
3907
  }
3867
3908
  );
@@ -3870,7 +3911,7 @@ PopOver.displayName = "PopOver";
3870
3911
  var PopOver_default = PopOver;
3871
3912
 
3872
3913
  // src/components/Progress/Progress.tsx
3873
- var import_jsx_runtime327 = require("react/jsx-runtime");
3914
+ var import_jsx_runtime328 = require("react/jsx-runtime");
3874
3915
  var Progress = (props) => {
3875
3916
  const {
3876
3917
  value,
@@ -3880,8 +3921,8 @@ var Progress = (props) => {
3880
3921
  showLabel = false
3881
3922
  } = props;
3882
3923
  const percentage = Math.min(100, Math.max(0, value / max * 100));
3883
- return /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
3884
- /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
3924
+ return /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
3925
+ /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
3885
3926
  "div",
3886
3927
  {
3887
3928
  className: "track",
@@ -3889,7 +3930,7 @@ var Progress = (props) => {
3889
3930
  "aria-valuenow": value,
3890
3931
  "aria-valuemin": 0,
3891
3932
  "aria-valuemax": max,
3892
- children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
3933
+ children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
3893
3934
  "div",
3894
3935
  {
3895
3936
  className: "bar",
@@ -3898,7 +3939,7 @@ var Progress = (props) => {
3898
3939
  )
3899
3940
  }
3900
3941
  ),
3901
- showLabel && /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("span", { className: "label", children: [
3942
+ showLabel && /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("span", { className: "label", children: [
3902
3943
  Math.round(percentage),
3903
3944
  "%"
3904
3945
  ] })
@@ -3908,17 +3949,17 @@ Progress.displayName = "Progress";
3908
3949
  var Progress_default = Progress;
3909
3950
 
3910
3951
  // src/components/Radio/RadioGroupContext.tsx
3911
- var import_react25 = __toESM(require("react"), 1);
3912
- var RadioGroupContext = import_react25.default.createContext(
3952
+ var import_react26 = __toESM(require("react"), 1);
3953
+ var RadioGroupContext = import_react26.default.createContext(
3913
3954
  null
3914
3955
  );
3915
3956
  var useRadioGroupContext = () => {
3916
- return import_react25.default.useContext(RadioGroupContext);
3957
+ return import_react26.default.useContext(RadioGroupContext);
3917
3958
  };
3918
3959
  var RadioGroupContext_default = RadioGroupContext;
3919
3960
 
3920
3961
  // src/components/Radio/Radio.tsx
3921
- var import_jsx_runtime328 = require("react/jsx-runtime");
3962
+ var import_jsx_runtime329 = require("react/jsx-runtime");
3922
3963
  var Radio = (props) => {
3923
3964
  const {
3924
3965
  label,
@@ -3936,7 +3977,7 @@ var Radio = (props) => {
3936
3977
  value,
3937
3978
  onChange: rest.onChange
3938
3979
  };
3939
- return /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)(
3980
+ return /* @__PURE__ */ (0, import_jsx_runtime329.jsxs)(
3940
3981
  "label",
3941
3982
  {
3942
3983
  className: clsx_default(
@@ -3946,18 +3987,18 @@ var Radio = (props) => {
3946
3987
  localChecked ? "checked" : void 0
3947
3988
  ),
3948
3989
  children: [
3949
- /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
3950
- /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
3990
+ /* @__PURE__ */ (0, import_jsx_runtime329.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
3991
+ /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
3951
3992
  "div",
3952
3993
  {
3953
3994
  className: clsx_default(
3954
3995
  "circle",
3955
3996
  localChecked ? "checked" : void 0
3956
3997
  ),
3957
- children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("div", { className: "inner-circle" })
3998
+ children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime329.jsx)("div", { className: "inner-circle" })
3958
3999
  }
3959
4000
  ),
3960
- label && /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("span", { children: label })
4001
+ label && /* @__PURE__ */ (0, import_jsx_runtime329.jsx)("span", { children: label })
3961
4002
  ]
3962
4003
  }
3963
4004
  );
@@ -3966,28 +4007,28 @@ Radio.displayName = "Radio";
3966
4007
  var Radio_default = Radio;
3967
4008
 
3968
4009
  // src/components/Radio/RadioGroup.tsx
3969
- var import_jsx_runtime329 = require("react/jsx-runtime");
4010
+ var import_jsx_runtime330 = require("react/jsx-runtime");
3970
4011
  var RadioGroup = (props) => {
3971
4012
  const { children, ...rest } = props;
3972
- return /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(import_jsx_runtime329.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
4013
+ return /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(import_jsx_runtime330.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
3973
4014
  };
3974
4015
  RadioGroup.displayName = "RadioGroup";
3975
4016
  var RadioGroup_default = RadioGroup;
3976
4017
 
3977
4018
  // src/components/Select/Select.tsx
3978
- var import_react28 = __toESM(require("react"), 1);
4019
+ var import_react29 = __toESM(require("react"), 1);
3979
4020
 
3980
4021
  // src/components/Select/context.ts
3981
- var import_react26 = __toESM(require("react"), 1);
3982
- var SelectContext = import_react26.default.createContext(null);
4022
+ var import_react27 = __toESM(require("react"), 1);
4023
+ var SelectContext = import_react27.default.createContext(null);
3983
4024
  var context_default = SelectContext;
3984
4025
 
3985
4026
  // src/components/Select/SelectItem.tsx
3986
- var import_react27 = __toESM(require("react"), 1);
3987
- var import_jsx_runtime330 = require("react/jsx-runtime");
4027
+ var import_react28 = __toESM(require("react"), 1);
4028
+ var import_jsx_runtime331 = require("react/jsx-runtime");
3988
4029
  var SelectItem = (props) => {
3989
4030
  const { children, value, onClick, disabled = false } = props;
3990
- const ctx = import_react27.default.useContext(context_default);
4031
+ const ctx = import_react28.default.useContext(context_default);
3991
4032
  const handleClick = (e) => {
3992
4033
  e.preventDefault();
3993
4034
  e.stopPropagation();
@@ -3996,7 +4037,7 @@ var SelectItem = (props) => {
3996
4037
  ctx?.close();
3997
4038
  onClick?.();
3998
4039
  };
3999
- return /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(
4040
+ return /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
4000
4041
  "div",
4001
4042
  {
4002
4043
  className: clsx_default("select-item", disabled && "disabled"),
@@ -4017,7 +4058,7 @@ SelectItem.displayName = "Select.Item";
4017
4058
  var SelectItem_default = SelectItem;
4018
4059
 
4019
4060
  // src/components/Select/Select.tsx
4020
- var import_jsx_runtime331 = require("react/jsx-runtime");
4061
+ var import_jsx_runtime332 = require("react/jsx-runtime");
4021
4062
  var ANIMATION_DURATION_MS3 = 200;
4022
4063
  var SelectRoot = (props) => {
4023
4064
  const {
@@ -4029,26 +4070,26 @@ var SelectRoot = (props) => {
4029
4070
  error = false,
4030
4071
  size = "md"
4031
4072
  } = props;
4032
- const itemChildren = import_react28.default.Children.toArray(children).filter(
4033
- (child) => import_react28.default.isValidElement(child) && child.type === SelectItem_default
4073
+ const itemChildren = import_react29.default.Children.toArray(children).filter(
4074
+ (child) => import_react29.default.isValidElement(child) && child.type === SelectItem_default
4034
4075
  );
4035
4076
  const isControlled = valueProp !== void 0;
4036
- const [isOpen, setOpen] = import_react28.default.useState(false);
4037
- const [uncontrolledLabel, setUncontrolledLabel] = import_react28.default.useState(null);
4038
- const controlledLabel = import_react28.default.useMemo(() => {
4077
+ const [isOpen, setOpen] = import_react29.default.useState(false);
4078
+ const [uncontrolledLabel, setUncontrolledLabel] = import_react29.default.useState(null);
4079
+ const controlledLabel = import_react29.default.useMemo(() => {
4039
4080
  if (!isControlled) return null;
4040
4081
  const match = itemChildren.find((child) => child.props.value === valueProp);
4041
4082
  return match ? match.props.children : null;
4042
4083
  }, [isControlled, valueProp, itemChildren]);
4043
4084
  const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
4044
- const triggerRef = import_react28.default.useRef(null);
4045
- const contentRef = import_react28.default.useRef(null);
4046
- const [mounted, setMounted] = import_react28.default.useState(false);
4047
- const [visible, setVisible] = import_react28.default.useState(false);
4048
- import_react28.default.useEffect(() => {
4085
+ const triggerRef = import_react29.default.useRef(null);
4086
+ const contentRef = import_react29.default.useRef(null);
4087
+ const [mounted, setMounted] = import_react29.default.useState(false);
4088
+ const [visible, setVisible] = import_react29.default.useState(false);
4089
+ import_react29.default.useEffect(() => {
4049
4090
  if (disabled && isOpen) setOpen(false);
4050
4091
  }, [disabled, isOpen]);
4051
- import_react28.default.useEffect(() => {
4092
+ import_react29.default.useEffect(() => {
4052
4093
  if (isOpen) {
4053
4094
  setMounted(true);
4054
4095
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -4058,12 +4099,12 @@ var SelectRoot = (props) => {
4058
4099
  const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
4059
4100
  return () => clearTimeout(t);
4060
4101
  }, [isOpen]);
4061
- const open = import_react28.default.useCallback(() => setOpen(true), []);
4062
- const close = import_react28.default.useCallback(() => setOpen(false), []);
4063
- const toggle = import_react28.default.useCallback(() => setOpen((prev) => !prev), []);
4102
+ const open = import_react29.default.useCallback(() => setOpen(true), []);
4103
+ const close = import_react29.default.useCallback(() => setOpen(false), []);
4104
+ const toggle = import_react29.default.useCallback(() => setOpen((prev) => !prev), []);
4064
4105
  useClickOutside_default([contentRef, triggerRef], close, isOpen);
4065
4106
  const position = useAutoPosition_default(triggerRef, contentRef, mounted);
4066
- const setSelected = import_react28.default.useCallback(
4107
+ const setSelected = import_react29.default.useCallback(
4067
4108
  (label, itemValue) => {
4068
4109
  if (!isControlled) {
4069
4110
  setUncontrolledLabel(label);
@@ -4072,7 +4113,7 @@ var SelectRoot = (props) => {
4072
4113
  },
4073
4114
  [isControlled, onChange]
4074
4115
  );
4075
- const ctxValue = import_react28.default.useMemo(
4116
+ const ctxValue = import_react29.default.useMemo(
4076
4117
  () => ({
4077
4118
  isOpen,
4078
4119
  mounted,
@@ -4093,7 +4134,7 @@ var SelectRoot = (props) => {
4093
4134
  if (disabled) return;
4094
4135
  toggle();
4095
4136
  };
4096
- return /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime331.jsxs)(
4137
+ return /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime332.jsxs)(
4097
4138
  "div",
4098
4139
  {
4099
4140
  className: clsx_default(
@@ -4104,7 +4145,7 @@ var SelectRoot = (props) => {
4104
4145
  mounted && "is-open"
4105
4146
  ),
4106
4147
  children: [
4107
- /* @__PURE__ */ (0, import_jsx_runtime331.jsxs)(
4148
+ /* @__PURE__ */ (0, import_jsx_runtime332.jsxs)(
4108
4149
  "div",
4109
4150
  {
4110
4151
  ref: triggerRef,
@@ -4128,7 +4169,7 @@ var SelectRoot = (props) => {
4128
4169
  }
4129
4170
  },
4130
4171
  children: [
4131
- /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
4172
+ /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
4132
4173
  "span",
4133
4174
  {
4134
4175
  className: clsx_default(
@@ -4138,27 +4179,27 @@ var SelectRoot = (props) => {
4138
4179
  children: selectedLabel ?? placeholder
4139
4180
  }
4140
4181
  ),
4141
- /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
4182
+ /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
4142
4183
  "span",
4143
4184
  {
4144
4185
  className: clsx_default("select-trigger-icon", isOpen && "open"),
4145
4186
  "aria-hidden": true,
4146
- children: /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(ChevronDownIcon_default, {})
4187
+ children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(ChevronDownIcon_default, {})
4147
4188
  }
4148
4189
  )
4149
4190
  ]
4150
4191
  }
4151
4192
  ),
4152
- mounted && /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
4193
+ mounted && /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
4153
4194
  "div",
4154
4195
  {
4155
- className: clsx_default("select-content", position.direction, stateClass),
4196
+ className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
4156
4197
  ref: contentRef,
4157
4198
  style: { ...position.position, minWidth: position.position.width },
4158
4199
  role: "listbox",
4159
- children: itemChildren
4200
+ children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(context_default.Provider, { value: ctxValue, children: itemChildren })
4160
4201
  }
4161
- )
4202
+ ) })
4162
4203
  ]
4163
4204
  }
4164
4205
  ) });
@@ -4170,14 +4211,14 @@ var Select = Object.assign(SelectRoot, {
4170
4211
  var Select_default = Select;
4171
4212
 
4172
4213
  // src/components/Skeleton/Skeleton.tsx
4173
- var import_jsx_runtime332 = require("react/jsx-runtime");
4214
+ var import_jsx_runtime333 = require("react/jsx-runtime");
4174
4215
  var Skeleton = (props) => {
4175
4216
  const { variant = "text", width, height } = props;
4176
4217
  const style = {
4177
4218
  width: typeof width === "number" ? `${width}px` : width,
4178
4219
  height: typeof height === "number" ? `${height}px` : height
4179
4220
  };
4180
- return /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
4221
+ return /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
4181
4222
  "div",
4182
4223
  {
4183
4224
  className: clsx_default("lib-xplat-skeleton", variant),
@@ -4190,20 +4231,20 @@ Skeleton.displayName = "Skeleton";
4190
4231
  var Skeleton_default = Skeleton;
4191
4232
 
4192
4233
  // src/components/Spinner/Spinner.tsx
4193
- var import_jsx_runtime333 = require("react/jsx-runtime");
4234
+ var import_jsx_runtime334 = require("react/jsx-runtime");
4194
4235
  var Spinner = (props) => {
4195
4236
  const {
4196
4237
  size = "md",
4197
4238
  type = "brand"
4198
4239
  } = props;
4199
- return /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
4240
+ return /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
4200
4241
  "div",
4201
4242
  {
4202
4243
  className: clsx_default("lib-xplat-spinner", size, type),
4203
4244
  role: "status",
4204
4245
  "aria-label": "\uB85C\uB529 \uC911",
4205
- children: /* @__PURE__ */ (0, import_jsx_runtime333.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
4206
- /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
4246
+ children: /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
4247
+ /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
4207
4248
  "circle",
4208
4249
  {
4209
4250
  className: "track",
@@ -4213,7 +4254,7 @@ var Spinner = (props) => {
4213
4254
  strokeWidth: "3"
4214
4255
  }
4215
4256
  ),
4216
- /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
4257
+ /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
4217
4258
  "circle",
4218
4259
  {
4219
4260
  className: "indicator",
@@ -4232,20 +4273,20 @@ Spinner.displayName = "Spinner";
4232
4273
  var Spinner_default = Spinner;
4233
4274
 
4234
4275
  // src/components/Steps/Steps.tsx
4235
- var import_jsx_runtime334 = require("react/jsx-runtime");
4276
+ var import_jsx_runtime335 = require("react/jsx-runtime");
4236
4277
  var Steps = (props) => {
4237
4278
  const {
4238
4279
  items,
4239
4280
  current,
4240
4281
  type = "brand"
4241
4282
  } = props;
4242
- return /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
4283
+ return /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
4243
4284
  const status = index < current ? "completed" : index === current ? "active" : "pending";
4244
- return /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)("div", { className: clsx_default("step-item", status), children: [
4245
- /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(CheckIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("span", { children: index + 1 }) }),
4246
- /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)("div", { className: "step-content", children: [
4247
- /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("span", { className: "step-title", children: item.title }),
4248
- item.description && /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("span", { className: "step-description", children: item.description })
4285
+ return /* @__PURE__ */ (0, import_jsx_runtime335.jsxs)("div", { className: clsx_default("step-item", status), children: [
4286
+ /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(CheckIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("span", { children: index + 1 }) }),
4287
+ /* @__PURE__ */ (0, import_jsx_runtime335.jsxs)("div", { className: "step-content", children: [
4288
+ /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("span", { className: "step-title", children: item.title }),
4289
+ item.description && /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("span", { className: "step-description", children: item.description })
4249
4290
  ] })
4250
4291
  ] }, index);
4251
4292
  }) });
@@ -4254,8 +4295,8 @@ Steps.displayName = "Steps";
4254
4295
  var Steps_default = Steps;
4255
4296
 
4256
4297
  // src/components/Swiper/Swiper.tsx
4257
- var import_react29 = __toESM(require("react"), 1);
4258
- var import_jsx_runtime335 = require("react/jsx-runtime");
4298
+ var import_react30 = __toESM(require("react"), 1);
4299
+ var import_jsx_runtime336 = require("react/jsx-runtime");
4259
4300
  var Swiper = (props) => {
4260
4301
  const {
4261
4302
  auto = false,
@@ -4278,23 +4319,23 @@ var Swiper = (props) => {
4278
4319
  const maxIndex = Math.max(0, totalSlides - viewItemCount);
4279
4320
  const useLoop = loop && canSlide;
4280
4321
  const cloneCount = useLoop ? totalSlides : 0;
4281
- const extendedItems = import_react29.default.useMemo(() => {
4322
+ const extendedItems = import_react30.default.useMemo(() => {
4282
4323
  if (!useLoop) return items;
4283
4324
  return [...items, ...items, ...items];
4284
4325
  }, [items, useLoop]);
4285
4326
  const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
4286
- const [innerIndex, setInnerIndex] = import_react29.default.useState(
4327
+ const [innerIndex, setInnerIndex] = import_react30.default.useState(
4287
4328
  useLoop ? cloneCount + initialIdx : initialIdx
4288
4329
  );
4289
- const [isDragging, setIsDragging] = import_react29.default.useState(false);
4290
- const [dragOffset, setDragOffset] = import_react29.default.useState(0);
4291
- const [animated, setAnimated] = import_react29.default.useState(true);
4292
- const [containerWidth, setContainerWidth] = import_react29.default.useState(0);
4293
- const containerRef = import_react29.default.useRef(null);
4294
- const startXRef = import_react29.default.useRef(0);
4295
- const startTimeRef = import_react29.default.useRef(0);
4296
- const autoplayTimerRef = import_react29.default.useRef(null);
4297
- import_react29.default.useEffect(() => {
4330
+ const [isDragging, setIsDragging] = import_react30.default.useState(false);
4331
+ const [dragOffset, setDragOffset] = import_react30.default.useState(0);
4332
+ const [animated, setAnimated] = import_react30.default.useState(true);
4333
+ const [containerWidth, setContainerWidth] = import_react30.default.useState(0);
4334
+ const containerRef = import_react30.default.useRef(null);
4335
+ const startXRef = import_react30.default.useRef(0);
4336
+ const startTimeRef = import_react30.default.useRef(0);
4337
+ const autoplayTimerRef = import_react30.default.useRef(null);
4338
+ import_react30.default.useEffect(() => {
4298
4339
  const el = containerRef.current;
4299
4340
  if (!el) return;
4300
4341
  const ro = new ResizeObserver((entries) => {
@@ -4313,7 +4354,7 @@ var Swiper = (props) => {
4313
4354
  return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
4314
4355
  };
4315
4356
  const realIndex = getRealIndex(innerIndex);
4316
- const moveToInner = import_react29.default.useCallback(
4357
+ const moveToInner = import_react30.default.useCallback(
4317
4358
  (idx, withAnim = true) => {
4318
4359
  if (!useLoop) {
4319
4360
  setAnimated(withAnim);
@@ -4341,7 +4382,7 @@ var Swiper = (props) => {
4341
4382
  },
4342
4383
  [useLoop, cloneCount, totalSlides]
4343
4384
  );
4344
- const handleTransitionEnd = import_react29.default.useCallback(() => {
4385
+ const handleTransitionEnd = import_react30.default.useCallback(() => {
4345
4386
  if (!useLoop) return;
4346
4387
  const real = getRealIndex(innerIndex);
4347
4388
  const canonical = cloneCount + real;
@@ -4351,7 +4392,7 @@ var Swiper = (props) => {
4351
4392
  }
4352
4393
  onChange?.(Math.min(real, maxIndex));
4353
4394
  }, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
4354
- const slideTo = import_react29.default.useCallback(
4395
+ const slideTo = import_react30.default.useCallback(
4355
4396
  (logicalIndex) => {
4356
4397
  if (!canSlide) return;
4357
4398
  const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
@@ -4361,7 +4402,7 @@ var Swiper = (props) => {
4361
4402
  },
4362
4403
  [canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
4363
4404
  );
4364
- const slideNext = import_react29.default.useCallback(() => {
4405
+ const slideNext = import_react30.default.useCallback(() => {
4365
4406
  if (!canSlide) return;
4366
4407
  const nextInner = innerIndex + slideBy;
4367
4408
  if (useLoop) {
@@ -4370,7 +4411,7 @@ var Swiper = (props) => {
4370
4411
  moveToInner(Math.min(nextInner, maxIndex), true);
4371
4412
  }
4372
4413
  }, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
4373
- const slidePrev = import_react29.default.useCallback(() => {
4414
+ const slidePrev = import_react30.default.useCallback(() => {
4374
4415
  if (!canSlide) return;
4375
4416
  const prevInner = innerIndex - slideBy;
4376
4417
  if (useLoop) {
@@ -4379,7 +4420,7 @@ var Swiper = (props) => {
4379
4420
  moveToInner(Math.max(prevInner, 0), true);
4380
4421
  }
4381
4422
  }, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
4382
- import_react29.default.useEffect(() => {
4423
+ import_react30.default.useEffect(() => {
4383
4424
  if (indexProp === void 0) return;
4384
4425
  const clamped = Math.max(0, Math.min(indexProp, maxIndex));
4385
4426
  const target = useLoop ? cloneCount + clamped : clamped;
@@ -4387,12 +4428,12 @@ var Swiper = (props) => {
4387
4428
  moveToInner(target, true);
4388
4429
  }
4389
4430
  }, [indexProp]);
4390
- import_react29.default.useImperativeHandle(swiperRef, () => ({
4431
+ import_react30.default.useImperativeHandle(swiperRef, () => ({
4391
4432
  slidePrev,
4392
4433
  slideNext,
4393
4434
  slideTo
4394
4435
  }));
4395
- import_react29.default.useEffect(() => {
4436
+ import_react30.default.useEffect(() => {
4396
4437
  if (!auto || !canSlide) return;
4397
4438
  autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
4398
4439
  return () => {
@@ -4415,7 +4456,7 @@ var Swiper = (props) => {
4415
4456
  startXRef.current = getClientX(e);
4416
4457
  startTimeRef.current = Date.now();
4417
4458
  };
4418
- import_react29.default.useEffect(() => {
4459
+ import_react30.default.useEffect(() => {
4419
4460
  if (!isDragging) return;
4420
4461
  const handleMove = (e) => {
4421
4462
  setDragOffset(getClientX(e) - startXRef.current);
@@ -4453,8 +4494,8 @@ var Swiper = (props) => {
4453
4494
  }, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
4454
4495
  const slideWidthPercent = 100 / viewItemCount;
4455
4496
  const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
4456
- const slideElements = import_react29.default.useMemo(
4457
- () => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
4497
+ const slideElements = import_react30.default.useMemo(
4498
+ () => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
4458
4499
  "div",
4459
4500
  {
4460
4501
  className: "lib-xplat-swiper__slide",
@@ -4473,14 +4514,14 @@ var Swiper = (props) => {
4473
4514
  Math.floor(realIndex / slideBy),
4474
4515
  totalSteps - 1
4475
4516
  );
4476
- return /* @__PURE__ */ (0, import_jsx_runtime335.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
4477
- /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
4517
+ return /* @__PURE__ */ (0, import_jsx_runtime336.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
4518
+ /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
4478
4519
  "div",
4479
4520
  {
4480
4521
  className: "lib-xplat-swiper__viewport",
4481
4522
  onMouseDown: handleDragStart,
4482
4523
  onTouchStart: handleDragStart,
4483
- children: /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
4524
+ children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
4484
4525
  "div",
4485
4526
  {
4486
4527
  className: clsx_default(
@@ -4498,7 +4539,7 @@ var Swiper = (props) => {
4498
4539
  )
4499
4540
  }
4500
4541
  ),
4501
- showProgress && canSlide && /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
4542
+ showProgress && canSlide && /* @__PURE__ */ (0, import_jsx_runtime336.jsx)("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
4502
4543
  "span",
4503
4544
  {
4504
4545
  className: "lib-xplat-swiper__progress-fill",
@@ -4508,7 +4549,7 @@ var Swiper = (props) => {
4508
4549
  }
4509
4550
  }
4510
4551
  ) }) }),
4511
- canSlide && /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
4552
+ canSlide && /* @__PURE__ */ (0, import_jsx_runtime336.jsx)("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
4512
4553
  "button",
4513
4554
  {
4514
4555
  className: clsx_default(
@@ -4526,8 +4567,8 @@ Swiper.displayName = "Swiper";
4526
4567
  var Swiper_default = Swiper;
4527
4568
 
4528
4569
  // src/components/Switch/Switch.tsx
4529
- var import_react30 = __toESM(require("react"), 1);
4530
- var import_jsx_runtime336 = require("react/jsx-runtime");
4570
+ var import_react31 = __toESM(require("react"), 1);
4571
+ var import_jsx_runtime337 = require("react/jsx-runtime");
4531
4572
  var KNOB_TRANSITION_MS = 250;
4532
4573
  var Switch = (props) => {
4533
4574
  const {
@@ -4537,9 +4578,9 @@ var Switch = (props) => {
4537
4578
  disabled,
4538
4579
  onChange
4539
4580
  } = props;
4540
- const [isAnimating, setIsAnimating] = import_react30.default.useState(false);
4541
- const timeoutRef = import_react30.default.useRef(null);
4542
- import_react30.default.useEffect(() => {
4581
+ const [isAnimating, setIsAnimating] = import_react31.default.useState(false);
4582
+ const timeoutRef = import_react31.default.useRef(null);
4583
+ import_react31.default.useEffect(() => {
4543
4584
  return () => {
4544
4585
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
4545
4586
  };
@@ -4554,7 +4595,7 @@ var Switch = (props) => {
4554
4595
  timeoutRef.current = null;
4555
4596
  }, KNOB_TRANSITION_MS);
4556
4597
  };
4557
- return /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
4598
+ return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
4558
4599
  "div",
4559
4600
  {
4560
4601
  className: clsx_default(
@@ -4567,7 +4608,7 @@ var Switch = (props) => {
4567
4608
  ),
4568
4609
  onClick: handleClick,
4569
4610
  "aria-disabled": disabled || isAnimating,
4570
- children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
4611
+ children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
4571
4612
  }
4572
4613
  );
4573
4614
  };
@@ -4575,17 +4616,17 @@ Switch.displayName = "Switch";
4575
4616
  var Switch_default = Switch;
4576
4617
 
4577
4618
  // src/components/Table/TableContext.tsx
4578
- var import_react31 = __toESM(require("react"), 1);
4579
- var TableContext = import_react31.default.createContext(null);
4619
+ var import_react32 = __toESM(require("react"), 1);
4620
+ var TableContext = import_react32.default.createContext(null);
4580
4621
  var useTableContext = () => {
4581
- const ctx = import_react31.default.useContext(TableContext);
4622
+ const ctx = import_react32.default.useContext(TableContext);
4582
4623
  if (!ctx) throw new Error("Table components must be used inside <Table>");
4583
4624
  return ctx;
4584
4625
  };
4585
4626
  var TableContext_default = TableContext;
4586
4627
 
4587
4628
  // src/components/Table/Table.tsx
4588
- var import_jsx_runtime337 = require("react/jsx-runtime");
4629
+ var import_jsx_runtime338 = require("react/jsx-runtime");
4589
4630
  var Table = (props) => {
4590
4631
  const {
4591
4632
  children,
@@ -4594,7 +4635,7 @@ var Table = (props) => {
4594
4635
  headerSticky = false,
4595
4636
  stickyShadow = true
4596
4637
  } = props;
4597
- return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: "lib-xplat-table-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
4638
+ return /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("div", { className: "lib-xplat-table-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
4598
4639
  TableContext_default.Provider,
4599
4640
  {
4600
4641
  value: {
@@ -4603,7 +4644,7 @@ var Table = (props) => {
4603
4644
  headerSticky,
4604
4645
  stickyShadow
4605
4646
  },
4606
- children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("table", { className: "lib-xplat-table", children })
4647
+ children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("table", { className: "lib-xplat-table", children })
4607
4648
  }
4608
4649
  ) });
4609
4650
  };
@@ -4611,41 +4652,41 @@ Table.displayName = "Table";
4611
4652
  var Table_default = Table;
4612
4653
 
4613
4654
  // src/components/Table/TableBody.tsx
4614
- var import_jsx_runtime338 = require("react/jsx-runtime");
4655
+ var import_jsx_runtime339 = require("react/jsx-runtime");
4615
4656
  var TableBody = (props) => {
4616
4657
  const { children } = props;
4617
- return /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("tbody", { children });
4658
+ return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)("tbody", { children });
4618
4659
  };
4619
4660
  TableBody.displayName = "TableBody";
4620
4661
  var TableBody_default = TableBody;
4621
4662
 
4622
4663
  // src/components/Table/TableCell.tsx
4623
- var import_react34 = __toESM(require("react"), 1);
4664
+ var import_react35 = __toESM(require("react"), 1);
4624
4665
 
4625
4666
  // src/components/Table/TableHeadContext.tsx
4626
- var import_react32 = __toESM(require("react"), 1);
4627
- var TableHeadContext = import_react32.default.createContext(
4667
+ var import_react33 = __toESM(require("react"), 1);
4668
+ var TableHeadContext = import_react33.default.createContext(
4628
4669
  null
4629
4670
  );
4630
4671
  var useTableHeadContext = () => {
4631
- const ctx = import_react32.default.useContext(TableHeadContext);
4672
+ const ctx = import_react33.default.useContext(TableHeadContext);
4632
4673
  return ctx;
4633
4674
  };
4634
4675
  var TableHeadContext_default = TableHeadContext;
4635
4676
 
4636
4677
  // src/components/Table/TableRowContext.tsx
4637
- var import_react33 = __toESM(require("react"), 1);
4638
- var TableRowContext = import_react33.default.createContext(null);
4678
+ var import_react34 = __toESM(require("react"), 1);
4679
+ var TableRowContext = import_react34.default.createContext(null);
4639
4680
  var useTableRowContext = () => {
4640
- const ctx = import_react33.default.useContext(TableRowContext);
4681
+ const ctx = import_react34.default.useContext(TableRowContext);
4641
4682
  if (!ctx) throw new Error("Table components must be used inside <Table>");
4642
4683
  return ctx;
4643
4684
  };
4644
4685
  var TableRowContext_default = TableRowContext;
4645
4686
 
4646
4687
  // src/components/Table/TableCell.tsx
4647
- var import_jsx_runtime339 = require("react/jsx-runtime");
4648
- var TableCell = import_react34.default.memo((props) => {
4688
+ var import_jsx_runtime340 = require("react/jsx-runtime");
4689
+ var TableCell = import_react35.default.memo((props) => {
4649
4690
  const {
4650
4691
  children,
4651
4692
  align = "center",
@@ -4657,9 +4698,9 @@ var TableCell = import_react34.default.memo((props) => {
4657
4698
  const { registerStickyCell, stickyCells } = useTableRowContext();
4658
4699
  const { stickyShadow } = useTableContext();
4659
4700
  const headContext = useTableHeadContext();
4660
- const [left, setLeft] = import_react34.default.useState(0);
4661
- const cellRef = import_react34.default.useRef(null);
4662
- const calculateLeft = import_react34.default.useCallback(() => {
4701
+ const [left, setLeft] = import_react35.default.useState(0);
4702
+ const cellRef = import_react35.default.useRef(null);
4703
+ const calculateLeft = import_react35.default.useCallback(() => {
4663
4704
  if (!cellRef.current) return 0;
4664
4705
  let totalLeft = 0;
4665
4706
  for (const ref of stickyCells) {
@@ -4668,7 +4709,7 @@ var TableCell = import_react34.default.memo((props) => {
4668
4709
  }
4669
4710
  return totalLeft;
4670
4711
  }, [stickyCells]);
4671
- import_react34.default.useEffect(() => {
4712
+ import_react35.default.useEffect(() => {
4672
4713
  if (!isSticky || !cellRef.current) return;
4673
4714
  registerStickyCell(cellRef);
4674
4715
  setLeft(calculateLeft());
@@ -4686,7 +4727,7 @@ var TableCell = import_react34.default.memo((props) => {
4686
4727
  const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
4687
4728
  const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
4688
4729
  const enableHover = headContext && headContext.cellHover;
4689
- return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
4730
+ return /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
4690
4731
  CellTag,
4691
4732
  {
4692
4733
  ref: cellRef,
@@ -4711,21 +4752,21 @@ TableCell.displayName = "TableCell";
4711
4752
  var TableCell_default = TableCell;
4712
4753
 
4713
4754
  // src/components/Table/TableHead.tsx
4714
- var import_jsx_runtime340 = require("react/jsx-runtime");
4755
+ var import_jsx_runtime341 = require("react/jsx-runtime");
4715
4756
  var TableHead = ({
4716
4757
  children,
4717
4758
  cellHover = false
4718
4759
  }) => {
4719
4760
  const { headerSticky } = useTableContext();
4720
- return /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
4761
+ return /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
4721
4762
  };
4722
4763
  TableHead.displayName = "TableHead";
4723
4764
  var TableHead_default = TableHead;
4724
4765
 
4725
4766
  // src/components/Table/TableRow.tsx
4726
- var import_react35 = __toESM(require("react"), 1);
4727
- var import_jsx_runtime341 = require("react/jsx-runtime");
4728
- var TableRow = import_react35.default.memo((props) => {
4767
+ var import_react36 = __toESM(require("react"), 1);
4768
+ var import_jsx_runtime342 = require("react/jsx-runtime");
4769
+ var TableRow = import_react36.default.memo((props) => {
4729
4770
  const {
4730
4771
  children,
4731
4772
  type = "secondary",
@@ -4733,14 +4774,14 @@ var TableRow = import_react35.default.memo((props) => {
4733
4774
  onClick
4734
4775
  } = props;
4735
4776
  const { rowBorderUse } = useTableContext();
4736
- const [stickyCells, setStickyCells] = import_react35.default.useState([]);
4777
+ const [stickyCells, setStickyCells] = import_react36.default.useState([]);
4737
4778
  const registerStickyCell = (ref) => {
4738
4779
  setStickyCells((prev) => {
4739
4780
  if (prev.includes(ref)) return prev;
4740
4781
  return [...prev, ref];
4741
4782
  });
4742
4783
  };
4743
- return /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
4784
+ return /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
4744
4785
  "tr",
4745
4786
  {
4746
4787
  className: clsx_default(
@@ -4758,7 +4799,7 @@ TableRow.displayName = "TableRow";
4758
4799
  var TableRow_default = TableRow;
4759
4800
 
4760
4801
  // src/components/Tag/Tag.tsx
4761
- var import_jsx_runtime342 = require("react/jsx-runtime");
4802
+ var import_jsx_runtime343 = require("react/jsx-runtime");
4762
4803
  var Tag = (props) => {
4763
4804
  const {
4764
4805
  children,
@@ -4768,7 +4809,7 @@ var Tag = (props) => {
4768
4809
  disabled = false,
4769
4810
  colorIndex
4770
4811
  } = props;
4771
- return /* @__PURE__ */ (0, import_jsx_runtime342.jsxs)(
4812
+ return /* @__PURE__ */ (0, import_jsx_runtime343.jsxs)(
4772
4813
  "span",
4773
4814
  {
4774
4815
  className: clsx_default(
@@ -4779,8 +4820,8 @@ var Tag = (props) => {
4779
4820
  disabled && "disabled"
4780
4821
  ),
4781
4822
  children: [
4782
- /* @__PURE__ */ (0, import_jsx_runtime342.jsx)("span", { className: "tag-label", children }),
4783
- onClose && /* @__PURE__ */ (0, import_jsx_runtime342.jsx)("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(XIcon_default, {}) })
4823
+ /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("span", { className: "tag-label", children }),
4824
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(XIcon_default, {}) })
4784
4825
  ]
4785
4826
  }
4786
4827
  );
@@ -4789,12 +4830,12 @@ Tag.displayName = "Tag";
4789
4830
  var Tag_default = Tag;
4790
4831
 
4791
4832
  // src/components/TextArea/TextArea.tsx
4792
- var import_react36 = __toESM(require("react"), 1);
4793
- var import_jsx_runtime343 = require("react/jsx-runtime");
4794
- var TextArea = import_react36.default.forwardRef(
4833
+ var import_react37 = __toESM(require("react"), 1);
4834
+ var import_jsx_runtime344 = require("react/jsx-runtime");
4835
+ var TextArea = import_react37.default.forwardRef(
4795
4836
  (props, ref) => {
4796
4837
  const { value, onChange, disabled, ...textareaProps } = props;
4797
- const localRef = import_react36.default.useRef(null);
4838
+ const localRef = import_react37.default.useRef(null);
4798
4839
  const setRefs = (el) => {
4799
4840
  localRef.current = el;
4800
4841
  if (!ref) return;
@@ -4814,21 +4855,21 @@ var TextArea = import_react36.default.forwardRef(
4814
4855
  onChange(event);
4815
4856
  }
4816
4857
  };
4817
- import_react36.default.useEffect(() => {
4858
+ import_react37.default.useEffect(() => {
4818
4859
  const el = localRef.current;
4819
4860
  if (!el) return;
4820
4861
  el.style.height = "0px";
4821
4862
  const nextHeight = Math.min(el.scrollHeight, 400);
4822
4863
  el.style.height = `${nextHeight}px`;
4823
4864
  }, [value]);
4824
- return /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(
4865
+ return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
4825
4866
  "div",
4826
4867
  {
4827
4868
  className: clsx_default(
4828
4869
  "lib-xplat-textarea",
4829
4870
  disabled ? "disabled" : void 0
4830
4871
  ),
4831
- children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(
4872
+ children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
4832
4873
  "textarea",
4833
4874
  {
4834
4875
  ...textareaProps,
@@ -4846,25 +4887,25 @@ TextArea.displayName = "TextArea";
4846
4887
  var TextArea_default = TextArea;
4847
4888
 
4848
4889
  // src/components/Toast/Toast.tsx
4849
- var import_react37 = __toESM(require("react"), 1);
4850
- var import_react_dom3 = require("react-dom");
4851
- var import_jsx_runtime344 = require("react/jsx-runtime");
4852
- var ToastContext = import_react37.default.createContext(null);
4890
+ var import_react38 = __toESM(require("react"), 1);
4891
+ var import_react_dom4 = require("react-dom");
4892
+ var import_jsx_runtime345 = require("react/jsx-runtime");
4893
+ var ToastContext = import_react38.default.createContext(null);
4853
4894
  var useToast = () => {
4854
- const ctx = import_react37.default.useContext(ToastContext);
4895
+ const ctx = import_react38.default.useContext(ToastContext);
4855
4896
  if (!ctx) throw new Error("useToast must be used within ToastProvider");
4856
4897
  return ctx;
4857
4898
  };
4858
4899
  var EXIT_DURATION = 300;
4859
4900
  var ToastItemComponent = ({ item, isExiting, onClose }) => {
4860
- const ref = import_react37.default.useRef(null);
4861
- const [height, setHeight] = import_react37.default.useState(void 0);
4862
- import_react37.default.useEffect(() => {
4901
+ const ref = import_react38.default.useRef(null);
4902
+ const [height, setHeight] = import_react38.default.useState(void 0);
4903
+ import_react38.default.useEffect(() => {
4863
4904
  if (ref.current && !isExiting) {
4864
4905
  setHeight(ref.current.offsetHeight);
4865
4906
  }
4866
4907
  }, [isExiting]);
4867
- return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
4908
+ return /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(
4868
4909
  "div",
4869
4910
  {
4870
4911
  className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
@@ -4872,15 +4913,15 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
4872
4913
  maxHeight: isExiting ? 0 : height ?? "none",
4873
4914
  marginBottom: isExiting ? 0 : void 0
4874
4915
  },
4875
- children: /* @__PURE__ */ (0, import_jsx_runtime344.jsxs)(
4916
+ children: /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)(
4876
4917
  "div",
4877
4918
  {
4878
4919
  ref,
4879
4920
  className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
4880
4921
  role: "alert",
4881
4922
  children: [
4882
- /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("span", { className: "message", children: item.message }),
4883
- /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
4923
+ /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("span", { className: "message", children: item.message }),
4924
+ /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
4884
4925
  ]
4885
4926
  }
4886
4927
  )
@@ -4891,13 +4932,13 @@ var ToastProvider = ({
4891
4932
  children,
4892
4933
  position = "top-right"
4893
4934
  }) => {
4894
- const [toasts, setToasts] = import_react37.default.useState([]);
4895
- const [removing, setRemoving] = import_react37.default.useState(/* @__PURE__ */ new Set());
4896
- const [mounted, setMounted] = import_react37.default.useState(false);
4897
- import_react37.default.useEffect(() => {
4935
+ const [toasts, setToasts] = import_react38.default.useState([]);
4936
+ const [removing, setRemoving] = import_react38.default.useState(/* @__PURE__ */ new Set());
4937
+ const [mounted, setMounted] = import_react38.default.useState(false);
4938
+ import_react38.default.useEffect(() => {
4898
4939
  setMounted(true);
4899
4940
  }, []);
4900
- const remove = import_react37.default.useCallback((id) => {
4941
+ const remove = import_react38.default.useCallback((id) => {
4901
4942
  setRemoving((prev) => new Set(prev).add(id));
4902
4943
  setTimeout(() => {
4903
4944
  setToasts((prev) => prev.filter((t) => t.id !== id));
@@ -4908,7 +4949,7 @@ var ToastProvider = ({
4908
4949
  });
4909
4950
  }, EXIT_DURATION);
4910
4951
  }, []);
4911
- const toast = import_react37.default.useCallback(
4952
+ const toast = import_react38.default.useCallback(
4912
4953
  (type, message, duration = 3e3) => {
4913
4954
  const id = `${Date.now()}-${Math.random()}`;
4914
4955
  setToasts((prev) => [...prev, { id, type, message }]);
@@ -4918,10 +4959,10 @@ var ToastProvider = ({
4918
4959
  },
4919
4960
  [remove]
4920
4961
  );
4921
- return /* @__PURE__ */ (0, import_jsx_runtime344.jsxs)(ToastContext.Provider, { value: { toast }, children: [
4962
+ return /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)(ToastContext.Provider, { value: { toast }, children: [
4922
4963
  children,
4923
- mounted && (0, import_react_dom3.createPortal)(
4924
- /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
4964
+ mounted && (0, import_react_dom4.createPortal)(
4965
+ /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(
4925
4966
  ToastItemComponent,
4926
4967
  {
4927
4968
  item: t,
@@ -4937,29 +4978,29 @@ var ToastProvider = ({
4937
4978
  ToastProvider.displayName = "ToastProvider";
4938
4979
 
4939
4980
  // src/components/Tooltip/Tooltip.tsx
4940
- var import_react38 = __toESM(require("react"), 1);
4941
- var import_jsx_runtime345 = require("react/jsx-runtime");
4981
+ var import_react39 = __toESM(require("react"), 1);
4982
+ var import_jsx_runtime346 = require("react/jsx-runtime");
4942
4983
  var Tooltip = (props) => {
4943
4984
  const {
4944
4985
  type = "primary",
4945
4986
  description,
4946
4987
  children
4947
4988
  } = props;
4948
- const iconRef = import_react38.default.useRef(null);
4949
- return /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)("div", { className: "lib-xplat-tooltip", children: [
4950
- /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
4951
- /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("div", { className: clsx_default("tooltip-wrapper", type), children: description })
4989
+ const iconRef = import_react39.default.useRef(null);
4990
+ return /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: "lib-xplat-tooltip", children: [
4991
+ /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
4992
+ /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("div", { className: clsx_default("tooltip-wrapper", type), children: description })
4952
4993
  ] });
4953
4994
  };
4954
4995
  Tooltip.displayName = "Tooltip";
4955
4996
  var Tooltip_default = Tooltip;
4956
4997
 
4957
4998
  // src/components/Video/Video.tsx
4958
- var import_react39 = __toESM(require("react"), 1);
4959
- var import_jsx_runtime346 = require("react/jsx-runtime");
4960
- var PipIcon = () => /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
4961
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
4962
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
4999
+ var import_react40 = __toESM(require("react"), 1);
5000
+ var import_jsx_runtime347 = require("react/jsx-runtime");
5001
+ var PipIcon = () => /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
5002
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
5003
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
4963
5004
  ] });
4964
5005
  var formatTime = (sec) => {
4965
5006
  if (!Number.isFinite(sec) || sec < 0) return "0:00";
@@ -4967,7 +5008,7 @@ var formatTime = (sec) => {
4967
5008
  const s = Math.floor(sec % 60);
4968
5009
  return `${m}:${s.toString().padStart(2, "0")}`;
4969
5010
  };
4970
- var Video = import_react39.default.forwardRef((props, ref) => {
5011
+ var Video = import_react40.default.forwardRef((props, ref) => {
4971
5012
  const {
4972
5013
  src,
4973
5014
  poster,
@@ -4991,21 +5032,21 @@ var Video = import_react39.default.forwardRef((props, ref) => {
4991
5032
  children,
4992
5033
  ...rest
4993
5034
  } = props;
4994
- const containerRef = import_react39.default.useRef(null);
4995
- const videoRef = import_react39.default.useRef(null);
4996
- const [isPlaying, setIsPlaying] = import_react39.default.useState(Boolean(autoPlay));
4997
- const [isLoaded, setIsLoaded] = import_react39.default.useState(false);
4998
- const [currentTime, setCurrentTime] = import_react39.default.useState(0);
4999
- const [duration, setDuration] = import_react39.default.useState(0);
5000
- const [buffered, setBuffered] = import_react39.default.useState(0);
5001
- const [volume, setVolume] = import_react39.default.useState(1);
5002
- const [isMuted, setIsMuted] = import_react39.default.useState(Boolean(muted));
5003
- const [isFullscreen, setIsFullscreen] = import_react39.default.useState(false);
5004
- const [playbackRate, setPlaybackRate] = import_react39.default.useState(1);
5005
- const [rateMenuOpen, setRateMenuOpen] = import_react39.default.useState(false);
5006
- const [captionsOn, setCaptionsOn] = import_react39.default.useState(false);
5007
- const [isPip, setIsPip] = import_react39.default.useState(false);
5008
- const setRefs = import_react39.default.useCallback(
5035
+ const containerRef = import_react40.default.useRef(null);
5036
+ const videoRef = import_react40.default.useRef(null);
5037
+ const [isPlaying, setIsPlaying] = import_react40.default.useState(Boolean(autoPlay));
5038
+ const [isLoaded, setIsLoaded] = import_react40.default.useState(false);
5039
+ const [currentTime, setCurrentTime] = import_react40.default.useState(0);
5040
+ const [duration, setDuration] = import_react40.default.useState(0);
5041
+ const [buffered, setBuffered] = import_react40.default.useState(0);
5042
+ const [volume, setVolume] = import_react40.default.useState(1);
5043
+ const [isMuted, setIsMuted] = import_react40.default.useState(Boolean(muted));
5044
+ const [isFullscreen, setIsFullscreen] = import_react40.default.useState(false);
5045
+ const [playbackRate, setPlaybackRate] = import_react40.default.useState(1);
5046
+ const [rateMenuOpen, setRateMenuOpen] = import_react40.default.useState(false);
5047
+ const [captionsOn, setCaptionsOn] = import_react40.default.useState(false);
5048
+ const [isPip, setIsPip] = import_react40.default.useState(false);
5049
+ const setRefs = import_react40.default.useCallback(
5009
5050
  (el) => {
5010
5051
  videoRef.current = el;
5011
5052
  if (typeof ref === "function") ref(el);
@@ -5013,14 +5054,14 @@ var Video = import_react39.default.forwardRef((props, ref) => {
5013
5054
  },
5014
5055
  [ref]
5015
5056
  );
5016
- import_react39.default.useEffect(() => {
5057
+ import_react40.default.useEffect(() => {
5017
5058
  const onFsChange = () => {
5018
5059
  setIsFullscreen(document.fullscreenElement === containerRef.current);
5019
5060
  };
5020
5061
  document.addEventListener("fullscreenchange", onFsChange);
5021
5062
  return () => document.removeEventListener("fullscreenchange", onFsChange);
5022
5063
  }, []);
5023
- import_react39.default.useEffect(() => {
5064
+ import_react40.default.useEffect(() => {
5024
5065
  const v = videoRef.current;
5025
5066
  if (!v) return;
5026
5067
  const onEnter = () => setIsPip(true);
@@ -5134,13 +5175,13 @@ var Video = import_react39.default.forwardRef((props, ref) => {
5134
5175
  const volumePct = (isMuted ? 0 : volume) * 100;
5135
5176
  const VolumeGlyph = isMuted || volume === 0 ? VolumeXIcon_default : volume < 0.5 ? VolumeIcon_default : Volume2Icon_default;
5136
5177
  const pipSupported = typeof document !== "undefined" && "pictureInPictureEnabled" in document && document.pictureInPictureEnabled;
5137
- return /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)(
5178
+ return /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)(
5138
5179
  "div",
5139
5180
  {
5140
5181
  ref: containerRef,
5141
5182
  className: clsx_default("lib-xplat-video", showControls && "has-controls"),
5142
5183
  children: [
5143
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
5184
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
5144
5185
  "video",
5145
5186
  {
5146
5187
  ref: setRefs,
@@ -5161,7 +5202,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
5161
5202
  children
5162
5203
  }
5163
5204
  ),
5164
- showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
5205
+ showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
5165
5206
  "button",
5166
5207
  {
5167
5208
  type: "button",
@@ -5173,11 +5214,11 @@ var Video = import_react39.default.forwardRef((props, ref) => {
5173
5214
  onClick: togglePlay,
5174
5215
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
5175
5216
  tabIndex: -1,
5176
- children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(PlayCircleIcon_default, {}) })
5217
+ children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PlayCircleIcon_default, {}) })
5177
5218
  }
5178
5219
  ),
5179
- showControls && /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
5180
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
5220
+ showControls && /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
5221
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
5181
5222
  "input",
5182
5223
  {
5183
5224
  type: "range",
@@ -5194,29 +5235,29 @@ var Video = import_react39.default.forwardRef((props, ref) => {
5194
5235
  }
5195
5236
  }
5196
5237
  ),
5197
- /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: "controls-row", children: [
5198
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
5238
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "controls-row", children: [
5239
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
5199
5240
  "button",
5200
5241
  {
5201
5242
  type: "button",
5202
5243
  className: "control-btn",
5203
5244
  onClick: togglePlay,
5204
5245
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
5205
- children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(PlayIcon_default, {})
5246
+ children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PlayIcon_default, {})
5206
5247
  }
5207
5248
  ),
5208
- /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: "volume-group", children: [
5209
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
5249
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "volume-group", children: [
5250
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
5210
5251
  "button",
5211
5252
  {
5212
5253
  type: "button",
5213
5254
  className: "control-btn",
5214
5255
  onClick: toggleMute,
5215
5256
  "aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
5216
- children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(VolumeGlyph, {})
5257
+ children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(VolumeGlyph, {})
5217
5258
  }
5218
5259
  ),
5219
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
5260
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
5220
5261
  "input",
5221
5262
  {
5222
5263
  type: "range",
@@ -5231,14 +5272,14 @@ var Video = import_react39.default.forwardRef((props, ref) => {
5231
5272
  }
5232
5273
  )
5233
5274
  ] }),
5234
- /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("span", { className: "time", children: [
5275
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("span", { className: "time", children: [
5235
5276
  formatTime(currentTime),
5236
5277
  " / ",
5237
5278
  formatTime(duration)
5238
5279
  ] }),
5239
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("div", { className: "controls-spacer" }),
5240
- playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
5241
- /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)(
5280
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("div", { className: "controls-spacer" }),
5281
+ playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
5282
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)(
5242
5283
  "button",
5243
5284
  {
5244
5285
  type: "button",
@@ -5252,7 +5293,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
5252
5293
  ]
5253
5294
  }
5254
5295
  ),
5255
- rateMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)(
5296
+ rateMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)(
5256
5297
  "button",
5257
5298
  {
5258
5299
  type: "button",
@@ -5266,7 +5307,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
5266
5307
  }
5267
5308
  ) }, r2)) })
5268
5309
  ] }),
5269
- showCaptions && /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
5310
+ showCaptions && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
5270
5311
  "button",
5271
5312
  {
5272
5313
  type: "button",
@@ -5274,37 +5315,37 @@ var Video = import_react39.default.forwardRef((props, ref) => {
5274
5315
  onClick: toggleCaptions,
5275
5316
  "aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
5276
5317
  "aria-pressed": captionsOn,
5277
- children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(TypeIcon_default, {})
5318
+ children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(TypeIcon_default, {})
5278
5319
  }
5279
5320
  ),
5280
- showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
5321
+ showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
5281
5322
  "button",
5282
5323
  {
5283
5324
  type: "button",
5284
5325
  className: clsx_default("control-btn", isPip && "is-active"),
5285
5326
  onClick: togglePip,
5286
5327
  "aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
5287
- children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(PipIcon, {})
5328
+ children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PipIcon, {})
5288
5329
  }
5289
5330
  ),
5290
- showDownload && /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
5331
+ showDownload && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
5291
5332
  "a",
5292
5333
  {
5293
5334
  className: "control-btn",
5294
5335
  href: src,
5295
5336
  download: downloadFileName ?? true,
5296
5337
  "aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
5297
- children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(DownloadIcon_default, {})
5338
+ children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(DownloadIcon_default, {})
5298
5339
  }
5299
5340
  ),
5300
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
5341
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
5301
5342
  "button",
5302
5343
  {
5303
5344
  type: "button",
5304
5345
  className: "control-btn",
5305
5346
  onClick: toggleFullscreen,
5306
5347
  "aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
5307
- children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(MaximizeIcon_default, {})
5348
+ children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(MaximizeIcon_default, {})
5308
5349
  }
5309
5350
  )
5310
5351
  ] })