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