@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.js CHANGED
@@ -6121,7 +6121,7 @@ var CardTab_default = CardTab;
6121
6121
 
6122
6122
  // src/components/Chart/Chart.tsx
6123
6123
  import React5 from "react";
6124
- import { jsx as jsx305, jsxs as jsxs196 } from "react/jsx-runtime";
6124
+ import { Fragment as Fragment2, jsx as jsx305, jsxs as jsxs196 } from "react/jsx-runtime";
6125
6125
  var CATEGORICAL_COUNT2 = 8;
6126
6126
  var LINE_BAR_PALETTES = Array.from({ length: CATEGORICAL_COUNT2 }, (_, i) => {
6127
6127
  const n = i + 1;
@@ -6170,14 +6170,23 @@ var useChartSize = (ref) => {
6170
6170
  React5.useEffect(() => {
6171
6171
  const el = ref.current;
6172
6172
  if (!el) return;
6173
+ let rafId = 0;
6173
6174
  const observer = new ResizeObserver((entries) => {
6174
- const entry = entries[0];
6175
- if (!entry) return;
6176
- const { width, height } = entry.contentRect;
6177
- setSize({ width: Math.floor(width), height: Math.floor(height) });
6175
+ cancelAnimationFrame(rafId);
6176
+ rafId = requestAnimationFrame(() => {
6177
+ const entry = entries[0];
6178
+ if (!entry) return;
6179
+ const { width, height } = entry.contentRect;
6180
+ const w = Math.floor(width);
6181
+ const h = Math.floor(height);
6182
+ setSize((prev) => prev.width === w && prev.height === h ? prev : { width: w, height: h });
6183
+ });
6178
6184
  });
6179
6185
  observer.observe(el);
6180
- return () => observer.disconnect();
6186
+ return () => {
6187
+ cancelAnimationFrame(rafId);
6188
+ observer.disconnect();
6189
+ };
6181
6190
  }, [ref]);
6182
6191
  return size;
6183
6192
  };
@@ -6189,15 +6198,21 @@ var useChartTooltip = (enabled) => {
6189
6198
  content: ""
6190
6199
  });
6191
6200
  const containerRef = React5.useRef(null);
6201
+ const rafRef = React5.useRef(0);
6192
6202
  const move = React5.useCallback((e) => {
6193
6203
  if (!enabled) return;
6194
- const rect = containerRef.current?.getBoundingClientRect();
6195
- if (!rect) return;
6196
- setTooltip((prev) => ({
6197
- ...prev,
6198
- x: e.clientX - rect.left,
6199
- y: e.clientY - rect.top - 12
6200
- }));
6204
+ const clientX = e.clientX;
6205
+ const clientY = e.clientY;
6206
+ cancelAnimationFrame(rafRef.current);
6207
+ rafRef.current = requestAnimationFrame(() => {
6208
+ const rect = containerRef.current?.getBoundingClientRect();
6209
+ if (!rect) return;
6210
+ setTooltip((prev) => ({
6211
+ ...prev,
6212
+ x: clientX - rect.left,
6213
+ y: clientY - rect.top - 12
6214
+ }));
6215
+ });
6201
6216
  }, [enabled]);
6202
6217
  const show = React5.useCallback((e, content) => {
6203
6218
  if (!enabled) return;
@@ -6211,10 +6226,35 @@ var useChartTooltip = (enabled) => {
6211
6226
  });
6212
6227
  }, [enabled]);
6213
6228
  const hide = React5.useCallback(() => {
6229
+ cancelAnimationFrame(rafRef.current);
6214
6230
  setTooltip((prev) => ({ ...prev, visible: false }));
6215
6231
  }, []);
6216
6232
  return { tooltip, show, hide, move, containerRef };
6217
6233
  };
