@hivcd-printshop/design-system 1.3.2 → 1.4.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
@@ -23,6 +23,7 @@ var index_exports = {};
23
23
  __export(index_exports, {
24
24
  Accordion: () => Accordion,
25
25
  BackButton: () => BackButton,
26
+ Badge: () => Badge,
26
27
  BasicFormField: () => BasicFormField,
27
28
  CTA: () => CTA,
28
29
  CategorySegment: () => CategorySegment,
@@ -64,6 +65,7 @@ __export(index_exports, {
64
65
  SelectBoxOption: () => SelectBoxOption,
65
66
  SideRadioAccordion: () => SideRadioAccordion,
66
67
  TNB: () => TNB,
68
+ TabSwitch: () => TabSwitch,
67
69
  Tag: () => Tag,
68
70
  TextButton: () => TextButton,
69
71
  Timetable: () => Timetable,
@@ -450,8 +452,33 @@ var BackButton = ({ onClick, className }) => {
450
452
  );
451
453
  };
452
454
 
453
- // src/components/CTA/CTA.tsx
455
+ // src/components/Badge/Badge.tsx
454
456
  var import_jsx_runtime4 = require("react/jsx-runtime");
457
+ var variantStyles = {
458
+ warning: "bg-sub-warning text-strong",
459
+ restriction: "bg-sub-restriction text-strong",
460
+ outline: "bg-white border border-gray02 text-primary",
461
+ neutral: "bg-gray01 text-secondary",
462
+ solid: "bg-black text-white"
463
+ };
464
+ var Badge = ({ variant = "neutral", children, className, ...props }) => {
465
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
466
+ "span",
467
+ {
468
+ className: cn(
469
+ "inline-flex h-8 w-fit items-center justify-center px-2 py-1",
470
+ "text-body3-book whitespace-nowrap select-none",
471
+ variantStyles[variant],
472
+ className
473
+ ),
474
+ ...props,
475
+ children
476
+ }
477
+ );
478
+ };
479
+
480
+ // src/components/CTA/CTA.tsx
481
+ var import_jsx_runtime5 = require("react/jsx-runtime");
455
482
  var CTA = ({
456
483
  primary = false,
457
484
  alert = false,
@@ -462,7 +489,7 @@ var CTA = ({
462
489
  forModal = false,
463
490
  ...props
464
491
  }) => {
465
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
492
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
466
493
  "button",
467
494
  {
468
495
  type: "button",
@@ -490,22 +517,22 @@ var CTA = ({
490
517
  };
491
518
 
492
519
  // src/components/Column/MultiColumn.tsx
493
- var import_jsx_runtime5 = require("react/jsx-runtime");
520
+ var import_jsx_runtime6 = require("react/jsx-runtime");
494
521
  var MultiColumnMain = ({ children, className }) => {
495
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn("flex flex-col w-full h-full", className), children });
522
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: cn("flex flex-col w-full h-full", className), children });
496
523
  };
497
524
  var Columns = ({ children, className }) => {
498
525
  return (
499
526
  // flex 래퍼를 사용하고 하위 Column들이 flex-1을 가지게 하거나,
500
527
  // grid를 사용하여 열을 나눌 수 있어. 여기서는 flex를 활용한 균등 분할 예시야.
501
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn("flex w-full h-full divide-x divide-gray02", className), children })
528
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: cn("flex w-full h-full divide-x divide-gray02", className), children })
502
529
  );
503
530
  };
504
531
  var CTAs = ({ children, className }) => {
505
532
  if (!children) return null;
506
533
  return (
507
534
  // CTA 버튼들을 중앙에 배치하는 예시 (우측 정렬이 필요하면 justify-end 사용)
508
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn("flex flex-col w-full h-fit", className), children })
535
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: cn("flex flex-col w-full h-fit", className), children })
509
536
  );
510
537
  };
511
538
  var MultiColumn = Object.assign(MultiColumnMain, {
@@ -514,78 +541,78 @@ var MultiColumn = Object.assign(MultiColumnMain, {
514
541
  });
515
542
 
516
543
  // src/components/Column/Column.tsx
517
- var import_jsx_runtime6 = require("react/jsx-runtime");
544
+ var import_jsx_runtime7 = require("react/jsx-runtime");
518
545
  var Column = ({ className, children, header }) => {
519
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: cn("flex flex-col gap-5", "h-full w-full px-5 py-3", className), children: [
520
- header && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h1", { className: cn("text-body1-medium text-primary"), children: header }),
546
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: cn("flex flex-col gap-5", "h-full w-full px-5 py-3", className), children: [
547
+ header && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h1", { className: cn("text-body1-medium text-primary"), children: header }),
521
548
  children
522
549
  ] });
523
550
  };
524
551
 
525
552
  // src/components/Column/ColumnContentContainer.tsx
526
- var import_jsx_runtime7 = require("react/jsx-runtime");
553
+ var import_jsx_runtime8 = require("react/jsx-runtime");
527
554
  var ColumnContentContainer = ({ className, children }) => {
528
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: cn("flex flex-col gap-1.5 w-full h-fit", className), children });
555
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: cn("flex flex-col gap-1.5 w-full h-fit", className), children });
529
556
  };
530
557
 
531
558
  // src/components/Column/ColumnLabel.tsx
532
- var import_jsx_runtime8 = require("react/jsx-runtime");
559
+ var import_jsx_runtime9 = require("react/jsx-runtime");
533
560
  var ColumnLabel = ({ className, children, subLabel, htmlFor }) => {
534
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("label", { htmlFor, className: cn("flex gap-1.5 items-end", className), children: [
535
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: cn("text-body2-regular text-tertiary"), children }),
536
- subLabel && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: cn("text-caption-book text-quaternary"), children: subLabel })
561
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("label", { htmlFor, className: cn("flex gap-1.5 items-end", className), children: [
562
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: cn("text-body2-regular text-tertiary"), children }),
563
+ subLabel && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: cn("text-caption-book text-quaternary"), children: subLabel })
537
564
  ] });
538
565
  };
539
566
 
540
567
  // src/components/Column/ColumnText.tsx
541
- var import_jsx_runtime9 = require("react/jsx-runtime");
568
+ var import_jsx_runtime10 = require("react/jsx-runtime");
542
569
  var ColumnTextStyle = "text-body3-book text-strong";
543
570
  var ModalTextStyle = "text-body1-regular text-primary";
544
571
  var ColumnText = ({ className, alert = false, children, onClick }) => {
545
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: cn(ColumnTextStyle, alert && "text-danger", className), onClick, children: children ? children : "-" });
572
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: cn(ColumnTextStyle, alert && "text-danger", className), onClick, children: children ? children : "-" });
546
573
  };
547
574
 
548
575
  // src/components/Column/ColumnSubTitle.tsx
549
- var import_jsx_runtime10 = require("react/jsx-runtime");
576
+ var import_jsx_runtime11 = require("react/jsx-runtime");
550
577
  var ColumnSubTitle = ({
551
578
  className,
552
579
  children,
553
580
  action,
554
581
  as: Tag2 = "h2"
555
582
  }) => {
556
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Tag2, { className: cn("flex items-center justify-between gap-1.5", "w-full", className), children: [
557
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: cn("text-body1-medium text-primary"), children }),
558
- action && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "flex shrink-0 items-center", children: action })
583
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Tag2, { className: cn("flex items-center justify-between gap-1.5", "w-full", className), children: [
584
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: cn("text-body1-medium text-primary"), children }),
585
+ action && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "flex shrink-0 items-center", children: action })
559
586
  ] });
560
587
  };
561
588
 
562
589
  // src/components/Column/ColumnDescription.tsx
