@x-plat/design-system 0.8.0 → 0.8.1

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.
@@ -2982,7 +2982,7 @@ Chip.displayName = "Chip";
2982
2982
  var Chip_default = Chip;
2983
2983
 
2984
2984
  // src/components/DatePicker/InputDatePicker/index.tsx
2985
- var import_react14 = __toESM(require("react"), 1);
2985
+ var import_react13 = __toESM(require("react"), 1);
2986
2986
 
2987
2987
  // src/components/Input/Input.tsx
2988
2988
  var import_react8 = __toESM(require("react"), 1);
@@ -3173,38 +3173,26 @@ PasswordInput.displayName = "PasswordInput";
3173
3173
  var PasswordInput_default = PasswordInput;
3174
3174
 
3175
3175
  // src/components/Modal/Modal.tsx
3176
- var import_react12 = __toESM(require("react"), 1);
3177
- var import_react_dom2 = require("react-dom");
3178
-
3179
- // src/tokens/hooks/Portal.tsx
3180
3176
  var import_react11 = __toESM(require("react"), 1);
3181
- var import_react_dom = __toESM(require("react-dom"), 1);
3177
+ var import_react_dom = require("react-dom");
3182
3178
  var import_jsx_runtime313 = require("react/jsx-runtime");
3183
- var PortalContainerContext = import_react11.default.createContext(null);
3184
- var PortalProvider = ({ container, children }) => /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(PortalContainerContext.Provider, { value: container, children });
3185
- var Portal = ({ children }) => {
3186
- const contextContainer = import_react11.default.useContext(PortalContainerContext);
3187
- if (typeof document === "undefined") return null;
3188
- const container = contextContainer ?? document.body;
3189
- return import_react_dom.default.createPortal(children, container);
3190
- };
3191
- Portal.displayName = "Portal";
3192
- var Portal_default = Portal;
3193
-
3194
- // src/components/Modal/Modal.tsx
3195
- var import_jsx_runtime314 = require("react/jsx-runtime");
3196
3179
  var ANIMATION_DURATION_MS = 200;
