@hivcd-printshop/design-system 1.2.0 → 1.2.2

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
@@ -28,6 +28,8 @@ __export(index_exports, {
28
28
  CategorySegmentedControl: () => CategorySegmentedControl,
29
29
  Column: () => Column,
30
30
  ColumnContentContainer: () => ColumnContentContainer,
31
+ ColumnDescription: () => ColumnDescription,
32
+ ColumnDescriptionList: () => ColumnDescriptionList,
31
33
  ColumnLabel: () => ColumnLabel,
32
34
  ColumnSubTitle: () => ColumnSubTitle,
33
35
  ColumnText: () => ColumnText,
@@ -44,7 +46,12 @@ __export(index_exports, {
44
46
  FormTextArea: () => FormTextArea,
45
47
  IconCheck: () => IconCheck,
46
48
  IconChevronDownXS: () => IconChevronDownXS,
49
+ IconClose: () => IconClose,
50
+ IconCompass: () => IconCompass,
51
+ IconExclamation: () => IconExclamation,
47
52
  IconInfo: () => IconInfo,
53
+ IconRadioSelected: () => IconRadioSelected,
54
+ IconRadioUnselected: () => IconRadioUnselected,
48
55
  List: () => List,
49
56
  Modal: () => Modal,
50
57
  ModalText: () => ModalText,
@@ -219,6 +226,111 @@ var IconGoBack = ({ className, stroke }) => {
219
226
  }
220
227
  );
221
228
  };
229
+ var IconCompass = ({ className, fill }) => {
230
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
231
+ "svg",
232
+ {
233
+ className,
234
+ width: "16",
235
+ height: "16",
236
+ viewBox: "0 0 16 16",
237
+ fill: "none",
238
+ xmlns: "http://www.w3.org/2000/svg",
239
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
240
+ "path",
241
+ {
242
+ fillRule: "evenodd",
243
+ clipRule: "evenodd",
244
+ d: "M12.5731 7.37945C12.2964 5.32806 10.668 3.70356 8.6166 3.42688V0H7.37945V3.42688C5.32806 3.70356 3.70356 5.32806 3.42688 7.37945H0V8.62055H3.42688C3.70356 10.6719 5.32806 12.2964 7.37945 12.5731V16H8.6166V12.5731C10.668 12.2964 12.2964 10.6719 12.5731 8.62055H16V7.37945H12.5731ZM7.37945 11.3241C6.01186 11.0672 4.93281 9.98814 4.67589 8.62055H7.37945V11.3241ZM7.4664 5.51383C7.41897 5.81423 7.39131 6.14229 7.37945 6.50988V7.37945H4.67589C4.89328 6.22925 5.68775 5.28458 6.75099 4.86166C6.9921 4.73122 7.07905 4.67589 7.19763 4.41502L7.67984 4.57312C7.58498 4.90119 7.51779 5.21344 7.4664 5.51383ZM9.24506 11.1383C9.00395 11.2727 8.917 11.3241 8.79842 11.5889L8.31621 11.4269C8.41107 11.1028 8.47826 10.7905 8.52965 10.4901C8.57312 10.2134 8.60474 9.91304 8.6166 9.58103V8.62055H11.3202C11.1067 9.77075 10.3083 10.7154 9.24506 11.1383ZM8.6166 7.37945V4.67984C9.98419 4.93281 11.0672 6.01186 11.3202 7.37945H8.6166Z",
245
+ fill: fill || "#121212"
246
+ }
247
+ )
248
+ }
249
+ );
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
+ };
222
334
 
223
335
  // src/components/BackButton/BackButton.tsx
224
336
  var import_jsx_runtime2 = require("react/jsx-runtime");
@@ -307,8 +419,8 @@ var MultiColumn = Object.assign(MultiColumnMain, {
307
419
  // src/components/Column/Column.tsx
308
420
  var import_jsx_runtime5 = require("react/jsx-runtime");
309
421
  var Column = ({ className, children, header }) => {
310
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: cn("flex flex-col gap-5", "h-full w-full px-5 pt-3 pb-8", className), children: [
311
- header && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { className: cn("text-head3-medium text-primary font-bold"), children: header }),
422
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: cn("flex flex-col gap-5", "h-full w-full px-5 py-3", className), children: [
423
+ header && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { className: cn("text-body1-medium text-primary"), children: header }),
312
424
  children
313
425
  ] });
314
426
  };
@@ -345,70 +457,87 @@ var ColumnSubTitle = ({
345
457
  as: Tag2 = "h2"
346
458
  }) => {
347
459
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Tag2, { className: cn("flex items-center justify-between gap-1.5", "w-full", className), children: [
348
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: cn("text-head3-medium text-strong"), children }),
460
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: cn("text-body1-medium text-primary"), children }),
349
461
  action && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "flex shrink-0 items-center", children: action })
350
462
  ] });
351
463
  };
352
464
 
353
- // src/components/Form/BasicFormField.tsx
465
+ // src/components/Column/ColumnDescription.tsx
354
466
  var import_jsx_runtime10 = require("react/jsx-runtime");
467
+ var ColumnDescription = ({
468
+ className,
469
+ children,
470
+ bullet = true
471
+ }) => {
472
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: cn("flex items-start gap-3", className), children: [
473
+ bullet && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "flex shrink-0 items-center py-1", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(IconCompass, { className: "size-4" }) }),
474
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "min-w-0 flex-1 whitespace-pre-line text-body3-book text-primary", children })
475
+ ] });
476
+ };
477
+ var ColumnDescriptionList = ({ className, children }) => {
478
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: cn("flex flex-col gap-4", className), children });
479
+ };
480
+
481
+ // src/components/Form/BasicFormField.tsx
482
+ var import_jsx_runtime11 = require("react/jsx-runtime");
355
483
  var BasicFormField = ({
356
484
  children,
357
485
  isDanger,
358
486
  dangerText,
359
487
  className
360
488
  }) => {
361
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: cn("flex flex-col gap-1.5", className), children: [
489
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: cn("flex flex-col gap-1.5", className), children: [
362
490
  children,
363
- isDanger && dangerText && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-caption-book text-danger", children: dangerText })
491
+ isDanger && dangerText && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "text-caption-book text-danger", children: dangerText })
364
492
  ] });
365
493
  };
366
494
  var getInputStyles = (isDanger, additionalClass) => {
367
495
  return cn(
368
- "w-full h-10 px-3",
496
+ // 디자인 스펙: 높이 41px, 좌우 12px / 상하 10px 패딩
497
+ "w-full h-[41px] px-3 py-2.5",
369
498
  "box-border border border-gray02 focus:outline-none focus:border-black",
370
- "bg-white hover:bg-gray00 transition-colors focus:hover:bg-white",
499
+ "bg-white transition-colors",
371
500
  ColumnTextStyle,
372
501
  "text-primary placeholder:text-quaternary",
373
502
  isDanger && "border-danger",
374
- // 에러 시 빨간 테두리
503
+ // 경고 시 빨간 테두리 (#E42939)
375
504
  additionalClass
376
505
  // 각 인풋별 추가 스타일 (예: textarea의 h-30)
377
506
  );
378
507
  };
379
508
 
380
509
  // src/components/Form/FormText.tsx
381
- var import_jsx_runtime11 = require("react/jsx-runtime");
510
+ var import_jsx_runtime12 = require("react/jsx-runtime");
382
511
  var FormText = ({ className, isDanger, dangerText, ...props }) => {
383
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("input", { type: "text", className: getInputStyles(isDanger, className), ...props }) });
512
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("input", { type: "text", className: getInputStyles(isDanger, className), ...props }) });
384
513
  };
385
514
 
386
515
  // src/components/Form/FormTextArea.tsx
