@yeongseoksong/framework 1.1.0 → 1.3.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/README.md +168 -34
- package/dist/types/index.d.mts +8 -1
- package/dist/types/index.d.ts +8 -1
- package/dist/ui/index.cjs +933 -595
- package/dist/ui/index.d.mts +170 -54
- package/dist/ui/index.d.ts +170 -54
- package/dist/ui/index.mjs +807 -524
- package/dist/util/index.cjs +17 -2
- package/dist/util/index.d.mts +12 -1
- package/dist/util/index.d.ts +12 -1
- package/dist/util/index.mjs +14 -1
- package/package.json +2 -2
package/dist/ui/index.cjs
CHANGED
|
@@ -65,33 +65,63 @@ __export(ui_exports, {
|
|
|
65
65
|
MainLayout: () => MainLayout,
|
|
66
66
|
PageLayout: () => PageLayout,
|
|
67
67
|
SdBadge: () => SdBadge,
|
|
68
|
+
SdBadgeDefault: () => SdBadgeDefault,
|
|
69
|
+
SdBadgePrimary: () => SdBadgePrimary,
|
|
70
|
+
SdBadgeSuccess: () => SdBadgeSuccess,
|
|
71
|
+
SdBadgeWarning: () => SdBadgeWarning,
|
|
68
72
|
SdButton: () => SdButton,
|
|
69
73
|
SdButtonCancel: () => SdButtonCancel,
|
|
70
74
|
SdButtonDelete: () => SdButtonDelete,
|
|
75
|
+
SdButtonDownload: () => SdButtonDownload,
|
|
76
|
+
SdButtonExcel: () => SdButtonExcel,
|
|
71
77
|
SdButtonGhost: () => SdButtonGhost,
|
|
72
78
|
SdButtonOutline: () => SdButtonOutline,
|
|
73
79
|
SdButtonPrimary: () => SdButtonPrimary,
|
|
74
80
|
SdButtonSecondary: () => SdButtonSecondary,
|
|
81
|
+
SdButtonSubmit: () => SdButtonSubmit,
|
|
75
82
|
SdButtonWhite: () => SdButtonWhite,
|
|
76
83
|
SdClients: () => SdClients,
|
|
77
84
|
SdClientsGrid: () => SdClientsGrid,
|
|
78
85
|
SdClientsMarquee: () => SdClientsMarquee,
|
|
79
86
|
SdContainer: () => SdContainer,
|
|
80
87
|
SdCta: () => SdCta,
|
|
88
|
+
SdCtaBanner: () => SdCtaBanner,
|
|
89
|
+
SdCtaInline: () => SdCtaInline,
|
|
90
|
+
SdCtaSubtle: () => SdCtaSubtle,
|
|
81
91
|
SdErrorView: () => SdErrorView,
|
|
92
|
+
SdErrorViewNotFound: () => SdErrorViewNotFound,
|
|
93
|
+
SdErrorViewPage: () => SdErrorViewPage,
|
|
82
94
|
SdFaq: () => SdFaq,
|
|
95
|
+
SdFaqDefault: () => SdFaqDefault,
|
|
96
|
+
SdFaqFilled: () => SdFaqFilled,
|
|
97
|
+
SdFaqWithHeader: () => SdFaqWithHeader,
|
|
83
98
|
SdFeatureSection: () => SdFeatureSection,
|
|
84
99
|
SdFeatures: () => SdFeatures,
|
|
85
100
|
SdFooter: () => SdFooter,
|
|
86
101
|
SdHeader: () => SdHeader,
|
|
87
102
|
SdInput: () => SdInput,
|
|
103
|
+
SdInputEmail: () => SdInputEmail,
|
|
104
|
+
SdInputPassword: () => SdInputPassword,
|
|
105
|
+
SdInputSelect: () => SdInputSelect,
|
|
106
|
+
SdInputText: () => SdInputText,
|
|
107
|
+
SdInputTextarea: () => SdInputTextarea,
|
|
108
|
+
SdLink: () => SdLink,
|
|
109
|
+
SdLinkBody: () => SdLinkBody,
|
|
110
|
+
SdLinkHint: () => SdLinkHint,
|
|
111
|
+
SdLinkStrong: () => SdLinkStrong,
|
|
112
|
+
SdLinkSub: () => SdLinkSub,
|
|
88
113
|
SdMap: () => SdMap,
|
|
89
114
|
SdMapSingle: () => SdMapSingle,
|
|
90
115
|
SdMapTabs: () => SdMapTabs,
|
|
91
116
|
SdModal: () => SdModal,
|
|
92
117
|
SdNumberIcon: () => SdNumberIcon,
|
|
93
118
|
SdPricingCard: () => SdPricingCard,
|
|
119
|
+
SdPricingCardDefault: () => SdPricingCardDefault,
|
|
120
|
+
SdPricingCardFeatured: () => SdPricingCardFeatured,
|
|
121
|
+
SdPricingCardGrid: () => SdPricingCardGrid,
|
|
94
122
|
SdQuote: () => SdQuote,
|
|
123
|
+
SdQuoteCard: () => SdQuoteCard,
|
|
124
|
+
SdQuotePlain: () => SdQuotePlain,
|
|
95
125
|
SdSkeleton: () => SdSkeleton,
|
|
96
126
|
SdSkeletonAvatar: () => SdSkeletonAvatar,
|
|
97
127
|
SdSkeletonCard: () => SdSkeletonCard,
|
|
@@ -100,23 +130,45 @@ __export(ui_exports, {
|
|
|
100
130
|
SdSkeletonTitle: () => SdSkeletonTitle,
|
|
101
131
|
SdSolution: () => SdSolution,
|
|
102
132
|
SdSolutionCard: () => SdSolutionCard,
|
|
133
|
+
SdSolutionCardGrid: () => SdSolutionCardGrid,
|
|
134
|
+
SdSolutionCardItem: () => SdSolutionCardItem,
|
|
135
|
+
SdSolutionFiltered: () => SdSolutionFiltered,
|
|
136
|
+
SdSolutionList: () => SdSolutionList,
|
|
103
137
|
SdSteps: () => SdSteps,
|
|
138
|
+
SdStepsBubble: () => SdStepsBubble,
|
|
139
|
+
SdStepsCard: () => SdStepsCard,
|
|
104
140
|
SdStepsSection: () => SdStepsSection,
|
|
141
|
+
SdStepsStrip: () => SdStepsStrip,
|
|
105
142
|
SdTable: () => SdTable,
|
|
143
|
+
SdTableSpec: () => SdTableSpec,
|
|
106
144
|
SdTabs: () => SdTabs,
|
|
107
145
|
SdTabsOutline: () => SdTabsOutline,
|
|
108
146
|
SdTabsPills: () => SdTabsPills,
|
|
109
147
|
SdTabsUnderline: () => SdTabsUnderline,
|
|
110
148
|
SdTestimonial: () => SdTestimonial,
|
|
149
|
+
SdTestimonialCard: () => SdTestimonialCard,
|
|
150
|
+
SdTestimonialGrid: () => SdTestimonialGrid,
|
|
151
|
+
SdTestimonialStrip: () => SdTestimonialStrip,
|
|
111
152
|
SdText: () => SdText,
|
|
153
|
+
SdTextBody: () => SdTextBody,
|
|
112
154
|
SdTextBox: () => SdTextBox,
|
|
113
155
|
SdTextBoxCard: () => SdTextBoxCard,
|
|
114
156
|
SdTextBoxHero: () => SdTextBoxHero,
|
|
115
157
|
SdTextBoxSection: () => SdTextBoxSection,
|
|
116
158
|
SdTextBoxSub: () => SdTextBoxSub,
|
|
159
|
+
SdTextError: () => SdTextError,
|
|
160
|
+
SdTextEyebrow: () => SdTextEyebrow,
|
|
161
|
+
SdTextHint: () => SdTextHint,
|
|
162
|
+
SdTextNumeric: () => SdTextNumeric,
|
|
163
|
+
SdTextStrong: () => SdTextStrong,
|
|
164
|
+
SdTextSub: () => SdTextSub,
|
|
117
165
|
SdTimeline: () => SdTimeline,
|
|
118
166
|
SdTimelineSection: () => SdTimelineSection,
|
|
119
167
|
SdTitle: () => SdTitle,
|
|
168
|
+
SdTitleCard: () => SdTitleCard,
|
|
169
|
+
SdTitleDisplay: () => SdTitleDisplay,
|
|
170
|
+
SdTitleSection: () => SdTitleSection,
|
|
171
|
+
SdTitleSub: () => SdTitleSub,
|
|
120
172
|
theme: () => theme
|
|
121
173
|
});
|
|
122
174
|
module.exports = __toCommonJS(ui_exports);
|
|
@@ -204,7 +256,11 @@ var SdTabs = {
|
|
|
204
256
|
flexWrap: "wrap",
|
|
205
257
|
justifyContent: "center"
|
|
206
258
|
},
|
|
207
|
-
tab: {
|
|
259
|
+
tab: {
|
|
260
|
+
fontWeight: "500",
|
|
261
|
+
fontSize: "var(--mantine-h5-font-size)",
|
|
262
|
+
paddingInline: "var(--mantine-spacing-lg)"
|
|
263
|
+
}
|
|
208
264
|
}
|
|
209
265
|
}),
|
|
210
266
|
Underline: createTabs({
|
|
@@ -212,7 +268,11 @@ var SdTabs = {
|
|
|
212
268
|
color: "primary",
|
|
213
269
|
styles: {
|
|
214
270
|
list: { width: "fit-content", margin: "0 auto", gap: "var(--mantine-spacing-sm)" },
|
|
215
|
-
tab: {
|
|
271
|
+
tab: {
|
|
272
|
+
fontWeight: "500",
|
|
273
|
+
fontSize: "var(--mantine-h5-font-size)",
|
|
274
|
+
paddingInline: "var(--mantine-spacing-lg)"
|
|
275
|
+
}
|
|
216
276
|
}
|
|
217
277
|
}),
|
|
218
278
|
Outline: createTabs({
|
|
@@ -221,7 +281,11 @@ var SdTabs = {
|
|
|
221
281
|
radius: "md",
|
|
222
282
|
styles: {
|
|
223
283
|
list: { width: "fit-content", margin: "0 auto", gap: "var(--mantine-spacing-sm)" },
|
|
224
|
-
tab: {
|
|
284
|
+
tab: {
|
|
285
|
+
fontWeight: "500",
|
|
286
|
+
fontSize: "var(--mantine-h5-font-size)",
|
|
287
|
+
paddingInline: "var(--mantine-spacing-lg)"
|
|
288
|
+
}
|
|
225
289
|
}
|
|
226
290
|
})
|
|
227
291
|
};
|
|
@@ -257,6 +321,10 @@ var SdTitle = {
|
|
|
257
321
|
/** 소제목 */
|
|
258
322
|
Sub: createTitle({ order: 5 })
|
|
259
323
|
};
|
|
324
|
+
var SdTitleDisplay = SdTitle.Display;
|
|
325
|
+
var SdTitleSection = SdTitle.Section;
|
|
326
|
+
var SdTitleCard = SdTitle.Card;
|
|
327
|
+
var SdTitleSub = SdTitle.Sub;
|
|
260
328
|
|
|
261
329
|
// ui/atom/Text.tsx
|
|
262
330
|
var import_core5 = require("@mantine/core");
|
|
@@ -272,20 +340,37 @@ var SdText = {
|
|
|
272
340
|
Strong: createText({ fw: 700, c: "slate.9", fz: "md", style: { letterSpacing: "-0.04em" } }),
|
|
273
341
|
Body: createText({ fw: 400, c: "slate.7", fz: "md", lh: 1.7 }),
|
|
274
342
|
Sub: createText({ fw: 400, c: "slate.5", fz: "xs", lh: 1.6 }),
|
|
275
|
-
Eyebrow: createText({
|
|
343
|
+
Eyebrow: createText({
|
|
344
|
+
fw: 700,
|
|
345
|
+
c: "primary.6",
|
|
346
|
+
fz: "xs",
|
|
347
|
+
style: { letterSpacing: "0.12em", textTransform: "uppercase" }
|
|
348
|
+
}),
|
|
276
349
|
Error: createText({ fw: 400, c: "red.6", fz: "sm" }),
|
|
277
350
|
Hint: createText({ fw: 400, c: "slate.4", fz: "xs", lh: 1.5 }),
|
|
278
|
-
Numeric: createText({
|
|
351
|
+
Numeric: createText({
|
|
352
|
+
fw: 700,
|
|
353
|
+
c: "slate.8",
|
|
354
|
+
fz: "md",
|
|
355
|
+
style: { fontVariantNumeric: "tabular-nums", letterSpacing: "-0.02em" }
|
|
356
|
+
})
|
|
279
357
|
};
|
|
358
|
+
var SdTextStrong = SdText.Strong;
|
|
359
|
+
var SdTextBody = SdText.Body;
|
|
360
|
+
var SdTextSub = SdText.Sub;
|
|
361
|
+
var SdTextEyebrow = SdText.Eyebrow;
|
|
362
|
+
var SdTextError = SdText.Error;
|
|
363
|
+
var SdTextHint = SdText.Hint;
|
|
364
|
+
var SdTextNumeric = SdText.Numeric;
|
|
280
365
|
|
|
281
366
|
// ui/atom/Button.tsx
|
|
282
367
|
var import_core6 = require("@mantine/core");
|
|
283
368
|
var import_icons_react = require("@tabler/icons-react");
|
|
284
369
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
285
|
-
function createButton(defaults) {
|
|
370
|
+
function createButton(defaults, defaultLabel) {
|
|
286
371
|
return function SdButton2(_a4) {
|
|
287
372
|
var _b = _a4, { children } = _b, props = __objRest(_b, ["children"]);
|
|
288
|
-
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Button, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { children }));
|
|
373
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Button, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { children: children != null ? children : defaultLabel }));
|
|
289
374
|
};
|
|
290
375
|
}
|
|
291
376
|
var SdButton = {
|
|
@@ -299,18 +384,37 @@ var SdButton = {
|
|
|
299
384
|
Ghost: createButton({ variant: "subtle", color: "slate" }),
|
|
300
385
|
/** 다크 배경 위 — white */
|
|
301
386
|
White: createButton({ variant: "white" }),
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
387
|
+
// ── 표준 액션 버튼: 라벨·색·아이콘이 고정 (children으로 라벨 덮어쓰기 가능) ──
|
|
388
|
+
/** 전송 — filled primary + 종이비행기 아이콘, 기본 라벨 "전송" */
|
|
389
|
+
Submit: createButton({ color: "primary", leftSection: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons_react.IconSend, { size: 16 }) }, "\uC804\uC1A1"),
|
|
390
|
+
/** 삭제 — filled red + 휴지통 아이콘, 기본 라벨 "삭제" */
|
|
391
|
+
Delete: createButton({ color: "red", leftSection: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons_react.IconTrash, { size: 16 }) }, "\uC0AD\uC81C"),
|
|
392
|
+
/** 취소 — outline slate + X 아이콘, 기본 라벨 "취소" */
|
|
393
|
+
Cancel: createButton(
|
|
394
|
+
{ variant: "outline", color: "slate", leftSection: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons_react.IconX, { size: 16 }) },
|
|
395
|
+
"\uCDE8\uC18C"
|
|
396
|
+
),
|
|
397
|
+
/** 엑셀 — outline green + 스프레드시트 아이콘, 기본 라벨 "엑셀" */
|
|
398
|
+
Excel: createButton(
|
|
399
|
+
{ variant: "outline", color: "green", leftSection: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons_react.IconFileSpreadsheet, { size: 16 }) },
|
|
400
|
+
"\uC5D1\uC140"
|
|
401
|
+
),
|
|
402
|
+
/** 다운로드 — light primary + 다운로드 아이콘, 기본 라벨 "다운로드" */
|
|
403
|
+
Download: createButton(
|
|
404
|
+
{ variant: "light", color: "primary", leftSection: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons_react.IconDownload, { size: 16 }) },
|
|
405
|
+
"\uB2E4\uC6B4\uB85C\uB4DC"
|
|
406
|
+
)
|
|
306
407
|
};
|
|
307
408
|
var SdButtonPrimary = SdButton.Primary;
|
|
308
409
|
var SdButtonSecondary = SdButton.Secondary;
|
|
309
410
|
var SdButtonOutline = SdButton.Outline;
|
|
310
411
|
var SdButtonGhost = SdButton.Ghost;
|
|
311
412
|
var SdButtonWhite = SdButton.White;
|
|
413
|
+
var SdButtonSubmit = SdButton.Submit;
|
|
312
414
|
var SdButtonDelete = SdButton.Delete;
|
|
313
415
|
var SdButtonCancel = SdButton.Cancel;
|
|
416
|
+
var SdButtonExcel = SdButton.Excel;
|
|
417
|
+
var SdButtonDownload = SdButton.Download;
|
|
314
418
|
|
|
315
419
|
// ui/atom/Quote.tsx
|
|
316
420
|
var import_core7 = require("@mantine/core");
|
|
@@ -339,6 +443,8 @@ var SdQuote = {
|
|
|
339
443
|
Plain,
|
|
340
444
|
Card: CardQuote
|
|
341
445
|
};
|
|
446
|
+
var SdQuotePlain = SdQuote.Plain;
|
|
447
|
+
var SdQuoteCard = SdQuote.Card;
|
|
342
448
|
|
|
343
449
|
// ui/atom/Table.tsx
|
|
344
450
|
var import_core8 = require("@mantine/core");
|
|
@@ -386,6 +492,7 @@ var Spec = createTable(__spreadProps(__spreadValues({}, base), {
|
|
|
386
492
|
Spec.Th = SpecTh;
|
|
387
493
|
Spec.Td = SpecTd;
|
|
388
494
|
var SdTable = Object.assign(createTable(base), { Spec });
|
|
495
|
+
var SdTableSpec = Spec;
|
|
389
496
|
|
|
390
497
|
// ui/atom/Modal.tsx
|
|
391
498
|
var import_core9 = require("@mantine/core");
|
|
@@ -409,7 +516,17 @@ var SdModal = createModal({
|
|
|
409
516
|
var import_core10 = require("@mantine/core");
|
|
410
517
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
411
518
|
function SdNumberIcon(_a4) {
|
|
412
|
-
var _b = _a4, {
|
|
519
|
+
var _b = _a4, {
|
|
520
|
+
value,
|
|
521
|
+
size = 48,
|
|
522
|
+
radius = "xl",
|
|
523
|
+
color = "primary"
|
|
524
|
+
} = _b, props = __objRest(_b, [
|
|
525
|
+
"value",
|
|
526
|
+
"size",
|
|
527
|
+
"radius",
|
|
528
|
+
"color"
|
|
529
|
+
]);
|
|
413
530
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core10.ThemeIcon, __spreadProps(__spreadValues({ size, radius, color }, props), { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SdText.Strong, { c: "white", children: value }) }));
|
|
414
531
|
}
|
|
415
532
|
|
|
@@ -432,6 +549,10 @@ var SdBadge = {
|
|
|
432
549
|
/** 주의/경고 */
|
|
433
550
|
Warning: createBadge({ variant: "light", color: "orange" })
|
|
434
551
|
};
|
|
552
|
+
var SdBadgeDefault = SdBadge.Default;
|
|
553
|
+
var SdBadgePrimary = SdBadge.Primary;
|
|
554
|
+
var SdBadgeSuccess = SdBadge.Success;
|
|
555
|
+
var SdBadgeWarning = SdBadge.Warning;
|
|
435
556
|
|
|
436
557
|
// ui/atom/Input.tsx
|
|
437
558
|
var import_core12 = require("@mantine/core");
|
|
@@ -443,19 +564,19 @@ function createTextInput(defaults) {
|
|
|
443
564
|
};
|
|
444
565
|
}
|
|
445
566
|
function createTextarea(defaults) {
|
|
446
|
-
return function
|
|
567
|
+
return function SdInputTextarea2(_a4) {
|
|
447
568
|
var props = __objRest(_a4, []);
|
|
448
569
|
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_core12.Textarea, __spreadValues(__spreadValues({}, defaults), props));
|
|
449
570
|
};
|
|
450
571
|
}
|
|
451
572
|
function createPasswordInput(defaults) {
|
|
452
|
-
return function
|
|
573
|
+
return function SdInputPassword2(_a4) {
|
|
453
574
|
var props = __objRest(_a4, []);
|
|
454
575
|
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_core12.PasswordInput, __spreadValues(__spreadValues({}, defaults), props));
|
|
455
576
|
};
|
|
456
577
|
}
|
|
457
578
|
function createSelect(defaults) {
|
|
458
|
-
return function
|
|
579
|
+
return function SdInputSelect2(_a4) {
|
|
459
580
|
var props = __objRest(_a4, []);
|
|
460
581
|
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_core12.Select, __spreadValues(__spreadValues({}, defaults), props));
|
|
461
582
|
};
|
|
@@ -472,6 +593,11 @@ var SdInput = {
|
|
|
472
593
|
/** 드롭다운 선택 */
|
|
473
594
|
Select: createSelect({})
|
|
474
595
|
};
|
|
596
|
+
var SdInputText = SdInput.Text;
|
|
597
|
+
var SdInputEmail = SdInput.Email;
|
|
598
|
+
var SdInputPassword = SdInput.Password;
|
|
599
|
+
var SdInputTextarea = SdInput.Textarea;
|
|
600
|
+
var SdInputSelect = SdInput.Select;
|
|
475
601
|
|
|
476
602
|
// ui/atom/Skeleton.tsx
|
|
477
603
|
var import_core13 = require("@mantine/core");
|
|
@@ -497,7 +623,11 @@ function SkeletonCard({ height, lines = 3 }) {
|
|
|
497
623
|
import_core13.Box,
|
|
498
624
|
{
|
|
499
625
|
p: "md",
|
|
500
|
-
style: {
|
|
626
|
+
style: {
|
|
627
|
+
borderRadius: "var(--mantine-radius-md)",
|
|
628
|
+
border: "1px solid var(--mantine-color-gray-3)",
|
|
629
|
+
height
|
|
630
|
+
},
|
|
501
631
|
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_core13.Stack, { gap: "sm", children: [
|
|
502
632
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core13.Skeleton, { height: 20, width: "50%", radius: "sm" }),
|
|
503
633
|
Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
@@ -526,9 +656,60 @@ var SdSkeletonTitle = SkeletonTitle;
|
|
|
526
656
|
var SdSkeletonImage = SkeletonImage;
|
|
527
657
|
var SdSkeletonAvatar = SkeletonAvatar;
|
|
528
658
|
|
|
529
|
-
// ui/
|
|
659
|
+
// ui/atom/Link.tsx
|
|
530
660
|
var import_core14 = require("@mantine/core");
|
|
661
|
+
|
|
662
|
+
// util/style.util.ts
|
|
663
|
+
function toCssColor(value) {
|
|
664
|
+
if (typeof value !== "string") return "";
|
|
665
|
+
return value.includes(".") ? `var(--mantine-color-${value.replace(".", "-")})` : value;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
// ui/atom/Link.tsx
|
|
531
669
|
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
670
|
+
var HOVER_COLOR = "var(--mantine-color-primary-6)";
|
|
671
|
+
function createLink(defaults) {
|
|
672
|
+
return function SdLink2(_a4) {
|
|
673
|
+
var _b = _a4, { children, onMouseEnter, onMouseLeave } = _b, props = __objRest(_b, ["children", "onMouseEnter", "onMouseLeave"]);
|
|
674
|
+
var _a5;
|
|
675
|
+
const baseColor = toCssColor((_a5 = props.c) != null ? _a5 : defaults.c);
|
|
676
|
+
const handleEnter = (e) => {
|
|
677
|
+
e.currentTarget.style.color = HOVER_COLOR;
|
|
678
|
+
onMouseEnter == null ? void 0 : onMouseEnter(e);
|
|
679
|
+
};
|
|
680
|
+
const handleLeave = (e) => {
|
|
681
|
+
e.currentTarget.style.color = baseColor;
|
|
682
|
+
onMouseLeave == null ? void 0 : onMouseLeave(e);
|
|
683
|
+
};
|
|
684
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
685
|
+
import_core14.Anchor,
|
|
686
|
+
__spreadProps(__spreadValues(__spreadValues({}, defaults), props), {
|
|
687
|
+
style: { transition: "color 0.15s" },
|
|
688
|
+
onMouseEnter: handleEnter,
|
|
689
|
+
onMouseLeave: handleLeave,
|
|
690
|
+
children
|
|
691
|
+
})
|
|
692
|
+
);
|
|
693
|
+
};
|
|
694
|
+
}
|
|
695
|
+
var SdLink = {
|
|
696
|
+
/** 최상위 강조 — 눈에 띄어야 하는 단일 링크 */
|
|
697
|
+
Strong: createLink({ fw: 700, c: "primary.6", fz: "xs", underline: "never" }),
|
|
698
|
+
/** 기본 — 본문·네비게이션 수준의 일반 링크 */
|
|
699
|
+
Body: createLink({ fw: 500, c: "slate.7", fz: 15, underline: "never" }),
|
|
700
|
+
/** 보조 — 연락처·정책 등 부가 정보 */
|
|
701
|
+
Sub: createLink({ fw: 400, c: "slate.5", fz: "xs", underline: "never" }),
|
|
702
|
+
/** 최소 강조 — 링크 목록처럼 밀도가 높고 톤을 낮춰야 하는 곳 */
|
|
703
|
+
Hint: createLink({ fw: 400, c: "slate.4", fz: "xs", underline: "never" })
|
|
704
|
+
};
|
|
705
|
+
var SdLinkStrong = SdLink.Strong;
|
|
706
|
+
var SdLinkBody = SdLink.Body;
|
|
707
|
+
var SdLinkSub = SdLink.Sub;
|
|
708
|
+
var SdLinkHint = SdLink.Hint;
|
|
709
|
+
|
|
710
|
+
// ui/molecule/TextBox.tsx
|
|
711
|
+
var import_core15 = require("@mantine/core");
|
|
712
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
532
713
|
function createTextBox(titleVariant, defaultGap = "xs", descVariant = "Body", color_ = void 0) {
|
|
533
714
|
return function SdTextBox2(_a4) {
|
|
534
715
|
var _b = _a4, {
|
|
@@ -552,10 +733,10 @@ function createTextBox(titleVariant, defaultGap = "xs", descVariant = "Body", co
|
|
|
552
733
|
const variant = variantOverride != null ? variantOverride : titleVariant;
|
|
553
734
|
const TitleComponent = SdTitle[variant];
|
|
554
735
|
const DescComponent = SdText[descVariant];
|
|
555
|
-
return /* @__PURE__ */ (0,
|
|
556
|
-
label && /* @__PURE__ */ (0,
|
|
557
|
-
/* @__PURE__ */ (0,
|
|
558
|
-
description && /* @__PURE__ */ (0,
|
|
736
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core15.Stack, __spreadProps(__spreadValues({ gap: defaultGap }, stackProps), { children: [
|
|
737
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SdText.Eyebrow, { children: label }),
|
|
738
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TitleComponent, { c: colorRes, children: title }),
|
|
739
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(DescComponent, { c: colorRes, maw: maxDescWidth, mt: 4, children: description }),
|
|
559
740
|
children
|
|
560
741
|
] }));
|
|
561
742
|
};
|
|
@@ -572,7 +753,7 @@ var SdTextBoxCard = SdTextBox.Card;
|
|
|
572
753
|
var SdTextBoxSub = SdTextBox.Sub;
|
|
573
754
|
|
|
574
755
|
// ui/molecule/Features.tsx
|
|
575
|
-
var
|
|
756
|
+
var import_core16 = require("@mantine/core");
|
|
576
757
|
|
|
577
758
|
// util/sort.util.ts
|
|
578
759
|
function filterAndSort(items) {
|
|
@@ -580,78 +761,84 @@ function filterAndSort(items) {
|
|
|
580
761
|
}
|
|
581
762
|
|
|
582
763
|
// ui/molecule/Features.tsx
|
|
583
|
-
var
|
|
764
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
584
765
|
function SdFeatures({ items, cols = { base: 1, sm: 2, md: 3 } }) {
|
|
585
766
|
const visible = filterAndSort(items);
|
|
586
|
-
return /* @__PURE__ */ (0,
|
|
587
|
-
|
|
588
|
-
{
|
|
589
|
-
|
|
590
|
-
item.icon,
|
|
591
|
-
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
592
|
-
SdTextBox.Card,
|
|
593
|
-
{
|
|
594
|
-
label: item.label,
|
|
595
|
-
title: item.title,
|
|
596
|
-
description: item.description
|
|
597
|
-
}
|
|
598
|
-
)
|
|
599
|
-
] }, item.id)
|
|
600
|
-
},
|
|
601
|
-
item.id
|
|
602
|
-
)) });
|
|
767
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core16.SimpleGrid, { cols, spacing: "xl", children: visible.map((item) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core16.Card, { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core16.Stack, { gap: "sm", children: [
|
|
768
|
+
item.icon,
|
|
769
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(SdTextBox.Card, { label: item.label, title: item.title, description: item.description })
|
|
770
|
+
] }, item.id) }, item.id)) });
|
|
603
771
|
}
|
|
604
772
|
|
|
605
773
|
// ui/molecule/Timeline.tsx
|
|
606
|
-
var
|
|
607
|
-
var
|
|
774
|
+
var import_core17 = require("@mantine/core");
|
|
775
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
608
776
|
function SdTimeline({ items }) {
|
|
609
777
|
const grouped = items.filter((item) => item.isShow).sort((a, b) => b.year - a.year || b.month - a.month).reduce((acc, item) => {
|
|
610
778
|
var _a4, _b;
|
|
779
|
+
;
|
|
611
780
|
((_b = acc[_a4 = item.year]) != null ? _b : acc[_a4] = []).push(item);
|
|
612
781
|
return acc;
|
|
613
782
|
}, {});
|
|
614
783
|
const years = Object.keys(grouped).map(Number).sort((a, b) => b - a);
|
|
615
|
-
return /* @__PURE__ */ (0,
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
"\uC6D4"
|
|
626
|
-
] }),
|
|
627
|
-
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(SdText.Sub, { style: { flex: 1 }, children: event.description })
|
|
628
|
-
] }, event.id)) })
|
|
629
|
-
},
|
|
630
|
-
year
|
|
631
|
-
)) });
|
|
784
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core17.Timeline, { active: items.length, bulletSize: 24, lineWidth: 2, children: years.map((year) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core17.Timeline.Item, { title: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(SdTitle.Sub, { children: [
|
|
785
|
+
year,
|
|
786
|
+
"\uB144"
|
|
787
|
+
] }), children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core17.Stack, { gap: 6, mt: "xs", children: grouped[year].map((event) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core17.Group, { gap: "md", align: "center", wrap: "nowrap", children: [
|
|
788
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(SdText.Eyebrow, { miw: 28, children: [
|
|
789
|
+
event.month,
|
|
790
|
+
"\uC6D4"
|
|
791
|
+
] }),
|
|
792
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SdText.Sub, { style: { flex: 1 }, children: event.description })
|
|
793
|
+
] }, event.id)) }) }, year)) });
|
|
632
794
|
}
|
|
633
795
|
|
|
634
796
|
// ui/molecule/Steps.tsx
|
|
635
|
-
var
|
|
797
|
+
var import_core18 = require("@mantine/core");
|
|
636
798
|
var import_icons_react2 = require("@tabler/icons-react");
|
|
637
|
-
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
638
799
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
800
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
639
801
|
function BubbleStep({ item, index, isLast }) {
|
|
640
|
-
return /* @__PURE__ */ (0,
|
|
641
|
-
/* @__PURE__ */ (0,
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
802
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { align: "flex-start", gap: "lg", wrap: "nowrap", children: [
|
|
803
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
804
|
+
import_core18.Box,
|
|
805
|
+
{
|
|
806
|
+
style: { display: "flex", flexDirection: "column", alignItems: "center", flexShrink: 0 },
|
|
807
|
+
children: [
|
|
808
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdNumberIcon, { value: String(index + 1).padStart(2, "0") }),
|
|
809
|
+
!isLast && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
810
|
+
import_core18.Box,
|
|
811
|
+
{
|
|
812
|
+
style: {
|
|
813
|
+
width: 2,
|
|
814
|
+
flex: 1,
|
|
815
|
+
minHeight: 32,
|
|
816
|
+
marginTop: 8,
|
|
817
|
+
background: "var(--mantine-color-primary-2)"
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
)
|
|
821
|
+
]
|
|
822
|
+
}
|
|
823
|
+
),
|
|
824
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
825
|
+
SdTextBox.Card,
|
|
826
|
+
{
|
|
827
|
+
title: item.title,
|
|
828
|
+
description: item.description,
|
|
829
|
+
pb: !isLast ? "xl" : 0,
|
|
830
|
+
pt: 4
|
|
831
|
+
}
|
|
832
|
+
)
|
|
646
833
|
] });
|
|
647
834
|
}
|
|
648
835
|
function Bubble({ items }) {
|
|
649
|
-
return /* @__PURE__ */ (0,
|
|
836
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Box, { children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(BubbleStep, { item, index: i, isLast: i === items.length - 1 }, i)) });
|
|
650
837
|
}
|
|
651
838
|
function CardStep({ item, index }) {
|
|
652
|
-
return /* @__PURE__ */ (0,
|
|
653
|
-
/* @__PURE__ */ (0,
|
|
654
|
-
|
|
839
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Card, { withBorder: true, radius: "md", p: 0, style: { height: "100%", overflow: "hidden" }, children: [
|
|
840
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
841
|
+
import_core18.Box,
|
|
655
842
|
{
|
|
656
843
|
py: "lg",
|
|
657
844
|
style: {
|
|
@@ -659,54 +846,57 @@ function CardStep({ item, index }) {
|
|
|
659
846
|
justifyContent: "center",
|
|
660
847
|
background: "var(--mantine-color-primary-0)"
|
|
661
848
|
},
|
|
662
|
-
children: /* @__PURE__ */ (0,
|
|
849
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(SdText.Eyebrow, { children: [
|
|
663
850
|
"STEP ",
|
|
664
851
|
String(index + 1).padStart(2, "0")
|
|
665
852
|
] })
|
|
666
853
|
}
|
|
667
854
|
),
|
|
668
|
-
/* @__PURE__ */ (0,
|
|
855
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Box, { p: "lg", style: { textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdTextBox.Card, { title: item.title, description: item.description }) })
|
|
669
856
|
] });
|
|
670
857
|
}
|
|
671
858
|
function CardArrow({ direction }) {
|
|
672
|
-
return /* @__PURE__ */ (0,
|
|
859
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.ThemeIcon, { size: 36, radius: "xl", variant: "light", color: "primary", children: direction === "right" ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_icons_react2.IconArrowRight, { size: 20, stroke: 2.5 }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_icons_react2.IconArrowDown, { size: 20, stroke: 2.5 }) });
|
|
673
860
|
}
|
|
674
861
|
function CardVariant({ items }) {
|
|
675
|
-
return /* @__PURE__ */ (0,
|
|
676
|
-
/* @__PURE__ */ (0,
|
|
677
|
-
/* @__PURE__ */ (0,
|
|
678
|
-
i < items.length - 1 && /* @__PURE__ */ (0,
|
|
862
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
|
|
863
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Stack, { gap: "sm", hiddenFrom: "sm", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime18.Fragment, { children: [
|
|
864
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CardStep, { item, index: i }),
|
|
865
|
+
i < items.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Box, { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CardArrow, { direction: "down" }) })
|
|
679
866
|
] }, i)) }),
|
|
680
|
-
/* @__PURE__ */ (0,
|
|
681
|
-
/* @__PURE__ */ (0,
|
|
682
|
-
i < items.length - 1 && /* @__PURE__ */ (0,
|
|
867
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Group, { wrap: "nowrap", align: "stretch", gap: 0, visibleFrom: "sm", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime18.Fragment, { children: [
|
|
868
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Box, { style: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CardStep, { item, index: i }) }),
|
|
869
|
+
i < items.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Box, { style: { display: "flex", alignItems: "center", padding: "0 8px" }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CardArrow, { direction: "right" }) })
|
|
683
870
|
] }, i)) })
|
|
684
871
|
] });
|
|
685
872
|
}
|
|
686
873
|
function StripStep({ item, index }) {
|
|
687
|
-
return /* @__PURE__ */ (0,
|
|
688
|
-
/* @__PURE__ */ (0,
|
|
874
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Box, { pl: "md", style: { borderLeft: "3px solid var(--mantine-color-primary-6)" }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: 4, children: [
|
|
875
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(SdText.Eyebrow, { children: [
|
|
689
876
|
"STEP ",
|
|
690
877
|
String(index + 1).padStart(2, "0")
|
|
691
878
|
] }),
|
|
692
|
-
/* @__PURE__ */ (0,
|
|
879
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SdTextBox.Card, { title: item.title, description: item.description })
|
|
693
880
|
] }) });
|
|
694
881
|
}
|
|
695
882
|
function Strip({ items }) {
|
|
696
|
-
return /* @__PURE__ */ (0,
|
|
883
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Stack, { gap: "xl", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StripStep, { item, index: i }, i)) });
|
|
697
884
|
}
|
|
698
885
|
var SdSteps = { Bubble, Card: CardVariant, Strip };
|
|
886
|
+
var SdStepsBubble = SdSteps.Bubble;
|
|
887
|
+
var SdStepsCard = SdSteps.Card;
|
|
888
|
+
var SdStepsStrip = SdSteps.Strip;
|
|
699
889
|
|
|
700
890
|
// ui/molecule/Testimonial.tsx
|
|
701
|
-
var
|
|
702
|
-
var
|
|
891
|
+
var import_core19 = require("@mantine/core");
|
|
892
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
703
893
|
function AuthorRow({ item }) {
|
|
704
|
-
return /* @__PURE__ */ (0,
|
|
705
|
-
item.avatar && /* @__PURE__ */ (0,
|
|
706
|
-
!item.avatar && /* @__PURE__ */ (0,
|
|
707
|
-
/* @__PURE__ */ (0,
|
|
708
|
-
/* @__PURE__ */ (0,
|
|
709
|
-
/* @__PURE__ */ (0,
|
|
894
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { gap: "sm", wrap: "nowrap", children: [
|
|
895
|
+
item.avatar && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Avatar, { src: item.avatar, size: "md", radius: "xl" }),
|
|
896
|
+
!item.avatar && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Avatar, { size: "md", radius: "xl", color: "primary", children: item.name.charAt(0) }),
|
|
897
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: 0, children: [
|
|
898
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdText.Strong, { fz: "sm", children: item.name }),
|
|
899
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(SdText.Sub, { children: [
|
|
710
900
|
item.role,
|
|
711
901
|
item.company ? ` \xB7 ${item.company}` : ""
|
|
712
902
|
] })
|
|
@@ -715,28 +905,28 @@ function AuthorRow({ item }) {
|
|
|
715
905
|
}
|
|
716
906
|
function CardTestimonial(_a4) {
|
|
717
907
|
var _b = _a4, { item } = _b, boxProps = __objRest(_b, ["item"]);
|
|
718
|
-
return /* @__PURE__ */ (0,
|
|
719
|
-
item.rating && /* @__PURE__ */ (0,
|
|
720
|
-
/* @__PURE__ */ (0,
|
|
721
|
-
/* @__PURE__ */ (0,
|
|
722
|
-
item.lines.map((line, i) => /* @__PURE__ */ (0,
|
|
908
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Card, __spreadProps(__spreadValues({ h: "100%" }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "md", h: "100%", children: [
|
|
909
|
+
item.rating && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Rating, { value: item.rating, readOnly: true, size: "sm", color: "primary" }),
|
|
910
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "xs", style: { flex: 1 }, children: [
|
|
911
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdTitle.Display, { c: "primary.6", lh: 0.8, "aria-hidden": true, children: "\u201C" }),
|
|
912
|
+
item.lines.map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdText.Body, { children: line }, i))
|
|
723
913
|
] }),
|
|
724
|
-
/* @__PURE__ */ (0,
|
|
914
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(AuthorRow, { item })
|
|
725
915
|
] }) }));
|
|
726
916
|
}
|
|
727
917
|
function Strip2(_a4) {
|
|
728
918
|
var _b = _a4, { item } = _b, boxProps = __objRest(_b, ["item"]);
|
|
729
|
-
return /* @__PURE__ */ (0,
|
|
730
|
-
item.rating && /* @__PURE__ */ (0,
|
|
731
|
-
/* @__PURE__ */ (0,
|
|
732
|
-
/* @__PURE__ */ (0,
|
|
733
|
-
/* @__PURE__ */ (0,
|
|
919
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "md", children: [
|
|
920
|
+
item.rating && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Rating, { value: item.rating, readOnly: true, size: "sm", color: "primary" }),
|
|
921
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { gap: 4, align: "flex-start", children: [
|
|
922
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdTitle.Display, { c: "primary.6", lh: 0.8, "aria-hidden": true, children: "\u201C" }),
|
|
923
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Stack, { gap: "xs", style: { flex: 1 }, children: item.lines.map((line, i) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdText.Body, { children: line }, i)) })
|
|
734
924
|
] }),
|
|
735
|
-
/* @__PURE__ */ (0,
|
|
925
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(AuthorRow, { item })
|
|
736
926
|
] }) }));
|
|
737
927
|
}
|
|
738
928
|
function Grid({ items, cols = { base: 1, sm: 2, md: 3 } }) {
|
|
739
|
-
return /* @__PURE__ */ (0,
|
|
929
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.SimpleGrid, { cols, spacing: "xl", style: { alignItems: "stretch" }, children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(CardTestimonial, { item }, i)) });
|
|
740
930
|
}
|
|
741
931
|
var SdTestimonial = {
|
|
742
932
|
/** 카드형 — 그리드 배치용 */
|
|
@@ -746,114 +936,87 @@ var SdTestimonial = {
|
|
|
746
936
|
/** 카드 그리드 — 여러 후기 목록 */
|
|
747
937
|
Grid
|
|
748
938
|
};
|
|
939
|
+
var SdTestimonialCard = SdTestimonial.Card;
|
|
940
|
+
var SdTestimonialStrip = SdTestimonial.Strip;
|
|
941
|
+
var SdTestimonialGrid = SdTestimonial.Grid;
|
|
749
942
|
|
|
750
943
|
// ui/molecule/PricingCard.tsx
|
|
751
|
-
var
|
|
944
|
+
var import_core20 = require("@mantine/core");
|
|
752
945
|
var import_icons_react3 = require("@tabler/icons-react");
|
|
753
|
-
var
|
|
946
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
754
947
|
function Default(_a4) {
|
|
755
948
|
var _b = _a4, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
|
|
756
949
|
var _a5;
|
|
757
|
-
return /* @__PURE__ */ (0,
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
] }),
|
|
771
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { gap: 4, align: "baseline", children: [
|
|
772
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdTitle.Display, { children: item.price }),
|
|
773
|
-
item.period && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(SdText.Sub, { children: [
|
|
774
|
-
"/ ",
|
|
775
|
-
item.period
|
|
776
|
-
] })
|
|
777
|
-
] }),
|
|
778
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Divider, {}),
|
|
779
|
-
/* @__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: [
|
|
780
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
781
|
-
import_core19.ThemeIcon,
|
|
782
|
-
{
|
|
783
|
-
size: "xs",
|
|
784
|
-
radius: "xl",
|
|
785
|
-
color: f.included ? "primary" : "slate",
|
|
786
|
-
variant: f.included ? "filled" : "subtle",
|
|
787
|
-
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 })
|
|
788
|
-
}
|
|
789
|
-
),
|
|
790
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
791
|
-
SdText.Body,
|
|
792
|
-
{
|
|
793
|
-
fz: "sm",
|
|
794
|
-
c: f.included ? "slate.7" : "slate.4",
|
|
795
|
-
children: f.text
|
|
796
|
-
}
|
|
797
|
-
)
|
|
798
|
-
] }, i)) }),
|
|
799
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdButton.Outline, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a5 = item.ctaLabel) != null ? _a5 : "\uC2DC\uC791\uD558\uAE30" })
|
|
950
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Card, __spreadProps(__spreadValues({ withBorder: true, style: { position: "relative" } }, cardProps), { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "xl", children: [
|
|
951
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "xs", children: [
|
|
952
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Group, { justify: "space-between", align: "flex-start", children: [
|
|
953
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdTitle.Card, { children: item.name }),
|
|
954
|
+
item.isPopular && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdBadge.Primary, { children: "\uCD94\uCC9C" })
|
|
955
|
+
] }),
|
|
956
|
+
item.description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Sub, { children: item.description })
|
|
957
|
+
] }),
|
|
958
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Group, { gap: 4, align: "baseline", children: [
|
|
959
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdTitle.Display, { children: item.price }),
|
|
960
|
+
item.period && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(SdText.Sub, { children: [
|
|
961
|
+
"/ ",
|
|
962
|
+
item.period
|
|
800
963
|
] })
|
|
801
|
-
})
|
|
802
|
-
|
|
964
|
+
] }),
|
|
965
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Divider, {}),
|
|
966
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Stack, { gap: "sm", children: item.features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Group, { gap: "sm", wrap: "nowrap", children: [
|
|
967
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
968
|
+
import_core20.ThemeIcon,
|
|
969
|
+
{
|
|
970
|
+
size: "xs",
|
|
971
|
+
radius: "xl",
|
|
972
|
+
color: f.included ? "primary" : "slate",
|
|
973
|
+
variant: f.included ? "filled" : "subtle",
|
|
974
|
+
children: f.included ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_icons_react3.IconCheck, { size: 12 }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_icons_react3.IconX, { size: 12 })
|
|
975
|
+
}
|
|
976
|
+
),
|
|
977
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Body, { fz: "sm", c: f.included ? "slate.7" : "slate.4", children: f.text })
|
|
978
|
+
] }, i)) }),
|
|
979
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdButton.Outline, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a5 = item.ctaLabel) != null ? _a5 : "\uC2DC\uC791\uD558\uAE30" })
|
|
980
|
+
] }) }));
|
|
803
981
|
}
|
|
804
982
|
function Featured(_a4) {
|
|
805
983
|
var _b = _a4, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
|
|
806
984
|
var _a5;
|
|
807
|
-
return /* @__PURE__ */ (0,
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
] }),
|
|
821
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { gap: 4, align: "baseline", children: [
|
|
822
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdTitle.Display, { c: "white", children: item.price }),
|
|
823
|
-
item.period && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(SdText.Body, { c: "primary.2", children: [
|
|
824
|
-
"/ ",
|
|
825
|
-
item.period
|
|
826
|
-
] })
|
|
827
|
-
] }),
|
|
828
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Divider, { color: "primary.4" }),
|
|
829
|
-
/* @__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: [
|
|
830
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
831
|
-
import_core19.ThemeIcon,
|
|
832
|
-
{
|
|
833
|
-
size: "xs",
|
|
834
|
-
radius: "xl",
|
|
835
|
-
color: "white",
|
|
836
|
-
variant: f.included ? "filled" : "subtle",
|
|
837
|
-
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)" })
|
|
838
|
-
}
|
|
839
|
-
),
|
|
840
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
841
|
-
SdText.Body,
|
|
842
|
-
{
|
|
843
|
-
fz: "sm",
|
|
844
|
-
c: f.included ? "white" : "primary.3",
|
|
845
|
-
children: f.text
|
|
846
|
-
}
|
|
847
|
-
)
|
|
848
|
-
] }, i)) }),
|
|
849
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdButton.White, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a5 = item.ctaLabel) != null ? _a5 : "\uC2DC\uC791\uD558\uAE30" })
|
|
985
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Card, __spreadProps(__spreadValues({ bg: "primary.6", style: { position: "relative" } }, cardProps), { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "xl", children: [
|
|
986
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "xs", children: [
|
|
987
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Group, { justify: "space-between", align: "flex-start", children: [
|
|
988
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdTitle.Card, { c: "white", children: item.name }),
|
|
989
|
+
item.isPopular && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdBadge.Default, { c: "white", style: { borderColor: "rgba(255,255,255,0.5)" }, children: "\uCD94\uCC9C" })
|
|
990
|
+
] }),
|
|
991
|
+
item.description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Body, { c: "primary.1", children: item.description })
|
|
992
|
+
] }),
|
|
993
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Group, { gap: 4, align: "baseline", children: [
|
|
994
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdTitle.Display, { c: "white", children: item.price }),
|
|
995
|
+
item.period && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(SdText.Body, { c: "primary.2", children: [
|
|
996
|
+
"/ ",
|
|
997
|
+
item.period
|
|
850
998
|
] })
|
|
851
|
-
})
|
|
852
|
-
|
|
999
|
+
] }),
|
|
1000
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Divider, { color: "primary.4" }),
|
|
1001
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Stack, { gap: "sm", children: item.features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Group, { gap: "sm", wrap: "nowrap", children: [
|
|
1002
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1003
|
+
import_core20.ThemeIcon,
|
|
1004
|
+
{
|
|
1005
|
+
size: "xs",
|
|
1006
|
+
radius: "xl",
|
|
1007
|
+
color: "white",
|
|
1008
|
+
variant: f.included ? "filled" : "subtle",
|
|
1009
|
+
children: f.included ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_icons_react3.IconCheck, { size: 12, color: "var(--mantine-color-primary-6)" }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_icons_react3.IconX, { size: 12, color: "rgba(255,255,255,0.4)" })
|
|
1010
|
+
}
|
|
1011
|
+
),
|
|
1012
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdText.Body, { fz: "sm", c: f.included ? "white" : "primary.3", children: f.text })
|
|
1013
|
+
] }, i)) }),
|
|
1014
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SdButton.White, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a5 = item.ctaLabel) != null ? _a5 : "\uC2DC\uC791\uD558\uAE30" })
|
|
1015
|
+
] }) }));
|
|
853
1016
|
}
|
|
854
1017
|
function Grid2({ items, cols = { base: 1, sm: 2, md: 3 }, onSelect }) {
|
|
855
|
-
return /* @__PURE__ */ (0,
|
|
856
|
-
(item, i) => item.isPopular ? /* @__PURE__ */ (0,
|
|
1018
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.SimpleGrid, { cols, spacing: "xl", style: { alignItems: "stretch" }, children: items.map(
|
|
1019
|
+
(item, i) => item.isPopular ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Featured, { item, onSelect }, i) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Default, { item, onSelect }, i)
|
|
857
1020
|
) });
|
|
858
1021
|
}
|
|
859
1022
|
var SdPricingCard = {
|
|
@@ -864,33 +1027,36 @@ var SdPricingCard = {
|
|
|
864
1027
|
/** 가격 그리드 (isPopular 항목은 자동으로 Featured 처리) */
|
|
865
1028
|
Grid: Grid2
|
|
866
1029
|
};
|
|
1030
|
+
var SdPricingCardDefault = SdPricingCard.Default;
|
|
1031
|
+
var SdPricingCardFeatured = SdPricingCard.Featured;
|
|
1032
|
+
var SdPricingCardGrid = SdPricingCard.Grid;
|
|
867
1033
|
|
|
868
1034
|
// ui/molecule/Faq.tsx
|
|
869
|
-
var
|
|
870
|
-
var
|
|
1035
|
+
var import_core21 = require("@mantine/core");
|
|
1036
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
871
1037
|
function Default2(_a4) {
|
|
872
1038
|
var _b = _a4, { items } = _b, boxProps = __objRest(_b, ["items"]);
|
|
873
|
-
return /* @__PURE__ */ (0,
|
|
874
|
-
/* @__PURE__ */ (0,
|
|
875
|
-
/* @__PURE__ */ (0,
|
|
1039
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Accordion, { variant: "separated", radius: "md", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Accordion.Item, { value: String(i), children: [
|
|
1040
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Accordion.Control, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Strong, { fz: "sm", children: item.question }) }),
|
|
1041
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Accordion.Panel, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Body, { fz: "sm", children: item.answer }) })
|
|
876
1042
|
] }, i)) }) }));
|
|
877
1043
|
}
|
|
878
1044
|
function Filled(_a4) {
|
|
879
1045
|
var _b = _a4, { items } = _b, boxProps = __objRest(_b, ["items"]);
|
|
880
|
-
return /* @__PURE__ */ (0,
|
|
881
|
-
/* @__PURE__ */ (0,
|
|
882
|
-
/* @__PURE__ */ (0,
|
|
1046
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Accordion, { variant: "filled", radius: "md", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Accordion.Item, { value: String(i), children: [
|
|
1047
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Accordion.Control, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Strong, { fz: "sm", children: item.question }) }),
|
|
1048
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Accordion.Panel, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Body, { fz: "sm", children: item.answer }) })
|
|
883
1049
|
] }, i)) }) }));
|
|
884
1050
|
}
|
|
885
1051
|
function WithHeader(_a4) {
|
|
886
1052
|
var _b = _a4, { label, title, description, items } = _b, boxProps = __objRest(_b, ["label", "title", "description", "items"]);
|
|
887
|
-
return /* @__PURE__ */ (0,
|
|
888
|
-
/* @__PURE__ */ (0,
|
|
889
|
-
label && /* @__PURE__ */ (0,
|
|
890
|
-
/* @__PURE__ */ (0,
|
|
891
|
-
description && /* @__PURE__ */ (0,
|
|
1053
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, __spreadProps(__spreadValues({ gap: "xl" }, boxProps), { children: [
|
|
1054
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "xs", children: [
|
|
1055
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Eyebrow, { children: label }),
|
|
1056
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdTitle.Section, { children: title }),
|
|
1057
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Body, { children: description })
|
|
892
1058
|
] }),
|
|
893
|
-
/* @__PURE__ */ (0,
|
|
1059
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Default2, { items })
|
|
894
1060
|
] }));
|
|
895
1061
|
}
|
|
896
1062
|
var SdFaq = {
|
|
@@ -901,10 +1067,13 @@ var SdFaq = {
|
|
|
901
1067
|
/** 헤더 + 아코디언 조합 */
|
|
902
1068
|
WithHeader
|
|
903
1069
|
};
|
|
1070
|
+
var SdFaqDefault = SdFaq.Default;
|
|
1071
|
+
var SdFaqFilled = SdFaq.Filled;
|
|
1072
|
+
var SdFaqWithHeader = SdFaq.WithHeader;
|
|
904
1073
|
|
|
905
1074
|
// ui/molecule/Cta.tsx
|
|
906
|
-
var
|
|
907
|
-
var
|
|
1075
|
+
var import_core22 = require("@mantine/core");
|
|
1076
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
908
1077
|
function Banner(_a4) {
|
|
909
1078
|
var _b = _a4, {
|
|
910
1079
|
label,
|
|
@@ -923,34 +1092,17 @@ function Banner(_a4) {
|
|
|
923
1092
|
"onPrimary",
|
|
924
1093
|
"onSecondary"
|
|
925
1094
|
]);
|
|
926
|
-
return /* @__PURE__ */ (0,
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
description && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdText.Body, { c: "primary.2", ta: "center", children: description })
|
|
938
|
-
] }),
|
|
939
|
-
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Group, { gap: "sm", children: [
|
|
940
|
-
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SdButton.White, { size: "md", onClick: onPrimary, children: primaryLabel }),
|
|
941
|
-
secondaryLabel && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
942
|
-
SdButton.Ghost,
|
|
943
|
-
{
|
|
944
|
-
size: "md",
|
|
945
|
-
c: "primary.2",
|
|
946
|
-
onClick: onSecondary,
|
|
947
|
-
children: secondaryLabel
|
|
948
|
-
}
|
|
949
|
-
)
|
|
950
|
-
] })
|
|
951
|
-
] }) })
|
|
952
|
-
})
|
|
953
|
-
);
|
|
1095
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Box, __spreadProps(__spreadValues({ bg: "primary.7", py: { base: "xl", md: 80 }, px: { base: "md", md: "xl" } }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Stack, { gap: "xl", align: "center", maw: 600, children: [
|
|
1096
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Stack, { gap: "sm", align: "center", children: [
|
|
1097
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdText.Eyebrow, { c: "primary.3", children: label }),
|
|
1098
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdTitle.Section, { c: "white", ta: "center", children: title }),
|
|
1099
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdText.Body, { c: "primary.2", ta: "center", children: description })
|
|
1100
|
+
] }),
|
|
1101
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Group, { gap: "sm", children: [
|
|
1102
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdButton.White, { size: "md", onClick: onPrimary, children: primaryLabel }),
|
|
1103
|
+
secondaryLabel && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdButton.Ghost, { size: "md", c: "primary.2", onClick: onSecondary, children: secondaryLabel })
|
|
1104
|
+
] })
|
|
1105
|
+
] }) }) }));
|
|
954
1106
|
}
|
|
955
1107
|
function Subtle(_a4) {
|
|
956
1108
|
var _b = _a4, {
|
|
@@ -970,23 +1122,23 @@ function Subtle(_a4) {
|
|
|
970
1122
|
"onPrimary",
|
|
971
1123
|
"onSecondary"
|
|
972
1124
|
]);
|
|
973
|
-
return /* @__PURE__ */ (0,
|
|
974
|
-
|
|
1125
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1126
|
+
import_core22.Box,
|
|
975
1127
|
__spreadProps(__spreadValues({
|
|
976
1128
|
bg: "primary.0",
|
|
977
1129
|
py: { base: "xl", md: 60 },
|
|
978
1130
|
px: { base: "md", md: "xl" },
|
|
979
1131
|
style: { borderRadius: "var(--mantine-radius-lg)" }
|
|
980
1132
|
}, boxProps), {
|
|
981
|
-
children: /* @__PURE__ */ (0,
|
|
982
|
-
/* @__PURE__ */ (0,
|
|
983
|
-
label && /* @__PURE__ */ (0,
|
|
984
|
-
/* @__PURE__ */ (0,
|
|
985
|
-
description && /* @__PURE__ */ (0,
|
|
1133
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Stack, { gap: "lg", align: "center", maw: 560, children: [
|
|
1134
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Stack, { gap: "sm", align: "center", children: [
|
|
1135
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdText.Eyebrow, { children: label }),
|
|
1136
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdTitle.Section, { ta: "center", children: title }),
|
|
1137
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdText.Body, { ta: "center", children: description })
|
|
986
1138
|
] }),
|
|
987
|
-
/* @__PURE__ */ (0,
|
|
988
|
-
/* @__PURE__ */ (0,
|
|
989
|
-
secondaryLabel && /* @__PURE__ */ (0,
|
|
1139
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Group, { gap: "sm", children: [
|
|
1140
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdButton.Primary, { size: "md", onClick: onPrimary, children: primaryLabel }),
|
|
1141
|
+
secondaryLabel && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdButton.Outline, { size: "md", onClick: onSecondary, children: secondaryLabel })
|
|
990
1142
|
] })
|
|
991
1143
|
] }) })
|
|
992
1144
|
})
|
|
@@ -1010,8 +1162,8 @@ function Inline(_a4) {
|
|
|
1010
1162
|
"onPrimary",
|
|
1011
1163
|
"onSecondary"
|
|
1012
1164
|
]);
|
|
1013
|
-
return /* @__PURE__ */ (0,
|
|
1014
|
-
|
|
1165
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1166
|
+
import_core22.Box,
|
|
1015
1167
|
__spreadProps(__spreadValues({
|
|
1016
1168
|
py: { base: "xl", md: 48 },
|
|
1017
1169
|
px: { base: "md", md: "xl" },
|
|
@@ -1020,15 +1172,15 @@ function Inline(_a4) {
|
|
|
1020
1172
|
borderBottom: "1px solid var(--mantine-color-slate-2)"
|
|
1021
1173
|
}
|
|
1022
1174
|
}, boxProps), {
|
|
1023
|
-
children: /* @__PURE__ */ (0,
|
|
1024
|
-
/* @__PURE__ */ (0,
|
|
1025
|
-
label && /* @__PURE__ */ (0,
|
|
1026
|
-
/* @__PURE__ */ (0,
|
|
1027
|
-
description && /* @__PURE__ */ (0,
|
|
1175
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Group, { justify: "space-between", align: "center", gap: "xl", children: [
|
|
1176
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Stack, { gap: "xs", style: { flex: 1 }, children: [
|
|
1177
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdText.Eyebrow, { children: label }),
|
|
1178
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdTitle.Card, { children: title }),
|
|
1179
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdText.Sub, { children: description })
|
|
1028
1180
|
] }),
|
|
1029
|
-
/* @__PURE__ */ (0,
|
|
1030
|
-
/* @__PURE__ */ (0,
|
|
1031
|
-
secondaryLabel && /* @__PURE__ */ (0,
|
|
1181
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Group, { gap: "sm", wrap: "nowrap", children: [
|
|
1182
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdButton.Primary, { size: "md", onClick: onPrimary, children: primaryLabel }),
|
|
1183
|
+
secondaryLabel && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SdButton.Outline, { size: "md", onClick: onSecondary, children: secondaryLabel })
|
|
1032
1184
|
] })
|
|
1033
1185
|
] })
|
|
1034
1186
|
})
|
|
@@ -1042,35 +1194,38 @@ var SdCta = {
|
|
|
1042
1194
|
/** 좌우 분할 인라인 CTA */
|
|
1043
1195
|
Inline
|
|
1044
1196
|
};
|
|
1197
|
+
var SdCtaBanner = SdCta.Banner;
|
|
1198
|
+
var SdCtaSubtle = SdCta.Subtle;
|
|
1199
|
+
var SdCtaInline = SdCta.Inline;
|
|
1045
1200
|
|
|
1046
1201
|
// ui/molecule/Solution.tsx
|
|
1047
1202
|
var import_react = require("react");
|
|
1048
|
-
var
|
|
1203
|
+
var import_core24 = require("@mantine/core");
|
|
1049
1204
|
var import_link3 = __toESM(require("next/link"));
|
|
1050
1205
|
|
|
1051
1206
|
// ui/molecule/SolutionCard.tsx
|
|
1052
|
-
var
|
|
1207
|
+
var import_core23 = require("@mantine/core");
|
|
1053
1208
|
var import_link2 = __toESM(require("next/link"));
|
|
1054
|
-
var
|
|
1209
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
1055
1210
|
function SolutionCardItem(_a4) {
|
|
1056
1211
|
var _b = _a4, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
|
|
1057
1212
|
var _a5, _b2;
|
|
1058
|
-
return /* @__PURE__ */ (0,
|
|
1213
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Card, __spreadProps(__spreadValues({ withBorder: true }, cardProps), { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Stack, { gap: "md", children: [
|
|
1059
1214
|
item.icon,
|
|
1060
|
-
/* @__PURE__ */ (0,
|
|
1061
|
-
/* @__PURE__ */ (0,
|
|
1062
|
-
/* @__PURE__ */ (0,
|
|
1063
|
-
item.href ? /* @__PURE__ */ (0,
|
|
1215
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SdBadge.Primary, { children: item.category }),
|
|
1216
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SdTitle.Card, { children: item.title }),
|
|
1217
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SdText.Body, { children: item.description }),
|
|
1218
|
+
item.href ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Button, { variant: "subtle", color: "slate", component: import_link2.default, href: item.href, children: [
|
|
1064
1219
|
(_a5 = item.ctaLabel) != null ? _a5 : "\uC790\uC138\uD788 \uBCF4\uAE30",
|
|
1065
1220
|
" \u2192"
|
|
1066
|
-
] }) : /* @__PURE__ */ (0,
|
|
1221
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(SdButton.Ghost, { onClick: () => onSelect == null ? void 0 : onSelect(item), children: [
|
|
1067
1222
|
(_b2 = item.ctaLabel) != null ? _b2 : "\uC790\uC138\uD788 \uBCF4\uAE30",
|
|
1068
1223
|
" \u2192"
|
|
1069
1224
|
] })
|
|
1070
1225
|
] }) }));
|
|
1071
1226
|
}
|
|
1072
1227
|
function Grid3({ items, cols = { base: 1, sm: 2, md: 3 }, onSelect }) {
|
|
1073
|
-
return /* @__PURE__ */ (0,
|
|
1228
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.SimpleGrid, { cols, spacing: "xl", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SolutionCardItem, { item, onSelect }, i)) });
|
|
1074
1229
|
}
|
|
1075
1230
|
var SdSolutionCard = {
|
|
1076
1231
|
/** 단일 compact 카드 */
|
|
@@ -1078,31 +1233,33 @@ var SdSolutionCard = {
|
|
|
1078
1233
|
/** 카드 그리드 */
|
|
1079
1234
|
Grid: Grid3
|
|
1080
1235
|
};
|
|
1236
|
+
var SdSolutionCardItem = SdSolutionCard.Item;
|
|
1237
|
+
var SdSolutionCardGrid = SdSolutionCard.Grid;
|
|
1081
1238
|
|
|
1082
1239
|
// ui/molecule/Solution.tsx
|
|
1083
|
-
var
|
|
1240
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
1084
1241
|
function Filtered({ items, allLabel = "\uC804\uCCB4", cols, onSelect }) {
|
|
1085
1242
|
const categories = ["all", ...Array.from(new Set(items.map((i) => i.category)))];
|
|
1086
1243
|
const [active, setActive] = (0, import_react.useState)("all");
|
|
1087
1244
|
const filtered = active === "all" ? items : items.filter((i) => i.category === active);
|
|
1088
|
-
return /* @__PURE__ */ (0,
|
|
1089
|
-
/* @__PURE__ */ (0,
|
|
1090
|
-
/* @__PURE__ */ (0,
|
|
1245
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_core24.Stack, { gap: "xl", children: [
|
|
1246
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SdTabs.Pills, { value: active, onChange: (v) => setActive(v != null ? v : "all"), children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SdTabs.Pills.List, { children: categories.map((cat) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SdTabs.Pills.Tab, { value: cat, children: cat === "all" ? allLabel : cat }, cat)) }) }),
|
|
1247
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SdSolutionCard.Grid, { items: filtered, cols, onSelect })
|
|
1091
1248
|
] });
|
|
1092
1249
|
}
|
|
1093
1250
|
function List({ items, onSelect }) {
|
|
1094
|
-
return /* @__PURE__ */ (0,
|
|
1251
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Stack, { gap: 0, children: items.map((item, i) => {
|
|
1095
1252
|
var _a4, _b;
|
|
1096
|
-
return /* @__PURE__ */ (0,
|
|
1097
|
-
i > 0 && /* @__PURE__ */ (0,
|
|
1098
|
-
/* @__PURE__ */ (0,
|
|
1099
|
-
item.icon && /* @__PURE__ */ (0,
|
|
1100
|
-
/* @__PURE__ */ (0,
|
|
1101
|
-
/* @__PURE__ */ (0,
|
|
1102
|
-
/* @__PURE__ */ (0,
|
|
1103
|
-
/* @__PURE__ */ (0,
|
|
1104
|
-
item.href ? /* @__PURE__ */ (0,
|
|
1105
|
-
|
|
1253
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { children: [
|
|
1254
|
+
i > 0 && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Divider, {}),
|
|
1255
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_core24.Group, { align: "flex-start", py: "lg", gap: "lg", children: [
|
|
1256
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.ThemeIcon, { variant: "light", color: "primary", size: "xl", radius: "md", children: item.icon }),
|
|
1257
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_core24.Stack, { gap: "xs", style: { flex: 1 }, children: [
|
|
1258
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SdBadge.Primary, { children: item.category }),
|
|
1259
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SdTitle.Card, { children: item.title }),
|
|
1260
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SdText.Body, { children: item.description }),
|
|
1261
|
+
item.href ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
1262
|
+
import_core24.Button,
|
|
1106
1263
|
{
|
|
1107
1264
|
variant: "subtle",
|
|
1108
1265
|
color: "slate",
|
|
@@ -1114,7 +1271,7 @@ function List({ items, onSelect }) {
|
|
|
1114
1271
|
" \u2192"
|
|
1115
1272
|
]
|
|
1116
1273
|
}
|
|
1117
|
-
) : /* @__PURE__ */ (0,
|
|
1274
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
1118
1275
|
SdButton.Ghost,
|
|
1119
1276
|
{
|
|
1120
1277
|
onClick: () => onSelect == null ? void 0 : onSelect(item),
|
|
@@ -1136,10 +1293,12 @@ var SdSolution = {
|
|
|
1136
1293
|
/** 수평 리스트 레이아웃 (상세 탐색용) */
|
|
1137
1294
|
List
|
|
1138
1295
|
};
|
|
1296
|
+
var SdSolutionFiltered = SdSolution.Filtered;
|
|
1297
|
+
var SdSolutionList = SdSolution.List;
|
|
1139
1298
|
|
|
1140
1299
|
// ui/molecule/Clients.tsx
|
|
1141
|
-
var
|
|
1142
|
-
var
|
|
1300
|
+
var import_core25 = require("@mantine/core");
|
|
1301
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1143
1302
|
var grayStyle = {
|
|
1144
1303
|
filter: "grayscale(1) opacity(0.5)",
|
|
1145
1304
|
transition: "filter 0.25s"
|
|
@@ -1148,7 +1307,7 @@ var colorStyle = {
|
|
|
1148
1307
|
filter: "grayscale(0) opacity(1)"
|
|
1149
1308
|
};
|
|
1150
1309
|
function LogoImage({ client, height }) {
|
|
1151
|
-
return /* @__PURE__ */ (0,
|
|
1310
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Tooltip, { label: client.name, withArrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Anchor, { href: client.url, target: "_blank", rel: "noopener noreferrer", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1152
1311
|
"img",
|
|
1153
1312
|
{
|
|
1154
1313
|
src: client.logo,
|
|
@@ -1164,15 +1323,27 @@ function Grid4({
|
|
|
1164
1323
|
cols = { base: 2, sm: 3, md: 4, lg: 6 },
|
|
1165
1324
|
logoHeight = 40
|
|
1166
1325
|
}) {
|
|
1167
|
-
return /* @__PURE__ */ (0,
|
|
1326
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.SimpleGrid, { cols, spacing: "xl", children: items.map((client, i) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1327
|
+
import_core25.Box,
|
|
1328
|
+
{
|
|
1329
|
+
style: {
|
|
1330
|
+
display: "flex",
|
|
1331
|
+
alignItems: "center",
|
|
1332
|
+
justifyContent: "center",
|
|
1333
|
+
padding: "12px 8px"
|
|
1334
|
+
},
|
|
1335
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(LogoImage, { client, height: logoHeight })
|
|
1336
|
+
},
|
|
1337
|
+
i
|
|
1338
|
+
)) });
|
|
1168
1339
|
}
|
|
1169
1340
|
var KEYFRAME = `@keyframes sd-clients-marquee { from { transform: translateX(0) } to { transform: translateX(-50%) } }`;
|
|
1170
1341
|
function Marquee({ items, speed = 40, logoHeight = 36, gap = 64 }) {
|
|
1171
1342
|
const doubled = [...items, ...items];
|
|
1172
|
-
return /* @__PURE__ */ (0,
|
|
1173
|
-
/* @__PURE__ */ (0,
|
|
1174
|
-
/* @__PURE__ */ (0,
|
|
1175
|
-
|
|
1343
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_core25.Box, { style: { overflow: "hidden" }, children: [
|
|
1344
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("style", { children: KEYFRAME }),
|
|
1345
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1346
|
+
import_core25.Box,
|
|
1176
1347
|
{
|
|
1177
1348
|
style: {
|
|
1178
1349
|
display: "flex",
|
|
@@ -1182,12 +1353,14 @@ function Marquee({ items, speed = 40, logoHeight = 36, gap = 64 }) {
|
|
|
1182
1353
|
animation: `sd-clients-marquee ${speed}s linear infinite`
|
|
1183
1354
|
},
|
|
1184
1355
|
onMouseEnter: (e) => {
|
|
1356
|
+
;
|
|
1185
1357
|
e.currentTarget.style.animationPlayState = "paused";
|
|
1186
1358
|
},
|
|
1187
1359
|
onMouseLeave: (e) => {
|
|
1360
|
+
;
|
|
1188
1361
|
e.currentTarget.style.animationPlayState = "running";
|
|
1189
1362
|
},
|
|
1190
|
-
children: doubled.map((client, i) => /* @__PURE__ */ (0,
|
|
1363
|
+
children: doubled.map((client, i) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(LogoImage, { client, height: logoHeight }, i))
|
|
1191
1364
|
}
|
|
1192
1365
|
)
|
|
1193
1366
|
] });
|
|
@@ -1203,11 +1376,11 @@ var SdClientsMarquee = Marquee;
|
|
|
1203
1376
|
|
|
1204
1377
|
// ui/molecule/Map.tsx
|
|
1205
1378
|
var import_react2 = require("react");
|
|
1206
|
-
var
|
|
1207
|
-
var
|
|
1379
|
+
var import_core26 = require("@mantine/core");
|
|
1380
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
1208
1381
|
function MapFrame({ address, height }) {
|
|
1209
|
-
return /* @__PURE__ */ (0,
|
|
1210
|
-
/* @__PURE__ */ (0,
|
|
1382
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Stack, { gap: "xs", children: [
|
|
1383
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Box, { style: { borderRadius: "var(--mantine-radius-md)", overflow: "hidden", height }, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1211
1384
|
"iframe",
|
|
1212
1385
|
{
|
|
1213
1386
|
src: address.embbedUrl,
|
|
@@ -1220,7 +1393,7 @@ function MapFrame({ address, height }) {
|
|
|
1220
1393
|
title: address.label
|
|
1221
1394
|
}
|
|
1222
1395
|
) }),
|
|
1223
|
-
/* @__PURE__ */ (0,
|
|
1396
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(SdText.Sub, { children: [
|
|
1224
1397
|
"[",
|
|
1225
1398
|
address.label,
|
|
1226
1399
|
"] ",
|
|
@@ -1231,18 +1404,18 @@ function MapFrame({ address, height }) {
|
|
|
1231
1404
|
function Single(_a4) {
|
|
1232
1405
|
var _b = _a4, { address, height = 400 } = _b, boxProps = __objRest(_b, ["address", "height"]);
|
|
1233
1406
|
if (!address.embbedUrl) return null;
|
|
1234
|
-
return /* @__PURE__ */ (0,
|
|
1407
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(MapFrame, { address, height }) }));
|
|
1235
1408
|
}
|
|
1236
1409
|
function Tabs2({ addresses, height = 400 }) {
|
|
1237
1410
|
var _a4, _b, _c;
|
|
1238
1411
|
const mapped = addresses.filter((a) => a.embbedUrl);
|
|
1239
1412
|
const [active, setActive] = (0, import_react2.useState)((_b = (_a4 = mapped[0]) == null ? void 0 : _a4.label) != null ? _b : "");
|
|
1240
1413
|
if (mapped.length === 0) return null;
|
|
1241
|
-
if (mapped.length === 1) return /* @__PURE__ */ (0,
|
|
1414
|
+
if (mapped.length === 1) return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(MapFrame, { address: mapped[0], height });
|
|
1242
1415
|
const current = (_c = mapped.find((a) => a.label === active)) != null ? _c : mapped[0];
|
|
1243
|
-
return /* @__PURE__ */ (0,
|
|
1244
|
-
/* @__PURE__ */ (0,
|
|
1245
|
-
/* @__PURE__ */ (0,
|
|
1416
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Stack, { gap: "md", children: [
|
|
1417
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SdTabs.Pills, { value: active, onChange: (v) => setActive(v != null ? v : mapped[0].label), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SdTabs.Pills.List, { children: mapped.map((addr) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SdTabs.Pills.Tab, { value: addr.label, children: addr.label }, addr.label)) }) }),
|
|
1418
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(MapFrame, { address: current, height })
|
|
1246
1419
|
] });
|
|
1247
1420
|
}
|
|
1248
1421
|
var SdMap = {
|
|
@@ -1256,9 +1429,9 @@ var SdMapTabs = Tabs2;
|
|
|
1256
1429
|
|
|
1257
1430
|
// ui/organism/HeroCarousel.tsx
|
|
1258
1431
|
var import_carousel = require("@mantine/carousel");
|
|
1259
|
-
var
|
|
1432
|
+
var import_core27 = require("@mantine/core");
|
|
1260
1433
|
var import_icons_react4 = require("@tabler/icons-react");
|
|
1261
|
-
var
|
|
1434
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
1262
1435
|
var variantMap = {
|
|
1263
1436
|
primary: SdButton.Primary,
|
|
1264
1437
|
secondary: SdButton.Secondary,
|
|
@@ -1268,13 +1441,13 @@ var variantMap = {
|
|
|
1268
1441
|
function CtaButton({ cta }) {
|
|
1269
1442
|
var _a4;
|
|
1270
1443
|
const Button3 = variantMap[(_a4 = cta.variant) != null ? _a4 : "primary"];
|
|
1271
|
-
return /* @__PURE__ */ (0,
|
|
1444
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Anchor, { href: cta.href, underline: "never", children: cta.icon ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Button3, { size: "md", rightSection: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_icons_react4.IconArrowNarrowRight, {}), children: cta.label }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Button3, { size: "md", children: cta.label }) });
|
|
1272
1445
|
}
|
|
1273
1446
|
function HeroCarousel({ slides, children }) {
|
|
1274
|
-
if (children) return /* @__PURE__ */ (0,
|
|
1447
|
+
if (children) return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_jsx_runtime28.Fragment, { children });
|
|
1275
1448
|
const filterdSlides = filterAndSort(slides);
|
|
1276
|
-
return /* @__PURE__ */ (0,
|
|
1277
|
-
|
|
1449
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_carousel.Carousel, { withIndicators: true, height: "60svh", children: filterdSlides.map((slide, i) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_carousel.Carousel.Slide, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1450
|
+
import_core27.Box,
|
|
1278
1451
|
{
|
|
1279
1452
|
style: {
|
|
1280
1453
|
height: "100%",
|
|
@@ -1285,8 +1458,8 @@ function HeroCarousel({ slides, children }) {
|
|
|
1285
1458
|
alignItems: "center",
|
|
1286
1459
|
justifyContent: "center"
|
|
1287
1460
|
},
|
|
1288
|
-
children: /* @__PURE__ */ (0,
|
|
1289
|
-
/* @__PURE__ */ (0,
|
|
1461
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core27.Stack, { align: "center", style: { textAlign: "center", maxWidth: 780 }, px: "xl", children: [
|
|
1462
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1290
1463
|
SdTextBox.Hero,
|
|
1291
1464
|
{
|
|
1292
1465
|
title: slide.title,
|
|
@@ -1295,137 +1468,194 @@ function HeroCarousel({ slides, children }) {
|
|
|
1295
1468
|
align: "center"
|
|
1296
1469
|
}
|
|
1297
1470
|
),
|
|
1298
|
-
slide.ctas && slide.ctas.length > 0 && /* @__PURE__ */ (0,
|
|
1471
|
+
slide.ctas && slide.ctas.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Group, { gap: "sm", mt: "md", children: slide.ctas.map((cta, i2) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CtaButton, { cta }, cta.href)) })
|
|
1299
1472
|
] })
|
|
1300
1473
|
}
|
|
1301
1474
|
) }, i)) });
|
|
1302
1475
|
}
|
|
1303
1476
|
|
|
1304
1477
|
// ui/organism/Header.tsx
|
|
1305
|
-
var
|
|
1478
|
+
var import_core28 = require("@mantine/core");
|
|
1306
1479
|
var import_hooks = require("@mantine/hooks");
|
|
1307
|
-
var
|
|
1308
|
-
|
|
1480
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
1481
|
+
var BAR_HEIGHT = 60;
|
|
1482
|
+
function SdHeader({ navItems, loginFlag }) {
|
|
1309
1483
|
const [opened, { toggle, close }] = (0, import_hooks.useDisclosure)();
|
|
1310
|
-
const
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1484
|
+
const visibleItems = filterAndSort(navItems);
|
|
1485
|
+
const topItems = visibleItems.filter((item) => !item.parentId);
|
|
1486
|
+
const childrenOf = (parentId) => visibleItems.filter((item) => item.parentId === parentId);
|
|
1487
|
+
const hasAnyChildren = visibleItems.some((item) => item.parentId);
|
|
1488
|
+
const { hovered, ref: hoverRef } = (0, import_hooks.useHover)();
|
|
1489
|
+
const { focused, ref: focusRef } = (0, import_hooks.useFocusWithin)();
|
|
1490
|
+
const rootRef = (0, import_hooks.useMergedRef)(hoverRef, focusRef);
|
|
1491
|
+
const expanded = hasAnyChildren && (hovered || focused);
|
|
1492
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
|
|
1493
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1494
|
+
import_core28.Box,
|
|
1495
|
+
{
|
|
1496
|
+
ref: rootRef,
|
|
1497
|
+
pos: "relative",
|
|
1498
|
+
bg: "var(--mantine-color-body)",
|
|
1499
|
+
style: {
|
|
1500
|
+
boxShadow: expanded ? "var(--mantine-shadow-md)" : void 0,
|
|
1501
|
+
borderBottom: expanded ? "1px solid var(--mantine-color-slate-2)" : void 0,
|
|
1502
|
+
transition: "box-shadow 0.15s"
|
|
1503
|
+
},
|
|
1504
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Group, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
|
|
1505
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Group, { h: BAR_HEIGHT, align: "center", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Logo, {}) }),
|
|
1506
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Group, { gap: "xl", align: "flex-start", wrap: "nowrap", visibleFrom: "sm", children: topItems.map((item) => {
|
|
1507
|
+
const kids = childrenOf(item.id);
|
|
1508
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Stack, { gap: 0, align: "center", children: [
|
|
1509
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Group, { h: BAR_HEIGHT, align: "center", children: item.href ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdLink.Body, { href: item.href, children: item.label }) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Strong, { children: item.label }) }),
|
|
1510
|
+
kids.length > 0 && /*
|
|
1511
|
+
Mantine Collapse를 쓰지 않는다 — 접힐 때 display:none이 되어
|
|
1512
|
+
하위 링크가 폭 계산에서 빠졌다가 펼칠 때 다시 들어오면서
|
|
1513
|
+
컬럼 폭(=상단 nav 간격)이 튄다.
|
|
1514
|
+
height 0 + overflow hidden은 폭 기여를 유지하므로 간격이 고정된다.
|
|
1515
|
+
visibility:hidden이 접힌 상태의 링크를 탭 순서에서도 빼준다.
|
|
1516
|
+
*/
|
|
1517
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1518
|
+
import_core28.Box,
|
|
1519
|
+
{
|
|
1520
|
+
"aria-hidden": !expanded,
|
|
1521
|
+
style: {
|
|
1522
|
+
height: expanded ? "auto" : 0,
|
|
1523
|
+
overflow: "hidden",
|
|
1524
|
+
opacity: expanded ? 1 : 0,
|
|
1525
|
+
visibility: expanded ? "visible" : "hidden",
|
|
1526
|
+
transition: "opacity 0.15s ease"
|
|
1527
|
+
},
|
|
1528
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Stack, { gap: "xs", pt: 4, pb: "lg", align: "center", children: kids.map((kid) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdLink.Sub, { href: kid.href, children: kid.label }, kid.id)) })
|
|
1529
|
+
}
|
|
1530
|
+
)
|
|
1531
|
+
] }, item.id);
|
|
1532
|
+
}) }),
|
|
1533
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Group, { h: BAR_HEIGHT, align: "center", gap: "sm", wrap: "nowrap", children: [
|
|
1534
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
|
|
1535
|
+
loginFlag && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Group, { gap: "sm", visibleFrom: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1536
|
+
] })
|
|
1537
|
+
] }) })
|
|
1538
|
+
}
|
|
1539
|
+
),
|
|
1540
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Drawer, { opened, onClose: close, hiddenFrom: "sm", size: "xs", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Stack, { gap: 0, children: [
|
|
1541
|
+
topItems.map((item) => {
|
|
1542
|
+
const kids = childrenOf(item.id);
|
|
1543
|
+
if (kids.length === 0) {
|
|
1544
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Box, { px: "sm", py: 8, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdLink.Body, { href: item.href, onClick: close, children: item.label }) }, item.id);
|
|
1545
|
+
}
|
|
1546
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1547
|
+
import_core28.NavLink,
|
|
1548
|
+
{
|
|
1549
|
+
label: item.label,
|
|
1550
|
+
href: item.href,
|
|
1551
|
+
childrenOffset: 28,
|
|
1552
|
+
onClick: kids.length > 0 ? void 0 : close,
|
|
1553
|
+
children: kids.map((kid) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.NavLink, { label: kid.label, href: kid.href, onClick: close }, kid.id))
|
|
1554
|
+
},
|
|
1555
|
+
item.id
|
|
1556
|
+
);
|
|
1557
|
+
}),
|
|
1558
|
+
loginFlag && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Stack, { gap: "xs", mt: "md", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1328
1559
|
] }) })
|
|
1329
1560
|
] });
|
|
1330
1561
|
}
|
|
1331
1562
|
|
|
1332
1563
|
// ui/organism/Footer.tsx
|
|
1333
|
-
var
|
|
1334
|
-
var
|
|
1564
|
+
var import_core29 = require("@mantine/core");
|
|
1565
|
+
var import_icons_react5 = require("@tabler/icons-react");
|
|
1566
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
1335
1567
|
function FooterNavColumns({ items }) {
|
|
1336
1568
|
const topLevel = items.filter((item) => !item.parentId);
|
|
1337
1569
|
const getChildren = (parentId) => items.filter((item) => item.parentId === parentId);
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1570
|
+
const CHILD_THRESH = 4;
|
|
1571
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_jsx_runtime30.Fragment, { children: topLevel.map((group) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Grid.Col, { span: { base: 6, sm: 4, md: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Stack, { gap: "xs", children: [
|
|
1572
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdText.Sub, { children: group.label }),
|
|
1573
|
+
getChildren(group.id).map((link, id) => {
|
|
1574
|
+
if (id >= CHILD_THRESH) return;
|
|
1575
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdLink.Hint, { href: link.href, children: link.label }, link.id);
|
|
1576
|
+
})
|
|
1577
|
+
] }) }, group.id)) });
|
|
1578
|
+
}
|
|
1579
|
+
var SOCIAL_ICONS = {
|
|
1580
|
+
x: import_icons_react5.IconBrandX,
|
|
1581
|
+
youtube: import_icons_react5.IconBrandYoutube,
|
|
1582
|
+
instagram: import_icons_react5.IconBrandInstagram,
|
|
1583
|
+
facebook: import_icons_react5.IconBrandFacebook,
|
|
1584
|
+
linkedin: import_icons_react5.IconBrandLinkedin,
|
|
1585
|
+
github: import_icons_react5.IconBrandGithub,
|
|
1586
|
+
blog: import_icons_react5.IconWorld
|
|
1587
|
+
};
|
|
1588
|
+
function FooterSocials({ items }) {
|
|
1589
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Group, { gap: 0, wrap: "nowrap", children: items.map((item) => {
|
|
1590
|
+
var _a4, _b;
|
|
1591
|
+
const Icon = (_a4 = SOCIAL_ICONS[item.platform]) != null ? _a4 : import_icons_react5.IconWorld;
|
|
1592
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1593
|
+
import_core29.ActionIcon,
|
|
1342
1594
|
{
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
e.currentTarget.style.color = "";
|
|
1353
|
-
},
|
|
1354
|
-
children: link.label
|
|
1595
|
+
component: "a",
|
|
1596
|
+
href: item.url,
|
|
1597
|
+
target: "_blank",
|
|
1598
|
+
rel: "noreferrer",
|
|
1599
|
+
size: "lg",
|
|
1600
|
+
color: "gray",
|
|
1601
|
+
variant: "subtle",
|
|
1602
|
+
"aria-label": (_b = item.label) != null ? _b : item.platform,
|
|
1603
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Icon, { size: 18, stroke: 1.5 })
|
|
1355
1604
|
},
|
|
1356
|
-
|
|
1357
|
-
)
|
|
1358
|
-
|
|
1605
|
+
item.url
|
|
1606
|
+
);
|
|
1607
|
+
}) });
|
|
1608
|
+
}
|
|
1609
|
+
function InfoCell({ label, children }) {
|
|
1610
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Group, { gap: 6, wrap: "nowrap", align: "baseline", children: [
|
|
1611
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdText.Sub, { c: "slate.4", style: { whiteSpace: "nowrap" }, children: label }),
|
|
1612
|
+
typeof children === "string" ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdText.Sub, { children }) : children
|
|
1613
|
+
] });
|
|
1359
1614
|
}
|
|
1360
1615
|
function FooterCompanyInfo({ company }) {
|
|
1361
1616
|
const sortedAddresses = [...company.addresses].sort((a, b) => a.order - b.order);
|
|
1362
|
-
return /* @__PURE__ */ (0,
|
|
1363
|
-
/* @__PURE__ */ (0,
|
|
1364
|
-
/* @__PURE__ */ (0,
|
|
1365
|
-
/* @__PURE__ */ (0,
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
sortedAddresses.map((addr) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Group, { gap: "xs", wrap: "nowrap", children: [
|
|
1370
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { c: "slate.4", children: "|" }),
|
|
1371
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { children: addr.address })
|
|
1372
|
-
] }, addr.label)),
|
|
1373
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { c: "slate.4", children: "|" }),
|
|
1374
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Anchor, { href: `tel:${company.tel}`, fz: "xs", c: "slate.5", underline: "never", children: [
|
|
1375
|
-
"Tel ",
|
|
1376
|
-
company.tel
|
|
1377
|
-
] }),
|
|
1378
|
-
company.fax && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
|
|
1379
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { c: "slate.4", children: "|" }),
|
|
1380
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(SdText.Sub, { children: [
|
|
1381
|
-
"Fax ",
|
|
1382
|
-
company.fax
|
|
1383
|
-
] })
|
|
1384
|
-
] }),
|
|
1385
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdText.Sub, { c: "slate.4", children: "|" }),
|
|
1386
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Anchor, { href: `mailto:${company.email}`, fz: "xs", c: "slate.5", underline: "never", children: company.email })
|
|
1617
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.SimpleGrid, { cols: { base: 2, sm: 2, md: 1 }, spacing: "md", verticalSpacing: 0, children: [
|
|
1618
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InfoCell, { label: "\uC0C1\uD638", children: company.name }),
|
|
1619
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InfoCell, { label: "\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638", children: company.registrationNumber }),
|
|
1620
|
+
sortedAddresses.map((addr) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InfoCell, { label: addr.label, children: addr.address }, addr.label)),
|
|
1621
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InfoCell, { label: "Tel", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdLink.Sub, { href: `tel:${company.tel}`, children: company.tel }) }),
|
|
1622
|
+
company.fax && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InfoCell, { label: "Fax", children: company.fax }),
|
|
1623
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InfoCell, { label: "Email", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdLink.Sub, { href: `mailto:${company.email}`, children: company.email }) })
|
|
1387
1624
|
] });
|
|
1388
1625
|
}
|
|
1389
1626
|
function SdFooter({ company, navItems, policyLinks, description }) {
|
|
1390
1627
|
const visibleNav = filterAndSort(navItems);
|
|
1391
1628
|
const visiblePolicy = filterAndSort(policyLinks);
|
|
1392
|
-
return /* @__PURE__ */ (0,
|
|
1393
|
-
/* @__PURE__ */ (0,
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
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 }) }) })
|
|
1629
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Box, { component: "footer", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Stack, { children: [
|
|
1630
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Logo, { size: "sm" }),
|
|
1631
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdText.Sub, { children: description }),
|
|
1632
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Flex, { direction: { base: "column", md: "row" }, gap: 48, align: "flex-start", children: [
|
|
1633
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Box, { flex: { base: "0 0 auto", md: "1 1 0" }, w: { base: "100%", md: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(FooterCompanyInfo, { company }) }),
|
|
1634
|
+
visibleNav.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Box, { flex: { base: "0 0 auto", md: "2 1 0" }, w: { base: "100%", md: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Grid, { style: { "--grid-gutter": "24px" }, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(FooterNavColumns, { items: visibleNav }) }) })
|
|
1399
1635
|
] }),
|
|
1400
|
-
/* @__PURE__ */ (0,
|
|
1401
|
-
/* @__PURE__ */ (0,
|
|
1402
|
-
|
|
1403
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(SdText.Sub, { c: "slate.5", children: [
|
|
1636
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Divider, {}),
|
|
1637
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Group, { justify: "space-between", wrap: "wrap", gap: "xs", children: [
|
|
1638
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(SdText.Sub, { children: [
|
|
1404
1639
|
"\xA9 ",
|
|
1405
1640
|
company.copyrightYear,
|
|
1406
1641
|
" ",
|
|
1407
1642
|
company.name,
|
|
1408
1643
|
". All rights reserved."
|
|
1409
1644
|
] }),
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
href: item.href,
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
underline: "never",
|
|
1418
|
-
children: item.label
|
|
1419
|
-
},
|
|
1420
|
-
item.id
|
|
1421
|
-
)) })
|
|
1645
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Group, { gap: "lg", wrap: "wrap", children: [
|
|
1646
|
+
visiblePolicy.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Group, { gap: "lg", children: visiblePolicy.map((item) => {
|
|
1647
|
+
const Link4 = item.highlight ? SdLink.Strong : SdLink.Sub;
|
|
1648
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Link4, { href: item.href, children: item.label }, item.id);
|
|
1649
|
+
}) }),
|
|
1650
|
+
company.socials && company.socials.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(FooterSocials, { items: company.socials })
|
|
1651
|
+
] })
|
|
1422
1652
|
] })
|
|
1423
|
-
] }) });
|
|
1653
|
+
] }) }) });
|
|
1424
1654
|
}
|
|
1425
1655
|
|
|
1426
1656
|
// ui/organism/FeatureSection.tsx
|
|
1427
|
-
var
|
|
1428
|
-
var
|
|
1657
|
+
var import_core30 = require("@mantine/core");
|
|
1658
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
1429
1659
|
function SdFeatureSection(_a4) {
|
|
1430
1660
|
var _b = _a4, {
|
|
1431
1661
|
label,
|
|
@@ -1442,8 +1672,8 @@ function SdFeatureSection(_a4) {
|
|
|
1442
1672
|
"cols",
|
|
1443
1673
|
"py"
|
|
1444
1674
|
]);
|
|
1445
|
-
return /* @__PURE__ */ (0,
|
|
1446
|
-
/* @__PURE__ */ (0,
|
|
1675
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core30.Stack, { gap: "xl", children: [
|
|
1676
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1447
1677
|
SdTextBox.Section,
|
|
1448
1678
|
{
|
|
1449
1679
|
label,
|
|
@@ -1454,13 +1684,13 @@ function SdFeatureSection(_a4) {
|
|
|
1454
1684
|
align: "center"
|
|
1455
1685
|
}
|
|
1456
1686
|
),
|
|
1457
|
-
/* @__PURE__ */ (0,
|
|
1687
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdFeatures, { items, cols })
|
|
1458
1688
|
] }) }));
|
|
1459
1689
|
}
|
|
1460
1690
|
|
|
1461
1691
|
// ui/organism/TimelineSection.tsx
|
|
1462
|
-
var
|
|
1463
|
-
var
|
|
1692
|
+
var import_core31 = require("@mantine/core");
|
|
1693
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
1464
1694
|
function SdTimelineSection(_a4) {
|
|
1465
1695
|
var _b = _a4, {
|
|
1466
1696
|
label,
|
|
@@ -1475,22 +1705,15 @@ function SdTimelineSection(_a4) {
|
|
|
1475
1705
|
"items",
|
|
1476
1706
|
"py"
|
|
1477
1707
|
]);
|
|
1478
|
-
return /* @__PURE__ */ (0,
|
|
1479
|
-
/* @__PURE__ */ (0,
|
|
1480
|
-
|
|
1481
|
-
{
|
|
1482
|
-
label,
|
|
1483
|
-
title,
|
|
1484
|
-
description
|
|
1485
|
-
}
|
|
1486
|
-
),
|
|
1487
|
-
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdTimeline, { items }) })
|
|
1708
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core31.Stack, __spreadProps(__spreadValues({ py, gap: "md" }, boxProps), { children: [
|
|
1709
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdTextBox.Section, { label, title, description }),
|
|
1710
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdTimeline, { items }) })
|
|
1488
1711
|
] })) });
|
|
1489
1712
|
}
|
|
1490
1713
|
|
|
1491
1714
|
// ui/organism/StepsSection.tsx
|
|
1492
|
-
var
|
|
1493
|
-
var
|
|
1715
|
+
var import_core32 = require("@mantine/core");
|
|
1716
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
1494
1717
|
function SdStepsSection(_a4) {
|
|
1495
1718
|
var _b = _a4, {
|
|
1496
1719
|
label,
|
|
@@ -1505,18 +1728,18 @@ function SdStepsSection(_a4) {
|
|
|
1505
1728
|
"items",
|
|
1506
1729
|
"py"
|
|
1507
1730
|
]);
|
|
1508
|
-
return /* @__PURE__ */ (0,
|
|
1509
|
-
(label || title || description) && /* @__PURE__ */ (0,
|
|
1510
|
-
/* @__PURE__ */ (0,
|
|
1731
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core32.Stack, { gap: "xl", children: [
|
|
1732
|
+
(label || title || description) && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdTextBox.Section, { label, title, description }),
|
|
1733
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdSteps.Bubble, { items })
|
|
1511
1734
|
] }) }));
|
|
1512
1735
|
}
|
|
1513
1736
|
|
|
1514
1737
|
// ui/organism/ErrorView.tsx
|
|
1515
|
-
var
|
|
1516
|
-
var
|
|
1738
|
+
var import_core33 = require("@mantine/core");
|
|
1739
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
1517
1740
|
function StatusCode({ code }) {
|
|
1518
|
-
return /* @__PURE__ */ (0,
|
|
1519
|
-
|
|
1741
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
1742
|
+
import_core33.Text,
|
|
1520
1743
|
{
|
|
1521
1744
|
fz: 160,
|
|
1522
1745
|
fw: 900,
|
|
@@ -1529,15 +1752,15 @@ function StatusCode({ code }) {
|
|
|
1529
1752
|
);
|
|
1530
1753
|
}
|
|
1531
1754
|
function Page({ error, onReset, onHome }) {
|
|
1532
|
-
return /* @__PURE__ */ (0,
|
|
1533
|
-
/* @__PURE__ */ (0,
|
|
1534
|
-
/* @__PURE__ */ (0,
|
|
1535
|
-
/* @__PURE__ */ (0,
|
|
1536
|
-
/* @__PURE__ */ (0,
|
|
1755
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core33.Center, { mih: "60vh", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Stack, { align: "center", gap: "lg", ta: "center", children: [
|
|
1756
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(StatusCode, { code: "500" }),
|
|
1757
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Stack, { gap: "sm", align: "center", children: [
|
|
1758
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdTitle.Section, { children: "\uC11C\uBC84\uC5D0\uC11C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4" }),
|
|
1759
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.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." })
|
|
1537
1760
|
] }),
|
|
1538
|
-
/* @__PURE__ */ (0,
|
|
1539
|
-
/* @__PURE__ */ (0,
|
|
1540
|
-
onHome && /* @__PURE__ */ (0,
|
|
1761
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Group, { gap: "sm", justify: "center", children: [
|
|
1762
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdButton.Primary, { onClick: onReset, children: "\uB2E4\uC2DC \uC2DC\uB3C4" }),
|
|
1763
|
+
onHome && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdButton.Ghost, { onClick: onHome, children: "\uD648\uC73C\uB85C" })
|
|
1541
1764
|
] })
|
|
1542
1765
|
] }) }) });
|
|
1543
1766
|
}
|
|
@@ -1549,15 +1772,15 @@ function NotFound({
|
|
|
1549
1772
|
},
|
|
1550
1773
|
onBack = () => window.history.back()
|
|
1551
1774
|
}) {
|
|
1552
|
-
return /* @__PURE__ */ (0,
|
|
1553
|
-
/* @__PURE__ */ (0,
|
|
1554
|
-
/* @__PURE__ */ (0,
|
|
1555
|
-
/* @__PURE__ */ (0,
|
|
1556
|
-
/* @__PURE__ */ (0,
|
|
1775
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core33.Center, { mih: "60vh", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Stack, { align: "center", gap: "lg", ta: "center", children: [
|
|
1776
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(StatusCode, { code: "404" }),
|
|
1777
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Stack, { gap: "sm", align: "center", children: [
|
|
1778
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdTitle.Section, { children: title }),
|
|
1779
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdText.Body, { maw: 480, children: description })
|
|
1557
1780
|
] }),
|
|
1558
|
-
/* @__PURE__ */ (0,
|
|
1559
|
-
onHome && /* @__PURE__ */ (0,
|
|
1560
|
-
onBack && /* @__PURE__ */ (0,
|
|
1781
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Group, { gap: "sm", justify: "center", children: [
|
|
1782
|
+
onHome && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdButton.Primary, { onClick: onHome, children: "\uD648\uC73C\uB85C" }),
|
|
1783
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdButton.Ghost, { onClick: onBack, children: "\uB4A4\uB85C \uAC00\uAE30" })
|
|
1561
1784
|
] })
|
|
1562
1785
|
] }) }) });
|
|
1563
1786
|
}
|
|
@@ -1567,127 +1790,166 @@ var SdErrorView = {
|
|
|
1567
1790
|
/** app/not-found.tsx — 404 Not Found */
|
|
1568
1791
|
NotFound
|
|
1569
1792
|
};
|
|
1793
|
+
var SdErrorViewPage = SdErrorView.Page;
|
|
1794
|
+
var SdErrorViewNotFound = SdErrorView.NotFound;
|
|
1570
1795
|
|
|
1571
1796
|
// ui/template/MainLayout.tsx
|
|
1572
|
-
var
|
|
1573
|
-
var
|
|
1574
|
-
function MainLayout({
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1797
|
+
var import_core34 = require("@mantine/core");
|
|
1798
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
1799
|
+
function MainLayout({
|
|
1800
|
+
children,
|
|
1801
|
+
navItems,
|
|
1802
|
+
companyInfo,
|
|
1803
|
+
loginFlag
|
|
1804
|
+
}) {
|
|
1805
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core34.AppShell, { header: { height: 60 }, children: [
|
|
1806
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.AppShell.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdHeader, { navItems, loginFlag }) }),
|
|
1807
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.AppShell.Main, { children }),
|
|
1808
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdFooter, { company: companyInfo, navItems })
|
|
1579
1809
|
] });
|
|
1580
1810
|
}
|
|
1581
1811
|
|
|
1582
1812
|
// ui/template/PageLayout.tsx
|
|
1583
|
-
var
|
|
1584
|
-
var
|
|
1813
|
+
var import_core35 = require("@mantine/core");
|
|
1814
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
1585
1815
|
function Content({ children }) {
|
|
1586
|
-
return /* @__PURE__ */ (0,
|
|
1816
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdContainer, { py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Stack, { gap: "xl", children }) });
|
|
1587
1817
|
}
|
|
1588
1818
|
function LayoutGap() {
|
|
1589
|
-
return /* @__PURE__ */ (0,
|
|
1819
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Space, { h: 48 });
|
|
1590
1820
|
}
|
|
1591
1821
|
function Minimal({ label, title, description, children }) {
|
|
1592
|
-
return /* @__PURE__ */ (0,
|
|
1593
|
-
/* @__PURE__ */ (0,
|
|
1594
|
-
|
|
1595
|
-
{
|
|
1596
|
-
label,
|
|
1597
|
-
title,
|
|
1598
|
-
description: description != null ? description : "",
|
|
1599
|
-
mb: "xl"
|
|
1600
|
-
}
|
|
1601
|
-
),
|
|
1602
|
-
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.Divider, {}),
|
|
1822
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_jsx_runtime36.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(Plain2, { children: [
|
|
1823
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdTextBox.Section, { label, title, description: description != null ? description : "" }),
|
|
1824
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Divider, {}),
|
|
1603
1825
|
children
|
|
1604
1826
|
] }) });
|
|
1605
1827
|
}
|
|
1606
1828
|
function Plain2({ children }) {
|
|
1607
|
-
return /* @__PURE__ */ (0,
|
|
1608
|
-
/* @__PURE__ */ (0,
|
|
1609
|
-
/* @__PURE__ */ (0,
|
|
1829
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
|
|
1830
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(LayoutGap, {}),
|
|
1831
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Content, { children })
|
|
1610
1832
|
] });
|
|
1611
1833
|
}
|
|
1612
1834
|
function Image2({ image, label, title, description, children }) {
|
|
1613
|
-
return /* @__PURE__ */ (0,
|
|
1614
|
-
/* @__PURE__ */ (0,
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1835
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
|
|
1836
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
1837
|
+
import_core35.Box,
|
|
1838
|
+
{
|
|
1839
|
+
style: {
|
|
1840
|
+
position: "relative",
|
|
1841
|
+
minHeight: "30svh",
|
|
1842
|
+
display: "flex",
|
|
1843
|
+
alignItems: "center",
|
|
1844
|
+
backgroundImage: image ? `url(${image})` : void 0,
|
|
1845
|
+
backgroundSize: "cover",
|
|
1846
|
+
backgroundPosition: "center",
|
|
1847
|
+
backgroundColor: "var(--mantine-color-slate-9)"
|
|
1848
|
+
},
|
|
1849
|
+
children: [
|
|
1850
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1851
|
+
import_core35.Box,
|
|
1852
|
+
{
|
|
1853
|
+
style: {
|
|
1854
|
+
position: "absolute",
|
|
1855
|
+
inset: 0,
|
|
1856
|
+
background: "rgba(0, 0, 0, 0.55)"
|
|
1857
|
+
}
|
|
1858
|
+
}
|
|
1859
|
+
),
|
|
1860
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1861
|
+
import_core35.Box,
|
|
1862
|
+
{
|
|
1863
|
+
py: 48,
|
|
1864
|
+
px: 40,
|
|
1865
|
+
maw: 420,
|
|
1866
|
+
style: {
|
|
1867
|
+
backdropFilter: "blur(24px)",
|
|
1868
|
+
WebkitBackdropFilter: "blur(24px)",
|
|
1869
|
+
background: "rgba(255,255,255,0.10)",
|
|
1870
|
+
borderRadius: "var(--mantine-radius-md)",
|
|
1871
|
+
border: "1px solid rgba(255,255,255,0.18)"
|
|
1872
|
+
},
|
|
1873
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1874
|
+
SdTextBox.Hero,
|
|
1875
|
+
{
|
|
1876
|
+
label,
|
|
1877
|
+
title,
|
|
1878
|
+
description,
|
|
1879
|
+
ta: "left",
|
|
1880
|
+
align: "flex-start"
|
|
1881
|
+
}
|
|
1882
|
+
)
|
|
1883
|
+
}
|
|
1884
|
+
) })
|
|
1885
|
+
]
|
|
1886
|
+
}
|
|
1887
|
+
),
|
|
1888
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Content, { children })
|
|
1889
|
+
] });
|
|
1890
|
+
}
|
|
1891
|
+
function Brand({ label, title, description, children }) {
|
|
1892
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
|
|
1893
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
1894
|
+
import_core35.Box,
|
|
1895
|
+
{
|
|
1896
|
+
style: {
|
|
1897
|
+
position: "relative",
|
|
1898
|
+
minHeight: "40svh",
|
|
1899
|
+
display: "flex",
|
|
1900
|
+
alignItems: "center",
|
|
1901
|
+
overflow: "hidden",
|
|
1902
|
+
background: "linear-gradient(135deg, var(--mantine-color-primary-8) 0%, var(--mantine-color-primary-6) 50%, var(--mantine-color-primary-4) 100%)"
|
|
1903
|
+
},
|
|
1904
|
+
children: [
|
|
1905
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1906
|
+
import_core35.Box,
|
|
1907
|
+
{
|
|
1908
|
+
style: {
|
|
1909
|
+
position: "absolute",
|
|
1910
|
+
top: -80,
|
|
1911
|
+
right: -80,
|
|
1912
|
+
width: 360,
|
|
1913
|
+
height: 360,
|
|
1914
|
+
borderRadius: "50%",
|
|
1915
|
+
background: "rgba(255,255,255,0.06)",
|
|
1916
|
+
pointerEvents: "none"
|
|
1917
|
+
}
|
|
1918
|
+
}
|
|
1919
|
+
),
|
|
1920
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1921
|
+
import_core35.Box,
|
|
1922
|
+
{
|
|
1923
|
+
style: {
|
|
1924
|
+
position: "absolute",
|
|
1925
|
+
bottom: -60,
|
|
1926
|
+
left: -60,
|
|
1927
|
+
width: 240,
|
|
1928
|
+
height: 240,
|
|
1929
|
+
borderRadius: "50%",
|
|
1930
|
+
background: "rgba(255,255,255,0.04)",
|
|
1931
|
+
pointerEvents: "none"
|
|
1932
|
+
}
|
|
1933
|
+
}
|
|
1934
|
+
),
|
|
1935
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1643
1936
|
SdTextBox.Hero,
|
|
1644
1937
|
{
|
|
1645
1938
|
label,
|
|
1646
1939
|
title,
|
|
1647
1940
|
description,
|
|
1648
|
-
ta: "
|
|
1649
|
-
align: "
|
|
1941
|
+
ta: "center",
|
|
1942
|
+
align: "center",
|
|
1943
|
+
maw: 640,
|
|
1944
|
+
mx: "auto",
|
|
1945
|
+
pt: 80,
|
|
1946
|
+
pb: 64
|
|
1650
1947
|
}
|
|
1651
|
-
)
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
/* @__PURE__ */ (0,
|
|
1656
|
-
] });
|
|
1657
|
-
}
|
|
1658
|
-
function Brand({ label, title, description, children }) {
|
|
1659
|
-
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
|
|
1660
|
-
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core34.Box, { style: {
|
|
1661
|
-
position: "relative",
|
|
1662
|
-
minHeight: "40svh",
|
|
1663
|
-
display: "flex",
|
|
1664
|
-
alignItems: "center",
|
|
1665
|
-
overflow: "hidden",
|
|
1666
|
-
background: "linear-gradient(135deg, var(--mantine-color-primary-8) 0%, var(--mantine-color-primary-6) 50%, var(--mantine-color-primary-4) 100%)"
|
|
1667
|
-
}, children: [
|
|
1668
|
-
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.Box, { style: {
|
|
1669
|
-
position: "absolute",
|
|
1670
|
-
top: -80,
|
|
1671
|
-
right: -80,
|
|
1672
|
-
width: 360,
|
|
1673
|
-
height: 360,
|
|
1674
|
-
borderRadius: "50%",
|
|
1675
|
-
background: "rgba(255,255,255,0.06)",
|
|
1676
|
-
pointerEvents: "none"
|
|
1677
|
-
} }),
|
|
1678
|
-
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.Box, { style: {
|
|
1679
|
-
position: "absolute",
|
|
1680
|
-
bottom: -60,
|
|
1681
|
-
left: -60,
|
|
1682
|
-
width: 240,
|
|
1683
|
-
height: 240,
|
|
1684
|
-
borderRadius: "50%",
|
|
1685
|
-
background: "rgba(255,255,255,0.04)",
|
|
1686
|
-
pointerEvents: "none"
|
|
1687
|
-
} }),
|
|
1688
|
-
/* @__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 }) })
|
|
1689
|
-
] }),
|
|
1690
|
-
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Content, { children })
|
|
1948
|
+
) })
|
|
1949
|
+
]
|
|
1950
|
+
}
|
|
1951
|
+
),
|
|
1952
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Content, { children })
|
|
1691
1953
|
] });
|
|
1692
1954
|
}
|
|
1693
1955
|
var PageLayout = {
|
|
@@ -1702,7 +1964,7 @@ var PageLayout = {
|
|
|
1702
1964
|
};
|
|
1703
1965
|
|
|
1704
1966
|
// ui/theme.ts
|
|
1705
|
-
var
|
|
1967
|
+
var import_core36 = require("@mantine/core");
|
|
1706
1968
|
var primary = [
|
|
1707
1969
|
"#e7f0fb",
|
|
1708
1970
|
"#c8dcf4",
|
|
@@ -1752,33 +2014,53 @@ var slate = [
|
|
|
1752
2014
|
"#0f172a"
|
|
1753
2015
|
// 9 slate-900
|
|
1754
2016
|
];
|
|
1755
|
-
var
|
|
1756
|
-
"#
|
|
1757
|
-
|
|
1758
|
-
"#
|
|
1759
|
-
|
|
1760
|
-
"#
|
|
1761
|
-
|
|
1762
|
-
"#
|
|
1763
|
-
|
|
1764
|
-
"#
|
|
1765
|
-
|
|
2017
|
+
var red = [
|
|
2018
|
+
"#fef2f2",
|
|
2019
|
+
// 0 red-50
|
|
2020
|
+
"#fee2e2",
|
|
2021
|
+
// 1 red-100
|
|
2022
|
+
"#fecaca",
|
|
2023
|
+
// 2 red-200
|
|
2024
|
+
"#fca5a5",
|
|
2025
|
+
// 3 red-300
|
|
2026
|
+
"#f87171",
|
|
2027
|
+
// 4 red-400
|
|
2028
|
+
"#ef4444",
|
|
2029
|
+
// 5 red-500
|
|
2030
|
+
"#dc2626",
|
|
2031
|
+
// 6 red-600
|
|
2032
|
+
"#b91c1c",
|
|
2033
|
+
// 7 red-700
|
|
2034
|
+
"#991b1b",
|
|
2035
|
+
// 8 red-800
|
|
2036
|
+
"#7f1d1d"
|
|
2037
|
+
// 9 red-900
|
|
1766
2038
|
];
|
|
1767
|
-
var
|
|
1768
|
-
"#
|
|
1769
|
-
|
|
1770
|
-
"#
|
|
1771
|
-
|
|
1772
|
-
"#
|
|
1773
|
-
|
|
1774
|
-
"#
|
|
1775
|
-
|
|
1776
|
-
"#
|
|
1777
|
-
|
|
2039
|
+
var green = [
|
|
2040
|
+
"#f0fdf4",
|
|
2041
|
+
// 0 green-50
|
|
2042
|
+
"#dcfce7",
|
|
2043
|
+
// 1 green-100
|
|
2044
|
+
"#bbf7d0",
|
|
2045
|
+
// 2 green-200
|
|
2046
|
+
"#86efac",
|
|
2047
|
+
// 3 green-300
|
|
2048
|
+
"#4ade80",
|
|
2049
|
+
// 4 green-400
|
|
2050
|
+
"#22c55e",
|
|
2051
|
+
// 5 green-500
|
|
2052
|
+
"#16a34a",
|
|
2053
|
+
// 6 green-600
|
|
2054
|
+
"#15803d",
|
|
2055
|
+
// 7 green-700
|
|
2056
|
+
"#166534",
|
|
2057
|
+
// 8 green-800
|
|
2058
|
+
"#14532d"
|
|
2059
|
+
// 9 green-900
|
|
1778
2060
|
];
|
|
1779
|
-
var theme = (0,
|
|
2061
|
+
var theme = (0, import_core36.createTheme)({
|
|
1780
2062
|
/* ---- Color ---- */
|
|
1781
|
-
colors: { primary, secondary, slate,
|
|
2063
|
+
colors: { primary, secondary, slate, red, green, dark: slate },
|
|
1782
2064
|
primaryColor: "primary",
|
|
1783
2065
|
primaryShade: { light: 6, dark: 5 },
|
|
1784
2066
|
/* ---- Type ---- */
|
|
@@ -1788,20 +2070,20 @@ var theme = (0, import_core35.createTheme)({
|
|
|
1788
2070
|
fontFamily: "'Noto Sans KR', ui-sans-serif, system-ui, sans-serif",
|
|
1789
2071
|
fontWeight: "700",
|
|
1790
2072
|
sizes: {
|
|
1791
|
-
h1: { fontSize: (0,
|
|
1792
|
-
h2: { fontSize: (0,
|
|
1793
|
-
h3: { fontSize: (0,
|
|
1794
|
-
h4: { fontSize: (0,
|
|
1795
|
-
h5: { fontSize: (0,
|
|
1796
|
-
h6: { fontSize: (0,
|
|
2073
|
+
h1: { fontSize: (0, import_core36.rem)(48), lineHeight: "1.1", fontWeight: "900" },
|
|
2074
|
+
h2: { fontSize: (0, import_core36.rem)(36), lineHeight: "1.1", fontWeight: "900" },
|
|
2075
|
+
h3: { fontSize: (0, import_core36.rem)(28), lineHeight: "1.15", fontWeight: "700" },
|
|
2076
|
+
h4: { fontSize: (0, import_core36.rem)(20), lineHeight: "1.3", fontWeight: "700" },
|
|
2077
|
+
h5: { fontSize: (0, import_core36.rem)(16), lineHeight: "1.4", fontWeight: "700" },
|
|
2078
|
+
h6: { fontSize: (0, import_core36.rem)(14), lineHeight: "1.4", fontWeight: "700" }
|
|
1797
2079
|
}
|
|
1798
2080
|
},
|
|
1799
2081
|
fontSizes: {
|
|
1800
|
-
xs: (0,
|
|
1801
|
-
sm: (0,
|
|
1802
|
-
md: (0,
|
|
1803
|
-
lg: (0,
|
|
1804
|
-
xl: (0,
|
|
2082
|
+
xs: (0, import_core36.rem)(14),
|
|
2083
|
+
sm: (0, import_core36.rem)(16),
|
|
2084
|
+
md: (0, import_core36.rem)(18),
|
|
2085
|
+
lg: (0, import_core36.rem)(20),
|
|
2086
|
+
xl: (0, import_core36.rem)(22)
|
|
1805
2087
|
},
|
|
1806
2088
|
lineHeights: {
|
|
1807
2089
|
xs: "1.4",
|
|
@@ -1812,18 +2094,18 @@ var theme = (0, import_core35.createTheme)({
|
|
|
1812
2094
|
},
|
|
1813
2095
|
defaultRadius: "md",
|
|
1814
2096
|
radius: {
|
|
1815
|
-
xs: (0,
|
|
1816
|
-
sm: (0,
|
|
1817
|
-
md: (0,
|
|
1818
|
-
lg: (0,
|
|
1819
|
-
xl: (0,
|
|
2097
|
+
xs: (0, import_core36.rem)(6),
|
|
2098
|
+
sm: (0, import_core36.rem)(8),
|
|
2099
|
+
md: (0, import_core36.rem)(10),
|
|
2100
|
+
lg: (0, import_core36.rem)(14),
|
|
2101
|
+
xl: (0, import_core36.rem)(18)
|
|
1820
2102
|
},
|
|
1821
2103
|
spacing: {
|
|
1822
|
-
xs: (0,
|
|
1823
|
-
sm: (0,
|
|
1824
|
-
md: (0,
|
|
1825
|
-
lg: (0,
|
|
1826
|
-
xl: (0,
|
|
2104
|
+
xs: (0, import_core36.rem)(8),
|
|
2105
|
+
sm: (0, import_core36.rem)(12),
|
|
2106
|
+
md: (0, import_core36.rem)(16),
|
|
2107
|
+
lg: (0, import_core36.rem)(24),
|
|
2108
|
+
xl: (0, import_core36.rem)(32)
|
|
1827
2109
|
},
|
|
1828
2110
|
shadows: {
|
|
1829
2111
|
xs: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
|
|
@@ -1898,11 +2180,15 @@ var theme = (0, import_core35.createTheme)({
|
|
|
1898
2180
|
defaultProps: { radius: "sm" }
|
|
1899
2181
|
},
|
|
1900
2182
|
Divider: {
|
|
1901
|
-
defaultProps: { c: "slate.5"
|
|
2183
|
+
defaultProps: { c: "slate.5" }
|
|
1902
2184
|
},
|
|
1903
2185
|
Anchor: {
|
|
1904
2186
|
defaultProps: { c: "slate.5", fz: "sm", underline: "never" }
|
|
1905
2187
|
},
|
|
2188
|
+
// SdHeader 모바일 드로어의 2단 아코디언 타이포를 SdLink와 맞춘다.
|
|
2189
|
+
NavLink: {
|
|
2190
|
+
defaultProps: { c: "slate.7", fz: "sm" }
|
|
2191
|
+
},
|
|
1906
2192
|
Table: {
|
|
1907
2193
|
defaultProps: {
|
|
1908
2194
|
captionSide: "bottom"
|
|
@@ -1920,33 +2206,63 @@ var theme = (0, import_core35.createTheme)({
|
|
|
1920
2206
|
MainLayout,
|
|
1921
2207
|
PageLayout,
|
|
1922
2208
|
SdBadge,
|
|
2209
|
+
SdBadgeDefault,
|
|
2210
|
+
SdBadgePrimary,
|
|
2211
|
+
SdBadgeSuccess,
|
|
2212
|
+
SdBadgeWarning,
|
|
1923
2213
|
SdButton,
|
|
1924
2214
|
SdButtonCancel,
|
|
1925
2215
|
SdButtonDelete,
|
|
2216
|
+
SdButtonDownload,
|
|
2217
|
+
SdButtonExcel,
|
|
1926
2218
|
SdButtonGhost,
|
|
1927
2219
|
SdButtonOutline,
|
|
1928
2220
|
SdButtonPrimary,
|
|
1929
2221
|
SdButtonSecondary,
|
|
2222
|
+
SdButtonSubmit,
|
|
1930
2223
|
SdButtonWhite,
|
|
1931
2224
|
SdClients,
|
|
1932
2225
|
SdClientsGrid,
|
|
1933
2226
|
SdClientsMarquee,
|
|
1934
2227
|
SdContainer,
|
|
1935
2228
|
SdCta,
|
|
2229
|
+
SdCtaBanner,
|
|
2230
|
+
SdCtaInline,
|
|
2231
|
+
SdCtaSubtle,
|
|
1936
2232
|
SdErrorView,
|
|
2233
|
+
SdErrorViewNotFound,
|
|
2234
|
+
SdErrorViewPage,
|
|
1937
2235
|
SdFaq,
|
|
2236
|
+
SdFaqDefault,
|
|
2237
|
+
SdFaqFilled,
|
|
2238
|
+
SdFaqWithHeader,
|
|
1938
2239
|
SdFeatureSection,
|
|
1939
2240
|
SdFeatures,
|
|
1940
2241
|
SdFooter,
|
|
1941
2242
|
SdHeader,
|
|
1942
2243
|
SdInput,
|
|
2244
|
+
SdInputEmail,
|
|
2245
|
+
SdInputPassword,
|
|
2246
|
+
SdInputSelect,
|
|
2247
|
+
SdInputText,
|
|
2248
|
+
SdInputTextarea,
|
|
2249
|
+
SdLink,
|
|
2250
|
+
SdLinkBody,
|
|
2251
|
+
SdLinkHint,
|
|
2252
|
+
SdLinkStrong,
|
|
2253
|
+
SdLinkSub,
|
|
1943
2254
|
SdMap,
|
|
1944
2255
|
SdMapSingle,
|
|
1945
2256
|
SdMapTabs,
|
|
1946
2257
|
SdModal,
|
|
1947
2258
|
SdNumberIcon,
|
|
1948
2259
|
SdPricingCard,
|
|
2260
|
+
SdPricingCardDefault,
|
|
2261
|
+
SdPricingCardFeatured,
|
|
2262
|
+
SdPricingCardGrid,
|
|
1949
2263
|
SdQuote,
|
|
2264
|
+
SdQuoteCard,
|
|
2265
|
+
SdQuotePlain,
|
|
1950
2266
|
SdSkeleton,
|
|
1951
2267
|
SdSkeletonAvatar,
|
|
1952
2268
|
SdSkeletonCard,
|
|
@@ -1955,22 +2271,44 @@ var theme = (0, import_core35.createTheme)({
|
|
|
1955
2271
|
SdSkeletonTitle,
|
|
1956
2272
|
SdSolution,
|
|
1957
2273
|
SdSolutionCard,
|
|
2274
|
+
SdSolutionCardGrid,
|
|
2275
|
+
SdSolutionCardItem,
|
|
2276
|
+
SdSolutionFiltered,
|
|
2277
|
+
SdSolutionList,
|
|
1958
2278
|
SdSteps,
|
|
2279
|
+
SdStepsBubble,
|
|
2280
|
+
SdStepsCard,
|
|
1959
2281
|
SdStepsSection,
|
|
2282
|
+
SdStepsStrip,
|
|
1960
2283
|
SdTable,
|
|
2284
|
+
SdTableSpec,
|
|
1961
2285
|
SdTabs,
|
|
1962
2286
|
SdTabsOutline,
|
|
1963
2287
|
SdTabsPills,
|
|
1964
2288
|
SdTabsUnderline,
|
|
1965
2289
|
SdTestimonial,
|
|
2290
|
+
SdTestimonialCard,
|
|
2291
|
+
SdTestimonialGrid,
|
|
2292
|
+
SdTestimonialStrip,
|
|
1966
2293
|
SdText,
|
|
2294
|
+
SdTextBody,
|
|
1967
2295
|
SdTextBox,
|
|
1968
2296
|
SdTextBoxCard,
|
|
1969
2297
|
SdTextBoxHero,
|
|
1970
2298
|
SdTextBoxSection,
|
|
1971
2299
|
SdTextBoxSub,
|
|
2300
|
+
SdTextError,
|
|
2301
|
+
SdTextEyebrow,
|
|
2302
|
+
SdTextHint,
|
|
2303
|
+
SdTextNumeric,
|
|
2304
|
+
SdTextStrong,
|
|
2305
|
+
SdTextSub,
|
|
1972
2306
|
SdTimeline,
|
|
1973
2307
|
SdTimelineSection,
|
|
1974
2308
|
SdTitle,
|
|
2309
|
+
SdTitleCard,
|
|
2310
|
+
SdTitleDisplay,
|
|
2311
|
+
SdTitleSection,
|
|
2312
|
+
SdTitleSub,
|
|
1975
2313
|
theme
|
|
1976
2314
|
});
|