3197
3180
  var Modal = (props) => {
3198
3181
  const { isOpen, onClose, children } = props;
3199
- const [mounted, setMounted] = import_react12.default.useState(false);
3200
- const [visible, setVisible] = import_react12.default.useState(false);
3201
- const boxRef = import_react12.default.useRef(null);
3202
- import_react12.default.useEffect(() => {
3182
+ const [mounted, setMounted] = import_react11.default.useState(false);
3183
+ const [visible, setVisible] = import_react11.default.useState(false);
3184
+ const [settled, setSettled] = import_react11.default.useState(false);
3185
+ import_react11.default.useEffect(() => {
3203
3186
  if (isOpen) {
3204
3187
  setMounted(true);
3205
- const t2 = setTimeout(() => setVisible(true), 1);
3206
- return () => clearTimeout(t2);
3188
+ const show = setTimeout(() => setVisible(true), 1);
3189
+ const settle = setTimeout(() => setSettled(true), ANIMATION_DURATION_MS + 50);
3190
+ return () => {
3191
+ clearTimeout(show);
3192
+ clearTimeout(settle);
3193
+ };
3207
3194
  }
3195
+ setSettled(false);
3208
3196
  setVisible(false);
3209
3197
  const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS);
3210
3198
  return () => clearTimeout(t);
@@ -3212,21 +3200,20 @@ var Modal = (props) => {
3212
3200
  if (typeof document === "undefined") return null;
3213
3201
  if (!mounted) return null;
3214
3202
  const stateClass = visible ? "enter" : "exit";
3215
- return (0, import_react_dom2.createPortal)(
3216
- /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
3203
+ return (0, import_react_dom.createPortal)(
3204
+ /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
3217
3205
  "div",
3218
3206
  {
3219
3207
  className: clsx_default("lib-xplat-modal", "dim", stateClass),
3220
3208
  onClick: onClose,
3221
- children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
3209
+ children: /* @__PURE__ */ (0, import_jsx_runtime313.jsx)(
3222
3210
  "div",
3223
3211
  {
3224
- ref: boxRef,
3225
- className: clsx_default("lib-xplat-modal", "modal-box", stateClass),
3212
+ className: clsx_default("lib-xplat-modal", "modal-box", stateClass, settled && "settled"),
3226
3213
  role: "dialog",
3227
3214
  "aria-modal": "true",
3228
3215
  onClick: (e) => e.stopPropagation(),
3229
- children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(PortalProvider, { container: boxRef.current, children })
3216
+ children
3230
3217
  }
3231
3218
  )
3232
3219
  }
@@ -3238,9 +3225,9 @@ Modal.displayName = "Modal";
3238
3225
  var Modal_default = Modal;
3239
3226
 
3240
3227
  // src/components/DatePicker/SingleDatePicker/index.tsx
3241
- var import_react13 = __toESM(require("react"), 1);
3242
- var import_jsx_runtime315 = require("react/jsx-runtime");
3243
- var DayCell2 = import_react13.default.memo(
3228
+ var import_react12 = __toESM(require("react"), 1);
3229
+ var import_jsx_runtime314 = require("react/jsx-runtime");
3230
+ var DayCell2 = import_react12.default.memo(
3244
3231
  ({
3245
3232
  day,
3246
3233
  disabled,
@@ -3250,7 +3237,7 @@ var DayCell2 = import_react13.default.memo(
3250
3237
  isEnd,
3251
3238
  inRange,
3252
3239
  onSelect
3253
- }) => /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
3240
+ }) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
3254
3241
  "button",
3255
3242
  {
3256
3243
  type: "button",
@@ -3292,26 +3279,26 @@ var SingleDatePicker = (props) => {
3292
3279
  initialYear,
3293
3280
  initialMonth
3294
3281
  );
3295
- const [pickerMode, setPickerMode] = import_react13.default.useState("days");
3296
- const [yearRangeStart, setYearRangeStart] = import_react13.default.useState(
3282
+ const [pickerMode, setPickerMode] = import_react12.default.useState("days");
3283
+ const [yearRangeStart, setYearRangeStart] = import_react12.default.useState(
3297
3284
  Math.floor((initialYear ?? (/* @__PURE__ */ new Date()).getFullYear()) / 12) * 12
3298
3285
  );
3299
- const minTime = import_react13.default.useMemo(
3286
+ const minTime = import_react12.default.useMemo(
3300
3287
  () => minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()).getTime() : -Infinity,
3301
3288
  [minDate]
3302
3289
  );
3303
- const maxTime = import_react13.default.useMemo(
3290
+ const maxTime = import_react12.default.useMemo(
3304
3291
  () => maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()).getTime() : Infinity,
3305
3292
  [maxDate]
3306
3293
  );
3307
- const highlightSet = import_react13.default.useMemo(() => {
3294
+ const highlightSet = import_react12.default.useMemo(() => {
3308
3295
  const set = /* @__PURE__ */ new Set();
3309
3296
  for (const h of highlightDates) {
3310
3297
  set.add(`${h.getFullYear()}-${h.getMonth()}-${h.getDate()}`);
3311
3298
  }
3312
3299
  return set;
3313
3300
  }, [highlightDates]);
3314
- const handleSelect = import_react13.default.useCallback(
3301
+ const handleSelect = import_react12.default.useCallback(
3315
3302
  (date) => {
3316
3303
  onChange?.(date);
3317
3304
  },
@@ -3348,20 +3335,20 @@ var SingleDatePicker = (props) => {
3348
3335
  const monthLabels = MONTH_LABELS[locale];
3349
3336
  const titleText = pickerMode === "days" ? locale === "ko" ? `${year}\uB144 ${monthLabels[month]}` : `${monthLabels[month]} ${year}` : pickerMode === "months" ? `${year}` : `${yearRangeStart} - ${yearRangeStart + 11}`;
3350
3337
  const hasRange = rangeStart != null && rangeEnd != null;
3351
- return /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)(
3338
+ return /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(
3352
3339
  "div",
3353
3340
  {
3354
3341
  className: clsx_default("lib-xplat-datepicker", "single"),
3355
3342
  children: [
3356
- /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "datepicker-header", children: [
3357
- /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(ChevronLeftIcon_default, {}) }),
3358
- /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
3359
- /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(ChevronRightIcon_default, {}) })
3343
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "datepicker-header", children: [
3344
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("button", { className: "datepicker-nav", onClick: handlePrev, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(ChevronLeftIcon_default, {}) }),
3345
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("button", { className: "datepicker-title", onClick: handleTitleClick, type: "button", children: titleText }),
3346
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("button", { className: "datepicker-nav", onClick: handleNext, type: "button", children: /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(ChevronRightIcon_default, {}) })
3360
3347
  ] }),
3361
- /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "datepicker-body", children: [
3362
- pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
3348
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)("div", { className: "datepicker-body", children: [
3349
+ pickerMode === "years" && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-picker-grid", children: Array.from({ length: 12 }, (_, i) => {
3363
3350
  const y = yearRangeStart + i;
3364
- return /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
3351
+ return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
3365
3352
  "button",
3366
3353
  {
3367
3354
  type: "button",
@@ -3372,7 +3359,7 @@ var SingleDatePicker = (props) => {
3372
3359
  y
3373
3360
  );
3374
3361
  }) }),
3375
- pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
3362
+ pickerMode === "months" && /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-picker-grid", children: monthLabels.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
3376
3363
  "button",
3377
3364
  {
3378
3365
  type: "button",
@@ -3382,8 +3369,8 @@ var SingleDatePicker = (props) => {
3382
3369
  },
3383
3370
  i
3384
3371
  )) }),
3385
- pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)(import_jsx_runtime315.Fragment, { children: [
3386
- /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
3372
+ pickerMode === "days" && /* @__PURE__ */ (0, import_jsx_runtime314.jsxs)(import_jsx_runtime314.Fragment, { children: [
3373
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-weekdays", children: weekdays.map((label, i) => /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
3387
3374
  "div",
3388
3375
  {
3389
3376
  className: clsx_default(
@@ -3395,7 +3382,7 @@ var SingleDatePicker = (props) => {
3395
3382
  },
3396
3383
  label
3397
3384
  )) }),
3398
- /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
3385
+ /* @__PURE__ */ (0, import_jsx_runtime314.jsx)("div", { className: "datepicker-grid", children: days.map((day, idx) => {
3399
3386
  const t = day.date.getTime();
3400
3387
  const disabled = t < minTime || t > maxTime;
3401
3388
  const selected = value ? isSameDay(day.date, value) : false;
@@ -3405,7 +3392,7 @@ var SingleDatePicker = (props) => {
3405
3392
  const isStart = hasRange ? isSameDay(day.date, rangeStart) : false;
3406
3393
  const isEnd = hasRange ? isSameDay(day.date, rangeEnd) : false;
3407
3394
  const inRangeVal = hasRange ? isInRange(day.date, rangeStart, rangeEnd) : false;
3408
- return /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
3395
+ return /* @__PURE__ */ (0, import_jsx_runtime314.jsx)(
3409
3396
  DayCell2,
3410
3397
  {
3411
3398
  day,
@@ -3430,7 +3417,7 @@ SingleDatePicker.displayName = "SingleDatePicker";
3430
3417
  var SingleDatePicker_default = SingleDatePicker;
3431
3418
 
3432
3419
  // src/components/DatePicker/InputDatePicker/index.tsx
3433
- var import_jsx_runtime316 = require("react/jsx-runtime");
3420
+ var import_jsx_runtime315 = require("react/jsx-runtime");
3434
3421
  var formatDate = (date) => {
3435
3422
  if (!date || !(date instanceof Date) || isNaN(date.getTime())) return "";
3436
3423
  const y = date.getFullYear();
@@ -3440,8 +3427,8 @@ var formatDate = (date) => {
3440
3427
  };
3441
3428
  var InputDatePicker = (props) => {
3442
3429
  const { value, onChange, minDate, maxDate, disabled, locale = "ko", placeholder } = props;
3443
- const [isOpen, setIsOpen] = import_react14.default.useState(false);
3444
- const [tempDate, setTempDate] = import_react14.default.useState(value ?? /* @__PURE__ */ new Date());
3430
+ const [isOpen, setIsOpen] = import_react13.default.useState(false);
3431
+ const [tempDate, setTempDate] = import_react13.default.useState(value ?? /* @__PURE__ */ new Date());
3445
3432
  const handleOpen = () => {
3446
3433
  if (disabled) return;
3447
3434
  setTempDate(value ?? /* @__PURE__ */ new Date());
@@ -3457,19 +3444,19 @@ var InputDatePicker = (props) => {
3457
3444
  const handleClose = () => {
3458
3445
  setIsOpen(false);
3459
3446
  };
3460
- return /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
3461
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
3447
+ return /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: clsx_default("lib-xplat-datepicker input-datepicker", disabled && "disabled"), children: [
3448
+ /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "input-datepicker-trigger", onClick: handleOpen, children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
3462
3449
  Input_default,
3463
3450
  {
3464
3451
  value: formatDate(value),
3465
3452
  placeholder,
3466
- suffix: /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(CalenderIcon_default, {}),
3453
+ suffix: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(CalenderIcon_default, {}),
3467
3454
  disabled,
3468
3455
  readOnly: true
3469
3456
  }
3470
3457
  ) }),
3471
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: "lib-xplat-popup-datepicker-card", children: [
3472
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
3458
+ /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "lib-xplat-popup-datepicker-card", children: [
3459
+ /* @__PURE__ */ (0, import_jsx_runtime315.jsx)("div", { className: "popup-datepicker-content", children: /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(
3473
3460
  SingleDatePicker_default,
3474
3461
  {
3475
3462
  value: tempDate,
@@ -3479,9 +3466,9 @@ var InputDatePicker = (props) => {
3479
3466
  locale
3480
3467
  }
3481
3468
  ) }),
3482
- /* @__PURE__ */ (0, import_jsx_runtime316.jsxs)("div", { className: "popup-datepicker-footer", children: [
3483
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
3484
- /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
3469
+ /* @__PURE__ */ (0, import_jsx_runtime315.jsxs)("div", { className: "popup-datepicker-footer", children: [
3470
+ /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(Button_default, { type: "secondary", onClick: handleClose, children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel" }),
3471
+ /* @__PURE__ */ (0, import_jsx_runtime315.jsx)(Button_default, { type: "primary", onClick: handleApply, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
3485
3472
  ] })
3486
3473
  ] }) })
3487
3474
  ] });
@@ -3490,20 +3477,20 @@ InputDatePicker.displayName = "InputDatePicker";
3490
3477
  var InputDatePicker_default = InputDatePicker;
3491
3478
 
3492
3479
  // src/components/DatePicker/PopupPicker/index.tsx
3493
- var import_react18 = __toESM(require("react"), 1);
3480
+ var import_react17 = __toESM(require("react"), 1);
3494
3481
 
3495
3482
  // src/components/DatePicker/RangePicker/index.tsx
3496
- var import_react17 = __toESM(require("react"), 1);
3483
+ var import_react16 = __toESM(require("react"), 1);
3497
3484
 
3498
3485
  // src/components/Tab/Tab.tsx
3499
- var import_react16 = __toESM(require("react"), 1);
3486
+ var import_react15 = __toESM(require("react"), 1);
3500
3487
 
3501
3488
  // src/components/Tab/TabItem.tsx
3502
- var import_react15 = __toESM(require("react"), 1);
3503
- var import_jsx_runtime317 = require("react/jsx-runtime");
3504
- var TabItem = import_react15.default.forwardRef((props, ref) => {
3489
+ var import_react14 = __toESM(require("react"), 1);
3490
+ var import_jsx_runtime316 = require("react/jsx-runtime");
3491
+ var TabItem = import_react14.default.forwardRef((props, ref) => {
3505
3492
  const { isActive: isActive2, title, onClick } = props;
3506
- return /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
3493
+ return /* @__PURE__ */ (0, import_jsx_runtime316.jsx)(
3507
3494
  "div",
3508
3495
  {
3509
3496
  ref,
@@ -3517,25 +3504,25 @@ TabItem.displayName = "TabItem";
3517
3504
  var TabItem_default = TabItem;
3518
3505
 
3519
3506
  // src/components/Tab/Tab.tsx
3520
- var import_jsx_runtime318 = require("react/jsx-runtime");
3507
+ var import_jsx_runtime317 = require("react/jsx-runtime");
3521
3508
  var Tab = (props) => {
3522
3509
  const { activeIndex, onChange, tabs, type, size = "md" } = props;
3523
- const [underlineStyle, setUnderlineStyle] = import_react16.default.useState({
3510
+ const [underlineStyle, setUnderlineStyle] = import_react15.default.useState({
3524
3511
  left: 0,
3525
3512
  width: 0
3526
3513
  });
3527
- const itemRefs = import_react16.default.useRef([]);
3514
+ const itemRefs = import_react15.default.useRef([]);
3528
3515
  const handleChangeActiveTab = (tabItem, tabIdx) => {
3529
3516
  onChange(tabItem, tabIdx);
3530
3517
  };
3531
- import_react16.default.useEffect(() => {
3518
+ import_react15.default.useEffect(() => {
3532
3519
  const el = itemRefs.current[activeIndex];
3533
3520
  if (el) {
3534
3521
  setUnderlineStyle({ left: el.offsetLeft, width: el.offsetWidth });
3535
3522
  }
3536
3523
  }, [activeIndex, tabs.length]);
3537
- return /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
3538
- tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
3524
+ return /* @__PURE__ */ (0, import_jsx_runtime317.jsxs)("div", { className: clsx_default("lib-xplat-tab", `type-${type}`, size), children: [
3525
+ tabs.map((tab, idx) => /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
3539
3526
  TabItem_default,
3540
3527
  {
3541
3528
  onClick: () => handleChangeActiveTab(tab, idx),
@@ -3547,7 +3534,7 @@ var Tab = (props) => {
3547
3534
  },
3548
3535
  `${tab.value}_${idx}`
3549
3536
  )),
3550
- type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
3537
+ type === "toggle" && /* @__PURE__ */ (0, import_jsx_runtime317.jsx)(
3551
3538
  "div",
3552
3539
  {
3553
3540
  className: "tab-toggle-underline",
@@ -3563,7 +3550,7 @@ Tab.displayName = "Tab";
3563
3550
  var Tab_default = Tab;
3564
3551
 
3565
3552
  // src/components/DatePicker/RangePicker/index.tsx
3566
- var import_jsx_runtime319 = require("react/jsx-runtime");
3553
+ var import_jsx_runtime318 = require("react/jsx-runtime");
3567
3554
  var RangePicker = (props) => {
3568
3555
  const {
3569
3556
  startDate,
@@ -3573,7 +3560,7 @@ var RangePicker = (props) => {
3573
3560
  maxDate,
3574
3561
  locale = "ko"
3575
3562
  } = props;
3576
- const [activeTab, setActiveTab] = import_react17.default.useState("start");
3563
+ const [activeTab, setActiveTab] = import_react16.default.useState("start");
3577
3564
  const handleStartChange = (date) => {
3578
3565
  if (!date) return;
3579
3566
  const newStart = date > endDate ? endDate : date;
@@ -3586,8 +3573,8 @@ var RangePicker = (props) => {
3586
3573
  };
3587
3574
  const startMaxDate = maxDate && endDate < maxDate ? endDate : endDate;
3588
3575
  const endMinDate = minDate && startDate > minDate ? startDate : startDate;
3589
- return /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
3590
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
3576
+ return /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: clsx_default("lib-xplat-datepicker", "range"), children: [
3577
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsx)("div", { className: "datepicker-range-tabs", children: /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
3591
3578
  Tab_default,
3592
3579
  {
3593
3580
  activeIndex: activeTab === "start" ? 0 : 1,
@@ -3600,8 +3587,8 @@ var RangePicker = (props) => {
3600
3587
  size: "sm"
3601
3588
  }
3602
3589
  ) }),
3603
- /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "datepicker-range-panels", children: [
3604
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
3590
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsxs)("div", { className: "datepicker-range-panels", children: [
3591
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
3605
3592
  SingleDatePicker_default,
3606
3593
  {
3607
3594
  value: startDate,
@@ -3613,7 +3600,7 @@ var RangePicker = (props) => {
3613
3600
  locale
3614
3601
  }
3615
3602
  ),
3616
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
3603
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
3617
3604
  SingleDatePicker_default,
3618
3605
  {
3619
3606
  value: endDate,
@@ -3626,7 +3613,7 @@ var RangePicker = (props) => {
3626
3613
  }
3627
3614
  )
3628
3615
  ] }),
3629
- /* @__PURE__ */ (0, import_jsx_runtime319.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
3616
+ /* @__PURE__ */ (0, import_jsx_runtime318.jsx)("div", { className: "datepicker-range-mobile", children: activeTab === "start" ? /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
3630
3617
  SingleDatePicker_default,
3631
3618
  {
3632
3619
  value: startDate,
@@ -3637,7 +3624,7 @@ var RangePicker = (props) => {
3637
3624
  rangeEnd: endDate,
3638
3625
  locale
3639
3626
  }
3640
- ) : /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
3627
+ ) : /* @__PURE__ */ (0, import_jsx_runtime318.jsx)(
3641
3628
  SingleDatePicker_default,
3642
3629
  {
3643
3630
  value: endDate,
@@ -3655,10 +3642,10 @@ RangePicker.displayName = "RangePicker";
3655
3642
  var RangePicker_default = RangePicker;
3656
3643
 
3657
3644
  // src/components/DatePicker/PopupPicker/index.tsx
3658
- var import_jsx_runtime320 = require("react/jsx-runtime");
3645
+ var import_jsx_runtime319 = require("react/jsx-runtime");
3659
3646
  var PopupPicker = (props) => {
3660
3647
  const { component, type, locale } = props;
3661
- const [isOpen, setIsOpen] = import_react18.default.useState(false);
3648
+ const [isOpen, setIsOpen] = import_react17.default.useState(false);
3662
3649
  const handleClick = () => setIsOpen(true);
3663
3650
  const handleClose = () => setIsOpen(false);
3664
3651
  const handleSingleChange = (date) => {
@@ -3666,11 +3653,11 @@ var PopupPicker = (props) => {
3666
3653
  props.onChange?.(date);
3667
3654
  handleClose();
3668
3655
  };
3669
- return /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
3670
- import_react18.default.cloneElement(component, { onClick: handleClick }),
3671
- /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
3672
- /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "popup-datepicker-content", children: [
3673
- type === "single" && /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
3656
+ return /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "lib-xplat-popup-datepicker", children: [
3657
+ import_react17.default.cloneElement(component, { onClick: handleClick }),
3658
+ /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(Modal_default, { isOpen, onClose: handleClose, children: /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: clsx_default("lib-xplat-popup-datepicker-card", type === "range" && "range-mode"), children: [
3659
+ /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "popup-datepicker-content", children: [
3660
+ type === "single" && /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
3674
3661
  SingleDatePicker_default,
3675
3662
  {
3676
3663
  value: props.value,
@@ -3680,7 +3667,7 @@ var PopupPicker = (props) => {
3680
3667
  locale
3681
3668
  }
3682
3669
  ),
3683
- type === "range" && /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
3670
+ type === "range" && /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
3684
3671
  RangePicker_default,
3685
3672
  {
3686
3673
  startDate: props.startDate,
@@ -3692,8 +3679,8 @@ var PopupPicker = (props) => {
3692
3679
  }
3693
3680
  )
3694
3681
  ] }),
3695
- /* @__PURE__ */ (0, import_jsx_runtime320.jsxs)("div", { className: "popup-datepicker-footer", children: [
3696
- /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
3682
+ /* @__PURE__ */ (0, import_jsx_runtime319.jsxs)("div", { className: "popup-datepicker-footer", children: [
3683
+ /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(
3697
3684
  Button_default,
3698
3685
  {
3699
3686
  type: "secondary",
@@ -3701,7 +3688,7 @@ var PopupPicker = (props) => {
3701
3688
  children: locale === "ko" ? "\uCDE8\uC18C" : "Cancel"
3702
3689
  }
3703
3690
  ),
3704
- /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
3691
+ /* @__PURE__ */ (0, import_jsx_runtime319.jsx)(Button_default, { type: "primary", onClick: handleClose, children: locale === "ko" ? "\uC801\uC6A9" : "Apply" })
3705
3692
  ] })
3706
3693
  ] }) })
3707
3694
  ] });
@@ -3710,10 +3697,10 @@ PopupPicker.displayName = "PopupPicker";
3710
3697
  var PopupPicker_default = PopupPicker;
3711
3698
 
3712
3699
  // src/components/Divider/Divider.tsx
3713
- var import_jsx_runtime321 = require("react/jsx-runtime");
3700
+ var import_jsx_runtime320 = require("react/jsx-runtime");
3714
3701
  var Divider = (props) => {
3715
3702
  const { orientation = "horizontal" } = props;
3716
- return /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
3703
+ return /* @__PURE__ */ (0, import_jsx_runtime320.jsx)(
3717
3704
  "div",
3718
3705
  {
3719
3706
  className: clsx_default("lib-xplat-divider", orientation),
@@ -3726,15 +3713,15 @@ Divider.displayName = "Divider";
3726
3713
  var Divider_default = Divider;
3727
3714
 
3728
3715
  // src/components/Drawer/Drawer.tsx
3729
- var import_react19 = __toESM(require("react"), 1);
3730
- var import_react_dom3 = require("react-dom");
3731
- var import_jsx_runtime322 = require("react/jsx-runtime");
3716
+ var import_react18 = __toESM(require("react"), 1);
3717
+ var import_react_dom2 = require("react-dom");
3718
+ var import_jsx_runtime321 = require("react/jsx-runtime");
3732
3719
  var ANIMATION_DURATION_MS2 = 250;
3733
3720
  var Drawer = (props) => {
3734
3721
  const { isOpen, onClose, placement = "right", size = "md", title, children } = props;
3735
- const [mounted, setMounted] = import_react19.default.useState(false);
3736
- const [visible, setVisible] = import_react19.default.useState(false);
3737
- import_react19.default.useEffect(() => {
3722
+ const [mounted, setMounted] = import_react18.default.useState(false);
3723
+ const [visible, setVisible] = import_react18.default.useState(false);
3724
+ import_react18.default.useEffect(() => {
3738
3725
  if (isOpen) {
3739
3726
  setMounted(true);
3740
3727
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -3747,13 +3734,13 @@ var Drawer = (props) => {
3747
3734
  if (typeof document === "undefined") return null;
3748
3735
  if (!mounted) return null;
3749
3736
  const stateClass = visible ? "enter" : "exit";
3750
- return (0, import_react_dom3.createPortal)(
3751
- /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
3737
+ return (0, import_react_dom2.createPortal)(
3738
+ /* @__PURE__ */ (0, import_jsx_runtime321.jsx)(
3752
3739
  "div",
3753
3740
  {
3754
3741
  className: clsx_default("lib-xplat-drawer-overlay", stateClass),
3755
3742
  onClick: onClose,
3756
- children: /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)(
3743
+ children: /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)(
3757
3744
  "div",
3758
3745
  {
3759
3746
  className: clsx_default("lib-xplat-drawer", placement, size, stateClass),
@@ -3761,11 +3748,11 @@ var Drawer = (props) => {
3761
3748
  "aria-modal": "true",
3762
3749
  onClick: (e) => e.stopPropagation(),
3763
3750
  children: [
3764
- title && /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)("div", { className: "drawer-header", children: [
3765
- /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("span", { className: "drawer-title", children: title }),
3766
- /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
3751
+ title && /* @__PURE__ */ (0, import_jsx_runtime321.jsxs)("div", { className: "drawer-header", children: [
3752
+ /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("span", { className: "drawer-title", children: title }),
3753
+ /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
3767
3754
  ] }),
3768
- /* @__PURE__ */ (0, import_jsx_runtime322.jsx)("div", { className: "drawer-body", children })
3755
+ /* @__PURE__ */ (0, import_jsx_runtime321.jsx)("div", { className: "drawer-body", children })
3769
3756
  ]
3770
3757
  }
3771
3758
  )
@@ -3778,16 +3765,25 @@ Drawer.displayName = "Drawer";
3778
3765
  var Drawer_default = Drawer;
3779
3766
 
3780
3767
  // src/components/Dropdown/Dropdown.tsx
3781
- var import_react22 = __toESM(require("react"), 1);
3768
+ var import_react21 = __toESM(require("react"), 1);
3769
+
3770
+ // src/tokens/hooks/Portal.tsx
3771
+ var import_react_dom3 = __toESM(require("react-dom"), 1);
3772
+ var Portal = ({ children }) => {
3773
+ if (typeof document === "undefined") return null;
3774
+ return import_react_dom3.default.createPortal(children, document.body);
3775
+ };
3776
+ Portal.displayName = "Portal";
3777
+ var Portal_default = Portal;
3782
3778
 
3783
3779
  // src/tokens/hooks/useAutoPosition.ts
3784
- var import_react20 = __toESM(require("react"), 1);
3780
+ var import_react19 = __toESM(require("react"), 1);
3785
3781
  var useAutoPosition = (triggerRef, popRef, enabled = true) => {
3786
- const [position, setPosition] = import_react20.default.useState({
3782
+ const [position, setPosition] = import_react19.default.useState({
3787
3783
  position: {},
3788
3784
  direction: "bottom"
3789
3785
  });
3790
- const calculatePosition = import_react20.default.useCallback(() => {
3786
+ const calculatePosition = import_react19.default.useCallback(() => {
3791
3787
  if (!triggerRef.current || !popRef.current) return;
3792
3788
  const triggerRect = triggerRef.current.getBoundingClientRect();
3793
3789
  const popW = popRef.current.offsetWidth;
@@ -3814,13 +3810,13 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
3814
3810
  direction
3815
3811
  });
3816
3812
  }, [triggerRef, popRef]);
3817
- import_react20.default.useLayoutEffect(() => {
3813
+ import_react19.default.useLayoutEffect(() => {
3818
3814
  if (!enabled) return;
3819
3815
  calculatePosition();
3820
3816
  const raf = requestAnimationFrame(calculatePosition);
3821
3817
  return () => cancelAnimationFrame(raf);
3822
3818
  }, [calculatePosition, enabled]);
3823
- import_react20.default.useEffect(() => {
3819
+ import_react19.default.useEffect(() => {
3824
3820
  if (!enabled || !popRef.current) return;
3825
3821
  const observer = new ResizeObserver(() => {
3826
3822
  calculatePosition();
@@ -3828,7 +3824,7 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
3828
3824
  observer.observe(popRef.current);
3829
3825
  return () => observer.disconnect();
3830
3826
  }, [calculatePosition, enabled, popRef]);
3831
- import_react20.default.useEffect(() => {
3827
+ import_react19.default.useEffect(() => {
3832
3828
  if (!enabled) return;
3833
3829
  window.addEventListener("resize", calculatePosition);
3834
3830
  window.addEventListener("scroll", calculatePosition, true);
@@ -3842,9 +3838,9 @@ var useAutoPosition = (triggerRef, popRef, enabled = true) => {
3842
3838
  var useAutoPosition_default = useAutoPosition;
3843
3839
 
3844
3840
  // src/tokens/hooks/useClickOutside.ts
3845
- var import_react21 = __toESM(require("react"), 1);
3841
+ var import_react20 = __toESM(require("react"), 1);
3846
3842
  var useClickOutside = (refs, handler, enabled = true) => {
3847
- import_react21.default.useEffect(() => {
3843
+ import_react20.default.useEffect(() => {
3848
3844
  if (!enabled) return;
3849
3845
  const refArray = Array.isArray(refs) ? refs : [refs];
3850
3846
  const listener = (event) => {
@@ -3867,17 +3863,17 @@ var useClickOutside = (refs, handler, enabled = true) => {
3867
3863
  var useClickOutside_default = useClickOutside;
3868
3864
 
3869
3865
  // src/components/Dropdown/Dropdown.tsx
3870
- var import_jsx_runtime323 = require("react/jsx-runtime");
3866
+ var import_jsx_runtime322 = require("react/jsx-runtime");
3871
3867
  var Dropdown = (props) => {
3872
3868
  const { items, children } = props;
3873
- const [isOpen, setIsOpen] = import_react22.default.useState(false);
3874
- const [mounted, setMounted] = import_react22.default.useState(false);
3875
- const [visible, setVisible] = import_react22.default.useState(false);
3876
- const triggerRef = import_react22.default.useRef(null);
3877
- const menuRef = import_react22.default.useRef(null);
3869
+ const [isOpen, setIsOpen] = import_react21.default.useState(false);
3870
+ const [mounted, setMounted] = import_react21.default.useState(false);
3871
+ const [visible, setVisible] = import_react21.default.useState(false);
3872
+ const triggerRef = import_react21.default.useRef(null);
3873
+ const menuRef = import_react21.default.useRef(null);
3878
3874
  const { position, direction } = useAutoPosition_default(triggerRef, menuRef, mounted);
3879
3875
  useClickOutside_default([triggerRef, menuRef], () => setIsOpen(false), isOpen);
3880
- import_react22.default.useEffect(() => {
3876
+ import_react21.default.useEffect(() => {
3881
3877
  if (isOpen) {
3882
3878
  setMounted(true);
3883
3879
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -3892,8 +3888,8 @@ var Dropdown = (props) => {
3892
3888
  item.onClick?.();
3893
3889
  setIsOpen(false);
3894
3890
  };
3895
- return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)("div", { className: "lib-xplat-dropdown", children: [
3896
- /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
3891
+ return /* @__PURE__ */ (0, import_jsx_runtime322.jsxs)("div", { className: "lib-xplat-dropdown", children: [
3892
+ /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
3897
3893
  "div",
3898
3894
  {
3899
3895
  ref: triggerRef,
@@ -3902,14 +3898,14 @@ var Dropdown = (props) => {
3902
3898
  children
3903
3899
  }
3904
3900
  ),
3905
- mounted && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
3901
+ mounted && /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
3906
3902
  "div",
3907
3903
  {
3908
3904
  ref: menuRef,
3909
3905
  className: clsx_default("lib-xplat-dropdown-menu", direction, { visible }),
3910
3906
  style: { top: position.top, left: position.left },
3911
3907
  role: "menu",
3912
- children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
3908
+ children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime322.jsx)(
3913
3909
  "button",
3914
3910
  {
3915
3911
  className: clsx_default("dropdown-item", {
@@ -3931,8 +3927,8 @@ Dropdown.displayName = "Dropdown";
3931
3927
  var Dropdown_default = Dropdown;
3932
3928
 
3933
3929
  // src/components/Editor/Editor.tsx
3934
- var import_react23 = __toESM(require("react"), 1);
3935
- var import_jsx_runtime324 = require("react/jsx-runtime");
3930
+ var import_react22 = __toESM(require("react"), 1);
3931
+ var import_jsx_runtime323 = require("react/jsx-runtime");
3936
3932
  var DEFAULT_TOOLBAR = [
3937
3933
  "bold",
3938
3934
  "italic",
@@ -4039,21 +4035,21 @@ var Editor = (props) => {
4039
4035
  onImageUpload,
4040
4036
  minHeight = 200
4041
4037
  } = props;
4042
- const editorRef = import_react23.default.useRef(null);
4043
- const lastRangeRef = import_react23.default.useRef(null);
4044
- const composingRef = import_react23.default.useRef(false);
4045
- const [isFocused, setIsFocused] = import_react23.default.useState(false);
4046
- const [isEmpty, setIsEmpty] = import_react23.default.useState(!value);
4047
- const [activeFormats, setActiveFormats] = import_react23.default.useState(/* @__PURE__ */ new Set());
4048
- const [slashOpen, setSlashOpen] = import_react23.default.useState(false);
4049
- const [slashFilter, setSlashFilter] = import_react23.default.useState("");
4050
- const [slashIdx, setSlashIdx] = import_react23.default.useState(0);
4051
- const [slashPos, setSlashPos] = import_react23.default.useState({ top: 0, left: 0 });
4052
- const slashStartRangeRef = import_react23.default.useRef(null);
4053
- const [linkOpen, setLinkOpen] = import_react23.default.useState(false);
4054
- const [linkValue, setLinkValue] = import_react23.default.useState("");
4055
- const [linkPos, setLinkPos] = import_react23.default.useState({ top: 0, left: 0 });
4056
- import_react23.default.useEffect(() => {
4038
+ const editorRef = import_react22.default.useRef(null);
4039
+ const lastRangeRef = import_react22.default.useRef(null);
4040
+ const composingRef = import_react22.default.useRef(false);
4041
+ const [isFocused, setIsFocused] = import_react22.default.useState(false);
4042
+ const [isEmpty, setIsEmpty] = import_react22.default.useState(!value);
4043
+ const [activeFormats, setActiveFormats] = import_react22.default.useState(/* @__PURE__ */ new Set());
4044
+ const [slashOpen, setSlashOpen] = import_react22.default.useState(false);
4045
+ const [slashFilter, setSlashFilter] = import_react22.default.useState("");
4046
+ const [slashIdx, setSlashIdx] = import_react22.default.useState(0);
4047
+ const [slashPos, setSlashPos] = import_react22.default.useState({ top: 0, left: 0 });
4048
+ const slashStartRangeRef = import_react22.default.useRef(null);
4049
+ const [linkOpen, setLinkOpen] = import_react22.default.useState(false);
4050
+ const [linkValue, setLinkValue] = import_react22.default.useState("");
4051
+ const [linkPos, setLinkPos] = import_react22.default.useState({ top: 0, left: 0 });
4052
+ import_react22.default.useEffect(() => {
4057
4053
  if (!editorRef.current) return;
4058
4054
  if (editorRef.current.innerHTML !== value) {
4059
4055
  editorRef.current.innerHTML = sanitizeHtml(value || "");
@@ -4167,7 +4163,7 @@ var Editor = (props) => {
4167
4163
  setSlashIdx(0);
4168
4164
  slashStartRangeRef.current = null;
4169
4165
  };
4170
- const filteredSlashItems = import_react23.default.useMemo(() => {
4166
+ const filteredSlashItems = import_react22.default.useMemo(() => {
4171
4167
  if (!slashFilter) return SLASH_ITEMS;
4172
4168
  const f = slashFilter.toLowerCase();
4173
4169
  return SLASH_ITEMS.filter((it) => it.label.toLowerCase().includes(f) || it.key.includes(f));
@@ -4452,8 +4448,8 @@ var Editor = (props) => {
4452
4448
  break;
4453
4449
  }
4454
4450
  };
4455
- return /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)("div", { className: clsx_default("lib-xplat-editor", isFocused && "focused", readOnly && "readonly"), children: [
4456
- !readOnly && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
4451
+ return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)("div", { className: clsx_default("lib-xplat-editor", isFocused && "focused", readOnly && "readonly"), children: [
4452
+ !readOnly && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
4457
4453
  EditorToolbar,
4458
4454
  {
4459
4455
  items: toolbar,
@@ -4461,9 +4457,9 @@ var Editor = (props) => {
4461
4457
  onAction: onToolbarAction
4462
4458
  }
4463
4459
  ),
4464
- /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)("div", { className: "lib-xplat-editor__content", style: { minHeight }, children: [
4465
- isEmpty && !isFocused && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "lib-xplat-editor__placeholder", children: placeholder }),
4466
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
4460
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)("div", { className: "lib-xplat-editor__content", style: { minHeight }, children: [
4461
+ isEmpty && !isFocused && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "lib-xplat-editor__placeholder", children: placeholder }),
4462
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
4467
4463
  "div",
4468
4464
  {
4469
4465
  ref: editorRef,
@@ -4482,7 +4478,7 @@ var Editor = (props) => {
4482
4478
  spellCheck: true
4483
4479
  }
4484
4480
  ),
4485
- slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
4481
+ slashOpen && filteredSlashItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
4486
4482
  SlashMenu,
4487
4483
  {
4488
4484
  position: slashPos,
@@ -4492,7 +4488,7 @@ var Editor = (props) => {
4492
4488
  onClose: closeSlashMenu
4493
4489
  }
4494
4490
  ),
4495
- linkOpen && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
4491
+ linkOpen && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
4496
4492
  LinkPopover,
4497
4493
  {
4498
4494
  position: linkPos,
@@ -4544,7 +4540,7 @@ var isActive = (item, active) => {
4544
4540
  return active.has(item);
4545
4541
  };
4546
4542
  var EditorToolbar = ({ items, active, onAction }) => {
4547
- return /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "lib-xplat-editor__toolbar", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
4543
+ return /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("div", { className: "lib-xplat-editor__toolbar", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
4548
4544
  "button",
4549
4545
  {
4550
4546
  type: "button",
@@ -4560,7 +4556,7 @@ var EditorToolbar = ({ items, active, onAction }) => {
4560
4556
  )) });
4561
4557
  };
4562
4558
  var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
4563
- import_react23.default.useEffect(() => {
4559
+ import_react22.default.useEffect(() => {
4564
4560
  const handleClickOutside = (e) => {
4565
4561
  const target = e.target;
4566
4562
  const menu = document.querySelector(".lib-xplat-editor__slash-menu");
@@ -4569,12 +4565,12 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
4569
4565
  window.addEventListener("mousedown", handleClickOutside);
4570
4566
  return () => window.removeEventListener("mousedown", handleClickOutside);
4571
4567
  }, [onClose]);
4572
- return /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
4568
+ return /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
4573
4569
  "div",
4574
4570
  {
4575
4571
  className: "lib-xplat-editor__slash-menu",
4576
4572
  style: { top: position.top, left: position.left },
4577
- children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)(
4573
+ children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)(
4578
4574
  "button",
4579
4575
  {
4580
4576
  type: "button",
@@ -4584,8 +4580,8 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
4584
4580
  onSelect(item);
4585
4581
  },
4586
4582
  children: [
4587
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("span", { className: "label", children: item.label }),
4588
- item.hint && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("span", { className: "hint", children: item.hint })
4583
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("span", { className: "label", children: item.label }),
4584
+ item.hint && /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("span", { className: "hint", children: item.hint })
4589
4585
  ]
4590
4586
  },
4591
4587
  item.key
@@ -4594,17 +4590,17 @@ var SlashMenu = ({ position, items, activeIndex, onSelect, onClose }) => {
4594
4590
  );
4595
4591
  };
4596
4592
  var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
4597
- const inputRef = import_react23.default.useRef(null);
4598
- import_react23.default.useEffect(() => {
4593
+ const inputRef = import_react22.default.useRef(null);
4594
+ import_react22.default.useEffect(() => {
4599
4595
  inputRef.current?.focus();
4600
4596
  }, []);
4601
- return /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)(
4597
+ return /* @__PURE__ */ (0, import_jsx_runtime323.jsxs)(
4602
4598
  "div",
4603
4599
  {
4604
4600
  className: "lib-xplat-editor__link-popover",
4605
4601
  style: { top: position.top, left: position.left },
4606
4602
  children: [
4607
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)(
4603
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsx)(
4608
4604
  "input",
4609
4605
  {
4610
4606
  ref: inputRef,
@@ -4624,11 +4620,11 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
4624
4620
  }
4625
4621
  }
4626
4622
  ),
4627
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("button", { type: "button", onMouseDown: (e) => {
4623
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("button", { type: "button", onMouseDown: (e) => {
4628
4624
  e.preventDefault();
4629
4625
  onConfirm();
4630
4626
  }, children: "\uC801\uC6A9" }),
4631
- /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("button", { type: "button", onMouseDown: (e) => {
4627
+ /* @__PURE__ */ (0, import_jsx_runtime323.jsx)("button", { type: "button", onMouseDown: (e) => {
4632
4628
  e.preventDefault();
4633
4629
  onClose();
4634
4630
  }, children: "\uCDE8\uC18C" })
@@ -4638,23 +4634,23 @@ var LinkPopover = ({ position, value, onChange, onConfirm, onClose }) => {
4638
4634
  };
4639
4635
 
4640
4636
  // src/components/EmptyState/EmptyState.tsx
4641
- var import_jsx_runtime325 = require("react/jsx-runtime");
4637
+ var import_jsx_runtime324 = require("react/jsx-runtime");
4642
4638
  var EmptyState = (props) => {
4643
4639
  const { icon, title = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4", description, action } = props;
4644
- return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)("div", { className: "lib-xplat-empty-state", children: [
4645
- icon && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "empty-icon", children: icon }),
4646
- !icon && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "empty-icon", children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("path", { d: "M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" }) }) }),
4647
- /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("p", { className: "empty-title", children: title }),
4648
- description && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("p", { className: "empty-description", children: description }),
4649
- action && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "empty-action", children: action })
4640
+ return /* @__PURE__ */ (0, import_jsx_runtime324.jsxs)("div", { className: "lib-xplat-empty-state", children: [
4641
+ icon && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "empty-icon", children: icon }),
4642
+ !icon && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "empty-icon", children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("path", { d: "M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z" }) }) }),
4643
+ /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("p", { className: "empty-title", children: title }),
4644
+ description && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("p", { className: "empty-description", children: description }),
4645
+ action && /* @__PURE__ */ (0, import_jsx_runtime324.jsx)("div", { className: "empty-action", children: action })
4650
4646
  ] });
4651
4647
  };
4652
4648
  EmptyState.displayName = "EmptyState";
4653
4649
  var EmptyState_default = EmptyState;
4654
4650
 
4655
4651
  // src/components/FileUpload/FileUpload.tsx
4656
- var import_react24 = __toESM(require("react"), 1);
4657
- var import_jsx_runtime326 = require("react/jsx-runtime");
4652
+ var import_react23 = __toESM(require("react"), 1);
4653
+ var import_jsx_runtime325 = require("react/jsx-runtime");
4658
4654
  var FileUpload = (props) => {
4659
4655
  const {
4660
4656
  accept,
@@ -4664,8 +4660,8 @@ var FileUpload = (props) => {
4664
4660
  label = "\uD30C\uC77C\uC744 \uB4DC\uB798\uADF8\uD558\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uC5C5\uB85C\uB4DC",
4665
4661
  description
4666
4662
  } = props;
4667
- const [isDragOver, setIsDragOver] = import_react24.default.useState(false);
4668
- const inputRef = import_react24.default.useRef(null);
4663
+ const [isDragOver, setIsDragOver] = import_react23.default.useState(false);
4664
+ const inputRef = import_react23.default.useRef(null);
4669
4665
  const handleFiles = (fileList) => {
4670
4666
  let files = Array.from(fileList);
4671
4667
  if (maxSize) {
@@ -4695,7 +4691,7 @@ var FileUpload = (props) => {
4695
4691
  handleFiles(e.target.files);
4696
4692
  }
4697
4693
  };
4698
- return /* @__PURE__ */ (0, import_jsx_runtime326.jsxs)(
4694
+ return /* @__PURE__ */ (0, import_jsx_runtime325.jsxs)(
4699
4695
  "div",
4700
4696
  {
4701
4697
  className: clsx_default("lib-xplat-file-upload", { "drag-over": isDragOver }),
@@ -4704,7 +4700,7 @@ var FileUpload = (props) => {
4704
4700
  onDragLeave: handleDragLeave,
4705
4701
  onClick: () => inputRef.current?.click(),
4706
4702
  children: [
4707
- /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(
4703
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(
4708
4704
  "input",
4709
4705
  {
4710
4706
  ref: inputRef,
@@ -4714,9 +4710,9 @@ var FileUpload = (props) => {
4714
4710
  onChange: handleChange
4715
4711
  }
4716
4712
  ),
4717
- /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime326.jsx)(UploadIcon_default, {}) }),
4718
- /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("p", { className: "upload-label", children: label }),
4719
- description && /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("p", { className: "upload-description", children: description })
4713
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("div", { className: "upload-icon", children: /* @__PURE__ */ (0, import_jsx_runtime325.jsx)(UploadIcon_default, {}) }),
4714
+ /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("p", { className: "upload-label", children: label }),
4715
+ description && /* @__PURE__ */ (0, import_jsx_runtime325.jsx)("p", { className: "upload-description", children: description })
4720
4716
  ]
4721
4717
  }
4722
4718
  );
@@ -4725,10 +4721,10 @@ FileUpload.displayName = "FileUpload";
4725
4721
  var FileUpload_default = FileUpload;
4726
4722
 
4727
4723
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
4728
- var import_react26 = __toESM(require("react"), 1);
4724
+ var import_react25 = __toESM(require("react"), 1);
4729
4725
 
4730
4726
  // src/components/HtmlTypeWriter/utils.ts
4731
- var import_react25 = __toESM(require("react"), 1);
4727
+ var import_react24 = __toESM(require("react"), 1);
4732
4728
  var voidTags = /* @__PURE__ */ new Set([
4733
4729
  "br",
4734
4730
  "img",
@@ -4796,41 +4792,41 @@ var convertNodeToReactWithRange = (node, typedLen, rangeMap) => {
4796
4792
  props[attr.name] = attr.value;
4797
4793
  });
4798
4794
  if (voidTags.has(tag)) {
4799
- return import_react25.default.createElement(tag, props);
4795
+ return import_react24.default.createElement(tag, props);
4800
4796
  }
4801
4797
  const children = Array.from(element.childNodes).map((child) => convertNodeToReactWithRange(child, typedLen, rangeMap)).filter((n) => n != null);
4802
- return import_react25.default.createElement(tag, props, ...children);
4798
+ return import_react24.default.createElement(tag, props, ...children);
4803
4799
  };
4804
4800
  var htmlToReactProgressive = (root, typedLen, rangeMap) => {
4805
4801
  const nodes = Array.from(root.childNodes).map((child, idx) => {
4806
4802
  const node = convertNodeToReactWithRange(child, typedLen, rangeMap);
4807
- return node == null ? null : import_react25.default.createElement(import_react25.default.Fragment, { key: idx }, node);
4803
+ return node == null ? null : import_react24.default.createElement(import_react24.default.Fragment, { key: idx }, node);
4808
4804
  }).filter(Boolean);
4809
4805
  return nodes.length === 0 ? null : nodes;
4810
4806
  };
4811
4807
 
4812
4808
  // src/components/HtmlTypeWriter/HtmlTypeWriter.tsx
4813
- var import_jsx_runtime327 = require("react/jsx-runtime");
4809
+ var import_jsx_runtime326 = require("react/jsx-runtime");
4814
4810
  var HtmlTypeWriter = ({
4815
4811
  html,
4816
4812
  duration = 20,
4817
4813
  onDone,
4818
4814
  onChange
4819
4815
  }) => {
4820
- const [typedLen, setTypedLen] = import_react26.default.useState(0);
4821
- const doneCalledRef = import_react26.default.useRef(false);
4822
- const { doc, rangeMap, totalLength } = import_react26.default.useMemo(() => {
4816
+ const [typedLen, setTypedLen] = import_react25.default.useState(0);
4817
+ const doneCalledRef = import_react25.default.useRef(false);
4818
+ const { doc, rangeMap, totalLength } = import_react25.default.useMemo(() => {
4823
4819
  if (typeof window === "undefined") return { doc: null, rangeMap: /* @__PURE__ */ new Map(), totalLength: 0 };
4824
4820
  const decoded = decodeHtmlEntities(html);
4825
4821
  const doc2 = new DOMParser().parseFromString(decoded, "text/html");
4826
4822
  const { rangeMap: rangeMap2, totalLength: totalLength2 } = buildRangeMap(doc2.body);
4827
4823
  return { doc: doc2, rangeMap: rangeMap2, totalLength: totalLength2 };
4828
4824
  }, [html]);
4829
- import_react26.default.useEffect(() => {
4825
+ import_react25.default.useEffect(() => {
4830
4826
  setTypedLen(0);
4831
4827
  doneCalledRef.current = false;
4832
4828
  }, [html]);
4833
- import_react26.default.useEffect(() => {
4829
+ import_react25.default.useEffect(() => {
4834
4830
  if (!totalLength) return;
4835
4831
  if (typedLen >= totalLength) return;
4836
4832
  const timer = window.setInterval(() => {
@@ -4838,33 +4834,33 @@ var HtmlTypeWriter = ({
4838
4834
  }, duration);
4839
4835
  return () => window.clearInterval(timer);
4840
4836
  }, [typedLen, totalLength, duration]);
4841
- import_react26.default.useEffect(() => {
4837
+ import_react25.default.useEffect(() => {
4842
4838
  if (typedLen > 0 && typedLen < totalLength) {
4843
4839
  onChange?.();
4844
4840
  }
4845
4841
  }, [typedLen, totalLength, onChange]);
4846
- import_react26.default.useEffect(() => {
4842
+ import_react25.default.useEffect(() => {
4847
4843
  if (typedLen === totalLength && totalLength > 0 && !doneCalledRef.current) {
4848
4844
  doneCalledRef.current = true;
4849
4845
  onDone?.();
4850
4846
  }
4851
4847
  }, [typedLen, totalLength, onDone]);
4852
- const parsed = import_react26.default.useMemo(
4848
+ const parsed = import_react25.default.useMemo(
4853
4849
  () => doc ? htmlToReactProgressive(doc.body, typedLen, rangeMap) : null,
4854
4850
  [doc, typedLen, rangeMap]
4855
4851
  );
4856
- return /* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
4852
+ return /* @__PURE__ */ (0, import_jsx_runtime326.jsx)("div", { className: "lib-xplat-htmlTypewriter", children: parsed });
4857
4853
  };
4858
4854
  HtmlTypeWriter.displayName = "HtmlTypeWriter";
4859
4855
  var HtmlTypeWriter_default = HtmlTypeWriter;
4860
4856
 
4861
4857
  // src/components/ImageSelector/ImageSelector.tsx
4862
- var import_react27 = __toESM(require("react"), 1);
4863
- var import_jsx_runtime328 = require("react/jsx-runtime");
4858
+ var import_react26 = __toESM(require("react"), 1);
4859
+ var import_jsx_runtime327 = require("react/jsx-runtime");
4864
4860
  var ImageSelector = (props) => {
4865
4861
  const { value, label, onChange } = props;
4866
- const [previewUrl, setPreviewUrl] = import_react27.default.useState();
4867
- import_react27.default.useEffect(() => {
4862
+ const [previewUrl, setPreviewUrl] = import_react26.default.useState();
4863
+ import_react26.default.useEffect(() => {
4868
4864
  if (!value) {
4869
4865
  setPreviewUrl(void 0);
4870
4866
  return;
@@ -4873,7 +4869,7 @@ var ImageSelector = (props) => {
4873
4869
  setPreviewUrl(url);
4874
4870
  return () => URL.revokeObjectURL(url);
4875
4871
  }, [value]);
4876
- const inputRef = import_react27.default.useRef(null);
4872
+ const inputRef = import_react26.default.useRef(null);
4877
4873
  const handleFileChange = (e) => {
4878
4874
  const selectedFile = e.target.files?.[0];
4879
4875
  if (selectedFile) {
@@ -4886,8 +4882,8 @@ var ImageSelector = (props) => {
4886
4882
  const handleOpenFileDialog = () => {
4887
4883
  inputRef.current?.click();
4888
4884
  };
4889
- return /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
4890
- /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
4885
+ return /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("div", { className: `lib-xplat-imageselector${value ? "" : " none-value"}`, children: [
4886
+ /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(
4891
4887
  "input",
4892
4888
  {
4893
4889
  type: "file",
@@ -4897,13 +4893,13 @@ var ImageSelector = (props) => {
4897
4893
  ref: inputRef
4898
4894
  }
4899
4895
  ),
4900
- value && /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("div", { className: "action-bar", children: [
4901
- /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(UploadIcon_default, {}) }),
4902
- /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(DeleteIcon_default, {}) })
4896
+ value && /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("div", { className: "action-bar", children: [
4897
+ /* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "icon-wrapper", onClick: handleOpenFileDialog, children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(UploadIcon_default, {}) }),
4898
+ /* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "icon-wrapper", onClick: handleDeleteFile, children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(DeleteIcon_default, {}) })
4903
4899
  ] }),
4904
- /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("div", { className: "content", children: previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ (0, import_jsx_runtime328.jsxs)("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
4905
- /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(ImageIcon_default, {}) }),
4906
- /* @__PURE__ */ (0, import_jsx_runtime328.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
4900
+ /* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "content", children: previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime327.jsx)("img", { src: previewUrl, alt: "preview" }) : /* @__PURE__ */ (0, import_jsx_runtime327.jsxs)("div", { className: "skeleton", onClick: handleOpenFileDialog, children: [
4901
+ /* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "icon-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime327.jsx)(ImageIcon_default, {}) }),
4902
+ /* @__PURE__ */ (0, import_jsx_runtime327.jsx)("div", { className: "label", children: label || "\uC774\uBBF8\uC9C0 \uCD94\uAC00\uD558\uAE30" })
4907
4903
  ] }) })
4908
4904
  ] });
4909
4905
  };
@@ -4911,10 +4907,10 @@ ImageSelector.displayName = "ImageSelector";
4911
4907
  var ImageSelector_default = ImageSelector;
4912
4908
 
4913
4909
  // src/components/Link/Link.tsx
4914
- var import_jsx_runtime329 = require("react/jsx-runtime");
4910
+ var import_jsx_runtime328 = require("react/jsx-runtime");
4915
4911
  var Link = (props) => {
4916
4912
  const { children, href, underline = "always", target, rel, ...rest } = props;
4917
- return /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
4913
+ return /* @__PURE__ */ (0, import_jsx_runtime328.jsx)(
4918
4914
  "a",
4919
4915
  {
4920
4916
  className: clsx_default("lib-xplat-link", `underline-${underline}`),
@@ -4930,10 +4926,10 @@ Link.displayName = "Link";
4930
4926
  var Link_default = Link;
4931
4927
 
4932
4928
  // src/components/LinkButton/LinkButton.tsx
4933
- var import_jsx_runtime330 = require("react/jsx-runtime");
4929
+ var import_jsx_runtime329 = require("react/jsx-runtime");
4934
4930
  var LinkButton = (props) => {
4935
4931
  const { children, href, type = "primary", size = "md", target, rel, ...rest } = props;
4936
- return /* @__PURE__ */ (0, import_jsx_runtime330.jsx)(
4932
+ return /* @__PURE__ */ (0, import_jsx_runtime329.jsx)(
4937
4933
  "a",
4938
4934
  {
4939
4935
  className: clsx_default("lib-xplat-button", type, size),
@@ -4949,7 +4945,7 @@ LinkButton.displayName = "LinkButton";
4949
4945
  var LinkButton_default = LinkButton;
4950
4946
 
4951
4947
  // src/components/NotificationBadge/NotificationBadge.tsx
4952
- var import_jsx_runtime331 = require("react/jsx-runtime");
4948
+ var import_jsx_runtime330 = require("react/jsx-runtime");
4953
4949
  var NotificationBadge = (props) => {
4954
4950
  const {
4955
4951
  children,
@@ -4961,16 +4957,16 @@ var NotificationBadge = (props) => {
4961
4957
  } = props;
4962
4958
  const showBadge = dot || count !== void 0 && count > 0;
4963
4959
  const displayCount = count !== void 0 && count > maxCount ? `${maxCount}+` : count;
4964
- return /* @__PURE__ */ (0, import_jsx_runtime331.jsxs)("div", { className: clsx_default("lib-xplat-notification-badge", size), children: [
4960
+ return /* @__PURE__ */ (0, import_jsx_runtime330.jsxs)("div", { className: clsx_default("lib-xplat-notification-badge", size), children: [
4965
4961
  children,
4966
- showBadge && /* @__PURE__ */ (0, import_jsx_runtime331.jsx)("span", { className: clsx_default("badge-indicator", type, { dot }), children: !dot && displayCount })
4962
+ showBadge && /* @__PURE__ */ (0, import_jsx_runtime330.jsx)("span", { className: clsx_default("badge-indicator", type, { dot }), children: !dot && displayCount })
4967
4963
  ] });
4968
4964
  };
4969
4965
  NotificationBadge.displayName = "NotificationBadge";
4970
4966
  var NotificationBadge_default = NotificationBadge;
4971
4967
 
4972
4968
  // src/components/Pagination/Pagination.tsx
4973
- var import_jsx_runtime332 = require("react/jsx-runtime");
4969
+ var import_jsx_runtime331 = require("react/jsx-runtime");
4974
4970
  var getPageRange = (current, totalPages, siblingCount) => {
4975
4971
  const totalNumbers = siblingCount * 2 + 5;
4976
4972
  if (totalPages <= totalNumbers) {
@@ -5013,19 +5009,19 @@ var Pagination = (props) => {
5013
5009
  onChange?.(page);
5014
5010
  }
5015
5011
  };
5016
- return /* @__PURE__ */ (0, import_jsx_runtime332.jsxs)("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
5017
- /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
5012
+ return /* @__PURE__ */ (0, import_jsx_runtime331.jsxs)("nav", { className: clsx_default("lib-xplat-pagination", size, type), "aria-label": "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158", children: [
5013
+ /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
5018
5014
  "button",
5019
5015
  {
5020
5016
  className: "page-btn prev",
5021
5017
  disabled: current <= 1,
5022
5018
  onClick: () => handleClick(current - 1),
5023
5019
  "aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
5024
- children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(ChevronLeftIcon_default, {})
5020
+ children: /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(ChevronLeftIcon_default, {})
5025
5021
  }
5026
5022
  ),
5027
5023
  pages.map(
5028
- (page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime332.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
5024
+ (page, i) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime331.jsx)("span", { className: "dots", children: "..." }, `dots-${i}`) : /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
5029
5025
  "button",
5030
5026
  {
5031
5027
  className: clsx_default("page-btn", { active: page === current }),
@@ -5036,14 +5032,14 @@ var Pagination = (props) => {
5036
5032
  page
5037
5033
  )
5038
5034
  ),
5039
- /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
5035
+ /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(
5040
5036
  "button",
5041
5037
  {
5042
5038
  className: "page-btn next",
5043
5039
  disabled: current >= totalPages,
5044
5040
  onClick: () => handleClick(current + 1),
5045
5041
  "aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
5046
- children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(ChevronRightIcon_default, {})
5042
+ children: /* @__PURE__ */ (0, import_jsx_runtime331.jsx)(ChevronRightIcon_default, {})
5047
5043
  }
5048
5044
  )
5049
5045
  ] });
@@ -5052,17 +5048,17 @@ Pagination.displayName = "Pagination";
5052
5048
  var Pagination_default = Pagination;
5053
5049
 
5054
5050
  // src/components/PopOver/PopOver.tsx
5055
- var import_react28 = __toESM(require("react"), 1);
5056
- var import_jsx_runtime333 = require("react/jsx-runtime");
5051
+ var import_react27 = __toESM(require("react"), 1);
5052
+ var import_jsx_runtime332 = require("react/jsx-runtime");
5057
5053
  var PopOver = (props) => {
5058
5054
  const { children, isOpen, onClose, PopOverEl } = props;
5059
- const popRef = import_react28.default.useRef(null);
5060
- const triggerRef = import_react28.default.useRef(null);
5061
- const [localOpen, setLocalOpen] = import_react28.default.useState(false);
5062
- const [eventTrigger, setEventTrigger] = import_react28.default.useState(false);
5055
+ const popRef = import_react27.default.useRef(null);
5056
+ const triggerRef = import_react27.default.useRef(null);
5057
+ const [localOpen, setLocalOpen] = import_react27.default.useState(false);
5058
+ const [eventTrigger, setEventTrigger] = import_react27.default.useState(false);
5063
5059
  useClickOutside_default([popRef, triggerRef], onClose, isOpen);
5064
5060
  const position = useAutoPosition_default(triggerRef, popRef, localOpen);
5065
- import_react28.default.useEffect(() => {
5061
+ import_react27.default.useEffect(() => {
5066
5062
  if (isOpen) {
5067
5063
  setLocalOpen(isOpen);
5068
5064
  setTimeout(() => {
@@ -5075,7 +5071,7 @@ var PopOver = (props) => {
5075
5071
  }, 200);
5076
5072
  }
5077
5073
  }, [isOpen]);
5078
- return /* @__PURE__ */ (0, import_jsx_runtime333.jsxs)(
5074
+ return /* @__PURE__ */ (0, import_jsx_runtime332.jsxs)(
5079
5075
  "div",
5080
5076
  {
5081
5077
  className: "lib-xplat-pop-over",
@@ -5085,7 +5081,7 @@ var PopOver = (props) => {
5085
5081
  },
5086
5082
  children: [
5087
5083
  children,
5088
- localOpen && /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
5084
+ localOpen && /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime332.jsx)(
5089
5085
  "div",
5090
5086
  {
5091
5087
  className: clsx_default(
@@ -5108,7 +5104,7 @@ PopOver.displayName = "PopOver";
5108
5104
  var PopOver_default = PopOver;
5109
5105
 
5110
5106
  // src/components/Progress/Progress.tsx
5111
- var import_jsx_runtime334 = require("react/jsx-runtime");
5107
+ var import_jsx_runtime333 = require("react/jsx-runtime");
5112
5108
  var Progress = (props) => {
5113
5109
  const {
5114
5110
  value,
@@ -5118,8 +5114,8 @@ var Progress = (props) => {
5118
5114
  showLabel = false
5119
5115
  } = props;
5120
5116
  const percentage = Math.min(100, Math.max(0, value / max * 100));
5121
- return /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
5122
- /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
5117
+ return /* @__PURE__ */ (0, import_jsx_runtime333.jsxs)("div", { className: clsx_default("lib-xplat-progress", size, type), children: [
5118
+ /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
5123
5119
  "div",
5124
5120
  {
5125
5121
  className: "track",
@@ -5127,7 +5123,7 @@ var Progress = (props) => {
5127
5123
  "aria-valuenow": value,
5128
5124
  "aria-valuemin": 0,
5129
5125
  "aria-valuemax": max,
5130
- children: /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
5126
+ children: /* @__PURE__ */ (0, import_jsx_runtime333.jsx)(
5131
5127
  "div",
5132
5128
  {
5133
5129
  className: "bar",
@@ -5136,7 +5132,7 @@ var Progress = (props) => {
5136
5132
  )
5137
5133
  }
5138
5134
  ),
5139
- showLabel && /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)("span", { className: "label", children: [
5135
+ showLabel && /* @__PURE__ */ (0, import_jsx_runtime333.jsxs)("span", { className: "label", children: [
5140
5136
  Math.round(percentage),
5141
5137
  "%"
5142
5138
  ] })
@@ -5146,17 +5142,17 @@ Progress.displayName = "Progress";
5146
5142
  var Progress_default = Progress;
5147
5143
 
5148
5144
  // src/components/Radio/RadioGroupContext.tsx
5149
- var import_react29 = __toESM(require("react"), 1);
5150
- var RadioGroupContext = import_react29.default.createContext(
5145
+ var import_react28 = __toESM(require("react"), 1);
5146
+ var RadioGroupContext = import_react28.default.createContext(
5151
5147
  null
5152
5148
  );
5153
5149
  var useRadioGroupContext = () => {
5154
- return import_react29.default.useContext(RadioGroupContext);
5150
+ return import_react28.default.useContext(RadioGroupContext);
5155
5151
  };
5156
5152
  var RadioGroupContext_default = RadioGroupContext;
5157
5153
 
5158
5154
  // src/components/Radio/Radio.tsx
5159
- var import_jsx_runtime335 = require("react/jsx-runtime");
5155
+ var import_jsx_runtime334 = require("react/jsx-runtime");
5160
5156
  var Radio = (props) => {
5161
5157
  const {
5162
5158
  label,
@@ -5175,7 +5171,7 @@ var Radio = (props) => {
5175
5171
  value,
5176
5172
  onChange: rest.onChange
5177
5173
  };
5178
- return /* @__PURE__ */ (0, import_jsx_runtime335.jsxs)(
5174
+ return /* @__PURE__ */ (0, import_jsx_runtime334.jsxs)(
5179
5175
  "label",
5180
5176
  {
5181
5177
  className: clsx_default(
@@ -5186,18 +5182,18 @@ var Radio = (props) => {
5186
5182
  className
5187
5183
  ),
5188
5184
  children: [
5189
- /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
5190
- /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(
5185
+ /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("input", { ...rest, ...inputProps, checked: localChecked, type: "radio" }),
5186
+ /* @__PURE__ */ (0, import_jsx_runtime334.jsx)(
5191
5187
  "div",
5192
5188
  {
5193
5189
  className: clsx_default(
5194
5190
  "circle",
5195
5191
  localChecked ? "checked" : void 0
5196
5192
  ),
5197
- children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("div", { className: "inner-circle" })
5193
+ children: localChecked && /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("div", { className: "inner-circle" })
5198
5194
  }
5199
5195
  ),
5200
- label && /* @__PURE__ */ (0, import_jsx_runtime335.jsx)("span", { children: label })
5196
+ label && /* @__PURE__ */ (0, import_jsx_runtime334.jsx)("span", { children: label })
5201
5197
  ]
5202
5198
  }
5203
5199
  );
@@ -5206,28 +5202,28 @@ Radio.displayName = "Radio";
5206
5202
  var Radio_default = Radio;
5207
5203
 
5208
5204
  // src/components/Radio/RadioGroup.tsx
5209
- var import_jsx_runtime336 = require("react/jsx-runtime");
5205
+ var import_jsx_runtime335 = require("react/jsx-runtime");
5210
5206
  var RadioGroup = (props) => {
5211
5207
  const { children, ...rest } = props;
5212
- return /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(import_jsx_runtime336.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
5208
+ return /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(import_jsx_runtime335.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime335.jsx)(RadioGroupContext_default.Provider, { value: rest, children }) });
5213
5209
  };
5214
5210
  RadioGroup.displayName = "RadioGroup";
5215
5211
  var RadioGroup_default = RadioGroup;
5216
5212
 
5217
5213
  // src/components/Select/Select.tsx
5218
- var import_react32 = __toESM(require("react"), 1);
5214
+ var import_react31 = __toESM(require("react"), 1);
5219
5215
 
5220
5216
  // src/components/Select/context.ts
5221
- var import_react30 = __toESM(require("react"), 1);
5222
- var SelectContext = import_react30.default.createContext(null);
5217
+ var import_react29 = __toESM(require("react"), 1);
5218
+ var SelectContext = import_react29.default.createContext(null);
5223
5219
  var context_default = SelectContext;
5224
5220
 
5225
5221
  // src/components/Select/SelectItem.tsx
5226
- var import_react31 = __toESM(require("react"), 1);
5227
- var import_jsx_runtime337 = require("react/jsx-runtime");
5222
+ var import_react30 = __toESM(require("react"), 1);
5223
+ var import_jsx_runtime336 = require("react/jsx-runtime");
5228
5224
  var SelectItem = (props) => {
5229
5225
  const { children, value, onClick, disabled = false } = props;
5230
- const ctx = import_react31.default.useContext(context_default);
5226
+ const ctx = import_react30.default.useContext(context_default);
5231
5227
  const handleClick = (e) => {
5232
5228
  e.preventDefault();
5233
5229
  e.stopPropagation();
@@ -5237,7 +5233,7 @@ var SelectItem = (props) => {
5237
5233
  onClick?.();
5238
5234
  };
5239
5235
  const isSelected = value !== void 0 ? ctx?.selectedValue === value : ctx?.selectedLabel === children;
5240
- return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
5236
+ return /* @__PURE__ */ (0, import_jsx_runtime336.jsx)(
5241
5237
  "div",
5242
5238
  {
5243
5239
  className: clsx_default("select-item", disabled && "disabled", isSelected && "is-selected"),
@@ -5258,7 +5254,7 @@ SelectItem.displayName = "Select.Item";
5258
5254
  var SelectItem_default = SelectItem;
5259
5255
 
5260
5256
  // src/components/Select/Select.tsx
5261
- var import_jsx_runtime338 = require("react/jsx-runtime");
5257
+ var import_jsx_runtime337 = require("react/jsx-runtime");
5262
5258
  var ANIMATION_DURATION_MS3 = 200;
5263
5259
  var SelectRoot = (props) => {
5264
5260
  const {
@@ -5270,28 +5266,28 @@ var SelectRoot = (props) => {
5270
5266
  error = false,
5271
5267
  size = "md"
5272
5268
  } = props;
5273
- const itemChildren = import_react32.default.Children.toArray(children).filter(
5274
- (child) => import_react32.default.isValidElement(child) && child.type === SelectItem_default
5269
+ const itemChildren = import_react31.default.Children.toArray(children).filter(
5270
+ (child) => import_react31.default.isValidElement(child) && child.type === SelectItem_default
5275
5271
  );
5276
5272
  const isControlled = valueProp !== void 0;
5277
- const [isOpen, setOpen] = import_react32.default.useState(false);
5278
- const [uncontrolledLabel, setUncontrolledLabel] = import_react32.default.useState(null);
5279
- const [uncontrolledValue, setUncontrolledValue] = import_react32.default.useState(void 0);
5280
- const controlledLabel = import_react32.default.useMemo(() => {
5273
+ const [isOpen, setOpen] = import_react31.default.useState(false);
5274
+ const [uncontrolledLabel, setUncontrolledLabel] = import_react31.default.useState(null);
5275
+ const [uncontrolledValue, setUncontrolledValue] = import_react31.default.useState(void 0);
5276
+ const controlledLabel = import_react31.default.useMemo(() => {
5281
5277
  if (!isControlled) return null;
5282
5278
  const match = itemChildren.find((child) => child.props.value === valueProp);
5283
5279
  return match ? match.props.children : null;
5284
5280
  }, [isControlled, valueProp, itemChildren]);
5285
5281
  const selectedLabel = isControlled ? controlledLabel : uncontrolledLabel;
5286
5282
  const selectedValue = isControlled ? valueProp : uncontrolledValue;
5287
- const triggerRef = import_react32.default.useRef(null);
5288
- const contentRef = import_react32.default.useRef(null);
5289
- const [mounted, setMounted] = import_react32.default.useState(false);
5290
- const [visible, setVisible] = import_react32.default.useState(false);
5291
- import_react32.default.useEffect(() => {
5283
+ const triggerRef = import_react31.default.useRef(null);
5284
+ const contentRef = import_react31.default.useRef(null);
5285
+ const [mounted, setMounted] = import_react31.default.useState(false);
5286
+ const [visible, setVisible] = import_react31.default.useState(false);
5287
+ import_react31.default.useEffect(() => {
5292
5288
  if (disabled && isOpen) setOpen(false);
5293
5289
  }, [disabled, isOpen]);
5294
- import_react32.default.useEffect(() => {
5290
+ import_react31.default.useEffect(() => {
5295
5291
  if (isOpen) {
5296
5292
  setMounted(true);
5297
5293
  const t2 = setTimeout(() => setVisible(true), 1);
@@ -5301,12 +5297,12 @@ var SelectRoot = (props) => {
5301
5297
  const t = setTimeout(() => setMounted(false), ANIMATION_DURATION_MS3);
5302
5298
  return () => clearTimeout(t);
5303
5299
  }, [isOpen]);
5304
- const open = import_react32.default.useCallback(() => setOpen(true), []);
5305
- const close = import_react32.default.useCallback(() => setOpen(false), []);
5306
- const toggle = import_react32.default.useCallback(() => setOpen((prev) => !prev), []);
5300
+ const open = import_react31.default.useCallback(() => setOpen(true), []);
5301
+ const close = import_react31.default.useCallback(() => setOpen(false), []);
5302
+ const toggle = import_react31.default.useCallback(() => setOpen((prev) => !prev), []);
5307
5303
  useClickOutside_default([contentRef, triggerRef], close, isOpen);
5308
5304
  const position = useAutoPosition_default(triggerRef, contentRef, mounted);
5309
- const setSelected = import_react32.default.useCallback(
5305
+ const setSelected = import_react31.default.useCallback(
5310
5306
  (label, itemValue) => {
5311
5307
  if (!isControlled) {
5312
5308
  setUncontrolledLabel(label);
@@ -5316,7 +5312,7 @@ var SelectRoot = (props) => {
5316
5312
  },
5317
5313
  [isControlled, onChange]
5318
5314
  );
5319
- const ctxValue = import_react32.default.useMemo(
5315
+ const ctxValue = import_react31.default.useMemo(
5320
5316
  () => ({
5321
5317
  isOpen,
5322
5318
  mounted,
@@ -5338,7 +5334,7 @@ var SelectRoot = (props) => {
5338
5334
  if (disabled) return;
5339
5335
  toggle();
5340
5336
  };
5341
- return /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime338.jsxs)(
5337
+ return /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(context_default.Provider, { value: ctxValue, children: /* @__PURE__ */ (0, import_jsx_runtime337.jsxs)(
5342
5338
  "div",
5343
5339
  {
5344
5340
  className: clsx_default(
@@ -5349,7 +5345,7 @@ var SelectRoot = (props) => {
5349
5345
  mounted && "is-open"
5350
5346
  ),
5351
5347
  children: [
5352
- /* @__PURE__ */ (0, import_jsx_runtime338.jsxs)(
5348
+ /* @__PURE__ */ (0, import_jsx_runtime337.jsxs)(
5353
5349
  "div",
5354
5350
  {
5355
5351
  ref: triggerRef,
@@ -5373,7 +5369,7 @@ var SelectRoot = (props) => {
5373
5369
  }
5374
5370
  },
5375
5371
  children: [
5376
- /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
5372
+ /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
5377
5373
  "span",
5378
5374
  {
5379
5375
  className: clsx_default(
@@ -5383,25 +5379,25 @@ var SelectRoot = (props) => {
5383
5379
  children: selectedLabel ?? placeholder
5384
5380
  }
5385
5381
  ),
5386
- /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
5382
+ /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
5387
5383
  "span",
5388
5384
  {
5389
5385
  className: clsx_default("select-trigger-icon", isOpen && "open"),
5390
5386
  "aria-hidden": true,
5391
- children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(ChevronDownIcon_default, {})
5387
+ children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(ChevronDownIcon_default, {})
5392
5388
  }
5393
5389
  )
5394
5390
  ]
5395
5391
  }
5396
5392
  ),
5397
- mounted && /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
5393
+ mounted && /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(
5398
5394
  "div",
5399
5395
  {
5400
5396
  className: clsx_default("lib-xplat-select-content", size, position.direction, stateClass),
5401
5397
  ref: contentRef,
5402
5398
  style: { ...position.position, width: triggerRef.current?.offsetWidth },
5403
5399
  role: "listbox",
5404
- children: /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(context_default.Provider, { value: ctxValue, children: itemChildren })
5400
+ children: /* @__PURE__ */ (0, import_jsx_runtime337.jsx)(context_default.Provider, { value: ctxValue, children: itemChildren })
5405
5401
  }
5406
5402
  ) })
5407
5403
  ]
@@ -5415,7 +5411,7 @@ var Select = Object.assign(SelectRoot, {
5415
5411
  var Select_default = Select;
5416
5412
 
5417
5413
  // src/components/Skeleton/Skeleton.tsx
5418
- var import_jsx_runtime339 = require("react/jsx-runtime");
5414
+ var import_jsx_runtime338 = require("react/jsx-runtime");
5419
5415
  var SIZE_MAP = {
5420
5416
  xs: "var(--spacing-space-1)",
5421
5417
  sm: "var(--spacing-space-2)",
@@ -5431,7 +5427,7 @@ var Skeleton = (props) => {
5431
5427
  ...width != null && { width: SIZE_MAP[width] },
5432
5428
  ...height != null && { height: SIZE_MAP[height] }
5433
5429
  };
5434
- return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
5430
+ return /* @__PURE__ */ (0, import_jsx_runtime338.jsx)(
5435
5431
  "div",
5436
5432
  {
5437
5433
  className: clsx_default("lib-xplat-skeleton", variant),
@@ -5444,20 +5440,20 @@ Skeleton.displayName = "Skeleton";
5444
5440
  var Skeleton_default = Skeleton;
5445
5441
 
5446
5442
  // src/components/Spinner/Spinner.tsx
5447
- var import_jsx_runtime340 = require("react/jsx-runtime");
5443
+ var import_jsx_runtime339 = require("react/jsx-runtime");
5448
5444
  var Spinner = (props) => {
5449
5445
  const {
5450
5446
  size = "md",
5451
5447
  type = "brand"
5452
5448
  } = props;
5453
- return /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
5449
+ return /* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
5454
5450
  "div",
5455
5451
  {
5456
5452
  className: clsx_default("lib-xplat-spinner", size, type),
5457
5453
  role: "status",
5458
5454
  "aria-label": "\uB85C\uB529 \uC911",
5459
- children: /* @__PURE__ */ (0, import_jsx_runtime340.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
5460
- /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
5455
+ children: /* @__PURE__ */ (0, import_jsx_runtime339.jsxs)("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
5456
+ /* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
5461
5457
  "circle",
5462
5458
  {
5463
5459
  className: "track",
@@ -5467,7 +5463,7 @@ var Spinner = (props) => {
5467
5463
  strokeWidth: "3"
5468
5464
  }
5469
5465
  ),
5470
- /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(
5466
+ /* @__PURE__ */ (0, import_jsx_runtime339.jsx)(
5471
5467
  "circle",
5472
5468
  {
5473
5469
  className: "indicator",
@@ -5486,20 +5482,20 @@ Spinner.displayName = "Spinner";
5486
5482
  var Spinner_default = Spinner;
5487
5483
 
5488
5484
  // src/components/Steps/Steps.tsx
5489
- var import_jsx_runtime341 = require("react/jsx-runtime");
5485
+ var import_jsx_runtime340 = require("react/jsx-runtime");
5490
5486
  var Steps = (props) => {
5491
5487
  const {
5492
5488
  items,
5493
5489
  current,
5494
5490
  type = "brand"
5495
5491
  } = props;
5496
- return /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
5492
+ return /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("div", { className: clsx_default("lib-xplat-steps", type), children: items.map((item, index) => {
5497
5493
  const status = index < current ? "completed" : index === current ? "active" : "pending";
5498
- return /* @__PURE__ */ (0, import_jsx_runtime341.jsxs)("div", { className: clsx_default("step-item", status), children: [
5499
- /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(CheckIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("span", { children: index + 1 }) }),
5500
- /* @__PURE__ */ (0, import_jsx_runtime341.jsxs)("div", { className: "step-content", children: [
5501
- /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("span", { className: "step-title", children: item.title }),
5502
- item.description && /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("span", { className: "step-description", children: item.description })
5494
+ return /* @__PURE__ */ (0, import_jsx_runtime340.jsxs)("div", { className: clsx_default("step-item", status), children: [
5495
+ /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("div", { className: "step-circle", children: status === "completed" ? /* @__PURE__ */ (0, import_jsx_runtime340.jsx)(CheckIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("span", { children: index + 1 }) }),
5496
+ /* @__PURE__ */ (0, import_jsx_runtime340.jsxs)("div", { className: "step-content", children: [
5497
+ /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("span", { className: "step-title", children: item.title }),
5498
+ item.description && /* @__PURE__ */ (0, import_jsx_runtime340.jsx)("span", { className: "step-description", children: item.description })
5503
5499
  ] })
5504
5500
  ] }, index);
5505
5501
  }) });
@@ -5508,8 +5504,8 @@ Steps.displayName = "Steps";
5508
5504
  var Steps_default = Steps;
5509
5505
 
5510
5506
  // src/components/Swiper/Swiper.tsx
5511
- var import_react33 = __toESM(require("react"), 1);
5512
- var import_jsx_runtime342 = require("react/jsx-runtime");
5507
+ var import_react32 = __toESM(require("react"), 1);
5508
+ var import_jsx_runtime341 = require("react/jsx-runtime");
5513
5509
  var Swiper = (props) => {
5514
5510
  const {
5515
5511
  auto = false,
@@ -5533,26 +5529,26 @@ var Swiper = (props) => {
5533
5529
  const maxIndex = Math.max(0, totalSlides - viewItemCount);
5534
5530
  const useLoop = loop && canSlide;
5535
5531
  const cloneCount = useLoop ? totalSlides : 0;
5536
- const extendedItems = import_react33.default.useMemo(() => {
5532
+ const extendedItems = import_react32.default.useMemo(() => {
5537
5533
  if (!useLoop) return items;
5538
5534
  return [...items, ...items, ...items];
5539
5535
  }, [items, useLoop]);
5540
5536
  const initialIdx = Math.max(0, Math.min(indexProp ?? 0, maxIndex));
5541
- const [innerIndex, setInnerIndex] = import_react33.default.useState(
5537
+ const [innerIndex, setInnerIndex] = import_react32.default.useState(
5542
5538
  useLoop ? cloneCount + initialIdx : initialIdx
5543
5539
  );
5544
- const [isDragging, setIsDragging] = import_react33.default.useState(false);
5545
- const [dragOffset, setDragOffset] = import_react33.default.useState(0);
5546
- const [animated, setAnimated] = import_react33.default.useState(false);
5547
- const [containerWidth, setContainerWidth] = import_react33.default.useState(0);
5548
- const containerRef = import_react33.default.useRef(null);
5549
- const startXRef = import_react33.default.useRef(0);
5550
- const startTimeRef = import_react33.default.useRef(0);
5551
- const autoplayTimerRef = import_react33.default.useRef(null);
5552
- const resumeTimeoutRef = import_react33.default.useRef(null);
5553
- const [paused, setPaused] = import_react33.default.useState(false);
5554
- const initializedRef = import_react33.default.useRef(false);
5555
- import_react33.default.useEffect(() => {
5540
+ const [isDragging, setIsDragging] = import_react32.default.useState(false);
5541
+ const [dragOffset, setDragOffset] = import_react32.default.useState(0);
5542
+ const [animated, setAnimated] = import_react32.default.useState(false);
5543
+ const [containerWidth, setContainerWidth] = import_react32.default.useState(0);
5544
+ const containerRef = import_react32.default.useRef(null);
5545
+ const startXRef = import_react32.default.useRef(0);
5546
+ const startTimeRef = import_react32.default.useRef(0);
5547
+ const autoplayTimerRef = import_react32.default.useRef(null);
5548
+ const resumeTimeoutRef = import_react32.default.useRef(null);
5549
+ const [paused, setPaused] = import_react32.default.useState(false);
5550
+ const initializedRef = import_react32.default.useRef(false);
5551
+ import_react32.default.useEffect(() => {
5556
5552
  const el = containerRef.current;
5557
5553
  if (!el) return;
5558
5554
  const ro = new ResizeObserver((entries) => {
@@ -5575,7 +5571,7 @@ var Swiper = (props) => {
5575
5571
  return ((inner - cloneCount) % totalSlides + totalSlides) % totalSlides;
5576
5572
  };
5577
5573
  const realIndex = getRealIndex(innerIndex);
5578
- const moveToInner = import_react33.default.useCallback(
5574
+ const moveToInner = import_react32.default.useCallback(
5579
5575
  (idx, withAnim = true) => {
5580
5576
  if (!useLoop) {
5581
5577
  setAnimated(withAnim);
@@ -5603,7 +5599,7 @@ var Swiper = (props) => {
5603
5599
  },
5604
5600
  [useLoop, cloneCount, totalSlides]
5605
5601
  );
5606
- const handleTransitionEnd = import_react33.default.useCallback(() => {
5602
+ const handleTransitionEnd = import_react32.default.useCallback(() => {
5607
5603
  if (!useLoop) return;
5608
5604
  const real = getRealIndex(innerIndex);
5609
5605
  const canonical = cloneCount + real;
@@ -5613,7 +5609,7 @@ var Swiper = (props) => {
5613
5609
  }
5614
5610
  onChange?.(Math.min(real, maxIndex));
5615
5611
  }, [useLoop, innerIndex, cloneCount, totalSlides, maxIndex, onChange]);
5616
- const slideTo = import_react33.default.useCallback(
5612
+ const slideTo = import_react32.default.useCallback(
5617
5613
  (logicalIndex) => {
5618
5614
  if (!canSlide) return;
5619
5615
  const clamped = useLoop ? logicalIndex : Math.max(0, Math.min(logicalIndex, maxIndex));
@@ -5623,7 +5619,7 @@ var Swiper = (props) => {
5623
5619
  },
5624
5620
  [canSlide, useLoop, cloneCount, maxIndex, onChange, moveToInner]
5625
5621
  );
5626
- const slideNext = import_react33.default.useCallback(() => {
5622
+ const slideNext = import_react32.default.useCallback(() => {
5627
5623
  if (!canSlide) return;
5628
5624
  const nextInner = innerIndex + slideBy;
5629
5625
  if (useLoop) {
@@ -5632,7 +5628,7 @@ var Swiper = (props) => {
5632
5628
  moveToInner(Math.min(nextInner, maxIndex), true);
5633
5629
  }
5634
5630
  }, [canSlide, useLoop, innerIndex, slideBy, maxIndex, moveToInner]);
5635
- const slidePrev = import_react33.default.useCallback(() => {
5631
+ const slidePrev = import_react32.default.useCallback(() => {
5636
5632
  if (!canSlide) return;
5637
5633
  const prevInner = innerIndex - slideBy;
5638
5634
  if (useLoop) {
@@ -5641,7 +5637,7 @@ var Swiper = (props) => {
5641
5637
  moveToInner(Math.max(prevInner, 0), true);
5642
5638
  }
5643
5639
  }, [canSlide, useLoop, innerIndex, slideBy, moveToInner]);
5644
- import_react33.default.useEffect(() => {
5640
+ import_react32.default.useEffect(() => {
5645
5641
  if (indexProp === void 0) return;
5646
5642
  const clamped = Math.max(0, Math.min(indexProp, maxIndex));
5647
5643
  const target = useLoop ? cloneCount + clamped : clamped;
@@ -5649,12 +5645,12 @@ var Swiper = (props) => {
5649
5645
  moveToInner(target, true);
5650
5646
  }
5651
5647
  }, [indexProp]);
5652
- import_react33.default.useImperativeHandle(swiperRef, () => ({
5648
+ import_react32.default.useImperativeHandle(swiperRef, () => ({
5653
5649
  slidePrev,
5654
5650
  slideNext,
5655
5651
  slideTo
5656
5652
  }));
5657
- import_react33.default.useEffect(() => {
5653
+ import_react32.default.useEffect(() => {
5658
5654
  if (!auto || !canSlide || paused) return;
5659
5655
  autoplayTimerRef.current = setInterval(slideNext, autoplayDelay);
5660
5656
  return () => {
@@ -5680,7 +5676,7 @@ var Swiper = (props) => {
5680
5676
  resumeTimeoutRef.current = null;
5681
5677
  }, pauseOnInteraction);
5682
5678
  };
5683
- import_react33.default.useEffect(() => {
5679
+ import_react32.default.useEffect(() => {
5684
5680
  return () => {
5685
5681
  if (resumeTimeoutRef.current) clearTimeout(resumeTimeoutRef.current);
5686
5682
  };
@@ -5698,7 +5694,7 @@ var Swiper = (props) => {
5698
5694
  startXRef.current = getClientX(e);
5699
5695
  startTimeRef.current = Date.now();
5700
5696
  };
5701
- import_react33.default.useEffect(() => {
5697
+ import_react32.default.useEffect(() => {
5702
5698
  if (!isDragging) return;
5703
5699
  const handleMove = (e) => {
5704
5700
  setDragOffset(getClientX(e) - startXRef.current);
@@ -5737,8 +5733,8 @@ var Swiper = (props) => {
5737
5733
  }, [isDragging, dragOffset, innerIndex, useLoop, maxIndex, slideStep, moveToInner]);
5738
5734
  const slideWidthPercent = 100 / viewItemCount;
5739
5735
  const gapAdjust = spaceBetween * (viewItemCount - 1) / viewItemCount;
5740
- const slideElements = import_react33.default.useMemo(
5741
- () => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
5736
+ const slideElements = import_react32.default.useMemo(
5737
+ () => extendedItems.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
5742
5738
  "div",
5743
5739
  {
5744
5740
  className: "lib-xplat-swiper__slide",
@@ -5757,15 +5753,15 @@ var Swiper = (props) => {
5757
5753
  Math.floor(realIndex / slideBy),
5758
5754
  totalSteps - 1
5759
5755
  );
5760
- return /* @__PURE__ */ (0, import_jsx_runtime342.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
5761
- /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
5756
+ return /* @__PURE__ */ (0, import_jsx_runtime341.jsxs)("div", { className: "lib-xplat-swiper", ref: containerRef, children: [
5757
+ /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
5762
5758
  "div",
5763
5759
  {
5764
5760
  className: "lib-xplat-swiper__viewport",
5765
5761
  onMouseDown: handleDragStart,
5766
5762
  onTouchStart: handleDragStart,
5767
5763
  onDragStart: (e) => e.preventDefault(),
5768
- children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
5764
+ children: /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
5769
5765
  "div",
5770
5766
  {
5771
5767
  className: clsx_default(
@@ -5783,7 +5779,7 @@ var Swiper = (props) => {
5783
5779
  )
5784
5780
  }
5785
5781
  ),
5786
- showProgress && canSlide && /* @__PURE__ */ (0, import_jsx_runtime342.jsx)("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
5782
+ showProgress && canSlide && /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("div", { className: "lib-xplat-swiper__progress", children: /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("div", { className: "lib-xplat-swiper__progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
5787
5783
  "span",
5788
5784
  {
5789
5785
  className: "lib-xplat-swiper__progress-fill",
@@ -5793,7 +5789,7 @@ var Swiper = (props) => {
5793
5789
  }
5794
5790
  }
5795
5791
  ) }) }),
5796
- canSlide && /* @__PURE__ */ (0, import_jsx_runtime342.jsx)("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
5792
+ canSlide && /* @__PURE__ */ (0, import_jsx_runtime341.jsx)("div", { className: "lib-xplat-swiper__dots", children: Array.from({ length: totalSteps }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime341.jsx)(
5797
5793
  "button",
5798
5794
  {
5799
5795
  className: clsx_default(
@@ -5811,8 +5807,8 @@ Swiper.displayName = "Swiper";
5811
5807
  var Swiper_default = Swiper;
5812
5808
 
5813
5809
  // src/components/Switch/Switch.tsx
5814
- var import_react34 = __toESM(require("react"), 1);
5815
- var import_jsx_runtime343 = require("react/jsx-runtime");
5810
+ var import_react33 = __toESM(require("react"), 1);
5811
+ var import_jsx_runtime342 = require("react/jsx-runtime");
5816
5812
  var KNOB_TRANSITION_MS = 250;
5817
5813
  var Switch = (props) => {
5818
5814
  const {
@@ -5822,9 +5818,9 @@ var Switch = (props) => {
5822
5818
  disabled,
5823
5819
  onChange
5824
5820
  } = props;
5825
- const [isAnimating, setIsAnimating] = import_react34.default.useState(false);
5826
- const timeoutRef = import_react34.default.useRef(null);
5827
- import_react34.default.useEffect(() => {
5821
+ const [isAnimating, setIsAnimating] = import_react33.default.useState(false);
5822
+ const timeoutRef = import_react33.default.useRef(null);
5823
+ import_react33.default.useEffect(() => {
5828
5824
  return () => {
5829
5825
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
5830
5826
  };
@@ -5839,7 +5835,7 @@ var Switch = (props) => {
5839
5835
  timeoutRef.current = null;
5840
5836
  }, KNOB_TRANSITION_MS);
5841
5837
  };
5842
- return /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(
5838
+ return /* @__PURE__ */ (0, import_jsx_runtime342.jsx)(
5843
5839
  "div",
5844
5840
  {
5845
5841
  className: clsx_default(
@@ -5852,7 +5848,7 @@ var Switch = (props) => {
5852
5848
  ),
5853
5849
  onClick: handleClick,
5854
5850
  "aria-disabled": disabled || isAnimating,
5855
- children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
5851
+ children: /* @__PURE__ */ (0, import_jsx_runtime342.jsx)("div", { className: clsx_default("knob", value ? "checked" : void 0) })
5856
5852
  }
5857
5853
  );
5858
5854
  };
@@ -5860,17 +5856,17 @@ Switch.displayName = "Switch";
5860
5856
  var Switch_default = Switch;
5861
5857
 
5862
5858
  // src/components/Table/TableContext.tsx
5863
- var import_react35 = __toESM(require("react"), 1);
5864
- var TableContext = import_react35.default.createContext(null);
5859
+ var import_react34 = __toESM(require("react"), 1);
5860
+ var TableContext = import_react34.default.createContext(null);
5865
5861
  var useTableContext = () => {
5866
- const ctx = import_react35.default.useContext(TableContext);
5862
+ const ctx = import_react34.default.useContext(TableContext);
5867
5863
  if (!ctx) throw new Error("Table components must be used inside <Table>");
5868
5864
  return ctx;
5869
5865
  };
5870
5866
  var TableContext_default = TableContext;
5871
5867
 
5872
5868
  // src/components/Table/Table.tsx
5873
- var import_jsx_runtime344 = require("react/jsx-runtime");
5869
+ var import_jsx_runtime343 = require("react/jsx-runtime");
5874
5870
  var Table = (props) => {
5875
5871
  const {
5876
5872
  children,
@@ -5880,7 +5876,7 @@ var Table = (props) => {
5880
5876
  headerSticky = false,
5881
5877
  stickyShadow = true
5882
5878
  } = props;
5883
- return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)(
5879
+ return /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("div", { className: `lib-xplat-table-wrapper ${size}`, children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)(
5884
5880
  TableContext_default.Provider,
5885
5881
  {
5886
5882
  value: {
@@ -5889,7 +5885,7 @@ var Table = (props) => {
5889
5885
  headerSticky,
5890
5886
  stickyShadow
5891
5887
  },
5892
- children: /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("table", { className: "lib-xplat-table", children })
5888
+ children: /* @__PURE__ */ (0, import_jsx_runtime343.jsx)("table", { className: "lib-xplat-table", children })
5893
5889
  }
5894
5890
  ) });
5895
5891
  };
@@ -5897,41 +5893,41 @@ Table.displayName = "Table";
5897
5893
  var Table_default = Table;
5898
5894
 
5899
5895
  // src/components/Table/TableBody.tsx
5900
- var import_jsx_runtime345 = require("react/jsx-runtime");
5896
+ var import_jsx_runtime344 = require("react/jsx-runtime");
5901
5897
  var TableBody = (props) => {
5902
5898
  const { children } = props;
5903
- return /* @__PURE__ */ (0, import_jsx_runtime345.jsx)("tbody", { children });
5899
+ return /* @__PURE__ */ (0, import_jsx_runtime344.jsx)("tbody", { children });
5904
5900
  };
5905
5901
  TableBody.displayName = "TableBody";
5906
5902
  var TableBody_default = TableBody;
5907
5903
 
5908
5904
  // src/components/Table/TableCell.tsx
5909
- var import_react38 = __toESM(require("react"), 1);
5905
+ var import_react37 = __toESM(require("react"), 1);
5910
5906
 
5911
5907
  // src/components/Table/TableHeadContext.tsx
5912
- var import_react36 = __toESM(require("react"), 1);
5913
- var TableHeadContext = import_react36.default.createContext(
5908
+ var import_react35 = __toESM(require("react"), 1);
5909
+ var TableHeadContext = import_react35.default.createContext(
5914
5910
  null
5915
5911
  );
5916
5912
  var useTableHeadContext = () => {
5917
- const ctx = import_react36.default.useContext(TableHeadContext);
5913
+ const ctx = import_react35.default.useContext(TableHeadContext);
5918
5914
  return ctx;
5919
5915
  };
5920
5916
  var TableHeadContext_default = TableHeadContext;
5921
5917
 
5922
5918
  // src/components/Table/TableRowContext.tsx
5923
- var import_react37 = __toESM(require("react"), 1);
5924
- var TableRowContext = import_react37.default.createContext(null);
5919
+ var import_react36 = __toESM(require("react"), 1);
5920
+ var TableRowContext = import_react36.default.createContext(null);
5925
5921
  var useTableRowContext = () => {
5926
- const ctx = import_react37.default.useContext(TableRowContext);
5922
+ const ctx = import_react36.default.useContext(TableRowContext);
5927
5923
  if (!ctx) throw new Error("Table components must be used inside <Table>");
5928
5924
  return ctx;
5929
5925
  };
5930
5926
  var TableRowContext_default = TableRowContext;
5931
5927
 
5932
5928
  // src/components/Table/TableCell.tsx
5933
- var import_jsx_runtime346 = require("react/jsx-runtime");
5934
- var TableCell = import_react38.default.memo((props) => {
5929
+ var import_jsx_runtime345 = require("react/jsx-runtime");
5930
+ var TableCell = import_react37.default.memo((props) => {
5935
5931
  const {
5936
5932
  children,
5937
5933
  align = "center",
@@ -5945,9 +5941,9 @@ var TableCell = import_react38.default.memo((props) => {
5945
5941
  const { registerStickyCell, stickyCells } = useTableRowContext();
5946
5942
  const { stickyShadow } = useTableContext();
5947
5943
  const headContext = useTableHeadContext();
5948
- const [left, setLeft] = import_react38.default.useState(0);
5949
- const cellRef = import_react38.default.useRef(null);
5950
- const calculateLeft = import_react38.default.useCallback(() => {
5944
+ const [left, setLeft] = import_react37.default.useState(0);
5945
+ const cellRef = import_react37.default.useRef(null);
5946
+ const calculateLeft = import_react37.default.useCallback(() => {
5951
5947
  if (!cellRef.current) return 0;
5952
5948
  let totalLeft = 0;
5953
5949
  for (const ref of stickyCells) {
@@ -5956,7 +5952,7 @@ var TableCell = import_react38.default.memo((props) => {
5956
5952
  }
5957
5953
  return totalLeft;
5958
5954
  }, [stickyCells]);
5959
- import_react38.default.useEffect(() => {
5955
+ import_react37.default.useEffect(() => {
5960
5956
  if (!isSticky || !cellRef.current) return;
5961
5957
  registerStickyCell(cellRef);
5962
5958
  setLeft(calculateLeft());
@@ -5975,7 +5971,7 @@ var TableCell = import_react38.default.memo((props) => {
5975
5971
  const CellTag = isHeaderCell ? "th" : "td";
5976
5972
  const isLastSticky = isSticky && stickyCells[stickyCells.length - 1] === cellRef;
5977
5973
  const enableHover = headContext && headContext.cellHover;
5978
- return /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(
5974
+ return /* @__PURE__ */ (0, import_jsx_runtime345.jsx)(
5979
5975
  CellTag,
5980
5976
  {
5981
5977
  ref: cellRef,
@@ -6002,21 +5998,21 @@ TableCell.displayName = "TableCell";
6002
5998
  var TableCell_default = TableCell;
6003
5999
 
6004
6000
  // src/components/Table/TableHead.tsx
6005
- var import_jsx_runtime347 = require("react/jsx-runtime");
6001
+ var import_jsx_runtime346 = require("react/jsx-runtime");
6006
6002
  var TableHead = ({
6007
6003
  children,
6008
6004
  cellHover = false
6009
6005
  }) => {
6010
6006
  const { headerSticky } = useTableContext();
6011
- return /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
6007
+ return /* @__PURE__ */ (0, import_jsx_runtime346.jsx)(TableHeadContext_default.Provider, { value: { cellHover }, children: /* @__PURE__ */ (0, import_jsx_runtime346.jsx)("thead", { className: clsx_default(headerSticky ? "table-sticky" : null), children }) });
6012
6008
  };
6013
6009
  TableHead.displayName = "TableHead";
6014
6010
  var TableHead_default = TableHead;
6015
6011
 
6016
6012
  // src/components/Table/TableRow.tsx
6017
- var import_react39 = __toESM(require("react"), 1);
6018
- var import_jsx_runtime348 = require("react/jsx-runtime");
6019
- var TableRow = import_react39.default.memo((props) => {
6013
+ var import_react38 = __toESM(require("react"), 1);
6014
+ var import_jsx_runtime347 = require("react/jsx-runtime");
6015
+ var TableRow = import_react38.default.memo((props) => {
6020
6016
  const {
6021
6017
  children,
6022
6018
  type = "secondary",
@@ -6025,14 +6021,14 @@ var TableRow = import_react39.default.memo((props) => {
6025
6021
  onClick
6026
6022
  } = props;
6027
6023
  const { rowBorderUse } = useTableContext();
6028
- const [stickyCells, setStickyCells] = import_react39.default.useState([]);
6024
+ const [stickyCells, setStickyCells] = import_react38.default.useState([]);
6029
6025
  const registerStickyCell = (ref) => {
6030
6026
  setStickyCells((prev) => {
6031
6027
  if (prev.includes(ref)) return prev;
6032
6028
  return [...prev, ref];
6033
6029
  });
6034
6030
  };
6035
- return /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(
6031
+ return /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(TableRowContext_default.Provider, { value: { stickyCells, registerStickyCell }, children: /* @__PURE__ */ (0, import_jsx_runtime347.jsx)(
6036
6032
  "tr",
6037
6033
  {
6038
6034
  className: clsx_default(
@@ -6056,7 +6052,7 @@ TableRow.displayName = "TableRow";
6056
6052
  var TableRow_default = TableRow;
6057
6053
 
6058
6054
  // src/components/Tag/Tag.tsx
6059
- var import_jsx_runtime349 = require("react/jsx-runtime");
6055
+ var import_jsx_runtime348 = require("react/jsx-runtime");
6060
6056
  var Tag = (props) => {
6061
6057
  const {
6062
6058
  children,
@@ -6066,7 +6062,7 @@ var Tag = (props) => {
6066
6062
  disabled = false,
6067
6063
  colorIndex
6068
6064
  } = props;
6069
- return /* @__PURE__ */ (0, import_jsx_runtime349.jsxs)(
6065
+ return /* @__PURE__ */ (0, import_jsx_runtime348.jsxs)(
6070
6066
  "span",
6071
6067
  {
6072
6068
  className: clsx_default(
@@ -6077,8 +6073,8 @@ var Tag = (props) => {
6077
6073
  disabled && "disabled"
6078
6074
  ),
6079
6075
  children: [
6080
- /* @__PURE__ */ (0, import_jsx_runtime349.jsx)("span", { className: "tag-label", children }),
6081
- onClose && /* @__PURE__ */ (0, import_jsx_runtime349.jsx)("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ (0, import_jsx_runtime349.jsx)(XIcon_default, {}) })
6076
+ /* @__PURE__ */ (0, import_jsx_runtime348.jsx)("span", { className: "tag-label", children }),
6077
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime348.jsx)("button", { className: "tag-close", onClick: onClose, "aria-label": "\uC0AD\uC81C", disabled, children: /* @__PURE__ */ (0, import_jsx_runtime348.jsx)(XIcon_default, {}) })
6082
6078
  ]
6083
6079
  }
6084
6080
  );
@@ -6087,9 +6083,9 @@ Tag.displayName = "Tag";
6087
6083
  var Tag_default = Tag;
6088
6084
 
6089
6085
  // src/components/TextArea/TextArea.tsx
6090
- var import_react40 = __toESM(require("react"), 1);
6091
- var import_jsx_runtime350 = require("react/jsx-runtime");
6092
- var TextArea = import_react40.default.forwardRef(
6086
+ var import_react39 = __toESM(require("react"), 1);
6087
+ var import_jsx_runtime349 = require("react/jsx-runtime");
6088
+ var TextArea = import_react39.default.forwardRef(
6093
6089
  (props, ref) => {
6094
6090
  const {
6095
6091
  className,
@@ -6099,7 +6095,7 @@ var TextArea = import_react40.default.forwardRef(
6099
6095
  disabled,
6100
6096
  ...textareaProps
6101
6097
  } = props;
6102
- return /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { className: clsx_default("lib-xplat-textarea-wrap", className), children: /* @__PURE__ */ (0, import_jsx_runtime350.jsx)(
6098
+ return /* @__PURE__ */ (0, import_jsx_runtime349.jsx)("div", { className: clsx_default("lib-xplat-textarea-wrap", className), children: /* @__PURE__ */ (0, import_jsx_runtime349.jsx)(
6103
6099
  "textarea",
6104
6100
  {
6105
6101
  ...textareaProps,
@@ -6116,25 +6112,25 @@ TextArea.displayName = "TextArea";
6116
6112
  var TextArea_default = TextArea;
6117
6113
 
6118
6114
  // src/components/Toast/Toast.tsx
6119
- var import_react41 = __toESM(require("react"), 1);
6115
+ var import_react40 = __toESM(require("react"), 1);
6120
6116
  var import_react_dom4 = require("react-dom");
6121
- var import_jsx_runtime351 = require("react/jsx-runtime");
6122
- var ToastContext = import_react41.default.createContext(null);
6117
+ var import_jsx_runtime350 = require("react/jsx-runtime");
6118
+ var ToastContext = import_react40.default.createContext(null);
6123
6119
  var useToast = () => {
6124
- const ctx = import_react41.default.useContext(ToastContext);
6120
+ const ctx = import_react40.default.useContext(ToastContext);
6125
6121
  if (!ctx) throw new Error("useToast must be used within ToastProvider");
6126
6122
  return ctx;
6127
6123
  };
6128
6124
  var EXIT_DURATION = 300;
6129
6125
  var ToastItemComponent = ({ item, isExiting, onClose }) => {
6130
- const ref = import_react41.default.useRef(null);
6131
- const [height, setHeight] = import_react41.default.useState(void 0);
6132
- import_react41.default.useEffect(() => {
6126
+ const ref = import_react40.default.useRef(null);
6127
+ const [height, setHeight] = import_react40.default.useState(void 0);
6128
+ import_react40.default.useEffect(() => {
6133
6129
  if (ref.current && !isExiting) {
6134
6130
  setHeight(ref.current.offsetHeight);
6135
6131
  }
6136
6132
  }, [isExiting]);
6137
- return /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
6133
+ return /* @__PURE__ */ (0, import_jsx_runtime350.jsx)(
6138
6134
  "div",
6139
6135
  {
6140
6136
  className: clsx_default("lib-xplat-toast-wrapper", { exit: isExiting }),
@@ -6142,15 +6138,15 @@ var ToastItemComponent = ({ item, isExiting, onClose }) => {
6142
6138
  maxHeight: isExiting ? 0 : height ?? "none",
6143
6139
  marginBottom: isExiting ? 0 : void 0
6144
6140
  },
6145
- children: /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)(
6141
+ children: /* @__PURE__ */ (0, import_jsx_runtime350.jsxs)(
6146
6142
  "div",
6147
6143
  {
6148
6144
  ref,
6149
6145
  className: clsx_default("lib-xplat-toast", item.type, { exit: isExiting }),
6150
6146
  role: "alert",
6151
6147
  children: [
6152
- /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("span", { className: "message", children: item.message }),
6153
- /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
6148
+ /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("span", { className: "message", children: item.message }),
6149
+ /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("button", { className: "close-btn", onClick: onClose, "aria-label": "\uB2EB\uAE30", children: "\xD7" })
6154
6150
  ]
6155
6151
  }
6156
6152
  )
@@ -6161,13 +6157,13 @@ var ToastProvider = ({
6161
6157
  children,
6162
6158
  position = "top-right"
6163
6159
  }) => {
6164
- const [toasts, setToasts] = import_react41.default.useState([]);
6165
- const [removing, setRemoving] = import_react41.default.useState(/* @__PURE__ */ new Set());
6166
- const [mounted, setMounted] = import_react41.default.useState(false);
6167
- import_react41.default.useEffect(() => {
6160
+ const [toasts, setToasts] = import_react40.default.useState([]);
6161
+ const [removing, setRemoving] = import_react40.default.useState(/* @__PURE__ */ new Set());
6162
+ const [mounted, setMounted] = import_react40.default.useState(false);
6163
+ import_react40.default.useEffect(() => {
6168
6164
  setMounted(true);
6169
6165
  }, []);
6170
- const remove = import_react41.default.useCallback((id) => {
6166
+ const remove = import_react40.default.useCallback((id) => {
6171
6167
  setRemoving((prev) => new Set(prev).add(id));
6172
6168
  setTimeout(() => {
6173
6169
  setToasts((prev) => prev.filter((t) => t.id !== id));
@@ -6178,7 +6174,7 @@ var ToastProvider = ({
6178
6174
  });
6179
6175
  }, EXIT_DURATION);
6180
6176
  }, []);
6181
- const toast = import_react41.default.useCallback(
6177
+ const toast = import_react40.default.useCallback(
6182
6178
  (type, message, duration = 3e3) => {
6183
6179
  const id = `${Date.now()}-${Math.random()}`;
6184
6180
  setToasts((prev) => [...prev, { id, type, message }]);
@@ -6188,10 +6184,10 @@ var ToastProvider = ({
6188
6184
  },
6189
6185
  [remove]
6190
6186
  );
6191
- return /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)(ToastContext.Provider, { value: { toast }, children: [
6187
+ return /* @__PURE__ */ (0, import_jsx_runtime350.jsxs)(ToastContext.Provider, { value: { toast }, children: [
6192
6188
  children,
6193
6189
  mounted && (0, import_react_dom4.createPortal)(
6194
- /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(
6190
+ /* @__PURE__ */ (0, import_jsx_runtime350.jsx)("div", { className: clsx_default("lib-xplat-toast-container", position), children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime350.jsx)(
6195
6191
  ToastItemComponent,
6196
6192
  {
6197
6193
  item: t,
@@ -6207,8 +6203,8 @@ var ToastProvider = ({
6207
6203
  ToastProvider.displayName = "ToastProvider";
6208
6204
 
6209
6205
  // src/components/Tooltip/Tooltip.tsx
6210
- var import_react42 = __toESM(require("react"), 1);
6211
- var import_jsx_runtime352 = require("react/jsx-runtime");
6206
+ var import_react41 = __toESM(require("react"), 1);
6207
+ var import_jsx_runtime351 = require("react/jsx-runtime");
6212
6208
  var OFFSET = 12;
6213
6209
  var GAP = 8;
6214
6210
  var SHOW_DELAY = 300;
@@ -6221,14 +6217,14 @@ var Tooltip = (props) => {
6221
6217
  follow = false,
6222
6218
  disabled = false
6223
6219
  } = props;
6224
- const triggerRef = import_react42.default.useRef(null);
6225
- const tooltipRef = import_react42.default.useRef(null);
6226
- const [visible, setVisible] = import_react42.default.useState(false);
6227
- const [pos, setPos] = import_react42.default.useState({ left: 0, top: 0 });
6228
- const delayTimer = import_react42.default.useRef(0);
6229
- const rafRef = import_react42.default.useRef(0);
6230
- const cursor = import_react42.default.useRef(null);
6231
- const clamp = import_react42.default.useCallback((left, top, w, h) => {
6220
+ const triggerRef = import_react41.default.useRef(null);
6221
+ const tooltipRef = import_react41.default.useRef(null);
6222
+ const [visible, setVisible] = import_react41.default.useState(false);
6223
+ const [pos, setPos] = import_react41.default.useState({ left: 0, top: 0 });
6224
+ const delayTimer = import_react41.default.useRef(0);
6225
+ const rafRef = import_react41.default.useRef(0);
6226
+ const cursor = import_react41.default.useRef(null);
6227
+ const clamp = import_react41.default.useCallback((left, top, w, h) => {
6232
6228
  const vw = window.innerWidth;
6233
6229
  const vh = window.innerHeight;
6234
6230
  return {
@@ -6236,7 +6232,7 @@ var Tooltip = (props) => {
6236
6232
  top: Math.min(Math.max(GAP, top), Math.max(GAP, vh - h - GAP))
6237
6233
  };
6238
6234
  }, []);
6239
- const placeAtCursor = import_react42.default.useCallback((x, y) => {
6235
+ const placeAtCursor = import_react41.default.useCallback((x, y) => {
6240
6236
  const el = tooltipRef.current;
6241
6237
  if (!el) return;
6242
6238
  const w = el.offsetWidth;
@@ -6247,7 +6243,7 @@ var Tooltip = (props) => {
6247
6243
  if (top < GAP) top = y + OFFSET;
6248
6244
  setPos(clamp(left, top, w, h));
6249
6245
  }, [clamp]);
6250
- const placeAtTrigger = import_react42.default.useCallback(() => {
6246
+ const placeAtTrigger = import_react41.default.useCallback(() => {
6251
6247
  const el = tooltipRef.current;
6252
6248
  const trigger = triggerRef.current;
6253
6249
  if (!el || !trigger) return;
@@ -6259,19 +6255,19 @@ var Tooltip = (props) => {
6259
6255
  const left = rect.left + rect.width / 2 - w / 2;
6260
6256
  setPos(clamp(left, top, w, h));
6261
6257
  }, [clamp]);
6262
- const reposition = import_react42.default.useCallback(() => {
6258
+ const reposition = import_react41.default.useCallback(() => {
6263
6259
  if (follow && cursor.current) {
6264
6260
  placeAtCursor(cursor.current.x, cursor.current.y);
6265
6261
  } else {
6266
6262
  placeAtTrigger();
6267
6263
  }
6268
6264
  }, [follow, placeAtCursor, placeAtTrigger]);
6269
- const handleMouseEnter = import_react42.default.useCallback((e) => {
6265
+ const handleMouseEnter = import_react41.default.useCallback((e) => {
6270
6266
  if (disabled) return;
6271
6267
  cursor.current = { x: e.clientX, y: e.clientY };
6272
6268
  delayTimer.current = window.setTimeout(() => setVisible(true), SHOW_DELAY);
6273
6269
  }, [disabled]);
6274
- const handleMouseMove = import_react42.default.useCallback((e) => {
6270
+ const handleMouseMove = import_react41.default.useCallback((e) => {
6275
6271
  cursor.current = { x: e.clientX, y: e.clientY };
6276
6272
  if (!visible || !follow) return;
6277
6273
  cancelAnimationFrame(rafRef.current);
@@ -6279,25 +6275,25 @@ var Tooltip = (props) => {
6279
6275
  if (cursor.current) placeAtCursor(cursor.current.x, cursor.current.y);
6280
6276
  });
6281
6277
  }, [visible, follow, placeAtCursor]);
6282
- const close = import_react42.default.useCallback(() => {
6278
+ const close = import_react41.default.useCallback(() => {
6283
6279
  window.clearTimeout(delayTimer.current);
6284
6280
  cancelAnimationFrame(rafRef.current);
6285
6281
  setVisible(false);
6286
6282
  }, []);
6287
- const handleMouseLeave = import_react42.default.useCallback(() => {
6283
+ const handleMouseLeave = import_react41.default.useCallback(() => {
6288
6284
  cursor.current = null;
6289
6285
  close();
6290
6286
  }, [close]);
6291
- const handleFocus = import_react42.default.useCallback(() => {
6287
+ const handleFocus = import_react41.default.useCallback(() => {
6292
6288
  if (disabled) return;
6293
6289
  cursor.current = null;
6294
6290
  setVisible(true);
6295
6291
  }, [disabled]);
6296
- import_react42.default.useLayoutEffect(() => {
6292
+ import_react41.default.useLayoutEffect(() => {
6297
6293
  if (!visible) return;
6298
6294
  reposition();
6299
6295
  }, [visible, reposition]);
6300
- import_react42.default.useEffect(() => {
6296
+ import_react41.default.useEffect(() => {
6301
6297
  if (!visible || follow) return;
6302
6298
  const onChange = () => placeAtTrigger();
6303
6299
  window.addEventListener("scroll", onChange, true);
@@ -6307,12 +6303,12 @@ var Tooltip = (props) => {
6307
6303
  window.removeEventListener("resize", onChange);
6308
6304
  };
6309
6305
  }, [visible, follow, placeAtTrigger]);
6310
- import_react42.default.useEffect(() => () => {
6306
+ import_react41.default.useEffect(() => () => {
6311
6307
  window.clearTimeout(delayTimer.current);
6312
6308
  cancelAnimationFrame(rafRef.current);
6313
6309
  }, []);
6314
- if (!title && !description) return /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(import_jsx_runtime352.Fragment, { children });
6315
- return /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)(
6310
+ if (!title && !description) return /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(import_jsx_runtime351.Fragment, { children });
6311
+ return /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)(
6316
6312
  "div",
6317
6313
  {
6318
6314
  ref: triggerRef,
@@ -6325,7 +6321,7 @@ var Tooltip = (props) => {
6325
6321
  onBlur: close,
6326
6322
  children: [
6327
6323
  children,
6328
- visible && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)(
6324
+ visible && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)(Portal_default, { children: /* @__PURE__ */ (0, import_jsx_runtime351.jsxs)(
6329
6325
  "div",
6330
6326
  {
6331
6327
  ref: tooltipRef,
@@ -6333,8 +6329,8 @@ var Tooltip = (props) => {
6333
6329
  className: clsx_default("lib-xplat-tooltip", type),
6334
6330
  style: { position: "fixed", left: pos.left, top: pos.top },
6335
6331
  children: [
6336
- title && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { className: "tooltip-title", children: title }),
6337
- description && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { className: "tooltip-desc", children: description })
6332
+ title && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { className: "tooltip-title", children: title }),
6333
+ description && /* @__PURE__ */ (0, import_jsx_runtime351.jsx)("div", { className: "tooltip-desc", children: description })
6338
6334
  ]
6339
6335
  }
6340
6336
  ) })
@@ -6346,11 +6342,11 @@ Tooltip.displayName = "Tooltip";
6346
6342
  var Tooltip_default = Tooltip;
6347
6343
 
6348
6344
  // src/components/Video/Video.tsx
6349
- var import_react43 = __toESM(require("react"), 1);
6350
- var import_jsx_runtime353 = require("react/jsx-runtime");
6351
- var PipIcon = () => /* @__PURE__ */ (0, import_jsx_runtime353.jsxs)("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
6352
- /* @__PURE__ */ (0, import_jsx_runtime353.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
6353
- /* @__PURE__ */ (0, import_jsx_runtime353.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
6345
+ var import_react42 = __toESM(require("react"), 1);
6346
+ var import_jsx_runtime352 = require("react/jsx-runtime");
6347
+ var PipIcon = () => /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
6348
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("rect", { x: "3", y: "5", width: "18", height: "14", rx: "2" }),
6349
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("rect", { x: "12", y: "11", width: "7", height: "6", rx: "1", fill: "currentColor" })
6354
6350
  ] });
6355
6351
  var formatTime = (sec) => {
6356
6352
  if (!Number.isFinite(sec) || sec < 0) return "0:00";
@@ -6358,7 +6354,7 @@ var formatTime = (sec) => {
6358
6354
  const s = Math.floor(sec % 60);
6359
6355
  return `${m}:${s.toString().padStart(2, "0")}`;
6360
6356
  };
6361
- var Video = import_react43.default.forwardRef((props, ref) => {
6357
+ var Video = import_react42.default.forwardRef((props, ref) => {
6362
6358
  const {
6363
6359
  src,
6364
6360
  poster,
@@ -6382,21 +6378,21 @@ var Video = import_react43.default.forwardRef((props, ref) => {
6382
6378
  children,
6383
6379
  ...rest
6384
6380
  } = props;
6385
- const containerRef = import_react43.default.useRef(null);
6386
- const videoRef = import_react43.default.useRef(null);
6387
- const [isPlaying, setIsPlaying] = import_react43.default.useState(Boolean(autoPlay));
6388
- const [isLoaded, setIsLoaded] = import_react43.default.useState(false);
6389
- const [currentTime, setCurrentTime] = import_react43.default.useState(0);
6390
- const [duration, setDuration] = import_react43.default.useState(0);
6391
- const [buffered, setBuffered] = import_react43.default.useState(0);
6392
- const [volume, setVolume] = import_react43.default.useState(1);
6393
- const [isMuted, setIsMuted] = import_react43.default.useState(Boolean(muted));
6394
- const [isFullscreen, setIsFullscreen] = import_react43.default.useState(false);
6395
- const [playbackRate, setPlaybackRate] = import_react43.default.useState(1);
6396
- const [rateMenuOpen, setRateMenuOpen] = import_react43.default.useState(false);
6397
- const [captionsOn, setCaptionsOn] = import_react43.default.useState(false);
6398
- const [isPip, setIsPip] = import_react43.default.useState(false);
6399
- const setRefs = import_react43.default.useCallback(
6381
+ const containerRef = import_react42.default.useRef(null);
6382
+ const videoRef = import_react42.default.useRef(null);
6383
+ const [isPlaying, setIsPlaying] = import_react42.default.useState(Boolean(autoPlay));
6384
+ const [isLoaded, setIsLoaded] = import_react42.default.useState(false);
6385
+ const [currentTime, setCurrentTime] = import_react42.default.useState(0);
6386
+ const [duration, setDuration] = import_react42.default.useState(0);
6387
+ const [buffered, setBuffered] = import_react42.default.useState(0);
6388
+ const [volume, setVolume] = import_react42.default.useState(1);
6389
+ const [isMuted, setIsMuted] = import_react42.default.useState(Boolean(muted));
6390
+ const [isFullscreen, setIsFullscreen] = import_react42.default.useState(false);
6391
+ const [playbackRate, setPlaybackRate] = import_react42.default.useState(1);
6392
+ const [rateMenuOpen, setRateMenuOpen] = import_react42.default.useState(false);
6393
+ const [captionsOn, setCaptionsOn] = import_react42.default.useState(false);
6394
+ const [isPip, setIsPip] = import_react42.default.useState(false);
6395
+ const setRefs = import_react42.default.useCallback(
6400
6396
  (el) => {
6401
6397
  videoRef.current = el;
6402
6398
  if (typeof ref === "function") ref(el);
@@ -6404,14 +6400,14 @@ var Video = import_react43.default.forwardRef((props, ref) => {
6404
6400
  },
6405
6401
  [ref]
6406
6402
  );
6407
- import_react43.default.useEffect(() => {
6403
+ import_react42.default.useEffect(() => {
6408
6404
  const onFsChange = () => {
6409
6405
  setIsFullscreen(document.fullscreenElement === containerRef.current);
6410
6406
  };
6411
6407
  document.addEventListener("fullscreenchange", onFsChange);
6412
6408
  return () => document.removeEventListener("fullscreenchange", onFsChange);
6413
6409
  }, []);
6414
- import_react43.default.useEffect(() => {
6410
+ import_react42.default.useEffect(() => {
6415
6411
  const v = videoRef.current;
6416
6412
  if (!v) return;
6417
6413
  const onEnter = () => setIsPip(true);
@@ -6525,13 +6521,13 @@ var Video = import_react43.default.forwardRef((props, ref) => {
6525
6521
  const volumePct = (isMuted ? 0 : volume) * 100;
6526
6522
  const VolumeGlyph = isMuted || volume === 0 ? VolumeXIcon_default : volume < 0.5 ? VolumeIcon_default : Volume2Icon_default;
6527
6523
  const pipSupported = typeof document !== "undefined" && "pictureInPictureEnabled" in document && document.pictureInPictureEnabled;
6528
- return /* @__PURE__ */ (0, import_jsx_runtime353.jsxs)(
6524
+ return /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)(
6529
6525
  "div",
6530
6526
  {
6531
6527
  ref: containerRef,
6532
6528
  className: clsx_default("lib-xplat-video", showControls && "has-controls"),
6533
6529
  children: [
6534
- /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
6530
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
6535
6531
  "video",
6536
6532
  {
6537
6533
  ref: setRefs,
@@ -6552,7 +6548,7 @@ var Video = import_react43.default.forwardRef((props, ref) => {
6552
6548
  children
6553
6549
  }
6554
6550
  ),
6555
- showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
6551
+ showCenterPlay && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
6556
6552
  "button",
6557
6553
  {
6558
6554
  type: "button",
@@ -6564,11 +6560,11 @@ var Video = import_react43.default.forwardRef((props, ref) => {
6564
6560
  onClick: togglePlay,
6565
6561
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
6566
6562
  tabIndex: -1,
6567
- children: /* @__PURE__ */ (0, import_jsx_runtime353.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(PlayCircleIcon_default, {}) })
6563
+ children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("span", { className: "center-play-icon", children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(PlayCircleIcon_default, {}) })
6568
6564
  }
6569
6565
  ),
6570
- showControls && /* @__PURE__ */ (0, import_jsx_runtime353.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
6571
- /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
6566
+ showControls && /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: "controls", onClick: (e) => e.stopPropagation(), children: [
6567
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
6572
6568
  "input",
6573
6569
  {
6574
6570
  type: "range",
@@ -6585,29 +6581,29 @@ var Video = import_react43.default.forwardRef((props, ref) => {
6585
6581
  }
6586
6582
  }
6587
6583
  ),
6588
- /* @__PURE__ */ (0, import_jsx_runtime353.jsxs)("div", { className: "controls-row", children: [
6589
- /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
6584
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: "controls-row", children: [
6585
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
6590
6586
  "button",
6591
6587
  {
6592
6588
  type: "button",
6593
6589
  className: "control-btn",
6594
6590
  onClick: togglePlay,
6595
6591
  "aria-label": isPlaying ? "\uC77C\uC2DC\uC815\uC9C0" : "\uC7AC\uC0DD",
6596
- children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(PlayIcon_default, {})
6592
+ children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(PauseIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(PlayIcon_default, {})
6597
6593
  }
6598
6594
  ),
6599
- /* @__PURE__ */ (0, import_jsx_runtime353.jsxs)("div", { className: "volume-group", children: [
6600
- /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
6595
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: "volume-group", children: [
6596
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
6601
6597
  "button",
6602
6598
  {
6603
6599
  type: "button",
6604
6600
  className: "control-btn",
6605
6601
  onClick: toggleMute,
6606
6602
  "aria-label": isMuted ? "\uC74C\uC18C\uAC70 \uD574\uC81C" : "\uC74C\uC18C\uAC70",
6607
- children: /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(VolumeGlyph, {})
6603
+ children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(VolumeGlyph, {})
6608
6604
  }
6609
6605
  ),
6610
- /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
6606
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
6611
6607
  "input",
6612
6608
  {
6613
6609
  type: "range",
@@ -6622,14 +6618,14 @@ var Video = import_react43.default.forwardRef((props, ref) => {
6622
6618
  }
6623
6619
  )
6624
6620
  ] }),
6625
- /* @__PURE__ */ (0, import_jsx_runtime353.jsxs)("span", { className: "time", children: [
6621
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("span", { className: "time", children: [
6626
6622
  formatTime(currentTime),
6627
6623
  " / ",
6628
6624
  formatTime(duration)
6629
6625
  ] }),
6630
- /* @__PURE__ */ (0, import_jsx_runtime353.jsx)("div", { className: "controls-spacer" }),
6631
- playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime353.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
6632
- /* @__PURE__ */ (0, import_jsx_runtime353.jsxs)(
6626
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("div", { className: "controls-spacer" }),
6627
+ playbackRates && playbackRates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)("div", { className: clsx_default("rate-group", rateMenuOpen && "is-open"), children: [
6628
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)(
6633
6629
  "button",
6634
6630
  {
6635
6631
  type: "button",
@@ -6643,7 +6639,7 @@ var Video = import_react43.default.forwardRef((props, ref) => {
6643
6639
  ]
6644
6640
  }
6645
6641
  ),
6646
- rateMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime353.jsx)("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ (0, import_jsx_runtime353.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime353.jsxs)(
6642
+ rateMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("ul", { className: "rate-menu", role: "menu", children: playbackRates.map((r2) => /* @__PURE__ */ (0, import_jsx_runtime352.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime352.jsxs)(
6647
6643
  "button",
6648
6644
  {
6649
6645
  type: "button",
@@ -6657,7 +6653,7 @@ var Video = import_react43.default.forwardRef((props, ref) => {
6657
6653
  }
6658
6654
  ) }, r2)) })
6659
6655
  ] }),
6660
- showCaptions && /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
6656
+ showCaptions && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
6661
6657
  "button",
6662
6658
  {
6663
6659
  type: "button",
@@ -6665,37 +6661,37 @@ var Video = import_react43.default.forwardRef((props, ref) => {
6665
6661
  onClick: toggleCaptions,
6666
6662
  "aria-label": captionsOn ? "\uC790\uB9C9 \uB044\uAE30" : "\uC790\uB9C9 \uCF1C\uAE30",
6667
6663
  "aria-pressed": captionsOn,
6668
- children: /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(TypeIcon_default, {})
6664
+ children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(TypeIcon_default, {})
6669
6665
  }
6670
6666
  ),
6671
- showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
6667
+ showPip && pipSupported && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
6672
6668
  "button",
6673
6669
  {
6674
6670
  type: "button",
6675
6671
  className: clsx_default("control-btn", isPip && "is-active"),
6676
6672
  onClick: togglePip,
6677
6673
  "aria-label": isPip ? "PIP \uC885\uB8CC" : "PIP",
6678
- children: /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(PipIcon, {})
6674
+ children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(PipIcon, {})
6679
6675
  }
6680
6676
  ),
6681
- showDownload && /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
6677
+ showDownload && /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
6682
6678
  "a",
6683
6679
  {
6684
6680
  className: "control-btn",
6685
6681
  href: src,
6686
6682
  download: downloadFileName ?? true,
6687
6683
  "aria-label": "\uB2E4\uC6B4\uB85C\uB4DC",
6688
- children: /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(DownloadIcon_default, {})
6684
+ children: /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(DownloadIcon_default, {})
6689
6685
  }
6690
6686
  ),
6691
- /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(
6687
+ /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(
6692
6688
  "button",
6693
6689
  {
6694
6690
  type: "button",
6695
6691
  className: "control-btn",
6696
6692
  onClick: toggleFullscreen,
6697
6693
  "aria-label": isFullscreen ? "\uC804\uCCB4\uD654\uBA74 \uC885\uB8CC" : "\uC804\uCCB4\uD654\uBA74",
6698
- children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime353.jsx)(MaximizeIcon_default, {})
6694
+ children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(MinimizeIcon_default, {}) : /* @__PURE__ */ (0, import_jsx_runtime352.jsx)(MaximizeIcon_default, {})
6699
6695
  }
6700
6696
  )
6701
6697
  ] })