387
- var import_jsx_runtime12 = require("react/jsx-runtime");
516
+ var import_jsx_runtime13 = require("react/jsx-runtime");
388
517
  var FormTextArea = ({ className, isDanger, dangerText, ...props }) => {
389
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
518
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
390
519
  "textarea",
391
520
  {
392
- className: getInputStyles(isDanger, "resize-none h-30 py-2.5 " + (className || "")),
521
+ className: getInputStyles(isDanger, "resize-none h-30 px-4 py-2.5 " + (className || "")),
393
522
  ...props
394
523
  }
395
524
  ) });
396
525
  };
397
526
 
398
527
  // src/components/Form/FormNumber.tsx
399
- var import_jsx_runtime13 = require("react/jsx-runtime");
528
+ var import_jsx_runtime14 = require("react/jsx-runtime");
400
529
  var FormNumber = ({ className, isDanger, dangerText, ...props }) => {
401
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("input", { type: "number", className: getInputStyles(isDanger, className), ...props }) });
530
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("input", { type: "number", className: getInputStyles(isDanger, className), ...props }) });
402
531
  };
403
532
 
404
533
  // src/components/Form/FormPassword.tsx
405
- var import_jsx_runtime14 = require("react/jsx-runtime");
534
+ var import_jsx_runtime15 = require("react/jsx-runtime");
406
535
  var FormPassword = ({ className, isDanger, dangerText, ...props }) => {
407
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("input", { type: "password", className: getInputStyles(isDanger, className), ...props }) });
536
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("input", { type: "password", className: getInputStyles(isDanger, className), ...props }) });
408
537
  };
409
538
 
410
539
  // src/components/Form/FormTel.tsx
411
- var import_jsx_runtime15 = require("react/jsx-runtime");
540
+ var import_jsx_runtime16 = require("react/jsx-runtime");
412
541
  var FormTel = ({ className, isDanger, dangerText, onChange, ...props }) => {
413
542
  const handlePhoneChange = (e) => {
414
543
  const rawValue = e.target.value.replace(/[^0-9]/g, "");
@@ -420,7 +549,7 @@ var FormTel = ({ className, isDanger, dangerText, onChange, ...props }) => {
420
549
  e.target.value = formattedValue;
421
550
  if (onChange) onChange(e);
422
551
  };
423
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
552
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
424
553
  "input",
425
554
  {
426
555
  type: "tel",
@@ -434,7 +563,7 @@ var FormTel = ({ className, isDanger, dangerText, onChange, ...props }) => {
434
563
 
435
564
  // src/components/Form/FormColor.tsx
436
565
  var import_react = require("react");
437
- var import_jsx_runtime16 = require("react/jsx-runtime");
566
+ var import_jsx_runtime17 = require("react/jsx-runtime");
438
567
  var FormColor = ({
439
568
  className,
440
569
  isDanger,
@@ -452,7 +581,7 @@ var FormColor = ({
452
581
  setInternalColor(e.target.value);
453
582
  onChange?.(e);
454
583
  };
455
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
584
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
456
585
  "label",
457
586
  {
458
587
  className: getInputStyles(
@@ -461,7 +590,7 @@ var FormColor = ({
461
590
  "flex items-center gap-2 relative focus-within:border-black focus-within:hover:bg-white" + (className || "")
462
591
  ),
463
592
  children: [
464
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "w-6 h-6 shrink-0 overflow-hidden", style: { backgroundColor: color }, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
593
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "w-6 h-6 shrink-0 overflow-hidden", style: { backgroundColor: color }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
465
594
  "input",
466
595
  {
467
596
  type: "color",
@@ -471,7 +600,7 @@ var FormColor = ({
471
600
  ...props
472
601
  }
473
602
  ) }),
474
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-primary text-body3-regular uppercase flex-1 select-none", children: color })
603
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-primary text-body3-regular uppercase flex-1 select-none", children: color })
475
604
  ]
476
605
  }
477
606
  ) });
@@ -479,12 +608,11 @@ var FormColor = ({
479
608
 
480
609
  // src/components/Form/FormFile.tsx
481
610
  var import_react2 = require("react");
482
- var import_jsx_runtime17 = require("react/jsx-runtime");
611
+ var import_jsx_runtime18 = require("react/jsx-runtime");
483
612
  var FormFile = ({
484
613
  className,
485
614
  isDanger,
486
615
  dangerText,
487
- placeholder = "\uD30C\uC77C\uC744 \uC120\uD0DD\uD574\uC8FC\uC138\uC694",
488
616
  fileUrl,
489
617
  filename,
490
618
  onChange,
@@ -541,32 +669,31 @@ var FormFile = ({
541
669
  }
542
670
  };
543
671
  const displayFileName = selectedFile?.name || (fileUrl ? fileUrl.split("/").pop() : null);
544
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
672
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
545
673
  "div",
546
674
  {
547
675
  className: getInputStyles(
548
676
  isDanger,
549
- "active:bg-gray00 flex items-center gap-2 justify-between " + (className || "")
677
+ // 디자인 스펙: 파일 전 상태는 우측 정렬("파일 첨부"만), 파일 후 상태는 좌우 배치
678
+ cn(
679
+ "flex items-center gap-2",
680
+ displayFileName ? "justify-between" : "justify-end",
681
+ className
682
+ )
550
683
  ),
551
684
  children: [
552
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
553
- "div",
685
+ displayFileName && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
686
+ "span",
554
687
  {
555
- className: `truncate flex-1 max-w-50 w-full ${displayFileName ? "text-primary" : "text-quaternary"}`,
556
- children: displayFileName ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
557
- "span",
558
- {
559
- onClick: handleDownload,
560
- className: "w-full underline text-primary cursor-pointer hover:text-black transition-colors",
561
- title: `${displayFileName} \uB2E4\uC6B4\uB85C\uB4DC`,
562
- children: displayFileName
563
- }
564
- ) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "w-full", children: placeholder })
688
+ onClick: handleDownload,
689
+ className: "text-body3-book text-primary truncate max-w-[200px] cursor-pointer",
690
+ title: `${displayFileName} \uB2E4\uC6B4\uB85C\uB4DC`,
691
+ children: displayFileName
565
692
  }
566
693
  ),
567
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("label", { className: "px-1 -mx-1 cursor-pointer", children: [
568
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "text-primary text-caption-regular underline", children: "\uD30C\uC77C \uCCA8\uBD80" }),
569
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("input", { type: "file", className: "hidden", onChange: handleFileChange, ...props })
694
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("label", { className: "shrink-0 px-1 -mx-1 cursor-pointer", children: [
695
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "text-primary text-caption-regular underline", children: displayFileName ? "\uB2E4\uC2DC \uCCA8\uBD80" : "\uD30C\uC77C \uCCA8\uBD80" }),
696
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("input", { type: "file", className: "hidden", onChange: handleFileChange, ...props })
570
697
  ] })
571
698
  ]
572
699
  }
@@ -574,7 +701,7 @@ var FormFile = ({
574
701
  };
575
702
 
576
703
  // src/components/Form/FormCheckBox.tsx
577
- var import_jsx_runtime18 = require("react/jsx-runtime");
704
+ var import_jsx_runtime19 = require("react/jsx-runtime");
578
705
  var FormCheckBox = ({
579
706
  isChecked,
580
707
  setIsChecked,
@@ -583,19 +710,18 @@ var FormCheckBox = ({
583
710
  textStyle,
584
711
  ...props
585
712
  }) => {
586
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
713
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
587
714
  "label",
588
715
  {
589
716
  className: cn(
590
- "w-fit h-fit pr-1",
717
+ "group w-fit h-fit",
591
718
  "flex items-center gap-1",
592
- "hover:bg-gray00 active:bg-gray01 transition-colors",
593
719
  "cursor-pointer select-none",
594
720
  // 💡 1. 텍스트 드래그 방지 추가
595
721
  className
596
722
  ),
597
723
  children: [
598
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
724
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
599
725
  "input",
600
726
  {
601
727
  type: "checkbox",
@@ -605,20 +731,29 @@ var FormCheckBox = ({
605
731
  ...props
606
732
  }
607
733
  ),
608
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex items-center justify-center w-5 h-5 shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
734
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
609
735
  "div",
610
736
  {
611
737
  className: cn(
612
- "w-[15px] h-[15px]",
613
- "box-border border",
614
- "flex items-center justify-center transition-colors duration-200",
615
- // 💡 3. 키보드 Tab 이동 시 접근성 향상 (포커스 링 표시)
616
- "peer-focus-visible:ring-2 peer-focus-visible:ring-black peer-focus-visible:ring-offset-1"
738
+ "flex items-center justify-center w-5 h-5 shrink-0 rounded transition-colors",
739
+ "group-hover:bg-gray00 group-active:bg-gray01"
617
740
  ),
618
- children: isChecked && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(IconCheck, {})
741
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
742
+ "div",
743
+ {
744
+ className: cn(
745
+ "w-[15px] h-[15px]",
746
+ "box-border border border-black",
747
+ "flex items-center justify-center transition-colors duration-200",
748
+ // 💡 3. 키보드 Tab 이동 시 접근성 향상 (포커스 링 표시)
749
+ "peer-focus-visible:ring-2 peer-focus-visible:ring-black peer-focus-visible:ring-offset-1"
750
+ ),
751
+ children: isChecked && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(IconCheck, {})
752
+ }
753
+ )
619
754
  }
620
- ) }),
621
- children && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: cn(ColumnTextStyle, textStyle), children })
755
+ ),
756
+ children && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: cn("text-body3-book text-primary", textStyle), children })
622
757
  ]
623
758
  }
