@bestow-ui/react 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -6,9 +6,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
7
  var __getProtoOf = Object.getPrototypeOf;
8
8
  var __hasOwnProp = Object.prototype.hasOwnProperty;
9
- var __export = (target, all) => {
10
- for (var name in all)
11
- __defProp(target, name, { get: all[name], enumerable: true });
9
+ var __export = (target, all2) => {
10
+ for (var name in all2)
11
+ __defProp(target, name, { get: all2[name], enumerable: true });
12
12
  };
13
13
  var __copyProps = (to, from, except, desc) => {
14
14
  if (from && typeof from === "object" || typeof from === "function") {
@@ -33,17 +33,23 @@ var index_exports = {};
33
33
  __export(index_exports, {
34
34
  Accordion: () => Accordion,
35
35
  AccordionItem: () => AccordionItem,
36
+ AddressInput: () => AddressInput,
37
+ AgreementGroup: () => AgreementGroup,
36
38
  Alert: () => Alert,
39
+ AmountInput: () => AmountInput,
37
40
  Avatar: () => Avatar,
38
41
  Badge: () => Badge,
39
42
  Breadcrumb: () => Breadcrumb,
43
+ BusinessNumberInput: () => BusinessNumberInput,
40
44
  Button: () => Button,
45
+ Calendar: () => Calendar,
41
46
  Card: () => Card,
42
47
  CardBody: () => CardBody,
43
48
  CardFooter: () => CardFooter,
44
49
  CardHeader: () => CardHeader,
45
50
  Checkbox: () => Checkbox,
46
51
  Combobox: () => Combobox,
52
+ DatePicker: () => DatePicker,
47
53
  Divider: () => Divider,
48
54
  Drawer: () => Drawer,
49
55
  DrawerClose: () => DrawerClose,
@@ -57,9 +63,11 @@ __export(index_exports, {
57
63
  IconButton: () => IconButton,
58
64
  Input: () => Input,
59
65
  Link: () => Link,
66
+ LocaleProvider: () => LocaleProvider,
60
67
  Modal: () => Modal,
61
68
  ModalClose: () => ModalClose,
62
69
  Pagination: () => Pagination,
70
+ PhoneNumberInput: () => PhoneNumberInput,
63
71
  Popover: () => Popover2,
64
72
  PopoverClose: () => PopoverClose,
65
73
  Progress: () => Progress,
@@ -87,10 +95,23 @@ __export(index_exports, {
87
95
  ToastProvider: () => ToastProvider,
88
96
  Tooltip: () => Tooltip,
89
97
  Typography: () => Typography,
98
+ VerificationCodeInput: () => VerificationCodeInput,
99
+ composeExtraAddress: () => composeExtraAddress,
90
100
  contrastRatio: () => contrastRatio,
91
101
  createIntentColors: () => createIntentColors,
92
102
  createTheme: () => createTheme,
103
+ en: () => en,
104
+ formatBusinessNumber: () => formatBusinessNumber,
105
+ formatKoreanAmount: () => formatKoreanAmount,
106
+ formatKoreanDate: () => formatKoreanDate,
107
+ formatPhoneNumber: () => formatPhoneNumber,
108
+ hasAllRequiredAgreements: () => hasAllRequiredAgreements,
109
+ isValidBusinessNumber: () => isValidBusinessNumber,
110
+ kakaoPostcodeProvider: () => kakaoPostcodeProvider,
111
+ parseISODate: () => parseISODate,
93
112
  themeClass: () => themeClass,
113
+ toISODate: () => toISODate,
114
+ useMessages: () => useMessages,
94
115
  usePortalClassName: () => usePortalClassName,
95
116
  usePortalProps: () => usePortalProps,
96
117
  useTheme: () => useTheme,
@@ -220,9 +241,12 @@ function createIntentColors(intent, color) {
220
241
  subtleHover: rgba(darkSolid, 0.26),
221
242
  text: findReadable(darkBase, Math.max(darkBase.l, 0.75), 0.02, [darkBg, darkSubtleOnBg, darkSubtleHoverOnBg])
222
243
  };
244
+ const focusOn = (candidate, fallback2, bg) => contrastRatio(candidate, bg) >= 3 ? candidate : fallback2;
223
245
  const focus = intent === "primary" ? {
224
- light: { border: { focus: light.solid } },
225
- dark: { border: { focus: withL(darkBase, Math.min(1, darkBase.l + 0.06)) } }
246
+ light: { border: { focus: focusOn(light.solid, light.text, import_tokens.lightColors.bg.default) } },
247
+ dark: {
248
+ border: { focus: focusOn(withL(darkBase, Math.min(1, darkBase.l + 0.06)), dark.text, darkBg) }
249
+ }
226
250
  } : void 0;
227
251
  return {
228
252
  light: { color: { [intent]: light, ...focus?.light } },
@@ -245,9 +269,9 @@ function deepMerge(target, source) {
245
269
  function createTheme(...inputs) {
246
270
  let light = {};
247
271
  let dark = {};
248
- for (const input3 of inputs) {
249
- light = deepMerge(deepMerge(light, input3.common), input3.light);
250
- dark = deepMerge(deepMerge(dark, input3.common), input3.dark);
272
+ for (const input5 of inputs) {
273
+ light = deepMerge(deepMerge(light, input5.common), input5.light);
274
+ dark = deepMerge(deepMerge(dark, input5.common), input5.dark);
251
275
  }
252
276
  return Object.freeze({ light, dark });
253
277
  }
@@ -317,10 +341,94 @@ function usePortalClassName() {
317
341
  return usePortalProps().className;
318
342
  }
319
343
 
344
+ // src/i18n/LocaleProvider.tsx
345
+ var import_react2 = require("react");
346
+ var import_jsx_runtime2 = require("react/jsx-runtime");
347
+ var MessagesContext = /* @__PURE__ */ (0, import_react2.createContext)({});
348
+ function LocaleProvider({ messages, children }) {
349
+ const parent = (0, import_react2.useContext)(MessagesContext);
350
+ const value4 = (0, import_react2.useMemo)(() => ({ ...parent, ...messages }), [parent, messages]);
351
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(MessagesContext.Provider, { value: value4, children });
352
+ }
353
+ function useMessages() {
354
+ return (0, import_react2.useContext)(MessagesContext);
355
+ }
356
+
357
+ // src/i18n/en.ts
358
+ var WEEKDAYS_LONG = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
359
+ var MONTHS = [
360
+ "January",
361
+ "February",
362
+ "March",
363
+ "April",
364
+ "May",
365
+ "June",
366
+ "July",
367
+ "August",
368
+ "September",
369
+ "October",
370
+ "November",
371
+ "December"
372
+ ];
373
+ var en = {
374
+ close: "Close",
375
+ loading: "Loading",
376
+ notifications: "Notifications",
377
+ breadcrumb: "Breadcrumb",
378
+ pagination: "Pagination",
379
+ paginationPrevious: "Previous page",
380
+ paginationNext: "Next page",
381
+ paginationPage: (page) => `Page ${page}`,
382
+ newWindow: "(opens in a new window)",
383
+ noResults: "No results",
384
+ openList: "Show options",
385
+ rangeStart: "minimum",
386
+ rangeEnd: "maximum",
387
+ agreeAll: "Agree to all",
388
+ required: "Required",
389
+ optional: "Optional",
390
+ show: "View",
391
+ hide: "Hide",
392
+ verificationCode: "Verification code",
393
+ verificationCodeHint: (length, type) => `Enter the ${length}-${type === "numeric" ? "digit" : "character"} code.`,
394
+ resend: "Resend",
395
+ verificationExpired: "The code has expired. Please request a new one.",
396
+ phoneNumber: "Phone number",
397
+ businessNumber: "Business registration number",
398
+ businessNumberInvalid: "This business registration number is not valid. Please check it again.",
399
+ businessNumberIncomplete: "Enter all 10 digits.",
400
+ amount: "Amount",
401
+ currencyUnit: "KRW",
402
+ address: "Address",
403
+ addressSearch: "Find address",
404
+ addressSearchDescription: "Search by road name, building name, or lot number.",
405
+ postalCode: "Postal code",
406
+ baseAddress: "Address",
407
+ baseAddressPlaceholder: 'Select "Find address" to choose an address',
408
+ detailAddress: "Address line 2",
409
+ detailAddressPlaceholder: "Apartment, suite, unit, etc.",
410
+ addressLoading: "Loading address search",
411
+ addressLoadError: "Could not load address search. Please try again later.",
412
+ previousMonth: "Previous month",
413
+ nextMonth: "Next month",
414
+ monthTitle: (year, month) => `${MONTHS[month - 1]} ${year}`,
415
+ weekdaysShort: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
416
+ weekdaysLong: WEEKDAYS_LONG,
417
+ dayLabel: (date, weekdayLong) => `${date.getDate()}, ${weekdayLong}, ${MONTHS[date.getMonth()]} ${date.getFullYear()}`,
418
+ holiday: "holiday",
419
+ today: "today",
420
+ date: "Date",
421
+ openCalendar: "Choose date",
422
+ calendar: "Calendar",
423
+ dateInvalid: "This date does not exist.",
424
+ dateUnavailable: "This date is not available.",
425
+ dateIncomplete: "Enter the date as YYYY-MM-DD."
426
+ };
427
+
320
428
  // src/components/Accordion/Accordion.tsx
321
429
  var RadixAccordion = __toESM(require("@radix-ui/react-accordion"), 1);
322
430
  var import_icons = require("@bestow-ui/icons");
323
- var import_react2 = require("react");
431
+ var import_react3 = require("react");
324
432
 
325
433
  // src/components/Accordion/Accordion.css.ts
326
434
  var chevron = "v58j0l4";
@@ -332,146 +440,1008 @@ var root2 = "v58j0l0";
332
440
  var trigger = "v58j0l3";
333
441
 
334
442
  // src/components/Accordion/Accordion.tsx
335
- var import_jsx_runtime2 = require("react/jsx-runtime");
336
- var Accordion = /* @__PURE__ */ (0, import_react2.forwardRef)(function Accordion2({ className, ...props }, ref) {
443
+ var import_jsx_runtime3 = require("react/jsx-runtime");
444
+ var Accordion = /* @__PURE__ */ (0, import_react3.forwardRef)(function Accordion2({ className, ...props }, ref) {
337
445
  const { collapsible, ...multipleProps } = props;
338
446
  const typedProps = props.type === "multiple" ? multipleProps : { ...multipleProps, collapsible };
339
447
  const rootProps = "value" in props ? { ...typedProps, value: props.value ?? (props.type === "multiple" ? [] : "") } : typedProps;
340
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(RadixAccordion.Root, { ref, className: cx(root2, className), ...rootProps });
448
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(RadixAccordion.Root, { ref, className: cx(root2, className), ...rootProps });
341
449
  });
342
- var AccordionItem = /* @__PURE__ */ (0, import_react2.forwardRef)(function AccordionItem2({ title: title6, headingLevel = 3, className, children, ...rest }, ref) {
450
+ var AccordionItem = /* @__PURE__ */ (0, import_react3.forwardRef)(function AccordionItem2({ title: title6, headingLevel = 3, className, children, ...rest }, ref) {
343
451
  const Heading = `h${headingLevel}`;
344
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(RadixAccordion.Item, { ref, className: cx(item, className), ...rest, children: [
345
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(RadixAccordion.Header, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Heading, { className: header, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(RadixAccordion.Trigger, { className: trigger, children: [
452
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(RadixAccordion.Item, { ref, className: cx(item, className), ...rest, children: [
453
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(RadixAccordion.Header, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Heading, { className: header, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(RadixAccordion.Trigger, { className: trigger, children: [
346
454
  title6,
347
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons.ChevronDownIcon, { size: 18, className: chevron })
455
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons.ChevronDownIcon, { size: 18, className: chevron })
348
456
  ] }) }) }),
349
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(RadixAccordion.Content, { className: content, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: contentInner, children }) })
457
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(RadixAccordion.Content, { className: content, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: contentInner, children }) })
350
458
  ] });
351
459
  });
352
460
 
353
- // src/components/Alert/Alert.tsx
354
- var import_react3 = require("react");
461
+ // src/components/AddressInput/AddressInput.tsx
462
+ var import_react9 = require("react");
463
+
464
+ // src/components/Button/Button.tsx
465
+ var import_react5 = require("react");
466
+
467
+ // src/components/Spinner/Spinner.tsx
355
468
  var import_icons2 = require("@bestow-ui/icons");
469
+ var import_react4 = require("react");
356
470
 
357
- // src/components/Alert/Alert.css.ts
471
+ // src/styles/visuallyHidden.css.ts
472
+ var visuallyHidden = "_1kdtbw10";
473
+
474
+ // src/components/Spinner/Spinner.css.ts
358
475
  var import_createRuntimeFn = require("@vanilla-extract/recipes/createRuntimeFn");
476
+ var spinner = /* @__PURE__ */ (0, import_createRuntimeFn.createRuntimeFn)({ defaultClassName: "_4b5tg40", variantClassNames: { color: { inherit: "_4b5tg41", primary: "_4b5tg42", neutral: "_4b5tg43", danger: "_4b5tg44" }, size: { sm: "_4b5tg45", md: "_4b5tg46", lg: "_4b5tg47" } }, defaultVariants: { color: "inherit", size: "md" }, compoundVariants: [] });
477
+
478
+ // src/utils/warnOnce.ts
479
+ var warned = /* @__PURE__ */ new Set();
480
+ function warnOnce(message) {
481
+ if (typeof process !== "undefined" && process.env.NODE_ENV === "production") return;
482
+ if (warned.has(message)) return;
483
+ warned.add(message);
484
+ console.warn(`[BestOW UI] ${message}`);
485
+ }
486
+
487
+ // src/components/Spinner/Spinner.tsx
488
+ var import_jsx_runtime4 = require("react/jsx-runtime");
489
+ var Spinner = /* @__PURE__ */ (0, import_react4.forwardRef)(function Spinner2({ size, color, label: labelProp, className, ...rest }, ref) {
490
+ const m = useMessages();
491
+ if (color === "current") {
492
+ warnOnce('Spinner \uC758 color="current" \uB294 deprecated \uC608\uC694. color="inherit" \uB97C \uC4F0\uC138\uC694 (1.0 \uC5D0\uC11C \uC81C\uAC70).');
493
+ color = "inherit";
494
+ }
495
+ const label6 = labelProp ?? m.loading ?? "\uB85C\uB529 \uC911";
496
+ const a11y = label6 ? { role: "status" } : { "aria-hidden": true };
497
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { ref, className: cx(spinner({ size, color }), className), ...a11y, ...rest, children: [
498
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons2.LoaderIcon, { size: "100%" }),
499
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: visuallyHidden, children: label6 })
500
+ ] });
501
+ });
502
+
503
+ // src/components/Button/Button.css.ts
504
+ var import_createRuntimeFn2 = require("@vanilla-extract/recipes/createRuntimeFn");
505
+ var button = /* @__PURE__ */ (0, import_createRuntimeFn2.createRuntimeFn)({ defaultClassName: "xcekda6", variantClassNames: { variant: { solid: "xcekda7", soft: "xcekda8", outline: "xcekda9", ghost: "xcekdaa" }, color: { primary: "xcekdab", neutral: "xcekdac", danger: "xcekdad" }, size: { sm: "xcekdae", md: "xcekdaf", lg: "xcekdag" }, fullWidth: { true: "xcekdah" } }, defaultVariants: { variant: "solid", color: "primary", size: "md" }, compoundVariants: [] });
506
+ var icon = "xcekdai";
507
+
508
+ // src/components/Button/Button.tsx
509
+ var import_jsx_runtime5 = require("react/jsx-runtime");
510
+ var Button = /* @__PURE__ */ (0, import_react5.forwardRef)(function Button2({
511
+ variant,
512
+ color,
513
+ size,
514
+ fullWidth,
515
+ startIcon,
516
+ endIcon,
517
+ loading: loading2,
518
+ className,
519
+ type = "button",
520
+ onClick,
521
+ children,
522
+ ...rest
523
+ }, ref) {
524
+ const handleClick = (event) => {
525
+ if (loading2) {
526
+ event.preventDefault();
527
+ return;
528
+ }
529
+ onClick?.(event);
530
+ };
531
+ const leading = loading2 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Spinner, { size: "sm", label: "" }) : startIcon;
532
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
533
+ "button",
534
+ {
535
+ ref,
536
+ type,
537
+ className: cx(button({ variant, color, size, fullWidth }), className),
538
+ "aria-busy": loading2 || void 0,
539
+ "aria-disabled": loading2 || void 0,
540
+ onClick: handleClick,
541
+ ...rest,
542
+ children: [
543
+ leading && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: icon, children: leading }),
544
+ children,
545
+ endIcon && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: icon, children: endIcon })
546
+ ]
547
+ }
548
+ );
549
+ });
550
+
551
+ // src/components/Input/Input.css.ts
552
+ var import_createRuntimeFn3 = require("@vanilla-extract/recipes/createRuntimeFn");
553
+ var adornment = "_19p5zvh6";
554
+ var field = "_19p5zvh7";
555
+ var fieldFullWidth = "_19p5zvh8";
556
+ var helperText = /* @__PURE__ */ (0, import_createRuntimeFn3.createRuntimeFn)({ defaultClassName: "_19p5zvhb", variantClassNames: { error: { true: "_19p5zvhc" } }, defaultVariants: {}, compoundVariants: [] });
557
+ var input = "_19p5zvh5";
558
+ var label = "_19p5zvh9";
559
+ var requiredMark = "_19p5zvha";
560
+ var root3 = /* @__PURE__ */ (0, import_createRuntimeFn3.createRuntimeFn)({ defaultClassName: "_19p5zvh0", variantClassNames: { size: { sm: "_19p5zvh1", md: "_19p5zvh2", lg: "_19p5zvh3" }, fullWidth: { true: "_19p5zvh4" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
561
+
562
+ // src/components/Input/Input.tsx
563
+ var import_react6 = require("react");
564
+ var import_jsx_runtime6 = require("react/jsx-runtime");
565
+ var Input = /* @__PURE__ */ (0, import_react6.forwardRef)(function Input2({ size, invalid, fullWidth, startAdornment, endAdornment, rootClassName, className, disabled, ...rest }, ref) {
566
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
567
+ "div",
568
+ {
569
+ className: cx(root3({ size, fullWidth }), rootClassName),
570
+ "data-invalid": invalid || void 0,
571
+ "data-disabled": disabled || void 0,
572
+ children: [
573
+ startAdornment && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: adornment, children: startAdornment }),
574
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
575
+ "input",
576
+ {
577
+ ref,
578
+ className: cx(input, className),
579
+ disabled,
580
+ "aria-invalid": invalid || void 0,
581
+ ...rest
582
+ }
583
+ ),
584
+ endAdornment && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: adornment, children: endAdornment })
585
+ ]
586
+ }
587
+ );
588
+ });
589
+
590
+ // src/components/Input/TextField.tsx
591
+ var import_react7 = require("react");
592
+ var import_jsx_runtime7 = require("react/jsx-runtime");
593
+ var TextField = /* @__PURE__ */ (0, import_react7.forwardRef)(function TextField2({ label: label6, helperText: helperText3, error, required, fullWidth, id, "aria-describedby": ariaDescribedBy, ...rest }, ref) {
594
+ const generatedId = (0, import_react7.useId)();
595
+ const inputId = id ?? generatedId;
596
+ const helperId = helperText3 ? `${inputId}-helper` : void 0;
597
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
598
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("label", { htmlFor: inputId, className: label, children: [
599
+ label6,
600
+ required && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
601
+ ] }),
602
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
603
+ Input,
604
+ {
605
+ ref,
606
+ id: inputId,
607
+ invalid: error,
608
+ required,
609
+ fullWidth,
610
+ "aria-describedby": cx(helperId, ariaDescribedBy) || void 0,
611
+ ...rest
612
+ }
613
+ ),
614
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
615
+ ] });
616
+ });
617
+
618
+ // src/components/Modal/Modal.tsx
619
+ var Dialog = __toESM(require("@radix-ui/react-dialog"), 1);
620
+ var import_icons3 = require("@bestow-ui/icons");
621
+
622
+ // src/utils/useReturnFocus.ts
623
+ var import_react8 = require("react");
624
+ function useReturnFocus(hasTrigger, onCloseAutoFocus) {
625
+ const returnTo = (0, import_react8.useRef)(null);
626
+ return {
627
+ onOpenAutoFocus: () => {
628
+ returnTo.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;
629
+ },
630
+ onCloseAutoFocus: (event) => {
631
+ onCloseAutoFocus?.(event);
632
+ if (event.defaultPrevented || hasTrigger) return;
633
+ const target = returnTo.current;
634
+ if (target && target.isConnected && target !== document.body) {
635
+ event.preventDefault();
636
+ target.focus();
637
+ }
638
+ }
639
+ };
640
+ }
641
+
642
+ // src/components/Modal/Modal.css.ts
643
+ var import_createRuntimeFn4 = require("@vanilla-extract/recipes/createRuntimeFn");
644
+ var body = "_1pdsmv0a";
645
+ var closeButton = "_1pdsmv09";
646
+ var content2 = /* @__PURE__ */ (0, import_createRuntimeFn4.createRuntimeFn)({ defaultClassName: "_1pdsmv01", variantClassNames: { size: { sm: "_1pdsmv02", md: "_1pdsmv03", lg: "_1pdsmv04" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
647
+ var description = "_1pdsmv08";
648
+ var footer = "_1pdsmv0b";
649
+ var header2 = "_1pdsmv05";
650
+ var headings = "_1pdsmv06";
651
+ var overlay = "_1pdsmv00";
652
+ var title = "_1pdsmv07";
653
+
654
+ // src/components/Modal/Modal.tsx
655
+ var import_jsx_runtime8 = require("react/jsx-runtime");
656
+ function Modal({
657
+ open,
658
+ defaultOpen,
659
+ onOpenChange,
660
+ trigger: trigger4,
661
+ title: title6,
662
+ description: description6,
663
+ children,
664
+ footer: footer6,
665
+ size,
666
+ hideCloseButton = false,
667
+ closeOnOverlayClick = true,
668
+ className,
669
+ onCloseAutoFocus
670
+ }) {
671
+ const portal2 = usePortalProps();
672
+ const m = useMessages();
673
+ const focus = useReturnFocus(Boolean(trigger4), onCloseAutoFocus);
674
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Dialog.Root, { open, defaultOpen, onOpenChange, children: [
675
+ trigger4 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Dialog.Trigger, { asChild: true, children: trigger4 }),
676
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Dialog.Portal, { children: [
677
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Dialog.Overlay, { className: cx(portal2.className, overlay), style: portal2.style }),
678
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
679
+ Dialog.Content,
680
+ {
681
+ className: cx(portal2.className, content2({ size }), className),
682
+ style: portal2.style,
683
+ onPointerDownOutside: closeOnOverlayClick ? void 0 : (event) => event.preventDefault(),
684
+ onOpenAutoFocus: focus.onOpenAutoFocus,
685
+ onCloseAutoFocus: focus.onCloseAutoFocus,
686
+ ...description6 ? {} : { "aria-describedby": void 0 },
687
+ children: [
688
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: header2, children: [
689
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: headings, children: [
690
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Dialog.Title, { className: title, children: title6 }),
691
+ description6 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Dialog.Description, { className: description, children: description6 })
692
+ ] }),
693
+ !hideCloseButton && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Dialog.Close, { className: closeButton, "aria-label": m.close ?? "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_icons3.XIcon, { size: 16 }) })
694
+ ] }),
695
+ children && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: body, children }),
696
+ footer6 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: footer, children: footer6 })
697
+ ]
698
+ }
699
+ )
700
+ ] })
701
+ ] });
702
+ }
703
+ var ModalClose = Dialog.Close;
704
+
705
+ // src/components/AddressInput/addressProviders.ts
706
+ var KAKAO_POSTCODE_SRC = "https://t1.kakaocdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js";
707
+ var loading = null;
708
+ function loadKakaoPostcode() {
709
+ const w = window;
710
+ const existing = w.kakao?.Postcode ?? w.daum?.Postcode;
711
+ if (existing) return Promise.resolve(existing);
712
+ loading ?? (loading = new Promise((resolve, reject) => {
713
+ const script = document.createElement("script");
714
+ script.src = KAKAO_POSTCODE_SRC;
715
+ script.async = true;
716
+ script.onload = () => {
717
+ const ctor = w.kakao?.Postcode ?? w.daum?.Postcode;
718
+ if (ctor) resolve(ctor);
719
+ else reject(new Error("\uC6B0\uD3B8\uBC88\uD638 \uC11C\uBE44\uC2A4\uB97C \uCC3E\uC9C0 \uBABB\uD588\uC5B4\uC694"));
720
+ };
721
+ script.onerror = () => {
722
+ loading = null;
723
+ reject(new Error("\uC6B0\uD3B8\uBC88\uD638 \uC11C\uBE44\uC2A4\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694"));
724
+ };
725
+ document.head.appendChild(script);
726
+ }));
727
+ return loading;
728
+ }
729
+ function composeExtraAddress(data) {
730
+ if (data.userSelectedType !== "R") return "";
731
+ const parts = [];
732
+ if (data.bname && /[동로가]$/.test(data.bname)) parts.push(data.bname);
733
+ if (data.buildingName && data.apartment === "Y") parts.push(data.buildingName);
734
+ return parts.length ? ` (${parts.join(", ")})` : "";
735
+ }
736
+ var kakaoPostcodeProvider = async (container2, onSelect) => {
737
+ const Postcode = await loadKakaoPostcode();
738
+ new Postcode({
739
+ width: "100%",
740
+ height: "100%",
741
+ oncomplete: (data) => {
742
+ const address = data.userSelectedType === "R" ? data.roadAddress : data.jibunAddress || data.autoJibunAddress || "";
743
+ onSelect({ zonecode: data.zonecode, address, extraAddress: composeExtraAddress(data) });
744
+ }
745
+ }).embed(container2);
746
+ };
747
+
748
+ // src/components/AddressInput/AddressInput.css.ts
749
+ var fieldset = "_16fi7uy0";
750
+ var legend = "_16fi7uy1";
751
+ var row = "_16fi7uy2";
752
+ var searchArea = "_16fi7uy4";
753
+ var searchStatus = "_16fi7uy5";
754
+ var zonecode = "_16fi7uy3";
755
+
756
+ // src/components/AddressInput/AddressInput.tsx
757
+ var import_jsx_runtime9 = require("react/jsx-runtime");
758
+ var EMPTY = { zonecode: "", address: "", extraAddress: "", detail: "" };
759
+ function SearchArea({
760
+ provider,
761
+ onSelect,
762
+ loadErrorText,
763
+ loadingText
764
+ }) {
765
+ const containerRef = (0, import_react9.useRef)(null);
766
+ const [status, setStatus] = (0, import_react9.useState)("loading");
767
+ const onSelectRef = (0, import_react9.useRef)(onSelect);
768
+ (0, import_react9.useEffect)(() => {
769
+ onSelectRef.current = onSelect;
770
+ });
771
+ (0, import_react9.useEffect)(() => {
772
+ const container2 = containerRef.current;
773
+ if (!container2) return;
774
+ let cleanup;
775
+ let cancelled = false;
776
+ Promise.resolve().then(() => provider(container2, (result) => onSelectRef.current(result))).then((fn) => {
777
+ if (cancelled) fn?.();
778
+ else {
779
+ cleanup = fn;
780
+ setStatus("ready");
781
+ }
782
+ }).catch(() => !cancelled && setStatus("error"));
783
+ return () => {
784
+ cancelled = true;
785
+ cleanup?.();
786
+ };
787
+ }, [provider]);
788
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: searchArea, children: [
789
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { ref: containerRef, style: { width: "100%", height: "100%" } }),
790
+ status !== "ready" && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: searchStatus, role: "status", children: status === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Spinner, { label: loadingText }) : loadErrorText })
791
+ ] });
792
+ }
793
+ var AddressInput = /* @__PURE__ */ (0, import_react9.forwardRef)(
794
+ function AddressInput2(props, ref) {
795
+ const {
796
+ value: value4,
797
+ defaultValue,
798
+ onValueChange,
799
+ label: labelProp,
800
+ required,
801
+ helperText: helperText3,
802
+ error,
803
+ disabled,
804
+ provider = kakaoPostcodeProvider,
805
+ searchLabel: searchLabelProp,
806
+ detailPlaceholder: detailPlaceholderProp,
807
+ loadErrorText: loadErrorTextProp,
808
+ name,
809
+ className
810
+ } = props;
811
+ const m = useMessages();
812
+ const label6 = labelProp ?? m.address ?? "\uC8FC\uC18C";
813
+ const searchLabel = searchLabelProp ?? m.addressSearch ?? "\uC8FC\uC18C \uAC80\uC0C9";
814
+ const detailPlaceholder = detailPlaceholderProp ?? m.detailAddressPlaceholder ?? "\uC0C1\uC138 \uC8FC\uC18C (\uB3D9\xB7\uD638\uC218 \uB4F1)";
815
+ const loadErrorText = loadErrorTextProp ?? m.addressLoadError ?? "\uC8FC\uC18C \uAC80\uC0C9\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694. \uC7A0\uC2DC \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.";
816
+ const baseId = (0, import_react9.useId)();
817
+ const helperId = helperText3 ? `${baseId}-helper` : void 0;
818
+ const detailRef = (0, import_react9.useRef)(null);
819
+ const selectedRef = (0, import_react9.useRef)(false);
820
+ const [open, setOpen] = (0, import_react9.useState)(false);
821
+ const isControlled = "value" in props;
822
+ const [innerValue, setInnerValue] = (0, import_react9.useState)(defaultValue ?? EMPTY);
823
+ const current2 = isControlled ? value4 ?? EMPTY : innerValue;
824
+ const update = (next) => {
825
+ if (!isControlled) setInnerValue(next);
826
+ onValueChange?.(next);
827
+ };
828
+ const openSearch = () => {
829
+ if (disabled) return;
830
+ selectedRef.current = false;
831
+ setOpen(true);
832
+ };
833
+ const handleSelect = (result) => {
834
+ selectedRef.current = true;
835
+ update({
836
+ ...current2,
837
+ zonecode: result.zonecode,
838
+ address: result.address,
839
+ extraAddress: result.extraAddress ?? ""
840
+ });
841
+ setOpen(false);
842
+ };
843
+ const fullAddress = `${current2.address}${current2.extraAddress ?? ""}`;
844
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("fieldset", { ref, className: cx(fieldset, className), disabled, "aria-describedby": helperId, children: [
845
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("legend", { className: legend, children: [
846
+ label6,
847
+ required && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
848
+ ] }),
849
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: row, children: [
850
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
851
+ TextField,
852
+ {
853
+ "aria-label": m.postalCode ?? "\uC6B0\uD3B8\uBC88\uD638",
854
+ readOnly: true,
855
+ value: current2.zonecode,
856
+ placeholder: m.postalCode ?? "\uC6B0\uD3B8\uBC88\uD638",
857
+ error: error && !current2.zonecode,
858
+ "aria-required": required || void 0,
859
+ rootClassName: zonecode,
860
+ onClick: openSearch
861
+ }
862
+ ),
863
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Button, { variant: "outline", color: "neutral", onClick: openSearch, disabled, children: searchLabel })
864
+ ] }),
865
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
866
+ TextField,
867
+ {
868
+ "aria-label": m.baseAddress ?? "\uAE30\uBCF8 \uC8FC\uC18C",
869
+ readOnly: true,
870
+ value: fullAddress,
871
+ placeholder: m.baseAddressPlaceholder ?? `${searchLabel}\uC744 \uB20C\uB7EC \uC8FC\uC18C\uB97C \uACE0\uB974\uC138\uC694`,
872
+ error: error && !current2.address,
873
+ "aria-required": required || void 0,
874
+ fullWidth: true,
875
+ onClick: openSearch
876
+ }
877
+ ),
878
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
879
+ TextField,
880
+ {
881
+ ref: detailRef,
882
+ "aria-label": m.detailAddress ?? "\uC0C1\uC138 \uC8FC\uC18C",
883
+ value: current2.detail,
884
+ placeholder: detailPlaceholder,
885
+ onChange: (event) => update({ ...current2, detail: event.target.value }),
886
+ autoComplete: "address-line2",
887
+ fullWidth: true
888
+ }
889
+ ),
890
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 }),
891
+ name && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
892
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("input", { type: "hidden", name: `${name}[zonecode]`, value: current2.zonecode }),
893
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("input", { type: "hidden", name: `${name}[address]`, value: fullAddress }),
894
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("input", { type: "hidden", name: `${name}[detail]`, value: current2.detail })
895
+ ] }),
896
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
897
+ Modal,
898
+ {
899
+ open,
900
+ onOpenChange: setOpen,
901
+ title: searchLabel,
902
+ description: m.addressSearchDescription ?? "\uB3C4\uB85C\uBA85, \uAC74\uBB3C\uBA85, \uC9C0\uBC88\uC73C\uB85C \uAC80\uC0C9\uD560 \uC218 \uC788\uC5B4\uC694.",
903
+ onCloseAutoFocus: (event) => {
904
+ if (selectedRef.current) {
905
+ event.preventDefault();
906
+ detailRef.current?.focus();
907
+ }
908
+ },
909
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
910
+ SearchArea,
911
+ {
912
+ provider,
913
+ onSelect: handleSelect,
914
+ loadErrorText,
915
+ loadingText: m.addressLoading ?? "\uC8FC\uC18C \uAC80\uC0C9\uC744 \uBD88\uB7EC\uC624\uB294 \uC911"
916
+ }
917
+ )
918
+ }
919
+ )
920
+ ] });
921
+ }
922
+ );
923
+
924
+ // src/components/AgreementGroup/AgreementGroup.tsx
925
+ var import_react11 = require("react");
926
+ var import_icons4 = require("@bestow-ui/icons");
927
+
928
+ // src/components/Checkbox/Checkbox.tsx
929
+ var import_react10 = require("react");
930
+
931
+ // src/utils/mergeRefs.ts
932
+ function mergeRefs(...refs) {
933
+ return (value4) => {
934
+ for (const ref of refs) {
935
+ if (typeof ref === "function") ref(value4);
936
+ else if (ref) ref.current = value4;
937
+ }
938
+ };
939
+ }
940
+
941
+ // src/components/Checkbox/Checkbox.css.ts
942
+ var import_createRuntimeFn5 = require("@vanilla-extract/recipes/createRuntimeFn");
943
+ var checkIcon = "_1y7mzsn8 _1y7mzsn7";
944
+ var control = /* @__PURE__ */ (0, import_createRuntimeFn5.createRuntimeFn)({ defaultClassName: "_1y7mzsn3", variantClassNames: { size: { sm: "_1y7mzsn4", md: "_1y7mzsn5" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
945
+ var indeterminateIcon = "_1y7mzsn9 _1y7mzsn7";
946
+ var input2 = "_1y7mzsn6";
947
+ var root4 = /* @__PURE__ */ (0, import_createRuntimeFn5.createRuntimeFn)({ defaultClassName: "_1y7mzsn0", variantClassNames: { size: { sm: "_1y7mzsn1", md: "_1y7mzsn2" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
948
+
949
+ // src/components/Checkbox/Checkbox.tsx
950
+ var import_jsx_runtime10 = require("react/jsx-runtime");
951
+ var Checkbox = /* @__PURE__ */ (0, import_react10.forwardRef)(function Checkbox2({ label: label6, size, indeterminate = false, invalid, disabled, onChange, onCheckedChange, className, ...rest }, ref) {
952
+ const innerRef = (0, import_react10.useRef)(null);
953
+ (0, import_react10.useEffect)(() => {
954
+ if (innerRef.current) innerRef.current.indeterminate = indeterminate;
955
+ }, [indeterminate]);
956
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("label", { className: cx(root4({ size }), className), "data-disabled": disabled || void 0, children: [
957
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: control({ size }), children: [
958
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
959
+ "input",
960
+ {
961
+ ref: mergeRefs(innerRef, ref),
962
+ type: "checkbox",
963
+ className: input2,
964
+ disabled,
965
+ "aria-invalid": invalid || void 0,
966
+ onChange: (event) => {
967
+ onChange?.(event);
968
+ onCheckedChange?.(event.target.checked);
969
+ },
970
+ ...rest
971
+ }
972
+ ),
973
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("svg", { className: checkIcon, viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
974
+ "path",
975
+ {
976
+ d: "M5 10.5l3.2 3L15 7",
977
+ stroke: "currentColor",
978
+ strokeWidth: "2",
979
+ strokeLinecap: "round",
980
+ strokeLinejoin: "round"
981
+ }
982
+ ) }),
983
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("svg", { className: indeterminateIcon, viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M6 10h8", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) })
984
+ ] }),
985
+ label6
986
+ ] });
987
+ });
988
+
989
+ // src/components/AgreementGroup/AgreementGroup.css.ts
990
+ var all = "j3uxdc3";
991
+ var box = "j3uxdc2";
992
+ var chevron2 = "j3uxdc9";
993
+ var content3 = "j3uxdca";
994
+ var fieldset2 = "j3uxdc0";
995
+ var item2 = "j3uxdc5";
996
+ var legend2 = "j3uxdc1";
997
+ var list = "j3uxdc4";
998
+ var row2 = "j3uxdc6";
999
+ var tag = "j3uxdc7";
1000
+ var toggle = "j3uxdc8";
1001
+
1002
+ // src/components/AgreementGroup/AgreementGroup.tsx
1003
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1004
+ function hasAllRequiredAgreements(items2, value4) {
1005
+ return items2.every((item7) => !item7.required || value4.includes(item7.value));
1006
+ }
1007
+ var AgreementGroup = /* @__PURE__ */ (0, import_react11.forwardRef)(
1008
+ function AgreementGroup2(props, ref) {
1009
+ const {
1010
+ items: items2,
1011
+ value: value4,
1012
+ defaultValue,
1013
+ onValueChange,
1014
+ label: label6,
1015
+ allLabel: allLabelProp,
1016
+ helperText: helperText3,
1017
+ error,
1018
+ disabled,
1019
+ requiredText: requiredTextProp,
1020
+ optionalText: optionalTextProp,
1021
+ showText: showTextProp,
1022
+ hideText: hideTextProp,
1023
+ name,
1024
+ className
1025
+ } = props;
1026
+ const m = useMessages();
1027
+ const allLabel = allLabelProp ?? m.agreeAll ?? "\uC804\uCCB4 \uB3D9\uC758";
1028
+ const requiredText = requiredTextProp ?? m.required ?? "\uD544\uC218";
1029
+ const optionalText = optionalTextProp ?? m.optional ?? "\uC120\uD0DD";
1030
+ const showText = showTextProp ?? m.show ?? "\uBCF4\uAE30";
1031
+ const hideText = hideTextProp ?? m.hide ?? "\uC811\uAE30";
1032
+ const baseId = (0, import_react11.useId)();
1033
+ const helperId = helperText3 ? `${baseId}-helper` : void 0;
1034
+ const isControlled = "value" in props;
1035
+ const [innerValue, setInnerValue] = (0, import_react11.useState)(defaultValue ?? []);
1036
+ const agreed = isControlled ? value4 ?? [] : innerValue;
1037
+ const [expanded, setExpanded] = (0, import_react11.useState)([]);
1038
+ const update = (next) => {
1039
+ if (!isControlled) setInnerValue(next);
1040
+ onValueChange?.(next);
1041
+ };
1042
+ const allValues = items2.map((item7) => item7.value);
1043
+ const agreedCount = allValues.filter((v) => agreed.includes(v)).length;
1044
+ const allChecked = items2.length > 0 && agreedCount === items2.length;
1045
+ const toggleItem = (itemValue, checked) => update(checked ? [...agreed.filter((v) => v !== itemValue), itemValue] : agreed.filter((v) => v !== itemValue));
1046
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1047
+ "fieldset",
1048
+ {
1049
+ ref,
1050
+ className: cx(fieldset2, className),
1051
+ disabled,
1052
+ "aria-describedby": helperId,
1053
+ "data-invalid": error || void 0,
1054
+ children: [
1055
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("legend", { className: legend2, children: label6 }),
1056
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: box, children: [
1057
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: all, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1058
+ Checkbox,
1059
+ {
1060
+ label: allLabel,
1061
+ checked: allChecked,
1062
+ indeterminate: agreedCount > 0 && !allChecked,
1063
+ onChange: (event) => update(event.target.checked ? allValues : [])
1064
+ }
1065
+ ) }),
1066
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("ul", { className: list, children: items2.map((item7) => {
1067
+ const labelId = `${baseId}-${item7.value}-label`;
1068
+ const toggleTextId = `${baseId}-${item7.value}-toggle`;
1069
+ const contentId = `${baseId}-${item7.value}-content`;
1070
+ const isOpen = expanded.includes(item7.value);
1071
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("li", { className: item2, children: [
1072
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: row2, children: [
1073
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1074
+ Checkbox,
1075
+ {
1076
+ size: "sm",
1077
+ checked: agreed.includes(item7.value),
1078
+ invalid: error && item7.required && !agreed.includes(item7.value),
1079
+ onChange: (event) => toggleItem(item7.value, event.target.checked),
1080
+ label: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { id: labelId, children: [
1081
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: tag, "data-required": item7.required || void 0, children: item7.required ? requiredText : optionalText }),
1082
+ " ",
1083
+ item7.label
1084
+ ] })
1085
+ }
1086
+ ),
1087
+ item7.content && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1088
+ "button",
1089
+ {
1090
+ type: "button",
1091
+ className: toggle,
1092
+ "aria-expanded": isOpen,
1093
+ "aria-controls": contentId,
1094
+ "aria-labelledby": `${labelId} ${toggleTextId}`,
1095
+ onClick: () => setExpanded((prev) => isOpen ? prev.filter((v) => v !== item7.value) : [...prev, item7.value]),
1096
+ children: [
1097
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { id: toggleTextId, children: isOpen ? hideText : showText }),
1098
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons4.ChevronDownIcon, { size: 14, className: chevron2 })
1099
+ ]
1100
+ }
1101
+ )
1102
+ ] }),
1103
+ item7.content && isOpen && // 내용이 길면 스크롤된다 — 키보드로도 스크롤할 수 있게 포커스를 받는 이름 있는 영역으로 둔다
1104
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
1105
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { id: contentId, role: "region", "aria-labelledby": labelId, tabIndex: 0, className: content3, children: item7.content })
1106
+ ] }, item7.value);
1107
+ }) })
1108
+ ] }),
1109
+ name && agreed.map((v) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("input", { type: "hidden", name, value: v }, v)),
1110
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
1111
+ ]
1112
+ }
1113
+ );
1114
+ }
1115
+ );
1116
+
1117
+ // src/components/Alert/Alert.tsx
1118
+ var import_react12 = require("react");
1119
+ var import_icons5 = require("@bestow-ui/icons");
1120
+
1121
+ // src/components/Alert/Alert.css.ts
1122
+ var import_createRuntimeFn6 = require("@vanilla-extract/recipes/createRuntimeFn");
359
1123
  var action = "bsmpc0j";
