@yeongseoksong/framework 0.1.0 → 1.0.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/ui/index.js CHANGED
@@ -66,7 +66,16 @@ __export(ui_exports, {
66
66
  PageLayout: () => PageLayout,
67
67
  SdBadge: () => SdBadge,
68
68
  SdButton: () => SdButton,
69
+ SdButtonCancel: () => SdButtonCancel,
70
+ SdButtonDelete: () => SdButtonDelete,
71
+ SdButtonGhost: () => SdButtonGhost,
72
+ SdButtonOutline: () => SdButtonOutline,
73
+ SdButtonPrimary: () => SdButtonPrimary,
74
+ SdButtonSecondary: () => SdButtonSecondary,
75
+ SdButtonWhite: () => SdButtonWhite,
69
76
  SdClients: () => SdClients,
77
+ SdClientsGrid: () => SdClientsGrid,
78
+ SdClientsMarquee: () => SdClientsMarquee,
70
79
  SdContainer: () => SdContainer,
71
80
  SdCta: () => SdCta,
72
81
  SdErrorView: () => SdErrorView,
@@ -77,19 +86,34 @@ __export(ui_exports, {
77
86
  SdHeader: () => SdHeader,
78
87
  SdInput: () => SdInput,
79
88
  SdMap: () => SdMap,
89
+ SdMapSingle: () => SdMapSingle,
90
+ SdMapTabs: () => SdMapTabs,
80
91
  SdModal: () => SdModal,
81
92
  SdNumberIcon: () => SdNumberIcon,
82
93
  SdPricingCard: () => SdPricingCard,
83
94
  SdQuote: () => SdQuote,
95
+ SdSkeleton: () => SdSkeleton,
96
+ SdSkeletonAvatar: () => SdSkeletonAvatar,
97
+ SdSkeletonCard: () => SdSkeletonCard,
98
+ SdSkeletonImage: () => SdSkeletonImage,
99
+ SdSkeletonText: () => SdSkeletonText,
100
+ SdSkeletonTitle: () => SdSkeletonTitle,
84
101
  SdSolution: () => SdSolution,
85
102
  SdSolutionCard: () => SdSolutionCard,
86
103
  SdSteps: () => SdSteps,
87
104
  SdStepsSection: () => SdStepsSection,
88
105
  SdTable: () => SdTable,
89
106
  SdTabs: () => SdTabs,
107
+ SdTabsOutline: () => SdTabsOutline,
108
+ SdTabsPills: () => SdTabsPills,
109
+ SdTabsUnderline: () => SdTabsUnderline,
90
110
  SdTestimonial: () => SdTestimonial,
91
111
  SdText: () => SdText,
92
112
  SdTextBox: () => SdTextBox,
113
+ SdTextBoxCard: () => SdTextBoxCard,
114
+ SdTextBoxHero: () => SdTextBoxHero,
115
+ SdTextBoxSection: () => SdTextBoxSection,
116
+ SdTextBoxSub: () => SdTextBoxSub,
93
117
  SdTimeline: () => SdTimeline,
94
118
  SdTimelineSection: () => SdTimelineSection,
95
119
  SdTitle: () => SdTitle,
@@ -191,6 +215,9 @@ var SdTabs = {
191
215
  }
192
216
  })
193
217
  };
218
+ var SdTabsPills = SdTabs.Pills;
219
+ var SdTabsUnderline = SdTabs.Underline;
220
+ var SdTabsOutline = SdTabs.Outline;
194
221
 
195
222
  // ui/atom/Title.tsx
196
223
  var import_core4 = require("@mantine/core");
@@ -255,6 +282,8 @@ function createButton(defaults) {
255
282
  var SdButton = {
256
283
  /** 주요 액션 — filled primary */
257
284
  Primary: createButton({ color: "primary" }),
285
+ /** 보조 액션 — white bg + slate text */
286
+ Secondary: createButton({ variant: "white", color: "slate" }),
258
287
  /** 보조 액션 — outline */
259
288
  Outline: createButton({ variant: "outline", color: "primary" }),
260
289
  /** 텍스트 수준 — subtle */
@@ -266,6 +295,13 @@ var SdButton = {
266
295
  /** 취소 — outline slate + X 아이콘 */
267
296
  Cancel: createButton({ variant: "outline", color: "slate", leftSection: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons_react.IconX, { size: 16 }) })
268
297
  };
298
+ var SdButtonPrimary = SdButton.Primary;
299
+ var SdButtonSecondary = SdButton.Secondary;
300
+ var SdButtonOutline = SdButton.Outline;
301
+ var SdButtonGhost = SdButton.Ghost;
302
+ var SdButtonWhite = SdButton.White;
303
+ var SdButtonDelete = SdButton.Delete;
304
+ var SdButtonCancel = SdButton.Cancel;
269
305
 
270
306
  // ui/atom/Quote.tsx
271
307
  var import_core7 = require("@mantine/core");
@@ -428,9 +464,62 @@ var SdInput = {
428
464
  Select: createSelect({})
429
465
  };
430
466
 
431
- // ui/molecule/TextBox.tsx
467
+ // ui/atom/Skeleton.tsx
432
468
  var import_core13 = require("@mantine/core");
433
469
  var import_jsx_runtime13 = require("react/jsx-runtime");
470
+ function SkeletonText(_a) {
471
+ var _b = _a, { width = "100%" } = _b, props = __objRest(_b, ["width"]);
472
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core13.Skeleton, __spreadValues({ height: 14, width, radius: "sm" }, props));
473
+ }
474
+ function SkeletonTitle(_a) {
475
+ var _b = _a, { width = "60%" } = _b, props = __objRest(_b, ["width"]);
476
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core13.Skeleton, __spreadValues({ height: 20, width, radius: "sm" }, props));
477
+ }
478
+ function SkeletonImage(_a) {
479
+ var _b = _a, { height = 200 } = _b, props = __objRest(_b, ["height"]);
480
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core13.Skeleton, __spreadValues({ height, radius: "md" }, props));
481
+ }
482
+ function SkeletonAvatar(_a) {
483
+ var _b = _a, { size = 40 } = _b, props = __objRest(_b, ["size"]);
484
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core13.Skeleton, __spreadValues({ height: size, width: size, circle: true }, props));
485
+ }
486
+ function SkeletonCard({ height, lines = 3 }) {
487
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
488
+ import_core13.Box,
489
+ {
490
+ p: "md",
491
+ style: { borderRadius: "var(--mantine-radius-md)", border: "1px solid var(--mantine-color-gray-3)", height },
492
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_core13.Stack, { gap: "sm", children: [
493
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core13.Skeleton, { height: 20, width: "50%", radius: "sm" }),
494
+ Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
495
+ import_core13.Skeleton,
496
+ {
497
+ height: 14,
498
+ width: i === lines - 1 ? "70%" : "100%",
499
+ radius: "sm"
500
+ },
501
+ i
502
+ ))
503
+ ] })
504
+ }
505
+ );
506
+ }
507
+ var SdSkeleton = {
508
+ Card: SkeletonCard,
509
+ Text: SkeletonText,
510
+ Title: SkeletonTitle,
511
+ Image: SkeletonImage,
512
+ Avatar: SkeletonAvatar
513
+ };
514
+ var SdSkeletonCard = SkeletonCard;
515
+ var SdSkeletonText = SkeletonText;
516
+ var SdSkeletonTitle = SkeletonTitle;
517
+ var SdSkeletonImage = SkeletonImage;
518
+ var SdSkeletonAvatar = SkeletonAvatar;
519
+
520
+ // ui/molecule/TextBox.tsx
521
+ var import_core14 = require("@mantine/core");
522
+ var import_jsx_runtime14 = require("react/jsx-runtime");
434
523
  function createTextBox(titleVariant, defaultGap = "xs", descVariant = "Body", color_ = void 0) {
435
524
  return function SdTextBox2(_a) {
436
525
  var _b = _a, {
@@ -454,10 +543,10 @@ function createTextBox(titleVariant, defaultGap = "xs", descVariant = "Body", co
454
543
  const variant = variantOverride != null ? variantOverride : titleVariant;
455
544
  const TitleComponent = SdTitle[variant];
456
545
  const DescComponent = SdText[descVariant];
457
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_core13.Stack, __spreadProps(__spreadValues({ gap: defaultGap }, stackProps), { children: [
458
- label && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SdText.Eyebrow, { children: label }),
459
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TitleComponent, { c: colorRes, children: title }),
460
- description && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DescComponent, { c: colorRes, maw: maxDescWidth, mt: 4, children: description }),
546
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core14.Stack, __spreadProps(__spreadValues({ gap: defaultGap }, stackProps), { children: [
547
+ label && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SdText.Eyebrow, { children: label }),
548
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TitleComponent, { c: colorRes, children: title }),
549
+ description && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DescComponent, { c: colorRes, maw: maxDescWidth, mt: 4, children: description }),
461
550
  children
462
551
  ] }));
463
552
  };
@@ -468,9 +557,13 @@ var SdTextBox = {
468
557
  Card: createTextBox("Card", "xs", "Body"),
469
558
  Sub: createTextBox("Sub", "xs", "Sub")
470
559
  };
560
+ var SdTextBoxHero = SdTextBox.Hero;
561
+ var SdTextBoxSection = SdTextBox.Section;
562
+ var SdTextBoxCard = SdTextBox.Card;
563
+ var SdTextBoxSub = SdTextBox.Sub;
471
564
 
472
565
  // ui/molecule/Features.tsx
473
- var import_core14 = require("@mantine/core");
566
+ var import_core15 = require("@mantine/core");
474
567
 
475
568
  // util/sort.util.ts
476
569
  function filterAndSort(items) {
@@ -478,25 +571,31 @@ function filterAndSort(items) {
478
571
  }
479
572
 
480
573
  // ui/molecule/Features.tsx
481
- var import_jsx_runtime14 = require("react/jsx-runtime");
574
+ var import_jsx_runtime15 = require("react/jsx-runtime");
482
575
  function SdFeatures({ items, cols = { base: 1, sm: 2, md: 3 } }) {
483
576
  const visible = filterAndSort(items);
484
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core14.SimpleGrid, { cols, spacing: "xl", children: visible.map((item) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core14.Card, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core14.Stack, { gap: "sm", children: [
485
- item.icon,
486
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
487
- SdTextBox.Card,
488
- {
489
- label: item.label,
490
- title: item.title,
491
- description: item.description
492
- }
493
- )
494
- ] }, item.id) })) });
577
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core15.SimpleGrid, { cols, spacing: "xl", children: visible.map((item) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
578
+ import_core15.Card,
579
+ {
580
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core15.Stack, { gap: "sm", children: [
581
+ item.icon,
582
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
583
+ SdTextBox.Card,
584
+ {
585
+ label: item.label,
586
+ title: item.title,
587
+ description: item.description
588
+ }
589
+ )
590
+ ] }, item.id)
591
+ },
592
+ item.id
593
+ )) });
495
594
  }