624
759
  );
@@ -628,19 +763,20 @@ var FormCheckBox = ({
628
763
  var import_react3 = require("react");
629
764
 
630
765
  // src/components/Form/SelectBoxOption.tsx
631
- var import_jsx_runtime19 = require("react/jsx-runtime");
766
+ var import_jsx_runtime20 = require("react/jsx-runtime");
632
767
  var SelectBoxOption = ({
633
768
  label,
634
769
  onClick,
635
770
  // selectedLabel,
636
771
  className
637
772
  }) => {
638
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
773
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
639
774
  "li",
640
775
  {
641
776
  onClick,
642
777
  className: cn(
643
- "w-full h-11 px-3 shrink-0",
778
+ "w-full p-3 shrink-0",
779
+ // 디자인 스펙: 12px 패딩
644
780
  "flex items-center justify-start",
645
781
  // "box-border border-b border-gray02",
646
782
  "text-body3-book text-primary",
@@ -656,7 +792,7 @@ var SelectBoxOption = ({
656
792
  };
657
793
 
658
794
  // src/components/Form/FormSelectBox.tsx
659
- var import_jsx_runtime20 = require("react/jsx-runtime");
795
+ var import_jsx_runtime21 = require("react/jsx-runtime");
660
796
  var FormSelectBox = ({
661
797
  options,
662
798
  value,
@@ -679,8 +815,8 @@ var FormSelectBox = ({
679
815
  document.removeEventListener("mousedown", handleClickOutside);
680
816
  };
681
817
  }, []);
682
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { ref: containerRef, className: "relative w-full", children: [
683
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
818
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { ref: containerRef, className: "relative w-full", children: [
819
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
684
820
  "div",
685
821
  {
686
822
  tabIndex: 0,
@@ -688,8 +824,8 @@ var FormSelectBox = ({
688
824
  isDanger,
689
825
  cn(
690
826
  "flex items-center justify-between cursor-pointer select-none",
691
- isOpen && "border-black",
692
- // 💡 열려있을 때는 테두리를 검은색으로 고정 (포커스 효과)
827
+ isOpen && "border-gray08",
828
+ // 열려있을 때 테두리 #3A414C 고정 (디자인 스펙)
693
829
  className
694
830
  )
695
831
  ),
@@ -700,8 +836,8 @@ var FormSelectBox = ({
700
836
  setIsOpen((prev) => !prev);
701
837
  },
702
838
  children: [
703
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: value ? "text-primary" : "text-quaternary", children: value || placeholder }),
704
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
839
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: value ? "text-primary" : "text-quaternary", children: value || placeholder }),
840
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
705
841
  IconChevronDownXS,
706
842
  {
707
843
  className: cn("text-gray06 transition-transform", isOpen && "rotate-180"),
@@ -711,17 +847,17 @@ var FormSelectBox = ({
711
847
  ]
712
848
  }
713
849
  ),
714
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
850
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
715
851
  "ul",
716
852
  {
717
853
  className: cn(
718
854
  "absolute top-full left-0 right-0 z-10",
719
855
  // 💡 Input 바로 아래에 띄움
720
856
  "box-border border border-gray02 bg-white flex flex-col",
721
- "max-h-50 overflow-y-auto shadow-sm"
722
- // 💡 항목이 너무 많으면 스크롤 생성
857
+ "max-h-50 overflow-y-auto"
858
+ // 항목이 너무 많으면 스크롤 생성 (디자인 스펙: 그림자 없음)
723
859
  ),
724
- children: options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
860
+ children: options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
725
861
  SelectBoxOption,
726
862
  {
727
863
  label: option,
@@ -738,7 +874,7 @@ var FormSelectBox = ({
738
874
  };
739
875
 
740
876
  // src/components/TextButton/TextButton.tsx
741
- var import_jsx_runtime21 = require("react/jsx-runtime");
877
+ var import_jsx_runtime22 = require("react/jsx-runtime");
742
878
  var TextButton = ({
743
879
  children,
744
880
  icon,
@@ -748,15 +884,15 @@ var TextButton = ({
748
884
  className,
749
885
  ...props
750
886
  }) => {
751
- const content = /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
752
- icon && iconPosition === "left" && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "flex shrink-0 items-center", children: icon }),
753
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: cn(underline && "underline underline-offset-2"), children }),
754
- icon && iconPosition === "right" && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "flex shrink-0 items-center", children: icon })
887
+ const content = /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
888
+ icon && iconPosition === "left" && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "flex shrink-0 items-center", children: icon }),
889
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: cn(underline && "underline underline-offset-2"), children }),
890
+ icon && iconPosition === "right" && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "flex shrink-0 items-center", children: icon })
755
891
  ] });
756
892
  const classes = cn(
757
893
  "inline-flex w-fit items-center gap-1 px-1 -mx-1",
758
894
  "text-caption-book",
759
- alert ? "text-danger" : "text-tertiary",
895
+ alert ? "text-danger" : "text-secondary",
760
896
  "hover:bg-gray00 active:bg-gray01 transition-colors",
761
897
  alert ? "hover:text-danger" : "hover:text-primary",
762
898
  "cursor-pointer select-none",
@@ -766,15 +902,15 @@ var TextButton = ({
766
902
  );
767
903
  if (props.href !== void 0) {
768
904
  const { href, ...rest } = props;
769
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("a", { href, className: classes, ...rest, children: content });
905
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("a", { href, className: classes, ...rest, children: content });
770
906
  }
771
907
  const buttonProps = props;
772
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("button", { type: "button", className: classes, ...buttonProps, children: content });
908
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("button", { type: "button", className: classes, ...buttonProps, children: content });
773
909
  };
774
910
 
775
911
  // src/components/Dropdown/Dropdown.tsx
776
912
  var import_react4 = require("react");
777
- var import_jsx_runtime22 = require("react/jsx-runtime");
913
+ var import_jsx_runtime23 = require("react/jsx-runtime");
778
914
  var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
779
915
  const [isOpen, setIsOpen] = (0, import_react4.useState)(false);
780
916
  const containerRef = (0, import_react4.useRef)(null);
@@ -789,8 +925,8 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
789
925
  document.removeEventListener("mousedown", handleClickOutside);
790
926
  };
791
927
  }, []);
