@bestow-ui/react 0.9.0 → 0.11.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,16 +33,21 @@ 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,
41
45
  Card: () => Card,
42
46
  CardBody: () => CardBody,
43
47
  CardFooter: () => CardFooter,
44
48
  CardHeader: () => CardHeader,
45
49
  Checkbox: () => Checkbox,
50
+ Combobox: () => Combobox,
46
51
  Divider: () => Divider,
47
52
  Drawer: () => Drawer,
48
53
  DrawerClose: () => DrawerClose,
@@ -59,15 +64,24 @@ __export(index_exports, {
59
64
  Modal: () => Modal,
60
65
  ModalClose: () => ModalClose,
61
66
  Pagination: () => Pagination,
62
- Popover: () => Popover,
67
+ PhoneNumberInput: () => PhoneNumberInput,
68
+ Popover: () => Popover2,
63
69
  PopoverClose: () => PopoverClose,
64
70
  Progress: () => Progress,
65
71
  RadioGroup: () => RadioGroup,
66
72
  Select: () => Select,
67
73
  Skeleton: () => Skeleton,
74
+ Slider: () => Slider,
68
75
  Spinner: () => Spinner,
69
76
  Stack: () => Stack,
70
77
  Switch: () => Switch,
78
+ Table: () => Table,
79
+ TableBody: () => TableBody,
80
+ TableCell: () => TableCell,
81
+ TableFooter: () => TableFooter,
82
+ TableHead: () => TableHead,
83
+ TableHeader: () => TableHeader,
84
+ TableRow: () => TableRow,
71
85
  Tabs: () => Tabs,
72
86
  TabsContent: () => TabsContent,
73
87
  TabsList: () => TabsList,
@@ -78,9 +92,17 @@ __export(index_exports, {
78
92
  ToastProvider: () => ToastProvider,
79
93
  Tooltip: () => Tooltip,
80
94
  Typography: () => Typography,
95
+ VerificationCodeInput: () => VerificationCodeInput,
96
+ composeExtraAddress: () => composeExtraAddress,
81
97
  contrastRatio: () => contrastRatio,
82
98
  createIntentColors: () => createIntentColors,
83
99
  createTheme: () => createTheme,
100
+ formatBusinessNumber: () => formatBusinessNumber,
101
+ formatKoreanAmount: () => formatKoreanAmount,
102
+ formatPhoneNumber: () => formatPhoneNumber,
103
+ hasAllRequiredAgreements: () => hasAllRequiredAgreements,
104
+ isValidBusinessNumber: () => isValidBusinessNumber,
105
+ kakaoPostcodeProvider: () => kakaoPostcodeProvider,
84
106
  themeClass: () => themeClass,
85
107
  usePortalClassName: () => usePortalClassName,
86
108
  usePortalProps: () => usePortalProps,
@@ -211,9 +233,12 @@ function createIntentColors(intent, color) {
211
233
  subtleHover: rgba(darkSolid, 0.26),
212
234
  text: findReadable(darkBase, Math.max(darkBase.l, 0.75), 0.02, [darkBg, darkSubtleOnBg, darkSubtleHoverOnBg])
213
235
  };
236
+ const focusOn = (candidate, fallback2, bg) => contrastRatio(candidate, bg) >= 3 ? candidate : fallback2;
214
237
  const focus = intent === "primary" ? {
215
- light: { border: { focus: light.solid } },
216
- dark: { border: { focus: withL(darkBase, Math.min(1, darkBase.l + 0.06)) } }
238
+ light: { border: { focus: focusOn(light.solid, light.text, import_tokens.lightColors.bg.default) } },
239
+ dark: {
240
+ border: { focus: focusOn(withL(darkBase, Math.min(1, darkBase.l + 0.06)), dark.text, darkBg) }
241
+ }
217
242
  } : void 0;
218
243
  return {
219
244
  light: { color: { [intent]: light, ...focus?.light } },
@@ -226,19 +251,19 @@ var import_dynamic = require("@vanilla-extract/dynamic");
226
251
  function deepMerge(target, source) {
227
252
  if (!source) return target;
228
253
  const out = { ...target };
229
- for (const [key, value3] of Object.entries(source)) {
230
- if (value3 === void 0) continue;
254
+ for (const [key, value4] of Object.entries(source)) {
255
+ if (value4 === void 0) continue;
231
256
  const prev = out[key];
232
- out[key] = typeof value3 === "object" && typeof prev === "object" ? deepMerge(prev, value3) : value3;
257
+ out[key] = typeof value4 === "object" && typeof prev === "object" ? deepMerge(prev, value4) : value4;
233
258
  }
234
259
  return out;
235
260
  }
236
261
  function createTheme(...inputs) {
237
262
  let light = {};
238
263
  let dark = {};
239
- for (const input3 of inputs) {
240
- light = deepMerge(deepMerge(light, input3.common), input3.light);
241
- dark = deepMerge(deepMerge(dark, input3.common), input3.dark);
264
+ for (const input5 of inputs) {
265
+ light = deepMerge(deepMerge(light, input5.common), input5.light);
266
+ dark = deepMerge(deepMerge(dark, input5.common), input5.dark);
242
267
  }
243
268
  return Object.freeze({ light, dark });
244
269
  }
@@ -248,11 +273,11 @@ function mergeThemes(a, b) {
248
273
  return createTheme(a, b);
249
274
  }
250
275
  function flatten(partial, contract, out) {
251
- for (const [key, value3] of Object.entries(partial)) {
276
+ for (const [key, value4] of Object.entries(partial)) {
252
277
  const target = contract[key];
253
278
  if (target === void 0) continue;
254
- if (typeof target === "string" && typeof value3 === "string") out[target] = value3;
255
- else if (typeof target === "object" && typeof value3 === "object") flatten(value3, target, out);
279
+ if (typeof target === "string" && typeof value4 === "string") out[target] = value4;
280
+ else if (typeof target === "object" && typeof value4 === "object") flatten(value4, target, out);
256
281
  }
257
282
  return out;
258
283
  }
@@ -281,17 +306,17 @@ var ThemeProvider = /* @__PURE__ */ (0, import_react.forwardRef)(function ThemeP
281
306
  const parent = (0, import_react.useContext)(ThemeContext);
282
307
  const theme = themeProp ?? parent.theme;
283
308
  const merged = (0, import_react.useMemo)(() => mergeThemes(parent.overrides, overrides), [parent.overrides, overrides]);
284
- const value3 = (0, import_react.useMemo)(
309
+ const value4 = (0, import_react.useMemo)(
285
310
  () => ({ theme, overrides: merged, style: themeToStyle(merged, theme) }),
286
311
  [theme, merged]
287
312
  );
288
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThemeContext.Provider, { value: value3, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
313
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThemeContext.Provider, { value: value4, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
289
314
  "div",
290
315
  {
291
316
  ref,
292
317
  "data-theme": theme,
293
318
  className: cx(themeClass[theme], root, className),
294
- style: value3.style ? { ...value3.style, ...style } : style,
319
+ style: value4.style ? { ...value4.style, ...style } : style,
295
320
  ...rest,
296
321
  children
297
322
  }
@@ -341,111 +366,914 @@ var AccordionItem = /* @__PURE__ */ (0, import_react2.forwardRef)(function Accor
341
366
  ] });
342
367
  });
343
368
 
344
- // src/components/Alert/Alert.tsx
345
- var import_react3 = require("react");
369
+ // src/components/AddressInput/AddressInput.tsx
370
+ var import_react8 = require("react");
371
+
372
+ // src/components/Button/Button.tsx
373
+ var import_react4 = require("react");
374
+
375
+ // src/components/Spinner/Spinner.tsx
346
376
  var import_icons2 = require("@bestow-ui/icons");
377
+ var import_react3 = require("react");
347
378
 
348
- // src/components/Alert/Alert.css.ts
379
+ // src/styles/visuallyHidden.css.ts
380
+ var visuallyHidden = "_1kdtbw10";
381
+
382
+ // src/components/Spinner/Spinner.css.ts
349
383
  var import_createRuntimeFn = require("@vanilla-extract/recipes/createRuntimeFn");
384
+ var spinner = /* @__PURE__ */ (0, import_createRuntimeFn.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: [] });
385
+
386
+ // src/components/Spinner/Spinner.tsx
387
+ var import_jsx_runtime3 = require("react/jsx-runtime");
388
+ var Spinner = /* @__PURE__ */ (0, import_react3.forwardRef)(function Spinner2({ size, color, label: label6 = "\uB85C\uB529 \uC911", className, ...rest }, ref) {
389
+ const a11y = label6 ? { role: "status" } : { "aria-hidden": true };
390
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { ref, className: cx(spinner({ size, color }), className), ...a11y, ...rest, children: [
391
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons2.LoaderIcon, { size: "100%" }),
392
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: visuallyHidden, children: label6 })
393
+ ] });
394
+ });
395
+
396
+ // src/components/Button/Button.css.ts
397
+ var import_createRuntimeFn2 = require("@vanilla-extract/recipes/createRuntimeFn");
398
+ 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: [] });
399
+ var icon = "xcekdai";
400
+
401
+ // src/components/Button/Button.tsx
402
+ var import_jsx_runtime4 = require("react/jsx-runtime");
403
+ var Button = /* @__PURE__ */ (0, import_react4.forwardRef)(function Button2({
404
+ variant,
405
+ color,
406
+ size,
407
+ fullWidth,
408
+ startIcon,
409
+ endIcon,
410
+ loading: loading2,
411
+ className,
412
+ type = "button",
413
+ onClick,
414
+ children,
415
+ ...rest
416
+ }, ref) {
417
+ const handleClick = (event) => {
418
+ if (loading2) {
419
+ event.preventDefault();
420
+ return;
421
+ }
422
+ onClick?.(event);
423
+ };
424
+ const leading = loading2 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Spinner, { size: "sm", label: "" }) : startIcon;
425
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
426
+ "button",
427
+ {
428
+ ref,
429
+ type,
430
+ className: cx(button({ variant, color, size, fullWidth }), className),
431
+ "aria-busy": loading2 || void 0,
432
+ "aria-disabled": loading2 || void 0,
433
+ onClick: handleClick,
434
+ ...rest,
435
+ children: [
436
+ leading && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: icon, children: leading }),
437
+ children,
438
+ endIcon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: icon, children: endIcon })
439
+ ]
440
+ }
441
+ );
442
+ });
443
+
444
+ // src/components/Input/Input.css.ts
445
+ var import_createRuntimeFn3 = require("@vanilla-extract/recipes/createRuntimeFn");
446
+ var adornment = "_19p5zvh6";
447
+ var field = "_19p5zvh7";
448
+ var fieldFullWidth = "_19p5zvh8";
449
+ var helperText = /* @__PURE__ */ (0, import_createRuntimeFn3.createRuntimeFn)({ defaultClassName: "_19p5zvhb", variantClassNames: { error: { true: "_19p5zvhc" } }, defaultVariants: {}, compoundVariants: [] });
450
+ var input = "_19p5zvh5";
451
+ var label = "_19p5zvh9";
452
+ var requiredMark = "_19p5zvha";
453
+ var root3 = /* @__PURE__ */ (0, import_createRuntimeFn3.createRuntimeFn)({ defaultClassName: "_19p5zvh0", variantClassNames: { size: { sm: "_19p5zvh1", md: "_19p5zvh2", lg: "_19p5zvh3" }, fullWidth: { true: "_19p5zvh4" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
454
+
455
+ // src/components/Input/Input.tsx
456
+ var import_react5 = require("react");
457
+ var import_jsx_runtime5 = require("react/jsx-runtime");
458
+ var Input = /* @__PURE__ */ (0, import_react5.forwardRef)(function Input2({ size, invalid, fullWidth, startAdornment, endAdornment, rootClassName, className, disabled, ...rest }, ref) {
459
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
460
+ "div",
461
+ {
462
+ className: cx(root3({ size, fullWidth }), rootClassName),
463
+ "data-invalid": invalid || void 0,
464
+ "data-disabled": disabled || void 0,
465
+ children: [
466
+ startAdornment && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: adornment, children: startAdornment }),
467
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
468
+ "input",
469
+ {
470
+ ref,
471
+ className: cx(input, className),
472
+ disabled,
473
+ "aria-invalid": invalid || void 0,
474
+ ...rest
475
+ }
476
+ ),
477
+ endAdornment && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: adornment, children: endAdornment })
478
+ ]
479
+ }
480
+ );
481
+ });
482
+
483
+ // src/components/Input/TextField.tsx
484
+ var import_react6 = require("react");
485
+ var import_jsx_runtime6 = require("react/jsx-runtime");
486
+ var TextField = /* @__PURE__ */ (0, import_react6.forwardRef)(function TextField2({ label: label6, helperText: helperText3, error, required, fullWidth, id, "aria-describedby": ariaDescribedBy, ...rest }, ref) {
487
+ const generatedId = (0, import_react6.useId)();
488
+ const inputId = id ?? generatedId;
489
+ const helperId = helperText3 ? `${inputId}-helper` : void 0;
490
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
491
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("label", { htmlFor: inputId, className: label, children: [
492
+ label6,
493
+ required && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
494
+ ] }),
495
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
496
+ Input,
497
+ {
498
+ ref,
499
+ id: inputId,
500
+ invalid: error,
501
+ required,
502
+ fullWidth,
503
+ "aria-describedby": cx(helperId, ariaDescribedBy) || void 0,
504
+ ...rest
505
+ }
506
+ ),
507
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
508
+ ] });
509
+ });
510
+
511
+ // src/components/Modal/Modal.tsx
512
+ var Dialog = __toESM(require("@radix-ui/react-dialog"), 1);
513
+ var import_icons3 = require("@bestow-ui/icons");
514
+
515
+ // src/utils/useReturnFocus.ts
516
+ var import_react7 = require("react");
517
+ function useReturnFocus(hasTrigger, onCloseAutoFocus) {
518
+ const returnTo = (0, import_react7.useRef)(null);
519
+ return {
520
+ onOpenAutoFocus: () => {
521
+ returnTo.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;
522
+ },
523
+ onCloseAutoFocus: (event) => {
524
+ onCloseAutoFocus?.(event);
525
+ if (event.defaultPrevented || hasTrigger) return;
526
+ const target = returnTo.current;
527
+ if (target && target.isConnected && target !== document.body) {
528
+ event.preventDefault();
529
+ target.focus();
530
+ }
531
+ }
532
+ };
533
+ }
534
+
535
+ // src/components/Modal/Modal.css.ts
536
+ var import_createRuntimeFn4 = require("@vanilla-extract/recipes/createRuntimeFn");
537
+ var body = "_1pdsmv0a";
538
+ var closeButton = "_1pdsmv09";
539
+ var content2 = /* @__PURE__ */ (0, import_createRuntimeFn4.createRuntimeFn)({ defaultClassName: "_1pdsmv01", variantClassNames: { size: { sm: "_1pdsmv02", md: "_1pdsmv03", lg: "_1pdsmv04" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
540
+ var description = "_1pdsmv08";
541
+ var footer = "_1pdsmv0b";
542
+ var header2 = "_1pdsmv05";
543
+ var headings = "_1pdsmv06";
544
+ var overlay = "_1pdsmv00";
545
+ var title = "_1pdsmv07";
546
+
547
+ // src/components/Modal/Modal.tsx
548
+ var import_jsx_runtime7 = require("react/jsx-runtime");
549
+ function Modal({
550
+ open,
551
+ defaultOpen,
552
+ onOpenChange,
553
+ trigger: trigger4,
554
+ title: title6,
555
+ description: description6,
556
+ children,
557
+ footer: footer6,
558
+ size,
559
+ hideCloseButton = false,
560
+ closeOnOverlayClick = true,
561
+ className,
562
+ onCloseAutoFocus
563
+ }) {
564
+ const portal2 = usePortalProps();
565
+ const focus = useReturnFocus(Boolean(trigger4), onCloseAutoFocus);
566
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Dialog.Root, { open, defaultOpen, onOpenChange, children: [
567
+ trigger4 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Dialog.Trigger, { asChild: true, children: trigger4 }),
568
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Dialog.Portal, { children: [
569
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Dialog.Overlay, { className: cx(portal2.className, overlay), style: portal2.style }),
570
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
571
+ Dialog.Content,
572
+ {
573
+ className: cx(portal2.className, content2({ size }), className),
574
+ style: portal2.style,
575
+ onPointerDownOutside: closeOnOverlayClick ? void 0 : (event) => event.preventDefault(),
576
+ onOpenAutoFocus: focus.onOpenAutoFocus,
577
+ onCloseAutoFocus: focus.onCloseAutoFocus,
578
+ ...description6 ? {} : { "aria-describedby": void 0 },
579
+ children: [
580
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: header2, children: [
581
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: headings, children: [
582
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Dialog.Title, { className: title, children: title6 }),
583
+ description6 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Dialog.Description, { className: description, children: description6 })
584
+ ] }),
585
+ !hideCloseButton && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Dialog.Close, { className: closeButton, "aria-label": "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons3.XIcon, { size: 16 }) })
586
+ ] }),
587
+ children && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: body, children }),
588
+ footer6 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: footer, children: footer6 })
589
+ ]
590
+ }
591
+ )
592
+ ] })
593
+ ] });
594
+ }
595
+ var ModalClose = Dialog.Close;
596
+
597
+ // src/components/AddressInput/addressProviders.ts
598
+ var KAKAO_POSTCODE_SRC = "https://t1.kakaocdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js";
599
+ var loading = null;
600
+ function loadKakaoPostcode() {
601
+ const w = window;
602
+ const existing = w.kakao?.Postcode ?? w.daum?.Postcode;
603
+ if (existing) return Promise.resolve(existing);
604
+ loading ?? (loading = new Promise((resolve, reject) => {
605
+ const script = document.createElement("script");
606
+ script.src = KAKAO_POSTCODE_SRC;
607
+ script.async = true;
608
+ script.onload = () => {
609
+ const ctor = w.kakao?.Postcode ?? w.daum?.Postcode;
610
+ if (ctor) resolve(ctor);
611
+ else reject(new Error("\uC6B0\uD3B8\uBC88\uD638 \uC11C\uBE44\uC2A4\uB97C \uCC3E\uC9C0 \uBABB\uD588\uC5B4\uC694"));
612
+ };
613
+ script.onerror = () => {
614
+ loading = null;
615
+ reject(new Error("\uC6B0\uD3B8\uBC88\uD638 \uC11C\uBE44\uC2A4\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694"));
616
+ };
617
+ document.head.appendChild(script);
618
+ }));
619
+ return loading;
620
+ }
621
+ function composeExtraAddress(data) {
622
+ if (data.userSelectedType !== "R") return "";
623
+ const parts = [];
624
+ if (data.bname && /[동로가]$/.test(data.bname)) parts.push(data.bname);
625
+ if (data.buildingName && data.apartment === "Y") parts.push(data.buildingName);
626
+ return parts.length ? ` (${parts.join(", ")})` : "";
627
+ }
628
+ var kakaoPostcodeProvider = async (container2, onSelect) => {
629
+ const Postcode = await loadKakaoPostcode();
630
+ new Postcode({
631
+ width: "100%",
632
+ height: "100%",
633
+ oncomplete: (data) => {
634
+ const address = data.userSelectedType === "R" ? data.roadAddress : data.jibunAddress || data.autoJibunAddress || "";
635
+ onSelect({ zonecode: data.zonecode, address, extraAddress: composeExtraAddress(data) });
636
+ }
637
+ }).embed(container2);
638
+ };
639
+
640
+ // src/components/AddressInput/AddressInput.css.ts
641
+ var fieldset = "_16fi7uy0";
642
+ var legend = "_16fi7uy1";
643
+ var row = "_16fi7uy2";
644
+ var searchArea = "_16fi7uy4";
645
+ var searchStatus = "_16fi7uy5";
646
+ var zonecode = "_16fi7uy3";
647
+
648
+ // src/components/AddressInput/AddressInput.tsx
649
+ var import_jsx_runtime8 = require("react/jsx-runtime");
650
+ var EMPTY = { zonecode: "", address: "", extraAddress: "", detail: "" };
651
+ function SearchArea({
652
+ provider,
653
+ onSelect,
654
+ loadErrorText
655
+ }) {
656
+ const containerRef = (0, import_react8.useRef)(null);
657
+ const [status, setStatus] = (0, import_react8.useState)("loading");
658
+ const onSelectRef = (0, import_react8.useRef)(onSelect);
659
+ (0, import_react8.useEffect)(() => {
660
+ onSelectRef.current = onSelect;
661
+ });
662
+ (0, import_react8.useEffect)(() => {
663
+ const container2 = containerRef.current;
664
+ if (!container2) return;
665
+ let cleanup;
666
+ let cancelled = false;
667
+ Promise.resolve().then(() => provider(container2, (result) => onSelectRef.current(result))).then((fn) => {
668
+ if (cancelled) fn?.();
669
+ else {
670
+ cleanup = fn;
671
+ setStatus("ready");
672
+ }
673
+ }).catch(() => !cancelled && setStatus("error"));
674
+ return () => {
675
+ cancelled = true;
676
+ cleanup?.();
677
+ };
678
+ }, [provider]);
679
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: searchArea, children: [
680
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { ref: containerRef, style: { width: "100%", height: "100%" } }),
681
+ status !== "ready" && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: searchStatus, role: "status", children: status === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Spinner, { label: "\uC8FC\uC18C \uAC80\uC0C9\uC744 \uBD88\uB7EC\uC624\uB294 \uC911" }) : loadErrorText })
682
+ ] });
683
+ }
684
+ var AddressInput = /* @__PURE__ */ (0, import_react8.forwardRef)(
685
+ function AddressInput2(props, ref) {
686
+ const {
687
+ value: value4,
688
+ defaultValue,
689
+ onValueChange,
690
+ label: label6 = "\uC8FC\uC18C",
691
+ required,
692
+ helperText: helperText3,
693
+ error,
694
+ disabled,
695
+ provider = kakaoPostcodeProvider,
696
+ searchLabel = "\uC8FC\uC18C \uAC80\uC0C9",
697
+ detailPlaceholder = "\uC0C1\uC138 \uC8FC\uC18C (\uB3D9\xB7\uD638\uC218 \uB4F1)",
698
+ loadErrorText = "\uC8FC\uC18C \uAC80\uC0C9\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC5B4\uC694. \uC7A0\uC2DC \uB4A4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
699
+ name,
700
+ className
701
+ } = props;
702
+ const baseId = (0, import_react8.useId)();
703
+ const helperId = helperText3 ? `${baseId}-helper` : void 0;
704
+ const detailRef = (0, import_react8.useRef)(null);
705
+ const selectedRef = (0, import_react8.useRef)(false);
706
+ const [open, setOpen] = (0, import_react8.useState)(false);
707
+ const isControlled = "value" in props;
708
+ const [innerValue, setInnerValue] = (0, import_react8.useState)(defaultValue ?? EMPTY);
709
+ const current2 = isControlled ? value4 ?? EMPTY : innerValue;
710
+ const update = (next) => {
711
+ if (!isControlled) setInnerValue(next);
712
+ onValueChange?.(next);
713
+ };
714
+ const openSearch = () => {
715
+ if (disabled) return;
716
+ selectedRef.current = false;
717
+ setOpen(true);
718
+ };
719
+ const handleSelect = (result) => {
720
+ selectedRef.current = true;
721
+ update({
722
+ ...current2,
723
+ zonecode: result.zonecode,
724
+ address: result.address,
725
+ extraAddress: result.extraAddress ?? ""
726
+ });
727
+ setOpen(false);
728
+ };
729
+ const fullAddress = `${current2.address}${current2.extraAddress ?? ""}`;
730
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("fieldset", { ref, className: cx(fieldset, className), disabled, "aria-describedby": helperId, children: [
731
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("legend", { className: legend, children: [
732
+ label6,
733
+ required && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
734
+ ] }),
735
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: row, children: [
736
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
737
+ TextField,
738
+ {
739
+ "aria-label": "\uC6B0\uD3B8\uBC88\uD638",
740
+ readOnly: true,
741
+ value: current2.zonecode,
742
+ placeholder: "\uC6B0\uD3B8\uBC88\uD638",
743
+ error: error && !current2.zonecode,
744
+ "aria-required": required || void 0,
745
+ rootClassName: zonecode,
746
+ onClick: openSearch
747
+ }
748
+ ),
749
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Button, { variant: "outline", color: "neutral", onClick: openSearch, disabled, children: searchLabel })
750
+ ] }),
751
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
752
+ TextField,
753
+ {
754
+ "aria-label": "\uAE30\uBCF8 \uC8FC\uC18C",
755
+ readOnly: true,
756
+ value: fullAddress,
757
+ placeholder: `${searchLabel}\uC744 \uB20C\uB7EC \uC8FC\uC18C\uB97C \uACE0\uB974\uC138\uC694`,
758
+ error: error && !current2.address,
759
+ "aria-required": required || void 0,
760
+ fullWidth: true,
761
+ onClick: openSearch
762
+ }
763
+ ),
764
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
765
+ TextField,
766
+ {
767
+ ref: detailRef,
768
+ "aria-label": "\uC0C1\uC138 \uC8FC\uC18C",
769
+ value: current2.detail,
770
+ placeholder: detailPlaceholder,
771
+ onChange: (event) => update({ ...current2, detail: event.target.value }),
772
+ autoComplete: "address-line2",
773
+ fullWidth: true
774
+ }
775
+ ),
776
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 }),
777
+ name && /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
778
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("input", { type: "hidden", name: `${name}[zonecode]`, value: current2.zonecode }),
779
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("input", { type: "hidden", name: `${name}[address]`, value: fullAddress }),
780
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("input", { type: "hidden", name: `${name}[detail]`, value: current2.detail })
781
+ ] }),
782
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
783
+ Modal,
784
+ {
785
+ open,
786
+ onOpenChange: setOpen,
787
+ title: searchLabel,
788
+ description: "\uB3C4\uB85C\uBA85, \uAC74\uBB3C\uBA85, \uC9C0\uBC88\uC73C\uB85C \uAC80\uC0C9\uD560 \uC218 \uC788\uC5B4\uC694.",
789
+ onCloseAutoFocus: (event) => {
790
+ if (selectedRef.current) {
791
+ event.preventDefault();
792
+ detailRef.current?.focus();
793
+ }
794
+ },
795
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SearchArea, { provider, onSelect: handleSelect, loadErrorText })
796
+ }
797
+ )
798
+ ] });
799
+ }
800
+ );
801
+
802
+ // src/components/AgreementGroup/AgreementGroup.tsx
803
+ var import_react10 = require("react");
804
+ var import_icons4 = require("@bestow-ui/icons");
805
+
806
+ // src/components/Checkbox/Checkbox.tsx
807
+ var import_react9 = require("react");
808
+
809
+ // src/utils/mergeRefs.ts
810
+ function mergeRefs(...refs) {
811
+ return (value4) => {
812
+ for (const ref of refs) {
813
+ if (typeof ref === "function") ref(value4);
814
+ else if (ref) ref.current = value4;
815
+ }
816
+ };
817
+ }
818
+
819
+ // src/components/Checkbox/Checkbox.css.ts
820
+ var import_createRuntimeFn5 = require("@vanilla-extract/recipes/createRuntimeFn");
821
+ var checkIcon = "_1y7mzsn8 _1y7mzsn7";
822
+ var control = /* @__PURE__ */ (0, import_createRuntimeFn5.createRuntimeFn)({ defaultClassName: "_1y7mzsn3", variantClassNames: { size: { sm: "_1y7mzsn4", md: "_1y7mzsn5" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
823
+ var indeterminateIcon = "_1y7mzsn9 _1y7mzsn7";
824
+ var input2 = "_1y7mzsn6";
825
+ var root4 = /* @__PURE__ */ (0, import_createRuntimeFn5.createRuntimeFn)({ defaultClassName: "_1y7mzsn0", variantClassNames: { size: { sm: "_1y7mzsn1", md: "_1y7mzsn2" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
826
+
827
+ // src/components/Checkbox/Checkbox.tsx
828
+ var import_jsx_runtime9 = require("react/jsx-runtime");
829
+ var Checkbox = /* @__PURE__ */ (0, import_react9.forwardRef)(function Checkbox2({ label: label6, size, indeterminate = false, invalid, disabled, className, ...rest }, ref) {
830
+ const innerRef = (0, import_react9.useRef)(null);
831
+ (0, import_react9.useEffect)(() => {
832
+ if (innerRef.current) innerRef.current.indeterminate = indeterminate;
833
+ }, [indeterminate]);
834
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("label", { className: cx(root4({ size }), className), "data-disabled": disabled || void 0, children: [
835
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: control({ size }), children: [
836
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
837
+ "input",
838
+ {
839
+ ref: mergeRefs(innerRef, ref),
840
+ type: "checkbox",
841
+ className: input2,
842
+ disabled,
843
+ "aria-invalid": invalid || void 0,
844
+ ...rest
845
+ }
846
+ ),
847
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { className: checkIcon, viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
848
+ "path",
849
+ {
850
+ d: "M5 10.5l3.2 3L15 7",
851
+ stroke: "currentColor",
852
+ strokeWidth: "2",
853
+ strokeLinecap: "round",
854
+ strokeLinejoin: "round"
855
+ }
856
+ ) }),
857
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { className: indeterminateIcon, viewBox: "0 0 20 20", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: "M6 10h8", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) })
858
+ ] }),
859
+ label6
860
+ ] });
861
+ });
862
+
863
+ // src/components/AgreementGroup/AgreementGroup.css.ts
864
+ var all = "j3uxdc3";
865
+ var box = "j3uxdc2";
866
+ var chevron2 = "j3uxdc9";
867
+ var content3 = "j3uxdca";
868
+ var fieldset2 = "j3uxdc0";
869
+ var item2 = "j3uxdc5";
870
+ var legend2 = "j3uxdc1";
871
+ var list = "j3uxdc4";
872
+ var row2 = "j3uxdc6";
873
+ var tag = "j3uxdc7";
874
+ var toggle = "j3uxdc8";
875
+
876
+ // src/components/AgreementGroup/AgreementGroup.tsx
877
+ var import_jsx_runtime10 = require("react/jsx-runtime");
878
+ function hasAllRequiredAgreements(items2, value4) {
879
+ return items2.every((item7) => !item7.required || value4.includes(item7.value));
880
+ }
881
+ var AgreementGroup = /* @__PURE__ */ (0, import_react10.forwardRef)(
882
+ function AgreementGroup2(props, ref) {
883
+ const {
884
+ items: items2,
885
+ value: value4,
886
+ defaultValue,
887
+ onValueChange,
888
+ label: label6,
889
+ allLabel = "\uC804\uCCB4 \uB3D9\uC758",
890
+ helperText: helperText3,
891
+ error,
892
+ disabled,
893
+ requiredText = "\uD544\uC218",
894
+ optionalText = "\uC120\uD0DD",
895
+ showText = "\uBCF4\uAE30",
896
+ hideText = "\uC811\uAE30",
897
+ name,
898
+ className
899
+ } = props;
900
+ const baseId = (0, import_react10.useId)();
901
+ const helperId = helperText3 ? `${baseId}-helper` : void 0;
902
+ const isControlled = "value" in props;
903
+ const [innerValue, setInnerValue] = (0, import_react10.useState)(defaultValue ?? []);
904
+ const agreed = isControlled ? value4 ?? [] : innerValue;
905
+ const [expanded, setExpanded] = (0, import_react10.useState)([]);
906
+ const update = (next) => {
907
+ if (!isControlled) setInnerValue(next);
908
+ onValueChange?.(next);
909
+ };
910
+ const allValues = items2.map((item7) => item7.value);
911
+ const agreedCount = allValues.filter((v) => agreed.includes(v)).length;
912
+ const allChecked = items2.length > 0 && agreedCount === items2.length;
913
+ const toggleItem = (itemValue, checked) => update(checked ? [...agreed.filter((v) => v !== itemValue), itemValue] : agreed.filter((v) => v !== itemValue));
914
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
915
+ "fieldset",
916
+ {
917
+ ref,
918
+ className: cx(fieldset2, className),
919
+ disabled,
920
+ "aria-describedby": helperId,
921
+ "data-invalid": error || void 0,
922
+ children: [
923
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("legend", { className: legend2, children: label6 }),
924
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: box, children: [
925
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: all, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
926
+ Checkbox,
927
+ {
928
+ label: allLabel,
929
+ checked: allChecked,
930
+ indeterminate: agreedCount > 0 && !allChecked,
931
+ onChange: (event) => update(event.target.checked ? allValues : [])
932
+ }
933
+ ) }),
934
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("ul", { className: list, children: items2.map((item7) => {
935
+ const labelId = `${baseId}-${item7.value}-label`;
936
+ const toggleTextId = `${baseId}-${item7.value}-toggle`;
937
+ const contentId = `${baseId}-${item7.value}-content`;
938
+ const isOpen = expanded.includes(item7.value);
939
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("li", { className: item2, children: [
940
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: row2, children: [
941
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
942
+ Checkbox,
943
+ {
944
+ size: "sm",
945
+ checked: agreed.includes(item7.value),
946
+ invalid: error && item7.required && !agreed.includes(item7.value),
947
+ onChange: (event) => toggleItem(item7.value, event.target.checked),
948
+ label: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { id: labelId, children: [
949
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: tag, "data-required": item7.required || void 0, children: item7.required ? requiredText : optionalText }),
950
+ " ",
951
+ item7.label
952
+ ] })
953
+ }
954
+ ),
955
+ item7.content && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
956
+ "button",
957
+ {
958
+ type: "button",
959
+ className: toggle,
960
+ "aria-expanded": isOpen,
961
+ "aria-controls": contentId,
962
+ "aria-labelledby": `${labelId} ${toggleTextId}`,
963
+ onClick: () => setExpanded((prev) => isOpen ? prev.filter((v) => v !== item7.value) : [...prev, item7.value]),
964
+ children: [
965
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { id: toggleTextId, children: isOpen ? hideText : showText }),
966
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_icons4.ChevronDownIcon, { size: 14, className: chevron2 })
967
+ ]
968
+ }
969
+ )
970
+ ] }),
971
+ item7.content && isOpen && // 내용이 길면 스크롤된다 — 키보드로도 스크롤할 수 있게 포커스를 받는 이름 있는 영역으로 둔다
972
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
973
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { id: contentId, role: "region", "aria-labelledby": labelId, tabIndex: 0, className: content3, children: item7.content })
974
+ ] }, item7.value);
975
+ }) })
976
+ ] }),
977
+ name && agreed.map((v) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("input", { type: "hidden", name, value: v }, v)),
978
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
979
+ ]
980
+ }
981
+ );
982
+ }
983
+ );
984
+
985
+ // src/components/Alert/Alert.tsx
986
+ var import_react11 = require("react");
987
+ var import_icons5 = require("@bestow-ui/icons");
988
+
989
+ // src/components/Alert/Alert.css.ts
990
+ var import_createRuntimeFn6 = require("@vanilla-extract/recipes/createRuntimeFn");
350
991
  var action = "bsmpc0j";