496
595
 
497
596
  // ui/molecule/Timeline.tsx
498
- var import_core15 = require("@mantine/core");
499
- var import_jsx_runtime15 = require("react/jsx-runtime");
597
+ var import_core16 = require("@mantine/core");
598
+ var import_jsx_runtime16 = require("react/jsx-runtime");
500
599
  function SdTimeline({ items }) {
501
600
  const grouped = items.filter((item) => item.isShow).sort((a, b) => b.year - a.year || b.month - a.month).reduce((acc, item) => {
502
601
  var _a, _b;
@@ -504,19 +603,19 @@ function SdTimeline({ items }) {
504
603
  return acc;
505
604
  }, {});
506
605
  const years = Object.keys(grouped).map(Number).sort((a, b) => b - a);
507
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core15.Timeline, { active: items.length, bulletSize: 24, lineWidth: 2, children: years.map((year) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
508
- import_core15.Timeline.Item,
606
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core16.Timeline, { active: items.length, bulletSize: 24, lineWidth: 2, children: years.map((year) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
607
+ import_core16.Timeline.Item,
509
608
  {
510
- title: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(SdTitle.Sub, { children: [
609
+ title: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(SdTitle.Sub, { children: [
511
610
  year,
512
611
  "\uB144"
513
612
  ] }),
514
- children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core15.Stack, { gap: 6, mt: "xs", children: grouped[year].map((event) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core15.Group, { gap: "md", align: "center", wrap: "nowrap", children: [
515
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(SdText.Eyebrow, { miw: 28, children: [
613
+ children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core16.Stack, { gap: 6, mt: "xs", children: grouped[year].map((event) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core16.Group, { gap: "md", align: "center", wrap: "nowrap", children: [
614
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(SdText.Eyebrow, { miw: 28, children: [
516
615
  event.month,
517
616
  "\uC6D4"
518
617
  ] }),
519
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SdText.Sub, { style: { flex: 1 }, children: event.description })
618
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(SdText.Sub, { style: { flex: 1 }, children: event.description })
520
619
  ] }, event.id)) })
521
620
  },
522
621
  year
@@ -524,26 +623,26 @@ function SdTimeline({ items }) {
524
623
  }
525
624
 
526
625
  // ui/molecule/Steps.tsx
527
- var import_core16 = require("@mantine/core");
626
+ var import_core17 = require("@mantine/core");
528
627
  var import_icons_react2 = require("@tabler/icons-react");
529
- var import_jsx_runtime16 = require("react/jsx-runtime");
530
628
  var import_jsx_runtime17 = require("react/jsx-runtime");
629
+ var import_jsx_runtime18 = require("react/jsx-runtime");
531
630
  function BubbleStep({ item, index, isLast }) {
532
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Group, { align: "flex-start", gap: "lg", wrap: "nowrap", children: [
533
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Box, { style: { display: "flex", flexDirection: "column", alignItems: "center", flexShrink: 0 }, children: [
534
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SdNumberIcon, { value: String(index + 1).padStart(2, "0") }),
535
- !isLast && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Box, { style: { width: 2, flex: 1, minHeight: 32, marginTop: 8, background: "var(--mantine-color-primary-2)" } })
631
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Group, { align: "flex-start", gap: "lg", wrap: "nowrap", children: [
632
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Box, { style: { display: "flex", flexDirection: "column", alignItems: "center", flexShrink: 0 }, children: [
633
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SdNumberIcon, { value: String(index + 1).padStart(2, "0") }),
634
+ !isLast && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Box, { style: { width: 2, flex: 1, minHeight: 32, marginTop: 8, background: "var(--mantine-color-primary-2)" } })
536
635
  ] }),
537
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SdTextBox.Card, { title: item.title, description: item.description, pb: !isLast ? "xl" : 0, pt: 4 })
636
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SdTextBox.Card, { title: item.title, description: item.description, pb: !isLast ? "xl" : 0, pt: 4 })
538
637
  ] });
539
638
  }
540
639
  function Bubble({ items }) {
541
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Box, { children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BubbleStep, { item, index: i, isLast: i === items.length - 1 }, i)) });
640
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Box, { children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BubbleStep, { item, index: i, isLast: i === items.length - 1 }, i)) });
542
641
  }
543
642
  function CardStep({ item, index }) {
544
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Card, { withBorder: true, radius: "md", p: 0, style: { height: "100%", overflow: "hidden" }, children: [
545
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
546
- import_core16.Box,
643
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Card, { withBorder: true, radius: "md", p: 0, style: { height: "100%", overflow: "hidden" }, children: [
644
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
645
+ import_core17.Box,
547
646
  {
548
647
  py: "lg",
549
648
  style: {
@@ -551,54 +650,54 @@ function CardStep({ item, index }) {
551
650
  justifyContent: "center",
552
651
  background: "var(--mantine-color-primary-0)"
553
652
  },
554
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(SdText.Eyebrow, { children: [
653
+ children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(SdText.Eyebrow, { children: [
555
654
  "STEP ",
556
655
  String(index + 1).padStart(2, "0")
557
656
  ] })
558
657
  }
559
658
  ),
560
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Box, { p: "lg", style: { textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SdTextBox.Card, { title: item.title, description: item.description }) })
659
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Box, { p: "lg", style: { textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SdTextBox.Card, { title: item.title, description: item.description }) })
561
660
  ] });
562
661
  }
563
662
  function CardArrow({ direction }) {
564
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.ThemeIcon, { size: 36, radius: "xl", variant: "light", color: "primary", children: direction === "right" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_icons_react2.IconArrowRight, { size: 20, stroke: 2.5 }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_icons_react2.IconArrowDown, { size: 20, stroke: 2.5 }) });
663
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.ThemeIcon, { size: 36, radius: "xl", variant: "light", color: "primary", children: direction === "right" ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_icons_react2.IconArrowRight, { size: 20, stroke: 2.5 }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_icons_react2.IconArrowDown, { size: 20, stroke: 2.5 }) });
565
664
  }
566
665
  function CardVariant({ items }) {
567
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
568
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Stack, { gap: "sm", hiddenFrom: "sm", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime16.Fragment, { children: [
569
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(CardStep, { item, index: i }),
570
- i < items.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Box, { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(CardArrow, { direction: "down" }) })
666
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
667
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Stack, { gap: "sm", hiddenFrom: "sm", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime17.Fragment, { children: [
668
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(CardStep, { item, index: i }),
669
+ i < items.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Box, { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(CardArrow, { direction: "down" }) })
571
670
  ] }, i)) }),
572
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Group, { wrap: "nowrap", align: "stretch", gap: 0, visibleFrom: "sm", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime16.Fragment, { children: [
573
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Box, { style: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(CardStep, { item, index: i }) }),
574
- i < items.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Box, { style: { display: "flex", alignItems: "center", padding: "0 8px" }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(CardArrow, { direction: "right" }) })
671
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Group, { wrap: "nowrap", align: "stretch", gap: 0, visibleFrom: "sm", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime17.Fragment, { children: [
672
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Box, { style: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(CardStep, { item, index: i }) }),
673
+ i < items.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Box, { style: { display: "flex", alignItems: "center", padding: "0 8px" }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(CardArrow, { direction: "right" }) })
575
674
  ] }, i)) })
576
675
  ] });
577
676
  }
578
677
  function StripStep({ item, index }) {
579
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Box, { pl: "md", style: { borderLeft: "3px solid var(--mantine-color-primary-6)" }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Stack, { gap: 4, children: [
580
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(SdText.Eyebrow, { children: [
678
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Box, { pl: "md", style: { borderLeft: "3px solid var(--mantine-color-primary-6)" }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Stack, { gap: 4, children: [
679
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(SdText.Eyebrow, { children: [
581
680
  "STEP ",
582
681
  String(index + 1).padStart(2, "0")
583
682
  ] }),
584
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SdTextBox.Card, { title: item.title, description: item.description })
683
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SdTextBox.Card, { title: item.title, description: item.description })
585
684
  ] }) });
586
685
  }
587
686
  function Strip({ items }) {
588
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Stack, { gap: "xl", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(StripStep, { item, index: i }, i)) });
687
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Stack, { gap: "xl", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(StripStep, { item, index: i }, i)) });
589
688
  }
590
689
  var SdSteps = { Bubble, Card: CardVariant, Strip };
591
690
 
592
691
  // ui/molecule/Testimonial.tsx
593
- var import_core17 = require("@mantine/core");
594
- var import_jsx_runtime18 = require("react/jsx-runtime");
692
+ var import_core18 = require("@mantine/core");
693
+ var import_jsx_runtime19 = require("react/jsx-runtime");
595
694
  function AuthorRow({ item }) {
596
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Group, { gap: "sm", wrap: "nowrap", children: [
597
- item.avatar && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Avatar, { src: item.avatar, size: "md", radius: "xl" }),
598
- !item.avatar && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Avatar, { size: "md", radius: "xl", color: "primary", children: item.name.charAt(0) }),
599
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Stack, { gap: 0, children: [
600
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SdText.Strong, { fz: "sm", children: item.name }),
601
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(SdText.Sub, { children: [
695
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { gap: "sm", wrap: "nowrap", children: [
696
+ item.avatar && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Avatar, { src: item.avatar, size: "md", radius: "xl" }),
697
+ !item.avatar && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Avatar, { size: "md", radius: "xl", color: "primary", children: item.name.charAt(0) }),
698
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: 0, children: [
699
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdText.Strong, { fz: "sm", children: item.name }),
700
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(SdText.Sub, { children: [
602
701
  item.role,
603
702
  item.company ? ` \xB7 ${item.company}` : ""
604
703
  ] })
@@ -607,28 +706,28 @@ function AuthorRow({ item }) {
607
706
  }
608
707
  function CardTestimonial(_a) {
609
708
  var _b = _a, { item } = _b, boxProps = __objRest(_b, ["item"]);
610
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Card, __spreadProps(__spreadValues({ h: "100%" }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Stack, { gap: "md", h: "100%", children: [
611
- item.rating && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Rating, { value: item.rating, readOnly: true, size: "sm", color: "primary" }),
612
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Stack, { gap: "xs", style: { flex: 1 }, children: [
613
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SdTitle.Display, { c: "primary.6", lh: 0.8, "aria-hidden": true, children: "\u201C" }),
614
- item.lines.map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SdText.Body, { children: line }, i))
709
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Card, __spreadProps(__spreadValues({ h: "100%" }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: "md", h: "100%", children: [
710
+ item.rating && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Rating, { value: item.rating, readOnly: true, size: "sm", color: "primary" }),
711
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: "xs", style: { flex: 1 }, children: [
712
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdTitle.Display, { c: "primary.6", lh: 0.8, "aria-hidden": true, children: "\u201C" }),
713
+ item.lines.map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdText.Body, { children: line }, i))
615
714
  ] }),
616
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(AuthorRow, { item })
715
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AuthorRow, { item })
617
716
  ] }) }));