792
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { ref: containerRef, className: "relative", children: [
793
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
928
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { ref: containerRef, className: "relative", children: [
929
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
794
930
  "div",
795
931
  {
796
932
  className: cn(
@@ -803,8 +939,8 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
803
939
  ),
804
940
  onClick: () => setIsOpen((prev) => !prev),
805
941
  children: [
806
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { children: selectedLabel }),
807
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
942
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { children: selectedLabel }),
943
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
808
944
  IconChevronDownXS,
809
945
  {
810
946
  className: cn("text-gray06 transition-transform", isOpen && "rotate-180"),
@@ -814,7 +950,7 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
814
950
  ]
815
951
  }
816
952
  ),
817
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: cn("absolute top-full right-0 z-10", "box-border border border-gray02"), children: labels.map((label) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
953
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: cn("absolute top-full right-0 z-10", "box-border border border-gray02"), children: labels.map((label) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
818
954
  SelectBoxOption,
819
955
  {
820
956
  label,
@@ -830,7 +966,7 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
830
966
  };
831
967
 
832
968
  // src/components/ListView/List.tsx
833
- var import_jsx_runtime23 = require("react/jsx-runtime");
969
+ var import_jsx_runtime24 = require("react/jsx-runtime");
834
970
  function List({
835
971
  className,
836
972
  label1,
@@ -843,7 +979,7 @@ function List({
843
979
  children,
844
980
  ...props
845
981
  }) {
846
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
982
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
847
983
  "li",
848
984
  {
849
985
  className: cn(
@@ -858,11 +994,11 @@ function List({
858
994
  ...props,
859
995
  onClick,
860
996
  children: [
861
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("section", { className: cn("flex items-center gap-4"), children: [
862
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { className: cn("text-body2-regular"), children: label1 ? label1 : "-" }),
863
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: cn("flex items-center gap-2"), children })
997
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("section", { className: cn("flex items-center gap-4"), children: [
998
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { className: cn("text-body2-regular"), children: label1 ? label1 : "-" }),
999
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: cn("flex items-center gap-2"), children })
864
1000
  ] }),
865
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1001
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
866
1002
  "label",
867
1003
  {
868
1004
  className: cn(
@@ -874,41 +1010,60 @@ function List({
874
1010
  children: label2 ? label2 : "-"
875
1011
  }
876
1012
  ),
877
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { className: cn("text-body3-regular text-right"), children: label3 ? label3 : "-" })
1013
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { className: cn("text-body3-regular text-right"), children: label3 ? label3 : "-" })
878
1014
  ]
879
1015
  }
880
1016
  );
881
1017
  }
882
1018
 
883
1019
  // src/components/Modal/Modal.tsx
884
- var import_jsx_runtime24 = require("react/jsx-runtime");
885
- var ModalBase = ({ isVisible, header, children, className }) => {
1020
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1021
+ var ModalBase = ({ isVisible, header, children, className, onClose }) => {
886
1022
  if (!isVisible) return null;
887
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: cn("fixed inset-0 z-50 pointer-events-auto"), children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
888
- "div",
889
- {
890
- className: cn("fixed inset-0 z-1001 flex items-center justify-center pointer-events-auto"),
891
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
892
- "main",
893
- {
894
- className: cn(
895
- "w-110 pt-8 h-fit",
896
- "flex flex-col items-center",
897
- "border border-gray02",
898
- "bg-white shadow-[0 0 30px 0 rgba(0, 0, 0, 0.08);]",
899
- 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-black/10", 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
+ }
900
1057
  ),
901
- children: [
902
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h1", { className: cn("text-strong font-[500] text-[24px] leading-[32px]"), children: header }),
903
- children
904
- ]
905
- }
906
- )
907
- }
908
- ) });
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
+ ] });
909
1064
  };
