@yeongseoksong/framework 1.1.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -34
- package/dist/types/index.d.mts +8 -1
- package/dist/types/index.d.ts +8 -1
- package/dist/ui/index.cjs +933 -595
- package/dist/ui/index.d.mts +170 -54
- package/dist/ui/index.d.ts +170 -54
- package/dist/ui/index.mjs +807 -524
- package/dist/util/index.cjs +17 -2
- package/dist/util/index.d.mts +12 -1
- package/dist/util/index.d.ts +12 -1
- package/dist/util/index.mjs +14 -1
- package/package.json +2 -2
package/dist/ui/index.mjs
CHANGED
|
@@ -114,7 +114,11 @@ var SdTabs = {
|
|
|
114
114
|
flexWrap: "wrap",
|
|
115
115
|
justifyContent: "center"
|
|
116
116
|
},
|
|
117
|
-
tab: {
|
|
117
|
+
tab: {
|
|
118
|
+
fontWeight: "500",
|
|
119
|
+
fontSize: "var(--mantine-h5-font-size)",
|
|
120
|
+
paddingInline: "var(--mantine-spacing-lg)"
|
|
121
|
+
}
|
|
118
122
|
}
|
|
119
123
|
}),
|
|
120
124
|
Underline: createTabs({
|
|
@@ -122,7 +126,11 @@ var SdTabs = {
|
|
|
122
126
|
color: "primary",
|
|
123
127
|
styles: {
|
|
124
128
|
list: { width: "fit-content", margin: "0 auto", gap: "var(--mantine-spacing-sm)" },
|
|
125
|
-
tab: {
|
|
129
|
+
tab: {
|
|
130
|
+
fontWeight: "500",
|
|
131
|
+
fontSize: "var(--mantine-h5-font-size)",
|
|
132
|
+
paddingInline: "var(--mantine-spacing-lg)"
|
|
133
|
+
}
|
|
126
134
|
}
|
|
127
135
|
}),
|
|
128
136
|
Outline: createTabs({
|
|
@@ -131,7 +139,11 @@ var SdTabs = {
|
|
|
131
139
|
radius: "md",
|
|
132
140
|
styles: {
|
|
133
141
|
list: { width: "fit-content", margin: "0 auto", gap: "var(--mantine-spacing-sm)" },
|
|
134
|
-
tab: {
|
|
142
|
+
tab: {
|
|
143
|
+
fontWeight: "500",
|
|
144
|
+
fontSize: "var(--mantine-h5-font-size)",
|
|
145
|
+
paddingInline: "var(--mantine-spacing-lg)"
|
|
146
|
+
}
|
|
135
147
|
}
|
|
136
148
|
})
|
|
137
149
|
};
|
|
@@ -167,6 +179,10 @@ var SdTitle = {
|
|
|
167
179
|
/** 소제목 */
|
|
168
180
|
Sub: createTitle({ order: 5 })
|
|
169
181
|
};
|
|
182
|
+
var SdTitleDisplay = SdTitle.Display;
|
|
183
|
+
var SdTitleSection = SdTitle.Section;
|
|
184
|
+
var SdTitleCard = SdTitle.Card;
|
|
185
|
+
var SdTitleSub = SdTitle.Sub;
|
|
170
186
|
|
|
171
187
|
// ui/atom/Text.tsx
|
|
172
188
|
import { Text as MantineText } from "@mantine/core";
|
|
@@ -182,20 +198,37 @@ var SdText = {
|
|
|
182
198
|
Strong: createText({ fw: 700, c: "slate.9", fz: "md", style: { letterSpacing: "-0.04em" } }),
|
|
183
199
|
Body: createText({ fw: 400, c: "slate.7", fz: "md", lh: 1.7 }),
|
|
184
200
|
Sub: createText({ fw: 400, c: "slate.5", fz: "xs", lh: 1.6 }),
|
|
185
|
-
Eyebrow: createText({
|
|
201
|
+
Eyebrow: createText({
|
|
202
|
+
fw: 700,
|
|
203
|
+
c: "primary.6",
|
|
204
|
+
fz: "xs",
|
|
205
|
+
style: { letterSpacing: "0.12em", textTransform: "uppercase" }
|
|
206
|
+
}),
|
|
186
207
|
Error: createText({ fw: 400, c: "red.6", fz: "sm" }),
|
|
187
208
|
Hint: createText({ fw: 400, c: "slate.4", fz: "xs", lh: 1.5 }),
|
|
188
|
-
Numeric: createText({
|
|
209
|
+
Numeric: createText({
|
|
210
|
+
fw: 700,
|
|
211
|
+
c: "slate.8",
|
|
212
|
+
fz: "md",
|
|
213
|
+
style: { fontVariantNumeric: "tabular-nums", letterSpacing: "-0.02em" }
|
|
214
|
+
})
|
|
189
215
|
};
|
|
216
|
+
var SdTextStrong = SdText.Strong;
|
|
217
|
+
var SdTextBody = SdText.Body;
|
|
218
|
+
var SdTextSub = SdText.Sub;
|
|
219
|
+
var SdTextEyebrow = SdText.Eyebrow;
|
|
220
|
+
var SdTextError = SdText.Error;
|
|
221
|
+
var SdTextHint = SdText.Hint;
|
|
222
|
+
var SdTextNumeric = SdText.Numeric;
|
|
190
223
|
|
|
191
224
|
// ui/atom/Button.tsx
|
|
192
225
|
import { Button as MantineButton } from "@mantine/core";
|
|
193
|
-
import { IconTrash, IconX } from "@tabler/icons-react";
|
|
226
|
+
import { IconDownload, IconFileSpreadsheet, IconSend, IconTrash, IconX } from "@tabler/icons-react";
|
|
194
227
|
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
195
|
-
function createButton(defaults) {
|
|
228
|
+
function createButton(defaults, defaultLabel) {
|
|
196
229
|
return function SdButton2(_a4) {
|
|
197
230
|
var _b = _a4, { children } = _b, props = __objRest(_b, ["children"]);
|
|
198
|
-
return /* @__PURE__ */ jsx6(MantineButton, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { children }));
|
|
231
|
+
return /* @__PURE__ */ jsx6(MantineButton, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { children: children != null ? children : defaultLabel }));
|
|
199
232
|
};
|
|
200
233
|
}
|
|
201
234
|
var SdButton = {
|
|
@@ -209,18 +242,37 @@ var SdButton = {
|
|
|
209
242
|
Ghost: createButton({ variant: "subtle", color: "slate" }),
|
|
210
243
|
/** 다크 배경 위 — white */
|
|
211
244
|
White: createButton({ variant: "white" }),
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
245
|
+
// ── 표준 액션 버튼: 라벨·색·아이콘이 고정 (children으로 라벨 덮어쓰기 가능) ──
|
|
246
|
+
/** 전송 — filled primary + 종이비행기 아이콘, 기본 라벨 "전송" */
|
|
247
|
+
Submit: createButton({ color: "primary", leftSection: /* @__PURE__ */ jsx6(IconSend, { size: 16 }) }, "\uC804\uC1A1"),
|
|
248
|
+
/** 삭제 — filled red + 휴지통 아이콘, 기본 라벨 "삭제" */
|
|
249
|
+
Delete: createButton({ color: "red", leftSection: /* @__PURE__ */ jsx6(IconTrash, { size: 16 }) }, "\uC0AD\uC81C"),
|
|
250
|
+
/** 취소 — outline slate + X 아이콘, 기본 라벨 "취소" */
|
|
251
|
+
Cancel: createButton(
|
|
252
|
+
{ variant: "outline", color: "slate", leftSection: /* @__PURE__ */ jsx6(IconX, { size: 16 }) },
|
|
253
|
+
"\uCDE8\uC18C"
|
|
254
|
+
),
|
|
255
|
+
/** 엑셀 — outline green + 스프레드시트 아이콘, 기본 라벨 "엑셀" */
|
|
256
|
+
Excel: createButton(
|
|
257
|
+
{ variant: "outline", color: "green", leftSection: /* @__PURE__ */ jsx6(IconFileSpreadsheet, { size: 16 }) },
|
|
258
|
+
"\uC5D1\uC140"
|
|
259
|
+
),
|
|
260
|
+
/** 다운로드 — light primary + 다운로드 아이콘, 기본 라벨 "다운로드" */
|
|
261
|
+
Download: createButton(
|
|
262
|
+
{ variant: "light", color: "primary", leftSection: /* @__PURE__ */ jsx6(IconDownload, { size: 16 }) },
|
|
263
|
+
"\uB2E4\uC6B4\uB85C\uB4DC"
|
|
264
|
+
)
|
|
216
265
|
};
|
|
217
266
|
var SdButtonPrimary = SdButton.Primary;
|
|
218
267
|
var SdButtonSecondary = SdButton.Secondary;
|
|
219
268
|
var SdButtonOutline = SdButton.Outline;
|
|
220
269
|
var SdButtonGhost = SdButton.Ghost;
|
|
221
270
|
var SdButtonWhite = SdButton.White;
|
|
271
|
+
var SdButtonSubmit = SdButton.Submit;
|
|
222
272
|
var SdButtonDelete = SdButton.Delete;
|
|
223
273
|
var SdButtonCancel = SdButton.Cancel;
|
|
274
|
+
var SdButtonExcel = SdButton.Excel;
|
|
275
|
+
var SdButtonDownload = SdButton.Download;
|
|
224
276
|
|
|
225
277
|
// ui/atom/Quote.tsx
|
|
226
278
|
import { Box as Box2, Card, Center, Group, Stack } from "@mantine/core";
|
|
@@ -249,6 +301,8 @@ var SdQuote = {
|
|
|
249
301
|
Plain,
|
|
250
302
|
Card: CardQuote
|
|
251
303
|
};
|
|
304
|
+
var SdQuotePlain = SdQuote.Plain;
|
|
305
|
+
var SdQuoteCard = SdQuote.Card;
|
|
252
306
|
|
|
253
307
|
// ui/atom/Table.tsx
|
|
254
308
|
import { Table } from "@mantine/core";
|
|
@@ -296,6 +350,7 @@ var Spec = createTable(__spreadProps(__spreadValues({}, base), {
|
|
|
296
350
|
Spec.Th = SpecTh;
|
|
297
351
|
Spec.Td = SpecTd;
|
|
298
352
|
var SdTable = Object.assign(createTable(base), { Spec });
|
|
353
|
+
var SdTableSpec = Spec;
|
|
299
354
|
|
|
300
355
|
// ui/atom/Modal.tsx
|
|
301
356
|
import { Modal } from "@mantine/core";
|
|
@@ -319,7 +374,17 @@ var SdModal = createModal({
|
|
|
319
374
|
import { ThemeIcon } from "@mantine/core";
|
|
320
375
|
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
321
376
|
function SdNumberIcon(_a4) {
|
|
322
|
-
var _b = _a4, {
|
|
377
|
+
var _b = _a4, {
|
|
378
|
+
value,
|
|
379
|
+
size = 48,
|
|
380
|
+
radius = "xl",
|
|
381
|
+
color = "primary"
|
|
382
|
+
} = _b, props = __objRest(_b, [
|
|
383
|
+
"value",
|
|
384
|
+
"size",
|
|
385
|
+
"radius",
|
|
386
|
+
"color"
|
|
387
|
+
]);
|
|
323
388
|
return /* @__PURE__ */ jsx10(ThemeIcon, __spreadProps(__spreadValues({ size, radius, color }, props), { children: /* @__PURE__ */ jsx10(SdText.Strong, { c: "white", children: value }) }));
|
|
324
389
|
}
|
|
325
390
|
|
|
@@ -342,6 +407,10 @@ var SdBadge = {
|
|
|
342
407
|
/** 주의/경고 */
|
|
343
408
|
Warning: createBadge({ variant: "light", color: "orange" })
|
|
344
409
|
};
|
|
410
|
+
var SdBadgeDefault = SdBadge.Default;
|
|
411
|
+
var SdBadgePrimary = SdBadge.Primary;
|
|
412
|
+
var SdBadgeSuccess = SdBadge.Success;
|
|
413
|
+
var SdBadgeWarning = SdBadge.Warning;
|
|
345
414
|
|
|
346
415
|
// ui/atom/Input.tsx
|
|
347
416
|
import {
|
|
@@ -358,19 +427,19 @@ function createTextInput(defaults) {
|
|
|
358
427
|
};
|
|
359
428
|
}
|
|
360
429
|
function createTextarea(defaults) {
|
|
361
|
-
return function
|
|
430
|
+
return function SdInputTextarea2(_a4) {
|
|
362
431
|
var props = __objRest(_a4, []);
|
|
363
432
|
return /* @__PURE__ */ jsx12(Textarea, __spreadValues(__spreadValues({}, defaults), props));
|
|
364
433
|
};
|
|
365
434
|
}
|
|
366
435
|
function createPasswordInput(defaults) {
|
|
367
|
-
return function
|
|
436
|
+
return function SdInputPassword2(_a4) {
|
|
368
437
|
var props = __objRest(_a4, []);
|
|
369
438
|
return /* @__PURE__ */ jsx12(PasswordInput, __spreadValues(__spreadValues({}, defaults), props));
|
|
370
439
|
};
|
|
371
440
|
}
|
|
372
441
|
function createSelect(defaults) {
|
|
373
|
-
return function
|
|
442
|
+
return function SdInputSelect2(_a4) {
|
|
374
443
|
var props = __objRest(_a4, []);
|
|
375
444
|
return /* @__PURE__ */ jsx12(Select, __spreadValues(__spreadValues({}, defaults), props));
|
|
376
445
|
};
|
|
@@ -387,6 +456,11 @@ var SdInput = {
|
|
|
387
456
|
/** 드롭다운 선택 */
|
|
388
457
|
Select: createSelect({})
|
|
389
458
|
};
|
|
459
|
+
var SdInputText = SdInput.Text;
|
|
460
|
+
var SdInputEmail = SdInput.Email;
|
|
461
|
+
var SdInputPassword = SdInput.Password;
|
|
462
|
+
var SdInputTextarea = SdInput.Textarea;
|
|
463
|
+
var SdInputSelect = SdInput.Select;
|
|
390
464
|
|
|
391
465
|
// ui/atom/Skeleton.tsx
|
|
392
466
|
import { Box as Box3, Skeleton as MantineSkeleton, Stack as Stack2 } from "@mantine/core";
|
|
@@ -412,7 +486,11 @@ function SkeletonCard({ height, lines = 3 }) {
|
|
|
412
486
|
Box3,
|
|
413
487
|
{
|
|
414
488
|
p: "md",
|
|
415
|
-
style: {
|
|
489
|
+
style: {
|
|
490
|
+
borderRadius: "var(--mantine-radius-md)",
|
|
491
|
+
border: "1px solid var(--mantine-color-gray-3)",
|
|
492
|
+
height
|
|
493
|
+
},
|
|
416
494
|
children: /* @__PURE__ */ jsxs2(Stack2, { gap: "sm", children: [
|
|
417
495
|
/* @__PURE__ */ jsx13(MantineSkeleton, { height: 20, width: "50%", radius: "sm" }),
|
|
418
496
|
Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ jsx13(
|
|
@@ -441,9 +519,60 @@ var SdSkeletonTitle = SkeletonTitle;
|
|
|
441
519
|
var SdSkeletonImage = SkeletonImage;
|
|
442
520
|
var SdSkeletonAvatar = SkeletonAvatar;
|
|
443
521
|
|
|
522
|
+
// ui/atom/Link.tsx
|
|
523
|
+
import { Anchor as MantineAnchor } from "@mantine/core";
|
|
524
|
+
|
|
525
|
+
// util/style.util.ts
|
|
526
|
+
function toCssColor(value) {
|
|
527
|
+
if (typeof value !== "string") return "";
|
|
528
|
+
return value.includes(".") ? `var(--mantine-color-${value.replace(".", "-")})` : value;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
// ui/atom/Link.tsx
|
|
532
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
533
|
+
var HOVER_COLOR = "var(--mantine-color-primary-6)";
|
|
534
|
+
function createLink(defaults) {
|
|
535
|
+
return function SdLink2(_a4) {
|
|
536
|
+
var _b = _a4, { children, onMouseEnter, onMouseLeave } = _b, props = __objRest(_b, ["children", "onMouseEnter", "onMouseLeave"]);
|
|
537
|
+
var _a5;
|
|
538
|
+
const baseColor = toCssColor((_a5 = props.c) != null ? _a5 : defaults.c);
|
|
539
|
+
const handleEnter = (e) => {
|
|
540
|
+
e.currentTarget.style.color = HOVER_COLOR;
|
|
541
|
+
onMouseEnter == null ? void 0 : onMouseEnter(e);
|
|
542
|
+
};
|
|
543
|
+
const handleLeave = (e) => {
|
|
544
|
+
e.currentTarget.style.color = baseColor;
|
|
545
|
+
onMouseLeave == null ? void 0 : onMouseLeave(e);
|
|
546
|
+
};
|
|
547
|
+
return /* @__PURE__ */ jsx14(
|
|
548
|
+
MantineAnchor,
|
|
549
|
+
__spreadProps(__spreadValues(__spreadValues({}, defaults), props), {
|
|
550
|
+
style: { transition: "color 0.15s" },
|
|
551
|
+
onMouseEnter: handleEnter,
|
|
552
|
+
onMouseLeave: handleLeave,
|
|
553
|
+
children
|
|
554
|
+
})
|
|
555
|
+
);
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
var SdLink = {
|
|
559
|
+
/** 최상위 강조 — 눈에 띄어야 하는 단일 링크 */
|
|
560
|
+
Strong: createLink({ fw: 700, c: "primary.6", fz: "xs", underline: "never" }),
|
|
561
|
+
/** 기본 — 본문·네비게이션 수준의 일반 링크 */
|
|
562
|
+
Body: createLink({ fw: 500, c: "slate.7", fz: 15, underline: "never" }),
|
|
563
|
+
/** 보조 — 연락처·정책 등 부가 정보 */
|
|
564
|
+
Sub: createLink({ fw: 400, c: "slate.5", fz: "xs", underline: "never" }),
|
|
565
|
+
/** 최소 강조 — 링크 목록처럼 밀도가 높고 톤을 낮춰야 하는 곳 */
|
|
566
|
+
Hint: createLink({ fw: 400, c: "slate.4", fz: "xs", underline: "never" })
|
|
567
|
+
};
|
|
568
|
+
var SdLinkStrong = SdLink.Strong;
|
|
569
|
+
var SdLinkBody = SdLink.Body;
|
|
570
|
+
var SdLinkSub = SdLink.Sub;
|
|
571
|
+
var SdLinkHint = SdLink.Hint;
|
|
572
|
+
|
|
444
573
|
// ui/molecule/TextBox.tsx
|
|
445
574
|
import { Stack as Stack3 } from "@mantine/core";
|
|
446
|
-
import { jsx as
|
|
575
|
+
import { jsx as jsx15, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
447
576
|
function createTextBox(titleVariant, defaultGap = "xs", descVariant = "Body", color_ = void 0) {
|
|
448
577
|
return function SdTextBox2(_a4) {
|
|
449
578
|
var _b = _a4, {
|
|
@@ -468,9 +597,9 @@ function createTextBox(titleVariant, defaultGap = "xs", descVariant = "Body", co
|
|
|
468
597
|
const TitleComponent = SdTitle[variant];
|
|
469
598
|
const DescComponent = SdText[descVariant];
|
|
470
599
|
return /* @__PURE__ */ jsxs3(Stack3, __spreadProps(__spreadValues({ gap: defaultGap }, stackProps), { children: [
|
|
471
|
-
label && /* @__PURE__ */
|
|
472
|
-
/* @__PURE__ */
|
|
473
|
-
description && /* @__PURE__ */
|
|
600
|
+
label && /* @__PURE__ */ jsx15(SdText.Eyebrow, { children: label }),
|
|
601
|
+
/* @__PURE__ */ jsx15(TitleComponent, { c: colorRes, children: title }),
|
|
602
|
+
description && /* @__PURE__ */ jsx15(DescComponent, { c: colorRes, maw: maxDescWidth, mt: 4, children: description }),
|
|
474
603
|
children
|
|
475
604
|
] }));
|
|
476
605
|
};
|
|
@@ -495,77 +624,83 @@ function filterAndSort(items) {
|
|
|
495
624
|
}
|
|
496
625
|
|
|
497
626
|
// ui/molecule/Features.tsx
|
|
498
|
-
import { jsx as
|
|
627
|
+
import { jsx as jsx16, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
499
628
|
function SdFeatures({ items, cols = { base: 1, sm: 2, md: 3 } }) {
|
|
500
629
|
const visible = filterAndSort(items);
|
|
501
|
-
return /* @__PURE__ */
|
|
502
|
-
|
|
503
|
-
{
|
|
504
|
-
|
|
505
|
-
item.icon,
|
|
506
|
-
/* @__PURE__ */ jsx15(
|
|
507
|
-
SdTextBox.Card,
|
|
508
|
-
{
|
|
509
|
-
label: item.label,
|
|
510
|
-
title: item.title,
|
|
511
|
-
description: item.description
|
|
512
|
-
}
|
|
513
|
-
)
|
|
514
|
-
] }, item.id)
|
|
515
|
-
},
|
|
516
|
-
item.id
|
|
517
|
-
)) });
|
|
630
|
+
return /* @__PURE__ */ jsx16(SimpleGrid, { cols, spacing: "xl", children: visible.map((item) => /* @__PURE__ */ jsx16(Card2, { children: /* @__PURE__ */ jsxs4(Stack4, { gap: "sm", children: [
|
|
631
|
+
item.icon,
|
|
632
|
+
/* @__PURE__ */ jsx16(SdTextBox.Card, { label: item.label, title: item.title, description: item.description })
|
|
633
|
+
] }, item.id) }, item.id)) });
|
|
518
634
|
}
|
|
519
635
|
|
|
520
636
|
// ui/molecule/Timeline.tsx
|
|
521
637
|
import { Group as Group2, Stack as Stack5, Timeline as MantineTimeline } from "@mantine/core";
|
|
522
|
-
import { jsx as
|
|
638
|
+
import { jsx as jsx17, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
523
639
|
function SdTimeline({ items }) {
|
|
524
640
|
const grouped = items.filter((item) => item.isShow).sort((a, b) => b.year - a.year || b.month - a.month).reduce((acc, item) => {
|
|
525
641
|
var _a4, _b;
|
|
642
|
+
;
|
|
526
643
|
((_b = acc[_a4 = item.year]) != null ? _b : acc[_a4] = []).push(item);
|
|
527
644
|
return acc;
|
|
528
645
|
}, {});
|
|
529
646
|
const years = Object.keys(grouped).map(Number).sort((a, b) => b - a);
|
|
530
|
-
return /* @__PURE__ */
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
"\uC6D4"
|
|
541
|
-
] }),
|
|
542
|
-
/* @__PURE__ */ jsx16(SdText.Sub, { style: { flex: 1 }, children: event.description })
|
|
543
|
-
] }, event.id)) })
|
|
544
|
-
},
|
|
545
|
-
year
|
|
546
|
-
)) });
|
|
647
|
+
return /* @__PURE__ */ jsx17(MantineTimeline, { active: items.length, bulletSize: 24, lineWidth: 2, children: years.map((year) => /* @__PURE__ */ jsx17(MantineTimeline.Item, { title: /* @__PURE__ */ jsxs5(SdTitle.Sub, { children: [
|
|
648
|
+
year,
|
|
649
|
+
"\uB144"
|
|
650
|
+
] }), children: /* @__PURE__ */ jsx17(Stack5, { gap: 6, mt: "xs", children: grouped[year].map((event) => /* @__PURE__ */ jsxs5(Group2, { gap: "md", align: "center", wrap: "nowrap", children: [
|
|
651
|
+
/* @__PURE__ */ jsxs5(SdText.Eyebrow, { miw: 28, children: [
|
|
652
|
+
event.month,
|
|
653
|
+
"\uC6D4"
|
|
654
|
+
] }),
|
|
655
|
+
/* @__PURE__ */ jsx17(SdText.Sub, { style: { flex: 1 }, children: event.description })
|
|
656
|
+
] }, event.id)) }) }, year)) });
|
|
547
657
|
}
|
|
548
658
|
|
|
549
659
|
// ui/molecule/Steps.tsx
|
|
550
660
|
import { Box as Box4, Card as Card3, Group as Group3, Stack as Stack6, ThemeIcon as ThemeIcon2 } from "@mantine/core";
|
|
551
661
|
import { IconArrowDown, IconArrowRight } from "@tabler/icons-react";
|
|
552
662
|
import { Fragment } from "react/jsx-runtime";
|
|
553
|
-
import { Fragment as Fragment2, jsx as
|
|
663
|
+
import { Fragment as Fragment2, jsx as jsx18, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
554
664
|
function BubbleStep({ item, index, isLast }) {
|
|
555
665
|
return /* @__PURE__ */ jsxs6(Group3, { align: "flex-start", gap: "lg", wrap: "nowrap", children: [
|
|
556
|
-
/* @__PURE__ */ jsxs6(
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
666
|
+
/* @__PURE__ */ jsxs6(
|
|
667
|
+
Box4,
|
|
668
|
+
{
|
|
669
|
+
style: { display: "flex", flexDirection: "column", alignItems: "center", flexShrink: 0 },
|
|
670
|
+
children: [
|
|
671
|
+
/* @__PURE__ */ jsx18(SdNumberIcon, { value: String(index + 1).padStart(2, "0") }),
|
|
672
|
+
!isLast && /* @__PURE__ */ jsx18(
|
|
673
|
+
Box4,
|
|
674
|
+
{
|
|
675
|
+
style: {
|
|
676
|
+
width: 2,
|
|
677
|
+
flex: 1,
|
|
678
|
+
minHeight: 32,
|
|
679
|
+
marginTop: 8,
|
|
680
|
+
background: "var(--mantine-color-primary-2)"
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
)
|
|
684
|
+
]
|
|
685
|
+
}
|
|
686
|
+
),
|
|
687
|
+
/* @__PURE__ */ jsx18(
|
|
688
|
+
SdTextBox.Card,
|
|
689
|
+
{
|
|
690
|
+
title: item.title,
|
|
691
|
+
description: item.description,
|
|
692
|
+
pb: !isLast ? "xl" : 0,
|
|
693
|
+
pt: 4
|
|
694
|
+
}
|
|
695
|
+
)
|
|
561
696
|
] });
|
|
562
697
|
}
|
|
563
698
|
function Bubble({ items }) {
|
|
564
|
-
return /* @__PURE__ */
|
|
699
|
+
return /* @__PURE__ */ jsx18(Box4, { children: items.map((item, i) => /* @__PURE__ */ jsx18(BubbleStep, { item, index: i, isLast: i === items.length - 1 }, i)) });
|
|
565
700
|
}
|
|
566
701
|
function CardStep({ item, index }) {
|
|
567
702
|
return /* @__PURE__ */ jsxs6(Card3, { withBorder: true, radius: "md", p: 0, style: { height: "100%", overflow: "hidden" }, children: [
|
|
568
|
-
/* @__PURE__ */
|
|
703
|
+
/* @__PURE__ */ jsx18(
|
|
569
704
|
Box4,
|
|
570
705
|
{
|
|
571
706
|
py: "lg",
|
|
@@ -580,37 +715,40 @@ function CardStep({ item, index }) {
|
|
|
580
715
|
] })
|
|
581
716
|
}
|
|
582
717
|
),
|
|
583
|
-
/* @__PURE__ */
|
|
718
|
+
/* @__PURE__ */ jsx18(Box4, { p: "lg", style: { textAlign: "center" }, children: /* @__PURE__ */ jsx18(SdTextBox.Card, { title: item.title, description: item.description }) })
|
|
584
719
|
] });
|
|
585
720
|
}
|
|
586
721
|
function CardArrow({ direction }) {
|
|
587
|
-
return /* @__PURE__ */
|
|
722
|
+
return /* @__PURE__ */ jsx18(ThemeIcon2, { size: 36, radius: "xl", variant: "light", color: "primary", children: direction === "right" ? /* @__PURE__ */ jsx18(IconArrowRight, { size: 20, stroke: 2.5 }) : /* @__PURE__ */ jsx18(IconArrowDown, { size: 20, stroke: 2.5 }) });
|
|
588
723
|
}
|
|
589
724
|
function CardVariant({ items }) {
|
|
590
725
|
return /* @__PURE__ */ jsxs6(Fragment2, { children: [
|
|
591
|
-
/* @__PURE__ */
|
|
592
|
-
/* @__PURE__ */
|
|
593
|
-
i < items.length - 1 && /* @__PURE__ */
|
|
726
|
+
/* @__PURE__ */ jsx18(Stack6, { gap: "sm", hiddenFrom: "sm", children: items.map((item, i) => /* @__PURE__ */ jsxs6(Fragment, { children: [
|
|
727
|
+
/* @__PURE__ */ jsx18(CardStep, { item, index: i }),
|
|
728
|
+
i < items.length - 1 && /* @__PURE__ */ jsx18(Box4, { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx18(CardArrow, { direction: "down" }) })
|
|
594
729
|
] }, i)) }),
|
|
595
|
-
/* @__PURE__ */
|
|
596
|
-
/* @__PURE__ */
|
|
597
|
-
i < items.length - 1 && /* @__PURE__ */
|
|
730
|
+
/* @__PURE__ */ jsx18(Group3, { wrap: "nowrap", align: "stretch", gap: 0, visibleFrom: "sm", children: items.map((item, i) => /* @__PURE__ */ jsxs6(Fragment, { children: [
|
|
731
|
+
/* @__PURE__ */ jsx18(Box4, { style: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ jsx18(CardStep, { item, index: i }) }),
|
|
732
|
+
i < items.length - 1 && /* @__PURE__ */ jsx18(Box4, { style: { display: "flex", alignItems: "center", padding: "0 8px" }, children: /* @__PURE__ */ jsx18(CardArrow, { direction: "right" }) })
|
|
598
733
|
] }, i)) })
|
|
599
734
|
] });
|
|
600
735
|
}
|
|
601
736
|
function StripStep({ item, index }) {
|
|
602
|
-
return /* @__PURE__ */
|
|
737
|
+
return /* @__PURE__ */ jsx18(Box4, { pl: "md", style: { borderLeft: "3px solid var(--mantine-color-primary-6)" }, children: /* @__PURE__ */ jsxs6(Stack6, { gap: 4, children: [
|
|
603
738
|
/* @__PURE__ */ jsxs6(SdText.Eyebrow, { children: [
|
|
604
739
|
"STEP ",
|
|
605
740
|
String(index + 1).padStart(2, "0")
|
|
606
741
|
] }),
|
|
607
|
-
/* @__PURE__ */
|
|
742
|
+
/* @__PURE__ */ jsx18(SdTextBox.Card, { title: item.title, description: item.description })
|
|
608
743
|
] }) });
|
|
609
744
|
}
|
|
610
745
|
function Strip({ items }) {
|
|
611
|
-
return /* @__PURE__ */
|
|
746
|
+
return /* @__PURE__ */ jsx18(Stack6, { gap: "xl", children: items.map((item, i) => /* @__PURE__ */ jsx18(StripStep, { item, index: i }, i)) });
|
|
612
747
|
}
|
|
613
748
|
var SdSteps = { Bubble, Card: CardVariant, Strip };
|
|
749
|
+
var SdStepsBubble = SdSteps.Bubble;
|
|
750
|
+
var SdStepsCard = SdSteps.Card;
|
|
751
|
+
var SdStepsStrip = SdSteps.Strip;
|
|
614
752
|
|
|
615
753
|
// ui/molecule/Testimonial.tsx
|
|
616
754
|
import {
|
|
@@ -622,13 +760,13 @@ import {
|
|
|
622
760
|
SimpleGrid as SimpleGrid2,
|
|
623
761
|
Stack as Stack7
|
|
624
762
|
} from "@mantine/core";
|
|
625
|
-
import { jsx as
|
|
763
|
+
import { jsx as jsx19, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
626
764
|
function AuthorRow({ item }) {
|
|
627
765
|
return /* @__PURE__ */ jsxs7(Group4, { gap: "sm", wrap: "nowrap", children: [
|
|
628
|
-
item.avatar && /* @__PURE__ */
|
|
629
|
-
!item.avatar && /* @__PURE__ */
|
|
766
|
+
item.avatar && /* @__PURE__ */ jsx19(Avatar, { src: item.avatar, size: "md", radius: "xl" }),
|
|
767
|
+
!item.avatar && /* @__PURE__ */ jsx19(Avatar, { size: "md", radius: "xl", color: "primary", children: item.name.charAt(0) }),
|
|
630
768
|
/* @__PURE__ */ jsxs7(Stack7, { gap: 0, children: [
|
|
631
|
-
/* @__PURE__ */
|
|
769
|
+
/* @__PURE__ */ jsx19(SdText.Strong, { fz: "sm", children: item.name }),
|
|
632
770
|
/* @__PURE__ */ jsxs7(SdText.Sub, { children: [
|
|
633
771
|
item.role,
|
|
634
772
|
item.company ? ` \xB7 ${item.company}` : ""
|
|
@@ -638,28 +776,28 @@ function AuthorRow({ item }) {
|
|
|
638
776
|
}
|
|
639
777
|
function CardTestimonial(_a4) {
|
|
640
778
|
var _b = _a4, { item } = _b, boxProps = __objRest(_b, ["item"]);
|
|
641
|
-
return /* @__PURE__ */
|
|
642
|
-
item.rating && /* @__PURE__ */
|
|
779
|
+
return /* @__PURE__ */ jsx19(Card4, __spreadProps(__spreadValues({ h: "100%" }, boxProps), { children: /* @__PURE__ */ jsxs7(Stack7, { gap: "md", h: "100%", children: [
|
|
780
|
+
item.rating && /* @__PURE__ */ jsx19(Rating, { value: item.rating, readOnly: true, size: "sm", color: "primary" }),
|
|
643
781
|
/* @__PURE__ */ jsxs7(Stack7, { gap: "xs", style: { flex: 1 }, children: [
|
|
644
|
-
/* @__PURE__ */
|
|
645
|
-
item.lines.map((line, i) => /* @__PURE__ */
|
|
782
|
+
/* @__PURE__ */ jsx19(SdTitle.Display, { c: "primary.6", lh: 0.8, "aria-hidden": true, children: "\u201C" }),
|
|
783
|
+
item.lines.map((line, i) => /* @__PURE__ */ jsx19(SdText.Body, { children: line }, i))
|
|
646
784
|
] }),
|
|
647
|
-
/* @__PURE__ */
|
|
785
|
+
/* @__PURE__ */ jsx19(AuthorRow, { item })
|
|
648
786
|
] }) }));
|
|
649
787
|
}
|
|
650
788
|
function Strip2(_a4) {
|
|
651
789
|
var _b = _a4, { item } = _b, boxProps = __objRest(_b, ["item"]);
|
|
652
|
-
return /* @__PURE__ */
|
|
653
|
-
item.rating && /* @__PURE__ */
|
|
790
|
+
return /* @__PURE__ */ jsx19(Box5, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ jsxs7(Stack7, { gap: "md", children: [
|
|
791
|
+
item.rating && /* @__PURE__ */ jsx19(Rating, { value: item.rating, readOnly: true, size: "sm", color: "primary" }),
|
|
654
792
|
/* @__PURE__ */ jsxs7(Group4, { gap: 4, align: "flex-start", children: [
|
|
655
|
-
/* @__PURE__ */
|
|
656
|
-
/* @__PURE__ */
|
|
793
|
+
/* @__PURE__ */ jsx19(SdTitle.Display, { c: "primary.6", lh: 0.8, "aria-hidden": true, children: "\u201C" }),
|
|
794
|
+
/* @__PURE__ */ jsx19(Stack7, { gap: "xs", style: { flex: 1 }, children: item.lines.map((line, i) => /* @__PURE__ */ jsx19(SdText.Body, { children: line }, i)) })
|
|
657
795
|
] }),
|
|
658
|
-
/* @__PURE__ */
|
|
796
|
+
/* @__PURE__ */ jsx19(AuthorRow, { item })
|
|
659
797
|
] }) }));
|
|
660
798
|
}
|
|
661
799
|
function Grid({ items, cols = { base: 1, sm: 2, md: 3 } }) {
|
|
662
|
-
return /* @__PURE__ */
|
|
800
|
+
return /* @__PURE__ */ jsx19(SimpleGrid2, { cols, spacing: "xl", style: { alignItems: "stretch" }, children: items.map((item, i) => /* @__PURE__ */ jsx19(CardTestimonial, { item }, i)) });
|
|
663
801
|
}
|
|
664
802
|
var SdTestimonial = {
|
|
665
803
|
/** 카드형 — 그리드 배치용 */
|
|
@@ -669,6 +807,9 @@ var SdTestimonial = {
|
|
|
669
807
|
/** 카드 그리드 — 여러 후기 목록 */
|
|
670
808
|
Grid
|
|
671
809
|
};
|
|
810
|
+
var SdTestimonialCard = SdTestimonial.Card;
|
|
811
|
+
var SdTestimonialStrip = SdTestimonial.Strip;
|
|
812
|
+
var SdTestimonialGrid = SdTestimonial.Grid;
|
|
672
813
|
|
|
673
814
|
// ui/molecule/PricingCard.tsx
|
|
674
815
|
import {
|
|
@@ -680,110 +821,80 @@ import {
|
|
|
680
821
|
ThemeIcon as ThemeIcon3
|
|
681
822
|
} from "@mantine/core";
|
|
682
823
|
import { IconCheck, IconX as IconX2 } from "@tabler/icons-react";
|
|
683
|
-
import { jsx as
|
|
824
|
+
import { jsx as jsx20, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
684
825
|
function Default(_a4) {
|
|
685
826
|
var _b = _a4, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
|
|
686
827
|
var _a5;
|
|
687
|
-
return /* @__PURE__ */
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
] }),
|
|
701
|
-
/* @__PURE__ */ jsxs8(Group5, { gap: 4, align: "baseline", children: [
|
|
702
|
-
/* @__PURE__ */ jsx19(SdTitle.Display, { children: item.price }),
|
|
703
|
-
item.period && /* @__PURE__ */ jsxs8(SdText.Sub, { children: [
|
|
704
|
-
"/ ",
|
|
705
|
-
item.period
|
|
706
|
-
] })
|
|
707
|
-
] }),
|
|
708
|
-
/* @__PURE__ */ jsx19(Divider, {}),
|
|
709
|
-
/* @__PURE__ */ jsx19(Stack8, { gap: "sm", children: item.features.map((f, i) => /* @__PURE__ */ jsxs8(Group5, { gap: "sm", wrap: "nowrap", children: [
|
|
710
|
-
/* @__PURE__ */ jsx19(
|
|
711
|
-
ThemeIcon3,
|
|
712
|
-
{
|
|
713
|
-
size: "xs",
|
|
714
|
-
radius: "xl",
|
|
715
|
-
color: f.included ? "primary" : "slate",
|
|
716
|
-
variant: f.included ? "filled" : "subtle",
|
|
717
|
-
children: f.included ? /* @__PURE__ */ jsx19(IconCheck, { size: 12 }) : /* @__PURE__ */ jsx19(IconX2, { size: 12 })
|
|
718
|
-
}
|
|
719
|
-
),
|
|
720
|
-
/* @__PURE__ */ jsx19(
|
|
721
|
-
SdText.Body,
|
|
722
|
-
{
|
|
723
|
-
fz: "sm",
|
|
724
|
-
c: f.included ? "slate.7" : "slate.4",
|
|
725
|
-
children: f.text
|
|
726
|
-
}
|
|
727
|
-
)
|
|
728
|
-
] }, i)) }),
|
|
729
|
-
/* @__PURE__ */ jsx19(SdButton.Outline, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a5 = item.ctaLabel) != null ? _a5 : "\uC2DC\uC791\uD558\uAE30" })
|
|
828
|
+
return /* @__PURE__ */ jsx20(Card5, __spreadProps(__spreadValues({ withBorder: true, style: { position: "relative" } }, cardProps), { children: /* @__PURE__ */ jsxs8(Stack8, { gap: "xl", children: [
|
|
829
|
+
/* @__PURE__ */ jsxs8(Stack8, { gap: "xs", children: [
|
|
830
|
+
/* @__PURE__ */ jsxs8(Group5, { justify: "space-between", align: "flex-start", children: [
|
|
831
|
+
/* @__PURE__ */ jsx20(SdTitle.Card, { children: item.name }),
|
|
832
|
+
item.isPopular && /* @__PURE__ */ jsx20(SdBadge.Primary, { children: "\uCD94\uCC9C" })
|
|
833
|
+
] }),
|
|
834
|
+
item.description && /* @__PURE__ */ jsx20(SdText.Sub, { children: item.description })
|
|
835
|
+
] }),
|
|
836
|
+
/* @__PURE__ */ jsxs8(Group5, { gap: 4, align: "baseline", children: [
|
|
837
|
+
/* @__PURE__ */ jsx20(SdTitle.Display, { children: item.price }),
|
|
838
|
+
item.period && /* @__PURE__ */ jsxs8(SdText.Sub, { children: [
|
|
839
|
+
"/ ",
|
|
840
|
+
item.period
|
|
730
841
|
] })
|
|
731
|
-
})
|
|
732
|
-
|
|
842
|
+
] }),
|
|
843
|
+
/* @__PURE__ */ jsx20(Divider, {}),
|
|
844
|
+
/* @__PURE__ */ jsx20(Stack8, { gap: "sm", children: item.features.map((f, i) => /* @__PURE__ */ jsxs8(Group5, { gap: "sm", wrap: "nowrap", children: [
|
|
845
|
+
/* @__PURE__ */ jsx20(
|
|
846
|
+
ThemeIcon3,
|
|
847
|
+
{
|
|
848
|
+
size: "xs",
|
|
849
|
+
radius: "xl",
|
|
850
|
+
color: f.included ? "primary" : "slate",
|
|
851
|
+
variant: f.included ? "filled" : "subtle",
|
|
852
|
+
children: f.included ? /* @__PURE__ */ jsx20(IconCheck, { size: 12 }) : /* @__PURE__ */ jsx20(IconX2, { size: 12 })
|
|
853
|
+
}
|
|
854
|
+
),
|
|
855
|
+
/* @__PURE__ */ jsx20(SdText.Body, { fz: "sm", c: f.included ? "slate.7" : "slate.4", children: f.text })
|
|
856
|
+
] }, i)) }),
|
|
857
|
+
/* @__PURE__ */ jsx20(SdButton.Outline, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a5 = item.ctaLabel) != null ? _a5 : "\uC2DC\uC791\uD558\uAE30" })
|
|
858
|
+
] }) }));
|
|
733
859
|
}
|
|
734
860
|
function Featured(_a4) {
|
|
735
861
|
var _b = _a4, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
|
|
736
862
|
var _a5;
|
|
737
|
-
return /* @__PURE__ */
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
] }),
|
|
751
|
-
/* @__PURE__ */ jsxs8(Group5, { gap: 4, align: "baseline", children: [
|
|
752
|
-
/* @__PURE__ */ jsx19(SdTitle.Display, { c: "white", children: item.price }),
|
|
753
|
-
item.period && /* @__PURE__ */ jsxs8(SdText.Body, { c: "primary.2", children: [
|
|
754
|
-
"/ ",
|
|
755
|
-
item.period
|
|
756
|
-
] })
|
|
757
|
-
] }),
|
|
758
|
-
/* @__PURE__ */ jsx19(Divider, { color: "primary.4" }),
|
|
759
|
-
/* @__PURE__ */ jsx19(Stack8, { gap: "sm", children: item.features.map((f, i) => /* @__PURE__ */ jsxs8(Group5, { gap: "sm", wrap: "nowrap", children: [
|
|
760
|
-
/* @__PURE__ */ jsx19(
|
|
761
|
-
ThemeIcon3,
|
|
762
|
-
{
|
|
763
|
-
size: "xs",
|
|
764
|
-
radius: "xl",
|
|
765
|
-
color: "white",
|
|
766
|
-
variant: f.included ? "filled" : "subtle",
|
|
767
|
-
children: f.included ? /* @__PURE__ */ jsx19(IconCheck, { size: 12, color: "var(--mantine-color-primary-6)" }) : /* @__PURE__ */ jsx19(IconX2, { size: 12, color: "rgba(255,255,255,0.4)" })
|
|
768
|
-
}
|
|
769
|
-
),
|
|
770
|
-
/* @__PURE__ */ jsx19(
|
|
771
|
-
SdText.Body,
|
|
772
|
-
{
|
|
773
|
-
fz: "sm",
|
|
774
|
-
c: f.included ? "white" : "primary.3",
|
|
775
|
-
children: f.text
|
|
776
|
-
}
|
|
777
|
-
)
|
|
778
|
-
] }, i)) }),
|
|
779
|
-
/* @__PURE__ */ jsx19(SdButton.White, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a5 = item.ctaLabel) != null ? _a5 : "\uC2DC\uC791\uD558\uAE30" })
|
|
863
|
+
return /* @__PURE__ */ jsx20(Card5, __spreadProps(__spreadValues({ bg: "primary.6", style: { position: "relative" } }, cardProps), { children: /* @__PURE__ */ jsxs8(Stack8, { gap: "xl", children: [
|
|
864
|
+
/* @__PURE__ */ jsxs8(Stack8, { gap: "xs", children: [
|
|
865
|
+
/* @__PURE__ */ jsxs8(Group5, { justify: "space-between", align: "flex-start", children: [
|
|
866
|
+
/* @__PURE__ */ jsx20(SdTitle.Card, { c: "white", children: item.name }),
|
|
867
|
+
item.isPopular && /* @__PURE__ */ jsx20(SdBadge.Default, { c: "white", style: { borderColor: "rgba(255,255,255,0.5)" }, children: "\uCD94\uCC9C" })
|
|
868
|
+
] }),
|
|
869
|
+
item.description && /* @__PURE__ */ jsx20(SdText.Body, { c: "primary.1", children: item.description })
|
|
870
|
+
] }),
|
|
871
|
+
/* @__PURE__ */ jsxs8(Group5, { gap: 4, align: "baseline", children: [
|
|
872
|
+
/* @__PURE__ */ jsx20(SdTitle.Display, { c: "white", children: item.price }),
|
|
873
|
+
item.period && /* @__PURE__ */ jsxs8(SdText.Body, { c: "primary.2", children: [
|
|
874
|
+
"/ ",
|
|
875
|
+
item.period
|
|
780
876
|
] })
|
|
781
|
-
})
|
|
782
|
-
|
|
877
|
+
] }),
|
|
878
|
+
/* @__PURE__ */ jsx20(Divider, { color: "primary.4" }),
|
|
879
|
+
/* @__PURE__ */ jsx20(Stack8, { gap: "sm", children: item.features.map((f, i) => /* @__PURE__ */ jsxs8(Group5, { gap: "sm", wrap: "nowrap", children: [
|
|
880
|
+
/* @__PURE__ */ jsx20(
|
|
881
|
+
ThemeIcon3,
|
|
882
|
+
{
|
|
883
|
+
size: "xs",
|
|
884
|
+
radius: "xl",
|
|
885
|
+
color: "white",
|
|
886
|
+
variant: f.included ? "filled" : "subtle",
|
|
887
|
+
children: f.included ? /* @__PURE__ */ jsx20(IconCheck, { size: 12, color: "var(--mantine-color-primary-6)" }) : /* @__PURE__ */ jsx20(IconX2, { size: 12, color: "rgba(255,255,255,0.4)" })
|
|
888
|
+
}
|
|
889
|
+
),
|
|
890
|
+
/* @__PURE__ */ jsx20(SdText.Body, { fz: "sm", c: f.included ? "white" : "primary.3", children: f.text })
|
|
891
|
+
] }, i)) }),
|
|
892
|
+
/* @__PURE__ */ jsx20(SdButton.White, { fullWidth: true, onClick: () => onSelect == null ? void 0 : onSelect(item), children: (_a5 = item.ctaLabel) != null ? _a5 : "\uC2DC\uC791\uD558\uAE30" })
|
|
893
|
+
] }) }));
|
|
783
894
|
}
|
|
784
895
|
function Grid2({ items, cols = { base: 1, sm: 2, md: 3 }, onSelect }) {
|
|
785
|
-
return /* @__PURE__ */
|
|
786
|
-
(item, i) => item.isPopular ? /* @__PURE__ */
|
|
896
|
+
return /* @__PURE__ */ jsx20(SimpleGrid3, { cols, spacing: "xl", style: { alignItems: "stretch" }, children: items.map(
|
|
897
|
+
(item, i) => item.isPopular ? /* @__PURE__ */ jsx20(Featured, { item, onSelect }, i) : /* @__PURE__ */ jsx20(Default, { item, onSelect }, i)
|
|
787
898
|
) });
|
|
788
899
|
}
|
|
789
900
|
var SdPricingCard = {
|
|
@@ -794,33 +905,36 @@ var SdPricingCard = {
|
|
|
794
905
|
/** 가격 그리드 (isPopular 항목은 자동으로 Featured 처리) */
|
|
795
906
|
Grid: Grid2
|
|
796
907
|
};
|
|
908
|
+
var SdPricingCardDefault = SdPricingCard.Default;
|
|
909
|
+
var SdPricingCardFeatured = SdPricingCard.Featured;
|
|
910
|
+
var SdPricingCardGrid = SdPricingCard.Grid;
|
|
797
911
|
|
|
798
912
|
// ui/molecule/Faq.tsx
|
|
799
913
|
import { Accordion, Box as Box7, Stack as Stack9 } from "@mantine/core";
|
|
800
|
-
import { jsx as
|
|
914
|
+
import { jsx as jsx21, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
801
915
|
function Default2(_a4) {
|
|
802
916
|
var _b = _a4, { items } = _b, boxProps = __objRest(_b, ["items"]);
|
|
803
|
-
return /* @__PURE__ */
|
|
804
|
-
/* @__PURE__ */
|
|
805
|
-
/* @__PURE__ */
|
|
917
|
+
return /* @__PURE__ */ jsx21(Box7, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ jsx21(Accordion, { variant: "separated", radius: "md", children: items.map((item, i) => /* @__PURE__ */ jsxs9(Accordion.Item, { value: String(i), children: [
|
|
918
|
+
/* @__PURE__ */ jsx21(Accordion.Control, { children: /* @__PURE__ */ jsx21(SdText.Strong, { fz: "sm", children: item.question }) }),
|
|
919
|
+
/* @__PURE__ */ jsx21(Accordion.Panel, { children: /* @__PURE__ */ jsx21(SdText.Body, { fz: "sm", children: item.answer }) })
|
|
806
920
|
] }, i)) }) }));
|
|
807
921
|
}
|
|
808
922
|
function Filled(_a4) {
|
|
809
923
|
var _b = _a4, { items } = _b, boxProps = __objRest(_b, ["items"]);
|
|
810
|
-
return /* @__PURE__ */
|
|
811
|
-
/* @__PURE__ */
|
|
812
|
-
/* @__PURE__ */
|
|
924
|
+
return /* @__PURE__ */ jsx21(Box7, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ jsx21(Accordion, { variant: "filled", radius: "md", children: items.map((item, i) => /* @__PURE__ */ jsxs9(Accordion.Item, { value: String(i), children: [
|
|
925
|
+
/* @__PURE__ */ jsx21(Accordion.Control, { children: /* @__PURE__ */ jsx21(SdText.Strong, { fz: "sm", children: item.question }) }),
|
|
926
|
+
/* @__PURE__ */ jsx21(Accordion.Panel, { children: /* @__PURE__ */ jsx21(SdText.Body, { fz: "sm", children: item.answer }) })
|
|
813
927
|
] }, i)) }) }));
|
|
814
928
|
}
|
|
815
929
|
function WithHeader(_a4) {
|
|
816
930
|
var _b = _a4, { label, title, description, items } = _b, boxProps = __objRest(_b, ["label", "title", "description", "items"]);
|
|
817
931
|
return /* @__PURE__ */ jsxs9(Stack9, __spreadProps(__spreadValues({ gap: "xl" }, boxProps), { children: [
|
|
818
932
|
/* @__PURE__ */ jsxs9(Stack9, { gap: "xs", children: [
|
|
819
|
-
label && /* @__PURE__ */
|
|
820
|
-
/* @__PURE__ */
|
|
821
|
-
description && /* @__PURE__ */
|
|
933
|
+
label && /* @__PURE__ */ jsx21(SdText.Eyebrow, { children: label }),
|
|
934
|
+
/* @__PURE__ */ jsx21(SdTitle.Section, { children: title }),
|
|
935
|
+
description && /* @__PURE__ */ jsx21(SdText.Body, { children: description })
|
|
822
936
|
] }),
|
|
823
|
-
/* @__PURE__ */
|
|
937
|
+
/* @__PURE__ */ jsx21(Default2, { items })
|
|
824
938
|
] }));
|
|
825
939
|
}
|
|
826
940
|
var SdFaq = {
|
|
@@ -831,10 +945,13 @@ var SdFaq = {
|
|
|
831
945
|
/** 헤더 + 아코디언 조합 */
|
|
832
946
|
WithHeader
|
|
833
947
|
};
|
|
948
|
+
var SdFaqDefault = SdFaq.Default;
|
|
949
|
+
var SdFaqFilled = SdFaq.Filled;
|
|
950
|
+
var SdFaqWithHeader = SdFaq.WithHeader;
|
|
834
951
|
|
|
835
952
|
// ui/molecule/Cta.tsx
|
|
836
953
|
import { Box as Box8, Center as Center2, Group as Group6, Stack as Stack10 } from "@mantine/core";
|
|
837
|
-
import { jsx as
|
|
954
|
+
import { jsx as jsx22, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
838
955
|
function Banner(_a4) {
|
|
839
956
|
var _b = _a4, {
|
|
840
957
|
label,
|
|
@@ -853,34 +970,17 @@ function Banner(_a4) {
|
|
|
853
970
|
"onPrimary",
|
|
854
971
|
"onSecondary"
|
|
855
972
|
]);
|
|
856
|
-
return /* @__PURE__ */
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
description && /* @__PURE__ */ jsx21(SdText.Body, { c: "primary.2", ta: "center", children: description })
|
|
868
|
-
] }),
|
|
869
|
-
/* @__PURE__ */ jsxs10(Group6, { gap: "sm", children: [
|
|
870
|
-
/* @__PURE__ */ jsx21(SdButton.White, { size: "md", onClick: onPrimary, children: primaryLabel }),
|
|
871
|
-
secondaryLabel && /* @__PURE__ */ jsx21(
|
|
872
|
-
SdButton.Ghost,
|
|
873
|
-
{
|
|
874
|
-
size: "md",
|
|
875
|
-
c: "primary.2",
|
|
876
|
-
onClick: onSecondary,
|
|
877
|
-
children: secondaryLabel
|
|
878
|
-
}
|
|
879
|
-
)
|
|
880
|
-
] })
|
|
881
|
-
] }) })
|
|
882
|
-
})
|
|
883
|
-
);
|
|
973
|
+
return /* @__PURE__ */ jsx22(Box8, __spreadProps(__spreadValues({ bg: "primary.7", py: { base: "xl", md: 80 }, px: { base: "md", md: "xl" } }, boxProps), { children: /* @__PURE__ */ jsx22(Center2, { children: /* @__PURE__ */ jsxs10(Stack10, { gap: "xl", align: "center", maw: 600, children: [
|
|
974
|
+
/* @__PURE__ */ jsxs10(Stack10, { gap: "sm", align: "center", children: [
|
|
975
|
+
label && /* @__PURE__ */ jsx22(SdText.Eyebrow, { c: "primary.3", children: label }),
|
|
976
|
+
/* @__PURE__ */ jsx22(SdTitle.Section, { c: "white", ta: "center", children: title }),
|
|
977
|
+
description && /* @__PURE__ */ jsx22(SdText.Body, { c: "primary.2", ta: "center", children: description })
|
|
978
|
+
] }),
|
|
979
|
+
/* @__PURE__ */ jsxs10(Group6, { gap: "sm", children: [
|
|
980
|
+
/* @__PURE__ */ jsx22(SdButton.White, { size: "md", onClick: onPrimary, children: primaryLabel }),
|
|
981
|
+
secondaryLabel && /* @__PURE__ */ jsx22(SdButton.Ghost, { size: "md", c: "primary.2", onClick: onSecondary, children: secondaryLabel })
|
|
982
|
+
] })
|
|
983
|
+
] }) }) }));
|
|
884
984
|
}
|
|
885
985
|
function Subtle(_a4) {
|
|
886
986
|
var _b = _a4, {
|
|
@@ -900,7 +1000,7 @@ function Subtle(_a4) {
|
|
|
900
1000
|
"onPrimary",
|
|
901
1001
|
"onSecondary"
|
|
902
1002
|
]);
|
|
903
|
-
return /* @__PURE__ */
|
|
1003
|
+
return /* @__PURE__ */ jsx22(
|
|
904
1004
|
Box8,
|
|
905
1005
|
__spreadProps(__spreadValues({
|
|
906
1006
|
bg: "primary.0",
|
|
@@ -908,15 +1008,15 @@ function Subtle(_a4) {
|
|
|
908
1008
|
px: { base: "md", md: "xl" },
|
|
909
1009
|
style: { borderRadius: "var(--mantine-radius-lg)" }
|
|
910
1010
|
}, boxProps), {
|
|
911
|
-
children: /* @__PURE__ */
|
|
1011
|
+
children: /* @__PURE__ */ jsx22(Center2, { children: /* @__PURE__ */ jsxs10(Stack10, { gap: "lg", align: "center", maw: 560, children: [
|
|
912
1012
|
/* @__PURE__ */ jsxs10(Stack10, { gap: "sm", align: "center", children: [
|
|
913
|
-
label && /* @__PURE__ */
|
|
914
|
-
/* @__PURE__ */
|
|
915
|
-
description && /* @__PURE__ */
|
|
1013
|
+
label && /* @__PURE__ */ jsx22(SdText.Eyebrow, { children: label }),
|
|
1014
|
+
/* @__PURE__ */ jsx22(SdTitle.Section, { ta: "center", children: title }),
|
|
1015
|
+
description && /* @__PURE__ */ jsx22(SdText.Body, { ta: "center", children: description })
|
|
916
1016
|
] }),
|
|
917
1017
|
/* @__PURE__ */ jsxs10(Group6, { gap: "sm", children: [
|
|
918
|
-
/* @__PURE__ */
|
|
919
|
-
secondaryLabel && /* @__PURE__ */
|
|
1018
|
+
/* @__PURE__ */ jsx22(SdButton.Primary, { size: "md", onClick: onPrimary, children: primaryLabel }),
|
|
1019
|
+
secondaryLabel && /* @__PURE__ */ jsx22(SdButton.Outline, { size: "md", onClick: onSecondary, children: secondaryLabel })
|
|
920
1020
|
] })
|
|
921
1021
|
] }) })
|
|
922
1022
|
})
|
|
@@ -940,7 +1040,7 @@ function Inline(_a4) {
|
|
|
940
1040
|
"onPrimary",
|
|
941
1041
|
"onSecondary"
|
|
942
1042
|
]);
|
|
943
|
-
return /* @__PURE__ */
|
|
1043
|
+
return /* @__PURE__ */ jsx22(
|
|
944
1044
|
Box8,
|
|
945
1045
|
__spreadProps(__spreadValues({
|
|
946
1046
|
py: { base: "xl", md: 48 },
|
|
@@ -952,13 +1052,13 @@ function Inline(_a4) {
|
|
|
952
1052
|
}, boxProps), {
|
|
953
1053
|
children: /* @__PURE__ */ jsxs10(Group6, { justify: "space-between", align: "center", gap: "xl", children: [
|
|
954
1054
|
/* @__PURE__ */ jsxs10(Stack10, { gap: "xs", style: { flex: 1 }, children: [
|
|
955
|
-
label && /* @__PURE__ */
|
|
956
|
-
/* @__PURE__ */
|
|
957
|
-
description && /* @__PURE__ */
|
|
1055
|
+
label && /* @__PURE__ */ jsx22(SdText.Eyebrow, { children: label }),
|
|
1056
|
+
/* @__PURE__ */ jsx22(SdTitle.Card, { children: title }),
|
|
1057
|
+
description && /* @__PURE__ */ jsx22(SdText.Sub, { children: description })
|
|
958
1058
|
] }),
|
|
959
1059
|
/* @__PURE__ */ jsxs10(Group6, { gap: "sm", wrap: "nowrap", children: [
|
|
960
|
-
/* @__PURE__ */
|
|
961
|
-
secondaryLabel && /* @__PURE__ */
|
|
1060
|
+
/* @__PURE__ */ jsx22(SdButton.Primary, { size: "md", onClick: onPrimary, children: primaryLabel }),
|
|
1061
|
+
secondaryLabel && /* @__PURE__ */ jsx22(SdButton.Outline, { size: "md", onClick: onSecondary, children: secondaryLabel })
|
|
962
1062
|
] })
|
|
963
1063
|
] })
|
|
964
1064
|
})
|
|
@@ -972,35 +1072,27 @@ var SdCta = {
|
|
|
972
1072
|
/** 좌우 분할 인라인 CTA */
|
|
973
1073
|
Inline
|
|
974
1074
|
};
|
|
1075
|
+
var SdCtaBanner = SdCta.Banner;
|
|
1076
|
+
var SdCtaSubtle = SdCta.Subtle;
|
|
1077
|
+
var SdCtaInline = SdCta.Inline;
|
|
975
1078
|
|
|
976
1079
|
// ui/molecule/Solution.tsx
|
|
977
1080
|
import { useState } from "react";
|
|
978
|
-
import {
|
|
979
|
-
Button as Button2,
|
|
980
|
-
Divider as Divider2,
|
|
981
|
-
Group as Group7,
|
|
982
|
-
Stack as Stack12,
|
|
983
|
-
ThemeIcon as ThemeIcon4
|
|
984
|
-
} from "@mantine/core";
|
|
1081
|
+
import { Button as Button2, Divider as Divider2, Group as Group7, Stack as Stack12, ThemeIcon as ThemeIcon4 } from "@mantine/core";
|
|
985
1082
|
import Link3 from "next/link";
|
|
986
1083
|
|
|
987
1084
|
// ui/molecule/SolutionCard.tsx
|
|
988
|
-
import {
|
|
989
|
-
Button,
|
|
990
|
-
Card as Card6,
|
|
991
|
-
SimpleGrid as SimpleGrid4,
|
|
992
|
-
Stack as Stack11
|
|
993
|
-
} from "@mantine/core";
|
|
1085
|
+
import { Button, Card as Card6, SimpleGrid as SimpleGrid4, Stack as Stack11 } from "@mantine/core";
|
|
994
1086
|
import Link2 from "next/link";
|
|
995
|
-
import { jsx as
|
|
1087
|
+
import { jsx as jsx23, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
996
1088
|
function SolutionCardItem(_a4) {
|
|
997
1089
|
var _b = _a4, { item, onSelect } = _b, cardProps = __objRest(_b, ["item", "onSelect"]);
|
|
998
1090
|
var _a5, _b2;
|
|
999
|
-
return /* @__PURE__ */
|
|
1091
|
+
return /* @__PURE__ */ jsx23(Card6, __spreadProps(__spreadValues({ withBorder: true }, cardProps), { children: /* @__PURE__ */ jsxs11(Stack11, { gap: "md", children: [
|
|
1000
1092
|
item.icon,
|
|
1001
|
-
/* @__PURE__ */
|
|
1002
|
-
/* @__PURE__ */
|
|
1003
|
-
/* @__PURE__ */
|
|
1093
|
+
/* @__PURE__ */ jsx23(SdBadge.Primary, { children: item.category }),
|
|
1094
|
+
/* @__PURE__ */ jsx23(SdTitle.Card, { children: item.title }),
|
|
1095
|
+
/* @__PURE__ */ jsx23(SdText.Body, { children: item.description }),
|
|
1004
1096
|
item.href ? /* @__PURE__ */ jsxs11(Button, { variant: "subtle", color: "slate", component: Link2, href: item.href, children: [
|
|
1005
1097
|
(_a5 = item.ctaLabel) != null ? _a5 : "\uC790\uC138\uD788 \uBCF4\uAE30",
|
|
1006
1098
|
" \u2192"
|
|
@@ -1011,7 +1103,7 @@ function SolutionCardItem(_a4) {
|
|
|
1011
1103
|
] }) }));
|
|
1012
1104
|
}
|
|
1013
1105
|
function Grid3({ items, cols = { base: 1, sm: 2, md: 3 }, onSelect }) {
|
|
1014
|
-
return /* @__PURE__ */
|
|
1106
|
+
return /* @__PURE__ */ jsx23(SimpleGrid4, { cols, spacing: "xl", children: items.map((item, i) => /* @__PURE__ */ jsx23(SolutionCardItem, { item, onSelect }, i)) });
|
|
1015
1107
|
}
|
|
1016
1108
|
var SdSolutionCard = {
|
|
1017
1109
|
/** 단일 compact 카드 */
|
|
@@ -1019,29 +1111,31 @@ var SdSolutionCard = {
|
|
|
1019
1111
|
/** 카드 그리드 */
|
|
1020
1112
|
Grid: Grid3
|
|
1021
1113
|
};
|
|
1114
|
+
var SdSolutionCardItem = SdSolutionCard.Item;
|
|
1115
|
+
var SdSolutionCardGrid = SdSolutionCard.Grid;
|
|
1022
1116
|
|
|
1023
1117
|
// ui/molecule/Solution.tsx
|
|
1024
|
-
import { jsx as
|
|
1118
|
+
import { jsx as jsx24, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1025
1119
|
function Filtered({ items, allLabel = "\uC804\uCCB4", cols, onSelect }) {
|
|
1026
1120
|
const categories = ["all", ...Array.from(new Set(items.map((i) => i.category)))];
|
|
1027
1121
|
const [active, setActive] = useState("all");
|
|
1028
1122
|
const filtered = active === "all" ? items : items.filter((i) => i.category === active);
|
|
1029
1123
|
return /* @__PURE__ */ jsxs12(Stack12, { gap: "xl", children: [
|
|
1030
|
-
/* @__PURE__ */
|
|
1031
|
-
/* @__PURE__ */
|
|
1124
|
+
/* @__PURE__ */ jsx24(SdTabs.Pills, { value: active, onChange: (v) => setActive(v != null ? v : "all"), children: /* @__PURE__ */ jsx24(SdTabs.Pills.List, { children: categories.map((cat) => /* @__PURE__ */ jsx24(SdTabs.Pills.Tab, { value: cat, children: cat === "all" ? allLabel : cat }, cat)) }) }),
|
|
1125
|
+
/* @__PURE__ */ jsx24(SdSolutionCard.Grid, { items: filtered, cols, onSelect })
|
|
1032
1126
|
] });
|
|
1033
1127
|
}
|
|
1034
1128
|
function List({ items, onSelect }) {
|
|
1035
|
-
return /* @__PURE__ */
|
|
1129
|
+
return /* @__PURE__ */ jsx24(Stack12, { gap: 0, children: items.map((item, i) => {
|
|
1036
1130
|
var _a4, _b;
|
|
1037
1131
|
return /* @__PURE__ */ jsxs12("div", { children: [
|
|
1038
|
-
i > 0 && /* @__PURE__ */
|
|
1132
|
+
i > 0 && /* @__PURE__ */ jsx24(Divider2, {}),
|
|
1039
1133
|
/* @__PURE__ */ jsxs12(Group7, { align: "flex-start", py: "lg", gap: "lg", children: [
|
|
1040
|
-
item.icon && /* @__PURE__ */
|
|
1134
|
+
item.icon && /* @__PURE__ */ jsx24(ThemeIcon4, { variant: "light", color: "primary", size: "xl", radius: "md", children: item.icon }),
|
|
1041
1135
|
/* @__PURE__ */ jsxs12(Stack12, { gap: "xs", style: { flex: 1 }, children: [
|
|
1042
|
-
/* @__PURE__ */
|
|
1043
|
-
/* @__PURE__ */
|
|
1044
|
-
/* @__PURE__ */
|
|
1136
|
+
/* @__PURE__ */ jsx24(SdBadge.Primary, { children: item.category }),
|
|
1137
|
+
/* @__PURE__ */ jsx24(SdTitle.Card, { children: item.title }),
|
|
1138
|
+
/* @__PURE__ */ jsx24(SdText.Body, { children: item.description }),
|
|
1045
1139
|
item.href ? /* @__PURE__ */ jsxs12(
|
|
1046
1140
|
Button2,
|
|
1047
1141
|
{
|
|
@@ -1077,10 +1171,12 @@ var SdSolution = {
|
|
|
1077
1171
|
/** 수평 리스트 레이아웃 (상세 탐색용) */
|
|
1078
1172
|
List
|
|
1079
1173
|
};
|
|
1174
|
+
var SdSolutionFiltered = SdSolution.Filtered;
|
|
1175
|
+
var SdSolutionList = SdSolution.List;
|
|
1080
1176
|
|
|
1081
1177
|
// ui/molecule/Clients.tsx
|
|
1082
1178
|
import { Anchor, Box as Box9, SimpleGrid as SimpleGrid5, Tooltip } from "@mantine/core";
|
|
1083
|
-
import { jsx as
|
|
1179
|
+
import { jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1084
1180
|
var grayStyle = {
|
|
1085
1181
|
filter: "grayscale(1) opacity(0.5)",
|
|
1086
1182
|
transition: "filter 0.25s"
|
|
@@ -1089,7 +1185,7 @@ var colorStyle = {
|
|
|
1089
1185
|
filter: "grayscale(0) opacity(1)"
|
|
1090
1186
|
};
|
|
1091
1187
|
function LogoImage({ client, height }) {
|
|
1092
|
-
return /* @__PURE__ */
|
|
1188
|
+
return /* @__PURE__ */ jsx25(Tooltip, { label: client.name, withArrow: true, children: /* @__PURE__ */ jsx25(Anchor, { href: client.url, target: "_blank", rel: "noopener noreferrer", children: /* @__PURE__ */ jsx25(
|
|
1093
1189
|
"img",
|
|
1094
1190
|
{
|
|
1095
1191
|
src: client.logo,
|
|
@@ -1105,14 +1201,26 @@ function Grid4({
|
|
|
1105
1201
|
cols = { base: 2, sm: 3, md: 4, lg: 6 },
|
|
1106
1202
|
logoHeight = 40
|
|
1107
1203
|
}) {
|
|
1108
|
-
return /* @__PURE__ */
|
|
1204
|
+
return /* @__PURE__ */ jsx25(SimpleGrid5, { cols, spacing: "xl", children: items.map((client, i) => /* @__PURE__ */ jsx25(
|
|
1205
|
+
Box9,
|
|
1206
|
+
{
|
|
1207
|
+
style: {
|
|
1208
|
+
display: "flex",
|
|
1209
|
+
alignItems: "center",
|
|
1210
|
+
justifyContent: "center",
|
|
1211
|
+
padding: "12px 8px"
|
|
1212
|
+
},
|
|
1213
|
+
children: /* @__PURE__ */ jsx25(LogoImage, { client, height: logoHeight })
|
|
1214
|
+
},
|
|
1215
|
+
i
|
|
1216
|
+
)) });
|
|
1109
1217
|
}
|
|
1110
1218
|
var KEYFRAME = `@keyframes sd-clients-marquee { from { transform: translateX(0) } to { transform: translateX(-50%) } }`;
|
|
1111
1219
|
function Marquee({ items, speed = 40, logoHeight = 36, gap = 64 }) {
|
|
1112
1220
|
const doubled = [...items, ...items];
|
|
1113
1221
|
return /* @__PURE__ */ jsxs13(Box9, { style: { overflow: "hidden" }, children: [
|
|
1114
|
-
/* @__PURE__ */
|
|
1115
|
-
/* @__PURE__ */
|
|
1222
|
+
/* @__PURE__ */ jsx25("style", { children: KEYFRAME }),
|
|
1223
|
+
/* @__PURE__ */ jsx25(
|
|
1116
1224
|
Box9,
|
|
1117
1225
|
{
|
|
1118
1226
|
style: {
|
|
@@ -1123,12 +1231,14 @@ function Marquee({ items, speed = 40, logoHeight = 36, gap = 64 }) {
|
|
|
1123
1231
|
animation: `sd-clients-marquee ${speed}s linear infinite`
|
|
1124
1232
|
},
|
|
1125
1233
|
onMouseEnter: (e) => {
|
|
1234
|
+
;
|
|
1126
1235
|
e.currentTarget.style.animationPlayState = "paused";
|
|
1127
1236
|
},
|
|
1128
1237
|
onMouseLeave: (e) => {
|
|
1238
|
+
;
|
|
1129
1239
|
e.currentTarget.style.animationPlayState = "running";
|
|
1130
1240
|
},
|
|
1131
|
-
children: doubled.map((client, i) => /* @__PURE__ */
|
|
1241
|
+
children: doubled.map((client, i) => /* @__PURE__ */ jsx25(LogoImage, { client, height: logoHeight }, i))
|
|
1132
1242
|
}
|
|
1133
1243
|
)
|
|
1134
1244
|
] });
|
|
@@ -1145,10 +1255,10 @@ var SdClientsMarquee = Marquee;
|
|
|
1145
1255
|
// ui/molecule/Map.tsx
|
|
1146
1256
|
import { useState as useState2 } from "react";
|
|
1147
1257
|
import { Box as Box10, Stack as Stack13 } from "@mantine/core";
|
|
1148
|
-
import { jsx as
|
|
1258
|
+
import { jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1149
1259
|
function MapFrame({ address, height }) {
|
|
1150
1260
|
return /* @__PURE__ */ jsxs14(Stack13, { gap: "xs", children: [
|
|
1151
|
-
/* @__PURE__ */
|
|
1261
|
+
/* @__PURE__ */ jsx26(Box10, { style: { borderRadius: "var(--mantine-radius-md)", overflow: "hidden", height }, children: /* @__PURE__ */ jsx26(
|
|
1152
1262
|
"iframe",
|
|
1153
1263
|
{
|
|
1154
1264
|
src: address.embbedUrl,
|
|
@@ -1172,18 +1282,18 @@ function MapFrame({ address, height }) {
|
|
|
1172
1282
|
function Single(_a4) {
|
|
1173
1283
|
var _b = _a4, { address, height = 400 } = _b, boxProps = __objRest(_b, ["address", "height"]);
|
|
1174
1284
|
if (!address.embbedUrl) return null;
|
|
1175
|
-
return /* @__PURE__ */
|
|
1285
|
+
return /* @__PURE__ */ jsx26(Box10, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ jsx26(MapFrame, { address, height }) }));
|
|
1176
1286
|
}
|
|
1177
1287
|
function Tabs2({ addresses, height = 400 }) {
|
|
1178
1288
|
var _a4, _b, _c;
|
|
1179
1289
|
const mapped = addresses.filter((a) => a.embbedUrl);
|
|
1180
1290
|
const [active, setActive] = useState2((_b = (_a4 = mapped[0]) == null ? void 0 : _a4.label) != null ? _b : "");
|
|
1181
1291
|
if (mapped.length === 0) return null;
|
|
1182
|
-
if (mapped.length === 1) return /* @__PURE__ */
|
|
1292
|
+
if (mapped.length === 1) return /* @__PURE__ */ jsx26(MapFrame, { address: mapped[0], height });
|
|
1183
1293
|
const current = (_c = mapped.find((a) => a.label === active)) != null ? _c : mapped[0];
|
|
1184
1294
|
return /* @__PURE__ */ jsxs14(Stack13, { gap: "md", children: [
|
|
1185
|
-
/* @__PURE__ */
|
|
1186
|
-
/* @__PURE__ */
|
|
1295
|
+
/* @__PURE__ */ jsx26(SdTabs.Pills, { value: active, onChange: (v) => setActive(v != null ? v : mapped[0].label), children: /* @__PURE__ */ jsx26(SdTabs.Pills.List, { children: mapped.map((addr) => /* @__PURE__ */ jsx26(SdTabs.Pills.Tab, { value: addr.label, children: addr.label }, addr.label)) }) }),
|
|
1296
|
+
/* @__PURE__ */ jsx26(MapFrame, { address: current, height })
|
|
1187
1297
|
] });
|
|
1188
1298
|
}
|
|
1189
1299
|
var SdMap = {
|
|
@@ -1199,7 +1309,7 @@ var SdMapTabs = Tabs2;
|
|
|
1199
1309
|
import { Carousel } from "@mantine/carousel";
|
|
1200
1310
|
import { Anchor as Anchor2, Box as Box11, Group as Group8, Stack as Stack14 } from "@mantine/core";
|
|
1201
1311
|
import { IconArrowNarrowRight } from "@tabler/icons-react";
|
|
1202
|
-
import { Fragment as Fragment3, jsx as
|
|
1312
|
+
import { Fragment as Fragment3, jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1203
1313
|
var variantMap = {
|
|
1204
1314
|
primary: SdButton.Primary,
|
|
1205
1315
|
secondary: SdButton.Secondary,
|
|
@@ -1209,12 +1319,12 @@ var variantMap = {
|
|
|
1209
1319
|
function CtaButton({ cta }) {
|
|
1210
1320
|
var _a4;
|
|
1211
1321
|
const Button3 = variantMap[(_a4 = cta.variant) != null ? _a4 : "primary"];
|
|
1212
|
-
return /* @__PURE__ */
|
|
1322
|
+
return /* @__PURE__ */ jsx27(Anchor2, { href: cta.href, underline: "never", children: cta.icon ? /* @__PURE__ */ jsx27(Button3, { size: "md", rightSection: /* @__PURE__ */ jsx27(IconArrowNarrowRight, {}), children: cta.label }) : /* @__PURE__ */ jsx27(Button3, { size: "md", children: cta.label }) });
|
|
1213
1323
|
}
|
|
1214
1324
|
function HeroCarousel({ slides, children }) {
|
|
1215
|
-
if (children) return /* @__PURE__ */
|
|
1325
|
+
if (children) return /* @__PURE__ */ jsx27(Fragment3, { children });
|
|
1216
1326
|
const filterdSlides = filterAndSort(slides);
|
|
1217
|
-
return /* @__PURE__ */
|
|
1327
|
+
return /* @__PURE__ */ jsx27(Carousel, { withIndicators: true, height: "60svh", children: filterdSlides.map((slide, i) => /* @__PURE__ */ jsx27(Carousel.Slide, { children: /* @__PURE__ */ jsx27(
|
|
1218
1328
|
Box11,
|
|
1219
1329
|
{
|
|
1220
1330
|
style: {
|
|
@@ -1227,7 +1337,7 @@ function HeroCarousel({ slides, children }) {
|
|
|
1227
1337
|
justifyContent: "center"
|
|
1228
1338
|
},
|
|
1229
1339
|
children: /* @__PURE__ */ jsxs15(Stack14, { align: "center", style: { textAlign: "center", maxWidth: 780 }, px: "xl", children: [
|
|
1230
|
-
/* @__PURE__ */
|
|
1340
|
+
/* @__PURE__ */ jsx27(
|
|
1231
1341
|
SdTextBox.Hero,
|
|
1232
1342
|
{
|
|
1233
1343
|
title: slide.title,
|
|
@@ -1236,137 +1346,202 @@ function HeroCarousel({ slides, children }) {
|
|
|
1236
1346
|
align: "center"
|
|
1237
1347
|
}
|
|
1238
1348
|
),
|
|
1239
|
-
slide.ctas && slide.ctas.length > 0 && /* @__PURE__ */
|
|
1349
|
+
slide.ctas && slide.ctas.length > 0 && /* @__PURE__ */ jsx27(Group8, { gap: "sm", mt: "md", children: slide.ctas.map((cta, i2) => /* @__PURE__ */ jsx27(CtaButton, { cta }, cta.href)) })
|
|
1240
1350
|
] })
|
|
1241
1351
|
}
|
|
1242
1352
|
) }, i)) });
|
|
1243
1353
|
}
|
|
1244
1354
|
|
|
1245
1355
|
// ui/organism/Header.tsx
|
|
1246
|
-
import {
|
|
1247
|
-
import { useDisclosure } from "@mantine/hooks";
|
|
1248
|
-
import { Fragment as Fragment4, jsx as
|
|
1249
|
-
|
|
1356
|
+
import { Box as Box12, Burger, Drawer, Group as Group9, NavLink, Stack as Stack15 } from "@mantine/core";
|
|
1357
|
+
import { useDisclosure, useFocusWithin, useHover, useMergedRef } from "@mantine/hooks";
|
|
1358
|
+
import { Fragment as Fragment4, jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1359
|
+
var BAR_HEIGHT = 60;
|
|
1360
|
+
function SdHeader({ navItems, loginFlag }) {
|
|
1250
1361
|
const [opened, { toggle, close }] = useDisclosure();
|
|
1251
|
-
const
|
|
1362
|
+
const visibleItems = filterAndSort(navItems);
|
|
1363
|
+
const topItems = visibleItems.filter((item) => !item.parentId);
|
|
1364
|
+
const childrenOf = (parentId) => visibleItems.filter((item) => item.parentId === parentId);
|
|
1365
|
+
const hasAnyChildren = visibleItems.some((item) => item.parentId);
|
|
1366
|
+
const { hovered, ref: hoverRef } = useHover();
|
|
1367
|
+
const { focused, ref: focusRef } = useFocusWithin();
|
|
1368
|
+
const rootRef = useMergedRef(hoverRef, focusRef);
|
|
1369
|
+
const expanded = hasAnyChildren && (hovered || focused);
|
|
1252
1370
|
return /* @__PURE__ */ jsxs16(Fragment4, { children: [
|
|
1253
|
-
/* @__PURE__ */
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1371
|
+
/* @__PURE__ */ jsx28(
|
|
1372
|
+
Box12,
|
|
1373
|
+
{
|
|
1374
|
+
ref: rootRef,
|
|
1375
|
+
pos: "relative",
|
|
1376
|
+
bg: "var(--mantine-color-body)",
|
|
1377
|
+
style: {
|
|
1378
|
+
boxShadow: expanded ? "var(--mantine-shadow-md)" : void 0,
|
|
1379
|
+
borderBottom: expanded ? "1px solid var(--mantine-color-slate-2)" : void 0,
|
|
1380
|
+
transition: "box-shadow 0.15s"
|
|
1381
|
+
},
|
|
1382
|
+
children: /* @__PURE__ */ jsx28(SdContainer, { children: /* @__PURE__ */ jsxs16(Group9, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
|
|
1383
|
+
/* @__PURE__ */ jsx28(Group9, { h: BAR_HEIGHT, align: "center", children: /* @__PURE__ */ jsx28(Logo, {}) }),
|
|
1384
|
+
/* @__PURE__ */ jsx28(Group9, { gap: "xl", align: "flex-start", wrap: "nowrap", visibleFrom: "sm", children: topItems.map((item) => {
|
|
1385
|
+
const kids = childrenOf(item.id);
|
|
1386
|
+
return /* @__PURE__ */ jsxs16(Stack15, { gap: 0, align: "center", children: [
|
|
1387
|
+
/* @__PURE__ */ jsx28(Group9, { h: BAR_HEIGHT, align: "center", children: item.href ? /* @__PURE__ */ jsx28(SdLink.Body, { href: item.href, children: item.label }) : /* @__PURE__ */ jsx28(SdText.Strong, { children: item.label }) }),
|
|
1388
|
+
kids.length > 0 && /*
|
|
1389
|
+
Mantine Collapse를 쓰지 않는다 — 접힐 때 display:none이 되어
|
|
1390
|
+
하위 링크가 폭 계산에서 빠졌다가 펼칠 때 다시 들어오면서
|
|
1391
|
+
컬럼 폭(=상단 nav 간격)이 튄다.
|
|
1392
|
+
height 0 + overflow hidden은 폭 기여를 유지하므로 간격이 고정된다.
|
|
1393
|
+
visibility:hidden이 접힌 상태의 링크를 탭 순서에서도 빼준다.
|
|
1394
|
+
*/
|
|
1395
|
+
/* @__PURE__ */ jsx28(
|
|
1396
|
+
Box12,
|
|
1397
|
+
{
|
|
1398
|
+
"aria-hidden": !expanded,
|
|
1399
|
+
style: {
|
|
1400
|
+
height: expanded ? "auto" : 0,
|
|
1401
|
+
overflow: "hidden",
|
|
1402
|
+
opacity: expanded ? 1 : 0,
|
|
1403
|
+
visibility: expanded ? "visible" : "hidden",
|
|
1404
|
+
transition: "opacity 0.15s ease"
|
|
1405
|
+
},
|
|
1406
|
+
children: /* @__PURE__ */ jsx28(Stack15, { gap: "xs", pt: 4, pb: "lg", align: "center", children: kids.map((kid) => /* @__PURE__ */ jsx28(SdLink.Sub, { href: kid.href, children: kid.label }, kid.id)) })
|
|
1407
|
+
}
|
|
1408
|
+
)
|
|
1409
|
+
] }, item.id);
|
|
1410
|
+
}) }),
|
|
1411
|
+
/* @__PURE__ */ jsxs16(Group9, { h: BAR_HEIGHT, align: "center", gap: "sm", wrap: "nowrap", children: [
|
|
1412
|
+
/* @__PURE__ */ jsx28(Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
|
|
1413
|
+
loginFlag && /* @__PURE__ */ jsx28(Group9, { gap: "sm", visibleFrom: "sm", children: /* @__PURE__ */ jsx28(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1414
|
+
] })
|
|
1415
|
+
] }) })
|
|
1416
|
+
}
|
|
1417
|
+
),
|
|
1418
|
+
/* @__PURE__ */ jsx28(Drawer, { opened, onClose: close, hiddenFrom: "sm", size: "xs", children: /* @__PURE__ */ jsxs16(Stack15, { gap: 0, children: [
|
|
1419
|
+
topItems.map((item) => {
|
|
1420
|
+
const kids = childrenOf(item.id);
|
|
1421
|
+
if (kids.length === 0) {
|
|
1422
|
+
return /* @__PURE__ */ jsx28(Box12, { px: "sm", py: 8, children: /* @__PURE__ */ jsx28(SdLink.Body, { href: item.href, onClick: close, children: item.label }) }, item.id);
|
|
1423
|
+
}
|
|
1424
|
+
return /* @__PURE__ */ jsx28(
|
|
1425
|
+
NavLink,
|
|
1426
|
+
{
|
|
1427
|
+
label: item.label,
|
|
1428
|
+
href: item.href,
|
|
1429
|
+
childrenOffset: 28,
|
|
1430
|
+
onClick: kids.length > 0 ? void 0 : close,
|
|
1431
|
+
children: kids.map((kid) => /* @__PURE__ */ jsx28(NavLink, { label: kid.label, href: kid.href, onClick: close }, kid.id))
|
|
1432
|
+
},
|
|
1433
|
+
item.id
|
|
1434
|
+
);
|
|
1435
|
+
}),
|
|
1436
|
+
loginFlag && /* @__PURE__ */ jsx28(Stack15, { gap: "xs", mt: "md", children: /* @__PURE__ */ jsx28(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1269
1437
|
] }) })
|
|
1270
1438
|
] });
|
|
1271
1439
|
}
|
|
1272
1440
|
|
|
1273
1441
|
// ui/organism/Footer.tsx
|
|
1274
|
-
import {
|
|
1275
|
-
import {
|
|
1442
|
+
import { ActionIcon, Box as Box13, Divider as Divider3, Flex, Grid as Grid5, Group as Group10, SimpleGrid as SimpleGrid6, Stack as Stack16 } from "@mantine/core";
|
|
1443
|
+
import {
|
|
1444
|
+
IconBrandFacebook,
|
|
1445
|
+
IconBrandGithub,
|
|
1446
|
+
IconBrandInstagram,
|
|
1447
|
+
IconBrandLinkedin,
|
|
1448
|
+
IconBrandX,
|
|
1449
|
+
IconBrandYoutube,
|
|
1450
|
+
IconWorld
|
|
1451
|
+
} from "@tabler/icons-react";
|
|
1452
|
+
import { Fragment as Fragment5, jsx as jsx29, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1276
1453
|
function FooterNavColumns({ items }) {
|
|
1277
1454
|
const topLevel = items.filter((item) => !item.parentId);
|
|
1278
1455
|
const getChildren = (parentId) => items.filter((item) => item.parentId === parentId);
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1456
|
+
const CHILD_THRESH = 4;
|
|
1457
|
+
return /* @__PURE__ */ jsx29(Fragment5, { children: topLevel.map((group) => /* @__PURE__ */ jsx29(Grid5.Col, { span: { base: 6, sm: 4, md: "auto" }, children: /* @__PURE__ */ jsxs17(Stack16, { gap: "xs", children: [
|
|
1458
|
+
/* @__PURE__ */ jsx29(SdText.Sub, { children: group.label }),
|
|
1459
|
+
getChildren(group.id).map((link, id) => {
|
|
1460
|
+
if (id >= CHILD_THRESH) return;
|
|
1461
|
+
return /* @__PURE__ */ jsx29(SdLink.Hint, { href: link.href, children: link.label }, link.id);
|
|
1462
|
+
})
|
|
1463
|
+
] }) }, group.id)) });
|
|
1464
|
+
}
|
|
1465
|
+
var SOCIAL_ICONS = {
|
|
1466
|
+
x: IconBrandX,
|
|
1467
|
+
youtube: IconBrandYoutube,
|
|
1468
|
+
instagram: IconBrandInstagram,
|
|
1469
|
+
facebook: IconBrandFacebook,
|
|
1470
|
+
linkedin: IconBrandLinkedin,
|
|
1471
|
+
github: IconBrandGithub,
|
|
1472
|
+
blog: IconWorld
|
|
1473
|
+
};
|
|
1474
|
+
function FooterSocials({ items }) {
|
|
1475
|
+
return /* @__PURE__ */ jsx29(Group10, { gap: 0, wrap: "nowrap", children: items.map((item) => {
|
|
1476
|
+
var _a4, _b;
|
|
1477
|
+
const Icon = (_a4 = SOCIAL_ICONS[item.platform]) != null ? _a4 : IconWorld;
|
|
1478
|
+
return /* @__PURE__ */ jsx29(
|
|
1479
|
+
ActionIcon,
|
|
1283
1480
|
{
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
e.currentTarget.style.color = "";
|
|
1294
|
-
},
|
|
1295
|
-
children: link.label
|
|
1481
|
+
component: "a",
|
|
1482
|
+
href: item.url,
|
|
1483
|
+
target: "_blank",
|
|
1484
|
+
rel: "noreferrer",
|
|
1485
|
+
size: "lg",
|
|
1486
|
+
color: "gray",
|
|
1487
|
+
variant: "subtle",
|
|
1488
|
+
"aria-label": (_b = item.label) != null ? _b : item.platform,
|
|
1489
|
+
children: /* @__PURE__ */ jsx29(Icon, { size: 18, stroke: 1.5 })
|
|
1296
1490
|
},
|
|
1297
|
-
|
|
1298
|
-
)
|
|
1299
|
-
|
|
1491
|
+
item.url
|
|
1492
|
+
);
|
|
1493
|
+
}) });
|
|
1494
|
+
}
|
|
1495
|
+
function InfoCell({ label, children }) {
|
|
1496
|
+
return /* @__PURE__ */ jsxs17(Group10, { gap: 6, wrap: "nowrap", align: "baseline", children: [
|
|
1497
|
+
/* @__PURE__ */ jsx29(SdText.Sub, { c: "slate.4", style: { whiteSpace: "nowrap" }, children: label }),
|
|
1498
|
+
typeof children === "string" ? /* @__PURE__ */ jsx29(SdText.Sub, { children }) : children
|
|
1499
|
+
] });
|
|
1300
1500
|
}
|
|
1301
1501
|
function FooterCompanyInfo({ company }) {
|
|
1302
1502
|
const sortedAddresses = [...company.addresses].sort((a, b) => a.order - b.order);
|
|
1303
|
-
return /* @__PURE__ */ jsxs17(
|
|
1304
|
-
/* @__PURE__ */
|
|
1305
|
-
/* @__PURE__ */
|
|
1306
|
-
/* @__PURE__ */
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
sortedAddresses.map((addr) => /* @__PURE__ */ jsxs17(Group10, { gap: "xs", wrap: "nowrap", children: [
|
|
1311
|
-
/* @__PURE__ */ jsx28(SdText.Sub, { c: "slate.4", children: "|" }),
|
|
1312
|
-
/* @__PURE__ */ jsx28(SdText.Sub, { children: addr.address })
|
|
1313
|
-
] }, addr.label)),
|
|
1314
|
-
/* @__PURE__ */ jsx28(SdText.Sub, { c: "slate.4", children: "|" }),
|
|
1315
|
-
/* @__PURE__ */ jsxs17(Anchor4, { href: `tel:${company.tel}`, fz: "xs", c: "slate.5", underline: "never", children: [
|
|
1316
|
-
"Tel ",
|
|
1317
|
-
company.tel
|
|
1318
|
-
] }),
|
|
1319
|
-
company.fax && /* @__PURE__ */ jsxs17(Fragment5, { children: [
|
|
1320
|
-
/* @__PURE__ */ jsx28(SdText.Sub, { c: "slate.4", children: "|" }),
|
|
1321
|
-
/* @__PURE__ */ jsxs17(SdText.Sub, { children: [
|
|
1322
|
-
"Fax ",
|
|
1323
|
-
company.fax
|
|
1324
|
-
] })
|
|
1325
|
-
] }),
|
|
1326
|
-
/* @__PURE__ */ jsx28(SdText.Sub, { c: "slate.4", children: "|" }),
|
|
1327
|
-
/* @__PURE__ */ jsx28(Anchor4, { href: `mailto:${company.email}`, fz: "xs", c: "slate.5", underline: "never", children: company.email })
|
|
1503
|
+
return /* @__PURE__ */ jsxs17(SimpleGrid6, { cols: { base: 2, sm: 2, md: 1 }, spacing: "md", verticalSpacing: 0, children: [
|
|
1504
|
+
/* @__PURE__ */ jsx29(InfoCell, { label: "\uC0C1\uD638", children: company.name }),
|
|
1505
|
+
/* @__PURE__ */ jsx29(InfoCell, { label: "\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638", children: company.registrationNumber }),
|
|
1506
|
+
sortedAddresses.map((addr) => /* @__PURE__ */ jsx29(InfoCell, { label: addr.label, children: addr.address }, addr.label)),
|
|
1507
|
+
/* @__PURE__ */ jsx29(InfoCell, { label: "Tel", children: /* @__PURE__ */ jsx29(SdLink.Sub, { href: `tel:${company.tel}`, children: company.tel }) }),
|
|
1508
|
+
company.fax && /* @__PURE__ */ jsx29(InfoCell, { label: "Fax", children: company.fax }),
|
|
1509
|
+
/* @__PURE__ */ jsx29(InfoCell, { label: "Email", children: /* @__PURE__ */ jsx29(SdLink.Sub, { href: `mailto:${company.email}`, children: company.email }) })
|
|
1328
1510
|
] });
|
|
1329
1511
|
}
|
|
1330
1512
|
function SdFooter({ company, navItems, policyLinks, description }) {
|
|
1331
1513
|
const visibleNav = filterAndSort(navItems);
|
|
1332
1514
|
const visiblePolicy = filterAndSort(policyLinks);
|
|
1333
|
-
return /* @__PURE__ */
|
|
1334
|
-
/* @__PURE__ */
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
visibleNav.length > 0 && /* @__PURE__ */ jsx28(Grid5.Col, { span: { base: 12, md: 8 }, children: /* @__PURE__ */ jsx28(Grid5, { style: { "--grid-gutter": "24px" }, children: /* @__PURE__ */ jsx28(FooterNavColumns, { items: visibleNav }) }) })
|
|
1515
|
+
return /* @__PURE__ */ jsx29(Box13, { component: "footer", children: /* @__PURE__ */ jsx29(SdContainer, { children: /* @__PURE__ */ jsxs17(Stack16, { children: [
|
|
1516
|
+
/* @__PURE__ */ jsx29(Logo, { size: "sm" }),
|
|
1517
|
+
description && /* @__PURE__ */ jsx29(SdText.Sub, { children: description }),
|
|
1518
|
+
/* @__PURE__ */ jsxs17(Flex, { direction: { base: "column", md: "row" }, gap: 48, align: "flex-start", children: [
|
|
1519
|
+
/* @__PURE__ */ jsx29(Box13, { flex: { base: "0 0 auto", md: "1 1 0" }, w: { base: "100%", md: "auto" }, children: /* @__PURE__ */ jsx29(FooterCompanyInfo, { company }) }),
|
|
1520
|
+
visibleNav.length > 0 && /* @__PURE__ */ jsx29(Box13, { flex: { base: "0 0 auto", md: "2 1 0" }, w: { base: "100%", md: "auto" }, children: /* @__PURE__ */ jsx29(Grid5, { style: { "--grid-gutter": "24px" }, children: /* @__PURE__ */ jsx29(FooterNavColumns, { items: visibleNav }) }) })
|
|
1340
1521
|
] }),
|
|
1341
|
-
/* @__PURE__ */
|
|
1342
|
-
/* @__PURE__ */
|
|
1343
|
-
|
|
1344
|
-
/* @__PURE__ */ jsxs17(SdText.Sub, { c: "slate.5", children: [
|
|
1522
|
+
/* @__PURE__ */ jsx29(Divider3, {}),
|
|
1523
|
+
/* @__PURE__ */ jsxs17(Group10, { justify: "space-between", wrap: "wrap", gap: "xs", children: [
|
|
1524
|
+
/* @__PURE__ */ jsxs17(SdText.Sub, { children: [
|
|
1345
1525
|
"\xA9 ",
|
|
1346
1526
|
company.copyrightYear,
|
|
1347
1527
|
" ",
|
|
1348
1528
|
company.name,
|
|
1349
1529
|
". All rights reserved."
|
|
1350
1530
|
] }),
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
href: item.href,
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
underline: "never",
|
|
1359
|
-
children: item.label
|
|
1360
|
-
},
|
|
1361
|
-
item.id
|
|
1362
|
-
)) })
|
|
1531
|
+
/* @__PURE__ */ jsxs17(Group10, { gap: "lg", wrap: "wrap", children: [
|
|
1532
|
+
visiblePolicy.length > 0 && /* @__PURE__ */ jsx29(Group10, { gap: "lg", children: visiblePolicy.map((item) => {
|
|
1533
|
+
const Link4 = item.highlight ? SdLink.Strong : SdLink.Sub;
|
|
1534
|
+
return /* @__PURE__ */ jsx29(Link4, { href: item.href, children: item.label }, item.id);
|
|
1535
|
+
}) }),
|
|
1536
|
+
company.socials && company.socials.length > 0 && /* @__PURE__ */ jsx29(FooterSocials, { items: company.socials })
|
|
1537
|
+
] })
|
|
1363
1538
|
] })
|
|
1364
|
-
] }) });
|
|
1539
|
+
] }) }) });
|
|
1365
1540
|
}
|
|
1366
1541
|
|
|
1367
1542
|
// ui/organism/FeatureSection.tsx
|
|
1368
1543
|
import { Stack as Stack17 } from "@mantine/core";
|
|
1369
|
-
import { jsx as
|
|
1544
|
+
import { jsx as jsx30, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1370
1545
|
function SdFeatureSection(_a4) {
|
|
1371
1546
|
var _b = _a4, {
|
|
1372
1547
|
label,
|
|
@@ -1383,8 +1558,8 @@ function SdFeatureSection(_a4) {
|
|
|
1383
1558
|
"cols",
|
|
1384
1559
|
"py"
|
|
1385
1560
|
]);
|
|
1386
|
-
return /* @__PURE__ */
|
|
1387
|
-
/* @__PURE__ */
|
|
1561
|
+
return /* @__PURE__ */ jsx30(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ jsxs18(Stack17, { gap: "xl", children: [
|
|
1562
|
+
/* @__PURE__ */ jsx30(
|
|
1388
1563
|
SdTextBox.Section,
|
|
1389
1564
|
{
|
|
1390
1565
|
label,
|
|
@@ -1395,13 +1570,13 @@ function SdFeatureSection(_a4) {
|
|
|
1395
1570
|
align: "center"
|
|
1396
1571
|
}
|
|
1397
1572
|
),
|
|
1398
|
-
/* @__PURE__ */
|
|
1573
|
+
/* @__PURE__ */ jsx30(SdFeatures, { items, cols })
|
|
1399
1574
|
] }) }));
|
|
1400
1575
|
}
|
|
1401
1576
|
|
|
1402
1577
|
// ui/organism/TimelineSection.tsx
|
|
1403
1578
|
import { Center as Center3, Stack as Stack18 } from "@mantine/core";
|
|
1404
|
-
import { jsx as
|
|
1579
|
+
import { jsx as jsx31, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1405
1580
|
function SdTimelineSection(_a4) {
|
|
1406
1581
|
var _b = _a4, {
|
|
1407
1582
|
label,
|
|
@@ -1416,22 +1591,15 @@ function SdTimelineSection(_a4) {
|
|
|
1416
1591
|
"items",
|
|
1417
1592
|
"py"
|
|
1418
1593
|
]);
|
|
1419
|
-
return /* @__PURE__ */
|
|
1420
|
-
/* @__PURE__ */
|
|
1421
|
-
|
|
1422
|
-
{
|
|
1423
|
-
label,
|
|
1424
|
-
title,
|
|
1425
|
-
description
|
|
1426
|
-
}
|
|
1427
|
-
),
|
|
1428
|
-
/* @__PURE__ */ jsx30(Center3, { children: /* @__PURE__ */ jsx30(SdTimeline, { items }) })
|
|
1594
|
+
return /* @__PURE__ */ jsx31(Center3, { children: /* @__PURE__ */ jsxs19(Stack18, __spreadProps(__spreadValues({ py, gap: "md" }, boxProps), { children: [
|
|
1595
|
+
/* @__PURE__ */ jsx31(SdTextBox.Section, { label, title, description }),
|
|
1596
|
+
/* @__PURE__ */ jsx31(Center3, { children: /* @__PURE__ */ jsx31(SdTimeline, { items }) })
|
|
1429
1597
|
] })) });
|
|
1430
1598
|
}
|
|
1431
1599
|
|
|
1432
1600
|
// ui/organism/StepsSection.tsx
|
|
1433
1601
|
import { Stack as Stack19 } from "@mantine/core";
|
|
1434
|
-
import { jsx as
|
|
1602
|
+
import { jsx as jsx32, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1435
1603
|
function SdStepsSection(_a4) {
|
|
1436
1604
|
var _b = _a4, {
|
|
1437
1605
|
label,
|
|
@@ -1446,17 +1614,17 @@ function SdStepsSection(_a4) {
|
|
|
1446
1614
|
"items",
|
|
1447
1615
|
"py"
|
|
1448
1616
|
]);
|
|
1449
|
-
return /* @__PURE__ */
|
|
1450
|
-
(label || title || description) && /* @__PURE__ */
|
|
1451
|
-
/* @__PURE__ */
|
|
1617
|
+
return /* @__PURE__ */ jsx32(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ jsxs20(Stack19, { gap: "xl", children: [
|
|
1618
|
+
(label || title || description) && /* @__PURE__ */ jsx32(SdTextBox.Section, { label, title, description }),
|
|
1619
|
+
/* @__PURE__ */ jsx32(SdSteps.Bubble, { items })
|
|
1452
1620
|
] }) }));
|
|
1453
1621
|
}
|
|
1454
1622
|
|
|
1455
1623
|
// ui/organism/ErrorView.tsx
|
|
1456
1624
|
import { Center as Center4, Group as Group11, Stack as Stack20, Text as Text2 } from "@mantine/core";
|
|
1457
|
-
import { jsx as
|
|
1625
|
+
import { jsx as jsx33, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
1458
1626
|
function StatusCode({ code }) {
|
|
1459
|
-
return /* @__PURE__ */
|
|
1627
|
+
return /* @__PURE__ */ jsx33(
|
|
1460
1628
|
Text2,
|
|
1461
1629
|
{
|
|
1462
1630
|
fz: 160,
|
|
@@ -1470,15 +1638,15 @@ function StatusCode({ code }) {
|
|
|
1470
1638
|
);
|
|
1471
1639
|
}
|
|
1472
1640
|
function Page({ error, onReset, onHome }) {
|
|
1473
|
-
return /* @__PURE__ */
|
|
1474
|
-
/* @__PURE__ */
|
|
1641
|
+
return /* @__PURE__ */ jsx33(Center4, { mih: "60vh", children: /* @__PURE__ */ jsx33(SdContainer, { children: /* @__PURE__ */ jsxs21(Stack20, { align: "center", gap: "lg", ta: "center", children: [
|
|
1642
|
+
/* @__PURE__ */ jsx33(StatusCode, { code: "500" }),
|
|
1475
1643
|
/* @__PURE__ */ jsxs21(Stack20, { gap: "sm", align: "center", children: [
|
|
1476
|
-
/* @__PURE__ */
|
|
1477
|
-
/* @__PURE__ */
|
|
1644
|
+
/* @__PURE__ */ jsx33(SdTitle.Section, { children: "\uC11C\uBC84\uC5D0\uC11C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4" }),
|
|
1645
|
+
/* @__PURE__ */ jsx33(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." })
|
|
1478
1646
|
] }),
|
|
1479
1647
|
/* @__PURE__ */ jsxs21(Group11, { gap: "sm", justify: "center", children: [
|
|
1480
|
-
/* @__PURE__ */
|
|
1481
|
-
onHome && /* @__PURE__ */
|
|
1648
|
+
/* @__PURE__ */ jsx33(SdButton.Primary, { onClick: onReset, children: "\uB2E4\uC2DC \uC2DC\uB3C4" }),
|
|
1649
|
+
onHome && /* @__PURE__ */ jsx33(SdButton.Ghost, { onClick: onHome, children: "\uD648\uC73C\uB85C" })
|
|
1482
1650
|
] })
|
|
1483
1651
|
] }) }) });
|
|
1484
1652
|
}
|
|
@@ -1490,15 +1658,15 @@ function NotFound({
|
|
|
1490
1658
|
},
|
|
1491
1659
|
onBack = () => window.history.back()
|
|
1492
1660
|
}) {
|
|
1493
|
-
return /* @__PURE__ */
|
|
1494
|
-
/* @__PURE__ */
|
|
1661
|
+
return /* @__PURE__ */ jsx33(Center4, { mih: "60vh", children: /* @__PURE__ */ jsx33(SdContainer, { children: /* @__PURE__ */ jsxs21(Stack20, { align: "center", gap: "lg", ta: "center", children: [
|
|
1662
|
+
/* @__PURE__ */ jsx33(StatusCode, { code: "404" }),
|
|
1495
1663
|
/* @__PURE__ */ jsxs21(Stack20, { gap: "sm", align: "center", children: [
|
|
1496
|
-
/* @__PURE__ */
|
|
1497
|
-
/* @__PURE__ */
|
|
1664
|
+
/* @__PURE__ */ jsx33(SdTitle.Section, { children: title }),
|
|
1665
|
+
/* @__PURE__ */ jsx33(SdText.Body, { maw: 480, children: description })
|
|
1498
1666
|
] }),
|
|
1499
1667
|
/* @__PURE__ */ jsxs21(Group11, { gap: "sm", justify: "center", children: [
|
|
1500
|
-
onHome && /* @__PURE__ */
|
|
1501
|
-
onBack && /* @__PURE__ */
|
|
1668
|
+
onHome && /* @__PURE__ */ jsx33(SdButton.Primary, { onClick: onHome, children: "\uD648\uC73C\uB85C" }),
|
|
1669
|
+
onBack && /* @__PURE__ */ jsx33(SdButton.Ghost, { onClick: onBack, children: "\uB4A4\uB85C \uAC00\uAE30" })
|
|
1502
1670
|
] })
|
|
1503
1671
|
] }) }) });
|
|
1504
1672
|
}
|
|
@@ -1508,127 +1676,166 @@ var SdErrorView = {
|
|
|
1508
1676
|
/** app/not-found.tsx — 404 Not Found */
|
|
1509
1677
|
NotFound
|
|
1510
1678
|
};
|
|
1679
|
+
var SdErrorViewPage = SdErrorView.Page;
|
|
1680
|
+
var SdErrorViewNotFound = SdErrorView.NotFound;
|
|
1511
1681
|
|
|
1512
1682
|
// ui/template/MainLayout.tsx
|
|
1513
1683
|
import { AppShell } from "@mantine/core";
|
|
1514
|
-
import { jsx as
|
|
1515
|
-
function MainLayout({
|
|
1684
|
+
import { jsx as jsx34, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
1685
|
+
function MainLayout({
|
|
1686
|
+
children,
|
|
1687
|
+
navItems,
|
|
1688
|
+
companyInfo,
|
|
1689
|
+
loginFlag
|
|
1690
|
+
}) {
|
|
1516
1691
|
return /* @__PURE__ */ jsxs22(AppShell, { header: { height: 60 }, children: [
|
|
1517
|
-
/* @__PURE__ */
|
|
1518
|
-
/* @__PURE__ */
|
|
1519
|
-
/* @__PURE__ */
|
|
1692
|
+
/* @__PURE__ */ jsx34(AppShell.Header, { children: /* @__PURE__ */ jsx34(SdHeader, { navItems, loginFlag }) }),
|
|
1693
|
+
/* @__PURE__ */ jsx34(AppShell.Main, { children }),
|
|
1694
|
+
/* @__PURE__ */ jsx34(SdFooter, { company: companyInfo, navItems })
|
|
1520
1695
|
] });
|
|
1521
1696
|
}
|
|
1522
1697
|
|
|
1523
1698
|
// ui/template/PageLayout.tsx
|
|
1524
|
-
import { Box as
|
|
1525
|
-
import { Fragment as Fragment6, jsx as
|
|
1699
|
+
import { Box as Box15, Divider as Divider4, Space, Stack as Stack21 } from "@mantine/core";
|
|
1700
|
+
import { Fragment as Fragment6, jsx as jsx35, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
1526
1701
|
function Content({ children }) {
|
|
1527
|
-
return /* @__PURE__ */
|
|
1702
|
+
return /* @__PURE__ */ jsx35(SdContainer, { py: "xl", children: /* @__PURE__ */ jsx35(Stack21, { gap: "xl", children }) });
|
|
1528
1703
|
}
|
|
1529
1704
|
function LayoutGap() {
|
|
1530
|
-
return /* @__PURE__ */
|
|
1705
|
+
return /* @__PURE__ */ jsx35(Space, { h: 48 });
|
|
1531
1706
|
}
|
|
1532
1707
|
function Minimal({ label, title, description, children }) {
|
|
1533
|
-
return /* @__PURE__ */
|
|
1534
|
-
/* @__PURE__ */
|
|
1535
|
-
|
|
1536
|
-
{
|
|
1537
|
-
label,
|
|
1538
|
-
title,
|
|
1539
|
-
description: description != null ? description : "",
|
|
1540
|
-
mb: "xl"
|
|
1541
|
-
}
|
|
1542
|
-
),
|
|
1543
|
-
/* @__PURE__ */ jsx34(Divider4, {}),
|
|
1708
|
+
return /* @__PURE__ */ jsx35(Fragment6, { children: /* @__PURE__ */ jsxs23(Plain2, { children: [
|
|
1709
|
+
/* @__PURE__ */ jsx35(SdTextBox.Section, { label, title, description: description != null ? description : "" }),
|
|
1710
|
+
/* @__PURE__ */ jsx35(Divider4, {}),
|
|
1544
1711
|
children
|
|
1545
1712
|
] }) });
|
|
1546
1713
|
}
|
|
1547
1714
|
function Plain2({ children }) {
|
|
1548
1715
|
return /* @__PURE__ */ jsxs23(Fragment6, { children: [
|
|
1549
|
-
/* @__PURE__ */
|
|
1550
|
-
/* @__PURE__ */
|
|
1716
|
+
/* @__PURE__ */ jsx35(LayoutGap, {}),
|
|
1717
|
+
/* @__PURE__ */ jsx35(Content, { children })
|
|
1551
1718
|
] });
|
|
1552
1719
|
}
|
|
1553
1720
|
function Image2({ image, label, title, description, children }) {
|
|
1554
1721
|
return /* @__PURE__ */ jsxs23(Fragment6, { children: [
|
|
1555
|
-
/* @__PURE__ */ jsxs23(
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
Box14,
|
|
1572
|
-
{
|
|
1573
|
-
py: 48,
|
|
1574
|
-
px: 40,
|
|
1575
|
-
maw: 420,
|
|
1576
|
-
style: {
|
|
1577
|
-
backdropFilter: "blur(24px)",
|
|
1578
|
-
WebkitBackdropFilter: "blur(24px)",
|
|
1579
|
-
background: "rgba(255,255,255,0.10)",
|
|
1580
|
-
borderRadius: "var(--mantine-radius-md)",
|
|
1581
|
-
border: "1px solid rgba(255,255,255,0.18)"
|
|
1582
|
-
},
|
|
1583
|
-
children: /* @__PURE__ */ jsx34(
|
|
1584
|
-
SdTextBox.Hero,
|
|
1722
|
+
/* @__PURE__ */ jsxs23(
|
|
1723
|
+
Box15,
|
|
1724
|
+
{
|
|
1725
|
+
style: {
|
|
1726
|
+
position: "relative",
|
|
1727
|
+
minHeight: "30svh",
|
|
1728
|
+
display: "flex",
|
|
1729
|
+
alignItems: "center",
|
|
1730
|
+
backgroundImage: image ? `url(${image})` : void 0,
|
|
1731
|
+
backgroundSize: "cover",
|
|
1732
|
+
backgroundPosition: "center",
|
|
1733
|
+
backgroundColor: "var(--mantine-color-slate-9)"
|
|
1734
|
+
},
|
|
1735
|
+
children: [
|
|
1736
|
+
/* @__PURE__ */ jsx35(
|
|
1737
|
+
Box15,
|
|
1585
1738
|
{
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1739
|
+
style: {
|
|
1740
|
+
position: "absolute",
|
|
1741
|
+
inset: 0,
|
|
1742
|
+
background: "rgba(0, 0, 0, 0.55)"
|
|
1743
|
+
}
|
|
1591
1744
|
}
|
|
1592
|
-
)
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1745
|
+
),
|
|
1746
|
+
/* @__PURE__ */ jsx35(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ jsx35(
|
|
1747
|
+
Box15,
|
|
1748
|
+
{
|
|
1749
|
+
py: 48,
|
|
1750
|
+
px: 40,
|
|
1751
|
+
maw: 420,
|
|
1752
|
+
style: {
|
|
1753
|
+
backdropFilter: "blur(24px)",
|
|
1754
|
+
WebkitBackdropFilter: "blur(24px)",
|
|
1755
|
+
background: "rgba(255,255,255,0.10)",
|
|
1756
|
+
borderRadius: "var(--mantine-radius-md)",
|
|
1757
|
+
border: "1px solid rgba(255,255,255,0.18)"
|
|
1758
|
+
},
|
|
1759
|
+
children: /* @__PURE__ */ jsx35(
|
|
1760
|
+
SdTextBox.Hero,
|
|
1761
|
+
{
|
|
1762
|
+
label,
|
|
1763
|
+
title,
|
|
1764
|
+
description,
|
|
1765
|
+
ta: "left",
|
|
1766
|
+
align: "flex-start"
|
|
1767
|
+
}
|
|
1768
|
+
)
|
|
1769
|
+
}
|
|
1770
|
+
) })
|
|
1771
|
+
]
|
|
1772
|
+
}
|
|
1773
|
+
),
|
|
1774
|
+
/* @__PURE__ */ jsx35(Content, { children })
|
|
1597
1775
|
] });
|
|
1598
1776
|
}
|
|
1599
1777
|
function Brand({ label, title, description, children }) {
|
|
1600
1778
|
return /* @__PURE__ */ jsxs23(Fragment6, { children: [
|
|
1601
|
-
/* @__PURE__ */ jsxs23(
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1779
|
+
/* @__PURE__ */ jsxs23(
|
|
1780
|
+
Box15,
|
|
1781
|
+
{
|
|
1782
|
+
style: {
|
|
1783
|
+
position: "relative",
|
|
1784
|
+
minHeight: "40svh",
|
|
1785
|
+
display: "flex",
|
|
1786
|
+
alignItems: "center",
|
|
1787
|
+
overflow: "hidden",
|
|
1788
|
+
background: "linear-gradient(135deg, var(--mantine-color-primary-8) 0%, var(--mantine-color-primary-6) 50%, var(--mantine-color-primary-4) 100%)"
|
|
1789
|
+
},
|
|
1790
|
+
children: [
|
|
1791
|
+
/* @__PURE__ */ jsx35(
|
|
1792
|
+
Box15,
|
|
1793
|
+
{
|
|
1794
|
+
style: {
|
|
1795
|
+
position: "absolute",
|
|
1796
|
+
top: -80,
|
|
1797
|
+
right: -80,
|
|
1798
|
+
width: 360,
|
|
1799
|
+
height: 360,
|
|
1800
|
+
borderRadius: "50%",
|
|
1801
|
+
background: "rgba(255,255,255,0.06)",
|
|
1802
|
+
pointerEvents: "none"
|
|
1803
|
+
}
|
|
1804
|
+
}
|
|
1805
|
+
),
|
|
1806
|
+
/* @__PURE__ */ jsx35(
|
|
1807
|
+
Box15,
|
|
1808
|
+
{
|
|
1809
|
+
style: {
|
|
1810
|
+
position: "absolute",
|
|
1811
|
+
bottom: -60,
|
|
1812
|
+
left: -60,
|
|
1813
|
+
width: 240,
|
|
1814
|
+
height: 240,
|
|
1815
|
+
borderRadius: "50%",
|
|
1816
|
+
background: "rgba(255,255,255,0.04)",
|
|
1817
|
+
pointerEvents: "none"
|
|
1818
|
+
}
|
|
1819
|
+
}
|
|
1820
|
+
),
|
|
1821
|
+
/* @__PURE__ */ jsx35(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ jsx35(
|
|
1822
|
+
SdTextBox.Hero,
|
|
1823
|
+
{
|
|
1824
|
+
label,
|
|
1825
|
+
title,
|
|
1826
|
+
description,
|
|
1827
|
+
ta: "center",
|
|
1828
|
+
align: "center",
|
|
1829
|
+
maw: 640,
|
|
1830
|
+
mx: "auto",
|
|
1831
|
+
pt: 80,
|
|
1832
|
+
pb: 64
|
|
1833
|
+
}
|
|
1834
|
+
) })
|
|
1835
|
+
]
|
|
1836
|
+
}
|
|
1837
|
+
),
|
|
1838
|
+
/* @__PURE__ */ jsx35(Content, { children })
|
|
1632
1839
|
] });
|
|
1633
1840
|
}
|
|
1634
1841
|
var PageLayout = {
|
|
@@ -1693,33 +1900,53 @@ var slate = [
|
|
|
1693
1900
|
"#0f172a"
|
|
1694
1901
|
// 9 slate-900
|
|
1695
1902
|
];
|
|
1696
|
-
var
|
|
1697
|
-
"#
|
|
1698
|
-
|
|
1699
|
-
"#
|
|
1700
|
-
|
|
1701
|
-
"#
|
|
1702
|
-
|
|
1703
|
-
"#
|
|
1704
|
-
|
|
1705
|
-
"#
|
|
1706
|
-
|
|
1903
|
+
var red = [
|
|
1904
|
+
"#fef2f2",
|
|
1905
|
+
// 0 red-50
|
|
1906
|
+
"#fee2e2",
|
|
1907
|
+
// 1 red-100
|
|
1908
|
+
"#fecaca",
|
|
1909
|
+
// 2 red-200
|
|
1910
|
+
"#fca5a5",
|
|
1911
|
+
// 3 red-300
|
|
1912
|
+
"#f87171",
|
|
1913
|
+
// 4 red-400
|
|
1914
|
+
"#ef4444",
|
|
1915
|
+
// 5 red-500
|
|
1916
|
+
"#dc2626",
|
|
1917
|
+
// 6 red-600
|
|
1918
|
+
"#b91c1c",
|
|
1919
|
+
// 7 red-700
|
|
1920
|
+
"#991b1b",
|
|
1921
|
+
// 8 red-800
|
|
1922
|
+
"#7f1d1d"
|
|
1923
|
+
// 9 red-900
|
|
1707
1924
|
];
|
|
1708
|
-
var
|
|
1709
|
-
"#
|
|
1710
|
-
|
|
1711
|
-
"#
|
|
1712
|
-
|
|
1713
|
-
"#
|
|
1714
|
-
|
|
1715
|
-
"#
|
|
1716
|
-
|
|
1717
|
-
"#
|
|
1718
|
-
|
|
1925
|
+
var green = [
|
|
1926
|
+
"#f0fdf4",
|
|
1927
|
+
// 0 green-50
|
|
1928
|
+
"#dcfce7",
|
|
1929
|
+
// 1 green-100
|
|
1930
|
+
"#bbf7d0",
|
|
1931
|
+
// 2 green-200
|
|
1932
|
+
"#86efac",
|
|
1933
|
+
// 3 green-300
|
|
1934
|
+
"#4ade80",
|
|
1935
|
+
// 4 green-400
|
|
1936
|
+
"#22c55e",
|
|
1937
|
+
// 5 green-500
|
|
1938
|
+
"#16a34a",
|
|
1939
|
+
// 6 green-600
|
|
1940
|
+
"#15803d",
|
|
1941
|
+
// 7 green-700
|
|
1942
|
+
"#166534",
|
|
1943
|
+
// 8 green-800
|
|
1944
|
+
"#14532d"
|
|
1945
|
+
// 9 green-900
|
|
1719
1946
|
];
|
|
1720
1947
|
var theme = createTheme({
|
|
1721
1948
|
/* ---- Color ---- */
|
|
1722
|
-
colors: { primary, secondary, slate,
|
|
1949
|
+
colors: { primary, secondary, slate, red, green, dark: slate },
|
|
1723
1950
|
primaryColor: "primary",
|
|
1724
1951
|
primaryShade: { light: 6, dark: 5 },
|
|
1725
1952
|
/* ---- Type ---- */
|
|
@@ -1839,11 +2066,15 @@ var theme = createTheme({
|
|
|
1839
2066
|
defaultProps: { radius: "sm" }
|
|
1840
2067
|
},
|
|
1841
2068
|
Divider: {
|
|
1842
|
-
defaultProps: { c: "slate.5"
|
|
2069
|
+
defaultProps: { c: "slate.5" }
|
|
1843
2070
|
},
|
|
1844
2071
|
Anchor: {
|
|
1845
2072
|
defaultProps: { c: "slate.5", fz: "sm", underline: "never" }
|
|
1846
2073
|
},
|
|
2074
|
+
// SdHeader 모바일 드로어의 2단 아코디언 타이포를 SdLink와 맞춘다.
|
|
2075
|
+
NavLink: {
|
|
2076
|
+
defaultProps: { c: "slate.7", fz: "sm" }
|
|
2077
|
+
},
|
|
1847
2078
|
Table: {
|
|
1848
2079
|
defaultProps: {
|
|
1849
2080
|
captionSide: "bottom"
|
|
@@ -1860,33 +2091,63 @@ export {
|
|
|
1860
2091
|
MainLayout,
|
|
1861
2092
|
PageLayout,
|
|
1862
2093
|
SdBadge,
|
|
2094
|
+
SdBadgeDefault,
|
|
2095
|
+
SdBadgePrimary,
|
|
2096
|
+
SdBadgeSuccess,
|
|
2097
|
+
SdBadgeWarning,
|
|
1863
2098
|
SdButton,
|
|
1864
2099
|
SdButtonCancel,
|
|
1865
2100
|
SdButtonDelete,
|
|
2101
|
+
SdButtonDownload,
|
|
2102
|
+
SdButtonExcel,
|
|
1866
2103
|
SdButtonGhost,
|
|
1867
2104
|
SdButtonOutline,
|
|
1868
2105
|
SdButtonPrimary,
|
|
1869
2106
|
SdButtonSecondary,
|
|
2107
|
+
SdButtonSubmit,
|
|
1870
2108
|
SdButtonWhite,
|
|
1871
2109
|
SdClients,
|
|
1872
2110
|
SdClientsGrid,
|
|
1873
2111
|
SdClientsMarquee,
|
|
1874
2112
|
SdContainer,
|
|
1875
2113
|
SdCta,
|
|
2114
|
+
SdCtaBanner,
|
|
2115
|
+
SdCtaInline,
|
|
2116
|
+
SdCtaSubtle,
|
|
1876
2117
|
SdErrorView,
|
|
2118
|
+
SdErrorViewNotFound,
|
|
2119
|
+
SdErrorViewPage,
|
|
1877
2120
|
SdFaq,
|
|
2121
|
+
SdFaqDefault,
|
|
2122
|
+
SdFaqFilled,
|
|
2123
|
+
SdFaqWithHeader,
|
|
1878
2124
|
SdFeatureSection,
|
|
1879
2125
|
SdFeatures,
|
|
1880
2126
|
SdFooter,
|
|
1881
2127
|
SdHeader,
|
|
1882
2128
|
SdInput,
|
|
2129
|
+
SdInputEmail,
|
|
2130
|
+
SdInputPassword,
|
|
2131
|
+
SdInputSelect,
|
|
2132
|
+
SdInputText,
|
|
2133
|
+
SdInputTextarea,
|
|
2134
|
+
SdLink,
|
|
2135
|
+
SdLinkBody,
|
|
2136
|
+
SdLinkHint,
|
|
2137
|
+
SdLinkStrong,
|
|
2138
|
+
SdLinkSub,
|
|
1883
2139
|
SdMap,
|
|
1884
2140
|
SdMapSingle,
|
|
1885
2141
|
SdMapTabs,
|
|
1886
2142
|
SdModal,
|
|
1887
2143
|
SdNumberIcon,
|
|
1888
2144
|
SdPricingCard,
|
|
2145
|
+
SdPricingCardDefault,
|
|
2146
|
+
SdPricingCardFeatured,
|
|
2147
|
+
SdPricingCardGrid,
|
|
1889
2148
|
SdQuote,
|
|
2149
|
+
SdQuoteCard,
|
|
2150
|
+
SdQuotePlain,
|
|
1890
2151
|
SdSkeleton,
|
|
1891
2152
|
SdSkeletonAvatar,
|
|
1892
2153
|
SdSkeletonCard,
|
|
@@ -1895,22 +2156,44 @@ export {
|
|
|
1895
2156
|
SdSkeletonTitle,
|
|
1896
2157
|
SdSolution,
|
|
1897
2158
|
SdSolutionCard,
|
|
2159
|
+
SdSolutionCardGrid,
|
|
2160
|
+
SdSolutionCardItem,
|
|
2161
|
+
SdSolutionFiltered,
|
|
2162
|
+
SdSolutionList,
|
|
1898
2163
|
SdSteps,
|
|
2164
|
+
SdStepsBubble,
|
|
2165
|
+
SdStepsCard,
|
|
1899
2166
|
SdStepsSection,
|
|
2167
|
+
SdStepsStrip,
|
|
1900
2168
|
SdTable,
|
|
2169
|
+
SdTableSpec,
|
|
1901
2170
|
SdTabs,
|
|
1902
2171
|
SdTabsOutline,
|
|
1903
2172
|
SdTabsPills,
|
|
1904
2173
|
SdTabsUnderline,
|
|
1905
2174
|
SdTestimonial,
|
|
2175
|
+
SdTestimonialCard,
|
|
2176
|
+
SdTestimonialGrid,
|
|
2177
|
+
SdTestimonialStrip,
|
|
1906
2178
|
SdText,
|
|
2179
|
+
SdTextBody,
|
|
1907
2180
|
SdTextBox,
|
|
1908
2181
|
SdTextBoxCard,
|
|
1909
2182
|
SdTextBoxHero,
|
|
1910
2183
|
SdTextBoxSection,
|
|
1911
2184
|
SdTextBoxSub,
|
|
2185
|
+
SdTextError,
|
|
2186
|
+
SdTextEyebrow,
|
|
2187
|
+
SdTextHint,
|
|
2188
|
+
SdTextNumeric,
|
|
2189
|
+
SdTextStrong,
|
|
2190
|
+
SdTextSub,
|
|
1912
2191
|
SdTimeline,
|
|
1913
2192
|
SdTimelineSection,
|
|
1914
2193
|
SdTitle,
|
|
2194
|
+
SdTitleCard,
|
|
2195
|
+
SdTitleDisplay,
|
|
2196
|
+
SdTitleSection,
|
|
2197
|
+
SdTitleSub,
|
|
1915
2198
|
theme
|
|
1916
2199
|
};
|