618
717
  }
619
718
  function Strip2(_a) {
620
719
  var _b = _a, { item } = _b, boxProps = __objRest(_b, ["item"]);
621
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Stack, { gap: "md", children: [
622
- item.rating && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Rating, { value: item.rating, readOnly: true, size: "sm", color: "primary" }),
623
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Group, { gap: 4, align: "flex-start", children: [
624
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SdTitle.Display, { c: "primary.6", lh: 0.8, "aria-hidden": true, children: "\u201C" }),
625
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Stack, { gap: "xs", style: { flex: 1 }, children: item.lines.map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SdText.Body, { children: line }, i)) })
720
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: "md", children: [
721
+ item.rating && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Rating, { value: item.rating, readOnly: true, size: "sm", color: "primary" }),
722
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { gap: 4, align: "flex-start", children: [
723
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdTitle.Display, { c: "primary.6", lh: 0.8, "aria-hidden": true, children: "\u201C" }),
724
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Stack, { gap: "xs", style: { flex: 1 }, children: item.lines.map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdText.Body, { children: line }, i)) })
626
725
  ] }),
627
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(AuthorRow, { item })
726
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AuthorRow, { item })
628
727
  ] }) }));
629
728
  }
630
729
  function Grid({ items, cols = { base: 1, sm: 2, md: 3 } }) {
631
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.SimpleGrid, { cols, spacing: "xl", style: { alignItems: "stretch" }, children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(CardTestimonial, { item }, i)) });
730
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.SimpleGrid, { cols, spacing: "xl", style: { alignItems: "stretch" }, children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CardTestimonial, { item }, i)) });
632
731
  }
633
732
  var SdTestimonial = {
634
733
  /** 카드형 — 그리드 배치용 */
@@ -640,46 +739,46 @@ var SdTestimonial = {
640
739
  };
641
740
 
642
741
  // ui/molecule/PricingCard.tsx
643
- var import_core18 = require("@mantine/core");
742
+ var import_core19 = require("@mantine/core");
644
743
  var import_icons_react3 = require("@tabler/icons-react");
645
- var import_jsx_runtime19 = require("react/jsx-runtime");
744
+ var import_jsx_runtime20 = require("react/jsx-runtime");
646
745
  function Default(_a) {
647
746
  var _b = _a, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
648
747
  var _a2;
649
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
650
- import_core18.Card,
748
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
749
+ import_core19.Card,
651
750
  __spreadProps(__spreadValues({
652
751
  withBorder: true,
653
752
  style: { position: "relative" }
654
753
  }, cardProps), {
655
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: "xl", children: [
656
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: "xs", children: [
657
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { justify: "space-between", align: "flex-start", children: [
658
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdTitle.Card, { children: item.name }),
659
- item.isPopular && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdBadge.Primary, { children: "\uCD94\uCC9C" })
754
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "xl", children: [
755
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "xs", children: [
756
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { justify: "space-between", align: "flex-start", children: [
757
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdTitle.Card, { children: item.name }),
758
+ item.isPopular && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdBadge.Primary, { children: "\uCD94\uCC9C" })
660
759
  ] }),
661
- item.description && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdText.Sub, { children: item.description })
760
+ item.description && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdText.Sub, { children: item.description })
662
761
  ] }),
663
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { gap: 4, align: "baseline", children: [
664
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdTitle.Display, { children: item.price }),
665
- item.period && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(SdText.Sub, { children: [
762
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { gap: 4, align: "baseline", children: [
763
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdTitle.Display, { children: item.price }),
764
+ item.period && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(SdText.Sub, { children: [
666
765
  "/ ",
667
766
  item.period
668
767
  ] })
669
768
  ] }),
670
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Divider, {}),
671
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Stack, { gap: "sm", children: item.features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { gap: "sm", wrap: "nowrap", children: [
672
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
673
- import_core18.ThemeIcon,
769
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Divider, {}),
770
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Stack, { gap: "sm", children: item.features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { gap: "sm", wrap: "nowrap", children: [
771
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
772
+ import_core19.ThemeIcon,
674
773
  {
675
774
  size: "xs",
676
775
  radius: "xl",
677
776
  color: f.included ? "primary" : "slate",
678
777
  variant: f.included ? "filled" : "subtle",
679
- children: f.included ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_icons_react3.IconCheck, { size: 12 }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_icons_react3.IconX, { size: 12 })
778
+ children: f.included ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons_react3.IconCheck, { size: 12 }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons_react3.IconX, { size: 12 })
680
779
  }
681
780
  ),
682
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
781
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
683
782
  SdText.Body,
684
783
  {
685
784
  fz: "sm",
@@ -688,7 +787,7 @@ function Default(_a) {
688
787
  }
689
788
  )
690
789
  ] }, i)) }),
691
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdButton.Outline, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a2 = item.ctaLabel) != null ? _a2 : "\uC2DC\uC791\uD558\uAE30" })
790
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdButton.Outline, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a2 = item.ctaLabel) != null ? _a2 : "\uC2DC\uC791\uD558\uAE30" })
692
791
  ] })
693
792
  })
694
793
  );
@@ -696,40 +795,40 @@ function Default(_a) {
696
795
  function Featured(_a) {
697
796
  var _b = _a, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
698
797
  var _a2;
699
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
700
- import_core18.Card,
798
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
799
+ import_core19.Card,
701
800
  __spreadProps(__spreadValues({
702
801
  bg: "primary.6",
703
802
  style: { position: "relative" }
704
803
  }, cardProps), {
705
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: "xl", children: [
706
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: "xs", children: [
707
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { justify: "space-between", align: "flex-start", children: [
708
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdTitle.Card, { c: "white", children: item.name }),
709
- item.isPopular && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdBadge.Default, { c: "white", style: { borderColor: "rgba(255,255,255,0.5)" }, children: "\uCD94\uCC9C" })
804
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "xl", children: [
805
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "xs", children: [
806
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { justify: "space-between", align: "flex-start", children: [
807
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdTitle.Card, { c: "white", children: item.name }),
808
+ item.isPopular && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdBadge.Default, { c: "white", style: { borderColor: "rgba(255,255,255,0.5)" }, children: "\uCD94\uCC9C" })
710
809
  ] }),
711
- item.description && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdText.Body, { c: "primary.1", children: item.description })
810
+ item.description && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdText.Body, { c: "primary.1", children: item.description })
712
811
  ] }),
713
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { gap: 4, align: "baseline", children: [
714
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdTitle.Display, { c: "white", children: item.price }),
715
- item.period && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(SdText.Body, { c: "primary.2", children: [
812
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { gap: 4, align: "baseline", children: [
813
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdTitle.Display, { c: "white", children: item.price }),
814
+ item.period && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(SdText.Body, { c: "primary.2", children: [
716
815
  "/ ",
717
816
  item.period
718
817
  ] })
719
818
  ] }),
720
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Divider, { color: "primary.4" }),
721
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Stack, { gap: "sm", children: item.features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { gap: "sm", wrap: "nowrap", children: [
722
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
723
- import_core18.ThemeIcon,
819
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Divider, { color: "primary.4" }),
820
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Stack, { gap: "sm", children: item.features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { gap: "sm", wrap: "nowrap", children: [
821
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
822
+ import_core19.ThemeIcon,
724
823
  {
725
824
  size: "xs",
726
825
  radius: "xl",
727
826
  color: "white",
728
827
  variant: f.included ? "filled" : "subtle",
729
- children: f.included ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_icons_react3.IconCheck, { size: 12, color: "var(--mantine-color-primary-6)" }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_icons_react3.IconX, { size: 12, color: "rgba(255,255,255,0.4)" })
828
+ children: f.included ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons_react3.IconCheck, { size: 12, color: "var(--mantine-color-primary-6)" }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_icons_react3.IconX, { size: 12, color: "rgba(255,255,255,0.4)" })
730
829
  }
731
830
  ),
732
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
831
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
733
832
  SdText.Body,
734
833
  {
735
834
  fz: "sm",
@@ -738,14 +837,14 @@ function Featured(_a) {
738
837
  }
739
838
  )
740
839
  ] }, i)) }),
741
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdButton.White, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a2 = item.ctaLabel) != null ? _a2 : "\uC2DC\uC791\uD558\uAE30" })
840
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdButton.White, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a2 = item.ctaLabel) != null ? _a2 : "\uC2DC\uC791\uD558\uAE30" })
742
841
  ] })
743
842
  })
744
843
  );
745
844
  }
746
845
  function Grid2({ items, cols = { base: 1, sm: 2, md: 3 }, onSelect }) {
747
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.SimpleGrid, { cols, spacing: "xl", style: { alignItems: "stretch" }, children: items.map(
748
- (item, i) => item.isPopular ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Featured, { item, onSelect }, i) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Default, { item, onSelect }, i)
846
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.SimpleGrid, { cols, spacing: "xl", style: { alignItems: "stretch" }, children: items.map(
847
+ (item, i) => item.isPopular ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Featured, { item, onSelect }, i) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Default, { item, onSelect }, i)
749
848
  ) });
750
849
  }
751
850
  var SdPricingCard = {
@@ -758,31 +857,31 @@ var SdPricingCard = {
758
857
  };
759
858
 
760
859
  // ui/molecule/Faq.tsx
761
- var import_core19 = require("@mantine/core");
762
- var import_jsx_runtime20 = require("react/jsx-runtime");
860
+ var import_core20 = require("@mantine/core");
861
+ var import_jsx_runtime21 = require("react/jsx-runtime");
763
862
  function Default2(_a) {
764
863
  var _b = _a, { items } = _b, boxProps = __objRest(_b, ["items"]);
765
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Accordion, { variant: "separated", radius: "md", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Accordion.Item, { value: String(i), children: [
766
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Accordion.Control, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdText.Strong, { fz: "sm", children: item.question }) }),
767
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Accordion.Panel, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdText.Body, { fz: "sm", children: item.answer }) })
864
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Accordion, { variant: "separated", radius: "md", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Accordion.Item, { value: String(i), children: [
865
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Accordion.Control, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Strong, { fz: "sm", children: item.question }) }),
866
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Accordion.Panel, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Body, { fz: "sm", children: item.answer }) })
768
867
  ] }, i)) }) }));
769
868
  }
