@bestow-ui/react 0.10.0 → 0.12.0

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