@hivcd-printshop/design-system 1.2.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +28 -1
- package/dist/index.d.ts +28 -1
- package/dist/index.js +352 -257
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +341 -247
- package/dist/index.mjs.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +4 -1
package/dist/index.js
CHANGED
|
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
// src/index.ts
|
|
22
22
|
var index_exports = {};
|
|
23
23
|
__export(index_exports, {
|
|
24
|
+
Accordion: () => Accordion,
|
|
24
25
|
BackButton: () => BackButton,
|
|
25
26
|
BasicFormField: () => BasicFormField,
|
|
26
27
|
CTA: () => CTA,
|
|
@@ -73,6 +74,9 @@ __export(index_exports, {
|
|
|
73
74
|
});
|
|
74
75
|
module.exports = __toCommonJS(index_exports);
|
|
75
76
|
|
|
77
|
+
// src/components/Accordion/Accordion.tsx
|
|
78
|
+
var import_react2 = require("react");
|
|
79
|
+
|
|
76
80
|
// src/lib/cn.ts
|
|
77
81
|
var import_clsx = require("clsx");
|
|
78
82
|
var import_tailwind_merge = require("tailwind-merge");
|
|
@@ -100,6 +104,21 @@ function cn(...inputs) {
|
|
|
100
104
|
return twMerge((0, import_clsx.clsx)(inputs));
|
|
101
105
|
}
|
|
102
106
|
|
|
107
|
+
// src/lib/useControllableState.ts
|
|
108
|
+
var import_react = require("react");
|
|
109
|
+
function useControllableState(controlled, defaultValue) {
|
|
110
|
+
const isControlled = controlled !== void 0;
|
|
111
|
+
const [uncontrolled, setUncontrolled] = (0, import_react.useState)(defaultValue);
|
|
112
|
+
const value = isControlled ? controlled : uncontrolled;
|
|
113
|
+
const setValue = (0, import_react.useCallback)(
|
|
114
|
+
(next) => {
|
|
115
|
+
if (!isControlled) setUncontrolled(next);
|
|
116
|
+
},
|
|
117
|
+
[isControlled]
|
|
118
|
+
);
|
|
119
|
+
return [value, setValue, isControlled];
|
|
120
|
+
}
|
|
121
|
+
|
|
103
122
|
// src/assets/svgs/Icons.tsx
|
|
104
123
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
105
124
|
var IconChevronDownXS = ({
|
|
@@ -332,10 +351,88 @@ var IconClose = ({ className, stroke }) => {
|
|
|
332
351
|
);
|
|
333
352
|
};
|
|
334
353
|
|
|
335
|
-
// src/components/
|
|
354
|
+
// src/components/Accordion/Accordion.tsx
|
|
336
355
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
356
|
+
var Accordion = (0, import_react2.forwardRef)(function Accordion2({
|
|
357
|
+
step,
|
|
358
|
+
title,
|
|
359
|
+
children,
|
|
360
|
+
headerRight,
|
|
361
|
+
collapsible = true,
|
|
362
|
+
defaultOpen = true,
|
|
363
|
+
open,
|
|
364
|
+
onOpenChange,
|
|
365
|
+
stickyHeader = false,
|
|
366
|
+
className,
|
|
367
|
+
headerClassName,
|
|
368
|
+
contentClassName
|
|
369
|
+
}, ref) {
|
|
370
|
+
const [isOpen, setIsOpen] = useControllableState(open, defaultOpen);
|
|
371
|
+
const expanded = collapsible ? isOpen : true;
|
|
372
|
+
const toggleOpen = () => {
|
|
373
|
+
if (!collapsible) return;
|
|
374
|
+
const next = !isOpen;
|
|
375
|
+
setIsOpen(next);
|
|
376
|
+
onOpenChange?.(next);
|
|
377
|
+
};
|
|
378
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { ref, className: cn("w-full bg-white", className), children: [
|
|
379
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
380
|
+
AccordionHeader,
|
|
381
|
+
{
|
|
382
|
+
step,
|
|
383
|
+
title,
|
|
384
|
+
headerRight,
|
|
385
|
+
isOpen: expanded,
|
|
386
|
+
collapsible,
|
|
387
|
+
onClick: toggleOpen,
|
|
388
|
+
className: cn(stickyHeader && "sticky top-0 z-10", headerClassName)
|
|
389
|
+
}
|
|
390
|
+
),
|
|
391
|
+
expanded && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: contentClassName, children })
|
|
392
|
+
] });
|
|
393
|
+
});
|
|
394
|
+
var AccordionHeader = ({
|
|
395
|
+
step,
|
|
396
|
+
title,
|
|
397
|
+
headerRight,
|
|
398
|
+
isOpen,
|
|
399
|
+
collapsible,
|
|
400
|
+
onClick,
|
|
401
|
+
className
|
|
402
|
+
}) => {
|
|
403
|
+
const label = /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "truncate", children: [
|
|
404
|
+
step,
|
|
405
|
+
" | ",
|
|
406
|
+
title
|
|
407
|
+
] });
|
|
408
|
+
const base = "w-full flex items-center justify-between gap-3 px-5 py-2.5 text-head3-medium text-primary text-left bg-white border-b border-gray02";
|
|
409
|
+
if (!collapsible) {
|
|
410
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: cn(base, className), children: [
|
|
411
|
+
label,
|
|
412
|
+
headerRight
|
|
413
|
+
] });
|
|
414
|
+
}
|
|
415
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
416
|
+
"button",
|
|
417
|
+
{
|
|
418
|
+
type: "button",
|
|
419
|
+
onClick,
|
|
420
|
+
className: cn(base, "cursor-pointer hover:bg-gray00 active:bg-gray01", className),
|
|
421
|
+
children: [
|
|
422
|
+
label,
|
|
423
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "flex shrink-0 items-center gap-3", children: [
|
|
424
|
+
headerRight,
|
|
425
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(IconChevronDownXS, { className: cn("transition-transform", isOpen && "rotate-180") })
|
|
426
|
+
] })
|
|
427
|
+
]
|
|
428
|
+
}
|
|
429
|
+
);
|
|
430
|
+
};
|
|
431
|
+
|
|
432
|
+
// src/components/BackButton/BackButton.tsx
|
|
433
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
337
434
|
var BackButton = ({ onClick, className }) => {
|
|
338
|
-
return /* @__PURE__ */ (0,
|
|
435
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
339
436
|
"button",
|
|
340
437
|
{
|
|
341
438
|
type: "button",
|
|
@@ -348,13 +445,13 @@ var BackButton = ({ onClick, className }) => {
|
|
|
348
445
|
"cursor-pointer",
|
|
349
446
|
className
|
|
350
447
|
),
|
|
351
|
-
children: /* @__PURE__ */ (0,
|
|
448
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(IconGoBack, {})
|
|
352
449
|
}
|
|
353
450
|
);
|
|
354
451
|
};
|
|
355
452
|
|
|
356
453
|
// src/components/CTA/CTA.tsx
|
|
357
|
-
var
|
|
454
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
358
455
|
var CTA = ({
|
|
359
456
|
primary = false,
|
|
360
457
|
alert = false,
|
|
@@ -365,7 +462,7 @@ var CTA = ({
|
|
|
365
462
|
forModal = false,
|
|
366
463
|
...props
|
|
367
464
|
}) => {
|
|
368
|
-
return /* @__PURE__ */ (0,
|
|
465
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
369
466
|
"button",
|
|
370
467
|
{
|
|
371
468
|
type: "button",
|
|
@@ -393,22 +490,22 @@ var CTA = ({
|
|
|
393
490
|
};
|
|
394
491
|
|
|
395
492
|
// src/components/Column/MultiColumn.tsx
|
|
396
|
-
var
|
|
493
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
397
494
|
var MultiColumnMain = ({ children, className }) => {
|
|
398
|
-
return /* @__PURE__ */ (0,
|
|
495
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn("flex flex-col w-full h-full", className), children });
|
|
399
496
|
};
|
|
400
497
|
var Columns = ({ children, className }) => {
|
|
401
498
|
return (
|
|
402
499
|
// flex 래퍼를 사용하고 하위 Column들이 flex-1을 가지게 하거나,
|
|
403
500
|
// grid를 사용하여 열을 나눌 수 있어. 여기서는 flex를 활용한 균등 분할 예시야.
|
|
404
|
-
/* @__PURE__ */ (0,
|
|
501
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn("flex w-full h-full divide-x divide-gray02", className), children })
|
|
405
502
|
);
|
|
406
503
|
};
|
|
407
504
|
var CTAs = ({ children, className }) => {
|
|
408
505
|
if (!children) return null;
|
|
409
506
|
return (
|
|
410
507
|
// CTA 버튼들을 중앙에 배치하는 예시 (우측 정렬이 필요하면 justify-end 사용)
|
|
411
|
-
/* @__PURE__ */ (0,
|
|
508
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn("flex flex-col w-full h-fit", className), children })
|
|
412
509
|
);
|
|
413
510
|
};
|
|
414
511
|
var MultiColumn = Object.assign(MultiColumnMain, {
|
|
@@ -417,78 +514,78 @@ var MultiColumn = Object.assign(MultiColumnMain, {
|
|
|
417
514
|
});
|
|
418
515
|
|
|
419
516
|
// src/components/Column/Column.tsx
|
|
420
|
-
var
|
|
517
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
421
518
|
var Column = ({ className, children, header }) => {
|
|
422
|
-
return /* @__PURE__ */ (0,
|
|
423
|
-
header && /* @__PURE__ */ (0,
|
|
519
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: cn("flex flex-col gap-5", "h-full w-full px-5 py-3", className), children: [
|
|
520
|
+
header && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h1", { className: cn("text-body1-medium text-primary"), children: header }),
|
|
424
521
|
children
|
|
425
522
|
] });
|
|
426
523
|
};
|
|
427
524
|
|
|
428
525
|
// src/components/Column/ColumnContentContainer.tsx
|
|
429
|
-
var
|
|
526
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
430
527
|
var ColumnContentContainer = ({ className, children }) => {
|
|
431
|
-
return /* @__PURE__ */ (0,
|
|
528
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: cn("flex flex-col gap-1.5 w-full h-fit", className), children });
|
|
432
529
|
};
|
|
433
530
|
|
|
434
531
|
// src/components/Column/ColumnLabel.tsx
|
|
435
|
-
var
|
|
532
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
436
533
|
var ColumnLabel = ({ className, children, subLabel, htmlFor }) => {
|
|
437
|
-
return /* @__PURE__ */ (0,
|
|
438
|
-
/* @__PURE__ */ (0,
|
|
439
|
-
subLabel && /* @__PURE__ */ (0,
|
|
534
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("label", { htmlFor, className: cn("flex gap-1.5 items-end", className), children: [
|
|
535
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: cn("text-body2-regular text-tertiary"), children }),
|
|
536
|
+
subLabel && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: cn("text-caption-book text-quaternary"), children: subLabel })
|
|
440
537
|
] });
|
|
441
538
|
};
|
|
442
539
|
|
|
443
540
|
// src/components/Column/ColumnText.tsx
|
|
444
|
-
var
|
|
541
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
445
542
|
var ColumnTextStyle = "text-body3-book text-strong";
|
|
446
543
|
var ModalTextStyle = "text-body1-regular text-primary";
|
|
447
544
|
var ColumnText = ({ className, alert = false, children, onClick }) => {
|
|
448
|
-
return /* @__PURE__ */ (0,
|
|
545
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: cn(ColumnTextStyle, alert && "text-danger", className), onClick, children: children ? children : "-" });
|
|
449
546
|
};
|
|
450
547
|
|
|
451
548
|
// src/components/Column/ColumnSubTitle.tsx
|
|
452
|
-
var
|
|
549
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
453
550
|
var ColumnSubTitle = ({
|
|
454
551
|
className,
|
|
455
552
|
children,
|
|
456
553
|
action,
|
|
457
554
|
as: Tag2 = "h2"
|
|
458
555
|
}) => {
|
|
459
|
-
return /* @__PURE__ */ (0,
|
|
460
|
-
/* @__PURE__ */ (0,
|
|
461
|
-
action && /* @__PURE__ */ (0,
|
|
556
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Tag2, { className: cn("flex items-center justify-between gap-1.5", "w-full", className), children: [
|
|
557
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: cn("text-body1-medium text-primary"), children }),
|
|
558
|
+
action && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "flex shrink-0 items-center", children: action })
|
|
462
559
|
] });
|
|
463
560
|
};
|
|
464
561
|
|
|
465
562
|
// src/components/Column/ColumnDescription.tsx
|
|
466
|
-
var
|
|
563
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
467
564
|
var ColumnDescription = ({
|
|
468
565
|
className,
|
|
469
566
|
children,
|
|
470
567
|
bullet = true
|
|
471
568
|
}) => {
|
|
472
|
-
return /* @__PURE__ */ (0,
|
|
473
|
-
bullet && /* @__PURE__ */ (0,
|
|
474
|
-
/* @__PURE__ */ (0,
|
|
569
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: cn("flex items-start gap-3", className), children: [
|
|
570
|
+
bullet && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "flex shrink-0 items-center py-1", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(IconCompass, { className: "size-4" }) }),
|
|
571
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "min-w-0 flex-1 whitespace-pre-line text-body3-book text-primary", children })
|
|
475
572
|
] });
|
|
476
573
|
};
|
|
477
574
|
var ColumnDescriptionList = ({ className, children }) => {
|
|
478
|
-
return /* @__PURE__ */ (0,
|
|
575
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: cn("flex flex-col gap-4", className), children });
|
|
479
576
|
};
|
|
480
577
|
|
|
481
578
|
// src/components/Form/BasicFormField.tsx
|
|
482
|
-
var
|
|
579
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
483
580
|
var BasicFormField = ({
|
|
484
581
|
children,
|
|
485
582
|
isDanger,
|
|
486
583
|
dangerText,
|
|
487
584
|
className
|
|
488
585
|
}) => {
|
|
489
|
-
return /* @__PURE__ */ (0,
|
|
586
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: cn("flex flex-col gap-1.5", className), children: [
|
|
490
587
|
children,
|
|
491
|
-
isDanger && dangerText && /* @__PURE__ */ (0,
|
|
588
|
+
isDanger && dangerText && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-caption-book text-danger", children: dangerText })
|
|
492
589
|
] });
|
|
493
590
|
};
|
|
494
591
|
var getInputStyles = (isDanger, additionalClass) => {
|
|
@@ -507,15 +604,15 @@ var getInputStyles = (isDanger, additionalClass) => {
|
|
|
507
604
|
};
|
|
508
605
|
|
|
509
606
|
// src/components/Form/FormText.tsx
|
|
510
|
-
var
|
|
607
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
511
608
|
var FormText = ({ className, isDanger, dangerText, ...props }) => {
|
|
512
|
-
return /* @__PURE__ */ (0,
|
|
609
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("input", { type: "text", className: getInputStyles(isDanger, className), ...props }) });
|
|
513
610
|
};
|
|
514
611
|
|
|
515
612
|
// src/components/Form/FormTextArea.tsx
|
|
516
|
-
var
|
|
613
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
517
614
|
var FormTextArea = ({ className, isDanger, dangerText, ...props }) => {
|
|
518
|
-
return /* @__PURE__ */ (0,
|
|
615
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
519
616
|
"textarea",
|
|
520
617
|
{
|
|
521
618
|
className: getInputStyles(isDanger, "resize-none h-30 px-4 py-2.5 " + (className || "")),
|
|
@@ -525,19 +622,19 @@ var FormTextArea = ({ className, isDanger, dangerText, ...props }) => {
|
|
|
525
622
|
};
|
|
526
623
|
|
|
527
624
|
// src/components/Form/FormNumber.tsx
|
|
528
|
-
var
|
|
625
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
529
626
|
var FormNumber = ({ className, isDanger, dangerText, ...props }) => {
|
|
530
|
-
return /* @__PURE__ */ (0,
|
|
627
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("input", { type: "number", className: getInputStyles(isDanger, className), ...props }) });
|
|
531
628
|
};
|
|
532
629
|
|
|
533
630
|
// src/components/Form/FormPassword.tsx
|
|
534
|
-
var
|
|
631
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
535
632
|
var FormPassword = ({ className, isDanger, dangerText, ...props }) => {
|
|
536
|
-
return /* @__PURE__ */ (0,
|
|
633
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("input", { type: "password", className: getInputStyles(isDanger, className), ...props }) });
|
|
537
634
|
};
|
|
538
635
|
|
|
539
636
|
// src/components/Form/FormTel.tsx
|
|
540
|
-
var
|
|
637
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
541
638
|
var FormTel = ({ className, isDanger, dangerText, onChange, ...props }) => {
|
|
542
639
|
const handlePhoneChange = (e) => {
|
|
543
640
|
const rawValue = e.target.value.replace(/[^0-9]/g, "");
|
|
@@ -549,7 +646,7 @@ var FormTel = ({ className, isDanger, dangerText, onChange, ...props }) => {
|
|
|
549
646
|
e.target.value = formattedValue;
|
|
550
647
|
if (onChange) onChange(e);
|
|
551
648
|
};
|
|
552
|
-
return /* @__PURE__ */ (0,
|
|
649
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
553
650
|
"input",
|
|
554
651
|
{
|
|
555
652
|
type: "tel",
|
|
@@ -562,8 +659,8 @@ var FormTel = ({ className, isDanger, dangerText, onChange, ...props }) => {
|
|
|
562
659
|
};
|
|
563
660
|
|
|
564
661
|
// src/components/Form/FormColor.tsx
|
|
565
|
-
var
|
|
566
|
-
var
|
|
662
|
+
var import_react3 = require("react");
|
|
663
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
567
664
|
var FormColor = ({
|
|
568
665
|
className,
|
|
569
666
|
isDanger,
|
|
@@ -573,7 +670,7 @@ var FormColor = ({
|
|
|
573
670
|
onChange,
|
|
574
671
|
...props
|
|
575
672
|
}) => {
|
|
576
|
-
const [internalColor, setInternalColor] = (0,
|
|
673
|
+
const [internalColor, setInternalColor] = (0, import_react3.useState)(
|
|
577
674
|
value || defaultValue || "#000000"
|
|
578
675
|
);
|
|
579
676
|
const color = value !== void 0 ? value : internalColor;
|
|
@@ -581,7 +678,7 @@ var FormColor = ({
|
|
|
581
678
|
setInternalColor(e.target.value);
|
|
582
679
|
onChange?.(e);
|
|
583
680
|
};
|
|
584
|
-
return /* @__PURE__ */ (0,
|
|
681
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
585
682
|
"label",
|
|
586
683
|
{
|
|
587
684
|
className: getInputStyles(
|
|
@@ -590,7 +687,7 @@ var FormColor = ({
|
|
|
590
687
|
"flex items-center gap-2 relative focus-within:border-black focus-within:hover:bg-white" + (className || "")
|
|
591
688
|
),
|
|
592
689
|
children: [
|
|
593
|
-
/* @__PURE__ */ (0,
|
|
690
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "w-6 h-6 shrink-0 overflow-hidden", style: { backgroundColor: color }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
594
691
|
"input",
|
|
595
692
|
{
|
|
596
693
|
type: "color",
|
|
@@ -600,15 +697,15 @@ var FormColor = ({
|
|
|
600
697
|
...props
|
|
601
698
|
}
|
|
602
699
|
) }),
|
|
603
|
-
/* @__PURE__ */ (0,
|
|
700
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-primary text-body3-regular uppercase flex-1 select-none", children: color })
|
|
604
701
|
]
|
|
605
702
|
}
|
|
606
703
|
) });
|
|
607
704
|
};
|
|
608
705
|
|
|
609
706
|
// src/components/Form/FormFile.tsx
|
|
610
|
-
var
|
|
611
|
-
var
|
|
707
|
+
var import_react4 = require("react");
|
|
708
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
612
709
|
var FormFile = ({
|
|
613
710
|
className,
|
|
614
711
|
isDanger,
|
|
@@ -618,7 +715,7 @@ var FormFile = ({
|
|
|
618
715
|
onChange,
|
|
619
716
|
...props
|
|
620
717
|
}) => {
|
|
621
|
-
const [selectedFile, setSelectedFile] = (0,
|
|
718
|
+
const [selectedFile, setSelectedFile] = (0, import_react4.useState)(null);
|
|
622
719
|
const handleFileChange = (e) => {
|
|
623
720
|
const originalFile = e.target.files?.[0];
|
|
624
721
|
if (!originalFile) {
|
|
@@ -669,7 +766,7 @@ var FormFile = ({
|
|
|
669
766
|
}
|
|
670
767
|
};
|
|
671
768
|
const displayFileName = selectedFile?.name || (fileUrl ? fileUrl.split("/").pop() : null);
|
|
672
|
-
return /* @__PURE__ */ (0,
|
|
769
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
673
770
|
"div",
|
|
674
771
|
{
|
|
675
772
|
className: getInputStyles(
|
|
@@ -682,7 +779,7 @@ var FormFile = ({
|
|
|
682
779
|
)
|
|
683
780
|
),
|
|
684
781
|
children: [
|
|
685
|
-
displayFileName && /* @__PURE__ */ (0,
|
|
782
|
+
displayFileName && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
686
783
|
"span",
|
|
687
784
|
{
|
|
688
785
|
onClick: handleDownload,
|
|
@@ -691,9 +788,9 @@ var FormFile = ({
|
|
|
691
788
|
children: displayFileName
|
|
692
789
|
}
|
|
693
790
|
),
|
|
694
|
-
/* @__PURE__ */ (0,
|
|
695
|
-
/* @__PURE__ */ (0,
|
|
696
|
-
/* @__PURE__ */ (0,
|
|
791
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("label", { className: "shrink-0 px-1 -mx-1 cursor-pointer", children: [
|
|
792
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "text-primary text-caption-regular underline", children: displayFileName ? "\uB2E4\uC2DC \uCCA8\uBD80" : "\uD30C\uC77C \uCCA8\uBD80" }),
|
|
793
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("input", { type: "file", className: "hidden", onChange: handleFileChange, ...props })
|
|
697
794
|
] })
|
|
698
795
|
]
|
|
699
796
|
}
|
|
@@ -701,7 +798,7 @@ var FormFile = ({
|
|
|
701
798
|
};
|
|
702
799
|
|
|
703
800
|
// src/components/Form/FormCheckBox.tsx
|
|
704
|
-
var
|
|
801
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
705
802
|
var FormCheckBox = ({
|
|
706
803
|
isChecked,
|
|
707
804
|
setIsChecked,
|
|
@@ -710,7 +807,7 @@ var FormCheckBox = ({
|
|
|
710
807
|
textStyle,
|
|
711
808
|
...props
|
|
712
809
|
}) => {
|
|
713
|
-
return /* @__PURE__ */ (0,
|
|
810
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
714
811
|
"label",
|
|
715
812
|
{
|
|
716
813
|
className: cn(
|
|
@@ -721,7 +818,7 @@ var FormCheckBox = ({
|
|
|
721
818
|
className
|
|
722
819
|
),
|
|
723
820
|
children: [
|
|
724
|
-
/* @__PURE__ */ (0,
|
|
821
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
725
822
|
"input",
|
|
726
823
|
{
|
|
727
824
|
type: "checkbox",
|
|
@@ -731,14 +828,14 @@ var FormCheckBox = ({
|
|
|
731
828
|
...props
|
|
732
829
|
}
|
|
733
830
|
),
|
|
734
|
-
/* @__PURE__ */ (0,
|
|
831
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
735
832
|
"div",
|
|
736
833
|
{
|
|
737
834
|
className: cn(
|
|
738
835
|
"flex items-center justify-center w-5 h-5 shrink-0 rounded transition-colors",
|
|
739
836
|
"group-hover:bg-gray00 group-active:bg-gray01"
|
|
740
837
|
),
|
|
741
|
-
children: /* @__PURE__ */ (0,
|
|
838
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
742
839
|
"div",
|
|
743
840
|
{
|
|
744
841
|
className: cn(
|
|
@@ -748,29 +845,29 @@ var FormCheckBox = ({
|
|
|
748
845
|
// 💡 3. 키보드 Tab 이동 시 접근성 향상 (포커스 링 표시)
|
|
749
846
|
"peer-focus-visible:ring-2 peer-focus-visible:ring-black peer-focus-visible:ring-offset-1"
|
|
750
847
|
),
|
|
751
|
-
children: isChecked && /* @__PURE__ */ (0,
|
|
848
|
+
children: isChecked && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(IconCheck, {})
|
|
752
849
|
}
|
|
753
850
|
)
|
|
754
851
|
}
|
|
755
852
|
),
|
|
756
|
-
children && /* @__PURE__ */ (0,
|
|
853
|
+
children && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: cn("text-body3-book text-primary", textStyle), children })
|
|
757
854
|
]
|
|
758
855
|
}
|
|
759
856
|
);
|
|
760
857
|
};
|
|
761
858
|
|
|
762
859
|
// src/components/Form/FormSelectBox.tsx
|
|
763
|
-
var
|
|
860
|
+
var import_react5 = require("react");
|
|
764
861
|
|
|
765
862
|
// src/components/Form/SelectBoxOption.tsx
|
|
766
|
-
var
|
|
863
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
767
864
|
var SelectBoxOption = ({
|
|
768
865
|
label,
|
|
769
866
|
onClick,
|
|
770
867
|
// selectedLabel,
|
|
771
868
|
className
|
|
772
869
|
}) => {
|
|
773
|
-
return /* @__PURE__ */ (0,
|
|
870
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
774
871
|
"li",
|
|
775
872
|
{
|
|
776
873
|
onClick,
|
|
@@ -792,7 +889,7 @@ var SelectBoxOption = ({
|
|
|
792
889
|
};
|
|
793
890
|
|
|
794
891
|
// src/components/Form/FormSelectBox.tsx
|
|
795
|
-
var
|
|
892
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
796
893
|
var FormSelectBox = ({
|
|
797
894
|
options,
|
|
798
895
|
value,
|
|
@@ -802,9 +899,9 @@ var FormSelectBox = ({
|
|
|
802
899
|
dangerText,
|
|
803
900
|
className
|
|
804
901
|
}) => {
|
|
805
|
-
const [isOpen, setIsOpen] = (0,
|
|
806
|
-
const containerRef = (0,
|
|
807
|
-
(0,
|
|
902
|
+
const [isOpen, setIsOpen] = (0, import_react5.useState)(false);
|
|
903
|
+
const containerRef = (0, import_react5.useRef)(null);
|
|
904
|
+
(0, import_react5.useEffect)(() => {
|
|
808
905
|
const handleClickOutside = (event) => {
|
|
809
906
|
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
810
907
|
setIsOpen(false);
|
|
@@ -815,8 +912,8 @@ var FormSelectBox = ({
|
|
|
815
912
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
816
913
|
};
|
|
817
914
|
}, []);
|
|
818
|
-
return /* @__PURE__ */ (0,
|
|
819
|
-
/* @__PURE__ */ (0,
|
|
915
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(BasicFormField, { isDanger, dangerText, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { ref: containerRef, className: "relative w-full", children: [
|
|
916
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
820
917
|
"div",
|
|
821
918
|
{
|
|
822
919
|
tabIndex: 0,
|
|
@@ -836,8 +933,8 @@ var FormSelectBox = ({
|
|
|
836
933
|
setIsOpen((prev) => !prev);
|
|
837
934
|
},
|
|
838
935
|
children: [
|
|
839
|
-
/* @__PURE__ */ (0,
|
|
840
|
-
/* @__PURE__ */ (0,
|
|
936
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: value ? "text-primary" : "text-quaternary", children: value || placeholder }),
|
|
937
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
841
938
|
IconChevronDownXS,
|
|
842
939
|
{
|
|
843
940
|
className: cn("text-gray06 transition-transform", isOpen && "rotate-180"),
|
|
@@ -847,7 +944,7 @@ var FormSelectBox = ({
|
|
|
847
944
|
]
|
|
848
945
|
}
|
|
849
946
|
),
|
|
850
|
-
isOpen && /* @__PURE__ */ (0,
|
|
947
|
+
isOpen && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
851
948
|
"ul",
|
|
852
949
|
{
|
|
853
950
|
className: cn(
|
|
@@ -857,7 +954,7 @@ var FormSelectBox = ({
|
|
|
857
954
|
"max-h-50 overflow-y-auto"
|
|
858
955
|
// 항목이 너무 많으면 스크롤 생성 (디자인 스펙: 그림자 없음)
|
|
859
956
|
),
|
|
860
|
-
children: options.map((option) => /* @__PURE__ */ (0,
|
|
957
|
+
children: options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
861
958
|
SelectBoxOption,
|
|
862
959
|
{
|
|
863
960
|
label: option,
|
|
@@ -874,7 +971,7 @@ var FormSelectBox = ({
|
|
|
874
971
|
};
|
|
875
972
|
|
|
876
973
|
// src/components/TextButton/TextButton.tsx
|
|
877
|
-
var
|
|
974
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
878
975
|
var TextButton = ({
|
|
879
976
|
children,
|
|
880
977
|
icon,
|
|
@@ -884,10 +981,10 @@ var TextButton = ({
|
|
|
884
981
|
className,
|
|
885
982
|
...props
|
|
886
983
|
}) => {
|
|
887
|
-
const content = /* @__PURE__ */ (0,
|
|
888
|
-
icon && iconPosition === "left" && /* @__PURE__ */ (0,
|
|
889
|
-
/* @__PURE__ */ (0,
|
|
890
|
-
icon && iconPosition === "right" && /* @__PURE__ */ (0,
|
|
984
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
985
|
+
icon && iconPosition === "left" && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "flex shrink-0 items-center", children: icon }),
|
|
986
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: cn(underline && "underline underline-offset-2"), children }),
|
|
987
|
+
icon && iconPosition === "right" && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "flex shrink-0 items-center", children: icon })
|
|
891
988
|
] });
|
|
892
989
|
const classes = cn(
|
|
893
990
|
"inline-flex w-fit items-center gap-1 px-1 -mx-1",
|
|
@@ -902,19 +999,19 @@ var TextButton = ({
|
|
|
902
999
|
);
|
|
903
1000
|
if (props.href !== void 0) {
|
|
904
1001
|
const { href, ...rest } = props;
|
|
905
|
-
return /* @__PURE__ */ (0,
|
|
1002
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href, className: classes, ...rest, children: content });
|
|
906
1003
|
}
|
|
907
1004
|
const buttonProps = props;
|
|
908
|
-
return /* @__PURE__ */ (0,
|
|
1005
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("button", { type: "button", className: classes, ...buttonProps, children: content });
|
|
909
1006
|
};
|
|
910
1007
|
|
|
911
1008
|
// src/components/Dropdown/Dropdown.tsx
|
|
912
|
-
var
|
|
913
|
-
var
|
|
1009
|
+
var import_react6 = require("react");
|
|
1010
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
914
1011
|
var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
|
|
915
|
-
const [isOpen, setIsOpen] = (0,
|
|
916
|
-
const containerRef = (0,
|
|
917
|
-
(0,
|
|
1012
|
+
const [isOpen, setIsOpen] = (0, import_react6.useState)(false);
|
|
1013
|
+
const containerRef = (0, import_react6.useRef)(null);
|
|
1014
|
+
(0, import_react6.useEffect)(() => {
|
|
918
1015
|
const handleClickOutside = (event) => {
|
|
919
1016
|
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
920
1017
|
setIsOpen(false);
|
|
@@ -925,8 +1022,8 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
|
|
|
925
1022
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
926
1023
|
};
|
|
927
1024
|
}, []);
|
|
928
|
-
return /* @__PURE__ */ (0,
|
|
929
|
-
/* @__PURE__ */ (0,
|
|
1025
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { ref: containerRef, className: "relative", children: [
|
|
1026
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
930
1027
|
"div",
|
|
931
1028
|
{
|
|
932
1029
|
className: cn(
|
|
@@ -939,8 +1036,8 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
|
|
|
939
1036
|
),
|
|
940
1037
|
onClick: () => setIsOpen((prev) => !prev),
|
|
941
1038
|
children: [
|
|
942
|
-
/* @__PURE__ */ (0,
|
|
943
|
-
/* @__PURE__ */ (0,
|
|
1039
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { children: selectedLabel }),
|
|
1040
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
944
1041
|
IconChevronDownXS,
|
|
945
1042
|
{
|
|
946
1043
|
className: cn("text-gray06 transition-transform", isOpen && "rotate-180"),
|
|
@@ -950,7 +1047,7 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
|
|
|
950
1047
|
]
|
|
951
1048
|
}
|
|
952
1049
|
),
|
|
953
|
-
isOpen && /* @__PURE__ */ (0,
|
|
1050
|
+
isOpen && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: cn("absolute top-full right-0 z-10", "box-border border border-gray02"), children: labels.map((label) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
954
1051
|
SelectBoxOption,
|
|
955
1052
|
{
|
|
956
1053
|
label,
|
|
@@ -966,7 +1063,7 @@ var Dropdown = ({ selectedLabel, setSelectedLabel, labels, className }) => {
|
|
|
966
1063
|
};
|
|
967
1064
|
|
|
968
1065
|
// src/components/ListView/List.tsx
|
|
969
|
-
var
|
|
1066
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
970
1067
|
function List({
|
|
971
1068
|
className,
|
|
972
1069
|
label1,
|
|
@@ -979,7 +1076,7 @@ function List({
|
|
|
979
1076
|
children,
|
|
980
1077
|
...props
|
|
981
1078
|
}) {
|
|
982
|
-
return /* @__PURE__ */ (0,
|
|
1079
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
983
1080
|
"li",
|
|
984
1081
|
{
|
|
985
1082
|
className: cn(
|
|
@@ -994,11 +1091,11 @@ function List({
|
|
|
994
1091
|
...props,
|
|
995
1092
|
onClick,
|
|
996
1093
|
children: [
|
|
997
|
-
/* @__PURE__ */ (0,
|
|
998
|
-
/* @__PURE__ */ (0,
|
|
999
|
-
/* @__PURE__ */ (0,
|
|
1094
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("section", { className: cn("flex items-center gap-4"), children: [
|
|
1095
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { className: cn("text-body2-regular"), children: label1 ? label1 : "-" }),
|
|
1096
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: cn("flex items-center gap-2"), children })
|
|
1000
1097
|
] }),
|
|
1001
|
-
/* @__PURE__ */ (0,
|
|
1098
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
1002
1099
|
"label",
|
|
1003
1100
|
{
|
|
1004
1101
|
className: cn(
|
|
@@ -1010,26 +1107,26 @@ function List({
|
|
|
1010
1107
|
children: label2 ? label2 : "-"
|
|
1011
1108
|
}
|
|
1012
1109
|
),
|
|
1013
|
-
/* @__PURE__ */ (0,
|
|
1110
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { className: cn("text-body3-regular text-right"), children: label3 ? label3 : "-" })
|
|
1014
1111
|
]
|
|
1015
1112
|
}
|
|
1016
1113
|
);
|
|
1017
1114
|
}
|
|
1018
1115
|
|
|
1019
1116
|
// src/components/Modal/Modal.tsx
|
|
1020
|
-
var
|
|
1117
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1021
1118
|
var ModalBase = ({ isVisible, header, children, className, onClose }) => {
|
|
1022
1119
|
if (!isVisible) return null;
|
|
1023
|
-
return /* @__PURE__ */ (0,
|
|
1024
|
-
/* @__PURE__ */ (0,
|
|
1120
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: cn("fixed inset-0 z-50"), children: [
|
|
1121
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1025
1122
|
"div",
|
|
1026
1123
|
{
|
|
1027
1124
|
"aria-hidden": true,
|
|
1028
1125
|
onClick: onClose,
|
|
1029
|
-
className: cn("fixed inset-0 z-1000 bg-
|
|
1126
|
+
className: cn("fixed inset-0 z-1000 bg-[#212121]/30", onClose && "cursor-pointer")
|
|
1030
1127
|
}
|
|
1031
1128
|
),
|
|
1032
|
-
/* @__PURE__ */ (0,
|
|
1129
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "fixed inset-0 z-1001 flex items-center justify-center pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
1033
1130
|
"main",
|
|
1034
1131
|
{
|
|
1035
1132
|
role: "dialog",
|
|
@@ -1042,7 +1139,7 @@ var ModalBase = ({ isVisible, header, children, className, onClose }) => {
|
|
|
1042
1139
|
className
|
|
1043
1140
|
),
|
|
1044
1141
|
children: [
|
|
1045
|
-
onClose && /* @__PURE__ */ (0,
|
|
1142
|
+
onClose && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1046
1143
|
"button",
|
|
1047
1144
|
{
|
|
1048
1145
|
type: "button",
|
|
@@ -1052,10 +1149,10 @@ var ModalBase = ({ isVisible, header, children, className, onClose }) => {
|
|
|
1052
1149
|
"absolute right-3 top-3 flex size-8 items-center justify-center",
|
|
1053
1150
|
"text-tertiary transition-colors hover:bg-gray00 active:bg-gray01 cursor-pointer"
|
|
1054
1151
|
),
|
|
1055
|
-
children: /* @__PURE__ */ (0,
|
|
1152
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(IconClose, {})
|
|
1056
1153
|
}
|
|
1057
1154
|
),
|
|
1058
|
-
/* @__PURE__ */ (0,
|
|
1155
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h1", { className: cn("text-strong font-[500] text-[24px] leading-[32px]"), children: header }),
|
|
1059
1156
|
children
|
|
1060
1157
|
]
|
|
1061
1158
|
}
|
|
@@ -1063,7 +1160,7 @@ var ModalBase = ({ isVisible, header, children, className, onClose }) => {
|
|
|
1063
1160
|
] });
|
|
1064
1161
|
};
|
|
1065
1162
|
var Contents = ({ children, className }) => {
|
|
1066
|
-
return /* @__PURE__ */ (0,
|
|
1163
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1067
1164
|
"div",
|
|
1068
1165
|
{
|
|
1069
1166
|
className: cn(
|
|
@@ -1080,7 +1177,7 @@ var CTAs2 = ({ children, className, row = false }) => {
|
|
|
1080
1177
|
if (!children) return null;
|
|
1081
1178
|
return (
|
|
1082
1179
|
// CTA 버튼들을 중앙에 배치하는 예시 (우측 정렬이 필요하면 justify-end 사용)
|
|
1083
|
-
/* @__PURE__ */ (0,
|
|
1180
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1084
1181
|
"div",
|
|
1085
1182
|
{
|
|
1086
1183
|
className: cn(
|
|
@@ -1099,9 +1196,9 @@ var Modal = Object.assign(ModalBase, {
|
|
|
1099
1196
|
});
|
|
1100
1197
|
|
|
1101
1198
|
// src/components/Modal/ModalText.tsx
|
|
1102
|
-
var
|
|
1199
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
1103
1200
|
var ModalText = ({ children, className }) => {
|
|
1104
|
-
return /* @__PURE__ */ (0,
|
|
1201
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1105
1202
|
"div",
|
|
1106
1203
|
{
|
|
1107
1204
|
className: cn(
|
|
@@ -1117,14 +1214,14 @@ var ModalText = ({ children, className }) => {
|
|
|
1117
1214
|
};
|
|
1118
1215
|
|
|
1119
1216
|
// src/components/createPost/CategorySegment.tsx
|
|
1120
|
-
var
|
|
1217
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
1121
1218
|
var CategorySegment = ({
|
|
1122
1219
|
selected = false,
|
|
1123
1220
|
label,
|
|
1124
1221
|
className,
|
|
1125
1222
|
onClick
|
|
1126
1223
|
}) => {
|
|
1127
|
-
return /* @__PURE__ */ (0,
|
|
1224
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1128
1225
|
"div",
|
|
1129
1226
|
{
|
|
1130
1227
|
className: cn(
|
|
@@ -1144,7 +1241,7 @@ var CategorySegment = ({
|
|
|
1144
1241
|
};
|
|
1145
1242
|
|
|
1146
1243
|
// src/components/createPost/CategorySegmentedControl.tsx
|
|
1147
|
-
var
|
|
1244
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
1148
1245
|
var categorySegments = {
|
|
1149
1246
|
info: ["\uACF5\uC6A9 \uBB3C\uD488", "\uC77C\uBC18 \uAE30\uC790\uC7AC", "\uD2B9\uC218 \uAE30\uC790\uC7AC"],
|
|
1150
1247
|
archive: ["\uD504\uB9B0\uD2B8\uC2E4", "\uD64D\uC775\uC2DC\uB514"],
|
|
@@ -1158,8 +1255,8 @@ var CategorySegmentedControl = ({
|
|
|
1158
1255
|
className
|
|
1159
1256
|
}) => {
|
|
1160
1257
|
const segments = categorySegments[variable];
|
|
1161
|
-
return /* @__PURE__ */ (0,
|
|
1162
|
-
/* @__PURE__ */ (0,
|
|
1258
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: cn("w-full h-fit flex items-center justify-start", className), children: [
|
|
1259
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1163
1260
|
"div",
|
|
1164
1261
|
{
|
|
1165
1262
|
className: cn(
|
|
@@ -1172,7 +1269,7 @@ var CategorySegmentedControl = ({
|
|
|
1172
1269
|
children: variable === "infoTag" ? "\uD0DC\uADF8 \uC120\uD0DD" : "\uCE74\uD14C\uACE0\uB9AC \uC120\uD0DD"
|
|
1173
1270
|
}
|
|
1174
1271
|
),
|
|
1175
|
-
segments.map((label) => /* @__PURE__ */ (0,
|
|
1272
|
+
segments.map((label) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1176
1273
|
CategorySegment,
|
|
1177
1274
|
{
|
|
1178
1275
|
label,
|
|
@@ -1185,9 +1282,9 @@ var CategorySegmentedControl = ({
|
|
|
1185
1282
|
};
|
|
1186
1283
|
|
|
1187
1284
|
// src/components/createPost/TitleInput.tsx
|
|
1188
|
-
var
|
|
1285
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
1189
1286
|
var TitleInput = ({ title, onChange, className }) => {
|
|
1190
|
-
return /* @__PURE__ */ (0,
|
|
1287
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1191
1288
|
"input",
|
|
1192
1289
|
{
|
|
1193
1290
|
type: "text",
|
|
@@ -1207,9 +1304,9 @@ var TitleInput = ({ title, onChange, className }) => {
|
|
|
1207
1304
|
};
|
|
1208
1305
|
|
|
1209
1306
|
// src/components/notice/NoticeBadge.tsx
|
|
1210
|
-
var
|
|
1307
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
1211
1308
|
var NoticeBadge = ({ variable, className, onClick }) => {
|
|
1212
|
-
return /* @__PURE__ */ (0,
|
|
1309
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1213
1310
|
"button",
|
|
1214
1311
|
{
|
|
1215
1312
|
type: "button",
|
|
@@ -1230,7 +1327,7 @@ var NoticeBadge = ({ variable, className, onClick }) => {
|
|
|
1230
1327
|
};
|
|
1231
1328
|
|
|
1232
1329
|
// src/components/notice/NoticeBar.tsx
|
|
1233
|
-
var
|
|
1330
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
1234
1331
|
var NoticeBar = ({
|
|
1235
1332
|
variable = "default",
|
|
1236
1333
|
badgeVariable,
|
|
@@ -1239,7 +1336,7 @@ var NoticeBar = ({
|
|
|
1239
1336
|
className,
|
|
1240
1337
|
onClick
|
|
1241
1338
|
}) => {
|
|
1242
|
-
return /* @__PURE__ */ (0,
|
|
1339
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
|
|
1243
1340
|
"div",
|
|
1244
1341
|
{
|
|
1245
1342
|
className: cn(
|
|
@@ -1251,20 +1348,20 @@ var NoticeBar = ({
|
|
|
1251
1348
|
),
|
|
1252
1349
|
onClick,
|
|
1253
1350
|
children: [
|
|
1254
|
-
/* @__PURE__ */ (0,
|
|
1255
|
-
/* @__PURE__ */ (0,
|
|
1256
|
-
/* @__PURE__ */ (0,
|
|
1351
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("section", { className: "flex items-center gap-3", children: [
|
|
1352
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(NoticeBadge, { variable: badgeVariable }),
|
|
1353
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("h1", { className: "text-head1-medium text-strong", children: title })
|
|
1257
1354
|
] }),
|
|
1258
|
-
/* @__PURE__ */ (0,
|
|
1355
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-body3-book text-tertiary", children: date })
|
|
1259
1356
|
]
|
|
1260
1357
|
}
|
|
1261
1358
|
);
|
|
1262
1359
|
};
|
|
1263
1360
|
|
|
1264
1361
|
// src/components/SearchBar/SearchBar.tsx
|
|
1265
|
-
var
|
|
1362
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
1266
1363
|
var SearchBar = ({ value, onChange, className }) => {
|
|
1267
|
-
return /* @__PURE__ */ (0,
|
|
1364
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
|
|
1268
1365
|
"label",
|
|
1269
1366
|
{
|
|
1270
1367
|
className: cn(
|
|
@@ -1275,8 +1372,8 @@ var SearchBar = ({ value, onChange, className }) => {
|
|
|
1275
1372
|
className
|
|
1276
1373
|
),
|
|
1277
1374
|
children: [
|
|
1278
|
-
/* @__PURE__ */ (0,
|
|
1279
|
-
/* @__PURE__ */ (0,
|
|
1375
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(IconSearch, {}),
|
|
1376
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
1280
1377
|
"input",
|
|
1281
1378
|
{
|
|
1282
1379
|
type: "text",
|
|
@@ -1295,25 +1392,8 @@ var SearchBar = ({ value, onChange, className }) => {
|
|
|
1295
1392
|
};
|
|
1296
1393
|
|
|
1297
1394
|
// src/components/SideRadioAccordion/SideRadioAccordion.tsx
|
|
1298
|
-
var
|
|
1299
|
-
|
|
1300
|
-
// src/lib/useControllableState.ts
|
|
1301
|
-
var import_react5 = require("react");
|
|
1302
|
-
function useControllableState(controlled, defaultValue) {
|
|
1303
|
-
const isControlled = controlled !== void 0;
|
|
1304
|
-
const [uncontrolled, setUncontrolled] = (0, import_react5.useState)(defaultValue);
|
|
1305
|
-
const value = isControlled ? controlled : uncontrolled;
|
|
1306
|
-
const setValue = (0, import_react5.useCallback)(
|
|
1307
|
-
(next) => {
|
|
1308
|
-
if (!isControlled) setUncontrolled(next);
|
|
1309
|
-
},
|
|
1310
|
-
[isControlled]
|
|
1311
|
-
);
|
|
1312
|
-
return [value, setValue, isControlled];
|
|
1313
|
-
}
|
|
1314
|
-
|
|
1315
|
-
// src/components/SideRadioAccordion/SideRadioAccordion.tsx
|
|
1316
|
-
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
1395
|
+
var import_react7 = require("react");
|
|
1396
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
1317
1397
|
var printColorBgClass = {
|
|
1318
1398
|
Plotter: "bg-print-plotter",
|
|
1319
1399
|
Printer: "bg-print-printer",
|
|
@@ -1324,7 +1404,7 @@ var printColorBgClass = {
|
|
|
1324
1404
|
"Laser Cutting": "bg-print-laser-cutting"
|
|
1325
1405
|
};
|
|
1326
1406
|
var itemKey = (item) => item.value ?? item.title;
|
|
1327
|
-
var SideRadioAccordion = (0,
|
|
1407
|
+
var SideRadioAccordion = (0, import_react7.forwardRef)(
|
|
1328
1408
|
function SideRadioAccordion2({
|
|
1329
1409
|
step,
|
|
1330
1410
|
title,
|
|
@@ -1357,8 +1437,8 @@ var SideRadioAccordion = (0, import_react6.forwardRef)(
|
|
|
1357
1437
|
setIsOpen(next);
|
|
1358
1438
|
onOpenChange?.(next);
|
|
1359
1439
|
};
|
|
1360
|
-
return /* @__PURE__ */ (0,
|
|
1361
|
-
/* @__PURE__ */ (0,
|
|
1440
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { ref, className: cn("w-full border-r border-gray02 bg-white", className), children: [
|
|
1441
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
1362
1442
|
Stepper,
|
|
1363
1443
|
{
|
|
1364
1444
|
step,
|
|
@@ -1369,8 +1449,8 @@ var SideRadioAccordion = (0, import_react6.forwardRef)(
|
|
|
1369
1449
|
className: cn(stickyHeader && "sticky top-0 z-10")
|
|
1370
1450
|
}
|
|
1371
1451
|
),
|
|
1372
|
-
expanded && /* @__PURE__ */ (0,
|
|
1373
|
-
radioToggleList.map((item) => /* @__PURE__ */ (0,
|
|
1452
|
+
expanded && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex flex-col divide-y divide-gray02", children: [
|
|
1453
|
+
radioToggleList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
1374
1454
|
RadioToggleItem,
|
|
1375
1455
|
{
|
|
1376
1456
|
...item,
|
|
@@ -1379,22 +1459,22 @@ var SideRadioAccordion = (0, import_react6.forwardRef)(
|
|
|
1379
1459
|
},
|
|
1380
1460
|
itemKey(item)
|
|
1381
1461
|
)),
|
|
1382
|
-
quantityLimitLabel && /* @__PURE__ */ (0,
|
|
1462
|
+
quantityLimitLabel && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "px-5 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TextButton2, { label: quantityLimitLabel, onClick: onClickQuantityLimit }) })
|
|
1383
1463
|
] })
|
|
1384
1464
|
] });
|
|
1385
1465
|
}
|
|
1386
1466
|
);
|
|
1387
1467
|
var Stepper = ({ step, title, isOpen, collapsible, onClick, className }) => {
|
|
1388
|
-
const label = /* @__PURE__ */ (0,
|
|
1468
|
+
const label = /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { children: [
|
|
1389
1469
|
step,
|
|
1390
1470
|
" | ",
|
|
1391
1471
|
title
|
|
1392
1472
|
] });
|
|
1393
1473
|
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";
|
|
1394
1474
|
if (!collapsible) {
|
|
1395
|
-
return /* @__PURE__ */ (0,
|
|
1475
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: cn(base, className), children: label });
|
|
1396
1476
|
}
|
|
1397
|
-
return /* @__PURE__ */ (0,
|
|
1477
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
1398
1478
|
"button",
|
|
1399
1479
|
{
|
|
1400
1480
|
type: "button",
|
|
@@ -1402,7 +1482,7 @@ var Stepper = ({ step, title, isOpen, collapsible, onClick, className }) => {
|
|
|
1402
1482
|
className: cn(base, "cursor-pointer hover:bg-gray00 active:bg-gray01", className),
|
|
1403
1483
|
children: [
|
|
1404
1484
|
label,
|
|
1405
|
-
/* @__PURE__ */ (0,
|
|
1485
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(IconChevronDownXS, { className: cn("transition-transform", isOpen && "rotate-180") })
|
|
1406
1486
|
]
|
|
1407
1487
|
}
|
|
1408
1488
|
);
|
|
@@ -1421,29 +1501,30 @@ var RadioToggleItem = ({
|
|
|
1421
1501
|
}) => {
|
|
1422
1502
|
const rowBg = !open ? "bg-white hover:bg-gray00" : color ? void 0 : printColor ? printColorBgClass[printColor] : "bg-gray00";
|
|
1423
1503
|
const style = open && color ? { backgroundColor: color } : void 0;
|
|
1424
|
-
return /* @__PURE__ */ (0,
|
|
1425
|
-
/* @__PURE__ */ (0,
|
|
1504
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "w-full", children: [
|
|
1505
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
1426
1506
|
"button",
|
|
1427
1507
|
{
|
|
1428
1508
|
type: "button",
|
|
1429
1509
|
onClick: onSelect,
|
|
1430
1510
|
style,
|
|
1431
1511
|
className: cn(
|
|
1432
|
-
"w-full flex items-center gap-1.5 p-3",
|
|
1433
|
-
"text-body1-regular text-
|
|
1512
|
+
"group w-full flex items-center gap-1.5 p-3",
|
|
1513
|
+
"text-body1-regular text-left cursor-pointer",
|
|
1514
|
+
open ? "text-strong" : "text-secondary",
|
|
1434
1515
|
rowBg,
|
|
1435
1516
|
className
|
|
1436
1517
|
),
|
|
1437
1518
|
children: [
|
|
1438
|
-
/* @__PURE__ */ (0,
|
|
1439
|
-
/* @__PURE__ */ (0,
|
|
1519
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Radio, { selected: open }),
|
|
1520
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: title })
|
|
1440
1521
|
]
|
|
1441
1522
|
}
|
|
1442
1523
|
),
|
|
1443
|
-
open && /* @__PURE__ */ (0,
|
|
1444
|
-
/* @__PURE__ */ (0,
|
|
1445
|
-
badges && badges.length > 0 && /* @__PURE__ */ (0,
|
|
1446
|
-
labelTextButton && /* @__PURE__ */ (0,
|
|
1524
|
+
open && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex flex-col gap-2 px-3 py-3 bg-white", children: [
|
|
1525
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { className: "text-caption-regular text-secondary", children: content }),
|
|
1526
|
+
badges && badges.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "flex flex-wrap gap-1", children: badges.map((badge) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Badge, { label: badge }, badge)) }),
|
|
1527
|
+
labelTextButton && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
1447
1528
|
TextButton2,
|
|
1448
1529
|
{
|
|
1449
1530
|
label: labelTextButton,
|
|
@@ -1457,10 +1538,24 @@ var RadioToggleItem = ({
|
|
|
1457
1538
|
};
|
|
1458
1539
|
var Radio = ({ selected = false, className }) => {
|
|
1459
1540
|
const Icon = selected ? IconRadioSelected : IconRadioUnselected;
|
|
1460
|
-
return
|
|
1541
|
+
return (
|
|
1542
|
+
// 디자인 스펙(Figma "radio" 5:781): 아이콘 자체 색은 고정, hover/pressed 시
|
|
1543
|
+
// 24px 원형 배경 칩만 나타난다(gray00/gray01). 부모 버튼의 group-hover/active로 동기화.
|
|
1544
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
1545
|
+
"span",
|
|
1546
|
+
{
|
|
1547
|
+
className: cn(
|
|
1548
|
+
"inline-flex size-6 shrink-0 items-center justify-center rounded-full transition-colors",
|
|
1549
|
+
"group-hover:bg-gray00 group-active:bg-gray01",
|
|
1550
|
+
className
|
|
1551
|
+
),
|
|
1552
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon, { className: "size-6" })
|
|
1553
|
+
}
|
|
1554
|
+
)
|
|
1555
|
+
);
|
|
1461
1556
|
};
|
|
1462
1557
|
var TextButton2 = ({ label, onClick, showIcon = false, className }) => {
|
|
1463
|
-
return /* @__PURE__ */ (0,
|
|
1558
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
1464
1559
|
"button",
|
|
1465
1560
|
{
|
|
1466
1561
|
type: "button",
|
|
@@ -1473,14 +1568,14 @@ var TextButton2 = ({ label, onClick, showIcon = false, className }) => {
|
|
|
1473
1568
|
className
|
|
1474
1569
|
),
|
|
1475
1570
|
children: [
|
|
1476
|
-
showIcon && /* @__PURE__ */ (0,
|
|
1571
|
+
showIcon && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(IconExclamation, {}),
|
|
1477
1572
|
label
|
|
1478
1573
|
]
|
|
1479
1574
|
}
|
|
1480
1575
|
);
|
|
1481
1576
|
};
|
|
1482
1577
|
var Badge = ({ label, className }) => {
|
|
1483
|
-
return /* @__PURE__ */ (0,
|
|
1578
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
1484
1579
|
"div",
|
|
1485
1580
|
{
|
|
1486
1581
|
className: cn(
|
|
@@ -1494,7 +1589,7 @@ var Badge = ({ label, className }) => {
|
|
|
1494
1589
|
};
|
|
1495
1590
|
|
|
1496
1591
|
// src/components/Tag/Tag.tsx
|
|
1497
|
-
var
|
|
1592
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
1498
1593
|
var Tag = ({
|
|
1499
1594
|
className,
|
|
1500
1595
|
children,
|
|
@@ -1504,7 +1599,7 @@ var Tag = ({
|
|
|
1504
1599
|
onClick,
|
|
1505
1600
|
...props
|
|
1506
1601
|
}) => {
|
|
1507
|
-
return /* @__PURE__ */ (0,
|
|
1602
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
1508
1603
|
"button",
|
|
1509
1604
|
{
|
|
1510
1605
|
className: cn(
|
|
@@ -1523,16 +1618,16 @@ var Tag = ({
|
|
|
1523
1618
|
disabled,
|
|
1524
1619
|
style: bgColor ? { backgroundColor: bgColor, border: "none" } : void 0,
|
|
1525
1620
|
...props,
|
|
1526
|
-
children: /* @__PURE__ */ (0,
|
|
1621
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children })
|
|
1527
1622
|
}
|
|
1528
1623
|
);
|
|
1529
1624
|
};
|
|
1530
1625
|
|
|
1531
1626
|
// src/components/Timetable/Timetable.tsx
|
|
1532
|
-
var
|
|
1627
|
+
var import_react9 = require("react");
|
|
1533
1628
|
|
|
1534
1629
|
// src/components/Timetable/WeekNavigation.tsx
|
|
1535
|
-
var
|
|
1630
|
+
var import_react8 = require("react");
|
|
1536
1631
|
|
|
1537
1632
|
// src/components/Timetable/dateUtils.ts
|
|
1538
1633
|
var KOREAN_WEEKDAYS = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
|
|
@@ -1565,18 +1660,18 @@ var formatWeekRange = (weekStart) => {
|
|
|
1565
1660
|
};
|
|
1566
1661
|
|
|
1567
1662
|
// src/components/Timetable/WeekNavigation.tsx
|
|
1568
|
-
var
|
|
1663
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
1569
1664
|
var weekLabel = {
|
|
1570
1665
|
thisWeek: "\uC774\uBC88 \uC8FC",
|
|
1571
1666
|
nextWeek: "\uB2E4\uC74C \uC8FC",
|
|
1572
1667
|
twoWeeksLater: "\uB2E4\uB2E4\uC74C \uC8FC"
|
|
1573
1668
|
};
|
|
1574
|
-
var WeekNavigation = (0,
|
|
1669
|
+
var WeekNavigation = (0, import_react8.forwardRef)(
|
|
1575
1670
|
function WeekNavigation2({ date, week, label, canPrev, canNext, onPrevWeek, onNextWeek, className }, ref) {
|
|
1576
1671
|
const showPrev = canPrev ?? (week ? week !== "thisWeek" : true);
|
|
1577
1672
|
const showNext = canNext ?? (week ? week !== "twoWeeksLater" : true);
|
|
1578
1673
|
const text = label ?? (week ? `${weekLabel[week]} (${formatWeekRange(date)})` : formatWeekRange(date));
|
|
1579
|
-
return /* @__PURE__ */ (0,
|
|
1674
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
1580
1675
|
"div",
|
|
1581
1676
|
{
|
|
1582
1677
|
ref,
|
|
@@ -1588,26 +1683,26 @@ var WeekNavigation = (0, import_react7.forwardRef)(
|
|
|
1588
1683
|
className
|
|
1589
1684
|
),
|
|
1590
1685
|
children: [
|
|
1591
|
-
/* @__PURE__ */ (0,
|
|
1592
|
-
/* @__PURE__ */ (0,
|
|
1593
|
-
/* @__PURE__ */ (0,
|
|
1686
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ArrowButton, { direction: "left", visible: showPrev, onClick: onPrevWeek }),
|
|
1687
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "flex flex-1 items-center justify-center text-center", children: text }),
|
|
1688
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ArrowButton, { direction: "right", visible: showNext, onClick: onNextWeek })
|
|
1594
1689
|
]
|
|
1595
1690
|
}
|
|
1596
1691
|
);
|
|
1597
1692
|
}
|
|
1598
1693
|
);
|
|
1599
1694
|
var ArrowButton = ({ direction, visible, onClick }) => {
|
|
1600
|
-
const divider = /* @__PURE__ */ (0,
|
|
1695
|
+
const divider = /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" });
|
|
1601
1696
|
if (!visible) {
|
|
1602
|
-
return /* @__PURE__ */ (0,
|
|
1697
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex items-stretch", children: [
|
|
1603
1698
|
direction === "right" && divider,
|
|
1604
|
-
/* @__PURE__ */ (0,
|
|
1699
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "w-[42px]" }),
|
|
1605
1700
|
direction === "left" && divider
|
|
1606
1701
|
] });
|
|
1607
1702
|
}
|
|
1608
|
-
return /* @__PURE__ */ (0,
|
|
1703
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex items-stretch", children: [
|
|
1609
1704
|
direction === "right" && divider,
|
|
1610
|
-
/* @__PURE__ */ (0,
|
|
1705
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1611
1706
|
"button",
|
|
1612
1707
|
{
|
|
1613
1708
|
type: "button",
|
|
@@ -1617,7 +1712,7 @@ var ArrowButton = ({ direction, visible, onClick }) => {
|
|
|
1617
1712
|
"text-gray06 cursor-pointer transition-colors",
|
|
1618
1713
|
"hover:bg-gray00 active:bg-gray01"
|
|
1619
1714
|
),
|
|
1620
|
-
children: /* @__PURE__ */ (0,
|
|
1715
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1621
1716
|
IconChevronDownXS,
|
|
1622
1717
|
{
|
|
1623
1718
|
className: direction === "left" ? "rotate-90" : "-rotate-90",
|
|
@@ -1631,7 +1726,7 @@ var ArrowButton = ({ direction, visible, onClick }) => {
|
|
|
1631
1726
|
};
|
|
1632
1727
|
|
|
1633
1728
|
// src/components/Timetable/Timetable.tsx
|
|
1634
|
-
var
|
|
1729
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
1635
1730
|
var printColorHoverClass = {
|
|
1636
1731
|
Plotter: "hover:bg-print-plotter",
|
|
1637
1732
|
Printer: "hover:bg-print-printer",
|
|
@@ -1641,7 +1736,7 @@ var printColorHoverClass = {
|
|
|
1641
1736
|
"Seet Cutting": "hover:bg-print-seet-cutting",
|
|
1642
1737
|
"Laser Cutting": "hover:bg-print-laser-cutting"
|
|
1643
1738
|
};
|
|
1644
|
-
var Timetable = (0,
|
|
1739
|
+
var Timetable = (0, import_react9.forwardRef)(function Timetable2({
|
|
1645
1740
|
weekStart,
|
|
1646
1741
|
week,
|
|
1647
1742
|
days,
|
|
@@ -1654,8 +1749,8 @@ var Timetable = (0, import_react8.forwardRef)(function Timetable2({
|
|
|
1654
1749
|
canNextWeek,
|
|
1655
1750
|
className
|
|
1656
1751
|
}, ref) {
|
|
1657
|
-
return /* @__PURE__ */ (0,
|
|
1658
|
-
!hideWeekNavigation && /* @__PURE__ */ (0,
|
|
1752
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { ref, className: cn(fluid && "w-full", className), children: [
|
|
1753
|
+
!hideWeekNavigation && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
1659
1754
|
WeekNavigation,
|
|
1660
1755
|
{
|
|
1661
1756
|
date: weekStart,
|
|
@@ -1666,7 +1761,7 @@ var Timetable = (0, import_react8.forwardRef)(function Timetable2({
|
|
|
1666
1761
|
onNextWeek
|
|
1667
1762
|
}
|
|
1668
1763
|
),
|
|
1669
|
-
/* @__PURE__ */ (0,
|
|
1764
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: cn("flex", fluid && "w-full"), children: days.map((day) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
1670
1765
|
DailyTimetable,
|
|
1671
1766
|
{
|
|
1672
1767
|
date: day.date,
|
|
@@ -1679,9 +1774,9 @@ var Timetable = (0, import_react8.forwardRef)(function Timetable2({
|
|
|
1679
1774
|
] });
|
|
1680
1775
|
});
|
|
1681
1776
|
var DailyTimetable = ({ date, slots, fluid, onSelectTime, className }) => {
|
|
1682
|
-
return /* @__PURE__ */ (0,
|
|
1683
|
-
/* @__PURE__ */ (0,
|
|
1684
|
-
slots.map((slot) => /* @__PURE__ */ (0,
|
|
1777
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: cn("flex flex-col", fluid ? "flex-1 min-w-0" : "w-18", className), children: [
|
|
1778
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "h-12 flex items-center justify-center border-b border-gray02 text-body1-regular text-secondary", children: formatDayLabel(date) }),
|
|
1779
|
+
slots.map((slot) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
1685
1780
|
TimeItem,
|
|
1686
1781
|
{
|
|
1687
1782
|
state: slot.state,
|
|
@@ -1707,16 +1802,17 @@ var TimeItem = ({
|
|
|
1707
1802
|
}) => {
|
|
1708
1803
|
const clickable = (state === "default" || state === "selected") && !!onClick;
|
|
1709
1804
|
const style = state === "default" && color ? { "--tt-hover": color } : void 0;
|
|
1710
|
-
return /* @__PURE__ */ (0,
|
|
1805
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
1711
1806
|
"div",
|
|
1712
1807
|
{
|
|
1713
1808
|
onClick: clickable ? onClick : void 0,
|
|
1714
1809
|
style,
|
|
1715
1810
|
className: cn(
|
|
1716
|
-
"h-18 flex items-center justify-center
|
|
1811
|
+
"h-18 flex items-center justify-center",
|
|
1717
1812
|
fluid ? "w-full" : "w-18",
|
|
1718
1813
|
"text-body1-medium text-center bg-white text-primary",
|
|
1719
|
-
|
|
1814
|
+
// "none"(일정 없음)은 구분선을 그리지 않아 연속된 빈 칸이 하나의 덩어리로 보이게 한다.
|
|
1815
|
+
state === "none" ? "bg-gray00 text-transparent" : "border-b border-gray02",
|
|
1720
1816
|
state === "selected" && "bg-black text-white hover:cursor-pointer",
|
|
1721
1817
|
state === "disabled" && "bg-gray00 text-gray03",
|
|
1722
1818
|
state === "default" && [
|
|
@@ -1731,13 +1827,13 @@ var TimeItem = ({
|
|
|
1731
1827
|
};
|
|
1732
1828
|
|
|
1733
1829
|
// src/components/TNB/TNB.tsx
|
|
1734
|
-
var
|
|
1735
|
-
var
|
|
1830
|
+
var import_react10 = require("react");
|
|
1831
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
1736
1832
|
function useControllableState2(controlled, defaultValue) {
|
|
1737
1833
|
const isControlled = controlled !== void 0;
|
|
1738
|
-
const [uncontrolled, setUncontrolled] = (0,
|
|
1834
|
+
const [uncontrolled, setUncontrolled] = (0, import_react10.useState)(defaultValue);
|
|
1739
1835
|
const value = isControlled ? controlled : uncontrolled;
|
|
1740
|
-
const setValue = (0,
|
|
1836
|
+
const setValue = (0, import_react10.useCallback)(
|
|
1741
1837
|
(next) => {
|
|
1742
1838
|
if (!isControlled) setUncontrolled(next);
|
|
1743
1839
|
},
|
|
@@ -1745,7 +1841,7 @@ function useControllableState2(controlled, defaultValue) {
|
|
|
1745
1841
|
);
|
|
1746
1842
|
return [value, setValue, isControlled];
|
|
1747
1843
|
}
|
|
1748
|
-
var TNB = (0,
|
|
1844
|
+
var TNB = (0, import_react10.forwardRef)(function TNB2({
|
|
1749
1845
|
logo,
|
|
1750
1846
|
upperPartItemList,
|
|
1751
1847
|
upperPartIconList,
|
|
@@ -1784,8 +1880,8 @@ var TNB = (0, import_react9.forwardRef)(function TNB2({
|
|
|
1784
1880
|
setLowerValue(label);
|
|
1785
1881
|
onSelectedLowerChange?.(label);
|
|
1786
1882
|
};
|
|
1787
|
-
return /* @__PURE__ */ (0,
|
|
1788
|
-
/* @__PURE__ */ (0,
|
|
1883
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("nav", { ref, "aria-label": ariaLabel, className: cn("w-full bg-white", className), children: [
|
|
1884
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
1789
1885
|
UpperPart,
|
|
1790
1886
|
{
|
|
1791
1887
|
logo,
|
|
@@ -1796,7 +1892,7 @@ var TNB = (0, import_react9.forwardRef)(function TNB2({
|
|
|
1796
1892
|
linkComponent
|
|
1797
1893
|
}
|
|
1798
1894
|
),
|
|
1799
|
-
/* @__PURE__ */ (0,
|
|
1895
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
1800
1896
|
LowerPart,
|
|
1801
1897
|
{
|
|
1802
1898
|
lowerPartItemList: currentLowerItemList,
|
|
@@ -1807,11 +1903,11 @@ var TNB = (0, import_react9.forwardRef)(function TNB2({
|
|
|
1807
1903
|
)
|
|
1808
1904
|
] });
|
|
1809
1905
|
});
|
|
1810
|
-
var NavClickable = (0,
|
|
1906
|
+
var NavClickable = (0, import_react10.forwardRef)(function NavClickable2({ href, onClick, linkComponent: Link, current, disabled, className, children }, ref) {
|
|
1811
1907
|
const ariaCurrent = current ? "page" : void 0;
|
|
1812
1908
|
if (href && !disabled) {
|
|
1813
1909
|
if (Link) {
|
|
1814
|
-
return /* @__PURE__ */ (0,
|
|
1910
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
1815
1911
|
Link,
|
|
1816
1912
|
{
|
|
1817
1913
|
href,
|
|
@@ -1823,7 +1919,7 @@ var NavClickable = (0, import_react9.forwardRef)(function NavClickable2({ href,
|
|
|
1823
1919
|
}
|
|
1824
1920
|
);
|
|
1825
1921
|
}
|
|
1826
|
-
return /* @__PURE__ */ (0,
|
|
1922
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
1827
1923
|
"a",
|
|
1828
1924
|
{
|
|
1829
1925
|
href,
|
|
@@ -1835,7 +1931,7 @@ var NavClickable = (0, import_react9.forwardRef)(function NavClickable2({ href,
|
|
|
1835
1931
|
}
|
|
1836
1932
|
);
|
|
1837
1933
|
}
|
|
1838
|
-
return /* @__PURE__ */ (0,
|
|
1934
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
1839
1935
|
"button",
|
|
1840
1936
|
{
|
|
1841
1937
|
type: "button",
|
|
@@ -1857,7 +1953,7 @@ var UpperPart = ({
|
|
|
1857
1953
|
linkComponent,
|
|
1858
1954
|
className
|
|
1859
1955
|
}) => {
|
|
1860
|
-
return /* @__PURE__ */ (0,
|
|
1956
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
1861
1957
|
"div",
|
|
1862
1958
|
{
|
|
1863
1959
|
className: cn(
|
|
@@ -1865,12 +1961,12 @@ var UpperPart = ({
|
|
|
1865
1961
|
className
|
|
1866
1962
|
),
|
|
1867
1963
|
children: [
|
|
1868
|
-
/* @__PURE__ */ (0,
|
|
1869
|
-
/* @__PURE__ */ (0,
|
|
1870
|
-
/* @__PURE__ */ (0,
|
|
1871
|
-
/* @__PURE__ */ (0,
|
|
1872
|
-
upperPartItemList.map((item) => /* @__PURE__ */ (0,
|
|
1873
|
-
/* @__PURE__ */ (0,
|
|
1964
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-stretch", children: [
|
|
1965
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex w-14 shrink-0 items-center justify-center px-3", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(NavIconButton, { ...logo, linkComponent }) }),
|
|
1966
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-stretch", children: [
|
|
1967
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
|
|
1968
|
+
upperPartItemList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react10.Fragment, { children: [
|
|
1969
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
1874
1970
|
UpperPartTab,
|
|
1875
1971
|
{
|
|
1876
1972
|
label: item.label,
|
|
@@ -1883,20 +1979,16 @@ var UpperPart = ({
|
|
|
1883
1979
|
}
|
|
1884
1980
|
}
|
|
1885
1981
|
),
|
|
1886
|
-
/* @__PURE__ */ (0,
|
|
1982
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
|
|
1887
1983
|
] }, item.id ?? item.label))
|
|
1888
1984
|
] })
|
|
1889
1985
|
] }),
|
|
1890
|
-
/* @__PURE__ */ (0,
|
|
1891
|
-
/* @__PURE__ */ (0,
|
|
1892
|
-
upperPartIconList.map((icon, index) => /* @__PURE__ */ (0,
|
|
1893
|
-
NavIconButton,
|
|
1894
|
-
{
|
|
1895
|
-
|
|
1896
|
-
linkComponent
|
|
1897
|
-
},
|
|
1898
|
-
icon.id ?? icon.src ?? icon.label ?? index
|
|
1899
|
-
))
|
|
1986
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-stretch", children: [
|
|
1987
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
|
|
1988
|
+
upperPartIconList.map((icon, index) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react10.Fragment, { children: [
|
|
1989
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(NavIconButton, { ...icon, linkComponent }),
|
|
1990
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
|
|
1991
|
+
] }, icon.id ?? icon.src ?? icon.label ?? index))
|
|
1900
1992
|
] })
|
|
1901
1993
|
]
|
|
1902
1994
|
}
|
|
@@ -1910,7 +2002,7 @@ var UpperPartTab = ({
|
|
|
1910
2002
|
linkComponent,
|
|
1911
2003
|
className
|
|
1912
2004
|
}) => {
|
|
1913
|
-
return /* @__PURE__ */ (0,
|
|
2005
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
1914
2006
|
NavClickable,
|
|
1915
2007
|
{
|
|
1916
2008
|
href,
|
|
@@ -1918,22 +2010,24 @@ var UpperPartTab = ({
|
|
|
1918
2010
|
linkComponent,
|
|
1919
2011
|
current: selected,
|
|
1920
2012
|
className: cn(
|
|
1921
|
-
|
|
2013
|
+
// 헤더 바닥 border-b와 언더라인이 겹치도록 높이를 52px로 고정하고
|
|
2014
|
+
// justify-between으로 라벨/언더라인을 위-아래 끝에 붙인다.
|
|
2015
|
+
"inline-flex h-13 flex-col items-center justify-between pt-2.5 cursor-pointer no-underline",
|
|
1922
2016
|
"transition-colors hover:bg-gray00 active:bg-gray01",
|
|
1923
2017
|
className
|
|
1924
2018
|
),
|
|
1925
2019
|
children: [
|
|
1926
|
-
/* @__PURE__ */ (0,
|
|
1927
|
-
/* @__PURE__ */ (0,
|
|
2020
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: cn("px-5 text-head1-medium", selected ? "text-strong" : "text-quaternary"), children: label }),
|
|
2021
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: cn("h-0.5 w-full", selected ? "bg-black" : "bg-transparent") })
|
|
1928
2022
|
]
|
|
1929
2023
|
}
|
|
1930
2024
|
);
|
|
1931
2025
|
};
|
|
1932
|
-
var NavIconButton = (0,
|
|
2026
|
+
var NavIconButton = (0, import_react10.forwardRef)(
|
|
1933
2027
|
function NavIconButton2({ src, icon, alt, label, href, onClick, selected, badge, className, linkComponent }, forwardedRef) {
|
|
1934
2028
|
const interactive = Boolean(onClick || href);
|
|
1935
2029
|
const showBadge = badge !== void 0 && badge !== null && badge !== false;
|
|
1936
|
-
return /* @__PURE__ */ (0,
|
|
2030
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
1937
2031
|
NavClickable,
|
|
1938
2032
|
{
|
|
1939
2033
|
ref: forwardedRef,
|
|
@@ -1949,9 +2043,9 @@ var NavIconButton = (0, import_react9.forwardRef)(
|
|
|
1949
2043
|
className
|
|
1950
2044
|
),
|
|
1951
2045
|
children: [
|
|
1952
|
-
icon ? /* @__PURE__ */ (0,
|
|
1953
|
-
label ? /* @__PURE__ */ (0,
|
|
1954
|
-
showBadge ? /* @__PURE__ */ (0,
|
|
2046
|
+
icon ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "inline-flex h-6 w-6 items-center justify-center", children: icon }) : src ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("img", { src, alt: alt ?? label ?? "", className: "h-6 w-6" }) : null,
|
|
2047
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: cn("text-body2-regular", selected ? "text-white" : "text-secondary"), children: label }) : null,
|
|
2048
|
+
showBadge ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
1955
2049
|
"span",
|
|
1956
2050
|
{
|
|
1957
2051
|
"aria-hidden": badge === true,
|
|
@@ -1977,14 +2071,14 @@ var LowerPart = ({
|
|
|
1977
2071
|
if (lowerPartItemList.length === 0) {
|
|
1978
2072
|
return null;
|
|
1979
2073
|
}
|
|
1980
|
-
return /* @__PURE__ */ (0,
|
|
2074
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
1981
2075
|
"div",
|
|
1982
2076
|
{
|
|
1983
2077
|
className: cn("w-full h-[42px] pl-14 flex items-stretch border-b border-gray02", className),
|
|
1984
2078
|
children: [
|
|
1985
|
-
/* @__PURE__ */ (0,
|
|
1986
|
-
lowerPartItemList.map((item) => /* @__PURE__ */ (0,
|
|
1987
|
-
/* @__PURE__ */ (0,
|
|
2079
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" }),
|
|
2080
|
+
lowerPartItemList.map((item) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react10.Fragment, { children: [
|
|
2081
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
1988
2082
|
LowerPartItemButton,
|
|
1989
2083
|
{
|
|
1990
2084
|
label: item.label,
|
|
@@ -1997,7 +2091,7 @@ var LowerPart = ({
|
|
|
1997
2091
|
}
|
|
1998
2092
|
}
|
|
1999
2093
|
),
|
|
2000
|
-
/* @__PURE__ */ (0,
|
|
2094
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "aria-hidden": true, className: "w-px self-stretch bg-gray02" })
|
|
2001
2095
|
] }, item.id ?? item.label))
|
|
2002
2096
|
]
|
|
2003
2097
|
}
|
|
@@ -2011,7 +2105,7 @@ var LowerPartItemButton = ({
|
|
|
2011
2105
|
linkComponent,
|
|
2012
2106
|
className
|
|
2013
2107
|
}) => {
|
|
2014
|
-
return /* @__PURE__ */ (0,
|
|
2108
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
2015
2109
|
NavClickable,
|
|
2016
2110
|
{
|
|
2017
2111
|
href,
|
|
@@ -2030,14 +2124,14 @@ var LowerPartItemButton = ({
|
|
|
2030
2124
|
};
|
|
2031
2125
|
|
|
2032
2126
|
// src/components/Toast/Toast.tsx
|
|
2033
|
-
var
|
|
2034
|
-
var
|
|
2127
|
+
var import_react11 = require("react");
|
|
2128
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
2035
2129
|
var EXIT_MS = 300;
|
|
2036
|
-
var Toast = (0,
|
|
2130
|
+
var Toast = (0, import_react11.forwardRef)(function Toast2({ message, open, duration = 3e3, onClose, position = "none", className }, ref) {
|
|
2037
2131
|
const controlled = open !== void 0;
|
|
2038
|
-
const [mounted, setMounted] = (0,
|
|
2039
|
-
const [visible, setVisible] = (0,
|
|
2040
|
-
(0,
|
|
2132
|
+
const [mounted, setMounted] = (0, import_react11.useState)(!controlled || open);
|
|
2133
|
+
const [visible, setVisible] = (0, import_react11.useState)(!controlled || open);
|
|
2134
|
+
(0, import_react11.useEffect)(() => {
|
|
2041
2135
|
if (!controlled) return;
|
|
2042
2136
|
if (open) {
|
|
2043
2137
|
setMounted(true);
|
|
@@ -2048,13 +2142,13 @@ var Toast = (0, import_react10.forwardRef)(function Toast2({ message, open, dura
|
|
|
2048
2142
|
const timer = setTimeout(() => setMounted(false), EXIT_MS);
|
|
2049
2143
|
return () => clearTimeout(timer);
|
|
2050
2144
|
}, [controlled, open]);
|
|
2051
|
-
(0,
|
|
2145
|
+
(0, import_react11.useEffect)(() => {
|
|
2052
2146
|
if (!controlled || !open || !duration) return;
|
|
2053
2147
|
const timer = setTimeout(() => onClose?.(), duration);
|
|
2054
2148
|
return () => clearTimeout(timer);
|
|
2055
2149
|
}, [controlled, open, duration, onClose]);
|
|
2056
2150
|
if (!mounted) return null;
|
|
2057
|
-
const banner = /* @__PURE__ */ (0,
|
|
2151
|
+
const banner = /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
2058
2152
|
"div",
|
|
2059
2153
|
{
|
|
2060
2154
|
ref,
|
|
@@ -2072,7 +2166,7 @@ var Toast = (0, import_react10.forwardRef)(function Toast2({ message, open, dura
|
|
|
2072
2166
|
}
|
|
2073
2167
|
);
|
|
2074
2168
|
if (position === "none") return banner;
|
|
2075
|
-
return /* @__PURE__ */ (0,
|
|
2169
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
2076
2170
|
"div",
|
|
2077
2171
|
{
|
|
2078
2172
|
className: cn(
|
|
@@ -2085,6 +2179,7 @@ var Toast = (0, import_react10.forwardRef)(function Toast2({ message, open, dura
|
|
|
2085
2179
|
});
|
|
2086
2180
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2087
2181
|
0 && (module.exports = {
|
|
2182
|
+
Accordion,
|
|
2088
2183
|
BackButton,
|
|
2089
2184
|
BasicFormField,
|
|
2090
2185
|
CTA,
|