351
- 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: [] });
352
- var closeButton = "bsmpc0k";
353
- var content2 = "bsmpc0g";
354
- var description = "bsmpc0i";
355
- var icon = "bsmpc0f";
356
- var title = "bsmpc0h";
992
+ 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: [] });
993
+ var closeButton2 = "bsmpc0k";
994
+ var content4 = "bsmpc0g";
995
+ var description2 = "bsmpc0i";
996
+ var icon2 = "bsmpc0f";
997
+ var title2 = "bsmpc0h";
357
998
 
358
999
  // src/components/Alert/Alert.tsx
359
- var import_jsx_runtime3 = require("react/jsx-runtime");
1000
+ var import_jsx_runtime11 = require("react/jsx-runtime");
360
1001
  var defaultIcons = {
361
- primary: import_icons2.InfoIcon,
362
- neutral: import_icons2.InfoIcon,
363
- success: import_icons2.CircleCheckIcon,
364
- warning: import_icons2.TriangleAlertIcon,
365
- danger: import_icons2.CircleAlertIcon
1002
+ primary: import_icons5.InfoIcon,
1003
+ neutral: import_icons5.InfoIcon,
1004
+ success: import_icons5.CircleCheckIcon,
1005
+ warning: import_icons5.TriangleAlertIcon,
1006
+ danger: import_icons5.CircleAlertIcon
366
1007
  };
367
- 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) {
1008
+ var Alert = /* @__PURE__ */ (0, import_react11.forwardRef)(function Alert2({ variant, color = "primary", title: title6, icon: icon6, action: action3, onClose, closeLabel = "\uB2EB\uAE30", className, children, ...rest }, ref) {
368
1009
  const DefaultIcon = defaultIcons[color];
369
- const iconNode = icon6 === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DefaultIcon, { size: 18 }) : icon6;
370
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { ref, className: cx(alert({ variant, color }), className), ...rest, children: [
371
- iconNode !== false && iconNode !== null && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: icon, "aria-hidden": true, children: iconNode }),
372
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: content2, children: [
373
- title6 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: title, children: title6 }),
374
- children && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: description, children })
1010
+ const iconNode = icon6 === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DefaultIcon, { size: 18 }) : icon6;
1011
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { ref, className: cx(alert({ variant, color }), className), ...rest, children: [
1012
+ iconNode !== false && iconNode !== null && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: icon2, "aria-hidden": true, children: iconNode }),
1013
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: content4, children: [
1014
+ title6 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: title2, children: title6 }),
1015
+ children && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: description2, children })
375
1016
  ] }),
376
- action3 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: action, children: action3 }),
377
- 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 }) })
1017
+ action3 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: action, children: action3 }),
1018
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("button", { type: "button", className: closeButton2, "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_icons5.XIcon, { size: 16 }) })
378
1019
  ] });
379
1020
  });
380
1021
 
1022
+ // src/components/AmountInput/AmountInput.tsx
1023
+ var import_react13 = require("react");
1024
+
1025
+ // src/utils/koreanFormat.ts
1026
+ var onlyDigits = (input5) => input5.replace(/\D/g, "");
1027
+ function phoneNumberMaxDigits(digits) {
1028
+ if (digits.startsWith("02")) return 10;
1029
+ if (/^1[568]/.test(digits)) return 8;
1030
+ return 11;
1031
+ }
1032
+ function formatPhoneNumber(input5) {
1033
+ const d = onlyDigits(input5).slice(0, phoneNumberMaxDigits(onlyDigits(input5)));
1034
+ if (d.startsWith("02")) {
1035
+ if (d.length <= 2) return d;
1036
+ if (d.length <= 5) return `${d.slice(0, 2)}-${d.slice(2)}`;
1037
+ if (d.length <= 9) return `${d.slice(0, 2)}-${d.slice(2, 5)}-${d.slice(5)}`;
1038
+ return `${d.slice(0, 2)}-${d.slice(2, 6)}-${d.slice(6)}`;
1039
+ }
1040
+ if (/^1[568]/.test(d)) {
1041
+ return d.length <= 4 ? d : `${d.slice(0, 4)}-${d.slice(4)}`;
1042
+ }
1043
+ if (d.length <= 3) return d;
1044
+ if (d.length <= 6) return `${d.slice(0, 3)}-${d.slice(3)}`;
1045
+ if (d.length <= 10) return `${d.slice(0, 3)}-${d.slice(3, 6)}-${d.slice(6)}`;
1046
+ return `${d.slice(0, 3)}-${d.slice(3, 7)}-${d.slice(7)}`;
1047
+ }
1048
+ function formatBusinessNumber(input5) {
1049
+ const d = onlyDigits(input5).slice(0, 10);
1050
+ if (d.length <= 3) return d;
1051
+ if (d.length <= 5) return `${d.slice(0, 3)}-${d.slice(3)}`;
1052
+ return `${d.slice(0, 3)}-${d.slice(3, 5)}-${d.slice(5)}`;
1053
+ }
1054
+ function isValidBusinessNumber(input5) {
1055
+ const d = onlyDigits(input5);
1056
+ if (d.length !== 10) return false;
1057
+ const weights = [1, 3, 7, 1, 3, 7, 1, 3, 5];
1058
+ const digits = [...d].map(Number);
1059
+ let sum = weights.reduce((acc, w, i) => acc + w * digits[i], 0);
1060
+ sum += Math.floor(digits[8] * 5 / 10);
1061
+ return (10 - sum % 10) % 10 === digits[9];
1062
+ }
1063
+ function formatKoreanAmount(amount, unit = "\uC6D0") {
1064
+ const n = Math.floor(Math.abs(amount));
1065
+ if (n === 0) return `0${unit}`;
1066
+ const units = [
1067
+ { value: 1e12, label: "\uC870" },
1068
+ { value: 1e8, label: "\uC5B5" },
1069
+ { value: 1e4, label: "\uB9CC" },
1070
+ { value: 1, label: "" }
1071
+ ];
1072
+ let rest = n;
1073
+ const parts = [];
1074
+ for (const u of units) {
1075
+ const q = Math.floor(rest / u.value);
1076
+ rest %= u.value;
1077
+ if (q > 0) parts.push(`${q.toLocaleString("ko-KR")}${u.label}`);
1078
+ }
1079
+ return `${amount < 0 ? "-" : ""}${parts.join(" ")}${unit}`;
1080
+ }
1081
+
1082
+ // src/utils/useFormattedInput.ts
1083
+ var import_react12 = require("react");
1084
+ function caretAfter(display, count2, isMeaningful) {
1085
+ if (count2 <= 0) return 0;
1086
+ let seen = 0;
1087
+ for (let i = 0; i < display.length; i++) {
1088
+ if (isMeaningful(display[i])) seen++;
1089
+ if (seen === count2) return i + 1;
1090
+ }
1091
+ return display.length;
1092
+ }
1093
+ function useFormattedInput({
1094
+ isControlled,
1095
+ value: value4,
1096
+ defaultValue,
1097
+ onValueChange,
1098
+ sanitize: sanitize3,
1099
+ format,
1100
+ isMeaningful,
1101
+ inputRef
1102
+ }) {
1103
+ const [innerValue, setInnerValue] = (0, import_react12.useState)(() => sanitize3(defaultValue ?? ""));
1104
+ const raw = isControlled ? sanitize3(value4 ?? "") : innerValue;
1105
+ const display = format(raw);
1106
+ const pendingCaret = (0, import_react12.useRef)(null);
1107
+ (0, import_react12.useLayoutEffect)(() => {
1108
+ const input5 = inputRef.current;
1109
+ if (pendingCaret.current === null || !input5 || document.activeElement !== input5) return;
1110
+ const position = caretAfter(input5.value, pendingCaret.current, isMeaningful);
1111
+ input5.setSelectionRange(position, position);
1112
+ pendingCaret.current = null;
1113
+ });
1114
+ const commit = (next, caretCount) => {
1115
+ pendingCaret.current = caretCount;
1116
+ if (!isControlled) setInnerValue(next);
1117
+ if (next !== raw) onValueChange?.(next);
1118
+ };
1119
+ const onChange = (event) => {
1120
+ const { value: typed, selectionStart } = event.target;
1121
+ const next = sanitize3(typed);
1122
+ const before = sanitize3(typed.slice(0, selectionStart ?? typed.length));
1123
+ commit(next, Math.min(before.length, next.length));
1124
+ };
1125
+ const onKeyDown = (event) => {
1126
+ const input5 = event.currentTarget;
1127
+ const { selectionStart: start, selectionEnd: end } = input5;
1128
+ if (start === null || start !== end) return;
1129
+ const countBefore = (text2) => [...text2].filter(isMeaningful).length;
1130
+ if (event.key === "Backspace" && start > 0 && !isMeaningful(input5.value[start - 1])) {
1131
+ const index = countBefore(input5.value.slice(0, start)) - 1;
1132
+ if (index < 0) return;
1133
+ event.preventDefault();
1134
+ commit(raw.slice(0, index) + raw.slice(index + 1), index);
1135
+ } else if (event.key === "Delete" && start < input5.value.length && !isMeaningful(input5.value[start])) {
1136
+ const index = countBefore(input5.value.slice(0, start));
1137
+ if (index >= raw.length) return;
1138
+ event.preventDefault();
1139
+ commit(raw.slice(0, index) + raw.slice(index + 1), index);
1140
+ }
1141
+ };
1142
+ return { raw, display, onChange, onKeyDown };
1143
+ }
1144
+
1145
+ // src/components/AmountInput/AmountInput.css.ts
1146
+ var input3 = "_70qkav0";
1147
+
1148
+ // src/components/AmountInput/AmountInput.tsx
1149
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1150
+ var MAX_DIGITS = 15;
1151
+ var isDigit = (char) => /\d/.test(char);
1152
+ var AmountInput = /* @__PURE__ */ (0, import_react13.forwardRef)(
1153
+ function AmountInput2(props, ref) {
1154
+ const {
1155
+ value: value4,
1156
+ defaultValue,
1157
+ onValueChange,
1158
+ max,
1159
+ unit = "\uC6D0",
1160
+ showKoreanAmount = true,
1161
+ label: label6 = "\uAE08\uC561",
1162
+ placeholder = "0",
1163
+ helperText: helperText3,
1164
+ onKeyDown,
1165
+ className,
1166
+ ...rest
1167
+ } = props;
1168
+ const inputRef = (0, import_react13.useRef)(null);
1169
+ const sanitize3 = (input5) => {
1170
+ let digits = input5.replace(/\D/g, "").replace(/^0+(?=\d)/, "").slice(0, MAX_DIGITS);
1171
+ if (max !== void 0 && digits && Number(digits) > max) digits = String(Math.floor(max));
1172
+ return digits;
1173
+ };
1174
+ const toRaw = (amount) => amount === null || amount === void 0 ? "" : String(Math.floor(Math.abs(amount)));
1175
+ const field3 = useFormattedInput({
1176
+ isControlled: "value" in props,
1177
+ value: toRaw(value4),
1178
+ defaultValue: toRaw(defaultValue),
1179
+ onValueChange: (digits) => onValueChange?.(digits === "" ? null : Number(digits)),
1180
+ sanitize: sanitize3,
1181
+ format: (digits) => digits === "" ? "" : Number(digits).toLocaleString("ko-KR"),
1182
+ isMeaningful: isDigit,
1183
+ inputRef
1184
+ });
1185
+ const reading = showKoreanAmount && field3.raw !== "" ? formatKoreanAmount(Number(field3.raw), unit) : null;
1186
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1187
+ TextField,
1188
+ {
1189
+ ref: mergeRefs(ref, inputRef),
1190
+ label: label6,
1191
+ placeholder,
1192
+ inputMode: "numeric",
1193
+ value: field3.display,
1194
+ onChange: field3.onChange,
1195
+ onKeyDown: (event) => {
1196
+ field3.onKeyDown(event);
1197
+ onKeyDown?.(event);
1198
+ },
1199
+ endAdornment: unit,
1200
+ helperText: reading && helperText3 ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
1201
+ reading,
1202
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("br", {}),
1203
+ helperText3
1204
+ ] }) : reading ?? helperText3,
1205
+ className: cx(input3, className),
1206
+ ...rest
1207
+ }
1208
+ );
1209
+ }
1210
+ );
1211
+
381
1212
  // src/components/Avatar/Avatar.tsx