360
- var alert = /* @__PURE__ */ (0, import_createRuntimeFn.createRuntimeFn)({ defaultClassName: "bsmpc06", variantClassNames: { variant: { soft: "bsmpc07", outline: "bsmpc08", solid: "bsmpc09" }, color: { primary: "bsmpc0a", neutral: "bsmpc0b", danger: "bsmpc0c", success: "bsmpc0d", warning: "bsmpc0e" } }, defaultVariants: { variant: "soft", color: "primary" }, compoundVariants: [] });
361
- var closeButton = "bsmpc0k";
362
- var content2 = "bsmpc0g";
363
- var description = "bsmpc0i";
364
- var icon = "bsmpc0f";
365
- var title = "bsmpc0h";
1124
+ var alert = /* @__PURE__ */ (0, import_createRuntimeFn6.createRuntimeFn)({ defaultClassName: "bsmpc06", variantClassNames: { variant: { soft: "bsmpc07", outline: "bsmpc08", solid: "bsmpc09" }, color: { primary: "bsmpc0a", neutral: "bsmpc0b", danger: "bsmpc0c", success: "bsmpc0d", warning: "bsmpc0e" } }, defaultVariants: { variant: "soft", color: "primary" }, compoundVariants: [] });
1125
+ var closeButton2 = "bsmpc0k";
1126
+ var content4 = "bsmpc0g";
1127
+ var description2 = "bsmpc0i";
1128
+ var icon2 = "bsmpc0f";
1129
+ var title2 = "bsmpc0h";
366
1130
 
367
1131
  // src/components/Alert/Alert.tsx
368
- var import_jsx_runtime3 = require("react/jsx-runtime");
1132
+ var import_jsx_runtime12 = require("react/jsx-runtime");
369
1133
  var defaultIcons = {
370
- primary: import_icons2.InfoIcon,
371
- neutral: import_icons2.InfoIcon,
372
- success: import_icons2.CircleCheckIcon,
373
- warning: import_icons2.TriangleAlertIcon,
374
- danger: import_icons2.CircleAlertIcon
1134
+ primary: import_icons5.InfoIcon,
1135
+ neutral: import_icons5.InfoIcon,
1136
+ success: import_icons5.CircleCheckIcon,
1137
+ warning: import_icons5.TriangleAlertIcon,
1138
+ danger: import_icons5.CircleAlertIcon
375
1139
  };
376
- var Alert = /* @__PURE__ */ (0, import_react3.forwardRef)(function Alert2({ variant, color = "primary", title: title6, icon: icon6, action: action3, onClose, closeLabel = "\uB2EB\uAE30", className, children, ...rest }, ref) {
1140
+ var Alert = /* @__PURE__ */ (0, import_react12.forwardRef)(function Alert2({
1141
+ variant,
1142
+ color = "primary",
1143
+ title: title6,
1144
+ icon: icon6,
1145
+ action: action3,
1146
+ onClose,
1147
+ closeLabel: closeLabelProp,
1148
+ className,
1149
+ children,
1150
+ ...rest
1151
+ }, ref) {
1152
+ const m = useMessages();
1153
+ const closeLabel = closeLabelProp ?? m.close ?? "\uB2EB\uAE30";
377
1154
  const DefaultIcon = defaultIcons[color];
378
- const iconNode = icon6 === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DefaultIcon, { size: 18 }) : icon6;
379
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { ref, className: cx(alert({ variant, color }), className), ...rest, children: [
380
- iconNode !== false && iconNode !== null && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: icon, "aria-hidden": true, children: iconNode }),
381
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: content2, children: [
382
- title6 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: title, children: title6 }),
383
- children && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: description, children })
1155
+ const iconNode = icon6 === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DefaultIcon, { size: 18 }) : icon6;
1156
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { ref, className: cx(alert({ variant, color }), className), ...rest, children: [
1157
+ iconNode !== false && iconNode !== null && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: icon2, "aria-hidden": true, children: iconNode }),
1158
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: content4, children: [
1159
+ title6 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: title2, children: title6 }),
1160
+ children && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: description2, children })
384
1161
  ] }),
385
- action3 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: action, children: action3 }),
386
- onClose && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: closeButton, "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons2.XIcon, { size: 16 }) })
1162
+ action3 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: action, children: action3 }),
1163
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("button", { type: "button", className: closeButton2, "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_icons5.XIcon, { size: 16 }) })
387
1164
  ] });
388
1165
  });
389
1166
 
1167
+ // src/components/AmountInput/AmountInput.tsx
1168
+ var import_react14 = require("react");
1169
+
1170
+ // src/utils/koreanFormat.ts
1171
+ var onlyDigits = (input5) => input5.replace(/\D/g, "");
1172
+ function phoneNumberMaxDigits(digits) {
1173
+ if (digits.startsWith("02")) return 10;
1174
+ if (/^1[568]/.test(digits)) return 8;
1175
+ return 11;
1176
+ }
1177
+ function formatPhoneNumber(input5) {
1178
+ const d = onlyDigits(input5).slice(0, phoneNumberMaxDigits(onlyDigits(input5)));
1179
+ if (d.startsWith("02")) {
1180
+ if (d.length <= 2) return d;
1181
+ if (d.length <= 5) return `${d.slice(0, 2)}-${d.slice(2)}`;
1182
+ if (d.length <= 9) return `${d.slice(0, 2)}-${d.slice(2, 5)}-${d.slice(5)}`;
1183
+ return `${d.slice(0, 2)}-${d.slice(2, 6)}-${d.slice(6)}`;
1184
+ }
1185
+ if (/^1[568]/.test(d)) {
1186
+ return d.length <= 4 ? d : `${d.slice(0, 4)}-${d.slice(4)}`;
1187
+ }
1188
+ if (d.length <= 3) return d;
1189
+ if (d.length <= 6) return `${d.slice(0, 3)}-${d.slice(3)}`;
1190
+ if (d.length <= 10) return `${d.slice(0, 3)}-${d.slice(3, 6)}-${d.slice(6)}`;
1191
+ return `${d.slice(0, 3)}-${d.slice(3, 7)}-${d.slice(7)}`;
1192
+ }
1193
+ function formatBusinessNumber(input5) {
1194
+ const d = onlyDigits(input5).slice(0, 10);
1195
+ if (d.length <= 3) return d;
1196
+ if (d.length <= 5) return `${d.slice(0, 3)}-${d.slice(3)}`;
1197
+ return `${d.slice(0, 3)}-${d.slice(3, 5)}-${d.slice(5)}`;
1198
+ }
1199
+ function isValidBusinessNumber(input5) {
1200
+ const d = onlyDigits(input5);
1201
+ if (d.length !== 10) return false;
1202
+ const weights = [1, 3, 7, 1, 3, 7, 1, 3, 5];
1203
+ const digits = [...d].map(Number);
1204
+ let sum = weights.reduce((acc, w, i) => acc + w * digits[i], 0);
1205
+ sum += Math.floor(digits[8] * 5 / 10);
1206
+ return (10 - sum % 10) % 10 === digits[9];
1207
+ }
1208
+ function formatKoreanAmount(amount, unit = "\uC6D0") {
1209
+ const n = Math.floor(Math.abs(amount));
1210
+ if (n === 0) return `0${unit}`;
1211
+ const units = [
1212
+ { value: 1e12, label: "\uC870" },
1213
+ { value: 1e8, label: "\uC5B5" },
1214
+ { value: 1e4, label: "\uB9CC" },
1215
+ { value: 1, label: "" }
1216
+ ];
1217
+ let rest = n;
1218
+ const parts = [];
1219
+ for (const u of units) {
1220
+ const q = Math.floor(rest / u.value);
1221
+ rest %= u.value;
1222
+ if (q > 0) parts.push(`${q.toLocaleString("ko-KR")}${u.label}`);
1223
+ }
1224
+ return `${amount < 0 ? "-" : ""}${parts.join(" ")}${unit}`;
1225
+ }
1226
+
1227
+ // src/utils/useFormattedInput.ts
1228
+ var import_react13 = require("react");
1229
+ function caretAfter(display, count2, isMeaningful) {
1230
+ if (count2 <= 0) return 0;
1231
+ let seen = 0;
1232
+ for (let i = 0; i < display.length; i++) {
1233
+ if (isMeaningful(display[i])) seen++;
1234
+ if (seen === count2) return i + 1;
1235
+ }
1236
+ return display.length;
1237
+ }
1238
+ function useFormattedInput({
1239
+ isControlled,
1240
+ value: value4,
1241
+ defaultValue,
1242
+ onValueChange,
1243
+ sanitize: sanitize4,
1244
+ format: format2,
1245
+ isMeaningful,
1246
+ inputRef
1247
+ }) {
1248
+ const [innerValue, setInnerValue] = (0, import_react13.useState)(() => sanitize4(defaultValue ?? ""));
1249
+ const raw = isControlled ? sanitize4(value4 ?? "") : innerValue;
1250
+ const display = format2(raw);
1251
+ const pendingCaret = (0, import_react13.useRef)(null);
1252
+ (0, import_react13.useLayoutEffect)(() => {
1253
+ const input5 = inputRef.current;
1254
+ if (pendingCaret.current === null || !input5 || document.activeElement !== input5) return;
1255
+ const position = caretAfter(input5.value, pendingCaret.current, isMeaningful);
1256
+ input5.setSelectionRange(position, position);
1257
+ pendingCaret.current = null;
1258
+ });
1259
+ const commit = (next, caretCount) => {
1260
+ pendingCaret.current = caretCount;
1261
+ if (!isControlled) setInnerValue(next);
1262
+ if (next !== raw) onValueChange?.(next);
1263
+ };
1264
+ const onChange = (event) => {
1265
+ const { value: typed, selectionStart } = event.target;
1266
+ const next = sanitize4(typed);
1267
+ const before = sanitize4(typed.slice(0, selectionStart ?? typed.length));
1268
+ commit(next, Math.min(before.length, next.length));
1269
+ };
1270
+ const onKeyDown = (event) => {
1271
+ const input5 = event.currentTarget;
1272
+ const { selectionStart: start, selectionEnd: end } = input5;
1273
+ if (start === null || start !== end) return;
1274
+ const countBefore = (text2) => [...text2].filter(isMeaningful).length;
1275
+ if (event.key === "Backspace" && start > 0 && !isMeaningful(input5.value[start - 1])) {
1276
+ const index = countBefore(input5.value.slice(0, start)) - 1;
1277
+ if (index < 0) return;
1278
+ event.preventDefault();
1279
+ commit(raw.slice(0, index) + raw.slice(index + 1), index);
1280
+ } else if (event.key === "Delete" && start < input5.value.length && !isMeaningful(input5.value[start])) {
1281
+ const index = countBefore(input5.value.slice(0, start));
1282
+ if (index >= raw.length) return;
1283
+ event.preventDefault();
1284
+ commit(raw.slice(0, index) + raw.slice(index + 1), index);
1285
+ }
1286
+ };
1287
+ const setRaw = (next) => setInnerValue(sanitize4(next));
1288
+ return { raw, display, onChange, onKeyDown, setRaw };
1289
+ }
1290
+
1291
+ // src/components/AmountInput/AmountInput.css.ts
1292
+ var input3 = "_70qkav0";
1293
+
1294
+ // src/components/AmountInput/AmountInput.tsx
1295
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1296
+ var MAX_DIGITS = 15;
1297
+ var isDigit = (char) => /\d/.test(char);
1298
+ var AmountInput = /* @__PURE__ */ (0, import_react14.forwardRef)(
1299
+ function AmountInput2(props, ref) {
1300
+ const {
1301
+ value: value4,
1302
+ defaultValue,
1303
+ onValueChange,
1304
+ max,
1305
+ unit: unitProp,
1306
+ showKoreanAmount = true,
1307
+ label: labelProp,
1308
+ placeholder = "0",
1309
+ helperText: helperText3,
1310
+ onKeyDown,
1311
+ className,
1312
+ ...rest
1313
+ } = props;
1314
+ const inputRef = (0, import_react14.useRef)(null);
1315
+ const m = useMessages();
1316
+ const unit = unitProp ?? m.currencyUnit ?? "\uC6D0";
1317
+ const label6 = labelProp ?? m.amount ?? "\uAE08\uC561";
1318
+ const sanitize4 = (input5) => {
1319
+ let digits = input5.replace(/\D/g, "").replace(/^0+(?=\d)/, "").slice(0, MAX_DIGITS);
1320
+ if (max !== void 0 && digits && Number(digits) > max) digits = String(Math.floor(max));
1321
+ return digits;
1322
+ };
1323
+ const toRaw = (amount) => amount === null || amount === void 0 ? "" : String(Math.floor(Math.abs(amount)));
1324
+ const field3 = useFormattedInput({
1325
+ isControlled: "value" in props,
1326
+ value: toRaw(value4),
1327
+ defaultValue: toRaw(defaultValue),
1328
+ onValueChange: (digits) => onValueChange?.(digits === "" ? null : Number(digits)),
1329
+ sanitize: sanitize4,
1330
+ format: (digits) => digits === "" ? "" : Number(digits).toLocaleString("ko-KR"),
1331
+ isMeaningful: isDigit,
1332
+ inputRef
1333
+ });
1334
+ const reading = showKoreanAmount && field3.raw !== "" ? formatKoreanAmount(Number(field3.raw), unit) : null;
1335
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1336
+ TextField,
1337
+ {
1338
+ ref: mergeRefs(ref, inputRef),
1339
+ label: label6,
1340
+ placeholder,
1341
+ inputMode: "numeric",
1342
+ value: field3.display,
1343
+ onChange: field3.onChange,
1344
+ onKeyDown: (event) => {
1345
+ field3.onKeyDown(event);
1346
+ onKeyDown?.(event);
1347
+ },
1348
+ endAdornment: unit,
1349
+ helperText: reading && helperText3 ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1350
+ reading,
1351
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("br", {}),
1352
+ helperText3
1353
+ ] }) : reading ?? helperText3,
1354
+ className: cx(input3, className),
1355
+ ...rest
1356
+ }
1357
+ );
1358
+ }
1359
+ );
1360
+
390
1361
  // src/components/Avatar/Avatar.tsx