563
- var import_jsx_runtime11 = require("react/jsx-runtime");
590
+ var import_jsx_runtime12 = require("react/jsx-runtime");
564
591
  var ColumnDescription = ({
565
592
  className,
566
593
  children,
567
594
  bullet = true
568
595
  }) => {
569
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: cn("flex items-start gap-3", className), children: [
570
- bullet && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "flex shrink-0 items-center py-1", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(IconCompass, { className: "size-4" }) }),
571
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "min-w-0 flex-1 whitespace-pre-line text-body3-book text-primary", children })
596
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: cn("flex items-start gap-3", className), children: [
597
+ bullet && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "flex shrink-0 items-center py-1", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(IconCompass, { className: "size-4" }) }),
598
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "min-w-0 flex-1 whitespace-pre-line text-body3-book text-primary", children })
572
599
  ] });
573
600
  };
574
601
  var ColumnDescriptionList = ({ className, children }) => {
575
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: cn("flex flex-col gap-4", className), children });
602
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: cn("flex flex-col gap-4", className), children });
576
603
  };
577
604
 
578
605
  // src/components/Form/BasicFormField.tsx
579
- var import_jsx_runtime12 = require("react/jsx-runtime");
606
+ var import_jsx_runtime13 = require("react/jsx-runtime");
580
607
  var BasicFormField = ({
581
608
  children,
582
609
  isDanger,
583
610
  dangerText,
584
611
  className
585
612
  }) => {
586
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: cn("flex flex-col gap-1.5", className), children: [
613
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: cn("flex flex-col gap-1.5", className), children: [
587
614
  children,
588
- isDanger && dangerText && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-caption-book text-danger", children: dangerText })
615
+ isDanger && dangerText && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-caption-book text-danger", children: dangerText })
589
616
  ] });
590
617
  };
591
618
  var getInputStyles = (isDanger, additionalClass) => {
@@ -596,6 +623,9 @@ var getInputStyles = (isDanger, additionalClass) => {
596
623
  "bg-white transition-colors",
597
624
  ColumnTextStyle,
598
625
  "text-primary placeholder:text-quaternary",
626
+ // 비활성(disabled) 상태: 배경/글자를 죽이고 커서 차단
627
+ "disabled:bg-gray00 disabled:text-quaternary disabled:cursor-not-allowed",
628
+ "disabled:placeholder:text-quaternary",
599
629
  isDanger && "border-danger",
600
630
  // 경고 시 빨간 테두리 (#E42939)
601
631
  additionalClass
@@ -604,15 +634,15 @@ var getInputStyles = (isDanger, additionalClass) => {
604
634
  };
605
635
 
606
636
  // src/components/Form/FormText.tsx
607
- var import_jsx_runtime13 = require("react/jsx-runtime");
637
+ var import_jsx_runtime14 = require("react/jsx-runtime");
608
638
  var FormText = ({ className, isDanger, dangerText, ...props }) => {
609
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("input", { type: "text", className: getInputStyles(isDanger, className), ...props }) });
639
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("input", { type: "text", className: getInputStyles(isDanger, className), ...props }) });
610
640
  };
611
641
 
612
642
  // src/components/Form/FormTextArea.tsx
613
- var import_jsx_runtime14 = require("react/jsx-runtime");
643
+ var import_jsx_runtime15 = require("react/jsx-runtime");
614
644
  var FormTextArea = ({ className, isDanger, dangerText, ...props }) => {
615
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
645
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
616
646
  "textarea",
617
647
  {
618
648
  className: getInputStyles(isDanger, "resize-none h-30 px-4 py-2.5 " + (className || "")),
@@ -622,19 +652,19 @@ var FormTextArea = ({ className, isDanger, dangerText, ...props }) => {
622
652
  };
623
653
 
624
654
  // src/components/Form/FormNumber.tsx
625
- var import_jsx_runtime15 = require("react/jsx-runtime");
655
+ var import_jsx_runtime16 = require("react/jsx-runtime");
626
656
  var FormNumber = ({ className, isDanger, dangerText, ...props }) => {
627
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("input", { type: "number", className: getInputStyles(isDanger, className), ...props }) });
657
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("input", { type: "number", className: getInputStyles(isDanger, className), ...props }) });
628
658
  };
629
659
 
630
660
  // src/components/Form/FormPassword.tsx
631
- var import_jsx_runtime16 = require("react/jsx-runtime");
661
+ var import_jsx_runtime17 = require("react/jsx-runtime");
632
662
  var FormPassword = ({ className, isDanger, dangerText, ...props }) => {
633
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("input", { type: "password", className: getInputStyles(isDanger, className), ...props }) });
663
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("input", { type: "password", className: getInputStyles(isDanger, className), ...props }) });
634
664
  };
635
665
 
636
666
  // src/components/Form/FormTel.tsx
