@yeongseoksong/framework 1.4.0 → 1.5.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 +44 -2
- package/dist/ui/index.cjs +509 -268
- package/dist/ui/index.d.mts +56 -14
- package/dist/ui/index.d.ts +56 -14
- package/dist/ui/index.mjs +457 -218
- 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,78 @@ 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
|
+
import { jsx as jsx28, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1531
|
+
function normalizePath(href) {
|
|
1532
|
+
if (!href) return "";
|
|
1533
|
+
const trimmed = href.replace(/\/+$/, "");
|
|
1534
|
+
return trimmed === "" ? "/" : trimmed;
|
|
1535
|
+
}
|
|
1536
|
+
function buildTrail(navItems, currentHref) {
|
|
1537
|
+
const target = normalizePath(currentHref);
|
|
1538
|
+
const byId = new Map(navItems.map((item) => [item.id, item]));
|
|
1539
|
+
let current = navItems.find((item) => normalizePath(item.href) === target);
|
|
1540
|
+
if (!current) {
|
|
1541
|
+
current = navItems.filter((item) => item.href && target.startsWith(normalizePath(item.href) + "/")).sort((a, b) => normalizePath(b.href).length - normalizePath(a.href).length)[0];
|
|
1542
|
+
}
|
|
1543
|
+
if (!current) return [];
|
|
1544
|
+
const trail = [];
|
|
1545
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1546
|
+
let node = current;
|
|
1547
|
+
while (node && !seen.has(node.id)) {
|
|
1548
|
+
seen.add(node.id);
|
|
1549
|
+
trail.unshift(node);
|
|
1550
|
+
node = node.parentId != null ? byId.get(node.parentId) : void 0;
|
|
1551
|
+
}
|
|
1552
|
+
return trail;
|
|
1553
|
+
}
|
|
1554
|
+
function SdBreadcrumb(_a4) {
|
|
1555
|
+
var _b = _a4, {
|
|
1556
|
+
navItems,
|
|
1557
|
+
currentHref,
|
|
1558
|
+
homeHref = "/",
|
|
1559
|
+
homeLabel = "\uD648"
|
|
1560
|
+
} = _b, boxProps = __objRest(_b, [
|
|
1561
|
+
"navItems",
|
|
1562
|
+
"currentHref",
|
|
1563
|
+
"homeHref",
|
|
1564
|
+
"homeLabel"
|
|
1565
|
+
]);
|
|
1566
|
+
var _a5;
|
|
1567
|
+
const pathname = usePathname();
|
|
1568
|
+
const trail = buildTrail(navItems, (_a5 = currentHref != null ? currentHref : pathname) != null ? _a5 : "");
|
|
1569
|
+
return /* @__PURE__ */ jsx28(Box11, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ jsxs15(
|
|
1570
|
+
Breadcrumbs,
|
|
1571
|
+
{
|
|
1572
|
+
separator: /* @__PURE__ */ jsx28(IconChevronRight, { size: 14, stroke: 2, color: "var(--mantine-color-slate-4)" }),
|
|
1573
|
+
separatorMargin: "xs",
|
|
1574
|
+
children: [
|
|
1575
|
+
/* @__PURE__ */ jsx28(
|
|
1576
|
+
SdLink.Sub,
|
|
1577
|
+
{
|
|
1578
|
+
href: homeHref,
|
|
1579
|
+
"aria-label": homeLabel,
|
|
1580
|
+
style: { display: "inline-flex", alignItems: "center" },
|
|
1581
|
+
children: /* @__PURE__ */ jsx28(IconHome, { size: 16, stroke: 2 })
|
|
1582
|
+
}
|
|
1583
|
+
),
|
|
1584
|
+
trail.map((item, i) => {
|
|
1585
|
+
const isLast = i === trail.length - 1;
|
|
1586
|
+
return isLast ? /* @__PURE__ */ jsx28(SdLink.Body, { children: item.label }, item.id) : /* @__PURE__ */ jsx28(SdLink.Sub, { href: item.href, children: item.label }, item.id);
|
|
1587
|
+
})
|
|
1588
|
+
]
|
|
1589
|
+
}
|
|
1590
|
+
) }));
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1494
1593
|
// ui/organism/HeroCarousel.tsx
|
|
1495
1594
|
import { Carousel } from "@mantine/carousel";
|
|
1496
|
-
import { Anchor as Anchor2, Box as
|
|
1595
|
+
import { Anchor as Anchor2, Box as Box12, Group as Group9, Stack as Stack15 } from "@mantine/core";
|
|
1497
1596
|
import { IconArrowNarrowRight } from "@tabler/icons-react";
|
|
1498
|
-
import { Fragment as Fragment3, jsx as
|
|
1597
|
+
import { Fragment as Fragment3, jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1499
1598
|
var variantMap = {
|
|
1500
1599
|
primary: SdButton.Primary,
|
|
1501
1600
|
secondary: SdButton.Secondary,
|
|
@@ -1505,13 +1604,13 @@ var variantMap = {
|
|
|
1505
1604
|
function CtaButton({ cta }) {
|
|
1506
1605
|
var _a4;
|
|
1507
1606
|
const Button3 = variantMap[(_a4 = cta.variant) != null ? _a4 : "primary"];
|
|
1508
|
-
return /* @__PURE__ */
|
|
1607
|
+
return /* @__PURE__ */ jsx29(Anchor2, { href: cta.href, underline: "never", children: cta.icon ? /* @__PURE__ */ jsx29(Button3, { size: "md", rightSection: /* @__PURE__ */ jsx29(IconArrowNarrowRight, {}), children: cta.label }) : /* @__PURE__ */ jsx29(Button3, { size: "md", children: cta.label }) });
|
|
1509
1608
|
}
|
|
1510
1609
|
function HeroCarousel({ slides, children }) {
|
|
1511
|
-
if (children) return /* @__PURE__ */
|
|
1610
|
+
if (children) return /* @__PURE__ */ jsx29(Fragment3, { children });
|
|
1512
1611
|
const filterdSlides = filterAndSort(slides);
|
|
1513
|
-
return /* @__PURE__ */
|
|
1514
|
-
|
|
1612
|
+
return /* @__PURE__ */ jsx29(Carousel, { withIndicators: true, height: "60svh", children: filterdSlides.map((slide, i) => /* @__PURE__ */ jsx29(Carousel.Slide, { children: /* @__PURE__ */ jsx29(
|
|
1613
|
+
Box12,
|
|
1515
1614
|
{
|
|
1516
1615
|
style: {
|
|
1517
1616
|
height: "100%",
|
|
@@ -1522,8 +1621,8 @@ function HeroCarousel({ slides, children }) {
|
|
|
1522
1621
|
alignItems: "center",
|
|
1523
1622
|
justifyContent: "center"
|
|
1524
1623
|
},
|
|
1525
|
-
children: /* @__PURE__ */
|
|
1526
|
-
/* @__PURE__ */
|
|
1624
|
+
children: /* @__PURE__ */ jsxs16(Stack15, { align: "center", style: { textAlign: "center", maxWidth: 780 }, px: "xl", children: [
|
|
1625
|
+
/* @__PURE__ */ jsx29(
|
|
1527
1626
|
SdTextBox.Hero,
|
|
1528
1627
|
{
|
|
1529
1628
|
title: slide.title,
|
|
@@ -1532,18 +1631,27 @@ function HeroCarousel({ slides, children }) {
|
|
|
1532
1631
|
align: "center"
|
|
1533
1632
|
}
|
|
1534
1633
|
),
|
|
1535
|
-
slide.ctas && slide.ctas.length > 0 && /* @__PURE__ */
|
|
1634
|
+
slide.ctas && slide.ctas.length > 0 && /* @__PURE__ */ jsx29(Group9, { gap: "sm", mt: "md", children: slide.ctas.map((cta, i2) => /* @__PURE__ */ jsx29(CtaButton, { cta }, cta.href)) })
|
|
1536
1635
|
] })
|
|
1537
1636
|
}
|
|
1538
1637
|
) }, i)) });
|
|
1539
1638
|
}
|
|
1540
1639
|
|
|
1541
1640
|
// ui/organism/Header.tsx
|
|
1542
|
-
import { Box as
|
|
1641
|
+
import { Box as Box13, Burger, Drawer, Group as Group10, Menu, NavLink, Stack as Stack16 } from "@mantine/core";
|
|
1543
1642
|
import { IconChevronDown } from "@tabler/icons-react";
|
|
1544
1643
|
import { useDisclosure, useFocusWithin, useHover, useMergedRef } from "@mantine/hooks";
|
|
1545
|
-
import { Fragment as Fragment4, jsx as
|
|
1644
|
+
import { Fragment as Fragment4, jsx as jsx30, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1546
1645
|
var BAR_HEIGHT = 60;
|
|
1646
|
+
var MAX_DEPTH = 3;
|
|
1647
|
+
var NAV_LINK_STYLES = {
|
|
1648
|
+
label: {
|
|
1649
|
+
fontWeight: textStyles.Body.fw,
|
|
1650
|
+
fontSize: `var(--mantine-font-size-${textStyles.Body.fz})`,
|
|
1651
|
+
color: toCssColor(textStyles.Body.c),
|
|
1652
|
+
lineHeight: textStyles.Body.lh
|
|
1653
|
+
}
|
|
1654
|
+
};
|
|
1547
1655
|
function useNavTree(navItems) {
|
|
1548
1656
|
const visibleItems = filterAndSort(navItems);
|
|
1549
1657
|
return {
|
|
@@ -1552,27 +1660,36 @@ function useNavTree(navItems) {
|
|
|
1552
1660
|
hasAnyChildren: visibleItems.some((item) => item.parentId)
|
|
1553
1661
|
};
|
|
1554
1662
|
}
|
|
1555
|
-
function
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1663
|
+
function MobileNavNode({ item, depth, childrenOf, close }) {
|
|
1664
|
+
const kids = depth < MAX_DEPTH ? childrenOf(item.id) : [];
|
|
1665
|
+
if (kids.length === 0) {
|
|
1666
|
+
return /* @__PURE__ */ jsx30(Box13, { px: "sm", py: 8, children: /* @__PURE__ */ jsx30(SdLink.Body, { href: item.href, onClick: close, children: item.label }) });
|
|
1667
|
+
}
|
|
1668
|
+
return /* @__PURE__ */ jsx30(
|
|
1669
|
+
NavLink,
|
|
1670
|
+
{
|
|
1671
|
+
label: item.label,
|
|
1672
|
+
styles: NAV_LINK_STYLES,
|
|
1673
|
+
component: item.href ? "a" : "button",
|
|
1674
|
+
href: item.href,
|
|
1675
|
+
childrenOffset: 28,
|
|
1676
|
+
children: kids.map((kid) => /* @__PURE__ */ jsx30(
|
|
1677
|
+
MobileNavNode,
|
|
1564
1678
|
{
|
|
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))
|
|
1679
|
+
item: kid,
|
|
1680
|
+
depth: depth + 1,
|
|
1681
|
+
childrenOf,
|
|
1682
|
+
close
|
|
1571
1683
|
},
|
|
1572
|
-
|
|
1573
|
-
)
|
|
1574
|
-
}
|
|
1575
|
-
|
|
1684
|
+
kid.id
|
|
1685
|
+
))
|
|
1686
|
+
}
|
|
1687
|
+
);
|
|
1688
|
+
}
|
|
1689
|
+
function MobileNav({ opened, close, topItems, childrenOf, loginFlag }) {
|
|
1690
|
+
return /* @__PURE__ */ jsx30(Drawer, { opened, onClose: close, hiddenFrom: "sm", size: "xs", children: /* @__PURE__ */ jsxs17(Stack16, { gap: 0, children: [
|
|
1691
|
+
topItems.map((item) => /* @__PURE__ */ jsx30(MobileNavNode, { item, depth: 1, childrenOf, close }, item.id)),
|
|
1692
|
+
loginFlag && /* @__PURE__ */ jsx30(Stack16, { gap: "xs", mt: "md", children: /* @__PURE__ */ jsx30(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1576
1693
|
] }) });
|
|
1577
1694
|
}
|
|
1578
1695
|
function MegaHeader({ navItems, loginFlag }) {
|
|
@@ -1582,9 +1699,9 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1582
1699
|
const { focused, ref: focusRef } = useFocusWithin();
|
|
1583
1700
|
const rootRef = useMergedRef(hoverRef, focusRef);
|
|
1584
1701
|
const expanded = hasAnyChildren && (hovered || focused);
|
|
1585
|
-
return /* @__PURE__ */
|
|
1586
|
-
/* @__PURE__ */
|
|
1587
|
-
|
|
1702
|
+
return /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
1703
|
+
/* @__PURE__ */ jsx30(
|
|
1704
|
+
Box13,
|
|
1588
1705
|
{
|
|
1589
1706
|
ref: rootRef,
|
|
1590
1707
|
pos: "relative",
|
|
@@ -1594,12 +1711,12 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1594
1711
|
borderBottom: expanded ? "1px solid var(--mantine-color-slate-2)" : void 0,
|
|
1595
1712
|
transition: "box-shadow 0.15s"
|
|
1596
1713
|
},
|
|
1597
|
-
children: /* @__PURE__ */
|
|
1598
|
-
/* @__PURE__ */
|
|
1599
|
-
/* @__PURE__ */
|
|
1714
|
+
children: /* @__PURE__ */ jsx30(SdContainer, { children: /* @__PURE__ */ jsxs17(Group10, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
|
|
1715
|
+
/* @__PURE__ */ jsx30(Group10, { h: BAR_HEIGHT, align: "center", children: /* @__PURE__ */ jsx30(Logo, {}) }),
|
|
1716
|
+
/* @__PURE__ */ jsx30(Group10, { gap: "xl", align: "flex-start", wrap: "nowrap", visibleFrom: "sm", children: topItems.map((item) => {
|
|
1600
1717
|
const kids = childrenOf(item.id);
|
|
1601
|
-
return /* @__PURE__ */
|
|
1602
|
-
/* @__PURE__ */
|
|
1718
|
+
return /* @__PURE__ */ jsxs17(Stack16, { gap: 0, align: "center", children: [
|
|
1719
|
+
/* @__PURE__ */ jsx30(Group10, { h: BAR_HEIGHT, align: "center", children: /* @__PURE__ */ jsx30(SdLink.Body, { href: item.href, children: item.label }) }),
|
|
1603
1720
|
kids.length > 0 && /*
|
|
1604
1721
|
Mantine Collapse를 쓰지 않는다 — 접힐 때 display:none이 되어
|
|
1605
1722
|
하위 링크가 폭 계산에서 빠졌다가 펼칠 때 다시 들어오면서
|
|
@@ -1607,8 +1724,8 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1607
1724
|
height 0 + overflow hidden은 폭 기여를 유지하므로 간격이 고정된다.
|
|
1608
1725
|
visibility:hidden이 접힌 상태의 링크를 탭 순서에서도 빼준다.
|
|
1609
1726
|
*/
|
|
1610
|
-
/* @__PURE__ */
|
|
1611
|
-
|
|
1727
|
+
/* @__PURE__ */ jsx30(
|
|
1728
|
+
Box13,
|
|
1612
1729
|
{
|
|
1613
1730
|
"aria-hidden": !expanded,
|
|
1614
1731
|
style: {
|
|
@@ -1618,19 +1735,28 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1618
1735
|
visibility: expanded ? "visible" : "hidden",
|
|
1619
1736
|
transition: "opacity 0.15s ease"
|
|
1620
1737
|
},
|
|
1621
|
-
children: /* @__PURE__ */
|
|
1738
|
+
children: /* @__PURE__ */ jsx30(Stack16, { gap: "xs", pt: 4, pb: "lg", align: "center", children: kids.map((kid) => {
|
|
1739
|
+
const grandkids = childrenOf(kid.id);
|
|
1740
|
+
if (grandkids.length === 0) {
|
|
1741
|
+
return /* @__PURE__ */ jsx30(SdLink.Body, { href: kid.href, children: kid.label }, kid.id);
|
|
1742
|
+
}
|
|
1743
|
+
return /* @__PURE__ */ jsxs17(Stack16, { gap: 2, align: "center", children: [
|
|
1744
|
+
/* @__PURE__ */ jsx30(SdLink.Body, { href: kid.href, children: kid.label }),
|
|
1745
|
+
grandkids.map((gk) => /* @__PURE__ */ jsx30(SdLink.Sub, { href: gk.href, children: gk.label }, gk.id))
|
|
1746
|
+
] }, kid.id);
|
|
1747
|
+
}) })
|
|
1622
1748
|
}
|
|
1623
1749
|
)
|
|
1624
1750
|
] }, item.id);
|
|
1625
1751
|
}) }),
|
|
1626
|
-
/* @__PURE__ */
|
|
1627
|
-
/* @__PURE__ */
|
|
1628
|
-
loginFlag && /* @__PURE__ */
|
|
1752
|
+
/* @__PURE__ */ jsxs17(Group10, { h: BAR_HEIGHT, align: "center", gap: "sm", wrap: "nowrap", children: [
|
|
1753
|
+
/* @__PURE__ */ jsx30(Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
|
|
1754
|
+
loginFlag && /* @__PURE__ */ jsx30(Group10, { gap: "sm", visibleFrom: "sm", children: /* @__PURE__ */ jsx30(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1629
1755
|
] })
|
|
1630
1756
|
] }) })
|
|
1631
1757
|
}
|
|
1632
1758
|
),
|
|
1633
|
-
/* @__PURE__ */
|
|
1759
|
+
/* @__PURE__ */ jsx30(
|
|
1634
1760
|
MobileNav,
|
|
1635
1761
|
{
|
|
1636
1762
|
opened,
|
|
@@ -1642,16 +1768,19 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1642
1768
|
)
|
|
1643
1769
|
] });
|
|
1644
1770
|
}
|
|
1771
|
+
function renderMenuLeaf(item) {
|
|
1772
|
+
return item.href ? /* @__PURE__ */ jsx30(Menu.Item, { component: "a", href: item.href, children: item.label }, item.id) : /* @__PURE__ */ jsx30(Menu.Label, { children: item.label }, item.id);
|
|
1773
|
+
}
|
|
1645
1774
|
function SimpleHeader({ navItems, loginFlag }) {
|
|
1646
1775
|
const [opened, { toggle, close }] = useDisclosure();
|
|
1647
1776
|
const { topItems, childrenOf } = useNavTree(navItems);
|
|
1648
|
-
return /* @__PURE__ */
|
|
1649
|
-
/* @__PURE__ */
|
|
1650
|
-
/* @__PURE__ */
|
|
1651
|
-
/* @__PURE__ */
|
|
1777
|
+
return /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
1778
|
+
/* @__PURE__ */ jsx30(Box13, { bg: "var(--mantine-color-body)", children: /* @__PURE__ */ jsx30(SdContainer, { children: /* @__PURE__ */ jsxs17(Group10, { h: BAR_HEIGHT, justify: "space-between", align: "center", wrap: "nowrap", children: [
|
|
1779
|
+
/* @__PURE__ */ jsx30(Logo, {}),
|
|
1780
|
+
/* @__PURE__ */ jsx30(Group10, { gap: "xl", align: "center", wrap: "nowrap", visibleFrom: "sm", children: topItems.map((item) => {
|
|
1652
1781
|
const kids = childrenOf(item.id);
|
|
1653
1782
|
if (kids.length === 0) {
|
|
1654
|
-
return /* @__PURE__ */
|
|
1783
|
+
return /* @__PURE__ */ jsx30(SdLink.Body, { href: item.href, children: item.label }, item.id);
|
|
1655
1784
|
}
|
|
1656
1785
|
return (
|
|
1657
1786
|
/*
|
|
@@ -1659,7 +1788,7 @@ function SimpleHeader({ navItems, loginFlag }) {
|
|
|
1659
1788
|
Menu.Target은 ref를 받을 수 있는 단일 엘리먼트여야 하므로
|
|
1660
1789
|
SdLink/SdText가 아니라 Box를 타깃으로 두고 라벨을 그 안에 넣는다.
|
|
1661
1790
|
*/
|
|
1662
|
-
/* @__PURE__ */
|
|
1791
|
+
/* @__PURE__ */ jsxs17(
|
|
1663
1792
|
Menu,
|
|
1664
1793
|
{
|
|
1665
1794
|
trigger: "click-hover",
|
|
@@ -1671,25 +1800,91 @@ function SimpleHeader({ navItems, loginFlag }) {
|
|
|
1671
1800
|
radius: "md",
|
|
1672
1801
|
withinPortal: true,
|
|
1673
1802
|
children: [
|
|
1674
|
-
/* @__PURE__ */
|
|
1675
|
-
/* @__PURE__ */
|
|
1676
|
-
/* @__PURE__ */
|
|
1803
|
+
/* @__PURE__ */ jsx30(Menu.Target, { children: /* @__PURE__ */ jsx30(Box13, { style: { cursor: "pointer" }, children: /* @__PURE__ */ jsxs17(Group10, { gap: 4, align: "center", wrap: "nowrap", children: [
|
|
1804
|
+
/* @__PURE__ */ jsx30(SdLink.Body, { href: item.href, children: item.label }),
|
|
1805
|
+
/* @__PURE__ */ jsx30(IconChevronDown, { size: 14, stroke: 2 })
|
|
1677
1806
|
] }) }) }),
|
|
1678
|
-
/* @__PURE__ */
|
|
1679
|
-
|
|
1680
|
-
|
|
1807
|
+
/* @__PURE__ */ jsx30(Menu.Dropdown, { children: kids.map((kid) => {
|
|
1808
|
+
const grandkids = childrenOf(kid.id);
|
|
1809
|
+
if (grandkids.length > 0) {
|
|
1810
|
+
return /* @__PURE__ */ jsxs17(Menu.Sub, { children: [
|
|
1811
|
+
/* @__PURE__ */ jsx30(Menu.Sub.Target, { children: /* @__PURE__ */ jsx30(Menu.Sub.Item, { children: kid.label }) }),
|
|
1812
|
+
/* @__PURE__ */ jsx30(Menu.Sub.Dropdown, { children: grandkids.map(renderMenuLeaf) })
|
|
1813
|
+
] }, kid.id);
|
|
1814
|
+
}
|
|
1815
|
+
return renderMenuLeaf(kid);
|
|
1816
|
+
}) })
|
|
1681
1817
|
]
|
|
1682
1818
|
},
|
|
1683
1819
|
item.id
|
|
1684
1820
|
)
|
|
1685
1821
|
);
|
|
1686
1822
|
}) }),
|
|
1687
|
-
/* @__PURE__ */
|
|
1688
|
-
/* @__PURE__ */
|
|
1689
|
-
loginFlag && /* @__PURE__ */
|
|
1823
|
+
/* @__PURE__ */ jsxs17(Group10, { align: "center", gap: "sm", wrap: "nowrap", children: [
|
|
1824
|
+
/* @__PURE__ */ jsx30(Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
|
|
1825
|
+
loginFlag && /* @__PURE__ */ jsx30(Group10, { gap: "sm", visibleFrom: "sm", children: /* @__PURE__ */ jsx30(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1826
|
+
] })
|
|
1827
|
+
] }) }) }),
|
|
1828
|
+
/* @__PURE__ */ jsx30(
|
|
1829
|
+
MobileNav,
|
|
1830
|
+
{
|
|
1831
|
+
opened,
|
|
1832
|
+
close,
|
|
1833
|
+
topItems,
|
|
1834
|
+
childrenOf,
|
|
1835
|
+
loginFlag
|
|
1836
|
+
}
|
|
1837
|
+
)
|
|
1838
|
+
] });
|
|
1839
|
+
}
|
|
1840
|
+
function PanelHeader({ navItems, loginFlag }) {
|
|
1841
|
+
const [opened, { toggle, close }] = useDisclosure();
|
|
1842
|
+
const { topItems, childrenOf } = useNavTree(navItems);
|
|
1843
|
+
return /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
1844
|
+
/* @__PURE__ */ jsx30(Box13, { bg: "var(--mantine-color-body)", children: /* @__PURE__ */ jsx30(SdContainer, { children: /* @__PURE__ */ jsxs17(Group10, { h: BAR_HEIGHT, justify: "space-between", align: "center", wrap: "nowrap", children: [
|
|
1845
|
+
/* @__PURE__ */ jsx30(Logo, {}),
|
|
1846
|
+
/* @__PURE__ */ jsx30(Group10, { gap: "xl", align: "center", wrap: "nowrap", visibleFrom: "sm", children: topItems.map((item) => {
|
|
1847
|
+
const kids = childrenOf(item.id);
|
|
1848
|
+
if (kids.length === 0) {
|
|
1849
|
+
return /* @__PURE__ */ jsx30(SdLink.Body, { href: item.href, children: item.label }, item.id);
|
|
1850
|
+
}
|
|
1851
|
+
return /* @__PURE__ */ jsxs17(
|
|
1852
|
+
Menu,
|
|
1853
|
+
{
|
|
1854
|
+
trigger: "click-hover",
|
|
1855
|
+
openDelay: 50,
|
|
1856
|
+
closeDelay: 120,
|
|
1857
|
+
position: "bottom",
|
|
1858
|
+
offset: 12,
|
|
1859
|
+
shadow: "md",
|
|
1860
|
+
radius: "md",
|
|
1861
|
+
withinPortal: true,
|
|
1862
|
+
children: [
|
|
1863
|
+
/* @__PURE__ */ jsx30(Menu.Target, { children: /* @__PURE__ */ jsx30(Box13, { style: { cursor: "pointer" }, children: /* @__PURE__ */ jsxs17(Group10, { gap: 4, align: "center", wrap: "nowrap", children: [
|
|
1864
|
+
/* @__PURE__ */ jsx30(SdLink.Body, { href: item.href, children: item.label }),
|
|
1865
|
+
/* @__PURE__ */ jsx30(IconChevronDown, { size: 14, stroke: 2 })
|
|
1866
|
+
] }) }) }),
|
|
1867
|
+
/* @__PURE__ */ jsx30(Menu.Dropdown, { children: /* @__PURE__ */ jsx30(Stack16, { gap: "xs", p: "xs", children: kids.map((kid) => {
|
|
1868
|
+
const grandkids = childrenOf(kid.id);
|
|
1869
|
+
if (grandkids.length === 0) {
|
|
1870
|
+
return /* @__PURE__ */ jsx30(SdLink.Body, { href: kid.href, children: kid.label }, kid.id);
|
|
1871
|
+
}
|
|
1872
|
+
return /* @__PURE__ */ jsxs17(Stack16, { gap: 2, children: [
|
|
1873
|
+
/* @__PURE__ */ jsx30(SdLink.Body, { href: kid.href, children: kid.label }),
|
|
1874
|
+
grandkids.map((gk) => /* @__PURE__ */ jsx30(SdLink.Sub, { href: gk.href, pl: "sm", children: gk.label }, gk.id))
|
|
1875
|
+
] }, kid.id);
|
|
1876
|
+
}) }) })
|
|
1877
|
+
]
|
|
1878
|
+
},
|
|
1879
|
+
item.id
|
|
1880
|
+
);
|
|
1881
|
+
}) }),
|
|
1882
|
+
/* @__PURE__ */ jsxs17(Group10, { align: "center", gap: "sm", wrap: "nowrap", children: [
|
|
1883
|
+
/* @__PURE__ */ jsx30(Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
|
|
1884
|
+
loginFlag && /* @__PURE__ */ jsx30(Group10, { gap: "sm", visibleFrom: "sm", children: /* @__PURE__ */ jsx30(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1690
1885
|
] })
|
|
1691
1886
|
] }) }) }),
|
|
1692
|
-
/* @__PURE__ */
|
|
1887
|
+
/* @__PURE__ */ jsx30(
|
|
1693
1888
|
MobileNav,
|
|
1694
1889
|
{
|
|
1695
1890
|
opened,
|
|
@@ -1701,12 +1896,17 @@ function SimpleHeader({ navItems, loginFlag }) {
|
|
|
1701
1896
|
)
|
|
1702
1897
|
] });
|
|
1703
1898
|
}
|
|
1704
|
-
var SdHeader = Object.assign(MegaHeader, {
|
|
1899
|
+
var SdHeader = Object.assign(MegaHeader, {
|
|
1900
|
+
Mega: MegaHeader,
|
|
1901
|
+
Simple: SimpleHeader,
|
|
1902
|
+
Panel: PanelHeader
|
|
1903
|
+
});
|
|
1705
1904
|
var SdHeaderMega = MegaHeader;
|
|
1706
1905
|
var SdHeaderSimple = SimpleHeader;
|
|
1906
|
+
var SdHeaderPanel = PanelHeader;
|
|
1707
1907
|
|
|
1708
1908
|
// ui/organism/Footer.tsx
|
|
1709
|
-
import { ActionIcon, Box as
|
|
1909
|
+
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
1910
|
import {
|
|
1711
1911
|
IconBrandFacebook,
|
|
1712
1912
|
IconBrandGithub,
|
|
@@ -1716,16 +1916,16 @@ import {
|
|
|
1716
1916
|
IconBrandYoutube,
|
|
1717
1917
|
IconWorld
|
|
1718
1918
|
} from "@tabler/icons-react";
|
|
1719
|
-
import { Fragment as Fragment5, jsx as
|
|
1919
|
+
import { Fragment as Fragment5, jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1720
1920
|
function FooterNavColumns({ items }) {
|
|
1721
1921
|
const topLevel = items.filter((item) => !item.parentId);
|
|
1722
1922
|
const getChildren = (parentId) => items.filter((item) => item.parentId === parentId);
|
|
1723
1923
|
const CHILD_THRESH = 4;
|
|
1724
|
-
return /* @__PURE__ */
|
|
1725
|
-
/* @__PURE__ */
|
|
1924
|
+
return /* @__PURE__ */ jsx31(Fragment5, { children: topLevel.map((group) => /* @__PURE__ */ jsx31(Grid5.Col, { span: { base: 6, sm: 4, md: "auto" }, children: /* @__PURE__ */ jsxs18(Stack17, { gap: "xs", children: [
|
|
1925
|
+
/* @__PURE__ */ jsx31(SdLink.Sub, { href: group.href, children: group.label }, group.id),
|
|
1726
1926
|
getChildren(group.id).map((link, id) => {
|
|
1727
1927
|
if (id >= CHILD_THRESH) return;
|
|
1728
|
-
return /* @__PURE__ */
|
|
1928
|
+
return /* @__PURE__ */ jsx31(SdLink.Hint, { href: link.href, children: link.label }, link.id);
|
|
1729
1929
|
})
|
|
1730
1930
|
] }) }, group.id)) });
|
|
1731
1931
|
}
|
|
@@ -1739,10 +1939,10 @@ var SOCIAL_ICONS = {
|
|
|
1739
1939
|
blog: IconWorld
|
|
1740
1940
|
};
|
|
1741
1941
|
function FooterSocials({ items }) {
|
|
1742
|
-
return /* @__PURE__ */
|
|
1942
|
+
return /* @__PURE__ */ jsx31(Group11, { gap: 0, wrap: "nowrap", children: items.map((item) => {
|
|
1743
1943
|
var _a4, _b;
|
|
1744
1944
|
const Icon = (_a4 = SOCIAL_ICONS[item.platform]) != null ? _a4 : IconWorld;
|
|
1745
|
-
return /* @__PURE__ */
|
|
1945
|
+
return /* @__PURE__ */ jsx31(
|
|
1746
1946
|
ActionIcon,
|
|
1747
1947
|
{
|
|
1748
1948
|
component: "a",
|
|
@@ -1753,54 +1953,54 @@ function FooterSocials({ items }) {
|
|
|
1753
1953
|
color: "gray",
|
|
1754
1954
|
variant: "subtle",
|
|
1755
1955
|
"aria-label": (_b = item.label) != null ? _b : item.platform,
|
|
1756
|
-
children: /* @__PURE__ */
|
|
1956
|
+
children: /* @__PURE__ */ jsx31(Icon, { size: 18, stroke: 1.5 })
|
|
1757
1957
|
},
|
|
1758
1958
|
item.url
|
|
1759
1959
|
);
|
|
1760
1960
|
}) });
|
|
1761
1961
|
}
|
|
1762
1962
|
function InfoCell({ label, children }) {
|
|
1763
|
-
return /* @__PURE__ */
|
|
1764
|
-
/* @__PURE__ */
|
|
1765
|
-
typeof children === "string" ? /* @__PURE__ */
|
|
1963
|
+
return /* @__PURE__ */ jsxs18(Group11, { gap: 6, wrap: "nowrap", align: "baseline", children: [
|
|
1964
|
+
/* @__PURE__ */ jsx31(SdText.Sub, { c: "slate.4", style: { whiteSpace: "nowrap" }, children: label }),
|
|
1965
|
+
typeof children === "string" ? /* @__PURE__ */ jsx31(SdText.Sub, { children }) : children
|
|
1766
1966
|
] });
|
|
1767
1967
|
}
|
|
1768
1968
|
function FooterCompanyInfo({ company }) {
|
|
1769
1969
|
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__ */
|
|
1970
|
+
return /* @__PURE__ */ jsxs18(SimpleGrid6, { cols: { base: 2, sm: 2, md: 1 }, spacing: "md", verticalSpacing: 0, children: [
|
|
1971
|
+
/* @__PURE__ */ jsx31(InfoCell, { label: "\uC0C1\uD638", children: company.name }),
|
|
1972
|
+
/* @__PURE__ */ jsx31(InfoCell, { label: "\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638", children: company.registrationNumber }),
|
|
1973
|
+
sortedAddresses.map((addr) => /* @__PURE__ */ jsx31(InfoCell, { label: addr.label, children: addr.address }, addr.label)),
|
|
1974
|
+
/* @__PURE__ */ jsx31(InfoCell, { label: "Tel", children: /* @__PURE__ */ jsx31(SdLink.Sub, { href: `tel:${company.tel}`, children: company.tel }) }),
|
|
1975
|
+
company.fax && /* @__PURE__ */ jsx31(InfoCell, { label: "Fax", children: company.fax }),
|
|
1976
|
+
/* @__PURE__ */ jsx31(InfoCell, { label: "Email", children: /* @__PURE__ */ jsx31(SdLink.Sub, { href: `mailto:${company.email}`, children: company.email }) })
|
|
1777
1977
|
] });
|
|
1778
1978
|
}
|
|
1779
1979
|
function SdFooter({ company, navItems, policyLinks, description }) {
|
|
1780
1980
|
const visibleNav = filterAndSort(navItems);
|
|
1781
1981
|
const visiblePolicy = filterAndSort(policyLinks);
|
|
1782
|
-
return /* @__PURE__ */
|
|
1783
|
-
/* @__PURE__ */
|
|
1784
|
-
description && /* @__PURE__ */
|
|
1785
|
-
/* @__PURE__ */
|
|
1786
|
-
/* @__PURE__ */
|
|
1787
|
-
visibleNav.length > 0 && /* @__PURE__ */
|
|
1982
|
+
return /* @__PURE__ */ jsx31(Box14, { component: "footer", children: /* @__PURE__ */ jsx31(SdContainer, { py: "lg", children: /* @__PURE__ */ jsxs18(Stack17, { children: [
|
|
1983
|
+
/* @__PURE__ */ jsx31(Logo, { size: "sm" }),
|
|
1984
|
+
description && /* @__PURE__ */ jsx31(SdText.Sub, { children: description }),
|
|
1985
|
+
/* @__PURE__ */ jsxs18(Flex, { direction: { base: "column", md: "row" }, gap: 48, align: "flex-start", children: [
|
|
1986
|
+
/* @__PURE__ */ jsx31(Box14, { flex: { base: "0 0 auto", md: "1 1 0" }, w: { base: "100%", md: "auto" }, children: /* @__PURE__ */ jsx31(FooterCompanyInfo, { company }) }),
|
|
1987
|
+
visibleNav.length > 0 && /* @__PURE__ */ jsx31(Box14, { flex: { base: "0 0 auto", md: "2 1 0" }, w: { base: "100%", md: "auto" }, children: /* @__PURE__ */ jsx31(Grid5, { style: { "--grid-gutter": "24px" }, children: /* @__PURE__ */ jsx31(FooterNavColumns, { items: visibleNav }) }) })
|
|
1788
1988
|
] }),
|
|
1789
|
-
/* @__PURE__ */
|
|
1790
|
-
/* @__PURE__ */
|
|
1791
|
-
/* @__PURE__ */
|
|
1989
|
+
/* @__PURE__ */ jsx31(Divider3, {}),
|
|
1990
|
+
/* @__PURE__ */ jsxs18(Group11, { justify: "space-between", wrap: "wrap", gap: "xs", children: [
|
|
1991
|
+
/* @__PURE__ */ jsxs18(SdText.Sub, { children: [
|
|
1792
1992
|
"\xA9 ",
|
|
1793
1993
|
company.copyrightYear,
|
|
1794
1994
|
" ",
|
|
1795
1995
|
t(company.name),
|
|
1796
1996
|
". All rights reserved."
|
|
1797
1997
|
] }),
|
|
1798
|
-
/* @__PURE__ */
|
|
1799
|
-
visiblePolicy.length > 0 && /* @__PURE__ */
|
|
1998
|
+
/* @__PURE__ */ jsxs18(Group11, { gap: "lg", wrap: "wrap", children: [
|
|
1999
|
+
visiblePolicy.length > 0 && /* @__PURE__ */ jsx31(Group11, { gap: "lg", children: visiblePolicy.map((item) => {
|
|
1800
2000
|
const Link4 = item.highlight ? SdLink.Body : SdLink.Sub;
|
|
1801
|
-
return /* @__PURE__ */
|
|
2001
|
+
return /* @__PURE__ */ jsx31(Link4, { href: item.href, children: item.label }, item.id);
|
|
1802
2002
|
}) }),
|
|
1803
|
-
company.socials && company.socials.length > 0 && /* @__PURE__ */
|
|
2003
|
+
company.socials && company.socials.length > 0 && /* @__PURE__ */ jsx31(FooterSocials, { items: company.socials })
|
|
1804
2004
|
] })
|
|
1805
2005
|
] })
|
|
1806
2006
|
] }) }) });
|
|
@@ -1808,7 +2008,7 @@ function SdFooter({ company, navItems, policyLinks, description }) {
|
|
|
1808
2008
|
|
|
1809
2009
|
// ui/organism/FeatureSection.tsx
|
|
1810
2010
|
import { Stack as Stack18 } from "@mantine/core";
|
|
1811
|
-
import { jsx as
|
|
2011
|
+
import { jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1812
2012
|
function SdFeatureSection(_a4) {
|
|
1813
2013
|
var _b = _a4, {
|
|
1814
2014
|
label,
|
|
@@ -1825,8 +2025,8 @@ function SdFeatureSection(_a4) {
|
|
|
1825
2025
|
"cols",
|
|
1826
2026
|
"py"
|
|
1827
2027
|
]);
|
|
1828
|
-
return /* @__PURE__ */
|
|
1829
|
-
/* @__PURE__ */
|
|
2028
|
+
return /* @__PURE__ */ jsx32(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ jsxs19(Stack18, { gap: "xl", children: [
|
|
2029
|
+
/* @__PURE__ */ jsx32(
|
|
1830
2030
|
SdTextBox.Section,
|
|
1831
2031
|
{
|
|
1832
2032
|
label,
|
|
@@ -1837,13 +2037,13 @@ function SdFeatureSection(_a4) {
|
|
|
1837
2037
|
align: "center"
|
|
1838
2038
|
}
|
|
1839
2039
|
),
|
|
1840
|
-
/* @__PURE__ */
|
|
2040
|
+
/* @__PURE__ */ jsx32(SdFeatures, { items, cols })
|
|
1841
2041
|
] }) }));
|
|
1842
2042
|
}
|
|
1843
2043
|
|
|
1844
2044
|
// ui/organism/TimelineSection.tsx
|
|
1845
2045
|
import { Center as Center3, Stack as Stack19 } from "@mantine/core";
|
|
1846
|
-
import { jsx as
|
|
2046
|
+
import { jsx as jsx33, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1847
2047
|
function SdTimelineSection(_a4) {
|
|
1848
2048
|
var _b = _a4, {
|
|
1849
2049
|
label,
|
|
@@ -1858,15 +2058,15 @@ function SdTimelineSection(_a4) {
|
|
|
1858
2058
|
"items",
|
|
1859
2059
|
"py"
|
|
1860
2060
|
]);
|
|
1861
|
-
return /* @__PURE__ */
|
|
1862
|
-
/* @__PURE__ */
|
|
1863
|
-
/* @__PURE__ */
|
|
2061
|
+
return /* @__PURE__ */ jsx33(Center3, { children: /* @__PURE__ */ jsxs20(Stack19, __spreadProps(__spreadValues({ py, gap: "md" }, boxProps), { children: [
|
|
2062
|
+
/* @__PURE__ */ jsx33(SdTextBox.Section, { label, title, description }),
|
|
2063
|
+
/* @__PURE__ */ jsx33(Center3, { children: /* @__PURE__ */ jsx33(SdTimeline, { items }) })
|
|
1864
2064
|
] })) });
|
|
1865
2065
|
}
|
|
1866
2066
|
|
|
1867
2067
|
// ui/organism/StepsSection.tsx
|
|
1868
2068
|
import { Stack as Stack20 } from "@mantine/core";
|
|
1869
|
-
import { jsx as
|
|
2069
|
+
import { jsx as jsx34, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
1870
2070
|
function SdStepsSection(_a4) {
|
|
1871
2071
|
var _b = _a4, {
|
|
1872
2072
|
label,
|
|
@@ -1881,17 +2081,17 @@ function SdStepsSection(_a4) {
|
|
|
1881
2081
|
"items",
|
|
1882
2082
|
"py"
|
|
1883
2083
|
]);
|
|
1884
|
-
return /* @__PURE__ */
|
|
1885
|
-
(label || title || description) && /* @__PURE__ */
|
|
1886
|
-
/* @__PURE__ */
|
|
2084
|
+
return /* @__PURE__ */ jsx34(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ jsxs21(Stack20, { gap: "xl", children: [
|
|
2085
|
+
(label || title || description) && /* @__PURE__ */ jsx34(SdTextBox.Section, { label, title, description }),
|
|
2086
|
+
/* @__PURE__ */ jsx34(SdSteps.Bubble, { items })
|
|
1887
2087
|
] }) }));
|
|
1888
2088
|
}
|
|
1889
2089
|
|
|
1890
2090
|
// ui/organism/ErrorView.tsx
|
|
1891
2091
|
import { Center as Center4, Group as Group12, Stack as Stack21, Text as Text2 } from "@mantine/core";
|
|
1892
|
-
import { jsx as
|
|
2092
|
+
import { jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
1893
2093
|
function StatusCode({ code }) {
|
|
1894
|
-
return /* @__PURE__ */
|
|
2094
|
+
return /* @__PURE__ */ jsx35(
|
|
1895
2095
|
Text2,
|
|
1896
2096
|
{
|
|
1897
2097
|
fz: 160,
|
|
@@ -1905,15 +2105,15 @@ function StatusCode({ code }) {
|
|
|
1905
2105
|
);
|
|
1906
2106
|
}
|
|
1907
2107
|
function Page({ error, onReset, onHome }) {
|
|
1908
|
-
return /* @__PURE__ */
|
|
1909
|
-
/* @__PURE__ */
|
|
1910
|
-
/* @__PURE__ */
|
|
1911
|
-
/* @__PURE__ */
|
|
1912
|
-
/* @__PURE__ */
|
|
2108
|
+
return /* @__PURE__ */ jsx35(Center4, { mih: "60vh", children: /* @__PURE__ */ jsx35(SdContainer, { children: /* @__PURE__ */ jsxs22(Stack21, { align: "center", gap: "lg", ta: "center", children: [
|
|
2109
|
+
/* @__PURE__ */ jsx35(StatusCode, { code: "500" }),
|
|
2110
|
+
/* @__PURE__ */ jsxs22(Stack21, { gap: "sm", align: "center", children: [
|
|
2111
|
+
/* @__PURE__ */ jsx35(SdTitle.Section, { children: "\uC11C\uBC84\uC5D0\uC11C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4" }),
|
|
2112
|
+
/* @__PURE__ */ jsx35(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
2113
|
] }),
|
|
1914
|
-
/* @__PURE__ */
|
|
1915
|
-
/* @__PURE__ */
|
|
1916
|
-
onHome && /* @__PURE__ */
|
|
2114
|
+
/* @__PURE__ */ jsxs22(Group12, { gap: "sm", justify: "center", children: [
|
|
2115
|
+
/* @__PURE__ */ jsx35(SdButton.Primary, { onClick: onReset, children: "\uB2E4\uC2DC \uC2DC\uB3C4" }),
|
|
2116
|
+
onHome && /* @__PURE__ */ jsx35(SdButton.Ghost, { onClick: onHome, children: "\uD648\uC73C\uB85C" })
|
|
1917
2117
|
] })
|
|
1918
2118
|
] }) }) });
|
|
1919
2119
|
}
|
|
@@ -1925,15 +2125,15 @@ function NotFound({
|
|
|
1925
2125
|
},
|
|
1926
2126
|
onBack = () => window.history.back()
|
|
1927
2127
|
}) {
|
|
1928
|
-
return /* @__PURE__ */
|
|
1929
|
-
/* @__PURE__ */
|
|
1930
|
-
/* @__PURE__ */
|
|
1931
|
-
/* @__PURE__ */
|
|
1932
|
-
/* @__PURE__ */
|
|
2128
|
+
return /* @__PURE__ */ jsx35(Center4, { mih: "60vh", children: /* @__PURE__ */ jsx35(SdContainer, { children: /* @__PURE__ */ jsxs22(Stack21, { align: "center", gap: "lg", ta: "center", children: [
|
|
2129
|
+
/* @__PURE__ */ jsx35(StatusCode, { code: "404" }),
|
|
2130
|
+
/* @__PURE__ */ jsxs22(Stack21, { gap: "sm", align: "center", children: [
|
|
2131
|
+
/* @__PURE__ */ jsx35(SdTitle.Section, { children: title }),
|
|
2132
|
+
/* @__PURE__ */ jsx35(SdText.Body, { maw: 480, children: description })
|
|
1933
2133
|
] }),
|
|
1934
|
-
/* @__PURE__ */
|
|
1935
|
-
onHome && /* @__PURE__ */
|
|
1936
|
-
onBack && /* @__PURE__ */
|
|
2134
|
+
/* @__PURE__ */ jsxs22(Group12, { gap: "sm", justify: "center", children: [
|
|
2135
|
+
onHome && /* @__PURE__ */ jsx35(SdButton.Primary, { onClick: onHome, children: "\uD648\uC73C\uB85C" }),
|
|
2136
|
+
onBack && /* @__PURE__ */ jsx35(SdButton.Ghost, { onClick: onBack, children: "\uB4A4\uB85C \uAC00\uAE30" })
|
|
1937
2137
|
] })
|
|
1938
2138
|
] }) }) });
|
|
1939
2139
|
}
|
|
@@ -1947,7 +2147,7 @@ var SdErrorViewPage = SdErrorView.Page;
|
|
|
1947
2147
|
var SdErrorViewNotFound = SdErrorView.NotFound;
|
|
1948
2148
|
|
|
1949
2149
|
// ui/organism/LoginView.tsx
|
|
1950
|
-
import { Box as
|
|
2150
|
+
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
2151
|
import {
|
|
1952
2152
|
IconBrandApple,
|
|
1953
2153
|
IconBrandGithub as IconBrandGithub2,
|
|
@@ -1973,7 +2173,7 @@ var brandDotTexture = {
|
|
|
1973
2173
|
};
|
|
1974
2174
|
|
|
1975
2175
|
// ui/organism/LoginView.tsx
|
|
1976
|
-
import { Fragment as Fragment6, jsx as
|
|
2176
|
+
import { Fragment as Fragment6, jsx as jsx36, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
1977
2177
|
var SOCIAL_META = {
|
|
1978
2178
|
google: { Icon: IconBrandGoogle, label: "\uAD6C\uAE00\uB85C \uB85C\uADF8\uC778" },
|
|
1979
2179
|
kakao: { Icon: IconBrandKakaoTalk, label: "\uCE74\uCE74\uC624\uB85C \uB85C\uADF8\uC778" },
|
|
@@ -2002,9 +2202,9 @@ function LoginForm({
|
|
|
2002
2202
|
remember: data.get("remember") === "on"
|
|
2003
2203
|
});
|
|
2004
2204
|
}
|
|
2005
|
-
return /* @__PURE__ */
|
|
2006
|
-
error && /* @__PURE__ */
|
|
2007
|
-
/* @__PURE__ */
|
|
2205
|
+
return /* @__PURE__ */ jsx36("form", { onSubmit: handleSubmit, noValidate: true, children: /* @__PURE__ */ jsxs23(Stack22, { gap: "md", children: [
|
|
2206
|
+
error && /* @__PURE__ */ jsx36(SdText.Error, { children: error }),
|
|
2207
|
+
/* @__PURE__ */ jsx36(
|
|
2008
2208
|
SdInput.Email,
|
|
2009
2209
|
{
|
|
2010
2210
|
name: "email",
|
|
@@ -2014,7 +2214,7 @@ function LoginForm({
|
|
|
2014
2214
|
required: true
|
|
2015
2215
|
}
|
|
2016
2216
|
),
|
|
2017
|
-
/* @__PURE__ */
|
|
2217
|
+
/* @__PURE__ */ jsx36(
|
|
2018
2218
|
SdInput.Password,
|
|
2019
2219
|
{
|
|
2020
2220
|
name: "password",
|
|
@@ -2024,50 +2224,50 @@ function LoginForm({
|
|
|
2024
2224
|
required: true
|
|
2025
2225
|
}
|
|
2026
2226
|
),
|
|
2027
|
-
(withRemember || findPasswordHref) && /* @__PURE__ */
|
|
2028
|
-
withRemember ? /* @__PURE__ */
|
|
2029
|
-
findPasswordHref && /* @__PURE__ */
|
|
2227
|
+
(withRemember || findPasswordHref) && /* @__PURE__ */ jsxs23(Group13, { justify: "space-between", align: "center", wrap: "nowrap", children: [
|
|
2228
|
+
withRemember ? /* @__PURE__ */ jsx36(Checkbox2, { name: "remember", size: "xs", label: "\uC790\uB3D9 \uB85C\uADF8\uC778" }) : /* @__PURE__ */ jsx36("span", {}),
|
|
2229
|
+
findPasswordHref && /* @__PURE__ */ jsx36(SdLink.Sub, { href: findPasswordHref, children: "\uBE44\uBC00\uBC88\uD638\uB97C \uC78A\uC73C\uC168\uB098\uC694?" })
|
|
2030
2230
|
] }),
|
|
2031
|
-
/* @__PURE__ */
|
|
2231
|
+
/* @__PURE__ */ jsx36(
|
|
2032
2232
|
SdButton.Primary,
|
|
2033
2233
|
{
|
|
2034
2234
|
type: "submit",
|
|
2035
2235
|
fullWidth: true,
|
|
2036
2236
|
loading,
|
|
2037
|
-
leftSection: /* @__PURE__ */
|
|
2237
|
+
leftSection: /* @__PURE__ */ jsx36(IconLogin2, { size: 16 }),
|
|
2038
2238
|
children: submitLabel
|
|
2039
2239
|
}
|
|
2040
2240
|
),
|
|
2041
|
-
socials && socials.length > 0 && /* @__PURE__ */
|
|
2042
|
-
/* @__PURE__ */
|
|
2043
|
-
/* @__PURE__ */
|
|
2241
|
+
socials && socials.length > 0 && /* @__PURE__ */ jsxs23(Fragment6, { children: [
|
|
2242
|
+
/* @__PURE__ */ jsx36(Divider4, { label: "\uB610\uB294", labelPosition: "center" }),
|
|
2243
|
+
/* @__PURE__ */ jsx36(Stack22, { gap: "xs", children: socials.map((social) => {
|
|
2044
2244
|
var _a4;
|
|
2045
2245
|
const { Icon, label } = SOCIAL_META[social.provider];
|
|
2046
|
-
return /* @__PURE__ */
|
|
2246
|
+
return /* @__PURE__ */ jsx36(
|
|
2047
2247
|
SdButton.Outline,
|
|
2048
2248
|
{
|
|
2049
2249
|
color: "slate",
|
|
2050
2250
|
fullWidth: true,
|
|
2051
2251
|
type: "button",
|
|
2052
2252
|
onClick: social.onClick,
|
|
2053
|
-
leftSection: /* @__PURE__ */
|
|
2253
|
+
leftSection: /* @__PURE__ */ jsx36(Icon, { size: 16 }),
|
|
2054
2254
|
children: (_a4 = social.label) != null ? _a4 : label
|
|
2055
2255
|
},
|
|
2056
2256
|
social.provider
|
|
2057
2257
|
);
|
|
2058
2258
|
}) })
|
|
2059
2259
|
] }),
|
|
2060
|
-
signUpHref && /* @__PURE__ */
|
|
2061
|
-
/* @__PURE__ */
|
|
2062
|
-
/* @__PURE__ */
|
|
2260
|
+
signUpHref && /* @__PURE__ */ jsxs23(Group13, { gap: 6, justify: "center", children: [
|
|
2261
|
+
/* @__PURE__ */ jsx36(SdText.Sub, { children: "\uC544\uC9C1 \uACC4\uC815\uC774 \uC5C6\uC73C\uC2E0\uAC00\uC694?" }),
|
|
2262
|
+
/* @__PURE__ */ jsx36(SdLink.Sub, { href: signUpHref, c: "primary.6", children: "\uD68C\uC6D0\uAC00\uC785" })
|
|
2063
2263
|
] }),
|
|
2064
2264
|
children
|
|
2065
2265
|
] }) });
|
|
2066
2266
|
}
|
|
2067
2267
|
function FormHeader({ title, description }) {
|
|
2068
|
-
return /* @__PURE__ */
|
|
2069
|
-
/* @__PURE__ */
|
|
2070
|
-
/* @__PURE__ */
|
|
2268
|
+
return /* @__PURE__ */ jsxs23(Stack22, { gap: "lg", children: [
|
|
2269
|
+
/* @__PURE__ */ jsx36(Logo, { size: "sm" }),
|
|
2270
|
+
/* @__PURE__ */ jsx36(SdTextBox.Card, { title, description: description != null ? description : "" })
|
|
2071
2271
|
] });
|
|
2072
2272
|
}
|
|
2073
2273
|
function Card7(_a4) {
|
|
@@ -2080,9 +2280,9 @@ function Card7(_a4) {
|
|
|
2080
2280
|
"description",
|
|
2081
2281
|
"mih"
|
|
2082
2282
|
]);
|
|
2083
|
-
return /* @__PURE__ */
|
|
2084
|
-
/* @__PURE__ */
|
|
2085
|
-
/* @__PURE__ */
|
|
2283
|
+
return /* @__PURE__ */ jsx36(Center5, { mih, bg: "slate.0", p: "md", children: /* @__PURE__ */ jsx36(Paper, { w: "100%", maw: 420, p: { base: "lg", sm: "xl" }, radius: "lg", withBorder: true, shadow: "sm", children: /* @__PURE__ */ jsxs23(Stack22, { gap: "xl", children: [
|
|
2284
|
+
/* @__PURE__ */ jsx36(FormHeader, { title, description }),
|
|
2285
|
+
/* @__PURE__ */ jsx36(LoginForm, __spreadValues({}, formProps))
|
|
2086
2286
|
] }) }) });
|
|
2087
2287
|
}
|
|
2088
2288
|
function Split(_a4) {
|
|
@@ -2099,16 +2299,16 @@ function Split(_a4) {
|
|
|
2099
2299
|
"brandDescription",
|
|
2100
2300
|
"mih"
|
|
2101
2301
|
]);
|
|
2102
|
-
return /* @__PURE__ */
|
|
2103
|
-
/* @__PURE__ */
|
|
2104
|
-
|
|
2302
|
+
return /* @__PURE__ */ jsxs23(SimpleGrid7, { cols: { base: 1, md: 2 }, spacing: 0, mih, children: [
|
|
2303
|
+
/* @__PURE__ */ jsxs23(
|
|
2304
|
+
Box16,
|
|
2105
2305
|
{
|
|
2106
2306
|
visibleFrom: "md",
|
|
2107
2307
|
pos: "relative",
|
|
2108
2308
|
style: __spreadValues({ overflow: "hidden", display: "flex", alignItems: "flex-end" }, brandSurface),
|
|
2109
2309
|
children: [
|
|
2110
|
-
/* @__PURE__ */
|
|
2111
|
-
/* @__PURE__ */
|
|
2310
|
+
/* @__PURE__ */ jsx36(Box16, { "aria-hidden": true, pos: "absolute", inset: 0, style: brandDotTexture }),
|
|
2311
|
+
/* @__PURE__ */ jsx36(Box16, { pos: "relative", p: 48, style: { zIndex: 1, width: "100%" }, children: /* @__PURE__ */ jsx36(
|
|
2112
2312
|
SdTextBox.Hero,
|
|
2113
2313
|
{
|
|
2114
2314
|
title: brandTitle,
|
|
@@ -2122,9 +2322,9 @@ function Split(_a4) {
|
|
|
2122
2322
|
]
|
|
2123
2323
|
}
|
|
2124
2324
|
),
|
|
2125
|
-
/* @__PURE__ */
|
|
2126
|
-
/* @__PURE__ */
|
|
2127
|
-
/* @__PURE__ */
|
|
2325
|
+
/* @__PURE__ */ jsx36(Center5, { p: { base: "md", sm: "xl" }, bg: "white", children: /* @__PURE__ */ jsxs23(Stack22, { gap: "xl", w: "100%", maw: 400, children: [
|
|
2326
|
+
/* @__PURE__ */ jsx36(FormHeader, { title, description }),
|
|
2327
|
+
/* @__PURE__ */ jsx36(LoginForm, __spreadValues({}, formProps))
|
|
2128
2328
|
] }) })
|
|
2129
2329
|
] });
|
|
2130
2330
|
}
|
|
@@ -2138,11 +2338,11 @@ var SdLoginViewCard = SdLoginView.Card;
|
|
|
2138
2338
|
var SdLoginViewSplit = SdLoginView.Split;
|
|
2139
2339
|
|
|
2140
2340
|
// ui/organism/Result.tsx
|
|
2141
|
-
import { Box as
|
|
2341
|
+
import { Box as Box17, Center as Center6, Group as Group14, Stack as Stack23 } from "@mantine/core";
|
|
2142
2342
|
import { IconCircleCheck, IconCircleX } from "@tabler/icons-react";
|
|
2143
|
-
import { jsx as
|
|
2343
|
+
import { jsx as jsx37, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2144
2344
|
function ResultIcon({ color, Icon }) {
|
|
2145
|
-
return /* @__PURE__ */
|
|
2345
|
+
return /* @__PURE__ */ jsx37(Center6, { w: 88, h: 88, bg: `${color}.0`, style: { borderRadius: "50%" }, "aria-hidden": true, children: /* @__PURE__ */ jsx37(Icon, { size: 48, stroke: 1.5, color: `var(--mantine-color-${color}-6)` }) });
|
|
2146
2346
|
}
|
|
2147
2347
|
function createResult(defaults) {
|
|
2148
2348
|
return function SdResult2({
|
|
@@ -2153,16 +2353,16 @@ function createResult(defaults) {
|
|
|
2153
2353
|
children,
|
|
2154
2354
|
mih = "60vh"
|
|
2155
2355
|
}) {
|
|
2156
|
-
return /* @__PURE__ */
|
|
2157
|
-
/* @__PURE__ */
|
|
2158
|
-
/* @__PURE__ */
|
|
2159
|
-
/* @__PURE__ */
|
|
2160
|
-
description && /* @__PURE__ */
|
|
2356
|
+
return /* @__PURE__ */ jsx37(Center6, { mih, children: /* @__PURE__ */ jsx37(SdContainer, { children: /* @__PURE__ */ jsxs24(Stack23, { align: "center", gap: "lg", ta: "center", children: [
|
|
2357
|
+
/* @__PURE__ */ jsx37(ResultIcon, { color: defaults.color, Icon: defaults.Icon }),
|
|
2358
|
+
/* @__PURE__ */ jsxs24(Stack23, { gap: "sm", align: "center", children: [
|
|
2359
|
+
/* @__PURE__ */ jsx37(SdTitle.Section, { children: title }),
|
|
2360
|
+
description && /* @__PURE__ */ jsx37(SdText.Body, { maw: 480, children: description })
|
|
2161
2361
|
] }),
|
|
2162
|
-
children && /* @__PURE__ */
|
|
2163
|
-
(primaryAction || secondaryAction) && /* @__PURE__ */
|
|
2164
|
-
primaryAction && /* @__PURE__ */
|
|
2165
|
-
secondaryAction && /* @__PURE__ */
|
|
2362
|
+
children && /* @__PURE__ */ jsx37(Box17, { children }),
|
|
2363
|
+
(primaryAction || secondaryAction) && /* @__PURE__ */ jsxs24(Group14, { gap: "sm", justify: "center", children: [
|
|
2364
|
+
primaryAction && /* @__PURE__ */ jsx37(SdButton.Primary, { onClick: primaryAction.onClick, children: primaryAction.label }),
|
|
2365
|
+
secondaryAction && /* @__PURE__ */ jsx37(SdButton.Ghost, { onClick: secondaryAction.onClick, children: secondaryAction.label })
|
|
2166
2366
|
] })
|
|
2167
2367
|
] }) }) });
|
|
2168
2368
|
};
|
|
@@ -2186,10 +2386,11 @@ var SdResultError = SdResult.Error;
|
|
|
2186
2386
|
|
|
2187
2387
|
// ui/template/MainLayout.tsx
|
|
2188
2388
|
import { AppShell } from "@mantine/core";
|
|
2189
|
-
import { jsx as
|
|
2389
|
+
import { jsx as jsx38, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2190
2390
|
var headers = {
|
|
2191
2391
|
mega: SdHeader.Mega,
|
|
2192
|
-
simple: SdHeader.Simple
|
|
2392
|
+
simple: SdHeader.Simple,
|
|
2393
|
+
panel: SdHeader.Panel
|
|
2193
2394
|
};
|
|
2194
2395
|
function MainLayout({
|
|
2195
2396
|
children,
|
|
@@ -2199,45 +2400,65 @@ function MainLayout({
|
|
|
2199
2400
|
headerVariant = "mega"
|
|
2200
2401
|
}) {
|
|
2201
2402
|
const Header = headers[headerVariant];
|
|
2202
|
-
return /* @__PURE__ */
|
|
2203
|
-
/* @__PURE__ */
|
|
2204
|
-
/* @__PURE__ */
|
|
2205
|
-
/* @__PURE__ */
|
|
2403
|
+
return /* @__PURE__ */ jsxs25(AppShell, { header: { height: 60 }, children: [
|
|
2404
|
+
/* @__PURE__ */ jsx38(AppShell.Header, { children: /* @__PURE__ */ jsx38(Header, { navItems, loginFlag }) }),
|
|
2405
|
+
/* @__PURE__ */ jsx38(AppShell.Main, { children }),
|
|
2406
|
+
/* @__PURE__ */ jsx38(SdFooter, { company: companyInfo, navItems })
|
|
2206
2407
|
] });
|
|
2207
2408
|
}
|
|
2208
2409
|
|
|
2209
2410
|
// ui/template/PageLayout.tsx
|
|
2210
|
-
import { Box as
|
|
2211
|
-
import { Fragment as Fragment7, jsx as
|
|
2411
|
+
import { Box as Box18, Divider as Divider5, Group as Group15, Space, Stack as Stack24 } from "@mantine/core";
|
|
2412
|
+
import { Fragment as Fragment7, jsx as jsx39, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2212
2413
|
var HERO_MIN_H = "38svh";
|
|
2213
2414
|
var HERO_PY = { base: 56, sm: 88 };
|
|
2214
2415
|
var HERO_MAW = 680;
|
|
2215
|
-
function Content({
|
|
2216
|
-
|
|
2416
|
+
function Content({
|
|
2417
|
+
children,
|
|
2418
|
+
navItems,
|
|
2419
|
+
breadcrumb = true,
|
|
2420
|
+
currentHref
|
|
2421
|
+
}) {
|
|
2422
|
+
const showBreadcrumb = breadcrumb && !!navItems && navItems.length > 0;
|
|
2423
|
+
return /* @__PURE__ */ jsxs26(SdContainer, { py: "xl", children: [
|
|
2424
|
+
showBreadcrumb && /* @__PURE__ */ jsx39(SdBreadcrumb, { navItems, currentHref, mb: "lg" }),
|
|
2425
|
+
/* @__PURE__ */ jsx39(Stack24, { gap: "xl", children })
|
|
2426
|
+
] });
|
|
2217
2427
|
}
|
|
2218
2428
|
function LayoutGap() {
|
|
2219
|
-
return /* @__PURE__ */
|
|
2429
|
+
return /* @__PURE__ */ jsx39(Space, {});
|
|
2220
2430
|
}
|
|
2221
|
-
function Minimal({
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2431
|
+
function Minimal({
|
|
2432
|
+
label,
|
|
2433
|
+
title,
|
|
2434
|
+
description,
|
|
2435
|
+
children,
|
|
2436
|
+
navItems,
|
|
2437
|
+
breadcrumb,
|
|
2438
|
+
currentHref
|
|
2439
|
+
}) {
|
|
2440
|
+
return /* @__PURE__ */ jsxs26(Plain2, { navItems, breadcrumb, currentHref, children: [
|
|
2441
|
+
/* @__PURE__ */ jsx39(LayoutGap, {}),
|
|
2442
|
+
/* @__PURE__ */ jsx39(SdTextBox.Section, { label, title, description: description != null ? description : "" }),
|
|
2443
|
+
/* @__PURE__ */ jsx39(Divider5, {}),
|
|
2225
2444
|
children
|
|
2226
2445
|
] });
|
|
2227
2446
|
}
|
|
2228
|
-
function Plain2({
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2447
|
+
function Plain2({
|
|
2448
|
+
children,
|
|
2449
|
+
navItems,
|
|
2450
|
+
breadcrumb,
|
|
2451
|
+
currentHref
|
|
2452
|
+
}) {
|
|
2453
|
+
return /* @__PURE__ */ jsx39(Fragment7, { children: /* @__PURE__ */ jsx39(Content, { navItems, breadcrumb, currentHref, children }) });
|
|
2233
2454
|
}
|
|
2234
2455
|
function HeroCopy({ label, title, description }) {
|
|
2235
|
-
return /* @__PURE__ */
|
|
2236
|
-
label && /* @__PURE__ */
|
|
2237
|
-
/* @__PURE__ */
|
|
2238
|
-
/* @__PURE__ */
|
|
2456
|
+
return /* @__PURE__ */ jsxs26(Stack24, { gap: "md", maw: HERO_MAW, children: [
|
|
2457
|
+
label && /* @__PURE__ */ jsxs26(Group15, { gap: "sm", align: "center", wrap: "nowrap", children: [
|
|
2458
|
+
/* @__PURE__ */ jsx39(Box18, { w: 28, h: 2, bg: "primary.3", style: { borderRadius: 2 } }),
|
|
2459
|
+
/* @__PURE__ */ jsx39(SdText.Eyebrow, { c: "primary.1", children: label })
|
|
2239
2460
|
] }),
|
|
2240
|
-
/* @__PURE__ */
|
|
2461
|
+
/* @__PURE__ */ jsx39(
|
|
2241
2462
|
SdTextBox.Hero,
|
|
2242
2463
|
{
|
|
2243
2464
|
title,
|
|
@@ -2250,10 +2471,19 @@ function HeroCopy({ label, title, description }) {
|
|
|
2250
2471
|
)
|
|
2251
2472
|
] });
|
|
2252
2473
|
}
|
|
2253
|
-
function Image2({
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2474
|
+
function Image2({
|
|
2475
|
+
image,
|
|
2476
|
+
label,
|
|
2477
|
+
title,
|
|
2478
|
+
description,
|
|
2479
|
+
children,
|
|
2480
|
+
navItems,
|
|
2481
|
+
breadcrumb,
|
|
2482
|
+
currentHref
|
|
2483
|
+
}) {
|
|
2484
|
+
return /* @__PURE__ */ jsxs26(Fragment7, { children: [
|
|
2485
|
+
/* @__PURE__ */ jsxs26(
|
|
2486
|
+
Box18,
|
|
2257
2487
|
{
|
|
2258
2488
|
pos: "relative",
|
|
2259
2489
|
style: {
|
|
@@ -2266,8 +2496,8 @@ function Image2({ image, label, title, description, children }) {
|
|
|
2266
2496
|
backgroundColor: "var(--mantine-color-slate-9)"
|
|
2267
2497
|
},
|
|
2268
2498
|
children: [
|
|
2269
|
-
/* @__PURE__ */
|
|
2270
|
-
|
|
2499
|
+
/* @__PURE__ */ jsx39(
|
|
2500
|
+
Box18,
|
|
2271
2501
|
{
|
|
2272
2502
|
"aria-hidden": true,
|
|
2273
2503
|
pos: "absolute",
|
|
@@ -2277,17 +2507,25 @@ function Image2({ image, label, title, description, children }) {
|
|
|
2277
2507
|
}
|
|
2278
2508
|
}
|
|
2279
2509
|
),
|
|
2280
|
-
/* @__PURE__ */
|
|
2510
|
+
/* @__PURE__ */ jsx39(SdContainer, { pos: "relative", py: HERO_PY, style: { zIndex: 1, width: "100%" }, children: /* @__PURE__ */ jsx39(HeroCopy, { label, title, description }) })
|
|
2281
2511
|
]
|
|
2282
2512
|
}
|
|
2283
2513
|
),
|
|
2284
|
-
/* @__PURE__ */
|
|
2514
|
+
/* @__PURE__ */ jsx39(Content, { navItems, breadcrumb, currentHref, children })
|
|
2285
2515
|
] });
|
|
2286
2516
|
}
|
|
2287
|
-
function Brand({
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2517
|
+
function Brand({
|
|
2518
|
+
label,
|
|
2519
|
+
title,
|
|
2520
|
+
description,
|
|
2521
|
+
children,
|
|
2522
|
+
navItems,
|
|
2523
|
+
breadcrumb,
|
|
2524
|
+
currentHref
|
|
2525
|
+
}) {
|
|
2526
|
+
return /* @__PURE__ */ jsxs26(Fragment7, { children: [
|
|
2527
|
+
/* @__PURE__ */ jsxs26(
|
|
2528
|
+
Box18,
|
|
2291
2529
|
{
|
|
2292
2530
|
pos: "relative",
|
|
2293
2531
|
style: __spreadValues({
|
|
@@ -2298,12 +2536,12 @@ function Brand({ label, title, description, children }) {
|
|
|
2298
2536
|
borderBottom: "1px solid var(--mantine-color-slate-8)"
|
|
2299
2537
|
}, brandSurface),
|
|
2300
2538
|
children: [
|
|
2301
|
-
/* @__PURE__ */
|
|
2302
|
-
/* @__PURE__ */
|
|
2539
|
+
/* @__PURE__ */ jsx39(Box18, { "aria-hidden": true, pos: "absolute", inset: 0, style: brandDotTexture }),
|
|
2540
|
+
/* @__PURE__ */ jsx39(SdContainer, { pos: "relative", py: HERO_PY, style: { zIndex: 1, width: "100%" }, children: /* @__PURE__ */ jsx39(HeroCopy, { label, title, description }) })
|
|
2303
2541
|
]
|
|
2304
2542
|
}
|
|
2305
2543
|
),
|
|
2306
|
-
/* @__PURE__ */
|
|
2544
|
+
/* @__PURE__ */ jsx39(Content, { navItems, breadcrumb, currentHref, children })
|
|
2307
2545
|
] });
|
|
2308
2546
|
}
|
|
2309
2547
|
var PageLayout = {
|
|
@@ -2565,7 +2803,6 @@ var theme = createTheme({
|
|
|
2565
2803
|
Anchor: {
|
|
2566
2804
|
defaultProps: { c: "slate.5", fz: "sm", underline: "never" }
|
|
2567
2805
|
},
|
|
2568
|
-
// SdHeader 모바일 드로어의 2단 아코디언 타이포를 SdLink와 맞춘다.
|
|
2569
2806
|
NavLink: {
|
|
2570
2807
|
defaultProps: { c: "slate.7", fz: "sm" }
|
|
2571
2808
|
},
|
|
@@ -2593,6 +2830,7 @@ export {
|
|
|
2593
2830
|
SdBadgePrimary,
|
|
2594
2831
|
SdBadgeSuccess,
|
|
2595
2832
|
SdBadgeWarning,
|
|
2833
|
+
SdBreadcrumb,
|
|
2596
2834
|
SdButton,
|
|
2597
2835
|
SdButtonCancel,
|
|
2598
2836
|
SdButtonDelete,
|
|
@@ -2624,6 +2862,7 @@ export {
|
|
|
2624
2862
|
SdFooter,
|
|
2625
2863
|
SdHeader,
|
|
2626
2864
|
SdHeaderMega,
|
|
2865
|
+
SdHeaderPanel,
|
|
2627
2866
|
SdHeaderSimple,
|
|
2628
2867
|
SdInput,
|
|
2629
2868
|
SdInputAutocomplete,
|