391
1362
  var RadixAvatar = __toESM(require("@radix-ui/react-avatar"), 1);
392
- var import_icons3 = require("@bestow-ui/icons");
393
- var import_react4 = require("react");
1363
+ var import_icons6 = require("@bestow-ui/icons");
1364
+ var import_react15 = require("react");
394
1365
 
395
1366
  // src/components/Avatar/Avatar.css.ts
396
- var import_createRuntimeFn2 = require("@vanilla-extract/recipes/createRuntimeFn");
1367
+ var import_createRuntimeFn7 = require("@vanilla-extract/recipes/createRuntimeFn");
397
1368
  var fallback = "_1fd2kp27";
398
1369
  var image = "_1fd2kp26";
399
- var root3 = /* @__PURE__ */ (0, import_createRuntimeFn2.createRuntimeFn)({ defaultClassName: "_1fd2kp20", variantClassNames: { size: { sm: "_1fd2kp21", md: "_1fd2kp22", lg: "_1fd2kp23" }, shape: { circle: "_1fd2kp24", square: "_1fd2kp25" } }, defaultVariants: { size: "md", shape: "circle" }, compoundVariants: [] });
1370
+ var root5 = /* @__PURE__ */ (0, import_createRuntimeFn7.createRuntimeFn)({ defaultClassName: "_1fd2kp20", variantClassNames: { size: { sm: "_1fd2kp21", md: "_1fd2kp22", lg: "_1fd2kp23" }, shape: { circle: "_1fd2kp24", square: "_1fd2kp25" } }, defaultVariants: { size: "md", shape: "circle" }, compoundVariants: [] });
400
1371
 
401
1372
  // src/components/Avatar/Avatar.tsx
402
- var import_jsx_runtime4 = require("react/jsx-runtime");
1373
+ var import_jsx_runtime14 = require("react/jsx-runtime");
403
1374
  function getInitials(name) {
404
1375
  const [a = "", b = ""] = name.trim().split(/\s+/);
405
1376
  const first = (word) => Array.from(word)[0] ?? "";
406
1377
  return (first(a) + first(b)).toUpperCase();
407
1378
  }
408
- var Avatar = /* @__PURE__ */ (0, import_react4.forwardRef)(function Avatar2({ src, alt, name, fallback: fallback2, size, shape, className, ...rest }, ref) {
1379
+ var Avatar = /* @__PURE__ */ (0, import_react15.forwardRef)(function Avatar2({ src, alt, name, fallback: fallback2, size, shape, className, ...rest }, ref) {
409
1380
  const label6 = alt ?? name;
410
1381
  const a11y = label6 ? { role: "img", "aria-label": label6 } : { "aria-hidden": true };
411
1382
  const initials = name ? getInitials(name) : "";
412
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(RadixAvatar.Root, { ref, className: cx(root3({ size, shape }), className), ...a11y, ...rest, children: [
413
- src && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RadixAvatar.Image, { src, alt: "", className: image }),
414
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RadixAvatar.Fallback, { className: fallback, children: fallback2 ?? (initials || /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons3.UserIcon, { size: "60%" })) })
1383
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(RadixAvatar.Root, { ref, className: cx(root5({ size, shape }), className), ...a11y, ...rest, children: [
1384
+ src && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(RadixAvatar.Image, { src, alt: "", className: image }),
1385
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(RadixAvatar.Fallback, { className: fallback, children: fallback2 ?? (initials || /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_icons6.UserIcon, { size: "60%" })) })
415
1386
  ] });
416
1387
  });
417
1388
 
418
1389
  // src/components/Badge/Badge.tsx
419
- var import_react5 = require("react");
1390
+ var import_react16 = require("react");
420
1391
 
421
1392
  // src/components/Badge/Badge.css.ts
422
- var import_createRuntimeFn3 = require("@vanilla-extract/recipes/createRuntimeFn");
423
- var badge = /* @__PURE__ */ (0, import_createRuntimeFn3.createRuntimeFn)({ defaultClassName: "_1295cfn4", variantClassNames: { variant: { solid: "_1295cfn5", soft: "_1295cfn6", outline: "_1295cfn7" }, color: { primary: "_1295cfn8", neutral: "_1295cfn9", danger: "_1295cfna", success: "_1295cfnb", warning: "_1295cfnc" }, size: { sm: "_1295cfnd", md: "_1295cfne", lg: "_1295cfnf" } }, defaultVariants: { variant: "soft", color: "neutral", size: "md" }, compoundVariants: [] });
424
- var icon2 = "_1295cfng";
1393
+ var import_createRuntimeFn8 = require("@vanilla-extract/recipes/createRuntimeFn");
1394
+ var badge = /* @__PURE__ */ (0, import_createRuntimeFn8.createRuntimeFn)({ defaultClassName: "_1295cfn4", variantClassNames: { variant: { solid: "_1295cfn5", soft: "_1295cfn6", outline: "_1295cfn7" }, color: { primary: "_1295cfn8", neutral: "_1295cfn9", danger: "_1295cfna", success: "_1295cfnb", warning: "_1295cfnc" }, size: { sm: "_1295cfnd", md: "_1295cfne", lg: "_1295cfnf" } }, defaultVariants: { variant: "soft", color: "neutral", size: "md" }, compoundVariants: [] });
1395
+ var icon3 = "_1295cfng";
425
1396
 
426
1397
  // src/components/Badge/Badge.tsx
427
- var import_jsx_runtime5 = require("react/jsx-runtime");
428
- var Badge = /* @__PURE__ */ (0, import_react5.forwardRef)(function Badge2({ variant, color, size, startIcon, className, children, ...rest }, ref) {
429
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { ref, className: cx(badge({ variant, color, size }), className), ...rest, children: [
430
- startIcon && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: icon2, children: startIcon }),
1398
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1399
+ var Badge = /* @__PURE__ */ (0, import_react16.forwardRef)(function Badge2({ variant, color, size, startIcon, className, children, ...rest }, ref) {
1400
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("span", { ref, className: cx(badge({ variant, color, size }), className), ...rest, children: [
1401
+ startIcon && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: icon3, children: startIcon }),
431
1402
  children
432
1403
  ] });
433
1404
  });
434
1405
 
435
1406
  // src/components/Breadcrumb/Breadcrumb.tsx
436
- var import_react7 = require("react");
437
- var import_icons5 = require("@bestow-ui/icons");
1407
+ var import_react18 = require("react");
1408
+ var import_icons8 = require("@bestow-ui/icons");
438
1409
 
439
1410
  // src/components/Link/Link.tsx
440
1411
  var import_react_slot = require("@radix-ui/react-slot");
441
- var import_react6 = require("react");
442
- var import_icons4 = require("@bestow-ui/icons");
443
-
444
- // src/styles/visuallyHidden.css.ts
445
- var visuallyHidden = "_1kdtbw10";
1412
+ var import_react17 = require("react");
1413
+ var import_icons7 = require("@bestow-ui/icons");
446
1414
 
447
1415
  // src/components/Link/Link.css.ts
448
- var import_createRuntimeFn4 = require("@vanilla-extract/recipes/createRuntimeFn");
1416
+ var import_createRuntimeFn9 = require("@vanilla-extract/recipes/createRuntimeFn");
449
1417
  var externalIcon = "_1t4hlp6";
450
- var link = /* @__PURE__ */ (0, import_createRuntimeFn4.createRuntimeFn)({ defaultClassName: "_1t4hlp0", variantClassNames: { color: { primary: "_1t4hlp1", neutral: "_1t4hlp2", inherit: "_1t4hlp3" }, underline: { always: "_1t4hlp4", hover: "_1t4hlp5" } }, defaultVariants: { color: "primary", underline: "always" }, compoundVariants: [] });
1418
+ var link = /* @__PURE__ */ (0, import_createRuntimeFn9.createRuntimeFn)({ defaultClassName: "_1t4hlp0", variantClassNames: { color: { primary: "_1t4hlp1", neutral: "_1t4hlp2", inherit: "_1t4hlp3" }, underline: { always: "_1t4hlp4", hover: "_1t4hlp5" } }, defaultVariants: { color: "primary", underline: "always" }, compoundVariants: [] });
451
1419
 
452
1420
  // src/components/Link/Link.tsx
453
- var import_jsx_runtime6 = (
1421
+ var import_jsx_runtime16 = (
454
1422
  // Slot 의 props 타입은 HTMLElement 기준이라 <a> 전용 속성(target·rel 등)은 그대로 넘기도록 단언한다
455
1423
  require("react/jsx-runtime")
456
1424
  );
457
- var Link = /* @__PURE__ */ (0, import_react6.forwardRef)(function Link2({
1425
+ var Link = /* @__PURE__ */ (0, import_react17.forwardRef)(function Link2({
458
1426
  as: Component = "a",
459
1427
  asChild,
460
1428
  color,
461
1429
  underline,
462
1430
  external,
463
- externalLabel = "(\uC0C8 \uCC3D)",
1431
+ externalLabel: externalLabelProp,
464
1432
  target,
465
1433
  rel,
466
1434
  className,
467
1435
  children,
468
1436
  ...rest
469
1437
  }, ref) {
1438
+ const m = useMessages();
1439
+ const externalLabel = externalLabelProp ?? m.newWindow ?? "(\uC0C8 \uCC3D)";
470
1440
  const linkClassName = cx(link({ color, underline }), className);
471
1441
  if (asChild) {
472
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_slot.Slot, { ref, className: linkClassName, ...{ target, rel, ...rest }, children });
1442
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_slot.Slot, { ref, className: linkClassName, ...{ target, rel, ...rest }, children });
473
1443
  }
474
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1444
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
475
1445
  Component,
476
1446
  {
477
1447
  ref,
@@ -481,10 +1451,10 @@ var Link = /* @__PURE__ */ (0, import_react6.forwardRef)(function Link2({
481
1451
  ...rest,
482
1452
  children: [
483
1453
  children,
484
- external && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
1454
+ external && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
485
1455
  " ",
486
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons4.ExternalLinkIcon, { className: externalIcon }),
487
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: visuallyHidden, children: externalLabel })
1456
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_icons7.ExternalLinkIcon, { className: externalIcon }),
1457
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: visuallyHidden, children: externalLabel })
488
1458
  ] })
489
1459
  ]
490
1460
  }
@@ -493,216 +1463,371 @@ var Link = /* @__PURE__ */ (0, import_react6.forwardRef)(function Link2({
493
1463
 
494
1464
  // src/components/Breadcrumb/Breadcrumb.css.ts
495
1465
  var current = "_18t8ztt3";
496
- var item2 = "_18t8ztt1";
1466
+ var item3 = "_18t8ztt1";
497
1467
  var link2 = "_18t8ztt2";
498
- var list = "_18t8ztt0";
1468
+ var list2 = "_18t8ztt0";
499
1469
  var separator = "_18t8ztt4";
500
1470
 
501
1471
  // src/components/Breadcrumb/Breadcrumb.tsx
502
- var import_jsx_runtime7 = require("react/jsx-runtime");
503
- var Breadcrumb = /* @__PURE__ */ (0, import_react7.forwardRef)(function Breadcrumb2({ items: items2, linkAs, separator: separator3, "aria-label": ariaLabel = "\uC774\uB3D9 \uACBD\uB85C", className, ...rest }, ref) {
504
- const sep = separator3 ?? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons5.ChevronRightIcon, { size: 14 });
505
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("nav", { ref, "aria-label": ariaLabel, className, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("ol", { className: list, children: items2.map((item6, index) => {
1472
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1473
+ var Breadcrumb = /* @__PURE__ */ (0, import_react18.forwardRef)(function Breadcrumb2({ items: items2, linkAs, separator: separator3, "aria-label": ariaLabelProp, className, ...rest }, ref) {
1474
+ const m = useMessages();
1475
+ const ariaLabel = ariaLabelProp ?? m.breadcrumb ?? "\uC774\uB3D9 \uACBD\uB85C";
1476
+ const sep = separator3 ?? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_icons8.ChevronRightIcon, { size: 14 });
1477
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("nav", { ref, "aria-label": ariaLabel, className, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("ol", { className: list2, children: items2.map((item7, index) => {
506
1478
  const isCurrent = index === items2.length - 1;
507
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("li", { className: item2, children: [
508
- index > 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: separator, "aria-hidden": true, children: sep }),
509
- isCurrent || item6.href === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: isCurrent ? current : void 0, "aria-current": isCurrent ? "page" : void 0, children: item6.label }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Link, { as: linkAs, href: item6.href, color: "neutral", underline: "hover", className: link2, children: item6.label })
1479
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("li", { className: item3, children: [
1480
+ index > 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: separator, "aria-hidden": true, children: sep }),
1481
+ isCurrent || item7.href === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: isCurrent ? current : void 0, "aria-current": isCurrent ? "page" : void 0, children: item7.label }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Link, { as: linkAs, href: item7.href, color: "neutral", underline: "hover", className: link2, children: item7.label })
510
1482
  ] }, index);
511
1483
  }) }) });
512
1484
  });
513
1485
 
514
- // src/components/Button/Button.tsx
515
- var import_react9 = require("react");
1486
+ // src/components/BusinessNumberInput/BusinessNumberInput.tsx
1487
+ var import_react19 = require("react");
1488
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1489
+ var sanitize = (input5) => input5.replace(/\D/g, "").slice(0, 10);
1490
+ var isDigit2 = (char) => /\d/.test(char);
1491
+ var BusinessNumberInput = /* @__PURE__ */ (0, import_react19.forwardRef)(
1492
+ function BusinessNumberInput2(props, ref) {
1493
+ const {
1494
+ value: value4,
1495
+ defaultValue,
1496
+ onValueChange,
1497
+ validate = true,
1498
+ invalidText: invalidTextProp,
1499
+ label: labelProp,
1500
+ placeholder = "000-00-00000",
1501
+ error,
1502
+ helperText: helperText3,
1503
+ onBlur,
1504
+ onKeyDown,
1505
+ ...rest
1506
+ } = props;
1507
+ const inputRef = (0, import_react19.useRef)(null);
1508
+ const m = useMessages();
1509
+ const invalidText = invalidTextProp ?? m.businessNumberInvalid ?? "\uC62C\uBC14\uB978 \uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638\uAC00 \uC544\uB2C8\uC5D0\uC694. \uBC88\uD638\uB97C \uB2E4\uC2DC \uD655\uC778\uD574 \uC8FC\uC138\uC694.";
1510
+ const label6 = labelProp ?? m.businessNumber ?? "\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638";
1511
+ const incompleteText = m.businessNumberIncomplete ?? "10\uC790\uB9AC\uB97C \uBAA8\uB450 \uC785\uB825\uD574 \uC8FC\uC138\uC694.";
1512
+ const [touched, setTouched] = (0, import_react19.useState)(false);
1513
+ const field3 = useFormattedInput({
1514
+ isControlled: "value" in props,
1515
+ value: value4,
1516
+ defaultValue,
1517
+ onValueChange: (digits) => onValueChange?.(digits, digits.length === 10 ? isValidBusinessNumber(digits) : null),
1518
+ sanitize,
1519
+ format: formatBusinessNumber,
1520
+ isMeaningful: isDigit2,
1521
+ inputRef
1522
+ });
1523
+ const complete = field3.raw.length === 10;
1524
+ const autoInvalid = validate && field3.raw.length > 0 && (complete ? !isValidBusinessNumber(field3.raw) : touched);
1525
+ const showAuto = autoInvalid && error === void 0;
1526
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1527
+ TextField,
1528
+ {
1529
+ ref: mergeRefs(ref, inputRef),
1530
+ label: label6,
1531
+ placeholder,
1532
+ inputMode: "numeric",
1533
+ value: field3.display,
1534
+ onChange: field3.onChange,
1535
+ onKeyDown: (event) => {
1536
+ field3.onKeyDown(event);
1537
+ onKeyDown?.(event);
1538
+ },
1539
+ onBlur: (event) => {
1540
+ setTouched(true);
1541
+ onBlur?.(event);
1542
+ },
1543
+ error: error ?? autoInvalid,
1544
+ helperText: showAuto ? complete ? invalidText : incompleteText : helperText3,
1545
+ ...rest
1546
+ }
1547
+ );
1548
+ }
1549
+ );
516
1550
 
517
- // src/components/Spinner/Spinner.tsx
518
- var import_icons6 = require("@bestow-ui/icons");
519
- var import_react8 = require("react");
1551
+ // src/components/Calendar/Calendar.tsx
1552
+ var import_react21 = require("react");
1553
+ var import_icons9 = require("@bestow-ui/icons");
520
1554
 
521
- // src/components/Spinner/Spinner.css.ts
522
- var import_createRuntimeFn5 = require("@vanilla-extract/recipes/createRuntimeFn");
523
- var spinner = /* @__PURE__ */ (0, import_createRuntimeFn5.createRuntimeFn)({ defaultClassName: "_4b5tg40", variantClassNames: { color: { current: "_4b5tg41", primary: "_4b5tg42", neutral: "_4b5tg43", danger: "_4b5tg44" }, size: { sm: "_4b5tg45", md: "_4b5tg46", lg: "_4b5tg47" } }, defaultVariants: { color: "current", size: "md" }, compoundVariants: [] });
1555
+ // src/utils/date.ts
1556
+ var pad = (n) => String(n).padStart(2, "0");
1557
+ function toISODate(date) {
1558
+ return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
1559
+ }
1560
+ function parseISODate(value4) {
1561
+ const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value4 ?? "");
1562
+ if (!m) return null;
1563
+ const [y, mo, d] = [Number(m[1]), Number(m[2]), Number(m[3])];
1564
+ const date = new Date(y, mo - 1, d);
1565
+ return date.getFullYear() === y && date.getMonth() === mo - 1 && date.getDate() === d ? date : null;
1566
+ }
1567
+ function addDays(date, days) {
1568
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);
1569
+ }
1570
+ function addMonths(date, months) {
1571
+ const target = new Date(date.getFullYear(), date.getMonth() + months, 1);
1572
+ const lastDay = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate();
1573
+ return new Date(target.getFullYear(), target.getMonth(), Math.min(date.getDate(), lastDay));
1574
+ }
1575
+ function isSameDay(a, b) {
1576
+ return !!a && !!b && toISODate(a) === toISODate(b);
1577
+ }
1578
+ function isSameMonth(a, b) {
1579
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();
1580
+ }
1581
+ function compareDays(a, b) {
1582
+ const x = toISODate(a);
1583
+ const y = toISODate(b);
1584
+ return x < y ? -1 : x > y ? 1 : 0;
1585
+ }
1586
+ function getCalendarWeeks(year, month) {
1587
+ const first = new Date(year, month, 1);
1588
+ const start = addDays(first, -first.getDay());
1589
+ return Array.from({ length: 6 }, (_, week) => Array.from({ length: 7 }, (_2, day2) => addDays(start, week * 7 + day2)));
1590
+ }
1591
+ var KOREAN_WEEKDAYS = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
1592
+ function formatKoreanDate(date, withWeekday = true) {
1593
+ const base = `${date.getFullYear()}\uB144 ${date.getMonth() + 1}\uC6D4 ${date.getDate()}\uC77C`;
1594
+ return withWeekday ? `${base} ${KOREAN_WEEKDAYS[date.getDay()]}\uC694\uC77C` : base;
1595
+ }
524
1596
 
525
- // src/components/Spinner/Spinner.tsx
526
- var import_jsx_runtime8 = require("react/jsx-runtime");
527
- var Spinner = /* @__PURE__ */ (0, import_react8.forwardRef)(function Spinner2({ size, color, label: label6 = "\uB85C\uB529 \uC911", className, ...rest }, ref) {
528
- const a11y = label6 ? { role: "status" } : { "aria-hidden": true };
529
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { ref, className: cx(spinner({ size, color }), className), ...a11y, ...rest, children: [
530
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_icons6.LoaderIcon, { size: "100%" }),
531
- label6 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: visuallyHidden, children: label6 })
532
- ] });
533
- });
1597
+ // src/components/IconButton/IconButton.tsx
1598
+ var import_react20 = require("react");
534
1599
 
535
- // src/components/Button/Button.css.ts
536
- var import_createRuntimeFn6 = require("@vanilla-extract/recipes/createRuntimeFn");
537
- var button = /* @__PURE__ */ (0, import_createRuntimeFn6.createRuntimeFn)({ defaultClassName: "xcekda6", variantClassNames: { variant: { solid: "xcekda7", soft: "xcekda8", outline: "xcekda9", ghost: "xcekdaa" }, color: { primary: "xcekdab", neutral: "xcekdac", danger: "xcekdad" }, size: { sm: "xcekdae", md: "xcekdaf", lg: "xcekdag" }, fullWidth: { true: "xcekdah" } }, defaultVariants: { variant: "solid", color: "primary", size: "md" }, compoundVariants: [] });
538
- var icon3 = "xcekdai";
1600
+ // src/components/IconButton/IconButton.css.ts
1601
+ var import_createRuntimeFn10 = require("@vanilla-extract/recipes/createRuntimeFn");
1602
+ var iconButton = /* @__PURE__ */ (0, import_createRuntimeFn10.createRuntimeFn)({ defaultClassName: "ip9et20", variantClassNames: { size: { sm: "ip9et21", md: "ip9et22", lg: "ip9et23" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
539
1603
 
540
- // src/components/Button/Button.tsx
541
- var import_jsx_runtime9 = require("react/jsx-runtime");
542
- var Button = /* @__PURE__ */ (0, import_react9.forwardRef)(function Button2({
543
- variant,
544
- color,
545
- size,
546
- fullWidth,
547
- startIcon,
548
- endIcon,
549
- loading,
550
- className,
551
- type = "button",
552
- onClick,
553
- children,
554
- ...rest
555
- }, ref) {
556
- const handleClick = (event) => {
557
- if (loading) {
558
- event.preventDefault();
559
- return;
560
- }
561
- onClick?.(event);
562
- };
563
- const leading = loading ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Spinner, { size: "sm", label: "" }) : startIcon;
564
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
565
- "button",
1604
+ // src/components/IconButton/IconButton.tsx
1605
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1606
+ var IconButton = /* @__PURE__ */ (0, import_react20.forwardRef)(function IconButton2({ variant = "ghost", color = "neutral", size, loading: loading2, className, children, ...rest }, ref) {
1607
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1608
+ Button,
566
1609
  {
567
1610
  ref,
568
- type,
569
- className: cx(button({ variant, color, size, fullWidth }), className),
570
- "aria-busy": loading || void 0,
571
- "aria-disabled": loading || void 0,
572
- onClick: handleClick,
1611
+ variant,
1612
+ color,
1613
+ size,
1614
+ loading: loading2,
1615
+ className: cx(iconButton({ size }), className),
573
1616
  ...rest,
574
- children: [
575
- leading && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: icon3, children: leading }),
576
- children,
577
- endIcon && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: icon3, children: endIcon })
578
- ]
1617
+ children: !loading2 && children
579
1618
  }
580
1619
  );
581
1620
  });
582
1621
 