637
- var import_jsx_runtime17 = require("react/jsx-runtime");
667
+ var import_jsx_runtime18 = require("react/jsx-runtime");
638
668
  var FormTel = ({ className, isDanger, dangerText, onChange, ...props }) => {
639
669
  const handlePhoneChange = (e) => {
640
670
  const rawValue = e.target.value.replace(/[^0-9]/g, "");
@@ -646,7 +676,7 @@ var FormTel = ({ className, isDanger, dangerText, onChange, ...props }) => {
646
676
  e.target.value = formattedValue;
647
677
  if (onChange) onChange(e);
648
678
  };
649
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
679
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
650
680
  "input",
651
681
  {
652
682
  type: "tel",
@@ -660,7 +690,7 @@ var FormTel = ({ className, isDanger, dangerText, onChange, ...props }) => {
660
690
 
661
691
  // src/components/Form/FormColor.tsx
662
692
  var import_react3 = require("react");
663
- var import_jsx_runtime18 = require("react/jsx-runtime");
693
+ var import_jsx_runtime19 = require("react/jsx-runtime");
664
694
  var FormColor = ({
665
695
  className,
666
696
  isDanger,
@@ -678,7 +708,7 @@ var FormColor = ({
678
708
  setInternalColor(e.target.value);
679
709
  onChange?.(e);
680
710
  };
681
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
711
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
682
712
  "label",
683
713
  {
684
714
  className: getInputStyles(
@@ -687,7 +717,7 @@ var FormColor = ({
687
717
  "flex items-center gap-2 relative focus-within:border-black focus-within:hover:bg-white" + (className || "")
688
718
  ),
689
719
  children: [
690
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "w-6 h-6 shrink-0 overflow-hidden", style: { backgroundColor: color }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
720
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "w-6 h-6 shrink-0 overflow-hidden", style: { backgroundColor: color }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
691
721
  "input",
692
722
  {
693
723
  type: "color",
@@ -697,7 +727,7 @@ var FormColor = ({
697
727
  ...props
698
728
  }
699
729
  ) }),
700
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-primary text-body3-regular uppercase flex-1 select-none", children: color })
730
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-primary text-body3-regular uppercase flex-1 select-none", children: color })
701
731
  ]
702
732
  }
703
733
  ) });
@@ -705,7 +735,7 @@ var FormColor = ({
705
735
 
706
736
  // src/components/Form/FormFile.tsx
707
737
  var import_react4 = require("react");
708
- var import_jsx_runtime19 = require("react/jsx-runtime");
738
+ var import_jsx_runtime20 = require("react/jsx-runtime");
709
739
  var FormFile = ({
710
740
  className,
711
741
  isDanger,
@@ -766,7 +796,7 @@ var FormFile = ({
766
796
  }
767
797
  };
768
798
  const displayFileName = selectedFile?.name || (fileUrl ? fileUrl.split("/").pop() : null);
769
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
799
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
770
800
  "div",
771
801
  {
772
802
  className: getInputStyles(
@@ -779,7 +809,7 @@ var FormFile = ({
779
809
  )
780
810
  ),
781
811
  children: [
782
- displayFileName && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
812
+ displayFileName && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
783
813
  "span",
784
814
  {
785
815
  onClick: handleDownload,
@@ -788,9 +818,9 @@ var FormFile = ({
788
818
  children: displayFileName
789
819
  }
790
820
  ),
791
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("label", { className: "shrink-0 px-1 -mx-1 cursor-pointer", children: [
792
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "text-primary text-caption-regular underline", children: displayFileName ? "\uB2E4\uC2DC \uCCA8\uBD80" : "\uD30C\uC77C \uCCA8\uBD80" }),
793
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("input", { type: "file", className: "hidden", onChange: handleFileChange, ...props })
821
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("label", { className: "shrink-0 px-1 -mx-1 cursor-pointer", children: [
822
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "text-primary text-caption-regular underline", children: displayFileName ? "\uB2E4\uC2DC \uCCA8\uBD80" : "\uD30C\uC77C \uCCA8\uBD80" }),
823
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("input", { type: "file", className: "hidden", onChange: handleFileChange, ...props })
794
824
  ] })
795
825
  ]
796
826
  }
@@ -798,7 +828,7 @@ var FormFile = ({
798
828
  };
799
829
 
800
830
  // src/components/Form/FormCheckBox.tsx
801
- var import_jsx_runtime20 = require("react/jsx-runtime");
831
+ var import_jsx_runtime21 = require("react/jsx-runtime");
802
832
  var FormCheckBox = ({
803
833
  isChecked,
804
834
  setIsChecked,
@@ -807,7 +837,7 @@ var FormCheckBox = ({
807
837
  textStyle,
808
838
  ...props
809
839
  }) => {
810
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
840
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
811
841
  "label",
812
842
  {
813
843
  className: cn(
@@ -818,7 +848,7 @@ var FormCheckBox = ({
818
848
  className
819
849
  ),
820
850
  children: [
821
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
851
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
822
852
  "input",
823
853
  {
824
854
  type: "checkbox",
@@ -828,14 +858,14 @@ var FormCheckBox = ({
828
858
  ...props
829
859
  }
830
860
  ),
831
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
861
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
832
862
  "div",
833
863
  {
834
864
  className: cn(
835
865
  "flex items-center justify-center w-5 h-5 shrink-0 rounded transition-colors",
836
866
  "group-hover:bg-gray00 group-active:bg-gray01"
837
867
  ),
838
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
868
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
839
869
  "div",
840
870
  {
841
871
  className: cn(
@@ -845,12 +875,12 @@ var FormCheckBox = ({
845
875
  // 💡 3. 키보드 Tab 이동 시 접근성 향상 (포커스 링 표시)
846
876
  "peer-focus-visible:ring-2 peer-focus-visible:ring-black peer-focus-visible:ring-offset-1"
847
877
  ),
848
- children: isChecked && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(IconCheck, {})
878
+ children: isChecked && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(IconCheck, {})
849
879
  }
850
880
  )
851
881
  }
852
882
  ),
853
- children && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: cn("text-body3-book text-primary", textStyle), children })
883
+ children && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: cn("text-body3-book text-primary", textStyle), children })
854
884
  ]
855
885
  }
856
886
  );
@@ -860,14 +890,14 @@ var FormCheckBox = ({
860
890
  var import_react5 = require("react");
861
891
 
862
892
  // src/components/Form/SelectBoxOption.tsx
863
- var import_jsx_runtime21 = require("react/jsx-runtime");
893
+ var import_jsx_runtime22 = require("react/jsx-runtime");
864
894
  var SelectBoxOption = ({
865
895
  label,
866
896
  onClick,
867
897
  // selectedLabel,
868
898
  className
869
899
  }) => {
870
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
900
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
871
901
  "li",
872
902
  {
873
903
  onClick,
@@ -889,7 +919,7 @@ var SelectBoxOption = ({
889
919
  };
890
920
 
891
921
  // src/components/Form/FormSelectBox.tsx
892
- var import_jsx_runtime22 = require("react/jsx-runtime");
922
+ var import_jsx_runtime23 = require("react/jsx-runtime");
893
923
  var FormSelectBox = ({
894
924
  options,
895
925
  value,
@@ -912,8 +942,8 @@ var FormSelectBox = ({
912
942
  document.removeEventListener("mousedown", handleClickOutside);
913
943
  };
914
944
  }, []);
915
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { ref: containerRef, className: "relative w-full", children: [
916
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
945
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { ref: containerRef, className: "relative w-full", children: [
946
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
917
947
  "div",
918
948
  {
919
949
  tabIndex: 0,
@@ -933,8 +963,8 @@ var FormSelectBox = ({
933
963
  setIsOpen((prev) => !prev);
934
964
  },
935
965
  children: [
936
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: value ? "text-primary" : "text-quaternary", children: value || placeholder }),
937
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
966
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: value ? "text-primary" : "text-quaternary", children: value || placeholder }),
967
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
938
968
  IconChevronDownXS,
939
969
  {
940
970
  className: cn("text-gray06 transition-transform", isOpen && "rotate-180"),
@@ -944,7 +974,7 @@ var FormSelectBox = ({
944
974
  ]
945
975
  }
946
976
  ),
947
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
977
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
948
978
  "ul",
949
979
  {
950
980
  className: cn(
@@ -954,7 +984,7 @@ var FormSelectBox = ({
954
984
  "max-h-50 overflow-y-auto"
955
985
  // 항목이 너무 많으면 스크롤 생성 (디자인 스펙: 그림자 없음)
956
986
  ),
957
- children: options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
987
+ children: options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
958
988
  SelectBoxOption,
959
989
  {
960
990
  label: option,
@@ -971,7 +1001,7 @@ var FormSelectBox = ({
971
1001
  };
972
1002
 
973
1003
  // src/components/TextButton/TextButton.tsx
974
- var import_jsx_runtime23 = require("react/jsx-runtime");
1004
+ var import_jsx_runtime24 = require("react/jsx-runtime");
975
1005
  var TextButton = ({
976
1006
  children,
977
1007
  icon,
@@ -981,10 +1011,10 @@ var TextButton = ({
981
1011
  className,
982
1012
  ...props
983
1013
  }) => {
984
- const content = /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
985
- icon && iconPosition === "left" && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "flex shrink-0 items-center", children: icon }),
986
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: cn(underline && "underline underline-offset-2"), children }),
987
- icon && iconPosition === "right" && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "flex shrink-0 items-center", children: icon })
1014
+ const content = /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
1015
+ icon && iconPosition === "left" && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "flex shrink-0 items-center", children: icon }),
1016
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: cn(underline && "underline underline-offset-2"), children }),
1017
+ icon && iconPosition === "right" && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "flex shrink-0 items-center", children: icon })
988
1018
  ] });
989
1019
  const classes = cn(
990
1020
  "inline-flex w-fit items-center gap-1 px-1 -mx-1",
@@ -999,15 +1029,15 @@ var TextButton = ({
999
1029
  );
1000
1030
  if (props.href !== void 0) {
1001
1031
  const { href, ...rest } = props;
1002
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href, className: classes, ...rest, children: content });
1032
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("a", { href, className: classes, ...rest, children: content });
1003
1033
  }
1004
1034
  const buttonProps = props;
1005
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("button", { type: "button", className: classes, ...buttonProps, children: content });
1035
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("button", { type: "button", className: classes, ...buttonProps, children: content });
1006
1036
  };
1007
1037
 
1008
1038
  // src/components/Dropdown/Dropdown.tsx
1009
1039
  var import_react6 = require("react");
1010
- var import_jsx_runtime24 = require("react/jsx-runtime");
1040
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1011
1041
  var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
1012
1042
  const [isOpen, setIsOpen] = (0, import_react6.useState)(false);
1013
1043
  const containerRef = (0, import_react6.useRef)(null);
@@ -1022,8 +1052,8 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
1022
1052
  document.removeEventListener("mousedown", handleClickOutside);
1023
1053
  };
1024
1054
  }, []);
1025
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { ref: containerRef, className: "relative", children: [
1026
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1055
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { ref: containerRef, className: "relative", children: [
1056
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1027
1057
  "div",
1028
1058
  {
1029
1059
  className: cn(
@@ -1036,8 +1066,8 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
1036
1066
  ),
1037
1067
  onClick: () => setIsOpen((prev) => !prev),
1038
1068
  children: [
1039
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { children: selectedLabel }),
1040
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1069
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { children: selectedLabel }),
1070
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1041
1071
  IconChevronDownXS,
1042
1072
  {
1043
1073
  className: cn("text-gray06 transition-transform", isOpen && "rotate-180"),
@@ -1047,7 +1077,7 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
1047
1077
  ]
1048
1078
  }
1049
1079
  ),
1050
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: cn("absolute top-full right-0 z-10", "box-border border border-gray02"), children: labels.map((label) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1080
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: cn("absolute top-full right-0 z-10", "box-border border border-gray02"), children: labels.map((label) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1051
1081
  SelectBoxOption,
1052
1082
  {
1053
1083
  label,
@@ -1063,7 +1093,7 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
1063
1093
  };
1064
1094
 
1065
1095
  // src/components/ListView/List.tsx
1066
- var import_jsx_runtime25 = require("react/jsx-runtime");
1096
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1067
1097
  function List({
1068
1098
  className,
1069
1099
  label1,
@@ -1076,7 +1106,7 @@ function List({
1076
1106
  children,
1077
1107
  ...props
1078
1108
  }) {
1079
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1109
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1080
1110
  "li",
1081
1111
  {
1082
1112
  className: cn(
@@ -1091,11 +1121,11 @@ function List({
1091
1121
  ...props,
1092
1122
  onClick,
1093
1123
  children: [
1094
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("section", { className: cn("flex items-center gap-4"), children: [
1095
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { className: cn("text-body2-regular"), children: label1 ? label1 : "-" }),
1096
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: cn("flex items-center gap-2"), children })
1124
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("section", { className: cn("flex items-center gap-4"), children: [
1125
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("label", { className: cn("text-body2-regular"), children: label1 ? label1 : "-" }),
1126
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: cn("flex items-center gap-2"), children })
1097
1127
  ] }),
1098
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1128
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1099
1129
  "label",
1100
1130
  {
1101
1131
  className: cn(
@@ -1107,18 +1137,18 @@ function List({
1107
1137
  children: label2 ? label2 : "-"
1108
1138
  }
1109
1139
  ),
1110
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { className: cn("text-body3-regular text-right"), children: label3 ? label3 : "-" })
1140
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("label", { className: cn("text-body3-regular text-right"), children: label3 ? label3 : "-" })
1111
1141
  ]
1112
1142
  }
1113
1143
  );
1114
1144
  }
1115
1145
 
1116
1146
  // src/components/Modal/Modal.tsx
1117
- var import_jsx_runtime26 = require("react/jsx-runtime");
1147
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1118
1148
  var ModalBase = ({ isVisible, header, children, className, onClose }) => {
1119
1149
  if (!isVisible) return null;
1120
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: cn("fixed inset-0 z-50"), children: [
1121
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1150
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: cn("fixed inset-0 z-50"), children: [
1151
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1122
1152
  "div",
1123
1153
  {
1124
1154
  "aria-hidden": true,
@@ -1126,7 +1156,7 @@ var ModalBase = ({ isVisible, header, children, className, onClose }) => {
1126
1156
  className: cn("fixed inset-0 z-1000 bg-[#212121]/30", onClose && "cursor-pointer")
1127
1157
  }
1128
1158
  ),
1129
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "fixed inset-0 z-1001 flex items-center justify-center pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1159
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "fixed inset-0 z-1001 flex items-center justify-center pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1130
1160
  "main",
1131
1161
  {
1132
1162
  role: "dialog",
@@ -1139,7 +1169,7 @@ var ModalBase = ({ isVisible, header, children, className, onClose }) => {
1139
1169
  className
1140
1170
  ),
1141
1171
  children: [
1142
- onClose && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1172
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1143
1173
  "button",
1144
1174
  {
1145
1175
  type: "button",
@@ -1149,10 +1179,10 @@ var ModalBase = ({ isVisible, header, children, className, onClose }) => {
1149
1179
  "absolute right-3 top-3 flex size-8 items-center justify-center",
1150
1180
  "text-tertiary transition-colors hover:bg-gray00 active:bg-gray01 cursor-pointer"
1151
1181
  ),
1152
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(IconClose, {})
1182
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(IconClose, {})
1153
1183
  }
1154
1184
  ),
1155
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h1", { className: cn("text-strong font-[500] text-[24px] leading-[32px]"), children: header }),
1185
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("h1", { className: cn("text-head-lg-medium text-strong"), children: header }),
1156
1186
  children
1157
1187
  ]
1158
1188
  }
@@ -1160,7 +1190,7 @@ var ModalBase = ({ isVisible, header, children, className, onClose }) => {
1160
1190
  ] });
1161
1191
  };
1162
1192
  var Contents = ({ children, className }) => {
1163
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1193
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1164
1194
  "div",
1165
1195
  {
1166
1196
  className: cn(
@@ -1177,7 +1207,7 @@ var CTAs2 = ({ children, className, row = false }) => {
1177
1207
  if (!children) return null;
1178
1208
  return (
1179
1209
  // CTA 버튼들을 중앙에 배치하는 예시 (우측 정렬이 필요하면 justify-end 사용)
1180
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1210
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1181
1211
  "div",
1182
1212
  {
1183
1213
  className: cn(
@@ -1196,9 +1226,9 @@ var Modal = Object.assign(ModalBase, {
1196
1226
  });
1197
1227
 
1198
1228
  // src/components/Modal/ModalText.tsx
1199
- var import_jsx_runtime27 = require("react/jsx-runtime");
1229
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1200
1230
  var ModalText = ({ children, className }) => {
1201
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1231
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1202
1232
  "div",
1203
1233
  {
1204
1234
  className: cn(
@@ -1214,14 +1244,14 @@ var ModalText = ({ children, className }) => {
1214
1244
  };
1215
1245
 
1216
1246
  // src/components/createPost/CategorySegment.tsx
1217
- var import_jsx_runtime28 = require("react/jsx-runtime");
1247
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1218
1248
  var CategorySegment = ({
1219
1249
  selected = false,
1220
1250
  label,
1221
1251
  className,
1222
1252
  onClick
1223
1253
  }) => {
1224
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1254
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1225
1255
  "div",
1226
1256
  {
1227
1257
  className: cn(
@@ -1241,7 +1271,7 @@ var CategorySegment = ({
1241
1271
  };
1242
1272
 
1243
1273
  // src/components/createPost/CategorySegmentedControl.tsx
1244
- var import_jsx_runtime29 = require("react/jsx-runtime");
1274
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1245
1275
  var categorySegments = {
1246
1276
  info: ["\uACF5\uC6A9 \uBB3C\uD488", "\uC77C\uBC18 \uAE30\uC790\uC7AC", "\uD2B9\uC218 \uAE30\uC790\uC7AC"],
1247
1277
  archive: ["\uD504\uB9B0\uD2B8\uC2E4", "\uD64D\uC775\uC2DC\uB514"],
@@ -1255,8 +1285,8 @@ var CategorySegmentedControl = ({
1255
1285
  className
1256
1286
  }) => {
1257
1287
  const segments = categorySegments[variable];
1258
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: cn("w-full h-fit flex items-center justify-start", className), children: [
1259
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1288
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: cn("w-full h-fit flex items-center justify-start", className), children: [
1289
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1260
1290
  "div",
1261
1291
  {
1262
1292
  className: cn(
@@ -1269,7 +1299,7 @@ var CategorySegmentedControl = ({
1269
1299
  children: variable === "infoTag" ? "\uD0DC\uADF8 \uC120\uD0DD" : "\uCE74\uD14C\uACE0\uB9AC \uC120\uD0DD"
1270
1300
  }
1271
1301
  ),
1272
- segments.map((label) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1302
+ segments.map((label) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1273
1303
  CategorySegment,
1274
1304
  {
1275
1305
  label,
@@ -1282,9 +1312,9 @@ var CategorySegmentedControl = ({
1282
1312
  };
1283
1313
 
1284
1314
  // src/components/createPost/TitleInput.tsx
1285
- var import_jsx_runtime30 = require("react/jsx-runtime");
1315
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1286
1316
  var TitleInput = ({ title, onChange, className }) => {
1287
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1317
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1288
1318
  "input",
1289
1319
  {
1290
1320
  type: "text",
@@ -1304,9 +1334,9 @@ var TitleInput = ({ title, onChange, className }) => {
1304
1334
  };
1305
1335
 
1306
1336
  // src/components/notice/NoticeBadge.tsx
1307
- var import_jsx_runtime31 = require("react/jsx-runtime");
1337
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1308
1338
  var NoticeBadge = ({ variable, className, onClick }) => {
1309
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1339
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1310
1340
  "button",
1311
1341
  {
1312
1342
  type: "button",
@@ -1327,7 +1357,7 @@ var NoticeBadge = ({ variable, className, onClick }) => {
1327
1357
  };
1328
1358
 
1329
1359
  // src/components/notice/NoticeBar.tsx
1330
- var import_jsx_runtime32 = require("react/jsx-runtime");
1360
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1331
1361
  var NoticeBar = ({
1332
1362
  variable = "default",
1333
1363
  badgeVariable,
@@ -1336,7 +1366,7 @@ var NoticeBar = ({
1336
1366
  className,
1337
1367
  onClick
1338
1368
  }) => {
1339
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1369
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1340
1370
  "div",
1341
1371
  {
1342
1372
  className: cn(
@@ -1348,20 +1378,20 @@ var NoticeBar = ({
1348
1378
  ),
1349
1379
  onClick,
1350
1380
  children: [
1351
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("section", { className: "flex items-center gap-3", children: [
1352
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(NoticeBadge, { variable: badgeVariable }),
1353
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("h1", { className: "text-head1-medium text-strong", children: title })
1381
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("section", { className: "flex items-center gap-3", children: [
1382
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(NoticeBadge, { variable: badgeVariable }),
1383
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("h1", { className: "text-head1-medium text-strong", children: title })
1354
1384
  ] }),
1355
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-body3-book text-tertiary", children: date })
1385
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "text-body3-book text-tertiary", children: date })
1356
1386
  ]
1357
1387
  }
1358
1388
  );
1359
1389
  };
1360
1390
 
1361
1391
  // src/components/SearchBar/SearchBar.tsx
1362
- var import_jsx_runtime33 = require("react/jsx-runtime");
1392
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1363
1393
  var SearchBar = ({ value, onChange, className }) => {
1364
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1394
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1365
1395
  "label",
1366
1396
  {
1367
1397
  className: cn(
@@ -1372,8 +1402,8 @@ var SearchBar = ({ value, onChange, className }) => {
1372
1402
  className
1373
1403
  ),
1374
1404
  children: [
1375
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(IconSearch, {}),
1376
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1405
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(IconSearch, {}),
1406
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1377
1407
  "input",
1378
1408
  {
1379
1409
  type: "text",
@@ -1393,7 +1423,7 @@ var SearchBar = ({ value, onChange, className }) => {
1393
1423
 
1394
1424
  // src/components/SideRadioAccordion/SideRadioAccordion.tsx
1395
1425
  var import_react7 = require("react");
1396
- var import_jsx_runtime34 = require("react/jsx-runtime");
1426
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1397
1427
  var printColorBgClass = {
1398
1428
  Plotter: "bg-print-plotter",
1399
1429
  Printer: "bg-print-printer",
@@ -1437,8 +1467,8 @@ var SideRadioAccordion = (0, import_react7.forwardRef)(
1437
1467
  setIsOpen(next);
1438
1468
  onOpenChange?.(next);
1439
1469
  };
1440
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { ref, className: cn("w-full border-r border-gray02 bg-white", className), children: [
1441
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1470
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { ref, className: cn("w-full border-r border-gray02 bg-white", className), children: [
1471
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1442
1472
  Stepper,
1443
1473
  {
1444
1474
  step,
@@ -1449,8 +1479,8 @@ var SideRadioAccordion = (0, import_react7.forwardRef)(
1449
1479
  className: cn(stickyHeader && "sticky top-0 z-10")
1450
1480
  }
1451
1481
  ),
1452
- expanded && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex flex-col divide-y divide-gray02", children: [
1453
- radioToggleList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1482
+ expanded && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex flex-col divide-y divide-gray02", children: [
1483
+ radioToggleList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1454
1484
  RadioToggleItem,
1455
1485
  {
1456
1486
  ...item,
@@ -1459,22 +1489,22 @@ var SideRadioAccordion = (0, import_react7.forwardRef)(
1459
1489
  },
1460
1490
  itemKey(item)
1461
1491
  )),
1462
- quantityLimitLabel && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "px-5 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TextButton2, { label: quantityLimitLabel, onClick: onClickQuantityLimit }) })
1492
+ quantityLimitLabel && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "px-5 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TextButton2, { label: quantityLimitLabel, onClick: onClickQuantityLimit }) })
1463
1493
  ] })
1464
1494
  ] });
1465
1495
  }
1466
1496
  );
1467
1497
  var Stepper = ({ step, title, isOpen, collapsible, onClick, className }) => {
1468
- const label = /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { children: [
1498
+ const label = /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { children: [
1469
1499
  step,
1470
1500
  " | ",
1471
1501
  title
1472
1502
  ] });
1473
1503
  const base = "w-full flex items-center justify-between px-5 py-2.5 text-head3-medium text-primary text-left bg-white border-b border-gray02";
1474
1504
  if (!collapsible) {
1475
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: cn(base, className), children: label });
1505
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: cn(base, className), children: label });
1476
1506
  }
1477
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1507
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
1478
1508
  "button",
1479
1509
  {
1480
1510
  type: "button",
@@ -1482,7 +1512,7 @@ var Stepper = ({ step, title, isOpen, collapsible, onClick, className }) => {
1482
1512
  className: cn(base, "cursor-pointer hover:bg-gray00 active:bg-gray01", className),
1483
1513
  children: [
1484
1514
  label,
1485
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(IconChevronDownXS, { className: cn("transition-transform", isOpen && "rotate-180") })
1515
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(IconChevronDownXS, { className: cn("transition-transform", isOpen && "rotate-180") })
1486
1516
  ]
1487
1517
  }
1488
1518
  );
@@ -1502,8 +1532,8 @@ var RadioToggleItem = ({
1502
1532
  }) => {
1503
1533
  const rowBg = !open ? "bg-white hover:bg-gray00" : color ? void 0 : printColor ? printColorBgClass[printColor] : "bg-gray00";
1504
1534
  const style = open && color ? { backgroundColor: color } : void 0;
1505
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "w-full", children: [
1506
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1535
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "w-full", children: [
1536
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
1507
1537
  "button",
1508
1538
  {
1509
1539
  type: "button",
@@ -1517,15 +1547,15 @@ var RadioToggleItem = ({
1517
1547
  className
1518
1548
  ),
1519
1549
  children: [
1520
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Radio, { selected: open }),
1521
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: title })
1550
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Radio, { selected: open }),
1551
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: title })
1522
1552
  ]
1523
1553
  }
1524
1554
  ),
1525
- open && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex flex-col gap-2 px-3 py-3 bg-white", children: [
1526
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { className: "text-caption-regular text-secondary", children: content }),
1527
- badges && badges.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "flex flex-wrap gap-1", children: badges.map((badge) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Badge, { label: badge }, badge)) }),
1528
- labelTextButton && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1555
+ open && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex flex-col gap-2 px-3 py-3 bg-white", children: [
1556
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-caption-regular text-secondary", children: content }),
1557
+ badges && badges.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "flex flex-wrap gap-1", children: badges.map((badge) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Badge2, { label: badge }, badge)) }),
1558
+ labelTextButton && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1529
1559
  TextButton2,
1530
1560
  {
1531
1561
  label: labelTextButton,
@@ -1543,7 +1573,7 @@ var Radio = ({ selected = false, className }) => {
1543
1573
  // 디자인 스펙(Figma "radio" 5:781): 24px 히트 영역 안에 10px 원만 중앙에 그려진다.
1544
1574
  // 아이콘 자체 색은 고정, hover/pressed 시 24px 원형 배경 칩만 나타난다(gray00/gray01).
1545
1575
  // 부모 버튼의 group-hover/active로 동기화.
1546
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1576
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1547
1577
  "span",
1548
1578
  {
1549
1579
  className: cn(
@@ -1551,13 +1581,13 @@ var Radio = ({ selected = false, className }) => {
1551
1581
  "group-hover:bg-gray00 group-active:bg-gray01",
1552
1582
  className
1553
1583
  ),
1554
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon, { className: "size-2.5" })
1584
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Icon, { className: "size-2.5" })
1555
1585
  }
1556
1586
  )
1557
1587
  );
1558
1588
  };
1559
1589
  var TextButton2 = ({ label, onClick, showIcon = false, className }) => {
1560
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1590
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
1561
1591
  "button",
1562
1592
  {
1563
1593
  type: "button",
@@ -1570,14 +1600,14 @@ var TextButton2 = ({ label, onClick, showIcon = false, className }) => {
1570
1600
  className
1571
1601
  ),
1572
1602
  children: [
1573
- showIcon && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(IconExclamation, {}),
1603
+ showIcon && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(IconExclamation, {}),
1574
1604
  label
1575
1605
  ]
1576
1606
  }
1577
1607
  );
1578
1608
  };
1579
- var Badge = ({ label, className }) => {
1580
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1609
+ var Badge2 = ({ label, className }) => {
1610
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1581
1611
  "div",
1582
1612
  {
1583
1613
  className: cn(
@@ -1591,7 +1621,7 @@ var Badge = ({ label, className }) => {
1591
1621
  };
1592
1622
 
1593
1623
  // src/components/Tag/Tag.tsx
1594
- var import_jsx_runtime35 = require("react/jsx-runtime");
1624
+ var import_jsx_runtime36 = require("react/jsx-runtime");
1595
1625
  var Tag = ({
1596
1626
  className,
1597
1627
  children,
@@ -1601,7 +1631,7 @@ var Tag = ({
1601
1631
  onClick,
1602
1632
  ...props
1603
1633
  }) => {
1604
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1634
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1605
1635
  "button",
1606
1636
  {
1607
1637
  className: cn(
@@ -1620,16 +1650,61 @@ var Tag = ({
1620
1650
  disabled,
1621
1651
  style: bgColor ? { backgroundColor: bgColor, border: "none" } : void 0,
1622
1652
  ...props,
1623
- children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children })
1653
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children })
1624
1654
  }
1625
1655
  );
1626
1656
  };
1627
1657
 
1658
+ // src/components/TabSwitch/TabSwitch.tsx
1659
+ var import_react8 = require("react");
1660
+ var import_jsx_runtime37 = require("react/jsx-runtime");
1661
+ var itemKey2 = (item) => item.value ?? item.label;
1662
+ var TabSwitch = (0, import_react8.forwardRef)(function TabSwitch2({ items, selected, defaultSelected, onSelect, className }, ref) {
1663
+ const [selectedValue, setSelectedValue] = useControllableState(
1664
+ selected,
1665
+ defaultSelected ?? itemKey2(items[0])
1666
+ );
1667
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { ref, className: cn("w-full border-b border-gray02", className), children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "flex items-stretch", children: items.map((item) => {
1668
+ const key = itemKey2(item);
1669
+ const isSelected = key === selectedValue;
1670
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-stretch", children: [
1671
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
1672
+ "button",
1673
+ {
1674
+ type: "button",
1675
+ onClick: () => {
1676
+ setSelectedValue(key);
1677
+ onSelect?.(key);
1678
+ },
1679
+ className: cn(
1680
+ "flex flex-col items-center pt-2.5 cursor-pointer",
1681
+ isSelected ? "gap-2" : "pb-2.5"
1682
+ ),
1683
+ children: [
1684
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1685
+ "span",
1686
+ {
1687
+ className: cn(
1688
+ "px-4 whitespace-nowrap",
1689
+ isSelected ? "text-body1-medium text-strong" : "text-body1-regular text-quaternary"
1690
+ ),
1691
+ children: item.label
1692
+ }
1693
+ ),
1694
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "h-0.5 w-full bg-black" })
1695
+ ]
1696
+ }
1697
+ ),
1698
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
1699
+ ] }, key);
1700
+ }) }) });
1701
+ });
1702
+
1628
1703
  // src/components/Timetable/Timetable.tsx
1629
- var import_react9 = require("react");
1704
+ var import_react10 = require("react");
1630
1705
 
1631
1706
  // src/components/Timetable/WeekNavigation.tsx
1632
- var import_react8 = require("react");
1707
+ var import_react9 = require("react");
1633
1708
 
1634
1709
  // src/components/Timetable/dateUtils.ts
1635
1710
  var KOREAN_WEEKDAYS = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
@@ -1662,18 +1737,18 @@ var formatWeekRange = (weekStart) => {
1662
1737
  };
1663
1738
 
1664
1739
  // src/components/Timetable/WeekNavigation.tsx
1665
- var import_jsx_runtime36 = require("react/jsx-runtime");
1740
+ var import_jsx_runtime38 = require("react/jsx-runtime");
1666
1741
  var weekLabel = {
1667
1742
  thisWeek: "\uC774\uBC88 \uC8FC",
1668
1743
  nextWeek: "\uB2E4\uC74C \uC8FC",
1669
1744
  twoWeeksLater: "\uB2E4\uB2E4\uC74C \uC8FC"
1670
1745
  };
1671
- var WeekNavigation = (0, import_react8.forwardRef)(
1746
+ var WeekNavigation = (0, import_react9.forwardRef)(
1672
1747
  function WeekNavigation2({ date, week, label, canPrev, canNext, onPrevWeek, onNextWeek, className }, ref) {
1673
1748
  const showPrev = canPrev ?? (week ? week !== "thisWeek" : true);
1674
1749
  const showNext = canNext ?? (week ? week !== "twoWeeksLater" : true);
1675
1750
  const text = label ?? (week ? `${weekLabel[week]} (${formatWeekRange(date)})` : formatWeekRange(date));
1676
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
1751
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
1677
1752
  "div",
1678
1753
  {
1679
1754
  ref,
@@ -1685,22 +1760,22 @@ var WeekNavigation = (0, import_react8.forwardRef)(
1685
1760
  className
1686
1761
  ),
1687
1762
  children: [
1688
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ArrowButton, { direction: "left", visible: showPrev, onClick: onPrevWeek }),
1689
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "flex flex-1 items-center justify-center text-center", children: text }),
1690
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ArrowButton, { direction: "right", visible: showNext, onClick: onNextWeek })
1763
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ArrowButton, { direction: "left", visible: showPrev, onClick: onPrevWeek }),
1764
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "flex flex-1 items-center justify-center text-center", children: text }),
1765
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ArrowButton, { direction: "right", visible: showNext, onClick: onNextWeek })
1691
1766
  ]
1692
1767
  }
1693
1768
  );
1694
1769
  }
1695
1770
  );
1696
1771
  var ArrowButton = ({ direction, visible, onClick }) => {
1697
- const divider = /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" });
1772
+ const divider = /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" });
1698
1773
  if (!visible) {
1699
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { "aria-hidden": true, className: "w-[43px]" });
1774
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-[43px]" });
1700
1775
  }
1701
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex items-stretch", children: [
1776
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-stretch", children: [
1702
1777
  direction === "right" && divider,
1703
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1778
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
1704
1779
  "button",
1705
1780
  {
1706
1781
  type: "button",
@@ -1710,7 +1785,7 @@ var ArrowButton = ({ direction, visible, onClick }) => {
1710
1785
  "text-gray06 cursor-pointer transition-colors",
1711
1786
  "hover:bg-gray00 active:bg-gray01"
1712
1787
  ),
1713
- children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1788
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
1714
1789
  IconChevronDownXS,
1715
1790
  {
1716
1791
  className: direction === "left" ? "rotate-90" : "-rotate-90",
@@ -1724,7 +1799,7 @@ var ArrowButton = ({ direction, visible, onClick }) => {
1724
1799
  };
1725
1800
 
1726
1801
  // src/components/Timetable/Timetable.tsx
1727
- var import_jsx_runtime37 = require("react/jsx-runtime");
1802
+ var import_jsx_runtime39 = require("react/jsx-runtime");
1728
1803
  var printColorHoverClass = {
1729
1804
  Plotter: "hover:bg-print-plotter",
1730
1805
  Printer: "hover:bg-print-printer",
@@ -1734,7 +1809,7 @@ var printColorHoverClass = {
1734
1809
  "Seet Cutting": "hover:bg-print-seet-cutting",
1735
1810
  "Laser Cutting": "hover:bg-print-laser-cutting"
1736
1811
  };
1737
- var Timetable = (0, import_react9.forwardRef)(function Timetable2({
1812
+ var Timetable = (0, import_react10.forwardRef)(function Timetable2({
1738
1813
  weekStart,
1739
1814
  week,
1740
1815
  days,
@@ -1747,8 +1822,8 @@ var Timetable = (0, import_react9.forwardRef)(function Timetable2({
1747
1822
  canNextWeek,
1748
1823
  className
1749
1824
  }, ref) {
1750
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { ref, className: cn(fluid && "w-full", className), children: [
1751
- !hideWeekNavigation && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1825
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { ref, className: cn(fluid && "w-full", className), children: [
1826
+ !hideWeekNavigation && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1752
1827
  WeekNavigation,
1753
1828
  {
1754
1829
  date: weekStart,
@@ -1759,7 +1834,7 @@ var Timetable = (0, import_react9.forwardRef)(function Timetable2({
1759
1834
  onNextWeek
1760
1835
  }
1761
1836
  ),
1762
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: cn("flex divide-x divide-gray02", fluid && "w-full"), children: days.map((day) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1837
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: cn("flex divide-x divide-gray02", fluid && "w-full"), children: days.map((day) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1763
1838
  DailyTimetable,
1764
1839
  {
1765
1840
  date: day.date,
@@ -1772,12 +1847,12 @@ var Timetable = (0, import_react9.forwardRef)(function Timetable2({
1772
1847
  ] });
1773
1848
  });
1774
1849
  var DailyTimetable = ({ date, slots, fluid, onSelectTime, className }) => {
1775
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: cn("flex flex-col", fluid ? "flex-1 min-w-0" : "w-18", className), children: [
1776
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "h-12 flex items-center justify-center border-b border-gray02 text-body1-regular text-secondary", children: formatDayLabel(date) }),
1850
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: cn("flex flex-col", fluid ? "flex-1 min-w-0" : "w-18", className), children: [
1851
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "h-12 flex items-center justify-center border-b border-gray02 text-body1-regular text-secondary", children: formatDayLabel(date) }),
1777
1852
  slots.map((slot, index) => {
1778
1853
  const prevState = index > 0 ? slots[index - 1].state : void 0;
1779
1854
  const withTopBorder = slot.state !== "none" && prevState === "none";
1780
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1855
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1781
1856
  TimeItem,
1782
1857
  {
1783
1858
  state: slot.state,
@@ -1806,7 +1881,7 @@ var TimeItem = ({
1806
1881
  }) => {
1807
1882
  const clickable = (state === "default" || state === "selected") && !!onClick;
1808
1883
  const style = state === "default" && color ? { "--tt-hover": color } : void 0;
1809
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1884
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1810
1885
  "div",
1811
1886
  {
1812
1887
  onClick: clickable ? onClick : void 0,
@@ -1832,13 +1907,13 @@ var TimeItem = ({
1832
1907
  };
1833
1908
 
1834
1909
  // src/components/TNB/TNB.tsx
1835
- var import_react10 = require("react");
1836
- var import_jsx_runtime38 = require("react/jsx-runtime");
1910
+ var import_react11 = require("react");
1911
+ var import_jsx_runtime40 = require("react/jsx-runtime");
1837
1912
  function useControllableState2(controlled, defaultValue) {
1838
1913
  const isControlled = controlled !== void 0;
1839
- const [uncontrolled, setUncontrolled] = (0, import_react10.useState)(defaultValue);
1914
+ const [uncontrolled, setUncontrolled] = (0, import_react11.useState)(defaultValue);
1840
1915
  const value = isControlled ? controlled : uncontrolled;
1841
- const setValue = (0, import_react10.useCallback)(
1916
+ const setValue = (0, import_react11.useCallback)(
1842
1917
  (next) => {
1843
1918
  if (!isControlled) setUncontrolled(next);
1844
1919
  },
@@ -1846,7 +1921,7 @@ function useControllableState2(controlled, defaultValue) {
1846
1921
  );
1847
1922
  return [value, setValue, isControlled];
1848
1923
  }
1849
- var TNB = (0, import_react10.forwardRef)(function TNB2({
1924
+ var TNB = (0, import_react11.forwardRef)(function TNB2({
1850
1925
  logo,
1851
1926
  upperPartItemList,
1852
1927
  upperPartIconList,
@@ -1885,8 +1960,8 @@ var TNB = (0, import_react10.forwardRef)(function TNB2({
1885
1960
  setLowerValue(label);
1886
1961
  onSelectedLowerChange?.(label);
1887
1962
  };
1888
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("nav", { ref, "aria-label": ariaLabel, className: cn("w-full bg-white", className), children: [
1889
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
1963
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("nav", { ref, "aria-label": ariaLabel, className: cn("w-full bg-white", className), children: [
1964
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1890
1965
  UpperPart,
1891
1966
  {
1892
1967
  logo,
@@ -1897,7 +1972,7 @@ var TNB = (0, import_react10.forwardRef)(function TNB2({
1897
1972
  linkComponent
1898
1973
  }
1899
1974
  ),
1900
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
1975
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1901
1976
  LowerPart,
1902
1977
  {
1903
1978
  lowerPartItemList: currentLowerItemList,
@@ -1908,11 +1983,11 @@ var TNB = (0, import_react10.forwardRef)(function TNB2({
1908
1983
  )
1909
1984
  ] });
1910
1985
  });
1911
- var NavClickable = (0, import_react10.forwardRef)(function NavClickable2({ href, onClick, linkComponent: Link, current, disabled, className, children }, ref) {
1986
+ var NavClickable = (0, import_react11.forwardRef)(function NavClickable2({ href, onClick, linkComponent: Link, current, disabled, className, children }, ref) {
1912
1987
  const ariaCurrent = current ? "page" : void 0;
1913
1988
  if (href && !disabled) {
1914
1989
  if (Link) {
1915
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
1990
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1916
1991
  Link,
1917
1992
  {
1918
1993
  href,
@@ -1924,7 +1999,7 @@ var NavClickable = (0, import_react10.forwardRef)(function NavClickable2({ href,
1924
1999
  }
1925
2000
  );
1926
2001
  }
1927
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2002
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1928
2003
  "a",
1929
2004
  {
1930
2005
  href,
@@ -1936,7 +2011,7 @@ var NavClickable = (0, import_react10.forwardRef)(function NavClickable2({ href,
1936
2011
  }
1937
2012
  );
1938
2013
  }
1939
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2014
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1940
2015
  "button",
1941
2016
  {
1942
2017
  type: "button",
@@ -1958,7 +2033,7 @@ var UpperPart = ({
1958
2033
  linkComponent,
1959
2034
  className
1960
2035
  }) => {
1961
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2036
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
1962
2037
  "div",
1963
2038
  {
1964
2039
  className: cn(
@@ -1966,12 +2041,12 @@ var UpperPart = ({
1966
2041
  className
1967
2042
  ),
1968
2043
  children: [
1969
- /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-stretch", children: [
1970
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex w-14 shrink-0 items-center justify-center px-3", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(NavIconButton, { ...logo, linkComponent }) }),
1971
- /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-stretch", children: [
1972
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
1973
- upperPartItemList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react10.Fragment, { children: [
1974
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2044
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex items-stretch", children: [
2045
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "flex w-14 shrink-0 items-center justify-center px-3", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(NavIconButton, { ...logo, linkComponent }) }),
2046
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex items-stretch", children: [
2047
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
2048
+ upperPartItemList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react11.Fragment, { children: [
2049
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1975
2050
  UpperPartTab,
1976
2051
  {
1977
2052
  label: item.label,
@@ -1984,15 +2059,15 @@ var UpperPart = ({
1984
2059
  }
1985
2060
  }
1986
2061
  ),
1987
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
2062
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
1988
2063
  ] }, item.id ?? item.label))
1989
2064
  ] })
1990
2065
  ] }),
1991
- /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-stretch", children: [
1992
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
1993
- upperPartIconList.map((icon, index) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react10.Fragment, { children: [
1994
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(NavIconButton, { ...icon, linkComponent }),
1995
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
2066
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex items-stretch", children: [
2067
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
2068
+ upperPartIconList.map((icon, index) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react11.Fragment, { children: [
2069
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(NavIconButton, { ...icon, linkComponent }),
2070
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
1996
2071
  ] }, icon.id ?? icon.src ?? icon.label ?? index))
1997
2072
  ] })
1998
2073
  ]
@@ -2007,7 +2082,7 @@ var UpperPartTab = ({
2007
2082
  linkComponent,
2008
2083
  className
2009
2084
  }) => {
2010
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2085
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2011
2086
  NavClickable,
2012
2087
  {
2013
2088
  href,
@@ -2022,17 +2097,17 @@ var UpperPartTab = ({
2022
2097
  className
2023
2098
  ),
2024
2099
  children: [
2025
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: cn("px-5 text-head1-medium", selected ? "text-strong" : "text-quaternary"), children: label }),
2026
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: cn("h-0.5 w-full", selected ? "bg-black" : "bg-transparent") })
2100
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: cn("px-5 text-head1-medium", selected ? "text-strong" : "text-quaternary"), children: label }),
2101
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: cn("h-0.5 w-full", selected ? "bg-black" : "bg-transparent") })
2027
2102
  ]
2028
2103
  }
2029
2104
  );
2030
2105
  };
2031
- var NavIconButton = (0, import_react10.forwardRef)(
2106
+ var NavIconButton = (0, import_react11.forwardRef)(
2032
2107
  function NavIconButton2({ src, icon, alt, label, href, onClick, selected, badge, className, linkComponent }, forwardedRef) {
2033
2108
  const interactive = Boolean(onClick || href);
2034
2109
  const showBadge = badge !== void 0 && badge !== null && badge !== false;
2035
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2110
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2036
2111
  NavClickable,
2037
2112
  {
2038
2113
  ref: forwardedRef,
@@ -2048,9 +2123,9 @@ var NavIconButton = (0, import_react10.forwardRef)(
2048
2123
  className
2049
2124
  ),
2050
2125
  children: [
2051
- icon ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "inline-flex h-6 w-6 items-center justify-center", children: icon }) : src ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("img", { src, alt: alt ?? label ?? "", className: "h-6 w-6" }) : null,
2052
- label ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: cn("text-body2-regular", selected ? "text-white" : "text-secondary"), children: label }) : null,
2053
- showBadge ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2126
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "inline-flex h-6 w-6 items-center justify-center", children: icon }) : src ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("img", { src, alt: alt ?? label ?? "", className: "h-6 w-6" }) : null,
2127
+ label ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: cn("text-body2-regular", selected ? "text-white" : "text-secondary"), children: label }) : null,
2128
+ showBadge ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2054
2129
  "span",
2055
2130
  {
2056
2131
  "aria-hidden": badge === true,
@@ -2076,14 +2151,14 @@ var LowerPart = ({
2076
2151
  if (lowerPartItemList.length === 0) {
2077
2152
  return null;
2078
2153
  }
2079
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2154
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2080
2155
  "div",
2081
2156
  {
2082
2157
  className: cn("w-full h-[42px] pl-14 flex items-stretch border-b border-gray02", className),
2083
2158
  children: [
2084
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
2085
- lowerPartItemList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react10.Fragment, { children: [
2086
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2159
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
2160
+ lowerPartItemList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react11.Fragment, { children: [
2161
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2087
2162
  LowerPartItemButton,
2088
2163
  {
2089
2164
  label: item.label,
@@ -2096,7 +2171,7 @@ var LowerPart = ({
2096
2171
  }
2097
2172
  }
2098
2173
  ),
2099
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
2174
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
2100
2175
  ] }, item.id ?? item.label))
2101
2176
  ]
2102
2177
  }
@@ -2110,7 +2185,7 @@ var LowerPartItemButton = ({
2110
2185
  linkComponent,
2111
2186
  className
2112
2187
  }) => {
2113
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2188
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2114
2189
  NavClickable,
2115
2190
  {
2116
2191
  href,
@@ -2129,14 +2204,14 @@ var LowerPartItemButton = ({
2129
2204
  };
2130
2205
 
2131
2206
  // src/components/Toast/Toast.tsx
2132
- var import_react11 = require("react");
2133
- var import_jsx_runtime39 = require("react/jsx-runtime");
2207
+ var import_react12 = require("react");
2208
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2134
2209
  var EXIT_MS = 300;
2135
- var Toast = (0, import_react11.forwardRef)(function Toast2({ message, open, duration = 3e3, onClose, position = "none", className }, ref) {
2210
+ var Toast = (0, import_react12.forwardRef)(function Toast2({ message, open, duration = 3e3, onClose, position = "none", className }, ref) {
2136
2211
  const controlled = open !== void 0;
2137
- const [mounted, setMounted] = (0, import_react11.useState)(!controlled || open);
2138
- const [visible, setVisible] = (0, import_react11.useState)(!controlled || open);
2139
- (0, import_react11.useEffect)(() => {
2212
+ const [mounted, setMounted] = (0, import_react12.useState)(!controlled || open);
2213
+ const [visible, setVisible] = (0, import_react12.useState)(!controlled || open);
2214
+ (0, import_react12.useEffect)(() => {
2140
2215
  if (!controlled) return;
2141
2216
  if (open) {
2142
2217
  setMounted(true);
@@ -2147,13 +2222,13 @@ var Toast = (0, import_react11.forwardRef)(function Toast2({ message, open, dura
2147
2222
  const timer = setTimeout(() => setMounted(false), EXIT_MS);
2148
2223
  return () => clearTimeout(timer);
2149
2224
  }, [controlled, open]);
2150
- (0, import_react11.useEffect)(() => {
2225
+ (0, import_react12.useEffect)(() => {
2151
2226
  if (!controlled || !open || !duration) return;
2152
2227
  const timer = setTimeout(() => onClose?.(), duration);
2153
2228
  return () => clearTimeout(timer);
2154
2229
  }, [controlled, open, duration, onClose]);
2155
2230
  if (!mounted) return null;
2156
- const banner = /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2231
+ const banner = /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2157
2232
  "div",
2158
2233
  {
2159
2234
  ref,
@@ -2171,7 +2246,7 @@ var Toast = (0, import_react11.forwardRef)(function Toast2({ message, open, dura
2171
2246
  }
2172
2247
  );
2173
2248
  if (position === "none") return banner;
2174
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2249
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2175
2250
  "div",
2176
2251
  {
2177
2252
  className: cn(
@@ -2186,6 +2261,7 @@ var Toast = (0, import_react11.forwardRef)(function Toast2({ message, open, dura
2186
2261
  0 && (module.exports = {
2187
2262
  Accordion,
2188
2263
  BackButton,
2264
+ Badge,
2189
2265
  BasicFormField,
2190
2266
  CTA,
2191
2267
  CategorySegment,
@@ -2227,6 +2303,7 @@ var Toast = (0, import_react11.forwardRef)(function Toast2({ message, open, dura
2227
2303
  SelectBoxOption,
2228
2304
  SideRadioAccordion,
2229
2305
  TNB,
2306
+ TabSwitch,
2230
2307
  Tag,
2231
2308
  TextButton,
2232
2309
  Timetable,