382
1213
  var RadixAvatar = __toESM(require("@radix-ui/react-avatar"), 1);
383
- var import_icons3 = require("@bestow-ui/icons");
384
- var import_react4 = require("react");
1214
+ var import_icons6 = require("@bestow-ui/icons");
1215
+ var import_react14 = require("react");
385
1216
 
386
1217
  // src/components/Avatar/Avatar.css.ts
387
- var import_createRuntimeFn2 = require("@vanilla-extract/recipes/createRuntimeFn");
1218
+ var import_createRuntimeFn7 = require("@vanilla-extract/recipes/createRuntimeFn");
388
1219
  var fallback = "_1fd2kp27";
389
1220
  var image = "_1fd2kp26";
390
- 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: [] });
1221
+ 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: [] });
391
1222
 
392
1223
  // src/components/Avatar/Avatar.tsx
393
- var import_jsx_runtime4 = require("react/jsx-runtime");
1224
+ var import_jsx_runtime13 = require("react/jsx-runtime");
394
1225
  function getInitials(name) {
395
1226
  const [a = "", b = ""] = name.trim().split(/\s+/);
396
1227
  const first = (word) => Array.from(word)[0] ?? "";
397
1228
  return (first(a) + first(b)).toUpperCase();
398
1229
  }
399
- var Avatar = /* @__PURE__ */ (0, import_react4.forwardRef)(function Avatar2({ src, alt, name, fallback: fallback2, size, shape, className, ...rest }, ref) {
400
- const label5 = alt ?? name;
401
- const a11y = label5 ? { role: "img", "aria-label": label5 } : { "aria-hidden": true };
1230
+ var Avatar = /* @__PURE__ */ (0, import_react14.forwardRef)(function Avatar2({ src, alt, name, fallback: fallback2, size, shape, className, ...rest }, ref) {
1231
+ const label6 = alt ?? name;
1232
+ const a11y = label6 ? { role: "img", "aria-label": label6 } : { "aria-hidden": true };
402
1233
  const initials = name ? getInitials(name) : "";
403
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(RadixAvatar.Root, { ref, className: cx(root3({ size, shape }), className), ...a11y, ...rest, children: [
404
- src && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RadixAvatar.Image, { src, alt: "", className: image }),
405
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RadixAvatar.Fallback, { className: fallback, children: fallback2 ?? (initials || /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons3.UserIcon, { size: "60%" })) })
1234
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(RadixAvatar.Root, { ref, className: cx(root5({ size, shape }), className), ...a11y, ...rest, children: [
1235
+ src && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(RadixAvatar.Image, { src, alt: "", className: image }),
1236
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(RadixAvatar.Fallback, { className: fallback, children: fallback2 ?? (initials || /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_icons6.UserIcon, { size: "60%" })) })
406
1237
  ] });
407
1238
  });
408
1239
 
409
1240
  // src/components/Badge/Badge.tsx
410
- var import_react5 = require("react");
1241
+ var import_react15 = require("react");
411
1242
 
412
1243
  // src/components/Badge/Badge.css.ts
413
- var import_createRuntimeFn3 = require("@vanilla-extract/recipes/createRuntimeFn");
414
- 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: [] });
415
- var icon2 = "_1295cfng";
1244
+ var import_createRuntimeFn8 = require("@vanilla-extract/recipes/createRuntimeFn");
1245
+ 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: [] });
1246
+ var icon3 = "_1295cfng";
416
1247
 
417
1248
  // src/components/Badge/Badge.tsx
418
- var import_jsx_runtime5 = require("react/jsx-runtime");
419
- var Badge = /* @__PURE__ */ (0, import_react5.forwardRef)(function Badge2({ variant, color, size, startIcon, className, children, ...rest }, ref) {
420
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { ref, className: cx(badge({ variant, color, size }), className), ...rest, children: [
421
- startIcon && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: icon2, children: startIcon }),
1249
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1250
+ var Badge = /* @__PURE__ */ (0, import_react15.forwardRef)(function Badge2({ variant, color, size, startIcon, className, children, ...rest }, ref) {
1251
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("span", { ref, className: cx(badge({ variant, color, size }), className), ...rest, children: [
1252
+ startIcon && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: icon3, children: startIcon }),
422
1253
  children
423
1254
  ] });
424
1255
  });
425
1256
 
426
1257
  // src/components/Breadcrumb/Breadcrumb.tsx
427
- var import_react7 = require("react");
428
- var import_icons5 = require("@bestow-ui/icons");
1258
+ var import_react17 = require("react");
1259
+ var import_icons8 = require("@bestow-ui/icons");
429
1260
 
430
1261
  // src/components/Link/Link.tsx
431
1262
  var import_react_slot = require("@radix-ui/react-slot");
432
- var import_react6 = require("react");
433
- var import_icons4 = require("@bestow-ui/icons");
434
-
435
- // src/styles/visuallyHidden.css.ts
436
- var visuallyHidden = "_1kdtbw10";
1263
+ var import_react16 = require("react");
1264
+ var import_icons7 = require("@bestow-ui/icons");
437
1265
 
438
1266
  // src/components/Link/Link.css.ts
439
- var import_createRuntimeFn4 = require("@vanilla-extract/recipes/createRuntimeFn");
1267
+ var import_createRuntimeFn9 = require("@vanilla-extract/recipes/createRuntimeFn");
440
1268
  var externalIcon = "_1t4hlp6";
441
- 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: [] });
1269
+ 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: [] });
442
1270
 
443
1271
  // src/components/Link/Link.tsx
444
- var import_jsx_runtime6 = (
1272
+ var import_jsx_runtime15 = (
445
1273
  // Slot 의 props 타입은 HTMLElement 기준이라 <a> 전용 속성(target·rel 등)은 그대로 넘기도록 단언한다
446
1274
  require("react/jsx-runtime")
447
1275
  );
448
- var Link = /* @__PURE__ */ (0, import_react6.forwardRef)(function Link2({
1276
+ var Link = /* @__PURE__ */ (0, import_react16.forwardRef)(function Link2({
449
1277
  as: Component = "a",
450
1278
  asChild,
451
1279
  color,
@@ -460,9 +1288,9 @@ var Link = /* @__PURE__ */ (0, import_react6.forwardRef)(function Link2({
460
1288
  }, ref) {
461
1289
  const linkClassName = cx(link({ color, underline }), className);
462
1290
  if (asChild) {
463
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_slot.Slot, { ref, className: linkClassName, ...{ target, rel, ...rest }, children });
1291
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_slot.Slot, { ref, className: linkClassName, ...{ target, rel, ...rest }, children });
464
1292
  }
465
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1293
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
466
1294
  Component,
467
1295
  {
468
1296
  ref,
@@ -472,10 +1300,10 @@ var Link = /* @__PURE__ */ (0, import_react6.forwardRef)(function Link2({
472
1300
  ...rest,
473
1301
  children: [
474
1302
  children,
475
- external && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
1303
+ external && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [
476
1304
  " ",
477
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons4.ExternalLinkIcon, { className: externalIcon }),
478
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: visuallyHidden, children: externalLabel })
1305
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_icons7.ExternalLinkIcon, { className: externalIcon }),
1306
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: visuallyHidden, children: externalLabel })
479
1307
  ] })
480
1308
  ]
481
1309
  }
@@ -484,241 +1312,429 @@ var Link = /* @__PURE__ */ (0, import_react6.forwardRef)(function Link2({
484
1312
 
485
1313
  // src/components/Breadcrumb/Breadcrumb.css.ts
486
1314
  var current = "_18t8ztt3";
487
- var item2 = "_18t8ztt1";
1315
+ var item3 = "_18t8ztt1";
488
1316
  var link2 = "_18t8ztt2";
489
- var list = "_18t8ztt0";
1317
+ var list2 = "_18t8ztt0";
490
1318
  var separator = "_18t8ztt4";
491
1319
 
492
1320
  // src/components/Breadcrumb/Breadcrumb.tsx
493
- var import_jsx_runtime7 = require("react/jsx-runtime");
494
- var Breadcrumb = /* @__PURE__ */ (0, import_react7.forwardRef)(function Breadcrumb2({ items: items2, linkAs, separator: separator3, "aria-label": ariaLabel = "\uC774\uB3D9 \uACBD\uB85C", className, ...rest }, ref) {
495
- const sep = separator3 ?? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons5.ChevronRightIcon, { size: 14 });
496
- 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) => {
1321
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1322
+ var Breadcrumb = /* @__PURE__ */ (0, import_react17.forwardRef)(function Breadcrumb2({ items: items2, linkAs, separator: separator3, "aria-label": ariaLabel = "\uC774\uB3D9 \uACBD\uB85C", className, ...rest }, ref) {
1323
+ const sep = separator3 ?? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_icons8.ChevronRightIcon, { size: 14 });
1324
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("nav", { ref, "aria-label": ariaLabel, className, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("ol", { className: list2, children: items2.map((item7, index) => {
497
1325
  const isCurrent = index === items2.length - 1;
498
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("li", { className: item2, children: [
499
- index > 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: separator, "aria-hidden": true, children: sep }),
500
- 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 })
1326
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("li", { className: item3, children: [
1327
+ index > 0 && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: separator, "aria-hidden": true, children: sep }),
1328
+ isCurrent || item7.href === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: isCurrent ? current : void 0, "aria-current": isCurrent ? "page" : void 0, children: item7.label }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Link, { as: linkAs, href: item7.href, color: "neutral", underline: "hover", className: link2, children: item7.label })
501
1329
  ] }, index);
502
1330
  }) }) });
503
1331
  });
504
1332
 
505
- // src/components/Button/Button.tsx
506
- var import_react9 = require("react");
507
-
508
- // src/components/Spinner/Spinner.tsx
509
- var import_icons6 = require("@bestow-ui/icons");
510
- var import_react8 = require("react");
511
-
512
- // src/components/Spinner/Spinner.css.ts
513
- var import_createRuntimeFn5 = require("@vanilla-extract/recipes/createRuntimeFn");
514
- 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: [] });
515
-
516
- // src/components/Spinner/Spinner.tsx
517
- var import_jsx_runtime8 = require("react/jsx-runtime");
518
- var Spinner = /* @__PURE__ */ (0, import_react8.forwardRef)(function Spinner2({ size, color, label: label5 = "\uB85C\uB529 \uC911", className, ...rest }, ref) {
519
- const a11y = label5 ? { role: "status" } : { "aria-hidden": true };
520
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { ref, className: cx(spinner({ size, color }), className), ...a11y, ...rest, children: [
521
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_icons6.LoaderIcon, { size: "100%" }),
522
- label5 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: visuallyHidden, children: label5 })
523
- ] });
524
- });
525
-
526
- // src/components/Button/Button.css.ts
527
- var import_createRuntimeFn6 = require("@vanilla-extract/recipes/createRuntimeFn");
528
- 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: [] });
529
- var icon3 = "xcekdai";
530
-
531
- // src/components/Button/Button.tsx
532
- var import_jsx_runtime9 = require("react/jsx-runtime");
533
- var Button = /* @__PURE__ */ (0, import_react9.forwardRef)(function Button2({
534
- variant,
535
- color,
536
- size,
537
- fullWidth,
538
- startIcon,
539
- endIcon,
540
- loading,
541
- className,
542
- type = "button",
543
- onClick,
544
- children,
545
- ...rest
546
- }, ref) {
547
- const handleClick = (event) => {
548
- if (loading) {
549
- event.preventDefault();
550
- return;
551
- }
552
- onClick?.(event);
553
- };
554
- const leading = loading ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Spinner, { size: "sm", label: "" }) : startIcon;
555
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
556
- "button",
557
- {
558
- ref,
559
- type,
560
- className: cx(button({ variant, color, size, fullWidth }), className),
561
- "aria-busy": loading || void 0,
562
- "aria-disabled": loading || void 0,
563
- onClick: handleClick,
564
- ...rest,
565
- children: [
566
- leading && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: icon3, children: leading }),
567
- children,
568
- endIcon && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: icon3, children: endIcon })
569
- ]
570
- }
571
- );
572
- });
1333
+ // src/components/BusinessNumberInput/BusinessNumberInput.tsx
1334
+ var import_react18 = require("react");
1335
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1336
+ var sanitize = (input5) => input5.replace(/\D/g, "").slice(0, 10);
1337
+ var isDigit2 = (char) => /\d/.test(char);
1338
+ var BusinessNumberInput = /* @__PURE__ */ (0, import_react18.forwardRef)(
1339
+ function BusinessNumberInput2(props, ref) {
1340
+ const {
1341
+ value: value4,
1342
+ defaultValue,
1343
+ onValueChange,
1344
+ validate = true,
1345
+ invalidText = "\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.",
1346
+ label: label6 = "\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638",
1347
+ placeholder = "000-00-00000",
1348
+ error,
1349
+ helperText: helperText3,
1350
+ onBlur,
1351
+ onKeyDown,
1352
+ ...rest
1353
+ } = props;
1354
+ const inputRef = (0, import_react18.useRef)(null);
1355
+ const [touched, setTouched] = (0, import_react18.useState)(false);
1356
+ const field3 = useFormattedInput({
1357
+ isControlled: "value" in props,
1358
+ value: value4,
1359
+ defaultValue,
1360
+ onValueChange: (digits) => onValueChange?.(digits, digits.length === 10 ? isValidBusinessNumber(digits) : null),
1361
+ sanitize,
1362
+ format: formatBusinessNumber,
1363
+ isMeaningful: isDigit2,
1364
+ inputRef
1365
+ });
1366
+ const complete = field3.raw.length === 10;
1367
+ const autoInvalid = validate && field3.raw.length > 0 && (complete ? !isValidBusinessNumber(field3.raw) : touched);
1368
+ const showAuto = autoInvalid && error === void 0;
1369
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1370
+ TextField,
1371
+ {
1372
+ ref: mergeRefs(ref, inputRef),
1373
+ label: label6,
1374
+ placeholder,
1375
+ inputMode: "numeric",
1376
+ value: field3.display,
1377
+ onChange: field3.onChange,
1378
+ onKeyDown: (event) => {
1379
+ field3.onKeyDown(event);
1380
+ onKeyDown?.(event);
1381
+ },
1382
+ onBlur: (event) => {
1383
+ setTouched(true);
1384
+ onBlur?.(event);
1385
+ },
1386
+ error: error ?? autoInvalid,
1387
+ helperText: showAuto ? complete ? invalidText : "10\uC790\uB9AC\uB97C \uBAA8\uB450 \uC785\uB825\uD574 \uC8FC\uC138\uC694." : helperText3,
1388
+ ...rest
1389
+ }
1390
+ );
1391
+ }
1392
+ );
573
1393
 
574
1394
  // src/components/Card/Card.tsx
575
- var import_react10 = require("react");
1395
+ var import_react19 = require("react");
576
1396
 
577
1397
  // src/components/Card/Card.css.ts
578
- var import_createRuntimeFn7 = require("@vanilla-extract/recipes/createRuntimeFn");
579
- var body = "dnuf1u9";
580
- 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: [] });
581
- var footer = "dnuf1ua";
582
- var header2 = "dnuf1u8";
1398
+ var import_createRuntimeFn10 = require("@vanilla-extract/recipes/createRuntimeFn");
1399
+ var body2 = "dnuf1u9";
1400
+ var card = /* @__PURE__ */ (0, import_createRuntimeFn10.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: [] });
1401
+ var footer2 = "dnuf1ua";
1402
+ var header3 = "dnuf1u8";
583
1403
 
584
1404
  // src/components/Card/Card.tsx
585
- var import_jsx_runtime10 = require("react/jsx-runtime");
586
- var Card = /* @__PURE__ */ (0, import_react10.forwardRef)(function Card2({ variant, padding, as: Component = "div", className, ...rest }, ref) {
587
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Component, { ref, className: cx(card({ variant, padding }), className), ...rest });
1405
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1406
+ var Card = /* @__PURE__ */ (0, import_react19.forwardRef)(function Card2({ variant, padding, as: Component = "div", className, ...rest }, ref) {
1407
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Component, { ref, className: cx(card({ variant, padding }), className), ...rest });
588
1408
  });
589
- var CardHeader = /* @__PURE__ */ (0, import_react10.forwardRef)(function CardHeader2({ className, ...rest }, ref) {
590
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { ref, className: cx(header2, className), ...rest });
1409
+ var CardHeader = /* @__PURE__ */ (0, import_react19.forwardRef)(function CardHeader2({ className, ...rest }, ref) {
1410
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { ref, className: cx(header3, className), ...rest });
591
1411
  });
592
- var CardBody = /* @__PURE__ */ (0, import_react10.forwardRef)(function CardBody2({ className, ...rest }, ref) {
593
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { ref, className: cx(body, className), ...rest });
1412
+ var CardBody = /* @__PURE__ */ (0, import_react19.forwardRef)(function CardBody2({ className, ...rest }, ref) {
1413
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { ref, className: cx(body2, className), ...rest });
594
1414
  });
