@hivcd-printshop/design-system 1.1.1 → 1.2.1

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.mjs CHANGED
@@ -54,6 +54,20 @@ var IconChevronDownXS = ({
54
54
  }
55
55
  );
56
56
  };
57
+ var IconCheck = ({ className, stroke }) => {
58
+ return /* @__PURE__ */ jsx(
59
+ "svg",
60
+ {
61
+ className,
62
+ width: "13",
63
+ height: "13",
64
+ viewBox: "0 0 13 13",
65
+ fill: "none",
66
+ xmlns: "http://www.w3.org/2000/svg",
67
+ children: /* @__PURE__ */ jsx("path", { d: "M2.05566 7.0555L4.83344 9.8333L10.9446 3.72217", stroke: stroke || "#121212" })
68
+ }
69
+ );
70
+ };
57
71
  var IconSearch = ({ className, stroke }) => {
58
72
  return /* @__PURE__ */ jsxs(
59
73
  "svg",
@@ -88,6 +102,32 @@ var IconSearch = ({ className, stroke }) => {
88
102
  }
89
103
  );
90
104
  };
105
+ var IconInfo = ({ className, stroke }) => {
106
+ return /* @__PURE__ */ jsxs(
107
+ "svg",
108
+ {
109
+ className,
110
+ width: "16",
111
+ height: "16",
112
+ viewBox: "0 0 16 16",
113
+ fill: "none",
114
+ xmlns: "http://www.w3.org/2000/svg",
115
+ children: [
116
+ /* @__PURE__ */ jsx("circle", { cx: "8", cy: "8", r: "6.25", stroke: stroke || "#8b94a1", strokeWidth: "1.5" }),
117
+ /* @__PURE__ */ jsx(
118
+ "path",
119
+ {
120
+ d: "M8 7.25V11.25",
121
+ stroke: stroke || "#8b94a1",
122
+ strokeWidth: "1.5",
123
+ strokeLinecap: "round"
124
+ }
125
+ ),
126
+ /* @__PURE__ */ jsx("circle", { cx: "8", cy: "5", r: "0.9", fill: stroke || "#8b94a1" })
127
+ ]
128
+ }
129
+ );
130
+ };
91
131
  var IconGoBack = ({ className, stroke }) => {
92
132
  return /* @__PURE__ */ jsxs(
93
133
  "svg",
@@ -113,6 +153,28 @@ var IconGoBack = ({ className, stroke }) => {
113
153
  }
114
154
  );
115
155
  };
156
+ var IconCompass = ({ className, fill }) => {
157
+ return /* @__PURE__ */ jsx(
158
+ "svg",
159
+ {
160
+ className,
161
+ width: "16",
162
+ height: "16",
163
+ viewBox: "0 0 16 16",
164
+ fill: "none",
165
+ xmlns: "http://www.w3.org/2000/svg",
166
+ children: /* @__PURE__ */ jsx(
167
+ "path",
168
+ {
169
+ fillRule: "evenodd",
170
+ clipRule: "evenodd",
171
+ 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",
172
+ fill: fill || "#121212"
173
+ }
174
+ )
175
+ }
176
+ );
177
+ };
116
178
 
117
179
  // src/components/BackButton/BackButton.tsx
118
180
  import { jsx as jsx2 } from "react/jsx-runtime";
@@ -174,15 +236,720 @@ var CTA = ({
174
236
  );
175
237
  };
176
238
 
177
- // src/components/createPost/CategorySegment.tsx
239
+ // src/components/Column/MultiColumn.tsx
178
240
  import { jsx as jsx4 } from "react/jsx-runtime";
