@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.cjs
CHANGED
|
@@ -73,6 +73,7 @@ __export(ui_exports, {
|
|
|
73
73
|
SdBadgePrimary: () => SdBadgePrimary,
|
|
74
74
|
SdBadgeSuccess: () => SdBadgeSuccess,
|
|
75
75
|
SdBadgeWarning: () => SdBadgeWarning,
|
|
76
|
+
SdBreadcrumb: () => SdBreadcrumb,
|
|
76
77
|
SdButton: () => SdButton,
|
|
77
78
|
SdButtonCancel: () => SdButtonCancel,
|
|
78
79
|
SdButtonDelete: () => SdButtonDelete,
|
|
@@ -104,6 +105,7 @@ __export(ui_exports, {
|
|
|
104
105
|
SdFooter: () => SdFooter,
|
|
105
106
|
SdHeader: () => SdHeader,
|
|
106
107
|
SdHeaderMega: () => SdHeaderMega,
|
|
108
|
+
SdHeaderPanel: () => SdHeaderPanel,
|
|
107
109
|
SdHeaderSimple: () => SdHeaderSimple,
|
|
108
110
|
SdInput: () => SdInput,
|
|
109
111
|
SdInputAutocomplete: () => SdInputAutocomplete,
|
|
@@ -250,6 +252,7 @@ function Logo(_props) {
|
|
|
250
252
|
}
|
|
251
253
|
|
|
252
254
|
// ui/atom/Tabs.tsx
|
|
255
|
+
var import_react = require("react");
|
|
253
256
|
var import_core3 = require("@mantine/core");
|
|
254
257
|
|
|
255
258
|
// ui/atom/Container.tsx
|
|
@@ -271,8 +274,30 @@ function SdScrollableList(_a4) {
|
|
|
271
274
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_core3.Box, { style: { overflowX: "auto", width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_core3.Tabs.List, __spreadProps(__spreadValues({}, props), { children })) });
|
|
272
275
|
}
|
|
273
276
|
function createTabs(defaults, scrollable = false) {
|
|
274
|
-
function SdTabsRoot(
|
|
275
|
-
|
|
277
|
+
function SdTabsRoot(_a4) {
|
|
278
|
+
var _b = _a4, { syncHash, value, onChange } = _b, props = __objRest(_b, ["syncHash", "value", "onChange"]);
|
|
279
|
+
const [hashValue, setHashValue] = (0, import_react.useState)(null);
|
|
280
|
+
(0, import_react.useEffect)(() => {
|
|
281
|
+
if (!syncHash) return;
|
|
282
|
+
const apply = () => {
|
|
283
|
+
const id = decodeURIComponent(window.location.hash.slice(1));
|
|
284
|
+
if (id) setHashValue(id);
|
|
285
|
+
};
|
|
286
|
+
apply();
|
|
287
|
+
window.addEventListener("hashchange", apply);
|
|
288
|
+
return () => window.removeEventListener("hashchange", apply);
|
|
289
|
+
}, [syncHash]);
|
|
290
|
+
if (!syncHash) {
|
|
291
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_core3.Tabs, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { value, onChange }));
|
|
292
|
+
}
|
|
293
|
+
const handleChange = (next) => {
|
|
294
|
+
if (next) {
|
|
295
|
+
window.history.replaceState(null, "", `#${next}`);
|
|
296
|
+
setHashValue(next);
|
|
297
|
+
}
|
|
298
|
+
onChange == null ? void 0 : onChange(next);
|
|
299
|
+
};
|
|
300
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_core3.Tabs, __spreadProps(__spreadValues(__spreadValues({}, defaults), props), { value: value != null ? value : hashValue, onChange: handleChange }));
|
|
276
301
|
}
|
|
277
302
|
SdTabsRoot.List = scrollable ? SdScrollableList : import_core3.Tabs.List;
|
|
278
303
|
SdTabsRoot.Tab = import_core3.Tabs.Tab;
|
|
@@ -1009,7 +1034,7 @@ function BubbleStep({ item, index, isLast }) {
|
|
|
1009
1034
|
{
|
|
1010
1035
|
style: { display: "flex", flexDirection: "column", alignItems: "center", flexShrink: 0 },
|
|
1011
1036
|
children: [
|
|
1012
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdNumberIcon, { value: String(index + 1).padStart(2, "0") }),
|
|
1037
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SdNumberIcon, { value: String(index + 1).padStart(2, "0"), color: "primary" }),
|
|
1013
1038
|
!isLast && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1014
1039
|
import_core18.Box,
|
|
1015
1040
|
{
|
|
@@ -1403,7 +1428,7 @@ var SdCtaSubtle = SdCta.Subtle;
|
|
|
1403
1428
|
var SdCtaInline = SdCta.Inline;
|
|
1404
1429
|
|
|
1405
1430
|
// ui/molecule/Solution.tsx
|
|
1406
|
-
var
|
|
1431
|
+
var import_react2 = require("react");
|
|
1407
1432
|
var import_core24 = require("@mantine/core");
|
|
1408
1433
|
var import_link3 = __toESM(require("next/link"));
|
|
1409
1434
|
|
|
@@ -1444,7 +1469,7 @@ var SdSolutionCardGrid = SdSolutionCard.Grid;
|
|
|
1444
1469
|
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1445
1470
|
function Filtered({ items, allLabel = "\uC804\uCCB4", cols, onSelect }) {
|
|
1446
1471
|
const categories = ["all", ...Array.from(new Set(items.map((i) => i.category)))];
|
|
1447
|
-
const [active, setActive] = (0,
|
|
1472
|
+
const [active, setActive] = (0, import_react2.useState)("all");
|
|
1448
1473
|
const filtered = active === "all" ? items : items.filter((i) => i.category === active);
|
|
1449
1474
|
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_core24.Stack, { gap: "xl", children: [
|
|
1450
1475
|
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SdTabs.Pills, { value: active, onChange: (v) => setActive(v != null ? v : "all"), children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SdTabs.Pills.List, { children: categories.map((cat) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SdTabs.Pills.Tab, { value: cat, children: cat === "all" ? allLabel : cat }, cat)) }) }),
|
|
@@ -1516,7 +1541,13 @@ function LogoImage({ client, height }) {
|
|
|
1516
1541
|
{
|
|
1517
1542
|
src: client.logo,
|
|
1518
1543
|
alt: client.name,
|
|
1519
|
-
style: __spreadValues({
|
|
1544
|
+
style: __spreadValues({
|
|
1545
|
+
height,
|
|
1546
|
+
width: "auto",
|
|
1547
|
+
maxWidth: "100%",
|
|
1548
|
+
objectFit: "contain",
|
|
1549
|
+
display: "block"
|
|
1550
|
+
}, grayStyle),
|
|
1520
1551
|
onMouseEnter: (e) => Object.assign(e.currentTarget.style, colorStyle),
|
|
1521
1552
|
onMouseLeave: (e) => Object.assign(e.currentTarget.style, grayStyle)
|
|
1522
1553
|
}
|
|
@@ -1534,7 +1565,10 @@ function Grid4({
|
|
|
1534
1565
|
display: "flex",
|
|
1535
1566
|
alignItems: "center",
|
|
1536
1567
|
justifyContent: "center",
|
|
1537
|
-
padding: "12px 8px"
|
|
1568
|
+
padding: "12px 8px",
|
|
1569
|
+
minWidth: 0,
|
|
1570
|
+
// 그리드 트랙이 이미지 intrinsic width로 밀려 깨지는 것 방지
|
|
1571
|
+
overflow: "hidden"
|
|
1538
1572
|
},
|
|
1539
1573
|
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(LogoImage, { client, height: logoHeight })
|
|
1540
1574
|
},
|
|
@@ -1579,7 +1613,7 @@ var SdClientsGrid = Grid4;
|
|
|
1579
1613
|
var SdClientsMarquee = Marquee;
|
|
1580
1614
|
|
|
1581
1615
|
// ui/molecule/Map.tsx
|
|
1582
|
-
var
|
|
1616
|
+
var import_react3 = require("react");
|
|
1583
1617
|
var import_core26 = require("@mantine/core");
|
|
1584
1618
|
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
1585
1619
|
function MapFrame({ address, height }) {
|
|
@@ -1613,7 +1647,7 @@ function Single(_a4) {
|
|
|
1613
1647
|
function Tabs2({ addresses, height = 400 }) {
|
|
1614
1648
|
var _a4, _b, _c;
|
|
1615
1649
|
const mapped = addresses.filter((a) => a.embbedUrl);
|
|
1616
|
-
const [active, setActive] = (0,
|
|
1650
|
+
const [active, setActive] = (0, import_react3.useState)((_b = (_a4 = mapped[0]) == null ? void 0 : _a4.label) != null ? _b : "");
|
|
1617
1651
|
if (mapped.length === 0) return null;
|
|
1618
1652
|
if (mapped.length === 1) return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(MapFrame, { address: mapped[0], height });
|
|
1619
1653
|
const current = (_c = mapped.find((a) => a.label === active)) != null ? _c : mapped[0];
|
|
@@ -1631,11 +1665,78 @@ var SdMap = {
|
|
|
1631
1665
|
var SdMapSingle = Single;
|
|
1632
1666
|
var SdMapTabs = Tabs2;
|
|
1633
1667
|
|
|
1634
|
-
// ui/
|
|
1635
|
-
var import_carousel = require("@mantine/carousel");
|
|
1668
|
+
// ui/molecule/Breadcrumb.tsx
|
|
1636
1669
|
var import_core27 = require("@mantine/core");
|
|
1670
|
+
var import_navigation = require("next/navigation");
|
|
1637
1671
|
var import_icons_react5 = require("@tabler/icons-react");
|
|
1638
1672
|
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
1673
|
+
function normalizePath(href) {
|
|
1674
|
+
if (!href) return "";
|
|
1675
|
+
const trimmed = href.replace(/\/+$/, "");
|
|
1676
|
+
return trimmed === "" ? "/" : trimmed;
|
|
1677
|
+
}
|
|
1678
|
+
function buildTrail(navItems, currentHref) {
|
|
1679
|
+
const target = normalizePath(currentHref);
|
|
1680
|
+
const byId = new Map(navItems.map((item) => [item.id, item]));
|
|
1681
|
+
let current = navItems.find((item) => normalizePath(item.href) === target);
|
|
1682
|
+
if (!current) {
|
|
1683
|
+
current = navItems.filter((item) => item.href && target.startsWith(normalizePath(item.href) + "/")).sort((a, b) => normalizePath(b.href).length - normalizePath(a.href).length)[0];
|
|
1684
|
+
}
|
|
1685
|
+
if (!current) return [];
|
|
1686
|
+
const trail = [];
|
|
1687
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1688
|
+
let node = current;
|
|
1689
|
+
while (node && !seen.has(node.id)) {
|
|
1690
|
+
seen.add(node.id);
|
|
1691
|
+
trail.unshift(node);
|
|
1692
|
+
node = node.parentId != null ? byId.get(node.parentId) : void 0;
|
|
1693
|
+
}
|
|
1694
|
+
return trail;
|
|
1695
|
+
}
|
|
1696
|
+
function SdBreadcrumb(_a4) {
|
|
1697
|
+
var _b = _a4, {
|
|
1698
|
+
navItems,
|
|
1699
|
+
currentHref,
|
|
1700
|
+
homeHref = "/",
|
|
1701
|
+
homeLabel = "\uD648"
|
|
1702
|
+
} = _b, boxProps = __objRest(_b, [
|
|
1703
|
+
"navItems",
|
|
1704
|
+
"currentHref",
|
|
1705
|
+
"homeHref",
|
|
1706
|
+
"homeLabel"
|
|
1707
|
+
]);
|
|
1708
|
+
var _a5;
|
|
1709
|
+
const pathname = (0, import_navigation.usePathname)();
|
|
1710
|
+
const trail = buildTrail(navItems, (_a5 = currentHref != null ? currentHref : pathname) != null ? _a5 : "");
|
|
1711
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core27.Box, __spreadProps(__spreadValues({}, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
1712
|
+
import_core27.Breadcrumbs,
|
|
1713
|
+
{
|
|
1714
|
+
separator: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_icons_react5.IconChevronRight, { size: 14, stroke: 2, color: "var(--mantine-color-slate-4)" }),
|
|
1715
|
+
separatorMargin: "xs",
|
|
1716
|
+
children: [
|
|
1717
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1718
|
+
SdLink.Sub,
|
|
1719
|
+
{
|
|
1720
|
+
href: homeHref,
|
|
1721
|
+
"aria-label": homeLabel,
|
|
1722
|
+
style: { display: "inline-flex", alignItems: "center" },
|
|
1723
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_icons_react5.IconHome, { size: 16, stroke: 2 })
|
|
1724
|
+
}
|
|
1725
|
+
),
|
|
1726
|
+
trail.map((item, i) => {
|
|
1727
|
+
const isLast = i === trail.length - 1;
|
|
1728
|
+
return isLast ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdLink.Body, { children: item.label }, item.id) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SdLink.Sub, { href: item.href, children: item.label }, item.id);
|
|
1729
|
+
})
|
|
1730
|
+
]
|
|
1731
|
+
}
|
|
1732
|
+
) }));
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
// ui/organism/HeroCarousel.tsx
|
|
1736
|
+
var import_carousel = require("@mantine/carousel");
|
|
1737
|
+
var import_core28 = require("@mantine/core");
|
|
1738
|
+
var import_icons_react6 = require("@tabler/icons-react");
|
|
1739
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
1639
1740
|
var variantMap = {
|
|
1640
1741
|
primary: SdButton.Primary,
|
|
1641
1742
|
secondary: SdButton.Secondary,
|
|
@@ -1645,13 +1746,13 @@ var variantMap = {
|
|
|
1645
1746
|
function CtaButton({ cta }) {
|
|
1646
1747
|
var _a4;
|
|
1647
1748
|
const Button3 = variantMap[(_a4 = cta.variant) != null ? _a4 : "primary"];
|
|
1648
|
-
return /* @__PURE__ */ (0,
|
|
1749
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core28.Anchor, { href: cta.href, underline: "never", children: cta.icon ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button3, { size: "md", rightSection: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_icons_react6.IconArrowNarrowRight, {}), children: cta.label }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button3, { size: "md", children: cta.label }) });
|
|
1649
1750
|
}
|
|
1650
1751
|
function HeroCarousel({ slides, children }) {
|
|
1651
|
-
if (children) return /* @__PURE__ */ (0,
|
|
1752
|
+
if (children) return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_jsx_runtime30.Fragment, { children });
|
|
1652
1753
|
const filterdSlides = filterAndSort(slides);
|
|
1653
|
-
return /* @__PURE__ */ (0,
|
|
1654
|
-
|
|
1754
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_carousel.Carousel, { withIndicators: true, height: "60svh", children: filterdSlides.map((slide, i) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_carousel.Carousel.Slide, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1755
|
+
import_core28.Box,
|
|
1655
1756
|
{
|
|
1656
1757
|
style: {
|
|
1657
1758
|
height: "100%",
|
|
@@ -1662,8 +1763,8 @@ function HeroCarousel({ slides, children }) {
|
|
|
1662
1763
|
alignItems: "center",
|
|
1663
1764
|
justifyContent: "center"
|
|
1664
1765
|
},
|
|
1665
|
-
children: /* @__PURE__ */ (0,
|
|
1666
|
-
/* @__PURE__ */ (0,
|
|
1766
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core28.Stack, { align: "center", style: { textAlign: "center", maxWidth: 780 }, px: "xl", children: [
|
|
1767
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1667
1768
|
SdTextBox.Hero,
|
|
1668
1769
|
{
|
|
1669
1770
|
title: slide.title,
|
|
@@ -1672,18 +1773,27 @@ function HeroCarousel({ slides, children }) {
|
|
|
1672
1773
|
align: "center"
|
|
1673
1774
|
}
|
|
1674
1775
|
),
|
|
1675
|
-
slide.ctas && slide.ctas.length > 0 && /* @__PURE__ */ (0,
|
|
1776
|
+
slide.ctas && slide.ctas.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core28.Group, { gap: "sm", mt: "md", children: slide.ctas.map((cta, i2) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CtaButton, { cta }, cta.href)) })
|
|
1676
1777
|
] })
|
|
1677
1778
|
}
|
|
1678
1779
|
) }, i)) });
|
|
1679
1780
|
}
|
|
1680
1781
|
|
|
1681
1782
|
// ui/organism/Header.tsx
|
|
1682
|
-
var
|
|
1683
|
-
var
|
|
1783
|
+
var import_core29 = require("@mantine/core");
|
|
1784
|
+
var import_icons_react7 = require("@tabler/icons-react");
|
|
1684
1785
|
var import_hooks = require("@mantine/hooks");
|
|
1685
|
-
var
|
|
1786
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
1686
1787
|
var BAR_HEIGHT = 60;
|
|
1788
|
+
var MAX_DEPTH = 3;
|
|
1789
|
+
var NAV_LINK_STYLES = {
|
|
1790
|
+
label: {
|
|
1791
|
+
fontWeight: textStyles.Body.fw,
|
|
1792
|
+
fontSize: `var(--mantine-font-size-${textStyles.Body.fz})`,
|
|
1793
|
+
color: toCssColor(textStyles.Body.c),
|
|
1794
|
+
lineHeight: textStyles.Body.lh
|
|
1795
|
+
}
|
|
1796
|
+
};
|
|
1687
1797
|
function useNavTree(navItems) {
|
|
1688
1798
|
const visibleItems = filterAndSort(navItems);
|
|
1689
1799
|
return {
|
|
@@ -1692,27 +1802,36 @@ function useNavTree(navItems) {
|
|
|
1692
1802
|
hasAnyChildren: visibleItems.some((item) => item.parentId)
|
|
1693
1803
|
};
|
|
1694
1804
|
}
|
|
1695
|
-
function
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1805
|
+
function MobileNavNode({ item, depth, childrenOf, close }) {
|
|
1806
|
+
const kids = depth < MAX_DEPTH ? childrenOf(item.id) : [];
|
|
1807
|
+
if (kids.length === 0) {
|
|
1808
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Box, { px: "sm", py: 8, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Body, { href: item.href, onClick: close, children: item.label }) });
|
|
1809
|
+
}
|
|
1810
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1811
|
+
import_core29.NavLink,
|
|
1812
|
+
{
|
|
1813
|
+
label: item.label,
|
|
1814
|
+
styles: NAV_LINK_STYLES,
|
|
1815
|
+
component: item.href ? "a" : "button",
|
|
1816
|
+
href: item.href,
|
|
1817
|
+
childrenOffset: 28,
|
|
1818
|
+
children: kids.map((kid) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1819
|
+
MobileNavNode,
|
|
1704
1820
|
{
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
onClick: kids.length > 0 ? void 0 : close,
|
|
1710
|
-
children: kids.map((kid) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core28.NavLink, { label: kid.label, href: kid.href, onClick: close }, kid.id))
|
|
1821
|
+
item: kid,
|
|
1822
|
+
depth: depth + 1,
|
|
1823
|
+
childrenOf,
|
|
1824
|
+
close
|
|
1711
1825
|
},
|
|
1712
|
-
|
|
1713
|
-
)
|
|
1714
|
-
}
|
|
1715
|
-
|
|
1826
|
+
kid.id
|
|
1827
|
+
))
|
|
1828
|
+
}
|
|
1829
|
+
);
|
|
1830
|
+
}
|
|
1831
|
+
function MobileNav({ opened, close, topItems, childrenOf, loginFlag }) {
|
|
1832
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Drawer, { opened, onClose: close, hiddenFrom: "sm", size: "xs", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Stack, { gap: 0, children: [
|
|
1833
|
+
topItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(MobileNavNode, { item, depth: 1, childrenOf, close }, item.id)),
|
|
1834
|
+
loginFlag && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Stack, { gap: "xs", mt: "md", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1716
1835
|
] }) });
|
|
1717
1836
|
}
|
|
1718
1837
|
function MegaHeader({ navItems, loginFlag }) {
|
|
@@ -1722,9 +1841,9 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1722
1841
|
const { focused, ref: focusRef } = (0, import_hooks.useFocusWithin)();
|
|
1723
1842
|
const rootRef = (0, import_hooks.useMergedRef)(hoverRef, focusRef);
|
|
1724
1843
|
const expanded = hasAnyChildren && (hovered || focused);
|
|
1725
|
-
return /* @__PURE__ */ (0,
|
|
1726
|
-
/* @__PURE__ */ (0,
|
|
1727
|
-
|
|
1844
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
|
|
1845
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1846
|
+
import_core29.Box,
|
|
1728
1847
|
{
|
|
1729
1848
|
ref: rootRef,
|
|
1730
1849
|
pos: "relative",
|
|
@@ -1734,12 +1853,12 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1734
1853
|
borderBottom: expanded ? "1px solid var(--mantine-color-slate-2)" : void 0,
|
|
1735
1854
|
transition: "box-shadow 0.15s"
|
|
1736
1855
|
},
|
|
1737
|
-
children: /* @__PURE__ */ (0,
|
|
1738
|
-
/* @__PURE__ */ (0,
|
|
1739
|
-
/* @__PURE__ */ (0,
|
|
1856
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Group, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
|
|
1857
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Group, { h: BAR_HEIGHT, align: "center", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Logo, {}) }),
|
|
1858
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Group, { gap: "xl", align: "flex-start", wrap: "nowrap", visibleFrom: "sm", children: topItems.map((item) => {
|
|
1740
1859
|
const kids = childrenOf(item.id);
|
|
1741
|
-
return /* @__PURE__ */ (0,
|
|
1742
|
-
/* @__PURE__ */ (0,
|
|
1860
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Stack, { gap: 0, align: "center", children: [
|
|
1861
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Group, { h: BAR_HEIGHT, align: "center", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Body, { href: item.href, children: item.label }) }),
|
|
1743
1862
|
kids.length > 0 && /*
|
|
1744
1863
|
Mantine Collapse를 쓰지 않는다 — 접힐 때 display:none이 되어
|
|
1745
1864
|
하위 링크가 폭 계산에서 빠졌다가 펼칠 때 다시 들어오면서
|
|
@@ -1747,8 +1866,8 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1747
1866
|
height 0 + overflow hidden은 폭 기여를 유지하므로 간격이 고정된다.
|
|
1748
1867
|
visibility:hidden이 접힌 상태의 링크를 탭 순서에서도 빼준다.
|
|
1749
1868
|
*/
|
|
1750
|
-
/* @__PURE__ */ (0,
|
|
1751
|
-
|
|
1869
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1870
|
+
import_core29.Box,
|
|
1752
1871
|
{
|
|
1753
1872
|
"aria-hidden": !expanded,
|
|
1754
1873
|
style: {
|
|
@@ -1758,19 +1877,28 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1758
1877
|
visibility: expanded ? "visible" : "hidden",
|
|
1759
1878
|
transition: "opacity 0.15s ease"
|
|
1760
1879
|
},
|
|
1761
|
-
children: /* @__PURE__ */ (0,
|
|
1880
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Stack, { gap: "xs", pt: 4, pb: "lg", align: "center", children: kids.map((kid) => {
|
|
1881
|
+
const grandkids = childrenOf(kid.id);
|
|
1882
|
+
if (grandkids.length === 0) {
|
|
1883
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Body, { href: kid.href, children: kid.label }, kid.id);
|
|
1884
|
+
}
|
|
1885
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Stack, { gap: 2, align: "center", children: [
|
|
1886
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Body, { href: kid.href, children: kid.label }),
|
|
1887
|
+
grandkids.map((gk) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Sub, { href: gk.href, children: gk.label }, gk.id))
|
|
1888
|
+
] }, kid.id);
|
|
1889
|
+
}) })
|
|
1762
1890
|
}
|
|
1763
1891
|
)
|
|
1764
1892
|
] }, item.id);
|
|
1765
1893
|
}) }),
|
|
1766
|
-
/* @__PURE__ */ (0,
|
|
1767
|
-
/* @__PURE__ */ (0,
|
|
1768
|
-
loginFlag && /* @__PURE__ */ (0,
|
|
1894
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Group, { h: BAR_HEIGHT, align: "center", gap: "sm", wrap: "nowrap", children: [
|
|
1895
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
|
|
1896
|
+
loginFlag && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Group, { gap: "sm", visibleFrom: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1769
1897
|
] })
|
|
1770
1898
|
] }) })
|
|
1771
1899
|
}
|
|
1772
1900
|
),
|
|
1773
|
-
/* @__PURE__ */ (0,
|
|
1901
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1774
1902
|
MobileNav,
|
|
1775
1903
|
{
|
|
1776
1904
|
opened,
|
|
@@ -1782,16 +1910,19 @@ function MegaHeader({ navItems, loginFlag }) {
|
|
|
1782
1910
|
)
|
|
1783
1911
|
] });
|
|
1784
1912
|
}
|
|
1913
|
+
function renderMenuLeaf(item) {
|
|
1914
|
+
return item.href ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Menu.Item, { component: "a", href: item.href, children: item.label }, item.id) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Menu.Label, { children: item.label }, item.id);
|
|
1915
|
+
}
|
|
1785
1916
|
function SimpleHeader({ navItems, loginFlag }) {
|
|
1786
1917
|
const [opened, { toggle, close }] = (0, import_hooks.useDisclosure)();
|
|
1787
1918
|
const { topItems, childrenOf } = useNavTree(navItems);
|
|
1788
|
-
return /* @__PURE__ */ (0,
|
|
1789
|
-
/* @__PURE__ */ (0,
|
|
1790
|
-
/* @__PURE__ */ (0,
|
|
1791
|
-
/* @__PURE__ */ (0,
|
|
1919
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
|
|
1920
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Box, { bg: "var(--mantine-color-body)", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Group, { h: BAR_HEIGHT, justify: "space-between", align: "center", wrap: "nowrap", children: [
|
|
1921
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Logo, {}),
|
|
1922
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Group, { gap: "xl", align: "center", wrap: "nowrap", visibleFrom: "sm", children: topItems.map((item) => {
|
|
1792
1923
|
const kids = childrenOf(item.id);
|
|
1793
1924
|
if (kids.length === 0) {
|
|
1794
|
-
return /* @__PURE__ */ (0,
|
|
1925
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Body, { href: item.href, children: item.label }, item.id);
|
|
1795
1926
|
}
|
|
1796
1927
|
return (
|
|
1797
1928
|
/*
|
|
@@ -1799,8 +1930,8 @@ function SimpleHeader({ navItems, loginFlag }) {
|
|
|
1799
1930
|
Menu.Target은 ref를 받을 수 있는 단일 엘리먼트여야 하므로
|
|
1800
1931
|
SdLink/SdText가 아니라 Box를 타깃으로 두고 라벨을 그 안에 넣는다.
|
|
1801
1932
|
*/
|
|
1802
|
-
/* @__PURE__ */ (0,
|
|
1803
|
-
|
|
1933
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
1934
|
+
import_core29.Menu,
|
|
1804
1935
|
{
|
|
1805
1936
|
trigger: "click-hover",
|
|
1806
1937
|
openDelay: 50,
|
|
@@ -1811,25 +1942,91 @@ function SimpleHeader({ navItems, loginFlag }) {
|
|
|
1811
1942
|
radius: "md",
|
|
1812
1943
|
withinPortal: true,
|
|
1813
1944
|
children: [
|
|
1814
|
-
/* @__PURE__ */ (0,
|
|
1815
|
-
/* @__PURE__ */ (0,
|
|
1816
|
-
/* @__PURE__ */ (0,
|
|
1945
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Menu.Target, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Box, { style: { cursor: "pointer" }, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Group, { gap: 4, align: "center", wrap: "nowrap", children: [
|
|
1946
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Body, { href: item.href, children: item.label }),
|
|
1947
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_icons_react7.IconChevronDown, { size: 14, stroke: 2 })
|
|
1817
1948
|
] }) }) }),
|
|
1818
|
-
/* @__PURE__ */ (0,
|
|
1819
|
-
|
|
1820
|
-
|
|
1949
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Menu.Dropdown, { children: kids.map((kid) => {
|
|
1950
|
+
const grandkids = childrenOf(kid.id);
|
|
1951
|
+
if (grandkids.length > 0) {
|
|
1952
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Menu.Sub, { children: [
|
|
1953
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Menu.Sub.Target, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Menu.Sub.Item, { children: kid.label }) }),
|
|
1954
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Menu.Sub.Dropdown, { children: grandkids.map(renderMenuLeaf) })
|
|
1955
|
+
] }, kid.id);
|
|
1956
|
+
}
|
|
1957
|
+
return renderMenuLeaf(kid);
|
|
1958
|
+
}) })
|
|
1821
1959
|
]
|
|
1822
1960
|
},
|
|
1823
1961
|
item.id
|
|
1824
1962
|
)
|
|
1825
1963
|
);
|
|
1826
1964
|
}) }),
|
|
1827
|
-
/* @__PURE__ */ (0,
|
|
1828
|
-
/* @__PURE__ */ (0,
|
|
1829
|
-
loginFlag && /* @__PURE__ */ (0,
|
|
1965
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Group, { align: "center", gap: "sm", wrap: "nowrap", children: [
|
|
1966
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
|
|
1967
|
+
loginFlag && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Group, { gap: "sm", visibleFrom: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1968
|
+
] })
|
|
1969
|
+
] }) }) }),
|
|
1970
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1971
|
+
MobileNav,
|
|
1972
|
+
{
|
|
1973
|
+
opened,
|
|
1974
|
+
close,
|
|
1975
|
+
topItems,
|
|
1976
|
+
childrenOf,
|
|
1977
|
+
loginFlag
|
|
1978
|
+
}
|
|
1979
|
+
)
|
|
1980
|
+
] });
|
|
1981
|
+
}
|
|
1982
|
+
function PanelHeader({ navItems, loginFlag }) {
|
|
1983
|
+
const [opened, { toggle, close }] = (0, import_hooks.useDisclosure)();
|
|
1984
|
+
const { topItems, childrenOf } = useNavTree(navItems);
|
|
1985
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
|
|
1986
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Box, { bg: "var(--mantine-color-body)", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Group, { h: BAR_HEIGHT, justify: "space-between", align: "center", wrap: "nowrap", children: [
|
|
1987
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Logo, {}),
|
|
1988
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Group, { gap: "xl", align: "center", wrap: "nowrap", visibleFrom: "sm", children: topItems.map((item) => {
|
|
1989
|
+
const kids = childrenOf(item.id);
|
|
1990
|
+
if (kids.length === 0) {
|
|
1991
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Body, { href: item.href, children: item.label }, item.id);
|
|
1992
|
+
}
|
|
1993
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
1994
|
+
import_core29.Menu,
|
|
1995
|
+
{
|
|
1996
|
+
trigger: "click-hover",
|
|
1997
|
+
openDelay: 50,
|
|
1998
|
+
closeDelay: 120,
|
|
1999
|
+
position: "bottom",
|
|
2000
|
+
offset: 12,
|
|
2001
|
+
shadow: "md",
|
|
2002
|
+
radius: "md",
|
|
2003
|
+
withinPortal: true,
|
|
2004
|
+
children: [
|
|
2005
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Menu.Target, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Box, { style: { cursor: "pointer" }, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Group, { gap: 4, align: "center", wrap: "nowrap", children: [
|
|
2006
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Body, { href: item.href, children: item.label }),
|
|
2007
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_icons_react7.IconChevronDown, { size: 14, stroke: 2 })
|
|
2008
|
+
] }) }) }),
|
|
2009
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Menu.Dropdown, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Stack, { gap: "xs", p: "xs", children: kids.map((kid) => {
|
|
2010
|
+
const grandkids = childrenOf(kid.id);
|
|
2011
|
+
if (grandkids.length === 0) {
|
|
2012
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Body, { href: kid.href, children: kid.label }, kid.id);
|
|
2013
|
+
}
|
|
2014
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Stack, { gap: 2, children: [
|
|
2015
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Body, { href: kid.href, children: kid.label }),
|
|
2016
|
+
grandkids.map((gk) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdLink.Sub, { href: gk.href, pl: "sm", children: gk.label }, gk.id))
|
|
2017
|
+
] }, kid.id);
|
|
2018
|
+
}) }) })
|
|
2019
|
+
]
|
|
2020
|
+
},
|
|
2021
|
+
item.id
|
|
2022
|
+
);
|
|
2023
|
+
}) }),
|
|
2024
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Group, { align: "center", gap: "sm", wrap: "nowrap", children: [
|
|
2025
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Burger, { hiddenFrom: "sm", opened, onClick: toggle }),
|
|
2026
|
+
loginFlag && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Group, { gap: "sm", visibleFrom: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SdButton.Primary, { size: "xs", children: "\uB85C\uADF8\uC778" }) })
|
|
1830
2027
|
] })
|
|
1831
2028
|
] }) }) }),
|
|
1832
|
-
/* @__PURE__ */ (0,
|
|
2029
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1833
2030
|
MobileNav,
|
|
1834
2031
|
{
|
|
1835
2032
|
opened,
|
|
@@ -1841,41 +2038,46 @@ function SimpleHeader({ navItems, loginFlag }) {
|
|
|
1841
2038
|
)
|
|
1842
2039
|
] });
|
|
1843
2040
|
}
|
|
1844
|
-
var SdHeader = Object.assign(MegaHeader, {
|
|
2041
|
+
var SdHeader = Object.assign(MegaHeader, {
|
|
2042
|
+
Mega: MegaHeader,
|
|
2043
|
+
Simple: SimpleHeader,
|
|
2044
|
+
Panel: PanelHeader
|
|
2045
|
+
});
|
|
1845
2046
|
var SdHeaderMega = MegaHeader;
|
|
1846
2047
|
var SdHeaderSimple = SimpleHeader;
|
|
2048
|
+
var SdHeaderPanel = PanelHeader;
|
|
1847
2049
|
|
|
1848
2050
|
// ui/organism/Footer.tsx
|
|
1849
|
-
var
|
|
1850
|
-
var
|
|
1851
|
-
var
|
|
2051
|
+
var import_core30 = require("@mantine/core");
|
|
2052
|
+
var import_icons_react8 = require("@tabler/icons-react");
|
|
2053
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
1852
2054
|
function FooterNavColumns({ items }) {
|
|
1853
2055
|
const topLevel = items.filter((item) => !item.parentId);
|
|
1854
2056
|
const getChildren = (parentId) => items.filter((item) => item.parentId === parentId);
|
|
1855
2057
|
const CHILD_THRESH = 4;
|
|
1856
|
-
return /* @__PURE__ */ (0,
|
|
1857
|
-
/* @__PURE__ */ (0,
|
|
2058
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_jsx_runtime32.Fragment, { children: topLevel.map((group) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Grid.Col, { span: { base: 6, sm: 4, md: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Stack, { gap: "xs", children: [
|
|
2059
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdLink.Sub, { href: group.href, children: group.label }, group.id),
|
|
1858
2060
|
getChildren(group.id).map((link, id) => {
|
|
1859
2061
|
if (id >= CHILD_THRESH) return;
|
|
1860
|
-
return /* @__PURE__ */ (0,
|
|
2062
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdLink.Hint, { href: link.href, children: link.label }, link.id);
|
|
1861
2063
|
})
|
|
1862
2064
|
] }) }, group.id)) });
|
|
1863
2065
|
}
|
|
1864
2066
|
var SOCIAL_ICONS = {
|
|
1865
|
-
x:
|
|
1866
|
-
youtube:
|
|
1867
|
-
instagram:
|
|
1868
|
-
facebook:
|
|
1869
|
-
linkedin:
|
|
1870
|
-
github:
|
|
1871
|
-
blog:
|
|
2067
|
+
x: import_icons_react8.IconBrandX,
|
|
2068
|
+
youtube: import_icons_react8.IconBrandYoutube,
|
|
2069
|
+
instagram: import_icons_react8.IconBrandInstagram,
|
|
2070
|
+
facebook: import_icons_react8.IconBrandFacebook,
|
|
2071
|
+
linkedin: import_icons_react8.IconBrandLinkedin,
|
|
2072
|
+
github: import_icons_react8.IconBrandGithub,
|
|
2073
|
+
blog: import_icons_react8.IconWorld
|
|
1872
2074
|
};
|
|
1873
2075
|
function FooterSocials({ items }) {
|
|
1874
|
-
return /* @__PURE__ */ (0,
|
|
2076
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Group, { gap: 0, wrap: "nowrap", children: items.map((item) => {
|
|
1875
2077
|
var _a4, _b;
|
|
1876
|
-
const Icon = (_a4 = SOCIAL_ICONS[item.platform]) != null ? _a4 :
|
|
1877
|
-
return /* @__PURE__ */ (0,
|
|
1878
|
-
|
|
2078
|
+
const Icon = (_a4 = SOCIAL_ICONS[item.platform]) != null ? _a4 : import_icons_react8.IconWorld;
|
|
2079
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
2080
|
+
import_core30.ActionIcon,
|
|
1879
2081
|
{
|
|
1880
2082
|
component: "a",
|
|
1881
2083
|
href: item.url,
|
|
@@ -1885,62 +2087,62 @@ function FooterSocials({ items }) {
|
|
|
1885
2087
|
color: "gray",
|
|
1886
2088
|
variant: "subtle",
|
|
1887
2089
|
"aria-label": (_b = item.label) != null ? _b : item.platform,
|
|
1888
|
-
children: /* @__PURE__ */ (0,
|
|
2090
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Icon, { size: 18, stroke: 1.5 })
|
|
1889
2091
|
},
|
|
1890
2092
|
item.url
|
|
1891
2093
|
);
|
|
1892
2094
|
}) });
|
|
1893
2095
|
}
|
|
1894
2096
|
function InfoCell({ label, children }) {
|
|
1895
|
-
return /* @__PURE__ */ (0,
|
|
1896
|
-
/* @__PURE__ */ (0,
|
|
1897
|
-
typeof children === "string" ? /* @__PURE__ */ (0,
|
|
2097
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Group, { gap: 6, wrap: "nowrap", align: "baseline", children: [
|
|
2098
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdText.Sub, { c: "slate.4", style: { whiteSpace: "nowrap" }, children: label }),
|
|
2099
|
+
typeof children === "string" ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdText.Sub, { children }) : children
|
|
1898
2100
|
] });
|
|
1899
2101
|
}
|
|
1900
2102
|
function FooterCompanyInfo({ company }) {
|
|
1901
2103
|
const sortedAddresses = [...company.addresses].sort((a, b) => a.order - b.order);
|
|
1902
|
-
return /* @__PURE__ */ (0,
|
|
1903
|
-
/* @__PURE__ */ (0,
|
|
1904
|
-
/* @__PURE__ */ (0,
|
|
1905
|
-
sortedAddresses.map((addr) => /* @__PURE__ */ (0,
|
|
1906
|
-
/* @__PURE__ */ (0,
|
|
1907
|
-
company.fax && /* @__PURE__ */ (0,
|
|
1908
|
-
/* @__PURE__ */ (0,
|
|
2104
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.SimpleGrid, { cols: { base: 2, sm: 2, md: 1 }, spacing: "md", verticalSpacing: 0, children: [
|
|
2105
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(InfoCell, { label: "\uC0C1\uD638", children: company.name }),
|
|
2106
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(InfoCell, { label: "\uC0AC\uC5C5\uC790\uB4F1\uB85D\uBC88\uD638", children: company.registrationNumber }),
|
|
2107
|
+
sortedAddresses.map((addr) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(InfoCell, { label: addr.label, children: addr.address }, addr.label)),
|
|
2108
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(InfoCell, { label: "Tel", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdLink.Sub, { href: `tel:${company.tel}`, children: company.tel }) }),
|
|
2109
|
+
company.fax && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(InfoCell, { label: "Fax", children: company.fax }),
|
|
2110
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(InfoCell, { label: "Email", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdLink.Sub, { href: `mailto:${company.email}`, children: company.email }) })
|
|
1909
2111
|
] });
|
|
1910
2112
|
}
|
|
1911
2113
|
function SdFooter({ company, navItems, policyLinks, description }) {
|
|
1912
2114
|
const visibleNav = filterAndSort(navItems);
|
|
1913
2115
|
const visiblePolicy = filterAndSort(policyLinks);
|
|
1914
|
-
return /* @__PURE__ */ (0,
|
|
1915
|
-
/* @__PURE__ */ (0,
|
|
1916
|
-
description && /* @__PURE__ */ (0,
|
|
1917
|
-
/* @__PURE__ */ (0,
|
|
1918
|
-
/* @__PURE__ */ (0,
|
|
1919
|
-
visibleNav.length > 0 && /* @__PURE__ */ (0,
|
|
2116
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Box, { component: "footer", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdContainer, { py: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Stack, { children: [
|
|
2117
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Logo, { size: "sm" }),
|
|
2118
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SdText.Sub, { children: description }),
|
|
2119
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Flex, { direction: { base: "column", md: "row" }, gap: 48, align: "flex-start", children: [
|
|
2120
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Box, { flex: { base: "0 0 auto", md: "1 1 0" }, w: { base: "100%", md: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(FooterCompanyInfo, { company }) }),
|
|
2121
|
+
visibleNav.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Box, { flex: { base: "0 0 auto", md: "2 1 0" }, w: { base: "100%", md: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Grid, { style: { "--grid-gutter": "24px" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(FooterNavColumns, { items: visibleNav }) }) })
|
|
1920
2122
|
] }),
|
|
1921
|
-
/* @__PURE__ */ (0,
|
|
1922
|
-
/* @__PURE__ */ (0,
|
|
1923
|
-
/* @__PURE__ */ (0,
|
|
2123
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Divider, {}),
|
|
2124
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Group, { justify: "space-between", wrap: "wrap", gap: "xs", children: [
|
|
2125
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(SdText.Sub, { children: [
|
|
1924
2126
|
"\xA9 ",
|
|
1925
2127
|
company.copyrightYear,
|
|
1926
2128
|
" ",
|
|
1927
2129
|
t(company.name),
|
|
1928
2130
|
". All rights reserved."
|
|
1929
2131
|
] }),
|
|
1930
|
-
/* @__PURE__ */ (0,
|
|
1931
|
-
visiblePolicy.length > 0 && /* @__PURE__ */ (0,
|
|
2132
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Group, { gap: "lg", wrap: "wrap", children: [
|
|
2133
|
+
visiblePolicy.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Group, { gap: "lg", children: visiblePolicy.map((item) => {
|
|
1932
2134
|
const Link4 = item.highlight ? SdLink.Body : SdLink.Sub;
|
|
1933
|
-
return /* @__PURE__ */ (0,
|
|
2135
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Link4, { href: item.href, children: item.label }, item.id);
|
|
1934
2136
|
}) }),
|
|
1935
|
-
company.socials && company.socials.length > 0 && /* @__PURE__ */ (0,
|
|
2137
|
+
company.socials && company.socials.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(FooterSocials, { items: company.socials })
|
|
1936
2138
|
] })
|
|
1937
2139
|
] })
|
|
1938
2140
|
] }) }) });
|
|
1939
2141
|
}
|
|
1940
2142
|
|
|
1941
2143
|
// ui/organism/FeatureSection.tsx
|
|
1942
|
-
var
|
|
1943
|
-
var
|
|
2144
|
+
var import_core31 = require("@mantine/core");
|
|
2145
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
1944
2146
|
function SdFeatureSection(_a4) {
|
|
1945
2147
|
var _b = _a4, {
|
|
1946
2148
|
label,
|
|
@@ -1957,8 +2159,8 @@ function SdFeatureSection(_a4) {
|
|
|
1957
2159
|
"cols",
|
|
1958
2160
|
"py"
|
|
1959
2161
|
]);
|
|
1960
|
-
return /* @__PURE__ */ (0,
|
|
1961
|
-
/* @__PURE__ */ (0,
|
|
2162
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core31.Stack, { gap: "xl", children: [
|
|
2163
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
1962
2164
|
SdTextBox.Section,
|
|
1963
2165
|
{
|
|
1964
2166
|
label,
|
|
@@ -1969,13 +2171,13 @@ function SdFeatureSection(_a4) {
|
|
|
1969
2171
|
align: "center"
|
|
1970
2172
|
}
|
|
1971
2173
|
),
|
|
1972
|
-
/* @__PURE__ */ (0,
|
|
2174
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(SdFeatures, { items, cols })
|
|
1973
2175
|
] }) }));
|
|
1974
2176
|
}
|
|
1975
2177
|
|
|
1976
2178
|
// ui/organism/TimelineSection.tsx
|
|
1977
|
-
var
|
|
1978
|
-
var
|
|
2179
|
+
var import_core32 = require("@mantine/core");
|
|
2180
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
1979
2181
|
function SdTimelineSection(_a4) {
|
|
1980
2182
|
var _b = _a4, {
|
|
1981
2183
|
label,
|
|
@@ -1990,15 +2192,15 @@ function SdTimelineSection(_a4) {
|
|
|
1990
2192
|
"items",
|
|
1991
2193
|
"py"
|
|
1992
2194
|
]);
|
|
1993
|
-
return /* @__PURE__ */ (0,
|
|
1994
|
-
/* @__PURE__ */ (0,
|
|
1995
|
-
/* @__PURE__ */ (0,
|
|
2195
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core32.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core32.Stack, __spreadProps(__spreadValues({ py, gap: "md" }, boxProps), { children: [
|
|
2196
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdTextBox.Section, { label, title, description }),
|
|
2197
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core32.Center, { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SdTimeline, { items }) })
|
|
1996
2198
|
] })) });
|
|
1997
2199
|
}
|
|
1998
2200
|
|
|
1999
2201
|
// ui/organism/StepsSection.tsx
|
|
2000
|
-
var
|
|
2001
|
-
var
|
|
2202
|
+
var import_core33 = require("@mantine/core");
|
|
2203
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
2002
2204
|
function SdStepsSection(_a4) {
|
|
2003
2205
|
var _b = _a4, {
|
|
2004
2206
|
label,
|
|
@@ -2013,18 +2215,18 @@ function SdStepsSection(_a4) {
|
|
|
2013
2215
|
"items",
|
|
2014
2216
|
"py"
|
|
2015
2217
|
]);
|
|
2016
|
-
return /* @__PURE__ */ (0,
|
|
2017
|
-
(label || title || description) && /* @__PURE__ */ (0,
|
|
2018
|
-
/* @__PURE__ */ (0,
|
|
2218
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdContainer, __spreadProps(__spreadValues({ py }, boxProps), { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core33.Stack, { gap: "xl", children: [
|
|
2219
|
+
(label || title || description) && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdTextBox.Section, { label, title, description }),
|
|
2220
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SdSteps.Bubble, { items })
|
|
2019
2221
|
] }) }));
|
|
2020
2222
|
}
|
|
2021
2223
|
|
|
2022
2224
|
// ui/organism/ErrorView.tsx
|
|
2023
|
-
var
|
|
2024
|
-
var
|
|
2225
|
+
var import_core34 = require("@mantine/core");
|
|
2226
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
2025
2227
|
function StatusCode({ code }) {
|
|
2026
|
-
return /* @__PURE__ */ (0,
|
|
2027
|
-
|
|
2228
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2229
|
+
import_core34.Text,
|
|
2028
2230
|
{
|
|
2029
2231
|
fz: 160,
|
|
2030
2232
|
fw: 900,
|
|
@@ -2037,15 +2239,15 @@ function StatusCode({ code }) {
|
|
|
2037
2239
|
);
|
|
2038
2240
|
}
|
|
2039
2241
|
function Page({ error, onReset, onHome }) {
|
|
2040
|
-
return /* @__PURE__ */ (0,
|
|
2041
|
-
/* @__PURE__ */ (0,
|
|
2042
|
-
/* @__PURE__ */ (0,
|
|
2043
|
-
/* @__PURE__ */ (0,
|
|
2044
|
-
/* @__PURE__ */ (0,
|
|
2242
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Center, { mih: "60vh", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Stack, { align: "center", gap: "lg", ta: "center", children: [
|
|
2243
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(StatusCode, { code: "500" }),
|
|
2244
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Stack, { gap: "sm", align: "center", children: [
|
|
2245
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdTitle.Section, { children: "\uC11C\uBC84\uC5D0\uC11C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4" }),
|
|
2246
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdText.Body, { maw: 480, children: "\uC608\uAE30\uCE58 \uC54A\uC740 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." })
|
|
2045
2247
|
] }),
|
|
2046
|
-
/* @__PURE__ */ (0,
|
|
2047
|
-
/* @__PURE__ */ (0,
|
|
2048
|
-
onHome && /* @__PURE__ */ (0,
|
|
2248
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Group, { gap: "sm", justify: "center", children: [
|
|
2249
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdButton.Primary, { onClick: onReset, children: "\uB2E4\uC2DC \uC2DC\uB3C4" }),
|
|
2250
|
+
onHome && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdButton.Ghost, { onClick: onHome, children: "\uD648\uC73C\uB85C" })
|
|
2049
2251
|
] })
|
|
2050
2252
|
] }) }) });
|
|
2051
2253
|
}
|
|
@@ -2057,15 +2259,15 @@ function NotFound({
|
|
|
2057
2259
|
},
|
|
2058
2260
|
onBack = () => window.history.back()
|
|
2059
2261
|
}) {
|
|
2060
|
-
return /* @__PURE__ */ (0,
|
|
2061
|
-
/* @__PURE__ */ (0,
|
|
2062
|
-
/* @__PURE__ */ (0,
|
|
2063
|
-
/* @__PURE__ */ (0,
|
|
2064
|
-
/* @__PURE__ */ (0,
|
|
2262
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Center, { mih: "60vh", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Stack, { align: "center", gap: "lg", ta: "center", children: [
|
|
2263
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(StatusCode, { code: "404" }),
|
|
2264
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Stack, { gap: "sm", align: "center", children: [
|
|
2265
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdTitle.Section, { children: title }),
|
|
2266
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdText.Body, { maw: 480, children: description })
|
|
2065
2267
|
] }),
|
|
2066
|
-
/* @__PURE__ */ (0,
|
|
2067
|
-
onHome && /* @__PURE__ */ (0,
|
|
2068
|
-
onBack && /* @__PURE__ */ (0,
|
|
2268
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Group, { gap: "sm", justify: "center", children: [
|
|
2269
|
+
onHome && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdButton.Primary, { onClick: onHome, children: "\uD648\uC73C\uB85C" }),
|
|
2270
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(SdButton.Ghost, { onClick: onBack, children: "\uB4A4\uB85C \uAC00\uAE30" })
|
|
2069
2271
|
] })
|
|
2070
2272
|
] }) }) });
|
|
2071
2273
|
}
|
|
@@ -2079,8 +2281,8 @@ var SdErrorViewPage = SdErrorView.Page;
|
|
|
2079
2281
|
var SdErrorViewNotFound = SdErrorView.NotFound;
|
|
2080
2282
|
|
|
2081
2283
|
// ui/organism/LoginView.tsx
|
|
2082
|
-
var
|
|
2083
|
-
var
|
|
2284
|
+
var import_core35 = require("@mantine/core");
|
|
2285
|
+
var import_icons_react9 = require("@tabler/icons-react");
|
|
2084
2286
|
|
|
2085
2287
|
// ui/surface.ts
|
|
2086
2288
|
var brandSurface = {
|
|
@@ -2098,13 +2300,13 @@ var brandDotTexture = {
|
|
|
2098
2300
|
};
|
|
2099
2301
|
|
|
2100
2302
|
// ui/organism/LoginView.tsx
|
|
2101
|
-
var
|
|
2303
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
2102
2304
|
var SOCIAL_META = {
|
|
2103
|
-
google: { Icon:
|
|
2104
|
-
kakao: { Icon:
|
|
2105
|
-
naver: { Icon:
|
|
2106
|
-
apple: { Icon:
|
|
2107
|
-
github: { Icon:
|
|
2305
|
+
google: { Icon: import_icons_react9.IconBrandGoogle, label: "\uAD6C\uAE00\uB85C \uB85C\uADF8\uC778" },
|
|
2306
|
+
kakao: { Icon: import_icons_react9.IconBrandKakaoTalk, label: "\uCE74\uCE74\uC624\uB85C \uB85C\uADF8\uC778" },
|
|
2307
|
+
naver: { Icon: import_icons_react9.IconCircleLetterN, label: "\uB124\uC774\uBC84\uB85C \uB85C\uADF8\uC778" },
|
|
2308
|
+
apple: { Icon: import_icons_react9.IconBrandApple, label: "\uC560\uD50C\uB85C \uB85C\uADF8\uC778" },
|
|
2309
|
+
github: { Icon: import_icons_react9.IconBrandGithub, label: "\uAE43\uD5C8\uBE0C\uB85C \uB85C\uADF8\uC778" }
|
|
2108
2310
|
};
|
|
2109
2311
|
function LoginForm({
|
|
2110
2312
|
onSubmit,
|
|
@@ -2127,9 +2329,9 @@ function LoginForm({
|
|
|
2127
2329
|
remember: data.get("remember") === "on"
|
|
2128
2330
|
});
|
|
2129
2331
|
}
|
|
2130
|
-
return /* @__PURE__ */ (0,
|
|
2131
|
-
error && /* @__PURE__ */ (0,
|
|
2132
|
-
/* @__PURE__ */ (0,
|
|
2332
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("form", { onSubmit: handleSubmit, noValidate: true, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Stack, { gap: "md", children: [
|
|
2333
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SdText.Error, { children: error }),
|
|
2334
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2133
2335
|
SdInput.Email,
|
|
2134
2336
|
{
|
|
2135
2337
|
name: "email",
|
|
@@ -2139,7 +2341,7 @@ function LoginForm({
|
|
|
2139
2341
|
required: true
|
|
2140
2342
|
}
|
|
2141
2343
|
),
|
|
2142
|
-
/* @__PURE__ */ (0,
|
|
2344
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2143
2345
|
SdInput.Password,
|
|
2144
2346
|
{
|
|
2145
2347
|
name: "password",
|
|
@@ -2149,50 +2351,50 @@ function LoginForm({
|
|
|
2149
2351
|
required: true
|
|
2150
2352
|
}
|
|
2151
2353
|
),
|
|
2152
|
-
(withRemember || findPasswordHref) && /* @__PURE__ */ (0,
|
|
2153
|
-
withRemember ? /* @__PURE__ */ (0,
|
|
2154
|
-
findPasswordHref && /* @__PURE__ */ (0,
|
|
2354
|
+
(withRemember || findPasswordHref) && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Group, { justify: "space-between", align: "center", wrap: "nowrap", children: [
|
|
2355
|
+
withRemember ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Checkbox, { name: "remember", size: "xs", label: "\uC790\uB3D9 \uB85C\uADF8\uC778" }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", {}),
|
|
2356
|
+
findPasswordHref && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SdLink.Sub, { href: findPasswordHref, children: "\uBE44\uBC00\uBC88\uD638\uB97C \uC78A\uC73C\uC168\uB098\uC694?" })
|
|
2155
2357
|
] }),
|
|
2156
|
-
/* @__PURE__ */ (0,
|
|
2358
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2157
2359
|
SdButton.Primary,
|
|
2158
2360
|
{
|
|
2159
2361
|
type: "submit",
|
|
2160
2362
|
fullWidth: true,
|
|
2161
2363
|
loading,
|
|
2162
|
-
leftSection: /* @__PURE__ */ (0,
|
|
2364
|
+
leftSection: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_icons_react9.IconLogin2, { size: 16 }),
|
|
2163
2365
|
children: submitLabel
|
|
2164
2366
|
}
|
|
2165
2367
|
),
|
|
2166
|
-
socials && socials.length > 0 && /* @__PURE__ */ (0,
|
|
2167
|
-
/* @__PURE__ */ (0,
|
|
2168
|
-
/* @__PURE__ */ (0,
|
|
2368
|
+
socials && socials.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
|
|
2369
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Divider, { label: "\uB610\uB294", labelPosition: "center" }),
|
|
2370
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Stack, { gap: "xs", children: socials.map((social) => {
|
|
2169
2371
|
var _a4;
|
|
2170
2372
|
const { Icon, label } = SOCIAL_META[social.provider];
|
|
2171
|
-
return /* @__PURE__ */ (0,
|
|
2373
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2172
2374
|
SdButton.Outline,
|
|
2173
2375
|
{
|
|
2174
2376
|
color: "slate",
|
|
2175
2377
|
fullWidth: true,
|
|
2176
2378
|
type: "button",
|
|
2177
2379
|
onClick: social.onClick,
|
|
2178
|
-
leftSection: /* @__PURE__ */ (0,
|
|
2380
|
+
leftSection: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon, { size: 16 }),
|
|
2179
2381
|
children: (_a4 = social.label) != null ? _a4 : label
|
|
2180
2382
|
},
|
|
2181
2383
|
social.provider
|
|
2182
2384
|
);
|
|
2183
2385
|
}) })
|
|
2184
2386
|
] }),
|
|
2185
|
-
signUpHref && /* @__PURE__ */ (0,
|
|
2186
|
-
/* @__PURE__ */ (0,
|
|
2187
|
-
/* @__PURE__ */ (0,
|
|
2387
|
+
signUpHref && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Group, { gap: 6, justify: "center", children: [
|
|
2388
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SdText.Sub, { children: "\uC544\uC9C1 \uACC4\uC815\uC774 \uC5C6\uC73C\uC2E0\uAC00\uC694?" }),
|
|
2389
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SdLink.Sub, { href: signUpHref, c: "primary.6", children: "\uD68C\uC6D0\uAC00\uC785" })
|
|
2188
2390
|
] }),
|
|
2189
2391
|
children
|
|
2190
2392
|
] }) });
|
|
2191
2393
|
}
|
|
2192
2394
|
function FormHeader({ title, description }) {
|
|
2193
|
-
return /* @__PURE__ */ (0,
|
|
2194
|
-
/* @__PURE__ */ (0,
|
|
2195
|
-
/* @__PURE__ */ (0,
|
|
2395
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Stack, { gap: "lg", children: [
|
|
2396
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Logo, { size: "sm" }),
|
|
2397
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SdTextBox.Card, { title, description: description != null ? description : "" })
|
|
2196
2398
|
] });
|
|
2197
2399
|
}
|
|
2198
2400
|
function Card7(_a4) {
|
|
@@ -2205,9 +2407,9 @@ function Card7(_a4) {
|
|
|
2205
2407
|
"description",
|
|
2206
2408
|
"mih"
|
|
2207
2409
|
]);
|
|
2208
|
-
return /* @__PURE__ */ (0,
|
|
2209
|
-
/* @__PURE__ */ (0,
|
|
2210
|
-
/* @__PURE__ */ (0,
|
|
2410
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Center, { mih, bg: "slate.0", p: "md", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Paper, { w: "100%", maw: 420, p: { base: "lg", sm: "xl" }, radius: "lg", withBorder: true, shadow: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Stack, { gap: "xl", children: [
|
|
2411
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(FormHeader, { title, description }),
|
|
2412
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(LoginForm, __spreadValues({}, formProps))
|
|
2211
2413
|
] }) }) });
|
|
2212
2414
|
}
|
|
2213
2415
|
function Split(_a4) {
|
|
@@ -2224,16 +2426,16 @@ function Split(_a4) {
|
|
|
2224
2426
|
"brandDescription",
|
|
2225
2427
|
"mih"
|
|
2226
2428
|
]);
|
|
2227
|
-
return /* @__PURE__ */ (0,
|
|
2228
|
-
/* @__PURE__ */ (0,
|
|
2229
|
-
|
|
2429
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.SimpleGrid, { cols: { base: 1, md: 2 }, spacing: 0, mih, children: [
|
|
2430
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
2431
|
+
import_core35.Box,
|
|
2230
2432
|
{
|
|
2231
2433
|
visibleFrom: "md",
|
|
2232
2434
|
pos: "relative",
|
|
2233
2435
|
style: __spreadValues({ overflow: "hidden", display: "flex", alignItems: "flex-end" }, brandSurface),
|
|
2234
2436
|
children: [
|
|
2235
|
-
/* @__PURE__ */ (0,
|
|
2236
|
-
/* @__PURE__ */ (0,
|
|
2437
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Box, { "aria-hidden": true, pos: "absolute", inset: 0, style: brandDotTexture }),
|
|
2438
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Box, { pos: "relative", p: 48, style: { zIndex: 1, width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2237
2439
|
SdTextBox.Hero,
|
|
2238
2440
|
{
|
|
2239
2441
|
title: brandTitle,
|
|
@@ -2247,9 +2449,9 @@ function Split(_a4) {
|
|
|
2247
2449
|
]
|
|
2248
2450
|
}
|
|
2249
2451
|
),
|
|
2250
|
-
/* @__PURE__ */ (0,
|
|
2251
|
-
/* @__PURE__ */ (0,
|
|
2252
|
-
/* @__PURE__ */ (0,
|
|
2452
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Center, { p: { base: "md", sm: "xl" }, bg: "white", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Stack, { gap: "xl", w: "100%", maw: 400, children: [
|
|
2453
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(FormHeader, { title, description }),
|
|
2454
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(LoginForm, __spreadValues({}, formProps))
|
|
2253
2455
|
] }) })
|
|
2254
2456
|
] });
|
|
2255
2457
|
}
|
|
@@ -2263,11 +2465,11 @@ var SdLoginViewCard = SdLoginView.Card;
|
|
|
2263
2465
|
var SdLoginViewSplit = SdLoginView.Split;
|
|
2264
2466
|
|
|
2265
2467
|
// ui/organism/Result.tsx
|
|
2266
|
-
var
|
|
2267
|
-
var
|
|
2268
|
-
var
|
|
2468
|
+
var import_core36 = require("@mantine/core");
|
|
2469
|
+
var import_icons_react10 = require("@tabler/icons-react");
|
|
2470
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
2269
2471
|
function ResultIcon({ color, Icon }) {
|
|
2270
|
-
return /* @__PURE__ */ (0,
|
|
2472
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Center, { w: 88, h: 88, bg: `${color}.0`, style: { borderRadius: "50%" }, "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Icon, { size: 48, stroke: 1.5, color: `var(--mantine-color-${color}-6)` }) });
|
|
2271
2473
|
}
|
|
2272
2474
|
function createResult(defaults) {
|
|
2273
2475
|
return function SdResult2({
|
|
@@ -2278,16 +2480,16 @@ function createResult(defaults) {
|
|
|
2278
2480
|
children,
|
|
2279
2481
|
mih = "60vh"
|
|
2280
2482
|
}) {
|
|
2281
|
-
return /* @__PURE__ */ (0,
|
|
2282
|
-
/* @__PURE__ */ (0,
|
|
2283
|
-
/* @__PURE__ */ (0,
|
|
2284
|
-
/* @__PURE__ */ (0,
|
|
2285
|
-
description && /* @__PURE__ */ (0,
|
|
2483
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Center, { mih, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SdContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_core36.Stack, { align: "center", gap: "lg", ta: "center", children: [
|
|
2484
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ResultIcon, { color: defaults.color, Icon: defaults.Icon }),
|
|
2485
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_core36.Stack, { gap: "sm", align: "center", children: [
|
|
2486
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SdTitle.Section, { children: title }),
|
|
2487
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SdText.Body, { maw: 480, children: description })
|
|
2286
2488
|
] }),
|
|
2287
|
-
children && /* @__PURE__ */ (0,
|
|
2288
|
-
(primaryAction || secondaryAction) && /* @__PURE__ */ (0,
|
|
2289
|
-
primaryAction && /* @__PURE__ */ (0,
|
|
2290
|
-
secondaryAction && /* @__PURE__ */ (0,
|
|
2489
|
+
children && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Box, { children }),
|
|
2490
|
+
(primaryAction || secondaryAction) && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_core36.Group, { gap: "sm", justify: "center", children: [
|
|
2491
|
+
primaryAction && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SdButton.Primary, { onClick: primaryAction.onClick, children: primaryAction.label }),
|
|
2492
|
+
secondaryAction && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SdButton.Ghost, { onClick: secondaryAction.onClick, children: secondaryAction.label })
|
|
2291
2493
|
] })
|
|
2292
2494
|
] }) }) });
|
|
2293
2495
|
};
|
|
@@ -2296,13 +2498,13 @@ var SdResult = {
|
|
|
2296
2498
|
/** 성공 — 가입 완료·결제 완료 등 */
|
|
2297
2499
|
Success: createResult({
|
|
2298
2500
|
color: "green",
|
|
2299
|
-
Icon:
|
|
2501
|
+
Icon: import_icons_react10.IconCircleCheck,
|
|
2300
2502
|
title: "\uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4"
|
|
2301
2503
|
}),
|
|
2302
2504
|
/** 실패 — 결제 실패·처리 중 오류 등. 서버 오류·404는 SdErrorView를 쓴다. */
|
|
2303
2505
|
Error: createResult({
|
|
2304
2506
|
color: "red",
|
|
2305
|
-
Icon:
|
|
2507
|
+
Icon: import_icons_react10.IconCircleX,
|
|
2306
2508
|
title: "\uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4"
|
|
2307
2509
|
})
|
|
2308
2510
|
};
|
|
@@ -2310,11 +2512,12 @@ var SdResultSuccess = SdResult.Success;
|
|
|
2310
2512
|
var SdResultError = SdResult.Error;
|
|
2311
2513
|
|
|
2312
2514
|
// ui/template/MainLayout.tsx
|
|
2313
|
-
var
|
|
2314
|
-
var
|
|
2515
|
+
var import_core37 = require("@mantine/core");
|
|
2516
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
2315
2517
|
var headers = {
|
|
2316
2518
|
mega: SdHeader.Mega,
|
|
2317
|
-
simple: SdHeader.Simple
|
|
2519
|
+
simple: SdHeader.Simple,
|
|
2520
|
+
panel: SdHeader.Panel
|
|
2318
2521
|
};
|
|
2319
2522
|
function MainLayout({
|
|
2320
2523
|
children,
|
|
@@ -2324,45 +2527,65 @@ function MainLayout({
|
|
|
2324
2527
|
headerVariant = "mega"
|
|
2325
2528
|
}) {
|
|
2326
2529
|
const Header = headers[headerVariant];
|
|
2327
|
-
return /* @__PURE__ */ (0,
|
|
2328
|
-
/* @__PURE__ */ (0,
|
|
2329
|
-
/* @__PURE__ */ (0,
|
|
2330
|
-
/* @__PURE__ */ (0,
|
|
2530
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_core37.AppShell, { header: { height: 60 }, children: [
|
|
2531
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.AppShell.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Header, { navItems, loginFlag }) }),
|
|
2532
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.AppShell.Main, { children }),
|
|
2533
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(SdFooter, { company: companyInfo, navItems })
|
|
2331
2534
|
] });
|
|
2332
2535
|
}
|
|
2333
2536
|
|
|
2334
2537
|
// ui/template/PageLayout.tsx
|
|
2335
|
-
var
|
|
2336
|
-
var
|
|
2538
|
+
var import_core38 = require("@mantine/core");
|
|
2539
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
2337
2540
|
var HERO_MIN_H = "38svh";
|
|
2338
2541
|
var HERO_PY = { base: 56, sm: 88 };
|
|
2339
2542
|
var HERO_MAW = 680;
|
|
2340
|
-
function Content({
|
|
2341
|
-
|
|
2543
|
+
function Content({
|
|
2544
|
+
children,
|
|
2545
|
+
navItems,
|
|
2546
|
+
breadcrumb = true,
|
|
2547
|
+
currentHref
|
|
2548
|
+
}) {
|
|
2549
|
+
const showBreadcrumb = breadcrumb && !!navItems && navItems.length > 0;
|
|
2550
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(SdContainer, { py: "xl", children: [
|
|
2551
|
+
showBreadcrumb && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(SdBreadcrumb, { navItems, currentHref, mb: "lg" }),
|
|
2552
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Stack, { gap: "xl", children })
|
|
2553
|
+
] });
|
|
2342
2554
|
}
|
|
2343
2555
|
function LayoutGap() {
|
|
2344
|
-
return /* @__PURE__ */ (0,
|
|
2556
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Space, {});
|
|
2345
2557
|
}
|
|
2346
|
-
function Minimal({
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2558
|
+
function Minimal({
|
|
2559
|
+
label,
|
|
2560
|
+
title,
|
|
2561
|
+
description,
|
|
2562
|
+
children,
|
|
2563
|
+
navItems,
|
|
2564
|
+
breadcrumb,
|
|
2565
|
+
currentHref
|
|
2566
|
+
}) {
|
|
2567
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Plain2, { navItems, breadcrumb, currentHref, children: [
|
|
2568
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(LayoutGap, {}),
|
|
2569
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(SdTextBox.Section, { label, title, description: description != null ? description : "" }),
|
|
2570
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Divider, {}),
|
|
2350
2571
|
children
|
|
2351
2572
|
] });
|
|
2352
2573
|
}
|
|
2353
|
-
function Plain2({
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2574
|
+
function Plain2({
|
|
2575
|
+
children,
|
|
2576
|
+
navItems,
|
|
2577
|
+
breadcrumb,
|
|
2578
|
+
currentHref
|
|
2579
|
+
}) {
|
|
2580
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_jsx_runtime40.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Content, { navItems, breadcrumb, currentHref, children }) });
|
|
2358
2581
|
}
|
|
2359
2582
|
function HeroCopy({ label, title, description }) {
|
|
2360
|
-
return /* @__PURE__ */ (0,
|
|
2361
|
-
label && /* @__PURE__ */ (0,
|
|
2362
|
-
/* @__PURE__ */ (0,
|
|
2363
|
-
/* @__PURE__ */ (0,
|
|
2583
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core38.Stack, { gap: "md", maw: HERO_MAW, children: [
|
|
2584
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core38.Group, { gap: "sm", align: "center", wrap: "nowrap", children: [
|
|
2585
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Box, { w: 28, h: 2, bg: "primary.3", style: { borderRadius: 2 } }),
|
|
2586
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(SdText.Eyebrow, { c: "primary.1", children: label })
|
|
2364
2587
|
] }),
|
|
2365
|
-
/* @__PURE__ */ (0,
|
|
2588
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
2366
2589
|
SdTextBox.Hero,
|
|
2367
2590
|
{
|
|
2368
2591
|
title,
|
|
@@ -2375,10 +2598,19 @@ function HeroCopy({ label, title, description }) {
|
|
|
2375
2598
|
)
|
|
2376
2599
|
] });
|
|
2377
2600
|
}
|
|
2378
|
-
function Image2({
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2601
|
+
function Image2({
|
|
2602
|
+
image,
|
|
2603
|
+
label,
|
|
2604
|
+
title,
|
|
2605
|
+
description,
|
|
2606
|
+
children,
|
|
2607
|
+
navItems,
|
|
2608
|
+
breadcrumb,
|
|
2609
|
+
currentHref
|
|
2610
|
+
}) {
|
|
2611
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
|
|
2612
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
|
|
2613
|
+
import_core38.Box,
|
|
2382
2614
|
{
|
|
2383
2615
|
pos: "relative",
|
|
2384
2616
|
style: {
|
|
@@ -2391,8 +2623,8 @@ function Image2({ image, label, title, description, children }) {
|
|
|
2391
2623
|
backgroundColor: "var(--mantine-color-slate-9)"
|
|
2392
2624
|
},
|
|
2393
2625
|
children: [
|
|
2394
|
-
/* @__PURE__ */ (0,
|
|
2395
|
-
|
|
2626
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
2627
|
+
import_core38.Box,
|
|
2396
2628
|
{
|
|
2397
2629
|
"aria-hidden": true,
|
|
2398
2630
|
pos: "absolute",
|
|
@@ -2402,17 +2634,25 @@ function Image2({ image, label, title, description, children }) {
|
|
|
2402
2634
|
}
|
|
2403
2635
|
}
|
|
2404
2636
|
),
|
|
2405
|
-
/* @__PURE__ */ (0,
|
|
2637
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(SdContainer, { pos: "relative", py: HERO_PY, style: { zIndex: 1, width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(HeroCopy, { label, title, description }) })
|
|
2406
2638
|
]
|
|
2407
2639
|
}
|
|
2408
2640
|
),
|
|
2409
|
-
/* @__PURE__ */ (0,
|
|
2641
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Content, { navItems, breadcrumb, currentHref, children })
|
|
2410
2642
|
] });
|
|
2411
2643
|
}
|
|
2412
|
-
function Brand({
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2644
|
+
function Brand({
|
|
2645
|
+
label,
|
|
2646
|
+
title,
|
|
2647
|
+
description,
|
|
2648
|
+
children,
|
|
2649
|
+
navItems,
|
|
2650
|
+
breadcrumb,
|
|
2651
|
+
currentHref
|
|
2652
|
+
}) {
|
|
2653
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
|
|
2654
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
|
|
2655
|
+
import_core38.Box,
|
|
2416
2656
|
{
|
|
2417
2657
|
pos: "relative",
|
|
2418
2658
|
style: __spreadValues({
|
|
@@ -2423,12 +2663,12 @@ function Brand({ label, title, description, children }) {
|
|
|
2423
2663
|
borderBottom: "1px solid var(--mantine-color-slate-8)"
|
|
2424
2664
|
}, brandSurface),
|
|
2425
2665
|
children: [
|
|
2426
|
-
/* @__PURE__ */ (0,
|
|
2427
|
-
/* @__PURE__ */ (0,
|
|
2666
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Box, { "aria-hidden": true, pos: "absolute", inset: 0, style: brandDotTexture }),
|
|
2667
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(SdContainer, { pos: "relative", py: HERO_PY, style: { zIndex: 1, width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(HeroCopy, { label, title, description }) })
|
|
2428
2668
|
]
|
|
2429
2669
|
}
|
|
2430
2670
|
),
|
|
2431
|
-
/* @__PURE__ */ (0,
|
|
2671
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Content, { navItems, breadcrumb, currentHref, children })
|
|
2432
2672
|
] });
|
|
2433
2673
|
}
|
|
2434
2674
|
var PageLayout = {
|
|
@@ -2447,7 +2687,7 @@ var PageLayoutBrand = PageLayout.Brand;
|
|
|
2447
2687
|
var PageLayoutPlain = PageLayout.Plain;
|
|
2448
2688
|
|
|
2449
2689
|
// ui/theme.ts
|
|
2450
|
-
var
|
|
2690
|
+
var import_core39 = require("@mantine/core");
|
|
2451
2691
|
var primary = [
|
|
2452
2692
|
"#e7f0fb",
|
|
2453
2693
|
"#c8dcf4",
|
|
@@ -2563,7 +2803,7 @@ var amber = [
|
|
|
2563
2803
|
"#78350f"
|
|
2564
2804
|
// 9 amber-900
|
|
2565
2805
|
];
|
|
2566
|
-
var theme = (0,
|
|
2806
|
+
var theme = (0, import_core39.createTheme)({
|
|
2567
2807
|
/* ---- Color ---- */
|
|
2568
2808
|
colors: { primary, secondary, slate, red, green, amber, dark: slate },
|
|
2569
2809
|
primaryColor: "primary",
|
|
@@ -2575,20 +2815,20 @@ var theme = (0, import_core38.createTheme)({
|
|
|
2575
2815
|
fontFamily: "'Noto Sans KR', ui-sans-serif, system-ui, sans-serif",
|
|
2576
2816
|
fontWeight: "700",
|
|
2577
2817
|
sizes: {
|
|
2578
|
-
h1: { fontSize: (0,
|
|
2579
|
-
h2: { fontSize: (0,
|
|
2580
|
-
h3: { fontSize: (0,
|
|
2581
|
-
h4: { fontSize: (0,
|
|
2582
|
-
h5: { fontSize: (0,
|
|
2583
|
-
h6: { fontSize: (0,
|
|
2818
|
+
h1: { fontSize: (0, import_core39.rem)(48), lineHeight: "1.1", fontWeight: "900" },
|
|
2819
|
+
h2: { fontSize: (0, import_core39.rem)(36), lineHeight: "1.1", fontWeight: "900" },
|
|
2820
|
+
h3: { fontSize: (0, import_core39.rem)(28), lineHeight: "1.15", fontWeight: "700" },
|
|
2821
|
+
h4: { fontSize: (0, import_core39.rem)(20), lineHeight: "1.3", fontWeight: "700" },
|
|
2822
|
+
h5: { fontSize: (0, import_core39.rem)(16), lineHeight: "1.4", fontWeight: "700" },
|
|
2823
|
+
h6: { fontSize: (0, import_core39.rem)(14), lineHeight: "1.4", fontWeight: "700" }
|
|
2584
2824
|
}
|
|
2585
2825
|
},
|
|
2586
2826
|
fontSizes: {
|
|
2587
|
-
xs: (0,
|
|
2588
|
-
sm: (0,
|
|
2589
|
-
md: (0,
|
|
2590
|
-
lg: (0,
|
|
2591
|
-
xl: (0,
|
|
2827
|
+
xs: (0, import_core39.rem)(14),
|
|
2828
|
+
sm: (0, import_core39.rem)(16),
|
|
2829
|
+
md: (0, import_core39.rem)(18),
|
|
2830
|
+
lg: (0, import_core39.rem)(20),
|
|
2831
|
+
xl: (0, import_core39.rem)(22)
|
|
2592
2832
|
},
|
|
2593
2833
|
lineHeights: {
|
|
2594
2834
|
xs: "1.4",
|
|
@@ -2599,18 +2839,18 @@ var theme = (0, import_core38.createTheme)({
|
|
|
2599
2839
|
},
|
|
2600
2840
|
defaultRadius: "md",
|
|
2601
2841
|
radius: {
|
|
2602
|
-
xs: (0,
|
|
2603
|
-
sm: (0,
|
|
2604
|
-
md: (0,
|
|
2605
|
-
lg: (0,
|
|
2606
|
-
xl: (0,
|
|
2842
|
+
xs: (0, import_core39.rem)(6),
|
|
2843
|
+
sm: (0, import_core39.rem)(8),
|
|
2844
|
+
md: (0, import_core39.rem)(10),
|
|
2845
|
+
lg: (0, import_core39.rem)(14),
|
|
2846
|
+
xl: (0, import_core39.rem)(18)
|
|
2607
2847
|
},
|
|
2608
2848
|
spacing: {
|
|
2609
|
-
xs: (0,
|
|
2610
|
-
sm: (0,
|
|
2611
|
-
md: (0,
|
|
2612
|
-
lg: (0,
|
|
2613
|
-
xl: (0,
|
|
2849
|
+
xs: (0, import_core39.rem)(8),
|
|
2850
|
+
sm: (0, import_core39.rem)(12),
|
|
2851
|
+
md: (0, import_core39.rem)(16),
|
|
2852
|
+
lg: (0, import_core39.rem)(24),
|
|
2853
|
+
xl: (0, import_core39.rem)(32)
|
|
2614
2854
|
},
|
|
2615
2855
|
shadows: {
|
|
2616
2856
|
xs: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
|
|
@@ -2690,7 +2930,6 @@ var theme = (0, import_core38.createTheme)({
|
|
|
2690
2930
|
Anchor: {
|
|
2691
2931
|
defaultProps: { c: "slate.5", fz: "sm", underline: "never" }
|
|
2692
2932
|
},
|
|
2693
|
-
// SdHeader 모바일 드로어의 2단 아코디언 타이포를 SdLink와 맞춘다.
|
|
2694
2933
|
NavLink: {
|
|
2695
2934
|
defaultProps: { c: "slate.7", fz: "sm" }
|
|
2696
2935
|
},
|
|
@@ -2719,6 +2958,7 @@ var theme = (0, import_core38.createTheme)({
|
|
|
2719
2958
|
SdBadgePrimary,
|
|
2720
2959
|
SdBadgeSuccess,
|
|
2721
2960
|
SdBadgeWarning,
|
|
2961
|
+
SdBreadcrumb,
|
|
2722
2962
|
SdButton,
|
|
2723
2963
|
SdButtonCancel,
|
|
2724
2964
|
SdButtonDelete,
|
|
@@ -2750,6 +2990,7 @@ var theme = (0, import_core38.createTheme)({
|
|
|
2750
2990
|
SdFooter,
|
|
2751
2991
|
SdHeader,
|
|
2752
2992
|
SdHeaderMega,
|
|
2993
|
+
SdHeaderPanel,
|
|
2753
2994
|
SdHeaderSimple,
|
|
2754
2995
|
SdInput,
|
|
2755
2996
|
SdInputAutocomplete,
|