@x-plat/design-system 0.5.11 → 0.5.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -6567,14 +6567,23 @@ var useChartSize = (ref) => {
6567
6567
  import_react5.default.useEffect(() => {
6568
6568
  const el = ref.current;
6569
6569
  if (!el) return;
6570
+ let rafId = 0;
6570
6571
  const observer = new ResizeObserver((entries) => {
6571
- const entry = entries[0];
6572
- if (!entry) return;
6573
- const { width, height } = entry.contentRect;
6574
- setSize({ width: Math.floor(width), height: Math.floor(height) });
6572
+ cancelAnimationFrame(rafId);
6573
+ rafId = requestAnimationFrame(() => {
6574
+ const entry = entries[0];
6575
+ if (!entry) return;
6576
+ const { width, height } = entry.contentRect;
6577
+ const w = Math.floor(width);
6578
+ const h = Math.floor(height);
6579
+ setSize((prev) => prev.width === w && prev.height === h ? prev : { width: w, height: h });
6580
+ });
6575
6581
  });
6576
6582
  observer.observe(el);
6577
- return () => observer.disconnect();
6583
+ return () => {
6584
+ cancelAnimationFrame(rafId);
6585
+ observer.disconnect();
6586
+ };
6578
6587
  }, [ref]);
6579
6588
  return size;
6580
6589
  };
@@ -6586,15 +6595,21 @@ var useChartTooltip = (enabled) => {
6586
6595
  content: ""
6587
6596
  });
6588
6597
  const containerRef = import_react5.default.useRef(null);
6598
+ const rafRef = import_react5.default.useRef(0);
6589
6599
  const move = import_react5.default.useCallback((e) => {
6590
6600
  if (!enabled) return;
6591
- const rect = containerRef.current?.getBoundingClientRect();
6592
- if (!rect) return;
6593
- setTooltip((prev) => ({
6594
- ...prev,
6595
- x: e.clientX - rect.left,
6596
- y: e.clientY - rect.top - 12
6597
- }));
6601
+ const clientX = e.clientX;
6602
+ const clientY = e.clientY;
6603
+ cancelAnimationFrame(rafRef.current);
6604
+ rafRef.current = requestAnimationFrame(() => {
6605
+ const rect = containerRef.current?.getBoundingClientRect();
6606
+ if (!rect) return;
6607
+ setTooltip((prev) => ({
6608
+ ...prev,
6609
+ x: clientX - rect.left,
6610
+ y: clientY - rect.top - 12
6611
+ }));
6612
+ });
6598
6613
  }, [enabled]);
6599
6614
  const show = import_react5.default.useCallback((e, content) => {
6600
6615
  if (!enabled) return;
@@ -6608,10 +6623,35 @@ var useChartTooltip = (enabled) => {
6608
6623
  });
6609
6624
  }, [enabled]);
6610
6625
  const hide = import_react5.default.useCallback(() => {
6626
+ cancelAnimationFrame(rafRef.current);
6611
6627
  setTooltip((prev) => ({ ...prev, visible: false }));
6612
6628
  }, []);
6613
6629
  return { tooltip, show, hide, move, containerRef };
6614
6630
  };
6631
+ 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) => {
6632
+ const y = PADDING.top + (1 - ratio) * chartH;
6633
+ const val = Math.round(maxVal * ratio);
6634
+ return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
6635
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
6636
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
6637
+ ] }, ratio);
6638
+ }) }));
6639
+ GridLines.displayName = "GridLines";
6640
+ var getLabelStep = (count, chartW) => {
6641
+ const minLabelWidth = 40;
6642
+ const maxLabels = Math.floor(chartW / minLabelWidth);
6643
+ if (count <= maxLabels) return 1;
6644
+ return Math.ceil(count / maxLabels);
6645
+ };
6646
+ var AxisLabels = import_react5.default.memo(({ labels, count, chartW, height }) => {
6647
+ const step = getLabelStep(count, chartW);
6648
+ return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(import_jsx_runtime305.Fragment, { children: labels.map((label, i) => {
6649
+ if (i % step !== 0) return null;
6650
+ const x = PADDING.left + i / (count - 1 || 1) * chartW;
6651
+ return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
6652
+ }) });
6653
+ });
6654
+ AxisLabels.displayName = "AxisLabels";
6615
6655
  var LineChart = import_react5.default.memo(({ data, labels, width, height, onHover, onMove, onLeave }) => {
6616
6656
  const entries = import_react5.default.useMemo(() => Object.entries(data), [data]);
6617
6657
  const maxVal = import_react5.default.useMemo(() => {
@@ -6631,19 +6671,10 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, onHov
6631
6671
  ),
6632
6672
  [entries, count, chartW, chartH, maxVal]
6633
6673
  );
6674
+ const showPoints = count <= 100;
6634
6675
  return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
6635
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
6636
- const y = PADDING.top + (1 - ratio) * chartH;
6637
- const val = Math.round(maxVal * ratio);
6638
- return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
6639
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
6640
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
6641
- ] }, ratio);
6642
- }),
6643
- labels.map((label, i) => {
6644
- const x = PADDING.left + i / (count - 1 || 1) * chartW;
6645
- return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
6646
- }),
6676
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
6677
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(AxisLabels, { labels, count, chartW, height }),
6647
6678
  entries.map(([key], di) => {
6648
6679
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
6649
6680
  const color = palette[2];
@@ -6658,7 +6689,7 @@ var LineChart = import_react5.default.memo(({ data, labels, width, height, onHov
6658
6689
  strokeWidth: "2"
6659
6690
  }
6660
6691
  ),
6661
- points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
6692
+ showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
6662
6693
  "circle",
6663
6694
  {
6664
6695
  cx: p.x,
@@ -6696,19 +6727,10 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, onHo
6696
6727
  ),
6697
6728
  [entries, count, chartW, chartH, maxVal]
6698
6729
  );
6730
+ const showPoints = count <= 100;
6699
6731
  return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
6700
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
6701
- const y = PADDING.top + (1 - ratio) * chartH;
6702
- const val = Math.round(maxVal * ratio);
6703
- return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
6704
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
6705
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
6706
- ] }, ratio);
6707
- }),
6708
- labels.map((label, i) => {
6709
- const x = PADDING.left + i / (count - 1 || 1) * chartW;
6710
- return /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
6711
- }),
6732
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
6733
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(AxisLabels, { labels, count, chartW, height }),
6712
6734
  entries.map(([key], di) => {
6713
6735
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
6714
6736
  const color = palette[2];
@@ -6724,7 +6746,7 @@ var CurveChart = import_react5.default.memo(({ data, labels, width, height, onHo
6724
6746
  ] }) }),
6725
6747
  /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("path", { d: areaPath, fill: `url(#${gradientId})` }),
6726
6748
  /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("path", { d: linePath, fill: "none", stroke: color, strokeWidth: "2" }),