770
869
  function Filled(_a) {
771
870
  var _b = _a, { items } = _b, boxProps = __objRest(_b, ["items"]);
772
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Accordion, { variant: "filled", radius: "md", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Accordion.Item, { value: String(i), children: [
773
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Accordion.Control, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdText.Strong, { fz: "sm", children: item.question }) }),
774
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Accordion.Panel, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdText.Body, { fz: "sm", children: item.answer }) })
871
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Accordion, { variant: "filled", radius: "md", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Accordion.Item, { value: String(i), children: [
872
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Accordion.Control, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Strong, { fz: "sm", children: item.question }) }),
873
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Accordion.Panel, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Body, { fz: "sm", children: item.answer }) })
775
874
  ] }, i)) }) }));
776
875
  }
777
876
  function WithHeader(_a) {
778
877
  var _b = _a, { label, title, description, items } = _b, boxProps = __objRest(_b, ["label", "title", "description", "items"]);
779
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, __spreadProps(__spreadValues({ gap: "xl" }, boxProps), { children: [
780
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "xs", children: [
781
- label && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdText.Eyebrow, { children: label }),
782
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdTitle.Section, { children: title }),
783
- description && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdText.Body, { children: description })
878
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, __spreadProps(__spreadValues({ gap: "xl" }, boxProps), { children: [
879
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "xs", children: [
880
+ label && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Eyebrow, { children: label }),
881
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdTitle.Section, { children: title }),
882
+ description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Body, { children: description })
784
883
  ] }),
785
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Default2, { items })
884
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Default2, { items })
786
885
  ] }));
787
886
  }
788
887
  var SdFaq = {
@@ -795,8 +894,8 @@ var SdFaq = {
795
894
  };
796
895
 
797
896
  // ui/molecule/Cta.tsx
798
- var import_core20 = require("@mantine/core");
799
- var import_jsx_runtime21 = require("react/jsx-runtime");
897
+ var import_core21 = require("@mantine/core");
898
+ var import_jsx_runtime22 = require("react/jsx-runtime");
800
899
  function Banner(_a) {
801
900
  var _b = _a, {
802
901
  label,
@@ -815,22 +914,22 @@ function Banner(_a) {
815
914
  "onPrimary",
816
915
  "onSecondary"
817
916
  ]);
818
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
819
- import_core20.Box,
917
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
918
+ import_core21.Box,
820
919
  __spreadProps(__spreadValues({
821
920
  bg: "primary.7",
822
921
  py: { base: "xl", md: 80 },
823
922
  px: { base: "md", md: "xl" }
824
923
  }, boxProps), {
825
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "xl", align: "center", maw: 600, children: [
826
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "sm", align: "center", children: [
827
- label && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Eyebrow, { c: "primary.3", children: label }),
828
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdTitle.Section, { c: "white", ta: "center", children: title }),
829
- description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Body, { c: "primary.2", ta: "center", children: description })
924
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "xl", align: "center", maw: 600, children: [
925
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "sm", align: "center", children: [
926
+ label && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Eyebrow, { c: "primary.3", children: label }),
927
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdTitle.Section, { c: "white", ta: "center", children: title }),
928
+ description && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Body, { c: "primary.2", ta: "center", children: description })
830
929
  ] }),
831
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Group, { gap: "sm", children: [
832
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdButton.White, { size: "md", onClick: onPrimary, children: primaryLabel }),
833
- secondaryLabel && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
930
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Group, { gap: "sm", children: [
931
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdButton.White, { size: "md", onClick: onPrimary, children: primaryLabel }),
932
+ secondaryLabel && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
834
933
  SdButton.Ghost,
835
934
  {
836
935
  size: "md",
@@ -862,23 +961,23 @@ function Subtle(_a) {
862
961
  "onPrimary",
863
962
  "onSecondary"
864
963
  ]);
865
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
866
- import_core20.Box,
964
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
965
+ import_core21.Box,
867
966
  __spreadProps(__spreadValues({
868
967
  bg: "primary.0",
869
968
  py: { base: "xl", md: 60 },
870
969
  px: { base: "md", md: "xl" },
871
970
  style: { borderRadius: "var(--mantine-radius-lg)" }
872
971
  }, boxProps), {
873
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "lg", align: "center", maw: 560, children: [
874
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "sm", align: "center", children: [
875
- label && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Eyebrow, { children: label }),
876
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdTitle.Section, { ta: "center", children: title }),
877
- description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Body, { ta: "center", children: description })
972
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "lg", align: "center", maw: 560, children: [
973
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "sm", align: "center", children: [
974
+ label && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Eyebrow, { children: label }),
975
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdTitle.Section, { ta: "center", children: title }),
976
+ description && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Body, { ta: "center", children: description })
878
977
  ] }),
879
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Group, { gap: "sm", children: [
880
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdButton.Primary, { size: "md", onClick: onPrimary, children: primaryLabel }),
881
- secondaryLabel && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdButton.Outline, { size: "md", onClick: onSecondary, children: secondaryLabel })
978
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Group, { gap: "sm", children: [
979
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdButton.Primary, { size: "md", onClick: onPrimary, children: primaryLabel }),
980
+ secondaryLabel && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdButton.Outline, { size: "md", onClick: onSecondary, children: secondaryLabel })
882
981
  ] })
883
982
  ] }) })
884
983
  })
@@ -902,8 +1001,8 @@ function Inline(_a) {
902
1001
  "onPrimary",
903
1002
  "onSecondary"
904
1003
  ]);
905
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
906
- import_core20.Box,
1004
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1005
+ import_core21.Box,
907
1006
  __spreadProps(__spreadValues({
908
1007
  py: { base: "xl", md: 48 },
909
1008
  px: { base: "md", md: "xl" },
@@ -912,15 +1011,15 @@ function Inline(_a) {
912
1011
  borderBottom: "1px solid var(--mantine-color-slate-2)"
913
1012
  }
914
1013
  }, boxProps), {
915
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Group, { justify: "space-between", align: "center", gap: "xl", children: [
916
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "xs", style: { flex: 1 }, children: [
917
- label && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Eyebrow, { children: label }),
918
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdTitle.Card, { children: title }),
919
- description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Sub, { children: description })
1014
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Group, { justify: "space-between", align: "center", gap: "xl", children: [
1015
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "xs", style: { flex: 1 }, children: [
1016
+ label && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Eyebrow, { children: label }),
1017
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdTitle.Card, { children: title }),
1018
+ description && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Sub, { children: description })
920
1019
  ] }),
921
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Group, { gap: "sm", wrap: "nowrap", children: [
922
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdButton.Primary, { size: "md", onClick: onPrimary, children: primaryLabel }),
923
- secondaryLabel && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdButton.Outline, { size: "md", onClick: onSecondary, children: secondaryLabel })
1020
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Group, { gap: "sm", wrap: "nowrap", children: [
1021
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdButton.Primary, { size: "md", onClick: onPrimary, children: primaryLabel }),
1022
+ secondaryLabel && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdButton.Outline, { size: "md", onClick: onSecondary, children: secondaryLabel })
924
1023
  ] })
925
1024
  ] })
926
1025
  })
@@ -937,32 +1036,32 @@ var SdCta = {
937
1036
 
938
1037
  // ui/molecule/Solution.tsx
939
1038
  var import_react = require("react");
940
- var import_core22 = require("@mantine/core");
1039
+ var import_core23 = require("@mantine/core");
941
1040
  var import_link3 = __toESM(require("next/link"));
942
1041
 
943
1042
  // ui/molecule/SolutionCard.tsx
944
- var import_core21 = require("@mantine/core");
1043
+ var import_core22 = require("@mantine/core");
945
1044
  var import_link2 = __toESM(require("next/link"));
946
- var import_jsx_runtime22 = require("react/jsx-runtime");
1045
+ var import_jsx_runtime23 = require("react/jsx-runtime");
947
1046
  function SolutionCardItem(_a) {
948
1047
  var _b = _a, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
949
1048
  var _a2, _b2;
950
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Card, __spreadProps(__spreadValues({ withBorder: true }, cardProps), { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "md", children: [
1049
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Card, __spreadProps(__spreadValues({ withBorder: true }, cardProps), { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Stack, { gap: "md", children: [
951
1050
  item.icon,
952
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdBadge.Primary, { children: item.category }),
953
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdTitle.Card, { children: item.title }),
954
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Body, { children: item.description }),
955
- item.href ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Button, { variant: "subtle", color: "slate", component: import_link2.default, href: item.href, children: [
1051
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdBadge.Primary, { children: item.category }),
1052
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdTitle.Card, { children: item.title }),
1053
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdText.Body, { children: item.description }),
1054
+ item.href ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Button, { variant: "subtle", color: "slate", component: import_link2.default, href: item.href, children: [
956
1055
  (_a2 = item.ctaLabel) != null ? _a2 : "\uC790\uC138\uD788 \uBCF4\uAE30",
957
1056
  " \u2192"
958
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(SdButton.Ghost, { onClick: () => onSelect == null ? void 0 : onSelect(item), children: [
1057
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(SdButton.Ghost, { onClick: () => onSelect == null ? void 0 : onSelect(item), children: [
959
1058
  (_b2 = item.ctaLabel) != null ? _b2 : "\uC790\uC138\uD788 \uBCF4\uAE30",
960
1059
  " \u2192"
961
1060
  ] })
962
1061
  ] }) }));
963
1062
  }
964
1063
  function Grid3({ items, cols = { base: 1, sm: 2, md: 3 }, onSelect }) {
965
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.SimpleGrid, { cols, spacing: "xl", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SolutionCardItem, { item, onSelect }, i)) });
1064
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.SimpleGrid, { cols, spacing: "xl", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SolutionCardItem, { item, onSelect }, i)) });
966
1065
  }
967
1066
  var SdSolutionCard = {
968
1067
  /** 단일 compact 카드 */
@@ -972,29 +1071,29 @@ var SdSolutionCard = {
972
1071
  };
973
1072
 
974
1073
  // ui/molecule/Solution.tsx
975
- var import_jsx_runtime23 = require("react/jsx-runtime");
1074
+ var import_jsx_runtime24 = require("react/jsx-runtime");
976
1075
  function Filtered({ items, allLabel = "\uC804\uCCB4", cols, onSelect }) {
977
1076
  const categories = ["all", ...Array.from(new Set(items.map((i) => i.category)))];
978
1077
  const [active, setActive] = (0, import_react.useState)("all");
979
1078
  const filtered = active === "all" ? items : items.filter((i) => i.category === active);
980
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Stack, { gap: "xl", children: [
981
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdTabs.Pills, { value: active, onChange: (v) => setActive(v != null ? v : "all"), children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdTabs.Pills.List, { children: categories.map((cat) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdTabs.Pills.Tab, { value: cat, children: cat === "all" ? allLabel : cat }, cat)) }) }),
982
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdSolutionCard.Grid, { items: filtered, cols, onSelect })
1079
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Stack, { gap: "xl", children: [
1080
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SdTabs.Pills, { value: active, onChange: (v) => setActive(v != null ? v : "all"), children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SdTabs.Pills.List, { children: categories.map((cat) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SdTabs.Pills.Tab, { value: cat, children: cat === "all" ? allLabel : cat }, cat)) }) }),
1081
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SdSolutionCard.Grid, { items: filtered, cols, onSelect })
983
1082
  ] });
