@hivcd-printshop/design-system 1.2.1 → 1.2.3

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.d.mts CHANGED
@@ -234,13 +234,18 @@ interface ModalProps {
234
234
  header: string;
235
235
  children: react__default.ReactNode;
236
236
  className?: string;
237
+ /**
238
+ * 지정하면 배경(백드롭) 클릭 시 호출되고, 카드 우상단에 닫기(X) 버튼이 노출된다.
239
+ * 생략하면 배경은 딤 처리만 되고 클릭해도 닫히지 않는다.
240
+ */
241
+ onClose?: () => void;
237
242
  }
238
243
  interface BaseProps {
239
244
  children: react__default.ReactNode;
240
245
  className?: string;
241
246
  row?: boolean;
242
247
  }
243
- declare const Modal: (({ isVisible, header, children, className }: ModalProps) => react__default.JSX.Element | null) & {
248
+ declare const Modal: (({ isVisible, header, children, className, onClose }: ModalProps) => react__default.JSX.Element | null) & {
244
249
  Contents: ({ children, className }: BaseProps) => react__default.JSX.Element;
245
250
  CTAs: ({ children, className, row }: BaseProps) => react__default.JSX.Element | null;
246
251
  };
@@ -268,6 +273,27 @@ declare const IconCompass: ({ className, fill }: {
268
273
  className?: string;
269
274
  fill?: string;
270
275
  }) => react.JSX.Element;
276
+ /** 선택된 라디오 버튼(채워진 점). SideRadioAccordion 등에서 사용. */
277
+ declare const IconRadioSelected: ({ className, stroke, fill, }: {
278
+ className?: string;
279
+ stroke?: string;
280
+ fill?: string;
281
+ }) => react.JSX.Element;
282
+ /** 선택되지 않은 라디오 버튼(빈 원). */
283
+ declare const IconRadioUnselected: ({ className, stroke, }: {
284
+ className?: string;
285
+ stroke?: string;
286
+ }) => react.JSX.Element;
287
+ /** 느낌표(원 안). 보조 안내 텍스트 버튼 등에서 사용. */
288
+ declare const IconExclamation: ({ className, fill }: {
289
+ className?: string;
290
+ fill?: string;
291
+ }) => react.JSX.Element;
292
+ /** 닫기(X) 아이콘. Modal 우상단 등에서 사용. */
293
+ declare const IconClose: ({ className, stroke }: {
294
+ className?: string;
295
+ stroke?: string;
296
+ }) => react.JSX.Element;
271
297
 
272
298
  interface CategorySegmentProps {
273
299
  selected?: boolean;
@@ -519,4 +545,4 @@ interface ToastProps {
519
545
  }
520
546
  declare const Toast: react.ForwardRefExoticComponent<ToastProps & react.RefAttributes<HTMLDivElement>>;
521
547
 
522
- export { BackButton, type BackButtonProps, BasicFormField, type BasicFormFieldProps, CTA, type CTAProps, CategorySegment, type CategorySegmentProps, CategorySegmentedControl, type CategorySegmentedControlProps, Column, ColumnContentContainer, type ColumnContentContainerProps, ColumnDescription, ColumnDescriptionList, type ColumnDescriptionListProps, type ColumnDescriptionProps, ColumnLabel, type ColumnLabelProps, type ColumnProps, ColumnSubTitle, type ColumnSubTitleProps, ColumnText, type ColumnTextProps, ColumnTextStyle, type DayColumn, Dropdown, type DropdownProps, FormCheckBox, type FormCheckBoxProps, FormColor, type FormColorProps, FormFile, type FormFileProps, FormNumber, type FormNumberProps, FormPassword, type FormPasswordProps, FormSelectBox, type FormSelectBoxProps, FormTel, type FormTelProps, FormText, FormTextArea, type FormTextAreaProps, type FormTextProps, IconCheck, IconChevronDownXS, IconCompass, IconInfo, type LinkComponent, List, type ListProps, type LowerPartItem, Modal, type ModalProps, ModalText, type ModalTextProps, ModalTextStyle, MultiColumn, type NavIcon, NoticeBadge, type NoticeBadgeProps, type NoticeBadgeVariable, NoticeBar, type NoticeBarBadgeVariable, type NoticeBarProps, type NoticeBarVariable, type RadioToggle, SearchBar, type SearchBarProps, SelectBoxOption, type SelectBoxOptionProps, SideRadioAccordion, type PrintColor$1 as SideRadioAccordionPrintColor, type SideRadioAccordionProps, TNB, type TNBProps, Tag, type TagProps, TextButton, type TextButtonProps, type TimeSlot, type TimeSlotState, Timetable, type PrintColor as TimetablePrintColor, type TimetableProps, TitleInput, type TitleInputProps, Toast, type ToastProps, type UpperPartItem, type Week, WeekNavigation, type WeekNavigationProps, getInputStyles };
548
+ export { BackButton, type BackButtonProps, BasicFormField, type BasicFormFieldProps, CTA, type CTAProps, CategorySegment, type CategorySegmentProps, CategorySegmentedControl, type CategorySegmentedControlProps, Column, ColumnContentContainer, type ColumnContentContainerProps, ColumnDescription, ColumnDescriptionList, type ColumnDescriptionListProps, type ColumnDescriptionProps, ColumnLabel, type ColumnLabelProps, type ColumnProps, ColumnSubTitle, type ColumnSubTitleProps, ColumnText, type ColumnTextProps, ColumnTextStyle, type DayColumn, Dropdown, type DropdownProps, FormCheckBox, type FormCheckBoxProps, FormColor, type FormColorProps, FormFile, type FormFileProps, FormNumber, type FormNumberProps, FormPassword, type FormPasswordProps, FormSelectBox, type FormSelectBoxProps, FormTel, type FormTelProps, FormText, FormTextArea, type FormTextAreaProps, type FormTextProps, IconCheck, IconChevronDownXS, IconClose, IconCompass, IconExclamation, IconInfo, IconRadioSelected, IconRadioUnselected, type LinkComponent, List, type ListProps, type LowerPartItem, Modal, type ModalProps, ModalText, type ModalTextProps, ModalTextStyle, MultiColumn, type NavIcon, NoticeBadge, type NoticeBadgeProps, type NoticeBadgeVariable, NoticeBar, type NoticeBarBadgeVariable, type NoticeBarProps, type NoticeBarVariable, type RadioToggle, SearchBar, type SearchBarProps, SelectBoxOption, type SelectBoxOptionProps, SideRadioAccordion, type PrintColor$1 as SideRadioAccordionPrintColor, type SideRadioAccordionProps, TNB, type TNBProps, Tag, type TagProps, TextButton, type TextButtonProps, type TimeSlot, type TimeSlotState, Timetable, type PrintColor as TimetablePrintColor, type TimetableProps, TitleInput, type TitleInputProps, Toast, type ToastProps, type UpperPartItem, type Week, WeekNavigation, type WeekNavigationProps, getInputStyles };
package/dist/index.d.ts CHANGED
@@ -234,13 +234,18 @@ interface ModalProps {
234
234
  header: string;
235
235
  children: react__default.ReactNode;
236
236
  className?: string;
237
+ /**
238
+ * 지정하면 배경(백드롭) 클릭 시 호출되고, 카드 우상단에 닫기(X) 버튼이 노출된다.
239
+ * 생략하면 배경은 딤 처리만 되고 클릭해도 닫히지 않는다.
240
+ */
241
+ onClose?: () => void;
237
242
  }
238
243
  interface BaseProps {
239
244
  children: react__default.ReactNode;
240
245
  className?: string;
241
246
  row?: boolean;
242
247
  }
243
- declare const Modal: (({ isVisible, header, children, className }: ModalProps) => react__default.JSX.Element | null) & {
248
+ declare const Modal: (({ isVisible, header, children, className, onClose }: ModalProps) => react__default.JSX.Element | null) & {
244
249
  Contents: ({ children, className }: BaseProps) => react__default.JSX.Element;
245
250
  CTAs: ({ children, className, row }: BaseProps) => react__default.JSX.Element | null;
246
251
  };
@@ -268,6 +273,27 @@ declare const IconCompass: ({ className, fill }: {
268
273
  className?: string;
269
274
  fill?: string;
270
275
  }) => react.JSX.Element;
276
+ /** 선택된 라디오 버튼(채워진 점). SideRadioAccordion 등에서 사용. */
277
+ declare const IconRadioSelected: ({ className, stroke, fill, }: {
278
+ className?: string;
279
+ stroke?: string;
280
+ fill?: string;
281
+ }) => react.JSX.Element;
282
+ /** 선택되지 않은 라디오 버튼(빈 원). */
283
+ declare const IconRadioUnselected: ({ className, stroke, }: {
284
+ className?: string;
285
+ stroke?: string;
286
+ }) => react.JSX.Element;
287
+ /** 느낌표(원 안). 보조 안내 텍스트 버튼 등에서 사용. */
288
+ declare const IconExclamation: ({ className, fill }: {
289
+ className?: string;
290
+ fill?: string;
291
+ }) => react.JSX.Element;
292
+ /** 닫기(X) 아이콘. Modal 우상단 등에서 사용. */
293
+ declare const IconClose: ({ className, stroke }: {
294
+ className?: string;
295
+ stroke?: string;
296
+ }) => react.JSX.Element;
271
297
 
272
298
  interface CategorySegmentProps {
273
299
  selected?: boolean;
@@ -519,4 +545,4 @@ interface ToastProps {
519
545
  }
520
546
  declare const Toast: react.ForwardRefExoticComponent<ToastProps & react.RefAttributes<HTMLDivElement>>;
521
547
 
522
- export { BackButton, type BackButtonProps, BasicFormField, type BasicFormFieldProps, CTA, type CTAProps, CategorySegment, type CategorySegmentProps, CategorySegmentedControl, type CategorySegmentedControlProps, Column, ColumnContentContainer, type ColumnContentContainerProps, ColumnDescription, ColumnDescriptionList, type ColumnDescriptionListProps, type ColumnDescriptionProps, ColumnLabel, type ColumnLabelProps, type ColumnProps, ColumnSubTitle, type ColumnSubTitleProps, ColumnText, type ColumnTextProps, ColumnTextStyle, type DayColumn, Dropdown, type DropdownProps, FormCheckBox, type FormCheckBoxProps, FormColor, type FormColorProps, FormFile, type FormFileProps, FormNumber, type FormNumberProps, FormPassword, type FormPasswordProps, FormSelectBox, type FormSelectBoxProps, FormTel, type FormTelProps, FormText, FormTextArea, type FormTextAreaProps, type FormTextProps, IconCheck, IconChevronDownXS, IconCompass, IconInfo, type LinkComponent, List, type ListProps, type LowerPartItem, Modal, type ModalProps, ModalText, type ModalTextProps, ModalTextStyle, MultiColumn, type NavIcon, NoticeBadge, type NoticeBadgeProps, type NoticeBadgeVariable, NoticeBar, type NoticeBarBadgeVariable, type NoticeBarProps, type NoticeBarVariable, type RadioToggle, SearchBar, type SearchBarProps, SelectBoxOption, type SelectBoxOptionProps, SideRadioAccordion, type PrintColor$1 as SideRadioAccordionPrintColor, type SideRadioAccordionProps, TNB, type TNBProps, Tag, type TagProps, TextButton, type TextButtonProps, type TimeSlot, type TimeSlotState, Timetable, type PrintColor as TimetablePrintColor, type TimetableProps, TitleInput, type TitleInputProps, Toast, type ToastProps, type UpperPartItem, type Week, WeekNavigation, type WeekNavigationProps, getInputStyles };
548
+ export { BackButton, type BackButtonProps, BasicFormField, type BasicFormFieldProps, CTA, type CTAProps, CategorySegment, type CategorySegmentProps, CategorySegmentedControl, type CategorySegmentedControlProps, Column, ColumnContentContainer, type ColumnContentContainerProps, ColumnDescription, ColumnDescriptionList, type ColumnDescriptionListProps, type ColumnDescriptionProps, ColumnLabel, type ColumnLabelProps, type ColumnProps, ColumnSubTitle, type ColumnSubTitleProps, ColumnText, type ColumnTextProps, ColumnTextStyle, type DayColumn, Dropdown, type DropdownProps, FormCheckBox, type FormCheckBoxProps, FormColor, type FormColorProps, FormFile, type FormFileProps, FormNumber, type FormNumberProps, FormPassword, type FormPasswordProps, FormSelectBox, type FormSelectBoxProps, FormTel, type FormTelProps, FormText, FormTextArea, type FormTextAreaProps, type FormTextProps, IconCheck, IconChevronDownXS, IconClose, IconCompass, IconExclamation, IconInfo, IconRadioSelected, IconRadioUnselected, type LinkComponent, List, type ListProps, type LowerPartItem, Modal, type ModalProps, ModalText, type ModalTextProps, ModalTextStyle, MultiColumn, type NavIcon, NoticeBadge, type NoticeBadgeProps, type NoticeBadgeVariable, NoticeBar, type NoticeBarBadgeVariable, type NoticeBarProps, type NoticeBarVariable, type RadioToggle, SearchBar, type SearchBarProps, SelectBoxOption, type SelectBoxOptionProps, SideRadioAccordion, type PrintColor$1 as SideRadioAccordionPrintColor, type SideRadioAccordionProps, TNB, type TNBProps, Tag, type TagProps, TextButton, type TextButtonProps, type TimeSlot, type TimeSlotState, Timetable, type PrintColor as TimetablePrintColor, type TimetableProps, TitleInput, type TitleInputProps, Toast, type ToastProps, type UpperPartItem, type Week, WeekNavigation, type WeekNavigationProps, getInputStyles };
package/dist/index.js CHANGED
@@ -46,8 +46,12 @@ __export(index_exports, {
46
46
  FormTextArea: () => FormTextArea,
47
47
  IconCheck: () => IconCheck,
48
48
  IconChevronDownXS: () => IconChevronDownXS,
49
+ IconClose: () => IconClose,
49
50
  IconCompass: () => IconCompass,
51
+ IconExclamation: () => IconExclamation,
50
52
  IconInfo: () => IconInfo,
53
+ IconRadioSelected: () => IconRadioSelected,
54
+ IconRadioUnselected: () => IconRadioUnselected,
51
55
  List: () => List,
52
56
  Modal: () => Modal,
53
57
  ModalText: () => ModalText,
@@ -244,6 +248,89 @@ var IconCompass = ({ className, fill }) => {
244
248
  }
245
249
  );
246
250
  };
251
+ var IconRadioSelected = ({
252
+ className,
253
+ stroke,
254
+ fill
255
+ }) => {
256
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
257
+ "svg",
258
+ {
259
+ className,
260
+ width: "16",
261
+ height: "16",
262
+ viewBox: "0 0 16 16",
263
+ fill: "none",
264
+ xmlns: "http://www.w3.org/2000/svg",
265
+ children: [
266
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "8", cy: "8", r: "7", stroke: stroke || "#121212" }),
267
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "8", cy: "8", r: "4", fill: fill || "#121212" })
268
+ ]
269
+ }
270
+ );
271
+ };
272
+ var IconRadioUnselected = ({
273
+ className,
274
+ stroke
275
+ }) => {
276
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
277
+ "svg",
278
+ {
279
+ className,
280
+ width: "16",
281
+ height: "16",
282
+ viewBox: "0 0 16 16",
283
+ fill: "none",
284
+ xmlns: "http://www.w3.org/2000/svg",
285
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "8", cy: "8", r: "7", stroke: stroke || "#B4B9C2" })
286
+ }
287
+ );
288
+ };
289
+ var IconExclamation = ({ className, fill }) => {
290
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
291
+ "svg",
292
+ {
293
+ className,
294
+ width: "12",
295
+ height: "12",
296
+ viewBox: "0 0 12 12",
297
+ fill: "none",
298
+ xmlns: "http://www.w3.org/2000/svg",
299
+ children: [
300
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
301
+ "path",
302
+ {
303
+ d: "M6.41438 7.18735H5.57954L5.50175 3.10938H6.49218L6.41438 7.18735ZM5.40001 8.3313C5.39801 8.23061 5.42395 8.13738 5.47781 8.05161C5.53167 7.96583 5.60448 7.89777 5.69624 7.84743C5.79 7.79708 5.89174 7.77191 6.00145 7.77191C6.10718 7.77191 6.20592 7.79708 6.29768 7.84743C6.38945 7.89777 6.46226 7.96583 6.51612 8.05161C6.57197 8.13738 6.5999 8.23061 6.5999 8.3313C6.5999 8.43199 6.57197 8.52522 6.51612 8.611C6.46226 8.69677 6.38945 8.76483 6.29768 8.81518C6.20592 8.86552 6.10718 8.89069 6.00145 8.89069C5.89174 8.89069 5.79 8.86552 5.69624 8.81518C5.60448 8.76483 5.53167 8.69677 5.47781 8.611C5.42395 8.52522 5.39801 8.43199 5.40001 8.3313Z",
304
+ fill: fill || "#505865"
305
+ }
306
+ ),
307
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "6", cy: "6", r: "4.5", stroke: fill || "#505865" })
308
+ ]
309
+ }
310
+ );
311
+ };
312
+ var IconClose = ({ className, stroke }) => {
313
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
314
+ "svg",
315
+ {
316
+ className,
317
+ width: "16",
318
+ height: "16",
319
+ viewBox: "0 0 16 16",
320
+ fill: "none",
321
+ xmlns: "http://www.w3.org/2000/svg",
322
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
323
+ "path",
324
+ {
325
+ d: "M4 4L12 12M12 4L4 12",
326
+ stroke: stroke || "#6d7683",
327
+ strokeWidth: "1.5",
328
+ strokeLinecap: "round"
329
+ }
330
+ )
331
+ }
332
+ );
333
+ };
247
334
 