595
- var CardFooter = /* @__PURE__ */ (0, import_react10.forwardRef)(function CardFooter2({ className, ...rest }, ref) {
596
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { ref, className: cx(footer, className), ...rest });
1415
+ var CardFooter = /* @__PURE__ */ (0, import_react19.forwardRef)(function CardFooter2({ className, ...rest }, ref) {
1416
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { ref, className: cx(footer2, className), ...rest });
597
1417
  });
598
1418
 
599
- // src/components/Checkbox/Checkbox.tsx
600
- var import_react11 = require("react");
1419
+ // src/components/Combobox/Combobox.tsx
1420
+ var Popover = __toESM(require("@radix-ui/react-popover"), 1);
1421
+ var import_react20 = require("react");
1422
+ var import_icons9 = require("@bestow-ui/icons");
601
1423
 
602
- // src/utils/mergeRefs.ts
603
- function mergeRefs(...refs) {
604
- return (value3) => {
605
- for (const ref of refs) {
606
- if (typeof ref === "function") ref(value3);
607
- else if (ref) ref.current = value3;
608
- }
609
- };
610
- }
1424
+ // src/components/Select/Select.css.ts
1425
+ var content5 = "_1kx81e83";
1426
+ var icon4 = "_1kx81e82";
1427
+ var item4 = "_1kx81e85";
1428
+ var itemIndicator = "_1kx81e86";
1429
+ var trigger2 = "_1kx81e80";
1430
+ var value = "_1kx81e81";
1431
+ var viewport = "_1kx81e84";
611
1432
 