984
1083
  }
985
1084
  function List({ items, onSelect }) {
986
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Stack, { gap: 0, children: items.map((item, i) => {
1085
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Stack, { gap: 0, children: items.map((item, i) => {
987
1086
  var _a, _b;
988
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
989
- i > 0 && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Divider, {}),
990
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Group, { align: "flex-start", py: "lg", gap: "lg", children: [
991
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.ThemeIcon, { variant: "light", color: "primary", size: "xl", radius: "md", children: item.icon }),
992
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Stack, { gap: "xs", style: { flex: 1 }, children: [
993
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdBadge.Primary, { children: item.category }),
994
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdTitle.Card, { children: item.title }),
995
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdText.Body, { children: item.description }),
996
- item.href ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
997
- import_core22.Button,
1087
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { children: [
1088
+ i > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Divider, {}),
1089
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Group, { align: "flex-start", py: "lg", gap: "lg", children: [
1090
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.ThemeIcon, { variant: "light", color: "primary", size: "xl", radius: "md", children: item.icon }),
1091
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Stack, { gap: "xs", style: { flex: 1 }, children: [
1092
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SdBadge.Primary, { children: item.category }),
1093
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SdTitle.Card, { children: item.title }),
1094
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SdText.Body, { children: item.description }),
1095
+ item.href ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1096
+ import_core23.Button,
998
1097
  {
999
1098
  variant: "subtle",
1000
1099
  color: "slate",
@@ -1006,7 +1105,7 @@ function List({ items, onSelect }) {
1006
1105
  " \u2192"
1007
1106
  ]
1008
1107
  }
1009
- ) : /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1108
+ ) : /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1010
1109
  SdButton.Ghost,
1011
1110
  {
1012
1111
  onClick: () => onSelect == null ? void 0 : onSelect(item),
@@ -1030,8 +1129,8 @@ var SdSolution = {
1030
1129
  };
1031
1130
 
1032
1131
  // ui/molecule/Clients.tsx
1033
- var import_core23 = require("@mantine/core");
1034
- var import_jsx_runtime24 = require("react/jsx-runtime");
1132
+ var import_core24 = require("@mantine/core");
1133
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1035
1134
  var grayStyle = {
1036
1135
  filter: "grayscale(1) opacity(0.5)",
1037
1136
  transition: "filter 0.25s"
@@ -1040,7 +1139,7 @@ var colorStyle = {
1040
1139
  filter: "grayscale(0) opacity(1)"
1041
1140
  };
1042
1141
  function LogoImage({ client, height }) {
1043
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Tooltip, { label: client.name, withArrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Anchor, { href: client.url, target: "_blank", rel: "noopener noreferrer", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1142
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Tooltip, { label: client.name, withArrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Anchor, { href: client.url, target: "_blank", rel: "noopener noreferrer", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1044
1143
  "img",
1045
1144
  {
1046
1145
  src: client.logo,
@@ -1056,15 +1155,15 @@ function Grid4({
1056
1155
  cols = { base: 2, sm: 3, md: 4, lg: 6 },
1057
1156
  logoHeight = 40
1058
1157
  }) {
1059
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.SimpleGrid, { cols, spacing: "xl", children: items.map((client, i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Box, { style: { display: "flex", alignItems: "center", justifyContent: "center", padding: "12px 8px" }, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(LogoImage, { client, height: logoHeight }) }, i)) });
1158
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.SimpleGrid, { cols, spacing: "xl", children: items.map((client, i) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Box, { style: { display: "flex", alignItems: "center", justifyContent: "center", padding: "12px 8px" }, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(LogoImage, { client, height: logoHeight }) }, i)) });
1060
1159
  }
1061
1160
  var KEYFRAME = `@keyframes sd-clients-marquee { from { transform: translateX(0) } to { transform: translateX(-50%) } }`;
1062
1161
  function Marquee({ items, speed = 40, logoHeight = 36, gap = 64 }) {
1063
1162
  const doubled = [...items, ...items];
1064
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Box, { style: { overflow: "hidden" }, children: [
1065
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("style", { children: KEYFRAME }),
1066
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1067
- import_core23.Box,
1163
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_core24.Box, { style: { overflow: "hidden" }, children: [
1164
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("style", { children: KEYFRAME }),
1165
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1166
+ import_core24.Box,
1068
1167
  {
1069
1168
  style: {
1070
1169
  display: "flex",
@@ -1079,7 +1178,7 @@ function Marquee({ items, speed = 40, logoHeight = 36, gap = 64 }) {
1079
1178
  onMouseLeave: (e) => {
1080
1179
  e.currentTarget.style.animationPlayState = "running";
1081
1180
  },
1082
- children: doubled.map((client, i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(LogoImage, { client, height: logoHeight }, i))
1181
+ children: doubled.map((client, i) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(LogoImage, { client, height: logoHeight }, i))
1083
1182
  }
1084
1183
  )
1085
1184
  ] });
@@ -1090,14 +1189,16 @@ var SdClients = {
1090
1189
  /** 무한 수평 스크롤 띠 — 호버 시 일시정지 */
1091
1190
  Marquee
1092
1191
  };
1192
+ var SdClientsGrid = Grid4;
1193
+ var SdClientsMarquee = Marquee;
1093
1194
 
1094
1195
  // ui/molecule/Map.tsx
1095
1196
  var import_react2 = require("react");
1096
- var import_core24 = require("@mantine/core");
1097
- var import_jsx_runtime25 = require("react/jsx-runtime");
1197
+ var import_core25 = require("@mantine/core");
1198
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1098
1199
  function MapFrame({ address, height }) {
1099
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_core24.Stack, { gap: "xs", children: [
1100
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Box, { style: { borderRadius: "var(--mantine-radius-md)", overflow: "hidden", height }, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1200
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_core25.Stack, { gap: "xs", children: [
1201
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Box, { style: { borderRadius: "var(--mantine-radius-md)", overflow: "hidden", height }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1101
1202
  "iframe",
1102
1203
  {
1103
1204
  src: address.embbedUrl,
@@ -1110,7 +1211,7 @@ function MapFrame({ address, height }) {
1110
1211
  title: address.label
1111
1212
  }
1112
1213
  ) }),
1113
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(SdText.Sub, { children: [
1214
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(SdText.Sub, { children: [
1114
1215
  "[",
1115
1216
  address.label,
1116
1217
  "] ",
@@ -1121,18 +1222,18 @@ function MapFrame({ address, height }) {
1121
1222
  function Single(_a) {
1122
1223
  var _b = _a, { address, height = 400 } = _b, boxProps = __objRest(_b, ["address", "height"]);
1123
1224
  if (!address.embbedUrl) return null;
1124
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(MapFrame, { address, height }) }));
1225
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(MapFrame, { address, height }) }));
1125
1226
  }
1126
1227
  function Tabs2({ addresses, height = 400 }) {
1127
1228
  var _a, _b, _c;
1128
1229
  const mapped = addresses.filter((a) => a.embbedUrl);
1129
1230
  const [active, setActive] = (0, import_react2.useState)((_b = (_a = mapped[0]) == null ? void 0 : _a.label) != null ? _b : "");
1130
1231
  if (mapped.length === 0) return null;
1131
- if (mapped.length === 1) return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(MapFrame, { address: mapped[0], height });
1232
+ if (mapped.length === 1) return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(MapFrame, { address: mapped[0], height });
1132
1233
  const current = (_c = mapped.find((a) => a.label === active)) != null ? _c : mapped[0];
1133
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_core24.Stack, { gap: "md", children: [
1134
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SdTabs.Pills, { value: active, onChange: (v) => setActive(v != null ? v : mapped[0].label), children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SdTabs.Pills.List, { children: mapped.map((addr) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SdTabs.Pills.Tab, { value: addr.label, children: addr.label }, addr.label)) }) }),
1135
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(MapFrame, { address: current, height })
1234
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_core25.Stack, { gap: "md", children: [
1235
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SdTabs.Pills, { value: active, onChange: (v) => setActive(v != null ? v : mapped[0].label), children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SdTabs.Pills.List, { children: mapped.map((addr) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SdTabs.Pills.Tab, { value: addr.label, children: addr.label }, addr.label)) }) }),
1236
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(MapFrame, { address: current, height })
1136
1237
  ] });
1137
1238
  }
1138
1239
  var SdMap = {
@@ -1141,16 +1242,30 @@ var SdMap = {
1141
1242
  /** 여러 주소 탭 전환 지도 — embbedUrl 있는 항목만 표시 */
1142
1243
  Tabs: Tabs2
1143
1244
  };
1245
+ var SdMapSingle = Single;
1246
+ var SdMapTabs = Tabs2;
1144
1247
 
1145
1248
  // ui/organism/HeroCarousel.tsx
1146
1249
  var import_carousel = require("@mantine/carousel");
1147
- var import_core25 = require("@mantine/core");
1148
- var import_jsx_runtime26 = require("react/jsx-runtime");
1250
+ var import_core26 = require("@mantine/core");
1251
+ var import_icons_react4 = require("@tabler/icons-react");
1252
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1253
+ var variantMap = {
1254
+ primary: SdButton.Primary,
1255
+ secondary: SdButton.Secondary,
1256
+ outline: SdButton.Outline,
1257
+ white: SdButton.White
1258
+ };
1259
+ function CtaButton({ cta }) {
1260
+ var _a;
1261
+ const Button3 = variantMap[(_a = cta.variant) != null ? _a : "primary"];
1262
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Anchor, { href: cta.href, underline: "never", children: cta.icon ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Button3, { size: "md", rightSection: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_icons_react4.IconArrowNarrowRight, {}), children: cta.label }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Button3, { size: "md", children: cta.label }) });
1263
+ }
1149
1264
  function HeroCarousel({ slides, children }) {
1150
- if (children) return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_jsx_runtime26.Fragment, { children });
1265
+ if (children) return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_jsx_runtime27.Fragment, { children });
1151
1266
  const filterdSlides = filterAndSort(slides);
1152
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_carousel.Carousel, { withIndicators: true, height: "60svh", children: filterdSlides.map((slide, i) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_carousel.Carousel.Slide, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1153
- import_core25.Box,
1267
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_carousel.Carousel, { withIndicators: true, height: "60svh", children: filterdSlides.map((slide, i) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_carousel.Carousel.Slide, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1268
+ import_core26.Box,
1154
1269
  {
1155
1270
  style: {
1156
1271
  height: "100%",
@@ -1161,150 +1276,147 @@ function HeroCarousel({ slides, children }) {
1161
1276
  alignItems: "center",
1162
1277
  justifyContent: "center"
1163
1278
  },
1164
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Stack, { align: "center", style: { textAlign: "center", maxWidth: 780 }, px: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1165
- SdTextBox.Hero,
1166
- {
1167
- title: slide.title,
1168
- description: slide.description,
1169
- ta: "center",
1170
- align: "center"
1171
- }
1172
- ) })
1279
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Stack, { align: "center", style: { textAlign: "center", maxWidth: 780 }, px: "xl", children: [
1280
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1281
+ SdTextBox.Hero,
1282
+ {
1283
+ title: slide.title,
1284
+ description: slide.description,
1285
+ ta: "center",
1286
+ align: "center"
1287
+ }
1288
+ ),
1289
+ slide.ctas && slide.ctas.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Group, { gap: "sm", mt: "md", children: slide.ctas.map((cta, i2) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CtaButton, { cta }, cta.href)) })
1290
+ ] })
1173
1291
  }
1174
1292
  ) }, i)) });
1175
1293
  }
1176
1294
 
1177
1295
  // ui/organism/Header.tsx
1178
- var import_core26 = require("@mantine/core");
1296
+ var import_core27 = require("@mantine/core");
1179
1297
  var import_hooks = require("@mantine/hooks");
1180
- var import_jsx_runtime27 = require("react/jsx-runtime");
1298
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1181
1299
  function SdHeader({ navItems, loginFlag, children }) {
1182
1300
  const [opened, { toggle, close }] = (0, import_hooks.useDisclosure)();
1183
1301
  const visibleTopItems = navItems.filter((item) => item.isShow && !item.parentId).sort((a, b) => a.order - b.order);
1184
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
1185
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SdContainer, { h: "100%", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Group, { justify: "space-between", h: "100%", children: [
1186
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Logo, {}),
1187
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Group, { gap: "xl", visibleFrom: "sm", children: visibleTopItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Anchor, { href: item.href, c: "slate.7", fw: 500, underline: "never", fz: 15, children: item.label }, item.id)) }),
1188
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
1189
- loginFlag && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Group, { gap: "sm", visibleFrom: "sm", children: [
1190
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SdButton.Ghost, { size: "sm", children: "\uB85C\uADF8\uC778" }),
1191
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SdButton.Primary, { size: "sm", children: "\uBB34\uB8CC \uC2DC\uC791" })
1302
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment, { children: [
1303
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SdContainer, { h: "100%", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core27.Group, { justify: "space-between", h: "100%", children: [
1304
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Logo, {}),
1305
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Group, { gap: "xl", visibleFrom: "sm", children: visibleTopItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Anchor, { href: item.href, c: "slate.7", fw: 500, underline: "never", fz: 15, children: item.label }, item.id)) }),
1306
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
1307
+ loginFlag && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core27.Group, { gap: "sm", visibleFrom: "sm", children: [
1308
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SdButton.Ghost, { size: "sm", children: "\uB85C\uADF8\uC778" }),
1309
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SdButton.Primary, { size: "sm", children: "\uBB34\uB8CC \uC2DC\uC791" })
1192
1310
  ] }),
1193
1311
  children
1194
1312
  ] }) }),