248
335
  // src/components/BackButton/BackButton.tsx
249
336
  var import_jsx_runtime2 = require("react/jsx-runtime");
@@ -931,30 +1018,49 @@ function List({
931
1018
 
932
1019
  // src/components/Modal/Modal.tsx
933
1020
  var import_jsx_runtime25 = require("react/jsx-runtime");
934
- var ModalBase = ({ isVisible, header, children, className }) => {
1021
+ var ModalBase = ({ isVisible, header, children, className, onClose }) => {
935
1022
  if (!isVisible) return null;
936
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: cn("fixed inset-0 z-50 pointer-events-auto"), children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
937
- "div",
938
- {
939
- className: cn("fixed inset-0 z-1001 flex items-center justify-center pointer-events-auto"),
940
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
941
- "main",
942
- {
943
- className: cn(
944
- "w-110 pt-8 h-fit",
945
- "flex flex-col items-center",
946
- "border border-gray02",
947
- "bg-white shadow-[0 0 30px 0 rgba(0, 0, 0, 0.08);]",
948
- className
1023
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: cn("fixed inset-0 z-50"), children: [
1024
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1025
+ "div",
1026
+ {
1027
+ "aria-hidden": true,
1028
+ onClick: onClose,
1029
+ className: cn("fixed inset-0 z-1000 bg-[#212121]/30", onClose && "cursor-pointer")
1030
+ }
1031
+ ),
1032
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "fixed inset-0 z-1001 flex items-center justify-center pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1033
+ "main",
1034
+ {
1035
+ role: "dialog",
1036
+ "aria-modal": "true",
1037
+ className: cn(
1038
+ "relative w-110 pt-8 h-fit pointer-events-auto",
1039
+ "flex flex-col items-center",
1040
+ "border border-gray02",
1041
+ "bg-white shadow-[0px_0px_30px_0px_rgba(0,0,0,0.08)]",
1042
+ className
1043
+ ),
1044
+ children: [
1045
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1046
+ "button",
1047
+ {
1048
+ type: "button",
1049
+ onClick: onClose,
1050
+ "aria-label": "\uB2EB\uAE30",
1051
+ className: cn(
1052
+ "absolute right-3 top-3 flex size-8 items-center justify-center",
1053
+ "text-tertiary transition-colors hover:bg-gray00 active:bg-gray01 cursor-pointer"
1054
+ ),
1055
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(IconClose, {})
1056
+ }
949
1057
  ),
950
- children: [
951
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h1", { className: cn("text-strong font-[500] text-[24px] leading-[32px]"), children: header }),
952
- children
953
- ]
954
- }
955
- )
956
- }
957
- ) });
1058
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h1", { className: cn("text-strong font-[500] text-[24px] leading-[32px]"), children: header }),
1059
+ children
1060
+ ]
1061
+ }
1062
+ ) })
1063
+ ] });
958
1064
  };
