@x-plat/design-system 0.5.11 → 0.5.13

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