612
- // src/components/Checkbox/Checkbox.css.ts
613
- var import_createRuntimeFn8 = require("@vanilla-extract/recipes/createRuntimeFn");
614
- var checkIcon = "_1y7mzsn8 _1y7mzsn7";
615
- var control = /* @__PURE__ */ (0, import_createRuntimeFn8.createRuntimeFn)({ defaultClassName: "_1y7mzsn3", variantClassNames: { size: { sm: "_1y7mzsn4", md: "_1y7mzsn5" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
616
- var indeterminateIcon = "_1y7mzsn9 _1y7mzsn7";
617
- var input = "_1y7mzsn6";
618
- var root4 = /* @__PURE__ */ (0, import_createRuntimeFn8.createRuntimeFn)({ defaultClassName: "_1y7mzsn0", variantClassNames: { size: { sm: "_1y7mzsn1", md: "_1y7mzsn2" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1433
+ // src/components/Combobox/Combobox.css.ts
1434
+ var content6 = "c2pbq71";
1435
+ var empty = "c2pbq72";
1436
+ var toggle2 = "c2pbq70";
619
1437
 
620
- // src/components/Checkbox/Checkbox.tsx
621
- var import_jsx_runtime11 = require("react/jsx-runtime");
622
- var Checkbox = /* @__PURE__ */ (0, import_react11.forwardRef)(function Checkbox2({ label: label5, size, indeterminate = false, invalid, disabled, className, ...rest }, ref) {
623
- const innerRef = (0, import_react11.useRef)(null);
624
- (0, import_react11.useEffect)(() => {
625
- if (innerRef.current) innerRef.current.indeterminate = indeterminate;
626
- }, [indeterminate]);
627
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("label", { className: cx(root4({ size }), className), "data-disabled": disabled || void 0, children: [
628
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: control({ size }), children: [
629
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
630
- "input",
631
- {
632
- ref: mergeRefs(innerRef, ref),
633
- type: "checkbox",
634
- className: input,
635
- disabled,
636
- "aria-invalid": invalid || void 0,
637
- ...rest
1438
+ // src/components/Combobox/Combobox.tsx
1439
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1440
+ var defaultFilter = (option2, query) => option2.label.toLowerCase().includes(query.trim().toLowerCase());
1441
+ var Combobox = /* @__PURE__ */ (0, import_react20.forwardRef)(function Combobox2(props, ref) {
1442
+ const {
1443
+ options,
1444
+ value: value4,
1445
+ defaultValue,
1446
+ onValueChange,
1447
+ filter = defaultFilter,
1448
+ emptyMessage = "\uACB0\uACFC\uAC00 \uC5C6\uC5B4\uC694",
1449
+ placeholder,
1450
+ label: label6,
1451
+ helperText: helperText3,
1452
+ error,
1453
+ size,
1454
+ fullWidth,
1455
+ disabled,
1456
+ required,
1457
+ name,
1458
+ id,
1459
+ "aria-label": ariaLabel,
1460
+ toggleLabel = "\uBAA9\uB85D \uC5F4\uAE30",
1461
+ className
1462
+ } = props;
1463
+ const generatedId = (0, import_react20.useId)();
1464
+ const inputId = id ?? generatedId;
1465
+ const labelId = `${inputId}-label`;
1466
+ const listId = `${inputId}-listbox`;
1467
+ const helperId = helperText3 ? `${inputId}-helper` : void 0;
1468
+ const optionId = (index) => `${inputId}-option-${index}`;
1469
+ const portal2 = usePortalProps();
1470
+ const inputRef = (0, import_react20.useRef)(null);
1471
+ const anchorRef = (0, import_react20.useRef)(null);
1472
+ const isControlled = "value" in props;
1473
+ const [innerValue, setInnerValue] = (0, import_react20.useState)(defaultValue);
1474
+ const selectedValue = isControlled ? value4 : innerValue;
1475
+ const selectedOption = options.find((o) => o.value === selectedValue);
1476
+ const [open, setOpen] = (0, import_react20.useState)(false);
1477
+ const [query, setQuery] = (0, import_react20.useState)(null);
1478
+ const [activeIndex, setActiveIndex] = (0, import_react20.useState)(-1);
1479
+ const filtered = (0, import_react20.useMemo)(() => query ? options.filter((o) => filter(o, query)) : options, [options, filter, query]);
1480
+ const inputText = query ?? selectedOption?.label ?? "";
1481
+ const firstEnabled = (list5, from = 0, step = 1) => {
1482
+ for (let i = from; i >= 0 && i < list5.length; i += step) if (!list5[i].disabled) return i;
1483
+ return -1;
1484
+ };
1485
+ const openList = (list5 = filtered, preferLast = false) => {
1486
+ setOpen(true);
1487
+ const selectedIndex = list5.findIndex((o) => o.value === selectedValue);
1488
+ setActiveIndex(
1489
+ selectedIndex >= 0 && !list5[selectedIndex].disabled ? selectedIndex : preferLast ? firstEnabled(list5, list5.length - 1, -1) : firstEnabled(list5)
1490
+ );
1491
+ };
1492
+ const close2 = () => {
1493
+ setOpen(false);
1494
+ setQuery(null);
1495
+ setActiveIndex(-1);
1496
+ };
1497
+ const select = (option2) => {
1498
+ if (option2.disabled) return;
1499
+ if (!isControlled) setInnerValue(option2.value);
1500
+ if (option2.value !== selectedValue) onValueChange?.(option2.value);
1501
+ close2();
1502
+ };
1503
+ const move = (step) => {
1504
+ const start = activeIndex < 0 ? step === 1 ? 0 : filtered.length - 1 : activeIndex + step;
1505
+ const next = firstEnabled(filtered, start, step);
1506
+ if (next >= 0) setActiveIndex(next);
1507
+ };
1508
+ const handleChange = (event) => {
1509
+ const nextQuery = event.target.value;
1510
+ const nextList = nextQuery ? options.filter((o) => filter(o, nextQuery)) : options;
1511
+ setQuery(nextQuery);
1512
+ setOpen(true);
1513
+ setActiveIndex(firstEnabled(nextList));
1514
+ };
1515
+ const handleKeyDown = (event) => {
1516
+ switch (event.key) {
1517
+ case "ArrowDown":
1518
+ event.preventDefault();
1519
+ if (!open) openList();
1520
+ else move(1);
1521
+ break;
1522
+ case "ArrowUp":
1523
+ event.preventDefault();
1524
+ if (!open) openList(filtered, true);
1525
+ else move(-1);
1526
+ break;
1527
+ case "Enter":
1528
+ if (open) {
1529
+ event.preventDefault();
1530
+ const option2 = filtered[activeIndex];
1531
+ if (option2) select(option2);
638
1532
  }
639
- ),
640
- /* @__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)(
641
- "path",
1533
+ break;
1534
+ case "Escape":
1535
+ if (open) {
1536
+ event.preventDefault();
1537
+ close2();
1538
+ }
1539
+ break;
1540
+ case "Tab":
1541
+ if (open) close2();
1542
+ break;
1543
+ }
1544
+ };
1545
+ (0, import_react20.useEffect)(() => {
1546
+ if (!open || activeIndex < 0) return;
1547
+ document.getElementById(optionId(activeIndex))?.scrollIntoView?.({ block: "nearest" });
1548
+ }, [open, activeIndex]);
1549
+ const hasOptions = filtered.length > 0;
1550
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
1551
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("label", { id: labelId, htmlFor: inputId, className: label, children: [
1552
+ label6,
1553
+ required && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
1554
+ ] }),
1555
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Popover.Root, { open: open && !disabled, onOpenChange: (next) => next ? openList() : close2(), children: [
1556
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Popover.Anchor, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1557
+ "div",
642
1558
  {
643
- d: "M5 10.5l3.2 3L15 7",
644
- stroke: "currentColor",
645
- strokeWidth: "2",
646
- strokeLinecap: "round",
647
- strokeLinejoin: "round"
1559
+ ref: anchorRef,
1560
+ className: cx(root3({ size, fullWidth }), className),
1561
+ "data-invalid": error || void 0,
1562
+ "data-disabled": disabled || void 0,
1563
+ children: [
1564
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1565
+ "input",
1566
+ {
1567
+ ref: mergeRefs(ref, inputRef),
1568
+ id: inputId,
1569
+ type: "text",
1570
+ role: "combobox",
1571
+ "aria-expanded": open,
1572
+ "aria-controls": open && hasOptions ? listId : void 0,
1573
+ "aria-autocomplete": "list",
1574
+ "aria-activedescendant": open && activeIndex >= 0 ? optionId(activeIndex) : void 0,
1575
+ "aria-label": label6 ? void 0 : ariaLabel,
1576
+ "aria-invalid": error || void 0,
1577
+ "aria-required": required || void 0,
1578
+ "aria-describedby": helperId,
1579
+ autoComplete: "off",
1580
+ placeholder,
1581
+ disabled,
1582
+ value: inputText,
1583
+ onChange: handleChange,
1584
+ onKeyDown: handleKeyDown,
1585
+ onBlur: () => {
1586
+ if (open) close2();
1587
+ },
1588
+ className: input
1589
+ }
1590
+ ),
1591
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1592
+ "button",
1593
+ {
1594
+ type: "button",
1595
+ tabIndex: -1,
1596
+ "aria-label": toggleLabel,
1597
+ "aria-expanded": open,
1598
+ disabled,
1599
+ className: toggle2,
1600
+ onMouseDown: (event) => event.preventDefault(),
1601
+ onClick: () => {
1602
+ if (open) close2();
1603
+ else openList(options);
1604
+ inputRef.current?.focus();
1605
+ },
1606
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_icons9.ChevronDownIcon, { size: 16 })
1607
+ }
1608
+ )
1609
+ ]
648
1610
  }
649
1611
  ) }),
650
- /* @__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" }) })
1612
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1613
+ Popover.Content,
1614
+ {
1615
+ role: "presentation",
1616
+ align: "start",
1617
+ sideOffset: 4,
1618
+ collisionPadding: 8,
1619
+ className: cx(portal2.className, content6),
1620
+ style: portal2.style,
1621
+ onOpenAutoFocus: (event) => event.preventDefault(),
1622
+ onCloseAutoFocus: (event) => event.preventDefault(),
1623
+ onMouseDown: (event) => event.preventDefault(),
1624
+ onInteractOutside: (event) => {
1625
+ if (anchorRef.current?.contains(event.target)) event.preventDefault();
1626
+ },
1627
+ children: hasOptions ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1628
+ "div",
1629
+ {
1630
+ id: listId,
1631
+ role: "listbox",
1632
+ "aria-labelledby": label6 ? labelId : void 0,
1633
+ "aria-label": label6 ? void 0 : ariaLabel,
1634
+ children: filtered.map((option2, index) => {
1635
+ const isSelected = option2.value === selectedValue;
1636
+ return (
1637
+ // aria-activedescendant 패턴: 포커스·키보드는 입력창이 맡고 항목은 포커스를 받지 않는다 (WAI-ARIA combobox)
1638
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/interactive-supports-focus
1639
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1640
+ "div",
1641
+ {
1642
+ id: optionId(index),
1643
+ role: "option",
1644
+ "aria-selected": isSelected,
1645
+ "aria-disabled": option2.disabled || void 0,
1646
+ "data-highlighted": index === activeIndex ? "" : void 0,
1647
+ "data-state": isSelected ? "checked" : "unchecked",
1648
+ "data-disabled": option2.disabled ? "" : void 0,
1649
+ className: item4,
1650
+ onMouseDown: (event) => event.preventDefault(),
1651
+ onMouseMove: () => !option2.disabled && setActiveIndex(index),
1652
+ onClick: () => select(option2),
1653
+ children: [
1654
+ option2.label,
1655
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: itemIndicator, "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_icons9.CheckIcon, { size: 16 }) })
1656
+ ]
1657
+ },
1658
+ option2.value
1659
+ )
1660
+ );
1661
+ })
1662
+ }
1663
+ ) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: empty, role: "status", children: emptyMessage })
1664
+ }
1665
+ ) })
651
1666
  ] }),
652
- label5
1667
+ name && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("input", { type: "hidden", name, value: selectedValue ?? "" }),
1668
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
653
1669
  ] });
654
1670
  });
655
1671
 
656
1672
  // src/components/Divider/Divider.tsx
657
- var import_react12 = require("react");
1673
+ var import_react21 = require("react");
658
1674
 
659
1675
  // src/components/Divider/Divider.css.ts
660
- var import_createRuntimeFn9 = require("@vanilla-extract/recipes/createRuntimeFn");
661
- var divider = /* @__PURE__ */ (0, import_createRuntimeFn9.createRuntimeFn)({ defaultClassName: "_1t3gq8v0", variantClassNames: { orientation: { horizontal: "_1t3gq8v1", vertical: "_1t3gq8v2" } }, defaultVariants: { orientation: "horizontal" }, compoundVariants: [] });
1676
+ var import_createRuntimeFn11 = require("@vanilla-extract/recipes/createRuntimeFn");
1677
+ var divider = /* @__PURE__ */ (0, import_createRuntimeFn11.createRuntimeFn)({ defaultClassName: "_1t3gq8v0", variantClassNames: { orientation: { horizontal: "_1t3gq8v1", vertical: "_1t3gq8v2" } }, defaultVariants: { orientation: "horizontal" }, compoundVariants: [] });
662
1678
  var labeled = "_1t3gq8v3";
663
1679
  var line = "_1t3gq8v4";
664
1680
 
665
1681
  // src/components/Divider/Divider.tsx
666
- var import_jsx_runtime12 = require("react/jsx-runtime");
667
- var Divider = /* @__PURE__ */ (0, import_react12.forwardRef)(function Divider2({ orientation = "horizontal", decorative, className, children, ...rest }, ref) {
1682
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1683
+ var Divider = /* @__PURE__ */ (0, import_react21.forwardRef)(function Divider2({ orientation = "horizontal", decorative, className, children, ...rest }, ref) {
668
1684
  if (children && orientation === "horizontal") {
669
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { ref, className: cx(labeled, className), ...rest, children: [
670
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: line, "aria-hidden": true }),
1685
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { ref, className: cx(labeled, className), ...rest, children: [
1686
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: line, "aria-hidden": true }),
671
1687
  children,
672
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: line, "aria-hidden": true })
1688
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: line, "aria-hidden": true })
673
1689
  ] });
674
1690
  }
675
1691
  const a11y = decorative ? { role: "none" } : { role: "separator", "aria-orientation": orientation === "vertical" ? "vertical" : void 0 };
676
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { ref, className: cx(divider({ orientation }), className), ...a11y, ...rest });
1692
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { ref, className: cx(divider({ orientation }), className), ...a11y, ...rest });
677
1693
  });
678
1694
 
679
1695
  // src/components/Drawer/Drawer.tsx
680
- var Dialog = __toESM(require("@radix-ui/react-dialog"), 1);
681
- var import_icons7 = require("@bestow-ui/icons");
1696
+ var Dialog2 = __toESM(require("@radix-ui/react-dialog"), 1);
1697
+ var import_icons10 = require("@bestow-ui/icons");
682
1698
 
683
1699
  // src/components/IconButton/IconButton.tsx
684
- var import_react13 = require("react");
1700
+ var import_react22 = require("react");
685
1701
 
686
1702
  // src/components/IconButton/IconButton.css.ts
687
- var import_createRuntimeFn10 = require("@vanilla-extract/recipes/createRuntimeFn");
688
- var iconButton = /* @__PURE__ */ (0, import_createRuntimeFn10.createRuntimeFn)({ defaultClassName: "ip9et20", variantClassNames: { size: { sm: "ip9et21", md: "ip9et22", lg: "ip9et23" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1703
+ var import_createRuntimeFn12 = require("@vanilla-extract/recipes/createRuntimeFn");
1704
+ var iconButton = /* @__PURE__ */ (0, import_createRuntimeFn12.createRuntimeFn)({ defaultClassName: "ip9et20", variantClassNames: { size: { sm: "ip9et21", md: "ip9et22", lg: "ip9et23" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
689
1705
 
690
1706
  // src/components/IconButton/IconButton.tsx
691
- var import_jsx_runtime13 = require("react/jsx-runtime");
692
- var IconButton = /* @__PURE__ */ (0, import_react13.forwardRef)(function IconButton2({ variant = "ghost", color = "neutral", size, loading, className, children, ...rest }, ref) {
693
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1707
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1708
+ var IconButton = /* @__PURE__ */ (0, import_react22.forwardRef)(function IconButton2({ variant = "ghost", color = "neutral", size, loading: loading2, className, children, ...rest }, ref) {
1709
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
694
1710
  Button,
695
1711
  {
696
1712
  ref,
697
1713
  variant,
698
1714
  color,
699
1715
  size,
700
- loading,
1716
+ loading: loading2,
701
1717
  className: cx(iconButton({ size }), className),
702
1718
  ...rest,
703
- children: !loading && children
1719
+ children: !loading2 && children
704
1720
  }
705
1721
  );
706
1722
  });
707
1723
 
708
1724
  // src/components/Drawer/Drawer.css.ts
709
- var import_createRuntimeFn11 = require("@vanilla-extract/recipes/createRuntimeFn");
710
- var body2 = "nmobyvy";
711
- var closeButton2 = "nmobyvx";
712
- var content3 = /* @__PURE__ */ (0, import_createRuntimeFn11.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"]] });
713
- var description2 = "nmobyvw";
714
- var footer2 = "nmobyvz";
715
- var header3 = "nmobyvt";
716
- var headings = "nmobyvu";
717
- var overlay = "nmobyv0";
718
- var title2 = "nmobyvv";
1725
+ var import_createRuntimeFn13 = require("@vanilla-extract/recipes/createRuntimeFn");
1726
+ var body3 = "nmobyvy";
1727
+ var closeButton3 = "nmobyvx";
1728
+ var content7 = /* @__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"]] });
1729
+ var description3 = "nmobyvw";
1730
+ var footer3 = "nmobyvz";
1731
+ var header4 = "nmobyvt";
1732
+ var headings2 = "nmobyvu";
1733
+ var overlay2 = "nmobyv0";
1734
+ var title3 = "nmobyvv";
719
1735
 
720
1736
  // src/components/Drawer/Drawer.tsx
721
- var import_jsx_runtime14 = require("react/jsx-runtime");
1737
+ var import_jsx_runtime22 = require("react/jsx-runtime");
722
1738
  function Drawer({
723
1739
  open,
724
1740
  defaultOpen,
@@ -727,7 +1743,7 @@ function Drawer({
727
1743
  title: title6,
728
1744
  description: description6,
729
1745
  children,
730
- footer: footer5,
1746
+ footer: footer6,
731
1747
  side,
732
1748
  size,
733
1749
  hideCloseButton = false,
@@ -735,58 +1751,61 @@ function Drawer({
735
1751
  className
736
1752
  }) {
737
1753
  const portal2 = usePortalProps();
738
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Dialog.Root, { open, defaultOpen, onOpenChange, children: [
739
- trigger4 && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Dialog.Trigger, { asChild: true, children: trigger4 }),
740
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Dialog.Portal, { children: [
741
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Dialog.Overlay, { className: cx(portal2.className, overlay), style: portal2.style }),
742
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
743
- Dialog.Content,
1754
+ const focus = useReturnFocus(Boolean(trigger4));
1755
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Dialog2.Root, { open, defaultOpen, onOpenChange, children: [
1756
+ trigger4 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Dialog2.Trigger, { asChild: true, children: trigger4 }),
1757
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Dialog2.Portal, { children: [
1758
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Dialog2.Overlay, { className: cx(portal2.className, overlay2), style: portal2.style }),
1759
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1760
+ Dialog2.Content,
744
1761
  {
745
- className: cx(portal2.className, content3({ side, size }), className),
1762
+ className: cx(portal2.className, content7({ side, size }), className),
746
1763
  style: portal2.style,
747
1764
  "data-side": side ?? "right",
748
1765
  onPointerDownOutside: closeOnOverlayClick ? void 0 : (event) => event.preventDefault(),
1766
+ onOpenAutoFocus: focus.onOpenAutoFocus,
1767
+ onCloseAutoFocus: focus.onCloseAutoFocus,
749
1768
  ...description6 ? {} : { "aria-describedby": void 0 },
750
1769
  children: [
751
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: header3, children: [
752
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: headings, children: [
753
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Dialog.Title, { className: title2, children: title6 }),
754
- description6 && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Dialog.Description, { className: description2, children: description6 })
1770
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: header4, children: [
1771
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: headings2, children: [
1772
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Dialog2.Title, { className: title3, children: title6 }),
1773
+ description6 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Dialog2.Description, { className: description3, children: description6 })
755
1774
  ] }),
756
- !hideCloseButton && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Dialog.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(IconButton, { "aria-label": "\uB2EB\uAE30", size: "sm", className: closeButton2, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_icons7.XIcon, {}) }) })
1775
+ !hideCloseButton && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Dialog2.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(IconButton, { "aria-label": "\uB2EB\uAE30", size: "sm", className: closeButton3, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_icons10.XIcon, {}) }) })
757
1776
  ] }),
758
- children && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: body2, children }),
759
- footer5 && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: footer2, children: footer5 })
1777
+ children && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: body3, children }),
1778
+ footer6 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: footer3, children: footer6 })
760
1779
  ]
761
1780
  }
762
1781
  )
763
1782
  ] })
764
1783
  ] });
765
1784
  }
766
- var DrawerClose = Dialog.Close;
1785
+ var DrawerClose = Dialog2.Close;
767
1786
 
768
1787
  // src/components/DropdownMenu/DropdownMenu.tsx
769
1788
  var RadixMenu = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
770
- var import_react14 = require("react");
1789
+ var import_react23 = require("react");
771
1790
 
772
1791
  // src/components/DropdownMenu/DropdownMenu.css.ts
773
- var content4 = "_1d7ahux0";
1792
+ var content8 = "_1d7ahux0";
774
1793
  var danger = "_1d7ahux2";
775
- var icon4 = "_1d7ahux3";
776
- var item3 = "_1d7ahux1";
777
- var label = "_1d7ahux5";
1794
+ var icon5 = "_1d7ahux3";
1795
+ var item5 = "_1d7ahux1";
1796
+ var label2 = "_1d7ahux5";
778
1797
  var separator2 = "_1d7ahux6";
779
1798
  var shortcut = "_1d7ahux4";
780
1799
 
781
1800
  // src/components/DropdownMenu/DropdownMenu.tsx
782
- var import_jsx_runtime15 = require("react/jsx-runtime");
1801
+ var import_jsx_runtime23 = require("react/jsx-runtime");
783
1802
  var DropdownMenu = RadixMenu.Root;
784
1803
  var DropdownMenuTrigger = RadixMenu.Trigger;
785
1804
  var DropdownMenuGroup = RadixMenu.Group;
786
- var DropdownMenuContent = /* @__PURE__ */ (0, import_react14.forwardRef)(
1805
+ var DropdownMenuContent = /* @__PURE__ */ (0, import_react23.forwardRef)(
787
1806
  function DropdownMenuContent2({ className, style, side = "bottom", align = "start", sideOffset = 4, collisionPadding = 8, ...rest }, ref) {
788
1807
  const portal2 = usePortalProps();
789
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(RadixMenu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1808
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixMenu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
790
1809
  RadixMenu.Content,
791
1810
  {
792
1811
  ref,
@@ -794,167 +1813,36 @@ var DropdownMenuContent = /* @__PURE__ */ (0, import_react14.forwardRef)(
794
1813
  align,
795
1814
  sideOffset,
796
1815
  collisionPadding,
797
- className: cx(portal2.className, content4, className),
1816
+ className: cx(portal2.className, content8, className),
798
1817
  style: { ...portal2.style, ...style },
799
1818
  ...rest
800
1819
  }
801
1820
  ) });
802
1821
  }
803
1822
  );
804
- var DropdownMenuItem = /* @__PURE__ */ (0, import_react14.forwardRef)(
1823
+ var DropdownMenuItem = /* @__PURE__ */ (0, import_react23.forwardRef)(
805
1824
  function DropdownMenuItem2({ icon: icon6, shortcut: shortcut2, color = "default", className, children, ...rest }, ref) {
806
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(RadixMenu.Item, { ref, className: cx(item3, color === "danger" && danger, className), ...rest, children: [
807
- icon6 && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: icon4, "aria-hidden": true, children: icon6 }),
1825
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(RadixMenu.Item, { ref, className: cx(item5, color === "danger" && danger, className), ...rest, children: [
1826
+ icon6 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: icon5, "aria-hidden": true, children: icon6 }),
808
1827
  children,
809
- shortcut2 && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: shortcut, "aria-hidden": true, children: shortcut2 })
1828
+ shortcut2 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: shortcut, "aria-hidden": true, children: shortcut2 })
810
1829
  ] });
811
1830
  }
812
1831
  );
813
- var DropdownMenuLabel = /* @__PURE__ */ (0, import_react14.forwardRef)(
1832
+ var DropdownMenuLabel = /* @__PURE__ */ (0, import_react23.forwardRef)(
814
1833
  function DropdownMenuLabel2({ className, ...rest }, ref) {
815
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(RadixMenu.Label, { ref, className: cx(label, className), ...rest });
1834
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixMenu.Label, { ref, className: cx(label2, className), ...rest });
816
1835
  }
817
1836
  );
818
- var DropdownMenuSeparator = /* @__PURE__ */ (0, import_react14.forwardRef)(
1837
+ var DropdownMenuSeparator = /* @__PURE__ */ (0, import_react23.forwardRef)(
819
1838
  function DropdownMenuSeparator2({ className, ...rest }, ref) {
820
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(RadixMenu.Separator, { ref, className: cx(separator2, className), ...rest });
1839
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixMenu.Separator, { ref, className: cx(separator2, className), ...rest });
821
1840
  }
822
1841
  );
823
1842
 
824
- // src/components/Input/Input.tsx
825
- var import_react15 = require("react");
826
-
827
- // src/components/Input/Input.css.ts
828
- var import_createRuntimeFn12 = require("@vanilla-extract/recipes/createRuntimeFn");
829
- var adornment = "_19p5zvh6";
830
- var field = "_19p5zvh7";
831
- var fieldFullWidth = "_19p5zvh8";
832
- var helperText = /* @__PURE__ */ (0, import_createRuntimeFn12.createRuntimeFn)({ defaultClassName: "_19p5zvhb", variantClassNames: { error: { true: "_19p5zvhc" } }, defaultVariants: {}, compoundVariants: [] });
833
- var input2 = "_19p5zvh5";
834
- var label2 = "_19p5zvh9";
835
- var requiredMark = "_19p5zvha";
836
- var root5 = /* @__PURE__ */ (0, import_createRuntimeFn12.createRuntimeFn)({ defaultClassName: "_19p5zvh0", variantClassNames: { size: { sm: "_19p5zvh1", md: "_19p5zvh2", lg: "_19p5zvh3" }, fullWidth: { true: "_19p5zvh4" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
837
-
838
- // src/components/Input/Input.tsx
839
- var import_jsx_runtime16 = require("react/jsx-runtime");
840
- var Input = /* @__PURE__ */ (0, import_react15.forwardRef)(function Input2({ size, invalid, fullWidth, startAdornment, endAdornment, rootClassName, className, disabled, ...rest }, ref) {
841
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
842
- "div",
843
- {
844
- className: cx(root5({ size, fullWidth }), rootClassName),
845
- "data-invalid": invalid || void 0,
846
- "data-disabled": disabled || void 0,
847
- children: [
848
- startAdornment && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: adornment, children: startAdornment }),
849
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
850
- "input",
851
- {
852
- ref,
853
- className: cx(input2, className),
854
- disabled,
855
- "aria-invalid": invalid || void 0,
856
- ...rest
857
- }
858
- ),
859
- endAdornment && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: adornment, children: endAdornment })
860
- ]
861
- }
862
- );
863
- });
864
-
865
- // src/components/Input/TextField.tsx
866
- var import_react16 = require("react");
867
- var import_jsx_runtime17 = require("react/jsx-runtime");
868
- var TextField = /* @__PURE__ */ (0, import_react16.forwardRef)(function TextField2({ label: label5, helperText: helperText2, error, required, fullWidth, id, "aria-describedby": ariaDescribedBy, ...rest }, ref) {
869
- const generatedId = (0, import_react16.useId)();
870
- const inputId = id ?? generatedId;
871
- const helperId = helperText2 ? `${inputId}-helper` : void 0;
872
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
873
- label5 && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("label", { htmlFor: inputId, className: label2, children: [
874
- label5,
875
- required && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
876
- ] }),
877
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
878
- Input,
879
- {
880
- ref,
881
- id: inputId,
882
- invalid: error,
883
- required,
884
- fullWidth,
885
- "aria-describedby": cx(helperId, ariaDescribedBy) || void 0,
886
- ...rest
887
- }
888
- ),
889
- helperText2 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText2 })
890
- ] });
891
- });
892
-
893
- // src/components/Modal/Modal.tsx
894
- var Dialog2 = __toESM(require("@radix-ui/react-dialog"), 1);
895
- var import_icons8 = require("@bestow-ui/icons");
896
-
897
- // src/components/Modal/Modal.css.ts
898
- var import_createRuntimeFn13 = require("@vanilla-extract/recipes/createRuntimeFn");
899
- var body3 = "_1pdsmv0a";
900
- var closeButton3 = "_1pdsmv09";
901
- var content5 = /* @__PURE__ */ (0, import_createRuntimeFn13.createRuntimeFn)({ defaultClassName: "_1pdsmv01", variantClassNames: { size: { sm: "_1pdsmv02", md: "_1pdsmv03", lg: "_1pdsmv04" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
902
- var description3 = "_1pdsmv08";
903
- var footer3 = "_1pdsmv0b";
904
- var header4 = "_1pdsmv05";
905
- var headings2 = "_1pdsmv06";
906
- var overlay2 = "_1pdsmv00";
907
- var title3 = "_1pdsmv07";
908
-
909
- // src/components/Modal/Modal.tsx
910
- var import_jsx_runtime18 = require("react/jsx-runtime");
911
- function Modal({
912
- open,
913
- defaultOpen,
914
- onOpenChange,
915
- trigger: trigger4,
916
- title: title6,
917
- description: description6,
918
- children,
919
- footer: footer5,
920
- size,
921
- hideCloseButton = false,
922
- closeOnOverlayClick = true,
923
- className
924
- }) {
925
- const portal2 = usePortalProps();
926
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(Dialog2.Root, { open, defaultOpen, onOpenChange, children: [
927
- trigger4 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Dialog2.Trigger, { asChild: true, children: trigger4 }),
928
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(Dialog2.Portal, { children: [
929
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Dialog2.Overlay, { className: cx(portal2.className, overlay2), style: portal2.style }),
930
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
931
- Dialog2.Content,
932
- {
933
- className: cx(portal2.className, content5({ size }), className),
934
- style: portal2.style,
935
- onPointerDownOutside: closeOnOverlayClick ? void 0 : (event) => event.preventDefault(),
936
- ...description6 ? {} : { "aria-describedby": void 0 },
937
- children: [
938
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: header4, children: [
939
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: headings2, children: [
940
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Dialog2.Title, { className: title3, children: title6 }),
941
- description6 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Dialog2.Description, { className: description3, children: description6 })
942
- ] }),
943
- !hideCloseButton && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Dialog2.Close, { className: closeButton3, "aria-label": "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_icons8.XIcon, { size: 16 }) })
944
- ] }),
945
- children && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: body3, children }),
946
- footer5 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: footer3, children: footer5 })
947
- ]
948
- }
949
- )
950
- ] })
951
- ] });
952
- }
953
- var ModalClose = Dialog2.Close;
954
-
955
1843
  // src/components/Pagination/Pagination.tsx
956
- var import_icons9 = require("@bestow-ui/icons");
957
- var import_react17 = require("react");
1844
+ var import_icons11 = require("@bestow-ui/icons");
1845
+ var import_react24 = require("react");
958
1846
 
959
1847
  // src/components/Pagination/getPaginationItems.ts
960
1848
  var range = (start, end) => end < start ? [] : Array.from({ length: end - start + 1 }, (_, i) => start + i);
@@ -983,13 +1871,13 @@ function getPaginationItems(page, totalPages, siblingCount = 1, boundaryCount =
983
1871
  // src/components/Pagination/Pagination.css.ts
984
1872
  var import_createRuntimeFn14 = require("@vanilla-extract/recipes/createRuntimeFn");
985
1873
  var ellipsis = "_1iraoak4";
986
- var item4 = /* @__PURE__ */ (0, import_createRuntimeFn14.createRuntimeFn)({ defaultClassName: "_1iraoak1", variantClassNames: { size: { sm: "_1iraoak2", md: "_1iraoak3" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
987
- var list2 = "_1iraoak0";
1874
+ var item6 = /* @__PURE__ */ (0, import_createRuntimeFn14.createRuntimeFn)({ defaultClassName: "_1iraoak1", variantClassNames: { size: { sm: "_1iraoak2", md: "_1iraoak3" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1875
+ var list3 = "_1iraoak0";
988
1876
 
989
1877
  // src/components/Pagination/Pagination.tsx
990
- var import_jsx_runtime19 = require("react/jsx-runtime");
1878
+ var import_jsx_runtime24 = require("react/jsx-runtime");
991
1879
  var defaultItemLabel = (type, page) => type === "previous" ? "\uC774\uC804 \uD398\uC774\uC9C0" : type === "next" ? "\uB2E4\uC74C \uD398\uC774\uC9C0" : `${page} \uD398\uC774\uC9C0`;
992
- var Pagination = /* @__PURE__ */ (0, import_react17.forwardRef)(function Pagination2({
1880
+ var Pagination = /* @__PURE__ */ (0, import_react24.forwardRef)(function Pagination2({
993
1881
  totalPages,
994
1882
  page: pageProp,
995
1883
  defaultPage = 1,
@@ -1002,7 +1890,7 @@ var Pagination = /* @__PURE__ */ (0, import_react17.forwardRef)(function Paginat
1002
1890
  "aria-label": ariaLabel = "\uD398\uC774\uC9C0 \uD0D0\uC0C9",
1003
1891
  ...rest
1004
1892
  }, ref) {
1005
- const [uncontrolledPage, setUncontrolledPage] = (0, import_react17.useState)(defaultPage);
1893
+ const [uncontrolledPage, setUncontrolledPage] = (0, import_react24.useState)(defaultPage);
1006
1894
  if (totalPages < 1) return null;
1007
1895
  const page = Math.min(Math.max(pageProp ?? uncontrolledPage, 1), totalPages);
1008
1896
  const goTo = (next) => {
@@ -1010,9 +1898,9 @@ var Pagination = /* @__PURE__ */ (0, import_react17.forwardRef)(function Paginat
1010
1898
  if (pageProp === void 0) setUncontrolledPage(next);
1011
1899
  onPageChange?.(next);
1012
1900
  };
1013
- const itemClass = item4({ size });
1014
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("nav", { ref, "aria-label": ariaLabel, className, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("ul", { className: list2, children: [
1015
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1901
+ const itemClass = item6({ size });
1902
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("nav", { ref, "aria-label": ariaLabel, className, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("ul", { className: list3, children: [
1903
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1016
1904
  "button",
1017
1905
  {
1018
1906
  type: "button",
@@ -1020,23 +1908,23 @@ var Pagination = /* @__PURE__ */ (0, import_react17.forwardRef)(function Paginat
1020
1908
  "aria-label": getItemLabel("previous", page - 1),
1021
1909
  disabled: page <= 1,
1022
1910
  onClick: () => goTo(page - 1),
1023
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_icons9.ChevronLeftIcon, { size: 16 })
1911
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_icons11.ChevronLeftIcon, { size: 16 })
1024
1912
  }
1025
1913
  ) }),
1026
1914
  getPaginationItems(page, totalPages, siblingCount, boundaryCount).map(
1027
- (item6) => typeof item6 === "number" ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1915
+ (item7) => typeof item7 === "number" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1028
1916
  "button",
1029
1917
  {
1030
1918
  type: "button",
1031
1919
  className: itemClass,
1032
- "aria-label": getItemLabel("page", item6),
1033
- "aria-current": item6 === page ? "page" : void 0,
1034
- onClick: () => goTo(item6),
1035
- children: item6
1920
+ "aria-label": getItemLabel("page", item7),
1921
+ "aria-current": item7 === page ? "page" : void 0,
1922
+ onClick: () => goTo(item7),
1923
+ children: item7
1036
1924
  }
1037
- ) }, item6) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("li", { "aria-hidden": true, className: cx(itemClass, ellipsis), children: "\u2026" }, item6)
1925
+ ) }, item7) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("li", { "aria-hidden": true, className: cx(itemClass, ellipsis), children: "\u2026" }, item7)
1038
1926
  ),
1039
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1927
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1040
1928
  "button",
1041
1929
  {
1042
1930
  type: "button",
@@ -1044,28 +1932,79 @@ var Pagination = /* @__PURE__ */ (0, import_react17.forwardRef)(function Paginat
1044
1932
  "aria-label": getItemLabel("next", page + 1),
1045
1933
  disabled: page >= totalPages,
1046
1934
  onClick: () => goTo(page + 1),
1047
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_icons9.ChevronRightIcon, { size: 16 })
1935
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_icons11.ChevronRightIcon, { size: 16 })
1048
1936
  }
1049
1937
  ) })
1050
1938
  ] }) });
1051
1939
  });
1052
1940
 
1941
+ // src/components/PhoneNumberInput/PhoneNumberInput.tsx
1942
+ var import_react25 = require("react");
1943
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1944
+ var sanitize2 = (input5) => {
1945
+ const digits = input5.replace(/\D/g, "");
1946
+ return digits.slice(0, phoneNumberMaxDigits(digits));
1947
+ };
1948
+ var isDigit3 = (char) => /\d/.test(char);
1949
+ var PhoneNumberInput = /* @__PURE__ */ (0, import_react25.forwardRef)(
1950
+ function PhoneNumberInput2(props, ref) {
1951
+ const {
1952
+ value: value4,
1953
+ defaultValue,
1954
+ onValueChange,
1955
+ label: label6 = "\uD734\uB300\uD3F0 \uBC88\uD638",
1956
+ placeholder = "010-0000-0000",
1957
+ onKeyDown,
1958
+ ...rest
1959
+ } = props;
1960
+ const inputRef = (0, import_react25.useRef)(null);
1961
+ const field3 = useFormattedInput({
1962
+ isControlled: "value" in props,
1963
+ value: value4,
1964
+ defaultValue,
1965
+ onValueChange,
1966
+ sanitize: sanitize2,
1967
+ format: formatPhoneNumber,
1968
+ isMeaningful: isDigit3,
1969
+ inputRef
1970
+ });
1971
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1972
+ TextField,
1973
+ {
1974
+ ref: mergeRefs(ref, inputRef),
1975
+ label: label6,
1976
+ placeholder,
1977
+ type: "tel",
1978
+ inputMode: "tel",
1979
+ autoComplete: "tel-national",
1980
+ value: field3.display,
1981
+ onChange: field3.onChange,
1982
+ onKeyDown: (event) => {
1983
+ field3.onKeyDown(event);
1984
+ onKeyDown?.(event);
1985
+ },
1986
+ ...rest
1987
+ }
1988
+ );
1989
+ }
1990
+ );
1991
+
1053
1992
  // src/components/Popover/Popover.tsx
1054
1993
  var RadixPopover = __toESM(require("@radix-ui/react-popover"), 1);
1055
- var import_icons10 = require("@bestow-ui/icons");
1056
- var import_react18 = require("react");
1994
+ var import_icons12 = require("@bestow-ui/icons");
1995
+ var import_react26 = require("react");
1057
1996
 
1058
1997
  // src/components/Popover/Popover.css.ts
1059
1998
  var arrow = "_1j99p8x4";
1060
1999
  var closeButton4 = "_1j99p8x3";
1061
- var content6 = "_1j99p8x0";
2000
+ var content9 = "_1j99p8x0";
1062
2001
  var header5 = "_1j99p8x1";
1063
2002
  var title4 = "_1j99p8x2";
1064
2003
 
1065
2004
  // src/components/Popover/Popover.tsx
1066
- var import_jsx_runtime20 = require("react/jsx-runtime");
1067
- function Popover({
1068
- content: content10,
2005
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2006
+ function Popover2({
2007
+ content: content12,
1069
2008
  children,
1070
2009
  title: title6,
1071
2010
  "aria-label": ariaLabel,
@@ -1081,10 +2020,10 @@ function Popover({
1081
2020
  style
1082
2021
  }) {
1083
2022
  const portal2 = usePortalProps();
1084
- const titleId = (0, import_react18.useId)();
1085
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(RadixPopover.Root, { open, defaultOpen, onOpenChange, modal, children: [
1086
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(RadixPopover.Trigger, { asChild: true, children }),
1087
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(RadixPopover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
2023
+ const titleId = (0, import_react26.useId)();
2024
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(RadixPopover.Root, { open, defaultOpen, onOpenChange, modal, children: [
2025
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(RadixPopover.Trigger, { asChild: true, children }),
2026
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(RadixPopover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1088
2027
  RadixPopover.Content,
1089
2028
  {
1090
2029
  side,
@@ -1093,15 +2032,15 @@ function Popover({
1093
2032
  collisionPadding: 8,
1094
2033
  "aria-labelledby": title6 ? titleId : void 0,
1095
2034
  "aria-label": title6 ? void 0 : ariaLabel,
1096
- className: cx(portal2.className, content6, className),
2035
+ className: cx(portal2.className, content9, className),
1097
2036
  style: { ...portal2.style, ...style },
1098
2037
  children: [
1099
- (title6 || showClose) && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: header5, children: [
1100
- title6 && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h2", { id: titleId, className: title4, children: title6 }),
1101
- showClose && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(RadixPopover.Close, { className: closeButton4, "aria-label": "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons10.XIcon, { size: 16 }) })
2038
+ (title6 || showClose) && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: header5, children: [
2039
+ title6 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h2", { id: titleId, className: title4, children: title6 }),
2040
+ showClose && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(RadixPopover.Close, { className: closeButton4, "aria-label": "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_icons12.XIcon, { size: 16 }) })
1102
2041
  ] }),
1103
- content10,
1104
- showArrow && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(RadixPopover.Arrow, { className: arrow, width: 12, height: 6 })
2042
+ content12,
2043
+ showArrow && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(RadixPopover.Arrow, { className: arrow, width: 12, height: 6 })
1105
2044
  ]
1106
2045
  }
1107
2046
  ) })
@@ -1110,7 +2049,7 @@ function Popover({
1110
2049
  var PopoverClose = RadixPopover.Close;
1111
2050
 
1112
2051
  // src/components/Progress/Progress.tsx
1113
- var import_react19 = require("react");
2052
+ var import_react27 = require("react");
1114
2053
 
1115
2054
  // src/components/Progress/Progress.css.ts
1116
2055
  var import_createRuntimeFn15 = require("@vanilla-extract/recipes/createRuntimeFn");
@@ -1119,15 +2058,15 @@ var indicator = /* @__PURE__ */ (0, import_createRuntimeFn15.createRuntimeFn)({
1119
2058
  var label3 = "_1tvkq002";
1120
2059
  var root6 = "_1tvkq000";
1121
2060
  var track = /* @__PURE__ */ (0, import_createRuntimeFn15.createRuntimeFn)({ defaultClassName: "_1tvkq004", variantClassNames: { size: { sm: "_1tvkq005", md: "_1tvkq006", lg: "_1tvkq007" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1122
- var value = "_1tvkq003";
2061
+ var value2 = "_1tvkq003";
1123
2062
 
1124
2063
  // src/components/Progress/Progress.tsx
1125
- var import_jsx_runtime21 = require("react/jsx-runtime");
1126
- var defaultFormat = (value3, max) => `${Math.round(value3 / max * 100)}%`;
1127
- var Progress = /* @__PURE__ */ (0, import_react19.forwardRef)(function Progress2({
1128
- value: value3,
2064
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2065
+ var defaultFormat = (value4, max) => `${Math.round(value4 / max * 100)}%`;
2066
+ var Progress = /* @__PURE__ */ (0, import_react27.forwardRef)(function Progress2({
2067
+ value: value4,
1129
2068
  max = 100,
1130
- label: label5,
2069
+ label: label6,
1131
2070
  "aria-label": ariaLabel,
1132
2071
  showValue,
1133
2072
  formatValue = defaultFormat,
@@ -1136,28 +2075,28 @@ var Progress = /* @__PURE__ */ (0, import_react19.forwardRef)(function Progress2
1136
2075
  className,
1137
2076
  ...rest
1138
2077
  }, ref) {
1139
- const labelId = (0, import_react19.useId)();
1140
- const isIndeterminate = value3 === void 0 || value3 === null;
2078
+ const labelId = (0, import_react27.useId)();
2079
+ const isIndeterminate = value4 === void 0 || value4 === null;
1141
2080
  const safeMax = max > 0 ? max : 100;
1142
- const clamped = isIndeterminate ? 0 : Math.min(safeMax, Math.max(0, value3));
2081
+ const clamped = isIndeterminate ? 0 : Math.min(safeMax, Math.max(0, value4));
1143
2082
  const valueText = isIndeterminate ? void 0 : formatValue(clamped, safeMax);
1144
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { ref, className: cx(root6, className), ...rest, children: [
1145
- (label5 || showValue && valueText) && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: header6, children: [
1146
- label5 && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { id: labelId, className: label3, children: label5 }),
1147
- showValue && valueText && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: value, "aria-hidden": true, children: valueText })
2083
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { ref, className: cx(root6, className), ...rest, children: [
2084
+ (label6 || showValue && valueText) && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: header6, children: [
2085
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { id: labelId, className: label3, children: label6 }),
2086
+ showValue && valueText && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: value2, "aria-hidden": true, children: valueText })
1148
2087
  ] }),
1149
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2088
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1150
2089
  "div",
1151
2090
  {
1152
2091
  role: "progressbar",
1153
- "aria-labelledby": label5 ? labelId : void 0,
1154
- "aria-label": label5 ? void 0 : ariaLabel,
2092
+ "aria-labelledby": label6 ? labelId : void 0,
2093
+ "aria-label": label6 ? void 0 : ariaLabel,
1155
2094
  "aria-valuemin": 0,
1156
2095
  "aria-valuemax": safeMax,
1157
2096
  "aria-valuenow": isIndeterminate ? void 0 : clamped,
1158
2097
  "aria-valuetext": valueText,
1159
2098
  className: track({ size }),
1160
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2099
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1161
2100
  "div",
1162
2101
  {
1163
2102
  className: indicator({ color }),
@@ -1172,7 +2111,7 @@ var Progress = /* @__PURE__ */ (0, import_react19.forwardRef)(function Progress2
1172
2111
 
1173
2112
  // src/components/RadioGroup/RadioGroup.tsx
1174
2113
  var RadixRadioGroup = __toESM(require("@radix-ui/react-radio-group"), 1);
1175
- var import_react20 = require("react");
2114
+ var import_react28 = require("react");
1176
2115
 
1177
2116
  // src/components/RadioGroup/RadioGroup.css.ts
1178
2117
  var import_createRuntimeFn16 = require("@vanilla-extract/recipes/createRuntimeFn");
@@ -1186,15 +2125,15 @@ var radio = /* @__PURE__ */ (0, import_createRuntimeFn16.createRuntimeFn)({ defa
1186
2125
  var text = "_1w9iwjmb";
1187
2126
 
1188
2127
  // src/components/RadioGroup/RadioGroup.tsx
1189
- var import_jsx_runtime22 = require("react/jsx-runtime");
1190
- var RadioGroup = /* @__PURE__ */ (0, import_react20.forwardRef)(function RadioGroup2(props, ref) {
2128
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2129
+ var RadioGroup = /* @__PURE__ */ (0, import_react28.forwardRef)(function RadioGroup2(props, ref) {
1191
2130
  const {
1192
2131
  options,
1193
- value: value3,
2132
+ value: value4,
1194
2133
  defaultValue,
1195
2134
  onValueChange,
1196
- label: label5,
1197
- helperText: helperText2,
2135
+ label: label6,
2136
+ helperText: helperText3,
1198
2137
  error,
1199
2138
  orientation = "vertical",
1200
2139
  size,
@@ -1206,21 +2145,21 @@ var RadioGroup = /* @__PURE__ */ (0, import_react20.forwardRef)(function RadioGr
1206
2145
  className
1207
2146
  } = props;
1208
2147
  const isControlled = "value" in props;
1209
- const generatedId = (0, import_react20.useId)();
2148
+ const generatedId = (0, import_react28.useId)();
1210
2149
  const baseId = id ?? generatedId;
1211
- const labelId = label5 ? `${baseId}-label` : void 0;
1212
- const helperId = helperText2 ? `${baseId}-helper` : void 0;
1213
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: cx(field, className), children: [
1214
- label5 && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { id: labelId, className: cx(label2, groupLabel), children: [
1215
- label5,
1216
- required && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
2150
+ const labelId = label6 ? `${baseId}-label` : void 0;
2151
+ const helperId = helperText3 ? `${baseId}-helper` : void 0;
2152
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: cx(field, className), children: [
2153
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("span", { id: labelId, className: cx(label, groupLabel), children: [
2154
+ label6,
2155
+ required && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
1217
2156
  ] }),
1218
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2157
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1219
2158
  RadixRadioGroup.Root,
1220
2159
  {
1221
2160
  ref,
1222
2161
  id: baseId,
1223
- value: isControlled ? value3 ?? "" : void 0,
2162
+ value: isControlled ? value4 ?? "" : void 0,
1224
2163
  defaultValue,
1225
2164
  onValueChange,
1226
2165
  orientation,
@@ -1236,8 +2175,8 @@ var RadioGroup = /* @__PURE__ */ (0, import_react20.forwardRef)(function RadioGr
1236
2175
  const itemId = `${baseId}-${option2.value}`;
1237
2176
  const descriptionId = option2.description ? `${itemId}-description` : void 0;
1238
2177
  const itemDisabled = disabled || option2.disabled;
1239
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: option({ size }), "data-disabled": itemDisabled || void 0, children: [
1240
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2178
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: option({ size }), "data-disabled": itemDisabled || void 0, children: [
2179
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1241
2180
  RadixRadioGroup.Item,
1242
2181
  {
1243
2182
  id: itemId,
@@ -1245,46 +2184,35 @@ var RadioGroup = /* @__PURE__ */ (0, import_react20.forwardRef)(function RadioGr
1245
2184
  disabled: option2.disabled,
1246
2185
  "aria-describedby": descriptionId,
1247
2186
  className: radio({ size }),
1248
- children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(RadixRadioGroup.Indicator, { className: indicator2 })
2187
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(RadixRadioGroup.Indicator, { className: indicator2 })
1249
2188
  }
1250
2189
  ),
1251
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: text, children: [
1252
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("label", { htmlFor: itemId, className: labelText, children: option2.label }),
1253
- option2.description && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { id: descriptionId, className: description4, children: option2.description })
2190
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("span", { className: text, children: [
2191
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: itemId, className: labelText, children: option2.label }),
2192
+ option2.description && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { id: descriptionId, className: description4, children: option2.description })
1254
2193
  ] })
1255
2194
  ] }, option2.value);
1256
2195
  })
1257
2196
  }
1258
2197
  ),
1259
- helperText2 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText2 })
2198
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
1260
2199
  ] });
1261
2200
  });
1262
2201
 
1263
2202
  // src/components/Select/Select.tsx
1264
2203
  var RadixSelect = __toESM(require("@radix-ui/react-select"), 1);
1265
- var import_react21 = require("react");
1266
- var import_icons11 = require("@bestow-ui/icons");
1267
-
1268
- // src/components/Select/Select.css.ts
1269
- var content7 = "_1kx81e83";
1270
- var icon5 = "_1kx81e82";
1271
- var item5 = "_1kx81e85";
1272
- var itemIndicator = "_1kx81e86";
1273
- var trigger2 = "_1kx81e80";
1274
- var value2 = "_1kx81e81";
1275
- var viewport = "_1kx81e84";
1276
-
1277
- // src/components/Select/Select.tsx
1278
- var import_jsx_runtime23 = require("react/jsx-runtime");
1279
- var Select = /* @__PURE__ */ (0, import_react21.forwardRef)(function Select2(props, ref) {
2204
+ var import_react29 = require("react");
2205
+ var import_icons13 = require("@bestow-ui/icons");
2206
+ var import_jsx_runtime29 = require("react/jsx-runtime");
2207
+ var Select = /* @__PURE__ */ (0, import_react29.forwardRef)(function Select2(props, ref) {
1280
2208
  const {
1281
2209
  options,
1282
- value: value3,
2210
+ value: value4,
1283
2211
  defaultValue,
1284
2212
  onValueChange,
1285
2213
  placeholder,
1286
- label: label5,
1287
- helperText: helperText2,
2214
+ label: label6,
2215
+ helperText: helperText3,
1288
2216
  error,
1289
2217
  size,
1290
2218
  fullWidth,
@@ -1296,26 +2224,26 @@ var Select = /* @__PURE__ */ (0, import_react21.forwardRef)(function Select2(pro
1296
2224
  className
1297
2225
  } = props;
1298
2226
  const isControlled = "value" in props;
1299
- const generatedId = (0, import_react21.useId)();
2227
+ const generatedId = (0, import_react29.useId)();
1300
2228
  const triggerId = id ?? generatedId;
1301
- const helperId = helperText2 ? `${triggerId}-helper` : void 0;
2229
+ const helperId = helperText3 ? `${triggerId}-helper` : void 0;
1302
2230
  const portal2 = usePortalProps();
1303
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
1304
- label5 && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("label", { htmlFor: triggerId, className: label2, children: [
1305
- label5,
1306
- required && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
2231
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
2232
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("label", { htmlFor: triggerId, className: label, children: [
2233
+ label6,
2234
+ required && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
1307
2235
  ] }),
1308
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2236
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1309
2237
  RadixSelect.Root,
1310
2238
  {
1311
- value: isControlled ? value3 ?? "" : void 0,
2239
+ value: isControlled ? value4 ?? "" : void 0,
1312
2240
  defaultValue,
1313
2241
  onValueChange,
1314
2242
  disabled,
1315
2243
  required,
1316
2244
  name,
1317
2245
  children: [
1318
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2246
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1319
2247
  RadixSelect.Trigger,
1320
2248
  {
1321
2249
  ref,
@@ -1324,30 +2252,30 @@ var Select = /* @__PURE__ */ (0, import_react21.forwardRef)(function Select2(pro
1324
2252
  "aria-invalid": error || void 0,
1325
2253
  "aria-describedby": helperId,
1326
2254
  "data-invalid": error || void 0,
1327
- className: cx(root5({ size, fullWidth }), trigger2, className),
2255
+ className: cx(root3({ size, fullWidth }), trigger2, className),
1328
2256
  children: [
1329
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: value2, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixSelect.Value, { placeholder }) }),
1330
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixSelect.Icon, { className: icon5, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_icons11.ChevronDownIcon, { size: 16 }) })
2257
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: value, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RadixSelect.Value, { placeholder }) }),
2258
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RadixSelect.Icon, { className: icon4, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_icons13.ChevronDownIcon, { size: 16 }) })
1331
2259
  ]
1332
2260
  }
1333
2261
  ),
1334
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixSelect.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2262
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RadixSelect.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1335
2263
  RadixSelect.Content,
1336
2264
  {
1337
2265
  position: "popper",
1338
2266
  sideOffset: 4,
1339
2267
  collisionPadding: 8,
1340
- className: cx(portal2.className, content7),
2268
+ className: cx(portal2.className, content5),
1341
2269
  style: portal2.style,
1342
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixSelect.Viewport, { className: viewport, children: options.map((option2) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2270
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RadixSelect.Viewport, { className: viewport, children: options.map((option2) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1343
2271
  RadixSelect.Item,
1344
2272
  {
1345
2273
  value: option2.value,
1346
2274
  disabled: option2.disabled,
1347
- className: item5,
2275
+ className: item4,
1348
2276
  children: [
1349
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixSelect.ItemText, { children: option2.label }),
1350
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(RadixSelect.ItemIndicator, { className: itemIndicator, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_icons11.CheckIcon, { size: 16 }) })
2277
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RadixSelect.ItemText, { children: option2.label }),
2278
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RadixSelect.ItemIndicator, { className: itemIndicator, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_icons13.CheckIcon, { size: 16 }) })
1351
2279
  ]
1352
2280
  },
1353
2281
  option2.value
@@ -1357,13 +2285,13 @@ var Select = /* @__PURE__ */ (0, import_react21.forwardRef)(function Select2(pro
1357
2285
  ]
1358
2286
  }
1359
2287
  ),
1360
- helperText2 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText2 })
2288
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 })
1361
2289
  ] });
1362
2290
  });
1363
2291
 
1364
2292
  // src/components/Skeleton/Skeleton.tsx
1365
2293
  var import_dynamic2 = require("@vanilla-extract/dynamic");
1366
- var import_react22 = require("react");
2294
+ var import_react30 = require("react");
1367
2295
 
1368
2296
  // src/components/Skeleton/Skeleton.css.ts
1369
2297
  var import_createRuntimeFn17 = require("@vanilla-extract/recipes/createRuntimeFn");
@@ -1373,13 +2301,13 @@ var skeleton = /* @__PURE__ */ (0, import_createRuntimeFn17.createRuntimeFn)({ d
1373
2301
  var width = "var(--_1s8datd0)";
1374
2302
 
1375
2303
  // src/components/Skeleton/Skeleton.tsx
1376
- var import_jsx_runtime24 = require("react/jsx-runtime");
1377
- var toCss = (value3) => typeof value3 === "number" ? `${value3}px` : value3;
1378
- var Skeleton = /* @__PURE__ */ (0, import_react22.forwardRef)(function Skeleton2({ variant = "text", width: width2, height: height2, lines: lines2 = 1, className, style, ...rest }, ref) {
2304
+ var import_jsx_runtime30 = require("react/jsx-runtime");
2305
+ var toCss = (value4) => typeof value4 === "number" ? `${value4}px` : value4;
2306
+ var Skeleton = /* @__PURE__ */ (0, import_react30.forwardRef)(function Skeleton2({ variant = "text", width: width2, height: height2, lines: lines2 = 1, className, style, ...rest }, ref) {
1379
2307
  const w = toCss(width2 ?? (variant === "circle" ? 40 : "100%"));
1380
2308
  const h = toCss(height2 ?? (variant === "circle" ? w : variant === "rect" ? 100 : "1em"));
1381
2309
  if (variant === "text" && lines2 > 1) {
1382
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2310
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1383
2311
  "span",
1384
2312
  {
1385
2313
  ref,
@@ -1387,7 +2315,7 @@ var Skeleton = /* @__PURE__ */ (0, import_react22.forwardRef)(function Skeleton2
1387
2315
  className: cx(lines, className),
1388
2316
  style: { ...(0, import_dynamic2.assignInlineVars)({ [width]: w }), ...style },
1389
2317
  ...rest,
1390
- children: Array.from({ length: lines2 }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2318
+ children: Array.from({ length: lines2 }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1391
2319
  "span",
1392
2320
  {
1393
2321
  className: skeleton({ variant }),
@@ -1398,7 +2326,7 @@ var Skeleton = /* @__PURE__ */ (0, import_react22.forwardRef)(function Skeleton2
1398
2326
  }
1399
2327
  );
1400
2328
  }
1401
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2329
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1402
2330
  "span",
1403
2331
  {
1404
2332
  ref,
@@ -1410,98 +2338,311 @@ var Skeleton = /* @__PURE__ */ (0, import_react22.forwardRef)(function Skeleton2
1410
2338
  );
1411
2339
  });
1412
2340
 
2341
+ // src/components/Slider/Slider.tsx
2342
+ var RadixSlider = __toESM(require("@radix-ui/react-slider"), 1);
2343
+ var import_react31 = require("react");
2344
+
2345
+ // src/components/Slider/Slider.css.ts
2346
+ var import_createRuntimeFn18 = require("@vanilla-extract/recipes/createRuntimeFn");
2347
+ var field2 = "_126mzjm0";
2348
+ var header7 = "_126mzjm1";
2349
+ var helperText2 = "_126mzjm4";
2350
+ var label4 = "_126mzjm2";
2351
+ var range2 = "_126mzjmb";
2352
+ var root7 = /* @__PURE__ */ (0, import_createRuntimeFn18.createRuntimeFn)({ defaultClassName: "_126mzjm5", variantClassNames: { size: { sm: "_126mzjm6", md: "_126mzjm7" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
2353
+ var thumb = /* @__PURE__ */ (0, import_createRuntimeFn18.createRuntimeFn)({ defaultClassName: "_126mzjmc", variantClassNames: { size: { sm: "_126mzjmd", md: "_126mzjme" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
2354
+ var track2 = /* @__PURE__ */ (0, import_createRuntimeFn18.createRuntimeFn)({ defaultClassName: "_126mzjm8", variantClassNames: { size: { sm: "_126mzjm9", md: "_126mzjma" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
2355
+ var value3 = "_126mzjm3";
2356
+
2357
+ // src/components/Slider/Slider.tsx
2358
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2359
+ var Slider = /* @__PURE__ */ (0, import_react31.forwardRef)(function Slider2(props, ref) {
2360
+ const {
2361
+ value: value4,
2362
+ defaultValue,
2363
+ onValueChange,
2364
+ min = 0,
2365
+ max = 100,
2366
+ label: label6,
2367
+ "aria-label": ariaLabel,
2368
+ helperText: helperText3,
2369
+ showValue,
2370
+ formatValue = String,
2371
+ thumbLabels = ["\uCD5C\uC18C", "\uCD5C\uB300"],
2372
+ size,
2373
+ id,
2374
+ className,
2375
+ disabled,
2376
+ ...rest
2377
+ } = props;
2378
+ const generatedId = (0, import_react31.useId)();
2379
+ const baseId = id ?? generatedId;
2380
+ const labelId = `${baseId}-label`;
2381
+ const helperId = `${baseId}-helper`;
2382
+ const isControlled = "value" in props;
2383
+ const [innerValue, setInnerValue] = (0, import_react31.useState)(defaultValue ?? [min]);
2384
+ const current2 = isControlled ? value4 ?? [min] : innerValue;
2385
+ const isRange = current2.length > 1;
2386
+ const handleChange = (next) => {
2387
+ if (!isControlled) setInnerValue(next);
2388
+ onValueChange?.(next);
2389
+ };
2390
+ const valueText = current2.map(formatValue).join(" \u2013 ");
2391
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cx(field2, className), children: [
2392
+ (label6 || showValue) && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: header7, children: [
2393
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { id: labelId, className: label4, children: label6 }),
2394
+ showValue && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: value3, "aria-hidden": true, children: valueText })
2395
+ ] }),
2396
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
2397
+ RadixSlider.Root,
2398
+ {
2399
+ ref,
2400
+ id: baseId,
2401
+ min,
2402
+ max,
2403
+ disabled,
2404
+ value: current2,
2405
+ onValueChange: handleChange,
2406
+ className: root7({ size }),
2407
+ ...rest,
2408
+ children: [
2409
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(RadixSlider.Track, { className: track2({ size }), children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(RadixSlider.Range, { className: range2 }) }),
2410
+ current2.map((thumbValue, index) => {
2411
+ const thumbLabelId = `${baseId}-thumb-${index}`;
2412
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2413
+ RadixSlider.Thumb,
2414
+ {
2415
+ className: thumb({ size }),
2416
+ "aria-labelledby": label6 ? isRange ? `${labelId} ${thumbLabelId}` : labelId : isRange ? thumbLabelId : void 0,
2417
+ "aria-label": label6 ? void 0 : isRange ? void 0 : ariaLabel,
2418
+ "aria-valuetext": formatValue(thumbValue),
2419
+ "aria-describedby": helperText3 ? helperId : void 0
2420
+ },
2421
+ index
2422
+ );
2423
+ })
2424
+ ]
2425
+ }
2426
+ ),
2427
+ isRange && current2.map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { id: `${baseId}-thumb-${index}`, hidden: true, children: [
2428
+ label6 ? "" : ariaLabel ? `${ariaLabel} ` : "",
2429
+ thumbLabels[index] ?? `${index + 1}`
2430
+ ] }, index)),
2431
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { id: helperId, className: helperText2, children: helperText3 })
2432
+ ] });
2433
+ });
2434
+
1413
2435
  // src/components/Stack/Stack.tsx
1414
- var import_react23 = require("react");
2436
+ var import_react32 = require("react");
1415
2437
 
1416
2438
  // src/components/Stack/Stack.css.ts
1417
- var import_createRuntimeFn18 = require("@vanilla-extract/recipes/createRuntimeFn");
1418
- var stack = /* @__PURE__ */ (0, import_createRuntimeFn18.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: [] });
2439
+ var import_createRuntimeFn19 = require("@vanilla-extract/recipes/createRuntimeFn");
2440
+ 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: [] });
1419
2441
 
1420
2442
  // src/components/Stack/Stack.tsx
1421
- var import_jsx_runtime25 = require("react/jsx-runtime");
1422
- var Stack = /* @__PURE__ */ (0, import_react23.forwardRef)(function Stack2({ as: Component = "div", direction, gap, align, justify, wrap, className, ...rest }, ref) {
1423
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Component, { ref, className: cx(stack({ direction, gap, align, justify, wrap }), className), ...rest });
2443
+ var import_jsx_runtime32 = require("react/jsx-runtime");
2444
+ var Stack = /* @__PURE__ */ (0, import_react32.forwardRef)(function Stack2({ as: Component = "div", direction, gap, align, justify, wrap, className, ...rest }, ref) {
2445
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Component, { ref, className: cx(stack({ direction, gap, align, justify, wrap }), className), ...rest });
1424
2446
  });
1425
2447
 
1426
2448
  // src/components/Switch/Switch.tsx
1427
2449
  var RadixSwitch = __toESM(require("@radix-ui/react-switch"), 1);
1428
- var import_react24 = require("react");
2450
+ var import_react33 = require("react");
1429
2451
 
1430
2452
  // src/components/Switch/Switch.css.ts
1431
- var import_createRuntimeFn19 = require("@vanilla-extract/recipes/createRuntimeFn");
1432
- var label4 = "o33ul29";
1433
- var root7 = /* @__PURE__ */ (0, import_createRuntimeFn19.createRuntimeFn)({ defaultClassName: "o33ul20", variantClassNames: { size: { sm: "o33ul21", md: "o33ul22" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1434
- var thumb = /* @__PURE__ */ (0, import_createRuntimeFn19.createRuntimeFn)({ defaultClassName: "o33ul26", variantClassNames: { size: { sm: "o33ul27", md: "o33ul28" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1435
- var track2 = /* @__PURE__ */ (0, import_createRuntimeFn19.createRuntimeFn)({ defaultClassName: "o33ul23", variantClassNames: { size: { sm: "o33ul24", md: "o33ul25" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
2453
+ var import_createRuntimeFn20 = require("@vanilla-extract/recipes/createRuntimeFn");
2454
+ var label5 = "o33ul29";
2455
+ var root8 = /* @__PURE__ */ (0, import_createRuntimeFn20.createRuntimeFn)({ defaultClassName: "o33ul20", variantClassNames: { size: { sm: "o33ul21", md: "o33ul22" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
2456
+ var thumb2 = /* @__PURE__ */ (0, import_createRuntimeFn20.createRuntimeFn)({ defaultClassName: "o33ul26", variantClassNames: { size: { sm: "o33ul27", md: "o33ul28" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
2457
+ var track3 = /* @__PURE__ */ (0, import_createRuntimeFn20.createRuntimeFn)({ defaultClassName: "o33ul23", variantClassNames: { size: { sm: "o33ul24", md: "o33ul25" } }, defaultVariants: { size: "md" }, compoundVariants: [] });
1436
2458
 
1437
2459
  // src/components/Switch/Switch.tsx
1438
- var import_jsx_runtime26 = require("react/jsx-runtime");
1439
- var Switch = /* @__PURE__ */ (0, import_react24.forwardRef)(function Switch2({ label: label5, size, id, className, disabled, "aria-label": ariaLabel, ...rest }, ref) {
1440
- const generatedId = (0, import_react24.useId)();
2460
+ var import_jsx_runtime33 = require("react/jsx-runtime");
2461
+ var Switch = /* @__PURE__ */ (0, import_react33.forwardRef)(function Switch2({ label: label6, size, id, className, disabled, "aria-label": ariaLabel, ...rest }, ref) {
2462
+ const generatedId = (0, import_react33.useId)();
1441
2463
  const switchId = id ?? generatedId;
1442
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { className: cx(root7({ size }), className), "data-disabled": disabled || void 0, children: [
1443
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2464
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: cx(root8({ size }), className), "data-disabled": disabled || void 0, children: [
2465
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1444
2466
  RadixSwitch.Root,
1445
2467
  {
1446
2468
  ref,
1447
2469
  id: switchId,
1448
2470
  disabled,
1449
2471
  "aria-label": ariaLabel,
1450
- className: track2({ size }),
2472
+ className: track3({ size }),
1451
2473
  ...rest,
1452
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(RadixSwitch.Thumb, { className: thumb({ size }) })
2474
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(RadixSwitch.Thumb, { className: thumb2({ size }) })
1453
2475
  }
1454
2476
  ),
1455
- label5 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("label", { htmlFor: switchId, className: label4, children: label5 })
2477
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("label", { htmlFor: switchId, className: label5, children: label6 })
1456
2478
  ] });
1457
2479
  });
1458
2480
 
2481
+ // src/components/Table/Table.tsx
2482
+ var import_react34 = require("react");
2483
+ var import_icons14 = require("@bestow-ui/icons");
2484
+
2485
+ // src/components/Table/Table.css.ts
2486
+ var import_createRuntimeFn21 = require("@vanilla-extract/recipes/createRuntimeFn");
2487
+ var body4 = "l3ploy5";
2488
+ var caption = "l3ploy2";
2489
+ 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: [] });
2490
+ var container = "l3ploy0";
2491
+ var footer4 = "l3ploy7";
2492
+ var footerCell = "l3ployg";
2493
+ var head = "l3ployf";
2494
+ var header8 = "l3ploy3";
2495
+ var row3 = "l3ploy8";
2496
+ var sortButton = "l3ployh";
2497
+ var sortIcon = "l3ployi";
2498
+ var stickyHeader = "l3ploy4";
2499
+ var striped = "l3ploy6";
2500
+ var table = "l3ploy1";
2501
+
2502
+ // src/components/Table/Table.tsx
2503
+ var import_jsx_runtime34 = require("react/jsx-runtime");
2504
+ var TableSizeContext = /* @__PURE__ */ (0, import_react34.createContext)("md");
2505
+ var TableSectionContext = /* @__PURE__ */ (0, import_react34.createContext)("body");
2506
+ var Table = /* @__PURE__ */ (0, import_react34.forwardRef)(function Table2({
2507
+ size = "md",
2508
+ striped: striped2,
2509
+ stickyHeader: stickyHeader2,
2510
+ caption: caption2,
2511
+ "aria-label": ariaLabel,
2512
+ containerClassName,
2513
+ containerStyle,
2514
+ className,
2515
+ children,
2516
+ ...rest
2517
+ }, ref) {
2518
+ const captionId = (0, import_react34.useId)();
2519
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TableSizeContext.Provider, { value: size, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2520
+ "div",
2521
+ {
2522
+ className: cx(container, containerClassName),
2523
+ style: containerStyle,
2524
+ tabIndex: 0,
2525
+ role: "region",
2526
+ "aria-labelledby": caption2 ? captionId : void 0,
2527
+ "aria-label": caption2 ? void 0 : ariaLabel,
2528
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
2529
+ "table",
2530
+ {
2531
+ ref,
2532
+ className: cx(table, striped2 && striped, stickyHeader2 && stickyHeader, className),
2533
+ "aria-label": caption2 ? void 0 : ariaLabel,
2534
+ ...rest,
2535
+ children: [
2536
+ caption2 && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("caption", { id: captionId, className: caption, children: caption2 }),
2537
+ children
2538
+ ]
2539
+ }
2540
+ )
2541
+ }
2542
+ ) });
2543
+ });
2544
+ var TableHeader = /* @__PURE__ */ (0, import_react34.forwardRef)(
2545
+ function TableHeader2({ className, ...rest }, ref) {
2546
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TableSectionContext.Provider, { value: "header", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("thead", { ref, className: cx(header8, className), ...rest }) });
2547
+ }
2548
+ );
2549
+ var TableBody = /* @__PURE__ */ (0, import_react34.forwardRef)(
2550
+ function TableBody2({ className, ...rest }, ref) {
2551
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TableSectionContext.Provider, { value: "body", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("tbody", { ref, className: cx(body4, className), ...rest }) });
2552
+ }
2553
+ );
2554
+ var TableFooter = /* @__PURE__ */ (0, import_react34.forwardRef)(
2555
+ function TableFooter2({ className, ...rest }, ref) {
2556
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TableSectionContext.Provider, { value: "footer", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("tfoot", { ref, className: cx(footer4, className), ...rest }) });
2557
+ }
2558
+ );
2559
+ var TableRow = /* @__PURE__ */ (0, import_react34.forwardRef)(function TableRow2({ selected, className, ...rest }, ref) {
2560
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("tr", { ref, className: cx(row3, className), "data-state": selected ? "selected" : void 0, ...rest });
2561
+ });
2562
+ var TableHead = /* @__PURE__ */ (0, import_react34.forwardRef)(function TableHead2({ align, sortDirection, onSort, scope, className, children, ...rest }, ref) {
2563
+ const size = (0, import_react34.useContext)(TableSizeContext);
2564
+ const section = (0, import_react34.useContext)(TableSectionContext);
2565
+ const sortable = onSort !== void 0;
2566
+ const direction = sortDirection ?? "none";
2567
+ const SortIcon = direction === "descending" ? import_icons14.ArrowDownIcon : import_icons14.ArrowUpIcon;
2568
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2569
+ "th",
2570
+ {
2571
+ ref,
2572
+ scope: scope ?? (section === "header" ? "col" : "row"),
2573
+ "aria-sort": sortable && direction !== "none" ? direction : void 0,
2574
+ className: cx(
2575
+ cell({ size, align }),
2576
+ section === "header" ? head : section === "footer" ? footerCell : void 0,
2577
+ className
2578
+ ),
2579
+ ...rest,
2580
+ children: sortable ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("button", { type: "button", className: sortButton, onClick: onSort, children: [
2581
+ children,
2582
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SortIcon, { size: 14, className: sortIcon, "data-active": direction !== "none", "aria-hidden": true })
2583
+ ] }) : children
2584
+ }
2585
+ );
2586
+ });
2587
+ var TableCell = /* @__PURE__ */ (0, import_react34.forwardRef)(function TableCell2({ align, className, ...rest }, ref) {
2588
+ const size = (0, import_react34.useContext)(TableSizeContext);
2589
+ const section = (0, import_react34.useContext)(TableSectionContext);
2590
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2591
+ "td",
2592
+ {
2593
+ ref,
2594
+ className: cx(cell({ size, align }), section === "footer" && footerCell, className),
2595
+ ...rest
2596
+ }
2597
+ );
2598
+ });
2599
+
1459
2600
  // src/components/Tabs/Tabs.tsx
1460
2601
  var RadixTabs = __toESM(require("@radix-ui/react-tabs"), 1);
1461
- var import_react25 = require("react");
2602
+ var import_react35 = require("react");
1462
2603
 
1463
2604
  // src/components/Tabs/Tabs.css.ts
1464
- var import_createRuntimeFn20 = require("@vanilla-extract/recipes/createRuntimeFn");
1465
- var content8 = "fvhbtda";
1466
- var list3 = /* @__PURE__ */ (0, import_createRuntimeFn20.createRuntimeFn)({ defaultClassName: "fvhbtd0", variantClassNames: { variant: { line: "fvhbtd1", soft: "fvhbtd2" } }, defaultVariants: { variant: "line" }, compoundVariants: [] });
1467
- var trigger3 = /* @__PURE__ */ (0, import_createRuntimeFn20.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"]] });
2605
+ var import_createRuntimeFn22 = require("@vanilla-extract/recipes/createRuntimeFn");
2606
+ var content10 = "fvhbtda";
2607
+ var list4 = /* @__PURE__ */ (0, import_createRuntimeFn22.createRuntimeFn)({ defaultClassName: "fvhbtd0", variantClassNames: { variant: { line: "fvhbtd1", soft: "fvhbtd2" } }, defaultVariants: { variant: "line" }, compoundVariants: [] });
2608
+ 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"]] });
1468
2609
 
1469
2610
  // src/components/Tabs/Tabs.tsx
1470
- var import_jsx_runtime27 = require("react/jsx-runtime");
1471
- var TabsStyleContext = /* @__PURE__ */ (0, import_react25.createContext)({ variant: "line", size: "md" });
1472
- var Tabs = /* @__PURE__ */ (0, import_react25.forwardRef)(function Tabs2({ variant = "line", size = "md", ...props }, ref) {
2611
+ var import_jsx_runtime35 = require("react/jsx-runtime");
2612
+ var TabsStyleContext = /* @__PURE__ */ (0, import_react35.createContext)({ variant: "line", size: "md" });
2613
+ var Tabs = /* @__PURE__ */ (0, import_react35.forwardRef)(function Tabs2({ variant = "line", size = "md", ...props }, ref) {
1473
2614
  const controlled = "value" in props ? { value: props.value ?? "" } : {};
1474
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TabsStyleContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(RadixTabs.Root, { ref, ...props, ...controlled }) });
2615
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TabsStyleContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(RadixTabs.Root, { ref, ...props, ...controlled }) });
1475
2616
  });
1476
- var TabsList = /* @__PURE__ */ (0, import_react25.forwardRef)(function TabsList2({ className, ...rest }, ref) {
1477
- const { variant } = (0, import_react25.useContext)(TabsStyleContext);
1478
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(RadixTabs.List, { ref, className: cx(list3({ variant }), className), ...rest });
2617
+ var TabsList = /* @__PURE__ */ (0, import_react35.forwardRef)(function TabsList2({ className, ...rest }, ref) {
2618
+ const { variant } = (0, import_react35.useContext)(TabsStyleContext);
2619
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(RadixTabs.List, { ref, className: cx(list4({ variant }), className), ...rest });
1479
2620
  });
1480
- var TabsTrigger = /* @__PURE__ */ (0, import_react25.forwardRef)(function TabsTrigger2({ className, ...rest }, ref) {
1481
- const { variant, size } = (0, import_react25.useContext)(TabsStyleContext);
1482
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(RadixTabs.Trigger, { ref, className: cx(trigger3({ variant, size }), className), ...rest });
2621
+ var TabsTrigger = /* @__PURE__ */ (0, import_react35.forwardRef)(function TabsTrigger2({ className, ...rest }, ref) {
2622
+ const { variant, size } = (0, import_react35.useContext)(TabsStyleContext);
2623
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(RadixTabs.Trigger, { ref, className: cx(trigger3({ variant, size }), className), ...rest });
1483
2624
  });
1484
- var TabsContent = /* @__PURE__ */ (0, import_react25.forwardRef)(function TabsContent2({ className, ...rest }, ref) {
1485
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(RadixTabs.Content, { ref, className: cx(content8, className), ...rest });
2625
+ var TabsContent = /* @__PURE__ */ (0, import_react35.forwardRef)(function TabsContent2({ className, ...rest }, ref) {
2626
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(RadixTabs.Content, { ref, className: cx(content10, className), ...rest });
1486
2627
  });
1487
2628
 
1488
2629
  // src/components/Textarea/Textarea.tsx
1489
- var import_react26 = require("react");
2630
+ var import_react36 = require("react");
1490
2631
 
1491
2632
  // src/components/Textarea/Textarea.css.ts
1492
- var import_createRuntimeFn21 = require("@vanilla-extract/recipes/createRuntimeFn");
2633
+ var import_createRuntimeFn23 = require("@vanilla-extract/recipes/createRuntimeFn");
1493
2634
  var count = "_1koawa9";
1494
2635
  var countOver = "_1koawaa";
1495
2636
  var defaultWidth = "_1koawa7";
1496
- var footer4 = "_1koawa8";
1497
- var textarea = /* @__PURE__ */ (0, import_createRuntimeFn21.createRuntimeFn)({ defaultClassName: "_1koawa0", variantClassNames: { size: { sm: "_1koawa1", md: "_1koawa2", lg: "_1koawa3" }, resize: { none: "_1koawa4", vertical: "_1koawa5", both: "_1koawa6" } }, defaultVariants: { size: "md", resize: "vertical" }, compoundVariants: [] });
2637
+ var footer5 = "_1koawa8";
2638
+ 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: [] });
1498
2639
 
1499
2640
  // src/components/Textarea/Textarea.tsx
1500
- var import_jsx_runtime28 = require("react/jsx-runtime");
1501
- var useIsomorphicLayoutEffect = typeof window !== "undefined" ? import_react26.useLayoutEffect : import_react26.useEffect;
1502
- var Textarea = /* @__PURE__ */ (0, import_react26.forwardRef)(function Textarea2({
1503
- label: label5,
1504
- helperText: helperText2,
2641
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2642
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? import_react36.useLayoutEffect : import_react36.useEffect;
2643
+ var Textarea = /* @__PURE__ */ (0, import_react36.forwardRef)(function Textarea2({
2644
+ label: label6,
2645
+ helperText: helperText3,
1505
2646
  error,
1506
2647
  size,
1507
2648
  fullWidth,
@@ -1511,7 +2652,7 @@ var Textarea = /* @__PURE__ */ (0, import_react26.forwardRef)(function Textarea2
1511
2652
  required,
1512
2653
  id,
1513
2654
  rows = 3,
1514
- value: value3,
2655
+ value: value4,
1515
2656
  defaultValue,
1516
2657
  onChange,
1517
2658
  maxLength,
@@ -1520,37 +2661,37 @@ var Textarea = /* @__PURE__ */ (0, import_react26.forwardRef)(function Textarea2
1520
2661
  "aria-describedby": ariaDescribedBy,
1521
2662
  ...rest
1522
2663
  }, ref) {
1523
- const generatedId = (0, import_react26.useId)();
2664
+ const generatedId = (0, import_react36.useId)();
1524
2665
  const textareaId = id ?? generatedId;
1525
- const helperId = helperText2 ? `${textareaId}-helper` : void 0;
1526
- const innerRef = (0, import_react26.useRef)(null);
1527
- const [uncontrolledLength, setUncontrolledLength] = (0, import_react26.useState)(() => String(defaultValue ?? "").length);
1528
- const length = value3 !== void 0 ? String(value3).length : uncontrolledLength;
1529
- const fitHeight = (0, import_react26.useCallback)(() => {
2666
+ const helperId = helperText3 ? `${textareaId}-helper` : void 0;
2667
+ const innerRef = (0, import_react36.useRef)(null);
2668
+ const [uncontrolledLength, setUncontrolledLength] = (0, import_react36.useState)(() => String(defaultValue ?? "").length);
2669
+ const length = value4 !== void 0 ? String(value4).length : uncontrolledLength;
2670
+ const fitHeight = (0, import_react36.useCallback)(() => {
1530
2671
  const el = innerRef.current;
1531
2672
  if (!autoResize || !el) return;
1532
2673
  el.style.height = "auto";
1533
2674
  const borders = el.offsetHeight - el.clientHeight;
1534
2675
  el.style.height = `${el.scrollHeight + borders}px`;
1535
2676
  }, [autoResize]);
1536
- useIsomorphicLayoutEffect(fitHeight, [fitHeight, value3]);
2677
+ useIsomorphicLayoutEffect(fitHeight, [fitHeight, value4]);
1537
2678
  const handleChange = (event) => {
1538
- if (value3 === void 0) setUncontrolledLength(event.target.value.length);
2679
+ if (value4 === void 0) setUncontrolledLength(event.target.value.length);
1539
2680
  fitHeight();
1540
2681
  onChange?.(event);
1541
2682
  };
1542
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
1543
- label5 && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("label", { htmlFor: textareaId, className: label2, children: [
1544
- label5,
1545
- required && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
2683
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: cx(field, fullWidth && fieldFullWidth), children: [
2684
+ label6 && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("label", { htmlFor: textareaId, className: label, children: [
2685
+ label6,
2686
+ required && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: requiredMark, "aria-hidden": true, children: "*" })
1546
2687
  ] }),
1547
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2688
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1548
2689
  "textarea",
1549
2690
  {
1550
2691
  ref: mergeRefs(innerRef, ref),
1551
2692
  id: textareaId,
1552
2693
  rows,
1553
- value: value3,
2694
+ value: value4,
1554
2695
  defaultValue,
1555
2696
  onChange: handleChange,
1556
2697
  maxLength,
@@ -1566,49 +2707,49 @@ var Textarea = /* @__PURE__ */ (0, import_react26.forwardRef)(function Textarea2
1566
2707
  ...rest
1567
2708
  }
1568
2709
  ),
1569
- (helperText2 || showCount) && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: footer4, children: [
1570
- helperText2 && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText2 }),
1571
- showCount && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: cx(count, maxLength !== void 0 && length >= maxLength && countOver), children: maxLength !== void 0 ? `${length}/${maxLength}` : length })
2710
+ (helperText3 || showCount) && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: footer5, children: [
2711
+ helperText3 && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { id: helperId, className: helperText({ error }), children: helperText3 }),
2712
+ showCount && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: cx(count, maxLength !== void 0 && length >= maxLength && countOver), children: maxLength !== void 0 ? `${length}/${maxLength}` : length })
1572
2713
  ] })
1573
2714
  ] });
1574
2715
  });
1575
2716
 
1576
2717
  // src/components/Toast/Toast.tsx
1577
2718
  var RadixToast = __toESM(require("@radix-ui/react-toast"), 1);
1578
- var import_react27 = require("react");
1579
- var import_icons12 = require("@bestow-ui/icons");
2719
+ var import_react37 = require("react");
2720
+ var import_icons15 = require("@bestow-ui/icons");
1580
2721
 
1581
2722
  // src/components/Toast/Toast.css.ts
1582
- var import_createRuntimeFn22 = require("@vanilla-extract/recipes/createRuntimeFn");
2723
+ var import_createRuntimeFn24 = require("@vanilla-extract/recipes/createRuntimeFn");
1583
2724
  var action2 = "_1g11zvx8";
1584
2725
  var close = "_1g11zvx9";
1585
2726
  var description5 = "_1g11zvx7";
1586
2727
  var title5 = "_1g11zvx6";
1587
- var toast = /* @__PURE__ */ (0, import_createRuntimeFn22.createRuntimeFn)({ defaultClassName: "_1g11zvx1", variantClassNames: { variant: { "default": "_1g11zvx2", success: "_1g11zvx3", warning: "_1g11zvx4", danger: "_1g11zvx5" } }, defaultVariants: { variant: "default" }, compoundVariants: [] });
2728
+ var toast = /* @__PURE__ */ (0, import_createRuntimeFn24.createRuntimeFn)({ defaultClassName: "_1g11zvx1", variantClassNames: { variant: { "default": "_1g11zvx2", success: "_1g11zvx3", warning: "_1g11zvx4", danger: "_1g11zvx5" } }, defaultVariants: { variant: "default" }, compoundVariants: [] });
1588
2729
  var viewport2 = "_1g11zvx0";
1589
2730
 
1590
2731
  // src/components/Toast/Toast.tsx
1591
- var import_jsx_runtime29 = require("react/jsx-runtime");
2732
+ var import_jsx_runtime37 = require("react/jsx-runtime");
1592
2733
  var REMOVE_DELAY = 500;
1593
- var ToastContext = /* @__PURE__ */ (0, import_react27.createContext)(null);
1594
- function ToastProvider({ children, duration = 5e3, label: label5 = "\uC54C\uB9BC" }) {
1595
- const [toasts, setToasts] = (0, import_react27.useState)([]);
1596
- const nextId = (0, import_react27.useRef)(0);
2734
+ var ToastContext = /* @__PURE__ */ (0, import_react37.createContext)(null);
2735
+ function ToastProvider({ children, duration = 5e3, label: label6 = "\uC54C\uB9BC" }) {
2736
+ const [toasts, setToasts] = (0, import_react37.useState)([]);
2737
+ const nextId = (0, import_react37.useRef)(0);
1597
2738
  const portal2 = usePortalProps();
1598
- const toast2 = (0, import_react27.useCallback)((options) => {
2739
+ const toast2 = (0, import_react37.useCallback)((options) => {
1599
2740
  const id = nextId.current++;
1600
2741
  setToasts((prev) => [...prev, { ...options, id, open: true }]);
1601
2742
  return id;
1602
2743
  }, []);
1603
- const dismiss = (0, import_react27.useCallback)((id) => {
2744
+ const dismiss = (0, import_react37.useCallback)((id) => {
1604
2745
  const isTarget = (t) => id === void 0 || t.id === id;
1605
2746
  setToasts((prev) => prev.map((t) => isTarget(t) ? { ...t, open: false } : t));
1606
2747
  setTimeout(() => setToasts((prev) => prev.filter((t) => t.open || !isTarget(t))), REMOVE_DELAY);
1607
2748
  }, []);
1608
- const value3 = (0, import_react27.useMemo)(() => ({ toast: toast2, dismiss }), [toast2, dismiss]);
1609
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(ToastContext.Provider, { value: value3, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(RadixToast.Provider, { duration, label: label5, swipeDirection: "right", children: [
2749
+ const value4 = (0, import_react37.useMemo)(() => ({ toast: toast2, dismiss }), [toast2, dismiss]);
2750
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(ToastContext.Provider, { value: value4, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(RadixToast.Provider, { duration, label: label6, swipeDirection: "right", children: [
1610
2751
  children,
1611
- toasts.map(({ id, open, title: title6, description: description6, variant, duration: itemDuration, action: action3 }) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
2752
+ toasts.map(({ id, open, title: title6, description: description6, variant, duration: itemDuration, action: action3 }) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
1612
2753
  RadixToast.Root,
1613
2754
  {
1614
2755
  open,
@@ -1618,19 +2759,19 @@ function ToastProvider({ children, duration = 5e3, label: label5 = "\uC54C\uB9BC
1618
2759
  },
1619
2760
  className: toast({ variant }),
1620
2761
  children: [
1621
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RadixToast.Title, { className: title5, children: title6 }),
1622
- description6 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RadixToast.Description, { className: description5, children: description6 }),
1623
- action3 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RadixToast.Action, { asChild: true, altText: action3.altText ?? action3.label, className: action2, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Button, { size: "sm", variant: "soft", color: "neutral", onClick: action3.onClick, children: action3.label }) }),
1624
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RadixToast.Close, { className: close, "aria-label": "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_icons12.XIcon, { size: 16 }) })
2762
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(RadixToast.Title, { className: title5, children: title6 }),
2763
+ description6 && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(RadixToast.Description, { className: description5, children: description6 }),
2764
+ action3 && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(RadixToast.Action, { asChild: true, altText: action3.altText ?? action3.label, className: action2, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Button, { size: "sm", variant: "soft", color: "neutral", onClick: action3.onClick, children: action3.label }) }),
2765
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(RadixToast.Close, { className: close, "aria-label": "\uB2EB\uAE30", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_icons15.XIcon, { size: 16 }) })
1625
2766
  ]
1626
2767
  },
1627
2768
  id
1628
2769
  )),
1629
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RadixToast.Viewport, { className: cx(portal2.className, viewport2), style: portal2.style })
2770
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(RadixToast.Viewport, { className: cx(portal2.className, viewport2), style: portal2.style })
1630
2771
  ] }) });
1631
2772
  }
1632
2773
  function useToast() {
1633
- const context = (0, import_react27.useContext)(ToastContext);
2774
+ const context = (0, import_react37.useContext)(ToastContext);
1634
2775
  if (!context) throw new Error("useToast \uB294 ToastProvider \uC548\uC5D0\uC11C \uC0AC\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4.");
1635
2776
  return context;
1636
2777
  }
@@ -1640,12 +2781,12 @@ var RadixTooltip = __toESM(require("@radix-ui/react-tooltip"), 1);
1640
2781
 
1641
2782
  // src/components/Tooltip/Tooltip.css.ts
1642
2783
  var arrow2 = "z7rufs1";
1643
- var content9 = "z7rufs0";
2784
+ var content11 = "z7rufs0";
1644
2785
 
1645
2786
  // src/components/Tooltip/Tooltip.tsx
1646
- var import_jsx_runtime30 = require("react/jsx-runtime");
2787
+ var import_jsx_runtime38 = require("react/jsx-runtime");
1647
2788
  function Tooltip({
1648
- content: content10,
2789
+ content: content12,
1649
2790
  children,
1650
2791
  side = "top",
1651
2792
  align = "center",
@@ -1657,21 +2798,21 @@ function Tooltip({
1657
2798
  className
1658
2799
  }) {
1659
2800
  const portal2 = usePortalProps();
1660
- if (disabled || content10 == null || content10 === "") return children;
1661
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(RadixTooltip.Provider, { delayDuration: delay, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(RadixTooltip.Root, { open, defaultOpen, onOpenChange, children: [
1662
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(RadixTooltip.Trigger, { asChild: true, children }),
1663
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(RadixTooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
2801
+ if (disabled || content12 == null || content12 === "") return children;
2802
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(RadixTooltip.Provider, { delayDuration: delay, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(RadixTooltip.Root, { open, defaultOpen, onOpenChange, children: [
2803
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(RadixTooltip.Trigger, { asChild: true, children }),
2804
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(RadixTooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
1664
2805
  RadixTooltip.Content,
1665
2806
  {
1666
2807
  side,
1667
2808
  align,
1668
2809
  sideOffset: 6,
1669
2810
  collisionPadding: 8,
1670
- className: cx(portal2.className, content9, className),
2811
+ className: cx(portal2.className, content11, className),
1671
2812
  style: portal2.style,
1672
2813
  children: [
1673
- content10,
1674
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(RadixTooltip.Arrow, { className: arrow2, width: 10, height: 5 })
2814
+ content12,
2815
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(RadixTooltip.Arrow, { className: arrow2, width: 10, height: 5 })
1675
2816
  ]
1676
2817
  }
1677
2818
  ) })
@@ -1679,14 +2820,14 @@ function Tooltip({
1679
2820
  }
1680
2821
 
1681
2822
  // src/components/Typography/Typography.tsx
1682
- var import_react28 = require("react");
2823
+ var import_react38 = require("react");
1683
2824
 
1684
2825
  // src/components/Typography/Typography.css.ts
1685
- var import_createRuntimeFn23 = require("@vanilla-extract/recipes/createRuntimeFn");
1686
- var typography = /* @__PURE__ */ (0, import_createRuntimeFn23.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: [] });
2826
+ var import_createRuntimeFn25 = require("@vanilla-extract/recipes/createRuntimeFn");
2827
+ 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: [] });
1687
2828
 
1688
2829
  // src/components/Typography/Typography.tsx
1689
- var import_jsx_runtime31 = require("react/jsx-runtime");
2830
+ var import_jsx_runtime39 = require("react/jsx-runtime");
1690
2831
  var defaultElement = {
1691
2832
  display: "h1",
1692
2833
  h1: "h1",
@@ -1698,9 +2839,9 @@ var defaultElement = {
1698
2839
  "body-sm": "p",
1699
2840
  caption: "span"
1700
2841
  };
1701
- var Typography = /* @__PURE__ */ (0, import_react28.forwardRef)(function Typography2({ variant = "body", as, color, weight, align, truncate, className, ...rest }, ref) {
2842
+ var Typography = /* @__PURE__ */ (0, import_react38.forwardRef)(function Typography2({ variant = "body", as, color, weight, align, truncate, className, ...rest }, ref) {
1702
2843
  const Component = as ?? defaultElement[variant];
1703
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2844
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1704
2845
  Component,
1705
2846
  {
1706
2847
  ref,
@@ -1709,20 +2850,165 @@ var Typography = /* @__PURE__ */ (0, import_react28.forwardRef)(function Typogra
1709
2850
  }
1710
2851
  );
1711
2852
  });
2853
+
2854
+ // src/components/VerificationCodeInput/VerificationCodeInput.tsx
2855
+ var import_react39 = require("react");
2856
+
2857
+ // src/components/VerificationCodeInput/VerificationCodeInput.css.ts
2858
+ var input4 = "ea01812";
2859
+ var row4 = "ea01810";
2860
+ var slot = "ea01813";
2861
+ var slots = "ea01811";
2862
+ var timer = "ea01814";
2863
+
2864
+ // src/components/VerificationCodeInput/VerificationCodeInput.tsx
2865
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2866
+ var formatTime = (seconds) => `${String(Math.floor(seconds / 60)).padStart(2, "0")}:${String(seconds % 60).padStart(2, "0")}`;
2867
+ var VerificationCodeInput = /* @__PURE__ */ (0, import_react39.forwardRef)(
2868
+ function VerificationCodeInput2(props, ref) {
2869
+ const {
2870
+ length = 6,
2871
+ value: value4,
2872
+ defaultValue,
2873
+ onValueChange,
2874
+ onComplete,
2875
+ type = "numeric",
2876
+ label: label6 = "\uC778\uC99D\uBC88\uD638",
2877
+ helperText: helperText3,
2878
+ error,
2879
+ disabled,
2880
+ autoFocus,
2881
+ expiresIn,
2882
+ onExpire,
2883
+ onResend,
2884
+ resendText = "\uC7AC\uC804\uC1A1",
2885
+ expiredText = "\uC778\uC99D \uC2DC\uAC04\uC774 \uC9C0\uB0AC\uC5B4\uC694. \uC7AC\uC804\uC1A1\uD574 \uC8FC\uC138\uC694.",
2886
+ name,
2887
+ id,
2888
+ className
2889
+ } = props;
2890
+ const generatedId = (0, import_react39.useId)();
2891
+ const inputId = id ?? generatedId;
2892
+ const helperId = `${inputId}-helper`;
2893
+ const statusId = `${inputId}-status`;
2894
+ const inputRef = (0, import_react39.useRef)(null);
2895
+ const isControlled = "value" in props;
2896
+ const [innerValue, setInnerValue] = (0, import_react39.useState)(defaultValue ?? "");
2897
+ const code = (isControlled ? value4 ?? "" : innerValue).slice(0, length);
2898
+ const [focused, setFocused] = (0, import_react39.useState)(false);
2899
+ const [endAt, setEndAt] = (0, import_react39.useState)(() => expiresIn ? Date.now() + expiresIn * 1e3 : null);
2900
+ const [remaining, setRemaining] = (0, import_react39.useState)(expiresIn ?? 0);
2901
+ const expired = expiresIn !== void 0 && remaining <= 0;
2902
+ const onExpireRef = (0, import_react39.useRef)(onExpire);
2903
+ (0, import_react39.useEffect)(() => {
2904
+ onExpireRef.current = onExpire;
2905
+ });
2906
+ (0, import_react39.useEffect)(() => {
2907
+ if (endAt === null) return;
2908
+ const tick = () => {
2909
+ const left = Math.max(0, Math.ceil((endAt - Date.now()) / 1e3));
2910
+ setRemaining(left);
2911
+ if (left === 0) {
2912
+ clearInterval(timer2);
2913
+ onExpireRef.current?.();
2914
+ }
2915
+ };
2916
+ const timer2 = setInterval(tick, 250);
2917
+ tick();
2918
+ return () => clearInterval(timer2);
2919
+ }, [endAt]);
2920
+ const setCode = (next) => {
2921
+ if (!isControlled) setInnerValue(next);
2922
+ onValueChange?.(next);
2923
+ if (next.length === length && code.length !== length) onComplete?.(next);
2924
+ };
2925
+ const handleChange = (event) => {
2926
+ const raw = event.target.value;
2927
+ const cleaned = (type === "numeric" ? raw.replace(/\D/g, "") : raw.replace(/[^0-9a-z]/gi, "").toUpperCase()).slice(0, length);
2928
+ setCode(cleaned);
2929
+ };
2930
+ const resend = () => {
2931
+ onResend?.();
2932
+ setCode("");
2933
+ if (expiresIn) {
2934
+ setEndAt(Date.now() + expiresIn * 1e3);
2935
+ setRemaining(expiresIn);
2936
+ }
2937
+ inputRef.current?.focus();
2938
+ };
2939
+ const description6 = helperText3 ?? `${length}\uC790\uB9AC ${type === "numeric" ? "\uC22B\uC790" : "\uBB38\uC790"}\uB97C \uC785\uB825\uD558\uC138\uC694.`;
2940
+ const activeIndex = Math.min(code.length, length - 1);
2941
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2942
+ "div",
2943
+ {
2944
+ className: cx(field, className),
2945
+ "data-invalid": error || void 0,
2946
+ "data-disabled": disabled || void 0,
2947
+ children: [
2948
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("label", { htmlFor: inputId, className: label, children: label6 }),
2949
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: row4, children: [
2950
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: slots, children: [
2951
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2952
+ "input",
2953
+ {
2954
+ ref: mergeRefs(ref, inputRef),
2955
+ id: inputId,
2956
+ type: "text",
2957
+ inputMode: type === "numeric" ? "numeric" : "text",
2958
+ autoComplete: "one-time-code",
2959
+ pattern: type === "numeric" ? "[0-9]*" : void 0,
2960
+ value: code,
2961
+ onChange: handleChange,
2962
+ onFocus: () => setFocused(true),
2963
+ onBlur: () => setFocused(false),
2964
+ disabled,
2965
+ autoFocus,
2966
+ "aria-invalid": error || void 0,
2967
+ "aria-describedby": `${helperId} ${statusId}`,
2968
+ className: input4
2969
+ }
2970
+ ),
2971
+ Array.from({ length }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2972
+ "div",
2973
+ {
2974
+ className: slot,
2975
+ "data-active": focused && index === activeIndex ? "" : void 0,
2976
+ "aria-hidden": true,
2977
+ children: code[index] ?? ""
2978
+ },
2979
+ index
2980
+ ))
2981
+ ] }),
2982
+ expiresIn !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { role: "timer", className: timer, children: formatTime(remaining) }),
2983
+ onResend && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Button, { size: "sm", variant: "outline", color: "neutral", onClick: resend, disabled, children: resendText })
2984
+ ] }),
2985
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { id: helperId, className: helperText({ error }), children: description6 }),
2986
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { id: statusId, role: "status", className: helperText({ error: true }), children: expired ? expiredText : "" }),
2987
+ name && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("input", { type: "hidden", name, value: code })
2988
+ ]
2989
+ }
2990
+ );
2991
+ }
2992
+ );
1712
2993
  // Annotate the CommonJS export names for ESM import in node:
1713
2994
  0 && (module.exports = {
1714
2995
  Accordion,
1715
2996
  AccordionItem,
2997
+ AddressInput,
2998
+ AgreementGroup,
1716
2999
  Alert,
3000
+ AmountInput,
1717
3001
  Avatar,
1718
3002
  Badge,
1719
3003
  Breadcrumb,
3004
+ BusinessNumberInput,
1720
3005
  Button,
1721
3006
  Card,
1722
3007
  CardBody,
1723
3008
  CardFooter,
1724
3009
  CardHeader,
1725
3010
  Checkbox,
3011
+ Combobox,
1726
3012
  Divider,
1727
3013
  Drawer,
1728
3014
  DrawerClose,
@@ -1739,15 +3025,24 @@ var Typography = /* @__PURE__ */ (0, import_react28.forwardRef)(function Typogra
1739
3025
  Modal,
1740
3026
  ModalClose,
1741
3027
  Pagination,
3028
+ PhoneNumberInput,
1742
3029
  Popover,
1743
3030
  PopoverClose,
1744
3031
  Progress,
1745
3032
  RadioGroup,
1746
3033
  Select,
1747
3034
  Skeleton,
3035
+ Slider,
1748
3036
  Spinner,
1749
3037
  Stack,
1750
3038
  Switch,
3039
+ Table,
3040
+ TableBody,
3041
+ TableCell,
3042
+ TableFooter,
3043
+ TableHead,
3044
+ TableHeader,
3045
+ TableRow,
1751
3046
  Tabs,
1752
3047
  TabsContent,
1753
3048
  TabsList,
@@ -1758,9 +3053,17 @@ var Typography = /* @__PURE__ */ (0, import_react28.forwardRef)(function Typogra
1758
3053
  ToastProvider,
1759
3054
  Tooltip,
1760
3055
  Typography,
3056
+ VerificationCodeInput,
3057
+ composeExtraAddress,
1761
3058
  contrastRatio,
1762
3059
  createIntentColors,
1763
3060
  createTheme,
3061
+ formatBusinessNumber,
3062
+ formatKoreanAmount,
3063
+ formatPhoneNumber,
3064
+ hasAllRequiredAgreements,
3065
+ isValidBusinessNumber,
3066
+ kakaoPostcodeProvider,
1764
3067
  themeClass,
1765
3068
  usePortalClassName,
1766
3069
  usePortalProps,