6234
+ var GridLines = React5.memo(({ width, height, chartH, maxVal }) => /* @__PURE__ */ jsx305(Fragment2, { children: [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
6235
+ const y = PADDING.top + (1 - ratio) * chartH;
6236
+ const val = Math.round(maxVal * ratio);
6237
+ return /* @__PURE__ */ jsxs196("g", { children: [
6238
+ /* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
6239
+ /* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
6240
+ ] }, ratio);
6241
+ }) }));
6242
+ GridLines.displayName = "GridLines";
6243
+ var getLabelStep = (count, chartW) => {
6244
+ const minLabelWidth = 40;
6245
+ const maxLabels = Math.floor(chartW / minLabelWidth);
6246
+ if (count <= maxLabels) return 1;
6247
+ return Math.ceil(count / maxLabels);
6248
+ };
6249
+ var AxisLabels = React5.memo(({ labels, count, chartW, height }) => {
6250
+ const step = getLabelStep(count, chartW);
6251
+ return /* @__PURE__ */ jsx305(Fragment2, { children: labels.map((label, i) => {
6252
+ if (i % step !== 0) return null;
6253
+ const x = PADDING.left + i / (count - 1 || 1) * chartW;
6254
+ return /* @__PURE__ */ jsx305("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
6255
+ }) });
6256
+ });
6257
+ AxisLabels.displayName = "AxisLabels";
6218
6258
  var LineChart = React5.memo(({ data, labels, width, height, onHover, onMove, onLeave }) => {
6219
6259
  const entries = React5.useMemo(() => Object.entries(data), [data]);
6220
6260
  const maxVal = React5.useMemo(() => {
@@ -6234,19 +6274,10 @@ var LineChart = React5.memo(({ data, labels, width, height, onHover, onMove, onL
6234
6274
  ),
6235
6275
  [entries, count, chartW, chartH, maxVal]
6236
6276
  );
6277
+ const showPoints = count <= 100;
6237
6278
  return /* @__PURE__ */ jsxs196("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
6238
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
6239
- const y = PADDING.top + (1 - ratio) * chartH;
6240
- const val = Math.round(maxVal * ratio);
6241
- return /* @__PURE__ */ jsxs196("g", { children: [
6242
- /* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
6243
- /* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
6244
- ] }, ratio);
6245
- }),
6246
- labels.map((label, i) => {
6247
- const x = PADDING.left + i / (count - 1 || 1) * chartW;
6248
- return /* @__PURE__ */ jsx305("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
6249
- }),
6279
+ /* @__PURE__ */ jsx305(GridLines, { width, height, chartH, maxVal }),
6280
+ /* @__PURE__ */ jsx305(AxisLabels, { labels, count, chartW, height }),
6250
6281
  entries.map(([key], di) => {
6251
6282
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
6252
6283
  const color = palette[2];
@@ -6261,7 +6292,7 @@ var LineChart = React5.memo(({ data, labels, width, height, onHover, onMove, onL
6261
6292
  strokeWidth: "2"
6262
6293
  }
6263
6294
  ),
6264
- points.map((p, i) => /* @__PURE__ */ jsx305(
6295
+ showPoints && points.map((p, i) => /* @__PURE__ */ jsx305(
6265
6296
  "circle",
6266
6297
  {
6267
6298
  cx: p.x,
@@ -6299,19 +6330,10 @@ var CurveChart = React5.memo(({ data, labels, width, height, onHover, onMove, on
6299
6330
  ),
6300
6331
  [entries, count, chartW, chartH, maxVal]
6301
6332
  );
6333
+ const showPoints = count <= 100;
6302
6334
  return /* @__PURE__ */ jsxs196("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
6303
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
6304
- const y = PADDING.top + (1 - ratio) * chartH;
6305
- const val = Math.round(maxVal * ratio);
6306
- return /* @__PURE__ */ jsxs196("g", { children: [
6307
- /* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
6308
- /* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
6309
- ] }, ratio);
6310
- }),
6311
- labels.map((label, i) => {
6312
- const x = PADDING.left + i / (count - 1 || 1) * chartW;
6313
- return /* @__PURE__ */ jsx305("text", { x, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
6314
- }),
6335
+ /* @__PURE__ */ jsx305(GridLines, { width, height, chartH, maxVal }),
6336
+ /* @__PURE__ */ jsx305(AxisLabels, { labels, count, chartW, height }),
6315
6337
  entries.map(([key], di) => {
6316
6338
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
6317
6339
  const color = palette[2];
@@ -6327,7 +6349,7 @@ var CurveChart = React5.memo(({ data, labels, width, height, onHover, onMove, on
6327
6349
  ] }) }),
6328
6350
  /* @__PURE__ */ jsx305("path", { d: areaPath, fill: `url(#${gradientId})` }),
6329
6351
  /* @__PURE__ */ jsx305("path", { d: linePath, fill: "none", stroke: color, strokeWidth: "2" }),
6330
- points.map((p, i) => /* @__PURE__ */ jsx305(
6352
+ showPoints && points.map((p, i) => /* @__PURE__ */ jsx305(
6331
6353
  "circle",
6332
6354
  {
6333
6355
  cx: p.x,
@@ -6357,11 +6379,11 @@ var BarChart = React5.memo(({ data, labels, width, height, onHover, onMove, onLe
6357
6379
  const chartW = width - PADDING.left - PADDING.right;
6358
6380
  const chartH = height - PADDING.top - PADDING.bottom;
6359
6381
  const groupW = chartW / count;
6360
- const barW = Math.min(32, groupW * 0.7 / groupCount);
6382
+ const barW = Math.max(1, Math.min(32, groupW * 0.7 / groupCount));
6361
6383
  const bars = React5.useMemo(
6362
6384
  () => entries.map(
6363
6385
  ([, values], di) => values.map((v, i) => {
6364
- const h = v / maxVal * chartH;
6386
+ const h = Math.max(0, v / maxVal * chartH);
6365
6387
  const x = PADDING.left + groupW * i + (groupW - barW * groupCount) / 2 + barW * di;
6366
6388
  const y = PADDING.top + chartH - h;
6367
6389
  return { x, y, w: barW, h, v };
@@ -6369,16 +6391,13 @@ var BarChart = React5.memo(({ data, labels, width, height, onHover, onMove, onLe
6369
6391
  ),
6370
6392
  [entries, maxVal, chartH, groupW, barW, groupCount]
6371
6393
  );
6394
+ const barLabelStep = getLabelStep(count, chartW);
6372
6395
  return /* @__PURE__ */ jsxs196("svg", { viewBox: `0 0 ${width} ${height}`, className: "chart-svg", children: [
6373
- [0, 0.25, 0.5, 0.75, 1].map((ratio) => {
6374
- const y = PADDING.top + (1 - ratio) * chartH;
6375
- const val = Math.round(maxVal * ratio);
6376
- return /* @__PURE__ */ jsxs196("g", { children: [
6377
- /* @__PURE__ */ jsx305("line", { x1: PADDING.left, y1: y, x2: width - PADDING.right, y2: y, className: "chart-grid" }),
6378
- /* @__PURE__ */ jsx305("text", { x: PADDING.left - 8, y: y + 4, className: "chart-axis-label", textAnchor: "end", children: val })
6379
- ] }, ratio);
6396
+ /* @__PURE__ */ jsx305(GridLines, { width, height, chartH, maxVal }),
6397
+ labels.map((label, i) => {
6398
+ if (i % barLabelStep !== 0) return null;
6399
+ return /* @__PURE__ */ jsx305("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i);
6380
6400
  }),
6381
- labels.map((label, i) => /* @__PURE__ */ jsx305("text", { x: PADDING.left + groupW * i + groupW / 2, y: height - 8, className: "chart-axis-label", textAnchor: "middle", children: label }, i)),
6382
6401
  entries.map(([key], di) => {
6383
6402
  const palette = getPalette(LINE_BAR_PALETTES, di, key);
6384
6403
  const color = palette[2];
@@ -6571,7 +6590,7 @@ Chip.displayName = "Chip";
6571
6590
  var Chip_default = Chip;
6572
6591
 
6573
6592
  // src/components/DatePicker/InputDatePicker/index.tsx
6574
- import React10 from "react";
6593
+ import React11 from "react";
6575
6594
 
6576
6595
  // src/components/Input/Input.tsx
6577
6596
  import React6 from "react";
@@ -6761,15 +6780,33 @@ PasswordInput.displayName = "PasswordInput";
6761
6780
  var PasswordInput_default = PasswordInput;
6762
6781
 
6763
6782
  // src/components/Modal/Modal.tsx
6764
- import React8 from "react";
6783
+ import React9 from "react";
6765
6784
  import { createPortal } from "react-dom";
6785
+
6786
+ // src/tokens/hooks/Portal.tsx
6787
+ import React8 from "react";
6788
+ import ReactDOM from "react-dom";
6766
6789
  import { jsx as jsx311 } from "react/jsx-runtime";
6790
+ var PortalContainerContext = React8.createContext(null);
6791
+ var PortalProvider = ({ container, children }) => /* @__PURE__ */ jsx311(PortalContainerContext.Provider, { value: container, children });
6792
+ var Portal = ({ children }) => {
6793
+ const contextContainer = React8.useContext(PortalContainerContext);
6794
+ if (typeof document === "undefined") return null;
6795
+ const container = contextContainer ?? document.body;
6796
+ return ReactDOM.createPortal(children, container);
6797
+ };
6798
+ Portal.displayName = "Portal";
6799
+ var Portal_default = Portal;
6800
+
6801
+ // src/components/Modal/Modal.tsx
6802
+ import { jsx as jsx312 } from "react/jsx-runtime";
6767
6803
  var ANIMATION_DURATION_MS = 200;
6768
6804
  var Modal = (props) => {
6769
6805
  const { isOpen, onClose, children } = props;
6770
- const [mounted, setMounted] = React8.useState(false);
6771
- const [visible, setVisible] = React8.useState(false);
6772
- React8.useEffect(() => {
6806
+ const [mounted, setMounted] = React9.useState(false);
6807
+ const [visible, setVisible] = React9.useState(false);
6808
+ const boxRef = React9.useRef(null);
6809
+ React9.useEffect(() => {
6773
6810
  if (isOpen) {
6774
6811
  setMounted(true);
6775
6812
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -6783,19 +6820,20 @@ var Modal = (props) => {
6783
6820
  if (!mounted) return null;
6784
6821
  const stateClass = visible ? "enter" : "exit";
6785
6822
  return createPortal(
6786
- /* @__PURE__ */ jsx311(
6823
+ /* @__PURE__ */ jsx312(
6787
6824
  "div",
6788
6825
  {
6789
6826
  className: clsx_default("lib-xplat-modal", "dim", stateClass),
6790
6827
  onClick: onClose,
6791
- children: /* @__PURE__ */ jsx311(
6828
+ children: /* @__PURE__ */ jsx312(
6792
6829
  "div",
6793
6830
  {
6831
+ ref: boxRef,
6794
6832
  className: clsx_default("lib-xplat-modal", "modal-box", stateClass),
6795
6833
  role: "dialog",
6796
6834
  "aria-modal": "true",
6797
6835
  onClick: (e) => e.stopPropagation(),
6798
- children
6836
+ children: /* @__PURE__ */ jsx312(PortalProvider, { container: boxRef.current, children })
6799
6837
  }
6800
6838
  )
6801
6839
  }
@@ -6807,9 +6845,9 @@ Modal.displayName = "Modal";
6807
6845
  var Modal_default = Modal;
6808
6846
 
6809
6847
  // src/components/DatePicker/SingleDatePicker/index.tsx
6810
- import React9 from "react";
6811
- import { Fragment as Fragment2, jsx as jsx312, jsxs as jsxs200 } from "react/jsx-runtime";
6812
- var DayCell2 = React9.memo(
6848
+ import React10 from "react";
6849
+ import { Fragment as Fragment3, jsx as jsx313, jsxs as jsxs200 } from "react/jsx-runtime";
6850
+ var DayCell2 = React10.memo(
6813
6851
  ({
6814
6852
  day,
6815
6853
  disabled,
@@ -6819,7 +6857,7 @@ var DayCell2 = React9.memo(
6819
6857
  isEnd,
6820
6858
  inRange,
6821
6859
  onSelect
6822
- }) => /* @__PURE__ */ jsx312(
6860
+ }) => /* @__PURE__ */ jsx313(
6823
6861
  "button",
6824
6862
  {
6825
6863
  type: "button",
@@ -6861,26 +6899,26 @@ var SingleDatePicker = (props) => {
6861
6899
  initialYear,
6862
6900
  initialMonth
6863
6901
  );
6864
- const [pickerMode, setPickerMode] = React9.useState("days");
6865
- const [yearRangeStart, setYearRangeStart] = React9.useState(
6902
+ const [pickerMode, setPickerMode] = React10.useState("days");
6903
+ const [yearRangeStart, setYearRangeStart] = React10.useState(
6866
6904
  Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
6867
6905
  );
6868
- const minTime = React9.useMemo(
6906
+ const minTime = React10.useMemo(
6869
6907
  () => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
6870
6908
  [minDate]
6871
6909
  );
6872
- const maxTime = React9.useMemo(
6910
+ const maxTime = React10.useMemo(
6873
6911
  () => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
6874
6912
  [maxDate]
6875
6913
  );
6876
- const highlightSet = React9.useMemo(() => {
6914
+ const highlightSet = React10.useMemo(() => {
6877
6915
  const set = /* @__PURE__ */ new Set();
6878
6916
  for (const h of highlightDates) {
6879
6917
  set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
6880
6918
  }
6881
6919
  return set;
6882
6920
  }, [highlightDates]);
6883
- const handleSelect = React9.useCallback(
6921
+ const handleSelect = React10.useCallback(
6884
6922
  (date) => {
6885
6923
  onChange?.(date);
6886
6924
  },
@@ -6923,14 +6961,14 @@ var SingleDatePicker = (props) => {
6923
6961
  className: clsx_default("lib-xplat-datepicker", "single"),
6924
6962
  children: [
6925
6963
  /* @__PURE__ */ jsxs200("div", { className: "datepicker-header", children: [
6926
- /* @__PURE__ */ jsx312("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ jsx312(ChevronLeftIcon_default, {}) }),
6927
- /* @__PURE__ */ jsx312("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
6928
- /* @__PURE__ */ jsx312("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ jsx312(ChevronRightIcon_default, {}) })
6964
+ /* @__PURE__ */ jsx313("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ jsx313(ChevronLeftIcon_default, {}) }),
6965
+ /* @__PURE__ */ jsx313("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
6966
+ /* @__PURE__ */ jsx313("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ jsx313(ChevronRightIcon_default, {}) })
6929
6967
  ] }),
6930
6968
  /* @__PURE__ */ jsxs200("div", { className: "datepicker-body", children: [
6931
- pickerMode === "years" && /* @__PURE__ */ jsx312("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
6969
+ pickerMode === "years" && /* @__PURE__ */ jsx313("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
6932
6970
  const y = yearRangeStart + i;
6933
- return /* @__PURE__ */ jsx312(
6971
+ return /* @__PURE__ */ jsx313(
6934
6972
  "button",
6935
6973
  {
6936
6974
  type: "button",
@@ -6941,7 +6979,7 @@ var SingleDatePicker = (props) => {
6941
6979
  y
6942
6980
  );
6943
6981
  }) }),
6944
- pickerMode === "months" && /* @__PURE__ */ jsx312("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ jsx312(
6982
+ pickerMode === "months" && /* @__PURE__ */ jsx313("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ jsx313(
6945
6983
  "button",
6946
6984
  {
6947
6985
  type: "button",
@@ -6951,8 +6989,8 @@ var SingleDatePicker = (props) => {
6951
6989
  },
6952
6990
  i
6953
6991
  )) }),
6954
- pickerMode === "days" && /* @__PURE__ */ jsxs200(Fragment2, { children: [
6955
- /* @__PURE__ */ jsx312("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx312(
6992
+ pickerMode === "days" && /* @__PURE__ */ jsxs200(Fragment3, { children: [
6993
+ /* @__PURE__ */ jsx313("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ jsx313(
6956
6994
  "div",
6957
6995
  {
6958
6996
  className: clsx_default(
@@ -6964,7 +7002,7 @@ var SingleDatePicker = (props) => {
6964
7002
  },
6965
7003
  label
6966
7004
  )) }),
6967
- /* @__PURE__ */ jsx312("div", { className: "datepicker-grid", children: days.map((day, idx) => {
7005
+ /* @__PURE__ */ jsx313("div", { className: "datepicker-grid", children: days.map((day, idx) => {
6968
7006
  const t = day.date.getTime();
6969
7007
  const disabled = t < minTime || t > maxTime;
6970
7008
  const selected = value ? isSameDay(day.date, value) : false;
@@ -6974,7 +7012,7 @@ var SingleDatePicker = (props) => {
6974
7012
  const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
6975
7013
  const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
6976
7014
  const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
6977
- return /* @__PURE__ */ jsx312(
7015
+ return /* @__PURE__ */ jsx313(
6978
7016
  DayCell2,
6979
7017
  {
6980
7018
  day,
@@ -6999,7 +7037,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
6999
7037
  var SingleDatePicker_default = SingleDatePicker;
7000
7038
 
7001
7039
  // src/components/DatePicker/InputDatePicker/index.tsx
7002
- import { jsx as jsx313, jsxs as jsxs201 } from "react/jsx-runtime";
7040
+ import { jsx as jsx314, jsxs as jsxs201 } from "react/jsx-runtime";
7003
7041
  var formatDate = (date) => {
7004
7042
  if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
7005
7043
  const y = date.getFullYear();
@@ -7009,8 +7047,8 @@ var formatDate = (date) => {
7009
7047
  };
7010
7048
  var InputDatePicker = (props) => {
7011
7049
  const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
7012
- const [isOpen, setIsOpen] = React10.useState(false);
7013
- const [tempDate, setTempDate] = React10.useState(value ?? /* @__PURE__ */ new Date());
7050
+ const [isOpen, setIsOpen] = React11.useState(false);
7051
+ const [tempDate, setTempDate] = React11.useState(value ?? /* @__PURE__ */ new Date());
7014
7052
  const handleOpen = () => {
7015
7053
  if (disabled) return;
7016
7054
  setTempDate(value ?? /* @__PURE__ */ new Date());
@@ -7027,18 +7065,18 @@ var InputDatePicker = (props) => {
7027
7065
  setIsOpen(false);
7028
7066
  };
7029
7067
  return /* @__PURE__ */ jsxs201("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
7030
- /* @__PURE__ */ jsx313("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ jsx313(
7068
+ /* @__PURE__ */ jsx314("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ jsx314(
7031
7069
  Input_default,
7032
7070
  {
7033
7071
  value: formatDate(value),
7034
7072
  placeholder,
7035
- suffix: /* @__PURE__ */ jsx313(CalenderIcon_default, {}),
7073
+ suffix: /* @__PURE__ */ jsx314(CalenderIcon_default, {}),
7036
7074
  disabled,
7037
7075
  readOnly: true
7038
7076
  }
7039
7077
  ) }),
7040
- /* @__PURE__ */ jsx313(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs201("div", { className: "lib-xplat-popup-datepicker-card", children: [
7041
- /* @__PURE__ */ jsx313("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ jsx313(
7078
+ /* @__PURE__ */ jsx314(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs201("div", { className: "lib-xplat-popup-datepicker-card", children: [
7079
+ /* @__PURE__ */ jsx314("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ jsx314(
7042
7080
  SingleDatePicker_default,
7043
7081
  {
7044
7082
  value: tempDate,
@@ -7049,8 +7087,8 @@ var InputDatePicker = (props) => {
7049
7087
  }
7050
7088
  ) }),
7051
7089
  /* @__PURE__ */ jsxs201("div", { className: "popup-datepicker-footer", children: [
7052
- /* @__PURE__ */ jsx313(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
7053
- /* @__PURE__ */ jsx313(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
7090
+ /* @__PURE__ */ jsx314(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
7091
+ /* @__PURE__ */ jsx314(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
7054
7092
  ] })
7055
7093
  ] }) })
7056
7094
  ] });
@@ -7059,20 +7097,20 @@ InputDatePicker.displayName = "InputDatePicker";
7059
7097
  var InputDatePicker_default = InputDatePicker;
7060
7098
 
7061
7099
  // src/components/DatePicker/PopupPicker/index.tsx
7062
- import React14 from "react";
7100
+ import React15 from "react";
7063
7101
 
7064
7102
  // src/components/DatePicker/RangePicker/index.tsx
7065
- import React13 from "react";
7103
+ import React14 from "react";
7066
7104
 
7067
7105
  // src/components/Tab/Tab.tsx
7068
- import React12 from "react";
7106
+ import React13 from "react";
7069
7107
 
7070
7108
  // src/components/Tab/TabItem.tsx
7071
- import React11 from "react";
7072
- import { jsx as jsx314 } from "react/jsx-runtime";
7073
- var TabItem = React11.forwardRef((props, ref) => {
7109
+ import React12 from "react";
7110
+ import { jsx as jsx315 } from "react/jsx-runtime";
7111
+ var TabItem = React12.forwardRef((props, ref) => {
7074
7112
  const { isActive, title, onClick } = props;
7075
- return /* @__PURE__ */ jsx314(
7113
+ return /* @__PURE__ */ jsx315(
7076
7114
  "div",
7077
7115
  {
7078
7116
  ref,
@@ -7086,25 +7124,25 @@ TabItem.displayName = "TabItem";
7086
7124
  var TabItem_default = TabItem;
7087
7125
 
7088
7126
  // src/components/Tab/Tab.tsx
7089
- import { jsx as jsx315, jsxs as jsxs202 } from "react/jsx-runtime";
7127
+ import { jsx as jsx316, jsxs as jsxs202 } from "react/jsx-runtime";
7090
7128
  var Tab = (props) => {
7091
7129
  const { activeIndex, onChange, tabs, type, size = "md" } = props;
7092
- const [underlineStyle, setUnderlineStyle] = React12.useState({
7130
+ const [underlineStyle, setUnderlineStyle] = React13.useState({
7093
7131
  left: 0,
7094
7132
  width: 0
7095
7133
  });
7096
- const itemRefs = React12.useRef([]);
7134
+ const itemRefs = React13.useRef([]);
7097
7135
  const handleChangeActiveTab = (tabItem, tabIdx) => {
7098
7136
  onChange(tabItem, tabIdx);
7099
7137
  };
7100
- React12.useEffect(() => {
7138
+ React13.useEffect(() => {
7101
7139
  const el = itemRefs.current[activeIndex];
7102
7140
  if (el) {
7103
7141
  setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
7104
7142
  }
7105
7143
  }, [activeIndex, tabs.length]);
7106
7144
  return /* @__PURE__ */ jsxs202("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
7107
- tabs.map((tab, idx) => /* @__PURE__ */ jsx315(
7145
+ tabs.map((tab, idx) => /* @__PURE__ */ jsx316(
7108
7146
  TabItem_default,
7109
7147
  {
7110
7148
  onClick: () => handleChangeActiveTab(tab, idx),
@@ -7116,7 +7154,7 @@ var Tab = (props) => {
7116
7154
  },
7117
7155
  `${tab.value}_${idx}`
7118
7156
  )),
7119
- type === "toggle" && /* @__PURE__ */ jsx315(
7157
+ type === "toggle" && /* @__PURE__ */ jsx316(
7120
7158
  "div",
7121
7159
  {
7122
7160
  className: "tab-toggle-underline",
@@ -7132,7 +7170,7 @@ Tab.displayName = "Tab";
7132
7170
  var Tab_default = Tab;
7133
7171
 
7134
7172
  // src/components/DatePicker/RangePicker/index.tsx
7135
- import { jsx as jsx316, jsxs as jsxs203 } from "react/jsx-runtime";
7173
+ import { jsx as jsx317, jsxs as jsxs203 } from "react/jsx-runtime";
7136
7174
  var RangePicker = (props) => {
7137
7175
  const {
7138
7176
  startDate,
@@ -7142,7 +7180,7 @@ var RangePicker = (props) => {
7142
7180
  maxDate,
7143
7181
  locale = "ko"
7144
7182
  } = props;
7145
- const [activeTab, setActiveTab] = React13.useState("start");
7183
+ const [activeTab, setActiveTab] = React14.useState("start");
7146
7184
  const handleStartChange = (date) => {
7147
7185
  if (!date) return;
7148
7186
  const newStart = date > endDate ? endDate : date;
@@ -7156,7 +7194,7 @@ var RangePicker = (props) => {
7156
7194
  const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
7157
7195
  const endMinDate = minDate && startDate > minDate ? startDate : startDate;
7158
7196
  return /* @__PURE__ */ jsxs203("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
7159
- /* @__PURE__ */ jsx316("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ jsx316(
7197
+ /* @__PURE__ */ jsx317("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ jsx317(
7160
7198
  Tab_default,
7161
7199
  {
7162
7200
  activeIndex: activeTab === "start" ? 0 : 1,
@@ -7170,7 +7208,7 @@ var RangePicker = (props) => {
7170
7208
  }
7171
7209
  ) }),
7172
7210
  /* @__PURE__ */ jsxs203("div", { className: "datepicker-range-panels", children: [
7173
- /* @__PURE__ */ jsx316(
7211
+ /* @__PURE__ */ jsx317(
7174
7212
  SingleDatePicker_default,
7175
7213
  {
7176
7214
  value: startDate,
@@ -7182,7 +7220,7 @@ var RangePicker = (props) => {
7182
7220
  locale
7183
7221
  }
7184
7222
  ),
7185
- /* @__PURE__ */ jsx316(
7223
+ /* @__PURE__ */ jsx317(
7186
7224
  SingleDatePicker_default,
7187
7225
  {
7188
7226
  value: endDate,
@@ -7195,7 +7233,7 @@ var RangePicker = (props) => {
7195
7233
  }
7196
7234
  )
7197
7235
  ] }),
7198
- /* @__PURE__ */ jsx316("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ jsx316(
7236
+ /* @__PURE__ */ jsx317("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ jsx317(
7199
7237
  SingleDatePicker_default,
7200
7238
  {
7201
7239
  value: startDate,
@@ -7206,7 +7244,7 @@ var RangePicker = (props) => {
7206
7244
  rangeEnd: endDate,
7207
7245
  locale
7208
7246
  }
7209
- ) : /* @__PURE__ */ jsx316(
7247
+ ) : /* @__PURE__ */ jsx317(
7210
7248
  SingleDatePicker_default,
7211
7249
  {
7212
7250
  value: endDate,
@@ -7224,10 +7262,10 @@ RangePicker.displayName = "RangePicker";
7224
7262
  var RangePicker_default = RangePicker;
7225
7263
 
7226
7264
  // src/components/DatePicker/PopupPicker/index.tsx
7227
- import { jsx as jsx317, jsxs as jsxs204 } from "react/jsx-runtime";
7265
+ import { jsx as jsx318, jsxs as jsxs204 } from "react/jsx-runtime";
7228
7266
  var PopupPicker = (props) => {
7229
7267
  const { component, type, locale } = props;
7230
- const [isOpen, setIsOpen] = React14.useState(false);
7268
+ const [isOpen, setIsOpen] = React15.useState(false);
7231
7269
  const handleClick = () => setIsOpen(true);
7232
7270
  const handleClose = () => setIsOpen(false);
7233
7271
  const handleSingleChange = (date) => {
@@ -7236,10 +7274,10 @@ var PopupPicker = (props) => {
7236
7274
  handleClose();
7237
7275
  };
7238
7276
  return /* @__PURE__ */ jsxs204("div", { className: "lib-xplat-popup-datepicker", children: [
7239
- React14.cloneElement(component, { onClick: handleClick }),
7240
- /* @__PURE__ */ jsx317(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs204("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
7277
+ React15.cloneElement(component, { onClick: handleClick }),
7278
+ /* @__PURE__ */ jsx318(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ jsxs204("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
7241
7279
  /* @__PURE__ */ jsxs204("div", { className: "popup-datepicker-content", children: [
7242
- type === "single" && /* @__PURE__ */ jsx317(
7280
+ type === "single" && /* @__PURE__ */ jsx318(
7243
7281
  SingleDatePicker_default,
7244
7282
  {
7245
7283
  value: props.value,
@@ -7249,7 +7287,7 @@ var PopupPicker = (props) => {
7249
7287
  locale
7250
7288
  }
7251
7289
  ),
7252
- type === "range" && /* @__PURE__ */ jsx317(
7290
+ type === "range" && /* @__PURE__ */ jsx318(
7253
7291
  RangePicker_default,
7254
7292
  {
7255
7293
  startDate: props.startDate,
@@ -7262,7 +7300,7 @@ var PopupPicker = (props) => {
7262
7300
  )
7263
7301
  ] }),
7264
7302
  /* @__PURE__ */ jsxs204("div", { className: "popup-datepicker-footer", children: [
7265
- /* @__PURE__ */ jsx317(
7303
+ /* @__PURE__ */ jsx318(
7266
7304
  Button_default,
7267
7305
  {
7268
7306
  type: "secondary",
@@ -7270,7 +7308,7 @@ var PopupPicker = (props) => {
7270
7308
  children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
7271
7309
  }
7272
7310
  ),
7273
- /* @__PURE__ */ jsx317(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
7311
+ /* @__PURE__ */ jsx318(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
7274
7312
  ] })
7275
7313
  ] }) })
7276
7314
  ] });
@@ -7279,10 +7317,10 @@ PopupPicker.displayName = "PopupPicker";
7279
7317
  var PopupPicker_default = PopupPicker;
7280
7318
 
7281
7319
  // src/components/Divider/Divider.tsx
7282
- import { jsx as jsx318 } from "react/jsx-runtime";
7320
+ import { jsx as jsx319 } from "react/jsx-runtime";
7283
7321
  var Divider = (props) => {
7284
7322
  const { orientation = "horizontal" } = props;
7285
- return /* @__PURE__ */ jsx318(
7323
+ return /* @__PURE__ */ jsx319(
7286
7324
  "div",
7287
7325
  {
7288
7326
  className: clsx_default("lib-xplat-divider", orientation),
@@ -7295,15 +7333,15 @@ Divider.displayName = "Divider";
7295
7333
  var Divider_default = Divider;
7296
7334
 
7297
7335
  // src/components/Drawer/Drawer.tsx
7298
- import React15 from "react";
7336
+ import React16 from "react";
7299
7337
  import { createPortal as createPortal2 } from "react-dom";
7300
- import { jsx as jsx319, jsxs as jsxs205 } from "react/jsx-runtime";
7338
+ import { jsx as jsx320, jsxs as jsxs205 } from "react/jsx-runtime";
7301
7339
  var ANIMATION_DURATION_MS2 = 250;
7302
7340
  var Drawer = (props) => {
7303
7341
  const { isOpen, onClose, placement = "right", width = 320, title, children } = props;
7304
- const [mounted, setMounted] = React15.useState(false);
7305
- const [visible, setVisible] = React15.useState(false);
7306
- React15.useEffect(() => {
7342
+ const [mounted, setMounted] = React16.useState(false);
7343
+ const [visible, setVisible] = React16.useState(false);
7344
+ React16.useEffect(() => {
7307
7345
  if (isOpen) {
7308
7346
  setMounted(true);
7309
7347
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -7318,7 +7356,7 @@ var Drawer = (props) => {
7318
7356
  const stateClass = visible ? "enter" : "exit";
7319
7357
  const widthValue = typeof width === "number" ? `${width}px` : width;
7320
7358
  return createPortal2(
7321
- /* @__PURE__ */ jsx319(
7359
+ /* @__PURE__ */ jsx320(
7322
7360
  "div",
7323
7361
  {
7324
7362
  className: clsx_default("lib-xplat-drawer-overlay", stateClass),
@@ -7333,10 +7371,10 @@ var Drawer = (props) => {
7333
7371
  onClick: (e) => e.stopPropagation(),
7334
7372
  children: [
7335
7373
  title && /* @__PURE__ */ jsxs205("div", { className: "drawer-header", children: [
7336
- /* @__PURE__ */ jsx319("span", { className: "drawer-title", children: title }),
7337
- /* @__PURE__ */ jsx319("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
7374
+ /* @__PURE__ */ jsx320("span", { className: "drawer-title", children: title }),
7375
+ /* @__PURE__ */ jsx320("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
7338
7376
  ] }),
7339
- /* @__PURE__ */ jsx319("div", { className: "drawer-body", children })
7377
+ /* @__PURE__ */ jsx320("div", { className: "drawer-body", children })
7340
7378
  ]
7341
7379
  }
7342
7380
  )
@@ -7349,16 +7387,16 @@ Drawer.displayName = "Drawer";
7349
7387
  var Drawer_default = Drawer;
7350
7388
 
7351
7389
  // src/components/Dropdown/Dropdown.tsx
7352
- import React18 from "react";
7390
+ import React19 from "react";
7353
7391
 
7354
7392
  // src/tokens/hooks/useAutoPosition.ts
7355
- import React16 from "react";
7393
+ import React17 from "react";
7356
7394
  var useAutoPosition = (triggerRef, popRef, enabled = true) => {
7357
- const [position, setPosition] = React16.useState({
7395
+ const [position, setPosition] = React17.useState({
7358
7396
  position: {},
7359
7397
  direction: "bottom"
7360
7398
  });
7361
- const calculatePosition = React16.useCallback(() => {
7399
+ const calculatePosition = React17.useCallback(() => {
7362
7400
  if (!triggerRef.current || !popRef.current) return;
7363
7401
  const triggerRect = triggerRef.current.getBoundingClientRect();
7364
7402
  const popRect = popRef.current.getBoundingClientRect();
@@ -7382,9 +7420,12 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
7382
7420
  direction
7383
7421
  });
7384
7422
  }, [triggerRef, popRef]);
7385
- React16.useEffect(() => {
7423
+ React17.useLayoutEffect(() => {
7386
7424
  if (!enabled) return;
7387
7425
  calculatePosition();
7426
+ }, [calculatePosition, enabled]);
7427
+ React17.useEffect(() => {
7428
+ if (!enabled) return;
7388
7429
  window.addEventListener("resize", calculatePosition);
7389
7430
  window.addEventListener("scroll", calculatePosition, true);
7390
7431
  return () => {
@@ -7397,9 +7438,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
7397
7438
  var useAutoPosition_default = useAutoPosition;
7398
7439
 
7399
7440
  // src/tokens/hooks/useClickOutside.ts
7400
- import React17 from "react";
7441
+ import React18 from "react";
7401
7442
  var useClickOutside = (refs, handler, enabled = true) => {
7402
- React17.useEffect(() => {
7443
+ React18.useEffect(() => {
7403
7444
  if (!enabled) return;
7404
7445
  const refArray = Array.isArray(refs) ? refs : [refs];
7405
7446
  const listener = (event) => {
@@ -7422,17 +7463,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
7422
7463
  var useClickOutside_default = useClickOutside;
7423
7464
 
7424
7465
  // src/components/Dropdown/Dropdown.tsx
7425
- import { jsx as jsx320, jsxs as jsxs206 } from "react/jsx-runtime";
7466
+ import { jsx as jsx321, jsxs as jsxs206 } from "react/jsx-runtime";
7426
7467
  var Dropdown = (props) => {
7427
7468
  const { items, children } = props;
7428
- const [isOpen, setIsOpen] = React18.useState(false);
7429
- const [mounted, setMounted] = React18.useState(false);
7430
- const [visible, setVisible] = React18.useState(false);
7431
- const triggerRef = React18.useRef(null);
7432
- const menuRef = React18.useRef(null);
7433
- const { position, direction } = useAutoPosition_default(triggerRef, menuRef, isOpen);
7434
- useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false));
7435
- React18.useEffect(() => {
7469
+ const [isOpen, setIsOpen] = React19.useState(false);
7470
+ const [mounted, setMounted] = React19.useState(false);
7471
+ const [visible, setVisible] = React19.useState(false);
7472
+ const triggerRef = React19.useRef(null);
7473
+ const menuRef = React19.useRef(null);
7474
+ const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
7475
+ useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
7476
+ React19.useEffect(() => {
7436
7477
  if (isOpen) {
7437
7478
  setMounted(true);
7438
7479
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -7448,7 +7489,7 @@ var Dropdown = (props) => {
7448
7489
  setIsOpen(false);
7449
7490
  };
7450
7491
  return /* @__PURE__ */ jsxs206("div", { className: "lib-xplat-dropdown", children: [
7451
- /* @__PURE__ */ jsx320(
7492
+ /* @__PURE__ */ jsx321(
7452
7493
  "div",
7453
7494
  {
7454
7495
  ref: triggerRef,
@@ -7457,14 +7498,14 @@ var Dropdown = (props) => {
7457
7498
  children
7458
7499
  }
7459
7500
  ),
7460
- mounted && /* @__PURE__ */ jsx320(
7501
+ mounted && /* @__PURE__ */ jsx321(Portal_default, { children: /* @__PURE__ */ jsx321(
7461
7502
  "div",
7462
7503
  {
7463
7504
  ref: menuRef,
7464
- className: clsx_default("dropdown-menu", direction, { visible }),
7505
+ className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
7465
7506
  style: { top: position.top, left: position.left },
7466
7507
  role: "menu",
7467
- children: items.map((item) => /* @__PURE__ */ jsx320(
7508
+ children: items.map((item) => /* @__PURE__ */ jsx321(
7468
7509
  "button",
7469
7510
  {
7470
7511
  className: clsx_default("dropdown-item", {
@@ -7479,30 +7520,30 @@ var Dropdown = (props) => {
7479
7520
  item.key
7480
7521
  ))
7481
7522
  }
7482
- )
7523
+ ) })
7483
7524
  ] });
7484
7525
  };
7485
7526
  Dropdown.displayName = "Dropdown";
7486
7527
  var Dropdown_default = Dropdown;
7487
7528
 
7488
7529
  // src/components/EmptyState/EmptyState.tsx
7489
- import { jsx as jsx321, jsxs as jsxs207 } from "react/jsx-runtime";
7530
+ import { jsx as jsx322, jsxs as jsxs207 } from "react/jsx-runtime";
7490
7531
  var EmptyState = (props) => {
7491
7532
  const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
7492
7533
  return /* @__PURE__ */ jsxs207("div", { className: "lib-xplat-empty-state", children: [
7493
- icon && /* @__PURE__ */ jsx321("div", { className: "empty-icon", children: icon }),
7494
- !icon && /* @__PURE__ */ jsx321("div", { className: "empty-icon", children: /* @__PURE__ */ jsx321("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx321("path", { d: "M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" }) }) }),
7495
- /* @__PURE__ */ jsx321("p", { className: "empty-title", children: title }),
7496
- description && /* @__PURE__ */ jsx321("p", { className: "empty-description", children: description }),
7497
- action && /* @__PURE__ */ jsx321("div", { className: "empty-action", children: action })
7534
+ icon && /* @__PURE__ */ jsx322("div", { className: "empty-icon", children: icon }),
7535
+ !icon && /* @__PURE__ */ jsx322("div", { className: "empty-icon", children: /* @__PURE__ */ jsx322("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx322("path", { d: "M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" }) }) }),
7536
+ /* @__PURE__ */ jsx322("p", { className: "empty-title", children: title }),
7537
+ description && /* @__PURE__ */ jsx322("p", { className: "empty-description", children: description }),
7538
+ action && /* @__PURE__ */ jsx322("div", { className: "empty-action", children: action })
7498
7539
  ] });
7499
7540
  };
7500
7541
  EmptyState.displayName = "EmptyState";
7501
7542
  var EmptyState_default = EmptyState;
7502
7543
 
7503
7544
  // src/components/FileUpload/FileUpload.tsx
7504
- import React19 from "react";
7505
- import { jsx as jsx322, jsxs as jsxs208 } from "react/jsx-runtime";
7545
+ import React20 from "react";
7546
+ import { jsx as jsx323, jsxs as jsxs208 } from "react/jsx-runtime";
7506
7547
  var FileUpload = (props) => {
7507
7548
  const {
7508
7549
  accept,
@@ -7512,8 +7553,8 @@ var FileUpload = (props) => {
7512
7553
  label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
7513
7554
  description
7514
7555
  } = props;
7515
- const [isDragOver, setIsDragOver] = React19.useState(false);
7516
- const inputRef = React19.useRef(null);
7556
+ const [isDragOver, setIsDragOver] = React20.useState(false);
7557
+ const inputRef = React20.useRef(null);
7517
7558
  const handleFiles = (fileList) => {
7518
7559
  let files = Array.from(fileList);
7519
7560
  if (maxSize) {
@@ -7552,7 +7593,7 @@ var FileUpload = (props) => {
7552
7593
  onDragLeave: handleDragLeave,
7553
7594
  onClick: () => inputRef.current?.click(),
7554
7595
  children: [
7555
- /* @__PURE__ */ jsx322(
7596
+ /* @__PURE__ */ jsx323(
7556
7597
  "input",
7557
7598
  {
7558
7599
  ref: inputRef,
@@ -7562,9 +7603,9 @@ var FileUpload = (props) => {
7562
7603
  onChange: handleChange
7563
7604
  }
7564
7605
  ),
7565
- /* @__PURE__ */ jsx322("div", { className: "upload-icon", children: /* @__PURE__ */ jsx322(UploadIcon_default, {}) }),
7566
- /* @__PURE__ */ jsx322("p", { className: "upload-label", children: label }),
7567
- description && /* @__PURE__ */ jsx322("p", { className: "upload-description", children: description })
7606
+ /* @__PURE__ */ jsx323("div", { className: "upload-icon", children: /* @__PURE__ */ jsx323(UploadIcon_default, {}) }),
7607
+ /* @__PURE__ */ jsx323("p", { className: "upload-label", children: label }),
7608
+ description && /* @__PURE__ */ jsx323("p", { className: "upload-description", children: description })
7568
7609
  ]
7569
7610
  }
7570
7611
  );
@@ -7573,10 +7614,10 @@ FileUpload.displayName = "FileUpload";
7573
7614
  var FileUpload_default = FileUpload;
7574
7615
 
7575
7616
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
7576
- import React21 from "react";
7617
+ import React22 from "react";
7577
7618
 
7578
7619
  // src/components/HtmlTypeWriter/utils.ts
7579
- import React20 from "react";
7620
+ import React21 from "react";
7580
7621
  var voidTags = /* @__PURE__ */ new Set([
7581
7622
  "br",
7582
7623
  "img",
@@ -7644,41 +7685,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
7644
7685
  props[attr.name] = attr.value;
7645
7686
  });
7646
7687
  if (voidTags.has(tag)) {
7647
- return React20.createElement(tag, props);
7688
+ return React21.createElement(tag, props);
7648
7689
  }
7649
7690
  const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
7650
- return React20.createElement(tag, props, ...children);
7691
+ return React21.createElement(tag, props, ...children);
7651
7692
  };
7652
7693
  var htmlToReactProgressive = (root, typedLen, rangeMap) => {
7653
7694
  const nodes = Array.from(root.childNodes).map((child, idx) => {
7654
7695
  const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
7655
- return node == null ? null : React20.createElement(React20.Fragment, { key: idx }, node);
7696
+ return node == null ? null : React21.createElement(React21.Fragment, { key: idx }, node);
7656
7697
  }).filter(Boolean);
7657
7698
  return nodes.length === 0 ? null : nodes;
7658
7699
  };
7659
7700
 
7660
7701
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
7661
- import { jsx as jsx323 } from "react/jsx-runtime";
7702
+ import { jsx as jsx324 } from "react/jsx-runtime";
7662
7703
  var HtmlTypeWriter = ({
7663
7704
  html,
7664
7705
  duration = 20,
7665
7706
  onDone,
7666
7707
  onChange
7667
7708
  }) => {
7668
- const [typedLen, setTypedLen] = React21.useState(0);
7669
- const doneCalledRef = React21.useRef(false);
7670
- const { doc, rangeMap, totalLength } = React21.useMemo(() => {
7709
+ const [typedLen, setTypedLen] = React22.useState(0);
7710
+ const doneCalledRef = React22.useRef(false);
7711
+ const { doc, rangeMap, totalLength } = React22.useMemo(() => {
7671
7712
  if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
7672
7713
  const decoded = decodeHtmlEntities(html);
7673
7714
  const doc2 = new DOMParser().parseFromString(decoded, "text/html");
7674
7715
  const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
7675
7716
  return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
7676
7717
  }, [html]);
7677
- React21.useEffect(() => {
7718
+ React22.useEffect(() => {
7678
7719
  setTypedLen(0);
7679
7720
  doneCalledRef.current = false;
7680
7721
  }, [html]);
7681
- React21.useEffect(() => {
7722
+ React22.useEffect(() => {
7682
7723
  if (!totalLength) return;
7683
7724
  if (typedLen >= totalLength) return;
7684
7725
  const timer = window.setInterval(() => {
@@ -7686,33 +7727,33 @@ var HtmlTypeWriter = ({
7686
7727
  }, duration);
7687
7728
  return () => window.clearInterval(timer);
7688
7729
  }, [typedLen, totalLength, duration]);
7689
- React21.useEffect(() => {
7730
+ React22.useEffect(() => {
7690
7731
  if (typedLen > 0 && typedLen < totalLength) {
7691
7732
  onChange?.();
7692
7733
  }
7693
7734
  }, [typedLen, totalLength, onChange]);
7694
- React21.useEffect(() => {
7735
+ React22.useEffect(() => {
7695
7736
  if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
7696
7737
  doneCalledRef.current = true;
7697
7738
  onDone?.();
7698
7739
  }
7699
7740
  }, [typedLen, totalLength, onDone]);
7700
- const parsed = React21.useMemo(
7741
+ const parsed = React22.useMemo(
7701
7742
  () => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
7702
7743
  [doc, typedLen, rangeMap]
7703
7744
  );
7704
- return /* @__PURE__ */ jsx323("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
7745
+ return /* @__PURE__ */ jsx324("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
7705
7746
  };
7706
7747
  HtmlTypeWriter.displayName = "HtmlTypeWriter";
7707
7748
  var HtmlTypeWriter_default = HtmlTypeWriter;
7708
7749
 
7709
7750
  // src/components/ImageSelector/ImageSelector.tsx
7710
- import React22 from "react";
7711
- import { jsx as jsx324, jsxs as jsxs209 } from "react/jsx-runtime";
7751
+ import React23 from "react";
7752
+ import { jsx as jsx325, jsxs as jsxs209 } from "react/jsx-runtime";
7712
7753
  var ImageSelector = (props) => {
7713
7754
  const { value, label, onChange } = props;
7714
- const [previewUrl, setPreviewUrl] = React22.useState();
7715
- React22.useEffect(() => {
7755
+ const [previewUrl, setPreviewUrl] = React23.useState();
7756
+ React23.useEffect(() => {
7716
7757
  if (!value) {
7717
7758
  setPreviewUrl(void 0);
7718
7759
  return;
@@ -7721,7 +7762,7 @@ var ImageSelector = (props) => {
7721
7762
  setPreviewUrl(url);
7722
7763
  return () => URL.revokeObjectURL(url);
7723
7764
  }, [value]);
7724
- const inputRef = React22.useRef(null);
7765
+ const inputRef = React23.useRef(null);
7725
7766
  const handleFileChange = (e) => {
7726
7767
  const selectedFile = e.target.files?.[0];
7727
7768
  if (selectedFile) {
@@ -7735,7 +7776,7 @@ var ImageSelector = (props) => {
7735
7776
  inputRef.current?.click();
7736
7777
  };
7737
7778
  return /* @__PURE__ */ jsxs209("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
7738
- /* @__PURE__ */ jsx324(
7779
+ /* @__PURE__ */ jsx325(
7739
7780
  "input",
7740
7781
  {
7741
7782
  type: "file",
@@ -7746,12 +7787,12 @@ var ImageSelector = (props) => {
7746
7787
  }
7747
7788
  ),
7748
7789
  value && /* @__PURE__ */ jsxs209("div", { className: "action-bar", children: [
7749
- /* @__PURE__ */ jsx324("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ jsx324(UploadIcon_default, {}) }),
7750
- /* @__PURE__ */ jsx324("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ jsx324(DeleteIcon_default, {}) })
7790
+ /* @__PURE__ */ jsx325("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ jsx325(UploadIcon_default, {}) }),
7791
+ /* @__PURE__ */ jsx325("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ jsx325(DeleteIcon_default, {}) })
7751
7792
  ] }),
7752
- /* @__PURE__ */ jsx324("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx324("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs209("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
7753
- /* @__PURE__ */ jsx324("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx324(ImageIcon_default, {}) }),
7754
- /* @__PURE__ */ jsx324("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
7793
+ /* @__PURE__ */ jsx325("div", { className: "content", children: previewUrl ? /* @__PURE__ */ jsx325("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ jsxs209("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
7794
+ /* @__PURE__ */ jsx325("div", { className: "icon-wrapper", children: /* @__PURE__ */ jsx325(ImageIcon_default, {}) }),
7795
+ /* @__PURE__ */ jsx325("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
7755
7796
  ] }) })
7756
7797
  ] });
7757
7798
  };
@@ -7759,7 +7800,7 @@ ImageSelector.displayName = "ImageSelector";
7759
7800
  var ImageSelector_default = ImageSelector;
7760
7801
 
7761
7802
  // src/components/Pagination/Pagination.tsx
7762
- import { jsx as jsx325, jsxs as jsxs210 } from "react/jsx-runtime";
7803
+ import { jsx as jsx326, jsxs as jsxs210 } from "react/jsx-runtime";
7763
7804
  var getPageRange = (current, totalPages, siblingCount) => {
7764
7805
  const totalNumbers = siblingCount * 2 + 5;
7765
7806
  if (totalPages <= totalNumbers) {
@@ -7803,18 +7844,18 @@ var Pagination = (props) => {
7803
7844
  }
7804
7845
  };
7805
7846
  return /* @__PURE__ */ jsxs210("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
7806
- /* @__PURE__ */ jsx325(
7847
+ /* @__PURE__ */ jsx326(
7807
7848
  "button",
7808
7849
  {
7809
7850
  className: "page-btn prev",
7810
7851
  disabled: current <= 1,
7811
7852
  onClick: () => handleClick(current - 1),
7812
7853
  "aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
7813
- children: /* @__PURE__ */ jsx325(ChevronLeftIcon_default, {})
7854
+ children: /* @__PURE__ */ jsx326(ChevronLeftIcon_default, {})
7814
7855
  }
7815
7856
  ),
7816
7857
  pages.map(
7817
- (page, i) => page === "..." ? /* @__PURE__ */ jsx325("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ jsx325(
7858
+ (page, i) => page === "..." ? /* @__PURE__ */ jsx326("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ jsx326(
7818
7859
  "button",
7819
7860
  {
7820
7861
  className: clsx_default("page-btn", { active: page === current }),
@@ -7825,14 +7866,14 @@ var Pagination = (props) => {
7825
7866
  page
7826
7867
  )
7827
7868
  ),
7828
- /* @__PURE__ */ jsx325(
7869
+ /* @__PURE__ */ jsx326(
7829
7870
  "button",
7830
7871
  {
7831
7872
  className: "page-btn next",
7832
7873
  disabled: current >= totalPages,
7833
7874
  onClick: () => handleClick(current + 1),
7834
7875
  "aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
7835
- children: /* @__PURE__ */ jsx325(ChevronRightIcon_default, {})
7876
+ children: /* @__PURE__ */ jsx326(ChevronRightIcon_default, {})
7836
7877
  }
7837
7878
  )
7838
7879
  ] });
@@ -7841,17 +7882,17 @@ Pagination.displayName = "Pagination";
7841
7882
  var Pagination_default = Pagination;
7842
7883
 
7843
7884
  // src/components/PopOver/PopOver.tsx
7844
- import React23 from "react";
7845
- import { jsx as jsx326, jsxs as jsxs211 } from "react/jsx-runtime";
7885
+ import React24 from "react";
7886
+ import { jsx as jsx327, jsxs as jsxs211 } from "react/jsx-runtime";
7846
7887
  var PopOver = (props) => {
7847
7888
  const { children, isOpen, onClose, PopOverEl } = props;
7848
- const popRef = React23.useRef(null);
7849
- const triggerRef = React23.useRef(null);
7850
- const [localOpen, setLocalOpen] = React23.useState(false);
7851
- const [eventTrigger, setEventTrigger] = React23.useState(false);
7889
+ const popRef = React24.useRef(null);
7890
+ const triggerRef = React24.useRef(null);
7891
+ const [localOpen, setLocalOpen] = React24.useState(false);
7892
+ const [eventTrigger, setEventTrigger] = React24.useState(false);
7852
7893
  useClickOutside_default([popRef, triggerRef], onClose, isOpen);
7853
7894
  const position = useAutoPosition_default(triggerRef, popRef, localOpen);
7854
- React23.useEffect(() => {
7895
+ React24.useEffect(() => {
7855
7896
  if (isOpen) {
7856
7897
  setLocalOpen(isOpen);
7857
7898
  setTimeout(() => {
@@ -7874,11 +7915,11 @@ var PopOver = (props) => {
7874
7915
  },
7875
7916
  children: [
7876
7917
  children,
7877
- localOpen && /* @__PURE__ */ jsx326(
7918
+ localOpen && /* @__PURE__ */ jsx327(Portal_default, { children: /* @__PURE__ */ jsx327(
7878
7919
  "div",
7879
7920
  {
7880
7921
  className: clsx_default(
7881
- "content-wrap",
7922
+ "lib-xplat-pop-over-content",
7882
7923
  position.direction,
7883
7924
  eventTrigger && "visible"
7884
7925
  ),
@@ -7888,7 +7929,7 @@ var PopOver = (props) => {
7888
7929
  },
7889
7930
  children: PopOverEl
7890
7931
  }
7891
- )
7932
+ ) })
7892
7933
  ]
7893
7934
  }
7894
7935
  );
@@ -7897,7 +7938,7 @@ PopOver.displayName = "PopOver";
7897
7938
  var PopOver_default = PopOver;
7898
7939
 
7899
7940
  // src/components/Progress/Progress.tsx
7900
- import { jsx as jsx327, jsxs as jsxs212 } from "react/jsx-runtime";
7941
+ import { jsx as jsx328, jsxs as jsxs212 } from "react/jsx-runtime";
7901
7942
  var Progress = (props) => {
7902
7943
  const {
7903
7944
  value,
@@ -7908,7 +7949,7 @@ var Progress = (props) => {
7908
7949
  } = props;
7909
7950
  const percentage = Math.min(100, Math.max(0, value / max * 100));
7910
7951
  return /* @__PURE__ */ jsxs212("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
7911
- /* @__PURE__ */ jsx327(
7952
+ /* @__PURE__ */ jsx328(
7912
7953
  "div",
7913
7954
  {
7914
7955
  className: "track",
@@ -7916,7 +7957,7 @@ var Progress = (props) => {
7916
7957
  "aria-valuenow": value,
7917
7958
  "aria-valuemin": 0,
7918
7959
  "aria-valuemax": max,
7919
- children: /* @__PURE__ */ jsx327(
7960
+ children: /* @__PURE__ */ jsx328(
7920
7961
  "div",
7921
7962
  {
7922
7963
  className: "bar",
@@ -7935,17 +7976,17 @@ Progress.displayName = "Progress";
7935
7976
  var Progress_default = Progress;
7936
7977
 
7937
7978
  // src/components/Radio/RadioGroupContext.tsx
7938
- import React24 from "react";
7939
- var RadioGroupContext = React24.createContext(
7979
+ import React25 from "react";
7980
+ var RadioGroupContext = React25.createContext(
7940
7981
  null
7941
7982
  );
7942
7983
  var useRadioGroupContext = () => {
7943
- return React24.useContext(RadioGroupContext);
7984
+ return React25.useContext(RadioGroupContext);
7944
7985
  };
7945
7986
  var RadioGroupContext_default = RadioGroupContext;
7946
7987
 
7947
7988
  // src/components/Radio/Radio.tsx
7948
- import { jsx as jsx328, jsxs as jsxs213 } from "react/jsx-runtime";
7989
+ import { jsx as jsx329, jsxs as jsxs213 } from "react/jsx-runtime";
7949
7990
  var Radio = (props) => {
7950
7991
  const {
7951
7992
  label,
@@ -7973,18 +8014,18 @@ var Radio = (props) => {
7973
8014
  localChecked ? "checked" : void 0
7974
8015
  ),
7975
8016
  children: [
7976
- /* @__PURE__ */ jsx328("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
7977
- /* @__PURE__ */ jsx328(
8017
+ /* @__PURE__ */ jsx329("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
8018
+ /* @__PURE__ */ jsx329(
7978
8019
  "div",
7979
8020
  {
7980
8021
  className: clsx_default(
7981
8022
  "circle",
7982
8023
  localChecked ? "checked" : void 0
7983
8024
  ),
7984
- children: localChecked && /* @__PURE__ */ jsx328("div", { className: "inner-circle" })
8025
+ children: localChecked && /* @__PURE__ */ jsx329("div", { className: "inner-circle" })
7985
8026
  }
7986
8027
  ),
7987
- label && /* @__PURE__ */ jsx328("span", { children: label })
8028
+ label && /* @__PURE__ */ jsx329("span", { children: label })
7988
8029
  ]
7989
8030
  }
7990
8031
  );
@@ -7993,28 +8034,28 @@ Radio.displayName = "Radio";
7993
8034
  var Radio_default = Radio;
7994
8035
 
7995
8036
  // src/components/Radio/RadioGroup.tsx
7996
- import { Fragment as Fragment3, jsx as jsx329 } from "react/jsx-runtime";
8037
+ import { Fragment as Fragment4, jsx as jsx330 } from "react/jsx-runtime";
7997
8038
  var RadioGroup = (props) => {
7998
8039
  const { children, ...rest } = props;
7999
- return /* @__PURE__ */ jsx329(Fragment3, { children: /* @__PURE__ */ jsx329(RadioGroupContext_default.Provider, { value: rest, children }) });
8040
+ return /* @__PURE__ */ jsx330(Fragment4, { children: /* @__PURE__ */ jsx330(RadioGroupContext_default.Provider, { value: rest, children }) });
8000
8041
  };
8001
8042
  RadioGroup.displayName = "RadioGroup";
8002
8043
  var RadioGroup_default = RadioGroup;
8003
8044
 
8004
8045
  // src/components/Select/Select.tsx
8005
- import React27 from "react";
8046
+ import React28 from "react";
8006
8047
 
8007
8048
  // src/components/Select/context.ts
8008
- import React25 from "react";
8009
- var SelectContext = React25.createContext(null);
8049
+ import React26 from "react";
8050
+ var SelectContext = React26.createContext(null);
8010
8051
  var context_default = SelectContext;
8011
8052
 
8012
8053
  // src/components/Select/SelectItem.tsx
8013
- import React26 from "react";
8014
- import { jsx as jsx330 } from "react/jsx-runtime";
8054
+ import React27 from "react";
8055
+ import { jsx as jsx331 } from "react/jsx-runtime";
8015
8056
  var SelectItem = (props) => {
8016
8057
  const { children, value, onClick, disabled = false } = props;
8017
- const ctx = React26.useContext(context_default);
8058
+ const ctx = React27.useContext(context_default);
8018
8059
  const handleClick = (e) => {
8019
8060
  e.preventDefault();
8020
8061
  e.stopPropagation();
@@ -8023,7 +8064,7 @@ var SelectItem = (props) => {
8023
8064
  ctx?.close();
8024
8065
  onClick?.();
8025
8066
  };
8026
- return /* @__PURE__ */ jsx330(
8067
+ return /* @__PURE__ */ jsx331(
8027
8068
  "div",
8028
8069
  {
8029
8070
  className: clsx_default("select-item", disabled && "disabled"),
@@ -8044,7 +8085,7 @@ SelectItem.displayName = "Select.Item";
8044
8085
  var SelectItem_default = SelectItem;
8045
8086
 
8046
8087
  // src/components/Select/Select.tsx
8047
- import { jsx as jsx331, jsxs as jsxs214 } from "react/jsx-runtime";
8088
+ import { jsx as jsx332, jsxs as jsxs214 } from "react/jsx-runtime";
8048
8089
  var ANIMATION_DURATION_MS3 = 200;
8049
8090
  var SelectRoot = (props) => {
8050
8091
  const {
@@ -8056,26 +8097,26 @@ var SelectRoot = (props) => {
8056
8097
  error = false,
8057
8098
  size = "md"
8058
8099
  } = props;
8059
- const itemChildren = React27.Children.toArray(children).filter(
8060
- (child) => React27.isValidElement(child) && child.type === SelectItem_default
8100
+ const itemChildren = React28.Children.toArray(children).filter(
8101
+ (child) => React28.isValidElement(child) && child.type === SelectItem_default
8061
8102
  );
8062
8103
  const isControlled = valueProp !== void 0;
8063
- const [isOpen, setOpen] = React27.useState(false);
8064
- const [uncontrolledLabel, setUncontrolledLabel] = React27.useState(null);
8065
- const controlledLabel = React27.useMemo(() => {
8104
+ const [isOpen, setOpen] = React28.useState(false);
8105
+ const [uncontrolledLabel, setUncontrolledLabel] = React28.useState(null);
8106
+ const controlledLabel = React28.useMemo(() => {
8066
8107
  if (!isControlled) return null;
8067
8108
  const match = itemChildren.find((child) => child.props.value === valueProp);
8068
8109
  return match ? match.props.children : null;
8069
8110
  }, [isControlled, valueProp, itemChildren]);
8070
8111
  const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
8071
- const triggerRef = React27.useRef(null);
8072
- const contentRef = React27.useRef(null);
8073
- const [mounted, setMounted] = React27.useState(false);
8074
- const [visible, setVisible] = React27.useState(false);
8075
- React27.useEffect(() => {
8112
+ const triggerRef = React28.useRef(null);
8113
+ const contentRef = React28.useRef(null);
8114
+ const [mounted, setMounted] = React28.useState(false);
8115
+ const [visible, setVisible] = React28.useState(false);
8116
+ React28.useEffect(() => {
8076
8117
  if (disabled && isOpen) setOpen(false);
8077
8118
  }, [disabled, isOpen]);
8078
- React27.useEffect(() => {
8119
+ React28.useEffect(() => {
8079
8120
  if (isOpen) {
8080
8121
  setMounted(true);
8081
8122
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -8085,12 +8126,12 @@ var SelectRoot = (props) => {
8085
8126
  const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
8086
8127
  return () => clearTimeout(t);
8087
8128
  }, [isOpen]);
8088
- const open = React27.useCallback(() => setOpen(true), []);
8089
- const close = React27.useCallback(() => setOpen(false), []);
8090
- const toggle = React27.useCallback(() => setOpen((prev) => !prev), []);
8129
+ const open = React28.useCallback(() => setOpen(true), []);
8130
+ const close = React28.useCallback(() => setOpen(false), []);
8131
+ const toggle = React28.useCallback(() => setOpen((prev) => !prev), []);
8091
8132
  useClickOutside_default([contentRef, triggerRef], close, isOpen);
8092
8133
  const position = useAutoPosition_default(triggerRef, contentRef, mounted);
8093
- const setSelected = React27.useCallback(
8134
+ const setSelected = React28.useCallback(
8094
8135
  (label, itemValue) => {
8095
8136
  if (!isControlled) {
8096
8137
  setUncontrolledLabel(label);
@@ -8099,7 +8140,7 @@ var SelectRoot = (props) => {
8099
8140
  },
8100
8141
  [isControlled, onChange]
8101
8142
  );
8102
- const ctxValue = React27.useMemo(
8143
+ const ctxValue = React28.useMemo(
8103
8144
  () => ({
8104
8145
  isOpen,
8105
8146
  mounted,
@@ -8120,7 +8161,7 @@ var SelectRoot = (props) => {
8120
8161
  if (disabled) return;
8121
8162
  toggle();
8122
8163
  };
8123
- return /* @__PURE__ */ jsx331(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs214(
8164
+ return /* @__PURE__ */ jsx332(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ jsxs214(
8124
8165
  "div",
8125
8166
  {
8126
8167
  className: clsx_default(
@@ -8155,7 +8196,7 @@ var SelectRoot = (props) => {
8155
8196
  }
8156
8197
  },
8157
8198
  children: [
8158
- /* @__PURE__ */ jsx331(
8199
+ /* @__PURE__ */ jsx332(
8159
8200
  "span",
8160
8201
  {
8161
8202
  className: clsx_default(
@@ -8165,27 +8206,27 @@ var SelectRoot = (props) => {
8165
8206
  children: selectedLabel ?? placeholder
8166
8207
  }
8167
8208
  ),
8168
- /* @__PURE__ */ jsx331(
8209
+ /* @__PURE__ */ jsx332(
8169
8210
  "span",
8170
8211
  {
8171
8212
  className: clsx_default("select-trigger-icon", isOpen && "open"),
8172
8213
  "aria-hidden": true,
8173
- children: /* @__PURE__ */ jsx331(ChevronDownIcon_default, {})
8214
+ children: /* @__PURE__ */ jsx332(ChevronDownIcon_default, {})
8174
8215
  }
8175
8216
  )
8176
8217
  ]
8177
8218
  }
8178
8219
  ),
8179
- mounted && /* @__PURE__ */ jsx331(
8220
+ mounted && /* @__PURE__ */ jsx332(Portal_default, { children: /* @__PURE__ */ jsx332(
8180
8221
  "div",
8181
8222
  {
8182
- className: clsx_default("select-content", position.direction, stateClass),
8223
+ className: clsx_default("lib-xplat-select-content", position.direction, stateClass),
8183
8224
  ref: contentRef,
8184
8225
  style: { ...position.position, minWidth: position.position.width },
8185
8226
  role: "listbox",
8186
- children: itemChildren
8227
+ children: /* @__PURE__ */ jsx332(context_default.Provider, { value: ctxValue, children: itemChildren })
8187
8228
  }
8188
- )
8229
+ ) })
8189
8230
  ]
8190
8231
  }
8191
8232
  ) });
@@ -8197,14 +8238,14 @@ var Select = Object.assign(SelectRoot, {
8197
8238
  var Select_default = Select;
8198
8239
 
8199
8240
  // src/components/Skeleton/Skeleton.tsx
8200
- import { jsx as jsx332 } from "react/jsx-runtime";
8241
+ import { jsx as jsx333 } from "react/jsx-runtime";
8201
8242
  var Skeleton = (props) => {
8202
8243
  const { variant = "text", width, height } = props;
8203
8244
  const style = {
8204
8245
  width: typeof width === "number" ? `${width}px` : width,
8205
8246
  height: typeof height === "number" ? `${height}px` : height
8206
8247
  };
8207
- return /* @__PURE__ */ jsx332(
8248
+ return /* @__PURE__ */ jsx333(
8208
8249
  "div",
8209
8250
  {
8210
8251
  className: clsx_default("lib-xplat-skeleton", variant),
@@ -8217,20 +8258,20 @@ Skeleton.displayName = "Skeleton";
8217
8258
  var Skeleton_default = Skeleton;
8218
8259
 
8219
8260
  // src/components/Spinner/Spinner.tsx
8220
- import { jsx as jsx333, jsxs as jsxs215 } from "react/jsx-runtime";
8261
+ import { jsx as jsx334, jsxs as jsxs215 } from "react/jsx-runtime";
8221
8262
  var Spinner = (props) => {
8222
8263
  const {
8223
8264
  size = "md",
8224
8265
  type = "brand"
8225
8266
  } = props;
8226
- return /* @__PURE__ */ jsx333(
8267
+ return /* @__PURE__ */ jsx334(
8227
8268
  "div",
8228
8269
  {
8229
8270
  className: clsx_default("lib-xplat-spinner", size, type),
8230
8271
  role: "status",
8231
8272
  "aria-label": "\uB85C\uB529 \uC911",
8232
8273
  children: /* @__PURE__ */ jsxs215("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
8233
- /* @__PURE__ */ jsx333(
8274
+ /* @__PURE__ */ jsx334(
8234
8275
  "circle",
8235
8276
  {
8236
8277
  className: "track",
@@ -8240,7 +8281,7 @@ var Spinner = (props) => {
8240
8281
  strokeWidth: "3"
8241
8282
  }
8242
8283
  ),
8243
- /* @__PURE__ */ jsx333(
8284
+ /* @__PURE__ */ jsx334(
8244
8285
  "circle",
8245
8286
  {
8246
8287
  className: "indicator",
@@ -8259,20 +8300,20 @@ Spinner.displayName = "Spinner";
8259
8300
  var Spinner_default = Spinner;
8260
8301
 
8261
8302
  // src/components/Steps/Steps.tsx
8262
- import { jsx as jsx334, jsxs as jsxs216 } from "react/jsx-runtime";
8303
+ import { jsx as jsx335, jsxs as jsxs216 } from "react/jsx-runtime";
8263
8304
  var Steps = (props) => {
8264
8305
  const {
8265
8306
  items,
8266
8307
  current,
8267
8308
  type = "brand"
8268
8309
  } = props;
8269
- return /* @__PURE__ */ jsx334("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
8310
+ return /* @__PURE__ */ jsx335("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
8270
8311
  const status = index < current ? "completed" : index === current ? "active" : "pending";
8271
8312
  return /* @__PURE__ */ jsxs216("div", { className: clsx_default("step-item", status), children: [
8272
- /* @__PURE__ */ jsx334("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx334(CheckIcon_default, {}) : /* @__PURE__ */ jsx334("span", { children: index + 1 }) }),
8313
+ /* @__PURE__ */ jsx335("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ jsx335(CheckIcon_default, {}) : /* @__PURE__ */ jsx335("span", { children: index + 1 }) }),
8273
8314
  /* @__PURE__ */ jsxs216("div", { className: "step-content", children: [
8274
- /* @__PURE__ */ jsx334("span", { className: "step-title", children: item.title }),
8275
- item.description && /* @__PURE__ */ jsx334("span", { className: "step-description", children: item.description })
8315
+ /* @__PURE__ */ jsx335("span", { className: "step-title", children: item.title }),
8316
+ item.description && /* @__PURE__ */ jsx335("span", { className: "step-description", children: item.description })
8276
8317
  ] })
8277
8318
  ] }, index);
8278
8319
  }) });
@@ -8281,8 +8322,8 @@ Steps.displayName = "Steps";
8281
8322
  var Steps_default = Steps;
8282
8323
 
8283
8324
  // src/components/Swiper/Swiper.tsx
8284
- import React28 from "react";
8285
- import { jsx as jsx335, jsxs as jsxs217 } from "react/jsx-runtime";
8325
+ import React29 from "react";
8326
+ import { jsx as jsx336, jsxs as jsxs217 } from "react/jsx-runtime";
8286
8327
  var Swiper = (props) => {
8287
8328
  const {
8288
8329
  auto = false,
@@ -8305,23 +8346,23 @@ var Swiper = (props) => {
8305
8346
  const maxIndex = Math.max(0, totalSlides - viewItemCount);
8306
8347
  const useLoop = loop && canSlide;
8307
8348
  const cloneCount = useLoop ? totalSlides : 0;
8308
- const extendedItems = React28.useMemo(() => {
8349
+ const extendedItems = React29.useMemo(() => {
8309
8350
  if (!useLoop) return items;
8310
8351
  return [...items, ...items, ...items];
8311
8352
  }, [items, useLoop]);
8312
8353
  const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
8313
- const [innerIndex, setInnerIndex] = React28.useState(
8354
+ const [innerIndex, setInnerIndex] = React29.useState(
8314
8355
  useLoop ? cloneCount + initialIdx : initialIdx
8315
8356
  );
8316
- const [isDragging, setIsDragging] = React28.useState(false);
8317
- const [dragOffset, setDragOffset] = React28.useState(0);
8318
- const [animated, setAnimated] = React28.useState(true);
8319
- const [containerWidth, setContainerWidth] = React28.useState(0);
8320
- const containerRef = React28.useRef(null);
8321
- const startXRef = React28.useRef(0);
8322
- const startTimeRef = React28.useRef(0);
8323
- const autoplayTimerRef = React28.useRef(null);
8324
- React28.useEffect(() => {
8357
+ const [isDragging, setIsDragging] = React29.useState(false);
8358
+ const [dragOffset, setDragOffset] = React29.useState(0);
8359
+ const [animated, setAnimated] = React29.useState(true);
8360
+ const [containerWidth, setContainerWidth] = React29.useState(0);
8361
+ const containerRef = React29.useRef(null);
8362
+ const startXRef = React29.useRef(0);
8363
+ const startTimeRef = React29.useRef(0);
8364
+ const autoplayTimerRef = React29.useRef(null);
8365
+ React29.useEffect(() => {
8325
8366
  const el = containerRef.current;
8326
8367
  if (!el) return;
8327
8368
  const ro = new ResizeObserver((entries) => {
@@ -8340,7 +8381,7 @@ var Swiper = (props) => {
8340
8381
  return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
8341
8382
  };
8342
8383
  const realIndex = getRealIndex(innerIndex);
8343
- const moveToInner = React28.useCallback(
8384
+ const moveToInner = React29.useCallback(
8344
8385
  (idx, withAnim = true) => {
8345
8386
  if (!useLoop) {
8346
8387
  setAnimated(withAnim);
@@ -8368,7 +8409,7 @@ var Swiper = (props) => {
8368
8409
  },
8369
8410
  [useLoop, cloneCount, totalSlides]
8370
8411
  );
8371
- const handleTransitionEnd = React28.useCallback(() => {
8412
+ const handleTransitionEnd = React29.useCallback(() => {
8372
8413
  if (!useLoop) return;
8373
8414
  const real = getRealIndex(innerIndex);
8374
8415
  const canonical = cloneCount + real;
@@ -8378,7 +8419,7 @@ var Swiper = (props) => {
8378
8419
  }
8379
8420
  onChange?.(Math.min(real, maxIndex));
8380
8421
  }, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
8381
- const slideTo = React28.useCallback(
8422
+ const slideTo = React29.useCallback(
8382
8423
  (logicalIndex) => {
8383
8424
  if (!canSlide) return;
8384
8425
  const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
@@ -8388,7 +8429,7 @@ var Swiper = (props) => {
8388
8429
  },
8389
8430
  [canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
8390
8431
  );
8391
- const slideNext = React28.useCallback(() => {
8432
+ const slideNext = React29.useCallback(() => {
8392
8433
  if (!canSlide) return;
8393
8434
  const nextInner = innerIndex + slideBy;
8394
8435
  if (useLoop) {
@@ -8397,7 +8438,7 @@ var Swiper = (props) => {
8397
8438
  moveToInner(Math.min(nextInner, maxIndex), true);
8398
8439
  }
8399
8440
  }, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
8400
- const slidePrev = React28.useCallback(() => {
8441
+ const slidePrev = React29.useCallback(() => {
8401
8442
  if (!canSlide) return;
8402
8443
  const prevInner = innerIndex - slideBy;
8403
8444
  if (useLoop) {
@@ -8406,7 +8447,7 @@ var Swiper = (props) => {
8406
8447
  moveToInner(Math.max(prevInner, 0), true);
8407
8448
  }
8408
8449
  }, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
8409
- React28.useEffect(() => {
8450
+ React29.useEffect(() => {
8410
8451
  if (indexProp === void 0) return;
8411
8452
  const clamped = Math.max(0, Math.min(indexProp, maxIndex));
8412
8453
  const target = useLoop ? cloneCount + clamped : clamped;
@@ -8414,12 +8455,12 @@ var Swiper = (props) => {
8414
8455
  moveToInner(target, true);
8415
8456
  }
8416
8457
  }, [indexProp]);
8417
- React28.useImperativeHandle(swiperRef, () => ({
8458
+ React29.useImperativeHandle(swiperRef, () => ({
8418
8459
  slidePrev,
8419
8460
  slideNext,
8420
8461
  slideTo
8421
8462
  }));
8422
- React28.useEffect(() => {
8463
+ React29.useEffect(() => {
8423
8464
  if (!auto || !canSlide) return;
8424
8465
  autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
8425
8466
  return () => {
@@ -8442,7 +8483,7 @@ var Swiper = (props) => {
8442
8483
  startXRef.current = getClientX(e);
8443
8484
  startTimeRef.current = Date.now();
8444
8485
  };
8445
- React28.useEffect(() => {
8486
+ React29.useEffect(() => {
8446
8487
  if (!isDragging) return;
8447
8488
  const handleMove = (e) => {
8448
8489
  setDragOffset(getClientX(e) - startXRef.current);
@@ -8480,8 +8521,8 @@ var Swiper = (props) => {
8480
8521
  }, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
8481
8522
  const slideWidthPercent = 100 / viewItemCount;
8482
8523
  const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
8483
- const slideElements = React28.useMemo(
8484
- () => extendedItems.map((item, idx) => /* @__PURE__ */ jsx335(
8524
+ const slideElements = React29.useMemo(
8525
+ () => extendedItems.map((item, idx) => /* @__PURE__ */ jsx336(
8485
8526
  "div",
8486
8527
  {
8487
8528
  className: "lib-xplat-swiper__slide",
@@ -8501,13 +8542,13 @@ var Swiper = (props) => {
8501
8542
  totalSteps - 1
8502
8543
  );
8503
8544
  return /* @__PURE__ */ jsxs217("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
8504
- /* @__PURE__ */ jsx335(
8545
+ /* @__PURE__ */ jsx336(
8505
8546
  "div",
8506
8547
  {
8507
8548
  className: "lib-xplat-swiper__viewport",
8508
8549
  onMouseDown: handleDragStart,
8509
8550
  onTouchStart: handleDragStart,
8510
- children: /* @__PURE__ */ jsx335(
8551
+ children: /* @__PURE__ */ jsx336(
8511
8552
  "div",
8512
8553
  {
8513
8554
  className: clsx_default(
@@ -8525,7 +8566,7 @@ var Swiper = (props) => {
8525
8566
  )
8526
8567
  }
8527
8568
  ),
8528
- showProgress && canSlide && /* @__PURE__ */ jsx335("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ jsx335("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ jsx335(
8569
+ showProgress && canSlide && /* @__PURE__ */ jsx336("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ jsx336("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ jsx336(
8529
8570
  "span",
8530
8571
  {
8531
8572
  className: "lib-xplat-swiper__progress-fill",
@@ -8535,7 +8576,7 @@ var Swiper = (props) => {
8535
8576
  }
8536
8577
  }
8537
8578
  ) }) }),
8538
- canSlide && /* @__PURE__ */ jsx335("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsx335(
8579
+ canSlide && /* @__PURE__ */ jsx336("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ jsx336(
8539
8580
  "button",
8540
8581
  {
8541
8582
  className: clsx_default(
@@ -8553,8 +8594,8 @@ Swiper.displayName = "Swiper";
8553
8594
  var Swiper_default = Swiper;
8554
8595
 
8555
8596
  // src/components/Switch/Switch.tsx
8556
- import React29 from "react";
8557
- import { jsx as jsx336 } from "react/jsx-runtime";
8597
+ import React30 from "react";
8598
+ import { jsx as jsx337 } from "react/jsx-runtime";
8558
8599
  var KNOB_TRANSITION_MS = 250;
8559
8600
  var Switch = (props) => {
8560
8601
  const {
@@ -8564,9 +8605,9 @@ var Switch = (props) => {
8564
8605
  disabled,
8565
8606
  onChange
8566
8607
  } = props;
8567
- const [isAnimating, setIsAnimating] = React29.useState(false);
8568
- const timeoutRef = React29.useRef(null);
8569
- React29.useEffect(() => {
8608
+ const [isAnimating, setIsAnimating] = React30.useState(false);
8609
+ const timeoutRef = React30.useRef(null);
8610
+ React30.useEffect(() => {
8570
8611
  return () => {
8571
8612
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
8572
8613
  };
@@ -8581,7 +8622,7 @@ var Switch = (props) => {
8581
8622
  timeoutRef.current = null;
8582
8623
  }, KNOB_TRANSITION_MS);
8583
8624
  };
8584
- return /* @__PURE__ */ jsx336(
8625
+ return /* @__PURE__ */ jsx337(
8585
8626
  "div",
8586
8627
  {
8587
8628
  className: clsx_default(
@@ -8594,7 +8635,7 @@ var Switch = (props) => {
8594
8635
  ),
8595
8636
  onClick: handleClick,
8596
8637
  "aria-disabled": disabled || isAnimating,
8597
- children: /* @__PURE__ */ jsx336("div", { className: clsx_default("knob", value ? "checked" : void 0) })
8638
+ children: /* @__PURE__ */ jsx337("div", { className: clsx_default("knob", value ? "checked" : void 0) })
8598
8639
  }
8599
8640
  );
8600
8641
  };
@@ -8602,17 +8643,17 @@ Switch.displayName = "Switch";
8602
8643
  var Switch_default = Switch;
8603
8644
 
8604
8645
  // src/components/Table/TableContext.tsx
8605
- import React30 from "react";
8606
- var TableContext = React30.createContext(null);
8646
+ import React31 from "react";
8647
+ var TableContext = React31.createContext(null);
8607
8648
  var useTableContext = () => {
8608
- const ctx = React30.useContext(TableContext);
8649
+ const ctx = React31.useContext(TableContext);
8609
8650
  if (!ctx) throw new Error("Table components must be used inside <Table>");
8610
8651
  return ctx;
8611
8652
  };
8612
8653
  var TableContext_default = TableContext;
8613
8654
 
8614
8655
  // src/components/Table/Table.tsx
8615
- import { jsx as jsx337 } from "react/jsx-runtime";
8656
+ import { jsx as jsx338 } from "react/jsx-runtime";
8616
8657
  var Table = (props) => {
8617
8658
  const {
8618
8659
  children,
@@ -8621,7 +8662,7 @@ var Table = (props) => {
8621
8662
  headerSticky = false,
8622
8663
  stickyShadow = true
8623
8664
  } = props;
8624
- return /* @__PURE__ */ jsx337("div", { className: "lib-xplat-table-wrapper", children: /* @__PURE__ */ jsx337(
8665
+ return /* @__PURE__ */ jsx338("div", { className: "lib-xplat-table-wrapper", children: /* @__PURE__ */ jsx338(
8625
8666
  TableContext_default.Provider,
8626
8667
  {
8627
8668
  value: {
@@ -8630,7 +8671,7 @@ var Table = (props) => {
8630
8671
  headerSticky,
8631
8672
  stickyShadow
8632
8673
  },
8633
- children: /* @__PURE__ */ jsx337("table", { className: "lib-xplat-table", children })
8674
+ children: /* @__PURE__ */ jsx338("table", { className: "lib-xplat-table", children })
8634
8675
  }
8635
8676
  ) });
8636
8677
  };
@@ -8638,41 +8679,41 @@ Table.displayName = "Table";
8638
8679
  var Table_default = Table;
8639
8680
 
8640
8681
  // src/components/Table/TableBody.tsx
8641
- import { jsx as jsx338 } from "react/jsx-runtime";
8682
+ import { jsx as jsx339 } from "react/jsx-runtime";
8642
8683
  var TableBody = (props) => {
8643
8684
  const { children } = props;
8644
- return /* @__PURE__ */ jsx338("tbody", { children });
8685
+ return /* @__PURE__ */ jsx339("tbody", { children });
8645
8686
  };
8646
8687
  TableBody.displayName = "TableBody";
8647
8688
  var TableBody_default = TableBody;
8648
8689
 
8649
8690
  // src/components/Table/TableCell.tsx
8650
- import React33 from "react";
8691
+ import React34 from "react";
8651
8692
 
8652
8693
  // src/components/Table/TableHeadContext.tsx
8653
- import React31 from "react";
8654
- var TableHeadContext = React31.createContext(
8694
+ import React32 from "react";
8695
+ var TableHeadContext = React32.createContext(
8655
8696
  null
8656
8697
  );
8657
8698
  var useTableHeadContext = () => {
8658
- const ctx = React31.useContext(TableHeadContext);
8699
+ const ctx = React32.useContext(TableHeadContext);
8659
8700
  return ctx;
8660
8701
  };
8661
8702
  var TableHeadContext_default = TableHeadContext;
8662
8703
 
8663
8704
  // src/components/Table/TableRowContext.tsx
8664
- import React32 from "react";
8665
- var TableRowContext = React32.createContext(null);
8705
+ import React33 from "react";
8706
+ var TableRowContext = React33.createContext(null);
8666
8707
  var useTableRowContext = () => {
8667
- const ctx = React32.useContext(TableRowContext);
8708
+ const ctx = React33.useContext(TableRowContext);
8668
8709
  if (!ctx) throw new Error("Table components must be used inside <Table>");
8669
8710
  return ctx;
8670
8711
  };
8671
8712
  var TableRowContext_default = TableRowContext;
8672
8713
 
8673
8714
  // src/components/Table/TableCell.tsx
8674
- import { jsx as jsx339 } from "react/jsx-runtime";
8675
- var TableCell = React33.memo((props) => {
8715
+ import { jsx as jsx340 } from "react/jsx-runtime";
8716
+ var TableCell = React34.memo((props) => {
8676
8717
  const {
8677
8718
  children,
8678
8719
  align = "center",
@@ -8684,9 +8725,9 @@ var TableCell = React33.memo((props) => {
8684
8725
  const { registerStickyCell, stickyCells } = useTableRowContext();
8685
8726
  const { stickyShadow } = useTableContext();
8686
8727
  const headContext = useTableHeadContext();
8687
- const [left, setLeft] = React33.useState(0);
8688
- const cellRef = React33.useRef(null);
8689
- const calculateLeft = React33.useCallback(() => {
8728
+ const [left, setLeft] = React34.useState(0);
8729
+ const cellRef = React34.useRef(null);
8730
+ const calculateLeft = React34.useCallback(() => {
8690
8731
  if (!cellRef.current) return 0;
8691
8732
  let totalLeft = 0;
8692
8733
  for (const ref of stickyCells) {
@@ -8695,7 +8736,7 @@ var TableCell = React33.memo((props) => {
8695
8736
  }
8696
8737
  return totalLeft;
8697
8738
  }, [stickyCells]);
8698
- React33.useEffect(() => {
8739
+ React34.useEffect(() => {
8699
8740
  if (!isSticky || !cellRef.current) return;
8700
8741
  registerStickyCell(cellRef);
8701
8742
  setLeft(calculateLeft());
@@ -8713,7 +8754,7 @@ var TableCell = React33.memo((props) => {
8713
8754
  const CellTag = cellRef.current?.tagName === "TH" ? "th" : "td";
8714
8755
  const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
8715
8756
  const enableHover = headContext && headContext.cellHover;
8716
- return /* @__PURE__ */ jsx339(
8757
+ return /* @__PURE__ */ jsx340(
8717
8758
  CellTag,
8718
8759
  {
8719
8760
  ref: cellRef,
@@ -8738,21 +8779,21 @@ TableCell.displayName = "TableCell";
8738
8779
  var TableCell_default = TableCell;
8739
8780
 
8740
8781
  // src/components/Table/TableHead.tsx
8741
- import { jsx as jsx340 } from "react/jsx-runtime";
8782
+ import { jsx as jsx341 } from "react/jsx-runtime";
8742
8783
  var TableHead = ({
8743
8784
  children,
8744
8785
  cellHover = false
8745
8786
  }) => {
8746
8787
  const { headerSticky } = useTableContext();
8747
- return /* @__PURE__ */ jsx340(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ jsx340("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
8788
+ return /* @__PURE__ */ jsx341(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ jsx341("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
8748
8789
  };
8749
8790
  TableHead.displayName = "TableHead";
8750
8791
  var TableHead_default = TableHead;
8751
8792
 
8752
8793
  // src/components/Table/TableRow.tsx
8753
- import React34 from "react";
8754
- import { jsx as jsx341 } from "react/jsx-runtime";
8755
- var TableRow = React34.memo((props) => {
8794
+ import React35 from "react";
8795
+ import { jsx as jsx342 } from "react/jsx-runtime";
8796
+ var TableRow = React35.memo((props) => {
8756
8797
  const {
8757
8798
  children,
8758
8799
  type = "secondary",
@@ -8760,14 +8801,14 @@ var TableRow = React34.memo((props) => {
8760
8801
  onClick
8761
8802
  } = props;
8762
8803
  const { rowBorderUse } = useTableContext();
8763
- const [stickyCells, setStickyCells] = React34.useState([]);
8804
+ const [stickyCells, setStickyCells] = React35.useState([]);
8764
8805
  const registerStickyCell = (ref) => {
8765
8806
  setStickyCells((prev) => {
8766
8807
  if (prev.includes(ref)) return prev;
8767
8808
  return [...prev, ref];
8768
8809
  });
8769
8810
  };
8770
- return /* @__PURE__ */ jsx341(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ jsx341(
8811
+ return /* @__PURE__ */ jsx342(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ jsx342(
8771
8812
  "tr",
8772
8813
  {
8773
8814
  className: clsx_default(
@@ -8785,7 +8826,7 @@ TableRow.displayName = "TableRow";
8785
8826
  var TableRow_default = TableRow;
8786
8827
 
8787
8828
  // src/components/Tag/Tag.tsx
8788
- import { jsx as jsx342, jsxs as jsxs218 } from "react/jsx-runtime";
8829
+ import { jsx as jsx343, jsxs as jsxs218 } from "react/jsx-runtime";
8789
8830
  var Tag = (props) => {
8790
8831
  const {
8791
8832
  children,
@@ -8806,8 +8847,8 @@ var Tag = (props) => {
8806
8847
  disabled && "disabled"
8807
8848
  ),
8808
8849
  children: [
8809
- /* @__PURE__ */ jsx342("span", { className: "tag-label", children }),
8810
- onClose && /* @__PURE__ */ jsx342("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ jsx342(XIcon_default, {}) })
8850
+ /* @__PURE__ */ jsx343("span", { className: "tag-label", children }),
8851
+ onClose && /* @__PURE__ */ jsx343("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ jsx343(XIcon_default, {}) })
8811
8852
  ]
8812
8853
  }
8813
8854
  );
@@ -8816,12 +8857,12 @@ Tag.displayName = "Tag";
8816
8857
  var Tag_default = Tag;
8817
8858
 
8818
8859
  // src/components/TextArea/TextArea.tsx
8819
- import React35 from "react";
8820
- import { jsx as jsx343 } from "react/jsx-runtime";
8821
- var TextArea = React35.forwardRef(
8860
+ import React36 from "react";
8861
+ import { jsx as jsx344 } from "react/jsx-runtime";
8862
+ var TextArea = React36.forwardRef(
8822
8863
  (props, ref) => {
8823
8864
  const { value, onChange, disabled, ...textareaProps } = props;
8824
- const localRef = React35.useRef(null);
8865
+ const localRef = React36.useRef(null);
8825
8866
  const setRefs = (el) => {
8826
8867
  localRef.current = el;
8827
8868
  if (!ref) return;
@@ -8841,21 +8882,21 @@ var TextArea = React35.forwardRef(
8841
8882
  onChange(event);
8842
8883
  }
8843
8884
  };
8844
- React35.useEffect(() => {
8885
+ React36.useEffect(() => {
8845
8886
  const el = localRef.current;
8846
8887
  if (!el) return;
8847
8888
  el.style.height = "0px";
8848
8889
  const nextHeight = Math.min(el.scrollHeight, 400);
8849
8890
  el.style.height = `${nextHeight}px`;
8850
8891
  }, [value]);
8851
- return /* @__PURE__ */ jsx343("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ jsx343(
8892
+ return /* @__PURE__ */ jsx344("div", { className: "lib-xplat-textarea-wrapper", children: /* @__PURE__ */ jsx344(
8852
8893
  "div",
8853
8894
  {
8854
8895
  className: clsx_default(
8855
8896
  "lib-xplat-textarea",
8856
8897
  disabled ? "disabled" : void 0
8857
8898
  ),
8858
- children: /* @__PURE__ */ jsx343(
8899
+ children: /* @__PURE__ */ jsx344(
8859
8900
  "textarea",
8860
8901
  {
8861
8902
  ...textareaProps,
@@ -8873,25 +8914,25 @@ TextArea.displayName = "TextArea";
8873
8914
  var TextArea_default = TextArea;
8874
8915
 
8875
8916
  // src/components/Toast/Toast.tsx
8876
- import React36 from "react";
8917
+ import React37 from "react";
8877
8918
  import { createPortal as createPortal3 } from "react-dom";
8878
- import { jsx as jsx344, jsxs as jsxs219 } from "react/jsx-runtime";
8879
- var ToastContext = React36.createContext(null);
8919
+ import { jsx as jsx345, jsxs as jsxs219 } from "react/jsx-runtime";
8920
+ var ToastContext = React37.createContext(null);
8880
8921
  var useToast = () => {
8881
- const ctx = React36.useContext(ToastContext);
8922
+ const ctx = React37.useContext(ToastContext);
8882
8923
  if (!ctx) throw new Error("useToast must be used within ToastProvider");
8883
8924
  return ctx;
8884
8925
  };
8885
8926
  var EXIT_DURATION = 300;
8886
8927
  var ToastItemComponent = ({ item, isExiting, onClose }) => {
8887
- const ref = React36.useRef(null);
8888
- const [height, setHeight] = React36.useState(void 0);
8889
- React36.useEffect(() => {
8928
+ const ref = React37.useRef(null);
8929
+ const [height, setHeight] = React37.useState(void 0);
8930
+ React37.useEffect(() => {
8890
8931
  if (ref.current && !isExiting) {
8891
8932
  setHeight(ref.current.offsetHeight);
8892
8933
  }
8893
8934
  }, [isExiting]);
8894
- return /* @__PURE__ */ jsx344(
8935
+ return /* @__PURE__ */ jsx345(
8895
8936
  "div",
8896
8937
  {
8897
8938
  className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
@@ -8906,8 +8947,8 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
8906
8947
  className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
8907
8948
  role: "alert",
8908
8949
  children: [
8909
- /* @__PURE__ */ jsx344("span", { className: "message", children: item.message }),
8910
- /* @__PURE__ */ jsx344("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
8950
+ /* @__PURE__ */ jsx345("span", { className: "message", children: item.message }),
8951
+ /* @__PURE__ */ jsx345("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
8911
8952
  ]
8912
8953
  }
8913
8954
  )
@@ -8918,13 +8959,13 @@ var ToastProvider = ({
8918
8959
  children,
8919
8960
  position = "top-right"
8920
8961
  }) => {
8921
- const [toasts, setToasts] = React36.useState([]);
8922
- const [removing, setRemoving] = React36.useState(/* @__PURE__ */ new Set());
8923
- const [mounted, setMounted] = React36.useState(false);
8924
- React36.useEffect(() => {
8962
+ const [toasts, setToasts] = React37.useState([]);
8963
+ const [removing, setRemoving] = React37.useState(/* @__PURE__ */ new Set());
8964
+ const [mounted, setMounted] = React37.useState(false);
8965
+ React37.useEffect(() => {
8925
8966
  setMounted(true);
8926
8967
  }, []);
8927
- const remove = React36.useCallback((id) => {
8968
+ const remove = React37.useCallback((id) => {
8928
8969
  setRemoving((prev) => new Set(prev).add(id));
8929
8970
  setTimeout(() => {
8930
8971
  setToasts((prev) => prev.filter((t) => t.id !== id));
@@ -8935,7 +8976,7 @@ var ToastProvider = ({
8935
8976
  });
8936
8977
  }, EXIT_DURATION);
8937
8978
  }, []);
8938
- const toast = React36.useCallback(
8979
+ const toast = React37.useCallback(
8939
8980
  (type, message, duration = 3e3) => {
8940
8981
  const id = `${Date.now()}-${Math.random()}`;
8941
8982
  setToasts((prev) => [...prev, { id, type, message }]);
@@ -8948,7 +8989,7 @@ var ToastProvider = ({
8948
8989
  return /* @__PURE__ */ jsxs219(ToastContext.Provider, { value: { toast }, children: [
8949
8990
  children,
8950
8991
  mounted && createPortal3(
8951
- /* @__PURE__ */ jsx344("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ jsx344(
8992
+ /* @__PURE__ */ jsx345("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ jsx345(
8952
8993
  ToastItemComponent,
8953
8994
  {
8954
8995
  item: t,
@@ -8964,29 +9005,29 @@ var ToastProvider = ({
8964
9005
  ToastProvider.displayName = "ToastProvider";
8965
9006
 
8966
9007
  // src/components/Tooltip/Tooltip.tsx
8967
- import React37 from "react";
8968
- import { jsx as jsx345, jsxs as jsxs220 } from "react/jsx-runtime";
9008
+ import React38 from "react";
9009
+ import { jsx as jsx346, jsxs as jsxs220 } from "react/jsx-runtime";
8969
9010
  var Tooltip = (props) => {
8970
9011
  const {
8971
9012
  type = "primary",
8972
9013
  description,
8973
9014
  children
8974
9015
  } = props;
8975
- const iconRef = React37.useRef(null);
9016
+ const iconRef = React38.useRef(null);
8976
9017
  return /* @__PURE__ */ jsxs220("div", { className: "lib-xplat-tooltip", children: [
8977
- /* @__PURE__ */ jsx345("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
8978
- /* @__PURE__ */ jsx345("div", { className: clsx_default("tooltip-wrapper", type), children: description })
9018
+ /* @__PURE__ */ jsx346("div", { className: "tooltip-content", ref: iconRef, children: children || "Tooltip" }),
9019
+ /* @__PURE__ */ jsx346("div", { className: clsx_default("tooltip-wrapper", type), children: description })
8979
9020
  ] });
8980
9021
  };
8981
9022
  Tooltip.displayName = "Tooltip";
8982
9023
  var Tooltip_default = Tooltip;
8983
9024
 
8984
9025
  // src/components/Video/Video.tsx
8985
- import React38 from "react";
8986
- import { jsx as jsx346, jsxs as jsxs221 } from "react/jsx-runtime";
9026
+ import React39 from "react";
9027
+ import { jsx as jsx347, jsxs as jsxs221 } from "react/jsx-runtime";
8987
9028
  var PipIcon = () => /* @__PURE__ */ jsxs221("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
8988
- /* @__PURE__ */ jsx346("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
8989
- /* @__PURE__ */ jsx346("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
9029
+ /* @__PURE__ */ jsx347("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
9030
+ /* @__PURE__ */ jsx347("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
8990
9031
  ] });
8991
9032
  var formatTime = (sec) => {
8992
9033
  if (!Number.isFinite(sec) || sec < 0) return "0:00";
@@ -8994,7 +9035,7 @@ var formatTime = (sec) => {
8994
9035
  const s = Math.floor(sec % 60);
8995
9036
  return `${m}:${s.toString().padStart(2, "0")}`;
8996
9037
  };
8997
- var Video = React38.forwardRef((props, ref) => {
9038
+ var Video = React39.forwardRef((props, ref) => {
8998
9039
  const {
8999
9040
  src,
9000
9041
  poster,
@@ -9018,21 +9059,21 @@ var Video = React38.forwardRef((props, ref) => {
9018
9059
  children,
9019
9060
  ...rest
9020
9061
  } = props;
9021
- const containerRef = React38.useRef(null);
9022
- const videoRef = React38.useRef(null);
9023
- const [isPlaying, setIsPlaying] = React38.useState(Boolean(autoPlay));
9024
- const [isLoaded, setIsLoaded] = React38.useState(false);
9025
- const [currentTime, setCurrentTime] = React38.useState(0);
9026
- const [duration, setDuration] = React38.useState(0);
9027
- const [buffered, setBuffered] = React38.useState(0);
9028
- const [volume, setVolume] = React38.useState(1);
9029
- const [isMuted, setIsMuted] = React38.useState(Boolean(muted));
9030
- const [isFullscreen, setIsFullscreen] = React38.useState(false);
9031
- const [playbackRate, setPlaybackRate] = React38.useState(1);
9032
- const [rateMenuOpen, setRateMenuOpen] = React38.useState(false);
9033
- const [captionsOn, setCaptionsOn] = React38.useState(false);
9034
- const [isPip, setIsPip] = React38.useState(false);
9035
- const setRefs = React38.useCallback(
9062
+ const containerRef = React39.useRef(null);
9063
+ const videoRef = React39.useRef(null);
9064
+ const [isPlaying, setIsPlaying] = React39.useState(Boolean(autoPlay));
9065
+ const [isLoaded, setIsLoaded] = React39.useState(false);
9066
+ const [currentTime, setCurrentTime] = React39.useState(0);
9067
+ const [duration, setDuration] = React39.useState(0);
9068
+ const [buffered, setBuffered] = React39.useState(0);
9069
+ const [volume, setVolume] = React39.useState(1);
9070
+ const [isMuted, setIsMuted] = React39.useState(Boolean(muted));
9071
+ const [isFullscreen, setIsFullscreen] = React39.useState(false);
9072
+ const [playbackRate, setPlaybackRate] = React39.useState(1);
9073
+ const [rateMenuOpen, setRateMenuOpen] = React39.useState(false);
9074
+ const [captionsOn, setCaptionsOn] = React39.useState(false);
9075
+ const [isPip, setIsPip] = React39.useState(false);
9076
+ const setRefs = React39.useCallback(
9036
9077
  (el) => {
9037
9078
  videoRef.current = el;
9038
9079
  if (typeof ref === "function") ref(el);
@@ -9040,14 +9081,14 @@ var Video = React38.forwardRef((props, ref) => {
9040
9081
  },
9041
9082
  [ref]
9042
9083
  );
9043
- React38.useEffect(() => {
9084
+ React39.useEffect(() => {
9044
9085
  const onFsChange = () => {
9045
9086
  setIsFullscreen(document.fullscreenElement === containerRef.current);
9046
9087
  };
9047
9088
  document.addEventListener("fullscreenchange", onFsChange);
9048
9089
  return () => document.removeEventListener("fullscreenchange", onFsChange);
9049
9090
  }, []);
9050
- React38.useEffect(() => {
9091
+ React39.useEffect(() => {
9051
9092
  const v = videoRef.current;
9052
9093
  if (!v) return;
9053
9094
  const onEnter = () => setIsPip(true);
@@ -9167,7 +9208,7 @@ var Video = React38.forwardRef((props, ref) => {
9167
9208
  ref: containerRef,
9168
9209
  className: clsx_default("lib-xplat-video", showControls && "has-controls"),
9169
9210
  children: [
9170
- /* @__PURE__ */ jsx346(
9211
+ /* @__PURE__ */ jsx347(
9171
9212
  "video",
9172
9213
  {
9173
9214
  ref: setRefs,
@@ -9188,7 +9229,7 @@ var Video = React38.forwardRef((props, ref) => {
9188
9229
  children
9189
9230
  }
9190
9231
  ),
9191
- showCenterPlay && /* @__PURE__ */ jsx346(
9232
+ showCenterPlay && /* @__PURE__ */ jsx347(
9192
9233
  "button",
9193
9234
  {
9194
9235
  type: "button",
@@ -9200,11 +9241,11 @@ var Video = React38.forwardRef((props, ref) => {
9200
9241
  onClick: togglePlay,
9201
9242
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
9202
9243
  tabIndex: -1,
9203
- children: /* @__PURE__ */ jsx346("span", { className: "center-play-icon", children: /* @__PURE__ */ jsx346(PlayCircleIcon_default, {}) })
9244
+ children: /* @__PURE__ */ jsx347("span", { className: "center-play-icon", children: /* @__PURE__ */ jsx347(PlayCircleIcon_default, {}) })
9204
9245
  }
9205
9246
  ),
9206
9247
  showControls && /* @__PURE__ */ jsxs221("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
9207
- /* @__PURE__ */ jsx346(
9248
+ /* @__PURE__ */ jsx347(
9208
9249
  "input",
9209
9250
  {
9210
9251
  type: "range",
@@ -9222,28 +9263,28 @@ var Video = React38.forwardRef((props, ref) => {
9222
9263
  }
9223
9264
  ),
9224
9265
  /* @__PURE__ */ jsxs221("div", { className: "controls-row", children: [
9225
- /* @__PURE__ */ jsx346(
9266
+ /* @__PURE__ */ jsx347(
9226
9267
  "button",
9227
9268
  {
9228
9269
  type: "button",
9229
9270
  className: "control-btn",
9230
9271
  onClick: togglePlay,
9231
9272
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
9232
- children: isPlaying ? /* @__PURE__ */ jsx346(PauseIcon_default, {}) : /* @__PURE__ */ jsx346(PlayIcon_default, {})
9273
+ children: isPlaying ? /* @__PURE__ */ jsx347(PauseIcon_default, {}) : /* @__PURE__ */ jsx347(PlayIcon_default, {})
9233
9274
  }
9234
9275
  ),
9235
9276
  /* @__PURE__ */ jsxs221("div", { className: "volume-group", children: [
9236
- /* @__PURE__ */ jsx346(
9277
+ /* @__PURE__ */ jsx347(
9237
9278
  "button",
9238
9279
  {
9239
9280
  type: "button",
9240
9281
  className: "control-btn",
9241
9282
  onClick: toggleMute,
9242
9283
  "aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
9243
- children: /* @__PURE__ */ jsx346(VolumeGlyph, {})
9284
+ children: /* @__PURE__ */ jsx347(VolumeGlyph, {})
9244
9285
  }
9245
9286
  ),
9246
- /* @__PURE__ */ jsx346(
9287
+ /* @__PURE__ */ jsx347(
9247
9288
  "input",
9248
9289
  {
9249
9290
  type: "range",
@@ -9263,7 +9304,7 @@ var Video = React38.forwardRef((props, ref) => {
9263
9304
  " / ",
9264
9305
  formatTime(duration)
9265
9306
  ] }),
9266
- /* @__PURE__ */ jsx346("div", { className: "controls-spacer" }),
9307
+ /* @__PURE__ */ jsx347("div", { className: "controls-spacer" }),
9267
9308
  playbackRates && playbackRates.length > 0 && /* @__PURE__ */ jsxs221("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
9268
9309
  /* @__PURE__ */ jsxs221(
9269
9310
  "button",
@@ -9279,7 +9320,7 @@ var Video = React38.forwardRef((props, ref) => {
9279
9320
  ]
9280
9321
  }
9281
9322
  ),
9282
- rateMenuOpen && /* @__PURE__ */ jsx346("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ jsx346("li", { children: /* @__PURE__ */ jsxs221(
9323
+ rateMenuOpen && /* @__PURE__ */ jsx347("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ jsx347("li", { children: /* @__PURE__ */ jsxs221(
9283
9324
  "button",
9284
9325
  {
9285
9326
  type: "button",
@@ -9293,7 +9334,7 @@ var Video = React38.forwardRef((props, ref) => {
9293
9334
  }
9294
9335
  ) }, r2)) })
9295
9336
  ] }),
9296
- showCaptions && /* @__PURE__ */ jsx346(
9337
+ showCaptions && /* @__PURE__ */ jsx347(
9297
9338
  "button",
9298
9339
  {
9299
9340
  type: "button",
@@ -9301,37 +9342,37 @@ var Video = React38.forwardRef((props, ref) => {
9301
9342
  onClick: toggleCaptions,
9302
9343
  "aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
9303
9344
  "aria-pressed": captionsOn,
9304
- children: /* @__PURE__ */ jsx346(TypeIcon_default, {})
9345
+ children: /* @__PURE__ */ jsx347(TypeIcon_default, {})
9305
9346
  }
9306
9347
  ),
9307
- showPip && pipSupported && /* @__PURE__ */ jsx346(
9348
+ showPip && pipSupported && /* @__PURE__ */ jsx347(
9308
9349
  "button",
9309
9350
  {
9310
9351
  type: "button",
9311
9352
  className: clsx_default("control-btn", isPip && "is-active"),
9312
9353
  onClick: togglePip,
9313
9354
  "aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
9314
- children: /* @__PURE__ */ jsx346(PipIcon, {})
9355
+ children: /* @__PURE__ */ jsx347(PipIcon, {})
9315
9356
  }
9316
9357
  ),
9317
- showDownload && /* @__PURE__ */ jsx346(
9358
+ showDownload && /* @__PURE__ */ jsx347(
9318
9359
  "a",
9319
9360
  {
9320
9361
  className: "control-btn",
9321
9362
  href: src,
9322
9363
  download: downloadFileName ?? true,
9323
9364
  "aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
9324
- children: /* @__PURE__ */ jsx346(DownloadIcon_default, {})
9365
+ children: /* @__PURE__ */ jsx347(DownloadIcon_default, {})
9325
9366
  }
9326
9367
  ),
9327
- /* @__PURE__ */ jsx346(
9368
+ /* @__PURE__ */ jsx347(
9328
9369
  "button",
9329
9370
  {
9330
9371
  type: "button",
9331
9372
  className: "control-btn",
9332
9373
  onClick: toggleFullscreen,
9333
9374
  "aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
9334
- children: isFullscreen ? /* @__PURE__ */ jsx346(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx346(MaximizeIcon_default, {})
9375
+ children: isFullscreen ? /* @__PURE__ */ jsx347(MinimizeIcon_default, {}) : /* @__PURE__ */ jsx347(MaximizeIcon_default, {})
9335
9376
  }
9336
9377
  )
9337
9378
  ] })
@@ -9344,10 +9385,10 @@ Video.displayName = "Video";
9344
9385
  var Video_default = Video;
9345
9386
 
9346
9387
  // src/layout/Grid/FullGrid/FullGrid.tsx
9347
- import { jsx as jsx347 } from "react/jsx-runtime";
9388
+ import { jsx as jsx348 } from "react/jsx-runtime";
9348
9389
  var FullGrid = (props) => {
9349
9390
  const { children, gap } = props;
9350
- return /* @__PURE__ */ jsx347(
9391
+ return /* @__PURE__ */ jsx348(
9351
9392
  "div",
9352
9393
  {
9353
9394
  className: "lib-xplat-full-grid",
@@ -9360,10 +9401,10 @@ FullGrid.displayName = "FullGrid";
9360
9401
  var FullGrid_default = FullGrid;
9361
9402
 
9362
9403
  // src/layout/Grid/FullScreen/FullScreen.tsx
9363
- import { jsx as jsx348 } from "react/jsx-runtime";
9404
+ import { jsx as jsx349 } from "react/jsx-runtime";
9364
9405
  var FullScreen = (props) => {
9365
9406
  const { children, gap } = props;
9366
- return /* @__PURE__ */ jsx348(
9407
+ return /* @__PURE__ */ jsx349(
9367
9408
  "div",
9368
9409
  {
9369
9410
  className: "lib-xplat-full-screen",
@@ -9376,7 +9417,7 @@ FullScreen.displayName = "FullScreen";
9376
9417
  var FullScreen_default = FullScreen;
9377
9418
 
9378
9419
  // src/layout/Grid/Item/Item.tsx
9379
- import { jsx as jsx349 } from "react/jsx-runtime";
9420
+ import { jsx as jsx350 } from "react/jsx-runtime";
9380
9421
  var calculateSpans = (column) => {
9381
9422
  const spans = {};
9382
9423
  let inherited = column.default;
@@ -9393,35 +9434,35 @@ var GridItem = ({ column, children, className }) => {
9393
9434
  Object.entries(spans).forEach(([key, value]) => {
9394
9435
  style[`--column-${key}`] = value;
9395
9436
  });
9396
- return /* @__PURE__ */ jsx349("div", { className: clsx_default("lib-xplat-grid-item", className), style, children });
9437
+ return /* @__PURE__ */ jsx350("div", { className: clsx_default("lib-xplat-grid-item", className), style, children });
9397
9438
  };
9398
9439
  GridItem.displayName = "GridItem";
9399
9440
  var Item_default = GridItem;
9400
9441
 
9401
9442
  // src/layout/Header/Header.tsx
9402
- import { jsx as jsx350, jsxs as jsxs222 } from "react/jsx-runtime";
9443
+ import { jsx as jsx351, jsxs as jsxs222 } from "react/jsx-runtime";
9403
9444
  var Header = ({
9404
9445
  logo,
9405
9446
  centerContent,
9406
9447
  rightContent
9407
9448
  }) => {
9408
9449
  return /* @__PURE__ */ jsxs222("div", { className: "lib-xplat-layout-header", children: [
9409
- /* @__PURE__ */ jsx350("div", { children: logo }),
9410
- /* @__PURE__ */ jsx350("div", { children: centerContent }),
9411
- /* @__PURE__ */ jsx350("div", { children: rightContent })
9450
+ /* @__PURE__ */ jsx351("div", { children: logo }),
9451
+ /* @__PURE__ */ jsx351("div", { children: centerContent }),
9452
+ /* @__PURE__ */ jsx351("div", { children: rightContent })
9412
9453
  ] });
9413
9454
  };
9414
9455
  Header.displayName = "Header";
9415
9456
  var Header_default = Header;
9416
9457
 
9417
9458
  // src/layout/Layout/Layout.tsx
9418
- import { Fragment as Fragment4, jsx as jsx351, jsxs as jsxs223 } from "react/jsx-runtime";
9459
+ import { Fragment as Fragment5, jsx as jsx352, jsxs as jsxs223 } from "react/jsx-runtime";
9419
9460
  var Layout = (props) => {
9420
9461
  const { header, sideBar, children } = props;
9421
- return /* @__PURE__ */ jsx351("div", { className: "lib-xplat-layout", children: /* @__PURE__ */ jsxs223("div", { className: "lib-xplat-layout-content-wrapper", children: [
9422
- sideBar && /* @__PURE__ */ jsx351(Fragment4, { children: sideBar }),
9462
+ return /* @__PURE__ */ jsx352("div", { className: "lib-xplat-layout", children: /* @__PURE__ */ jsxs223("div", { className: "lib-xplat-layout-content-wrapper", children: [
9463
+ sideBar && /* @__PURE__ */ jsx352(Fragment5, { children: sideBar }),
9423
9464
  /* @__PURE__ */ jsxs223("div", { className: "lib-xplat-layout-content", children: [
9424
- header && /* @__PURE__ */ jsx351("div", { className: "lib-xplat-layout-conent-header", children: header }),
9465
+ header && /* @__PURE__ */ jsx352("div", { className: "lib-xplat-layout-conent-header", children: header }),
9425
9466
  children
9426
9467
  ] })
9427
9468
  ] }) });
@@ -9430,31 +9471,31 @@ Layout.displayName = "Layout";
9430
9471
  var Layout_default = Layout;
9431
9472
 
9432
9473
  // src/layout/SideBar/SideBar.tsx
9433
- import React40 from "react";
9474
+ import React41 from "react";
9434
9475
 
9435
9476
  // src/layout/SideBar/SideBarContext.tsx
9436
- import React39 from "react";
9437
- var SideBarContext = React39.createContext(null);
9477
+ import React40 from "react";
9478
+ var SideBarContext = React40.createContext(null);
9438
9479
  var useSideBarContext = () => {
9439
- const ctx = React39.useContext(SideBarContext);
9480
+ const ctx = React40.useContext(SideBarContext);
9440
9481
  if (!ctx) throw new Error("Error");
9441
9482
  return ctx;
9442
9483
  };
9443
9484
  var SideBarContext_default = SideBarContext;
9444
9485
 
9445
9486
  // src/layout/SideBar/SideBar.tsx
9446
- import { jsx as jsx352 } from "react/jsx-runtime";
9487
+ import { jsx as jsx353 } from "react/jsx-runtime";
9447
9488
  var SideBar = (props) => {
9448
9489
  const { children, className } = props;
9449
- const [isOpen, setIsOpen] = React40.useState(true);
9490
+ const [isOpen, setIsOpen] = React41.useState(true);
9450
9491
  const handleSwitchSideBar = () => {
9451
9492
  setIsOpen((prev) => !prev);
9452
9493
  };
9453
- return /* @__PURE__ */ jsx352(
9494
+ return /* @__PURE__ */ jsx353(
9454
9495
  SideBarContext_default.Provider,
9455
9496
  {
9456
9497
  value: { isSidebarOpen: isOpen, handleSwitchSideBar },
9457
- children: /* @__PURE__ */ jsx352(
9498
+ children: /* @__PURE__ */ jsx353(
9458
9499
  "div",
9459
9500
  {
9460
9501
  className: clsx_default(