@yeongseoksong/framework 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -34
- package/dist/types/index.d.mts +8 -1
- package/dist/types/index.d.ts +8 -1
- package/dist/ui/index.cjs +885 -571
- package/dist/ui/index.d.mts +168 -52
- package/dist/ui/index.d.ts +168 -52
- package/dist/ui/index.mjs +759 -500
- 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,191 @@ 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
|
|
1480
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
1481
|
+
var BAR_HEIGHT = 60;
|
|
1308
1482
|
function SdHeader({ navItems, loginFlag, children }) {
|
|
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
|
+
children
|
|
1537
|
+
] })
|
|
1538
|
+
] }) })
|
|
1539
|
+
}
|
|
1540
|
+
),
|
|
1541
|
+
/* @__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: [
|
|
1542
|
+
topItems.map((item) => {
|
|
1543
|
+
const kids = childrenOf(item.id);
|
|
1544
|
+
if (kids.length === 0) {
|
|
1545
|
+
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);
|
|
1546
|
+
}
|
|
1547
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1548
|
+
import_core28.NavLink,
|
|
1549
|
+
{
|
|
1550
|
+
label: item.label,
|
|
1551
|
+
href: item.href,
|
|
1552
|
+
childrenOffset: 28,
|
|
1553
|
+
onClick: kids.length > 0 ? void 0 : close,
|
|
1554
|
+
children: kids.map((kid) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.NavLink, { label: kid.label, href: kid.href, onClick: close }, kid.id))
|
|
1555
|
+
},
|
|
1556
|
+
item.id
|
|
1557
|
+
);
|
|
1558
|
+
}),
|
|
1559
|
+
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
1560
|
] }) })
|
|
1329
1561
|
] });
|
|
1330
1562
|
}
|
|
1331
1563
|
|
|
1332
1564
|
// ui/organism/Footer.tsx
|
|
1333
|
-
var
|
|
1334
|
-
var
|
|
1565
|
+
var import_core29 = require("@mantine/core");
|
|
1566
|
+
var import_icons_react5 = require("@tabler/icons-react");
|
|
1567
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
1335
1568
|
function FooterNavColumns({ items }) {
|
|
1336
1569
|
const topLevel = items.filter((item) => !item.parentId);
|
|
1337
1570
|
const getChildren = (parentId) => items.filter((item) => item.parentId === parentId);
|
|
1338
|
-
return /* @__PURE__ */ (0,
|
|
1339
|
-
/* @__PURE__ */ (0,
|
|
1340
|
-
getChildren(group.id).map((link) => /* @__PURE__ */ (0,
|
|
1341
|
-
|
|
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: "sm", children: [
|
|
1572
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdText.Sub, { children: group.label }),
|
|
1573
|
+
getChildren(group.id).map((link) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdLink.Hint, { href: link.href, children: link.label }, link.id))
|
|
1574
|
+
] }) }, group.id)) });
|
|
1575
|
+
}
|
|
1576
|
+
var SOCIAL_ICONS = {
|
|
1577
|
+
x: import_icons_react5.IconBrandX,
|
|
1578
|
+
youtube: import_icons_react5.IconBrandYoutube,
|
|
1579
|
+
instagram: import_icons_react5.IconBrandInstagram,
|
|
1580
|
+
facebook: import_icons_react5.IconBrandFacebook,
|
|
1581
|
+
linkedin: import_icons_react5.IconBrandLinkedin,
|
|
1582
|
+
github: import_icons_react5.IconBrandGithub,
|
|
1583
|
+
blog: import_icons_react5.IconWorld
|
|
1584
|
+
};
|
|
1585
|
+
function FooterSocials({ items }) {
|
|
1586
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Group, { gap: 0, wrap: "nowrap", children: items.map((item) => {
|
|
1587
|
+
var _a4, _b;
|
|
1588
|
+
const Icon = (_a4 = SOCIAL_ICONS[item.platform]) != null ? _a4 : import_icons_react5.IconWorld;
|
|
1589
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1590
|
+
import_core29.ActionIcon,
|
|
1342
1591
|
{
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
e.currentTarget.style.color = "";
|
|
1353
|
-
},
|
|
1354
|
-
children: link.label
|
|
1592
|
+
component: "a",
|
|
1593
|
+
href: item.url,
|
|
1594
|
+
target: "_blank",
|
|
1595
|
+
rel: "noreferrer",
|
|
1596
|
+
size: "lg",
|
|
1597
|
+
color: "gray",
|
|
1598
|
+
variant: "subtle",
|
|
1599
|
+
"aria-label": (_b = item.label) != null ? _b : item.platform,
|
|
1600
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Icon, { size: 18, stroke: 1.5 })
|
|
1355
1601
|
},
|
|
1356
|
-
|
|
1357
|
-
)
|
|
1358
|
-
|
|
1602
|
+
item.url
|
|
1603
|
+
);
|
|
1604
|
+
}) });
|
|
1605
|
+
}
|
|
1606
|
+
function InfoCell({ label, children }) {
|
|
1607
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Group, { gap: 6, wrap: "nowrap", align: "baseline", children: [
|
|
1608
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdText.Sub, { c: "slate.4", style: { whiteSpace: "nowrap" }, children: label }),
|
|
1609
|
+
typeof children === "string" ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdText.Sub, { children }) : children
|
|
1610
|
+
] });
|
|
1359
1611
|
}
|
|
1360
1612
|
function FooterCompanyInfo({ company }) {
|
|
1361
1613
|
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 })
|
|
1614
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.SimpleGrid, { cols: { base: 2, sm: 2, md: 1 }, spacing: "md", verticalSpacing: 0, children: [
|
|
1615
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InfoCell, { label: "\uC0C1\uD638", children: company.name }),
|
|
1616
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InfoCell, { label: "\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638", children: company.registrationNumber }),
|
|
1617
|
+
sortedAddresses.map((addr) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InfoCell, { label: addr.label, children: addr.address }, addr.label)),
|
|
1618
|
+
/* @__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 }) }),
|
|
1619
|
+
company.fax && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(InfoCell, { label: "Fax", children: company.fax }),
|
|
1620
|
+
/* @__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
1621
|
] });
|
|
1388
1622
|
}
|
|
1389
1623
|
function SdFooter({ company, navItems, policyLinks, description }) {
|
|
1390
1624
|
const visibleNav = filterAndSort(navItems);
|
|
1391
1625
|
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 }) }) })
|
|
1626
|
+
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: [
|
|
1627
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Logo, { size: "sm" }),
|
|
1628
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SdText.Sub, { children: description }),
|
|
1629
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Flex, { direction: { base: "column", md: "row" }, gap: 48, align: "flex-start", children: [
|
|
1630
|
+
/* @__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 }) }),
|
|
1631
|
+
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
1632
|
] }),
|
|
1400
|
-
/* @__PURE__ */ (0,
|
|
1401
|
-
/* @__PURE__ */ (0,
|
|
1402
|
-
|
|
1403
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(SdText.Sub, { c: "slate.5", children: [
|
|
1633
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Divider, {}),
|
|
1634
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Group, { justify: "space-between", wrap: "wrap", gap: "xs", children: [
|
|
1635
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(SdText.Sub, { children: [
|
|
1404
1636
|
"\xA9 ",
|
|
1405
1637
|
company.copyrightYear,
|
|
1406
1638
|
" ",
|
|
1407
1639
|
company.name,
|
|
1408
1640
|
". All rights reserved."
|
|
1409
1641
|
] }),
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
href: item.href,
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
underline: "never",
|
|
1418
|
-
children: item.label
|
|
1419
|
-
},
|
|
1420
|
-
item.id
|
|
1421
|
-
)) })
|
|
1642
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Group, { gap: "lg", wrap: "wrap", children: [
|
|
1643
|
+
visiblePolicy.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Group, { gap: "lg", children: visiblePolicy.map((item) => {
|
|
1644
|
+
const Link4 = item.highlight ? SdLink.Strong : SdLink.Sub;
|
|
1645
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Link4, { href: item.href, children: item.label }, item.id);
|
|
1646
|
+
}) }),
|
|
1647
|
+
company.socials && company.socials.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(FooterSocials, { items: company.socials })
|
|
1648
|
+
] })
|
|
1422
1649
|
] })
|
|
1423
|
-
] }) });
|
|
1650
|
+
] }) }) });
|
|
1424
1651
|
}
|
|
1425
1652
|
|
|
1426
1653
|
// ui/organism/FeatureSection.tsx
|
|
1427
|
-
var
|
|
1428
|
-
var
|
|
1654
|
+
var import_core30 = require("@mantine/core");
|
|
1655
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
1429
1656
|
function SdFeatureSection(_a4) {
|
|
1430
1657
|
var _b = _a4, {
|
|
1431
1658
|
label,
|
|
@@ -1442,8 +1669,8 @@ function SdFeatureSection(_a4) {
|
|
|
1442
1669
|
"cols",
|
|
1443
1670
|
"py"
|
|
1444
1671
|
]);
|
|
1445
|
-
return /* @__PURE__ */ (0,
|
|
1446
|
-
/* @__PURE__ */ (0,
|
|
1672
|
+
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: [
|
|
1673
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1447
1674
|
SdTextBox.Section,
|
|
1448
1675
|
{
|
|
1449
1676
|
label,
|
|
@@ -1454,13 +1681,13 @@ function SdFeatureSection(_a4) {
|
|
|
1454
1681
|
align: "center"
|
|
1455
1682
|
}
|
|
1456
1683
|
),
|
|
1457
|
-
/* @__PURE__ */ (0,
|
|
1684
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdFeatures, { items, cols })
|
|
1458
1685
|
] }) }));
|
|
1459
1686
|
}
|
|
1460
1687
|
|
|
1461
1688
|
// ui/organism/TimelineSection.tsx
|
|
1462
|
-
var
|
|
1463
|
-
var
|
|
1689
|
+
var import_core31 = require("@mantine/core");
|
|
1690
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
1464
1691
|
function SdTimelineSection(_a4) {
|
|
1465
1692
|
var _b = _a4, {
|
|
1466
1693
|
label,
|
|
@@ -1475,22 +1702,15 @@ function SdTimelineSection(_a4) {
|
|
|
1475
1702
|
"items",
|
|
1476
1703
|
"py"
|
|
1477
1704
|
]);
|
|
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 }) })
|
|
1705
|
+
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: [
|
|
1706
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdTextBox.Section, { label, title, description }),
|
|
1707
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdTimeline, { items }) })
|
|
1488
1708
|
] })) });
|
|
1489
1709
|
}
|
|
1490
1710
|
|
|
1491
1711
|
// ui/organism/StepsSection.tsx
|
|
1492
|
-
var
|
|
1493
|
-
var
|
|
1712
|
+
var import_core32 = require("@mantine/core");
|
|
1713
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
1494
1714
|
function SdStepsSection(_a4) {
|
|
1495
1715
|
var _b = _a4, {
|
|
1496
1716
|
label,
|
|
@@ -1505,18 +1725,18 @@ function SdStepsSection(_a4) {
|
|
|
1505
1725
|
"items",
|
|
1506
1726
|
"py"
|
|
1507
1727
|
]);
|
|
1508
|
-
return /* @__PURE__ */ (0,
|
|
1509
|
-
(label || title || description) && /* @__PURE__ */ (0,
|
|
1510
|
-
/* @__PURE__ */ (0,
|
|
1728
|
+
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: [
|
|
1729
|
+
(label || title || description) && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdTextBox.Section, { label, title, description }),
|
|
1730
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdSteps.Bubble, { items })
|
|
1511
1731
|
] }) }));
|
|
1512
1732
|
}
|
|
1513
1733
|
|
|
1514
1734
|
// ui/organism/ErrorView.tsx
|
|
1515
|
-
var
|
|
1516
|
-
var
|
|
1735
|
+
var import_core33 = require("@mantine/core");
|
|
1736
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
1517
1737
|
function StatusCode({ code }) {
|
|
1518
|
-
return /* @__PURE__ */ (0,
|
|
1519
|
-
|
|
1738
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
1739
|
+
import_core33.Text,
|
|
1520
1740
|
{
|
|
1521
1741
|
fz: 160,
|
|
1522
1742
|
fw: 900,
|
|
@@ -1529,15 +1749,15 @@ function StatusCode({ code }) {
|
|
|
1529
1749
|
);
|
|
1530
1750
|
}
|
|
1531
1751
|
function Page({ error, onReset, onHome }) {
|
|
1532
|
-
return /* @__PURE__ */ (0,
|
|
1533
|
-
/* @__PURE__ */ (0,
|
|
1534
|
-
/* @__PURE__ */ (0,
|
|
1535
|
-
/* @__PURE__ */ (0,
|
|
1536
|
-
/* @__PURE__ */ (0,
|
|
1752
|
+
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: [
|
|
1753
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(StatusCode, { code: "500" }),
|
|
1754
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Stack, { gap: "sm", align: "center", children: [
|
|
1755
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdTitle.Section, { children: "\uC11C\uBC84\uC5D0\uC11C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4" }),
|
|
1756
|
+
/* @__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
1757
|
] }),
|
|
1538
|
-
/* @__PURE__ */ (0,
|
|
1539
|
-
/* @__PURE__ */ (0,
|
|
1540
|
-
onHome && /* @__PURE__ */ (0,
|
|
1758
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Group, { gap: "sm", justify: "center", children: [
|
|
1759
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdButton.Primary, { onClick: onReset, children: "\uB2E4\uC2DC \uC2DC\uB3C4" }),
|
|
1760
|
+
onHome && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdButton.Ghost, { onClick: onHome, children: "\uD648\uC73C\uB85C" })
|
|
1541
1761
|
] })
|
|
1542
1762
|
] }) }) });
|
|
1543
1763
|
}
|
|
@@ -1549,15 +1769,15 @@ function NotFound({
|
|
|
1549
1769
|
},
|
|
1550
1770
|
onBack = () => window.history.back()
|
|
1551
1771
|
}) {
|
|
1552
|
-
return /* @__PURE__ */ (0,
|
|
1553
|
-
/* @__PURE__ */ (0,
|
|
1554
|
-
/* @__PURE__ */ (0,
|
|
1555
|
-
/* @__PURE__ */ (0,
|
|
1556
|
-
/* @__PURE__ */ (0,
|
|
1772
|
+
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: [
|
|
1773
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(StatusCode, { code: "404" }),
|
|
1774
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Stack, { gap: "sm", align: "center", children: [
|
|
1775
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdTitle.Section, { children: title }),
|
|
1776
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdText.Body, { maw: 480, children: description })
|
|
1557
1777
|
] }),
|
|
1558
|
-
/* @__PURE__ */ (0,
|
|
1559
|
-
onHome && /* @__PURE__ */ (0,
|
|
1560
|
-
onBack && /* @__PURE__ */ (0,
|
|
1778
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Group, { gap: "sm", justify: "center", children: [
|
|
1779
|
+
onHome && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdButton.Primary, { onClick: onHome, children: "\uD648\uC73C\uB85C" }),
|
|
1780
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdButton.Ghost, { onClick: onBack, children: "\uB4A4\uB85C \uAC00\uAE30" })
|
|
1561
1781
|
] })
|
|
1562
1782
|
] }) }) });
|
|
1563
1783
|
}
|
|
@@ -1567,127 +1787,165 @@ var SdErrorView = {
|
|
|
1567
1787
|
/** app/not-found.tsx — 404 Not Found */
|
|
1568
1788
|
NotFound
|
|
1569
1789
|
};
|
|
1790
|
+
var SdErrorViewPage = SdErrorView.Page;
|
|
1791
|
+
var SdErrorViewNotFound = SdErrorView.NotFound;
|
|
1570
1792
|
|
|
1571
1793
|
// ui/template/MainLayout.tsx
|
|
1572
|
-
var
|
|
1573
|
-
var
|
|
1574
|
-
function MainLayout({
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1794
|
+
var import_core34 = require("@mantine/core");
|
|
1795
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
1796
|
+
function MainLayout({
|
|
1797
|
+
children,
|
|
1798
|
+
navItems,
|
|
1799
|
+
companyInfo
|
|
1800
|
+
}) {
|
|
1801
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core34.AppShell, { header: { height: 60 }, children: [
|
|
1802
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.AppShell.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdHeader, { navItems, loginFlag: true }) }),
|
|
1803
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core34.AppShell.Main, { children }),
|
|
1804
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdFooter, { company: companyInfo, navItems })
|
|
1579
1805
|
] });
|
|
1580
1806
|
}
|
|
1581
1807
|
|
|
1582
1808
|
// ui/template/PageLayout.tsx
|
|
1583
|
-
var
|
|
1584
|
-
var
|
|
1809
|
+
var import_core35 = require("@mantine/core");
|
|
1810
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
1585
1811
|
function Content({ children }) {
|
|
1586
|
-
return /* @__PURE__ */ (0,
|
|
1812
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdContainer, { py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Stack, { gap: "xl", children }) });
|
|
1587
1813
|
}
|
|
1588
1814
|
function LayoutGap() {
|
|
1589
|
-
return /* @__PURE__ */ (0,
|
|
1815
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Space, { h: 48 });
|
|
1590
1816
|
}
|
|
1591
1817
|
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, {}),
|
|
1818
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_jsx_runtime36.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(Plain2, { children: [
|
|
1819
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdTextBox.Section, { label, title, description: description != null ? description : "" }),
|
|
1820
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Divider, {}),
|
|
1603
1821
|
children
|
|
1604
1822
|
] }) });
|
|
1605
1823
|
}
|
|
1606
1824
|
function Plain2({ children }) {
|
|
1607
|
-
return /* @__PURE__ */ (0,
|
|
1608
|
-
/* @__PURE__ */ (0,
|
|
1609
|
-
/* @__PURE__ */ (0,
|
|
1825
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
|
|
1826
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(LayoutGap, {}),
|
|
1827
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Content, { children })
|
|
1610
1828
|
] });
|
|
1611
1829
|
}
|
|
1612
1830
|
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
|
-
|
|
1831
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
|
|
1832
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
1833
|
+
import_core35.Box,
|
|
1834
|
+
{
|
|
1835
|
+
style: {
|
|
1836
|
+
position: "relative",
|
|
1837
|
+
minHeight: "30svh",
|
|
1838
|
+
display: "flex",
|
|
1839
|
+
alignItems: "center",
|
|
1840
|
+
backgroundImage: image ? `url(${image})` : void 0,
|
|
1841
|
+
backgroundSize: "cover",
|
|
1842
|
+
backgroundPosition: "center",
|
|
1843
|
+
backgroundColor: "var(--mantine-color-slate-9)"
|
|
1844
|
+
},
|
|
1845
|
+
children: [
|
|
1846
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1847
|
+
import_core35.Box,
|
|
1848
|
+
{
|
|
1849
|
+
style: {
|
|
1850
|
+
position: "absolute",
|
|
1851
|
+
inset: 0,
|
|
1852
|
+
background: "rgba(0, 0, 0, 0.55)"
|
|
1853
|
+
}
|
|
1854
|
+
}
|
|
1855
|
+
),
|
|
1856
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1857
|
+
import_core35.Box,
|
|
1858
|
+
{
|
|
1859
|
+
py: 48,
|
|
1860
|
+
px: 40,
|
|
1861
|
+
maw: 420,
|
|
1862
|
+
style: {
|
|
1863
|
+
backdropFilter: "blur(24px)",
|
|
1864
|
+
WebkitBackdropFilter: "blur(24px)",
|
|
1865
|
+
background: "rgba(255,255,255,0.10)",
|
|
1866
|
+
borderRadius: "var(--mantine-radius-md)",
|
|
1867
|
+
border: "1px solid rgba(255,255,255,0.18)"
|
|
1868
|
+
},
|
|
1869
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1870
|
+
SdTextBox.Hero,
|
|
1871
|
+
{
|
|
1872
|
+
label,
|
|
1873
|
+
title,
|
|
1874
|
+
description,
|
|
1875
|
+
ta: "left",
|
|
1876
|
+
align: "flex-start"
|
|
1877
|
+
}
|
|
1878
|
+
)
|
|
1879
|
+
}
|
|
1880
|
+
) })
|
|
1881
|
+
]
|
|
1882
|
+
}
|
|
1883
|
+
),
|
|
1884
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Content, { children })
|
|
1885
|
+
] });
|
|
1886
|
+
}
|
|
1887
|
+
function Brand({ label, title, description, children }) {
|
|
1888
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
|
|
1889
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
1890
|
+
import_core35.Box,
|
|
1891
|
+
{
|
|
1892
|
+
style: {
|
|
1893
|
+
position: "relative",
|
|
1894
|
+
minHeight: "40svh",
|
|
1895
|
+
display: "flex",
|
|
1896
|
+
alignItems: "center",
|
|
1897
|
+
overflow: "hidden",
|
|
1898
|
+
background: "linear-gradient(135deg, var(--mantine-color-primary-8) 0%, var(--mantine-color-primary-6) 50%, var(--mantine-color-primary-4) 100%)"
|
|
1899
|
+
},
|
|
1900
|
+
children: [
|
|
1901
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1902
|
+
import_core35.Box,
|
|
1903
|
+
{
|
|
1904
|
+
style: {
|
|
1905
|
+
position: "absolute",
|
|
1906
|
+
top: -80,
|
|
1907
|
+
right: -80,
|
|
1908
|
+
width: 360,
|
|
1909
|
+
height: 360,
|
|
1910
|
+
borderRadius: "50%",
|
|
1911
|
+
background: "rgba(255,255,255,0.06)",
|
|
1912
|
+
pointerEvents: "none"
|
|
1913
|
+
}
|
|
1914
|
+
}
|
|
1915
|
+
),
|
|
1916
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1917
|
+
import_core35.Box,
|
|
1918
|
+
{
|
|
1919
|
+
style: {
|
|
1920
|
+
position: "absolute",
|
|
1921
|
+
bottom: -60,
|
|
1922
|
+
left: -60,
|
|
1923
|
+
width: 240,
|
|
1924
|
+
height: 240,
|
|
1925
|
+
borderRadius: "50%",
|
|
1926
|
+
background: "rgba(255,255,255,0.04)",
|
|
1927
|
+
pointerEvents: "none"
|
|
1928
|
+
}
|
|
1929
|
+
}
|
|
1930
|
+
),
|
|
1931
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1643
1932
|
SdTextBox.Hero,
|
|
1644
1933
|
{
|
|
1645
1934
|
label,
|
|
1646
1935
|
title,
|
|
1647
1936
|
description,
|
|
1648
|
-
ta: "
|
|
1649
|
-
align: "
|
|
1937
|
+
ta: "center",
|
|
1938
|
+
align: "center",
|
|
1939
|
+
maw: 640,
|
|
1940
|
+
mx: "auto",
|
|
1941
|
+
pt: 80,
|
|
1942
|
+
pb: 64
|
|
1650
1943
|
}
|
|
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 })
|
|
1944
|
+
) })
|
|
1945
|
+
]
|
|
1946
|
+
}
|
|
1947
|
+
),
|
|
1948
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Content, { children })
|
|
1691
1949
|
] });
|
|
1692
1950
|
}
|
|
1693
1951
|
var PageLayout = {
|
|
@@ -1702,7 +1960,7 @@ var PageLayout = {
|
|
|
1702
1960
|
};
|
|
1703
1961
|
|
|
1704
1962
|
// ui/theme.ts
|
|
1705
|
-
var
|
|
1963
|
+
var import_core36 = require("@mantine/core");
|
|
1706
1964
|
var primary = [
|
|
1707
1965
|
"#e7f0fb",
|
|
1708
1966
|
"#c8dcf4",
|
|
@@ -1776,7 +2034,7 @@ var indigo = [
|
|
|
1776
2034
|
"#3730a3",
|
|
1777
2035
|
"#312e81"
|
|
1778
2036
|
];
|
|
1779
|
-
var theme = (0,
|
|
2037
|
+
var theme = (0, import_core36.createTheme)({
|
|
1780
2038
|
/* ---- Color ---- */
|
|
1781
2039
|
colors: { primary, secondary, slate, cyan, indigo, dark: slate },
|
|
1782
2040
|
primaryColor: "primary",
|
|
@@ -1788,20 +2046,20 @@ var theme = (0, import_core35.createTheme)({
|
|
|
1788
2046
|
fontFamily: "'Noto Sans KR', ui-sans-serif, system-ui, sans-serif",
|
|
1789
2047
|
fontWeight: "700",
|
|
1790
2048
|
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,
|
|
2049
|
+
h1: { fontSize: (0, import_core36.rem)(48), lineHeight: "1.1", fontWeight: "900" },
|
|
2050
|
+
h2: { fontSize: (0, import_core36.rem)(36), lineHeight: "1.1", fontWeight: "900" },
|
|
2051
|
+
h3: { fontSize: (0, import_core36.rem)(28), lineHeight: "1.15", fontWeight: "700" },
|
|
2052
|
+
h4: { fontSize: (0, import_core36.rem)(20), lineHeight: "1.3", fontWeight: "700" },
|
|
2053
|
+
h5: { fontSize: (0, import_core36.rem)(16), lineHeight: "1.4", fontWeight: "700" },
|
|
2054
|
+
h6: { fontSize: (0, import_core36.rem)(14), lineHeight: "1.4", fontWeight: "700" }
|
|
1797
2055
|
}
|
|
1798
2056
|
},
|
|
1799
2057
|
fontSizes: {
|
|
1800
|
-
xs: (0,
|
|
1801
|
-
sm: (0,
|
|
1802
|
-
md: (0,
|
|
1803
|
-
lg: (0,
|
|
1804
|
-
xl: (0,
|
|
2058
|
+
xs: (0, import_core36.rem)(14),
|
|
2059
|
+
sm: (0, import_core36.rem)(16),
|
|
2060
|
+
md: (0, import_core36.rem)(18),
|
|
2061
|
+
lg: (0, import_core36.rem)(20),
|
|
2062
|
+
xl: (0, import_core36.rem)(22)
|
|
1805
2063
|
},
|
|
1806
2064
|
lineHeights: {
|
|
1807
2065
|
xs: "1.4",
|
|
@@ -1812,18 +2070,18 @@ var theme = (0, import_core35.createTheme)({
|
|
|
1812
2070
|
},
|
|
1813
2071
|
defaultRadius: "md",
|
|
1814
2072
|
radius: {
|
|
1815
|
-
xs: (0,
|
|
1816
|
-
sm: (0,
|
|
1817
|
-
md: (0,
|
|
1818
|
-
lg: (0,
|
|
1819
|
-
xl: (0,
|
|
2073
|
+
xs: (0, import_core36.rem)(6),
|
|
2074
|
+
sm: (0, import_core36.rem)(8),
|
|
2075
|
+
md: (0, import_core36.rem)(10),
|
|
2076
|
+
lg: (0, import_core36.rem)(14),
|
|
2077
|
+
xl: (0, import_core36.rem)(18)
|
|
1820
2078
|
},
|
|
1821
2079
|
spacing: {
|
|
1822
|
-
xs: (0,
|
|
1823
|
-
sm: (0,
|
|
1824
|
-
md: (0,
|
|
1825
|
-
lg: (0,
|
|
1826
|
-
xl: (0,
|
|
2080
|
+
xs: (0, import_core36.rem)(8),
|
|
2081
|
+
sm: (0, import_core36.rem)(12),
|
|
2082
|
+
md: (0, import_core36.rem)(16),
|
|
2083
|
+
lg: (0, import_core36.rem)(24),
|
|
2084
|
+
xl: (0, import_core36.rem)(32)
|
|
1827
2085
|
},
|
|
1828
2086
|
shadows: {
|
|
1829
2087
|
xs: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
|
|
@@ -1898,11 +2156,15 @@ var theme = (0, import_core35.createTheme)({
|
|
|
1898
2156
|
defaultProps: { radius: "sm" }
|
|
1899
2157
|
},
|
|
1900
2158
|
Divider: {
|
|
1901
|
-
defaultProps: { c: "slate.5"
|
|
2159
|
+
defaultProps: { c: "slate.5" }
|
|
1902
2160
|
},
|
|
1903
2161
|
Anchor: {
|
|
1904
2162
|
defaultProps: { c: "slate.5", fz: "sm", underline: "never" }
|
|
1905
2163
|
},
|
|
2164
|
+
// SdHeader 모바일 드로어의 2단 아코디언 타이포를 SdLink와 맞춘다.
|
|
2165
|
+
NavLink: {
|
|
2166
|
+
defaultProps: { c: "slate.7", fz: "sm" }
|
|
2167
|
+
},
|
|
1906
2168
|
Table: {
|
|
1907
2169
|
defaultProps: {
|
|
1908
2170
|
captionSide: "bottom"
|
|
@@ -1920,33 +2182,63 @@ var theme = (0, import_core35.createTheme)({
|
|
|
1920
2182
|
MainLayout,
|
|
1921
2183
|
PageLayout,
|
|
1922
2184
|
SdBadge,
|
|
2185
|
+
SdBadgeDefault,
|
|
2186
|
+
SdBadgePrimary,
|
|
2187
|
+
SdBadgeSuccess,
|
|
2188
|
+
SdBadgeWarning,
|
|
1923
2189
|
SdButton,
|
|
1924
2190
|
SdButtonCancel,
|
|
1925
2191
|
SdButtonDelete,
|
|
2192
|
+
SdButtonDownload,
|
|
2193
|
+
SdButtonExcel,
|
|
1926
2194
|
SdButtonGhost,
|
|
1927
2195
|
SdButtonOutline,
|
|
1928
2196
|
SdButtonPrimary,
|
|
1929
2197
|
SdButtonSecondary,
|
|
2198
|
+
SdButtonSubmit,
|
|
1930
2199
|
SdButtonWhite,
|
|
1931
2200
|
SdClients,
|
|
1932
2201
|
SdClientsGrid,
|
|
1933
2202
|
SdClientsMarquee,
|
|
1934
2203
|
SdContainer,
|
|
1935
2204
|
SdCta,
|
|
2205
|
+
SdCtaBanner,
|
|
2206
|
+
SdCtaInline,
|
|
2207
|
+
SdCtaSubtle,
|
|
1936
2208
|
SdErrorView,
|
|
2209
|
+
SdErrorViewNotFound,
|
|
2210
|
+
SdErrorViewPage,
|
|
1937
2211
|
SdFaq,
|
|
2212
|
+
SdFaqDefault,
|
|
2213
|
+
SdFaqFilled,
|
|
2214
|
+
SdFaqWithHeader,
|
|
1938
2215
|
SdFeatureSection,
|
|
1939
2216
|
SdFeatures,
|
|
1940
2217
|
SdFooter,
|
|
1941
2218
|
SdHeader,
|
|
1942
2219
|
SdInput,
|
|
2220
|
+
SdInputEmail,
|
|
2221
|
+
SdInputPassword,
|
|
2222
|
+
SdInputSelect,
|
|
2223
|
+
SdInputText,
|
|
2224
|
+
SdInputTextarea,
|
|
2225
|
+
SdLink,
|
|
2226
|
+
SdLinkBody,
|
|
2227
|
+
SdLinkHint,
|
|
2228
|
+
SdLinkStrong,
|
|
2229
|
+
SdLinkSub,
|
|
1943
2230
|
SdMap,
|
|
1944
2231
|
SdMapSingle,
|
|
1945
2232
|
SdMapTabs,
|
|
1946
2233
|
SdModal,
|
|
1947
2234
|
SdNumberIcon,
|
|
1948
2235
|
SdPricingCard,
|
|
2236
|
+
SdPricingCardDefault,
|
|
2237
|
+
SdPricingCardFeatured,
|
|
2238
|
+
SdPricingCardGrid,
|
|
1949
2239
|
SdQuote,
|
|
2240
|
+
SdQuoteCard,
|
|
2241
|
+
SdQuotePlain,
|
|
1950
2242
|
SdSkeleton,
|
|
1951
2243
|
SdSkeletonAvatar,
|
|
1952
2244
|
SdSkeletonCard,
|
|
@@ -1955,22 +2247,44 @@ var theme = (0, import_core35.createTheme)({
|
|
|
1955
2247
|
SdSkeletonTitle,
|
|
1956
2248
|
SdSolution,
|
|
1957
2249
|
SdSolutionCard,
|
|
2250
|
+
SdSolutionCardGrid,
|
|
2251
|
+
SdSolutionCardItem,
|
|
2252
|
+
SdSolutionFiltered,
|
|
2253
|
+
SdSolutionList,
|
|
1958
2254
|
SdSteps,
|
|
2255
|
+
SdStepsBubble,
|
|
2256
|
+
SdStepsCard,
|
|
1959
2257
|
SdStepsSection,
|
|
2258
|
+
SdStepsStrip,
|
|
1960
2259
|
SdTable,
|
|
2260
|
+
SdTableSpec,
|
|
1961
2261
|
SdTabs,
|
|
1962
2262
|
SdTabsOutline,
|
|
1963
2263
|
SdTabsPills,
|
|
1964
2264
|
SdTabsUnderline,
|
|
1965
2265
|
SdTestimonial,
|
|
2266
|
+
SdTestimonialCard,
|
|
2267
|
+
SdTestimonialGrid,
|
|
2268
|
+
SdTestimonialStrip,
|
|
1966
2269
|
SdText,
|
|
2270
|
+
SdTextBody,
|
|
1967
2271
|
SdTextBox,
|
|
1968
2272
|
SdTextBoxCard,
|
|
1969
2273
|
SdTextBoxHero,
|
|
1970
2274
|
SdTextBoxSection,
|
|
1971
2275
|
SdTextBoxSub,
|
|
2276
|
+
SdTextError,
|
|
2277
|
+
SdTextEyebrow,
|
|
2278
|
+
SdTextHint,
|
|
2279
|
+
SdTextNumeric,
|
|
2280
|
+
SdTextStrong,
|
|
2281
|
+
SdTextSub,
|
|
1972
2282
|
SdTimeline,
|
|
1973
2283
|
SdTimelineSection,
|
|
1974
2284
|
SdTitle,
|
|
2285
|
+
SdTitleCard,
|
|
2286
|
+
SdTitleDisplay,
|
|
2287
|
+
SdTitleSection,
|
|
2288
|
+
SdTitleSub,
|
|
1975
2289
|
theme
|
|
1976
2290
|
});
|