959
1065
  var Contents = ({ children, className }) => {
960
1066
  return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
@@ -1206,18 +1312,6 @@ function useControllableState(controlled, defaultValue) {
1206
1312
  return [value, setValue, isControlled];
1207
1313
  }
1208
1314
 
1209
- // src/components/SideRadioAccordion/Exclamation.svg
1210
- var Exclamation_default = "./Exclamation-IUYZYYC4.svg";
1211
-
1212
- // src/components/SideRadioAccordion/ChevronDown.svg
1213
- var ChevronDown_default = "./ChevronDown-XSALXCW4.svg";
1214
-
1215
- // src/components/SideRadioAccordion/RadioSelected.svg
1216
- var RadioSelected_default = "./RadioSelected-DOLVV7ZM.svg";
1217
-
1218
- // src/components/SideRadioAccordion/RadioUnselected.svg
1219
- var RadioUnselected_default = "./RadioUnselected-QN74EU46.svg";
1220
-
1221
1315
  // src/components/SideRadioAccordion/SideRadioAccordion.tsx
1222
1316
  var import_jsx_runtime33 = require("react/jsx-runtime");
1223
1317
  var printColorBgClass = {
@@ -1308,14 +1402,7 @@ var Stepper = ({ step, title, isOpen, collapsible, onClick, className }) => {
1308
1402
  className: cn(base, "cursor-pointer hover:bg-gray00 active:bg-gray01", className),
1309
1403
  children: [
1310
1404
  label,
1311
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1312
- "img",
1313
- {
1314
- src: ChevronDown_default,
1315
- alt: "",
1316
- className: cn("transition-transform", isOpen && "rotate-180")
1317
- }
1318
- )
1405
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(IconChevronDownXS, { className: cn("transition-transform", isOpen && "rotate-180") })
1319
1406
  ]
1320
1407
  }
1321
1408
  );