241
+ var MultiColumnMain = ({ children, className }) => {
242
+ return /* @__PURE__ */ jsx4("div", { className: cn("flex flex-col w-full h-full", className), children });
243
+ };
244
+ var Columns = ({ children, className }) => {
245
+ return (
246
+ // flex 래퍼를 사용하고 하위 Column들이 flex-1을 가지게 하거나,
247
+ // grid를 사용하여 열을 나눌 수 있어. 여기서는 flex를 활용한 균등 분할 예시야.
248
+ /* @__PURE__ */ jsx4("div", { className: cn("flex w-full h-full divide-x divide-gray02", className), children })
249
+ );
250
+ };
251
+ var CTAs = ({ children, className }) => {
252
+ if (!children) return null;
253
+ return (
254
+ // CTA 버튼들을 중앙에 배치하는 예시 (우측 정렬이 필요하면 justify-end 사용)
255
+ /* @__PURE__ */ jsx4("div", { className: cn("flex flex-col w-full h-fit", className), children })
256
+ );
257
+ };
258
+ var MultiColumn = Object.assign(MultiColumnMain, {
259
+ Columns,
260
+ CTAs
261
+ });
262
+
263
+ // src/components/Column/Column.tsx
264
+ import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
265
+ var Column = ({ className, children, header }) => {
266
+ return /* @__PURE__ */ jsxs2("div", { className: cn("flex flex-col gap-5", "h-full w-full px-5 py-3", className), children: [
267
+ header && /* @__PURE__ */ jsx5("h1", { className: cn("text-body1-medium text-primary"), children: header }),
268
+ children
269
+ ] });
270
+ };
271
+
272
+ // src/components/Column/ColumnContentContainer.tsx
273
+ import { jsx as jsx6 } from "react/jsx-runtime";
274
+ var ColumnContentContainer = ({ className, children }) => {
275
+ return /* @__PURE__ */ jsx6("div", { className: cn("flex flex-col gap-1.5 w-full h-fit", className), children });
276
+ };
277
+
278
+ // src/components/Column/ColumnLabel.tsx
279
+ import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
280
+ var ColumnLabel = ({ className, children, subLabel, htmlFor }) => {
281
+ return /* @__PURE__ */ jsxs3("label", { htmlFor, className: cn("flex gap-1.5 items-end", className), children: [
282
+ /* @__PURE__ */ jsx7("span", { className: cn("text-body2-regular text-tertiary"), children }),
283
+ subLabel && /* @__PURE__ */ jsx7("span", { className: cn("text-caption-book text-quaternary"), children: subLabel })
284
+ ] });
285
+ };
286
+
287
+ // src/components/Column/ColumnText.tsx
288
+ import { jsx as jsx8 } from "react/jsx-runtime";
289
+ var ColumnTextStyle = "text-body3-book text-strong";
290
+ var ModalTextStyle = "text-body1-regular text-primary";
291
+ var ColumnText = ({ className, alert = false, children, onClick }) => {
292
+ return /* @__PURE__ */ jsx8("div", { className: cn(ColumnTextStyle, alert && "text-danger", className), onClick, children: children ? children : "-" });
293
+ };
294
+
295
+ // src/components/Column/ColumnSubTitle.tsx
296
+ import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
297
+ var ColumnSubTitle = ({
298
+ className,
299
+ children,
300
+ action,
301
+ as: Tag2 = "h2"
302
+ }) => {
303
+ return /* @__PURE__ */ jsxs4(Tag2, { className: cn("flex items-center justify-between gap-1.5", "w-full", className), children: [
304
+ /* @__PURE__ */ jsx9("span", { className: cn("text-body1-medium text-primary"), children }),
305
+ action && /* @__PURE__ */ jsx9("span", { className: "flex shrink-0 items-center", children: action })
306
+ ] });
307
+ };
308
+
309
+ // src/components/Column/ColumnDescription.tsx
310
+ import { jsx as jsx10, jsxs as jsxs5 } from "react/jsx-runtime";
311
+ var ColumnDescription = ({
312
+ className,
313
+ children,
314
+ bullet = true
315
+ }) => {
316
+ return /* @__PURE__ */ jsxs5("div", { className: cn("flex items-start gap-3", className), children: [
317
+ bullet && /* @__PURE__ */ jsx10("span", { className: "flex shrink-0 items-center py-1", children: /* @__PURE__ */ jsx10(IconCompass, { className: "size-4" }) }),
318
+ /* @__PURE__ */ jsx10("div", { className: "min-w-0 flex-1 whitespace-pre-line text-body3-book text-primary", children })
319
+ ] });
320
+ };
321
+ var ColumnDescriptionList = ({ className, children }) => {
322
+ return /* @__PURE__ */ jsx10("div", { className: cn("flex flex-col gap-4", className), children });
323
+ };
324
+
325
+ // src/components/Form/BasicFormField.tsx
326
+ import { jsx as jsx11, jsxs as jsxs6 } from "react/jsx-runtime";
327
+ var BasicFormField = ({
328
+ children,
329
+ isDanger,
330
+ dangerText,
331
+ className
332
+ }) => {
333
+ return /* @__PURE__ */ jsxs6("div", { className: cn("flex flex-col gap-1.5", className), children: [
334
+ children,
335
+ isDanger && dangerText && /* @__PURE__ */ jsx11("span", { className: "text-caption-book text-danger", children: dangerText })
336
+ ] });
337
+ };
338
+ var getInputStyles = (isDanger, additionalClass) => {
339
+ return cn(
340
+ // 디자인 스펙: 높이 41px, 좌우 12px / 상하 10px 패딩
341
+ "w-full h-[41px] px-3 py-2.5",
342
+ "box-border border border-gray02 focus:outline-none focus:border-black",
343
+ "bg-white transition-colors",
344
+ ColumnTextStyle,
345
+ "text-primary placeholder:text-quaternary",
346
+ isDanger && "border-danger",
347
+ // 경고 시 빨간 테두리 (#E42939)
348
+ additionalClass
349
+ // 각 인풋별 추가 스타일 (예: textarea의 h-30)
350
+ );
351
+ };
352
+
353
+ // src/components/Form/FormText.tsx
354
+ import { jsx as jsx12 } from "react/jsx-runtime";
355
+ var FormText = ({ className, isDanger, dangerText, ...props }) => {
356
+ return /* @__PURE__ */ jsx12(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsx12("input", { type: "text", className: getInputStyles(isDanger, className), ...props }) });
357
+ };
358
+
359
+ // src/components/Form/FormTextArea.tsx
360
+ import { jsx as jsx13 } from "react/jsx-runtime";
361
+ var FormTextArea = ({ className, isDanger, dangerText, ...props }) => {
362
+ return /* @__PURE__ */ jsx13(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsx13(
363
+ "textarea",
364
+ {
365
+ className: getInputStyles(isDanger, "resize-none h-30 px-4 py-2.5 " + (className || "")),
366
+ ...props
367
+ }
368
+ ) });
369
+ };
370
+
371
+ // src/components/Form/FormNumber.tsx
372
+ import { jsx as jsx14 } from "react/jsx-runtime";
373
+ var FormNumber = ({ className, isDanger, dangerText, ...props }) => {
374
+ return /* @__PURE__ */ jsx14(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsx14("input", { type: "number", className: getInputStyles(isDanger, className), ...props }) });
375
+ };
376
+
377
+ // src/components/Form/FormPassword.tsx
378
+ import { jsx as jsx15 } from "react/jsx-runtime";
379
+ var FormPassword = ({ className, isDanger, dangerText, ...props }) => {
380
+ return /* @__PURE__ */ jsx15(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsx15("input", { type: "password", className: getInputStyles(isDanger, className), ...props }) });
381
+ };
382
+
383
+ // src/components/Form/FormTel.tsx
384
+ import { jsx as jsx16 } from "react/jsx-runtime";
385
+ var FormTel = ({ className, isDanger, dangerText, onChange, ...props }) => {
386
+ const handlePhoneChange = (e) => {
387
+ const rawValue = e.target.value.replace(/[^0-9]/g, "");
388
+ let formattedValue = "";
389
+ if (rawValue.length < 4) formattedValue = rawValue;
390
+ else if (rawValue.length < 8) formattedValue = `${rawValue.slice(0, 3)}-${rawValue.slice(3)}`;
391
+ else
392
+ formattedValue = `${rawValue.slice(0, 3)}-${rawValue.slice(3, 7)}-${rawValue.slice(7, 11)}`;
393
+ e.target.value = formattedValue;
394
+ if (onChange) onChange(e);
395
+ };
396
+ return /* @__PURE__ */ jsx16(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsx16(
397
+ "input",
398
+ {
399
+ type: "tel",
400
+ className: getInputStyles(isDanger, className),
401
+ onChange: handlePhoneChange,
402
+ maxLength: 13,
403
+ ...props
404
+ }
405
+ ) });
406
+ };
407
+
408
+ // src/components/Form/FormColor.tsx
409
+ import { useState } from "react";
410
+ import { jsx as jsx17, jsxs as jsxs7 } from "react/jsx-runtime";
411
+ var FormColor = ({
412
+ className,
413
+ isDanger,
414
+ dangerText,
415
+ value,
416
+ defaultValue = "#000000",
417
+ onChange,
418
+ ...props
419
+ }) => {
420
+ const [internalColor, setInternalColor] = useState(
421
+ value || defaultValue || "#000000"
422
+ );
423
+ const color = value !== void 0 ? value : internalColor;
424
+ const handleColorChange = (e) => {
425
+ setInternalColor(e.target.value);
426
+ onChange?.(e);
427
+ };
428
+ return /* @__PURE__ */ jsx17(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsxs7(
429
+ "label",
430
+ {
431
+ className: getInputStyles(
432
+ isDanger,
433
+ // 💡 focus-within을 통해 내부 <input>이 포커스될 때 부모(label)의 테두리와 배경 변경!
434
+ "flex items-center gap-2 relative focus-within:border-black focus-within:hover:bg-white" + (className || "")
435
+ ),
436
+ children: [
437
+ /* @__PURE__ */ jsx17("div", { className: "w-6 h-6 shrink-0 overflow-hidden", style: { backgroundColor: color }, children: /* @__PURE__ */ jsx17(
438
+ "input",
439
+ {
440
+ type: "color",
441
+ value: color,
442
+ onChange: handleColorChange,
443
+ className: "absolute inset-0 w-full h-full opacity-0",
444
+ ...props
445
+ }
446
+ ) }),
447
+ /* @__PURE__ */ jsx17("span", { className: "text-primary text-body3-regular uppercase flex-1 select-none", children: color })
448
+ ]
449
+ }
450
+ ) });
451
+ };
452
+
453
+ // src/components/Form/FormFile.tsx
454
+ import { useState as useState2 } from "react";
455
+ import { jsx as jsx18, jsxs as jsxs8 } from "react/jsx-runtime";
456
+ var FormFile = ({
457
+ className,
458
+ isDanger,
459
+ dangerText,
460
+ fileUrl,
461
+ filename,
462
+ onChange,
463
+ ...props
464
+ }) => {
465
+ const [selectedFile, setSelectedFile] = useState2(null);
466
+ const handleFileChange = (e) => {
467
+ const originalFile = e.target.files?.[0];
468
+ if (!originalFile) {
469
+ setSelectedFile(null);
470
+ onChange?.(e);
471
+ return;
472
+ }
473
+ let finalFile = originalFile;
474
+ if (filename) {
475
+ const lastDotIndex = originalFile.name.lastIndexOf(".");
476
+ const extension = lastDotIndex !== -1 ? originalFile.name.slice(lastDotIndex) : "";
477
+ const newFileName = filename.endsWith(extension) ? filename : `${filename}${extension}`;
478
+ finalFile = new File([originalFile], newFileName, {
479
+ type: originalFile.type,
480
+ lastModified: originalFile.lastModified
481
+ });
482
+ try {
483
+ const dataTransfer = new DataTransfer();
484
+ dataTransfer.items.add(finalFile);
485
+ e.target.files = dataTransfer.files;
486
+ } catch (err) {
487
+ console.warn("DataTransfer\uB97C \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uBE0C\uB77C\uC6B0\uC800\uC785\uB2C8\uB2E4.", err);
488
+ }
489
+ }
490
+ setSelectedFile(finalFile);
491
+ onChange?.(e);
492
+ };
493
+ const handleDownload = (e) => {
494
+ e.preventDefault();
495
+ e.stopPropagation();
496
+ if (selectedFile) {
497
+ const url = URL.createObjectURL(selectedFile);
498
+ const a = document.createElement("a");
499
+ a.href = url;
500
+ a.download = selectedFile.name;
501
+ document.body.appendChild(a);
502
+ a.click();
503
+ document.body.removeChild(a);
504
+ URL.revokeObjectURL(url);
505
+ } else if (fileUrl) {
506
+ const a = document.createElement("a");
507
+ a.href = fileUrl;
508
+ a.download = fileUrl.split("/").pop() || "download";
509
+ a.target = "_blank";
510
+ document.body.appendChild(a);
511
+ a.click();
512
+ document.body.removeChild(a);
513
+ }
514
+ };
515
+ const displayFileName = selectedFile?.name || (fileUrl ? fileUrl.split("/").pop() : null);
516
+ return /* @__PURE__ */ jsx18(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsxs8(
517
+ "div",
518
+ {
519
+ className: getInputStyles(
520
+ isDanger,
521
+ // 디자인 스펙: 파일 전 상태는 우측 정렬("파일 첨부"만), 파일 후 상태는 좌우 배치
522
+ cn(
523
+ "flex items-center gap-2",
524
+ displayFileName ? "justify-between" : "justify-end",
525
+ className
526
+ )
527
+ ),
528
+ children: [
529
+ displayFileName && /* @__PURE__ */ jsx18(
530
+ "span",
531
+ {
532
+ onClick: handleDownload,
533
+ className: "text-body3-book text-primary truncate max-w-[200px] cursor-pointer",
534
+ title: `${displayFileName} \uB2E4\uC6B4\uB85C\uB4DC`,
535
+ children: displayFileName
536
+ }
537
+ ),
538
+ /* @__PURE__ */ jsxs8("label", { className: "shrink-0 px-1 -mx-1 cursor-pointer", children: [
539
+ /* @__PURE__ */ jsx18("div", { className: "text-primary text-caption-regular underline", children: displayFileName ? "\uB2E4\uC2DC \uCCA8\uBD80" : "\uD30C\uC77C \uCCA8\uBD80" }),
540
+ /* @__PURE__ */ jsx18("input", { type: "file", className: "hidden", onChange: handleFileChange, ...props })
541
+ ] })
542
+ ]
543
+ }
544
+ ) });
545
+ };
546
+
547
+ // src/components/Form/FormCheckBox.tsx
548
+ import { jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
549
+ var FormCheckBox = ({
550
+ isChecked,
551
+ setIsChecked,
552
+ children,
553
+ className,
554
+ textStyle,
555
+ ...props
556
+ }) => {
557
+ return /* @__PURE__ */ jsxs9(
558
+ "label",
559
+ {
560
+ className: cn(
561
+ "group w-fit h-fit",
562
+ "flex items-center gap-1",
563
+ "cursor-pointer select-none",
564
+ // 💡 1. 텍스트 드래그 방지 추가
565
+ className
566
+ ),
567
+ children: [
568
+ /* @__PURE__ */ jsx19(
569
+ "input",
570
+ {
571
+ type: "checkbox",
572
+ checked: isChecked,
573
+ onChange: (e) => setIsChecked(e.target.checked),
574
+ className: "sr-only peer",
575
+ ...props
576
+ }
577
+ ),
578
+ /* @__PURE__ */ jsx19(
579
+ "div",
580
+ {
581
+ className: cn(
582
+ "flex items-center justify-center w-5 h-5 shrink-0 rounded transition-colors",
583
+ "group-hover:bg-gray00 group-active:bg-gray01"
584
+ ),
585
+ children: /* @__PURE__ */ jsx19(
586
+ "div",
587
+ {
588
+ className: cn(
589
+ "w-[15px] h-[15px]",
590
+ "box-border border border-black",
591
+ "flex items-center justify-center transition-colors duration-200",
592
+ // 💡 3. 키보드 Tab 이동 시 접근성 향상 (포커스 링 표시)
593
+ "peer-focus-visible:ring-2 peer-focus-visible:ring-black peer-focus-visible:ring-offset-1"
594
+ ),
595
+ children: isChecked && /* @__PURE__ */ jsx19(IconCheck, {})
596
+ }
597
+ )
598
+ }
599
+ ),
600
+ children && /* @__PURE__ */ jsx19("span", { className: cn("text-body3-book text-primary", textStyle), children })
601
+ ]
602
+ }
603
+ );
604
+ };
605
+
606
+ // src/components/Form/FormSelectBox.tsx
607
+ import { useEffect, useRef, useState as useState3 } from "react";
608
+
609
+ // src/components/Form/SelectBoxOption.tsx
610
+ import { jsx as jsx20 } from "react/jsx-runtime";
611
+ var SelectBoxOption = ({
612
+ label,
613
+ onClick,
614
+ // selectedLabel,
615
+ className
616
+ }) => {
617
+ return /* @__PURE__ */ jsx20(
618
+ "li",
619
+ {
620
+ onClick,
621
+ className: cn(
622
+ "w-full p-3 shrink-0",
623
+ // 디자인 스펙: 12px 패딩
624
+ "flex items-center justify-start",
625
+ // "box-border border-b border-gray02",
626
+ "text-body3-book text-primary",
627
+ "bg-white hover:bg-gray00 active:bg-gray01",
628
+ // isSelected
629
+ // ? "bg-black text-white"
630
+ // : "",
631
+ className
632
+ ),
633
+ children: label
634
+ }
635
+ );
636
+ };
637
+
638
+ // src/components/Form/FormSelectBox.tsx
639
+ import { jsx as jsx21, jsxs as jsxs10 } from "react/jsx-runtime";
640
+ var FormSelectBox = ({
641
+ options,
642
+ value,
643
+ onChange,
644
+ placeholder = "\uC120\uD0DD\uD574\uC8FC\uC138\uC694",
645
+ isDanger,
646
+ dangerText,
647
+ className
648
+ }) => {
649
+ const [isOpen, setIsOpen] = useState3(false);
650
+ const containerRef = useRef(null);
651
+ useEffect(() => {
652
+ const handleClickOutside = (event) => {
653
+ if (containerRef.current && !containerRef.current.contains(event.target)) {
654
+ setIsOpen(false);
655
+ }
656
+ };
657
+ document.addEventListener("mousedown", handleClickOutside);
658
+ return () => {
659
+ document.removeEventListener("mousedown", handleClickOutside);
660
+ };
661
+ }, []);
662
+ return /* @__PURE__ */ jsx21(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ jsxs10("div", { ref: containerRef, className: "relative w-full", children: [
663
+ /* @__PURE__ */ jsxs10(
664
+ "div",
665
+ {
666
+ tabIndex: 0,
667
+ className: getInputStyles(
668
+ isDanger,
669
+ cn(
670
+ "flex items-center justify-between cursor-pointer select-none",
671
+ isOpen && "border-gray08",
672
+ // 열려있을 때 테두리 #3A414C 고정 (디자인 스펙)
673
+ className
674
+ )
675
+ ),
676
+ onClick: (e) => {
677
+ if (isOpen) {
678
+ e.currentTarget.blur();
679
+ }
680
+ setIsOpen((prev) => !prev);
681
+ },
682
+ children: [
683
+ /* @__PURE__ */ jsx21("span", { className: value ? "text-primary" : "text-quaternary", children: value || placeholder }),
684
+ /* @__PURE__ */ jsx21(
685
+ IconChevronDownXS,
686
+ {
687
+ className: cn("text-gray06 transition-transform", isOpen && "rotate-180"),
688
+ stroke: "currentColor"
689
+ }
690
+ )
691
+ ]
692
+ }
693
+ ),
694
+ isOpen && /* @__PURE__ */ jsx21(
695
+ "ul",
696
+ {
697
+ className: cn(
698
+ "absolute top-full left-0 right-0 z-10",
699
+ // 💡 Input 바로 아래에 띄움
700
+ "box-border border border-gray02 bg-white flex flex-col",
701
+ "max-h-50 overflow-y-auto"
702
+ // 항목이 너무 많으면 스크롤 생성 (디자인 스펙: 그림자 없음)
703
+ ),
704
+ children: options.map((option) => /* @__PURE__ */ jsx21(
705
+ SelectBoxOption,
706
+ {
707
+ label: option,
708
+ onClick: () => {
709
+ onChange(option);
710
+ setIsOpen(false);
711
+ }
712
+ },
713
+ option
714
+ ))
715
+ }
716
+ )
717
+ ] }) });
718
+ };
719
+
720
+ // src/components/TextButton/TextButton.tsx
721
+ import { Fragment, jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
722
+ var TextButton = ({
723
+ children,
724
+ icon,
725
+ iconPosition = "left",
726
+ alert = false,
727
+ underline = true,
728
+ className,
729
+ ...props
730
+ }) => {
731
+ const content = /* @__PURE__ */ jsxs11(Fragment, { children: [
732
+ icon && iconPosition === "left" && /* @__PURE__ */ jsx22("span", { className: "flex shrink-0 items-center", children: icon }),
733
+ /* @__PURE__ */ jsx22("span", { className: cn(underline && "underline underline-offset-2"), children }),
734
+ icon && iconPosition === "right" && /* @__PURE__ */ jsx22("span", { className: "flex shrink-0 items-center", children: icon })
735
+ ] });
736
+ const classes = cn(
737
+ "inline-flex w-fit items-center gap-1 px-1 -mx-1",
738
+ "text-caption-book",
739
+ alert ? "text-danger" : "text-secondary",
740
+ "hover:bg-gray00 active:bg-gray01 transition-colors",
741
+ alert ? "hover:text-danger" : "hover:text-primary",
742
+ "cursor-pointer select-none",
743
+ "disabled:cursor-default disabled:text-quaternary disabled:hover:bg-transparent",
744
+ "aria-disabled:cursor-default aria-disabled:text-quaternary aria-disabled:hover:bg-transparent",
745
+ className
746
+ );
747
+ if (props.href !== void 0) {
748
+ const { href, ...rest } = props;
749
+ return /* @__PURE__ */ jsx22("a", { href, className: classes, ...rest, children: content });
750
+ }
751
+ const buttonProps = props;
752
+ return /* @__PURE__ */ jsx22("button", { type: "button", className: classes, ...buttonProps, children: content });
753
+ };
754
+
755
+ // src/components/Dropdown/Dropdown.tsx
756
+ import { useEffect as useEffect2, useRef as useRef2, useState as useState4 } from "react";
757
+ import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
758
+ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
759
+ const [isOpen, setIsOpen] = useState4(false);
760
+ const containerRef = useRef2(null);
761
+ useEffect2(() => {
762
+ const handleClickOutside = (event) => {
763
+ if (containerRef.current && !containerRef.current.contains(event.target)) {
764
+ setIsOpen(false);
765
+ }
766
+ };
767
+ document.addEventListener("mousedown", handleClickOutside);
768
+ return () => {
769
+ document.removeEventListener("mousedown", handleClickOutside);
770
+ };
771
+ }, []);
772
+ return /* @__PURE__ */ jsxs12("div", { ref: containerRef, className: "relative", children: [
773
+ /* @__PURE__ */ jsxs12(
774
+ "div",
775
+ {
776
+ className: cn(
777
+ "w-fit h-fit px-2 py-1",
778
+ "flex items-center justify-center gap-1.5",
779
+ "text-body3-book text-strong",
780
+ "bg-white hover:bg-gray00 active:bg-gray01",
781
+ "cursor-pointer",
782
+ className
783
+ ),
784
+ onClick: () => setIsOpen((prev) => !prev),
785
+ children: [
786
+ /* @__PURE__ */ jsx23("p", { children: selectedLabel }),
787
+ /* @__PURE__ */ jsx23(
788
+ IconChevronDownXS,
789
+ {
790
+ className: cn("text-gray06 transition-transform", isOpen && "rotate-180"),
791
+ stroke: "currentColor"
792
+ }
793
+ )
794
+ ]
795
+ }
796
+ ),
797
+ isOpen && /* @__PURE__ */ jsx23("div", { className: cn("absolute top-full right-0 z-10", "box-border border border-gray02"), children: labels.map((label) => /* @__PURE__ */ jsx23(
798
+ SelectBoxOption,
799
+ {
800
+ label,
801
+ onClick: () => {
802
+ setSelectedLabel(label);
803
+ setIsOpen(false);
804
+ },
805
+ className: "w-44 h-11 justify-center"
806
+ },
807
+ label
808
+ )) })
809
+ ] });
810
+ };
811
+
812
+ // src/components/ListView/List.tsx
813
+ import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
814
+ function List({
815
+ className,
816
+ label1,
817
+ label2,
818
+ label2OnClick,
819
+ label3,
820
+ disabled = false,
821
+ selected = false,
822
+ onClick,
823
+ children,
824
+ ...props
825
+ }) {
826
+ return /* @__PURE__ */ jsxs13(
827
+ "li",
828
+ {
829
+ className: cn(
830
+ "w-full min-w-fit h-13 pl-4 pr-6",
831
+ "grid grid-cols-[4fr_1fr_1fr] items-center gap-4",
832
+ "bg-white hover:bg-gray00 hover:has-[.has-clickable:hover]:bg-white active:bg-gray01",
833
+ "text-primary select-none [&_*]:cursor-pointer cursor-pointer",
834
+ disabled && "opacity-40 [&_*]:cursor-pointer cursor-pointer",
835
+ selected && "bg-black text-white hover:bg-black active:bg-black hover:has-[.has-clickable:hover]:bg-black",
836
+ className
837
+ ),
838
+ ...props,
839
+ onClick,
840
+ children: [
841
+ /* @__PURE__ */ jsxs13("section", { className: cn("flex items-center gap-4"), children: [
842
+ /* @__PURE__ */ jsx24("label", { className: cn("text-body2-regular"), children: label1 ? label1 : "-" }),
843
+ /* @__PURE__ */ jsx24("div", { className: cn("flex items-center gap-2"), children })
844
+ ] }),
845
+ /* @__PURE__ */ jsx24(
846
+ "label",
847
+ {
848
+ className: cn(
849
+ "text-body3-book truncate p-1 w-fit",
850
+ label2OnClick && "underline has-clickable",
851
+ label2OnClick && !selected && "hover:bg-gray00"
852
+ ),
853
+ onClick: label2OnClick,
854
+ children: label2 ? label2 : "-"
855
+ }
856
+ ),
857
+ /* @__PURE__ */ jsx24("label", { className: cn("text-body3-regular text-right"), children: label3 ? label3 : "-" })
858
+ ]
859
+ }
860
+ );
861
+ }
862
+
863
+ // src/components/Modal/Modal.tsx
864
+ import { jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
865
+ var ModalBase = ({ isVisible, header, children, className }) => {
866
+ if (!isVisible) return null;
867
+ return /* @__PURE__ */ jsx25("div", { className: cn("fixed inset-0 z-50 pointer-events-auto"), children: /* @__PURE__ */ jsx25(
868
+ "div",
869
+ {
870
+ className: cn("fixed inset-0 z-1001 flex items-center justify-center pointer-events-auto"),
871
+ children: /* @__PURE__ */ jsxs14(
872
+ "main",
873
+ {
874
+ className: cn(
875
+ "w-110 pt-8 h-fit",
876
+ "flex flex-col items-center",
877
+ "border border-gray02",
878
+ "bg-white shadow-[0 0 30px 0 rgba(0, 0, 0, 0.08);]",
879
+ className
880
+ ),
881
+ children: [
882
+ /* @__PURE__ */ jsx25("h1", { className: cn("text-strong font-[500] text-[24px] leading-[32px]"), children: header }),
883
+ children
884
+ ]
885
+ }
886
+ )
887
+ }
888
+ ) });
889
+ };
890
+ var Contents = ({ children, className }) => {
891
+ return /* @__PURE__ */ jsx25(
892
+ "div",
893
+ {
894
+ className: cn(
895
+ "flex flex-col items-center gap-8",
896
+ "w-full h-fit",
897
+ "px-14 pt-8 pb-9",
898
+ className
899
+ ),
900
+ children
901
+ }
902
+ );
903
+ };
904
+ var CTAs2 = ({ children, className, row = false }) => {
905
+ if (!children) return null;
906
+ return (
907
+ // CTA 버튼들을 중앙에 배치하는 예시 (우측 정렬이 필요하면 justify-end 사용)
908
+ /* @__PURE__ */ jsx25(
909
+ "div",
910
+ {
911
+ className: cn(
912
+ "flex flex-col w-full h-fit",
913
+ row && "flex-row divide-x divide-gray02",
914
+ className
915
+ ),
916
+ children
917
+ }
918
+ )
919
+ );
920
+ };
921
+ var Modal = Object.assign(ModalBase, {
922
+ Contents,
923
+ CTAs: CTAs2
924
+ });
925
+
926
+ // src/components/Modal/ModalText.tsx
927
+ import { jsx as jsx26 } from "react/jsx-runtime";
928
+ var ModalText = ({ children, className }) => {
929
+ return /* @__PURE__ */ jsx26(
930
+ "div",
931
+ {
932
+ className: cn(
933
+ "flex flex-col items-center",
934
+ "mt-[-20px] mb-[-4px]",
935
+ ModalTextStyle,
936
+ "text-tertiary text-center",
937
+ className
938
+ ),
939
+ children
940
+ }
941
+ );
942
+ };
943
+
944
+ // src/components/createPost/CategorySegment.tsx
945
+ import { jsx as jsx27 } from "react/jsx-runtime";
179
946
  var CategorySegment = ({
180
947
  selected = false,
181
948
  label,
182
949
  className,
183
950
  onClick
184
951
  }) => {
185
- return /* @__PURE__ */ jsx4(
952
+ return /* @__PURE__ */ jsx27(
186
953
  "div",
187
954
  {
188
955
  className: cn(
@@ -202,7 +969,7 @@ var CategorySegment = ({
202
969
  };
203
970
 
204
971
  // src/components/createPost/CategorySegmentedControl.tsx
205
- import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
972
+ import { jsx as jsx28, jsxs as jsxs15 } from "react/jsx-runtime";
206
973
  var categorySegments = {
207
974
  info: ["\uACF5\uC6A9 \uBB3C\uD488", "\uC77C\uBC18 \uAE30\uC790\uC7AC", "\uD2B9\uC218 \uAE30\uC790\uC7AC"],
208
975
  archive: ["\uD504\uB9B0\uD2B8\uC2E4", "\uD64D\uC775\uC2DC\uB514"],
@@ -216,8 +983,8 @@ var CategorySegmentedControl = ({
216
983
  className
217
984
  }) => {
218
985
  const segments = categorySegments[variable];
219
- return /* @__PURE__ */ jsxs2("div", { className: cn("w-full h-fit flex items-center justify-start", className), children: [
220
- /* @__PURE__ */ jsx5(
986
+ return /* @__PURE__ */ jsxs15("div", { className: cn("w-full h-fit flex items-center justify-start", className), children: [
987
+ /* @__PURE__ */ jsx28(
221
988
  "div",
222
989
  {
223
990
  className: cn(
@@ -230,7 +997,7 @@ var CategorySegmentedControl = ({
230
997
  children: variable === "infoTag" ? "\uD0DC\uADF8 \uC120\uD0DD" : "\uCE74\uD14C\uACE0\uB9AC \uC120\uD0DD"
231
998
  }
232
999
  ),
233
- segments.map((label) => /* @__PURE__ */ jsx5(
1000
+ segments.map((label) => /* @__PURE__ */ jsx28(
234
1001
  CategorySegment,
235
1002
  {
236
1003
  label,
@@ -243,9 +1010,9 @@ var CategorySegmentedControl = ({
243
1010
  };
244
1011
 
245
1012
  // src/components/createPost/TitleInput.tsx
246
- import { jsx as jsx6 } from "react/jsx-runtime";
1013
+ import { jsx as jsx29 } from "react/jsx-runtime";
247
1014
  var TitleInput = ({ title, onChange, className }) => {
248
- return /* @__PURE__ */ jsx6(
1015
+ return /* @__PURE__ */ jsx29(
249
1016
  "input",
250
1017
  {
251
1018
  type: "text",
@@ -265,9 +1032,9 @@ var TitleInput = ({ title, onChange, className }) => {
265
1032
  };
266
1033
 
267
1034
  // src/components/notice/NoticeBadge.tsx
268
- import { jsx as jsx7 } from "react/jsx-runtime";
1035
+ import { jsx as jsx30 } from "react/jsx-runtime";
269
1036
  var NoticeBadge = ({ variable, className, onClick }) => {
270
- return /* @__PURE__ */ jsx7(
1037
+ return /* @__PURE__ */ jsx30(
271
1038
  "button",
272
1039
  {
273
1040
  type: "button",
@@ -288,7 +1055,7 @@ var NoticeBadge = ({ variable, className, onClick }) => {
288
1055
  };
289
1056
 
290
1057
  // src/components/notice/NoticeBar.tsx
291
- import { jsx as jsx8, jsxs as jsxs3 } from "react/jsx-runtime";
1058
+ import { jsx as jsx31, jsxs as jsxs16 } from "react/jsx-runtime";
292
1059
  var NoticeBar = ({
293
1060
  variable = "default",
294
1061
  badgeVariable,
@@ -297,7 +1064,7 @@ var NoticeBar = ({
297
1064
  className,
298
1065
  onClick
299
1066
  }) => {
300
- return /* @__PURE__ */ jsxs3(
1067
+ return /* @__PURE__ */ jsxs16(
301
1068
  "div",
302
1069
  {
303
1070
  className: cn(
@@ -309,20 +1076,20 @@ var NoticeBar = ({
309
1076
  ),
310
1077
  onClick,
311
1078
  children: [
312
- /* @__PURE__ */ jsxs3("section", { className: "flex items-center gap-3", children: [
313
- /* @__PURE__ */ jsx8(NoticeBadge, { variable: badgeVariable }),
314
- /* @__PURE__ */ jsx8("h1", { className: "text-head1-medium text-strong", children: title })
1079
+ /* @__PURE__ */ jsxs16("section", { className: "flex items-center gap-3", children: [
1080
+ /* @__PURE__ */ jsx31(NoticeBadge, { variable: badgeVariable }),
1081
+ /* @__PURE__ */ jsx31("h1", { className: "text-head1-medium text-strong", children: title })
315
1082
  ] }),
316
- /* @__PURE__ */ jsx8("p", { className: "text-body3-book text-tertiary", children: date })
1083
+ /* @__PURE__ */ jsx31("p", { className: "text-body3-book text-tertiary", children: date })
317
1084
  ]
318
1085
  }
319
1086
  );
320
1087
  };
321
1088
 
322
1089
  // src/components/SearchBar/SearchBar.tsx
323
- import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
1090
+ import { jsx as jsx32, jsxs as jsxs17 } from "react/jsx-runtime";
324
1091
  var SearchBar = ({ value, onChange, className }) => {
325
- return /* @__PURE__ */ jsxs4(
1092
+ return /* @__PURE__ */ jsxs17(
326
1093
  "label",
327
1094
  {
328
1095
  className: cn(
@@ -333,8 +1100,8 @@ var SearchBar = ({ value, onChange, className }) => {
333
1100
  className
334
1101
  ),
335
1102
  children: [
336
- /* @__PURE__ */ jsx9(IconSearch, {}),
337
- /* @__PURE__ */ jsx9(
1103
+ /* @__PURE__ */ jsx32(IconSearch, {}),
1104
+ /* @__PURE__ */ jsx32(
338
1105
  "input",
339
1106
  {
340
1107
  type: "text",
@@ -356,10 +1123,10 @@ var SearchBar = ({ value, onChange, className }) => {
356
1123
  import { forwardRef } from "react";
357
1124
 
358
1125
  // src/lib/useControllableState.ts
359
- import { useCallback, useState } from "react";
1126
+ import { useCallback, useState as useState5 } from "react";
360
1127
  function useControllableState(controlled, defaultValue) {
361
1128
  const isControlled = controlled !== void 0;
362
- const [uncontrolled, setUncontrolled] = useState(defaultValue);
1129
+ const [uncontrolled, setUncontrolled] = useState5(defaultValue);
363
1130
  const value = isControlled ? controlled : uncontrolled;
364
1131
  const setValue = useCallback(
365
1132
  (next) => {
@@ -383,7 +1150,7 @@ var RadioSelected_default = "./RadioSelected-DOLVV7ZM.svg";
383
1150
  var RadioUnselected_default = "./RadioUnselected-QN74EU46.svg";
384
1151
 
385
1152
  // src/components/SideRadioAccordion/SideRadioAccordion.tsx
386
- import { jsx as jsx10, jsxs as jsxs5 } from "react/jsx-runtime";
1153
+ import { jsx as jsx33, jsxs as jsxs18 } from "react/jsx-runtime";
387
1154
  var printColorBgClass = {
388
1155
  Plotter: "bg-print-plotter",
389
1156
  Printer: "bg-print-printer",
@@ -427,8 +1194,8 @@ var SideRadioAccordion = forwardRef(
427
1194
  setIsOpen(next);
428
1195
  onOpenChange?.(next);
429
1196
  };
430
- return /* @__PURE__ */ jsxs5("div", { ref, className: cn("w-full", className), children: [
431
- /* @__PURE__ */ jsx10(
1197
+ return /* @__PURE__ */ jsxs18("div", { ref, className: cn("w-full border-r border-gray02 bg-white", className), children: [
1198
+ /* @__PURE__ */ jsx33(
432
1199
  Stepper,
433
1200
  {
434
1201
  step,
@@ -439,8 +1206,8 @@ var SideRadioAccordion = forwardRef(
439
1206
  className: cn(stickyHeader && "sticky top-0 z-10")
440
1207
  }
441
1208
  ),
442
- expanded && /* @__PURE__ */ jsxs5("div", { className: "flex flex-col", children: [
443
- radioToggleList.map((item) => /* @__PURE__ */ jsx10(
1209
+ expanded && /* @__PURE__ */ jsxs18("div", { className: "flex flex-col divide-y divide-gray02", children: [
1210
+ radioToggleList.map((item) => /* @__PURE__ */ jsx33(
444
1211
  RadioToggleItem,
445
1212
  {
446
1213
  ...item,
@@ -449,29 +1216,22 @@ var SideRadioAccordion = forwardRef(
449
1216
  },
450
1217
  itemKey(item)
451
1218
  )),
452
- quantityLimitLabel && /* @__PURE__ */ jsx10(
453
- TextButton,
454
- {
455
- label: quantityLimitLabel,
456
- onClick: onClickQuantityLimit,
457
- className: "mt-2"
458
- }
459
- )
1219
+ quantityLimitLabel && /* @__PURE__ */ jsx33("div", { className: "px-5 py-4", children: /* @__PURE__ */ jsx33(TextButton2, { label: quantityLimitLabel, onClick: onClickQuantityLimit }) })
460
1220
  ] })
461
1221
  ] });
462
1222
  }
463
1223
  );
464
1224
  var Stepper = ({ step, title, isOpen, collapsible, onClick, className }) => {
465
- const label = /* @__PURE__ */ jsxs5("span", { children: [
1225
+ const label = /* @__PURE__ */ jsxs18("span", { children: [
466
1226
  step,
467
1227
  " | ",
468
1228
  title
469
1229
  ] });
470
- const base = "w-full flex items-center justify-between px-3 py-2.5 text-body1-medium text-strong text-left bg-white";
1230
+ 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";
471
1231
  if (!collapsible) {
472
- return /* @__PURE__ */ jsx10("div", { className: cn(base, className), children: label });
1232
+ return /* @__PURE__ */ jsx33("div", { className: cn(base, className), children: label });
473
1233
  }
474
- return /* @__PURE__ */ jsxs5(
1234
+ return /* @__PURE__ */ jsxs18(
475
1235
  "button",
476
1236
  {
477
1237
  type: "button",
@@ -479,7 +1239,7 @@ var Stepper = ({ step, title, isOpen, collapsible, onClick, className }) => {
479
1239
  className: cn(base, "cursor-pointer hover:bg-gray00 active:bg-gray01", className),
480
1240
  children: [
481
1241
  label,
482
- /* @__PURE__ */ jsx10(
1242
+ /* @__PURE__ */ jsx33(
483
1243
  "img",
484
1244
  {
485
1245
  src: ChevronDown_default,
@@ -505,30 +1265,30 @@ var RadioToggleItem = ({
505
1265
  }) => {
506
1266
  const rowBg = !open ? "bg-white hover:bg-gray00" : color ? void 0 : printColor ? printColorBgClass[printColor] : "bg-gray00";
507
1267
  const style = open && color ? { backgroundColor: color } : void 0;
508
- return /* @__PURE__ */ jsxs5("div", { className: "w-full", children: [
509
- /* @__PURE__ */ jsxs5(
1268
+ return /* @__PURE__ */ jsxs18("div", { className: "w-full", children: [
1269
+ /* @__PURE__ */ jsxs18(
510
1270
  "button",
511
1271
  {
512
1272
  type: "button",
513
1273
  onClick: onSelect,
514
1274
  style,
515
1275
  className: cn(
516
- "w-full flex items-center gap-1.5 px-3 py-2.5",
517
- "text-body2-regular text-primary text-left cursor-pointer",
1276
+ "w-full flex items-center gap-1.5 p-3",
1277
+ "text-body1-regular text-secondary text-left cursor-pointer",
518
1278
  rowBg,
519
1279
  className
520
1280
  ),
521
1281
  children: [
522
- /* @__PURE__ */ jsx10(Radio, { selected: open }),
523
- /* @__PURE__ */ jsx10("span", { children: title })
1282
+ /* @__PURE__ */ jsx33(Radio, { selected: open }),
1283
+ /* @__PURE__ */ jsx33("span", { children: title })
524
1284
  ]
525
1285
  }
526
1286
  ),
527
- open && /* @__PURE__ */ jsxs5("div", { className: "flex flex-col gap-2 px-3 py-3 bg-white", children: [
528
- /* @__PURE__ */ jsx10("p", { className: "text-caption-regular text-secondary", children: content }),
529
- badges && badges.length > 0 && /* @__PURE__ */ jsx10("div", { className: "flex gap-1", children: badges.map((badge) => /* @__PURE__ */ jsx10(Badge, { label: badge }, badge)) }),
530
- labelTextButton && /* @__PURE__ */ jsx10(
531
- TextButton,
1287
+ open && /* @__PURE__ */ jsxs18("div", { className: "flex flex-col gap-2 px-3 py-3 bg-white", children: [
1288
+ /* @__PURE__ */ jsx33("p", { className: "text-caption-regular text-secondary", children: content }),
1289
+ badges && badges.length > 0 && /* @__PURE__ */ jsx33("div", { className: "flex gap-1", children: badges.map((badge) => /* @__PURE__ */ jsx33(Badge, { label: badge }, badge)) }),
1290
+ labelTextButton && /* @__PURE__ */ jsx33(
1291
+ TextButton2,
532
1292
  {
533
1293
  label: labelTextButton,
534
1294
  onClick: onClickTextButton,
@@ -540,17 +1300,17 @@ var RadioToggleItem = ({
540
1300
  ] });
541
1301
  };
542
1302
  var Radio = ({ selected = false, className }) => {
543
- return /* @__PURE__ */ jsx10(
1303
+ return /* @__PURE__ */ jsx33(
544
1304
  "img",
545
1305
  {
546
1306
  src: selected ? RadioSelected_default : RadioUnselected_default,
547
1307
  alt: "",
548
- className: cn("w-4 h-4", className)
1308
+ className: cn("w-6 h-6", className)
549
1309
  }
550
1310
  );
551
1311
  };
552
- var TextButton = ({ label, onClick, showIcon = false, className }) => {
553
- return /* @__PURE__ */ jsxs5(
1312
+ var TextButton2 = ({ label, onClick, showIcon = false, className }) => {
1313
+ return /* @__PURE__ */ jsxs18(
554
1314
  "button",
555
1315
  {
556
1316
  type: "button",
@@ -563,14 +1323,14 @@ var TextButton = ({ label, onClick, showIcon = false, className }) => {
563
1323
  className
564
1324
  ),
565
1325
  children: [
566
- showIcon && /* @__PURE__ */ jsx10("img", { src: Exclamation_default, alt: "" }),
1326
+ showIcon && /* @__PURE__ */ jsx33("img", { src: Exclamation_default, alt: "" }),
567
1327
  label
568
1328
  ]
569
1329
  }
570
1330
  );
571
1331
  };
572
1332
  var Badge = ({ label, className }) => {
573
- return /* @__PURE__ */ jsx10(
1333
+ return /* @__PURE__ */ jsx33(
574
1334
  "div",
575
1335
  {
576
1336
  className: cn(
@@ -584,7 +1344,7 @@ var Badge = ({ label, className }) => {
584
1344
  };
585
1345
 
586
1346
  // src/components/Tag/Tag.tsx
587
- import { jsx as jsx11 } from "react/jsx-runtime";
1347
+ import { jsx as jsx34 } from "react/jsx-runtime";
588
1348
  var Tag = ({
589
1349
  className,
590
1350
  children,
@@ -594,7 +1354,7 @@ var Tag = ({
594
1354
  onClick,
595
1355
  ...props
596
1356
  }) => {
597
- return /* @__PURE__ */ jsx11(
1357
+ return /* @__PURE__ */ jsx34(
598
1358
  "button",
599
1359
  {
600
1360
  className: cn(
@@ -613,7 +1373,7 @@ var Tag = ({
613
1373
  disabled,
614
1374
  style: bgColor ? { backgroundColor: bgColor, border: "none" } : void 0,
615
1375
  ...props,
616
- children: /* @__PURE__ */ jsx11("span", { children })
1376
+ children: /* @__PURE__ */ jsx34("span", { children })
617
1377
  }
618
1378
  );
619
1379
  };
@@ -655,7 +1415,7 @@ var formatWeekRange = (weekStart) => {
655
1415
  };
656
1416
 
657
1417
  // src/components/Timetable/WeekNavigation.tsx
658
- import { jsx as jsx12, jsxs as jsxs6 } from "react/jsx-runtime";
1418
+ import { jsx as jsx35, jsxs as jsxs19 } from "react/jsx-runtime";
659
1419
  var weekLabel = {
660
1420
  thisWeek: "\uC774\uBC88 \uC8FC",
661
1421
  nextWeek: "\uB2E4\uC74C \uC8FC",
@@ -666,53 +1426,62 @@ var WeekNavigation = forwardRef2(
666
1426
  const showPrev = canPrev ?? (week ? week !== "thisWeek" : true);
667
1427
  const showNext = canNext ?? (week ? week !== "twoWeeksLater" : true);
668
1428
  const text = label ?? (week ? `${weekLabel[week]} (${formatWeekRange(date)})` : formatWeekRange(date));
669
- return /* @__PURE__ */ jsxs6(
1429
+ return /* @__PURE__ */ jsxs19(
670
1430
  "div",
671
1431
  {
672
1432
  ref,
673
1433
  className: cn(
674
- "flex items-center justify-between",
675
- "w-full h-11 px-3",
676
- "bg-white border border-gray02",
677
- "text-body2-regular text-primary",
1434
+ "flex items-stretch justify-between",
1435
+ "w-full h-12",
1436
+ "bg-white border-b border-gray02",
1437
+ "text-body1-medium text-secondary",
678
1438
  className
679
1439
  ),
680
1440
  children: [
681
- /* @__PURE__ */ jsx12(ArrowButton, { direction: "left", visible: showPrev, onClick: onPrevWeek }),
682
- /* @__PURE__ */ jsx12("span", { children: text }),
683
- /* @__PURE__ */ jsx12(ArrowButton, { direction: "right", visible: showNext, onClick: onNextWeek })
1441
+ /* @__PURE__ */ jsx35(ArrowButton, { direction: "left", visible: showPrev, onClick: onPrevWeek }),
1442
+ /* @__PURE__ */ jsx35("span", { className: "flex flex-1 items-center justify-center text-center", children: text }),
1443
+ /* @__PURE__ */ jsx35(ArrowButton, { direction: "right", visible: showNext, onClick: onNextWeek })
684
1444
  ]
685
1445
  }
686
1446
  );
687
1447
  }
688
1448
  );
689
1449
  var ArrowButton = ({ direction, visible, onClick }) => {
1450
+ const divider = /* @__PURE__ */ jsx35("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" });
690
1451
  if (!visible) {
691
- return /* @__PURE__ */ jsx12("span", { className: "w-6 h-6" });
1452
+ return /* @__PURE__ */ jsxs19("div", { className: "flex items-stretch", children: [
1453
+ direction === "right" && divider,
1454
+ /* @__PURE__ */ jsx35("span", { className: "w-[42px]" }),
1455
+ direction === "left" && divider
1456
+ ] });
692
1457
  }
693
- return /* @__PURE__ */ jsx12(
694
- "button",
695
- {
696
- type: "button",
697
- onClick,
698
- className: cn(
699
- "flex items-center justify-center w-6 h-6",
700
- "text-gray06 cursor-pointer",
701
- "hover:bg-gray00 active:bg-gray01"
702
- ),
703
- children: /* @__PURE__ */ jsx12(
704
- IconChevronDownXS,
705
- {
706
- className: direction === "left" ? "rotate-90" : "-rotate-90",
707
- stroke: "currentColor"
708
- }
709
- )
710
- }
711
- );
1458
+ return /* @__PURE__ */ jsxs19("div", { className: "flex items-stretch", children: [
1459
+ direction === "right" && divider,
1460
+ /* @__PURE__ */ jsx35(
1461
+ "button",
1462
+ {
1463
+ type: "button",
1464
+ onClick,
1465
+ className: cn(
1466
+ "flex w-[42px] items-center justify-center",
1467
+ "text-gray06 cursor-pointer transition-colors",
1468
+ "hover:bg-gray00 active:bg-gray01"
1469
+ ),
1470
+ children: /* @__PURE__ */ jsx35(
1471
+ IconChevronDownXS,
1472
+ {
1473
+ className: direction === "left" ? "rotate-90" : "-rotate-90",
1474
+ stroke: "currentColor"
1475
+ }
1476
+ )
1477
+ }
1478
+ ),
1479
+ direction === "left" && divider
1480
+ ] });
712
1481
  };
713
1482
 
714
1483
  // src/components/Timetable/Timetable.tsx
715
- import { jsx as jsx13, jsxs as jsxs7 } from "react/jsx-runtime";
1484
+ import { jsx as jsx36, jsxs as jsxs20 } from "react/jsx-runtime";
716
1485
  var printColorHoverClass = {
717
1486
  Plotter: "hover:bg-print-plotter",
718
1487
  Printer: "hover:bg-print-printer",
@@ -735,8 +1504,8 @@ var Timetable = forwardRef3(function Timetable2({
735
1504
  canNextWeek,
736
1505
  className
737
1506
  }, ref) {
738
- return /* @__PURE__ */ jsxs7("div", { ref, className: cn(fluid && "w-full", className), children: [
739
- !hideWeekNavigation && /* @__PURE__ */ jsx13(
1507
+ return /* @__PURE__ */ jsxs20("div", { ref, className: cn(fluid && "w-full", className), children: [
1508
+ !hideWeekNavigation && /* @__PURE__ */ jsx36(
740
1509
  WeekNavigation,
741
1510
  {
742
1511
  date: weekStart,
@@ -747,7 +1516,7 @@ var Timetable = forwardRef3(function Timetable2({
747
1516
  onNextWeek
748
1517
  }
749
1518
  ),
750
- /* @__PURE__ */ jsx13("div", { className: cn("flex", fluid && "w-full"), children: days.map((day) => /* @__PURE__ */ jsx13(
1519
+ /* @__PURE__ */ jsx36("div", { className: cn("flex", fluid && "w-full"), children: days.map((day) => /* @__PURE__ */ jsx36(
751
1520
  DailyTimetable,
752
1521
  {
753
1522
  date: day.date,
@@ -760,9 +1529,9 @@ var Timetable = forwardRef3(function Timetable2({
760
1529
  ] });
761
1530
  });
762
1531
  var DailyTimetable = ({ date, slots, fluid, onSelectTime, className }) => {
763
- return /* @__PURE__ */ jsxs7("div", { className: cn("flex flex-col", fluid ? "flex-1 min-w-0" : "w-18", className), children: [
764
- /* @__PURE__ */ jsx13("div", { className: "h-13 flex items-center justify-center text-body3-medium text-secondary", children: formatDayLabel(date) }),
765
- slots.map((slot) => /* @__PURE__ */ jsx13(
1532
+ return /* @__PURE__ */ jsxs20("div", { className: cn("flex flex-col", fluid ? "flex-1 min-w-0" : "w-18", className), children: [
1533
+ /* @__PURE__ */ jsx36("div", { className: "h-12 flex items-center justify-center border-b border-gray02 text-body1-regular text-secondary", children: formatDayLabel(date) }),
1534
+ slots.map((slot) => /* @__PURE__ */ jsx36(
766
1535
  TimeItem,
767
1536
  {
768
1537
  state: slot.state,
@@ -788,17 +1557,17 @@ var TimeItem = ({
788
1557
  }) => {
789
1558
  const clickable = (state === "default" || state === "selected") && !!onClick;
790
1559
  const style = state === "default" && color ? { "--tt-hover": color } : void 0;
791
- return /* @__PURE__ */ jsx13(
1560
+ return /* @__PURE__ */ jsx36(
792
1561
  "div",
793
1562
  {
794
1563
  onClick: clickable ? onClick : void 0,
795
1564
  style,
796
1565
  className: cn(
797
- "h-18 flex items-center justify-center",
1566
+ "h-18 flex items-center justify-center border-b border-gray02",
798
1567
  fluid ? "w-full" : "w-18",
799
1568
  "text-body1-medium text-center bg-white text-primary",
800
1569
  state === "none" && "bg-gray00 text-transparent",
801
- state === "selected" && "bg-black text-gray02 hover:cursor-pointer",
1570
+ state === "selected" && "bg-black text-white hover:cursor-pointer",
802
1571
  state === "disabled" && "bg-gray00 text-gray03",
803
1572
  state === "default" && [
804
1573
  "hover:cursor-pointer",
@@ -813,14 +1582,15 @@ var TimeItem = ({
813
1582
 
814
1583
  // src/components/TNB/TNB.tsx
815
1584
  import {
1585
+ Fragment as Fragment2,
816
1586
  forwardRef as forwardRef4,
817
1587
  useCallback as useCallback2,
818
- useState as useState2
1588
+ useState as useState6
819
1589
  } from "react";
820
- import { jsx as jsx14, jsxs as jsxs8 } from "react/jsx-runtime";
1590
+ import { jsx as jsx37, jsxs as jsxs21 } from "react/jsx-runtime";
821
1591
  function useControllableState2(controlled, defaultValue) {
822
1592
  const isControlled = controlled !== void 0;
823
- const [uncontrolled, setUncontrolled] = useState2(defaultValue);
1593
+ const [uncontrolled, setUncontrolled] = useState6(defaultValue);
824
1594
  const value = isControlled ? controlled : uncontrolled;
825
1595
  const setValue = useCallback2(
826
1596
  (next) => {
@@ -869,8 +1639,8 @@ var TNB = forwardRef4(function TNB2({
869
1639
  setLowerValue(label);
870
1640
  onSelectedLowerChange?.(label);
871
1641
  };
872
- return /* @__PURE__ */ jsxs8("nav", { ref, "aria-label": ariaLabel, className: cn("w-full bg-white", className), children: [
873
- /* @__PURE__ */ jsx14(
1642
+ return /* @__PURE__ */ jsxs21("nav", { ref, "aria-label": ariaLabel, className: cn("w-full bg-white", className), children: [
1643
+ /* @__PURE__ */ jsx37(
874
1644
  UpperPart,
875
1645
  {
876
1646
  logo,
@@ -881,7 +1651,7 @@ var TNB = forwardRef4(function TNB2({
881
1651
  linkComponent
882
1652
  }
883
1653
  ),
884
- /* @__PURE__ */ jsx14(
1654
+ /* @__PURE__ */ jsx37(
885
1655
  LowerPart,
886
1656
  {
887
1657
  lowerPartItemList: currentLowerItemList,
@@ -896,7 +1666,7 @@ var NavClickable = forwardRef4(function NavClickable2({ href, onClick, linkCompo
896
1666
  const ariaCurrent = current ? "page" : void 0;
897
1667
  if (href && !disabled) {
898
1668
  if (Link) {
899
- return /* @__PURE__ */ jsx14(
1669
+ return /* @__PURE__ */ jsx37(
900
1670
  Link,
901
1671
  {
902
1672
  href,
@@ -908,7 +1678,7 @@ var NavClickable = forwardRef4(function NavClickable2({ href, onClick, linkCompo
908
1678
  }
909
1679
  );
910
1680
  }
911
- return /* @__PURE__ */ jsx14(
1681
+ return /* @__PURE__ */ jsx37(
912
1682
  "a",
913
1683
  {
914
1684
  href,
@@ -920,7 +1690,7 @@ var NavClickable = forwardRef4(function NavClickable2({ href, onClick, linkCompo
920
1690
  }
921
1691
  );
922
1692
  }
923
- return /* @__PURE__ */ jsx14(
1693
+ return /* @__PURE__ */ jsx37(
924
1694
  "button",
925
1695
  {
926
1696
  type: "button",
@@ -942,33 +1712,50 @@ var UpperPart = ({
942
1712
  linkComponent,
943
1713
  className
944
1714
  }) => {
945
- return /* @__PURE__ */ jsxs8("div", { className: cn("w-full h-13 px-4 flex items-center justify-between", className), children: [
946
- /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-6", children: [
947
- /* @__PURE__ */ jsx14(NavIconButton, { ...logo, linkComponent }),
948
- /* @__PURE__ */ jsx14("div", { className: "flex items-center gap-4", children: upperPartItemList.map((item) => /* @__PURE__ */ jsx14(
949
- UpperPartTab,
950
- {
951
- label: item.label,
952
- href: item.href,
953
- selected: item.label === selected,
954
- linkComponent,
955
- onClick: () => {
956
- item.onClick?.();
957
- onSelectItem(item.label);
958
- }
959
- },
960
- item.id ?? item.label
961
- )) })
962
- ] }),
963
- /* @__PURE__ */ jsx14("div", { className: "flex items-center gap-2", children: upperPartIconList.map((icon, index) => /* @__PURE__ */ jsx14(
964
- NavIconButton,
965
- {
966
- ...icon,
967
- linkComponent
968
- },
969
- icon.id ?? icon.src ?? icon.label ?? index
970
- )) })
971
- ] });
1715
+ return /* @__PURE__ */ jsxs21(
1716
+ "div",
1717
+ {
1718
+ className: cn(
1719
+ "w-full min-h-13 flex items-stretch justify-between border-b border-gray02",
1720
+ className
1721
+ ),
1722
+ children: [
1723
+ /* @__PURE__ */ jsxs21("div", { className: "flex items-stretch", children: [
1724
+ /* @__PURE__ */ jsx37("div", { className: "flex w-14 shrink-0 items-center justify-center px-3", children: /* @__PURE__ */ jsx37(NavIconButton, { ...logo, linkComponent }) }),
1725
+ /* @__PURE__ */ jsxs21("div", { className: "flex items-stretch", children: [
1726
+ /* @__PURE__ */ jsx37("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
1727
+ upperPartItemList.map((item) => /* @__PURE__ */ jsxs21(Fragment2, { children: [
1728
+ /* @__PURE__ */ jsx37(
1729
+ UpperPartTab,
1730
+ {
1731
+ label: item.label,
1732
+ href: item.href,
1733
+ selected: item.label === selected,
1734
+ linkComponent,
1735
+ onClick: () => {
1736
+ item.onClick?.();
1737
+ onSelectItem(item.label);
1738
+ }
1739
+ }
1740
+ ),
1741
+ /* @__PURE__ */ jsx37("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
1742
+ ] }, item.id ?? item.label))
1743
+ ] })
1744
+ ] }),
1745
+ /* @__PURE__ */ jsxs21("div", { className: "flex items-stretch", children: [
1746
+ /* @__PURE__ */ jsx37("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
1747
+ upperPartIconList.map((icon, index) => /* @__PURE__ */ jsx37(
1748
+ NavIconButton,
1749
+ {
1750
+ ...icon,
1751
+ linkComponent
1752
+ },
1753
+ icon.id ?? icon.src ?? icon.label ?? index
1754
+ ))
1755
+ ] })
1756
+ ]
1757
+ }
1758
+ );
972
1759
  };
973
1760
  var UpperPartTab = ({
974
1761
  label,
@@ -978,7 +1765,7 @@ var UpperPartTab = ({
978
1765
  linkComponent,
979
1766
  className
980
1767
  }) => {
981
- return /* @__PURE__ */ jsx14(
1768
+ return /* @__PURE__ */ jsxs21(
982
1769
  NavClickable,
983
1770
  {
984
1771
  href,
@@ -986,11 +1773,14 @@ var UpperPartTab = ({
986
1773
  linkComponent,
987
1774
  current: selected,
988
1775
  className: cn(
989
- "inline-flex px-1 py-1.5 text-body2-regular cursor-pointer no-underline",
990
- selected ? "text-strong font-medium underline underline-offset-4" : "text-quaternary hover:text-secondary",
1776
+ "inline-flex min-h-13 flex-col items-center gap-2 pt-2.5 cursor-pointer no-underline",
1777
+ "transition-colors hover:bg-gray00 active:bg-gray01",
991
1778
  className
992
1779
  ),
993
- children: label
1780
+ children: [
1781
+ /* @__PURE__ */ jsx37("span", { className: cn("px-5 text-head1-medium", selected ? "text-strong" : "text-quaternary"), children: label }),
1782
+ /* @__PURE__ */ jsx37("span", { className: cn("h-0.5 w-full", selected ? "bg-black" : "bg-transparent") })
1783
+ ]
994
1784
  }
995
1785
  );
996
1786
  };
@@ -998,7 +1788,7 @@ var NavIconButton = forwardRef4(
998
1788
  function NavIconButton2({ src, icon, alt, label, href, onClick, selected, badge, className, linkComponent }, forwardedRef) {
999
1789
  const interactive = Boolean(onClick || href);
1000
1790
  const showBadge = badge !== void 0 && badge !== null && badge !== false;
1001
- return /* @__PURE__ */ jsxs8(
1791
+ return /* @__PURE__ */ jsxs21(
1002
1792
  NavClickable,
1003
1793
  {
1004
1794
  ref: forwardedRef,
@@ -1008,15 +1798,15 @@ var NavIconButton = forwardRef4(
1008
1798
  current: selected,
1009
1799
  disabled: !interactive,
1010
1800
  className: cn(
1011
- "relative inline-flex h-8 min-w-8 items-center justify-center gap-1.5 rounded-full px-1.5",
1801
+ "relative inline-flex h-13 min-w-13 items-center justify-center gap-1.5 px-3 transition-colors",
1012
1802
  interactive && "cursor-pointer",
1013
1803
  selected ? "bg-black text-white" : "bg-transparent hover:bg-gray00 active:bg-gray01",
1014
1804
  className
1015
1805
  ),
1016
1806
  children: [
1017
- icon ? /* @__PURE__ */ jsx14("span", { className: "inline-flex h-5 w-5 items-center justify-center", children: icon }) : src ? /* @__PURE__ */ jsx14("img", { src, alt: alt ?? label ?? "", className: "h-5 w-5" }) : null,
1018
- label ? /* @__PURE__ */ jsx14("span", { className: cn("text-body2-regular", selected ? "text-white" : "text-secondary"), children: label }) : null,
1019
- showBadge ? /* @__PURE__ */ jsx14(
1807
+ icon ? /* @__PURE__ */ jsx37("span", { className: "inline-flex h-6 w-6 items-center justify-center", children: icon }) : src ? /* @__PURE__ */ jsx37("img", { src, alt: alt ?? label ?? "", className: "h-6 w-6" }) : null,
1808
+ label ? /* @__PURE__ */ jsx37("span", { className: cn("text-body2-regular", selected ? "text-white" : "text-secondary"), children: label }) : null,
1809
+ showBadge ? /* @__PURE__ */ jsx37(
1020
1810
  "span",
1021
1811
  {
1022
1812
  "aria-hidden": badge === true,
@@ -1042,24 +1832,29 @@ var LowerPart = ({
1042
1832
  if (lowerPartItemList.length === 0) {
1043
1833
  return null;
1044
1834
  }
1045
- return /* @__PURE__ */ jsx14(
1835
+ return /* @__PURE__ */ jsxs21(
1046
1836
  "div",
1047
1837
  {
1048
- className: cn("w-full h-9 px-4 flex items-center gap-4 border-t border-gray02", className),
1049
- children: lowerPartItemList.map((item) => /* @__PURE__ */ jsx14(
1050
- LowerPartItemButton,
1051
- {
1052
- label: item.label,
1053
- href: item.href,
1054
- selected: item.label === selected,
1055
- linkComponent,
1056
- onClick: () => {
1057
- item.onClick?.();
1058
- onSelectItem(item.label);
1059
- }
1060
- },
1061
- item.id ?? item.label
1062
- ))
1838
+ className: cn("w-full h-[42px] pl-14 flex items-stretch border-b border-gray02", className),
1839
+ children: [
1840
+ /* @__PURE__ */ jsx37("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
1841
+ lowerPartItemList.map((item) => /* @__PURE__ */ jsxs21(Fragment2, { children: [
1842
+ /* @__PURE__ */ jsx37(
1843
+ LowerPartItemButton,
1844
+ {
1845
+ label: item.label,
1846
+ href: item.href,
1847
+ selected: item.label === selected,
1848
+ linkComponent,
1849
+ onClick: () => {
1850
+ item.onClick?.();
1851
+ onSelectItem(item.label);
1852
+ }
1853
+ }
1854
+ ),
1855
+ /* @__PURE__ */ jsx37("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
1856
+ ] }, item.id ?? item.label))
1857
+ ]
1063
1858
  }
1064
1859
  );
1065
1860
  };
@@ -1071,7 +1866,7 @@ var LowerPartItemButton = ({
1071
1866
  linkComponent,
1072
1867
  className
1073
1868
  }) => {
1074
- return /* @__PURE__ */ jsx14(
1869
+ return /* @__PURE__ */ jsx37(
1075
1870
  NavClickable,
1076
1871
  {
1077
1872
  href,
@@ -1079,9 +1874,9 @@ var LowerPartItemButton = ({
1079
1874
  linkComponent,
1080
1875
  current: selected,
1081
1876
  className: cn(
1082
- "inline-flex px-1.5 py-1 text-caption-regular cursor-pointer no-underline",
1083
- "hover:bg-gray00 active:bg-gray01",
1084
- selected ? "text-strong font-medium" : "text-quaternary",
1877
+ "inline-flex h-full items-center justify-center px-5 text-head3-medium cursor-pointer no-underline",
1878
+ "transition-colors hover:bg-gray00 active:bg-gray01",
1879
+ selected ? "text-strong" : "text-quaternary",
1085
1880
  className
1086
1881
  ),
1087
1882
  children: label
@@ -1090,14 +1885,14 @@ var LowerPartItemButton = ({
1090
1885
  };
1091
1886
 
1092
1887
  // src/components/Toast/Toast.tsx
1093
- import { forwardRef as forwardRef5, useEffect, useState as useState3 } from "react";
1094
- import { jsx as jsx15 } from "react/jsx-runtime";
1888
+ import { forwardRef as forwardRef5, useEffect as useEffect3, useState as useState7 } from "react";
1889
+ import { jsx as jsx38 } from "react/jsx-runtime";
1095
1890
  var EXIT_MS = 300;
1096
1891
  var Toast = forwardRef5(function Toast2({ message, open, duration = 3e3, onClose, position = "none", className }, ref) {
1097
1892
  const controlled = open !== void 0;
1098
- const [mounted, setMounted] = useState3(!controlled || open);
1099
- const [visible, setVisible] = useState3(!controlled || open);
1100
- useEffect(() => {
1893
+ const [mounted, setMounted] = useState7(!controlled || open);
1894
+ const [visible, setVisible] = useState7(!controlled || open);
1895
+ useEffect3(() => {
1101
1896
  if (!controlled) return;
1102
1897
  if (open) {
1103
1898
  setMounted(true);
@@ -1108,13 +1903,13 @@ var Toast = forwardRef5(function Toast2({ message, open, duration = 3e3, onClose
1108
1903
  const timer = setTimeout(() => setMounted(false), EXIT_MS);
1109
1904
  return () => clearTimeout(timer);
1110
1905
  }, [controlled, open]);
1111
- useEffect(() => {
1906
+ useEffect3(() => {
1112
1907
  if (!controlled || !open || !duration) return;
1113
1908
  const timer = setTimeout(() => onClose?.(), duration);
1114
1909
  return () => clearTimeout(timer);
1115
1910
  }, [controlled, open, duration, onClose]);
1116
1911
  if (!mounted) return null;
1117
- const banner = /* @__PURE__ */ jsx15(
1912
+ const banner = /* @__PURE__ */ jsx38(
1118
1913
  "div",
1119
1914
  {
1120
1915
  ref,
@@ -1122,7 +1917,7 @@ var Toast = forwardRef5(function Toast2({ message, open, duration = 3e3, onClose
1122
1917
  "aria-live": "polite",
1123
1918
  className: cn(
1124
1919
  "w-full h-fit py-2.5 bg-gray06",
1125
- "font-pretendard text-white text-center font-semibold text-[17px]",
1920
+ "font-pretendard text-white text-center font-semibold text-[17px] leading-[1.6]",
1126
1921
  "shadow-[0_2px_15px_rgba(0,0,0,0.18)]",
1127
1922
  controlled && "transition-opacity duration-300",
1128
1923
  controlled && (visible ? "opacity-100" : "opacity-0"),
@@ -1132,7 +1927,7 @@ var Toast = forwardRef5(function Toast2({ message, open, duration = 3e3, onClose
1132
1927
  }
1133
1928
  );
1134
1929
  if (position === "none") return banner;
1135
- return /* @__PURE__ */ jsx15(
1930
+ return /* @__PURE__ */ jsx38(
1136
1931
  "div",
1137
1932
  {
1138
1933
  className: cn(
@@ -1145,18 +1940,49 @@ var Toast = forwardRef5(function Toast2({ message, open, duration = 3e3, onClose
1145
1940
  });
1146
1941
  export {
1147
1942
  BackButton,
1943
+ BasicFormField,
1148
1944
  CTA,
1149
1945
  CategorySegment,
1150
1946
  CategorySegmentedControl,
1947
+ Column,
1948
+ ColumnContentContainer,
1949
+ ColumnDescription,
1950
+ ColumnDescriptionList,
1951
+ ColumnLabel,
1952
+ ColumnSubTitle,
1953
+ ColumnText,
1954
+ ColumnTextStyle,
1955
+ Dropdown,
1956
+ FormCheckBox,
1957
+ FormColor,
1958
+ FormFile,
1959
+ FormNumber,
1960
+ FormPassword,
1961
+ FormSelectBox,
1962
+ FormTel,
1963
+ FormText,
1964
+ FormTextArea,
1965
+ IconCheck,
1966
+ IconChevronDownXS,
1967
+ IconCompass,
1968
+ IconInfo,
1969
+ List,
1970
+ Modal,
1971
+ ModalText,
1972
+ ModalTextStyle,
1973
+ MultiColumn,
1151
1974
  NoticeBadge,
1152
1975
  NoticeBar,
1153
1976
  SearchBar,
1977
+ SelectBoxOption,
1154
1978
  SideRadioAccordion,
1155
1979
  TNB,
1156
1980
  Tag,
1981
+ TextButton,
1157
1982
  Timetable,
1158
1983
  TitleInput,
1159
1984
  Toast,
1160
- WeekNavigation
1985
+ WeekNavigation,
1986
+ getInputStyles
1161
1987
  };
1162
1988
  //# sourceMappingURL=index.mjs.map