583
- // src/components/Card/Card.tsx
584
- var import_react10 = require("react");
585
-
586
- // src/components/Card/Card.css.ts
587
- var import_createRuntimeFn7 = require("@vanilla-extract/recipes/createRuntimeFn");
588
- var body = "dnuf1u9";
589
- var card = /* @__PURE__ */ (0, import_createRuntimeFn7.createRuntimeFn)({ defaultClassName: "dnuf1u0", variantClassNames: { variant: { outline: "dnuf1u1", elevated: "dnuf1u2", soft: "dnuf1u3" }, padding: { none: "dnuf1u4", sm: "dnuf1u5", md: "dnuf1u6", lg: "dnuf1u7" } }, defaultVariants: { variant: "outline", padding: "md" }, compoundVariants: [] });
590
- var footer = "dnuf1ua";
591
- var header2 = "dnuf1u8";
592
-
593
- // src/components/Card/Card.tsx
594
- var import_jsx_runtime10 = require("react/jsx-runtime");
595
- var Card = /* @__PURE__ */ (0, import_react10.forwardRef)(function Card2({ variant, padding, as: Component = "div", className, ...rest }, ref) {
596
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Component, { ref, className: cx(card({ variant, padding }), className), ...rest });
597
- });
598
- var CardHeader = /* @__PURE__ */ (0, import_react10.forwardRef)(function CardHeader2({ className, ...rest }, ref) {
599
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { ref, className: cx(header2, className), ...rest });
600
- });
601
- var CardBody = /* @__PURE__ */ (0, import_react10.forwardRef)(function CardBody2({ className, ...rest }, ref) {
602
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { ref, className: cx(body, className), ...rest });
603
- });
604
- var CardFooter = /* @__PURE__ */ (0, import_react10.forwardRef)(function CardFooter2({ className, ...rest }, ref) {
605
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { ref, className: cx(footer, className), ...rest });
606
- });
607
-
608
- // src/components/Checkbox/Checkbox.tsx
609
- var import_react11 = require("react");
1622
+ // src/components/Calendar/Calendar.css.ts
1623
+ var cell = "_1qyq67b5";
1624
+ var day = "_1qyq67b6";
1625
+ var grid = "_1qyq67b3";
1626
+ var header3 = "_1qyq67b1";
1627
+ var heading = "_1qyq67b2";
1628
+ var root6 = "_1qyq67b0";
1629
+ var weekday = "_1qyq67b4";
610
1630
 
611
- // src/utils/mergeRefs.ts
612
- function mergeRefs(...refs) {
613
- return (value4) => {
614
- for (const ref of refs) {
615
- if (typeof ref === "function") ref(value4);
616
- else if (ref) ref.current = value4;
1631
+ // src/components/Calendar/Calendar.tsx
1632
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1633
+ var Calendar = /* @__PURE__ */ (0, import_react21.forwardRef)(function Calendar2(props, ref) {
1634
+ const {
1635
+ value: value4,
1636
+ defaultValue,
1637
+ onValueChange,
1638
+ min,
1639
+ max,
1640
+ isDateDisabled,
1641
+ isHoliday,
1642
+ today: todayProp,
1643
+ initialFocus,
1644
+ prevMonthLabel: prevMonthLabelProp,
1645
+ nextMonthLabel: nextMonthLabelProp,
1646
+ className
1647
+ } = props;
1648
+ const m = useMessages();
1649
+ const prevMonthLabel = prevMonthLabelProp ?? m.previousMonth ?? "\uC774\uC804 \uB2EC";
1650
+ const nextMonthLabel = nextMonthLabelProp ?? m.nextMonth ?? "\uB2E4\uC74C \uB2EC";
1651
+ const weekdaysShort = m.weekdaysShort ?? KOREAN_WEEKDAYS;
1652
+ const weekdaysLong = m.weekdaysLong ?? KOREAN_WEEKDAYS.map((name) => `${name}\uC694\uC77C`);
1653
+ const headingId = (0, import_react21.useId)();
1654
+ const gridRef = (0, import_react21.useRef)(null);
1655
+ const isControlled = "value" in props;
1656
+ const [innerValue, setInnerValue] = (0, import_react21.useState)(defaultValue ?? "");
1657
+ const selected = parseISODate(isControlled ? value4 : innerValue);
1658
+ const today = parseISODate(todayProp) ?? /* @__PURE__ */ new Date();
1659
+ const minDate = parseISODate(min);
1660
+ const maxDate = parseISODate(max);
1661
+ const clamp = (date) => {
1662
+ if (minDate && compareDays(date, minDate) < 0) return minDate;
1663
+ if (maxDate && compareDays(date, maxDate) > 0) return maxDate;
1664
+ return date;
1665
+ };
1666
+ const isDisabled = (date) => minDate !== null && compareDays(date, minDate) < 0 || maxDate !== null && compareDays(date, maxDate) > 0 || !!isDateDisabled?.(date);
1667
+ const [focused, setFocused] = (0, import_react21.useState)(() => clamp(selected ?? today));
1668
+ const moveFocus = (0, import_react21.useRef)(initialFocus ?? false);
1669
+ const selectedIso = selected ? toISODate(selected) : "";
1670
+ (0, import_react21.useEffect)(() => {
1671
+ const date = parseISODate(selectedIso);
1672
+ if (date) setFocused((prev) => isSameDay(prev, date) ? prev : date);
1673
+ }, [selectedIso]);
1674
+ (0, import_react21.useEffect)(() => {
1675
+ if (!moveFocus.current) return;
1676
+ moveFocus.current = false;
1677
+ gridRef.current?.querySelector(`[data-date="${toISODate(focused)}"]`)?.focus();
1678
+ }, [focused]);
1679
+ const focusDate = (date) => {
1680
+ moveFocus.current = true;
1681
+ setFocused(clamp(date));
1682
+ };
1683
+ const select = (date) => {
1684
+ if (isDisabled(date)) return;
1685
+ const iso = toISODate(date);
1686
+ if (!isControlled) setInnerValue(iso);
1687
+ onValueChange?.(iso);
1688
+ setFocused(date);
1689
+ };
1690
+ const handleKeyDown = (event) => {
1691
+ const moves = {
1692
+ ArrowLeft: () => addDays(focused, -1),
1693
+ ArrowRight: () => addDays(focused, 1),
1694
+ ArrowUp: () => addDays(focused, -7),
1695
+ ArrowDown: () => addDays(focused, 7),
1696
+ Home: () => addDays(focused, -focused.getDay()),
1697
+ End: () => addDays(focused, 6 - focused.getDay()),
1698
+ PageUp: () => addMonths(focused, event.shiftKey ? -12 : -1),
1699
+ PageDown: () => addMonths(focused, event.shiftKey ? 12 : 1)
1700
+ };
1701
+ const move = moves[event.key];
1702
+ if (move) {
1703
+ event.preventDefault();
1704
+ focusDate(move());
617
1705
  }
618
1706
  };
619
- }
620
-
621
- // src/components/Checkbox/Checkbox.css.ts
622
- var import_createRuntimeFn8 = require("@vanilla-extract/recipes/createRuntimeFn");
623
- var checkIcon = "_1y7mzsn8 _1y7mzsn7";
624
- var control = /* @__PURE__ */ (0, import_createRuntimeFn8.createRuntimeFn)({ defaultClassName: "_1y7mzsn3", variantClassNames: { size: { sm: "_1y7mzsn4", md: "_1y7mzsn5" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
625
- var indeterminateIcon = "_1y7mzsn9 _1y7mzsn7";
626
- var input = "_1y7mzsn6";
627
- var root4 = /* @__PURE__ */ (0, import_createRuntimeFn8.createRuntimeFn)({ defaultClassName: "_1y7mzsn0", variantClassNames: { size: { sm: "_1y7mzsn1", md: "_1y7mzsn2" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
628
-
629
- // src/components/Checkbox/Checkbox.tsx
630
- var import_jsx_runtime11 = require("react/jsx-runtime");
631
- var Checkbox = /* @__PURE__ */ (0, import_react11.forwardRef)(function Checkbox2({ label: label6, size, indeterminate = false, invalid, disabled, className, ...rest }, ref) {
632
- const innerRef = (0, import_react11.useRef)(null);
633
- (0, import_react11.useEffect)(() => {
634
- if (innerRef.current) innerRef.current.indeterminate = indeterminate;
635
- }, [indeterminate]);
636
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("label", { className: cx(root4({ size }), className), "data-disabled": disabled || void 0, children: [
637
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: control({ size }), children: [
638
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
639
- "input",
1707
+ const visible = focused;
1708
+ const weeks = getCalendarWeeks(visible.getFullYear(), visible.getMonth()).filter(
1709
+ (week) => week.some((date) => isSameMonth(date, visible))
1710
+ );
1711
+ const prevMonth = addMonths(visible, -1);
1712
+ const nextMonth = addMonths(visible, 1);
1713
+ const canPrev = !minDate || compareDays(new Date(visible.getFullYear(), visible.getMonth(), 0), minDate) >= 0;
1714
+ const canNext = !maxDate || compareDays(new Date(visible.getFullYear(), visible.getMonth() + 1, 1), maxDate) <= 0;
1715
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { ref, className: cx(root6, className), children: [
1716
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: header3, children: [
1717
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1718
+ IconButton,
640
1719
  {
641
- ref: mergeRefs(innerRef, ref),
642
- type: "checkbox",
643
- className: input,
644
- disabled,
645
- "aria-invalid": invalid || void 0,
646
- ...rest
1720
+ "aria-label": prevMonthLabel,
1721
+ size: "sm",
1722
+ disabled: !canPrev,
1723
+ onClick: () => setFocused(clamp(prevMonth)),
1724
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons9.ChevronLeftIcon, {})
647
1725
  }
648
1726
  ),
649
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("svg", { className: checkIcon, viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
650
- "path",
1727
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { id: headingId, className: heading, "aria-live": "polite", children: m.monthTitle?.(visible.getFullYear(), visible.getMonth() + 1) ?? `${visible.getFullYear()}\uB144 ${visible.getMonth() + 1}\uC6D4` }),
1728
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1729
+ IconButton,
651
1730
  {
652
- d: "M5 10.5l3.2 3L15 7",
653
- stroke: "currentColor",
654
- strokeWidth: "2",
655
- strokeLinecap: "round",
656
- strokeLinejoin: "round"
1731
+ "aria-label": nextMonthLabel,
1732
+ size: "sm",
1733
+ disabled: !canNext,
1734
+ onClick: () => setFocused(clamp(nextMonth)),
1735
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons9.ChevronRightIcon, {})
657
1736
  }
658
- ) }),
659
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("svg", { className: indeterminateIcon, viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("path", { d: "M6 10h8", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) })
1737
+ )
660
1738
  ] }),
661
- label6
1739
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("table", { ref: gridRef, role: "grid", "aria-labelledby": headingId, className: grid, onKeyDown: handleKeyDown, children: [
1740
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tr", { children: weekdaysShort.map((name, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("th", { scope: "col", abbr: weekdaysLong[index], className: weekday, "data-weekday": index, children: name }, index)) }) }),
1741
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tbody", { children: weeks.map((week) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tr", { children: week.map((date) => {
1742
+ const iso = toISODate(date);
1743
+ if (!isSameMonth(date, visible)) return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("td", { role: "gridcell", className: cell }, iso);
1744
+ const isSelected = isSameDay(date, selected);
1745
+ const isToday = isSameDay(date, today);
1746
+ const holiday = !!isHoliday?.(date);
1747
+ const disabled = isDisabled(date);
1748
+ const label6 = [
1749
+ m.dayLabel?.(date, weekdaysLong[date.getDay()]) ?? `${date.getDate()}, ${date.getFullYear()}\uB144 ${date.getMonth() + 1}\uC6D4 ${weekdaysLong[date.getDay()]}`,
1750
+ holiday && (m.holiday ?? "\uACF5\uD734\uC77C"),
1751
+ isToday && (m.today ?? "\uC624\uB298")
1752
+ ].filter(Boolean).join(", ");
1753
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("td", { role: "gridcell", "aria-selected": isSelected, className: cell, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1754
+ "button",
1755
+ {
1756
+ type: "button",
1757
+ className: day,
1758
+ "data-date": iso,
1759
+ "data-weekday": date.getDay(),
1760
+ "data-holiday": holiday || void 0,
1761
+ "data-selected": isSelected || void 0,
1762
+ tabIndex: isSameDay(date, focused) ? 0 : -1,
1763
+ "aria-label": label6,
1764
+ "aria-current": isToday ? "date" : void 0,
1765
+ "aria-disabled": disabled || void 0,
1766
+ onClick: () => select(date),
1767
+ onFocus: () => !isSameDay(date, focused) && setFocused(date),
1768
+ children: date.getDate()
1769
+ }
1770
+ ) }, iso);
1771
+ }) }, toISODate(week[0]))) })
1772
+ ] })
662
1773
  ] });
663
1774
  });
664
1775
 
1776
+ // src/components/Card/Card.tsx
1777
+ var import_react22 = require("react");
1778
+
1779
+ // src/components/Card/Card.css.ts
1780
+ var import_createRuntimeFn11 = require("@vanilla-extract/recipes/createRuntimeFn");
1781
+ var body2 = "dnuf1u9";
1782
+ var card = /* @__PURE__ */ (0, import_createRuntimeFn11.createRuntimeFn)({ defaultClassName: "dnuf1u0", variantClassNames: { variant: { outline: "dnuf1u1", elevated: "dnuf1u2", soft: "dnuf1u3" }, padding: { none: "dnuf1u4", sm: "dnuf1u5", md: "dnuf1u6", lg: "dnuf1u7" } }, defaultVariants: { variant: "outline", padding: "md" }, compoundVariants: [] });
1783
+ var footer2 = "dnuf1ua";
1784
+ var header4 = "dnuf1u8";
1785
+
1786
+ // src/components/Card/Card.tsx
1787
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1788
+ var Card = /* @__PURE__ */ (0, import_react22.forwardRef)(function Card2({ variant, padding, as: Component = "div", className, ...rest }, ref) {
1789
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Component, { ref, className: cx(card({ variant, padding }), className), ...rest });
1790
+ });
1791
+ var CardHeader = /* @__PURE__ */ (0, import_react22.forwardRef)(function CardHeader2({ className, ...rest }, ref) {
1792
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { ref, className: cx(header4, className), ...rest });
1793
+ });
1794
+ var CardBody = /* @__PURE__ */ (0, import_react22.forwardRef)(function CardBody2({ className, ...rest }, ref) {
1795
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { ref, className: cx(body2, className), ...rest });
1796
+ });
1797
+ var CardFooter = /* @__PURE__ */ (0, import_react22.forwardRef)(function CardFooter2({ className, ...rest }, ref) {
1798
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { ref, className: cx(footer2, className), ...rest });
1799
+ });
1800
+
665
1801
  // src/components/Combobox/Combobox.tsx
666
1802
  var Popover = __toESM(require("@radix-ui/react-popover"), 1);
667
- var import_react12 = require("react");
668
- var import_icons7 = require("@bestow-ui/icons");
669
-
670
- // src/components/Input/Input.css.ts
671
- var import_createRuntimeFn9 = require("@vanilla-extract/recipes/createRuntimeFn");
672
- var adornment = "_19p5zvh6";
673
- var field = "_19p5zvh7";
674
- var fieldFullWidth = "_19p5zvh8";
675
- var helperText = /* @__PURE__ */ (0, import_createRuntimeFn9.createRuntimeFn)({ defaultClassName: "_19p5zvhb", variantClassNames: { error: { true: "_19p5zvhc" } }, defaultVariants: {}, compoundVariants: [] });
676
- var input2 = "_19p5zvh5";
677
- var label = "_19p5zvh9";
678
- var requiredMark = "_19p5zvha";
679
- var root5 = /* @__PURE__ */ (0, import_createRuntimeFn9.createRuntimeFn)({ defaultClassName: "_19p5zvh0", variantClassNames: { size: { sm: "_19p5zvh1", md: "_19p5zvh2", lg: "_19p5zvh3" }, fullWidth: { true: "_19p5zvh4" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1803
+ var import_react23 = require("react");
1804
+ var import_icons10 = require("@bestow-ui/icons");
680
1805
 
681
1806
  // src/components/Select/Select.css.ts
682
- var content3 = "_1kx81e83";
1807
+ var content5 = "_1kx81e83";
683
1808
  var icon4 = "_1kx81e82";
684
- var item3 = "_1kx81e85";
1809
+ var item4 = "_1kx81e85";
685
1810
  var itemIndicator = "_1kx81e86";
686
1811
  var trigger2 = "_1kx81e80";
687
1812
  var value = "_1kx81e81";
688
1813
  var viewport = "_1kx81e84";
689
1814
 
690
1815
  // src/components/Combobox/Combobox.css.ts
691
- var content4 = "c2pbq71";
1816
+ var content6 = "c2pbq71";
692
1817
  var empty = "c2pbq72";
693
- var toggle = "c2pbq70";
1818
+ var toggle2 = "c2pbq70";
694
1819
 
695
1820
  // src/components/Combobox/Combobox.tsx
696
- var import_jsx_runtime12 = require("react/jsx-runtime");
1821
+ var import_jsx_runtime22 = require("react/jsx-runtime");
697
1822
  var defaultFilter = (option2, query) => option2.label.toLowerCase().includes(query.trim().toLowerCase());
698
- var Combobox = /* @__PURE__ */ (0, import_react12.forwardRef)(function Combobox2(props, ref) {
1823
+ var Combobox = /* @__PURE__ */ (0, import_react23.forwardRef)(function Combobox2(props, ref) {
699
1824
  const {
700
1825
  options,
701
1826
  value: value4,
702
1827
  defaultValue,
703
1828
  onValueChange,
704
1829
  filter = defaultFilter,
705
- emptyMessage = "\uACB0\uACFC\uAC00 \uC5C6\uC5B4\uC694",
1830
+ emptyMessage: emptyMessageProp,
706
1831
  placeholder,
707
1832
  label: label6,
708
1833
  helperText: helperText3,
@@ -714,36 +1839,39 @@ var Combobox = /* @__PURE__ */ (0, import_react12.forwardRef)(function Combobox2
714
1839
  name,
715
1840
  id,
716
1841
  "aria-label": ariaLabel,
717
- toggleLabel = "\uBAA9\uB85D \uC5F4\uAE30",
1842
+ toggleLabel: toggleLabelProp,
718
1843
  className
719
1844
  } = props;
720
- const generatedId = (0, import_react12.useId)();
1845
+ const m = useMessages();
1846
+ const emptyMessage = emptyMessageProp ?? m.noResults ?? "\uACB0\uACFC\uAC00 \uC5C6\uC5B4\uC694";
1847
+ const toggleLabel = toggleLabelProp ?? m.openList ?? "\uBAA9\uB85D \uC5F4\uAE30";
1848
+ const generatedId = (0, import_react23.useId)();
721
1849
  const inputId = id ?? generatedId;
722
1850
  const labelId = `${inputId}-label`;
723
1851
  const listId = `${inputId}-listbox`;
724
1852
  const helperId = helperText3 ? `${inputId}-helper` : void 0;
725
1853
  const optionId = (index) => `${inputId}-option-${index}`;
726
1854
  const portal2 = usePortalProps();
727
- const inputRef = (0, import_react12.useRef)(null);
728
- const anchorRef = (0, import_react12.useRef)(null);
1855
+ const inputRef = (0, import_react23.useRef)(null);
1856
+ const anchorRef = (0, import_react23.useRef)(null);
729
1857
  const isControlled = "value" in props;
730
- const [innerValue, setInnerValue] = (0, import_react12.useState)(defaultValue);
1858
+ const [innerValue, setInnerValue] = (0, import_react23.useState)(defaultValue);
731
1859
  const selectedValue = isControlled ? value4 : innerValue;
732
1860
  const selectedOption = options.find((o) => o.value === selectedValue);
733
- const [open, setOpen] = (0, import_react12.useState)(false);
734
- const [query, setQuery] = (0, import_react12.useState)(null);
735
- const [activeIndex, setActiveIndex] = (0, import_react12.useState)(-1);
736
- const filtered = (0, import_react12.useMemo)(() => query ? options.filter((o) => filter(o, query)) : options, [options, filter, query]);
1861
+ const [open, setOpen] = (0, import_react23.useState)(false);
1862
+ const [query, setQuery] = (0, import_react23.useState)(null);
1863
+ const [activeIndex, setActiveIndex] = (0, import_react23.useState)(-1);
1864
+ const filtered = (0, import_react23.useMemo)(() => query ? options.filter((o) => filter(o, query)) : options, [options, filter, query]);
737
1865
  const inputText = query ?? selectedOption?.label ?? "";
738
- const firstEnabled = (list4, from = 0, step = 1) => {
739
- for (let i = from; i >= 0 && i < list4.length; i += step) if (!list4[i].disabled) return i;
1866
+ const firstEnabled = (list5, from = 0, step = 1) => {
1867
+ for (let i = from; i >= 0 && i < list5.length; i += step) if (!list5[i].disabled) return i;
740
1868
  return -1;
741
1869
  };
742
- const openList = (list4 = filtered, preferLast = false) => {
1870
+ const openList = (list5 = filtered, preferLast = false) => {
743
1871
  setOpen(true);
744
- const selectedIndex = list4.findIndex((o) => o.value === selectedValue);
1872
+ const selectedIndex = list5.findIndex((o) => o.value === selectedValue);
745
1873
  setActiveIndex(
746
- selectedIndex >= 0 && !list4[selectedIndex].disabled ? selectedIndex : preferLast ? firstEnabled(list4, list4.length - 1, -1) : firstEnabled(list4)
1874
+ selectedIndex >= 0 && !list5[selectedIndex].disabled ? selectedIndex : preferLast ? firstEnabled(list5, list5.length - 1, -1) : firstEnabled(list5)
747
1875
  );
748
1876
  };
749
1877
  const close2 = () => {
@@ -799,26 +1927,26 @@ var Combobox = /* @__PURE__ */ (0, import_react12.forwardRef)(function Combobox2
799
1927
  break;
800
1928
  }
801
1929
  };
802
- (0, import_react12.useEffect)(() => {
1930
+ (0, import_react23.useEffect)(() => {
803
1931
  if (!open || activeIndex < 0) return;
804
1932
  document.getElementById(optionId(activeIndex))?.scrollIntoView?.({ block: "nearest" });
805
1933
  }, [open, activeIndex]);
806
1934
  const hasOptions = filtered.length > 0;
807
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
808
- label6 && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("label", { id: labelId, htmlFor: inputId, className: label, children: [
1935
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
1936
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("label", { id: labelId, htmlFor: inputId, className: label, children: [
809
1937
  label6,
810
- required && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
1938
+ required && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
811
1939
  ] }),
812
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Popover.Root, { open: open && !disabled, onOpenChange: (next) => next ? openList() : close2(), children: [
813
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Popover.Anchor, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1940
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Popover.Root, { open: open && !disabled, onOpenChange: (next) => next ? openList() : close2(), children: [
1941
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Popover.Anchor, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
814
1942
  "div",
815
1943
  {
816
1944
  ref: anchorRef,
817
- className: cx(root5({ size, fullWidth }), className),
1945
+ className: cx(root3({ size, fullWidth }), className),
818
1946
  "data-invalid": error || void 0,
819
1947
  "data-disabled": disabled || void 0,
820
1948
  children: [
821
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1949
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
822
1950
  "input",
823
1951
  {
824
1952
  ref: mergeRefs(ref, inputRef),
@@ -842,10 +1970,10 @@ var Combobox = /* @__PURE__ */ (0, import_react12.forwardRef)(function Combobox2
842
1970
  onBlur: () => {
843
1971
  if (open) close2();
844
1972
  },
845
- className: input2
1973
+ className: input
846
1974
  }
847
1975
  ),
848
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1976
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
849
1977
  "button",
850
1978
  {
851
1979
  type: "button",
@@ -853,27 +1981,27 @@ var Combobox = /* @__PURE__ */ (0, import_react12.forwardRef)(function Combobox2
853
1981
  "aria-label": toggleLabel,
854
1982
  "aria-expanded": open,
855
1983
  disabled,
856
- className: toggle,
1984
+ className: toggle2,
857
1985
  onMouseDown: (event) => event.preventDefault(),
858
1986
  onClick: () => {
859
1987
  if (open) close2();
860
1988
  else openList(options);
861
1989
  inputRef.current?.focus();
862
1990
  },
863
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_icons7.ChevronDownIcon, { size: 16 })
1991
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_icons10.ChevronDownIcon, { size: 16 })
864
1992
  }
865
1993
  )
866
1994
  ]
867
1995
  }
868
1996
  ) }),
869
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1997
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
870
1998
  Popover.Content,
871
1999
  {
872
2000
  role: "presentation",
873
2001
  align: "start",
874
2002
  sideOffset: 4,
875
2003
  collisionPadding: 8,
876
- className: cx(portal2.className, content4),
2004
+ className: cx(portal2.className, content6),
877
2005
  style: portal2.style,
878
2006
  onOpenAutoFocus: (event) => event.preventDefault(),
879
2007
  onCloseAutoFocus: (event) => event.preventDefault(),
@@ -881,7 +2009,7 @@ var Combobox = /* @__PURE__ */ (0, import_react12.forwardRef)(function Combobox2
881
2009
  onInteractOutside: (event) => {
882
2010
  if (anchorRef.current?.contains(event.target)) event.preventDefault();
883
2011
  },
884
- children: hasOptions ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
2012
+ children: hasOptions ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
885
2013
  "div",
886
2014
  {
887
2015
  id: listId,
@@ -893,7 +2021,7 @@ var Combobox = /* @__PURE__ */ (0, import_react12.forwardRef)(function Combobox2
893
2021
  return (
894
2022
  // aria-activedescendant 패턴: 포커스·키보드는 입력창이 맡고 항목은 포커스를 받지 않는다 (WAI-ARIA combobox)
895
2023
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/interactive-supports-focus
896
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
2024
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
897
2025
  "div",
898
2026
  {
899
2027
  id: optionId(index),
@@ -903,13 +2031,13 @@ var Combobox = /* @__PURE__ */ (0, import_react12.forwardRef)(function Combobox2
903
2031
  "data-highlighted": index === activeIndex ? "" : void 0,
904
2032
  "data-state": isSelected ? "checked" : "unchecked",
905
2033
  "data-disabled": option2.disabled ? "" : void 0,
906
- className: item3,
2034
+ className: item4,
907
2035
  onMouseDown: (event) => event.preventDefault(),
908
2036
  onMouseMove: () => !option2.disabled && setActiveIndex(index),
909
2037
  onClick: () => select(option2),
910
2038
  children: [
911
2039
  option2.label,
912
- isSelected && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: itemIndicator, "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_icons7.CheckIcon, { size: 16 }) })
2040
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: itemIndicator, "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_icons10.CheckIcon, { size: 16 }) })
913
2041
  ]
914
2042
  },
915
2043
  option2.value
@@ -917,81 +2045,259 @@ var Combobox = /* @__PURE__ */ (0, import_react12.forwardRef)(function Combobox2
917
2045
  );
918
2046
  })
919
2047
  }
920
- ) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: empty, role: "status", children: emptyMessage })
2048
+ ) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: empty, role: "status", children: emptyMessage })
2049
+ }
2050
+ ) })
2051
+ ] }),
2052
+ name && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("input", { type: "hidden", name, value: selectedValue ?? "" }),
2053
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
2054
+ ] });
2055
+ });
2056
+
2057
+ // src/components/DatePicker/DatePicker.tsx
2058
+ var import_react25 = require("react");
2059
+ var import_icons12 = require("@bestow-ui/icons");
2060
+
2061
+ // src/components/Popover/Popover.tsx
2062
+ var RadixPopover = __toESM(require("@radix-ui/react-popover"), 1);
2063
+ var import_icons11 = require("@bestow-ui/icons");
2064
+ var import_react24 = require("react");
2065
+
2066
+ // src/components/Popover/Popover.css.ts
2067
+ var arrow = "_1j99p8x4";
2068
+ var closeButton3 = "_1j99p8x3";
2069
+ var content7 = "_1j99p8x0";
2070
+ var header5 = "_1j99p8x1";
2071
+ var title3 = "_1j99p8x2";
2072
+
2073
+ // src/components/Popover/Popover.tsx
2074
+ var import_jsx_runtime23 = require("react/jsx-runtime");
2075
+ function Popover2({
2076
+ content: content12,
2077
+ children,
2078
+ title: title6,
2079
+ "aria-label": ariaLabel,
2080
+ showClose = false,
2081
+ showArrow = false,
2082
+ side = "bottom",
2083
+ align = "center",
2084
+ open,
2085
+ defaultOpen,
2086
+ onOpenChange,
2087
+ modal,
2088
+ className,
2089
+ style,
2090
+ onOpenAutoFocus
2091
+ }) {
2092
+ const portal2 = usePortalProps();
2093
+ const m = useMessages();
2094
+ const titleId = (0, import_react24.useId)();
2095
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(RadixPopover.Root, { open, defaultOpen, onOpenChange, modal, children: [
2096
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixPopover.Trigger, { asChild: true, children }),
2097
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixPopover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2098
+ RadixPopover.Content,
2099
+ {
2100
+ side,
2101
+ align,
2102
+ sideOffset: 6,
2103
+ onOpenAutoFocus,
2104
+ collisionPadding: 8,
2105
+ "aria-labelledby": title6 ? titleId : void 0,
2106
+ "aria-label": title6 ? void 0 : ariaLabel,
2107
+ className: cx(portal2.className, content7, className),
2108
+ style: { ...portal2.style, ...style },
2109
+ children: [
2110
+ (title6 || showClose) && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: header5, children: [
2111
+ title6 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("h2", { id: titleId, className: title3, children: title6 }),
2112
+ showClose && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixPopover.Close, { className: closeButton3, "aria-label": m.close ?? "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_icons11.XIcon, { size: 16 }) })
2113
+ ] }),
2114
+ content12,
2115
+ showArrow && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixPopover.Arrow, { className: arrow, width: 12, height: 6 })
2116
+ ]
2117
+ }
2118
+ ) })
2119
+ ] });
2120
+ }
2121
+ var PopoverClose = RadixPopover.Close;
2122
+
2123
+ // src/components/DatePicker/DatePicker.tsx
2124
+ var import_jsx_runtime24 = require("react/jsx-runtime");
2125
+ var sanitize2 = (input5) => input5.replace(/\D/g, "").slice(0, 8);
2126
+ var format = (digits) => digits.length <= 4 ? digits : digits.length <= 6 ? `${digits.slice(0, 4)}-${digits.slice(4)}` : `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6)}`;
2127
+ var isDigit3 = (char) => /\d/.test(char);
2128
+ var DatePicker = /* @__PURE__ */ (0, import_react25.forwardRef)(
2129
+ function DatePicker2(props, ref) {
2130
+ const {
2131
+ value: value4,
2132
+ defaultValue,
2133
+ onValueChange,
2134
+ min,
2135
+ max,
2136
+ isDateDisabled,
2137
+ isHoliday,
2138
+ today,
2139
+ label: labelProp,
2140
+ helperText: helperText3,
2141
+ error,
2142
+ required,
2143
+ disabled,
2144
+ fullWidth,
2145
+ placeholder = "YYYY-MM-DD",
2146
+ calendarLabel: calendarLabelProp,
2147
+ invalidText: invalidTextProp,
2148
+ unavailableText: unavailableTextProp,
2149
+ incompleteText: incompleteTextProp,
2150
+ name,
2151
+ id,
2152
+ className
2153
+ } = props;
2154
+ const inputRef = (0, import_react25.useRef)(null);
2155
+ const m = useMessages();
2156
+ const label6 = labelProp ?? m.date ?? "\uB0A0\uC9DC";
2157
+ const calendarLabel = calendarLabelProp ?? m.openCalendar ?? "\uB2EC\uB825 \uC5F4\uAE30";
2158
+ const invalidText = invalidTextProp ?? m.dateInvalid ?? "\uC62C\uBC14\uB978 \uB0A0\uC9DC\uAC00 \uC544\uB2C8\uC5D0\uC694.";
2159
+ const unavailableText = unavailableTextProp ?? m.dateUnavailable ?? "\uACE0\uB97C \uC218 \uC5C6\uB294 \uB0A0\uC9DC\uC608\uC694.";
2160
+ const incompleteText = incompleteTextProp ?? m.dateIncomplete ?? "\uB0A0\uC9DC\uB97C YYYY-MM-DD \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694.";
2161
+ const [open, setOpen] = (0, import_react25.useState)(false);
2162
+ const [touched, setTouched] = (0, import_react25.useState)(false);
2163
+ const isControlled = "value" in props;
2164
+ const lastEmitted = (0, import_react25.useRef)(isControlled ? value4 ?? "" : defaultValue ?? "");
2165
+ const minDate = parseISODate(min);
2166
+ const maxDate = parseISODate(max);
2167
+ const toIso = (digits) => digits.length === 8 ? `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6)}` : "";
2168
+ const isUnavailable = (date2) => minDate !== null && compareDays(date2, minDate) < 0 || maxDate !== null && compareDays(date2, maxDate) > 0 || !!isDateDisabled?.(date2);
2169
+ const emit = (iso) => {
2170
+ if (iso === lastEmitted.current) return;
2171
+ lastEmitted.current = iso;
2172
+ onValueChange?.(iso);
2173
+ };
2174
+ const field3 = useFormattedInput({
2175
+ isControlled: false,
2176
+ value: void 0,
2177
+ defaultValue: (isControlled ? value4 : defaultValue)?.replace(/\D/g, ""),
2178
+ onValueChange: (digits) => {
2179
+ const date2 = parseISODate(toIso(digits));
2180
+ emit(date2 && !isUnavailable(date2) ? toIso(digits) : "");
2181
+ },
2182
+ sanitize: sanitize2,
2183
+ format,
2184
+ isMeaningful: isDigit3,
2185
+ inputRef
2186
+ });
2187
+ const textIso = toIso(field3.raw);
2188
+ const { setRaw } = field3;
2189
+ (0, import_react25.useEffect)(() => {
2190
+ if (!isControlled) return;
2191
+ const next = value4 ?? "";
2192
+ lastEmitted.current = next;
2193
+ if (next === textIso) return;
2194
+ const textDate = parseISODate(textIso);
2195
+ const textIsValid = textDate !== null && !isUnavailable(textDate);
2196
+ if (next === "" && !textIsValid) return;
2197
+ setRaw(next.replace(/\D/g, ""));
2198
+ }, [value4]);
2199
+ const date = parseISODate(textIso);
2200
+ const complete = field3.raw.length === 8;
2201
+ const autoError = complete ? !date ? invalidText : isUnavailable(date) ? unavailableText : null : touched && field3.raw.length > 0 ? incompleteText : null;
2202
+ const showAuto = autoError !== null && error === void 0;
2203
+ const selectedIso = date && !isUnavailable(date) ? textIso : "";
2204
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
2205
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2206
+ TextField,
2207
+ {
2208
+ ref: mergeRefs(ref, inputRef),
2209
+ id,
2210
+ label: label6,
2211
+ placeholder,
2212
+ inputMode: "numeric",
2213
+ autoComplete: "off",
2214
+ value: field3.display,
2215
+ onChange: field3.onChange,
2216
+ onKeyDown: field3.onKeyDown,
2217
+ onBlur: () => setTouched(true),
2218
+ error: error ?? autoError !== null,
2219
+ helperText: showAuto ? autoError : helperText3,
2220
+ required,
2221
+ disabled,
2222
+ fullWidth,
2223
+ rootClassName: className,
2224
+ endAdornment: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2225
+ Popover2,
2226
+ {
2227
+ open,
2228
+ onOpenChange: setOpen,
2229
+ modal: true,
2230
+ align: "end",
2231
+ "aria-label": m.calendar ?? "\uB2EC\uB825",
2232
+ onOpenAutoFocus: (event) => event.preventDefault(),
2233
+ content: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2234
+ Calendar,
2235
+ {
2236
+ value: selectedIso,
2237
+ onValueChange: (iso) => {
2238
+ setRaw(iso.replace(/\D/g, ""));
2239
+ emit(iso);
2240
+ setOpen(false);
2241
+ },
2242
+ min,
2243
+ max,
2244
+ isDateDisabled,
2245
+ isHoliday,
2246
+ today,
2247
+ initialFocus: true
2248
+ }
2249
+ ),
2250
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(IconButton, { "aria-label": calendarLabel, size: "sm", disabled, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_icons12.CalendarIcon, {}) })
2251
+ }
2252
+ )
921
2253
  }