@@ -1342,8 +1429,9 @@ var RadioToggleItem = ({
1342
1429
  onClick: onSelect,
1343
1430
  style,
1344
1431
  className: cn(
1345
- "w-full flex items-center gap-1.5 p-3",
1346
- "text-body1-regular text-secondary text-left cursor-pointer",
1432
+ "group w-full flex items-center gap-1.5 p-3",
1433
+ "text-body1-regular text-left cursor-pointer",
1434
+ open ? "text-strong" : "text-secondary",
1347
1435
  rowBg,
1348
1436
  className
1349
1437
  ),
@@ -1355,7 +1443,7 @@ var RadioToggleItem = ({
1355
1443
  ),
1356
1444
  open && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex flex-col gap-2 px-3 py-3 bg-white", children: [
1357
1445
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "text-caption-regular text-secondary", children: content }),
1358
- badges && badges.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "flex gap-1", children: badges.map((badge) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Badge, { label: badge }, badge)) }),
1446
+ badges && badges.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "flex flex-wrap gap-1", children: badges.map((badge) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Badge, { label: badge }, badge)) }),
1359
1447
  labelTextButton && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1360
1448
  TextButton2,
1361
1449
  {
@@ -1369,13 +1457,21 @@ var RadioToggleItem = ({
1369
1457
  ] });