910
1065
  var Contents = ({ children, className }) => {
911
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1066
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
912
1067
  "div",
913
1068
  {
914
1069
  className: cn(
@@ -925,7 +1080,7 @@ var CTAs2 = ({ children, className, row = false }) => {
925
1080
  if (!children) return null;
926
1081
  return (
927
1082
  // CTA 버튼들을 중앙에 배치하는 예시 (우측 정렬이 필요하면 justify-end 사용)
928
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1083
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
929
1084
  "div",
930
1085
  {
931
1086
  className: cn(
@@ -944,9 +1099,9 @@ var Modal = Object.assign(ModalBase, {
944
1099
  });
945
1100
 
946
1101
  // src/components/Modal/ModalText.tsx
947
- var import_jsx_runtime25 = require("react/jsx-runtime");
1102
+ var import_jsx_runtime26 = require("react/jsx-runtime");
948
1103
  var ModalText = ({ children, className }) => {
949
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1104
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
950
1105
  "div",
951
1106
  {
952
1107
  className: cn(
@@ -962,14 +1117,14 @@ var ModalText = ({ children, className }) => {
962
1117
  };
963
1118
 
964
1119
  // src/components/createPost/CategorySegment.tsx
965
- var import_jsx_runtime26 = require("react/jsx-runtime");
1120
+ var import_jsx_runtime27 = require("react/jsx-runtime");
966
1121
  var CategorySegment = ({
967
1122
  selected = false,
968
1123
  label,
969
1124
  className,
970
1125
  onClick
971
1126
  }) => {
972
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1127
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
973
1128
  "div",
974
1129
  {
975
1130
  className: cn(
@@ -989,7 +1144,7 @@ var CategorySegment = ({
989
1144
  };
990
1145
 
991
1146
  // src/components/createPost/CategorySegmentedControl.tsx
992
- var import_jsx_runtime27 = require("react/jsx-runtime");
1147
+ var import_jsx_runtime28 = require("react/jsx-runtime");
993
1148
  var categorySegments = {
994
1149
  info: ["\uACF5\uC6A9 \uBB3C\uD488", "\uC77C\uBC18 \uAE30\uC790\uC7AC", "\uD2B9\uC218 \uAE30\uC790\uC7AC"],
995
1150
  archive: ["\uD504\uB9B0\uD2B8\uC2E4", "\uD64D\uC775\uC2DC\uB514"],
@@ -1003,8 +1158,8 @@ var CategorySegmentedControl = ({
1003
1158
  className
1004
1159
  }) => {
1005
1160
  const segments = categorySegments[variable];
1006
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: cn("w-full h-fit flex items-center justify-start", className), children: [
1007
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1161
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: cn("w-full h-fit flex items-center justify-start", className), children: [
1162
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1008
1163
  "div",
1009
1164
  {
1010
1165
  className: cn(
@@ -1017,7 +1172,7 @@ var CategorySegmentedControl = ({
1017
1172
  children: variable === "infoTag" ? "\uD0DC\uADF8 \uC120\uD0DD" : "\uCE74\uD14C\uACE0\uB9AC \uC120\uD0DD"
1018
1173
  }
1019
1174
  ),
1020
- segments.map((label) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1175
+ segments.map((label) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1021
1176
  CategorySegment,
1022
1177
  {
1023
1178
  label,
@@ -1030,9 +1185,9 @@ var CategorySegmentedControl = ({
1030
1185
  };
1031
1186
 
1032
1187
  // src/components/createPost/TitleInput.tsx
1033
- var import_jsx_runtime28 = require("react/jsx-runtime");
1188
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1034
1189
  var TitleInput = ({ title, onChange, className }) => {
1035
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1190
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1036
1191
  "input",
1037
1192
  {
1038
1193
  type: "text",
@@ -1052,9 +1207,9 @@ var TitleInput = ({ title, onChange, className }) => {
1052
1207
  };
1053
1208
 
1054
1209
  // src/components/notice/NoticeBadge.tsx
1055
- var import_jsx_runtime29 = require("react/jsx-runtime");
1210
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1056
1211
  var NoticeBadge = ({ variable, className, onClick }) => {
1057
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1212
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1058
1213
  "button",
1059
1214
  {
1060
1215
  type: "button",
@@ -1075,7 +1230,7 @@ var NoticeBadge = ({ variable, className, onClick }) => {
1075
1230
  };
1076
1231
 
1077
1232
  // src/components/notice/NoticeBar.tsx
1078
- var import_jsx_runtime30 = require("react/jsx-runtime");
1233
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1079
1234
  var NoticeBar = ({
1080
1235
  variable = "default",
1081
1236
  badgeVariable,
@@ -1084,7 +1239,7 @@ var NoticeBar = ({
1084
1239
  className,
1085
1240
  onClick
1086
1241
  }) => {
1087
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
1242
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
1088
1243
  "div",
1089
1244
  {
1090
1245
  className: cn(
@@ -1096,20 +1251,20 @@ var NoticeBar = ({
1096
1251
  ),
1097
1252
  onClick,
1098
1253
  children: [
1099
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("section", { className: "flex items-center gap-3", children: [
1100
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(NoticeBadge, { variable: badgeVariable }),
1101
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("h1", { className: "text-head1-medium text-strong", children: title })
1254
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("section", { className: "flex items-center gap-3", children: [
1255
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(NoticeBadge, { variable: badgeVariable }),
1256
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("h1", { className: "text-head1-medium text-strong", children: title })
1102
1257
  ] }),
1103
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "text-body3-book text-tertiary", children: date })
1258
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "text-body3-book text-tertiary", children: date })
1104
1259
  ]
1105
1260
  }
1106
1261
  );
1107
1262
  };
1108
1263
 
1109
1264
  // src/components/SearchBar/SearchBar.tsx
1110
- var import_jsx_runtime31 = require("react/jsx-runtime");
1265
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1111
1266
  var SearchBar = ({ value, onChange, className }) => {
1112
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
1267
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1113
1268
  "label",
1114
1269
  {
1115
1270
  className: cn(
@@ -1120,8 +1275,8 @@ var SearchBar = ({ value, onChange, className }) => {
1120
1275
  className
1121
1276
  ),
1122
1277
  children: [
1123
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(IconSearch, {}),
1124
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1278
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(IconSearch, {}),
1279
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1125
1280
  "input",
1126
1281
  {
1127
1282
  type: "text",
@@ -1157,20 +1312,8 @@ function useControllableState(controlled, defaultValue) {
1157
1312
  return [value, setValue, isControlled];
1158
1313
  }
1159
1314
 
1160
- // src/components/SideRadioAccordion/Exclamation.svg
1161
- var Exclamation_default = "./Exclamation-IUYZYYC4.svg";
1162
-
1163
- // src/components/SideRadioAccordion/ChevronDown.svg
1164
- var ChevronDown_default = "./ChevronDown-XSALXCW4.svg";
1165
-
1166
- // src/components/SideRadioAccordion/RadioSelected.svg
1167
- var RadioSelected_default = "./RadioSelected-DOLVV7ZM.svg";
1168
-
1169
- // src/components/SideRadioAccordion/RadioUnselected.svg
1170
- var RadioUnselected_default = "./RadioUnselected-QN74EU46.svg";
1171
-
1172
1315
  // src/components/SideRadioAccordion/SideRadioAccordion.tsx
1173
- var import_jsx_runtime32 = require("react/jsx-runtime");
1316
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1174
1317
  var printColorBgClass = {
1175
1318
  Plotter: "bg-print-plotter",
1176
1319
  Printer: "bg-print-printer",
@@ -1214,8 +1357,8 @@ var SideRadioAccordion = (0, import_react6.forwardRef)(
1214
1357
  setIsOpen(next);
1215
1358
  onOpenChange?.(next);
1216
1359
  };
1217
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { ref, className: cn("w-full", className), children: [
1218
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1360
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { ref, className: cn("w-full border-r border-gray02 bg-white", className), children: [
1361
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1219
1362
  Stepper,
1220
1363
  {
1221
1364
  step,
@@ -1226,8 +1369,8 @@ var SideRadioAccordion = (0, import_react6.forwardRef)(
1226
1369
  className: cn(stickyHeader && "sticky top-0 z-10")
1227
1370
  }
1228
1371
  ),
1229
- expanded && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex flex-col", children: [
1230
- radioToggleList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1372
+ expanded && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex flex-col divide-y divide-gray02", children: [
1373
+ radioToggleList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1231
1374
  RadioToggleItem,
1232
1375
  {
1233
1376
  ...item,
@@ -1236,29 +1379,22 @@ var SideRadioAccordion = (0, import_react6.forwardRef)(
1236
1379
  },
1237
1380
  itemKey(item)
1238
1381
  )),
1239
- quantityLimitLabel && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1240
- TextButton2,
1241
- {
1242
- label: quantityLimitLabel,
1243
- onClick: onClickQuantityLimit,
1244
- className: "mt-2"
1245
- }
1246
- )
1382
+ quantityLimitLabel && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "px-5 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TextButton2, { label: quantityLimitLabel, onClick: onClickQuantityLimit }) })
1247
1383
  ] })
1248
1384
  ] });
1249
1385
  }
1250
1386
  );
1251
1387
  var Stepper = ({ step, title, isOpen, collapsible, onClick, className }) => {
1252
- const label = /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { children: [
1388
+ const label = /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { children: [
1253
1389
  step,
1254
1390
  " | ",
1255
1391
  title
1256
1392
  ] });
1257
- const base = "w-full flex items-center justify-between px-3 py-2.5 text-body1-medium text-strong text-left bg-white";
1393
+ 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";
1258
1394
  if (!collapsible) {
1259
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: cn(base, className), children: label });
1395
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: cn(base, className), children: label });
1260
1396
  }
1261
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1397
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1262
1398
  "button",
1263
1399
  {
1264
1400
  type: "button",
@@ -1266,14 +1402,7 @@ var Stepper = ({ step, title, isOpen, collapsible, onClick, className }) => {
1266
1402
  className: cn(base, "cursor-pointer hover:bg-gray00 active:bg-gray01", className),
1267
1403
  children: [
1268
1404
  label,
1269
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1270
- "img",
1271
- {
1272
- src: ChevronDown_default,
1273
- alt: "",
1274
- className: cn("transition-transform", isOpen && "rotate-180")
1275
- }
1276
- )
1405
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(IconChevronDownXS, { className: cn("transition-transform", isOpen && "rotate-180") })
1277
1406
  ]
1278
1407
  }
1279
1408
  );
@@ -1292,29 +1421,29 @@ var RadioToggleItem = ({
1292
1421
  }) => {
1293
1422
  const rowBg = !open ? "bg-white hover:bg-gray00" : color ? void 0 : printColor ? printColorBgClass[printColor] : "bg-gray00";
1294
1423
  const style = open && color ? { backgroundColor: color } : void 0;
1295
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "w-full", children: [
1296
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1424
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "w-full", children: [
1425
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1297
1426
  "button",
1298
1427
  {
1299
1428
  type: "button",
1300
1429
  onClick: onSelect,
1301
1430
  style,
1302
1431
  className: cn(
1303
- "w-full flex items-center gap-1.5 px-3 py-2.5",
1304
- "text-body2-regular text-primary text-left cursor-pointer",
1432
+ "w-full flex items-center gap-1.5 p-3",
1433
+ "text-body1-regular text-secondary text-left cursor-pointer",
1305
1434
  rowBg,
1306
1435
  className
1307
1436
  ),
1308
1437
  children: [
1309
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Radio, { selected: open }),
1310
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: title })
1438
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Radio, { selected: open }),
1439
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children: title })
1311
1440
  ]
1312
1441
  }
1313
1442
  ),
1314
- open && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex flex-col gap-2 px-3 py-3 bg-white", children: [
1315
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-caption-regular text-secondary", children: content }),
1316
- badges && badges.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "flex gap-1", children: badges.map((badge) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Badge, { label: badge }, badge)) }),
1317
- labelTextButton && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1443
+ open && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex flex-col gap-2 px-3 py-3 bg-white", children: [
1444
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "text-caption-regular text-secondary", children: content }),
1445
+ 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)) }),
1446
+ labelTextButton && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1318
1447
  TextButton2,
1319
1448
  {
1320
1449
  label: labelTextButton,
@@ -1327,17 +1456,11 @@ var RadioToggleItem = ({
1327
1456
  ] });
1328
1457
  };
1329
1458
  var Radio = ({ selected = false, className }) => {
1330
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1331
- "img",
1332
- {
1333
- src: selected ? RadioSelected_default : RadioUnselected_default,
1334
- alt: "",
1335
- className: cn("w-4 h-4", className)
1336
- }
1337
- );
1459
+ const Icon = selected ? IconRadioSelected : IconRadioUnselected;
1460
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon, { className: cn("w-6 h-6", className) });
1338
1461
  };
1339
1462
  var TextButton2 = ({ label, onClick, showIcon = false, className }) => {
1340
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1463
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1341
1464
  "button",
1342
1465
  {
1343
1466
  type: "button",
@@ -1350,18 +1473,18 @@ var TextButton2 = ({ label, onClick, showIcon = false, className }) => {
1350
1473
  className
1351
1474
  ),
1352
1475
  children: [
1353
- showIcon && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("img", { src: Exclamation_default, alt: "" }),
1476
+ showIcon && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(IconExclamation, {}),
1354
1477
  label
1355
1478
  ]
1356
1479
  }
1357
1480
  );
1358
1481
  };
1359
1482
  var Badge = ({ label, className }) => {
1360
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1483
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1361
1484
  "div",
1362
1485
  {
1363
1486
  className: cn(
1364
- "w-fit h-fit px-2 py-0.5 border border-gray02",
1487
+ "w-fit h-fit px-2 py-0.5 border border-gray02 shrink-0 whitespace-nowrap",
1365
1488
  "text-tertiary text-caption-book",
1366
1489
  className
1367
1490
  ),
@@ -1371,7 +1494,7 @@ var Badge = ({ label, className }) => {
1371
1494
  };
1372
1495
 
1373
1496
  // src/components/Tag/Tag.tsx
1374
- var import_jsx_runtime33 = require("react/jsx-runtime");
1497
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1375
1498
  var Tag = ({
1376
1499
  className,
1377
1500
  children,
@@ -1381,7 +1504,7 @@ var Tag = ({
1381
1504
  onClick,
1382
1505
  ...props
1383
1506
  }) => {
1384
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1507
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1385
1508
  "button",
1386
1509
  {
1387
1510
  className: cn(
@@ -1400,7 +1523,7 @@ var Tag = ({
1400
1523
  disabled,
1401
1524
  style: bgColor ? { backgroundColor: bgColor, border: "none" } : void 0,
1402
1525
  ...props,
1403
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children })
1526
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children })
1404
1527
  }
1405
1528
  );
1406
1529
  };
@@ -1442,7 +1565,7 @@ var formatWeekRange = (weekStart) => {
1442
1565
  };
1443
1566
 
1444
1567
  // src/components/Timetable/WeekNavigation.tsx
1445
- var import_jsx_runtime34 = require("react/jsx-runtime");
1568
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1446
1569
  var weekLabel = {
1447
1570
  thisWeek: "\uC774\uBC88 \uC8FC",
1448
1571
  nextWeek: "\uB2E4\uC74C \uC8FC",
@@ -1453,53 +1576,62 @@ var WeekNavigation = (0, import_react7.forwardRef)(
1453
1576
  const showPrev = canPrev ?? (week ? week !== "thisWeek" : true);
1454
1577
  const showNext = canNext ?? (week ? week !== "twoWeeksLater" : true);
1455
1578
  const text = label ?? (week ? `${weekLabel[week]} (${formatWeekRange(date)})` : formatWeekRange(date));
1456
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1579
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
1457
1580
  "div",
1458
1581
  {
1459
1582
  ref,
1460
1583
  className: cn(
1461
- "flex items-center justify-between",
1462
- "w-full h-11 px-3",
1463
- "bg-white border border-gray02",
1464
- "text-body2-regular text-primary",
1584
+ "flex items-stretch justify-between",
1585
+ "w-full h-12",
1586
+ "bg-white border-b border-gray02",
1587
+ "text-body1-medium text-secondary",
1465
1588
  className
1466
1589
  ),
1467
1590
  children: [
1468
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(ArrowButton, { direction: "left", visible: showPrev, onClick: onPrevWeek }),
1469
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: text }),
1470
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(ArrowButton, { direction: "right", visible: showNext, onClick: onNextWeek })
1591
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ArrowButton, { direction: "left", visible: showPrev, onClick: onPrevWeek }),
1592
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "flex flex-1 items-center justify-center text-center", children: text }),
1593
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ArrowButton, { direction: "right", visible: showNext, onClick: onNextWeek })
1471
1594
  ]
1472
1595
  }
1473
1596
  );
1474
1597
  }
1475
1598
  );
1476
1599
  var ArrowButton = ({ direction, visible, onClick }) => {
1600
+ const divider = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" });
1477
1601
  if (!visible) {
1478
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "w-6 h-6" });
1602
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex items-stretch", children: [
1603
+ direction === "right" && divider,
1604
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "w-[42px]" }),
1605
+ direction === "left" && divider
1606
+ ] });
1479
1607
  }