1195
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Drawer, { opened, onClose: close, hiddenFrom: "sm", size: "xs", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Stack, { children: [
1196
- visibleTopItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Anchor, { href: item.href, c: "slate.7", fw: 500, underline: "never", fz: 16, onClick: close, children: item.label }, item.id)),
1197
- loginFlag && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Stack, { gap: "xs", mt: "md", children: [
1198
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SdButton.Ghost, { size: "sm", children: "\uB85C\uADF8\uC778" }),
1199
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SdButton.Primary, { size: "sm", children: "\uBB34\uB8CC \uC2DC\uC791" })
1313
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Drawer, { opened, onClose: close, hiddenFrom: "sm", size: "xs", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core27.Stack, { children: [
1314
+ visibleTopItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Anchor, { href: item.href, c: "slate.7", fw: 500, underline: "never", fz: 16, onClick: close, children: item.label }, item.id)),
1315
+ loginFlag && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core27.Stack, { gap: "xs", mt: "md", children: [
1316
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SdButton.Ghost, { size: "sm", children: "\uB85C\uADF8\uC778" }),
1317
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SdButton.Primary, { size: "sm", children: "\uBB34\uB8CC \uC2DC\uC791" })
1200
1318
  ] })
1201
1319
  ] }) })
1202
1320
  ] });
1203
1321
  }
1204
1322
 
1205
- // ui/organism/Footer/index.tsx
1206
- var import_core29 = require("@mantine/core");
1207
-
1208
- // ui/organism/Footer/FooterBrand.tsx
1209
- var import_jsx_runtime28 = require("react/jsx-runtime");
1210
- function FooterBrand() {
1211
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Logo, { size: "xs" });
1212
- }
1213
-
1214
- // ui/organism/Footer/FooterContact.tsx
1215
- var import_core27 = require("@mantine/core");
1323
+ // ui/organism/Footer.tsx
1324
+ var import_core28 = require("@mantine/core");
1216
1325
  var import_jsx_runtime29 = require("react/jsx-runtime");
1217
- function FooterContact({ company }) {
1218
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core27.Group, { gap: "lg", wrap: "wrap", children: [
1219
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { c: "slate.5", children: company.name }),
1220
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(SdText.Sub, { c: "slate.5", children: [
1326
+ function FooterNavColumns({ items }) {
1327
+ const topLevel = items.filter((item) => !item.parentId);
1328
+ const getChildren = (parentId) => items.filter((item) => item.parentId === parentId);
1329
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_jsx_runtime29.Fragment, { children: topLevel.map((group) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Grid.Col, { span: { base: 6, sm: 4, md: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Stack, { gap: "sm", children: [
1330
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Strong, { fz: "sm", children: group.label }),
1331
+ getChildren(group.id).map((link) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1332
+ import_core28.Anchor,
1333
+ {
1334
+ href: link.href,
1335
+ fz: "sm",
1336
+ c: "slate.6",
1337
+ underline: "never",
1338
+ style: { transition: "color 0.15s" },
1339
+ onMouseEnter: (e) => {
1340
+ e.currentTarget.style.color = "var(--mantine-color-primary-6)";
1341
+ },
1342
+ onMouseLeave: (e) => {
1343
+ e.currentTarget.style.color = "";
1344
+ },
1345
+ children: link.label
1346
+ },
1347
+ link.id
1348
+ ))
1349
+ ] }) }, group.id)) });
1350
+ }
1351
+ function FooterCompanyInfo({ company }) {
1352
+ const sortedAddresses = [...company.addresses].sort((a, b) => a.order - b.order);
1353
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Group, { gap: "xs", wrap: "wrap", children: [
1354
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { children: company.name }),
1355
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { c: "slate.4", children: "|" }),
1356
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(SdText.Sub, { children: [
1221
1357
  "\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638 ",
1222
1358
  company.registrationNumber
1223
1359
  ] }),
1224
- company.addresses.map((addr) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { c: "slate.5", children: addr.address }, addr.label)),
1225
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core27.Anchor, { href: `tel:${company.tel}`, fz: "xs", c: "slate.5", underline: "never", children: [
1360
+ sortedAddresses.map((addr) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Group, { gap: "xs", wrap: "nowrap", children: [
1361
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { c: "slate.4", children: "|" }),
1362
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { children: addr.address })
1363
+ ] }, addr.label)),
1364
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { c: "slate.4", children: "|" }),
1365
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Anchor, { href: `tel:${company.tel}`, fz: "xs", c: "slate.5", underline: "never", children: [
1226
1366
  "Tel ",
1227
1367
  company.tel
1228
1368
  ] }),
1229
- company.fax && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(SdText.Sub, { c: "slate.5", children: [
1230
- "Fax ",
1231
- company.fax
1369
+ company.fax && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
1370
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { c: "slate.4", children: "|" }),
1371
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(SdText.Sub, { children: [
1372
+ "Fax ",
1373
+ company.fax
1374
+ ] })
1232
1375
  ] }),
1233
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core27.Anchor, { href: `mailto:${company.email}`, fz: "xs", c: "slate.5", underline: "never", children: company.email })
1376
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { c: "slate.4", children: "|" }),
1377
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Anchor, { href: `mailto:${company.email}`, fz: "xs", c: "slate.5", underline: "never", children: company.email })
1234
1378
  ] });
1235
1379
  }
1236
-
1237
- // ui/organism/Footer/FooterNav.tsx
1238
- var import_core28 = require("@mantine/core");
1239
- var import_jsx_runtime30 = require("react/jsx-runtime");
1240
- function FooterNav({ items }) {
1241
- const topLevel = items.filter((item) => !item.parentId);
1242
- const getChildren = (parentId) => items.filter((item) => item.parentId === parentId);
1243
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core28.Group, { gap: 48, align: "flex-start", wrap: "wrap", children: topLevel.map((item) => {
1244
- const children = getChildren(item.id);
1245
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core28.Stack, { gap: "sm", children: [
1246
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdText.Eyebrow, { c: "slate.4", children: item.label }),
1247
- children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1248
- import_core28.Anchor,
1249
- {
1250
- href: child.href,
1251
- fz: "xs",
1252
- c: "slate.5",
1253
- underline: "never",
1254
- style: { transition: "color 0.15s" },
1255
- onMouseEnter: (e) => {
1256
- e.currentTarget.style.color = "var(--mantine-color-slate-1)";
1257
- },
1258
- onMouseLeave: (e) => {
1259
- e.currentTarget.style.color = "";
1260
- },
1261
- children: child.label
1262
- },
1263
- child.id
1264
- ))
1265
- ] }, item.id);
1266
- }) });
1267
- }
1268
-
1269
- // ui/organism/Footer/index.tsx
1270
- var import_jsx_runtime31 = require("react/jsx-runtime");
1271
- function SdFooter({ company, utilityLinks, policyLinks }) {
1272
- const visibleUtility = filterAndSort(utilityLinks);
1380
+ function SdFooter({ company, navItems, policyLinks, description }) {
1381
+ const visibleNav = filterAndSort(navItems);
1273
1382
  const visiblePolicy = filterAndSort(policyLinks);
1274
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Box, { children: [
1275
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Grid, { style: { "--grid-gutter": "48px" }, align: "flex-start", children: [
1276
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Grid.Col, { span: { base: 12, md: 3 }, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(FooterBrand, {}) }),
1277
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Grid.Col, { span: { base: 12, md: 9 }, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(FooterNav, { items: visibleUtility != null ? visibleUtility : [] }) })
1383
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Box, { component: "footer", py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(SdContainer, { children: [
1384
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Grid, { style: { "--grid-gutter": "48px" }, children: [
1385
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Grid.Col, { span: { base: 12, md: 4 }, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Stack, { gap: "md", children: [
1386
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Logo, { size: "sm" }),
1387
+ description && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Body, { c: "slate.4", fz: "sm", children: description })
1388
+ ] }) }),
1389
+ visibleNav.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Grid.Col, { span: { base: 12, md: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Grid, { style: { "--grid-gutter": "24px" }, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(FooterNavColumns, { items: visibleNav }) }) })
1278
1390
  ] }),
1279
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Divider, {}),
1280
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(FooterContact, { company }),
1281
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Divider, {}),
1282
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Group, { justify: "space-between", wrap: "wrap", gap: "xs", children: [
1283
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(SdText.Sub, { c: "slate.5", children: [
1391
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Divider, {}),
1392
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(FooterCompanyInfo, { company }),
1393
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Group, { justify: "space-between", wrap: "wrap", gap: "xs", mt: "md", children: [
1394
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(SdText.Sub, { c: "slate.5", children: [
1284
1395
  "\xA9 ",
1285
1396
  company.copyrightYear,
1286
1397
  " ",
1287
1398
  company.name,
1288
1399
  ". All rights reserved."
1289
1400
  ] }),
1290
- visiblePolicy.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Group, { gap: "lg", children: visiblePolicy.map((item) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1291
- import_core29.Anchor,
1401
+ visiblePolicy.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Group, { gap: "lg", children: visiblePolicy.map((item) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1402
+ import_core28.Anchor,
1292
1403
  {
1293
1404
  href: item.href,
1294
1405
  fz: "xs",
1295
- c: item.highlight ? "primary.6" : "slate.5",
1406
+ fw: item.highlight ? 700 : 400,
1407
+ c: item.highlight ? "white" : "slate.5",
1296
1408
  underline: "never",
1297
1409
  children: item.label
1298
1410
  },
1299
1411
  item.id
1300
1412
  )) })
1301
1413
  ] })
1302
- ] });
1414
+ ] }) });
1303
1415
  }