1370
1458
  };
1371
1459
  var Radio = ({ selected = false, className }) => {
1372
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1373
- "img",
1374
- {
1375
- src: selected ? RadioSelected_default : RadioUnselected_default,
1376
- alt: "",
1377
- className: cn("w-6 h-6", className)
1378
- }
1460
+ const Icon = selected ? IconRadioSelected : IconRadioUnselected;
1461
+ return (
1462
+ // 디자인 스펙(Figma "radio" 5:781): 아이콘 자체 색은 고정, hover/pressed 시
1463
+ // 24px 원형 배경 칩만 나타난다(gray00/gray01). 부모 버튼의 group-hover/active로 동기화.
1464
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1465
+ "span",
1466
+ {
1467
+ className: cn(
1468
+ "inline-flex size-6 shrink-0 items-center justify-center rounded-full transition-colors",
1469
+ "group-hover:bg-gray00 group-active:bg-gray01",
1470
+ className
1471
+ ),
1472
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon, { className: "size-6" })
1473
+ }
1474
+ )
1379
1475
  );
1380
1476
  };
1381
1477
  var TextButton2 = ({ label, onClick, showIcon = false, className }) => {
@@ -1392,7 +1488,7 @@ var TextButton2 = ({ label, onClick, showIcon = false, className }) => {
1392
1488
  className
1393
1489
  ),
1394
1490
  children: [
1395
- showIcon && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("img", { src: Exclamation_default, alt: "" }),
1491
+ showIcon && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(IconExclamation, {}),
1396
1492
  label
1397
1493
  ]
1398
1494
  }