1480
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1481
- "button",
1482
- {
1483
- type: "button",
1484
- onClick,
1485
- className: cn(
1486
- "flex items-center justify-center w-6 h-6",
1487
- "text-gray06 cursor-pointer",
1488
- "hover:bg-gray00 active:bg-gray01"
1489
- ),
1490
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1491
- IconChevronDownXS,
1492
- {
1493
- className: direction === "left" ? "rotate-90" : "-rotate-90",
1494
- stroke: "currentColor"
1495
- }
1496
- )
1497
- }
1498
- );
1608
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex items-stretch", children: [
1609
+ direction === "right" && divider,
1610
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1611
+ "button",
1612
+ {
1613
+ type: "button",
1614
+ onClick,
1615
+ className: cn(
1616
+ "flex w-[42px] items-center justify-center",
1617
+ "text-gray06 cursor-pointer transition-colors",
1618
+ "hover:bg-gray00 active:bg-gray01"
1619
+ ),
1620
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1621
+ IconChevronDownXS,
1622
+ {
1623
+ className: direction === "left" ? "rotate-90" : "-rotate-90",
1624
+ stroke: "currentColor"
1625
+ }
1626
+ )
1627
+ }
1628
+ ),
1629
+ direction === "left" && divider
1630
+ ] });
1499
1631
  };
1500
1632
 
1501
1633
  // src/components/Timetable/Timetable.tsx