922
- ) })
923
- ] }),
924
- name && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("input", { type: "hidden", name, value: selectedValue ?? "" }),
925
- helperText3 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
926
- ] });
927
- });
2254
+ ),
2255
+ name && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("input", { type: "hidden", name, value: selectedIso })
2256
+ ] });
2257
+ }
2258
+ );
928
2259
 
929
2260
  // src/components/Divider/Divider.tsx
930
- var import_react13 = require("react");
2261
+ var import_react26 = require("react");
931
2262
 
932
2263
  // src/components/Divider/Divider.css.ts
933
- var import_createRuntimeFn10 = require("@vanilla-extract/recipes/createRuntimeFn");
934
- var divider = /* @__PURE__ */ (0, import_createRuntimeFn10.createRuntimeFn)({ defaultClassName: "_1t3gq8v0", variantClassNames: { orientation: { horizontal: "_1t3gq8v1", vertical: "_1t3gq8v2" } }, defaultVariants: { orientation: "horizontal" }, compoundVariants: [] });
2264
+ var import_createRuntimeFn12 = require("@vanilla-extract/recipes/createRuntimeFn");
2265
+ var divider = /* @__PURE__ */ (0, import_createRuntimeFn12.createRuntimeFn)({ defaultClassName: "_1t3gq8v0", variantClassNames: { orientation: { horizontal: "_1t3gq8v1", vertical: "_1t3gq8v2" } }, defaultVariants: { orientation: "horizontal" }, compoundVariants: [] });
935
2266
  var labeled = "_1t3gq8v3";
936
2267
  var line = "_1t3gq8v4";
937
2268
 
938
2269
  // src/components/Divider/Divider.tsx
939
- var import_jsx_runtime13 = require("react/jsx-runtime");
940
- var Divider = /* @__PURE__ */ (0, import_react13.forwardRef)(function Divider2({ orientation = "horizontal", decorative, className, children, ...rest }, ref) {
2270
+ var import_jsx_runtime25 = require("react/jsx-runtime");
2271
+ var Divider = /* @__PURE__ */ (0, import_react26.forwardRef)(function Divider2({ orientation = "horizontal", decorative, className, children, ...rest }, ref) {
941
2272
  if (children && orientation === "horizontal") {
942
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { ref, className: cx(labeled, className), ...rest, children: [
943
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: line, "aria-hidden": true }),
2273
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { ref, className: cx(labeled, className), ...rest, children: [
2274
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: line, "aria-hidden": true }),
944
2275
  children,
945
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: line, "aria-hidden": true })
2276
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: line, "aria-hidden": true })
946
2277
  ] });
947
2278
  }
948
2279
  const a11y = decorative ? { role: "none" } : { role: "separator", "aria-orientation": orientation === "vertical" ? "vertical" : void 0 };
949
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { ref, className: cx(divider({ orientation }), className), ...a11y, ...rest });
2280
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { ref, className: cx(divider({ orientation }), className), ...a11y, ...rest });
950
2281
  });
951
2282
 
952
2283
  // src/components/Drawer/Drawer.tsx
953
- var Dialog = __toESM(require("@radix-ui/react-dialog"), 1);
954
- var import_icons8 = require("@bestow-ui/icons");
955
-
956
- // src/components/IconButton/IconButton.tsx
957
- var import_react14 = require("react");
958
-
959
- // src/components/IconButton/IconButton.css.ts
960
- var import_createRuntimeFn11 = require("@vanilla-extract/recipes/createRuntimeFn");
961
- var iconButton = /* @__PURE__ */ (0, import_createRuntimeFn11.createRuntimeFn)({ defaultClassName: "ip9et20", variantClassNames: { size: { sm: "ip9et21", md: "ip9et22", lg: "ip9et23" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
962
-
963
- // src/components/IconButton/IconButton.tsx
964
- var import_jsx_runtime14 = require("react/jsx-runtime");
965
- var IconButton = /* @__PURE__ */ (0, import_react14.forwardRef)(function IconButton2({ variant = "ghost", color = "neutral", size, loading, className, children, ...rest }, ref) {
966
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
967
- Button,
968
- {
969
- ref,
970
- variant,
971
- color,
972
- size,
973
- loading,
974
- className: cx(iconButton({ size }), className),
975
- ...rest,
976
- children: !loading && children
977
- }
978
- );
979
- });
2284
+ var Dialog2 = __toESM(require("@radix-ui/react-dialog"), 1);
2285
+ var import_icons13 = require("@bestow-ui/icons");
980
2286
 
981
2287
  // src/components/Drawer/Drawer.css.ts
982
- var import_createRuntimeFn12 = require("@vanilla-extract/recipes/createRuntimeFn");
983
- var body2 = "nmobyvy";
984
- var closeButton2 = "nmobyvx";
985
- var content5 = /* @__PURE__ */ (0, import_createRuntimeFn12.createRuntimeFn)({ defaultClassName: "nmobyv9", variantClassNames: { side: { right: "nmobyva", left: "nmobyvb", top: "nmobyvc", bottom: "nmobyvd" }, size: { sm: "nmobyve", md: "nmobyvf", lg: "nmobyvg" } }, defaultVariants: { side: "right", size: "md" }, compoundVariants: [[{ side: "right", size: "sm" }, "nmobyvh"], [{ side: "right", size: "md" }, "nmobyvi"], [{ side: "right", size: "lg" }, "nmobyvj"], [{ side: "left", size: "sm" }, "nmobyvk"], [{ side: "left", size: "md" }, "nmobyvl"], [{ side: "left", size: "lg" }, "nmobyvm"], [{ side: "top", size: "sm" }, "nmobyvn"], [{ side: "top", size: "md" }, "nmobyvo"], [{ side: "top", size: "lg" }, "nmobyvp"], [{ side: "bottom", size: "sm" }, "nmobyvq"], [{ side: "bottom", size: "md" }, "nmobyvr"], [{ side: "bottom", size: "lg" }, "nmobyvs"]] });
986
- var description2 = "nmobyvw";
987
- var footer2 = "nmobyvz";
988
- var header3 = "nmobyvt";
989
- var headings = "nmobyvu";
990
- var overlay = "nmobyv0";
991
- var title2 = "nmobyvv";
2288
+ var import_createRuntimeFn13 = require("@vanilla-extract/recipes/createRuntimeFn");
2289
+ var body3 = "nmobyvy";
2290
+ var closeButton4 = "nmobyvx";
2291
+ var content8 = /* @__PURE__ */ (0, import_createRuntimeFn13.createRuntimeFn)({ defaultClassName: "nmobyv9", variantClassNames: { side: { right: "nmobyva", left: "nmobyvb", top: "nmobyvc", bottom: "nmobyvd" }, size: { sm: "nmobyve", md: "nmobyvf", lg: "nmobyvg" } }, defaultVariants: { side: "right", size: "md" }, compoundVariants: [[{ side: "right", size: "sm" }, "nmobyvh"], [{ side: "right", size: "md" }, "nmobyvi"], [{ side: "right", size: "lg" }, "nmobyvj"], [{ side: "left", size: "sm" }, "nmobyvk"], [{ side: "left", size: "md" }, "nmobyvl"], [{ side: "left", size: "lg" }, "nmobyvm"], [{ side: "top", size: "sm" }, "nmobyvn"], [{ side: "top", size: "md" }, "nmobyvo"], [{ side: "top", size: "lg" }, "nmobyvp"], [{ side: "bottom", size: "sm" }, "nmobyvq"], [{ side: "bottom", size: "md" }, "nmobyvr"], [{ side: "bottom", size: "lg" }, "nmobyvs"]] });
2292
+ var description3 = "nmobyvw";
2293
+ var footer3 = "nmobyvz";
2294
+ var header6 = "nmobyvt";
2295
+ var headings2 = "nmobyvu";
2296
+ var overlay2 = "nmobyv0";
2297
+ var title4 = "nmobyvv";
992
2298
 
993
2299
  // src/components/Drawer/Drawer.tsx
994
- var import_jsx_runtime15 = require("react/jsx-runtime");
2300
+ var import_jsx_runtime26 = require("react/jsx-runtime");
995
2301
  function Drawer({
996
2302
  open,
997
2303
  defaultOpen,
@@ -1008,58 +2314,62 @@ function Drawer({
1008
2314
  className
1009
2315
  }) {
1010
2316
  const portal2 = usePortalProps();
1011
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Dialog.Root, { open, defaultOpen, onOpenChange, children: [
1012
- trigger4 && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Dialog.Trigger, { asChild: true, children: trigger4 }),
1013
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Dialog.Portal, { children: [
1014
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Dialog.Overlay, { className: cx(portal2.className, overlay), style: portal2.style }),
1015
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1016
- Dialog.Content,
2317
+ const m = useMessages();
2318
+ const focus = useReturnFocus(Boolean(trigger4));
2319
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Dialog2.Root, { open, defaultOpen, onOpenChange, children: [
2320
+ trigger4 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Dialog2.Trigger, { asChild: true, children: trigger4 }),
2321
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Dialog2.Portal, { children: [
2322
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Dialog2.Overlay, { className: cx(portal2.className, overlay2), style: portal2.style }),
2323
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2324
+ Dialog2.Content,
1017
2325
  {
1018
- className: cx(portal2.className, content5({ side, size }), className),
2326
+ className: cx(portal2.className, content8({ side, size }), className),
1019
2327
  style: portal2.style,
1020
2328
  "data-side": side ?? "right",
1021
2329
  onPointerDownOutside: closeOnOverlayClick ? void 0 : (event) => event.preventDefault(),
2330
+ onOpenAutoFocus: focus.onOpenAutoFocus,
2331
+ onCloseAutoFocus: focus.onCloseAutoFocus,
1022
2332
  ...description6 ? {} : { "aria-describedby": void 0 },
1023
2333
  children: [
1024
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: header3, children: [
1025
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: headings, children: [
1026
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Dialog.Title, { className: title2, children: title6 }),
1027
- description6 && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Dialog.Description, { className: description2, children: description6 })
2334
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: header6, children: [
2335
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: headings2, children: [
2336
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Dialog2.Title, { className: title4, children: title6 }),
2337
+ description6 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Dialog2.Description, { className: description3, children: description6 })
1028
2338
  ] }),
1029
- !hideCloseButton && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Dialog.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(IconButton, { "aria-label": "\uB2EB\uAE30", size: "sm", className: closeButton2, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_icons8.XIcon, {}) }) })
2339
+ !hideCloseButton && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Dialog2.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(IconButton, { "aria-label": m.close ?? "\uB2EB\uAE30", size: "sm", className: closeButton4, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_icons13.XIcon, {}) }) })
1030
2340
  ] }),
1031
- children && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: body2, children }),
1032
- footer6 && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: footer2, children: footer6 })
2341
+ children && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: body3, children }),
2342
+ footer6 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: footer3, children: footer6 })
1033
2343
  ]
1034
2344
  }
1035
2345
  )
1036
2346
  ] })
1037
2347
  ] });
1038
2348
  }
1039
- var DrawerClose = Dialog.Close;
2349
+ var DrawerClose = Dialog2.Close;
1040
2350
 
1041
2351
  // src/components/DropdownMenu/DropdownMenu.tsx
1042
2352
  var RadixMenu = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
1043
- var import_react15 = require("react");
2353
+ var import_react27 = require("react");
1044
2354
 
1045
2355
  // src/components/DropdownMenu/DropdownMenu.css.ts
1046
- var content6 = "_1d7ahux0";
2356
+ var content9 = "_1d7ahux0";
1047
2357
  var danger = "_1d7ahux2";
1048
2358
  var icon5 = "_1d7ahux3";
1049
- var item4 = "_1d7ahux1";
2359
+ var item5 = "_1d7ahux1";
1050
2360
  var label2 = "_1d7ahux5";
1051
2361
  var separator2 = "_1d7ahux6";
1052
2362
  var shortcut = "_1d7ahux4";
1053
2363
 
1054
2364
  // src/components/DropdownMenu/DropdownMenu.tsx
1055
- var import_jsx_runtime16 = require("react/jsx-runtime");
2365
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1056
2366
  var DropdownMenu = RadixMenu.Root;
1057
2367
  var DropdownMenuTrigger = RadixMenu.Trigger;
1058
2368
  var DropdownMenuGroup = RadixMenu.Group;
1059
- var DropdownMenuContent = /* @__PURE__ */ (0, import_react15.forwardRef)(
2369
+ var DropdownMenuContent = /* @__PURE__ */ (0, import_react27.forwardRef)(
1060
2370
  function DropdownMenuContent2({ className, style, side = "bottom", align = "start", sideOffset = 4, collisionPadding = 8, ...rest }, ref) {
1061
2371
  const portal2 = usePortalProps();
1062
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(RadixMenu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2372
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(RadixMenu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1063
2373
  RadixMenu.Content,
1064
2374
  {
1065
2375
  ref,
@@ -1067,154 +2377,39 @@ var DropdownMenuContent = /* @__PURE__ */ (0, import_react15.forwardRef)(
1067
2377
  align,
1068
2378
  sideOffset,
1069
2379
  collisionPadding,
1070
- className: cx(portal2.className, content6, className),
2380
+ className: cx(portal2.className, content9, className),
1071
2381
  style: { ...portal2.style, ...style },
1072
2382
  ...rest
1073
2383
  }
1074
2384
  ) });
1075
2385
  }
1076
2386
  );
1077
- var DropdownMenuItem = /* @__PURE__ */ (0, import_react15.forwardRef)(
1078
- function DropdownMenuItem2({ icon: icon6, shortcut: shortcut2, color = "default", className, children, ...rest }, ref) {
1079
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(RadixMenu.Item, { ref, className: cx(item4, color === "danger" && danger, className), ...rest, children: [
1080
- icon6 && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: icon5, "aria-hidden": true, children: icon6 }),
2387
+ var DropdownMenuItem = /* @__PURE__ */ (0, import_react27.forwardRef)(
2388
+ function DropdownMenuItem2({ icon: icon6, shortcut: shortcut2, color = "neutral", className, children, ...rest }, ref) {
2389
+ if (color === "default") {
2390
+ warnOnce('DropdownMenuItem \uC758 color="default" \uB294 deprecated \uC608\uC694. color="neutral" \uC744 \uC4F0\uC138\uC694 (1.0 \uC5D0\uC11C \uC81C\uAC70).');
2391
+ }
2392
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(RadixMenu.Item, { ref, className: cx(item5, color === "danger" && danger, className), ...rest, children: [
2393
+ icon6 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: icon5, "aria-hidden": true, children: icon6 }),
1081
2394
  children,
1082
- shortcut2 && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: shortcut, "aria-hidden": true, children: shortcut2 })
2395
+ shortcut2 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: shortcut, "aria-hidden": true, children: shortcut2 })
1083
2396
  ] });
1084
2397
  }
1085
2398
  );
1086
- var DropdownMenuLabel = /* @__PURE__ */ (0, import_react15.forwardRef)(
2399
+ var DropdownMenuLabel = /* @__PURE__ */ (0, import_react27.forwardRef)(
1087
2400
  function DropdownMenuLabel2({ className, ...rest }, ref) {
1088
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(RadixMenu.Label, { ref, className: cx(label2, className), ...rest });
2401
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(RadixMenu.Label, { ref, className: cx(label2, className), ...rest });
1089
2402
  }
1090
2403
  );
1091
- var DropdownMenuSeparator = /* @__PURE__ */ (0, import_react15.forwardRef)(
2404
+ var DropdownMenuSeparator = /* @__PURE__ */ (0, import_react27.forwardRef)(
1092
2405
  function DropdownMenuSeparator2({ className, ...rest }, ref) {
1093
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(RadixMenu.Separator, { ref, className: cx(separator2, className), ...rest });
2406
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(RadixMenu.Separator, { ref, className: cx(separator2, className), ...rest });
1094
2407
  }
1095
2408
  );
1096
2409
 
1097
- // src/components/Input/Input.tsx
1098
- var import_react16 = require("react");
1099
- var import_jsx_runtime17 = require("react/jsx-runtime");
1100
- var Input = /* @__PURE__ */ (0, import_react16.forwardRef)(function Input2({ size, invalid, fullWidth, startAdornment, endAdornment, rootClassName, className, disabled, ...rest }, ref) {
1101
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1102
- "div",
1103
- {
1104
- className: cx(root5({ size, fullWidth }), rootClassName),
1105
- "data-invalid": invalid || void 0,
1106
- "data-disabled": disabled || void 0,
1107
- children: [
1108
- startAdornment && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: adornment, children: startAdornment }),
1109
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1110
- "input",
1111
- {
1112
- ref,
1113
- className: cx(input2, className),
1114
- disabled,
1115
- "aria-invalid": invalid || void 0,
1116
- ...rest
1117
- }
1118
- ),
1119
- endAdornment && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: adornment, children: endAdornment })
1120
- ]
1121
- }
1122
- );
1123
- });
1124
-
1125
- // src/components/Input/TextField.tsx
1126
- var import_react17 = require("react");
1127
- var import_jsx_runtime18 = require("react/jsx-runtime");
1128
- var TextField = /* @__PURE__ */ (0, import_react17.forwardRef)(function TextField2({ label: label6, helperText: helperText3, error, required, fullWidth, id, "aria-describedby": ariaDescribedBy, ...rest }, ref) {
1129
- const generatedId = (0, import_react17.useId)();
1130
- const inputId = id ?? generatedId;
1131
- const helperId = helperText3 ? `${inputId}-helper` : void 0;
1132
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
1133
- label6 && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("label", { htmlFor: inputId, className: label, children: [
1134
- label6,
1135
- required && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
1136
- ] }),
1137
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1138
- Input,
1139
- {
1140
- ref,
1141
- id: inputId,
1142
- invalid: error,
1143
- required,
1144
- fullWidth,
1145
- "aria-describedby": cx(helperId, ariaDescribedBy) || void 0,
1146
- ...rest
1147
- }
1148
- ),
1149
- helperText3 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
1150
- ] });
1151
- });
1152
-
1153
- // src/components/Modal/Modal.tsx
1154
- var Dialog2 = __toESM(require("@radix-ui/react-dialog"), 1);
1155
- var import_icons9 = require("@bestow-ui/icons");
1156
-
1157
- // src/components/Modal/Modal.css.ts
1158
- var import_createRuntimeFn13 = require("@vanilla-extract/recipes/createRuntimeFn");
1159
- var body3 = "_1pdsmv0a";
1160
- var closeButton3 = "_1pdsmv09";
1161
- var content7 = /* @__PURE__ */ (0, import_createRuntimeFn13.createRuntimeFn)({ defaultClassName: "_1pdsmv01", variantClassNames: { size: { sm: "_1pdsmv02", md: "_1pdsmv03", lg: "_1pdsmv04" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1162
- var description3 = "_1pdsmv08";
1163
- var footer3 = "_1pdsmv0b";
1164
- var header4 = "_1pdsmv05";
1165
- var headings2 = "_1pdsmv06";
1166
- var overlay2 = "_1pdsmv00";
1167
- var title3 = "_1pdsmv07";
1168
-
1169
- // src/components/Modal/Modal.tsx
1170
- var import_jsx_runtime19 = require("react/jsx-runtime");
1171
- function Modal({
1172
- open,
1173
- defaultOpen,
1174
- onOpenChange,
1175
- trigger: trigger4,
1176
- title: title6,
1177
- description: description6,
1178
- children,
1179
- footer: footer6,
1180
- size,
1181
- hideCloseButton = false,
1182
- closeOnOverlayClick = true,
1183
- className
1184
- }) {
1185
- const portal2 = usePortalProps();
1186
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Dialog2.Root, { open, defaultOpen, onOpenChange, children: [
1187
- trigger4 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Dialog2.Trigger, { asChild: true, children: trigger4 }),
1188
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Dialog2.Portal, { children: [
1189
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Dialog2.Overlay, { className: cx(portal2.className, overlay2), style: portal2.style }),
1190
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1191
- Dialog2.Content,
1192
- {
1193
- className: cx(portal2.className, content7({ size }), className),
1194
- style: portal2.style,
1195
- onPointerDownOutside: closeOnOverlayClick ? void 0 : (event) => event.preventDefault(),
1196
- ...description6 ? {} : { "aria-describedby": void 0 },
1197
- children: [
1198
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: header4, children: [
1199
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: headings2, children: [
1200
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Dialog2.Title, { className: title3, children: title6 }),
1201
- description6 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Dialog2.Description, { className: description3, children: description6 })
1202
- ] }),
1203
- !hideCloseButton && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Dialog2.Close, { className: closeButton3, "aria-label": "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_icons9.XIcon, { size: 16 }) })
1204
- ] }),
1205
- children && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: body3, children }),
1206
- footer6 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: footer3, children: footer6 })
1207
- ]
1208
- }
1209
- )
1210
- ] })
1211
- ] });
1212
- }
1213
- var ModalClose = Dialog2.Close;
1214
-
1215
2410
  // src/components/Pagination/Pagination.tsx
