@yeongseoksong/framework 1.4.0 → 1.6.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 +92 -15
- package/dist/store/index.cjs +11 -2
- package/dist/store/index.d.mts +31 -1
- package/dist/store/index.d.ts +31 -1
- package/dist/store/index.mjs +10 -2
- package/dist/ui/index.cjs +552 -270
- package/dist/ui/index.d.mts +97 -15
- package/dist/ui/index.d.ts +97 -15
- package/dist/ui/index.mjs +496 -219
- package/package.json +1 -1
package/dist/ui/index.mjs
CHANGED
|
@@ -68,6 +68,7 @@ function Logo(_props) {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// ui/atom/Tabs.tsx
|
|
71
|
+
import { useEffect, useState } from "react";
|
|
71
72
|
import { Box, Tabs } from "@mantine/core";
|
|
72
73
|
|
|
73
74
|
// ui/atom/Container.tsx
|
|
@@ -89,8 +90,30 @@ function SdScrollableList(_a4) {
|
|
|
89
90
|
return /* @__PURE__ */ jsx3(Box, { style: { overflowX: "auto", width: "100%" }, children: /* @__PURE__ */ jsx3(Tabs.List, __spreadProps(__spreadValues({}, props), { children })) });
|
|
90
91
|
}
|
|
91
92
|
function createTabs(defaults, scrollable = false) {
|
|
92
|
-
function SdTabsRoot(
|
|
93
|
-
|
|
93
|
+
function SdTabsRoot(_a4) {
|
|
94
|
+
var _b = _a4, { syncHash, value, onChange } = _b, props = __objRest(_b, ["syncHash", "value", "onChange"]);
|
|
95
|
+
const [hashValue, setHashValue] = useState(null);
|
|
96
|
+
useEffect(() => {
|
|
97
|
+
if (!syncHash) return;
|
|
98
|
+
const apply = () => {
|
|
99
|
+
const id = decodeURIComponent(window.location.hash.slice(1));
|
|
100
|
+
if (id) setHashValue(id);
|
|
101
|
+
};
|
|
102
|
+
apply();
|
|
103
|
+
window.addEventListener("hashchange", apply);
|
|
104
|
+
return () => window.removeEventListener("hashchange", apply);
|
|
105
|
+
}, [syncHash]);
|
|
106
|
+
if (!syncHash) {
|
|
107
|
+
return /* @__PURE__ */ jsx3(Tabs, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { value, onChange }));
|
|
108
|
+
}
|
|
109
|
+
const handleChange = (next) => {
|
|
110
|
+
if (next) {
|
|
111
|
+
window.history.replaceState(null, "", `#${next}`);
|
|
112
|
+
setHashValue(next);
|
|
113
|
+
}
|
|
114
|
+
onChange == null ? void 0 : onChange(next);
|
|
115
|
+
};
|
|
116
|
+
return /* @__PURE__ */ jsx3(Tabs, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { value: value != null ? value : hashValue, onChange: handleChange }));
|
|
94
117
|
}
|
|
95
118
|
SdTabsRoot.List = scrollable ? SdScrollableList : Tabs.List;
|
|
96
119
|
SdTabsRoot.Tab = Tabs.Tab;
|
|
@@ -854,7 +877,7 @@ function BubbleStep({ item, index, isLast }) {
|
|
|
854
877
|
{
|
|
855
878
|
style: { display: "flex", flexDirection: "column", alignItems: "center", flexShrink: 0 },
|
|
856
879
|
children: [
|
|
857
|
-
/* @__PURE__ */ jsx19(SdNumberIcon, { value: String(index + 1).padStart(2, "0") }),
|
|
880
|
+
/* @__PURE__ */ jsx19(SdNumberIcon, { value: String(index + 1).padStart(2, "0"), color: "primary" }),
|
|
858
881
|
!isLast && /* @__PURE__ */ jsx19(
|
|
859
882
|
Box4,
|
|
860
883
|
{
|
|
@@ -1263,7 +1286,7 @@ var SdCtaSubtle = SdCta.Subtle;
|
|
|
1263
1286
|
var SdCtaInline = SdCta.Inline;
|
|
1264
1287
|
|
|
1265
1288
|
// ui/molecule/Solution.tsx
|
|
1266
|
-
import { useState } from "react";
|
|
1289
|
+
import { useState as useState2 } from "react";
|
|
1267
1290
|
import { Button as Button2, Divider as Divider2, Group as Group8, Stack as Stack13, ThemeIcon as ThemeIcon4 } from "@mantine/core";
|
|
1268
1291
|
import Link3 from "next/link";
|
|
1269
1292
|
|
|
@@ -1304,7 +1327,7 @@ var SdSolutionCardGrid = SdSolutionCard.Grid;
|
|
|
1304
1327
|
import { jsx as jsx25, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1305
1328
|
function Filtered({ items, allLabel = "\uC804\uCCB4", cols, onSelect }) {
|
|
1306
1329
|
const categories = ["all", ...Array.from(new Set(items.map((i) => i.category)))];
|
|
1307
|
-
const [active, setActive] =
|
|
1330
|
+
const [active, setActive] = useState2("all");
|
|
1308
1331
|
const filtered = active === "all" ? items : items.filter((i) => i.category === active);
|
|
1309
1332
|
return /* @__PURE__ */ jsxs12(Stack13, { gap: "xl", children: [
|
|
1310
1333
|
/* @__PURE__ */ jsx25(SdTabs.Pills, { value: active, onChange: (v) => setActive(v != null ? v : "all"), children: /* @__PURE__ */ jsx25(SdTabs.Pills.List, { children: categories.map((cat) => /* @__PURE__ */ jsx25(SdTabs.Pills.Tab, { value: cat, children: cat === "all" ? allLabel : cat }, cat)) }) }),
|
|
@@ -1376,7 +1399,13 @@ function LogoImage({ client, height }) {
|
|
|
1376
1399
|
{
|
|
1377
1400
|
src: client.logo,
|
|
1378
1401
|
alt: client.name,
|
|
1379
|
-
style: __spreadValues({
|
|
1402
|
+
style: __spreadValues({
|
|
1403
|
+
height,
|
|
1404
|
+
width: "auto",
|
|
1405
|
+
maxWidth: "100%",
|
|
1406
|
+
objectFit: "contain",
|
|
1407
|
+
display: "block"
|
|
1408
|
+
}, grayStyle),
|
|
1380
1409
|
onMouseEnter: (e) => Object.assign(e.currentTarget.style, colorStyle),
|
|
1381
1410
|
onMouseLeave: (e) => Object.assign(e.currentTarget.style, grayStyle)
|
|
1382
1411
|
}
|
|
@@ -1394,7 +1423,10 @@ function Grid4({
|
|
|
1394
1423
|
display: "flex",
|
|
1395
1424
|
alignItems: "center",
|
|
1396
1425
|
justifyContent: "center",
|
|
1397
|
-
padding: "12px 8px"
|
|
1426
|
+
padding: "12px 8px",
|
|
1427
|
+
minWidth: 0,
|
|
1428
|
+
// 그리드 트랙이 이미지 intrinsic width로 밀려 깨지는 것 방지
|
|
1429
|
+
overflow: "hidden"
|
|
1398
1430
|
},
|
|
1399
1431
|
children: /* @__PURE__ */ jsx26(LogoImage, { client, height: logoHeight })
|
|
1400
1432
|
},
|
|
@@ -1439,7 +1471,7 @@ var SdClientsGrid = Grid4;
|
|
|
1439
1471
|
var SdClientsMarquee = Marquee;
|
|
1440
1472
|
|
|
1441
1473
|
// ui/molecule/Map.tsx
|
|
1442
|
-
import { useState as
|
|
1474
|
+
import { useState as useState3 } from "react";
|
|
1443
1475
|
import { Box as Box10, Stack as Stack14 } from "@mantine/core";
|
|
1444
1476
|
import { jsx as jsx27, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1445
1477
|
function MapFrame({ address, height }) {
|
|
@@ -1473,7 +1505,7 @@ function Single(_a4) {
|
|
|
1473
1505
|
function Tabs2({ addresses, height = 400 }) {
|
|
1474
1506
|
var _a4, _b, _c;
|
|
1475
1507
|
const mapped = addresses.filter((a) => a.embbedUrl);
|
|
1476
|
-
const [active, setActive] =
|
|
1508
|
+
const [active, setActive] = useState3((_b = (_a4 = mapped[0]) == null ? void 0 : _a4.label) != null ? _b : "");
|
|
1477
1509
|
if (mapped.length === 0) return null;
|
|
1478
1510
|
if (mapped.length === 1) return /* @__PURE__ */ jsx27(MapFrame, { address: mapped[0], height });
|
|
1479
1511
|
const current = (_c = mapped.find((a) => a.label === active)) != null ? _c : mapped[0];
|
|
@@ -1491,11 +1523,96 @@ var SdMap = {
|
|
|
1491
1523
|
var SdMapSingle = Single;
|
|
1492
1524
|
var SdMapTabs = Tabs2;
|
|
1493
1525
|
|
|
1526
|
+
// ui/molecule/Breadcrumb.tsx
|
|
1527
|
+
import { Box as Box11, Breadcrumbs } from "@mantine/core";
|
|
1528
|
+
import { usePathname } from "next/navigation";
|
|
1529
|
+
import { IconChevronRight, IconHome } from "@tabler/icons-react";
|
|
1530
|
+
|
|
1531
|
+
// ui/template/NavProvider.tsx
|
|
1532
|
+
import { createContext, useContext } from "react";
|
|
1533
|
+
import { jsx as jsx28 } from "react/jsx-runtime";
|
|
1534
|
+
var NavContext = createContext([]);
|
|
1535
|
+
function NavProvider({
|
|
1536
|
+
children,
|
|
1537
|
+
navItems
|
|
1538
|
+
}) {
|
|
1539
|
+
return /* @__PURE__ */ jsx28(NavContext.Provider, { value: navItems, children });
|
|
1540
|
+
}
|
|
1541
|
+
function useNav() {
|
|
1542
|
+
return useContext(NavContext);
|
|
1543
|
+
}
|
|
1544
|
+
|
|
1545
|
+
// ui/molecule/Breadcrumb.tsx
|
|
1546
|
+
import { jsx as jsx29, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1547
|
+
function normalizePath(href) {
|
|
1548
|
+
if (!href) return "";
|
|
1549
|
+
const trimmed = href.replace(/\/+$/, "");
|
|
1550
|
+
return trimmed === "" ? "/" : trimmed;
|
|
1551
|
+
}
|
|
1552
|
+
function buildTrail(navItems, currentHref) {
|
|
1553
|
+
const target = normalizePath(currentHref);
|
|
1554
|
+
const byId = new Map(navItems.map((item) => [item.id, item]));
|
|
1555
|
+
let current = navItems.find((item) => normalizePath(item.href) === target);
|
|
1556
|
+
if (!current) {
|
|
1557
|
+
current = navItems.filter((item) => item.href && target.startsWith(normalizePath(item.href) + "/")).sort((a, b) => normalizePath(b.href).length - normalizePath(a.href).length)[0];
|
|
1558
|
+
}
|
|
1559
|
+
if (!current) return [];
|
|
1560
|
+
const trail = [];
|
|
1561
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1562
|
+
let node = current;
|
|
1563
|
+
while (node && !seen.has(node.id)) {
|
|
1564
|
+
seen.add(node.id);
|
|
1565
|
+
trail.unshift(node);
|
|
1566
|
+
node = node.parentId != null ? byId.get(node.parentId) : void 0;
|
|
1567
|
+
}
|
|
1568
|
+
return trail;
|
|
1569
|
+
}
|
|
1570
|
+
function SdBreadcrumb(_a4) {
|
|
1571
|
+
var _b = _a4, {
|
|
1572
|
+
navItems: navItemsProp,
|
|
1573
|
+
currentHref,
|
|
1574
|
+
homeHref = "/",
|
|
1575
|
+
homeLabel = "\uD648"
|
|
1576
|
+
} = _b, boxProps = __objRest(_b, [
|
|
1577
|
+
"navItems",
|
|
1578
|
+
"currentHref",
|
|
1579
|
+
"homeHref",
|
|
1580
|
+
"homeLabel"
|
|
1581
|
+
]);
|
|
1582
|
+
var _a5;
|
|
1583
|
+
const navFromContext = useNav();
|
|
1584
|
+
const navItems = navItemsProp != null ? navItemsProp : navFromContext;
|
|
1585
|
+
const pathname = usePathname();
|
|
1586
|
+
const trail = buildTrail(navItems, (_a5 = currentHref != null ? currentHref : pathname) != null ? _a5 : "");
|
|
1587
|
+
return /* @__PURE__ */ jsx29(Box11, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ jsxs15(
|
|
1588
|
+
Breadcrumbs,
|
|
1589
|
+
{
|
|
1590
|
+
separator: /* @__PURE__ */ jsx29(IconChevronRight, { size: 14, stroke: 2, color: "var(--mantine-color-slate-4)" }),
|
|
1591
|
+
separatorMargin: "xs",
|
|
1592
|
+
children: [
|
|
1593
|
+
/* @__PURE__ */ jsx29(
|
|
1594
|
+
SdLink.Sub,
|
|
1595
|
+
{
|
|
1596
|
+
href: homeHref,
|
|
1597
|
+
"aria-label": homeLabel,
|
|
1598
|
+
style: { display: "inline-flex", alignItems: "center" },
|
|
1599
|
+
children: /* @__PURE__ */ jsx29(IconHome, { size: 16, stroke: 2 })
|
|
1600
|
+
}
|
|
1601
|
+
),
|
|
1602
|
+
trail.map((item, i) => {
|
|
1603
|
+
const isLast = i === trail.length - 1;
|
|
1604
|
+
return isLast ? /* @__PURE__ */ jsx29(SdLink.Body, { children: item.label }, item.id) : /* @__PURE__ */ jsx29(SdLink.Sub, { href: item.href, children: item.label }, item.id);
|
|
1605
|
+
})
|
|
1606
|
+
]
|
|
1607
|
+
}
|
|
1608
|
+
) }));
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1494
1611
|
// ui/organism/HeroCarousel.tsx
|
|
1495
1612
|
import { Carousel } from "@mantine/carousel";
|
|
1496
|
-
import { Anchor as Anchor2, Box as
|
|
1613
|
+
import { Anchor as Anchor2, Box as Box12, Group as Group9, Stack as Stack15 } from "@mantine/core";
|
|
1497
1614
|
import { IconArrowNarrowRight } from "@tabler/icons-react";
|
|
1498
|
-
import { Fragment as Fragment3, jsx as
|
|
1615
|
+
import { Fragment as Fragment3, jsx as jsx30, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1499
1616
|
var variantMap = {
|
|
1500
1617
|
primary: SdButton.Primary,
|
|
1501
1618
|
secondary: SdButton.Secondary,
|
|
@@ -1505,13 +1622,13 @@ var variantMap = {
|
|
|
1505
1622
|
function CtaButton({ cta }) {
|
|
1506
1623
|
var _a4;
|
|
1507
1624
|
const Button3 = variantMap[(_a4 = cta.variant) != null ? _a4 : "primary"];
|
|
1508
|
-
return /* @__PURE__ */
|
|
1625
|
+
return /* @__PURE__ */ jsx30(Anchor2, { href: cta.href, underline: "never", children: cta.icon ? /* @__PURE__ */ jsx30(Button3, { size: "md", rightSection: /* @__PURE__ */ jsx30(IconArrowNarrowRight, {}), children: cta.label }) : /* @__PURE__ */ jsx30(Button3, { size: "md", children: cta.label }) });
|
|
1509
1626
|
}
|
|
1510
1627
|
function HeroCarousel({ slides, children }) {
|
|
1511
|
-
if (children) return /* @__PURE__ */
|
|
1628
|
+
if (children) return /* @__PURE__ */ jsx30(Fragment3, { children });
|
|
1512
1629
|
const filterdSlides = filterAndSort(slides);
|
|
1513
|
-
return /* @__PURE__ */
|
|
1514
|
-
|
|
1630
|
+
return /* @__PURE__ */ jsx30(Carousel, { withIndicators: true, height: "60svh", children: filterdSlides.map((slide, i) => /* @__PURE__ */ jsx30(Carousel.Slide, { children: /* @__PURE__ */ jsx30(
|
|
1631
|
+
Box12,
|
|
1515
1632
|
{
|
|
1516
1633
|
style: {
|
|
1517
1634
|
height: "100%",
|
|
@@ -1522,8 +1639,8 @@ function HeroCarousel({ slides, children }) {
|
|
|
1522
1639
|
alignItems: "center",
|
|
1523
1640
|
justifyContent: "center"
|
|
1524
1641
|
},
|
|
1525
|
-
children: /* @__PURE__ */
|
|
1526
|
-
/* @__PURE__ */
|
|
1642
|
+
children: /* @__PURE__ */ jsxs16(Stack15, { align: "center", style: { textAlign: "center", maxWidth: 780 }, px: "xl", children: [
|
|
1643
|
+
/* @__PURE__ */ jsx30(
|
|
1527
1644
|
SdTextBox.Hero,
|
|
1528
1645
|
{
|
|
1529
1646
|
title: slide.title,
|
|
@@ -1532,18 +1649,27 @@ function HeroCarousel({ slides, children }) {
|
|
|
1532
1649
|
align: "center"
|
|
1533
1650
|
}
|
|
1534
1651
|
),
|
|
1535
|
-
slide.ctas && slide.ctas.length > 0 && /* @__PURE__ */
|
|
1652
|
+
slide.ctas && slide.ctas.length > 0 && /* @__PURE__ */ jsx30(Group9, { gap: "sm", mt: "md", children: slide.ctas.map((cta, i2) => /* @__PURE__ */ jsx30(CtaButton, { cta }, cta.href)) })
|
|
1536
1653
|
] })
|
|
1537
1654
|
}
|
|
1538
1655
|
) }, i)) });
|
|
1539
1656
|
}
|
|
1540
1657
|
|
|
1541
1658
|
// ui/organism/Header.tsx
|
|
1542
|
-
import { Box as
|
|
1659
|
+
import { Box as Box13, Burger, Drawer, Group as Group10, Menu, NavLink, Stack as Stack16 } from "@mantine/core";
|
|
1543
1660
|
import { IconChevronDown } from "@tabler/icons-react";
|
|
1544
1661
|
import { useDisclosure, useFocusWithin, useHover, useMergedRef } from "@mantine/hooks";
|
|
1545
|
-
import { Fragment as Fragment4, jsx as
|
|
1662
|
+
import { Fragment as Fragment4, jsx as jsx31, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1546
1663
|
var BAR_HEIGHT = 60;
|
|
1664
|
+
var MAX_DEPTH = 3;
|
|
1665
|
+
var NAV_LINK_STYLES = {
|
|
1666
|
+
label: {
|
|
1667
|
+
fontWeight: textStyles.Body.fw,
|
|
1668
|
+
fontSize: `var(--mantine-font-size-${textStyles.Body.fz})`,
|
|
1669
|
+
color: toCssColor(textStyles.Body.c),
|
|
1670
|
+
lineHeight: textStyles.Body.lh
|
|
1671
|
+
}
|
|
1672
|
+
};
|
|
1547
1673
|
function useNavTree(navItems) {
|
|
1548
1674
|
const visibleItems = filterAndSort(navItems);
|
|
1549
1675
|
return {
|
|
@@ -1552,27 +1678,36 @@ function useNavTree(navItems) {
|
|
|
1552
1678
|
hasAnyChildren: visibleItems.some((item) => item.parentId)
|
|
1553
1679
|
};
|
|
1554
1680
|
}
|
|
1555
|
-
function
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1681
|
+
function MobileNavNode({ item, depth, childrenOf, close }) {
|
|
1682
|
+
const kids = depth < MAX_DEPTH ? childrenOf(item.id) : [];
|
|
1683
|
+
if (kids.length === 0) {
|
|
1684
|
+
return /* @__PURE__ */ jsx31(Box13, { px: "sm", py: 8, children: /* @__PURE__ */ jsx31(SdLink.Body, { href: item.href, onClick: close, children: item.label }) });
|
|
1685
|
+
}
|
|
1686
|
+
return /* @__PURE__ */ jsx31(
|
|
1687
|
+
NavLink,
|
|
1688
|
+
{
|
|
1689
|
+
label: item.label,
|
|
1690
|
+
styles: NAV_LINK_STYLES,
|
|
1691
|
+
component: item.href ? "a" : "button",
|
|
1692
|
+
href: item.href,
|
|
1693
|
+
childrenOffset: 28,
|
|
1694
|
+
children: kids.map((kid) => /* @__PURE__ */ jsx31(
|
|
1695
|
+
MobileNavNode,
|
|
1564
1696
|
{
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
onClick: kids.length > 0 ? void 0 : close,
|
|
1570
|
-
children: kids.map((kid) => /* @__PURE__ */ jsx29(NavLink, { label: kid.label, href: kid.href, onClick: close }, kid.id))
|
|
1697
|
+
item: kid,
|
|
1698
|
+
depth: depth + 1,
|
|
1699
|
+
childrenOf,
|
|
1700
|
+
close
|
|
1571
1701
|
},
|
|
1572
|
-
|
|
1573
|
-
)
|
|
1574
|
-
}
|
|
1575
|
-
|
|
1702
|
+
kid.id
|
|
1703
|
+
))
|
|
1704
|
+
}
|
|
1705
|
+
);
|
|
1706
|
+
}
|
|
1707
|
+
function MobileNav({ opened, close, topItems, childrenOf, loginFlag }) {
|
|
1708
|
+
return /* @__PURE__ */ jsx31(Drawer, { opened, onClose: close, hiddenFrom: "sm", size: "xs", children: /* @__PURE__ */ jsxs17(Stack16, { gap: 0, children: [
|
|
1709
|
+
topItems.map((item) => /* @__PURE__ */ jsx31(MobileNavNode, { item, depth: 1, childrenOf, close }, item.id)),
|
|
1710
|
+
loginFlag && /* @__PURE__ */ jsx31(Stack16, { gap: "xs", mt: "md", children: /* @__PURE__ */ jsx31(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1576
1711
|
] }) });
|
|
1577
1712
|
}
|
|
1578
1713
|
function MegaHeader({ navItems, loginFlag }) {
|
|
@@ -1582,9 +1717,9 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1582
1717
|
const { focused, ref: focusRef } = useFocusWithin();
|
|
1583
1718
|
const rootRef = useMergedRef(hoverRef, focusRef);
|
|
1584
1719
|
const expanded = hasAnyChildren && (hovered || focused);
|
|
1585
|
-
return /* @__PURE__ */
|
|
1586
|
-
/* @__PURE__ */
|
|
1587
|
-
|
|
1720
|
+
return /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
1721
|
+
/* @__PURE__ */ jsx31(
|
|
1722
|
+
Box13,
|
|
1588
1723
|
{
|
|
1589
1724
|
ref: rootRef,
|
|
1590
1725
|
pos: "relative",
|
|
@@ -1594,12 +1729,12 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1594
1729
|
borderBottom: expanded ? "1px solid var(--mantine-color-slate-2)" : void 0,
|
|
1595
1730
|
transition: "box-shadow 0.15s"
|
|
1596
1731
|
},
|
|
1597
|
-
children: /* @__PURE__ */
|
|
1598
|
-
/* @__PURE__ */
|
|
1599
|
-
/* @__PURE__ */
|
|
1732
|
+
children: /* @__PURE__ */ jsx31(SdContainer, { children: /* @__PURE__ */ jsxs17(Group10, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
|
|
1733
|
+
/* @__PURE__ */ jsx31(Group10, { h: BAR_HEIGHT, align: "center", children: /* @__PURE__ */ jsx31(Logo, {}) }),
|
|
1734
|
+
/* @__PURE__ */ jsx31(Group10, { gap: "xl", align: "flex-start", wrap: "nowrap", visibleFrom: "sm", children: topItems.map((item) => {
|
|
1600
1735
|
const kids = childrenOf(item.id);
|
|
1601
|
-
return /* @__PURE__ */
|
|
1602
|
-
/* @__PURE__ */
|
|
1736
|
+
return /* @__PURE__ */ jsxs17(Stack16, { gap: 0, align: "center", children: [
|
|
1737
|
+
/* @__PURE__ */ jsx31(Group10, { h: BAR_HEIGHT, align: "center", children: /* @__PURE__ */ jsx31(SdLink.Body, { href: item.href, children: item.label }) }),
|
|
1603
1738
|
kids.length > 0 && /*
|
|
1604
1739
|
Mantine Collapse를 쓰지 않는다 — 접힐 때 display:none이 되어
|
|
1605
1740
|
하위 링크가 폭 계산에서 빠졌다가 펼칠 때 다시 들어오면서
|
|
@@ -1607,8 +1742,8 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1607
1742
|
height 0 + overflow hidden은 폭 기여를 유지하므로 간격이 고정된다.
|
|
1608
1743
|
visibility:hidden이 접힌 상태의 링크를 탭 순서에서도 빼준다.
|
|
1609
1744
|
*/
|
|
1610
|
-
/* @__PURE__ */
|
|
1611
|
-
|
|
1745
|
+
/* @__PURE__ */ jsx31(
|
|
1746
|
+
Box13,
|
|
1612
1747
|
{
|
|
1613
1748
|
"aria-hidden": !expanded,
|
|
1614
1749
|
style: {
|
|
@@ -1618,19 +1753,28 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1618
1753
|
visibility: expanded ? "visible" : "hidden",
|
|
1619
1754
|
transition: "opacity 0.15s ease"
|
|
1620
1755
|
},
|
|
1621
|
-
children: /* @__PURE__ */
|
|
1756
|
+
children: /* @__PURE__ */ jsx31(Stack16, { gap: "xs", pt: 4, pb: "lg", align: "center", children: kids.map((kid) => {
|
|
1757
|
+
const grandkids = childrenOf(kid.id);
|
|
1758
|
+
if (grandkids.length === 0) {
|
|
1759
|
+
return /* @__PURE__ */ jsx31(SdLink.Body, { href: kid.href, children: kid.label }, kid.id);
|
|
1760
|
+
}
|
|
1761
|
+
return /* @__PURE__ */ jsxs17(Stack16, { gap: 2, align: "center", children: [
|
|
1762
|
+
/* @__PURE__ */ jsx31(SdLink.Body, { href: kid.href, children: kid.label }),
|
|
1763
|
+
grandkids.map((gk) => /* @__PURE__ */ jsx31(SdLink.Sub, { href: gk.href, children: gk.label }, gk.id))
|
|
1764
|
+
] }, kid.id);
|
|
1765
|
+
}) })
|
|
1622
1766
|
}
|
|
1623
1767
|
)
|
|
1624
1768
|
] }, item.id);
|
|
1625
1769
|
}) }),
|
|
1626
|
-
/* @__PURE__ */
|
|
1627
|
-
/* @__PURE__ */
|
|
1628
|
-
loginFlag && /* @__PURE__ */
|
|
1770
|
+
/* @__PURE__ */ jsxs17(Group10, { h: BAR_HEIGHT, align: "center", gap: "sm", wrap: "nowrap", children: [
|
|
1771
|
+
/* @__PURE__ */ jsx31(Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
|
|
1772
|
+
loginFlag && /* @__PURE__ */ jsx31(Group10, { gap: "sm", visibleFrom: "sm", children: /* @__PURE__ */ jsx31(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1629
1773
|
] })
|
|
1630
1774
|
] }) })
|
|
1631
1775
|
}
|
|
1632
1776
|
),
|
|
1633
|
-
/* @__PURE__ */
|
|
1777
|
+
/* @__PURE__ */ jsx31(
|
|
1634
1778
|
MobileNav,
|
|
1635
1779
|
{
|
|
1636
1780
|
opened,
|
|
@@ -1642,16 +1786,19 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1642
1786
|
)
|
|
1643
1787
|
] });
|
|
1644
1788
|
}
|
|
1789
|
+
function renderMenuLeaf(item) {
|
|
1790
|
+
return item.href ? /* @__PURE__ */ jsx31(Menu.Item, { component: "a", href: item.href, children: item.label }, item.id) : /* @__PURE__ */ jsx31(Menu.Label, { children: item.label }, item.id);
|
|
1791
|
+
}
|
|
1645
1792
|
function SimpleHeader({ navItems, loginFlag }) {
|
|
1646
1793
|
const [opened, { toggle, close }] = useDisclosure();
|
|
1647
1794
|
const { topItems, childrenOf } = useNavTree(navItems);
|
|
1648
|
-
return /* @__PURE__ */
|
|
1649
|
-
/* @__PURE__ */
|
|
1650
|
-
/* @__PURE__ */
|
|
1651
|
-
/* @__PURE__ */
|
|
1795
|
+
return /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
1796
|
+
/* @__PURE__ */ jsx31(Box13, { bg: "var(--mantine-color-body)", children: /* @__PURE__ */ jsx31(SdContainer, { children: /* @__PURE__ */ jsxs17(Group10, { h: BAR_HEIGHT, justify: "space-between", align: "center", wrap: "nowrap", children: [
|
|
1797
|
+
/* @__PURE__ */ jsx31(Logo, {}),
|
|
1798
|
+
/* @__PURE__ */ jsx31(Group10, { gap: "xl", align: "center", wrap: "nowrap", visibleFrom: "sm", children: topItems.map((item) => {
|
|
1652
1799
|
const kids = childrenOf(item.id);
|
|
1653
1800
|
if (kids.length === 0) {
|
|
1654
|
-
return /* @__PURE__ */
|
|
1801
|
+
return /* @__PURE__ */ jsx31(SdLink.Body, { href: item.href, children: item.label }, item.id);
|
|
1655
1802
|
}
|
|
1656
1803
|
return (
|
|
1657
1804
|
/*
|
|
@@ -1659,7 +1806,7 @@ function SimpleHeader({ navItems, loginFlag }) {
|
|
|
1659
1806
|
Menu.Target은 ref를 받을 수 있는 단일 엘리먼트여야 하므로
|
|
1660
1807
|
SdLink/SdText가 아니라 Box를 타깃으로 두고 라벨을 그 안에 넣는다.
|
|
1661
1808
|
*/
|
|
1662
|
-
/* @__PURE__ */
|
|
1809
|
+
/* @__PURE__ */ jsxs17(
|
|
1663
1810
|
Menu,
|
|
1664
1811
|
{
|
|
1665
1812
|
trigger: "click-hover",
|
|
@@ -1671,25 +1818,91 @@ function SimpleHeader({ navItems, loginFlag }) {
|
|
|
1671
1818
|
radius: "md",
|
|
1672
1819
|
withinPortal: true,
|
|
1673
1820
|
children: [
|
|
1674
|
-
/* @__PURE__ */
|
|
1675
|
-
/* @__PURE__ */
|
|
1676
|
-
/* @__PURE__ */
|
|
1821
|
+
/* @__PURE__ */ jsx31(Menu.Target, { children: /* @__PURE__ */ jsx31(Box13, { style: { cursor: "pointer" }, children: /* @__PURE__ */ jsxs17(Group10, { gap: 4, align: "center", wrap: "nowrap", children: [
|
|
1822
|
+
/* @__PURE__ */ jsx31(SdLink.Body, { href: item.href, children: item.label }),
|
|
1823
|
+
/* @__PURE__ */ jsx31(IconChevronDown, { size: 14, stroke: 2 })
|
|
1677
1824
|
] }) }) }),
|
|
1678
|
-
/* @__PURE__ */
|
|
1679
|
-
|
|
1680
|
-
|
|
1825
|
+
/* @__PURE__ */ jsx31(Menu.Dropdown, { children: kids.map((kid) => {
|
|
1826
|
+
const grandkids = childrenOf(kid.id);
|
|
1827
|
+
if (grandkids.length > 0) {
|
|
1828
|
+
return /* @__PURE__ */ jsxs17(Menu.Sub, { children: [
|
|
1829
|
+
/* @__PURE__ */ jsx31(Menu.Sub.Target, { children: /* @__PURE__ */ jsx31(Menu.Sub.Item, { children: kid.label }) }),
|
|
1830
|
+
/* @__PURE__ */ jsx31(Menu.Sub.Dropdown, { children: grandkids.map(renderMenuLeaf) })
|
|
1831
|
+
] }, kid.id);
|
|
1832
|
+
}
|
|
1833
|
+
return renderMenuLeaf(kid);
|
|
1834
|
+
}) })
|
|
1681
1835
|
]
|
|
1682
1836
|
},
|
|
1683
1837
|
item.id
|
|
1684
1838
|
)
|
|
1685
1839
|
);
|
|
1686
1840
|
}) }),
|
|
1687
|
-
/* @__PURE__ */
|
|
1688
|
-
/* @__PURE__ */
|
|
1689
|
-
loginFlag && /* @__PURE__ */
|
|
1841
|
+
/* @__PURE__ */ jsxs17(Group10, { align: "center", gap: "sm", wrap: "nowrap", children: [
|
|
1842
|
+
/* @__PURE__ */ jsx31(Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
|
|
1843
|
+
loginFlag && /* @__PURE__ */ jsx31(Group10, { gap: "sm", visibleFrom: "sm", children: /* @__PURE__ */ jsx31(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1844
|
+
] })
|
|
1845
|
+
] }) }) }),
|
|
1846
|
+
/* @__PURE__ */ jsx31(
|
|
1847
|
+
MobileNav,
|
|
1848
|
+
{
|
|
1849
|
+
opened,
|
|
1850
|
+
close,
|
|
1851
|
+
topItems,
|
|
1852
|
+
childrenOf,
|
|
1853
|
+
loginFlag
|
|
1854
|
+
}
|
|
1855
|
+
)
|
|
1856
|
+
] });
|
|
1857
|
+
}
|
|
1858
|
+
function PanelHeader({ navItems, loginFlag }) {
|
|
1859
|
+
const [opened, { toggle, close }] = useDisclosure();
|
|
1860
|
+
const { topItems, childrenOf } = useNavTree(navItems);
|
|
1861
|
+
return /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
1862
|
+
/* @__PURE__ */ jsx31(Box13, { bg: "var(--mantine-color-body)", children: /* @__PURE__ */ jsx31(SdContainer, { children: /* @__PURE__ */ jsxs17(Group10, { h: BAR_HEIGHT, justify: "space-between", align: "center", wrap: "nowrap", children: [
|
|
1863
|
+
/* @__PURE__ */ jsx31(Logo, {}),
|
|
1864
|
+
/* @__PURE__ */ jsx31(Group10, { gap: "xl", align: "center", wrap: "nowrap", visibleFrom: "sm", children: topItems.map((item) => {
|
|
1865
|
+
const kids = childrenOf(item.id);
|
|
1866
|
+
if (kids.length === 0) {
|
|
1867
|
+
return /* @__PURE__ */ jsx31(SdLink.Body, { href: item.href, children: item.label }, item.id);
|
|
1868
|
+
}
|
|
1869
|
+
return /* @__PURE__ */ jsxs17(
|
|
1870
|
+
Menu,
|
|
1871
|
+
{
|
|
1872
|
+
trigger: "click-hover",
|
|
1873
|
+
openDelay: 50,
|
|
1874
|
+
closeDelay: 120,
|
|
1875
|
+
position: "bottom",
|
|
1876
|
+
offset: 12,
|
|
1877
|
+
shadow: "md",
|
|
1878
|
+
radius: "md",
|
|
1879
|
+
withinPortal: true,
|
|
1880
|
+
children: [
|
|
1881
|
+
/* @__PURE__ */ jsx31(Menu.Target, { children: /* @__PURE__ */ jsx31(Box13, { style: { cursor: "pointer" }, children: /* @__PURE__ */ jsxs17(Group10, { gap: 4, align: "center", wrap: "nowrap", children: [
|
|
1882
|
+
/* @__PURE__ */ jsx31(SdLink.Body, { href: item.href, children: item.label }),
|
|
1883
|
+
/* @__PURE__ */ jsx31(IconChevronDown, { size: 14, stroke: 2 })
|
|
1884
|
+
] }) }) }),
|
|
1885
|
+
/* @__PURE__ */ jsx31(Menu.Dropdown, { children: /* @__PURE__ */ jsx31(Stack16, { gap: "xs", p: "xs", children: kids.map((kid) => {
|
|
1886
|
+
const grandkids = childrenOf(kid.id);
|
|
1887
|
+
if (grandkids.length === 0) {
|
|
1888
|
+
return /* @__PURE__ */ jsx31(SdLink.Body, { href: kid.href, children: kid.label }, kid.id);
|
|
1889
|
+
}
|
|
1890
|
+
return /* @__PURE__ */ jsxs17(Stack16, { gap: 2, children: [
|
|
1891
|
+
/* @__PURE__ */ jsx31(SdLink.Body, { href: kid.href, children: kid.label }),
|
|
1892
|
+
grandkids.map((gk) => /* @__PURE__ */ jsx31(SdLink.Sub, { href: gk.href, pl: "sm", children: gk.label }, gk.id))
|
|
1893
|
+
] }, kid.id);
|
|
1894
|
+
}) }) })
|
|
1895
|
+
]
|
|
1896
|
+
},
|
|
1897
|
+
item.id
|
|
1898
|
+
);
|
|
1899
|
+
}) }),
|
|
1900
|
+
/* @__PURE__ */ jsxs17(Group10, { align: "center", gap: "sm", wrap: "nowrap", children: [
|
|
1901
|
+
/* @__PURE__ */ jsx31(Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
|
|
1902
|
+
loginFlag && /* @__PURE__ */ jsx31(Group10, { gap: "sm", visibleFrom: "sm", children: /* @__PURE__ */ jsx31(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1690
1903
|
] })
|
|
1691
1904
|
] }) }) }),
|
|
1692
|
-
/* @__PURE__ */
|
|
1905
|
+
/* @__PURE__ */ jsx31(
|
|
1693
1906
|
MobileNav,
|
|
1694
1907
|
{
|
|
1695
1908
|
opened,
|
|
@@ -1701,12 +1914,17 @@ function SimpleHeader({ navItems, loginFlag }) {
|
|
|
1701
1914
|
)
|
|
1702
1915
|
] });
|
|
1703
1916
|
}
|
|
1704
|
-
var SdHeader = Object.assign(MegaHeader, {
|
|
1917
|
+
var SdHeader = Object.assign(MegaHeader, {
|
|
1918
|
+
Mega: MegaHeader,
|
|
1919
|
+
Simple: SimpleHeader,
|
|
1920
|
+
Panel: PanelHeader
|
|
1921
|
+
});
|
|
1705
1922
|
var SdHeaderMega = MegaHeader;
|
|
1706
1923
|
var SdHeaderSimple = SimpleHeader;
|
|
1924
|
+
var SdHeaderPanel = PanelHeader;
|
|
1707
1925
|
|
|
1708
1926
|
// ui/organism/Footer.tsx
|
|
1709
|
-
import { ActionIcon, Box as
|
|
1927
|
+
import { ActionIcon, Box as Box14, Divider as Divider3, Flex, Grid as Grid5, Group as Group11, SimpleGrid as SimpleGrid6, Stack as Stack17 } from "@mantine/core";
|
|
1710
1928
|
import {
|
|
1711
1929
|
IconBrandFacebook,
|
|
1712
1930
|
IconBrandGithub,
|
|
@@ -1716,16 +1934,16 @@ import {
|
|
|
1716
1934
|
IconBrandYoutube,
|
|
1717
1935
|
IconWorld
|
|
1718
1936
|
} from "@tabler/icons-react";
|
|
1719
|
-
import { Fragment as Fragment5, jsx as
|
|
1937
|
+
import { Fragment as Fragment5, jsx as jsx32, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1720
1938
|
function FooterNavColumns({ items }) {
|
|
1721
1939
|
const topLevel = items.filter((item) => !item.parentId);
|
|
1722
1940
|
const getChildren = (parentId) => items.filter((item) => item.parentId === parentId);
|
|
1723
1941
|
const CHILD_THRESH = 4;
|
|
1724
|
-
return /* @__PURE__ */
|
|
1725
|
-
/* @__PURE__ */
|
|
1942
|
+
return /* @__PURE__ */ jsx32(Fragment5, { children: topLevel.map((group) => /* @__PURE__ */ jsx32(Grid5.Col, { span: { base: 6, sm: 4, md: "auto" }, children: /* @__PURE__ */ jsxs18(Stack17, { gap: "xs", children: [
|
|
1943
|
+
/* @__PURE__ */ jsx32(SdLink.Sub, { href: group.href, children: group.label }, group.id),
|
|
1726
1944
|
getChildren(group.id).map((link, id) => {
|
|
1727
1945
|
if (id >= CHILD_THRESH) return;
|
|
1728
|
-
return /* @__PURE__ */
|
|
1946
|
+
return /* @__PURE__ */ jsx32(SdLink.Hint, { href: link.href, children: link.label }, link.id);
|
|
1729
1947
|
})
|
|
1730
1948
|
] }) }, group.id)) });
|
|
1731
1949
|
}
|
|
@@ -1739,10 +1957,10 @@ var SOCIAL_ICONS = {
|
|
|
1739
1957
|
blog: IconWorld
|
|
1740
1958
|
};
|
|
1741
1959
|
function FooterSocials({ items }) {
|
|
1742
|
-
return /* @__PURE__ */
|
|
1960
|
+
return /* @__PURE__ */ jsx32(Group11, { gap: 0, wrap: "nowrap", children: items.map((item) => {
|
|
1743
1961
|
var _a4, _b;
|
|
1744
1962
|
const Icon = (_a4 = SOCIAL_ICONS[item.platform]) != null ? _a4 : IconWorld;
|
|
1745
|
-
return /* @__PURE__ */
|
|
1963
|
+
return /* @__PURE__ */ jsx32(
|
|
1746
1964
|
ActionIcon,
|
|
1747
1965
|
{
|
|
1748
1966
|
component: "a",
|
|
@@ -1753,54 +1971,54 @@ function FooterSocials({ items }) {
|
|
|
1753
1971
|
color: "gray",
|
|
1754
1972
|
variant: "subtle",
|
|
1755
1973
|
"aria-label": (_b = item.label) != null ? _b : item.platform,
|
|
1756
|
-
children: /* @__PURE__ */
|
|
1974
|
+
children: /* @__PURE__ */ jsx32(Icon, { size: 18, stroke: 1.5 })
|
|
1757
1975
|
},
|
|
1758
1976
|
item.url
|
|
1759
1977
|
);
|
|
1760
1978
|
}) });
|
|
1761
1979
|
}
|
|
1762
1980
|
function InfoCell({ label, children }) {
|
|
1763
|
-
return /* @__PURE__ */
|
|
1764
|
-
/* @__PURE__ */
|
|
1765
|
-
typeof children === "string" ? /* @__PURE__ */
|
|
1981
|
+
return /* @__PURE__ */ jsxs18(Group11, { gap: 6, wrap: "nowrap", align: "baseline", children: [
|
|
1982
|
+
/* @__PURE__ */ jsx32(SdText.Sub, { c: "slate.4", style: { whiteSpace: "nowrap" }, children: label }),
|
|
1983
|
+
typeof children === "string" ? /* @__PURE__ */ jsx32(SdText.Sub, { children }) : children
|
|
1766
1984
|
] });
|
|
1767
1985
|
}
|
|
1768
1986
|
function FooterCompanyInfo({ company }) {
|
|
1769
1987
|
const sortedAddresses = [...company.addresses].sort((a, b) => a.order - b.order);
|
|
1770
|
-
return /* @__PURE__ */
|
|
1771
|
-
/* @__PURE__ */
|
|
1772
|
-
/* @__PURE__ */
|
|
1773
|
-
sortedAddresses.map((addr) => /* @__PURE__ */
|
|
1774
|
-
/* @__PURE__ */
|
|
1775
|
-
company.fax && /* @__PURE__ */
|
|
1776
|
-
/* @__PURE__ */
|
|
1988
|
+
return /* @__PURE__ */ jsxs18(SimpleGrid6, { cols: { base: 2, sm: 2, md: 1 }, spacing: "md", verticalSpacing: 0, children: [
|
|
1989
|
+
/* @__PURE__ */ jsx32(InfoCell, { label: "\uC0C1\uD638", children: company.name }),
|
|
1990
|
+
/* @__PURE__ */ jsx32(InfoCell, { label: "\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638", children: company.registrationNumber }),
|
|
1991
|
+
sortedAddresses.map((addr) => /* @__PURE__ */ jsx32(InfoCell, { label: addr.label, children: addr.address }, addr.label)),
|
|
1992
|
+
/* @__PURE__ */ jsx32(InfoCell, { label: "Tel", children: /* @__PURE__ */ jsx32(SdLink.Sub, { href: `tel:${company.tel}`, children: company.tel }) }),
|
|
1993
|
+
company.fax && /* @__PURE__ */ jsx32(InfoCell, { label: "Fax", children: company.fax }),
|
|
1994
|
+
/* @__PURE__ */ jsx32(InfoCell, { label: "Email", children: /* @__PURE__ */ jsx32(SdLink.Sub, { href: `mailto:${company.email}`, children: company.email }) })
|
|
1777
1995
|
] });
|
|
1778
1996
|
}
|
|
1779
1997
|
function SdFooter({ company, navItems, policyLinks, description }) {
|
|
1780
1998
|
const visibleNav = filterAndSort(navItems);
|
|
1781
1999
|
const visiblePolicy = filterAndSort(policyLinks);
|
|
1782
|
-
return /* @__PURE__ */
|
|
1783
|
-
/* @__PURE__ */
|
|
1784
|
-
description && /* @__PURE__ */
|
|
1785
|
-
/* @__PURE__ */
|
|
1786
|
-
/* @__PURE__ */
|
|
1787
|
-
visibleNav.length > 0 && /* @__PURE__ */
|
|
2000
|
+
return /* @__PURE__ */ jsx32(Box14, { component: "footer", children: /* @__PURE__ */ jsx32(SdContainer, { py: "lg", children: /* @__PURE__ */ jsxs18(Stack17, { children: [
|
|
2001
|
+
/* @__PURE__ */ jsx32(Logo, { size: "sm" }),
|
|
2002
|
+
description && /* @__PURE__ */ jsx32(SdText.Sub, { children: description }),
|
|
2003
|
+
/* @__PURE__ */ jsxs18(Flex, { direction: { base: "column", md: "row" }, gap: 48, align: "flex-start", children: [
|
|
2004
|
+
/* @__PURE__ */ jsx32(Box14, { flex: { base: "0 0 auto", md: "1 1 0" }, w: { base: "100%", md: "auto" }, children: /* @__PURE__ */ jsx32(FooterCompanyInfo, { company }) }),
|
|
2005
|
+
visibleNav.length > 0 && /* @__PURE__ */ jsx32(Box14, { flex: { base: "0 0 auto", md: "2 1 0" }, w: { base: "100%", md: "auto" }, children: /* @__PURE__ */ jsx32(Grid5, { style: { "--grid-gutter": "24px" }, children: /* @__PURE__ */ jsx32(FooterNavColumns, { items: visibleNav }) }) })
|
|
1788
2006
|
] }),
|
|
1789
|
-
/* @__PURE__ */
|
|
1790
|
-
/* @__PURE__ */
|
|
1791
|
-
/* @__PURE__ */
|
|
2007
|
+
/* @__PURE__ */ jsx32(Divider3, {}),
|
|
2008
|
+
/* @__PURE__ */ jsxs18(Group11, { justify: "space-between", wrap: "wrap", gap: "xs", children: [
|
|
2009
|
+
/* @__PURE__ */ jsxs18(SdText.Sub, { children: [
|
|
1792
2010
|
"\xA9 ",
|
|
1793
2011
|
company.copyrightYear,
|
|
1794
2012
|
" ",
|
|
1795
2013
|
t(company.name),
|
|
1796
2014
|
". All rights reserved."
|
|
1797
2015
|
] }),
|
|
1798
|
-
/* @__PURE__ */
|
|
1799
|
-
visiblePolicy.length > 0 && /* @__PURE__ */
|
|
2016
|
+
/* @__PURE__ */ jsxs18(Group11, { gap: "lg", wrap: "wrap", children: [
|
|
2017
|
+
visiblePolicy.length > 0 && /* @__PURE__ */ jsx32(Group11, { gap: "lg", children: visiblePolicy.map((item) => {
|
|
1800
2018
|
const Link4 = item.highlight ? SdLink.Body : SdLink.Sub;
|
|
1801
|
-
return /* @__PURE__ */
|
|
2019
|
+
return /* @__PURE__ */ jsx32(Link4, { href: item.href, children: item.label }, item.id);
|
|
1802
2020
|
}) }),
|
|
1803
|
-
company.socials && company.socials.length > 0 && /* @__PURE__ */
|
|
2021
|
+
company.socials && company.socials.length > 0 && /* @__PURE__ */ jsx32(FooterSocials, { items: company.socials })
|
|
1804
2022
|
] })
|
|
1805
2023
|
] })
|
|
1806
2024
|
] }) }) });
|
|
@@ -1808,7 +2026,7 @@ function SdFooter({ company, navItems, policyLinks, description }) {
|
|
|
1808
2026
|
|
|
1809
2027
|
// ui/organism/FeatureSection.tsx
|
|
1810
2028
|
import { Stack as Stack18 } from "@mantine/core";
|
|
1811
|
-
import { jsx as
|
|
2029
|
+
import { jsx as jsx33, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1812
2030
|
function SdFeatureSection(_a4) {
|
|
1813
2031
|
var _b = _a4, {
|
|
1814
2032
|
label,
|
|
@@ -1825,8 +2043,8 @@ function SdFeatureSection(_a4) {
|
|
|
1825
2043
|
"cols",
|
|
1826
2044
|
"py"
|
|
1827
2045
|
]);
|
|
1828
|
-
return /* @__PURE__ */
|
|
1829
|
-
/* @__PURE__ */
|
|
2046
|
+
return /* @__PURE__ */ jsx33(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ jsxs19(Stack18, { gap: "xl", children: [
|
|
2047
|
+
/* @__PURE__ */ jsx33(
|
|
1830
2048
|
SdTextBox.Section,
|
|
1831
2049
|
{
|
|
1832
2050
|
label,
|
|
@@ -1837,13 +2055,13 @@ function SdFeatureSection(_a4) {
|
|
|
1837
2055
|
align: "center"
|
|
1838
2056
|
}
|
|
1839
2057
|
),
|
|
1840
|
-
/* @__PURE__ */
|
|
2058
|
+
/* @__PURE__ */ jsx33(SdFeatures, { items, cols })
|
|
1841
2059
|
] }) }));
|
|
1842
2060
|
}
|
|
1843
2061
|
|
|
1844
2062
|
// ui/organism/TimelineSection.tsx
|
|
1845
2063
|
import { Center as Center3, Stack as Stack19 } from "@mantine/core";
|
|
1846
|
-
import { jsx as
|
|
2064
|
+
import { jsx as jsx34, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1847
2065
|
function SdTimelineSection(_a4) {
|
|
1848
2066
|
var _b = _a4, {
|
|
1849
2067
|
label,
|
|
@@ -1858,15 +2076,15 @@ function SdTimelineSection(_a4) {
|
|
|
1858
2076
|
"items",
|
|
1859
2077
|
"py"
|
|
1860
2078
|
]);
|
|
1861
|
-
return /* @__PURE__ */
|
|
1862
|
-
/* @__PURE__ */
|
|
1863
|
-
/* @__PURE__ */
|
|
2079
|
+
return /* @__PURE__ */ jsx34(Center3, { children: /* @__PURE__ */ jsxs20(Stack19, __spreadProps(__spreadValues({ py, gap: "md" }, boxProps), { children: [
|
|
2080
|
+
/* @__PURE__ */ jsx34(SdTextBox.Section, { label, title, description }),
|
|
2081
|
+
/* @__PURE__ */ jsx34(Center3, { children: /* @__PURE__ */ jsx34(SdTimeline, { items }) })
|
|
1864
2082
|
] })) });
|
|
1865
2083
|
}
|
|
1866
2084
|
|
|
1867
2085
|
// ui/organism/StepsSection.tsx
|
|
1868
2086
|
import { Stack as Stack20 } from "@mantine/core";
|
|
1869
|
-
import { jsx as
|
|
2087
|
+
import { jsx as jsx35, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
1870
2088
|
function SdStepsSection(_a4) {
|
|
1871
2089
|
var _b = _a4, {
|
|
1872
2090
|
label,
|
|
@@ -1881,17 +2099,17 @@ function SdStepsSection(_a4) {
|
|
|
1881
2099
|
"items",
|
|
1882
2100
|
"py"
|
|
1883
2101
|
]);
|
|
1884
|
-
return /* @__PURE__ */
|
|
1885
|
-
(label || title || description) && /* @__PURE__ */
|
|
1886
|
-
/* @__PURE__ */
|
|
2102
|
+
return /* @__PURE__ */ jsx35(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ jsxs21(Stack20, { gap: "xl", children: [
|
|
2103
|
+
(label || title || description) && /* @__PURE__ */ jsx35(SdTextBox.Section, { label, title, description }),
|
|
2104
|
+
/* @__PURE__ */ jsx35(SdSteps.Bubble, { items })
|
|
1887
2105
|
] }) }));
|
|
1888
2106
|
}
|
|
1889
2107
|
|
|
1890
2108
|
// ui/organism/ErrorView.tsx
|
|
1891
2109
|
import { Center as Center4, Group as Group12, Stack as Stack21, Text as Text2 } from "@mantine/core";
|
|
1892
|
-
import { jsx as
|
|
2110
|
+
import { jsx as jsx36, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
1893
2111
|
function StatusCode({ code }) {
|
|
1894
|
-
return /* @__PURE__ */
|
|
2112
|
+
return /* @__PURE__ */ jsx36(
|
|
1895
2113
|
Text2,
|
|
1896
2114
|
{
|
|
1897
2115
|
fz: 160,
|
|
@@ -1905,15 +2123,15 @@ function StatusCode({ code }) {
|
|
|
1905
2123
|
);
|
|
1906
2124
|
}
|
|
1907
2125
|
function Page({ error, onReset, onHome }) {
|
|
1908
|
-
return /* @__PURE__ */
|
|
1909
|
-
/* @__PURE__ */
|
|
1910
|
-
/* @__PURE__ */
|
|
1911
|
-
/* @__PURE__ */
|
|
1912
|
-
/* @__PURE__ */
|
|
2126
|
+
return /* @__PURE__ */ jsx36(Center4, { mih: "60vh", children: /* @__PURE__ */ jsx36(SdContainer, { children: /* @__PURE__ */ jsxs22(Stack21, { align: "center", gap: "lg", ta: "center", children: [
|
|
2127
|
+
/* @__PURE__ */ jsx36(StatusCode, { code: "500" }),
|
|
2128
|
+
/* @__PURE__ */ jsxs22(Stack21, { gap: "sm", align: "center", children: [
|
|
2129
|
+
/* @__PURE__ */ jsx36(SdTitle.Section, { children: "\uC11C\uBC84\uC5D0\uC11C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4" }),
|
|
2130
|
+
/* @__PURE__ */ jsx36(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." })
|
|
1913
2131
|
] }),
|
|
1914
|
-
/* @__PURE__ */
|
|
1915
|
-
/* @__PURE__ */
|
|
1916
|
-
onHome && /* @__PURE__ */
|
|
2132
|
+
/* @__PURE__ */ jsxs22(Group12, { gap: "sm", justify: "center", children: [
|
|
2133
|
+
/* @__PURE__ */ jsx36(SdButton.Primary, { onClick: onReset, children: "\uB2E4\uC2DC \uC2DC\uB3C4" }),
|
|
2134
|
+
onHome && /* @__PURE__ */ jsx36(SdButton.Ghost, { onClick: onHome, children: "\uD648\uC73C\uB85C" })
|
|
1917
2135
|
] })
|
|
1918
2136
|
] }) }) });
|
|
1919
2137
|
}
|
|
@@ -1925,15 +2143,15 @@ function NotFound({
|
|
|
1925
2143
|
},
|
|
1926
2144
|
onBack = () => window.history.back()
|
|
1927
2145
|
}) {
|
|
1928
|
-
return /* @__PURE__ */
|
|
1929
|
-
/* @__PURE__ */
|
|
1930
|
-
/* @__PURE__ */
|
|
1931
|
-
/* @__PURE__ */
|
|
1932
|
-
/* @__PURE__ */
|
|
2146
|
+
return /* @__PURE__ */ jsx36(Center4, { mih: "60vh", children: /* @__PURE__ */ jsx36(SdContainer, { children: /* @__PURE__ */ jsxs22(Stack21, { align: "center", gap: "lg", ta: "center", children: [
|
|
2147
|
+
/* @__PURE__ */ jsx36(StatusCode, { code: "404" }),
|
|
2148
|
+
/* @__PURE__ */ jsxs22(Stack21, { gap: "sm", align: "center", children: [
|
|
2149
|
+
/* @__PURE__ */ jsx36(SdTitle.Section, { children: title }),
|
|
2150
|
+
/* @__PURE__ */ jsx36(SdText.Body, { maw: 480, children: description })
|
|
1933
2151
|
] }),
|
|
1934
|
-
/* @__PURE__ */
|
|
1935
|
-
onHome && /* @__PURE__ */
|
|
1936
|
-
onBack && /* @__PURE__ */
|
|
2152
|
+
/* @__PURE__ */ jsxs22(Group12, { gap: "sm", justify: "center", children: [
|
|
2153
|
+
onHome && /* @__PURE__ */ jsx36(SdButton.Primary, { onClick: onHome, children: "\uD648\uC73C\uB85C" }),
|
|
2154
|
+
onBack && /* @__PURE__ */ jsx36(SdButton.Ghost, { onClick: onBack, children: "\uB4A4\uB85C \uAC00\uAE30" })
|
|
1937
2155
|
] })
|
|
1938
2156
|
] }) }) });
|
|
1939
2157
|
}
|
|
@@ -1947,7 +2165,7 @@ var SdErrorViewPage = SdErrorView.Page;
|
|
|
1947
2165
|
var SdErrorViewNotFound = SdErrorView.NotFound;
|
|
1948
2166
|
|
|
1949
2167
|
// ui/organism/LoginView.tsx
|
|
1950
|
-
import { Box as
|
|
2168
|
+
import { Box as Box16, Center as Center5, Checkbox as Checkbox2, Divider as Divider4, Group as Group13, Paper, SimpleGrid as SimpleGrid7, Stack as Stack22 } from "@mantine/core";
|
|
1951
2169
|
import {
|
|
1952
2170
|
IconBrandApple,
|
|
1953
2171
|
IconBrandGithub as IconBrandGithub2,
|
|
@@ -1973,7 +2191,7 @@ var brandDotTexture = {
|
|
|
1973
2191
|
};
|
|
1974
2192
|
|
|
1975
2193
|
// ui/organism/LoginView.tsx
|
|
1976
|
-
import { Fragment as Fragment6, jsx as
|
|
2194
|
+
import { Fragment as Fragment6, jsx as jsx37, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
1977
2195
|
var SOCIAL_META = {
|
|
1978
2196
|
google: { Icon: IconBrandGoogle, label: "\uAD6C\uAE00\uB85C \uB85C\uADF8\uC778" },
|
|
1979
2197
|
kakao: { Icon: IconBrandKakaoTalk, label: "\uCE74\uCE74\uC624\uB85C \uB85C\uADF8\uC778" },
|
|
@@ -2002,9 +2220,9 @@ function LoginForm({
|
|
|
2002
2220
|
remember: data.get("remember") === "on"
|
|
2003
2221
|
});
|
|
2004
2222
|
}
|
|
2005
|
-
return /* @__PURE__ */
|
|
2006
|
-
error && /* @__PURE__ */
|
|
2007
|
-
/* @__PURE__ */
|
|
2223
|
+
return /* @__PURE__ */ jsx37("form", { onSubmit: handleSubmit, noValidate: true, children: /* @__PURE__ */ jsxs23(Stack22, { gap: "md", children: [
|
|
2224
|
+
error && /* @__PURE__ */ jsx37(SdText.Error, { children: error }),
|
|
2225
|
+
/* @__PURE__ */ jsx37(
|
|
2008
2226
|
SdInput.Email,
|
|
2009
2227
|
{
|
|
2010
2228
|
name: "email",
|
|
@@ -2014,7 +2232,7 @@ function LoginForm({
|
|
|
2014
2232
|
required: true
|
|
2015
2233
|
}
|
|
2016
2234
|
),
|
|
2017
|
-
/* @__PURE__ */
|
|
2235
|
+
/* @__PURE__ */ jsx37(
|
|
2018
2236
|
SdInput.Password,
|
|
2019
2237
|
{
|
|
2020
2238
|
name: "password",
|
|
@@ -2024,50 +2242,50 @@ function LoginForm({
|
|
|
2024
2242
|
required: true
|
|
2025
2243
|
}
|
|
2026
2244
|
),
|
|
2027
|
-
(withRemember || findPasswordHref) && /* @__PURE__ */
|
|
2028
|
-
withRemember ? /* @__PURE__ */
|
|
2029
|
-
findPasswordHref && /* @__PURE__ */
|
|
2245
|
+
(withRemember || findPasswordHref) && /* @__PURE__ */ jsxs23(Group13, { justify: "space-between", align: "center", wrap: "nowrap", children: [
|
|
2246
|
+
withRemember ? /* @__PURE__ */ jsx37(Checkbox2, { name: "remember", size: "xs", label: "\uC790\uB3D9 \uB85C\uADF8\uC778" }) : /* @__PURE__ */ jsx37("span", {}),
|
|
2247
|
+
findPasswordHref && /* @__PURE__ */ jsx37(SdLink.Sub, { href: findPasswordHref, children: "\uBE44\uBC00\uBC88\uD638\uB97C \uC78A\uC73C\uC168\uB098\uC694?" })
|
|
2030
2248
|
] }),
|
|
2031
|
-
/* @__PURE__ */
|
|
2249
|
+
/* @__PURE__ */ jsx37(
|
|
2032
2250
|
SdButton.Primary,
|
|
2033
2251
|
{
|
|
2034
2252
|
type: "submit",
|
|
2035
2253
|
fullWidth: true,
|
|
2036
2254
|
loading,
|
|
2037
|
-
leftSection: /* @__PURE__ */
|
|
2255
|
+
leftSection: /* @__PURE__ */ jsx37(IconLogin2, { size: 16 }),
|
|
2038
2256
|
children: submitLabel
|
|
2039
2257
|
}
|
|
2040
2258
|
),
|
|
2041
|
-
socials && socials.length > 0 && /* @__PURE__ */
|
|
2042
|
-
/* @__PURE__ */
|
|
2043
|
-
/* @__PURE__ */
|
|
2259
|
+
socials && socials.length > 0 && /* @__PURE__ */ jsxs23(Fragment6, { children: [
|
|
2260
|
+
/* @__PURE__ */ jsx37(Divider4, { label: "\uB610\uB294", labelPosition: "center" }),
|
|
2261
|
+
/* @__PURE__ */ jsx37(Stack22, { gap: "xs", children: socials.map((social) => {
|
|
2044
2262
|
var _a4;
|
|
2045
2263
|
const { Icon, label } = SOCIAL_META[social.provider];
|
|
2046
|
-
return /* @__PURE__ */
|
|
2264
|
+
return /* @__PURE__ */ jsx37(
|
|
2047
2265
|
SdButton.Outline,
|
|
2048
2266
|
{
|
|
2049
2267
|
color: "slate",
|
|
2050
2268
|
fullWidth: true,
|
|
2051
2269
|
type: "button",
|
|
2052
2270
|
onClick: social.onClick,
|
|
2053
|
-
leftSection: /* @__PURE__ */
|
|
2271
|
+
leftSection: /* @__PURE__ */ jsx37(Icon, { size: 16 }),
|
|
2054
2272
|
children: (_a4 = social.label) != null ? _a4 : label
|
|
2055
2273
|
},
|
|
2056
2274
|
social.provider
|
|
2057
2275
|
);
|
|
2058
2276
|
}) })
|
|
2059
2277
|
] }),
|
|
2060
|
-
signUpHref && /* @__PURE__ */
|
|
2061
|
-
/* @__PURE__ */
|
|
2062
|
-
/* @__PURE__ */
|
|
2278
|
+
signUpHref && /* @__PURE__ */ jsxs23(Group13, { gap: 6, justify: "center", children: [
|
|
2279
|
+
/* @__PURE__ */ jsx37(SdText.Sub, { children: "\uC544\uC9C1 \uACC4\uC815\uC774 \uC5C6\uC73C\uC2E0\uAC00\uC694?" }),
|
|
2280
|
+
/* @__PURE__ */ jsx37(SdLink.Sub, { href: signUpHref, c: "primary.6", children: "\uD68C\uC6D0\uAC00\uC785" })
|
|
2063
2281
|
] }),
|
|
2064
2282
|
children
|
|
2065
2283
|
] }) });
|
|
2066
2284
|
}
|
|
2067
2285
|
function FormHeader({ title, description }) {
|
|
2068
|
-
return /* @__PURE__ */
|
|
2069
|
-
/* @__PURE__ */
|
|
2070
|
-
/* @__PURE__ */
|
|
2286
|
+
return /* @__PURE__ */ jsxs23(Stack22, { gap: "lg", children: [
|
|
2287
|
+
/* @__PURE__ */ jsx37(Logo, { size: "sm" }),
|
|
2288
|
+
/* @__PURE__ */ jsx37(SdTextBox.Card, { title, description: description != null ? description : "" })
|
|
2071
2289
|
] });
|
|
2072
2290
|
}
|
|
2073
2291
|
function Card7(_a4) {
|
|
@@ -2080,9 +2298,9 @@ function Card7(_a4) {
|
|
|
2080
2298
|
"description",
|
|
2081
2299
|
"mih"
|
|
2082
2300
|
]);
|
|
2083
|
-
return /* @__PURE__ */
|
|
2084
|
-
/* @__PURE__ */
|
|
2085
|
-
/* @__PURE__ */
|
|
2301
|
+
return /* @__PURE__ */ jsx37(Center5, { mih, bg: "slate.0", p: "md", children: /* @__PURE__ */ jsx37(Paper, { w: "100%", maw: 420, p: { base: "lg", sm: "xl" }, radius: "lg", withBorder: true, shadow: "sm", children: /* @__PURE__ */ jsxs23(Stack22, { gap: "xl", children: [
|
|
2302
|
+
/* @__PURE__ */ jsx37(FormHeader, { title, description }),
|
|
2303
|
+
/* @__PURE__ */ jsx37(LoginForm, __spreadValues({}, formProps))
|
|
2086
2304
|
] }) }) });
|
|
2087
2305
|
}
|
|
2088
2306
|
function Split(_a4) {
|
|
@@ -2099,16 +2317,16 @@ function Split(_a4) {
|
|
|
2099
2317
|
"brandDescription",
|
|
2100
2318
|
"mih"
|
|
2101
2319
|
]);
|
|
2102
|
-
return /* @__PURE__ */
|
|
2103
|
-
/* @__PURE__ */
|
|
2104
|
-
|
|
2320
|
+
return /* @__PURE__ */ jsxs23(SimpleGrid7, { cols: { base: 1, md: 2 }, spacing: 0, mih, children: [
|
|
2321
|
+
/* @__PURE__ */ jsxs23(
|
|
2322
|
+
Box16,
|
|
2105
2323
|
{
|
|
2106
2324
|
visibleFrom: "md",
|
|
2107
2325
|
pos: "relative",
|
|
2108
2326
|
style: __spreadValues({ overflow: "hidden", display: "flex", alignItems: "flex-end" }, brandSurface),
|
|
2109
2327
|
children: [
|
|
2110
|
-
/* @__PURE__ */
|
|
2111
|
-
/* @__PURE__ */
|
|
2328
|
+
/* @__PURE__ */ jsx37(Box16, { "aria-hidden": true, pos: "absolute", inset: 0, style: brandDotTexture }),
|
|
2329
|
+
/* @__PURE__ */ jsx37(Box16, { pos: "relative", p: 48, style: { zIndex: 1, width: "100%" }, children: /* @__PURE__ */ jsx37(
|
|
2112
2330
|
SdTextBox.Hero,
|
|
2113
2331
|
{
|
|
2114
2332
|
title: brandTitle,
|
|
@@ -2122,9 +2340,9 @@ function Split(_a4) {
|
|
|
2122
2340
|
]
|
|
2123
2341
|
}
|
|
2124
2342
|
),
|
|
2125
|
-
/* @__PURE__ */
|
|
2126
|
-
/* @__PURE__ */
|
|
2127
|
-
/* @__PURE__ */
|
|
2343
|
+
/* @__PURE__ */ jsx37(Center5, { p: { base: "md", sm: "xl" }, bg: "white", children: /* @__PURE__ */ jsxs23(Stack22, { gap: "xl", w: "100%", maw: 400, children: [
|
|
2344
|
+
/* @__PURE__ */ jsx37(FormHeader, { title, description }),
|
|
2345
|
+
/* @__PURE__ */ jsx37(LoginForm, __spreadValues({}, formProps))
|
|
2128
2346
|
] }) })
|
|
2129
2347
|
] });
|
|
2130
2348
|
}
|
|
@@ -2138,11 +2356,11 @@ var SdLoginViewCard = SdLoginView.Card;
|
|
|
2138
2356
|
var SdLoginViewSplit = SdLoginView.Split;
|
|
2139
2357
|
|
|
2140
2358
|
// ui/organism/Result.tsx
|
|
2141
|
-
import { Box as
|
|
2359
|
+
import { Box as Box17, Center as Center6, Group as Group14, Stack as Stack23 } from "@mantine/core";
|
|
2142
2360
|
import { IconCircleCheck, IconCircleX } from "@tabler/icons-react";
|
|
2143
|
-
import { jsx as
|
|
2361
|
+
import { jsx as jsx38, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2144
2362
|
function ResultIcon({ color, Icon }) {
|
|
2145
|
-
return /* @__PURE__ */
|
|
2363
|
+
return /* @__PURE__ */ jsx38(Center6, { w: 88, h: 88, bg: `${color}.0`, style: { borderRadius: "50%" }, "aria-hidden": true, children: /* @__PURE__ */ jsx38(Icon, { size: 48, stroke: 1.5, color: `var(--mantine-color-${color}-6)` }) });
|
|
2146
2364
|
}
|
|
2147
2365
|
function createResult(defaults) {
|
|
2148
2366
|
return function SdResult2({
|
|
@@ -2153,16 +2371,16 @@ function createResult(defaults) {
|
|
|
2153
2371
|
children,
|
|
2154
2372
|
mih = "60vh"
|
|
2155
2373
|
}) {
|
|
2156
|
-
return /* @__PURE__ */
|
|
2157
|
-
/* @__PURE__ */
|
|
2158
|
-
/* @__PURE__ */
|
|
2159
|
-
/* @__PURE__ */
|
|
2160
|
-
description && /* @__PURE__ */
|
|
2374
|
+
return /* @__PURE__ */ jsx38(Center6, { mih, children: /* @__PURE__ */ jsx38(SdContainer, { children: /* @__PURE__ */ jsxs24(Stack23, { align: "center", gap: "lg", ta: "center", children: [
|
|
2375
|
+
/* @__PURE__ */ jsx38(ResultIcon, { color: defaults.color, Icon: defaults.Icon }),
|
|
2376
|
+
/* @__PURE__ */ jsxs24(Stack23, { gap: "sm", align: "center", children: [
|
|
2377
|
+
/* @__PURE__ */ jsx38(SdTitle.Section, { children: title }),
|
|
2378
|
+
description && /* @__PURE__ */ jsx38(SdText.Body, { maw: 480, children: description })
|
|
2161
2379
|
] }),
|
|
2162
|
-
children && /* @__PURE__ */
|
|
2163
|
-
(primaryAction || secondaryAction) && /* @__PURE__ */
|
|
2164
|
-
primaryAction && /* @__PURE__ */
|
|
2165
|
-
secondaryAction && /* @__PURE__ */
|
|
2380
|
+
children && /* @__PURE__ */ jsx38(Box17, { children }),
|
|
2381
|
+
(primaryAction || secondaryAction) && /* @__PURE__ */ jsxs24(Group14, { gap: "sm", justify: "center", children: [
|
|
2382
|
+
primaryAction && /* @__PURE__ */ jsx38(SdButton.Primary, { onClick: primaryAction.onClick, children: primaryAction.label }),
|
|
2383
|
+
secondaryAction && /* @__PURE__ */ jsx38(SdButton.Ghost, { onClick: secondaryAction.onClick, children: secondaryAction.label })
|
|
2166
2384
|
] })
|
|
2167
2385
|
] }) }) });
|
|
2168
2386
|
};
|
|
@@ -2186,10 +2404,11 @@ var SdResultError = SdResult.Error;
|
|
|
2186
2404
|
|
|
2187
2405
|
// ui/template/MainLayout.tsx
|
|
2188
2406
|
import { AppShell } from "@mantine/core";
|
|
2189
|
-
import { jsx as
|
|
2407
|
+
import { jsx as jsx39, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2190
2408
|
var headers = {
|
|
2191
2409
|
mega: SdHeader.Mega,
|
|
2192
|
-
simple: SdHeader.Simple
|
|
2410
|
+
simple: SdHeader.Simple,
|
|
2411
|
+
panel: SdHeader.Panel
|
|
2193
2412
|
};
|
|
2194
2413
|
function MainLayout({
|
|
2195
2414
|
children,
|
|
@@ -2199,45 +2418,65 @@ function MainLayout({
|
|
|
2199
2418
|
headerVariant = "mega"
|
|
2200
2419
|
}) {
|
|
2201
2420
|
const Header = headers[headerVariant];
|
|
2202
|
-
return /* @__PURE__ */
|
|
2203
|
-
/* @__PURE__ */
|
|
2204
|
-
/* @__PURE__ */
|
|
2205
|
-
/* @__PURE__ */
|
|
2421
|
+
return /* @__PURE__ */ jsxs25(AppShell, { header: { height: 60 }, children: [
|
|
2422
|
+
/* @__PURE__ */ jsx39(AppShell.Header, { children: /* @__PURE__ */ jsx39(Header, { navItems, loginFlag }) }),
|
|
2423
|
+
/* @__PURE__ */ jsx39(AppShell.Main, { children }),
|
|
2424
|
+
/* @__PURE__ */ jsx39(SdFooter, { company: companyInfo, navItems })
|
|
2206
2425
|
] });
|
|
2207
2426
|
}
|
|
2208
2427
|
|
|
2209
2428
|
// ui/template/PageLayout.tsx
|
|
2210
|
-
import { Box as
|
|
2211
|
-
import { Fragment as Fragment7, jsx as
|
|
2429
|
+
import { Box as Box18, Divider as Divider5, Group as Group15, Space, Stack as Stack24 } from "@mantine/core";
|
|
2430
|
+
import { Fragment as Fragment7, jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2212
2431
|
var HERO_MIN_H = "38svh";
|
|
2213
2432
|
var HERO_PY = { base: 56, sm: 88 };
|
|
2214
2433
|
var HERO_MAW = 680;
|
|
2215
|
-
function Content({
|
|
2216
|
-
|
|
2434
|
+
function Content({
|
|
2435
|
+
children,
|
|
2436
|
+
navItems,
|
|
2437
|
+
breadcrumb = true,
|
|
2438
|
+
currentHref
|
|
2439
|
+
}) {
|
|
2440
|
+
const showBreadcrumb = breadcrumb && !!navItems && navItems.length > 0;
|
|
2441
|
+
return /* @__PURE__ */ jsxs26(SdContainer, { py: "xl", children: [
|
|
2442
|
+
showBreadcrumb && /* @__PURE__ */ jsx40(SdBreadcrumb, { navItems, currentHref, mb: "lg" }),
|
|
2443
|
+
/* @__PURE__ */ jsx40(Stack24, { gap: "xl", children })
|
|
2444
|
+
] });
|
|
2217
2445
|
}
|
|
2218
2446
|
function LayoutGap() {
|
|
2219
|
-
return /* @__PURE__ */
|
|
2447
|
+
return /* @__PURE__ */ jsx40(Space, {});
|
|
2220
2448
|
}
|
|
2221
|
-
function Minimal({
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2449
|
+
function Minimal({
|
|
2450
|
+
label,
|
|
2451
|
+
title,
|
|
2452
|
+
description,
|
|
2453
|
+
children,
|
|
2454
|
+
navItems,
|
|
2455
|
+
breadcrumb,
|
|
2456
|
+
currentHref
|
|
2457
|
+
}) {
|
|
2458
|
+
return /* @__PURE__ */ jsxs26(Plain2, { navItems, breadcrumb, currentHref, children: [
|
|
2459
|
+
/* @__PURE__ */ jsx40(LayoutGap, {}),
|
|
2460
|
+
/* @__PURE__ */ jsx40(SdTextBox.Section, { label, title, description: description != null ? description : "" }),
|
|
2461
|
+
/* @__PURE__ */ jsx40(Divider5, {}),
|
|
2225
2462
|
children
|
|
2226
2463
|
] });
|
|
2227
2464
|
}
|
|
2228
|
-
function Plain2({
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2465
|
+
function Plain2({
|
|
2466
|
+
children,
|
|
2467
|
+
navItems,
|
|
2468
|
+
breadcrumb,
|
|
2469
|
+
currentHref
|
|
2470
|
+
}) {
|
|
2471
|
+
return /* @__PURE__ */ jsx40(Fragment7, { children: /* @__PURE__ */ jsx40(Content, { navItems, breadcrumb, currentHref, children }) });
|
|
2233
2472
|
}
|
|
2234
2473
|
function HeroCopy({ label, title, description }) {
|
|
2235
|
-
return /* @__PURE__ */
|
|
2236
|
-
label && /* @__PURE__ */
|
|
2237
|
-
/* @__PURE__ */
|
|
2238
|
-
/* @__PURE__ */
|
|
2474
|
+
return /* @__PURE__ */ jsxs26(Stack24, { gap: "md", maw: HERO_MAW, children: [
|
|
2475
|
+
label && /* @__PURE__ */ jsxs26(Group15, { gap: "sm", align: "center", wrap: "nowrap", children: [
|
|
2476
|
+
/* @__PURE__ */ jsx40(Box18, { w: 28, h: 2, bg: "primary.3", style: { borderRadius: 2 } }),
|
|
2477
|
+
/* @__PURE__ */ jsx40(SdText.Eyebrow, { c: "primary.1", children: label })
|
|
2239
2478
|
] }),
|
|
2240
|
-
/* @__PURE__ */
|
|
2479
|
+
/* @__PURE__ */ jsx40(
|
|
2241
2480
|
SdTextBox.Hero,
|
|
2242
2481
|
{
|
|
2243
2482
|
title,
|
|
@@ -2250,10 +2489,19 @@ function HeroCopy({ label, title, description }) {
|
|
|
2250
2489
|
)
|
|
2251
2490
|
] });
|
|
2252
2491
|
}
|
|
2253
|
-
function Image2({
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2492
|
+
function Image2({
|
|
2493
|
+
image,
|
|
2494
|
+
label,
|
|
2495
|
+
title,
|
|
2496
|
+
description,
|
|
2497
|
+
children,
|
|
2498
|
+
navItems,
|
|
2499
|
+
breadcrumb,
|
|
2500
|
+
currentHref
|
|
2501
|
+
}) {
|
|
2502
|
+
return /* @__PURE__ */ jsxs26(Fragment7, { children: [
|
|
2503
|
+
/* @__PURE__ */ jsxs26(
|
|
2504
|
+
Box18,
|
|
2257
2505
|
{
|
|
2258
2506
|
pos: "relative",
|
|
2259
2507
|
style: {
|
|
@@ -2266,8 +2514,8 @@ function Image2({ image, label, title, description, children }) {
|
|
|
2266
2514
|
backgroundColor: "var(--mantine-color-slate-9)"
|
|
2267
2515
|
},
|
|
2268
2516
|
children: [
|
|
2269
|
-
/* @__PURE__ */
|
|
2270
|
-
|
|
2517
|
+
/* @__PURE__ */ jsx40(
|
|
2518
|
+
Box18,
|
|
2271
2519
|
{
|
|
2272
2520
|
"aria-hidden": true,
|
|
2273
2521
|
pos: "absolute",
|
|
@@ -2277,17 +2525,25 @@ function Image2({ image, label, title, description, children }) {
|
|
|
2277
2525
|
}
|
|
2278
2526
|
}
|
|
2279
2527
|
),
|
|
2280
|
-
/* @__PURE__ */
|
|
2528
|
+
/* @__PURE__ */ jsx40(SdContainer, { pos: "relative", py: HERO_PY, style: { zIndex: 1, width: "100%" }, children: /* @__PURE__ */ jsx40(HeroCopy, { label, title, description }) })
|
|
2281
2529
|
]
|
|
2282
2530
|
}
|
|
2283
2531
|
),
|
|
2284
|
-
/* @__PURE__ */
|
|
2532
|
+
/* @__PURE__ */ jsx40(Content, { navItems, breadcrumb, currentHref, children })
|
|
2285
2533
|
] });
|
|
2286
2534
|
}
|
|
2287
|
-
function Brand({
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2535
|
+
function Brand({
|
|
2536
|
+
label,
|
|
2537
|
+
title,
|
|
2538
|
+
description,
|
|
2539
|
+
children,
|
|
2540
|
+
navItems,
|
|
2541
|
+
breadcrumb,
|
|
2542
|
+
currentHref
|
|
2543
|
+
}) {
|
|
2544
|
+
return /* @__PURE__ */ jsxs26(Fragment7, { children: [
|
|
2545
|
+
/* @__PURE__ */ jsxs26(
|
|
2546
|
+
Box18,
|
|
2291
2547
|
{
|
|
2292
2548
|
pos: "relative",
|
|
2293
2549
|
style: __spreadValues({
|
|
@@ -2298,12 +2554,12 @@ function Brand({ label, title, description, children }) {
|
|
|
2298
2554
|
borderBottom: "1px solid var(--mantine-color-slate-8)"
|
|
2299
2555
|
}, brandSurface),
|
|
2300
2556
|
children: [
|
|
2301
|
-
/* @__PURE__ */
|
|
2302
|
-
/* @__PURE__ */
|
|
2557
|
+
/* @__PURE__ */ jsx40(Box18, { "aria-hidden": true, pos: "absolute", inset: 0, style: brandDotTexture }),
|
|
2558
|
+
/* @__PURE__ */ jsx40(SdContainer, { pos: "relative", py: HERO_PY, style: { zIndex: 1, width: "100%" }, children: /* @__PURE__ */ jsx40(HeroCopy, { label, title, description }) })
|
|
2303
2559
|
]
|
|
2304
2560
|
}
|
|
2305
2561
|
),
|
|
2306
|
-
/* @__PURE__ */
|
|
2562
|
+
/* @__PURE__ */ jsx40(Content, { navItems, breadcrumb, currentHref, children })
|
|
2307
2563
|
] });
|
|
2308
2564
|
}
|
|
2309
2565
|
var PageLayout = {
|
|
@@ -2321,6 +2577,9 @@ var PageLayoutMinimal = PageLayout.Minimal;
|
|
|
2321
2577
|
var PageLayoutBrand = PageLayout.Brand;
|
|
2322
2578
|
var PageLayoutPlain = PageLayout.Plain;
|
|
2323
2579
|
|
|
2580
|
+
// ui/template/SdProvider.tsx
|
|
2581
|
+
import { MantineProvider } from "@mantine/core";
|
|
2582
|
+
|
|
2324
2583
|
// ui/theme.ts
|
|
2325
2584
|
import { createTheme, rem as rem2 } from "@mantine/core";
|
|
2326
2585
|
var primary = [
|
|
@@ -2565,7 +2824,6 @@ var theme = createTheme({
|
|
|
2565
2824
|
Anchor: {
|
|
2566
2825
|
defaultProps: { c: "slate.5", fz: "sm", underline: "never" }
|
|
2567
2826
|
},
|
|
2568
|
-
// SdHeader 모바일 드로어의 2단 아코디언 타이포를 SdLink와 맞춘다.
|
|
2569
2827
|
NavLink: {
|
|
2570
2828
|
defaultProps: { c: "slate.7", fz: "sm" }
|
|
2571
2829
|
},
|
|
@@ -2579,10 +2837,25 @@ var theme = createTheme({
|
|
|
2579
2837
|
}
|
|
2580
2838
|
}
|
|
2581
2839
|
});
|
|
2840
|
+
|
|
2841
|
+
// ui/template/SdProvider.tsx
|
|
2842
|
+
import { jsx as jsx41, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2843
|
+
function SdProvider({
|
|
2844
|
+
children,
|
|
2845
|
+
theme: theme2 = theme,
|
|
2846
|
+
navItems,
|
|
2847
|
+
defaultColorScheme = "light"
|
|
2848
|
+
}) {
|
|
2849
|
+
return /* @__PURE__ */ jsxs27(MantineProvider, { theme: theme2, defaultColorScheme, children: [
|
|
2850
|
+
/* @__PURE__ */ jsx41(SdToastProvider, {}),
|
|
2851
|
+
/* @__PURE__ */ jsx41(NavProvider, { navItems, children })
|
|
2852
|
+
] });
|
|
2853
|
+
}
|
|
2582
2854
|
export {
|
|
2583
2855
|
HeroCarousel,
|
|
2584
2856
|
Logo,
|
|
2585
2857
|
MainLayout,
|
|
2858
|
+
NavProvider,
|
|
2586
2859
|
PageLayout,
|
|
2587
2860
|
PageLayoutBrand,
|
|
2588
2861
|
PageLayoutImage,
|
|
@@ -2593,6 +2866,7 @@ export {
|
|
|
2593
2866
|
SdBadgePrimary,
|
|
2594
2867
|
SdBadgeSuccess,
|
|
2595
2868
|
SdBadgeWarning,
|
|
2869
|
+
SdBreadcrumb,
|
|
2596
2870
|
SdButton,
|
|
2597
2871
|
SdButtonCancel,
|
|
2598
2872
|
SdButtonDelete,
|
|
@@ -2624,6 +2898,7 @@ export {
|
|
|
2624
2898
|
SdFooter,
|
|
2625
2899
|
SdHeader,
|
|
2626
2900
|
SdHeaderMega,
|
|
2901
|
+
SdHeaderPanel,
|
|
2627
2902
|
SdHeaderSimple,
|
|
2628
2903
|
SdInput,
|
|
2629
2904
|
SdInputAutocomplete,
|
|
@@ -2666,6 +2941,7 @@ export {
|
|
|
2666
2941
|
SdPricingCardDefault,
|
|
2667
2942
|
SdPricingCardFeatured,
|
|
2668
2943
|
SdPricingCardGrid,
|
|
2944
|
+
SdProvider,
|
|
2669
2945
|
SdQuote,
|
|
2670
2946
|
SdQuoteCard,
|
|
2671
2947
|
SdQuotePlain,
|
|
@@ -2729,5 +3005,6 @@ export {
|
|
|
2729
3005
|
SdToastSuccess,
|
|
2730
3006
|
SdToastUpdate,
|
|
2731
3007
|
SdToastWarning,
|
|
2732
|
-
theme
|
|
3008
|
+
theme,
|
|
3009
|
+
useNav
|
|
2733
3010
|
};
|