1502
- var import_jsx_runtime35 = require("react/jsx-runtime");
1634
+ var import_jsx_runtime36 = require("react/jsx-runtime");
1503
1635
  var printColorHoverClass = {
1504
1636
  Plotter: "hover:bg-print-plotter",
1505
1637
  Printer: "hover:bg-print-printer",
@@ -1522,8 +1654,8 @@ var Timetable = (0, import_react8.forwardRef)(function Timetable2({
1522
1654
  canNextWeek,
1523
1655
  className
1524
1656
  }, ref) {
1525
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { ref, className: cn(fluid && "w-full", className), children: [
1526
- !hideWeekNavigation && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1657
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { ref, className: cn(fluid && "w-full", className), children: [
1658
+ !hideWeekNavigation && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1527
1659
  WeekNavigation,
1528
1660
  {
1529
1661
  date: weekStart,
@@ -1534,7 +1666,7 @@ var Timetable = (0, import_react8.forwardRef)(function Timetable2({
1534
1666
  onNextWeek
1535
1667
  }
1536
1668
  ),
1537
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: cn("flex", fluid && "w-full"), children: days.map((day) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1669
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: cn("flex", fluid && "w-full"), children: days.map((day) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1538
1670
  DailyTimetable,
1539
1671
  {
1540
1672
  date: day.date,
@@ -1547,9 +1679,9 @@ var Timetable = (0, import_react8.forwardRef)(function Timetable2({
1547
1679
  ] });
1548
1680
  });
1549
1681
  var DailyTimetable = ({ date, slots, fluid, onSelectTime, className }) => {
1550
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: cn("flex flex-col", fluid ? "flex-1 min-w-0" : "w-18", className), children: [
1551
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "h-13 flex items-center justify-center text-body3-medium text-secondary", children: formatDayLabel(date) }),
1552
- slots.map((slot) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1682
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: cn("flex flex-col", fluid ? "flex-1 min-w-0" : "w-18", className), children: [
1683
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "h-12 flex items-center justify-center border-b border-gray02 text-body1-regular text-secondary", children: formatDayLabel(date) }),
1684
+ slots.map((slot) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1553
1685
  TimeItem,
1554
1686
  {
1555
1687
  state: slot.state,
@@ -1575,17 +1707,17 @@ var TimeItem = ({
1575
1707
  }) => {
1576
1708
  const clickable = (state === "default" || state === "selected") && !!onClick;
1577
1709
  const style = state === "default" && color ? { "--tt-hover": color } : void 0;
1578
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1710
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1579
1711
  "div",
1580
1712
  {
1581
1713
  onClick: clickable ? onClick : void 0,
1582
1714
  style,
1583
1715
  className: cn(
1584
- "h-18 flex items-center justify-center",
1716
+ "h-18 flex items-center justify-center border-b border-gray02",
1585
1717
  fluid ? "w-full" : "w-18",
1586
1718
  "text-body1-medium text-center bg-white text-primary",
1587
1719
  state === "none" && "bg-gray00 text-transparent",
1588
- state === "selected" && "bg-black text-gray02 hover:cursor-pointer",
1720
+ state === "selected" && "bg-black text-white hover:cursor-pointer",
1589
1721
  state === "disabled" && "bg-gray00 text-gray03",
1590
1722
  state === "default" && [
1591
1723
  "hover:cursor-pointer",
@@ -1600,7 +1732,7 @@ var TimeItem = ({
1600
1732
 
1601
1733
  // src/components/TNB/TNB.tsx
1602
1734
  var import_react9 = require("react");
1603
- var import_jsx_runtime36 = require("react/jsx-runtime");
1735
+ var import_jsx_runtime37 = require("react/jsx-runtime");
1604
1736
  function useControllableState2(controlled, defaultValue) {
1605
1737
  const isControlled = controlled !== void 0;
1606
1738
  const [uncontrolled, setUncontrolled] = (0, import_react9.useState)(defaultValue);
@@ -1652,8 +1784,8 @@ var TNB = (0, import_react9.forwardRef)(function TNB2({
1652
1784
  setLowerValue(label);
1653
1785
  onSelectedLowerChange?.(label);
1654
1786
  };
1655
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("nav", { ref, "aria-label": ariaLabel, className: cn("w-full bg-white", className), children: [
1656
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1787
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("nav", { ref, "aria-label": ariaLabel, className: cn("w-full bg-white", className), children: [
1788
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1657
1789
  UpperPart,
1658
1790
  {
1659
1791
  logo,
@@ -1664,7 +1796,7 @@ var TNB = (0, import_react9.forwardRef)(function TNB2({
1664
1796
  linkComponent
1665
1797
  }
1666
1798
  ),
1667
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1799
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1668
1800
  LowerPart,
1669
1801
  {
1670
1802
  lowerPartItemList: currentLowerItemList,
@@ -1679,7 +1811,7 @@ var NavClickable = (0, import_react9.forwardRef)(function NavClickable2({ href,
1679
1811
  const ariaCurrent = current ? "page" : void 0;
1680
1812
  if (href && !disabled) {
1681
1813
  if (Link) {
1682
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1814
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1683
1815
  Link,
1684
1816
  {
1685
1817
  href,
@@ -1691,7 +1823,7 @@ var NavClickable = (0, import_react9.forwardRef)(function NavClickable2({ href,
1691
1823
  }
1692
1824
  );
1693
1825
  }
1694
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1826
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1695
1827
  "a",
1696
1828
  {
1697
1829
  href,
@@ -1703,7 +1835,7 @@ var NavClickable = (0, import_react9.forwardRef)(function NavClickable2({ href,
1703
1835
  }
1704
1836
  );
1705
1837
  }
1706
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1838
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1707
1839
  "button",
1708
1840
  {
1709
1841
  type: "button",
@@ -1725,33 +1857,50 @@ var UpperPart = ({
1725
1857
  linkComponent,
1726
1858
  className
1727
1859
  }) => {
1728
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: cn("w-full h-13 px-4 flex items-center justify-between", className), children: [
1729
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex items-center gap-6", children: [
1730
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(NavIconButton, { ...logo, linkComponent }),
1731
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "flex items-center gap-4", children: upperPartItemList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1732
- UpperPartTab,
1733
- {
1734
- label: item.label,
1735
- href: item.href,
1736
- selected: item.label === selected,
1737
- linkComponent,
1738
- onClick: () => {
1739
- item.onClick?.();
1740
- onSelectItem(item.label);
1741
- }
1742
- },
1743
- item.id ?? item.label
1744
- )) })
1745
- ] }),
1746
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "flex items-center gap-2", children: upperPartIconList.map((icon, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1747
- NavIconButton,
1748
- {
1749
- ...icon,
1750
- linkComponent
1751
- },
1752
- icon.id ?? icon.src ?? icon.label ?? index
1753
- )) })
1754
- ] });
1860
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
1861
+ "div",
1862
+ {
1863
+ className: cn(
1864
+ "w-full min-h-13 flex items-stretch justify-between border-b border-gray02",
1865
+ className
1866
+ ),
1867
+ children: [
1868
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-stretch", children: [
1869
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "flex w-14 shrink-0 items-center justify-center px-3", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(NavIconButton, { ...logo, linkComponent }) }),
1870
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-stretch", children: [
1871
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
1872
+ upperPartItemList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react9.Fragment, { children: [
1873
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1874
+ UpperPartTab,
1875
+ {
1876
+ label: item.label,
1877
+ href: item.href,
1878
+ selected: item.label === selected,
1879
+ linkComponent,
1880
+ onClick: () => {
1881
+ item.onClick?.();
1882
+ onSelectItem(item.label);
1883
+ }
1884
+ }
1885
+ ),
1886
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
1887
+ ] }, item.id ?? item.label))
1888
+ ] })
1889
+ ] }),
1890
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-stretch", children: [
1891
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
1892
+ upperPartIconList.map((icon, index) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1893
+ NavIconButton,
1894
+ {
1895
+ ...icon,
1896
+ linkComponent
1897
+ },
1898
+ icon.id ?? icon.src ?? icon.label ?? index
1899
+ ))
1900
+ ] })
1901
+ ]
1902
+ }
1903
+ );
1755
1904
  };
1756
1905
  var UpperPartTab = ({
1757
1906
  label,
@@ -1761,7 +1910,7 @@ var UpperPartTab = ({
1761
1910
  linkComponent,
1762
1911
  className
1763
1912
  }) => {
1764
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1913
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
1765
1914
  NavClickable,
1766
1915
  {
1767
1916
  href,
@@ -1769,11 +1918,14 @@ var UpperPartTab = ({
1769
1918
  linkComponent,
1770
1919
  current: selected,
1771
1920
  className: cn(
1772
- "inline-flex px-1 py-1.5 text-body2-regular cursor-pointer no-underline",
1773
- selected ? "text-strong font-medium underline underline-offset-4" : "text-quaternary hover:text-secondary",
1921
+ "inline-flex min-h-13 flex-col items-center gap-2 pt-2.5 cursor-pointer no-underline",
1922
+ "transition-colors hover:bg-gray00 active:bg-gray01",
1774
1923
  className
1775
1924
  ),
1776
- children: label
1925
+ children: [
1926
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: cn("px-5 text-head1-medium", selected ? "text-strong" : "text-quaternary"), children: label }),
1927
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: cn("h-0.5 w-full", selected ? "bg-black" : "bg-transparent") })
1928
+ ]
1777
1929
  }
1778
1930
  );
1779
1931
  };
@@ -1781,7 +1933,7 @@ var NavIconButton = (0, import_react9.forwardRef)(
1781
1933
  function NavIconButton2({ src, icon, alt, label, href, onClick, selected, badge, className, linkComponent }, forwardedRef) {
1782
1934
  const interactive = Boolean(onClick || href);
1783
1935
  const showBadge = badge !== void 0 && badge !== null && badge !== false;
1784
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
1936
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
1785
1937
  NavClickable,
1786
1938
  {
1787
1939
  ref: forwardedRef,
@@ -1791,15 +1943,15 @@ var NavIconButton = (0, import_react9.forwardRef)(
1791
1943
  current: selected,
1792
1944
  disabled: !interactive,
1793
1945
  className: cn(
1794
- "relative inline-flex h-8 min-w-8 items-center justify-center gap-1.5 rounded-full px-1.5",
1946
+ "relative inline-flex h-13 min-w-13 items-center justify-center gap-1.5 px-3 transition-colors",
1795
1947
  interactive && "cursor-pointer",
1796
1948
  selected ? "bg-black text-white" : "bg-transparent hover:bg-gray00 active:bg-gray01",
1797
1949
  className
1798
1950
  ),
1799
1951
  children: [
1800
- icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "inline-flex h-5 w-5 items-center justify-center", children: icon }) : src ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("img", { src, alt: alt ?? label ?? "", className: "h-5 w-5" }) : null,
1801
- label ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: cn("text-body2-regular", selected ? "text-white" : "text-secondary"), children: label }) : null,
1802
- showBadge ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1952
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "inline-flex h-6 w-6 items-center justify-center", children: icon }) : src ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("img", { src, alt: alt ?? label ?? "", className: "h-6 w-6" }) : null,
1953
+ label ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: cn("text-body2-regular", selected ? "text-white" : "text-secondary"), children: label }) : null,
1954
+ showBadge ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1803
1955
  "span",
1804
1956
  {
1805
1957
  "aria-hidden": badge === true,
@@ -1825,24 +1977,29 @@ var LowerPart = ({
1825
1977
  if (lowerPartItemList.length === 0) {
1826
1978
  return null;
1827
1979
  }
1828
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1980
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
1829
1981
  "div",
1830
1982
  {
1831
- className: cn("w-full h-9 px-4 flex items-center gap-4 border-t border-gray02", className),
1832
- children: lowerPartItemList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1833
- LowerPartItemButton,
1834
- {
1835
- label: item.label,
1836
- href: item.href,
1837
- selected: item.label === selected,
1838
- linkComponent,
1839
- onClick: () => {
1840
- item.onClick?.();
1841
- onSelectItem(item.label);
1842
- }
1843
- },
1844
- item.id ?? item.label
1845
- ))
1983
+ className: cn("w-full h-[42px] pl-14 flex items-stretch border-b border-gray02", className),
1984
+ children: [
1985
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
1986
+ lowerPartItemList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react9.Fragment, { children: [
1987
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1988
+ LowerPartItemButton,
1989
+ {
1990
+ label: item.label,
1991
+ href: item.href,
1992
+ selected: item.label === selected,
1993
+ linkComponent,
1994
+ onClick: () => {
1995
+ item.onClick?.();
1996
+ onSelectItem(item.label);
1997
+ }
1998
+ }
1999
+ ),
2000
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
2001
+ ] }, item.id ?? item.label))
2002
+ ]
1846
2003
  }
1847
2004
  );
1848
2005
  };
@@ -1854,7 +2011,7 @@ var LowerPartItemButton = ({
1854
2011
  linkComponent,
1855
2012
  className
1856
2013
  }) => {
1857
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2014
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1858
2015
  NavClickable,
1859
2016
  {
1860
2017
  href,
@@ -1862,9 +2019,9 @@ var LowerPartItemButton = ({
1862
2019
  linkComponent,
1863
2020
  current: selected,
1864
2021
  className: cn(
1865
- "inline-flex px-1.5 py-1 text-caption-regular cursor-pointer no-underline",
1866
- "hover:bg-gray00 active:bg-gray01",
1867
- selected ? "text-strong font-medium" : "text-quaternary",
2022
+ "inline-flex h-full items-center justify-center px-5 text-head3-medium cursor-pointer no-underline",
2023
+ "transition-colors hover:bg-gray00 active:bg-gray01",
2024
+ selected ? "text-strong" : "text-quaternary",
1868
2025
  className
1869
2026
  ),
1870
2027
  children: label
@@ -1874,7 +2031,7 @@ var LowerPartItemButton = ({
1874
2031
 
1875
2032
  // src/components/Toast/Toast.tsx
1876
2033
  var import_react10 = require("react");
1877
- var import_jsx_runtime37 = require("react/jsx-runtime");
2034
+ var import_jsx_runtime38 = require("react/jsx-runtime");
1878
2035
  var EXIT_MS = 300;
1879
2036
  var Toast = (0, import_react10.forwardRef)(function Toast2({ message, open, duration = 3e3, onClose, position = "none", className }, ref) {
1880
2037
  const controlled = open !== void 0;
@@ -1897,7 +2054,7 @@ var Toast = (0, import_react10.forwardRef)(function Toast2({ message, open, dura
1897
2054
  return () => clearTimeout(timer);
1898
2055
  }, [controlled, open, duration, onClose]);
1899
2056
  if (!mounted) return null;
1900
- const banner = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2057
+ const banner = /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
1901
2058
  "div",
1902
2059
  {
1903
2060
  ref,
@@ -1905,7 +2062,7 @@ var Toast = (0, import_react10.forwardRef)(function Toast2({ message, open, dura
1905
2062
  "aria-live": "polite",
1906
2063
  className: cn(
1907
2064
  "w-full h-fit py-2.5 bg-gray06",
1908
- "font-pretendard text-white text-center font-semibold text-[17px]",
2065
+ "font-pretendard text-white text-center font-semibold text-[17px] leading-[1.6]",
1909
2066
  "shadow-[0_2px_15px_rgba(0,0,0,0.18)]",
1910
2067
  controlled && "transition-opacity duration-300",
1911
2068
  controlled && (visible ? "opacity-100" : "opacity-0"),
@@ -1915,7 +2072,7 @@ var Toast = (0, import_react10.forwardRef)(function Toast2({ message, open, dura
1915
2072
  }
1916
2073
  );
1917
2074
  if (position === "none") return banner;
1918
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2075
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
1919
2076
  "div",
1920
2077
  {
1921
2078
  className: cn(
@@ -1935,6 +2092,8 @@ var Toast = (0, import_react10.forwardRef)(function Toast2({ message, open, dura
1935
2092
  CategorySegmentedControl,
1936
2093
  Column,
1937
2094
  ColumnContentContainer,
2095
+ ColumnDescription,
2096
+ ColumnDescriptionList,
1938
2097
  ColumnLabel,
1939
2098
  ColumnSubTitle,
1940
2099
  ColumnText,
@@ -1951,7 +2110,12 @@ var Toast = (0, import_react10.forwardRef)(function Toast2({ message, open, dura
1951
2110
  FormTextArea,
1952
2111
  IconCheck,
1953
2112
  IconChevronDownXS,
2113
+ IconClose,
2114
+ IconCompass,
2115
+ IconExclamation,
1954
2116
  IconInfo,
2117
+ IconRadioSelected,
2118
+ IconRadioUnselected,
1955
2119
  List,
1956
2120
  Modal,
1957
2121
  ModalText,