1304
1416
 
1305
1417
  // ui/organism/FeatureSection.tsx
1306
- var import_core30 = require("@mantine/core");
1307
- var import_jsx_runtime32 = require("react/jsx-runtime");
1418
+ var import_core29 = require("@mantine/core");
1419
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1308
1420
  function SdFeatureSection(_a) {
1309
1421
  var _b = _a, {
1310
1422
  label,
@@ -1321,8 +1433,8 @@ function SdFeatureSection(_a) {
1321
1433
  "cols",
1322
1434
  "py"
1323
1435
  ]);
1324
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Stack, { gap: "xl", children: [
1325
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1436
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Stack, { gap: "xl", children: [
1437
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1326
1438
  SdTextBox.Section,
1327
1439
  {
1328
1440
  label,
@@ -1333,13 +1445,13 @@ function SdFeatureSection(_a) {
1333
1445
  align: "center"
1334
1446
  }
1335
1447
  ),
1336
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdFeatures, { items, cols })
1448
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdFeatures, { items, cols })
1337
1449
  ] }) }));
1338
1450
  }
1339
1451
 
1340
1452
  // ui/organism/TimelineSection.tsx
1341
- var import_core31 = require("@mantine/core");
1342
- var import_jsx_runtime33 = require("react/jsx-runtime");
1453
+ var import_core30 = require("@mantine/core");
1454
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1343
1455
  function SdTimelineSection(_a) {
1344
1456
  var _b = _a, {
1345
1457
  label,
@@ -1354,8 +1466,8 @@ function SdTimelineSection(_a) {
1354
1466
  "items",
1355
1467
  "py"
1356
1468
  ]);
1357
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core31.Stack, __spreadProps(__spreadValues({ py, gap: "md" }, boxProps), { children: [
1358
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1469
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core30.Stack, __spreadProps(__spreadValues({ py, gap: "md" }, boxProps), { children: [
1470
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1359
1471
  SdTextBox.Section,
1360
1472
  {
1361
1473
  label,
@@ -1363,13 +1475,13 @@ function SdTimelineSection(_a) {
1363
1475
  description
1364
1476
  }
1365
1477
  ),
1366
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdTimeline, { items }) })
1478
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdTimeline, { items }) })
1367
1479
  ] })) });
1368
1480
  }
1369
1481
 
1370
1482
  // ui/organism/StepsSection.tsx
1371
- var import_core32 = require("@mantine/core");
1372
- var import_jsx_runtime34 = require("react/jsx-runtime");
1483
+ var import_core31 = require("@mantine/core");
1484
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1373
1485
  function SdStepsSection(_a) {
1374
1486
  var _b = _a, {
1375
1487
  label,
@@ -1384,18 +1496,18 @@ function SdStepsSection(_a) {
1384
1496
  "items",
1385
1497
  "py"
1386
1498
  ]);
1387
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core32.Stack, { gap: "xl", children: [
1388
- (label || title || description) && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdTextBox.Section, { label, title, description }),
1389
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdSteps.Bubble, { items })
1499
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core31.Stack, { gap: "xl", children: [
1500
+ (label || title || description) && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdTextBox.Section, { label, title, description }),
1501
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdSteps.Bubble, { items })
1390
1502
  ] }) }));
1391
1503
  }
1392
1504
 
1393
1505
  // ui/organism/ErrorView.tsx
1394
- var import_core33 = require("@mantine/core");
1395
- var import_jsx_runtime35 = require("react/jsx-runtime");
1506
+ var import_core32 = require("@mantine/core");
1507
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1396
1508
  function StatusCode({ code }) {
1397
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1398
- import_core33.Text,
1509
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1510
+ import_core32.Text,
1399
1511
  {
1400
1512
  fz: 160,
1401
1513
  fw: 900,
@@ -1408,19 +1520,15 @@ function StatusCode({ code }) {
1408
1520
  );
1409
1521
  }
1410
1522
  function Page({ error, onReset, onHome }) {
1411
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core33.Center, { mih: "60vh", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core33.Stack, { align: "center", gap: "lg", ta: "center", children: [
1412
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(StatusCode, { code: "500" }),
1413
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core33.Stack, { gap: "sm", align: "center", children: [
1414
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdTitle.Section, { children: "\uC11C\uBC84\uC5D0\uC11C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4" }),
1415
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdText.Body, { maw: 480, children: error.message || "\uC608\uAE30\uCE58 \uC54A\uC740 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." }),
1416
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(SdText.Sub, { children: [
1417
- "\uC624\uB958 \uCF54\uB4DC: ",
1418
- error.digest
1419
- ] })
1523
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Center, { mih: "60vh", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core32.Stack, { align: "center", gap: "lg", ta: "center", children: [
1524
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(StatusCode, { code: "500" }),
1525
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core32.Stack, { gap: "sm", align: "center", children: [
1526
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdTitle.Section, { children: "\uC11C\uBC84\uC5D0\uC11C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4" }),
1527
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdText.Body, { maw: 480, children: "\uC608\uAE30\uCE58 \uC54A\uC740 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." })
1420
1528
  ] }),
1421
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core33.Group, { gap: "sm", justify: "center", children: [
1422
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdButton.Primary, { onClick: onReset, children: "\uB2E4\uC2DC \uC2DC\uB3C4" }),
1423
- onHome && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdButton.Ghost, { onClick: onHome, children: "\uD648\uC73C\uB85C" })
1529
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core32.Group, { gap: "sm", justify: "center", children: [
1530
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdButton.Primary, { onClick: onReset, children: "\uB2E4\uC2DC \uC2DC\uB3C4" }),
1531
+ onHome && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdButton.Ghost, { onClick: onHome, children: "\uD648\uC73C\uB85C" })
1424
1532
  ] })
1425
1533
  ] }) }) });
1426
1534
  }
@@ -1432,15 +1540,15 @@ function NotFound({
1432
1540
  },
1433
1541
  onBack = () => window.history.back()
1434
1542
  }) {
1435
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core33.Center, { mih: "60vh", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core33.Stack, { align: "center", gap: "lg", ta: "center", children: [
1436
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(StatusCode, { code: "404" }),
1437
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core33.Stack, { gap: "sm", align: "center", children: [
1438
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdTitle.Section, { children: title }),
1439
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdText.Body, { maw: 480, children: description })
1543
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Center, { mih: "60vh", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core32.Stack, { align: "center", gap: "lg", ta: "center", children: [
1544
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(StatusCode, { code: "404" }),
1545
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core32.Stack, { gap: "sm", align: "center", children: [
1546
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdTitle.Section, { children: title }),
1547
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdText.Body, { maw: 480, children: description })
1440
1548
  ] }),
1441
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core33.Group, { gap: "sm", justify: "center", children: [
1442
- onHome && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdButton.Primary, { onClick: onHome, children: "\uD648\uC73C\uB85C" }),
1443
- onBack && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdButton.Ghost, { onClick: onBack, children: "\uB4A4\uB85C \uAC00\uAE30" })
1549
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core32.Group, { gap: "sm", justify: "center", children: [
1550
+ onHome && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdButton.Primary, { onClick: onHome, children: "\uD648\uC73C\uB85C" }),
1551
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdButton.Ghost, { onClick: onBack, children: "\uB4A4\uB85C \uAC00\uAE30" })
1444
1552
  ] })
1445
1553
  ] }) }) });
1446
1554
  }
@@ -1452,28 +1560,28 @@ var SdErrorView = {
1452
1560
  };
1453
1561
 
1454
1562
  // ui/template/MainLayout.tsx
1455
- var import_core34 = require("@mantine/core");
1456
- var import_jsx_runtime36 = require("react/jsx-runtime");
1563
+ var import_core33 = require("@mantine/core");
1564
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1457
1565
  function MainLayout({ children, navItems, companyInfo }) {
1458
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.AppShell, { header: { height: 60 }, children: [
1459
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.AppShell.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdHeader, { navItems }) }),
1460
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.AppShell.Main, { children }),
1461
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdFooter, { company: companyInfo, utilityLinks: navItems })
1566
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.AppShell, { header: { height: 60 }, children: [
1567
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core33.AppShell.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdHeader, { navItems }) }),
1568
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core33.AppShell.Main, { children }),
1569
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdFooter, { company: companyInfo })
1462
1570
  ] });
1463
1571
  }
1464
1572
 
1465
1573
  // ui/template/PageLayout.tsx
1466
- var import_core35 = require("@mantine/core");
1467
- var import_jsx_runtime37 = require("react/jsx-runtime");
1574
+ var import_core34 = require("@mantine/core");
1575
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1468
1576
  function Content({ children }) {
1469
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SdContainer, { py: "xl", children });
1577
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdContainer, { py: "xl", children });
1470
1578
  }
1471
1579
  function LayoutGap() {
1472
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Space, { h: 48 });
1580
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.Space, { h: 48 });
1473
1581
  }