@@ -1403,7 +1499,7 @@ var Badge = ({ label, className }) => {
1403
1499
  "div",
1404
1500
  {
1405
1501
  className: cn(
1406
- "w-fit h-fit px-2 py-0.5 border border-gray02",
1502
+ "w-fit h-fit px-2 py-0.5 border border-gray02 shrink-0 whitespace-nowrap",
1407
1503
  "text-tertiary text-caption-book",
1408
1504
  className
1409
1505
  ),
@@ -1808,14 +1904,10 @@ var UpperPart = ({
1808
1904
  ] }),
1809
1905
  /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-stretch", children: [
1810
1906
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
1811
- upperPartIconList.map((icon, index) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1812
- NavIconButton,
1813
- {
1814
- ...icon,
1815
- linkComponent
1816
- },
1817
- icon.id ?? icon.src ?? icon.label ?? index
1818
- ))
1907
+ upperPartIconList.map((icon, index) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react9.Fragment, { children: [
1908
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(NavIconButton, { ...icon, linkComponent }),
1909
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
1910
+ ] }, icon.id ?? icon.src ?? icon.label ?? index))
1819
1911
  ] })
1820
1912
  ]
1821
1913
  }
@@ -1837,7 +1929,9 @@ var UpperPartTab = ({
1837
1929
  linkComponent,
1838
1930
  current: selected,
1839
1931
  className: cn(
1840
- "inline-flex min-h-13 flex-col items-center gap-2 pt-2.5 cursor-pointer no-underline",
1932
+ // 헤더 바닥 border-b와 언더라인이 겹치도록 높이를 52px로 고정하고
1933
+ // justify-between으로 라벨/언더라인을 위-아래 끝에 붙인다.
1934
+ "inline-flex h-13 flex-col items-center justify-between pt-2.5 cursor-pointer no-underline",
1841
1935
  "transition-colors hover:bg-gray00 active:bg-gray01",
1842
1936
  className
1843
1937
  ),
@@ -2029,8 +2123,12 @@ var Toast = (0, import_react10.forwardRef)(function Toast2({ message, open, dura
2029
2123
  FormTextArea,
2030
2124
  IconCheck,
2031
2125
  IconChevronDownXS,
2126
+ IconClose,
2032
2127
  IconCompass,
2128
+ IconExclamation,
2033
2129
  IconInfo,
2130
+ IconRadioSelected,
2131
+ IconRadioUnselected,
2034
2132
  List,
2035
2133
  Modal,
2036
2134
  ModalText,