6727
- points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
6749
+ showPoints && points.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(
6728
6750
  "circle",
6729
6751
  {
6730
6752
  cx: p.x,
@@ -6754,11 +6776,11 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, onHove
6754
6776
  const chartW = width - PADDING.left - PADDING.right;
6755
6777
  const chartH = height - PADDING.top - PADDING.bottom;
6756
6778
  const groupW = chartW / count;
6757
- const barW = Math.min(32, groupW * 0.7 / groupCount);
6779
+ const barW = Math.max(1, Math.min(32, groupW * 0.7 / groupCount));
6758
6780
  const bars = import_react5.default.useMemo(
6759
6781
  () => entries.map(
6760
6782
  ([, values], di) => values.map((v, i) => {
6761
- const h = v / maxVal * chartH;
6783
+ const h = Math.max(0, v / maxVal * chartH);
6762
6784
  const x = PADDING.left + groupW * i + (groupW - barW * groupCount) / 2 + barW * di;
6763
6785
  const y = PADDING.top + chartH - h;
6764
6786
  return { x, y, w: barW, h, v };
@@ -6766,16 +6788,13 @@ var BarChart = import_react5.default.memo(({ data, labels, width, height, onHove
6766
6788
  ),
6767
6789
  [entries, maxVal, chartH, groupW, barW, groupCount]
6768
6790
  );
6791
+ const barLabelStep = getLabelStep(count, chartW);
6769
6792
  return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
6770
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
6771
- const y = PADDING.top + (1 - ratio) * chartH;
6772
- const val = Math.round(maxVal * ratio);
6773
- return /* @__PURE__ */ (0, import_jsx_runtime305.jsxs)("g", { children: [
6774
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
6775
- /* @__PURE__ */ (0, import_jsx_runtime305.jsx)("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
6776
- ] }, ratio);
6793
+ /* @__PURE__ */ (0, import_jsx_runtime305.jsx)(GridLines, { width, height, chartH, maxVal }),
6794
+ labels.map((label, i) => {
6795
+ if (i % barLabelStep !== 0) return null;
6796
+ 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);
6777
6797
  }),
6778
- 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)),
6779
6798
  entries.map(([key], di) => {
6780
6799
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
6781
6800
  const color = palette[2];
@@ -6968,7 +6987,7 @@ Chip.displayName = "Chip";
6968
6987
  var Chip_default = Chip;
6969
6988
 
6970
6989
  // src/components/DatePicker/InputDatePicker/index.tsx
6971
- var import_react11 = __toESM(require("react"), 1);
6990
+ var import_react12 = __toESM(require("react"), 1);
6972
6991
 
6973
6992
  // src/components/Input/Input.tsx
6974
6993
  var import_react6 = __toESM(require("react"), 1);
@@ -7158,15 +7177,37 @@ PasswordInput.displayName = "PasswordInput";
7158
7177
  var PasswordInput_default = PasswordInput;
7159
7178
 
7160
7179
  // src/components/Modal/Modal.tsx
7180
+ var import_react10 = __toESM(require("react"), 1);
7181
+ var import_react_dom2 = require("react-dom");
7182
+
7183
+ // src/tokens/hooks/Portal.tsx
7161
7184
  var import_react9 = __toESM(require("react"), 1);
7162
- var import_react_dom = require("react-dom");
7185
+ var import_react_dom = __toESM(require("react-dom"), 1);
7163
7186
  var import_jsx_runtime311 = require("react/jsx-runtime");
7187
+ var PortalContainerContext = import_react9.default.createContext(null);
7188
+ var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(PortalContainerContext.Provider, { value: container, children });
7189
+ var Portal = ({ children }) => {
7190
+ const contextContainer = import_react9.default.useContext(PortalContainerContext);
7191
+ const [fallback, setFallback] = import_react9.default.useState(null);
7192
+ import_react9.default.useEffect(() => {
7193
+ if (!contextContainer) setFallback(document.body);
7194
+ }, [contextContainer]);
7195
+ const container = contextContainer ?? fallback;
7196
+ if (!container) return null;
7197
+ return import_react_dom.default.createPortal(children, container);
7198
+ };
7199
+ Portal.displayName = "Portal";
7200
+ var Portal_default = Portal;
7201
+
7202
+ // src/components/Modal/Modal.tsx
7203
+ var import_jsx_runtime312 = require("react/jsx-runtime");
7164
7204
  var ANIMATION_DURATION_MS = 200;
7165
7205
  var Modal = (props) => {
7166
7206
  const { isOpen, onClose, children } = props;
7167
- const [mounted, setMounted] = import_react9.default.useState(false);
7168
- const [visible, setVisible] = import_react9.default.useState(false);
7169
- import_react9.default.useEffect(() => {
7207
+ const [mounted, setMounted] = import_react10.default.useState(false);
7208
+ const [visible, setVisible] = import_react10.default.useState(false);
7209
+ const boxRef = import_react10.default.useRef(null);
7210
+ import_react10.default.useEffect(() => {
7170
7211
  if (isOpen) {
7171
7212
  setMounted(true);
7172
7213
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -7179,20 +7220,21 @@ var Modal = (props) => {
7179
7220
  if (typeof document === "undefined") return null;
7180
7221
  if (!mounted) return null;
7181
7222
  const stateClass = visible ? "enter" : "exit";
7182
- return (0, import_react_dom.createPortal)(
7183
- /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
7223
+ return (0, import_react_dom2.createPortal)(
7224
+ /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
7184
7225
  "div",
7185
7226
  {
7186
7227
  className: clsx_default("lib-xplat-modal", "dim", stateClass),
7187
7228
  onClick: onClose,
7188
- children: /* @__PURE__ */ (0, import_jsx_runtime311.jsx)(
7229
+ children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
7189
7230
  "div",
7190
7231
  {
7232
+ ref: boxRef,
7191
7233
  className: clsx_default("lib-xplat-modal", "modal-box", stateClass),
7192
7234
  role: "dialog",
7193
7235
  "aria-modal": "true",
7194
7236
  onClick: (e) => e.stopPropagation(),
7195
- children
7237
+ children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(PortalProvider, { container: boxRef.current, children })
7196
7238
  }
7197
7239
  )
7198
7240
  }
@@ -7204,9 +7246,9 @@ Modal.displayName = "Modal";
7204
7246
  var Modal_default = Modal;
7205
7247
 
7206
7248
  // src/components/DatePicker/SingleDatePicker/index.tsx
7207
- var import_react10 = __toESM(require("react"), 1);
7208
- var import_jsx_runtime312 = require("react/jsx-runtime");
7209
- var DayCell2 = import_react10.default.memo(
7249
+ var import_react11 = __toESM(require("react"), 1);
7250
+ var import_jsx_runtime313 = require("react/jsx-runtime");
7251
+ var DayCell2 = import_react11.default.memo(
7210
7252
  ({
7211
7253
  day,
7212
7254
  disabled,
@@ -7216,7 +7258,7 @@ var DayCell2 = import_react10.default.memo(
7216
7258
  isEnd,
7217
7259
  inRange,
7218
7260
  onSelect
7219
- }) => /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
7261
+ }) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
7220
7262
  "button",
7221
7263
  {
7222
7264
  type: "button",
@@ -7258,26 +7300,26 @@ var SingleDatePicker = (props) => {
7258
7300
  initialYear,
7259
7301
  initialMonth
7260
7302
  );
7261
- const [pickerMode, setPickerMode] = import_react10.default.useState("days");
7262
- const [yearRangeStart, setYearRangeStart] = import_react10.default.useState(
7303
+ const [pickerMode, setPickerMode] = import_react11.default.useState("days");
7304
+ const [yearRangeStart, setYearRangeStart] = import_react11.default.useState(
7263
7305
  Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
7264
7306
  );
7265
- const minTime = import_react10.default.useMemo(
7307
+ const minTime = import_react11.default.useMemo(
7266
7308
  () => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
7267
7309
  [minDate]
7268
7310
  );
7269
- const maxTime = import_react10.default.useMemo(
7311
+ const maxTime = import_react11.default.useMemo(
7270
7312
  () => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
7271
7313
  [maxDate]
7272
7314
  );
7273
- const highlightSet = import_react10.default.useMemo(() => {
7315
+ const highlightSet = import_react11.default.useMemo(() => {
7274
7316
  const set = /* @__PURE__ */ new Set();
7275
7317
  for (const h of highlightDates) {
7276
7318
  set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
7277
7319
  }
7278
7320
  return set;
7279
7321
  }, [highlightDates]);
7280
- const handleSelect = import_react10.default.useCallback(
7322
+ const handleSelect = import_react11.default.useCallback(
7281
7323
  (date) => {
7282
7324
  onChange?.(date);
7283
7325
  },
@@ -7314,20 +7356,20 @@ var SingleDatePicker = (props) => {
7314
7356
  const monthLabels = MONTH_LABELS[locale];
7315
7357
  const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
7316
7358
  const hasRange = rangeStart != null && rangeEnd != null;
7317
- return /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(
7359
+ return /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(
7318
7360
  "div",
7319
7361
  {
7320
7362
  className: clsx_default("lib-xplat-datepicker", "single"),
7321
7363
  children: [
7322
- /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)("div", { className: "datepicker-header", children: [
7323
- /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(ChevronLeftIcon_default, {}) }),
7324
- /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
7325
- /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(ChevronRightIcon_default, {}) })
7364
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "datepicker-header", children: [
7365
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(ChevronLeftIcon_default, {}) }),
7366
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
7367
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(ChevronRightIcon_default, {}) })
7326
7368
  ] }),
7327
- /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)("div", { className: "datepicker-body", children: [
7328
- pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
7369
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "datepicker-body", children: [
7370
+ pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
7329
7371
  const y = yearRangeStart + i;
7330
- return /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
7372
+ return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
7331
7373
  "button",
7332
7374
  {
7333
7375
  type: "button",
@@ -7338,7 +7380,7 @@ var SingleDatePicker = (props) => {
7338
7380
  y
7339
7381
  );
7340
7382
  }) }),
7341
- pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
7383
+ pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
7342
7384
  "button",
7343
7385
  {
7344
7386
  type: "button",
@@ -7348,8 +7390,8 @@ var SingleDatePicker = (props) => {
7348
7390
  },
7349
7391
  i
7350
7392
  )) }),
7351
- pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime312.jsxs)(import_jsx_runtime312.Fragment, { children: [
7352
- /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
7393
+ pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)(import_jsx_runtime313.Fragment, { children: [
7394
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
7353
7395
  "div",
7354
7396
  {
7355
7397
  className: clsx_default(
@@ -7361,7 +7403,7 @@ var SingleDatePicker = (props) => {
7361
7403
  },
7362
7404
  label
7363
7405
  )) }),
7364
- /* @__PURE__ */ (0, import_jsx_runtime312.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
7406
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
7365
7407
  const t = day.date.getTime();
7366
7408
  const disabled = t < minTime || t > maxTime;
7367
7409
  const selected = value ? isSameDay(day.date, value) : false;
@@ -7371,7 +7413,7 @@ var SingleDatePicker = (props) => {
7371
7413
  const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
7372
7414
  const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
7373
7415
  const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
7374
- return /* @__PURE__ */ (0, import_jsx_runtime312.jsx)(
7416
+ return /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
7375
7417
  DayCell2,
7376
7418
  {
7377
7419
  day,
@@ -7396,7 +7438,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
7396
7438
  var SingleDatePicker_default = SingleDatePicker;
7397
7439
 
7398
7440
  // src/components/DatePicker/InputDatePicker/index.tsx
7399
- var import_jsx_runtime313 = require("react/jsx-runtime");
7441
+ var import_jsx_runtime314 = require("react/jsx-runtime");
7400
7442
  var formatDate = (date) => {
7401
7443
  if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
7402
7444
  const y = date.getFullYear();
@@ -7406,8 +7448,8 @@ var formatDate = (date) => {
7406
7448
  };
7407
7449
  var InputDatePicker = (props) => {
7408
7450
  const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
7409
- const [isOpen, setIsOpen] = import_react11.default.useState(false);
7410
- const [tempDate, setTempDate] = import_react11.default.useState(value ?? /* @__PURE__ */ new Date());
7451
+ const [isOpen, setIsOpen] = import_react12.default.useState(false);
7452
+ const [tempDate, setTempDate] = import_react12.default.useState(value ?? /* @__PURE__ */ new Date());
7411
7453
  const handleOpen = () => {
7412
7454
  if (disabled) return;
7413
7455
  setTempDate(value ?? /* @__PURE__ */ new Date());
@@ -7423,19 +7465,19 @@ var InputDatePicker = (props) => {
7423
7465
  const handleClose = () => {
7424
7466
  setIsOpen(false);
7425
7467
  };
7426
- return /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
7427
- /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
7468
+ return /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
7469
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
7428
7470
  Input_default,
7429
7471
  {
7430
7472
  value: formatDate(value),
7431
7473
  placeholder,
7432
- suffix: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(CalenderIcon_default, {}),
7474
+ suffix: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(CalenderIcon_default, {}),
7433
7475
  disabled,
7434
7476
  readOnly: true
7435
7477
  }
7436
7478
  ) }),
7437
- /* @__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: [
7438
- /* @__PURE__ */ (0, import_jsx_runtime313.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
7479
+ /* @__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: [
7480
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
7439
7481
  SingleDatePicker_default,
7440
7482
  {
7441
7483
  value: tempDate,
@@ -7445,9 +7487,9 @@ var InputDatePicker = (props) => {
7445
7487
  locale
7446
7488
  }
7447
7489
  ) }),
7448
- /* @__PURE__ */ (0, import_jsx_runtime313.jsxs)("div", { className: "popup-datepicker-footer", children: [
7449
- /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
7450
- /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
7490
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "popup-datepicker-footer", children: [
7491
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
7492
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
7451
7493
  ] })
7452
7494
  ] }) })
7453
7495
  ] });
@@ -7456,20 +7498,20 @@ InputDatePicker.displayName = "InputDatePicker";
7456
7498
  var InputDatePicker_default = InputDatePicker;
7457
7499
 
7458
7500
  // src/components/DatePicker/PopupPicker/index.tsx
7459
- var import_react15 = __toESM(require("react"), 1);
7501
+ var import_react16 = __toESM(require("react"), 1);
7460
7502
 
7461
7503
  // src/components/DatePicker/RangePicker/index.tsx
7462
- var import_react14 = __toESM(require("react"), 1);
7504
+ var import_react15 = __toESM(require("react"), 1);
7463
7505
 
7464
7506
  // src/components/Tab/Tab.tsx
7465
- var import_react13 = __toESM(require("react"), 1);
7507
+ var import_react14 = __toESM(require("react"), 1);
7466
7508
 
7467
7509
  // src/components/Tab/TabItem.tsx
7468
- var import_react12 = __toESM(require("react"), 1);
7469
- var import_jsx_runtime314 = require("react/jsx-runtime");
7470
- var TabItem = import_react12.default.forwardRef((props, ref) => {
7510
+ var import_react13 = __toESM(require("react"), 1);
7511
+ var import_jsx_runtime315 = require("react/jsx-runtime");
7512
+ var TabItem = import_react13.default.forwardRef((props, ref) => {
7471
7513
  const { isActive, title, onClick } = props;
7472
- return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
7514
+ return /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
7473
7515
  "div",
7474
7516
  {
7475
7517
  ref,
@@ -7483,25 +7525,25 @@ TabItem.displayName = "TabItem";
7483
7525
  var TabItem_default = TabItem;
7484
7526
 
7485
7527
  // src/components/Tab/Tab.tsx
7486
- var import_jsx_runtime315 = require("react/jsx-runtime");
7528
+ var import_jsx_runtime316 = require("react/jsx-runtime");
7487
7529
  var Tab = (props) => {
7488
7530
  const { activeIndex, onChange, tabs, type, size = "md" } = props;
7489
- const [underlineStyle, setUnderlineStyle] = import_react13.default.useState({
7531
+ const [underlineStyle, setUnderlineStyle] = import_react14.default.useState({
7490
7532
  left: 0,
7491
7533
  width: 0
7492
7534
  });
7493
- const itemRefs = import_react13.default.useRef([]);
7535
+ const itemRefs = import_react14.default.useRef([]);
7494
7536
  const handleChangeActiveTab = (tabItem, tabIdx) => {
7495
7537
  onChange(tabItem, tabIdx);
7496
7538
  };
7497
- import_react13.default.useEffect(() => {
7539
+ import_react14.default.useEffect(() => {
7498
7540
  const el = itemRefs.current[activeIndex];
7499
7541
  if (el) {
7500
7542
  setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
7501
7543
  }
7502
7544
  }, [activeIndex, tabs.length]);
7503
- return /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
7504
- tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
7545
+ return /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
7546
+ tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
7505
7547
  TabItem_default,
7506
7548
  {
7507
7549
  onClick: () => handleChangeActiveTab(tab, idx),
@@ -7513,7 +7555,7 @@ var Tab = (props) => {
7513
7555
  },
7514
7556
  `${tab.value}_${idx}`
7515
7557
  )),
7516
- type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
7558
+ type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
7517
7559
  "div",
7518
7560
  {
7519
7561
  className: "tab-toggle-underline",
@@ -7529,7 +7571,7 @@ Tab.displayName = "Tab";
7529
7571
  var Tab_default = Tab;
7530
7572
 
7531
7573
  // src/components/DatePicker/RangePicker/index.tsx
7532
- var import_jsx_runtime316 = require("react/jsx-runtime");
7574
+ var import_jsx_runtime317 = require("react/jsx-runtime");
7533
7575
  var RangePicker = (props) => {
7534
7576
  const {
7535
7577
  startDate,
@@ -7539,7 +7581,7 @@ var RangePicker = (props) => {
7539
7581
  maxDate,
7540
7582
  locale = "ko"
7541
7583
  } = props;
7542
- const [activeTab, setActiveTab] = import_react14.default.useState("start");
7584
+ const [activeTab, setActiveTab] = import_react15.default.useState("start");
7543
7585
  const handleStartChange = (date) => {
7544
7586
  if (!date) return;
7545
7587
  const newStart = date > endDate ? endDate : date;
@@ -7552,8 +7594,8 @@ var RangePicker = (props) => {
7552
7594
  };
7553
7595
  const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
7554
7596
  const endMinDate = minDate && startDate > minDate ? startDate : startDate;
7555
- return /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
7556
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
7597
+ return /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
7598
+ /* @__PURE__ */ (0, import_jsx_runtime317.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
7557
7599
  Tab_default,
7558
7600
  {
7559
7601
  activeIndex: activeTab === "start" ? 0 : 1,
@@ -7566,8 +7608,8 @@ var RangePicker = (props) => {
7566
7608
  size: "sm"
7567
7609
  }
7568
7610
  ) }),
7569
- /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: "datepicker-range-panels", children: [
7570
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
7611
+ /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "datepicker-range-panels", children: [
7612
+ /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
7571
7613
  SingleDatePicker_default,
7572
7614
  {
7573
7615
  value: startDate,
@@ -7579,7 +7621,7 @@ var RangePicker = (props) => {
7579
7621
  locale
7580
7622
  }
7581
7623
  ),
7582
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
7624
+ /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
7583
7625
  SingleDatePicker_default,
7584
7626
  {
7585
7627
  value: endDate,
@@ -7592,7 +7634,7 @@ var RangePicker = (props) => {
7592
7634
  }
7593
7635
  )
7594
7636
  ] }),
7595
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
7637
+ /* @__PURE__ */ (0, import_jsx_runtime317.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
7596
7638
  SingleDatePicker_default,
7597
7639
  {
7598
7640
  value: startDate,
@@ -7603,7 +7645,7 @@ var RangePicker = (props) => {
7603
7645
  rangeEnd: endDate,
7604
7646
  locale
7605
7647
  }
7606
- ) : /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
7648
+ ) : /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
7607
7649
  SingleDatePicker_default,
7608
7650
  {
7609
7651
  value: endDate,
@@ -7621,10 +7663,10 @@ RangePicker.displayName = "RangePicker";
7621
7663
  var RangePicker_default = RangePicker;
7622
7664
 
7623
7665
  // src/components/DatePicker/PopupPicker/index.tsx
7624
- var import_jsx_runtime317 = require("react/jsx-runtime");
7666
+ var import_jsx_runtime318 = require("react/jsx-runtime");
7625
7667
  var PopupPicker = (props) => {
7626
7668
  const { component, type, locale } = props;
7627
- const [isOpen, setIsOpen] = import_react15.default.useState(false);
7669
+ const [isOpen, setIsOpen] = import_react16.default.useState(false);
7628
7670
  const handleClick = () => setIsOpen(true);
7629
7671
  const handleClose = () => setIsOpen(false);
7630
7672
  const handleSingleChange = (date) => {
@@ -7632,11 +7674,11 @@ var PopupPicker = (props) => {
7632
7674
  props.onChange?.(date);
7633
7675
  handleClose();
7634
7676
  };
7635
- return /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
7636
- import_react15.default.cloneElement(component, { onClick: handleClick }),
7637
- /* @__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: [
7638
- /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "popup-datepicker-content", children: [
7639
- type === "single" && /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
7677
+ return /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
7678
+ import_react16.default.cloneElement(component, { onClick: handleClick }),
7679
+ /* @__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: [
7680
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "popup-datepicker-content", children: [
7681
+ type === "single" && /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
7640
7682
  SingleDatePicker_default,
7641
7683
  {
7642
7684
  value: props.value,
@@ -7646,7 +7688,7 @@ var PopupPicker = (props) => {
7646
7688
  locale
7647
7689
  }
7648
7690
  ),
7649
- type === "range" && /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
7691
+ type === "range" && /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
7650
7692
  RangePicker_default,
7651
7693
  {
7652
7694
  startDate: props.startDate,
@@ -7658,8 +7700,8 @@ var PopupPicker = (props) => {
7658
7700
  }
7659
7701
  )
7660
7702
  ] }),
7661
- /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: "popup-datepicker-footer", children: [
7662
- /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
7703
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "popup-datepicker-footer", children: [
7704
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
7663
7705
  Button_default,
7664
7706
  {
7665
7707
  type: "secondary",
@@ -7667,7 +7709,7 @@ var PopupPicker = (props) => {
7667
7709
  children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
7668
7710
  }
7669
7711
  ),
7670
- /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
7712
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
7671
7713
  ] })
7672
7714
  ] }) })
7673
7715
  ] });
@@ -7676,10 +7718,10 @@ PopupPicker.displayName = "PopupPicker";
7676
7718
  var PopupPicker_default = PopupPicker;
7677
7719
 
7678
7720
  // src/components/Divider/Divider.tsx
7679
- var import_jsx_runtime318 = require("react/jsx-runtime");
7721
+ var import_jsx_runtime319 = require("react/jsx-runtime");
7680
7722
  var Divider = (props) => {
7681
7723
  const { orientation = "horizontal" } = props;
7682
- return /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
7724
+ return /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
7683
7725
  "div",
7684
7726
  {
7685
7727
  className: clsx_default("lib-xplat-divider", orientation),
@@ -7692,15 +7734,15 @@ Divider.displayName = "Divider";
7692
7734
  var Divider_default = Divider;
7693
7735
 
7694
7736
  // src/components/Drawer/Drawer.tsx
7695
- var import_react16 = __toESM(require("react"), 1);
7696
- var import_react_dom2 = require("react-dom");
7697
- var import_jsx_runtime319 = require("react/jsx-runtime");
7737
+ var import_react17 = __toESM(require("react"), 1);
7738
+ var import_react_dom3 = require("react-dom");
7739
+ var import_jsx_runtime320 = require("react/jsx-runtime");
7698
7740
  var ANIMATION_DURATION_MS2 = 250;
7699
7741
  var Drawer = (props) => {
7700
7742
  const { isOpen, onClose, placement = "right", width = 320, title, children } = props;
7701
- const [mounted, setMounted] = import_react16.default.useState(false);
7702
- const [visible, setVisible] = import_react16.default.useState(false);
7703
- import_react16.default.useEffect(() => {
7743
+ const [mounted, setMounted] = import_react17.default.useState(false);
7744
+ const [visible, setVisible] = import_react17.default.useState(false);
7745
+ import_react17.default.useEffect(() => {
7704
7746
  if (isOpen) {
7705
7747
  setMounted(true);
7706
7748
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -7714,13 +7756,13 @@ var Drawer = (props) => {
7714
7756
  if (!mounted) return null;
7715
7757
  const stateClass = visible ? "enter" : "exit";
7716
7758
  const widthValue = typeof width === "number" ? `${width}px` : width;
7717
- return (0, import_react_dom2.createPortal)(
7718
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
7759
+ return (0, import_react_dom3.createPortal)(
7760
+ /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
7719
7761
  "div",
7720
7762
  {
7721
7763
  className: clsx_default("lib-xplat-drawer-overlay", stateClass),
7722
7764
  onClick: onClose,
7723
- children: /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)(
7765
+ children: /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)(
7724
7766
  "div",
7725
7767
  {
7726
7768
  className: clsx_default("lib-xplat-drawer", placement, stateClass),
@@ -7729,11 +7771,11 @@ var Drawer = (props) => {
7729
7771
  "aria-modal": "true",
7730
7772
  onClick: (e) => e.stopPropagation(),
7731
7773
  children: [
7732
- title && /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "drawer-header", children: [
7733
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)("span", { className: "drawer-title", children: title }),
7734
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
7774
+ title && /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "drawer-header", children: [
7775
+ /* @__PURE__ */ (0, import_jsx_runtime320.jsx)("span", { className: "drawer-title", children: title }),
7776
+ /* @__PURE__ */ (0, import_jsx_runtime320.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
7735
7777
  ] }),
7736
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)("div", { className: "drawer-body", children })
7778
+ /* @__PURE__ */ (0, import_jsx_runtime320.jsx)("div", { className: "drawer-body", children })
7737
7779
  ]
7738
7780
  }
7739
7781
  )
@@ -7746,16 +7788,16 @@ Drawer.displayName = "Drawer";
7746
7788
  var Drawer_default = Drawer;
7747
7789
 
7748
7790
  // src/components/Dropdown/Dropdown.tsx
7749
- var import_react19 = __toESM(require("react"), 1);
7791
+ var import_react20 = __toESM(require("react"), 1);
7750
7792
 
7751
7793
  // src/tokens/hooks/useAutoPosition.ts
7752
- var import_react17 = __toESM(require("react"), 1);
7794
+ var import_react18 = __toESM(require("react"), 1);
7753
7795
  var useAutoPosition = (triggerRef, popRef, enabled = true) => {
7754
- const [position, setPosition] = import_react17.default.useState({
7796
+ const [position, setPosition] = import_react18.default.useState({
7755
7797
  position: {},
7756
7798
  direction: "bottom"
7757
7799
  });
7758
- const calculatePosition = import_react17.default.useCallback(() => {
7800
+ const calculatePosition = import_react18.default.useCallback(() => {
7759
7801
  if (!triggerRef.current || !popRef.current) return;
7760
7802
  const triggerRect = triggerRef.current.getBoundingClientRect();
7761
7803
  const popRect = popRef.current.getBoundingClientRect();
@@ -7779,12 +7821,15 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
7779
7821
  direction
7780
7822
  });
7781
7823
  }, [triggerRef, popRef]);
7782
- import_react17.default.useEffect(() => {
7824
+ import_react18.default.useEffect(() => {
7783
7825
  if (!enabled) return;
7784
- calculatePosition();
7826
+ const raf = requestAnimationFrame(() => {
7827
+ calculatePosition();
7828
+ });
7785
7829
  window.addEventListener("resize", calculatePosition);
7786
7830
  window.addEventListener("scroll", calculatePosition, true);
7787
7831
  return () => {
7832
+ cancelAnimationFrame(raf);
7788
7833
  window.removeEventListener("resize", calculatePosition);
7789
7834
  window.removeEventListener("scroll", calculatePosition, true);
7790
7835
  };
@@ -7794,9 +7839,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
7794
7839
  var useAutoPosition_default = useAutoPosition;
7795
7840
 
7796
7841
  // src/tokens/hooks/useClickOutside.ts
7797
- var import_react18 = __toESM(require("react"), 1);
7842
+ var import_react19 = __toESM(require("react"), 1);
7798
7843
  var useClickOutside = (refs, handler, enabled = true) => {
7799
- import_react18.default.useEffect(() => {
7844
+ import_react19.default.useEffect(() => {
7800
7845
  if (!enabled) return;
7801
7846
  const refArray = Array.isArray(refs) ? refs : [refs];
7802
7847
  const listener = (event) => {
@@ -7819,17 +7864,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
7819
7864
  var useClickOutside_default = useClickOutside;
7820
7865
 
7821
7866
  // src/components/Dropdown/Dropdown.tsx
7822
- var import_jsx_runtime320 = require("react/jsx-runtime");
7867
+ var import_jsx_runtime321 = require("react/jsx-runtime");
7823
7868
  var Dropdown = (props) => {
7824
7869
  const { items, children } = props;
7825
- const [isOpen, setIsOpen] = import_react19.default.useState(false);
7826
- const [mounted, setMounted] = import_react19.default.useState(false);
7827
- const [visible, setVisible] = import_react19.default.useState(false);
7828
- const triggerRef = import_react19.default.useRef(null);
7829
- const menuRef = import_react19.default.useRef(null);
7830
- const { position, direction } = useAutoPosition_default(triggerRef, menuRef, isOpen);
7831
- useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false));
7832
- import_react19.default.useEffect(() => {
7870
+ const [isOpen, setIsOpen] = import_react20.default.useState(false);
7871
+ const [mounted, setMounted] = import_react20.default.useState(false);
7872
+ const [visible, setVisible] = import_react20.default.useState(false);
7873
+ const triggerRef = import_react20.default.useRef(null);
7874
+ const menuRef = import_react20.default.useRef(null);
7875
+ const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
7876
+ useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
7877
+ import_react20.default.useEffect(() => {
7833
7878
  if (isOpen) {
7834
7879
  setMounted(true);
7835
7880
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -7844,8 +7889,8 @@ var Dropdown = (props) => {
7844
7889
  item.onClick?.();
7845
7890
  setIsOpen(false);
7846
7891
  };
7847
- return /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "lib-xplat-dropdown", children: [
7848
- /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
7892
+ return /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "lib-xplat-dropdown", children: [
7893
+ /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
7849
7894
  "div",
7850
7895
  {
7851
7896
  ref: triggerRef,
@@ -7854,14 +7899,14 @@ var Dropdown = (props) => {
7854
7899
  children
7855
7900
  }
7856
7901
  ),
7857
- mounted && /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
7902
+ mounted && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
7858
7903
  "div",
7859
7904
  {
7860
7905
  ref: menuRef,
7861
- className: clsx_default("dropdown-menu", direction, { visible }),
7906
+ className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
7862
7907
  style: { top: position.top, left: position.left },
7863
7908
  role: "menu",
7864
- children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
7909
+ children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
7865
7910
  "button",
7866
7911
  {
7867
7912
  className: clsx_default("dropdown-item", {
@@ -7876,30 +7921,30 @@ var Dropdown = (props) => {
7876
7921
  item.key
7877
7922
  ))
7878
7923
  }
7879
- )
7924
+ ) })
7880
7925
  ] });
7881
7926
  };
7882
7927
  Dropdown.displayName = "Dropdown";
7883
7928
  var Dropdown_default = Dropdown;
7884
7929
 
7885
7930
  // src/components/EmptyState/EmptyState.tsx
7886
- var import_jsx_runtime321 = require("react/jsx-runtime");
7931
+ var import_jsx_runtime322 = require("react/jsx-runtime");
7887
7932
  var EmptyState = (props) => {
7888
7933
  const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
7889
- return /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "lib-xplat-empty-state", children: [
7890
- icon && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("div", { className: "empty-icon", children: icon }),
7891
- !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" }) }) }),
7892
- /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("p", { className: "empty-title", children: title }),
7893
- description && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("p", { className: "empty-description", children: description }),
7894
- action && /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("div", { className: "empty-action", children: action })
7934
+ return /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)("div", { className: "lib-xplat-empty-state", children: [
7935
+ icon && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "empty-icon", children: icon }),
7936
+ !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" }) }) }),
7937
+ /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "empty-title", children: title }),
7938
+ description && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "empty-description", children: description }),
7939
+ action && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "empty-action", children: action })
7895
7940
  ] });
7896
7941
  };
7897
7942
  EmptyState.displayName = "EmptyState";
7898
7943
  var EmptyState_default = EmptyState;
7899
7944
 
7900
7945
  // src/components/FileUpload/FileUpload.tsx
7901
- var import_react20 = __toESM(require("react"), 1);
7902
- var import_jsx_runtime322 = require("react/jsx-runtime");
7946
+ var import_react21 = __toESM(require("react"), 1);
7947
+ var import_jsx_runtime323 = require("react/jsx-runtime");
7903
7948
  var FileUpload = (props) => {
7904
7949
  const {
7905
7950
  accept,
@@ -7909,8 +7954,8 @@ var FileUpload = (props) => {
7909
7954
  label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
7910
7955
  description
7911
7956
  } = props;
7912
- const [isDragOver, setIsDragOver] = import_react20.default.useState(false);
7913
- const inputRef = import_react20.default.useRef(null);
7957
+ const [isDragOver, setIsDragOver] = import_react21.default.useState(false);
7958
+ const inputRef = import_react21.default.useRef(null);
7914
7959
  const handleFiles = (fileList) => {
7915
7960
  let files = Array.from(fileList);
7916
7961
  if (maxSize) {
@@ -7940,7 +7985,7 @@ var FileUpload = (props) => {
7940
7985
  handleFiles(e.target.files);
7941
7986
  }
7942
7987
  };
7943
- return /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)(
7988
+ return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)(
7944
7989
  "div",
7945
7990
  {
7946
7991
  className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
@@ -7949,7 +7994,7 @@ var FileUpload = (props) => {
7949
7994
  onDragLeave: handleDragLeave,
7950
7995
  onClick: () => inputRef.current?.click(),
7951
7996
  children: [
7952
- /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
7997
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
7953
7998
  "input",
7954
7999
  {
7955
8000
  ref: inputRef,
@@ -7959,9 +8004,9 @@ var FileUpload = (props) => {
7959
8004
  onChange: handleChange
7960
8005
  }
7961
8006
  ),
7962
- /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(UploadIcon_default, {}) }),
7963
- /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "upload-label", children: label }),
7964
- description && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("p", { className: "upload-description", children: description })
8007
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(UploadIcon_default, {}) }),
8008
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("p", { className: "upload-label", children: label }),
8009
+ description && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("p", { className: "upload-description", children: description })
7965
8010
  ]
7966
8011
  }
7967
8012
  );
@@ -7970,10 +8015,10 @@ FileUpload.displayName = "FileUpload";
7970
8015
  var FileUpload_default = FileUpload;
7971
8016
 
7972
8017
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
7973
- var import_react22 = __toESM(require("react"), 1);
8018
+ var import_react23 = __toESM(require("react"), 1);
7974
8019
 
7975
8020
  // src/components/HtmlTypeWriter/utils.ts
7976
- var import_react21 = __toESM(require("react"), 1);
8021
+ var import_react22 = __toESM(require("react"), 1);
7977
8022
  var voidTags = /* @__PURE__ */ new Set([
7978
8023
  "br",
7979
8024
  "img",
@@ -8041,41 +8086,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
8041
8086
  props[attr.name] = attr.value;
8042
8087
  });
8043
8088
  if (voidTags.has(tag)) {
8044
- return import_react21.default.createElement(tag, props);
8089
+ return import_react22.default.createElement(tag, props);
8045
8090
  }
8046
8091
  const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
8047
- return import_react21.default.createElement(tag, props, ...children);
8092
+ return import_react22.default.createElement(tag, props, ...children);
8048
8093
  };
8049
8094
  var htmlToReactProgressive = (root, typedLen, rangeMap) => {
8050
8095
  const nodes = Array.from(root.childNodes).map((child, idx) => {
8051
8096
  const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
8052
- return node == null ? null : import_react21.default.createElement(import_react21.default.Fragment, { key: idx }, node);
8097
+ return node == null ? null : import_react22.default.createElement(import_react22.default.Fragment, { key: idx }, node);
8053
8098
  }).filter(Boolean);
8054
8099
  return nodes.length === 0 ? null : nodes;
8055
8100
  };
8056
8101
 
8057
8102
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
8058
- var import_jsx_runtime323 = require("react/jsx-runtime");
8103
+ var import_jsx_runtime324 = require("react/jsx-runtime");
8059
8104
  var HtmlTypeWriter = ({
8060
8105
  html,
8061
8106
  duration = 20,
8062
8107
  onDone,
8063
8108
  onChange
8064
8109
  }) => {
8065
- const [typedLen, setTypedLen] = import_react22.default.useState(0);
8066
- const doneCalledRef = import_react22.default.useRef(false);
8067
- const { doc, rangeMap, totalLength } = import_react22.default.useMemo(() => {
8110
+ const [typedLen, setTypedLen] = import_react23.default.useState(0);
8111
+ const doneCalledRef = import_react23.default.useRef(false);
8112
+ const { doc, rangeMap, totalLength } = import_react23.default.useMemo(() => {
8068
8113
  if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
8069
8114
  const decoded = decodeHtmlEntities(html);
8070
8115
  const doc2 = new DOMParser().parseFromString(decoded, "text/html");
8071
8116
  const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
8072
8117
  return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
8073
8118
  }, [html]);
8074
- import_react22.default.useEffect(() => {
8119
+ import_react23.default.useEffect(() => {
8075
8120
  setTypedLen(0);
8076
8121
  doneCalledRef.current = false;
8077
8122
  }, [html]);
8078
- import_react22.default.useEffect(() => {
8123
+ import_react23.default.useEffect(() => {
8079
8124
  if (!totalLength) return;
8080
8125
  if (typedLen >= totalLength) return;
8081
8126
  const timer = window.setInterval(() => {
@@ -8083,33 +8128,33 @@ var HtmlTypeWriter = ({
8083
8128
  }, duration);
8084
8129
  return () => window.clearInterval(timer);
8085
8130
  }, [typedLen, totalLength, duration]);
8086
- import_react22.default.useEffect(() => {
8131
+ import_react23.default.useEffect(() => {
8087
8132
  if (typedLen > 0 && typedLen < totalLength) {
8088
8133
  onChange?.();
8089
8134
  }
8090
8135
  }, [typedLen, totalLength, onChange]);
8091
- import_react22.default.useEffect(() => {
8136
+ import_react23.default.useEffect(() => {
8092
8137
  if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
8093
8138
  doneCalledRef.current = true;
8094
8139
  onDone?.();
8095
8140
  }
8096
8141
  }, [typedLen, totalLength, onDone]);
8097
- const parsed = import_react22.default.useMemo(
8142
+ const parsed = import_react23.default.useMemo(
8098
8143
  () => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
8099
8144
  [doc, typedLen, rangeMap]
8100
8145
  );
8101
- return /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
8146
+ return /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
8102
8147
  };
8103
8148
  HtmlTypeWriter.displayName = "HtmlTypeWriter";
8104
8149
  var HtmlTypeWriter_default = HtmlTypeWriter;
8105
8150
 
8106
8151
  // src/components/ImageSelector/ImageSelector.tsx
8107
- var import_react23 = __toESM(require("react"), 1);
8108
- var import_jsx_runtime324 = require("react/jsx-runtime");
8152
+ var import_react24 = __toESM(require("react"), 1);
8153
+ var import_jsx_runtime325 = require("react/jsx-runtime");
8109
8154
  var ImageSelector = (props) => {
8110
8155
  const { value, label, onChange } = props;
8111
- const [previewUrl, setPreviewUrl] = import_react23.default.useState();
8112
- import_react23.default.useEffect(() => {
8156
+ const [previewUrl, setPreviewUrl] = import_react24.default.useState();
8157
+ import_react24.default.useEffect(() => {
8113
8158
  if (!value) {
8114
8159
  setPreviewUrl(void 0);
8115
8160
  return;
@@ -8118,7 +8163,7 @@ var ImageSelector = (props) => {
8118
8163
  setPreviewUrl(url);
8119
8164
  return () => URL.revokeObjectURL(url);
8120
8165
  }, [value]);
8121
- const inputRef = import_react23.default.useRef(null);
8166
+ const inputRef = import_react24.default.useRef(null);
8122
8167
  const handleFileChange = (e) => {
8123
8168
  const selectedFile = e.target.files?.[0];
8124
8169
  if (selectedFile) {
@@ -8131,8 +8176,8 @@ var ImageSelector = (props) => {
8131
8176
  const handleOpenFileDialog = () => {
8132
8177
  inputRef.current?.click();
8133
8178
  };
8134
- return /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
8135
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
8179
+ return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
8180
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
8136
8181
  "input",
8137
8182
  {
8138
8183
  type: "file",
@@ -8142,13 +8187,13 @@ var ImageSelector = (props) => {
8142
8187
  ref: inputRef
8143
8188
  }
8144
8189
  ),
8145
- value && /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)("div", { className: "action-bar", children: [
8146
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(UploadIcon_default, {}) }),
8147
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(DeleteIcon_default, {}) })
8190
+ value && /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: "action-bar", children: [
8191
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(UploadIcon_default, {}) }),
8192
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(DeleteIcon_default, {}) })
8148
8193
  ] }),
8149
- /* @__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: [
8150
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(ImageIcon_default, {}) }),
8151
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
8194
+ /* @__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: [
8195
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(ImageIcon_default, {}) }),
8196
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
8152
8197
  ] }) })
8153
8198
  ] });
8154
8199
  };
@@ -8156,7 +8201,7 @@ ImageSelector.displayName = "ImageSelector";
8156
8201
  var ImageSelector_default = ImageSelector;
8157
8202
 
8158
8203
  // src/components/Pagination/Pagination.tsx
8159
- var import_jsx_runtime325 = require("react/jsx-runtime");
8204
+ var import_jsx_runtime326 = require("react/jsx-runtime");
8160
8205
  var getPageRange = (current, totalPages, siblingCount) => {
8161
8206
  const totalNumbers = siblingCount * 2 + 5;
8162
8207
  if (totalPages <= totalNumbers) {
@@ -8199,19 +8244,19 @@ var Pagination = (props) => {
8199
8244
  onChange?.(page);
8200
8245
  }
8201
8246
  };
8202
- 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: [
8203
- /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
8247
+ 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: [
8248
+ /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
8204
8249
  "button",
8205
8250
  {
8206
8251
  className: "page-btn prev",
8207
8252
  disabled: current <= 1,
8208
8253
  onClick: () => handleClick(current - 1),
8209
8254
  "aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
8210
- children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(ChevronLeftIcon_default, {})
8255
+ children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(ChevronLeftIcon_default, {})
8211
8256
  }
8212
8257
  ),
8213
8258
  pages.map(
8214
- (page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
8259
+ (page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
8215
8260
  "button",
8216
8261
  {
8217
8262
  className: clsx_default("page-btn", { active: page === current }),
@@ -8222,14 +8267,14 @@ var Pagination = (props) => {
8222
8267
  page
8223
8268
  )
8224
8269
  ),
8225
- /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
8270
+ /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
8226
8271
  "button",
8227
8272
  {
8228
8273
  className: "page-btn next",
8229
8274
  disabled: current >= totalPages,
8230
8275
  onClick: () => handleClick(current + 1),
8231
8276
  "aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
8232
- children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(ChevronRightIcon_default, {})
8277
+ children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(ChevronRightIcon_default, {})
8233
8278
  }
8234
8279
  )
8235
8280
  ] });
@@ -8238,17 +8283,17 @@ Pagination.displayName = "Pagination";
8238
8283
  var Pagination_default = Pagination;
8239
8284
 
8240
8285
  // src/components/PopOver/PopOver.tsx
8241
- var import_react24 = __toESM(require("react"), 1);
8242
- var import_jsx_runtime326 = require("react/jsx-runtime");
8286
+ var import_react25 = __toESM(require("react"), 1);
8287
+ var import_jsx_runtime327 = require("react/jsx-runtime");
8243
8288
  var PopOver = (props) => {
8244
8289
  const { children, isOpen, onClose, PopOverEl } = props;
8245
- const popRef = import_react24.default.useRef(null);
8246
- const triggerRef = import_react24.default.useRef(null);
8247
- const [localOpen, setLocalOpen] = import_react24.default.useState(false);
8248
- const [eventTrigger, setEventTrigger] = import_react24.default.useState(false);
8290
+ const popRef = import_react25.default.useRef(null);
8291
+ const triggerRef = import_react25.default.useRef(null);
8292
+ const [localOpen, setLocalOpen] = import_react25.default.useState(false);
8293
+ const [eventTrigger, setEventTrigger] = import_react25.default.useState(false);
8249
8294
  useClickOutside_default([popRef, triggerRef], onClose, isOpen);
8250
8295
  const position = useAutoPosition_default(triggerRef, popRef, localOpen);
8251
- import_react24.default.useEffect(() => {
8296
+ import_react25.default.useEffect(() => {
8252
8297
  if (isOpen) {
8253
8298
  setLocalOpen(isOpen);
8254
8299
  setTimeout(() => {
@@ -8261,7 +8306,7 @@ var PopOver = (props) => {
8261
8306
  }, 200);
8262
8307
  }
8263
8308
  }, [isOpen]);
8264
- return /* @__PURE__ */ (0, import_jsx_runtime326.jsxs)(
8309
+ return /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)(
8265
8310
  "div",
8266
8311
  {
8267
8312
  className: "lib-xplat-pop-over",
@@ -8271,11 +8316,11 @@ var PopOver = (props) => {
8271
8316
  },
8272
8317
  children: [
8273
8318
  children,
8274
- localOpen && /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
8319
+ localOpen && /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
8275
8320
  "div",
8276
8321
  {
8277
8322
  className: clsx_default(
8278
- "content-wrap",
8323
+ "lib-xplat-pop-over-content",
8279
8324
  position.direction,
8280
8325
  eventTrigger && "visible"
8281
8326
  ),
@@ -8285,7 +8330,7 @@ var PopOver = (props) => {
8285
8330
  },
8286
8331
  children: PopOverEl
8287
8332
  }
8288
- )
8333
+ ) })
8289
8334
  ]
8290
8335
  }
8291
8336
  );
@@ -8294,7 +8339,7 @@ PopOver.displayName = "PopOver";
8294
8339
  var PopOver_default = PopOver;
8295
8340
 
8296
8341
  // src/components/Progress/Progress.tsx
8297
- var import_jsx_runtime327 = require("react/jsx-runtime");
8342
+ var import_jsx_runtime328 = require("react/jsx-runtime");
8298
8343
  var Progress = (props) => {
8299
8344
  const {
8300
8345
  value,
@@ -8304,8 +8349,8 @@ var Progress = (props) => {
8304
8349
  showLabel = false
8305
8350
  } = props;
8306
8351
  const percentage = Math.min(100, Math.max(0, value / max * 100));
8307
- return /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
8308
- /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
8352
+ return /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
8353
+ /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
8309
8354
  "div",
8310
8355
  {
8311
8356
  className: "track",
@@ -8313,7 +8358,7 @@ var Progress = (props) => {
8313
8358
  "aria-valuenow": value,
8314
8359
  "aria-valuemin": 0,
8315
8360
  "aria-valuemax": max,
8316
- children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
8361
+ children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
8317
8362
  "div",
8318
8363
  {
8319
8364
  className: "bar",
@@ -8322,7 +8367,7 @@ var Progress = (props) => {
8322
8367
  )
8323
8368
  }
8324
8369
  ),
8325
- showLabel && /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("span", { className: "label", children: [
8370
+ showLabel && /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("span", { className: "label", children: [
8326
8371
  Math.round(percentage),
8327
8372
  "%"
8328
8373
  ] })
@@ -8332,17 +8377,17 @@ Progress.displayName = "Progress";
8332
8377
  var Progress_default = Progress;
8333
8378
 
8334
8379
  // src/components/Radio/RadioGroupContext.tsx
8335
- var import_react25 = __toESM(require("react"), 1);
8336
- var RadioGroupContext = import_react25.default.createContext(
8380
+ var import_react26 = __toESM(require("react"), 1);
8381
+ var RadioGroupContext = import_react26.default.createContext(
8337
8382
  null
8338
8383
  );
8339
8384
  var useRadioGroupContext = () => {
8340
- return import_react25.default.useContext(RadioGroupContext);
8385
+ return import_react26.default.useContext(RadioGroupContext);
8341
8386
  };
8342
8387
  var RadioGroupContext_default = RadioGroupContext;
8343
8388
 
8344
8389
  // src/components/Radio/Radio.tsx
8345
- var import_jsx_runtime328 = require("react/jsx-runtime");
8390
+ var import_jsx_runtime329 = require("react/jsx-runtime");
8346
8391
  var Radio = (props) => {
8347
8392
  const {
8348
8393
  label,
@@ -8360,7 +8405,7 @@ var Radio = (props) => {
8360
8405
  value,
8361
8406
  onChange: rest.onChange
8362
8407
  };
8363
- return /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)(
8408
+ return /* @__PURE__ */ (0, import_jsx_runtime329.jsxs)(
8364
8409
  "label",
8365
8410
  {
8366
8411
  className: clsx_default(
@@ -8370,18 +8415,18 @@ var Radio = (props) => {
8370
8415
  localChecked ? "checked" : void 0
8371
8416
  ),
8372
8417
  children: [
8373
- /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
8374
- /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
8418
+ /* @__PURE__ */ (0, import_jsx_runtime329.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
8419
+ /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
8375
8420
  "div",
8376
8421
  {
8377
8422
  className: clsx_default(
8378
8423
  "circle",
8379
8424
  localChecked ? "checked" : void 0
8380
8425
  ),
8381
- children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("div", { className: "inner-circle" })
8426
+ children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime329.jsx)("div", { className: "inner-circle" })
8382
8427
  }
8383
8428
  ),
8384
- label && /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("span", { children: label })
8429
+ label && /* @__PURE__ */ (0, import_jsx_runtime329.jsx)("span", { children: label })
8385
8430
  ]
8386
8431
  }
8387
8432
  );
@@ -8390,28 +8435,28 @@ Radio.displayName = "Radio";
8390
8435
  var Radio_default = Radio;
8391
8436
 
8392
8437
  // src/components/Radio/RadioGroup.tsx
8393
- var import_jsx_runtime329 = require("react/jsx-runtime");
8438
+ var import_jsx_runtime330 = require("react/jsx-runtime");
8394
8439
  var RadioGroup = (props) => {
8395
8440
  const { children, ...rest } = props;
8396
- return /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(import_jsx_runtime329.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
8441
+ return /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(import_jsx_runtime330.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
8397
8442
  };
8398
8443
  RadioGroup.displayName = "RadioGroup";
8399
8444
  var RadioGroup_default = RadioGroup;
8400
8445
 
8401
8446
  // src/components/Select/Select.tsx
8402
- var import_react28 = __toESM(require("react"), 1);
8447
+ var import_react29 = __toESM(require("react"), 1);
8403
8448
 
8404
8449
  // src/components/Select/context.ts
8405
- var import_react26 = __toESM(require("react"), 1);
8406
- var SelectContext = import_react26.default.createContext(null);
8450
+ var import_react27 = __toESM(require("react"), 1);
8451
+ var SelectContext = import_react27.default.createContext(null);
8407
8452
  var context_default = SelectContext;
8408
8453
 
8409
8454
  // src/components/Select/SelectItem.tsx
8410
- var import_react27 = __toESM(require("react"), 1);
8411
- var import_jsx_runtime330 = require("react/jsx-runtime");
8455
+ var import_react28 = __toESM(require("react"), 1);
8456
+ var import_jsx_runtime331 = require("react/jsx-runtime");
8412
8457
  var SelectItem = (props) => {
8413
8458
  const { children, value, onClick, disabled = false } = props;
8414
- const ctx = import_react27.default.useContext(context_default);
8459
+ const ctx = import_react28.default.useContext(context_default);
8415
8460
  const handleClick = (e) => {
8416
8461
  e.preventDefault();
8417
8462
  e.stopPropagation();
@@ -8420,7 +8465,7 @@ var SelectItem = (props) => {
8420
8465
  ctx?.close();
8421
8466
  onClick?.();
8422
8467
  };
8423
- return /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(
8468
+ return /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
8424
8469
  "div",
8425
8470
  {
8426
8471
  className: clsx_default("select-item", disabled && "disabled"),
@@ -8441,7 +8486,7 @@ SelectItem.displayName = "Select.Item";
8441
8486
  var SelectItem_default = SelectItem;
8442
8487
 
8443
8488
  // src/components/Select/Select.tsx
8444
- var import_jsx_runtime331 = require("react/jsx-runtime");
8489
+ var import_jsx_runtime332 = require("react/jsx-runtime");
8445
8490
  var ANIMATION_DURATION_MS3 = 200;
8446
8491
  var SelectRoot = (props) => {
8447
8492
  const {
@@ -8453,26 +8498,26 @@ var SelectRoot = (props) => {
8453
8498
  error = false,
8454
8499
  size = "md"
8455
8500
  } = props;
8456
- const itemChildren = import_react28.default.Children.toArray(children).filter(
8457
- (child) => import_react28.default.isValidElement(child) && child.type === SelectItem_default
8501
+ const itemChildren = import_react29.default.Children.toArray(children).filter(
8502
+ (child) => import_react29.default.isValidElement(child) && child.type === SelectItem_default
8458
8503
  );
8459
8504
  const isControlled = valueProp !== void 0;
8460
- const [isOpen, setOpen] = import_react28.default.useState(false);
8461
- const [uncontrolledLabel, setUncontrolledLabel] = import_react28.default.useState(null);
8462
- const controlledLabel = import_react28.default.useMemo(() => {
8505
+ const [isOpen, setOpen] = import_react29.default.useState(false);
8506
+ const [uncontrolledLabel, setUncontrolledLabel] = import_react29.default.useState(null);
8507
+ const controlledLabel = import_react29.default.useMemo(() => {
8463
8508
  if (!isControlled) return null;
8464
8509
  const match = itemChildren.find((child) => child.props.value === valueProp);
8465
8510
  return match ? match.props.children : null;
8466
8511
  }, [isControlled, valueProp, itemChildren]);
8467
8512
  const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
8468
- const triggerRef = import_react28.default.useRef(null);
8469
- const contentRef = import_react28.default.useRef(null);
8470
- const [mounted, setMounted] = import_react28.default.useState(false);
8471
- const [visible, setVisible] = import_react28.default.useState(false);
8472
- import_react28.default.useEffect(() => {
8513
+ const triggerRef = import_react29.default.useRef(null);
8514
+ const contentRef = import_react29.default.useRef(null);
8515
+ const [mounted, setMounted] = import_react29.default.useState(false);
8516
+ const [visible, setVisible] = import_react29.default.useState(false);
8517
+ import_react29.default.useEffect(() => {
8473
8518
  if (disabled && isOpen) setOpen(false);
8474
8519
  }, [disabled, isOpen]);
8475
- import_react28.default.useEffect(() => {
8520
+ import_react29.default.useEffect(() => {
8476
8521
  if (isOpen) {
8477
8522
  setMounted(true);
8478
8523
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -8482,12 +8527,12 @@ var SelectRoot = (props) => {
8482
8527
  const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
8483
8528
  return () => clearTimeout(t);
8484
8529
  }, [isOpen]);
8485
- const open = import_react28.default.useCallback(() => setOpen(true), []);
8486
- const close = import_react28.default.useCallback(() => setOpen(false), []);
8487
- const toggle = import_react28.default.useCallback(() => setOpen((prev) => !prev), []);
8530
+ const open = import_react29.default.useCallback(() => setOpen(true), []);
8531
+ const close = import_react29.default.useCallback(() => setOpen(false), []);
8532
+ const toggle = import_react29.default.useCallback(() => setOpen((prev) => !prev), []);
8488
8533
  useClickOutside_default([contentRef, triggerRef], close, isOpen);
8489
8534
  const position = useAutoPosition_default(triggerRef, contentRef, mounted);
8490
- const setSelected = import_react28.default.useCallback(
8535
+ const setSelected = import_react29.default.useCallback(
8491
8536
  (label, itemValue) => {
8492
8537
  if (!isControlled) {
8493
8538
  setUncontrolledLabel(label);
@@ -8496,7 +8541,7 @@ var SelectRoot = (props) => {
8496
8541
  },
8497
8542
  [isControlled, onChange]
8498
8543
  );
8499
- const ctxValue = import_react28.default.useMemo(
8544
+ const ctxValue = import_react29.default.useMemo(
8500
8545
  () => ({
8501
8546
  isOpen,
8502
8547
  mounted,
@@ -8517,7 +8562,7 @@ var SelectRoot = (props) => {
8517
8562
  if (disabled) return;
8518
8563
  toggle();
8519
8564
  };
8520
- return /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime331.jsxs)(
8565
+ return /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime332.jsxs)(
8521
8566
  "div",
8522
8567
  {
8523
8568
  className: clsx_default(
@@ -8528,7 +8573,7 @@ var SelectRoot = (props) => {
8528
8573
  mounted && "is-open"
8529
8574
  ),
8530
8575
  children: [
8531
- /* @__PURE__ */ (0, import_jsx_runtime331.jsxs)(
8576
+ /* @__PURE__ */ (0, import_jsx_runtime332.jsxs)(
8532
8577
  "div",
8533
8578
  {
8534
8579
  ref: triggerRef,
@@ -8552,7 +8597,7 @@ var SelectRoot = (props) => {
8552
8597
  }
8553
8598
  },
8554
8599
  children: [
8555
- /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
8600
+ /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
8556
8601
  "span",
8557
8602
  {
8558
8603
  className: clsx_default(
@@ -8562,27 +8607,27 @@ var SelectRoot = (props) => {
8562
8607
  children: selectedLabel ?? placeholder
8563
8608
  }
8564
8609
  ),
8565
- /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
8610
+ /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
8566
8611
  "span",
8567
8612
  {
8568
8613
  className: clsx_default("select-trigger-icon", isOpen && "open"),
8569
8614
  "aria-hidden": true,
8570
- children: /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(ChevronDownIcon_default, {})
8615
+ children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(ChevronDownIcon_default, {})
8571
8616
  }
8572
8617
  )
8573
8618
  ]
8574
8619
  }
8575
8620
  ),
8576
- mounted && /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
8621
+ mounted && /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
8577
8622
  "div",
8578
8623
  {
8579
- className: clsx_default("select-content", position.direction, stateClass),
8624
+ className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
8580
8625
  ref: contentRef,
8581
8626
  style: { ...position.position, minWidth: position.position.width },
8582
8627
  role: "listbox",
8583
- children: itemChildren
8628
+ children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(context_default.Provider, { value: ctxValue, children: itemChildren })
8584
8629
  }
8585
- )
8630
+ ) })
8586
8631
  ]
8587
8632
  }
8588
8633
  ) });
@@ -8594,14 +8639,14 @@ var Select = Object.assign(SelectRoot, {
8594
8639
  var Select_default = Select;
8595
8640
 
8596
8641
  // src/components/Skeleton/Skeleton.tsx
8597
- var import_jsx_runtime332 = require("react/jsx-runtime");
8642
+ var import_jsx_runtime333 = require("react/jsx-runtime");
8598
8643
  var Skeleton = (props) => {
8599
8644
  const { variant = "text", width, height } = props;
8600
8645
  const style = {
8601
8646
  width: typeof width === "number" ? `${width}px` : width,
8602
8647
  height: typeof height === "number" ? `${height}px` : height
8603
8648
  };
8604
- return /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
8649
+ return /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
8605
8650
  "div",
8606
8651
  {
8607
8652
  className: clsx_default("lib-xplat-skeleton", variant),
@@ -8614,20 +8659,20 @@ Skeleton.displayName = "Skeleton";
8614
8659
  var Skeleton_default = Skeleton;
8615
8660
 
8616
8661
  // src/components/Spinner/Spinner.tsx
8617
- var import_jsx_runtime333 = require("react/jsx-runtime");
8662
+ var import_jsx_runtime334 = require("react/jsx-runtime");
8618
8663
  var Spinner = (props) => {
8619
8664
  const {
8620
8665
  size = "md",
8621
8666
  type = "brand"
8622
8667
  } = props;
8623
- return /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
8668
+ return /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
8624
8669
  "div",
8625
8670
  {
8626
8671
  className: clsx_default("lib-xplat-spinner", size, type),
8627
8672
  role: "status",
8628
8673
  "aria-label": "\uB85C\uB529 \uC911",
8629
- children: /* @__PURE__ */ (0, import_jsx_runtime333.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
8630
- /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
8674
+ children: /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
8675
+ /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
8631
8676
  "circle",
8632
8677
  {
8633
8678
  className: "track",
@@ -8637,7 +8682,7 @@ var Spinner = (props) => {
8637
8682
  strokeWidth: "3"
8638
8683
  }
8639
8684
  ),
8640
- /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
8685
+ /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
8641
8686
  "circle",
8642
8687
  {
8643
8688
  className: "indicator",
@@ -8656,20 +8701,20 @@ Spinner.displayName = "Spinner";
8656
8701
  var Spinner_default = Spinner;
8657
8702
 
8658
8703
  // src/components/Steps/Steps.tsx
8659
- var import_jsx_runtime334 = require("react/jsx-runtime");
8704
+ var import_jsx_runtime335 = require("react/jsx-runtime");
8660
8705
  var Steps = (props) => {
8661
8706
  const {
8662
8707
  items,
8663
8708
  current,
8664
8709
  type = "brand"
8665
8710
  } = props;
8666
- return /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
8711
+ return /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
8667
8712
  const status = index < current ? "completed" : index === current ? "active" : "pending";
8668
- return /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)("div", { className: clsx_default("step-item", status), children: [
8669
- /* @__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 }) }),
8670
- /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)("div", { className: "step-content", children: [
8671
- /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("span", { className: "step-title", children: item.title }),
8672
- item.description && /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("span", { className: "step-description", children: item.description })
8713
+ return /* @__PURE__ */ (0, import_jsx_runtime335.jsxs)("div", { className: clsx_default("step-item", status), children: [
8714
+ /* @__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 }) }),
8715
+ /* @__PURE__ */ (0, import_jsx_runtime335.jsxs)("div", { className: "step-content", children: [
8716
+ /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("span", { className: "step-title", children: item.title }),
8717
+ item.description && /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("span", { className: "step-description", children: item.description })
8673
8718
  ] })
8674
8719
  ] }, index);
8675
8720
  }) });
@@ -8678,8 +8723,8 @@ Steps.displayName = "Steps";
8678
8723
  var Steps_default = Steps;
8679
8724
 
8680
8725
  // src/components/Swiper/Swiper.tsx
8681
- var import_react29 = __toESM(require("react"), 1);
8682
- var import_jsx_runtime335 = require("react/jsx-runtime");
8726
+ var import_react30 = __toESM(require("react"), 1);
8727
+ var import_jsx_runtime336 = require("react/jsx-runtime");
8683
8728
  var Swiper = (props) => {
8684
8729
  const {
8685
8730
  auto = false,
@@ -8702,23 +8747,23 @@ var Swiper = (props) => {
8702
8747
  const maxIndex = Math.max(0, totalSlides - viewItemCount);
8703
8748
  const useLoop = loop && canSlide;
8704
8749
  const cloneCount = useLoop ? totalSlides : 0;
8705
- const extendedItems = import_react29.default.useMemo(() => {
8750
+ const extendedItems = import_react30.default.useMemo(() => {
8706
8751
  if (!useLoop) return items;
8707
8752
  return [...items, ...items, ...items];
8708
8753
  }, [items, useLoop]);
8709
8754
  const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
8710
- const [innerIndex, setInnerIndex] = import_react29.default.useState(
8755
+ const [innerIndex, setInnerIndex] = import_react30.default.useState(
8711
8756
  useLoop ? cloneCount + initialIdx : initialIdx
8712
8757
  );
8713
- const [isDragging, setIsDragging] = import_react29.default.useState(false);
8714
- const [dragOffset, setDragOffset] = import_react29.default.useState(0);
8715
- const [animated, setAnimated] = import_react29.default.useState(true);
8716
- const [containerWidth, setContainerWidth] = import_react29.default.useState(0);
8717
- const containerRef = import_react29.default.useRef(null);
8718
- const startXRef = import_react29.default.useRef(0);
8719
- const startTimeRef = import_react29.default.useRef(0);
8720
- const autoplayTimerRef = import_react29.default.useRef(null);
8721
- import_react29.default.useEffect(() => {
8758
+ const [isDragging, setIsDragging] = import_react30.default.useState(false);
8759
+ const [dragOffset, setDragOffset] = import_react30.default.useState(0);
8760
+ const [animated, setAnimated] = import_react30.default.useState(true);
8761
+ const [containerWidth, setContainerWidth] = import_react30.default.useState(0);
8762
+ const containerRef = import_react30.default.useRef(null);
8763
+ const startXRef = import_react30.default.useRef(0);
8764
+ const startTimeRef = import_react30.default.useRef(0);
8765
+ const autoplayTimerRef = import_react30.default.useRef(null);
8766
+ import_react30.default.useEffect(() => {
8722
8767
  const el = containerRef.current;
8723
8768
  if (!el) return;
8724
8769
  const ro = new ResizeObserver((entries) => {
@@ -8737,7 +8782,7 @@ var Swiper = (props) => {
8737
8782
  return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
8738
8783
  };
8739
8784
  const realIndex = getRealIndex(innerIndex);
8740
- const moveToInner = import_react29.default.useCallback(
8785
+ const moveToInner = import_react30.default.useCallback(
8741
8786
  (idx, withAnim = true) => {
8742
8787
  if (!useLoop) {
8743
8788
  setAnimated(withAnim);
@@ -8765,7 +8810,7 @@ var Swiper = (props) => {
8765
8810
  },
8766
8811
  [useLoop, cloneCount, totalSlides]
8767
8812
  );
8768
- const handleTransitionEnd = import_react29.default.useCallback(() => {
8813
+ const handleTransitionEnd = import_react30.default.useCallback(() => {
8769
8814
  if (!useLoop) return;
8770
8815
  const real = getRealIndex(innerIndex);
8771
8816
  const canonical = cloneCount + real;
@@ -8775,7 +8820,7 @@ var Swiper = (props) => {
8775
8820
  }
8776
8821
  onChange?.(Math.min(real, maxIndex));
8777
8822
  }, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
8778
- const slideTo = import_react29.default.useCallback(
8823
+ const slideTo = import_react30.default.useCallback(
8779
8824
  (logicalIndex) => {
8780
8825
  if (!canSlide) return;
8781
8826
  const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
@@ -8785,7 +8830,7 @@ var Swiper = (props) => {
8785
8830
  },
8786
8831
  [canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
8787
8832
  );
8788
- const slideNext = import_react29.default.useCallback(() => {
8833
+ const slideNext = import_react30.default.useCallback(() => {
8789
8834
  if (!canSlide) return;
8790
8835
  const nextInner = innerIndex + slideBy;
8791
8836
  if (useLoop) {
@@ -8794,7 +8839,7 @@ var Swiper = (props) => {
8794
8839
  moveToInner(Math.min(nextInner, maxIndex), true);
8795
8840
  }
8796
8841
  }, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
8797
- const slidePrev = import_react29.default.useCallback(() => {
8842
+ const slidePrev = import_react30.default.useCallback(() => {
8798
8843
  if (!canSlide) return;
8799
8844
  const prevInner = innerIndex - slideBy;
8800
8845
  if (useLoop) {
@@ -8803,7 +8848,7 @@ var Swiper = (props) => {
8803
8848
  moveToInner(Math.max(prevInner, 0), true);
8804
8849
  }
8805
8850
  }, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
8806
- import_react29.default.useEffect(() => {
8851
+ import_react30.default.useEffect(() => {
8807
8852
  if (indexProp === void 0) return;
8808
8853
  const clamped = Math.max(0, Math.min(indexProp, maxIndex));
8809
8854
  const target = useLoop ? cloneCount + clamped : clamped;
@@ -8811,12 +8856,12 @@ var Swiper = (props) => {
8811
8856
  moveToInner(target, true);
8812
8857
  }
8813
8858
  }, [indexProp]);
8814
- import_react29.default.useImperativeHandle(swiperRef, () => ({
8859
+ import_react30.default.useImperativeHandle(swiperRef, () => ({
8815
8860
  slidePrev,
8816
8861
  slideNext,
8817
8862
  slideTo
8818
8863
  }));
8819
- import_react29.default.useEffect(() => {
8864
+ import_react30.default.useEffect(() => {
8820
8865
  if (!auto || !canSlide) return;
8821
8866
  autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
8822
8867
  return () => {
@@ -8839,7 +8884,7 @@ var Swiper = (props) => {
8839
8884
  startXRef.current = getClientX(e);
8840
8885
  startTimeRef.current = Date.now();
8841
8886
  };
8842
- import_react29.default.useEffect(() => {
8887
+ import_react30.default.useEffect(() => {
8843
8888
  if (!isDragging) return;
8844
8889
  const handleMove = (e) => {
8845
8890
  setDragOffset(getClientX(e) - startXRef.current);
@@ -8877,8 +8922,8 @@ var Swiper = (props) => {
8877
8922
  }, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
8878
8923
  const slideWidthPercent = 100 / viewItemCount;
8879
8924
  const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
8880
- const slideElements = import_react29.default.useMemo(
8881
- () => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
8925
+ const slideElements = import_react30.default.useMemo(
8926
+ () => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
8882
8927
  "div",
8883
8928
  {
8884
8929
  className: "lib-xplat-swiper__slide",
@@ -8897,14 +8942,14 @@ var Swiper = (props) => {
8897
8942
  Math.floor(realIndex / slideBy),
8898
8943
  totalSteps - 1
8899
8944
  );
8900
- return /* @__PURE__ */ (0, import_jsx_runtime335.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
8901
- /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
8945
+ return /* @__PURE__ */ (0, import_jsx_runtime336.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
8946
+ /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
8902
8947
  "div",
8903
8948
  {
8904
8949
  className: "lib-xplat-swiper__viewport",
8905
8950
  onMouseDown: handleDragStart,
8906
8951
  onTouchStart: handleDragStart,
8907
- children: /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
8952
+ children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
8908
8953
  "div",
8909
8954
  {
8910
8955
  className: clsx_default(
@@ -8922,7 +8967,7 @@ var Swiper = (props) => {
8922
8967
  )
8923
8968
  }
8924
8969
  ),
8925
- 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)(
8970
+ 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)(
8926
8971
  "span",
8927
8972
  {
8928
8973
  className: "lib-xplat-swiper__progress-fill",
@@ -8932,7 +8977,7 @@ var Swiper = (props) => {
8932
8977
  }
8933
8978
  }
8934
8979
  ) }) }),
8935
- 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)(
8980
+ 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)(
8936
8981
  "button",
8937
8982
  {
8938
8983
  className: clsx_default(
@@ -8950,8 +8995,8 @@ Swiper.displayName = "Swiper";
8950
8995
  var Swiper_default = Swiper;
8951
8996
 
8952
8997
  // src/components/Switch/Switch.tsx
8953
- var import_react30 = __toESM(require("react"), 1);
8954
- var import_jsx_runtime336 = require("react/jsx-runtime");
8998
+ var import_react31 = __toESM(require("react"), 1);
8999
+ var import_jsx_runtime337 = require("react/jsx-runtime");
8955
9000
  var KNOB_TRANSITION_MS = 250;
8956
9001
  var Switch = (props) => {
8957
9002
  const {
@@ -8961,9 +9006,9 @@ var Switch = (props) => {
8961
9006
  disabled,
8962
9007
  onChange
8963
9008
  } = props;
8964
- const [isAnimating, setIsAnimating] = import_react30.default.useState(false);
8965
- const timeoutRef = import_react30.default.useRef(null);
8966
- import_react30.default.useEffect(() => {
9009
+ const [isAnimating, setIsAnimating] = import_react31.default.useState(false);
9010
+ const timeoutRef = import_react31.default.useRef(null);
9011
+ import_react31.default.useEffect(() => {
8967
9012
  return () => {
8968
9013
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
8969
9014
  };
@@ -8978,7 +9023,7 @@ var Switch = (props) => {
8978
9023
  timeoutRef.current = null;
8979
9024
  }, KNOB_TRANSITION_MS);
8980
9025
  };
8981
- return /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
9026
+ return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
8982
9027
  "div",
8983
9028
  {
8984
9029
  className: clsx_default(
@@ -8991,7 +9036,7 @@ var Switch = (props) => {
8991
9036
  ),
8992
9037
  onClick: handleClick,
8993
9038
  "aria-disabled": disabled || isAnimating,
8994
- children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
9039
+ children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
8995
9040
  }
8996
9041
  );
8997
9042
  };
@@ -8999,17 +9044,17 @@ Switch.displayName = "Switch";
8999
9044
  var Switch_default = Switch;
9000
9045
 
9001
9046
  // src/components/Table/TableContext.tsx
9002
- var import_react31 = __toESM(require("react"), 1);
9003
- var TableContext = import_react31.default.createContext(null);
9047
+ var import_react32 = __toESM(require("react"), 1);
9048
+ var TableContext = import_react32.default.createContext(null);
9004
9049
  var useTableContext = () => {
9005
- const ctx = import_react31.default.useContext(TableContext);
9050
+ const ctx = import_react32.default.useContext(TableContext);
9006
9051
  if (!ctx) throw new Error("Table components must be used inside <Table>");
9007
9052
  return ctx;
9008
9053
  };
9009
9054
  var TableContext_default = TableContext;
9010
9055
 
9011
9056
  // src/components/Table/Table.tsx
9012
- var import_jsx_runtime337 = require("react/jsx-runtime");
9057
+ var import_jsx_runtime338 = require("react/jsx-runtime");
9013
9058
  var Table = (props) => {
9014
9059
  const {
9015
9060
  children,
@@ -9018,7 +9063,7 @@ var Table = (props) => {
9018
9063
  headerSticky = false,
9019
9064
  stickyShadow = true
9020
9065
  } = props;
9021
- return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("div", { className: "lib-xplat-table-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
9066
+ return /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("div", { className: "lib-xplat-table-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
9022
9067
  TableContext_default.Provider,
9023
9068
  {
9024
9069
  value: {
@@ -9027,7 +9072,7 @@ var Table = (props) => {
9027
9072
  headerSticky,
9028
9073
  stickyShadow
9029
9074
  },
9030
- children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)("table", { className: "lib-xplat-table", children })
9075
+ children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("table", { className: "lib-xplat-table", children })
9031
9076
  }
9032
9077
  ) });
9033
9078
  };
@@ -9035,41 +9080,41 @@ Table.displayName = "Table";
9035
9080
  var Table_default = Table;
9036
9081
 
9037
9082
  // src/components/Table/TableBody.tsx
9038
- var import_jsx_runtime338 = require("react/jsx-runtime");
9083
+ var import_jsx_runtime339 = require("react/jsx-runtime");
9039
9084
  var TableBody = (props) => {
9040
9085
  const { children } = props;
9041
- return /* @__PURE__ */ (0, import_jsx_runtime338.jsx)("tbody", { children });
9086
+ return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)("tbody", { children });
9042
9087
  };
9043
9088
  TableBody.displayName = "TableBody";
9044
9089
  var TableBody_default = TableBody;
9045
9090
 
9046
9091
  // src/components/Table/TableCell.tsx
9047
- var import_react34 = __toESM(require("react"), 1);
9092
+ var import_react35 = __toESM(require("react"), 1);
9048
9093
 
9049
9094
  // src/components/Table/TableHeadContext.tsx
9050
- var import_react32 = __toESM(require("react"), 1);
9051
- var TableHeadContext = import_react32.default.createContext(
9095
+ var import_react33 = __toESM(require("react"), 1);
9096
+ var TableHeadContext = import_react33.default.createContext(
9052
9097
  null
9053
9098
  );
9054
9099
  var useTableHeadContext = () => {
9055
- const ctx = import_react32.default.useContext(TableHeadContext);
9100
+ const ctx = import_react33.default.useContext(TableHeadContext);
9056
9101
  return ctx;
9057
9102
  };
9058
9103
  var TableHeadContext_default = TableHeadContext;
9059
9104
 
9060
9105
  // src/components/Table/TableRowContext.tsx
9061
- var import_react33 = __toESM(require("react"), 1);
9062
- var TableRowContext = import_react33.default.createContext(null);
9106
+ var import_react34 = __toESM(require("react"), 1);
9107
+ var TableRowContext = import_react34.default.createContext(null);
9063
9108
  var useTableRowContext = () => {
9064
- const ctx = import_react33.default.useContext(TableRowContext);
9109
+ const ctx = import_react34.default.useContext(TableRowContext);
9065
9110
  if (!ctx) throw new Error("Table components must be used inside <Table>");
9066
9111
  return ctx;
9067
9112
  };
9068
9113
  var TableRowContext_default = TableRowContext;
9069
9114
 
9070
9115
  // src/components/Table/TableCell.tsx
9071
- var import_jsx_runtime339 = require("react/jsx-runtime");
9072
- var TableCell = import_react34.default.memo((props) => {
9116
+ var import_jsx_runtime340 = require("react/jsx-runtime");
9117
+ var TableCell = import_react35.default.memo((props) => {
9073
9118
  const {
9074
9119
  children,
9075
9120
  align = "center",
@@ -9081,9 +9126,9 @@ var TableCell = import_react34.default.memo((props) => {
9081
9126
  const { registerStickyCell, stickyCells } = useTableRowContext();
9082
9127
  const { stickyShadow } = useTableContext();
9083
9128
  const headContext = useTableHeadContext();
9084
- const [left, setLeft] = import_react34.default.useState(0);
9085
- const cellRef = import_react34.default.useRef(null);
9086
- const calculateLeft = import_react34.default.useCallback(() => {
9129
+ const [left, setLeft] = import_react35.default.useState(0);
9130
+ const cellRef = import_react35.default.useRef(null);
9131
+ const calculateLeft = import_react35.default.useCallback(() => {
9087
9132
  if (!cellRef.current) return 0;
9088
9133
  let totalLeft = 0;
9089
9134
  for (const ref of stickyCells) {
@@ -9092,7 +9137,7 @@ var TableCell = import_react34.default.memo((props) => {
9092
9137
  }
9093
9138
  return totalLeft;
9094
9139
  }, [stickyCells]);
9095
- import_react34.default.useEffect(() => {
9140
+ import_react35.default.useEffect(() => {
9096
9141
  if (!isSticky || !cellRef.current) return;
9097
9142
  registerStickyCell(cellRef);
9098
9143
  setLeft(calculateLeft());
@@ -9110,7 +9155,7 @@ var TableCell = import_react34.default.memo((props) => {
9110
9155
  const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
9111
9156
  const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
9112
9157
  const enableHover = headContext && headContext.cellHover;
9113
- return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
9158
+ return /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
9114
9159
  CellTag,
9115
9160
  {
9116
9161
  ref: cellRef,
@@ -9135,21 +9180,21 @@ TableCell.displayName = "TableCell";
9135
9180
  var TableCell_default = TableCell;
9136
9181
 
9137
9182
  // src/components/Table/TableHead.tsx
9138
- var import_jsx_runtime340 = require("react/jsx-runtime");
9183
+ var import_jsx_runtime341 = require("react/jsx-runtime");
9139
9184
  var TableHead = ({
9140
9185
  children,
9141
9186
  cellHover = false
9142
9187
  }) => {
9143
9188
  const { headerSticky } = useTableContext();
9144
- 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 }) });
9189
+ 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 }) });
9145
9190
  };
9146
9191
  TableHead.displayName = "TableHead";
9147
9192
  var TableHead_default = TableHead;
9148
9193
 
9149
9194
  // src/components/Table/TableRow.tsx
9150
- var import_react35 = __toESM(require("react"), 1);
9151
- var import_jsx_runtime341 = require("react/jsx-runtime");
9152
- var TableRow = import_react35.default.memo((props) => {
9195
+ var import_react36 = __toESM(require("react"), 1);
9196
+ var import_jsx_runtime342 = require("react/jsx-runtime");
9197
+ var TableRow = import_react36.default.memo((props) => {
9153
9198
  const {
9154
9199
  children,
9155
9200
  type = "secondary",
@@ -9157,14 +9202,14 @@ var TableRow = import_react35.default.memo((props) => {
9157
9202
  onClick
9158
9203
  } = props;
9159
9204
  const { rowBorderUse } = useTableContext();
9160
- const [stickyCells, setStickyCells] = import_react35.default.useState([]);
9205
+ const [stickyCells, setStickyCells] = import_react36.default.useState([]);
9161
9206
  const registerStickyCell = (ref) => {
9162
9207
  setStickyCells((prev) => {
9163
9208
  if (prev.includes(ref)) return prev;
9164
9209
  return [...prev, ref];
9165
9210
  });
9166
9211
  };
9167
- return /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
9212
+ return /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
9168
9213
  "tr",
9169
9214
  {
9170
9215
  className: clsx_default(
@@ -9182,7 +9227,7 @@ TableRow.displayName = "TableRow";
9182
9227
  var TableRow_default = TableRow;
9183
9228
 
9184
9229
  // src/components/Tag/Tag.tsx
9185
- var import_jsx_runtime342 = require("react/jsx-runtime");
9230
+ var import_jsx_runtime343 = require("react/jsx-runtime");
9186
9231
  var Tag = (props) => {
9187
9232
  const {
9188
9233
  children,
@@ -9192,7 +9237,7 @@ var Tag = (props) => {
9192
9237
  disabled = false,
9193
9238
  colorIndex
9194
9239
  } = props;
9195
- return /* @__PURE__ */ (0, import_jsx_runtime342.jsxs)(
9240
+ return /* @__PURE__ */ (0, import_jsx_runtime343.jsxs)(
9196
9241
  "span",
9197
9242
  {
9198
9243
  className: clsx_default(
@@ -9203,8 +9248,8 @@ var Tag = (props) => {
9203
9248
  disabled && "disabled"
9204
9249
  ),
9205
9250
  children: [
9206
- /* @__PURE__ */ (0, import_jsx_runtime342.jsx)("span", { className: "tag-label", children }),
9207
- 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, {}) })
9251
+ /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("span", { className: "tag-label", children }),
9252
+ 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, {}) })
9208
9253
  ]
9209
9254
  }
9210
9255
  );
@@ -9213,12 +9258,12 @@ Tag.displayName = "Tag";
9213
9258
  var Tag_default = Tag;
9214
9259
 
9215
9260
  // src/components/TextArea/TextArea.tsx
9216
- var import_react36 = __toESM(require("react"), 1);
9217
- var import_jsx_runtime343 = require("react/jsx-runtime");
9218
- var TextArea = import_react36.default.forwardRef(
9261
+ var import_react37 = __toESM(require("react"), 1);
9262
+ var import_jsx_runtime344 = require("react/jsx-runtime");
9263
+ var TextArea = import_react37.default.forwardRef(
9219
9264
  (props, ref) => {
9220
9265
  const { value, onChange, disabled, ...textareaProps } = props;
9221
- const localRef = import_react36.default.useRef(null);
9266
+ const localRef = import_react37.default.useRef(null);
9222
9267
  const setRefs = (el) => {
9223
9268
  localRef.current = el;
9224
9269
  if (!ref) return;
@@ -9238,21 +9283,21 @@ var TextArea = import_react36.default.forwardRef(
9238
9283
  onChange(event);
9239
9284
  }
9240
9285
  };
9241
- import_react36.default.useEffect(() => {
9286
+ import_react37.default.useEffect(() => {
9242
9287
  const el = localRef.current;
9243
9288
  if (!el) return;
9244
9289
  el.style.height = "0px";
9245
9290
  const nextHeight = Math.min(el.scrollHeight, 400);
9246
9291
  el.style.height = `${nextHeight}px`;
9247
9292
  }, [value]);
9248
- return /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(
9293
+ return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
9249
9294
  "div",
9250
9295
  {
9251
9296
  className: clsx_default(
9252
9297
  "lib-xplat-textarea",
9253
9298
  disabled ? "disabled" : void 0
9254
9299
  ),
9255
- children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(
9300
+ children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
9256
9301
  "textarea",
9257
9302
  {
9258
9303
  ...textareaProps,
@@ -9270,25 +9315,25 @@ TextArea.displayName = "TextArea";
9270
9315
  var TextArea_default = TextArea;
9271
9316
 
9272
9317
  // src/components/Toast/Toast.tsx
9273
- var import_react37 = __toESM(require("react"), 1);
9274
- var import_react_dom3 = require("react-dom");
9275
- var import_jsx_runtime344 = require("react/jsx-runtime");
9276
- var ToastContext = import_react37.default.createContext(null);
9318
+ var import_react38 = __toESM(require("react"), 1);
9319
+ var import_react_dom4 = require("react-dom");
9320
+ var import_jsx_runtime345 = require("react/jsx-runtime");
9321
+ var ToastContext = import_react38.default.createContext(null);
9277
9322
  var useToast = () => {
9278
- const ctx = import_react37.default.useContext(ToastContext);
9323
+ const ctx = import_react38.default.useContext(ToastContext);
9279
9324
  if (!ctx) throw new Error("useToast must be used within ToastProvider");
9280
9325
  return ctx;
9281
9326
  };
9282
9327
  var EXIT_DURATION = 300;
9283
9328
  var ToastItemComponent = ({ item, isExiting, onClose }) => {
9284
- const ref = import_react37.default.useRef(null);
9285
- const [height, setHeight] = import_react37.default.useState(void 0);
9286
- import_react37.default.useEffect(() => {
9329
+ const ref = import_react38.default.useRef(null);
9330
+ const [height, setHeight] = import_react38.default.useState(void 0);
9331
+ import_react38.default.useEffect(() => {
9287
9332
  if (ref.current && !isExiting) {
9288
9333
  setHeight(ref.current.offsetHeight);
9289
9334
  }
9290
9335
  }, [isExiting]);
9291
- return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
9336
+ return /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(
9292
9337
  "div",
9293
9338
  {
9294
9339
  className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
@@ -9296,15 +9341,15 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
9296
9341
  maxHeight: isExiting ? 0 : height ?? "none",
9297
9342
  marginBottom: isExiting ? 0 : void 0
9298
9343
  },
9299
- children: /* @__PURE__ */ (0, import_jsx_runtime344.jsxs)(
9344
+ children: /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)(
9300
9345
  "div",
9301
9346
  {
9302
9347
  ref,
9303
9348
  className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
9304
9349
  role: "alert",
9305
9350
  children: [
9306
- /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("span", { className: "message", children: item.message }),
9307
- /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
9351
+ /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("span", { className: "message", children: item.message }),
9352
+ /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
9308
9353
  ]
9309
9354
  }
9310
9355
  )
@@ -9315,13 +9360,13 @@ var ToastProvider = ({
9315
9360
  children,
9316
9361
  position = "top-right"
9317
9362
  }) => {
9318
- const [toasts, setToasts] = import_react37.default.useState([]);
9319
- const [removing, setRemoving] = import_react37.default.useState(/* @__PURE__ */ new Set());
9320
- const [mounted, setMounted] = import_react37.default.useState(false);
9321
- import_react37.default.useEffect(() => {
9363
+ const [toasts, setToasts] = import_react38.default.useState([]);
9364
+ const [removing, setRemoving] = import_react38.default.useState(/* @__PURE__ */ new Set());
9365
+ const [mounted, setMounted] = import_react38.default.useState(false);
9366
+ import_react38.default.useEffect(() => {
9322
9367
  setMounted(true);
9323
9368
  }, []);
9324
- const remove = import_react37.default.useCallback((id) => {
9369
+ const remove = import_react38.default.useCallback((id) => {
9325
9370
  setRemoving((prev) => new Set(prev).add(id));
9326
9371
  setTimeout(() => {
9327
9372
  setToasts((prev) => prev.filter((t) => t.id !== id));
@@ -9332,7 +9377,7 @@ var ToastProvider = ({
9332
9377
  });
9333
9378
  }, EXIT_DURATION);
9334
9379
  }, []);
9335
- const toast = import_react37.default.useCallback(
9380
+ const toast = import_react38.default.useCallback(
9336
9381
  (type, message, duration = 3e3) => {
9337
9382
  const id = `${Date.now()}-${Math.random()}`;
9338
9383
  setToasts((prev) => [...prev, { id, type, message }]);
@@ -9342,10 +9387,10 @@ var ToastProvider = ({
9342
9387
  },
9343
9388
  [remove]
9344
9389
  );
9345
- return /* @__PURE__ */ (0, import_jsx_runtime344.jsxs)(ToastContext.Provider, { value: { toast }, children: [
9390
+ return /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)(ToastContext.Provider, { value: { toast }, children: [
9346
9391
  children,
9347
- mounted && (0, import_react_dom3.createPortal)(
9348
- /* @__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)(
9392
+ mounted && (0, import_react_dom4.createPortal)(
9393
+ /* @__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)(
9349
9394
  ToastItemComponent,
9350
9395
  {
9351
9396
  item: t,
@@ -9361,29 +9406,29 @@ var ToastProvider = ({
9361
9406
  ToastProvider.displayName = "ToastProvider";
9362
9407
 
9363
9408
  // src/components/Tooltip/Tooltip.tsx
9364
- var import_react38 = __toESM(require("react"), 1);
9365
- var import_jsx_runtime345 = require("react/jsx-runtime");
9409
+ var import_react39 = __toESM(require("react"), 1);
9410
+ var import_jsx_runtime346 = require("react/jsx-runtime");
9366
9411
  var Tooltip = (props) => {
9367
9412
  const {
9368
9413
  type = "primary",
9369
9414
  description,
9370
9415
  children
9371
9416
  } = props;
9372
- const iconRef = import_react38.default.useRef(null);
9373
- return /* @__PURE__ */ (0, import_jsx_runtime345.jsxs)("div", { className: "lib-xplat-tooltip", children: [
9374
- /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
9375
- /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("div", { className: clsx_default("tooltip-wrapper", type), children: description })
9417
+ const iconRef = import_react39.default.useRef(null);
9418
+ return /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: "lib-xplat-tooltip", children: [
9419
+ /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
9420
+ /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("div", { className: clsx_default("tooltip-wrapper", type), children: description })
9376
9421
  ] });
9377
9422
  };
9378
9423
  Tooltip.displayName = "Tooltip";
9379
9424
  var Tooltip_default = Tooltip;
9380
9425
 
9381
9426
  // src/components/Video/Video.tsx
9382
- var import_react39 = __toESM(require("react"), 1);
9383
- var import_jsx_runtime346 = require("react/jsx-runtime");
9384
- 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: [
9385
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
9386
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
9427
+ var import_react40 = __toESM(require("react"), 1);
9428
+ var import_jsx_runtime347 = require("react/jsx-runtime");
9429
+ 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: [
9430
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
9431
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
9387
9432
  ] });
9388
9433
  var formatTime = (sec) => {
9389
9434
  if (!Number.isFinite(sec) || sec < 0) return "0:00";
@@ -9391,7 +9436,7 @@ var formatTime = (sec) => {
9391
9436
  const s = Math.floor(sec % 60);
9392
9437
  return `${m}:${s.toString().padStart(2, "0")}`;
9393
9438
  };
9394
- var Video = import_react39.default.forwardRef((props, ref) => {
9439
+ var Video = import_react40.default.forwardRef((props, ref) => {
9395
9440
  const {
9396
9441
  src,
9397
9442
  poster,
@@ -9415,21 +9460,21 @@ var Video = import_react39.default.forwardRef((props, ref) => {
9415
9460
  children,
9416
9461
  ...rest
9417
9462
  } = props;
9418
- const containerRef = import_react39.default.useRef(null);
9419
- const videoRef = import_react39.default.useRef(null);
9420
- const [isPlaying, setIsPlaying] = import_react39.default.useState(Boolean(autoPlay));
9421
- const [isLoaded, setIsLoaded] = import_react39.default.useState(false);
9422
- const [currentTime, setCurrentTime] = import_react39.default.useState(0);
9423
- const [duration, setDuration] = import_react39.default.useState(0);
9424
- const [buffered, setBuffered] = import_react39.default.useState(0);
9425
- const [volume, setVolume] = import_react39.default.useState(1);
9426
- const [isMuted, setIsMuted] = import_react39.default.useState(Boolean(muted));
9427
- const [isFullscreen, setIsFullscreen] = import_react39.default.useState(false);
9428
- const [playbackRate, setPlaybackRate] = import_react39.default.useState(1);
9429
- const [rateMenuOpen, setRateMenuOpen] = import_react39.default.useState(false);
9430
- const [captionsOn, setCaptionsOn] = import_react39.default.useState(false);
9431
- const [isPip, setIsPip] = import_react39.default.useState(false);
9432
- const setRefs = import_react39.default.useCallback(
9463
+ const containerRef = import_react40.default.useRef(null);
9464
+ const videoRef = import_react40.default.useRef(null);
9465
+ const [isPlaying, setIsPlaying] = import_react40.default.useState(Boolean(autoPlay));
9466
+ const [isLoaded, setIsLoaded] = import_react40.default.useState(false);
9467
+ const [currentTime, setCurrentTime] = import_react40.default.useState(0);
9468
+ const [duration, setDuration] = import_react40.default.useState(0);
9469
+ const [buffered, setBuffered] = import_react40.default.useState(0);
9470
+ const [volume, setVolume] = import_react40.default.useState(1);
9471
+ const [isMuted, setIsMuted] = import_react40.default.useState(Boolean(muted));
9472
+ const [isFullscreen, setIsFullscreen] = import_react40.default.useState(false);
9473
+ const [playbackRate, setPlaybackRate] = import_react40.default.useState(1);
9474
+ const [rateMenuOpen, setRateMenuOpen] = import_react40.default.useState(false);
9475
+ const [captionsOn, setCaptionsOn] = import_react40.default.useState(false);
9476
+ const [isPip, setIsPip] = import_react40.default.useState(false);
9477
+ const setRefs = import_react40.default.useCallback(
9433
9478
  (el) => {
9434
9479
  videoRef.current = el;
9435
9480
  if (typeof ref === "function") ref(el);
@@ -9437,14 +9482,14 @@ var Video = import_react39.default.forwardRef((props, ref) => {
9437
9482
  },
9438
9483
  [ref]
9439
9484
  );
9440
- import_react39.default.useEffect(() => {
9485
+ import_react40.default.useEffect(() => {
9441
9486
  const onFsChange = () => {
9442
9487
  setIsFullscreen(document.fullscreenElement === containerRef.current);
9443
9488
  };
9444
9489
  document.addEventListener("fullscreenchange", onFsChange);
9445
9490
  return () => document.removeEventListener("fullscreenchange", onFsChange);
9446
9491
  }, []);
9447
- import_react39.default.useEffect(() => {
9492
+ import_react40.default.useEffect(() => {
9448
9493
  const v = videoRef.current;
9449
9494
  if (!v) return;
9450
9495
  const onEnter = () => setIsPip(true);
@@ -9558,13 +9603,13 @@ var Video = import_react39.default.forwardRef((props, ref) => {
9558
9603
  const volumePct = (isMuted ? 0 : volume) * 100;
9559
9604
  const VolumeGlyph = isMuted || volume === 0 ? VolumeXIcon_default : volume < 0.5 ? VolumeIcon_default : Volume2Icon_default;
9560
9605
  const pipSupported = typeof document !== "undefined" && "pictureInPictureEnabled" in document && document.pictureInPictureEnabled;
9561
- return /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)(
9606
+ return /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)(
9562
9607
  "div",
9563
9608
  {
9564
9609
  ref: containerRef,
9565
9610
  className: clsx_default("lib-xplat-video", showControls && "has-controls"),
9566
9611
  children: [
9567
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
9612
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
9568
9613
  "video",
9569
9614
  {
9570
9615
  ref: setRefs,
@@ -9585,7 +9630,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
9585
9630
  children
9586
9631
  }
9587
9632
  ),
9588
- showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
9633
+ showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
9589
9634
  "button",
9590
9635
  {
9591
9636
  type: "button",
@@ -9597,11 +9642,11 @@ var Video = import_react39.default.forwardRef((props, ref) => {
9597
9642
  onClick: togglePlay,
9598
9643
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
9599
9644
  tabIndex: -1,
9600
- children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(PlayCircleIcon_default, {}) })
9645
+ children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PlayCircleIcon_default, {}) })
9601
9646
  }
9602
9647
  ),
9603
- showControls && /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
9604
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
9648
+ showControls && /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
9649
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
9605
9650
  "input",
9606
9651
  {
9607
9652
  type: "range",
@@ -9618,29 +9663,29 @@ var Video = import_react39.default.forwardRef((props, ref) => {
9618
9663
  }
9619
9664
  }
9620
9665
  ),
9621
- /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: "controls-row", children: [
9622
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
9666
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "controls-row", children: [
9667
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
9623
9668
  "button",
9624
9669
  {
9625
9670
  type: "button",
9626
9671
  className: "control-btn",
9627
9672
  onClick: togglePlay,
9628
9673
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
9629
- children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(PlayIcon_default, {})
9674
+ children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PlayIcon_default, {})
9630
9675
  }
9631
9676
  ),
9632
- /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: "volume-group", children: [
9633
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
9677
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: "volume-group", children: [
9678
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
9634
9679
  "button",
9635
9680
  {
9636
9681
  type: "button",
9637
9682
  className: "control-btn",
9638
9683
  onClick: toggleMute,
9639
9684
  "aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
9640
- children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(VolumeGlyph, {})
9685
+ children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(VolumeGlyph, {})
9641
9686
  }
9642
9687
  ),
9643
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
9688
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
9644
9689
  "input",
9645
9690
  {
9646
9691
  type: "range",
@@ -9655,14 +9700,14 @@ var Video = import_react39.default.forwardRef((props, ref) => {
9655
9700
  }
9656
9701
  )
9657
9702
  ] }),
9658
- /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("span", { className: "time", children: [
9703
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("span", { className: "time", children: [
9659
9704
  formatTime(currentTime),
9660
9705
  " / ",
9661
9706
  formatTime(duration)
9662
9707
  ] }),
9663
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("div", { className: "controls-spacer" }),
9664
- playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
9665
- /* @__PURE__ */ (0, import_jsx_runtime346.jsxs)(
9708
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("div", { className: "controls-spacer" }),
9709
+ playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
9710
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsxs)(
9666
9711
  "button",
9667
9712
  {
9668
9713
  type: "button",
@@ -9676,7 +9721,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
9676
9721
  ]
9677
9722
  }
9678
9723
  ),
9679
- 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)(
9724
+ 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)(
9680
9725
  "button",
9681
9726
  {
9682
9727
  type: "button",
@@ -9690,7 +9735,7 @@ var Video = import_react39.default.forwardRef((props, ref) => {
9690
9735
  }
9691
9736
  ) }, r2)) })
9692
9737
  ] }),
9693
- showCaptions && /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
9738
+ showCaptions && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
9694
9739
  "button",
9695
9740
  {
9696
9741
  type: "button",
@@ -9698,37 +9743,37 @@ var Video = import_react39.default.forwardRef((props, ref) => {
9698
9743
  onClick: toggleCaptions,
9699
9744
  "aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
9700
9745
  "aria-pressed": captionsOn,
9701
- children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(TypeIcon_default, {})
9746
+ children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(TypeIcon_default, {})
9702
9747
  }
9703
9748
  ),
9704
- showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
9749
+ showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
9705
9750
  "button",
9706
9751
  {
9707
9752
  type: "button",
9708
9753
  className: clsx_default("control-btn", isPip && "is-active"),
9709
9754
  onClick: togglePip,
9710
9755
  "aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
9711
- children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(PipIcon, {})
9756
+ children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(PipIcon, {})
9712
9757
  }
9713
9758
  ),
9714
- showDownload && /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
9759
+ showDownload && /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
9715
9760
  "a",
9716
9761
  {
9717
9762
  className: "control-btn",
9718
9763
  href: src,
9719
9764
  download: downloadFileName ?? true,
9720
9765
  "aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
9721
- children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(DownloadIcon_default, {})
9766
+ children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(DownloadIcon_default, {})
9722
9767
  }
9723
9768
  ),
9724
- /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
9769
+ /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
9725
9770
  "button",
9726
9771
  {
9727
9772
  type: "button",
9728
9773
  className: "control-btn",
9729
9774
  onClick: toggleFullscreen,
9730
9775
  "aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
9731
- children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(MaximizeIcon_default, {})
9776
+ children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(MaximizeIcon_default, {})
9732
9777
  }
9733
9778
  )
9734
9779
  ] })
@@ -9741,10 +9786,10 @@ Video.displayName = "Video";
9741
9786
  var Video_default = Video;
9742
9787
 
9743
9788
  // src/layout/Grid/FullGrid/FullGrid.tsx
9744
- var import_jsx_runtime347 = require("react/jsx-runtime");
9789
+ var import_jsx_runtime348 = require("react/jsx-runtime");
9745
9790
  var FullGrid = (props) => {
9746
9791
  const { children, gap } = props;
9747
- return /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
9792
+ return /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
9748
9793
  "div",
9749
9794
  {
9750
9795
  className: "lib-xplat-full-grid",
@@ -9757,10 +9802,10 @@ FullGrid.displayName = "FullGrid";
9757
9802
  var FullGrid_default = FullGrid;
9758
9803
 
9759
9804
  // src/layout/Grid/FullScreen/FullScreen.tsx
9760
- var import_jsx_runtime348 = require("react/jsx-runtime");
9805
+ var import_jsx_runtime349 = require("react/jsx-runtime");
9761
9806
  var FullScreen = (props) => {
9762
9807
  const { children, gap } = props;
9763
- return /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
9808
+ return /* @__PURE__ */ (0, import_jsx_runtime349.jsx)(
9764
9809
  "div",
9765
9810
  {
9766
9811
  className: "lib-xplat-full-screen",
@@ -9773,7 +9818,7 @@ FullScreen.displayName = "FullScreen";
9773
9818
  var FullScreen_default = FullScreen;
9774
9819
 
9775
9820
  // src/layout/Grid/Item/Item.tsx
9776
- var import_jsx_runtime349 = require("react/jsx-runtime");
9821
+ var import_jsx_runtime350 = require("react/jsx-runtime");
9777
9822
  var calculateSpans = (column) => {
9778
9823
  const spans = {};
9779
9824
  let inherited = column.default;
@@ -9790,35 +9835,35 @@ var GridItem = ({ column, children, className }) => {
9790
9835
  Object.entries(spans).forEach(([key, value]) => {
9791
9836
  style[`--column-${key}`] = value;
9792
9837
  });
9793
- return /* @__PURE__ */ (0, import_jsx_runtime349.jsx)("div", { className: clsx_default("lib-xplat-grid-item", className), style, children });
9838
+ return /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { className: clsx_default("lib-xplat-grid-item", className), style, children });
9794
9839
  };
9795
9840
  GridItem.displayName = "GridItem";
9796
9841
  var Item_default = GridItem;
9797
9842
 
9798
9843
  // src/layout/Header/Header.tsx
9799
- var import_jsx_runtime350 = require("react/jsx-runtime");
9844
+ var import_jsx_runtime351 = require("react/jsx-runtime");
9800
9845
  var Header = ({
9801
9846
  logo,
9802
9847
  centerContent,
9803
9848
  rightContent
9804
9849
  }) => {
9805
- return /* @__PURE__ */ (0, import_jsx_runtime350.jsxs)("div", { className: "lib-xplat-layout-header", children: [
9806
- /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { children: logo }),
9807
- /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { children: centerContent }),
9808
- /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { children: rightContent })
9850
+ return /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)("div", { className: "lib-xplat-layout-header", children: [
9851
+ /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { children: logo }),
9852
+ /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { children: centerContent }),
9853
+ /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { children: rightContent })
9809
9854
  ] });
9810
9855
  };
9811
9856
  Header.displayName = "Header";
9812
9857
  var Header_default = Header;
9813
9858
 
9814
9859
  // src/layout/Layout/Layout.tsx
9815
- var import_jsx_runtime351 = require("react/jsx-runtime");
9860
+ var import_jsx_runtime352 = require("react/jsx-runtime");
9816
9861
  var Layout = (props) => {
9817
9862
  const { header, sideBar, children } = props;
9818
- return /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { className: "lib-xplat-layout", children: /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)("div", { className: "lib-xplat-layout-content-wrapper", children: [
9819
- sideBar && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(import_jsx_runtime351.Fragment, { children: sideBar }),
9820
- /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)("div", { className: "lib-xplat-layout-content", children: [
9821
- header && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { className: "lib-xplat-layout-conent-header", children: header }),
9863
+ return /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { className: "lib-xplat-layout", children: /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: "lib-xplat-layout-content-wrapper", children: [
9864
+ sideBar && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(import_jsx_runtime352.Fragment, { children: sideBar }),
9865
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: "lib-xplat-layout-content", children: [
9866
+ header && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { className: "lib-xplat-layout-conent-header", children: header }),
9822
9867
  children
9823
9868
  ] })
9824
9869
  ] }) });
@@ -9827,31 +9872,31 @@ Layout.displayName = "Layout";
9827
9872
  var Layout_default = Layout;
9828
9873
 
9829
9874
  // src/layout/SideBar/SideBar.tsx
9830
- var import_react41 = __toESM(require("react"), 1);
9875
+ var import_react42 = __toESM(require("react"), 1);
9831
9876
 
9832
9877
  // src/layout/SideBar/SideBarContext.tsx
9833
- var import_react40 = __toESM(require("react"), 1);
9834
- var SideBarContext = import_react40.default.createContext(null);
9878
+ var import_react41 = __toESM(require("react"), 1);
9879
+ var SideBarContext = import_react41.default.createContext(null);
9835
9880
  var useSideBarContext = () => {
9836
- const ctx = import_react40.default.useContext(SideBarContext);
9881
+ const ctx = import_react41.default.useContext(SideBarContext);
9837
9882
  if (!ctx) throw new Error("Error");
9838
9883
  return ctx;
9839
9884
  };
9840
9885
  var SideBarContext_default = SideBarContext;
9841
9886
 
9842
9887
  // src/layout/SideBar/SideBar.tsx
9843
- var import_jsx_runtime352 = require("react/jsx-runtime");
9888
+ var import_jsx_runtime353 = require("react/jsx-runtime");
9844
9889
  var SideBar = (props) => {
9845
9890
  const { children, className } = props;
9846
- const [isOpen, setIsOpen] = import_react41.default.useState(true);
9891
+ const [isOpen, setIsOpen] = import_react42.default.useState(true);
9847
9892
  const handleSwitchSideBar = () => {
9848
9893
  setIsOpen((prev) => !prev);
9849
9894
  };
9850
- return /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
9895
+ return /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
9851
9896
  SideBarContext_default.Provider,
9852
9897
  {
9853
9898
  value: { isSidebarOpen: isOpen, handleSwitchSideBar },
9854
- children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
9899
+ children: /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
9855
9900
  "div",
9856
9901
  {
9857
9902
  className: clsx_default(