1474
1582
  function Minimal({ label, title, description, children }) {
1475
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(Plain2, { children: [
1476
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1583
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_jsx_runtime35.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Plain2, { children: [
1584
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1477
1585
  SdTextBox.Section,
1478
1586
  {
1479
1587
  label,
@@ -1482,19 +1590,19 @@ function Minimal({ label, title, description, children }) {
1482
1590
  mb: "xl"
1483
1591
  }
1484
1592
  ),
1485
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Divider, {}),
1593
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.Divider, {}),
1486
1594
  children
1487
1595
  ] }) });
1488
1596
  }
1489
1597
  function Plain2({ children }) {
1490
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
1491
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(LayoutGap, {}),
1492
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Content, { children })
1598
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
1599
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(LayoutGap, {}),
1600
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Content, { children })
1493
1601
  ] });
1494
1602
  }
1495
1603
  function Image2({ image, label, title, description, children }) {
1496
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
1497
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Box, { style: {
1604
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
1605
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core34.Box, { style: {
1498
1606
  position: "relative",
1499
1607
  minHeight: "30svh",
1500
1608
  display: "flex",
@@ -1504,13 +1612,13 @@ function Image2({ image, label, title, description, children }) {
1504
1612
  backgroundPosition: "center",
1505
1613
  backgroundColor: "var(--mantine-color-slate-9)"
1506
1614
  }, children: [
1507
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Box, { style: {
1615
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.Box, { style: {
1508
1616
  position: "absolute",
1509
1617
  inset: 0,
1510
1618
  background: "rgba(0, 0, 0, 0.55)"
1511
1619
  } }),
1512
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1513
- import_core35.Box,
1620
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1621
+ import_core34.Box,
1514
1622
  {
1515
1623
  py: 48,
1516
1624
  px: 40,
@@ -1522,7 +1630,7 @@ function Image2({ image, label, title, description, children }) {
1522
1630
  borderRadius: "var(--mantine-radius-md)",
1523
1631
  border: "1px solid rgba(255,255,255,0.18)"
1524
1632
  },
1525
- children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1633
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1526
1634
  SdTextBox.Hero,
1527
1635
  {
1528
1636
  label,
@@ -1535,12 +1643,12 @@ function Image2({ image, label, title, description, children }) {
1535
1643
  }
1536
1644
  ) })
1537
1645
  ] }),
1538
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Content, { children })
1646
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Content, { children })
1539
1647
  ] });
1540
1648
  }
1541
1649
  function Brand({ label, title, description, children }) {
1542
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
1543
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Box, { style: {
1650
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
1651
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core34.Box, { style: {
1544
1652
  position: "relative",
1545
1653
  minHeight: "40svh",
1546
1654
  display: "flex",
@@ -1548,7 +1656,7 @@ function Brand({ label, title, description, children }) {
1548
1656
  overflow: "hidden",
1549
1657
  background: "linear-gradient(135deg, var(--mantine-color-primary-8) 0%, var(--mantine-color-primary-6) 50%, var(--mantine-color-primary-4) 100%)"
1550
1658
  }, children: [
1551
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Box, { style: {
1659
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.Box, { style: {
1552
1660
  position: "absolute",
1553
1661
  top: -80,
1554
1662
  right: -80,
@@ -1558,7 +1666,7 @@ function Brand({ label, title, description, children }) {
1558
1666
  background: "rgba(255,255,255,0.06)",
1559
1667
  pointerEvents: "none"
1560
1668
  } }),
1561
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Box, { style: {
1669
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.Box, { style: {
1562
1670
  position: "absolute",
1563
1671
  bottom: -60,
1564
1672
  left: -60,
@@ -1568,9 +1676,9 @@ function Brand({ label, title, description, children }) {
1568
1676
  background: "rgba(255,255,255,0.04)",
1569
1677
  pointerEvents: "none"
1570
1678
  } }),
1571
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SdTextBox.Hero, { label, title, description, ta: "center", align: "center", maw: 640, mx: "auto", pt: 80, pb: 64 }) })
1679
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdTextBox.Hero, { label, title, description, ta: "center", align: "center", maw: 640, mx: "auto", pt: 80, pb: 64 }) })
1572
1680
  ] }),
1573
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Content, { children })
1681
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Content, { children })
1574
1682
  ] });
1575
1683
  }
1576
1684
  var PageLayout = {
@@ -1585,7 +1693,7 @@ var PageLayout = {
1585
1693
  };
1586
1694
 
1587
1695
  // ui/theme.ts
1588
- var import_core36 = require("@mantine/core");
1696
+ var import_core35 = require("@mantine/core");
1589
1697
  var primary = [
1590
1698
  "#e7f0fb",
1591
1699
  "#c8dcf4",
@@ -1659,7 +1767,7 @@ var indigo = [
1659
1767
  "#3730a3",
1660
1768
  "#312e81"
1661
1769
  ];
1662
- var theme = (0, import_core36.createTheme)({
1770
+ var theme = (0, import_core35.createTheme)({
1663
1771
  /* ---- Color ---- */
1664
1772
  colors: { primary, secondary, slate, cyan, indigo, dark: slate },
1665
1773
  primaryColor: "primary",
@@ -1671,20 +1779,20 @@ var theme = (0, import_core36.createTheme)({
1671
1779
  fontFamily: "'Noto Sans KR', ui-sans-serif, system-ui, sans-serif",
1672
1780
  fontWeight: "700",
1673
1781
  sizes: {
1674
- h1: { fontSize: (0, import_core36.rem)(48), lineHeight: "1.1", fontWeight: "900" },
1675
- h2: { fontSize: (0, import_core36.rem)(36), lineHeight: "1.1", fontWeight: "900" },
1676
- h3: { fontSize: (0, import_core36.rem)(28), lineHeight: "1.15", fontWeight: "700" },
1677
- h4: { fontSize: (0, import_core36.rem)(20), lineHeight: "1.3", fontWeight: "700" },
1678
- h5: { fontSize: (0, import_core36.rem)(16), lineHeight: "1.4", fontWeight: "700" },
1679
- h6: { fontSize: (0, import_core36.rem)(14), lineHeight: "1.4", fontWeight: "700" }
1782
+ h1: { fontSize: (0, import_core35.rem)(48), lineHeight: "1.1", fontWeight: "900" },
1783
+ h2: { fontSize: (0, import_core35.rem)(36), lineHeight: "1.1", fontWeight: "900" },
1784
+ h3: { fontSize: (0, import_core35.rem)(28), lineHeight: "1.15", fontWeight: "700" },
1785
+ h4: { fontSize: (0, import_core35.rem)(20), lineHeight: "1.3", fontWeight: "700" },
1786
+ h5: { fontSize: (0, import_core35.rem)(16), lineHeight: "1.4", fontWeight: "700" },
1787
+ h6: { fontSize: (0, import_core35.rem)(14), lineHeight: "1.4", fontWeight: "700" }
1680
1788
  }
1681
1789
  },
1682
1790
  fontSizes: {
1683
- xs: (0, import_core36.rem)(14),
1684
- sm: (0, import_core36.rem)(16),
1685
- md: (0, import_core36.rem)(18),
1686
- lg: (0, import_core36.rem)(20),
1687
- xl: (0, import_core36.rem)(22)
1791
+ xs: (0, import_core35.rem)(14),
1792
+ sm: (0, import_core35.rem)(16),
1793
+ md: (0, import_core35.rem)(18),
1794
+ lg: (0, import_core35.rem)(20),
1795
+ xl: (0, import_core35.rem)(22)
1688
1796
  },
1689
1797
  lineHeights: {
1690
1798
  xs: "1.4",
@@ -1695,18 +1803,18 @@ var theme = (0, import_core36.createTheme)({
1695
1803
  },
1696
1804
  defaultRadius: "md",
1697
1805
  radius: {
1698
- xs: (0, import_core36.rem)(6),
1699
- sm: (0, import_core36.rem)(8),
1700
- md: (0, import_core36.rem)(10),
1701
- lg: (0, import_core36.rem)(14),
1702
- xl: (0, import_core36.rem)(18)
1806
+ xs: (0, import_core35.rem)(6),
1807
+ sm: (0, import_core35.rem)(8),
1808
+ md: (0, import_core35.rem)(10),
1809
+ lg: (0, import_core35.rem)(14),
1810
+ xl: (0, import_core35.rem)(18)
1703
1811
  },
1704
1812
  spacing: {
1705
- xs: (0, import_core36.rem)(8),
1706
- sm: (0, import_core36.rem)(12),
1707
- md: (0, import_core36.rem)(16),
1708
- lg: (0, import_core36.rem)(24),
1709
- xl: (0, import_core36.rem)(32)
1813
+ xs: (0, import_core35.rem)(8),
1814
+ sm: (0, import_core35.rem)(12),
1815
+ md: (0, import_core35.rem)(16),
1816
+ lg: (0, import_core35.rem)(24),
1817
+ xl: (0, import_core35.rem)(32)
1710
1818
  },
1711
1819
  shadows: {
1712
1820
  xs: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
@@ -1804,7 +1912,16 @@ var theme = (0, import_core36.createTheme)({
1804
1912
  PageLayout,
1805
1913
  SdBadge,
1806
1914
  SdButton,
1915
+ SdButtonCancel,
1916
+ SdButtonDelete,
1917
+ SdButtonGhost,
1918
+ SdButtonOutline,
1919
+ SdButtonPrimary,
1920
+ SdButtonSecondary,
1921
+ SdButtonWhite,
1807
1922
  SdClients,
1923
+ SdClientsGrid,
1924
+ SdClientsMarquee,
1808
1925
  SdContainer,
1809
1926
  SdCta,
1810
1927
  SdErrorView,
@@ -1815,19 +1932,34 @@ var theme = (0, import_core36.createTheme)({
1815
1932
  SdHeader,
1816
1933
  SdInput,
1817
1934
  SdMap,
1935
+ SdMapSingle,
1936
+ SdMapTabs,
1818
1937
  SdModal,
1819
1938
  SdNumberIcon,
1820
1939
  SdPricingCard,
1821
1940
  SdQuote,
1941
+ SdSkeleton,
1942
+ SdSkeletonAvatar,
1943
+ SdSkeletonCard,
1944
+ SdSkeletonImage,
1945
+ SdSkeletonText,
1946
+ SdSkeletonTitle,
1822
1947
  SdSolution,
1823
1948
  SdSolutionCard,
1824
1949
  SdSteps,
1825
1950
  SdStepsSection,
1826
1951
  SdTable,
1827
1952
  SdTabs,
1953
+ SdTabsOutline,
1954
+ SdTabsPills,
1955
+ SdTabsUnderline,
1828
1956
  SdTestimonial,
1829
1957
  SdText,
1830
1958
  SdTextBox,
1959
+ SdTextBoxCard,
1960
+ SdTextBoxHero,
1961
+ SdTextBoxSection,
1962
+ SdTextBoxSub,
1831
1963
  SdTimeline,
1832
1964
  SdTimelineSection,
1833
1965
  SdTitle,