1216
- var import_icons10 = require("@bestow-ui/icons");
1217
- var import_react18 = require("react");
2411
+ var import_icons14 = require("@bestow-ui/icons");
2412
+ var import_react28 = require("react");
1218
2413
 
1219
2414
  // src/components/Pagination/getPaginationItems.ts
1220
2415
  var range = (start, end) => end < start ? [] : Array.from({ length: end - start + 1 }, (_, i) => start + i);
@@ -1243,13 +2438,12 @@ function getPaginationItems(page, totalPages, siblingCount = 1, boundaryCount =
1243
2438
  // src/components/Pagination/Pagination.css.ts
1244
2439
  var import_createRuntimeFn14 = require("@vanilla-extract/recipes/createRuntimeFn");
1245
2440
  var ellipsis = "_1iraoak4";
1246
- var item5 = /* @__PURE__ */ (0, import_createRuntimeFn14.createRuntimeFn)({ defaultClassName: "_1iraoak1", variantClassNames: { size: { sm: "_1iraoak2", md: "_1iraoak3" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1247
- var list2 = "_1iraoak0";
2441
+ var item6 = /* @__PURE__ */ (0, import_createRuntimeFn14.createRuntimeFn)({ defaultClassName: "_1iraoak1", variantClassNames: { size: { sm: "_1iraoak2", md: "_1iraoak3" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
2442
+ var list3 = "_1iraoak0";
1248
2443
 
1249
2444
  // src/components/Pagination/Pagination.tsx
1250
- var import_jsx_runtime20 = require("react/jsx-runtime");
1251
- var defaultItemLabel = (type, page) => type === "previous" ? "\uC774\uC804 \uD398\uC774\uC9C0" : type === "next" ? "\uB2E4\uC74C \uD398\uC774\uC9C0" : `${page} \uD398\uC774\uC9C0`;
1252
- var Pagination = /* @__PURE__ */ (0, import_react18.forwardRef)(function Pagination2({
2445
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2446
+ var Pagination = /* @__PURE__ */ (0, import_react28.forwardRef)(function Pagination2({
1253
2447
  totalPages,
1254
2448
  page: pageProp,
1255
2449
  defaultPage = 1,
@@ -1257,12 +2451,15 @@ var Pagination = /* @__PURE__ */ (0, import_react18.forwardRef)(function Paginat
1257
2451
  siblingCount = 1,
1258
2452
  boundaryCount = 1,
1259
2453
  size,
1260
- getItemLabel = defaultItemLabel,
2454
+ getItemLabel: getItemLabelProp,
1261
2455
  className,
1262
- "aria-label": ariaLabel = "\uD398\uC774\uC9C0 \uD0D0\uC0C9",
2456
+ "aria-label": ariaLabelProp,
1263
2457
  ...rest
1264
2458
  }, ref) {
1265
- const [uncontrolledPage, setUncontrolledPage] = (0, import_react18.useState)(defaultPage);
2459
+ const [uncontrolledPage, setUncontrolledPage] = (0, import_react28.useState)(defaultPage);
2460
+ const m = useMessages();
2461
+ const ariaLabel = ariaLabelProp ?? m.pagination ?? "\uD398\uC774\uC9C0 \uD0D0\uC0C9";
2462
+ const getItemLabel = getItemLabelProp ?? ((type, n) => type === "previous" ? m.paginationPrevious ?? "\uC774\uC804 \uD398\uC774\uC9C0" : type === "next" ? m.paginationNext ?? "\uB2E4\uC74C \uD398\uC774\uC9C0" : m.paginationPage?.(n) ?? `${n} \uD398\uC774\uC9C0`);
1266
2463
  if (totalPages < 1) return null;
1267
2464
  const page = Math.min(Math.max(pageProp ?? uncontrolledPage, 1), totalPages);
1268
2465
  const goTo = (next) => {
@@ -1270,9 +2467,9 @@ var Pagination = /* @__PURE__ */ (0, import_react18.forwardRef)(function Paginat
1270
2467
  if (pageProp === void 0) setUncontrolledPage(next);
1271
2468
  onPageChange?.(next);
1272
2469
  };
1273
- const itemClass = item5({ size });
1274
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("nav", { ref, "aria-label": ariaLabel, className, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("ul", { className: list2, children: [
1275
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2470
+ const itemClass = item6({ size });
2471
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("nav", { ref, "aria-label": ariaLabel, className, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("ul", { className: list3, children: [
2472
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1276
2473
  "button",
1277
2474
  {
1278
2475
  type: "button",
@@ -1280,23 +2477,23 @@ var Pagination = /* @__PURE__ */ (0, import_react18.forwardRef)(function Paginat
1280
2477
  "aria-label": getItemLabel("previous", page - 1),
1281
2478
  disabled: page <= 1,
1282
2479
  onClick: () => goTo(page - 1),
1283
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons10.ChevronLeftIcon, { size: 16 })
2480
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_icons14.ChevronLeftIcon, { size: 16 })
1284
2481
  }
1285
2482
  ) }),
1286
2483
  getPaginationItems(page, totalPages, siblingCount, boundaryCount).map(
1287
- (item6) => typeof item6 === "number" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2484
+ (item7) => typeof item7 === "number" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1288
2485
  "button",
1289
2486
  {
1290
2487
  type: "button",
1291
2488
  className: itemClass,
1292
- "aria-label": getItemLabel("page", item6),
1293
- "aria-current": item6 === page ? "page" : void 0,
1294
- onClick: () => goTo(item6),
1295
- children: item6
2489
+ "aria-label": getItemLabel("page", item7),
2490
+ "aria-current": item7 === page ? "page" : void 0,
2491
+ onClick: () => goTo(item7),
2492
+ children: item7
1296
2493
  }
1297
- ) }, item6) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("li", { "aria-hidden": true, className: cx(itemClass, ellipsis), children: "\u2026" }, item6)
2494
+ ) }, item7) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("li", { "aria-hidden": true, className: cx(itemClass, ellipsis), children: "\u2026" }, item7)
1298
2495
  ),
1299
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2496
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1300
2497
  "button",
1301
2498
  {
1302
2499
  type: "button",
@@ -1304,87 +2501,81 @@ var Pagination = /* @__PURE__ */ (0, import_react18.forwardRef)(function Paginat
1304
2501
  "aria-label": getItemLabel("next", page + 1),
1305
2502
  disabled: page >= totalPages,
1306
2503
  onClick: () => goTo(page + 1),
1307
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons10.ChevronRightIcon, { size: 16 })
2504
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_icons14.ChevronRightIcon, { size: 16 })
1308
2505
  }
1309
2506
  ) })
1310
2507
  ] }) });
1311
2508
  });
1312
2509
 
1313
- // src/components/Popover/Popover.tsx
1314
- var RadixPopover = __toESM(require("@radix-ui/react-popover"), 1);
1315
- var import_icons11 = require("@bestow-ui/icons");
1316
- var import_react19 = require("react");
1317
-
1318
- // src/components/Popover/Popover.css.ts
1319
- var arrow = "_1j99p8x4";
1320
- var closeButton4 = "_1j99p8x3";
1321
- var content8 = "_1j99p8x0";
1322
- var header5 = "_1j99p8x1";
1323
- var title4 = "_1j99p8x2";
1324
-
1325
- // src/components/Popover/Popover.tsx
1326
- var import_jsx_runtime21 = require("react/jsx-runtime");
1327
- function Popover2({
1328
- content: content11,
1329
- children,
1330
- title: title6,
1331
- "aria-label": ariaLabel,
1332
- showClose = false,
1333
- showArrow = false,
1334
- side = "bottom",
1335
- align = "center",
1336
- open,
1337
- defaultOpen,
1338
- onOpenChange,
1339
- modal,
1340
- className,
1341
- style
1342
- }) {
1343
- const portal2 = usePortalProps();
1344
- const titleId = (0, import_react19.useId)();
1345
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(RadixPopover.Root, { open, defaultOpen, onOpenChange, modal, children: [
1346
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(RadixPopover.Trigger, { asChild: true, children }),
1347
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(RadixPopover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1348
- RadixPopover.Content,
2510
+ // src/components/PhoneNumberInput/PhoneNumberInput.tsx
2511
+ var import_react29 = require("react");
2512
+ var import_jsx_runtime29 = require("react/jsx-runtime");
2513
+ var sanitize3 = (input5) => {
2514
+ const digits = input5.replace(/\D/g, "");
2515
+ return digits.slice(0, phoneNumberMaxDigits(digits));
2516
+ };
2517
+ var isDigit4 = (char) => /\d/.test(char);
2518
+ var PhoneNumberInput = /* @__PURE__ */ (0, import_react29.forwardRef)(
2519
+ function PhoneNumberInput2(props, ref) {
2520
+ const {
2521
+ value: value4,
2522
+ defaultValue,
2523
+ onValueChange,
2524
+ label: labelProp,
2525
+ placeholder = "010-0000-0000",
2526
+ onKeyDown,
2527
+ ...rest
2528
+ } = props;
2529
+ const inputRef = (0, import_react29.useRef)(null);
2530
+ const m = useMessages();
2531
+ const label6 = labelProp ?? m.phoneNumber ?? "\uD734\uB300\uD3F0 \uBC88\uD638";
2532
+ const field3 = useFormattedInput({
2533
+ isControlled: "value" in props,
2534
+ value: value4,
2535
+ defaultValue,
2536
+ onValueChange,
2537
+ sanitize: sanitize3,
2538
+ format: formatPhoneNumber,
2539
+ isMeaningful: isDigit4,
2540
+ inputRef
2541
+ });
2542
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2543
+ TextField,
1349
2544
  {
1350
- side,
1351
- align,
1352
- sideOffset: 6,
1353
- collisionPadding: 8,
1354
- "aria-labelledby": title6 ? titleId : void 0,
1355
- "aria-label": title6 ? void 0 : ariaLabel,
1356
- className: cx(portal2.className, content8, className),
1357
- style: { ...portal2.style, ...style },
1358
- children: [
1359
- (title6 || showClose) && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: header5, children: [
1360
- title6 && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("h2", { id: titleId, className: title4, children: title6 }),
1361
- showClose && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(RadixPopover.Close, { className: closeButton4, "aria-label": "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_icons11.XIcon, { size: 16 }) })
1362
- ] }),
1363
- content11,
1364
- showArrow && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(RadixPopover.Arrow, { className: arrow, width: 12, height: 6 })
1365
- ]
2545
+ ref: mergeRefs(ref, inputRef),
2546
+ label: label6,
2547
+ placeholder,
2548
+ type: "tel",
2549
+ inputMode: "tel",
2550
+ autoComplete: "tel-national",
2551
+ value: field3.display,
2552
+ onChange: field3.onChange,
2553
+ onKeyDown: (event) => {
2554
+ field3.onKeyDown(event);
2555
+ onKeyDown?.(event);
2556
+ },
2557
+ ...rest
1366
2558
  }
1367
- ) })
1368
- ] });
1369
- }
1370
- var PopoverClose = RadixPopover.Close;
2559
+ );
2560
+ }
2561
+ );
1371
2562
 
1372
2563
  // src/components/Progress/Progress.tsx
1373
- var import_react20 = require("react");
2564
+ var import_react30 = require("react");
1374
2565
 
1375
2566
  // src/components/Progress/Progress.css.ts
1376
2567
  var import_createRuntimeFn15 = require("@vanilla-extract/recipes/createRuntimeFn");
1377
- var header6 = "_1tvkq001";
2568
+ var header7 = "_1tvkq001";
1378
2569
  var indicator = /* @__PURE__ */ (0, import_createRuntimeFn15.createRuntimeFn)({ defaultClassName: "_1tvkq008", variantClassNames: { color: { primary: "_1tvkq009", neutral: "_1tvkq00a", success: "_1tvkq00b", warning: "_1tvkq00c", danger: "_1tvkq00d" } }, defaultVariants: { color: "primary" }, compoundVariants: [] });
1379
2570
  var label3 = "_1tvkq002";
1380
- var root6 = "_1tvkq000";
2571
+ var root7 = "_1tvkq000";
1381
2572
  var track = /* @__PURE__ */ (0, import_createRuntimeFn15.createRuntimeFn)({ defaultClassName: "_1tvkq004", variantClassNames: { size: { sm: "_1tvkq005", md: "_1tvkq006", lg: "_1tvkq007" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1382
2573
  var value2 = "_1tvkq003";
1383
2574
 
1384
2575
  // src/components/Progress/Progress.tsx
1385
- var import_jsx_runtime22 = require("react/jsx-runtime");
2576
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1386
2577
  var defaultFormat = (value4, max) => `${Math.round(value4 / max * 100)}%`;
1387
- var Progress = /* @__PURE__ */ (0, import_react20.forwardRef)(function Progress2({
2578
+ var Progress = /* @__PURE__ */ (0, import_react30.forwardRef)(function Progress2({
1388
2579
  value: value4,
1389
2580
  max = 100,
1390
2581
  label: label6,
@@ -1396,17 +2587,17 @@ var Progress = /* @__PURE__ */ (0, import_react20.forwardRef)(function Progress2
1396
2587
  className,
1397
2588
  ...rest
1398
2589
  }, ref) {
1399
- const labelId = (0, import_react20.useId)();
2590
+ const labelId = (0, import_react30.useId)();
1400
2591
  const isIndeterminate = value4 === void 0 || value4 === null;
1401
2592
  const safeMax = max > 0 ? max : 100;
1402
2593
  const clamped = isIndeterminate ? 0 : Math.min(safeMax, Math.max(0, value4));
1403
2594
  const valueText = isIndeterminate ? void 0 : formatValue(clamped, safeMax);
1404
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { ref, className: cx(root6, className), ...rest, children: [
1405
- (label6 || showValue && valueText) && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: header6, children: [
1406
- label6 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { id: labelId, className: label3, children: label6 }),
1407
- showValue && valueText && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: value2, "aria-hidden": true, children: valueText })
2595
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { ref, className: cx(root7, className), ...rest, children: [
2596
+ (label6 || showValue && valueText) && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: header7, children: [
2597
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { id: labelId, className: label3, children: label6 }),
2598
+ showValue && valueText && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: value2, "aria-hidden": true, children: valueText })
1408
2599
  ] }),
1409
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2600
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1410
2601
  "div",
1411
2602
  {
1412
2603
  role: "progressbar",
@@ -1417,7 +2608,7 @@ var Progress = /* @__PURE__ */ (0, import_react20.forwardRef)(function Progress2
1417
2608
  "aria-valuenow": isIndeterminate ? void 0 : clamped,
1418
2609
  "aria-valuetext": valueText,
1419
2610
  className: track({ size }),
1420
- children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2611
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1421
2612
  "div",
1422
2613
  {
1423
2614
  className: indicator({ color }),
@@ -1432,7 +2623,7 @@ var Progress = /* @__PURE__ */ (0, import_react20.forwardRef)(function Progress2
1432
2623
 
1433
2624
  // src/components/RadioGroup/RadioGroup.tsx
1434
2625
  var RadixRadioGroup = __toESM(require("@radix-ui/react-radio-group"), 1);
1435
- var import_react21 = require("react");
2626
+ var import_react31 = require("react");
1436
2627
 
1437
2628
  // src/components/RadioGroup/RadioGroup.css.ts
1438
2629
  var import_createRuntimeFn16 = require("@vanilla-extract/recipes/createRuntimeFn");
@@ -1446,8 +2637,8 @@ var radio = /* @__PURE__ */ (0, import_createRuntimeFn16.createRuntimeFn)({ defa
1446
2637
  var text = "_1w9iwjmb";
1447
2638
 
1448
2639
  // src/components/RadioGroup/RadioGroup.tsx
1449
- var import_jsx_runtime23 = require("react/jsx-runtime");
1450
- var RadioGroup = /* @__PURE__ */ (0, import_react21.forwardRef)(function RadioGroup2(props, ref) {
2640
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2641
+ var RadioGroup = /* @__PURE__ */ (0, import_react31.forwardRef)(function RadioGroup2(props, ref) {
1451
2642
  const {
1452
2643
  options,
1453
2644
  value: value4,
@@ -1466,16 +2657,16 @@ var RadioGroup = /* @__PURE__ */ (0, import_react21.forwardRef)(function RadioGr
1466
2657
  className
1467
2658
  } = props;
1468
2659
  const isControlled = "value" in props;
1469
- const generatedId = (0, import_react21.useId)();
2660
+ const generatedId = (0, import_react31.useId)();
1470
2661
  const baseId = id ?? generatedId;
1471
2662
  const labelId = label6 ? `${baseId}-label` : void 0;
1472
2663
  const helperId = helperText3 ? `${baseId}-helper` : void 0;
1473
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: cx(field, className), children: [
1474
- label6 && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { id: labelId, className: cx(label, groupLabel), children: [
2664
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cx(field, className), children: [
2665
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { id: labelId, className: cx(label, groupLabel), children: [
1475
2666
  label6,
1476
- required && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
2667
+ required && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
1477
2668
  ] }),
1478
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2669
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1479
2670
  RadixRadioGroup.Root,
1480
2671
  {
1481
2672
  ref,
@@ -1496,8 +2687,8 @@ var RadioGroup = /* @__PURE__ */ (0, import_react21.forwardRef)(function RadioGr
1496
2687
  const itemId = `${baseId}-${option2.value}`;
1497
2688
  const descriptionId = option2.description ? `${itemId}-description` : void 0;
1498
2689
  const itemDisabled = disabled || option2.disabled;
1499
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: option({ size }), "data-disabled": itemDisabled || void 0, children: [
1500
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2690
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: option({ size }), "data-disabled": itemDisabled || void 0, children: [
2691
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1501
2692
  RadixRadioGroup.Item,
1502
2693
  {
1503
2694
  id: itemId,
@@ -1505,27 +2696,27 @@ var RadioGroup = /* @__PURE__ */ (0, import_react21.forwardRef)(function RadioGr
1505
2696
  disabled: option2.disabled,
1506
2697
  "aria-describedby": descriptionId,
1507
2698
  className: radio({ size }),
1508
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixRadioGroup.Indicator, { className: indicator2 })
2699
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(RadixRadioGroup.Indicator, { className: indicator2 })
1509
2700
  }
1510
2701
  ),
1511
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: text, children: [
1512
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: itemId, className: labelText, children: option2.label }),
1513
- option2.description && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { id: descriptionId, className: description4, children: option2.description })
2702
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: text, children: [
2703
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("label", { htmlFor: itemId, className: labelText, children: option2.label }),
2704
+ option2.description && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { id: descriptionId, className: description4, children: option2.description })
1514
2705
  ] })
1515
2706
  ] }, option2.value);
1516
2707
  })
1517
2708
  }
1518
2709
  ),
1519
- helperText3 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
2710
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
1520
2711
  ] });
1521
2712
  });
1522
2713
 
1523
2714
  // src/components/Select/Select.tsx
1524
2715
  var RadixSelect = __toESM(require("@radix-ui/react-select"), 1);
1525
- var import_react22 = require("react");
1526
- var import_icons12 = require("@bestow-ui/icons");
1527
- var import_jsx_runtime24 = require("react/jsx-runtime");
1528
- var Select = /* @__PURE__ */ (0, import_react22.forwardRef)(function Select2(props, ref) {
2716
+ var import_react32 = require("react");
2717
+ var import_icons15 = require("@bestow-ui/icons");
2718
+ var import_jsx_runtime32 = require("react/jsx-runtime");
2719
+ var Select = /* @__PURE__ */ (0, import_react32.forwardRef)(function Select2(props, ref) {
1529
2720
  const {
1530
2721
  options,
1531
2722
  value: value4,
@@ -1545,16 +2736,16 @@ var Select = /* @__PURE__ */ (0, import_react22.forwardRef)(function Select2(pro
1545
2736
  className
1546
2737
  } = props;
1547
2738
  const isControlled = "value" in props;
1548
- const generatedId = (0, import_react22.useId)();
2739
+ const generatedId = (0, import_react32.useId)();
1549
2740
  const triggerId = id ?? generatedId;
1550
2741
  const helperId = helperText3 ? `${triggerId}-helper` : void 0;
1551
2742
  const portal2 = usePortalProps();
1552
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
1553
- label6 && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("label", { htmlFor: triggerId, className: label, children: [
2743
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
2744
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("label", { htmlFor: triggerId, className: label, children: [
1554
2745
  label6,
1555
- required && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
2746
+ required && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
1556
2747
  ] }),
1557
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
2748
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1558
2749
  RadixSelect.Root,
1559
2750
  {
1560
2751
  value: isControlled ? value4 ?? "" : void 0,
@@ -1564,7 +2755,7 @@ var Select = /* @__PURE__ */ (0, import_react22.forwardRef)(function Select2(pro
1564
2755
  required,
1565
2756
  name,
1566
2757
  children: [
1567
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
2758
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1568
2759
  RadixSelect.Trigger,
1569
2760
  {
1570
2761
  ref,
@@ -1573,30 +2764,30 @@ var Select = /* @__PURE__ */ (0, import_react22.forwardRef)(function Select2(pro
1573
2764
  "aria-invalid": error || void 0,
1574
2765
  "aria-describedby": helperId,
1575
2766
  "data-invalid": error || void 0,
1576
- className: cx(root5({ size, fullWidth }), trigger2, className),
2767
+ className: cx(root3({ size, fullWidth }), trigger2, className),
1577
2768
  children: [
1578
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: value, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(RadixSelect.Value, { placeholder }) }),
1579
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(RadixSelect.Icon, { className: icon4, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_icons12.ChevronDownIcon, { size: 16 }) })
2769
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: value, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RadixSelect.Value, { placeholder }) }),
2770
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RadixSelect.Icon, { className: icon4, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_icons15.ChevronDownIcon, { size: 16 }) })
1580
2771
  ]
1581
2772
  }
1582
2773
  ),
1583
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(RadixSelect.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2774
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RadixSelect.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1584
2775
  RadixSelect.Content,
1585
2776
  {
1586
2777
  position: "popper",
1587
2778
  sideOffset: 4,
1588
2779
  collisionPadding: 8,
1589
- className: cx(portal2.className, content3),
2780
+ className: cx(portal2.className, content5),
1590
2781
  style: portal2.style,
1591
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(RadixSelect.Viewport, { className: viewport, children: options.map((option2) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
2782
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RadixSelect.Viewport, { className: viewport, children: options.map((option2) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1592
2783
  RadixSelect.Item,
1593
2784
  {
1594
2785
  value: option2.value,
1595
2786
  disabled: option2.disabled,
1596
- className: item3,
2787
+ className: item4,
1597
2788
  children: [
1598
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(RadixSelect.ItemText, { children: option2.label }),
1599
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(RadixSelect.ItemIndicator, { className: itemIndicator, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_icons12.CheckIcon, { size: 16 }) })
2789
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RadixSelect.ItemText, { children: option2.label }),
2790
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RadixSelect.ItemIndicator, { className: itemIndicator, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_icons15.CheckIcon, { size: 16 }) })
1600
2791
  ]
1601
2792
  },
1602
2793
  option2.value
@@ -1606,13 +2797,13 @@ var Select = /* @__PURE__ */ (0, import_react22.forwardRef)(function Select2(pro
1606
2797
  ]
1607
2798
  }
1608
2799
  ),
1609
- helperText3 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
2800
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
1610
2801
  ] });
1611
2802
  });
1612
2803
 
1613
2804
  // src/components/Skeleton/Skeleton.tsx
1614
2805
  var import_dynamic2 = require("@vanilla-extract/dynamic");
1615
- var import_react23 = require("react");
2806
+ var import_react33 = require("react");
1616
2807
 
1617
2808
  // src/components/Skeleton/Skeleton.css.ts
1618
2809
  var import_createRuntimeFn17 = require("@vanilla-extract/recipes/createRuntimeFn");
@@ -1622,13 +2813,13 @@ var skeleton = /* @__PURE__ */ (0, import_createRuntimeFn17.createRuntimeFn)({ d
1622
2813
  var width = "var(--_1s8datd0)";
1623
2814
 
1624
2815
  // src/components/Skeleton/Skeleton.tsx
1625
- var import_jsx_runtime25 = require("react/jsx-runtime");
2816
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1626
2817
  var toCss = (value4) => typeof value4 === "number" ? `${value4}px` : value4;
1627
- var Skeleton = /* @__PURE__ */ (0, import_react23.forwardRef)(function Skeleton2({ variant = "text", width: width2, height: height2, lines: lines2 = 1, className, style, ...rest }, ref) {
2818
+ var Skeleton = /* @__PURE__ */ (0, import_react33.forwardRef)(function Skeleton2({ variant = "text", width: width2, height: height2, lines: lines2 = 1, className, style, ...rest }, ref) {
1628
2819
  const w = toCss(width2 ?? (variant === "circle" ? 40 : "100%"));
1629
2820
  const h = toCss(height2 ?? (variant === "circle" ? w : variant === "rect" ? 100 : "1em"));
1630
2821
  if (variant === "text" && lines2 > 1) {
1631
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2822
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1632
2823
  "span",
1633
2824
  {
1634
2825
  ref,
@@ -1636,7 +2827,7 @@ var Skeleton = /* @__PURE__ */ (0, import_react23.forwardRef)(function Skeleton2
1636
2827
  className: cx(lines, className),
1637
2828
  style: { ...(0, import_dynamic2.assignInlineVars)({ [width]: w }), ...style },
1638
2829
  ...rest,
1639
- children: Array.from({ length: lines2 }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2830
+ children: Array.from({ length: lines2 }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1640
2831
  "span",
1641
2832
  {
1642
2833
  className: skeleton({ variant }),
@@ -1647,7 +2838,7 @@ var Skeleton = /* @__PURE__ */ (0, import_react23.forwardRef)(function Skeleton2
1647
2838
  }
1648
2839
  );
1649
2840
  }
1650
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2841
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1651
2842
  "span",
1652
2843
  {
1653
2844
  ref,
@@ -1661,23 +2852,23 @@ var Skeleton = /* @__PURE__ */ (0, import_react23.forwardRef)(function Skeleton2
1661
2852
 
1662
2853
  // src/components/Slider/Slider.tsx
1663
2854
  var RadixSlider = __toESM(require("@radix-ui/react-slider"), 1);
1664
- var import_react24 = require("react");
2855
+ var import_react34 = require("react");
1665
2856
 
1666
2857
  // src/components/Slider/Slider.css.ts
1667
2858
  var import_createRuntimeFn18 = require("@vanilla-extract/recipes/createRuntimeFn");
1668
2859
  var field2 = "_126mzjm0";
1669
- var header7 = "_126mzjm1";
2860
+ var header8 = "_126mzjm1";
1670
2861
  var helperText2 = "_126mzjm4";
1671
2862
  var label4 = "_126mzjm2";
1672
2863
  var range2 = "_126mzjmb";
1673
- var root7 = /* @__PURE__ */ (0, import_createRuntimeFn18.createRuntimeFn)({ defaultClassName: "_126mzjm5", variantClassNames: { size: { sm: "_126mzjm6", md: "_126mzjm7" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
2864
+ var root8 = /* @__PURE__ */ (0, import_createRuntimeFn18.createRuntimeFn)({ defaultClassName: "_126mzjm5", variantClassNames: { size: { sm: "_126mzjm6", md: "_126mzjm7" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1674
2865
  var thumb = /* @__PURE__ */ (0, import_createRuntimeFn18.createRuntimeFn)({ defaultClassName: "_126mzjmc", variantClassNames: { size: { sm: "_126mzjmd", md: "_126mzjme" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1675
2866
  var track2 = /* @__PURE__ */ (0, import_createRuntimeFn18.createRuntimeFn)({ defaultClassName: "_126mzjm8", variantClassNames: { size: { sm: "_126mzjm9", md: "_126mzjma" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1676
2867
  var value3 = "_126mzjm3";
1677
2868
 
1678
2869
  // src/components/Slider/Slider.tsx
1679
- var import_jsx_runtime26 = require("react/jsx-runtime");
1680
- var Slider = /* @__PURE__ */ (0, import_react24.forwardRef)(function Slider2(props, ref) {
2870
+ var import_jsx_runtime34 = require("react/jsx-runtime");
2871
+ var Slider = /* @__PURE__ */ (0, import_react34.forwardRef)(function Slider2(props, ref) {
1681
2872
  const {
1682
2873
  value: value4,
1683
2874
  defaultValue,
@@ -1689,19 +2880,21 @@ var Slider = /* @__PURE__ */ (0, import_react24.forwardRef)(function Slider2(pro
1689
2880
  helperText: helperText3,
1690
2881
  showValue,
1691
2882
  formatValue = String,
1692
- thumbLabels = ["\uCD5C\uC18C", "\uCD5C\uB300"],
2883
+ thumbLabels: thumbLabelsProp,
1693
2884
  size,
1694
2885
  id,
1695
2886
  className,
1696
2887
  disabled,
1697
2888
  ...rest
1698
2889
  } = props;
1699
- const generatedId = (0, import_react24.useId)();
2890
+ const m = useMessages();
2891
+ const thumbLabels = thumbLabelsProp ?? [m.rangeStart ?? "\uCD5C\uC18C", m.rangeEnd ?? "\uCD5C\uB300"];
2892
+ const generatedId = (0, import_react34.useId)();
1700
2893
  const baseId = id ?? generatedId;
1701
2894
  const labelId = `${baseId}-label`;
1702
2895
  const helperId = `${baseId}-helper`;
1703
2896
  const isControlled = "value" in props;
1704
- const [innerValue, setInnerValue] = (0, import_react24.useState)(defaultValue ?? [min]);
2897
+ const [innerValue, setInnerValue] = (0, import_react34.useState)(defaultValue ?? [min]);
1705
2898
  const current2 = isControlled ? value4 ?? [min] : innerValue;
1706
2899
  const isRange = current2.length > 1;
1707
2900
  const handleChange = (next) => {
@@ -1709,12 +2902,12 @@ var Slider = /* @__PURE__ */ (0, import_react24.forwardRef)(function Slider2(pro
1709
2902
  onValueChange?.(next);
1710
2903
  };
1711
2904
  const valueText = current2.map(formatValue).join(" \u2013 ");
1712
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: cx(field2, className), children: [
1713
- (label6 || showValue) && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: header7, children: [
1714
- label6 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { id: labelId, className: label4, children: label6 }),
1715
- showValue && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: value3, "aria-hidden": true, children: valueText })
2905
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: cx(field2, className), children: [
2906
+ (label6 || showValue) && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: header8, children: [
2907
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { id: labelId, className: label4, children: label6 }),
2908
+ showValue && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: value3, "aria-hidden": true, children: valueText })
1716
2909
  ] }),
1717
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2910
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1718
2911
  RadixSlider.Root,
1719
2912
  {
1720
2913
  ref,
@@ -1724,13 +2917,13 @@ var Slider = /* @__PURE__ */ (0, import_react24.forwardRef)(function Slider2(pro
1724
2917
  disabled,
1725
2918
  value: current2,
1726
2919
  onValueChange: handleChange,
1727
- className: root7({ size }),
2920
+ className: root8({ size }),
1728
2921
  ...rest,
1729
2922
  children: [
1730
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(RadixSlider.Track, { className: track2({ size }), children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(RadixSlider.Range, { className: range2 }) }),
2923
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(RadixSlider.Track, { className: track2({ size }), children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(RadixSlider.Range, { className: range2 }) }),
1731
2924
  current2.map((thumbValue, index) => {
1732
2925
  const thumbLabelId = `${baseId}-thumb-${index}`;
1733
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2926
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1734
2927
  RadixSlider.Thumb,
1735
2928
  {
1736
2929
  className: thumb({ size }),
@@ -1745,45 +2938,45 @@ var Slider = /* @__PURE__ */ (0, import_react24.forwardRef)(function Slider2(pro
1745
2938
  ]
1746
2939
  }
1747
2940
  ),
1748
- isRange && current2.map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { id: `${baseId}-thumb-${index}`, hidden: true, children: [
2941
+ isRange && current2.map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { id: `${baseId}-thumb-${index}`, hidden: true, children: [
1749
2942
  label6 ? "" : ariaLabel ? `${ariaLabel} ` : "",
1750
2943
  thumbLabels[index] ?? `${index + 1}`
1751
2944
  ] }, index)),
1752
- helperText3 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { id: helperId, className: helperText2, children: helperText3 })
2945
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { id: helperId, className: helperText2, children: helperText3 })
1753
2946
  ] });
1754
2947
  });
1755
2948
 
1756
2949
  // src/components/Stack/Stack.tsx
1757
- var import_react25 = require("react");
2950
+ var import_react35 = require("react");
1758
2951
 
1759
2952
  // src/components/Stack/Stack.css.ts
1760
2953
  var import_createRuntimeFn19 = require("@vanilla-extract/recipes/createRuntimeFn");
1761
2954
  var stack = /* @__PURE__ */ (0, import_createRuntimeFn19.createRuntimeFn)({ defaultClassName: "_1jz9hj90", variantClassNames: { direction: { row: "_1jz9hj91", column: "_1jz9hj92", "row-reverse": "_1jz9hj93", "column-reverse": "_1jz9hj94" }, gap: { "0": "_1jz9hj95", "1": "_1jz9hj96", "2": "_1jz9hj97", "3": "_1jz9hj98", "4": "_1jz9hj99", "5": "_1jz9hj9a", "6": "_1jz9hj9b", "8": "_1jz9hj9c", "10": "_1jz9hj9d", "12": "_1jz9hj9e", "16": "_1jz9hj9f" }, align: { start: "_1jz9hj9g", center: "_1jz9hj9h", end: "_1jz9hj9i", stretch: "_1jz9hj9j", baseline: "_1jz9hj9k" }, justify: { start: "_1jz9hj9l", center: "_1jz9hj9m", end: "_1jz9hj9n", between: "_1jz9hj9o", around: "_1jz9hj9p", evenly: "_1jz9hj9q" }, wrap: { true: "_1jz9hj9r" } }, defaultVariants: { direction: "column" }, compoundVariants: [] });
1762
2955
 
1763
2956
  // src/components/Stack/Stack.tsx
1764
- var import_jsx_runtime27 = require("react/jsx-runtime");
1765
- var Stack = /* @__PURE__ */ (0, import_react25.forwardRef)(function Stack2({ as: Component = "div", direction, gap, align, justify, wrap, className, ...rest }, ref) {
1766
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Component, { ref, className: cx(stack({ direction, gap, align, justify, wrap }), className), ...rest });
2957
+ var import_jsx_runtime35 = require("react/jsx-runtime");
2958
+ var Stack = /* @__PURE__ */ (0, import_react35.forwardRef)(function Stack2({ as: Component = "div", direction, gap, align, justify, wrap, className, ...rest }, ref) {
2959
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Component, { ref, className: cx(stack({ direction, gap, align, justify, wrap }), className), ...rest });
1767
2960
  });
1768
2961
 
1769
2962
  // src/components/Switch/Switch.tsx
1770
2963
  var RadixSwitch = __toESM(require("@radix-ui/react-switch"), 1);
1771
- var import_react26 = require("react");
2964
+ var import_react36 = require("react");
1772
2965
 
1773
2966
  // src/components/Switch/Switch.css.ts
1774
2967
  var import_createRuntimeFn20 = require("@vanilla-extract/recipes/createRuntimeFn");
1775
2968
  var label5 = "o33ul29";
1776
- var root8 = /* @__PURE__ */ (0, import_createRuntimeFn20.createRuntimeFn)({ defaultClassName: "o33ul20", variantClassNames: { size: { sm: "o33ul21", md: "o33ul22" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
2969
+ var root9 = /* @__PURE__ */ (0, import_createRuntimeFn20.createRuntimeFn)({ defaultClassName: "o33ul20", variantClassNames: { size: { sm: "o33ul21", md: "o33ul22" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1777
2970
  var thumb2 = /* @__PURE__ */ (0, import_createRuntimeFn20.createRuntimeFn)({ defaultClassName: "o33ul26", variantClassNames: { size: { sm: "o33ul27", md: "o33ul28" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1778
2971
  var track3 = /* @__PURE__ */ (0, import_createRuntimeFn20.createRuntimeFn)({ defaultClassName: "o33ul23", variantClassNames: { size: { sm: "o33ul24", md: "o33ul25" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1779
2972
 
1780
2973
  // src/components/Switch/Switch.tsx
1781
- var import_jsx_runtime28 = require("react/jsx-runtime");
1782
- var Switch = /* @__PURE__ */ (0, import_react26.forwardRef)(function Switch2({ label: label6, size, id, className, disabled, "aria-label": ariaLabel, ...rest }, ref) {
1783
- const generatedId = (0, import_react26.useId)();
2974
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2975
+ var Switch = /* @__PURE__ */ (0, import_react36.forwardRef)(function Switch2({ label: label6, size, id, className, disabled, "aria-label": ariaLabel, ...rest }, ref) {
2976
+ const generatedId = (0, import_react36.useId)();
1784
2977
  const switchId = id ?? generatedId;
1785
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("span", { className: cx(root8({ size }), className), "data-disabled": disabled || void 0, children: [
1786
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2978
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: cx(root9({ size }), className), "data-disabled": disabled || void 0, children: [
2979
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1787
2980
  RadixSwitch.Root,
1788
2981
  {
1789
2982
  ref,
@@ -1792,28 +2985,28 @@ var Switch = /* @__PURE__ */ (0, import_react26.forwardRef)(function Switch2({ l
1792
2985
  "aria-label": ariaLabel,
1793
2986
  className: track3({ size }),
1794
2987
  ...rest,
1795
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(RadixSwitch.Thumb, { className: thumb2({ size }) })
2988
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(RadixSwitch.Thumb, { className: thumb2({ size }) })
1796
2989
  }
1797
2990
  ),
1798
- label6 && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: switchId, className: label5, children: label6 })
2991
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("label", { htmlFor: switchId, className: label5, children: label6 })
1799
2992
  ] });
1800
2993
  });
1801
2994
 
1802
2995
  // src/components/Table/Table.tsx
1803
- var import_react27 = require("react");
1804
- var import_icons13 = require("@bestow-ui/icons");
2996
+ var import_react37 = require("react");
2997
+ var import_icons16 = require("@bestow-ui/icons");
1805
2998
 
1806
2999
  // src/components/Table/Table.css.ts
1807
3000
  var import_createRuntimeFn21 = require("@vanilla-extract/recipes/createRuntimeFn");
1808
3001
  var body4 = "l3ploy5";
1809
3002
  var caption = "l3ploy2";
1810
- var cell = /* @__PURE__ */ (0, import_createRuntimeFn21.createRuntimeFn)({ defaultClassName: "l3ploy9", variantClassNames: { size: { sm: "l3ploya", md: "l3ployb" }, align: { left: "l3ployc", center: "l3ployd", right: "l3ploye" } }, defaultVariants: { size: "md", align: "left" }, compoundVariants: [] });
3003
+ var cell2 = /* @__PURE__ */ (0, import_createRuntimeFn21.createRuntimeFn)({ defaultClassName: "l3ploy9", variantClassNames: { size: { sm: "l3ploya", md: "l3ployb" }, align: { left: "l3ployc", center: "l3ployd", right: "l3ploye" } }, defaultVariants: { size: "md", align: "left" }, compoundVariants: [] });
1811
3004
  var container = "l3ploy0";
1812
3005
  var footer4 = "l3ploy7";
1813
3006
  var footerCell = "l3ployg";
1814
3007
  var head = "l3ployf";
1815
- var header8 = "l3ploy3";
1816
- var row = "l3ploy8";
3008
+ var header9 = "l3ploy3";
3009
+ var row3 = "l3ploy8";
1817
3010
  var sortButton = "l3ployh";
1818
3011
  var sortIcon = "l3ployi";
1819
3012
  var stickyHeader = "l3ploy4";
@@ -1821,10 +3014,10 @@ var striped = "l3ploy6";
1821
3014
  var table = "l3ploy1";
1822
3015
 
1823
3016
  // src/components/Table/Table.tsx
1824
- var import_jsx_runtime29 = require("react/jsx-runtime");
1825
- var TableSizeContext = /* @__PURE__ */ (0, import_react27.createContext)("md");
1826
- var TableSectionContext = /* @__PURE__ */ (0, import_react27.createContext)("body");
1827
- var Table = /* @__PURE__ */ (0, import_react27.forwardRef)(function Table2({
3017
+ var import_jsx_runtime37 = require("react/jsx-runtime");
3018
+ var TableSizeContext = /* @__PURE__ */ (0, import_react37.createContext)("md");
3019
+ var TableSectionContext = /* @__PURE__ */ (0, import_react37.createContext)("body");
3020
+ var Table = /* @__PURE__ */ (0, import_react37.forwardRef)(function Table2({
1828
3021
  size = "md",
1829
3022
  striped: striped2,
1830
3023
  stickyHeader: stickyHeader2,
@@ -1836,8 +3029,8 @@ var Table = /* @__PURE__ */ (0, import_react27.forwardRef)(function Table2({
1836
3029
  children,
1837
3030
  ...rest
1838
3031
  }, ref) {
1839
- const captionId = (0, import_react27.useId)();
1840
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(TableSizeContext.Provider, { value: size, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3032
+ const captionId = (0, import_react37.useId)();
3033
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(TableSizeContext.Provider, { value: size, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1841
3034
  "div",
1842
3035
  {
1843
3036
  className: cx(container, containerClassName),
@@ -1846,7 +3039,7 @@ var Table = /* @__PURE__ */ (0, import_react27.forwardRef)(function Table2({
1846
3039
  role: "region",
1847
3040
  "aria-labelledby": caption2 ? captionId : void 0,
1848
3041
  "aria-label": caption2 ? void 0 : ariaLabel,
1849
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
3042
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
1850
3043
  "table",
1851
3044
  {
1852
3045
  ref,
@@ -1854,7 +3047,7 @@ var Table = /* @__PURE__ */ (0, import_react27.forwardRef)(function Table2({
1854
3047
  "aria-label": caption2 ? void 0 : ariaLabel,
1855
3048
  ...rest,
1856
3049
  children: [
1857
- caption2 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("caption", { id: captionId, className: caption, children: caption2 }),
3050
+ caption2 && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("caption", { id: captionId, className: caption, children: caption2 }),
1858
3051
  children
1859
3052
  ]
1860
3053
  }
@@ -1862,57 +3055,57 @@ var Table = /* @__PURE__ */ (0, import_react27.forwardRef)(function Table2({
1862
3055
  }
1863
3056
  ) });
1864
3057
  });
1865
- var TableHeader = /* @__PURE__ */ (0, import_react27.forwardRef)(
3058
+ var TableHeader = /* @__PURE__ */ (0, import_react37.forwardRef)(
1866
3059
  function TableHeader2({ className, ...rest }, ref) {
1867
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(TableSectionContext.Provider, { value: "header", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("thead", { ref, className: cx(header8, className), ...rest }) });
3060
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(TableSectionContext.Provider, { value: "header", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("thead", { ref, className: cx(header9, className), ...rest }) });
1868
3061
  }
1869
3062
  );
1870
- var TableBody = /* @__PURE__ */ (0, import_react27.forwardRef)(
3063
+ var TableBody = /* @__PURE__ */ (0, import_react37.forwardRef)(
1871
3064
  function TableBody2({ className, ...rest }, ref) {
1872
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(TableSectionContext.Provider, { value: "body", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("tbody", { ref, className: cx(body4, className), ...rest }) });
3065
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(TableSectionContext.Provider, { value: "body", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("tbody", { ref, className: cx(body4, className), ...rest }) });
1873
3066
  }
1874
3067
  );
1875
- var TableFooter = /* @__PURE__ */ (0, import_react27.forwardRef)(
3068
+ var TableFooter = /* @__PURE__ */ (0, import_react37.forwardRef)(
1876
3069
  function TableFooter2({ className, ...rest }, ref) {
1877
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(TableSectionContext.Provider, { value: "footer", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("tfoot", { ref, className: cx(footer4, className), ...rest }) });
3070
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(TableSectionContext.Provider, { value: "footer", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("tfoot", { ref, className: cx(footer4, className), ...rest }) });
1878
3071
  }
1879
3072
  );
1880
- var TableRow = /* @__PURE__ */ (0, import_react27.forwardRef)(function TableRow2({ selected, className, ...rest }, ref) {
1881
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("tr", { ref, className: cx(row, className), "data-state": selected ? "selected" : void 0, ...rest });
3073
+ var TableRow = /* @__PURE__ */ (0, import_react37.forwardRef)(function TableRow2({ selected, className, ...rest }, ref) {
3074
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("tr", { ref, className: cx(row3, className), "data-state": selected ? "selected" : void 0, ...rest });
1882
3075
  });
1883
- var TableHead = /* @__PURE__ */ (0, import_react27.forwardRef)(function TableHead2({ align, sortDirection, onSort, scope, className, children, ...rest }, ref) {
1884
- const size = (0, import_react27.useContext)(TableSizeContext);
1885
- const section = (0, import_react27.useContext)(TableSectionContext);
3076
+ var TableHead = /* @__PURE__ */ (0, import_react37.forwardRef)(function TableHead2({ align, sortDirection, onSort, scope, className, children, ...rest }, ref) {
3077
+ const size = (0, import_react37.useContext)(TableSizeContext);
3078
+ const section = (0, import_react37.useContext)(TableSectionContext);
1886
3079
  const sortable = onSort !== void 0;
1887
3080
  const direction = sortDirection ?? "none";
1888
- const SortIcon = direction === "descending" ? import_icons13.ArrowDownIcon : import_icons13.ArrowUpIcon;
1889
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3081
+ const SortIcon = direction === "descending" ? import_icons16.ArrowDownIcon : import_icons16.ArrowUpIcon;
3082
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1890
3083
  "th",
1891
3084
  {
1892
3085
  ref,
1893
3086
  scope: scope ?? (section === "header" ? "col" : "row"),
1894
3087
  "aria-sort": sortable && direction !== "none" ? direction : void 0,
1895
3088
  className: cx(
1896
- cell({ size, align }),
3089
+ cell2({ size, align }),
1897
3090
  section === "header" ? head : section === "footer" ? footerCell : void 0,
1898
3091
  className
1899
3092
  ),
1900
3093
  ...rest,
1901
- children: sortable ? /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("button", { type: "button", className: sortButton, onClick: onSort, children: [
3094
+ children: sortable ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("button", { type: "button", className: sortButton, onClick: onSort, children: [
1902
3095
  children,
1903
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SortIcon, { size: 14, className: sortIcon, "data-active": direction !== "none", "aria-hidden": true })
3096
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SortIcon, { size: 14, className: sortIcon, "data-active": direction !== "none", "aria-hidden": true })
1904
3097
  ] }) : children
1905
3098
  }
1906
3099
  );
1907
3100
  });
1908
- var TableCell = /* @__PURE__ */ (0, import_react27.forwardRef)(function TableCell2({ align, className, ...rest }, ref) {
1909
- const size = (0, import_react27.useContext)(TableSizeContext);
1910
- const section = (0, import_react27.useContext)(TableSectionContext);
1911
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3101
+ var TableCell = /* @__PURE__ */ (0, import_react37.forwardRef)(function TableCell2({ align, className, ...rest }, ref) {
3102
+ const size = (0, import_react37.useContext)(TableSizeContext);
3103
+ const section = (0, import_react37.useContext)(TableSectionContext);
3104
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1912
3105
  "td",
1913
3106
  {
1914
3107
  ref,
1915
- className: cx(cell({ size, align }), section === "footer" && footerCell, className),
3108
+ className: cx(cell2({ size, align }), section === "footer" && footerCell, className),
1916
3109
  ...rest
1917
3110
  }
1918
3111
  );
@@ -1920,35 +3113,35 @@ var TableCell = /* @__PURE__ */ (0, import_react27.forwardRef)(function TableCel
1920
3113
 
1921
3114
  // src/components/Tabs/Tabs.tsx
1922
3115
  var RadixTabs = __toESM(require("@radix-ui/react-tabs"), 1);
1923
- var import_react28 = require("react");
3116
+ var import_react38 = require("react");
1924
3117
 
1925
3118
  // src/components/Tabs/Tabs.css.ts
1926
3119
  var import_createRuntimeFn22 = require("@vanilla-extract/recipes/createRuntimeFn");
1927
- var content9 = "fvhbtda";
1928
- var list3 = /* @__PURE__ */ (0, import_createRuntimeFn22.createRuntimeFn)({ defaultClassName: "fvhbtd0", variantClassNames: { variant: { line: "fvhbtd1", soft: "fvhbtd2" } }, defaultVariants: { variant: "line" }, compoundVariants: [] });
3120
+ var content10 = "fvhbtda";
3121
+ var list4 = /* @__PURE__ */ (0, import_createRuntimeFn22.createRuntimeFn)({ defaultClassName: "fvhbtd0", variantClassNames: { variant: { line: "fvhbtd1", soft: "fvhbtd2" } }, defaultVariants: { variant: "line" }, compoundVariants: [] });
1929
3122
  var trigger3 = /* @__PURE__ */ (0, import_createRuntimeFn22.createRuntimeFn)({ defaultClassName: "fvhbtd3", variantClassNames: { variant: { line: "fvhbtd4", soft: "fvhbtd5" }, size: { sm: "fvhbtd6", md: "fvhbtd7" } }, defaultVariants: { variant: "line", size: "md" }, compoundVariants: [[{ variant: "soft", size: "sm" }, "fvhbtd8"], [{ variant: "soft", size: "md" }, "fvhbtd9"]] });
1930
3123
 
1931
3124
  // src/components/Tabs/Tabs.tsx
1932
- var import_jsx_runtime30 = require("react/jsx-runtime");
1933
- var TabsStyleContext = /* @__PURE__ */ (0, import_react28.createContext)({ variant: "line", size: "md" });
1934
- var Tabs = /* @__PURE__ */ (0, import_react28.forwardRef)(function Tabs2({ variant = "line", size = "md", ...props }, ref) {
3125
+ var import_jsx_runtime38 = require("react/jsx-runtime");
3126
+ var TabsStyleContext = /* @__PURE__ */ (0, import_react38.createContext)({ variant: "line", size: "md" });
3127
+ var Tabs = /* @__PURE__ */ (0, import_react38.forwardRef)(function Tabs2({ variant = "line", size = "md", ...props }, ref) {
1935
3128
  const controlled = "value" in props ? { value: props.value ?? "" } : {};
1936
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(TabsStyleContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(RadixTabs.Root, { ref, ...props, ...controlled }) });
3129
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(TabsStyleContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(RadixTabs.Root, { ref, ...props, ...controlled }) });
1937
3130
  });
1938
- var TabsList = /* @__PURE__ */ (0, import_react28.forwardRef)(function TabsList2({ className, ...rest }, ref) {
1939
- const { variant } = (0, import_react28.useContext)(TabsStyleContext);
1940
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(RadixTabs.List, { ref, className: cx(list3({ variant }), className), ...rest });
3131
+ var TabsList = /* @__PURE__ */ (0, import_react38.forwardRef)(function TabsList2({ className, ...rest }, ref) {
3132
+ const { variant } = (0, import_react38.useContext)(TabsStyleContext);
3133
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(RadixTabs.List, { ref, className: cx(list4({ variant }), className), ...rest });
1941
3134
  });
1942
- var TabsTrigger = /* @__PURE__ */ (0, import_react28.forwardRef)(function TabsTrigger2({ className, ...rest }, ref) {
1943
- const { variant, size } = (0, import_react28.useContext)(TabsStyleContext);
1944
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(RadixTabs.Trigger, { ref, className: cx(trigger3({ variant, size }), className), ...rest });
3135
+ var TabsTrigger = /* @__PURE__ */ (0, import_react38.forwardRef)(function TabsTrigger2({ className, ...rest }, ref) {
3136
+ const { variant, size } = (0, import_react38.useContext)(TabsStyleContext);
3137
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(RadixTabs.Trigger, { ref, className: cx(trigger3({ variant, size }), className), ...rest });
1945
3138
  });
1946
- var TabsContent = /* @__PURE__ */ (0, import_react28.forwardRef)(function TabsContent2({ className, ...rest }, ref) {
1947
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(RadixTabs.Content, { ref, className: cx(content9, className), ...rest });
3139
+ var TabsContent = /* @__PURE__ */ (0, import_react38.forwardRef)(function TabsContent2({ className, ...rest }, ref) {
3140
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(RadixTabs.Content, { ref, className: cx(content10, className), ...rest });
1948
3141
  });
1949
3142
 
1950
3143
  // src/components/Textarea/Textarea.tsx
1951
- var import_react29 = require("react");
3144
+ var import_react39 = require("react");
1952
3145
 
1953
3146
  // src/components/Textarea/Textarea.css.ts
1954
3147
  var import_createRuntimeFn23 = require("@vanilla-extract/recipes/createRuntimeFn");
@@ -1959,9 +3152,9 @@ var footer5 = "_1koawa8";
1959
3152
  var textarea = /* @__PURE__ */ (0, import_createRuntimeFn23.createRuntimeFn)({ defaultClassName: "_1koawa0", variantClassNames: { size: { sm: "_1koawa1", md: "_1koawa2", lg: "_1koawa3" }, resize: { none: "_1koawa4", vertical: "_1koawa5", both: "_1koawa6" } }, defaultVariants: { size: "md", resize: "vertical" }, compoundVariants: [] });
1960
3153
 
1961
3154
  // src/components/Textarea/Textarea.tsx
1962
- var import_jsx_runtime31 = require("react/jsx-runtime");
1963
- var useIsomorphicLayoutEffect = typeof window !== "undefined" ? import_react29.useLayoutEffect : import_react29.useEffect;
1964
- var Textarea = /* @__PURE__ */ (0, import_react29.forwardRef)(function Textarea2({
3155
+ var import_jsx_runtime39 = require("react/jsx-runtime");
3156
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? import_react39.useLayoutEffect : import_react39.useEffect;
3157
+ var Textarea = /* @__PURE__ */ (0, import_react39.forwardRef)(function Textarea2({
1965
3158
  label: label6,
1966
3159
  helperText: helperText3,
1967
3160
  error,
@@ -1982,13 +3175,13 @@ var Textarea = /* @__PURE__ */ (0, import_react29.forwardRef)(function Textarea2
1982
3175
  "aria-describedby": ariaDescribedBy,
1983
3176
  ...rest
1984
3177
  }, ref) {
1985
- const generatedId = (0, import_react29.useId)();
3178
+ const generatedId = (0, import_react39.useId)();
1986
3179
  const textareaId = id ?? generatedId;
1987
3180
  const helperId = helperText3 ? `${textareaId}-helper` : void 0;
1988
- const innerRef = (0, import_react29.useRef)(null);
1989
- const [uncontrolledLength, setUncontrolledLength] = (0, import_react29.useState)(() => String(defaultValue ?? "").length);
3181
+ const innerRef = (0, import_react39.useRef)(null);
3182
+ const [uncontrolledLength, setUncontrolledLength] = (0, import_react39.useState)(() => String(defaultValue ?? "").length);
1990
3183
  const length = value4 !== void 0 ? String(value4).length : uncontrolledLength;
1991
- const fitHeight = (0, import_react29.useCallback)(() => {
3184
+ const fitHeight = (0, import_react39.useCallback)(() => {
1992
3185
  const el = innerRef.current;
1993
3186
  if (!autoResize || !el) return;
1994
3187
  el.style.height = "auto";
@@ -2001,12 +3194,12 @@ var Textarea = /* @__PURE__ */ (0, import_react29.forwardRef)(function Textarea2
2001
3194
  fitHeight();
2002
3195
  onChange?.(event);
2003
3196
  };
2004
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
2005
- label6 && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("label", { htmlFor: textareaId, className: label, children: [
3197
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
3198
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("label", { htmlFor: textareaId, className: label, children: [
2006
3199
  label6,
2007
- required && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
3200
+ required && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
2008
3201
  ] }),
2009
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
3202
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2010
3203
  "textarea",
2011
3204
  {
2012
3205
  ref: mergeRefs(innerRef, ref),
@@ -2028,49 +3221,57 @@ var Textarea = /* @__PURE__ */ (0, import_react29.forwardRef)(function Textarea2
2028
3221
  ...rest
2029
3222
  }
2030
3223
  ),
2031
- (helperText3 || showCount) && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: footer5, children: [
2032
- helperText3 && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 }),
2033
- showCount && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: cx(count, maxLength !== void 0 && length >= maxLength && countOver), children: maxLength !== void 0 ? `${length}/${maxLength}` : length })
3224
+ (helperText3 || showCount) && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: footer5, children: [
3225
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 }),
3226
+ showCount && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: cx(count, maxLength !== void 0 && length >= maxLength && countOver), children: maxLength !== void 0 ? `${length}/${maxLength}` : length })
2034
3227
  ] })
2035
3228
  ] });
2036
3229
  });
2037
3230
 
2038
3231
  // src/components/Toast/Toast.tsx
2039
3232
  var RadixToast = __toESM(require("@radix-ui/react-toast"), 1);
2040
- var import_react30 = require("react");
2041
- var import_icons14 = require("@bestow-ui/icons");
3233
+ var import_react40 = require("react");
3234
+ var import_icons17 = require("@bestow-ui/icons");
2042
3235
 
2043
3236
  // src/components/Toast/Toast.css.ts
2044
3237
  var import_createRuntimeFn24 = require("@vanilla-extract/recipes/createRuntimeFn");
2045
- var action2 = "_1g11zvx8";
2046
- var close = "_1g11zvx9";
2047
- var description5 = "_1g11zvx7";
2048
- var title5 = "_1g11zvx6";
2049
- var toast = /* @__PURE__ */ (0, import_createRuntimeFn24.createRuntimeFn)({ defaultClassName: "_1g11zvx1", variantClassNames: { variant: { "default": "_1g11zvx2", success: "_1g11zvx3", warning: "_1g11zvx4", danger: "_1g11zvx5" } }, defaultVariants: { variant: "default" }, compoundVariants: [] });
3238
+ var action2 = "_1g11zvx9";
3239
+ var close = "_1g11zvxa";
3240
+ var description5 = "_1g11zvx8";
3241
+ var title5 = "_1g11zvx7";
3242
+ var toast = /* @__PURE__ */ (0, import_createRuntimeFn24.createRuntimeFn)({ defaultClassName: "_1g11zvx1", variantClassNames: { color: { primary: "_1g11zvx2", neutral: "_1g11zvx3", success: "_1g11zvx4", warning: "_1g11zvx5", danger: "_1g11zvx6" } }, defaultVariants: { color: "neutral" }, compoundVariants: [] });
2050
3243
  var viewport2 = "_1g11zvx0";
2051
3244
 
2052
3245
  // src/components/Toast/Toast.tsx
2053
- var import_jsx_runtime32 = require("react/jsx-runtime");
3246
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2054
3247
  var REMOVE_DELAY = 500;
2055
- var ToastContext = /* @__PURE__ */ (0, import_react30.createContext)(null);
2056
- function ToastProvider({ children, duration = 5e3, label: label6 = "\uC54C\uB9BC" }) {
2057
- const [toasts, setToasts] = (0, import_react30.useState)([]);
2058
- const nextId = (0, import_react30.useRef)(0);
3248
+ var ToastContext = /* @__PURE__ */ (0, import_react40.createContext)(null);
3249
+ function ToastProvider({ children, duration = 5e3, label: labelProp }) {
3250
+ const m = useMessages();
3251
+ const label6 = labelProp ?? m.notifications ?? "\uC54C\uB9BC";
3252
+ const [toasts, setToasts] = (0, import_react40.useState)([]);
3253
+ const nextId = (0, import_react40.useRef)(0);
2059
3254
  const portal2 = usePortalProps();
2060
- const toast2 = (0, import_react30.useCallback)((options) => {
3255
+ const toast2 = (0, import_react40.useCallback)(({ variant, ...options }) => {
3256
+ if (variant !== void 0) {
3257
+ warnOnce(
3258
+ 'toast() \uC758 variant \uB294 deprecated \uC608\uC694. color \uB97C \uC4F0\uC138\uC694 (variant "default" \u2192 color "neutral", 1.0 \uC5D0\uC11C \uC81C\uAC70).'
3259
+ );
3260
+ }
3261
+ const color = options.color ?? (variant === "default" ? "neutral" : variant);
2061
3262
  const id = nextId.current++;
2062
- setToasts((prev) => [...prev, { ...options, id, open: true }]);
3263
+ setToasts((prev) => [...prev, { ...options, color, id, open: true }]);
2063
3264
  return id;
2064
3265
  }, []);
2065
- const dismiss = (0, import_react30.useCallback)((id) => {
3266
+ const dismiss = (0, import_react40.useCallback)((id) => {
2066
3267
  const isTarget = (t) => id === void 0 || t.id === id;
2067
3268
  setToasts((prev) => prev.map((t) => isTarget(t) ? { ...t, open: false } : t));
2068
3269
  setTimeout(() => setToasts((prev) => prev.filter((t) => t.open || !isTarget(t))), REMOVE_DELAY);
2069
3270
  }, []);
2070
- const value4 = (0, import_react30.useMemo)(() => ({ toast: toast2, dismiss }), [toast2, dismiss]);
2071
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(ToastContext.Provider, { value: value4, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(RadixToast.Provider, { duration, label: label6, swipeDirection: "right", children: [
3271
+ const value4 = (0, import_react40.useMemo)(() => ({ toast: toast2, dismiss }), [toast2, dismiss]);
3272
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ToastContext.Provider, { value: value4, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(RadixToast.Provider, { duration, label: label6, swipeDirection: "right", children: [
2072
3273
  children,
2073
- toasts.map(({ id, open, title: title6, description: description6, variant, duration: itemDuration, action: action3 }) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
3274
+ toasts.map(({ id, open, title: title6, description: description6, color, duration: itemDuration, action: action3 }) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2074
3275
  RadixToast.Root,
2075
3276
  {
2076
3277
  open,
@@ -2078,21 +3279,21 @@ function ToastProvider({ children, duration = 5e3, label: label6 = "\uC54C\uB9BC
2078
3279
  onOpenChange: (nextOpen) => {
2079
3280
  if (!nextOpen) dismiss(id);
2080
3281
  },
2081
- className: toast({ variant }),
3282
+ className: toast({ color }),
2082
3283
  children: [
2083
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RadixToast.Title, { className: title5, children: title6 }),
2084
- description6 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RadixToast.Description, { className: description5, children: description6 }),
2085
- action3 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RadixToast.Action, { asChild: true, altText: action3.altText ?? action3.label, className: action2, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Button, { size: "sm", variant: "soft", color: "neutral", onClick: action3.onClick, children: action3.label }) }),
2086
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RadixToast.Close, { className: close, "aria-label": "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_icons14.XIcon, { size: 16 }) })
3284
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(RadixToast.Title, { className: title5, children: title6 }),
3285
+ description6 && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(RadixToast.Description, { className: description5, children: description6 }),
3286
+ action3 && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(RadixToast.Action, { asChild: true, altText: action3.altText ?? action3.label, className: action2, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Button, { size: "sm", variant: "soft", color: "neutral", onClick: action3.onClick, children: action3.label }) }),
3287
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(RadixToast.Close, { className: close, "aria-label": m.close ?? "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_icons17.XIcon, { size: 16 }) })
2087
3288
  ]
2088
3289
  },
2089
3290
  id
2090
3291
  )),
2091
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(RadixToast.Viewport, { className: cx(portal2.className, viewport2), style: portal2.style })
3292
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(RadixToast.Viewport, { className: cx(portal2.className, viewport2), style: portal2.style })
2092
3293
  ] }) });
2093
3294
  }
2094
3295
  function useToast() {
2095
- const context = (0, import_react30.useContext)(ToastContext);
3296
+ const context = (0, import_react40.useContext)(ToastContext);
2096
3297
  if (!context) throw new Error("useToast \uB294 ToastProvider \uC548\uC5D0\uC11C \uC0AC\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4.");
2097
3298
  return context;
2098
3299
  }
@@ -2102,12 +3303,12 @@ var RadixTooltip = __toESM(require("@radix-ui/react-tooltip"), 1);
2102
3303
 
2103
3304
  // src/components/Tooltip/Tooltip.css.ts
2104
3305
  var arrow2 = "z7rufs1";
2105
- var content10 = "z7rufs0";
3306
+ var content11 = "z7rufs0";
2106
3307
 
2107
3308
  // src/components/Tooltip/Tooltip.tsx
2108
- var import_jsx_runtime33 = require("react/jsx-runtime");
3309
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2109
3310
  function Tooltip({
2110
- content: content11,
3311
+ content: content12,
2111
3312
  children,
2112
3313
  side = "top",
2113
3314
  align = "center",
@@ -2119,21 +3320,21 @@ function Tooltip({
2119
3320
  className
2120
3321
  }) {
2121
3322
  const portal2 = usePortalProps();
2122
- if (disabled || content11 == null || content11 === "") return children;
2123
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(RadixTooltip.Provider, { delayDuration: delay, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(RadixTooltip.Root, { open, defaultOpen, onOpenChange, children: [
2124
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(RadixTooltip.Trigger, { asChild: true, children }),
2125
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(RadixTooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
3323
+ if (disabled || content12 == null || content12 === "") return children;
3324
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(RadixTooltip.Provider, { delayDuration: delay, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(RadixTooltip.Root, { open, defaultOpen, onOpenChange, children: [
3325
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(RadixTooltip.Trigger, { asChild: true, children }),
3326
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(RadixTooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
2126
3327
  RadixTooltip.Content,
2127
3328
  {
2128
3329
  side,
2129
3330
  align,
2130
3331
  sideOffset: 6,
2131
3332
  collisionPadding: 8,
2132
- className: cx(portal2.className, content10, className),
3333
+ className: cx(portal2.className, content11, className),
2133
3334
  style: portal2.style,
2134
3335
  children: [
2135
- content11,
2136
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(RadixTooltip.Arrow, { className: arrow2, width: 10, height: 5 })
3336
+ content12,
3337
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(RadixTooltip.Arrow, { className: arrow2, width: 10, height: 5 })
2137
3338
  ]
2138
3339
  }
2139
3340
  ) })
@@ -2141,14 +3342,14 @@ function Tooltip({
2141
3342
  }
2142
3343
 
2143
3344
  // src/components/Typography/Typography.tsx
2144
- var import_react31 = require("react");
3345
+ var import_react41 = require("react");
2145
3346
 
2146
3347
  // src/components/Typography/Typography.css.ts
2147
3348
  var import_createRuntimeFn25 = require("@vanilla-extract/recipes/createRuntimeFn");
2148
3349
  var typography = /* @__PURE__ */ (0, import_createRuntimeFn25.createRuntimeFn)({ defaultClassName: "kiolio0", variantClassNames: { variant: { display: "kiolio1", h1: "kiolio2", h2: "kiolio3", h3: "kiolio4", h4: "kiolio5", "body-lg": "kiolio6", body: "kiolio7", "body-sm": "kiolio8", caption: "kiolio9" }, color: { "default": "kiolioa", muted: "kioliob", subtle: "kiolioc", primary: "kioliod", danger: "kiolioe", success: "kioliof", warning: "kioliog", inherit: "kiolioh" }, weight: { regular: "kiolioi", medium: "kiolioj", semibold: "kioliok", bold: "kioliol" }, align: { start: "kioliom", center: "kiolion", end: "kiolioo" }, truncate: { true: "kioliop" } }, defaultVariants: { variant: "body", color: "default" }, compoundVariants: [] });
2149
3350
 
2150
3351
  // src/components/Typography/Typography.tsx
2151
- var import_jsx_runtime34 = require("react/jsx-runtime");
3352
+ var import_jsx_runtime42 = require("react/jsx-runtime");
2152
3353
  var defaultElement = {
2153
3354
  display: "h1",
2154
3355
  h1: "h1",
@@ -2160,9 +3361,9 @@ var defaultElement = {
2160
3361
  "body-sm": "p",
2161
3362
  caption: "span"
2162
3363
  };
2163
- var Typography = /* @__PURE__ */ (0, import_react31.forwardRef)(function Typography2({ variant = "body", as, color, weight, align, truncate, className, ...rest }, ref) {
3364
+ var Typography = /* @__PURE__ */ (0, import_react41.forwardRef)(function Typography2({ variant = "body", as, color, weight, align, truncate, className, ...rest }, ref) {
2164
3365
  const Component = as ?? defaultElement[variant];
2165
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3366
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2166
3367
  Component,
2167
3368
  {
2168
3369
  ref,
@@ -2171,21 +3372,171 @@ var Typography = /* @__PURE__ */ (0, import_react31.forwardRef)(function Typogra
2171
3372
  }
2172
3373
  );
2173
3374
  });
3375
+
3376
+ // src/components/VerificationCodeInput/VerificationCodeInput.tsx
3377
+ var import_react42 = require("react");
3378
+
3379
+ // src/components/VerificationCodeInput/VerificationCodeInput.css.ts
3380
+ var input4 = "ea01812";
3381
+ var row4 = "ea01810";
3382
+ var slot = "ea01813";
3383
+ var slots = "ea01811";
3384
+ var timer = "ea01814";
3385
+
3386
+ // src/components/VerificationCodeInput/VerificationCodeInput.tsx
3387
+ var import_jsx_runtime43 = require("react/jsx-runtime");
3388
+ var formatTime = (seconds) => `${String(Math.floor(seconds / 60)).padStart(2, "0")}:${String(seconds % 60).padStart(2, "0")}`;
3389
+ var VerificationCodeInput = /* @__PURE__ */ (0, import_react42.forwardRef)(
3390
+ function VerificationCodeInput2(props, ref) {
3391
+ const {
3392
+ length = 6,
3393
+ value: value4,
3394
+ defaultValue,
3395
+ onValueChange,
3396
+ onComplete,
3397
+ type = "numeric",
3398
+ label: labelProp,
3399
+ helperText: helperText3,
3400
+ error,
3401
+ disabled,
3402
+ autoFocus,
3403
+ expiresIn,
3404
+ onExpire,
3405
+ onResend,
3406
+ resendText: resendTextProp,
3407
+ expiredText: expiredTextProp,
3408
+ name,
3409
+ id,
3410
+ className
3411
+ } = props;
3412
+ const m = useMessages();
3413
+ const label6 = labelProp ?? m.verificationCode ?? "\uC778\uC99D\uBC88\uD638";
3414
+ const resendText = resendTextProp ?? m.resend ?? "\uC7AC\uC804\uC1A1";
3415
+ const expiredText = expiredTextProp ?? m.verificationExpired ?? "\uC778\uC99D \uC2DC\uAC04\uC774 \uC9C0\uB0AC\uC5B4\uC694. \uC7AC\uC804\uC1A1\uD574 \uC8FC\uC138\uC694.";
3416
+ const generatedId = (0, import_react42.useId)();
3417
+ const inputId = id ?? generatedId;
3418
+ const helperId = `${inputId}-helper`;
3419
+ const statusId = `${inputId}-status`;
3420
+ const inputRef = (0, import_react42.useRef)(null);
3421
+ const isControlled = "value" in props;
3422
+ const [innerValue, setInnerValue] = (0, import_react42.useState)(defaultValue ?? "");
3423
+ const code = (isControlled ? value4 ?? "" : innerValue).slice(0, length);
3424
+ const [focused, setFocused] = (0, import_react42.useState)(false);
3425
+ const [endAt, setEndAt] = (0, import_react42.useState)(() => expiresIn ? Date.now() + expiresIn * 1e3 : null);
3426
+ const [remaining, setRemaining] = (0, import_react42.useState)(expiresIn ?? 0);
3427
+ const expired = expiresIn !== void 0 && remaining <= 0;
3428
+ const onExpireRef = (0, import_react42.useRef)(onExpire);
3429
+ (0, import_react42.useEffect)(() => {
3430
+ onExpireRef.current = onExpire;
3431
+ });
3432
+ (0, import_react42.useEffect)(() => {
3433
+ if (endAt === null) return;
3434
+ const tick = () => {
3435
+ const left = Math.max(0, Math.ceil((endAt - Date.now()) / 1e3));
3436
+ setRemaining(left);
3437
+ if (left === 0) {
3438
+ clearInterval(timer2);
3439
+ onExpireRef.current?.();
3440
+ }
3441
+ };
3442
+ const timer2 = setInterval(tick, 250);
3443
+ tick();
3444
+ return () => clearInterval(timer2);
3445
+ }, [endAt]);
3446
+ const setCode = (next) => {
3447
+ if (!isControlled) setInnerValue(next);
3448
+ onValueChange?.(next);
3449
+ if (next.length === length && code.length !== length) onComplete?.(next);
3450
+ };
3451
+ const handleChange = (event) => {
3452
+ const raw = event.target.value;
3453
+ const cleaned = (type === "numeric" ? raw.replace(/\D/g, "") : raw.replace(/[^0-9a-z]/gi, "").toUpperCase()).slice(0, length);
3454
+ setCode(cleaned);
3455
+ };
3456
+ const resend = () => {
3457
+ onResend?.();
3458
+ setCode("");
3459
+ if (expiresIn) {
3460
+ setEndAt(Date.now() + expiresIn * 1e3);
3461
+ setRemaining(expiresIn);
3462
+ }
3463
+ inputRef.current?.focus();
3464
+ };
3465
+ const description6 = helperText3 ?? m.verificationCodeHint?.(length, type) ?? `${length}\uC790\uB9AC ${type === "numeric" ? "\uC22B\uC790" : "\uBB38\uC790"}\uB97C \uC785\uB825\uD558\uC138\uC694.`;
3466
+ const activeIndex = Math.min(code.length, length - 1);
3467
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
3468
+ "div",
3469
+ {
3470
+ className: cx(field, className),
3471
+ "data-invalid": error || void 0,
3472
+ "data-disabled": disabled || void 0,
3473
+ children: [
3474
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("label", { htmlFor: inputId, className: label, children: label6 }),
3475
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: row4, children: [
3476
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: slots, children: [
3477
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3478
+ "input",
3479
+ {
3480
+ ref: mergeRefs(ref, inputRef),
3481
+ id: inputId,
3482
+ type: "text",
3483
+ inputMode: type === "numeric" ? "numeric" : "text",
3484
+ autoComplete: "one-time-code",
3485
+ pattern: type === "numeric" ? "[0-9]*" : void 0,
3486
+ value: code,
3487
+ onChange: handleChange,
3488
+ onFocus: () => setFocused(true),
3489
+ onBlur: () => setFocused(false),
3490
+ disabled,
3491
+ autoFocus,
3492
+ "aria-invalid": error || void 0,
3493
+ "aria-describedby": `${helperId} ${statusId}`,
3494
+ className: input4
3495
+ }
3496
+ ),
3497
+ Array.from({ length }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3498
+ "div",
3499
+ {
3500
+ className: slot,
3501
+ "data-active": focused && index === activeIndex ? "" : void 0,
3502
+ "aria-hidden": true,
3503
+ children: code[index] ?? ""
3504
+ },
3505
+ index
3506
+ ))
3507
+ ] }),
3508
+ expiresIn !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { role: "timer", className: timer, children: formatTime(remaining) }),
3509
+ onResend && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Button, { size: "sm", variant: "outline", color: "neutral", onClick: resend, disabled, children: resendText })
3510
+ ] }),
3511
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { id: helperId, className: helperText({ error }), children: description6 }),
3512
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { id: statusId, role: "status", className: helperText({ error: true }), children: expired ? expiredText : "" }),
3513
+ name && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("input", { type: "hidden", name, value: code })
3514
+ ]
3515
+ }
3516
+ );
3517
+ }
3518
+ );
2174
3519
  // Annotate the CommonJS export names for ESM import in node:
2175
3520
  0 && (module.exports = {
2176
3521
  Accordion,
2177
3522
  AccordionItem,
3523
+ AddressInput,
3524
+ AgreementGroup,
2178
3525
  Alert,
3526
+ AmountInput,
2179
3527
  Avatar,
2180
3528
  Badge,
2181
3529
  Breadcrumb,
3530
+ BusinessNumberInput,
2182
3531
  Button,
3532
+ Calendar,
2183
3533
  Card,
2184
3534
  CardBody,
2185
3535
  CardFooter,
2186
3536
  CardHeader,
2187
3537
  Checkbox,
2188
3538
  Combobox,
3539
+ DatePicker,
2189
3540
  Divider,
2190
3541
  Drawer,
2191
3542
  DrawerClose,
@@ -2199,9 +3550,11 @@ var Typography = /* @__PURE__ */ (0, import_react31.forwardRef)(function Typogra
2199
3550
  IconButton,
2200
3551
  Input,
2201
3552
  Link,
3553
+ LocaleProvider,
2202
3554
  Modal,
2203
3555
  ModalClose,
2204
3556
  Pagination,
3557
+ PhoneNumberInput,
2205
3558
  Popover,
2206
3559
  PopoverClose,
2207
3560
  Progress,
@@ -2229,10 +3582,23 @@ var Typography = /* @__PURE__ */ (0, import_react31.forwardRef)(function Typogra
2229
3582
  ToastProvider,
2230
3583
  Tooltip,
2231
3584
  Typography,
3585
+ VerificationCodeInput,
3586
+ composeExtraAddress,
2232
3587
  contrastRatio,
2233
3588
  createIntentColors,
2234
3589
  createTheme,
3590
+ en,
3591
+ formatBusinessNumber,
3592
+ formatKoreanAmount,
3593
+ formatKoreanDate,
3594
+ formatPhoneNumber,
3595
+ hasAllRequiredAgreements,
3596
+ isValidBusinessNumber,
3597
+ kakaoPostcodeProvider,
3598
+ parseISODate,
2235
3599
  themeClass,
3600
+ toISODate,
3601
+ useMessages,
2236
3602
  usePortalClassName,
2237
3603
  usePortalProps,
2238
3604
  useTheme,