@yeongseoksong/framework 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -34
- package/dist/types/index.d.mts +8 -1
- package/dist/types/index.d.ts +8 -1
- package/dist/ui/index.cjs +885 -571
- package/dist/ui/index.d.mts +168 -52
- package/dist/ui/index.d.ts +168 -52
- package/dist/ui/index.mjs +759 -500
- package/dist/util/index.cjs +17 -2
- package/dist/util/index.d.mts +12 -1
- package/dist/util/index.d.ts +12 -1
- package/dist/util/index.mjs +14 -1
- package/package.json +2 -2
package/dist/ui/index.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,199 @@ 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
|
|
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;
|
|
1249
1360
|
function SdHeader({ navItems, loginFlag, children }) {
|
|
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
|
+
children
|
|
1415
|
+
] })
|
|
1416
|
+
] }) })
|
|
1417
|
+
}
|
|
1418
|
+
),
|
|
1419
|
+
/* @__PURE__ */ jsx28(Drawer, { opened, onClose: close, hiddenFrom: "sm", size: "xs", children: /* @__PURE__ */ jsxs16(Stack15, { gap: 0, children: [
|
|
1420
|
+
topItems.map((item) => {
|
|
1421
|
+
const kids = childrenOf(item.id);
|
|
1422
|
+
if (kids.length === 0) {
|
|
1423
|
+
return /* @__PURE__ */ jsx28(Box12, { px: "sm", py: 8, children: /* @__PURE__ */ jsx28(SdLink.Body, { href: item.href, onClick: close, children: item.label }) }, item.id);
|
|
1424
|
+
}
|
|
1425
|
+
return /* @__PURE__ */ jsx28(
|
|
1426
|
+
NavLink,
|
|
1427
|
+
{
|
|
1428
|
+
label: item.label,
|
|
1429
|
+
href: item.href,
|
|
1430
|
+
childrenOffset: 28,
|
|
1431
|
+
onClick: kids.length > 0 ? void 0 : close,
|
|
1432
|
+
children: kids.map((kid) => /* @__PURE__ */ jsx28(NavLink, { label: kid.label, href: kid.href, onClick: close }, kid.id))
|
|
1433
|
+
},
|
|
1434
|
+
item.id
|
|
1435
|
+
);
|
|
1436
|
+
}),
|
|
1437
|
+
loginFlag && /* @__PURE__ */ jsx28(Stack15, { gap: "xs", mt: "md", children: /* @__PURE__ */ jsx28(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1269
1438
|
] }) })
|
|
1270
1439
|
] });
|
|
1271
1440
|
}
|
|
1272
1441
|
|
|
1273
1442
|
// ui/organism/Footer.tsx
|
|
1274
|
-
import {
|
|
1275
|
-
import {
|
|
1443
|
+
import { ActionIcon, Box as Box13, Divider as Divider3, Flex, Grid as Grid5, Group as Group10, SimpleGrid as SimpleGrid6, Stack as Stack16 } from "@mantine/core";
|
|
1444
|
+
import {
|
|
1445
|
+
IconBrandFacebook,
|
|
1446
|
+
IconBrandGithub,
|
|
1447
|
+
IconBrandInstagram,
|
|
1448
|
+
IconBrandLinkedin,
|
|
1449
|
+
IconBrandX,
|
|
1450
|
+
IconBrandYoutube,
|
|
1451
|
+
IconWorld
|
|
1452
|
+
} from "@tabler/icons-react";
|
|
1453
|
+
import { Fragment as Fragment5, jsx as jsx29, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1276
1454
|
function FooterNavColumns({ items }) {
|
|
1277
1455
|
const topLevel = items.filter((item) => !item.parentId);
|
|
1278
1456
|
const getChildren = (parentId) => items.filter((item) => item.parentId === parentId);
|
|
1279
|
-
return /* @__PURE__ */
|
|
1280
|
-
/* @__PURE__ */
|
|
1281
|
-
getChildren(group.id).map((link) => /* @__PURE__ */
|
|
1282
|
-
|
|
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: "sm", children: [
|
|
1458
|
+
/* @__PURE__ */ jsx29(SdText.Sub, { children: group.label }),
|
|
1459
|
+
getChildren(group.id).map((link) => /* @__PURE__ */ jsx29(SdLink.Hint, { href: link.href, children: link.label }, link.id))
|
|
1460
|
+
] }) }, group.id)) });
|
|
1461
|
+
}
|
|
1462
|
+
var SOCIAL_ICONS = {
|
|
1463
|
+
x: IconBrandX,
|
|
1464
|
+
youtube: IconBrandYoutube,
|
|
1465
|
+
instagram: IconBrandInstagram,
|
|
1466
|
+
facebook: IconBrandFacebook,
|
|
1467
|
+
linkedin: IconBrandLinkedin,
|
|
1468
|
+
github: IconBrandGithub,
|
|
1469
|
+
blog: IconWorld
|
|
1470
|
+
};
|
|
1471
|
+
function FooterSocials({ items }) {
|
|
1472
|
+
return /* @__PURE__ */ jsx29(Group10, { gap: 0, wrap: "nowrap", children: items.map((item) => {
|
|
1473
|
+
var _a4, _b;
|
|
1474
|
+
const Icon = (_a4 = SOCIAL_ICONS[item.platform]) != null ? _a4 : IconWorld;
|
|
1475
|
+
return /* @__PURE__ */ jsx29(
|
|
1476
|
+
ActionIcon,
|
|
1283
1477
|
{
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
e.currentTarget.style.color = "";
|
|
1294
|
-
},
|
|
1295
|
-
children: link.label
|
|
1478
|
+
component: "a",
|
|
1479
|
+
href: item.url,
|
|
1480
|
+
target: "_blank",
|
|
1481
|
+
rel: "noreferrer",
|
|
1482
|
+
size: "lg",
|
|
1483
|
+
color: "gray",
|
|
1484
|
+
variant: "subtle",
|
|
1485
|
+
"aria-label": (_b = item.label) != null ? _b : item.platform,
|
|
1486
|
+
children: /* @__PURE__ */ jsx29(Icon, { size: 18, stroke: 1.5 })
|
|
1296
1487
|
},
|
|
1297
|
-
|
|
1298
|
-
)
|
|
1299
|
-
|
|
1488
|
+
item.url
|
|
1489
|
+
);
|
|
1490
|
+
}) });
|
|
1491
|
+
}
|
|
1492
|
+
function InfoCell({ label, children }) {
|
|
1493
|
+
return /* @__PURE__ */ jsxs17(Group10, { gap: 6, wrap: "nowrap", align: "baseline", children: [
|
|
1494
|
+
/* @__PURE__ */ jsx29(SdText.Sub, { c: "slate.4", style: { whiteSpace: "nowrap" }, children: label }),
|
|
1495
|
+
typeof children === "string" ? /* @__PURE__ */ jsx29(SdText.Sub, { children }) : children
|
|
1496
|
+
] });
|
|
1300
1497
|
}
|
|
1301
1498
|
function FooterCompanyInfo({ company }) {
|
|
1302
1499
|
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 })
|
|
1500
|
+
return /* @__PURE__ */ jsxs17(SimpleGrid6, { cols: { base: 2, sm: 2, md: 1 }, spacing: "md", verticalSpacing: 0, children: [
|
|
1501
|
+
/* @__PURE__ */ jsx29(InfoCell, { label: "\uC0C1\uD638", children: company.name }),
|
|
1502
|
+
/* @__PURE__ */ jsx29(InfoCell, { label: "\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638", children: company.registrationNumber }),
|
|
1503
|
+
sortedAddresses.map((addr) => /* @__PURE__ */ jsx29(InfoCell, { label: addr.label, children: addr.address }, addr.label)),
|
|
1504
|
+
/* @__PURE__ */ jsx29(InfoCell, { label: "Tel", children: /* @__PURE__ */ jsx29(SdLink.Sub, { href: `tel:${company.tel}`, children: company.tel }) }),
|
|
1505
|
+
company.fax && /* @__PURE__ */ jsx29(InfoCell, { label: "Fax", children: company.fax }),
|
|
1506
|
+
/* @__PURE__ */ jsx29(InfoCell, { label: "Email", children: /* @__PURE__ */ jsx29(SdLink.Sub, { href: `mailto:${company.email}`, children: company.email }) })
|
|
1328
1507
|
] });
|
|
1329
1508
|
}
|
|
1330
1509
|
function SdFooter({ company, navItems, policyLinks, description }) {
|
|
1331
1510
|
const visibleNav = filterAndSort(navItems);
|
|
1332
1511
|
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 }) }) })
|
|
1512
|
+
return /* @__PURE__ */ jsx29(Box13, { component: "footer", children: /* @__PURE__ */ jsx29(SdContainer, { children: /* @__PURE__ */ jsxs17(Stack16, { children: [
|
|
1513
|
+
/* @__PURE__ */ jsx29(Logo, { size: "sm" }),
|
|
1514
|
+
description && /* @__PURE__ */ jsx29(SdText.Sub, { children: description }),
|
|
1515
|
+
/* @__PURE__ */ jsxs17(Flex, { direction: { base: "column", md: "row" }, gap: 48, align: "flex-start", children: [
|
|
1516
|
+
/* @__PURE__ */ jsx29(Box13, { flex: { base: "0 0 auto", md: "1 1 0" }, w: { base: "100%", md: "auto" }, children: /* @__PURE__ */ jsx29(FooterCompanyInfo, { company }) }),
|
|
1517
|
+
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
1518
|
] }),
|
|
1341
|
-
/* @__PURE__ */
|
|
1342
|
-
/* @__PURE__ */
|
|
1343
|
-
|
|
1344
|
-
/* @__PURE__ */ jsxs17(SdText.Sub, { c: "slate.5", children: [
|
|
1519
|
+
/* @__PURE__ */ jsx29(Divider3, {}),
|
|
1520
|
+
/* @__PURE__ */ jsxs17(Group10, { justify: "space-between", wrap: "wrap", gap: "xs", children: [
|
|
1521
|
+
/* @__PURE__ */ jsxs17(SdText.Sub, { children: [
|
|
1345
1522
|
"\xA9 ",
|
|
1346
1523
|
company.copyrightYear,
|
|
1347
1524
|
" ",
|
|
1348
1525
|
company.name,
|
|
1349
1526
|
". All rights reserved."
|
|
1350
1527
|
] }),
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
href: item.href,
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
underline: "never",
|
|
1359
|
-
children: item.label
|
|
1360
|
-
},
|
|
1361
|
-
item.id
|
|
1362
|
-
)) })
|
|
1528
|
+
/* @__PURE__ */ jsxs17(Group10, { gap: "lg", wrap: "wrap", children: [
|
|
1529
|
+
visiblePolicy.length > 0 && /* @__PURE__ */ jsx29(Group10, { gap: "lg", children: visiblePolicy.map((item) => {
|
|
1530
|
+
const Link4 = item.highlight ? SdLink.Strong : SdLink.Sub;
|
|
1531
|
+
return /* @__PURE__ */ jsx29(Link4, { href: item.href, children: item.label }, item.id);
|
|
1532
|
+
}) }),
|
|
1533
|
+
company.socials && company.socials.length > 0 && /* @__PURE__ */ jsx29(FooterSocials, { items: company.socials })
|
|
1534
|
+
] })
|
|
1363
1535
|
] })
|
|
1364
|
-
] }) });
|
|
1536
|
+
] }) }) });
|
|
1365
1537
|
}
|
|
1366
1538
|
|
|
1367
1539
|
// ui/organism/FeatureSection.tsx
|
|
1368
1540
|
import { Stack as Stack17 } from "@mantine/core";
|
|
1369
|
-
import { jsx as
|
|
1541
|
+
import { jsx as jsx30, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1370
1542
|
function SdFeatureSection(_a4) {
|
|
1371
1543
|
var _b = _a4, {
|
|
1372
1544
|
label,
|
|
@@ -1383,8 +1555,8 @@ function SdFeatureSection(_a4) {
|
|
|
1383
1555
|
"cols",
|
|
1384
1556
|
"py"
|
|
1385
1557
|
]);
|
|
1386
|
-
return /* @__PURE__ */
|
|
1387
|
-
/* @__PURE__ */
|
|
1558
|
+
return /* @__PURE__ */ jsx30(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ jsxs18(Stack17, { gap: "xl", children: [
|
|
1559
|
+
/* @__PURE__ */ jsx30(
|
|
1388
1560
|
SdTextBox.Section,
|
|
1389
1561
|
{
|
|
1390
1562
|
label,
|
|
@@ -1395,13 +1567,13 @@ function SdFeatureSection(_a4) {
|
|
|
1395
1567
|
align: "center"
|
|
1396
1568
|
}
|
|
1397
1569
|
),
|
|
1398
|
-
/* @__PURE__ */
|
|
1570
|
+
/* @__PURE__ */ jsx30(SdFeatures, { items, cols })
|
|
1399
1571
|
] }) }));
|
|
1400
1572
|
}
|
|
1401
1573
|
|
|
1402
1574
|
// ui/organism/TimelineSection.tsx
|
|
1403
1575
|
import { Center as Center3, Stack as Stack18 } from "@mantine/core";
|
|
1404
|
-
import { jsx as
|
|
1576
|
+
import { jsx as jsx31, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1405
1577
|
function SdTimelineSection(_a4) {
|
|
1406
1578
|
var _b = _a4, {
|
|
1407
1579
|
label,
|
|
@@ -1416,22 +1588,15 @@ function SdTimelineSection(_a4) {
|
|
|
1416
1588
|
"items",
|
|
1417
1589
|
"py"
|
|
1418
1590
|
]);
|
|
1419
|
-
return /* @__PURE__ */
|
|
1420
|
-
/* @__PURE__ */
|
|
1421
|
-
|
|
1422
|
-
{
|
|
1423
|
-
label,
|
|
1424
|
-
title,
|
|
1425
|
-
description
|
|
1426
|
-
}
|
|
1427
|
-
),
|
|
1428
|
-
/* @__PURE__ */ jsx30(Center3, { children: /* @__PURE__ */ jsx30(SdTimeline, { items }) })
|
|
1591
|
+
return /* @__PURE__ */ jsx31(Center3, { children: /* @__PURE__ */ jsxs19(Stack18, __spreadProps(__spreadValues({ py, gap: "md" }, boxProps), { children: [
|
|
1592
|
+
/* @__PURE__ */ jsx31(SdTextBox.Section, { label, title, description }),
|
|
1593
|
+
/* @__PURE__ */ jsx31(Center3, { children: /* @__PURE__ */ jsx31(SdTimeline, { items }) })
|
|
1429
1594
|
] })) });
|
|
1430
1595
|
}
|
|
1431
1596
|
|
|
1432
1597
|
// ui/organism/StepsSection.tsx
|
|
1433
1598
|
import { Stack as Stack19 } from "@mantine/core";
|
|
1434
|
-
import { jsx as
|
|
1599
|
+
import { jsx as jsx32, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1435
1600
|
function SdStepsSection(_a4) {
|
|
1436
1601
|
var _b = _a4, {
|
|
1437
1602
|
label,
|
|
@@ -1446,17 +1611,17 @@ function SdStepsSection(_a4) {
|
|
|
1446
1611
|
"items",
|
|
1447
1612
|
"py"
|
|
1448
1613
|
]);
|
|
1449
|
-
return /* @__PURE__ */
|
|
1450
|
-
(label || title || description) && /* @__PURE__ */
|
|
1451
|
-
/* @__PURE__ */
|
|
1614
|
+
return /* @__PURE__ */ jsx32(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ jsxs20(Stack19, { gap: "xl", children: [
|
|
1615
|
+
(label || title || description) && /* @__PURE__ */ jsx32(SdTextBox.Section, { label, title, description }),
|
|
1616
|
+
/* @__PURE__ */ jsx32(SdSteps.Bubble, { items })
|
|
1452
1617
|
] }) }));
|
|
1453
1618
|
}
|
|
1454
1619
|
|
|
1455
1620
|
// ui/organism/ErrorView.tsx
|
|
1456
1621
|
import { Center as Center4, Group as Group11, Stack as Stack20, Text as Text2 } from "@mantine/core";
|
|
1457
|
-
import { jsx as
|
|
1622
|
+
import { jsx as jsx33, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
1458
1623
|
function StatusCode({ code }) {
|
|
1459
|
-
return /* @__PURE__ */
|
|
1624
|
+
return /* @__PURE__ */ jsx33(
|
|
1460
1625
|
Text2,
|
|
1461
1626
|
{
|
|
1462
1627
|
fz: 160,
|
|
@@ -1470,15 +1635,15 @@ function StatusCode({ code }) {
|
|
|
1470
1635
|
);
|
|
1471
1636
|
}
|
|
1472
1637
|
function Page({ error, onReset, onHome }) {
|
|
1473
|
-
return /* @__PURE__ */
|
|
1474
|
-
/* @__PURE__ */
|
|
1638
|
+
return /* @__PURE__ */ jsx33(Center4, { mih: "60vh", children: /* @__PURE__ */ jsx33(SdContainer, { children: /* @__PURE__ */ jsxs21(Stack20, { align: "center", gap: "lg", ta: "center", children: [
|
|
1639
|
+
/* @__PURE__ */ jsx33(StatusCode, { code: "500" }),
|
|
1475
1640
|
/* @__PURE__ */ jsxs21(Stack20, { gap: "sm", align: "center", children: [
|
|
1476
|
-
/* @__PURE__ */
|
|
1477
|
-
/* @__PURE__ */
|
|
1641
|
+
/* @__PURE__ */ jsx33(SdTitle.Section, { children: "\uC11C\uBC84\uC5D0\uC11C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4" }),
|
|
1642
|
+
/* @__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
1643
|
] }),
|
|
1479
1644
|
/* @__PURE__ */ jsxs21(Group11, { gap: "sm", justify: "center", children: [
|
|
1480
|
-
/* @__PURE__ */
|
|
1481
|
-
onHome && /* @__PURE__ */
|
|
1645
|
+
/* @__PURE__ */ jsx33(SdButton.Primary, { onClick: onReset, children: "\uB2E4\uC2DC \uC2DC\uB3C4" }),
|
|
1646
|
+
onHome && /* @__PURE__ */ jsx33(SdButton.Ghost, { onClick: onHome, children: "\uD648\uC73C\uB85C" })
|
|
1482
1647
|
] })
|
|
1483
1648
|
] }) }) });
|
|
1484
1649
|
}
|
|
@@ -1490,15 +1655,15 @@ function NotFound({
|
|
|
1490
1655
|
},
|
|
1491
1656
|
onBack = () => window.history.back()
|
|
1492
1657
|
}) {
|
|
1493
|
-
return /* @__PURE__ */
|
|
1494
|
-
/* @__PURE__ */
|
|
1658
|
+
return /* @__PURE__ */ jsx33(Center4, { mih: "60vh", children: /* @__PURE__ */ jsx33(SdContainer, { children: /* @__PURE__ */ jsxs21(Stack20, { align: "center", gap: "lg", ta: "center", children: [
|
|
1659
|
+
/* @__PURE__ */ jsx33(StatusCode, { code: "404" }),
|
|
1495
1660
|
/* @__PURE__ */ jsxs21(Stack20, { gap: "sm", align: "center", children: [
|
|
1496
|
-
/* @__PURE__ */
|
|
1497
|
-
/* @__PURE__ */
|
|
1661
|
+
/* @__PURE__ */ jsx33(SdTitle.Section, { children: title }),
|
|
1662
|
+
/* @__PURE__ */ jsx33(SdText.Body, { maw: 480, children: description })
|
|
1498
1663
|
] }),
|
|
1499
1664
|
/* @__PURE__ */ jsxs21(Group11, { gap: "sm", justify: "center", children: [
|
|
1500
|
-
onHome && /* @__PURE__ */
|
|
1501
|
-
onBack && /* @__PURE__ */
|
|
1665
|
+
onHome && /* @__PURE__ */ jsx33(SdButton.Primary, { onClick: onHome, children: "\uD648\uC73C\uB85C" }),
|
|
1666
|
+
onBack && /* @__PURE__ */ jsx33(SdButton.Ghost, { onClick: onBack, children: "\uB4A4\uB85C \uAC00\uAE30" })
|
|
1502
1667
|
] })
|
|
1503
1668
|
] }) }) });
|
|
1504
1669
|
}
|
|
@@ -1508,127 +1673,165 @@ var SdErrorView = {
|
|
|
1508
1673
|
/** app/not-found.tsx — 404 Not Found */
|
|
1509
1674
|
NotFound
|
|
1510
1675
|
};
|
|
1676
|
+
var SdErrorViewPage = SdErrorView.Page;
|
|
1677
|
+
var SdErrorViewNotFound = SdErrorView.NotFound;
|
|
1511
1678
|
|
|
1512
1679
|
// ui/template/MainLayout.tsx
|
|
1513
1680
|
import { AppShell } from "@mantine/core";
|
|
1514
|
-
import { jsx as
|
|
1515
|
-
function MainLayout({
|
|
1681
|
+
import { jsx as jsx34, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
1682
|
+
function MainLayout({
|
|
1683
|
+
children,
|
|
1684
|
+
navItems,
|
|
1685
|
+
companyInfo
|
|
1686
|
+
}) {
|
|
1516
1687
|
return /* @__PURE__ */ jsxs22(AppShell, { header: { height: 60 }, children: [
|
|
1517
|
-
/* @__PURE__ */
|
|
1518
|
-
/* @__PURE__ */
|
|
1519
|
-
/* @__PURE__ */
|
|
1688
|
+
/* @__PURE__ */ jsx34(AppShell.Header, { children: /* @__PURE__ */ jsx34(SdHeader, { navItems, loginFlag: true }) }),
|
|
1689
|
+
/* @__PURE__ */ jsx34(AppShell.Main, { children }),
|
|
1690
|
+
/* @__PURE__ */ jsx34(SdFooter, { company: companyInfo, navItems })
|
|
1520
1691
|
] });
|
|
1521
1692
|
}
|
|
1522
1693
|
|
|
1523
1694
|
// ui/template/PageLayout.tsx
|
|
1524
|
-
import { Box as
|
|
1525
|
-
import { Fragment as Fragment6, jsx as
|
|
1695
|
+
import { Box as Box15, Divider as Divider4, Space, Stack as Stack21 } from "@mantine/core";
|
|
1696
|
+
import { Fragment as Fragment6, jsx as jsx35, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
1526
1697
|
function Content({ children }) {
|
|
1527
|
-
return /* @__PURE__ */
|
|
1698
|
+
return /* @__PURE__ */ jsx35(SdContainer, { py: "xl", children: /* @__PURE__ */ jsx35(Stack21, { gap: "xl", children }) });
|
|
1528
1699
|
}
|
|
1529
1700
|
function LayoutGap() {
|
|
1530
|
-
return /* @__PURE__ */
|
|
1701
|
+
return /* @__PURE__ */ jsx35(Space, { h: 48 });
|
|
1531
1702
|
}
|
|
1532
1703
|
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, {}),
|
|
1704
|
+
return /* @__PURE__ */ jsx35(Fragment6, { children: /* @__PURE__ */ jsxs23(Plain2, { children: [
|
|
1705
|
+
/* @__PURE__ */ jsx35(SdTextBox.Section, { label, title, description: description != null ? description : "" }),
|
|
1706
|
+
/* @__PURE__ */ jsx35(Divider4, {}),
|
|
1544
1707
|
children
|
|
1545
1708
|
] }) });
|
|
1546
1709
|
}
|
|
1547
1710
|
function Plain2({ children }) {
|
|
1548
1711
|
return /* @__PURE__ */ jsxs23(Fragment6, { children: [
|
|
1549
|
-
/* @__PURE__ */
|
|
1550
|
-
/* @__PURE__ */
|
|
1712
|
+
/* @__PURE__ */ jsx35(LayoutGap, {}),
|
|
1713
|
+
/* @__PURE__ */ jsx35(Content, { children })
|
|
1551
1714
|
] });
|
|
1552
1715
|
}
|
|
1553
1716
|
function Image2({ image, label, title, description, children }) {
|
|
1554
1717
|
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,
|
|
1718
|
+
/* @__PURE__ */ jsxs23(
|
|
1719
|
+
Box15,
|
|
1720
|
+
{
|
|
1721
|
+
style: {
|
|
1722
|
+
position: "relative",
|
|
1723
|
+
minHeight: "30svh",
|
|
1724
|
+
display: "flex",
|
|
1725
|
+
alignItems: "center",
|
|
1726
|
+
backgroundImage: image ? `url(${image})` : void 0,
|
|
1727
|
+
backgroundSize: "cover",
|
|
1728
|
+
backgroundPosition: "center",
|
|
1729
|
+
backgroundColor: "var(--mantine-color-slate-9)"
|
|
1730
|
+
},
|
|
1731
|
+
children: [
|
|
1732
|
+
/* @__PURE__ */ jsx35(
|
|
1733
|
+
Box15,
|
|
1585
1734
|
{
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1735
|
+
style: {
|
|
1736
|
+
position: "absolute",
|
|
1737
|
+
inset: 0,
|
|
1738
|
+
background: "rgba(0, 0, 0, 0.55)"
|
|
1739
|
+
}
|
|
1591
1740
|
}
|
|
1592
|
-
)
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1741
|
+
),
|
|
1742
|
+
/* @__PURE__ */ jsx35(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ jsx35(
|
|
1743
|
+
Box15,
|
|
1744
|
+
{
|
|
1745
|
+
py: 48,
|
|
1746
|
+
px: 40,
|
|
1747
|
+
maw: 420,
|
|
1748
|
+
style: {
|
|
1749
|
+
backdropFilter: "blur(24px)",
|
|
1750
|
+
WebkitBackdropFilter: "blur(24px)",
|
|
1751
|
+
background: "rgba(255,255,255,0.10)",
|
|
1752
|
+
borderRadius: "var(--mantine-radius-md)",
|
|
1753
|
+
border: "1px solid rgba(255,255,255,0.18)"
|
|
1754
|
+
},
|
|
1755
|
+
children: /* @__PURE__ */ jsx35(
|
|
1756
|
+
SdTextBox.Hero,
|
|
1757
|
+
{
|
|
1758
|
+
label,
|
|
1759
|
+
title,
|
|
1760
|
+
description,
|
|
1761
|
+
ta: "left",
|
|
1762
|
+
align: "flex-start"
|
|
1763
|
+
}
|
|
1764
|
+
)
|
|
1765
|
+
}
|
|
1766
|
+
) })
|
|
1767
|
+
]
|
|
1768
|
+
}
|
|
1769
|
+
),
|
|
1770
|
+
/* @__PURE__ */ jsx35(Content, { children })
|
|
1597
1771
|
] });
|
|
1598
1772
|
}
|
|
1599
1773
|
function Brand({ label, title, description, children }) {
|
|
1600
1774
|
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
|
-
|
|
1775
|
+
/* @__PURE__ */ jsxs23(
|
|
1776
|
+
Box15,
|
|
1777
|
+
{
|
|
1778
|
+
style: {
|
|
1779
|
+
position: "relative",
|
|
1780
|
+
minHeight: "40svh",
|
|
1781
|
+
display: "flex",
|
|
1782
|
+
alignItems: "center",
|
|
1783
|
+
overflow: "hidden",
|
|
1784
|
+
background: "linear-gradient(135deg, var(--mantine-color-primary-8) 0%, var(--mantine-color-primary-6) 50%, var(--mantine-color-primary-4) 100%)"
|
|
1785
|
+
},
|
|
1786
|
+
children: [
|
|
1787
|
+
/* @__PURE__ */ jsx35(
|
|
1788
|
+
Box15,
|
|
1789
|
+
{
|
|
1790
|
+
style: {
|
|
1791
|
+
position: "absolute",
|
|
1792
|
+
top: -80,
|
|
1793
|
+
right: -80,
|
|
1794
|
+
width: 360,
|
|
1795
|
+
height: 360,
|
|
1796
|
+
borderRadius: "50%",
|
|
1797
|
+
background: "rgba(255,255,255,0.06)",
|
|
1798
|
+
pointerEvents: "none"
|
|
1799
|
+
}
|
|
1800
|
+
}
|
|
1801
|
+
),
|
|
1802
|
+
/* @__PURE__ */ jsx35(
|
|
1803
|
+
Box15,
|
|
1804
|
+
{
|
|
1805
|
+
style: {
|
|
1806
|
+
position: "absolute",
|
|
1807
|
+
bottom: -60,
|
|
1808
|
+
left: -60,
|
|
1809
|
+
width: 240,
|
|
1810
|
+
height: 240,
|
|
1811
|
+
borderRadius: "50%",
|
|
1812
|
+
background: "rgba(255,255,255,0.04)",
|
|
1813
|
+
pointerEvents: "none"
|
|
1814
|
+
}
|
|
1815
|
+
}
|
|
1816
|
+
),
|
|
1817
|
+
/* @__PURE__ */ jsx35(SdContainer, { style: { position: "relative", zIndex: 1, width: "100%" }, children: /* @__PURE__ */ jsx35(
|
|
1818
|
+
SdTextBox.Hero,
|
|
1819
|
+
{
|
|
1820
|
+
label,
|
|
1821
|
+
title,
|
|
1822
|
+
description,
|
|
1823
|
+
ta: "center",
|
|
1824
|
+
align: "center",
|
|
1825
|
+
maw: 640,
|
|
1826
|
+
mx: "auto",
|
|
1827
|
+
pt: 80,
|
|
1828
|
+
pb: 64
|
|
1829
|
+
}
|
|
1830
|
+
) })
|
|
1831
|
+
]
|
|
1832
|
+
}
|
|
1833
|
+
),
|
|
1834
|
+
/* @__PURE__ */ jsx35(Content, { children })
|
|
1632
1835
|
] });
|
|
1633
1836
|
}
|
|
1634
1837
|
var PageLayout = {
|
|
@@ -1839,11 +2042,15 @@ var theme = createTheme({
|
|
|
1839
2042
|
defaultProps: { radius: "sm" }
|
|
1840
2043
|
},
|
|
1841
2044
|
Divider: {
|
|
1842
|
-
defaultProps: { c: "slate.5"
|
|
2045
|
+
defaultProps: { c: "slate.5" }
|
|
1843
2046
|
},
|
|
1844
2047
|
Anchor: {
|
|
1845
2048
|
defaultProps: { c: "slate.5", fz: "sm", underline: "never" }
|
|
1846
2049
|
},
|
|
2050
|
+
// SdHeader 모바일 드로어의 2단 아코디언 타이포를 SdLink와 맞춘다.
|
|
2051
|
+
NavLink: {
|
|
2052
|
+
defaultProps: { c: "slate.7", fz: "sm" }
|
|
2053
|
+
},
|
|
1847
2054
|
Table: {
|
|
1848
2055
|
defaultProps: {
|
|
1849
2056
|
captionSide: "bottom"
|
|
@@ -1860,33 +2067,63 @@ export {
|
|
|
1860
2067
|
MainLayout,
|
|
1861
2068
|
PageLayout,
|
|
1862
2069
|
SdBadge,
|
|
2070
|
+
SdBadgeDefault,
|
|
2071
|
+
SdBadgePrimary,
|
|
2072
|
+
SdBadgeSuccess,
|
|
2073
|
+
SdBadgeWarning,
|
|
1863
2074
|
SdButton,
|
|
1864
2075
|
SdButtonCancel,
|
|
1865
2076
|
SdButtonDelete,
|
|
2077
|
+
SdButtonDownload,
|
|
2078
|
+
SdButtonExcel,
|
|
1866
2079
|
SdButtonGhost,
|
|
1867
2080
|
SdButtonOutline,
|
|
1868
2081
|
SdButtonPrimary,
|
|
1869
2082
|
SdButtonSecondary,
|
|
2083
|
+
SdButtonSubmit,
|
|
1870
2084
|
SdButtonWhite,
|
|
1871
2085
|
SdClients,
|
|
1872
2086
|
SdClientsGrid,
|
|
1873
2087
|
SdClientsMarquee,
|
|
1874
2088
|
SdContainer,
|
|
1875
2089
|
SdCta,
|
|
2090
|
+
SdCtaBanner,
|
|
2091
|
+
SdCtaInline,
|
|
2092
|
+
SdCtaSubtle,
|
|
1876
2093
|
SdErrorView,
|
|
2094
|
+
SdErrorViewNotFound,
|
|
2095
|
+
SdErrorViewPage,
|
|
1877
2096
|
SdFaq,
|
|
2097
|
+
SdFaqDefault,
|
|
2098
|
+
SdFaqFilled,
|
|
2099
|
+
SdFaqWithHeader,
|
|
1878
2100
|
SdFeatureSection,
|
|
1879
2101
|
SdFeatures,
|
|
1880
2102
|
SdFooter,
|
|
1881
2103
|
SdHeader,
|
|
1882
2104
|
SdInput,
|
|
2105
|
+
SdInputEmail,
|
|
2106
|
+
SdInputPassword,
|
|
2107
|
+
SdInputSelect,
|
|
2108
|
+
SdInputText,
|
|
2109
|
+
SdInputTextarea,
|
|
2110
|
+
SdLink,
|
|
2111
|
+
SdLinkBody,
|
|
2112
|
+
SdLinkHint,
|
|
2113
|
+
SdLinkStrong,
|
|
2114
|
+
SdLinkSub,
|
|
1883
2115
|
SdMap,
|
|
1884
2116
|
SdMapSingle,
|
|
1885
2117
|
SdMapTabs,
|
|
1886
2118
|
SdModal,
|
|
1887
2119
|
SdNumberIcon,
|
|
1888
2120
|
SdPricingCard,
|
|
2121
|
+
SdPricingCardDefault,
|
|
2122
|
+
SdPricingCardFeatured,
|
|
2123
|
+
SdPricingCardGrid,
|
|
1889
2124
|
SdQuote,
|
|
2125
|
+
SdQuoteCard,
|
|
2126
|
+
SdQuotePlain,
|
|
1890
2127
|
SdSkeleton,
|
|
1891
2128
|
SdSkeletonAvatar,
|
|
1892
2129
|
SdSkeletonCard,
|
|
@@ -1895,22 +2132,44 @@ export {
|
|
|
1895
2132
|
SdSkeletonTitle,
|
|
1896
2133
|
SdSolution,
|
|
1897
2134
|
SdSolutionCard,
|
|
2135
|
+
SdSolutionCardGrid,
|
|
2136
|
+
SdSolutionCardItem,
|
|
2137
|
+
SdSolutionFiltered,
|
|
2138
|
+
SdSolutionList,
|
|
1898
2139
|
SdSteps,
|
|
2140
|
+
SdStepsBubble,
|
|
2141
|
+
SdStepsCard,
|
|
1899
2142
|
SdStepsSection,
|
|
2143
|
+
SdStepsStrip,
|
|
1900
2144
|
SdTable,
|
|
2145
|
+
SdTableSpec,
|
|
1901
2146
|
SdTabs,
|
|
1902
2147
|
SdTabsOutline,
|
|
1903
2148
|
SdTabsPills,
|
|
1904
2149
|
SdTabsUnderline,
|
|
1905
2150
|
SdTestimonial,
|
|
2151
|
+
SdTestimonialCard,
|
|
2152
|
+
SdTestimonialGrid,
|
|
2153
|
+
SdTestimonialStrip,
|
|
1906
2154
|
SdText,
|
|
2155
|
+
SdTextBody,
|
|
1907
2156
|
SdTextBox,
|
|
1908
2157
|
SdTextBoxCard,
|
|
1909
2158
|
SdTextBoxHero,
|
|
1910
2159
|
SdTextBoxSection,
|
|
1911
2160
|
SdTextBoxSub,
|
|
2161
|
+
SdTextError,
|
|
2162
|
+
SdTextEyebrow,
|
|
2163
|
+
SdTextHint,
|
|
2164
|
+
SdTextNumeric,
|
|
2165
|
+
SdTextStrong,
|
|
2166
|
+
SdTextSub,
|
|
1912
2167
|
SdTimeline,
|
|
1913
2168
|
SdTimelineSection,
|
|
1914
2169
|
SdTitle,
|
|
2170
|
+
SdTitleCard,
|
|
2171
|
+
SdTitleDisplay,
|
|
2172
|
+
SdTitleSection,
|
|
2173
|
+
SdTitleSub,
|
|
1915
2174
|
theme
|
|
1916
2175
|
};
|