livemark 0.15.0 → 0.16.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/build/components/Layout.js +6 -1
- package/build/components/SidebarArticles.js +9 -9
- package/build/components/SidebarSections.js +8 -2
- package/build/content/article.d.ts +10 -10
- package/build/content/article.js +19 -17
- package/build/helpers/article.d.ts +1 -15
- package/build/helpers/article.js +1 -34
- package/build/helpers/section.js +2 -1
- package/build/models/article.d.ts +0 -9
- package/build/models/article.js +1 -2
- package/build/models/config.d.ts +36 -11
- package/build/models/patch.d.ts +0 -1
- package/build/models/section.d.ts +27 -6
- package/build/models/section.js +14 -3
- package/package.json +1 -1
- package/source/components/Layout.tsx +15 -0
- package/source/components/SidebarArticles.tsx +17 -24
- package/source/components/SidebarSections.tsx +18 -1
- package/source/content/article.ts +20 -26
- package/source/helpers/article.ts +1 -39
- package/source/helpers/section.ts +1 -0
- package/source/models/article.ts +0 -10
- package/source/models/section.ts +16 -2
|
@@ -29,6 +29,11 @@ export function Layout(props) {
|
|
|
29
29
|
] })) : (_jsx(Link, { to: "/", className: "flex items-center gap-2", children: _jsx(SiteTitle, {}) })) }), _jsxs("div", { className: "hidden md:flex flex-1 items-center gap-8 self-stretch px-6 text-sm", children: [sections?.length ? (sections
|
|
30
30
|
.filter(section => section.position === "header")
|
|
31
31
|
.map(section => {
|
|
32
|
+
if (section.type === "external") {
|
|
33
|
+
return (_jsxs("a", { href: prefixUrl(section.url, config.base), className: "inline-flex items-center gap-1.5 text-foreground opacity-80 hover:opacity-100 transition-opacity", children: [
|
|
34
|
+
_jsx(DynamicIcon, { name: sectionIcon(section), className: "size-3.5" }), _jsx("span", { children: section.title })
|
|
35
|
+
] }, section.url));
|
|
36
|
+
}
|
|
32
37
|
const isActive = activeSection?.prefix === section.prefix;
|
|
33
38
|
const target = section.type === "blog" || section.type === "changelog"
|
|
34
39
|
? section.prefix
|
|
@@ -62,4 +67,4 @@ function SidebarShell(props) {
|
|
|
62
67
|
] })
|
|
63
68
|
] }));
|
|
64
69
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvTGF5b3V0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNuRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsY0FBYyxHQUNmLE1BQU0sdUJBQXVCLENBQUE7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE2QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUNMLFlBQVksRUFDWixlQUFlLEVBQ2YsY0FBYyxFQUNkLFVBQVUsR0FDWCxNQUFNLHdCQUF5QixDQUFBO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBaUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYyxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFlLENBQUE7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFpQixDQUFBO0FBRTNDLFNBQVMsUUFBUSxDQUFDLFFBQWdCO0lBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQTtBQUNyRCxDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxLQUd0QjtJQUNDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxFQUFFLE1B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QUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcImxpdmVtYXJrOnZpcnR1YWxcIlxuaW1wb3J0IHsgTGluaywgdXNlTG9jYXRpb24sIHVzZU1hdGNoIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIlxuaW1wb3J0IHsgdXNlSG90a2V5IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1ob3RrZXlzXCJcbmltcG9ydCB7XG4gIGN1cnJlbnRTZWN0aW9uLFxuICBzZWN0aW9uRmlyc3RBcnRpY2xlLFxuICBzZWN0aW9uRmxhdEFydGljbGVzLFxuICBzb3J0ZWRBcnRpY2xlcyxcbn0gZnJvbSBcIi4uL2NvbnRlbnQvYXJ0aWNsZS50c1wiXG5pbXBvcnQgeyBEeW5hbWljSWNvbiB9IGZyb20gXCIuLi9oZWxwZXJzL2R5bmFtaWMtaWNvbi50c3hcIlxuaW1wb3J0IHsgcHJlZml4VXJsIH0gZnJvbSBcIi4uL2hlbHBlcnMvcHJlZml4LXVybC50c1wiXG5pbXBvcnQgeyBzZWN0aW9uSWNvbiB9IGZyb20gXCIuLi9oZWxwZXJzL3NlY3Rpb24udHNcIlxuaW1wb3J0IHtcbiAgU2lkZWJhckluc2V0LFxuICBTaWRlYmFyUHJvdmlkZXIsXG4gIFNpZGViYXJUcmlnZ2VyLFxuICB1c2VTaWRlYmFyLFxufSBmcm9tIFwiLi4vZWxlbWVudHMvc2lkZWJhci50c3hcIlxuaW1wb3J0IHsgQmFja1RvVG9wIH0gZnJvbSBcIi4vQmFja1RvVG9wLnRzeFwiXG5pbXBvcnQgeyBCYW5uZXIgfSBmcm9tIFwiLi9CYW5uZXIudHN4XCJcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tIFwiLi9TaWRlYmFyLnRzeFwiXG5pbXBvcnQgeyBTaXRlVGl0bGUgfSBmcm9tIFwiLi9TaXRlVGl0bGUudHN4XCJcblxuZnVuY3Rpb24gc3BsYXRGb3IocGF0aG5hbWU6IHN0cmluZykge1xuICByZXR1cm4geyBfc3BsYXQ6IHBhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKSB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYXlvdXQocHJvcHM6IHtcbiAgd2l0aFNpZGViYXI/OiBib29sZWFuXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG59KSB7XG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlTG9jYXRpb24oeyBzZWxlY3Q6IGwgPT4gbC5wYXRobmFtZSB9KVxuICBjb25zdCBhcnRpY2xlUm91dGUgPSB1c2VNYXRjaCh7IGZyb206IFwiLyRcIiwgc2hvdWxkVGhyb3c6IGZhbHNlIH0pXG4gIGNvbnN0IGFjdGl2ZVNlY3Rpb24gPSBhcnRpY2xlUm91dGVcbiAgICA/IGN1cnJlbnRTZWN0aW9uKGAvJHtwYXRobmFtZS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIil9L2ApXG4gICAgOiB1bmRlZmluZWRcblxuICB1c2VIb3RrZXkoXCJKXCIsICgpID0+XG4gICAgd2luZG93LnNjcm9sbEJ5KHsgdG9wOiB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjgsIGJlaGF2aW9yOiBcInNtb290aFwiIH0pLFxuICApXG4gIHVzZUhvdGtleShcIktcIiwgKCkgPT5cbiAgICB3aW5kb3cuc2Nyb2xsQnkoeyB0b3A6IC13aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjgsIGJlaGF2aW9yOiBcInNtb290aFwiIH0pLFxuICApXG5cbiAgY29uc3Qgc2VjdGlvbnMgPSBjb25maWcuc2VjdGlvbnNcblxuICBjb25zdCBoZWFkZXIgPSAoXG4gICAgPGhlYWRlciBjbGFzc05hbWU9XCJzdGlja3kgdG9wLTAgei0yMCBmbGV4IGgtMTYgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGJvcmRlci1iIGJnLWJhY2tncm91bmRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtgZmxleCBpdGVtcy1jZW50ZXIgc2VsZi1zdHJldGNoIHBsLTQgJHtwcm9wcy53aXRoU2lkZWJhciA/IFwicHItNFwiIDogXCJtZDpwci0yMFwifWB9XG4gICAgICA+XG4gICAgICAgIHtwcm9wcy53aXRoU2lkZWJhciA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6ZmxleFwiPlxuICAgICAgICAgICAgICA8U2lkZWJhclRyaWdnZXIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPExpbmsgdG89XCIvXCIgY2xhc3NOYW1lPVwibWQ6aGlkZGVuIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxTaXRlVGl0bGUgLz5cbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TGluayB0bz1cIi9cIiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPFNpdGVUaXRsZSAvPlxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6ZmxleCBmbGV4LTEgaXRlbXMtY2VudGVyIGdhcC04IHNlbGYtc3RyZXRjaCBweC02IHRleHQtc21cIj5cbiAgICAgICAge3NlY3Rpb25zPy5sZW5ndGggPyAoXG4gICAgICAgICAgc2VjdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoc2VjdGlvbiA9PiBzZWN0aW9uLnBvc2l0aW9uID09PSBcImhlYWRlclwiKVxuICAgICAgICAgICAgLm1hcChzZWN0aW9uID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVTZWN0aW9uPy5wcmVmaXggPT09IHNlY3Rpb24ucHJlZml4XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9XG4gICAgICAgICAgICAgICAgc2VjdGlvbi50eXBlID09PSBcImJsb2dcIiB8fCBzZWN0aW9uLnR5cGUgPT09IFwiY2hhbmdlbG9nXCJcbiAgICAgICAgICAgICAgICAgID8gc2VjdGlvbi5wcmVmaXhcbiAgICAgICAgICAgICAgICAgIDogc2VjdGlvbkZpcnN0QXJ0aWNsZS5nZXQoc2VjdGlvbi5wcmVmaXgpXG4gICAgICAgICAgICAgIGNvbnN0IGxhdGVzdFZlcnNpb24gPVxuICAgICAgICAgICAgICAgIHNlY3Rpb24udHlwZSA9PT0gXCJjaGFuZ2Vsb2dcIiAmJiBzZWN0aW9uLnZlcnNpb25cbiAgICAgICAgICAgICAgICAgID8gc29ydGVkQXJ0aWNsZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICBhID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhLnBhdGggPT09IHNlY3Rpb25GbGF0QXJ0aWNsZXMuZ2V0KHNlY3Rpb24ucHJlZml4KT8uWzBdLFxuICAgICAgICAgICAgICAgICAgICApPy50aXRsZVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAga2V5PXtzZWN0aW9uLnByZWZpeH1cbiAgICAgICAgICAgICAgICAgIHRvPXt0YXJnZXQgPT09IFwiL1wiID8gXCIvXCIgOiBcIi8kXCJ9XG4gICAgICAgICAgICAgICAgICBwYXJhbXM9e3RhcmdldCAmJiB0YXJnZXQgIT09IFwiL1wiID8gc3BsYXRGb3IodGFyZ2V0KSA6IHt9fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC1mb3JlZ3JvdW5kICR7XG4gICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImZvbnQtbWVkaXVtIGJvcmRlci1iLTIgYm9yZGVyLWZvcmVncm91bmQgcGItMC41IC1tYi0wLjVcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJvcGFjaXR5LTgwIGhvdmVyOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eVwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8RHluYW1pY0ljb25cbiAgICAgICAgICAgICAgICAgICAgbmFtZT17c2VjdGlvbkljb24oc2VjdGlvbil9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNpemUtMy41XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3NlY3Rpb24udGl0bGV9XG4gICAgICAgICAgICAgICAgICAgIHtsYXRlc3RWZXJzaW9uICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvcGFjaXR5LTgwXCI+ICh7bGF0ZXN0VmVyc2lvbn0pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgdG89XCIvXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZm9yZWdyb3VuZCBmb250LW1lZGl1bSB1bmRlcmxpbmUgdW5kZXJsaW5lLW9mZnNldC00XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBEb2NzXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICApfVxuICAgICAgICB7Y29uZmlnLmxpbmtzXG4gICAgICAgICAgPy5maWx0ZXIoXG4gICAgICAgICAgICBsaW5rID0+XG4gICAgICAgICAgICAgIGxpbmsucG9zaXRpb24gPT09IFwiaGVhZGVyXCIgJiZcbiAgICAgICAgICAgICAgKCFsaW5rLnByZWZpeCB8fCBsaW5rLnByZWZpeCA9PT0gYWN0aXZlU2VjdGlvbj8ucHJlZml4KSxcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcChsaW5rID0+IChcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGtleT17bGluay51cmx9XG4gICAgICAgICAgICAgIGhyZWY9e3ByZWZpeFVybChsaW5rLnVybCwgY29uZmlnLmJhc2UpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWZvcmVncm91bmQgb3BhY2l0eS04MCBob3ZlcjpvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLW9wYWNpdHlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bGluay5pY29uICYmIChcbiAgICAgICAgICAgICAgICA8RHluYW1pY0ljb25cbiAgICAgICAgICAgICAgICAgIG5hbWU9e2xpbmsuaWNvbn1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZSBzaXplLTMuNSBhbGlnbi1bLTAuMTI1ZW1dXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfXtcIiBcIn1cbiAgICAgICAgICAgICAge2xpbmsudGl0bGV9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDxCYW5uZXIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZDpoaWRkZW4gbWwtYXV0byBwci0yXCI+XG4gICAgICAgIDxTaWRlYmFyVHJpZ2dlciAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9oZWFkZXI+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTaWRlYmFyUHJvdmlkZXJcbiAgICAgIGtleT17cHJvcHMud2l0aFNpZGViYXIgPyBcInNpZGViYXJcIiA6IFwibWluaVwifVxuICAgICAgZGVmYXVsdE9wZW49eyEhcHJvcHMud2l0aFNpZGViYXJ9XG4gICAgPlxuICAgICAgPFNpZGViYXJTaGVsbCB3aXRoU2lkZWJhcj17cHJvcHMud2l0aFNpZGViYXJ9IGhlYWRlcj17aGVhZGVyfT5cbiAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgPC9TaWRlYmFyU2hlbGw+XG4gICAgPC9TaWRlYmFyUHJvdmlkZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gU2lkZWJhclNoZWxsKHByb3BzOiB7XG4gIHdpdGhTaWRlYmFyPzogYm9vbGVhblxuICBoZWFkZXI6IFJlYWN0LlJlYWN0Tm9kZVxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxufSkge1xuICBjb25zdCB7IGlzTW9iaWxlLCBzZXRPcGVuTW9iaWxlIH0gPSB1c2VTaWRlYmFyKClcbiAgY29uc3Qgb25DbGljayA9IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAoIWlzTW9iaWxlKSByZXR1cm5cbiAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChcImFcIikpIHNldE9wZW5Nb2JpbGUoZmFsc2UpXG4gIH1cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiY29udGVudHNcIiB9fSBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgIDxTaWRlYmFyIHdpdGhTaWRlYmFyPXtwcm9wcy53aXRoU2lkZWJhcn0gLz5cbiAgICAgIDxTaWRlYmFySW5zZXQ+XG4gICAgICAgIHtwcm9wcy5oZWFkZXJ9XG4gICAgICAgIDxtYWluIGNsYXNzTmFtZT1cImZsZXgtMVwiPntwcm9wcy5jaGlsZHJlbn08L21haW4+XG4gICAgICAgIDxCYWNrVG9Ub3AgLz5cbiAgICAgIDwvU2lkZWJhckluc2V0PlxuICAgIDwvZGl2PlxuICApXG59XG4iXX0=
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvTGF5b3V0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNuRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsY0FBYyxHQUNmLE1BQU0sdUJBQXVCLENBQUE7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE2QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUNMLFlBQVksRUFDWixlQUFlLEVBQ2YsY0FBYyxFQUNkLFVBQVUsR0FDWCxNQUFNLHdCQUF5QixDQUFBO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBaUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYyxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFlLENBQUE7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFpQixDQUFBO0FBRTNDLFNBQVMsUUFBUSxDQUFDLFFBQWdCO0lBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQTtBQUNyRCxDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxLQUd0QjtJQUNDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxFQUFFLE1B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QUM7WUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdEUsQ0FBQyxDQUFBO0lBQ0QsT0FBTyxDQUNMLGVBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPO1lBQ25ELEtBQUMsT0FBTyxJQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxHQUFJLEVBQzNDLE1BQUMsWUFBWSxlQUNWLEtBQUssQ0FBQyxNQUFNLEVBQ2IsZUFBTSxTQUFTLEVBQUMsUUFBUSxZQUFFLEtBQUssQ0FBQyxRQUFRLEdBQVEsRUFDaEQsS0FBQyxTQUFTLEtBQUc7b0JBQ0E7WUFDWCxDQUNQLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcImxpdmVtYXJrOnZpcnR1YWxcIlxuaW1wb3J0IHsgTGluaywgdXNlTG9jYXRpb24sIHVzZU1hdGNoIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIlxuaW1wb3J0IHsgdXNlSG90a2V5IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1ob3RrZXlzXCJcbmltcG9ydCB7XG4gIGN1cnJlbnRTZWN0aW9uLFxuICBzZWN0aW9uRmlyc3RBcnRpY2xlLFxuICBzZWN0aW9uRmxhdEFydGljbGVzLFxuICBzb3J0ZWRBcnRpY2xlcyxcbn0gZnJvbSBcIi4uL2NvbnRlbnQvYXJ0aWNsZS50c1wiXG5pbXBvcnQgeyBEeW5hbWljSWNvbiB9IGZyb20gXCIuLi9oZWxwZXJzL2R5bmFtaWMtaWNvbi50c3hcIlxuaW1wb3J0IHsgcHJlZml4VXJsIH0gZnJvbSBcIi4uL2hlbHBlcnMvcHJlZml4LXVybC50c1wiXG5pbXBvcnQgeyBzZWN0aW9uSWNvbiB9IGZyb20gXCIuLi9oZWxwZXJzL3NlY3Rpb24udHNcIlxuaW1wb3J0IHtcbiAgU2lkZWJhckluc2V0LFxuICBTaWRlYmFyUHJvdmlkZXIsXG4gIFNpZGViYXJUcmlnZ2VyLFxuICB1c2VTaWRlYmFyLFxufSBmcm9tIFwiLi4vZWxlbWVudHMvc2lkZWJhci50c3hcIlxuaW1wb3J0IHsgQmFja1RvVG9wIH0gZnJvbSBcIi4vQmFja1RvVG9wLnRzeFwiXG5pbXBvcnQgeyBCYW5uZXIgfSBmcm9tIFwiLi9CYW5uZXIudHN4XCJcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tIFwiLi9TaWRlYmFyLnRzeFwiXG5pbXBvcnQgeyBTaXRlVGl0bGUgfSBmcm9tIFwiLi9TaXRlVGl0bGUudHN4XCJcblxuZnVuY3Rpb24gc3BsYXRGb3IocGF0aG5hbWU6IHN0cmluZykge1xuICByZXR1cm4geyBfc3BsYXQ6IHBhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKSB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYXlvdXQocHJvcHM6IHtcbiAgd2l0aFNpZGViYXI/OiBib29sZWFuXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG59KSB7XG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlTG9jYXRpb24oeyBzZWxlY3Q6IGwgPT4gbC5wYXRobmFtZSB9KVxuICBjb25zdCBhcnRpY2xlUm91dGUgPSB1c2VNYXRjaCh7IGZyb206IFwiLyRcIiwgc2hvdWxkVGhyb3c6IGZhbHNlIH0pXG4gIGNvbnN0IGFjdGl2ZVNlY3Rpb24gPSBhcnRpY2xlUm91dGVcbiAgICA/IGN1cnJlbnRTZWN0aW9uKGAvJHtwYXRobmFtZS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIil9L2ApXG4gICAgOiB1bmRlZmluZWRcblxuICB1c2VIb3RrZXkoXCJKXCIsICgpID0+XG4gICAgd2luZG93LnNjcm9sbEJ5KHsgdG9wOiB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjgsIGJlaGF2aW9yOiBcInNtb290aFwiIH0pLFxuICApXG4gIHVzZUhvdGtleShcIktcIiwgKCkgPT5cbiAgICB3aW5kb3cuc2Nyb2xsQnkoeyB0b3A6IC13aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjgsIGJlaGF2aW9yOiBcInNtb290aFwiIH0pLFxuICApXG5cbiAgY29uc3Qgc2VjdGlvbnMgPSBjb25maWcuc2VjdGlvbnNcblxuICBjb25zdCBoZWFkZXIgPSAoXG4gICAgPGhlYWRlciBjbGFzc05hbWU9XCJzdGlja3kgdG9wLTAgei0yMCBmbGV4IGgtMTYgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGJvcmRlci1iIGJnLWJhY2tncm91bmRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtgZmxleCBpdGVtcy1jZW50ZXIgc2VsZi1zdHJldGNoIHBsLTQgJHtwcm9wcy53aXRoU2lkZWJhciA/IFwicHItNFwiIDogXCJtZDpwci0yMFwifWB9XG4gICAgICA+XG4gICAgICAgIHtwcm9wcy53aXRoU2lkZWJhciA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6ZmxleFwiPlxuICAgICAgICAgICAgICA8U2lkZWJhclRyaWdnZXIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPExpbmsgdG89XCIvXCIgY2xhc3NOYW1lPVwibWQ6aGlkZGVuIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxTaXRlVGl0bGUgLz5cbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TGluayB0bz1cIi9cIiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPFNpdGVUaXRsZSAvPlxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6ZmxleCBmbGV4LTEgaXRlbXMtY2VudGVyIGdhcC04IHNlbGYtc3RyZXRjaCBweC02IHRleHQtc21cIj5cbiAgICAgICAge3NlY3Rpb25zPy5sZW5ndGggPyAoXG4gICAgICAgICAgc2VjdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoc2VjdGlvbiA9PiBzZWN0aW9uLnBvc2l0aW9uID09PSBcImhlYWRlclwiKVxuICAgICAgICAgICAgLm1hcChzZWN0aW9uID0+IHtcbiAgICAgICAgICAgICAgaWYgKHNlY3Rpb24udHlwZSA9PT0gXCJleHRlcm5hbFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIGtleT17c2VjdGlvbi51cmx9XG4gICAgICAgICAgICAgICAgICAgIGhyZWY9e3ByZWZpeFVybChzZWN0aW9uLnVybCwgY29uZmlnLmJhc2UpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSB0ZXh0LWZvcmVncm91bmQgb3BhY2l0eS04MCBob3ZlcjpvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLW9wYWNpdHlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8RHluYW1pY0ljb25cbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtzZWN0aW9uSWNvbihzZWN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzaXplLTMuNVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPntzZWN0aW9uLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVTZWN0aW9uPy5wcmVmaXggPT09IHNlY3Rpb24ucHJlZml4XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9XG4gICAgICAgICAgICAgICAgc2VjdGlvbi50eXBlID09PSBcImJsb2dcIiB8fCBzZWN0aW9uLnR5cGUgPT09IFwiY2hhbmdlbG9nXCJcbiAgICAgICAgICAgICAgICAgID8gc2VjdGlvbi5wcmVmaXhcbiAgICAgICAgICAgICAgICAgIDogc2VjdGlvbkZpcnN0QXJ0aWNsZS5nZXQoc2VjdGlvbi5wcmVmaXgpXG4gICAgICAgICAgICAgIGNvbnN0IGxhdGVzdFZlcnNpb24gPVxuICAgICAgICAgICAgICAgIHNlY3Rpb24udHlwZSA9PT0gXCJjaGFuZ2Vsb2dcIiAmJiBzZWN0aW9uLnZlcnNpb25cbiAgICAgICAgICAgICAgICAgID8gc29ydGVkQXJ0aWNsZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICBhID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhLnBhdGggPT09IHNlY3Rpb25GbGF0QXJ0aWNsZXMuZ2V0KHNlY3Rpb24ucHJlZml4KT8uWzBdLFxuICAgICAgICAgICAgICAgICAgICApPy50aXRsZVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAga2V5PXtzZWN0aW9uLnByZWZpeH1cbiAgICAgICAgICAgICAgICAgIHRvPXt0YXJnZXQgPT09IFwiL1wiID8gXCIvXCIgOiBcIi8kXCJ9XG4gICAgICAgICAgICAgICAgICBwYXJhbXM9e3RhcmdldCAmJiB0YXJnZXQgIT09IFwiL1wiID8gc3BsYXRGb3IodGFyZ2V0KSA6IHt9fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC1mb3JlZ3JvdW5kICR7XG4gICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImZvbnQtbWVkaXVtIGJvcmRlci1iLTIgYm9yZGVyLWZvcmVncm91bmQgcGItMC41IC1tYi0wLjVcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJvcGFjaXR5LTgwIGhvdmVyOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eVwiXG4gICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8RHluYW1pY0ljb25cbiAgICAgICAgICAgICAgICAgICAgbmFtZT17c2VjdGlvbkljb24oc2VjdGlvbil9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNpemUtMy41XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3NlY3Rpb24udGl0bGV9XG4gICAgICAgICAgICAgICAgICAgIHtsYXRlc3RWZXJzaW9uICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvcGFjaXR5LTgwXCI+ICh7bGF0ZXN0VmVyc2lvbn0pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgdG89XCIvXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtZm9yZWdyb3VuZCBmb250LW1lZGl1bSB1bmRlcmxpbmUgdW5kZXJsaW5lLW9mZnNldC00XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBEb2NzXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICApfVxuICAgICAgICB7Y29uZmlnLmxpbmtzXG4gICAgICAgICAgPy5maWx0ZXIoXG4gICAgICAgICAgICBsaW5rID0+XG4gICAgICAgICAgICAgIGxpbmsucG9zaXRpb24gPT09IFwiaGVhZGVyXCIgJiZcbiAgICAgICAgICAgICAgKCFsaW5rLnByZWZpeCB8fCBsaW5rLnByZWZpeCA9PT0gYWN0aXZlU2VjdGlvbj8ucHJlZml4KSxcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcChsaW5rID0+IChcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGtleT17bGluay51cmx9XG4gICAgICAgICAgICAgIGhyZWY9e3ByZWZpeFVybChsaW5rLnVybCwgY29uZmlnLmJhc2UpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWZvcmVncm91bmQgb3BhY2l0eS04MCBob3ZlcjpvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLW9wYWNpdHlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bGluay5pY29uICYmIChcbiAgICAgICAgICAgICAgICA8RHluYW1pY0ljb25cbiAgICAgICAgICAgICAgICAgIG5hbWU9e2xpbmsuaWNvbn1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZSBzaXplLTMuNSBhbGlnbi1bLTAuMTI1ZW1dXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfXtcIiBcIn1cbiAgICAgICAgICAgICAge2xpbmsudGl0bGV9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDxCYW5uZXIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZDpoaWRkZW4gbWwtYXV0byBwci0yXCI+XG4gICAgICAgIDxTaWRlYmFyVHJpZ2dlciAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9oZWFkZXI+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTaWRlYmFyUHJvdmlkZXJcbiAgICAgIGtleT17cHJvcHMud2l0aFNpZGViYXIgPyBcInNpZGViYXJcIiA6IFwibWluaVwifVxuICAgICAgZGVmYXVsdE9wZW49eyEhcHJvcHMud2l0aFNpZGViYXJ9XG4gICAgPlxuICAgICAgPFNpZGViYXJTaGVsbCB3aXRoU2lkZWJhcj17cHJvcHMud2l0aFNpZGViYXJ9IGhlYWRlcj17aGVhZGVyfT5cbiAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgPC9TaWRlYmFyU2hlbGw+XG4gICAgPC9TaWRlYmFyUHJvdmlkZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gU2lkZWJhclNoZWxsKHByb3BzOiB7XG4gIHdpdGhTaWRlYmFyPzogYm9vbGVhblxuICBoZWFkZXI6IFJlYWN0LlJlYWN0Tm9kZVxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxufSkge1xuICBjb25zdCB7IGlzTW9iaWxlLCBzZXRPcGVuTW9iaWxlIH0gPSB1c2VTaWRlYmFyKClcbiAgY29uc3Qgb25DbGljayA9IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAoIWlzTW9iaWxlKSByZXR1cm5cbiAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChcImFcIikpIHNldE9wZW5Nb2JpbGUoZmFsc2UpXG4gIH1cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiY29udGVudHNcIiB9fSBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgIDxTaWRlYmFyIHdpdGhTaWRlYmFyPXtwcm9wcy53aXRoU2lkZWJhcn0gLz5cbiAgICAgIDxTaWRlYmFySW5zZXQ+XG4gICAgICAgIHtwcm9wcy5oZWFkZXJ9XG4gICAgICAgIDxtYWluIGNsYXNzTmFtZT1cImZsZXgtMVwiPntwcm9wcy5jaGlsZHJlbn08L21haW4+XG4gICAgICAgIDxCYWNrVG9Ub3AgLz5cbiAgICAgIDwvU2lkZWJhckluc2V0PlxuICAgIDwvZGl2PlxuICApXG59XG4iXX0=
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { config } from "livemark:virtual";
|
|
3
3
|
import { Link, useLocation } from "@tanstack/react-router";
|
|
4
4
|
import { ChevronRight } from "lucide-react";
|
|
5
|
-
import {
|
|
5
|
+
import { articleTree, currentSection, sectionArticleTrees, } from "../content/article.js";
|
|
6
6
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "../elements/collapsible.js";
|
|
7
7
|
import { SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, } from "../elements/sidebar.js";
|
|
8
8
|
import { resolveArticleIcon } from "../helpers/article-icon.js";
|
|
@@ -11,12 +11,12 @@ export function SidebarArticles() {
|
|
|
11
11
|
const pathname = useLocation({ select: l => l.pathname });
|
|
12
12
|
const configSections = config.sections;
|
|
13
13
|
const section = currentSection(`/${pathname.replace(/^\/|\/$/g, "")}/`);
|
|
14
|
-
const
|
|
15
|
-
? (
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
const tree = configSections?.length
|
|
15
|
+
? (sectionArticleTrees.get(section?.prefix ?? "__default__") ?? articleTree)
|
|
16
|
+
: articleTree;
|
|
17
|
+
return (_jsxs(SidebarGroup, { children: [
|
|
18
|
+
_jsx(SidebarGroupLabel, { className: "uppercase font-mono text-xs tracking-widest", children: "Articles" }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: tree.map(node => (_jsx(NavNode, { node: node, currentPath: pathname }, node.path))) }) })
|
|
19
|
+
] }));
|
|
20
20
|
}
|
|
21
21
|
function splatFor(pathname) {
|
|
22
22
|
return { _splat: pathname.replace(/^\/|\/$/g, "") };
|
|
@@ -41,4 +41,4 @@ function NavNode(props) {
|
|
|
41
41
|
_jsxs(Button, { isActive: active, className: active ? "" : "opacity-75", render: link, children: [!isSub && _jsx(Icon, { className: "size-4" }), label] }), _jsx(CollapsibleTrigger, { "aria-label": `Toggle ${node.label ?? node.title} submenu`, className: "absolute right-1 top-1.5 p-1 rounded-md hover:bg-sidebar-accent", children: _jsx(ChevronRight, { className: "size-3.5 transition-transform group-data-[open]/collapsible:rotate-90" }) }), _jsx(CollapsibleContent, { children: _jsx(SidebarMenuSub, { children: node.children.map(child => (_jsx(NavNode, { node: child, currentPath: currentPath, depth: depth + 1 }, child.path))) }) })
|
|
42
42
|
] }) }));
|
|
43
43
|
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhckFydGljbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2lkZWJhckFydGljbGVzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMzQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLGNBQWMsRUFDZCxtQkFBbUIsR0FDcEIsTUFBTSx1QkFBdUIsQ0FBQTtBQUM5QixPQUFPLEVBQ0wsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixrQkFBa0IsR0FDbkIsTUFBTSw0QkFBNkIsQ0FBQTtBQUNwQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSx3QkFBeUIsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUcvRCxtREFBbUQ7QUFDbkQsTUFBTSxVQUFVLGVBQWU7SUFDN0IsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFFekQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQTtJQUN0QyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkUsTUFBTSxJQUFJLEdBQUcsY0FBYyxFQUFFLE1BQU07UUFDakMsQ0FB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Q1QsS0FBQyxrQkFBa0Isa0JBQ0wsVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFDeEQsU0FBUyxFQUFDLGlFQUFpRSxZQUUzRSxLQUFDLFlBQVksSUFBQyxTQUFTLEVBQUMsdUVBQXVFLEdBQUcsR0FDL0UsRUFDckIsS0FBQyxrQkFBa0IsY0FDakIsS0FBQyxjQUFjLGNBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUMxQixLQUFDLE9BQU8sSUFFTixJQUFJLEVBQUUsS0FBSyxFQUNYLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxJQUhYLEtBQUssQ0FBQyxJQUFJLENBSWYsQ0FDSCxDQUFDLEdBQ2EsR0FDRTtnQkFDVCxHQUNULENBQ1IsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwibGl2ZW1hcms6dmlydHVhbFwiXG5pbXBvcnQgeyBMaW5rLCB1c2VMb2NhdGlvbiB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCJcbmltcG9ydCB7IENoZXZyb25SaWdodCB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuaW1wb3J0IHtcbiAgYXJ0aWNsZVRyZWUsXG4gIGN1cnJlbnRTZWN0aW9uLFxuICBzZWN0aW9uQXJ0aWNsZVRyZWVzLFxufSBmcm9tIFwiLi4vY29udGVudC9hcnRpY2xlLnRzXCJcbmltcG9ydCB7XG4gIENvbGxhcHNpYmxlLFxuICBDb2xsYXBzaWJsZUNvbnRlbnQsXG4gIENvbGxhcHNpYmxlVHJpZ2dlcixcbn0gZnJvbSBcIi4uL2VsZW1lbnRzL2NvbGxhcHNpYmxlLnRzeFwiXG5pbXBvcnQge1xuICBTaWRlYmFyR3JvdXAsXG4gIFNpZGViYXJHcm91cENvbnRlbnQsXG4gIFNpZGViYXJHcm91cExhYmVsLFxuICBTaWRlYmFyTWVudSxcbiAgU2lkZWJhck1lbnVCdXR0b24sXG4gIFNpZGViYXJNZW51SXRlbSxcbiAgU2lkZWJhck1lbnVTdWIsXG4gIFNpZGViYXJNZW51U3ViQnV0dG9uLFxuICBTaWRlYmFyTWVudVN1Ykl0ZW0sXG59IGZyb20gXCIuLi9lbGVtZW50cy9zaWRlYmFyLnRzeFwiXG5pbXBvcnQgeyByZXNvbHZlQXJ0aWNsZUljb24gfSBmcm9tIFwiLi4vaGVscGVycy9hcnRpY2xlLWljb24udHNcIlxuaW1wb3J0IHR5cGUgeyBBcnRpY2xlTm9kZSB9IGZyb20gXCIuLi9tb2RlbHMvYXJ0aWNsZS50c1wiXG5cbi8qKiBBcnRpY2xlLXRyZWUgYm9keSBzbG90IGZvciB0aGUgU2lkZWJhciBzaGVsbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNpZGViYXJBcnRpY2xlcygpIHtcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VMb2NhdGlvbih7IHNlbGVjdDogbCA9PiBsLnBhdGhuYW1lIH0pXG5cbiAgY29uc3QgY29uZmlnU2VjdGlvbnMgPSBjb25maWcuc2VjdGlvbnNcbiAgY29uc3Qgc2VjdGlvbiA9IGN1cnJlbnRTZWN0aW9uKGAvJHtwYXRobmFtZS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIil9L2ApXG4gIGNvbnN0IHRyZWUgPSBjb25maWdTZWN0aW9ucz8ubGVuZ3RoXG4gICAgPyAoc2VjdGlvbkFydGljbGVUcmVlcy5nZXQoc2VjdGlvbj8ucHJlZml4ID8/IFwiX19kZWZhdWx0X19cIikgPz8gYXJ0aWNsZVRyZWUpXG4gICAgOiBhcnRpY2xlVHJlZVxuXG4gIHJldHVybiAoXG4gICAgPFNpZGViYXJHcm91cD5cbiAgICAgIDxTaWRlYmFyR3JvdXBMYWJlbCBjbGFzc05hbWU9XCJ1cHBlcmNhc2UgZm9udC1tb25vIHRleHQteHMgdHJhY2tpbmctd2lkZXN0XCI+XG4gICAgICAgIEFydGljbGVzXG4gICAgICA8L1NpZGViYXJHcm91cExhYmVsPlxuICAgICAgPFNpZGViYXJHcm91cENvbnRlbnQ+XG4gICAgICAgIDxTaWRlYmFyTWVudT5cbiAgICAgICAgICB7dHJlZS5tYXAobm9kZSA9PiAoXG4gICAgICAgICAgICA8TmF2Tm9kZSBrZXk9e25vZGUucGF0aH0gbm9kZT17bm9kZX0gY3VycmVudFBhdGg9e3BhdGhuYW1lfSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NpZGViYXJNZW51PlxuICAgICAgPC9TaWRlYmFyR3JvdXBDb250ZW50PlxuICAgIDwvU2lkZWJhckdyb3VwPlxuICApXG59XG5cbmZ1bmN0aW9uIHNwbGF0Rm9yKHBhdGhuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHsgX3NwbGF0OiBwYXRobmFtZS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIikgfVxufVxuXG5mdW5jdGlvbiBpc0FjdGl2ZShhcnRpY2xlUGF0aG5hbWU6IHN0cmluZywgY3VycmVudFBhdGg6IHN0cmluZykge1xuICBjb25zdCBub3JtYWxpemVkID0gYC8ke2N1cnJlbnRQYXRoLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYFxuICByZXR1cm4gYXJ0aWNsZVBhdGhuYW1lID09PSBub3JtYWxpemVkXG59XG5cbmZ1bmN0aW9uIE5hdk5vZGUocHJvcHM6IHtcbiAgbm9kZTogQXJ0aWNsZU5vZGVcbiAgY3VycmVudFBhdGg6IHN0cmluZ1xuICBkZXB0aD86IG51bWJlclxufSkge1xuICBjb25zdCB7IG5vZGUsIGN1cnJlbnRQYXRoLCBkZXB0aCA9IDAgfSA9IHByb3BzXG4gIGNvbnN0IEljb24gPSByZXNvbHZlQXJ0aWNsZUljb24obm9kZS5pY29uKVxuICBjb25zdCBhY3RpdmUgPSBpc0FjdGl2ZShub2RlLnBhdGgsIGN1cnJlbnRQYXRoKVxuICBjb25zdCBpc1N1YiA9IGRlcHRoID4gMFxuICBjb25zdCBJdGVtID0gaXNTdWIgPyBTaWRlYmFyTWVudVN1Ykl0ZW0gOiBTaWRlYmFyTWVudUl0ZW1cbiAgY29uc3QgQnV0dG9uID0gaXNTdWIgPyBTaWRlYmFyTWVudVN1YkJ1dHRvbiA6IFNpZGViYXJNZW51QnV0dG9uXG5cbiAgY29uc3QgbGluayA9IDxMaW5rIHRvPVwiLyRcIiBwYXJhbXM9e3NwbGF0Rm9yKG5vZGUucGF0aCl9IC8+XG4gIGNvbnN0IGxhYmVsID0gPHNwYW4+e25vZGUubGFiZWwgPz8gbm9kZS50aXRsZX08L3NwYW4+XG5cbiAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxJdGVtPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgaXNBY3RpdmU9e2FjdGl2ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e2FjdGl2ZSA/IFwiXCIgOiBcIm9wYWNpdHktNzVcIn1cbiAgICAgICAgICByZW5kZXI9e2xpbmt9XG4gICAgICAgID5cbiAgICAgICAgICB7IWlzU3ViICYmIDxJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+fVxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L0l0ZW0+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8SXRlbT5cbiAgICAgIDxDb2xsYXBzaWJsZSBkZWZhdWx0T3BlbiBjbGFzc05hbWU9XCJncm91cC9jb2xsYXBzaWJsZVwiPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgaXNBY3RpdmU9e2FjdGl2ZX1cbiAgICAgICAgICBjbGFzc05hbWU9e2FjdGl2ZSA/IFwiXCIgOiBcIm9wYWNpdHktNzVcIn1cbiAgICAgICAgICByZW5kZXI9e2xpbmt9XG4gICAgICAgID5cbiAgICAgICAgICB7IWlzU3ViICYmIDxJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+fVxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxDb2xsYXBzaWJsZVRyaWdnZXJcbiAgICAgICAgICBhcmlhLWxhYmVsPXtgVG9nZ2xlICR7bm9kZS5sYWJlbCA/PyBub2RlLnRpdGxlfSBzdWJtZW51YH1cbiAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0xIHRvcC0xLjUgcC0xIHJvdW5kZWQtbWQgaG92ZXI6Ymctc2lkZWJhci1hY2NlbnRcIlxuICAgICAgICA+XG4gICAgICAgICAgPENoZXZyb25SaWdodCBjbGFzc05hbWU9XCJzaXplLTMuNSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBncm91cC1kYXRhLVtvcGVuXS9jb2xsYXBzaWJsZTpyb3RhdGUtOTBcIiAvPlxuICAgICAgICA8L0NvbGxhcHNpYmxlVHJpZ2dlcj5cbiAgICAgICAgPENvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICA8U2lkZWJhck1lbnVTdWI+XG4gICAgICAgICAgICB7bm9kZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgICA8TmF2Tm9kZVxuICAgICAgICAgICAgICAgIGtleT17Y2hpbGQucGF0aH1cbiAgICAgICAgICAgICAgICBub2RlPXtjaGlsZH1cbiAgICAgICAgICAgICAgICBjdXJyZW50UGF0aD17Y3VycmVudFBhdGh9XG4gICAgICAgICAgICAgICAgZGVwdGg9e2RlcHRoICsgMX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvU2lkZWJhck1lbnVTdWI+XG4gICAgICAgIDwvQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICA8L0l0ZW0+XG4gIClcbn1cbiJdfQ==
|
|
@@ -3,6 +3,7 @@ import { config } from "livemark:virtual";
|
|
|
3
3
|
import { Link, useLocation, useMatch } from "@tanstack/react-router";
|
|
4
4
|
import { currentSection, sectionFirstArticle } from "../content/article.js";
|
|
5
5
|
import { DynamicIcon } from "../helpers/dynamic-icon.js";
|
|
6
|
+
import { prefixUrl } from "../helpers/prefix-url.js";
|
|
6
7
|
import { sectionIcon } from "../helpers/section.js";
|
|
7
8
|
import { SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from "../elements/sidebar.js";
|
|
8
9
|
function splatFor(pathname) {
|
|
@@ -23,15 +24,20 @@ export function SidebarSections() {
|
|
|
23
24
|
const hasDesktopItems = sections.some(s => s.position === "sidebar");
|
|
24
25
|
return (_jsxs(SidebarGroup, { className: hasDesktopItems ? undefined : "md:hidden", children: [
|
|
25
26
|
_jsx(SidebarGroupLabel, { className: "uppercase font-mono text-xs tracking-widest", children: "Sections" }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: sections.map(s => {
|
|
27
|
+
const mobileOnly = s.position !== "sidebar";
|
|
28
|
+
if (s.type === "external") {
|
|
29
|
+
return (_jsx(SidebarMenuItem, { className: mobileOnly ? "md:hidden" : undefined, children: _jsxs(SidebarMenuButton, { className: "opacity-75", render: _jsx("a", { href: prefixUrl(s.url, config.base) }), children: [
|
|
30
|
+
_jsx(DynamicIcon, { name: sectionIcon(s), className: "size-4" }), _jsx("span", { children: s.title })
|
|
31
|
+
] }) }, s.url));
|
|
32
|
+
}
|
|
26
33
|
const target = s.type === "blog" || s.type === "changelog"
|
|
27
34
|
? s.prefix
|
|
28
35
|
: (sectionFirstArticle.get(s.prefix) ?? s.prefix);
|
|
29
36
|
const active = section?.prefix === s.prefix;
|
|
30
|
-
const mobileOnly = s.position !== "sidebar";
|
|
31
37
|
return (_jsx(SidebarMenuItem, { className: mobileOnly ? "md:hidden" : undefined, children: _jsxs(SidebarMenuButton, { isActive: active, className: active ? "" : "opacity-75", render: _jsx(Link, { to: target === "/" ? "/" : "/$", params: target && target !== "/" ? splatFor(target) : {} }), children: [
|
|
32
38
|
_jsx(DynamicIcon, { name: sectionIcon(s), className: "size-4" }), _jsx("span", { children: s.title })
|
|
33
39
|
] }) }, s.prefix));
|
|
34
40
|
}) }) })
|
|
35
41
|
] }));
|
|
36
42
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhclNlY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2lkZWJhclNlY3Rpb25zLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTZCLENBQUE7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNuRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixlQUFlLEdBQ2hCLE1BQU0sd0JBQXlCLENBQUE7QUFFaEMsU0FBUyxRQUFRLENBQUMsUUFBZ0I7SUFDaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFBO0FBQ3JELENBQUM7QUFFRDs7d0VBRXdFO0FBQ3hFLE1BQU0sVUFBVSxlQUFlO0lBQzdCLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDakUsTUFBTSxPQUFPLEdBQUcsWUFBWTtRQUMxQixDQUFDLENB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LENBQ2hCLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcImxpdmVtYXJrOnZpcnR1YWxcIlxuaW1wb3J0IHsgTGluaywgdXNlTG9jYXRpb24sIHVzZU1hdGNoIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIlxuaW1wb3J0IHsgY3VycmVudFNlY3Rpb24sIHNlY3Rpb25GaXJzdEFydGljbGUgfSBmcm9tIFwiLi4vY29udGVudC9hcnRpY2xlLnRzXCJcbmltcG9ydCB7IER5bmFtaWNJY29uIH0gZnJvbSBcIi4uL2hlbHBlcnMvZHluYW1pYy1pY29uLnRzeFwiXG5pbXBvcnQgeyBwcmVmaXhVcmwgfSBmcm9tIFwiLi4vaGVscGVycy9wcmVmaXgtdXJsLnRzXCJcbmltcG9ydCB7IHNlY3Rpb25JY29uIH0gZnJvbSBcIi4uL2hlbHBlcnMvc2VjdGlvbi50c1wiXG5pbXBvcnQge1xuICBTaWRlYmFyR3JvdXAsXG4gIFNpZGViYXJHcm91cENvbnRlbnQsXG4gIFNpZGViYXJHcm91cExhYmVsLFxuICBTaWRlYmFyTWVudSxcbiAgU2lkZWJhck1lbnVCdXR0b24sXG4gIFNpZGViYXJNZW51SXRlbSxcbn0gZnJvbSBcIi4uL2VsZW1lbnRzL3NpZGViYXIudHN4XCJcblxuZnVuY3Rpb24gc3BsYXRGb3IocGF0aG5hbWU6IHN0cmluZykge1xuICByZXR1cm4geyBfc3BsYXQ6IHBhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKSB9XG59XG5cbi8qKiBTaGFyZWQgU2VjdGlvbnMgZ3JvdXAuIFJlbmRlcnMgc2lkZWJhci1wb3NpdGlvbmVkIHNlY3Rpb25zIGFsd2F5cywgYW5kXG4gKiBoZWFkZXItcG9zaXRpb25lZCBzZWN0aW9ucyBvbmx5IG9uIG1vYmlsZSAobW9iaWxlIGNvbGxhcHNlcyBhbGwgc2VjdGlvbnNcbiAqIGludG8gdGhlIHNpZGViYXIgc2luY2UgdGhlIGhlYWRlciBuYXYgc3RyaXAgaXMgaGlkZGVuIGJlbG93IGBtZGApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNpZGViYXJTZWN0aW9ucygpIHtcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VMb2NhdGlvbih7IHNlbGVjdDogbCA9PiBsLnBhdGhuYW1lIH0pXG4gIGNvbnN0IGFydGljbGVSb3V0ZSA9IHVzZU1hdGNoKHsgZnJvbTogXCIvJFwiLCBzaG91bGRUaHJvdzogZmFsc2UgfSlcbiAgY29uc3Qgc2VjdGlvbiA9IGFydGljbGVSb3V0ZVxuICAgID8gY3VycmVudFNlY3Rpb24oYC8ke3BhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYClcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCBzZWN0aW9ucyA9IGNvbmZpZy5zZWN0aW9ucyA/PyBbXVxuXG4gIGlmICghc2VjdGlvbnMubGVuZ3RoKSByZXR1cm4gbnVsbFxuICBjb25zdCBoYXNEZXNrdG9wSXRlbXMgPSBzZWN0aW9ucy5zb21lKHMgPT4gcy5wb3NpdGlvbiA9PT0gXCJzaWRlYmFyXCIpXG5cbiAgcmV0dXJuIChcbiAgICA8U2lkZWJhckdyb3VwIGNsYXNzTmFtZT17aGFzRGVza3RvcEl0ZW1zID8gdW5kZWZpbmVkIDogXCJtZDpoaWRkZW5cIn0+XG4gICAgICA8U2lkZWJhckdyb3VwTGFiZWwgY2xhc3NOYW1lPVwidXBwZXJjYXNlIGZvbnQtbW9ubyB0ZXh0LXhzIHRyYWNraW5nLXdpZGVzdFwiPlxuICAgICAgICBTZWN0aW9uc1xuICAgICAgPC9TaWRlYmFyR3JvdXBMYWJlbD5cbiAgICAgIDxTaWRlYmFyR3JvdXBDb250ZW50PlxuICAgICAgICA8U2lkZWJhck1lbnU+XG4gICAgICAgICAge3NlY3Rpb25zLm1hcChzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vYmlsZU9ubHkgPSBzLnBvc2l0aW9uICE9PSBcInNpZGViYXJcIlxuICAgICAgICAgICAgaWYgKHMudHlwZSA9PT0gXCJleHRlcm5hbFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFNpZGViYXJNZW51SXRlbVxuICAgICAgICAgICAgICAgICAga2V5PXtzLnVybH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17bW9iaWxlT25seSA/IFwibWQ6aGlkZGVuXCIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFNpZGViYXJNZW51QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm9wYWNpdHktNzVcIlxuICAgICAgICAgICAgICAgICAgICByZW5kZXI9ezxhIGhyZWY9e3ByZWZpeFVybChzLnVybCwgY29uZmlnLmJhc2UpfSAvPn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPER5bmFtaWNJY29uIG5hbWU9e3NlY3Rpb25JY29uKHMpfSBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57cy50aXRsZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L1NpZGViYXJNZW51QnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPVxuICAgICAgICAgICAgICBzLnR5cGUgPT09IFwiYmxvZ1wiIHx8IHMudHlwZSA9PT0gXCJjaGFuZ2Vsb2dcIlxuICAgICAgICAgICAgICAgID8gcy5wcmVmaXhcbiAgICAgICAgICAgICAgICA6IChzZWN0aW9uRmlyc3RBcnRpY2xlLmdldChzLnByZWZpeCkgPz8gcy5wcmVmaXgpXG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBzZWN0aW9uPy5wcmVmaXggPT09IHMucHJlZml4XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8U2lkZWJhck1lbnVJdGVtXG4gICAgICAgICAgICAgICAga2V5PXtzLnByZWZpeH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e21vYmlsZU9ubHkgPyBcIm1kOmhpZGRlblwiIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNpZGViYXJNZW51QnV0dG9uXG4gICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17YWN0aXZlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXthY3RpdmUgPyBcIlwiIDogXCJvcGFjaXR5LTc1XCJ9XG4gICAgICAgICAgICAgICAgICByZW5kZXI9e1xuICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgIHRvPXt0YXJnZXQgPT09IFwiL1wiID8gXCIvXCIgOiBcIi8kXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPXt0YXJnZXQgJiYgdGFyZ2V0ICE9PSBcIi9cIiA/IHNwbGF0Rm9yKHRhcmdldCkgOiB7fX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8RHluYW1pY0ljb24gbmFtZT17c2VjdGlvbkljb24ocyl9IGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57cy50aXRsZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9TaWRlYmFyTWVudUJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9TaWRlYmFyTWVudUl0ZW0+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvU2lkZWJhck1lbnU+XG4gICAgICA8L1NpZGViYXJHcm91cENvbnRlbnQ+XG4gICAgPC9TaWRlYmFyR3JvdXA+XG4gIClcbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ArticleNode } from "../models/article.ts";
|
|
2
2
|
/**
|
|
3
3
|
* Articles sorted by frontmatter `order`:
|
|
4
4
|
* positive values first (ascending), then unordered, then negative values
|
|
@@ -7,37 +7,37 @@ import type { ArticleGroup } from "../models/article.ts";
|
|
|
7
7
|
export declare const sortedArticles: any[];
|
|
8
8
|
/** The article whose path is `/`, if any (rendered in place at the root) */
|
|
9
9
|
export declare const homeArticle: any;
|
|
10
|
-
/** Sidebar
|
|
11
|
-
export declare const
|
|
12
|
-
/** Articles in depth-first order across
|
|
10
|
+
/** Sidebar tree derived from the article path hierarchy */
|
|
11
|
+
export declare const articleTree: ArticleNode[];
|
|
12
|
+
/** Articles in depth-first order across the tree (matches sidebar walk) */
|
|
13
13
|
export declare const flatArticles: string[];
|
|
14
14
|
/** The first article in sidebar order, used as the default landing page */
|
|
15
15
|
export declare const firstArticle: any;
|
|
16
|
-
/** Per-section article
|
|
17
|
-
export declare const
|
|
16
|
+
/** Per-section article tree, keyed by section prefix */
|
|
17
|
+
export declare const sectionArticleTrees: Map<string, ArticleNode[]>;
|
|
18
18
|
/** Per-section flat article lists, keyed by section prefix */
|
|
19
19
|
export declare const sectionFlatArticles: Map<string, string[]>;
|
|
20
20
|
/** Per-section first article path, keyed by section prefix */
|
|
21
21
|
export declare const sectionFirstArticle: Map<string, string | undefined>;
|
|
22
|
-
/** Find which config section an article path belongs to */
|
|
22
|
+
/** Find which routed config section an article path belongs to */
|
|
23
23
|
export declare function currentSection(path: string): {
|
|
24
24
|
icon?: string | undefined;
|
|
25
25
|
title: string;
|
|
26
|
-
prefix: string;
|
|
27
26
|
position: "header" | "sidebar";
|
|
28
27
|
type: "article";
|
|
28
|
+
prefix: string;
|
|
29
29
|
} | {
|
|
30
30
|
icon?: string | undefined;
|
|
31
31
|
title: string;
|
|
32
|
-
prefix: string;
|
|
33
32
|
position: "header" | "sidebar";
|
|
34
33
|
type: "blog";
|
|
34
|
+
prefix: string;
|
|
35
35
|
} | {
|
|
36
36
|
icon?: string | undefined;
|
|
37
37
|
title: string;
|
|
38
|
-
prefix: string;
|
|
39
38
|
position: "header" | "sidebar";
|
|
40
39
|
type: "changelog";
|
|
40
|
+
prefix: string;
|
|
41
41
|
source: string;
|
|
42
42
|
version?: boolean | undefined;
|
|
43
43
|
} | undefined;
|
package/build/content/article.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { config } from "livemark:virtual";
|
|
2
2
|
import { allArticles } from "content-collections";
|
|
3
|
-
import { buildArticleTree, flattenArticleTree
|
|
3
|
+
import { buildArticleTree, flattenArticleTree } from "../helpers/article.js";
|
|
4
4
|
import { matchSection, partitionBySection } from "../helpers/section.js";
|
|
5
5
|
/**
|
|
6
6
|
* Articles sorted by frontmatter `order`:
|
|
@@ -10,10 +10,10 @@ import { matchSection, partitionBySection } from "../helpers/section.js";
|
|
|
10
10
|
export const sortedArticles = [...allArticles].sort((a, b) => orderKey(a.order) - orderKey(b.order));
|
|
11
11
|
/** The article whose path is `/`, if any (rendered in place at the root) */
|
|
12
12
|
export const homeArticle = sortedArticles.find(a => a.path === "/");
|
|
13
|
-
/** Sidebar
|
|
14
|
-
export const
|
|
15
|
-
/** Articles in depth-first order across
|
|
16
|
-
export const flatArticles =
|
|
13
|
+
/** Sidebar tree derived from the article path hierarchy */
|
|
14
|
+
export const articleTree = buildArticleTree(sortedArticles);
|
|
15
|
+
/** Articles in depth-first order across the tree (matches sidebar walk) */
|
|
16
|
+
export const flatArticles = flattenArticleTree(articleTree);
|
|
17
17
|
/** The first article in sidebar order, used as the default landing page */
|
|
18
18
|
export const firstArticle = sortedArticles.find(a => a.path === flatArticles[0]);
|
|
19
19
|
function orderKey(order) {
|
|
@@ -24,32 +24,34 @@ function orderKey(order) {
|
|
|
24
24
|
return order;
|
|
25
25
|
}
|
|
26
26
|
const configSections = config.sections;
|
|
27
|
-
/**
|
|
28
|
-
|
|
27
|
+
/** Route-bound sections (everything except `external`). External sections
|
|
28
|
+
* are pure links — they have no `prefix` and don't claim a URL space. */
|
|
29
|
+
const routedSections = configSections?.filter(s => s.type !== "external") ?? [];
|
|
30
|
+
/** Per-section article tree, keyed by section prefix */
|
|
31
|
+
export const sectionArticleTrees = new Map();
|
|
29
32
|
/** Per-section flat article lists, keyed by section prefix */
|
|
30
33
|
export const sectionFlatArticles = new Map();
|
|
31
34
|
/** Per-section first article path, keyed by section prefix */
|
|
32
35
|
export const sectionFirstArticle = new Map();
|
|
33
|
-
if (
|
|
34
|
-
const sectionByPrefix = new Map(
|
|
35
|
-
const buckets = partitionBySection(sortedArticles,
|
|
36
|
+
if (routedSections.length) {
|
|
37
|
+
const sectionByPrefix = new Map(routedSections.map(s => [s.prefix, s]));
|
|
38
|
+
const buckets = partitionBySection(sortedArticles, routedSections);
|
|
36
39
|
for (const [key, bucket] of buckets) {
|
|
37
40
|
const section = sectionByPrefix.get(key);
|
|
38
41
|
const sorted = section?.type === "blog" || section?.type === "changelog"
|
|
39
42
|
? [...bucket].sort((a, b) => new Date(b.date ?? 0).getTime() - new Date(a.date ?? 0).getTime())
|
|
40
43
|
: bucket;
|
|
41
44
|
const tree = buildArticleTree(sorted);
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
sectionArticleGroups.set(key, groups);
|
|
45
|
+
const flat = flattenArticleTree(tree);
|
|
46
|
+
sectionArticleTrees.set(key, tree);
|
|
45
47
|
sectionFlatArticles.set(key, flat);
|
|
46
48
|
sectionFirstArticle.set(key, flat[0]);
|
|
47
49
|
}
|
|
48
50
|
}
|
|
49
|
-
/** Find which config section an article path belongs to */
|
|
51
|
+
/** Find which routed config section an article path belongs to */
|
|
50
52
|
export function currentSection(path) {
|
|
51
|
-
if (!
|
|
53
|
+
if (!routedSections.length)
|
|
52
54
|
return undefined;
|
|
53
|
-
return matchSection(path,
|
|
55
|
+
return matchSection(path, routedSections);
|
|
54
56
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb250ZW50L2FydGljbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUVqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFFeEU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUNqRCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FDaEQsQ0FBQTtBQUVELDRFQUE0RTtBQUM1RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7QUFFbkUsMkRBQTJEO0FBQzNELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQUUzRCwyRUFBMkU7QUFDM0UsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFBO0FBRTNELDJFQUEyRTtBQUMzRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFaEYsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM5QixJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFBO0lBQzNELElBQUksS0FBSyxHQUFHLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7SUFDckQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQTtBQUV0QzswRUFDMEU7QUFDMUUsTUFBTSxjQUFjLEdBQUcsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRSxDQUFBO0FBRS9FLHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQTtBQUVuRSw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUE7QUFFOUQsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUE4QixDQUFBO0FBRXhFLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzFCLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNsRSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN4QyxNQUFNLE1BQU0sR0FDVixPQUFPLEVBQUUsSUFBSSxLQUFLLE1BQU0sSUFBSSxPQUFPLEVBQUUsSUFBSSxLQUFLLFdBQVc7WUFDdkQsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ2QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDUCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQ3BFO1lBQ0gsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtRQUNaLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3JDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDbEMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNsQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7QUFDSCxDQUFDO0FBRUQsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBWTtJQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU07UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUM1QyxPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUE7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCJsaXZlbWFyazp2aXJ0dWFsXCJcbmltcG9ydCB7IGFsbEFydGljbGVzIH0gZnJvbSBcImNvbnRlbnQtY29sbGVjdGlvbnNcIlxuaW1wb3J0IHR5cGUgeyBBcnRpY2xlTm9kZSB9IGZyb20gXCIuLi9tb2RlbHMvYXJ0aWNsZS50c1wiXG5pbXBvcnQgeyBidWlsZEFydGljbGVUcmVlLCBmbGF0dGVuQXJ0aWNsZVRyZWUgfSBmcm9tIFwiLi4vaGVscGVycy9hcnRpY2xlLnRzXCJcbmltcG9ydCB7IG1hdGNoU2VjdGlvbiwgcGFydGl0aW9uQnlTZWN0aW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvc2VjdGlvbi50c1wiXG5cbi8qKlxuICogQXJ0aWNsZXMgc29ydGVkIGJ5IGZyb250bWF0dGVyIGBvcmRlcmA6XG4gKiBwb3NpdGl2ZSB2YWx1ZXMgZmlyc3QgKGFzY2VuZGluZyksIHRoZW4gdW5vcmRlcmVkLCB0aGVuIG5lZ2F0aXZlIHZhbHVlc1xuICogKHNvIGBvcmRlcjogLTFgIGxhbmRzIGF0IHRoZSB2ZXJ5IGVuZCwgYC0yYCBqdXN0IGJlZm9yZSBpdCwgYW5kIHNvIG9uKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnRlZEFydGljbGVzID0gWy4uLmFsbEFydGljbGVzXS5zb3J0KFxuICAoYSwgYikgPT4gb3JkZXJLZXkoYS5vcmRlcikgLSBvcmRlcktleShiLm9yZGVyKSxcbilcblxuLyoqIFRoZSBhcnRpY2xlIHdob3NlIHBhdGggaXMgYC9gLCBpZiBhbnkgKHJlbmRlcmVkIGluIHBsYWNlIGF0IHRoZSByb290KSAqL1xuZXhwb3J0IGNvbnN0IGhvbWVBcnRpY2xlID0gc29ydGVkQXJ0aWNsZXMuZmluZChhID0+IGEucGF0aCA9PT0gXCIvXCIpXG5cbi8qKiBTaWRlYmFyIHRyZWUgZGVyaXZlZCBmcm9tIHRoZSBhcnRpY2xlIHBhdGggaGllcmFyY2h5ICovXG5leHBvcnQgY29uc3QgYXJ0aWNsZVRyZWUgPSBidWlsZEFydGljbGVUcmVlKHNvcnRlZEFydGljbGVzKVxuXG4vKiogQXJ0aWNsZXMgaW4gZGVwdGgtZmlyc3Qgb3JkZXIgYWNyb3NzIHRoZSB0cmVlIChtYXRjaGVzIHNpZGViYXIgd2FsaykgKi9cbmV4cG9ydCBjb25zdCBmbGF0QXJ0aWNsZXMgPSBmbGF0dGVuQXJ0aWNsZVRyZWUoYXJ0aWNsZVRyZWUpXG5cbi8qKiBUaGUgZmlyc3QgYXJ0aWNsZSBpbiBzaWRlYmFyIG9yZGVyLCB1c2VkIGFzIHRoZSBkZWZhdWx0IGxhbmRpbmcgcGFnZSAqL1xuZXhwb3J0IGNvbnN0IGZpcnN0QXJ0aWNsZSA9IHNvcnRlZEFydGljbGVzLmZpbmQoYSA9PiBhLnBhdGggPT09IGZsYXRBcnRpY2xlc1swXSlcblxuZnVuY3Rpb24gb3JkZXJLZXkob3JkZXI/OiBudW1iZXIpIHtcbiAgaWYgKG9yZGVyID09PSB1bmRlZmluZWQpIHJldHVybiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAvIDJcbiAgaWYgKG9yZGVyIDwgMCkgcmV0dXJuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSICsgb3JkZXJcbiAgcmV0dXJuIG9yZGVyXG59XG5cbmNvbnN0IGNvbmZpZ1NlY3Rpb25zID0gY29uZmlnLnNlY3Rpb25zXG5cbi8qKiBSb3V0ZS1ib3VuZCBzZWN0aW9ucyAoZXZlcnl0aGluZyBleGNlcHQgYGV4dGVybmFsYCkuIEV4dGVybmFsIHNlY3Rpb25zXG4gKiAgYXJlIHB1cmUgbGlua3Mg4oCUIHRoZXkgaGF2ZSBubyBgcHJlZml4YCBhbmQgZG9uJ3QgY2xhaW0gYSBVUkwgc3BhY2UuICovXG5jb25zdCByb3V0ZWRTZWN0aW9ucyA9IGNvbmZpZ1NlY3Rpb25zPy5maWx0ZXIocyA9PiBzLnR5cGUgIT09IFwiZXh0ZXJuYWxcIikgPz8gW11cblxuLyoqIFBlci1zZWN0aW9uIGFydGljbGUgdHJlZSwga2V5ZWQgYnkgc2VjdGlvbiBwcmVmaXggKi9cbmV4cG9ydCBjb25zdCBzZWN0aW9uQXJ0aWNsZVRyZWVzID0gbmV3IE1hcDxzdHJpbmcsIEFydGljbGVOb2RlW10+KClcblxuLyoqIFBlci1zZWN0aW9uIGZsYXQgYXJ0aWNsZSBsaXN0cywga2V5ZWQgYnkgc2VjdGlvbiBwcmVmaXggKi9cbmV4cG9ydCBjb25zdCBzZWN0aW9uRmxhdEFydGljbGVzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpXG5cbi8qKiBQZXItc2VjdGlvbiBmaXJzdCBhcnRpY2xlIHBhdGgsIGtleWVkIGJ5IHNlY3Rpb24gcHJlZml4ICovXG5leHBvcnQgY29uc3Qgc2VjdGlvbkZpcnN0QXJ0aWNsZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KClcblxuaWYgKHJvdXRlZFNlY3Rpb25zLmxlbmd0aCkge1xuICBjb25zdCBzZWN0aW9uQnlQcmVmaXggPSBuZXcgTWFwKHJvdXRlZFNlY3Rpb25zLm1hcChzID0+IFtzLnByZWZpeCwgc10pKVxuICBjb25zdCBidWNrZXRzID0gcGFydGl0aW9uQnlTZWN0aW9uKHNvcnRlZEFydGljbGVzLCByb3V0ZWRTZWN0aW9ucylcbiAgZm9yIChjb25zdCBba2V5LCBidWNrZXRdIG9mIGJ1Y2tldHMpIHtcbiAgICBjb25zdCBzZWN0aW9uID0gc2VjdGlvbkJ5UHJlZml4LmdldChrZXkpXG4gICAgY29uc3Qgc29ydGVkID1cbiAgICAgIHNlY3Rpb24/LnR5cGUgPT09IFwiYmxvZ1wiIHx8IHNlY3Rpb24/LnR5cGUgPT09IFwiY2hhbmdlbG9nXCJcbiAgICAgICAgPyBbLi4uYnVja2V0XS5zb3J0KFxuICAgICAgICAgICAgKGEsIGIpID0+XG4gICAgICAgICAgICAgIG5ldyBEYXRlKGIuZGF0ZSA/PyAwKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmRhdGUgPz8gMCkuZ2V0VGltZSgpLFxuICAgICAgICAgIClcbiAgICAgICAgOiBidWNrZXRcbiAgICBjb25zdCB0cmVlID0gYnVpbGRBcnRpY2xlVHJlZShzb3J0ZWQpXG4gICAgY29uc3QgZmxhdCA9IGZsYXR0ZW5BcnRpY2xlVHJlZSh0cmVlKVxuICAgIHNlY3Rpb25BcnRpY2xlVHJlZXMuc2V0KGtleSwgdHJlZSlcbiAgICBzZWN0aW9uRmxhdEFydGljbGVzLnNldChrZXksIGZsYXQpXG4gICAgc2VjdGlvbkZpcnN0QXJ0aWNsZS5zZXQoa2V5LCBmbGF0WzBdKVxuICB9XG59XG5cbi8qKiBGaW5kIHdoaWNoIHJvdXRlZCBjb25maWcgc2VjdGlvbiBhbiBhcnRpY2xlIHBhdGggYmVsb25ncyB0byAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRTZWN0aW9uKHBhdGg6IHN0cmluZykge1xuICBpZiAoIXJvdXRlZFNlY3Rpb25zLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZFxuICByZXR1cm4gbWF0Y2hTZWN0aW9uKHBhdGgsIHJvdXRlZFNlY3Rpb25zKVxufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ArticleNode } from "../models/article.ts";
|
|
2
2
|
/** Build a tree from a flat sorted list of articles based on path hierarchy */
|
|
3
3
|
export declare function buildArticleTree(articles: {
|
|
4
4
|
path: string;
|
|
@@ -6,19 +6,5 @@ export declare function buildArticleTree(articles: {
|
|
|
6
6
|
label?: string;
|
|
7
7
|
icon: string;
|
|
8
8
|
}[]): ArticleNode[];
|
|
9
|
-
/**
|
|
10
|
-
* Partition root nodes into sidebar sections.
|
|
11
|
-
*
|
|
12
|
-
* Walks root nodes in sort order. A root whose article has a `group` field
|
|
13
|
-
* opens a new section; subsequent roots without `group` append to the current
|
|
14
|
-
* section. Roots before the first `group` field land in a single leading
|
|
15
|
-
* section with `name: undefined` (rendered without a label).
|
|
16
|
-
*
|
|
17
|
-
* `group` on non-root articles is ignored — only roots gate section boundaries.
|
|
18
|
-
*/
|
|
19
|
-
export declare function groupArticleTree(tree: ArticleNode[], articles: {
|
|
20
|
-
path: string;
|
|
21
|
-
group?: string;
|
|
22
|
-
}[]): ArticleGroup[];
|
|
23
9
|
/** Depth-first flatten of an article tree into a list of paths */
|
|
24
10
|
export declare function flattenArticleTree(nodes: ArticleNode[]): string[];
|
package/build/helpers/article.js
CHANGED
|
@@ -28,39 +28,6 @@ export function buildArticleTree(articles) {
|
|
|
28
28
|
}
|
|
29
29
|
return roots;
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Partition root nodes into sidebar sections.
|
|
33
|
-
*
|
|
34
|
-
* Walks root nodes in sort order. A root whose article has a `group` field
|
|
35
|
-
* opens a new section; subsequent roots without `group` append to the current
|
|
36
|
-
* section. Roots before the first `group` field land in a single leading
|
|
37
|
-
* section with `name: undefined` (rendered without a label).
|
|
38
|
-
*
|
|
39
|
-
* `group` on non-root articles is ignored — only roots gate section boundaries.
|
|
40
|
-
*/
|
|
41
|
-
export function groupArticleTree(tree, articles) {
|
|
42
|
-
const groupByPathname = new Map();
|
|
43
|
-
for (const article of articles) {
|
|
44
|
-
groupByPathname.set(article.path, article.group);
|
|
45
|
-
}
|
|
46
|
-
const sections = [];
|
|
47
|
-
let current;
|
|
48
|
-
for (const node of tree) {
|
|
49
|
-
const group = groupByPathname.get(node.path);
|
|
50
|
-
if (group) {
|
|
51
|
-
current = { name: group, nodes: [node] };
|
|
52
|
-
sections.push(current);
|
|
53
|
-
}
|
|
54
|
-
else if (current) {
|
|
55
|
-
current.nodes.push(node);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
current = { name: undefined, nodes: [node] };
|
|
59
|
-
sections.push(current);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return sections;
|
|
63
|
-
}
|
|
64
31
|
/** Depth-first flatten of an article tree into a list of paths */
|
|
65
32
|
export function flattenArticleTree(nodes) {
|
|
66
33
|
const result = [];
|
|
@@ -70,4 +37,4 @@ export function flattenArticleTree(nodes) {
|
|
|
70
37
|
}
|
|
71
38
|
return result;
|
|
72
39
|
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9oZWxwZXJzL2FydGljbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsK0VBQStFO0FBQy9FLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsUUFLRztJQUVILE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFBO0lBRTlDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3hCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFBO0lBRS9CLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdEMsSUFBSSxDQUFDLElBQUk7WUFBRSxTQUFRO1FBQ25CLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUMvQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzFDLE1BQU0sVUFBVSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ3pFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRS9ELElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQW9CO0lBQ3JELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQTtJQUMzQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBcnRpY2xlTm9kZSB9IGZyb20gXCIuLi9tb2RlbHMvYXJ0aWNsZS50c1wiXG5cbi8qKiBCdWlsZCBhIHRyZWUgZnJvbSBhIGZsYXQgc29ydGVkIGxpc3Qgb2YgYXJ0aWNsZXMgYmFzZWQgb24gcGF0aCBoaWVyYXJjaHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFydGljbGVUcmVlKFxuICBhcnRpY2xlczoge1xuICAgIHBhdGg6IHN0cmluZ1xuICAgIHRpdGxlOiBzdHJpbmdcbiAgICBsYWJlbD86IHN0cmluZ1xuICAgIGljb246IHN0cmluZ1xuICB9W10sXG4pIHtcbiAgY29uc3Qgbm9kZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBBcnRpY2xlTm9kZT4oKVxuXG4gIGZvciAoY29uc3QgYXJ0aWNsZSBvZiBhcnRpY2xlcykge1xuICAgIG5vZGVNYXAuc2V0KGFydGljbGUucGF0aCwge1xuICAgICAgcGF0aDogYXJ0aWNsZS5wYXRoLFxuICAgICAgdGl0bGU6IGFydGljbGUudGl0bGUsXG4gICAgICBsYWJlbDogYXJ0aWNsZS5sYWJlbCxcbiAgICAgIGljb246IGFydGljbGUuaWNvbixcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9KVxuICB9XG5cbiAgY29uc3Qgcm9vdHM6IEFydGljbGVOb2RlW10gPSBbXVxuXG4gIGZvciAoY29uc3QgYXJ0aWNsZSBvZiBhcnRpY2xlcykge1xuICAgIGNvbnN0IG5vZGUgPSBub2RlTWFwLmdldChhcnRpY2xlLnBhdGgpXG4gICAgaWYgKCFub2RlKSBjb250aW51ZVxuICAgIGNvbnN0IHRyaW1tZWQgPSBhcnRpY2xlLnBhdGgucmVwbGFjZSgvXFwvJC8sIFwiXCIpXG4gICAgY29uc3QgbGFzdFNsYXNoID0gdHJpbW1lZC5sYXN0SW5kZXhPZihcIi9cIilcbiAgICBjb25zdCBwYXJlbnRQYXRoID0gbGFzdFNsYXNoID4gMCA/IGAke3RyaW1tZWQuc2xpY2UoMCwgbGFzdFNsYXNoKX0vYCA6IFwiXCJcbiAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRQYXRoID8gbm9kZU1hcC5nZXQocGFyZW50UGF0aCkgOiB1bmRlZmluZWRcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RzLnB1c2gobm9kZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdHNcbn1cblxuLyoqIERlcHRoLWZpcnN0IGZsYXR0ZW4gb2YgYW4gYXJ0aWNsZSB0cmVlIGludG8gYSBsaXN0IG9mIHBhdGhzICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkFydGljbGVUcmVlKG5vZGVzOiBBcnRpY2xlTm9kZVtdKSB7XG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXVxuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICByZXN1bHQucHVzaChub2RlLnBhdGgpXG4gICAgcmVzdWx0LnB1c2goLi4uZmxhdHRlbkFydGljbGVUcmVlKG5vZGUuY2hpbGRyZW4pKVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cbiJdfQ==
|
package/build/helpers/section.js
CHANGED
|
@@ -2,6 +2,7 @@ const DEFAULT_ICONS = {
|
|
|
2
2
|
article: "book-open",
|
|
3
3
|
blog: "rss",
|
|
4
4
|
changelog: "history",
|
|
5
|
+
external: "external-link",
|
|
5
6
|
};
|
|
6
7
|
/** Return the section's icon, falling back to a type-based default */
|
|
7
8
|
export function sectionIcon(section) {
|
|
@@ -36,4 +37,4 @@ export function partitionBySection(articles, sections) {
|
|
|
36
37
|
}
|
|
37
38
|
return buckets;
|
|
38
39
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9oZWxwZXJzL3NlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxhQUFhLEdBQW9DO0lBQ3JELE9BQU8sRUFBRSxXQUFXO0lBQ3BCLElBQUksRUFBRSxLQUFLO0lBQ1gsU0FBUyxFQUFFLFNBQVM7SUFDcEIsUUFBUSxFQUFFLGVBQWU7Q0FDMUIsQ0FBQTtBQUVELHNFQUFzRTtBQUN0RSxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQXVDO0lBQ2pFLE9BQU8sT0FBTyxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLFlBQVksQ0FDMUIsV0FBbUIsRUFDbkIsUUFBYTtJQUViLElBQUksSUFBbUIsQ0FBQTtJQUN2QixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUE7SUFDZixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLElBQ0UsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFDL0IsQ0FBQztZQUNELElBQUksR0FBRyxPQUFPLENBQUE7WUFDZCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUE7UUFDakMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRCxzRkFBc0Y7QUFDdEYsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxRQUFhLEVBQ2IsUUFBOEI7SUFFOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQTtJQUN0QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3BELE1BQU0sR0FBRyxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksYUFBYSxDQUFBO1FBQzVDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdEIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQTtBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZWN0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9zZWN0aW9uLnRzXCJcblxuY29uc3QgREVGQVVMVF9JQ09OUzogUmVjb3JkPFNlY3Rpb25bXCJ0eXBlXCJdLCBzdHJpbmc+ID0ge1xuICBhcnRpY2xlOiBcImJvb2stb3BlblwiLFxuICBibG9nOiBcInJzc1wiLFxuICBjaGFuZ2Vsb2c6IFwiaGlzdG9yeVwiLFxuICBleHRlcm5hbDogXCJleHRlcm5hbC1saW5rXCIsXG59XG5cbi8qKiBSZXR1cm4gdGhlIHNlY3Rpb24ncyBpY29uLCBmYWxsaW5nIGJhY2sgdG8gYSB0eXBlLWJhc2VkIGRlZmF1bHQgKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uSWNvbihzZWN0aW9uOiBQaWNrPFNlY3Rpb24sIFwiaWNvblwiIHwgXCJ0eXBlXCI+KSB7XG4gIHJldHVybiBzZWN0aW9uLmljb24gPz8gREVGQVVMVF9JQ09OU1tzZWN0aW9uLnR5cGVdXG59XG5cbi8qKiBGaW5kIHRoZSBzZWN0aW9uIHdob3NlIHByZWZpeCBpcyB0aGUgbG9uZ2VzdCBwcmVmaXggb2YgdGhlIGFydGljbGUgcGF0aCAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoU2VjdGlvbjxTIGV4dGVuZHMgeyBwcmVmaXg6IHN0cmluZyB9PihcbiAgYXJ0aWNsZVBhdGg6IHN0cmluZyxcbiAgc2VjdGlvbnM6IFNbXSxcbik6IFMgfCB1bmRlZmluZWQge1xuICBsZXQgYmVzdDogUyB8IHVuZGVmaW5lZFxuICBsZXQgYmVzdExlbiA9IDBcbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgaWYgKFxuICAgICAgYXJ0aWNsZVBhdGguc3RhcnRzV2l0aChzZWN0aW9uLnByZWZpeCkgJiZcbiAgICAgIHNlY3Rpb24ucHJlZml4Lmxlbmd0aCA+IGJlc3RMZW5cbiAgICApIHtcbiAgICAgIGJlc3QgPSBzZWN0aW9uXG4gICAgICBiZXN0TGVuID0gc2VjdGlvbi5wcmVmaXgubGVuZ3RoXG4gICAgfVxuICB9XG4gIHJldHVybiBiZXN0XG59XG5cbi8qKiBTcGxpdCBhcnRpY2xlcyBpbnRvIHBlci1zZWN0aW9uIGJ1Y2tldHMuIFVubWF0Y2hlZCBhcnRpY2xlcyBnbyB0byBcIl9fZGVmYXVsdF9fXCIgKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aXRpb25CeVNlY3Rpb248VCBleHRlbmRzIHsgcGF0aDogc3RyaW5nIH0+KFxuICBhcnRpY2xlczogVFtdLFxuICBzZWN0aW9uczogeyBwcmVmaXg6IHN0cmluZyB9W10sXG4pOiBNYXA8c3RyaW5nLCBUW10+IHtcbiAgY29uc3QgYnVja2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBUW10+KClcbiAgZm9yIChjb25zdCBhcnRpY2xlIG9mIGFydGljbGVzKSB7XG4gICAgY29uc3Qgc2VjdGlvbiA9IG1hdGNoU2VjdGlvbihhcnRpY2xlLnBhdGgsIHNlY3Rpb25zKVxuICAgIGNvbnN0IGtleSA9IHNlY3Rpb24/LnByZWZpeCA/PyBcIl9fZGVmYXVsdF9fXCJcbiAgICBjb25zdCBidWNrZXQgPSBidWNrZXRzLmdldChrZXkpXG4gICAgaWYgKGJ1Y2tldCkge1xuICAgICAgYnVja2V0LnB1c2goYXJ0aWNsZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYnVja2V0cy5zZXQoa2V5LCBbYXJ0aWNsZV0pXG4gICAgfVxuICB9XG4gIHJldHVybiBidWNrZXRzXG59XG4iXX0=
|
|
@@ -10,7 +10,6 @@ export declare const Article: z.ZodObject<{
|
|
|
10
10
|
icon: z.ZodOptional<z.ZodString>;
|
|
11
11
|
order: z.ZodOptional<z.ZodNumber>;
|
|
12
12
|
path: z.ZodOptional<z.ZodString>;
|
|
13
|
-
group: z.ZodOptional<z.ZodString>;
|
|
14
13
|
sidebar: z.ZodDefault<z.ZodBoolean>;
|
|
15
14
|
toc: z.ZodDefault<z.ZodBoolean>;
|
|
16
15
|
image: z.ZodOptional<z.ZodString>;
|
|
@@ -48,11 +47,3 @@ export interface ArticleNode {
|
|
|
48
47
|
icon: string;
|
|
49
48
|
children: ArticleNode[];
|
|
50
49
|
}
|
|
51
|
-
/**
|
|
52
|
-
* A contiguous section of root articles sharing the same `group` label.
|
|
53
|
-
* `name: undefined` represents the leading ungrouped section (at most one).
|
|
54
|
-
*/
|
|
55
|
-
export interface ArticleGroup {
|
|
56
|
-
name?: string;
|
|
57
|
-
nodes: ArticleNode[];
|
|
58
|
-
}
|
package/build/models/article.js
CHANGED
|
@@ -8,7 +8,6 @@ export const Article = z.object({
|
|
|
8
8
|
icon: nonEmptyString.optional(),
|
|
9
9
|
order: z.number().optional(),
|
|
10
10
|
path: nonEmptyString.optional(),
|
|
11
|
-
group: nonEmptyString.optional(),
|
|
12
11
|
sidebar: z.boolean().default(true),
|
|
13
12
|
toc: z.boolean().default(true),
|
|
14
13
|
image: nonEmptyString.optional(),
|
|
@@ -18,4 +17,4 @@ export const Article = z.object({
|
|
|
18
17
|
sourceUrl: nonEmptyString.optional(),
|
|
19
18
|
sourceAction: z.enum(["edit", "view"]).default("edit"),
|
|
20
19
|
});
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9tb2RlbHMvYXJ0aWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUtwRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUNoQyxLQUFLLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUNoQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUN0QyxJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDbEMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzlCLEtBQUssRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNyRSxJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0NBQ3ZELENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IG5vbkVtcHR5U3RyaW5nIH0gZnJvbSBcIi4uL2hlbHBlcnMvbW9kZWwudHNcIlxuaW1wb3J0IHR5cGUgeyBUb2NJdGVtIH0gZnJvbSBcIi4vdG9jLnRzXCJcblxuLyoqIEZyb250bWF0dGVyIHNjaGVtYSBmb3IgYSBtYXJrZG93biBhcnRpY2xlLiAqL1xuZXhwb3J0IHR5cGUgQXJ0aWNsZSA9IHouaW5mZXI8dHlwZW9mIEFydGljbGU+XG5leHBvcnQgY29uc3QgQXJ0aWNsZSA9IHoub2JqZWN0KHtcbiAgY29udGVudDogei5zdHJpbmcoKSxcbiAgdGl0bGU6IG5vbkVtcHR5U3RyaW5nLm9wdGlvbmFsKCksXG4gIGxhYmVsOiBub25FbXB0eVN0cmluZy5vcHRpb25hbCgpLFxuICBkZXNjcmlwdGlvbjogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgaWNvbjogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgb3JkZXI6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgcGF0aDogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgc2lkZWJhcjogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgdG9jOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICBpbWFnZTogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgYXV0aG9yOiB6LnVuaW9uKFtub25FbXB0eVN0cmluZywgei5hcnJheShub25FbXB0eVN0cmluZyldKS5vcHRpb25hbCgpLFxuICBkYXRlOiBub25FbXB0eVN0cmluZy5vcHRpb25hbCgpLFxuICB0YWdzOiB6LmFycmF5KG5vbkVtcHR5U3RyaW5nKS5vcHRpb25hbCgpLFxuICBzb3VyY2VVcmw6IG5vbkVtcHR5U3RyaW5nLm9wdGlvbmFsKCksXG4gIHNvdXJjZUFjdGlvbjogei5lbnVtKFtcImVkaXRcIiwgXCJ2aWV3XCJdKS5kZWZhdWx0KFwiZWRpdFwiKSxcbn0pXG5cbi8qKiBQcm9jZXNzZWQgYXJ0aWNsZSByZWFkeSBmb3IgcGFnZSByZW5kZXJpbmcgKHJlc3VsdCBvZiBjb250ZW50LWNvbGxlY3Rpb25zIHRyYW5zZm9ybSkuICovXG5leHBvcnQgaW50ZXJmYWNlIEFydGljbGVWaWV3IHtcbiAgcGF0aDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgY29udGVudDogc3RyaW5nXG4gIGZpbGU6IHN0cmluZ1xuICBtZHg6IHN0cmluZ1xuICB0b2NJdGVtczogVG9jSXRlbVtdXG4gIHRvYz86IGJvb2xlYW5cbiAgbGFzdFVwZGF0ZWQ/OiBzdHJpbmdcbiAgc2lkZWJhcj86IGJvb2xlYW5cbiAgaW1hZ2U/OiBzdHJpbmdcbiAgYXV0aG9yPzogc3RyaW5nIHwgc3RyaW5nW11cbiAgZGF0ZT86IHN0cmluZ1xuICB0YWdzPzogc3RyaW5nW11cbiAgc291cmNlVXJsPzogc3RyaW5nXG4gIHNvdXJjZUFjdGlvbj86IFwiZWRpdFwiIHwgXCJ2aWV3XCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcnRpY2xlTm9kZSB7XG4gIHBhdGg6IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIGxhYmVsPzogc3RyaW5nXG4gIGljb246IHN0cmluZ1xuICBjaGlsZHJlbjogQXJ0aWNsZU5vZGVbXVxufVxuIl19
|
package/build/models/config.d.ts
CHANGED
|
@@ -104,32 +104,41 @@ export declare const UserConfig: z.ZodObject<{
|
|
|
104
104
|
sections: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
105
105
|
icon: z.ZodOptional<z.ZodString>;
|
|
106
106
|
title: z.ZodString;
|
|
107
|
-
prefix: z.ZodString;
|
|
108
107
|
position: z.ZodDefault<z.ZodEnum<{
|
|
109
108
|
header: "header";
|
|
110
109
|
sidebar: "sidebar";
|
|
111
110
|
}>>;
|
|
112
111
|
type: z.ZodLiteral<"article">;
|
|
112
|
+
prefix: z.ZodString;
|
|
113
113
|
}, z.core.$strip>, z.ZodObject<{
|
|
114
114
|
icon: z.ZodOptional<z.ZodString>;
|
|
115
115
|
title: z.ZodString;
|
|
116
|
-
prefix: z.ZodString;
|
|
117
116
|
position: z.ZodDefault<z.ZodEnum<{
|
|
118
117
|
header: "header";
|
|
119
118
|
sidebar: "sidebar";
|
|
120
119
|
}>>;
|
|
121
120
|
type: z.ZodLiteral<"blog">;
|
|
121
|
+
prefix: z.ZodString;
|
|
122
122
|
}, z.core.$strip>, z.ZodObject<{
|
|
123
123
|
icon: z.ZodOptional<z.ZodString>;
|
|
124
124
|
title: z.ZodString;
|
|
125
|
-
prefix: z.ZodString;
|
|
126
125
|
position: z.ZodDefault<z.ZodEnum<{
|
|
127
126
|
header: "header";
|
|
128
127
|
sidebar: "sidebar";
|
|
129
128
|
}>>;
|
|
130
129
|
type: z.ZodLiteral<"changelog">;
|
|
130
|
+
prefix: z.ZodString;
|
|
131
131
|
source: z.ZodString;
|
|
132
132
|
version: z.ZodOptional<z.ZodBoolean>;
|
|
133
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
134
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
135
|
+
title: z.ZodString;
|
|
136
|
+
position: z.ZodDefault<z.ZodEnum<{
|
|
137
|
+
header: "header";
|
|
138
|
+
sidebar: "sidebar";
|
|
139
|
+
}>>;
|
|
140
|
+
type: z.ZodLiteral<"external">;
|
|
141
|
+
url: z.ZodString;
|
|
133
142
|
}, z.core.$strip>], "type">>>>;
|
|
134
143
|
patches: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
135
144
|
file: z.ZodString;
|
|
@@ -140,7 +149,6 @@ export declare const UserConfig: z.ZodObject<{
|
|
|
140
149
|
icon: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
141
150
|
order: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
142
151
|
path: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
143
|
-
group: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
144
152
|
sidebar: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
145
153
|
toc: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
146
154
|
image: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
@@ -178,32 +186,41 @@ export declare const WebsiteConfig: z.ZodObject<{
|
|
|
178
186
|
sections: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
179
187
|
icon: z.ZodOptional<z.ZodString>;
|
|
180
188
|
title: z.ZodString;
|
|
181
|
-
prefix: z.ZodString;
|
|
182
189
|
position: z.ZodDefault<z.ZodEnum<{
|
|
183
190
|
header: "header";
|
|
184
191
|
sidebar: "sidebar";
|
|
185
192
|
}>>;
|
|
186
193
|
type: z.ZodLiteral<"article">;
|
|
194
|
+
prefix: z.ZodString;
|
|
187
195
|
}, z.core.$strip>, z.ZodObject<{
|
|
188
196
|
icon: z.ZodOptional<z.ZodString>;
|
|
189
197
|
title: z.ZodString;
|
|
190
|
-
prefix: z.ZodString;
|
|
191
198
|
position: z.ZodDefault<z.ZodEnum<{
|
|
192
199
|
header: "header";
|
|
193
200
|
sidebar: "sidebar";
|
|
194
201
|
}>>;
|
|
195
202
|
type: z.ZodLiteral<"blog">;
|
|
203
|
+
prefix: z.ZodString;
|
|
196
204
|
}, z.core.$strip>, z.ZodObject<{
|
|
197
205
|
icon: z.ZodOptional<z.ZodString>;
|
|
198
206
|
title: z.ZodString;
|
|
199
|
-
prefix: z.ZodString;
|
|
200
207
|
position: z.ZodDefault<z.ZodEnum<{
|
|
201
208
|
header: "header";
|
|
202
209
|
sidebar: "sidebar";
|
|
203
210
|
}>>;
|
|
204
211
|
type: z.ZodLiteral<"changelog">;
|
|
212
|
+
prefix: z.ZodString;
|
|
205
213
|
source: z.ZodString;
|
|
206
214
|
version: z.ZodOptional<z.ZodBoolean>;
|
|
215
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
216
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
217
|
+
title: z.ZodString;
|
|
218
|
+
position: z.ZodDefault<z.ZodEnum<{
|
|
219
|
+
header: "header";
|
|
220
|
+
sidebar: "sidebar";
|
|
221
|
+
}>>;
|
|
222
|
+
type: z.ZodLiteral<"external">;
|
|
223
|
+
url: z.ZodString;
|
|
207
224
|
}, z.core.$strip>], "type">>>>;
|
|
208
225
|
}, z.core.$strip>;
|
|
209
226
|
/**
|
|
@@ -313,32 +330,41 @@ export declare const Config: z.ZodObject<{
|
|
|
313
330
|
sections: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
314
331
|
icon: z.ZodOptional<z.ZodString>;
|
|
315
332
|
title: z.ZodString;
|
|
316
|
-
prefix: z.ZodString;
|
|
317
333
|
position: z.ZodDefault<z.ZodEnum<{
|
|
318
334
|
header: "header";
|
|
319
335
|
sidebar: "sidebar";
|
|
320
336
|
}>>;
|
|
321
337
|
type: z.ZodLiteral<"article">;
|
|
338
|
+
prefix: z.ZodString;
|
|
322
339
|
}, z.core.$strip>, z.ZodObject<{
|
|
323
340
|
icon: z.ZodOptional<z.ZodString>;
|
|
324
341
|
title: z.ZodString;
|
|
325
|
-
prefix: z.ZodString;
|
|
326
342
|
position: z.ZodDefault<z.ZodEnum<{
|
|
327
343
|
header: "header";
|
|
328
344
|
sidebar: "sidebar";
|
|
329
345
|
}>>;
|
|
330
346
|
type: z.ZodLiteral<"blog">;
|
|
347
|
+
prefix: z.ZodString;
|
|
331
348
|
}, z.core.$strip>, z.ZodObject<{
|
|
332
349
|
icon: z.ZodOptional<z.ZodString>;
|
|
333
350
|
title: z.ZodString;
|
|
334
|
-
prefix: z.ZodString;
|
|
335
351
|
position: z.ZodDefault<z.ZodEnum<{
|
|
336
352
|
header: "header";
|
|
337
353
|
sidebar: "sidebar";
|
|
338
354
|
}>>;
|
|
339
355
|
type: z.ZodLiteral<"changelog">;
|
|
356
|
+
prefix: z.ZodString;
|
|
340
357
|
source: z.ZodString;
|
|
341
358
|
version: z.ZodOptional<z.ZodBoolean>;
|
|
359
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
360
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
361
|
+
title: z.ZodString;
|
|
362
|
+
position: z.ZodDefault<z.ZodEnum<{
|
|
363
|
+
header: "header";
|
|
364
|
+
sidebar: "sidebar";
|
|
365
|
+
}>>;
|
|
366
|
+
type: z.ZodLiteral<"external">;
|
|
367
|
+
url: z.ZodString;
|
|
342
368
|
}, z.core.$strip>], "type">>>>;
|
|
343
369
|
patches: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
344
370
|
file: z.ZodString;
|
|
@@ -349,7 +375,6 @@ export declare const Config: z.ZodObject<{
|
|
|
349
375
|
icon: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
350
376
|
order: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
351
377
|
path: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
352
|
-
group: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
353
378
|
sidebar: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
354
379
|
toc: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
355
380
|
image: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
package/build/models/patch.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ export declare const Patch: z.ZodObject<{
|
|
|
10
10
|
icon: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
11
11
|
order: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
12
12
|
path: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
13
|
-
group: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
14
13
|
sidebar: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
15
14
|
toc: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
16
15
|
image: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
@@ -4,39 +4,51 @@ export type ArticleSection = z.infer<typeof ArticleSection>;
|
|
|
4
4
|
export declare const ArticleSection: z.ZodObject<{
|
|
5
5
|
icon: z.ZodOptional<z.ZodString>;
|
|
6
6
|
title: z.ZodString;
|
|
7
|
-
prefix: z.ZodString;
|
|
8
7
|
position: z.ZodDefault<z.ZodEnum<{
|
|
9
8
|
header: "header";
|
|
10
9
|
sidebar: "sidebar";
|
|
11
10
|
}>>;
|
|
12
11
|
type: z.ZodLiteral<"article">;
|
|
12
|
+
prefix: z.ZodString;
|
|
13
13
|
}, z.core.$strip>;
|
|
14
14
|
/** Blog section: date-sorted posts with tags and index. */
|
|
15
15
|
export type BlogSection = z.infer<typeof BlogSection>;
|
|
16
16
|
export declare const BlogSection: z.ZodObject<{
|
|
17
17
|
icon: z.ZodOptional<z.ZodString>;
|
|
18
18
|
title: z.ZodString;
|
|
19
|
-
prefix: z.ZodString;
|
|
20
19
|
position: z.ZodDefault<z.ZodEnum<{
|
|
21
20
|
header: "header";
|
|
22
21
|
sidebar: "sidebar";
|
|
23
22
|
}>>;
|
|
24
23
|
type: z.ZodLiteral<"blog">;
|
|
24
|
+
prefix: z.ZodString;
|
|
25
25
|
}, z.core.$strip>;
|
|
26
26
|
/** Changelog section: single file or GitHub releases, split per version. */
|
|
27
27
|
export type ChangelogSection = z.infer<typeof ChangelogSection>;
|
|
28
28
|
export declare const ChangelogSection: z.ZodObject<{
|
|
29
29
|
icon: z.ZodOptional<z.ZodString>;
|
|
30
30
|
title: z.ZodString;
|
|
31
|
-
prefix: z.ZodString;
|
|
32
31
|
position: z.ZodDefault<z.ZodEnum<{
|
|
33
32
|
header: "header";
|
|
34
33
|
sidebar: "sidebar";
|
|
35
34
|
}>>;
|
|
36
35
|
type: z.ZodLiteral<"changelog">;
|
|
36
|
+
prefix: z.ZodString;
|
|
37
37
|
source: z.ZodString;
|
|
38
38
|
version: z.ZodOptional<z.ZodBoolean>;
|
|
39
39
|
}, z.core.$strip>;
|
|
40
|
+
/** External section: renders as a link to an arbitrary URL. */
|
|
41
|
+
export type ExternalSection = z.infer<typeof ExternalSection>;
|
|
42
|
+
export declare const ExternalSection: z.ZodObject<{
|
|
43
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
44
|
+
title: z.ZodString;
|
|
45
|
+
position: z.ZodDefault<z.ZodEnum<{
|
|
46
|
+
header: "header";
|
|
47
|
+
sidebar: "sidebar";
|
|
48
|
+
}>>;
|
|
49
|
+
type: z.ZodLiteral<"external">;
|
|
50
|
+
url: z.ZodString;
|
|
51
|
+
}, z.core.$strip>;
|
|
40
52
|
/**
|
|
41
53
|
* A site section. Discriminated on `type`.
|
|
42
54
|
* When `type` is omitted, it defaults to "article" so plain
|
|
@@ -46,30 +58,39 @@ export type Section = z.infer<typeof Section>;
|
|
|
46
58
|
export declare const Section: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
47
59
|
icon: z.ZodOptional<z.ZodString>;
|
|
48
60
|
title: z.ZodString;
|
|
49
|
-
prefix: z.ZodString;
|
|
50
61
|
position: z.ZodDefault<z.ZodEnum<{
|
|
51
62
|
header: "header";
|
|
52
63
|
sidebar: "sidebar";
|
|
53
64
|
}>>;
|
|
54
65
|
type: z.ZodLiteral<"article">;
|
|
66
|
+
prefix: z.ZodString;
|
|
55
67
|
}, z.core.$strip>, z.ZodObject<{
|
|
56
68
|
icon: z.ZodOptional<z.ZodString>;
|
|
57
69
|
title: z.ZodString;
|
|
58
|
-
prefix: z.ZodString;
|
|
59
70
|
position: z.ZodDefault<z.ZodEnum<{
|
|
60
71
|
header: "header";
|
|
61
72
|
sidebar: "sidebar";
|
|
62
73
|
}>>;
|
|
63
74
|
type: z.ZodLiteral<"blog">;
|
|
75
|
+
prefix: z.ZodString;
|
|
64
76
|
}, z.core.$strip>, z.ZodObject<{
|
|
65
77
|
icon: z.ZodOptional<z.ZodString>;
|
|
66
78
|
title: z.ZodString;
|
|
67
|
-
prefix: z.ZodString;
|
|
68
79
|
position: z.ZodDefault<z.ZodEnum<{
|
|
69
80
|
header: "header";
|
|
70
81
|
sidebar: "sidebar";
|
|
71
82
|
}>>;
|
|
72
83
|
type: z.ZodLiteral<"changelog">;
|
|
84
|
+
prefix: z.ZodString;
|
|
73
85
|
source: z.ZodString;
|
|
74
86
|
version: z.ZodOptional<z.ZodBoolean>;
|
|
87
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
88
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
89
|
+
title: z.ZodString;
|
|
90
|
+
position: z.ZodDefault<z.ZodEnum<{
|
|
91
|
+
header: "header";
|
|
92
|
+
sidebar: "sidebar";
|
|
93
|
+
}>>;
|
|
94
|
+
type: z.ZodLiteral<"external">;
|
|
95
|
+
url: z.ZodString;
|
|
75
96
|
}, z.core.$strip>], "type">>;
|
package/build/models/section.js
CHANGED
|
@@ -2,25 +2,36 @@ import { z } from "zod";
|
|
|
2
2
|
const BaseSection = z.object({
|
|
3
3
|
icon: z.string().optional(),
|
|
4
4
|
title: z.string(),
|
|
5
|
-
prefix: z.string(),
|
|
6
5
|
position: z.enum(["header", "sidebar"]).default("header"),
|
|
7
6
|
});
|
|
8
7
|
export const ArticleSection = BaseSection.extend({
|
|
9
8
|
type: z.literal("article"),
|
|
9
|
+
prefix: z.string(),
|
|
10
10
|
});
|
|
11
11
|
export const BlogSection = BaseSection.extend({
|
|
12
12
|
type: z.literal("blog"),
|
|
13
|
+
prefix: z.string(),
|
|
13
14
|
});
|
|
14
15
|
export const ChangelogSection = BaseSection.extend({
|
|
15
16
|
type: z.literal("changelog"),
|
|
17
|
+
prefix: z.string(),
|
|
16
18
|
source: z.string(),
|
|
17
19
|
version: z.boolean().optional(),
|
|
18
20
|
});
|
|
21
|
+
export const ExternalSection = BaseSection.extend({
|
|
22
|
+
type: z.literal("external"),
|
|
23
|
+
url: z.string(),
|
|
24
|
+
});
|
|
19
25
|
export const Section = z.preprocess(input => {
|
|
20
26
|
if (input === null || typeof input !== "object" || Array.isArray(input)) {
|
|
21
27
|
return input;
|
|
22
28
|
}
|
|
23
29
|
const record = input;
|
|
24
30
|
return "type" in record ? record : { ...record, type: "article" };
|
|
25
|
-
}, z.discriminatedUnion("type", [
|
|
26
|
-
|
|
31
|
+
}, z.discriminatedUnion("type", [
|
|
32
|
+
ArticleSection,
|
|
33
|
+
BlogSection,
|
|
34
|
+
ChangelogSection,
|
|
35
|
+
ExternalSection,
|
|
36
|
+
]));
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9tb2RlbHMvc2VjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBRXZCLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDakIsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0NBQzFELENBQUMsQ0FBQTtBQUlGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQy9DLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUMxQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUNuQixDQUFDLENBQUE7QUFJRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDdkIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDbkIsQ0FBQyxDQUFBO0FBSUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDNUIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDaEMsQ0FBQyxDQUFBO0FBSUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDaEQsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQzNCLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0NBQ2hCLENBQUMsQ0FBQTtBQVFGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsVUFBVSxDQUNqQyxLQUFLLENBQUMsRUFBRTtJQUNOLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hFLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLEtBQWdDLENBQUE7SUFDL0MsT0FBTyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFBO0FBQ25FLENBQUMsRUFDRCxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO0lBQzNCLGNBQWM7SUFDZCxXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLGVBQWU7Q0FDaEIsQ0FBQyxDQUNILENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbmNvbnN0IEJhc2VTZWN0aW9uID0gei5vYmplY3Qoe1xuICBpY29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRpdGxlOiB6LnN0cmluZygpLFxuICBwb3NpdGlvbjogei5lbnVtKFtcImhlYWRlclwiLCBcInNpZGViYXJcIl0pLmRlZmF1bHQoXCJoZWFkZXJcIiksXG59KVxuXG4vKiogRGVmYXVsdCBzZWN0aW9uOiByZW5kZXJzIGFydGljbGVzLiAqL1xuZXhwb3J0IHR5cGUgQXJ0aWNsZVNlY3Rpb24gPSB6LmluZmVyPHR5cGVvZiBBcnRpY2xlU2VjdGlvbj5cbmV4cG9ydCBjb25zdCBBcnRpY2xlU2VjdGlvbiA9IEJhc2VTZWN0aW9uLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImFydGljbGVcIiksXG4gIHByZWZpeDogei5zdHJpbmcoKSxcbn0pXG5cbi8qKiBCbG9nIHNlY3Rpb246IGRhdGUtc29ydGVkIHBvc3RzIHdpdGggdGFncyBhbmQgaW5kZXguICovXG5leHBvcnQgdHlwZSBCbG9nU2VjdGlvbiA9IHouaW5mZXI8dHlwZW9mIEJsb2dTZWN0aW9uPlxuZXhwb3J0IGNvbnN0IEJsb2dTZWN0aW9uID0gQmFzZVNlY3Rpb24uZXh0ZW5kKHtcbiAgdHlwZTogei5saXRlcmFsKFwiYmxvZ1wiKSxcbiAgcHJlZml4OiB6LnN0cmluZygpLFxufSlcblxuLyoqIENoYW5nZWxvZyBzZWN0aW9uOiBzaW5nbGUgZmlsZSBvciBHaXRIdWIgcmVsZWFzZXMsIHNwbGl0IHBlciB2ZXJzaW9uLiAqL1xuZXhwb3J0IHR5cGUgQ2hhbmdlbG9nU2VjdGlvbiA9IHouaW5mZXI8dHlwZW9mIENoYW5nZWxvZ1NlY3Rpb24+XG5leHBvcnQgY29uc3QgQ2hhbmdlbG9nU2VjdGlvbiA9IEJhc2VTZWN0aW9uLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImNoYW5nZWxvZ1wiKSxcbiAgcHJlZml4OiB6LnN0cmluZygpLFxuICBzb3VyY2U6IHouc3RyaW5nKCksXG4gIHZlcnNpb246IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KVxuXG4vKiogRXh0ZXJuYWwgc2VjdGlvbjogcmVuZGVycyBhcyBhIGxpbmsgdG8gYW4gYXJiaXRyYXJ5IFVSTC4gKi9cbmV4cG9ydCB0eXBlIEV4dGVybmFsU2VjdGlvbiA9IHouaW5mZXI8dHlwZW9mIEV4dGVybmFsU2VjdGlvbj5cbmV4cG9ydCBjb25zdCBFeHRlcm5hbFNlY3Rpb24gPSBCYXNlU2VjdGlvbi5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJleHRlcm5hbFwiKSxcbiAgdXJsOiB6LnN0cmluZygpLFxufSlcblxuLyoqXG4gKiBBIHNpdGUgc2VjdGlvbi4gRGlzY3JpbWluYXRlZCBvbiBgdHlwZWAuXG4gKiBXaGVuIGB0eXBlYCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBcImFydGljbGVcIiBzbyBwbGFpblxuICogYHsgdGl0bGUsIHByZWZpeCB9YCBlbnRyaWVzIGtlZXAgd29ya2luZy5cbiAqL1xuZXhwb3J0IHR5cGUgU2VjdGlvbiA9IHouaW5mZXI8dHlwZW9mIFNlY3Rpb24+XG5leHBvcnQgY29uc3QgU2VjdGlvbiA9IHoucHJlcHJvY2VzcyhcbiAgaW5wdXQgPT4ge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCB0eXBlb2YgaW5wdXQgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgIHJldHVybiBpbnB1dFxuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSBpbnB1dCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHJldHVybiBcInR5cGVcIiBpbiByZWNvcmQgPyByZWNvcmQgOiB7IC4uLnJlY29yZCwgdHlwZTogXCJhcnRpY2xlXCIgfVxuICB9LFxuICB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICAgIEFydGljbGVTZWN0aW9uLFxuICAgIEJsb2dTZWN0aW9uLFxuICAgIENoYW5nZWxvZ1NlY3Rpb24sXG4gICAgRXh0ZXJuYWxTZWN0aW9uLFxuICBdKSxcbilcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -69,6 +69,21 @@ export function Layout(props: {
|
|
|
69
69
|
sections
|
|
70
70
|
.filter(section => section.position === "header")
|
|
71
71
|
.map(section => {
|
|
72
|
+
if (section.type === "external") {
|
|
73
|
+
return (
|
|
74
|
+
<a
|
|
75
|
+
key={section.url}
|
|
76
|
+
href={prefixUrl(section.url, config.base)}
|
|
77
|
+
className="inline-flex items-center gap-1.5 text-foreground opacity-80 hover:opacity-100 transition-opacity"
|
|
78
|
+
>
|
|
79
|
+
<DynamicIcon
|
|
80
|
+
name={sectionIcon(section)}
|
|
81
|
+
className="size-3.5"
|
|
82
|
+
/>
|
|
83
|
+
<span>{section.title}</span>
|
|
84
|
+
</a>
|
|
85
|
+
)
|
|
86
|
+
}
|
|
72
87
|
const isActive = activeSection?.prefix === section.prefix
|
|
73
88
|
const target =
|
|
74
89
|
section.type === "blog" || section.type === "changelog"
|
|
@@ -2,9 +2,9 @@ import { config } from "livemark:virtual"
|
|
|
2
2
|
import { Link, useLocation } from "@tanstack/react-router"
|
|
3
3
|
import { ChevronRight } from "lucide-react"
|
|
4
4
|
import {
|
|
5
|
-
|
|
5
|
+
articleTree,
|
|
6
6
|
currentSection,
|
|
7
|
-
|
|
7
|
+
sectionArticleTrees,
|
|
8
8
|
} from "../content/article.ts"
|
|
9
9
|
import {
|
|
10
10
|
Collapsible,
|
|
@@ -31,30 +31,23 @@ export function SidebarArticles() {
|
|
|
31
31
|
|
|
32
32
|
const configSections = config.sections
|
|
33
33
|
const section = currentSection(`/${pathname.replace(/^\/|\/$/g, "")}/`)
|
|
34
|
-
const
|
|
35
|
-
? (
|
|
36
|
-
|
|
37
|
-
: articleGroups
|
|
34
|
+
const tree = configSections?.length
|
|
35
|
+
? (sectionArticleTrees.get(section?.prefix ?? "__default__") ?? articleTree)
|
|
36
|
+
: articleTree
|
|
38
37
|
|
|
39
38
|
return (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
))}
|
|
53
|
-
</SidebarMenu>
|
|
54
|
-
</SidebarGroupContent>
|
|
55
|
-
</SidebarGroup>
|
|
56
|
-
))}
|
|
57
|
-
</>
|
|
39
|
+
<SidebarGroup>
|
|
40
|
+
<SidebarGroupLabel className="uppercase font-mono text-xs tracking-widest">
|
|
41
|
+
Articles
|
|
42
|
+
</SidebarGroupLabel>
|
|
43
|
+
<SidebarGroupContent>
|
|
44
|
+
<SidebarMenu>
|
|
45
|
+
{tree.map(node => (
|
|
46
|
+
<NavNode key={node.path} node={node} currentPath={pathname} />
|
|
47
|
+
))}
|
|
48
|
+
</SidebarMenu>
|
|
49
|
+
</SidebarGroupContent>
|
|
50
|
+
</SidebarGroup>
|
|
58
51
|
)
|
|
59
52
|
}
|
|
60
53
|
|
|
@@ -2,6 +2,7 @@ import { config } from "livemark:virtual"
|
|
|
2
2
|
import { Link, useLocation, useMatch } from "@tanstack/react-router"
|
|
3
3
|
import { currentSection, sectionFirstArticle } from "../content/article.ts"
|
|
4
4
|
import { DynamicIcon } from "../helpers/dynamic-icon.tsx"
|
|
5
|
+
import { prefixUrl } from "../helpers/prefix-url.ts"
|
|
5
6
|
import { sectionIcon } from "../helpers/section.ts"
|
|
6
7
|
import {
|
|
7
8
|
SidebarGroup,
|
|
@@ -38,12 +39,28 @@ export function SidebarSections() {
|
|
|
38
39
|
<SidebarGroupContent>
|
|
39
40
|
<SidebarMenu>
|
|
40
41
|
{sections.map(s => {
|
|
42
|
+
const mobileOnly = s.position !== "sidebar"
|
|
43
|
+
if (s.type === "external") {
|
|
44
|
+
return (
|
|
45
|
+
<SidebarMenuItem
|
|
46
|
+
key={s.url}
|
|
47
|
+
className={mobileOnly ? "md:hidden" : undefined}
|
|
48
|
+
>
|
|
49
|
+
<SidebarMenuButton
|
|
50
|
+
className="opacity-75"
|
|
51
|
+
render={<a href={prefixUrl(s.url, config.base)} />}
|
|
52
|
+
>
|
|
53
|
+
<DynamicIcon name={sectionIcon(s)} className="size-4" />
|
|
54
|
+
<span>{s.title}</span>
|
|
55
|
+
</SidebarMenuButton>
|
|
56
|
+
</SidebarMenuItem>
|
|
57
|
+
)
|
|
58
|
+
}
|
|
41
59
|
const target =
|
|
42
60
|
s.type === "blog" || s.type === "changelog"
|
|
43
61
|
? s.prefix
|
|
44
62
|
: (sectionFirstArticle.get(s.prefix) ?? s.prefix)
|
|
45
63
|
const active = section?.prefix === s.prefix
|
|
46
|
-
const mobileOnly = s.position !== "sidebar"
|
|
47
64
|
return (
|
|
48
65
|
<SidebarMenuItem
|
|
49
66
|
key={s.prefix}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { config } from "livemark:virtual"
|
|
2
2
|
import { allArticles } from "content-collections"
|
|
3
|
-
import type {
|
|
4
|
-
import {
|
|
5
|
-
buildArticleTree,
|
|
6
|
-
flattenArticleTree,
|
|
7
|
-
groupArticleTree,
|
|
8
|
-
} from "../helpers/article.ts"
|
|
3
|
+
import type { ArticleNode } from "../models/article.ts"
|
|
4
|
+
import { buildArticleTree, flattenArticleTree } from "../helpers/article.ts"
|
|
9
5
|
import { matchSection, partitionBySection } from "../helpers/section.ts"
|
|
10
6
|
|
|
11
7
|
/**
|
|
@@ -20,16 +16,11 @@ export const sortedArticles = [...allArticles].sort(
|
|
|
20
16
|
/** The article whose path is `/`, if any (rendered in place at the root) */
|
|
21
17
|
export const homeArticle = sortedArticles.find(a => a.path === "/")
|
|
22
18
|
|
|
23
|
-
/** Sidebar
|
|
24
|
-
export const
|
|
25
|
-
buildArticleTree(sortedArticles),
|
|
26
|
-
sortedArticles,
|
|
27
|
-
)
|
|
19
|
+
/** Sidebar tree derived from the article path hierarchy */
|
|
20
|
+
export const articleTree = buildArticleTree(sortedArticles)
|
|
28
21
|
|
|
29
|
-
/** Articles in depth-first order across
|
|
30
|
-
export const flatArticles =
|
|
31
|
-
flattenArticleTree(group.nodes),
|
|
32
|
-
)
|
|
22
|
+
/** Articles in depth-first order across the tree (matches sidebar walk) */
|
|
23
|
+
export const flatArticles = flattenArticleTree(articleTree)
|
|
33
24
|
|
|
34
25
|
/** The first article in sidebar order, used as the default landing page */
|
|
35
26
|
export const firstArticle = sortedArticles.find(a => a.path === flatArticles[0])
|
|
@@ -42,8 +33,12 @@ function orderKey(order?: number) {
|
|
|
42
33
|
|
|
43
34
|
const configSections = config.sections
|
|
44
35
|
|
|
45
|
-
/**
|
|
46
|
-
|
|
36
|
+
/** Route-bound sections (everything except `external`). External sections
|
|
37
|
+
* are pure links — they have no `prefix` and don't claim a URL space. */
|
|
38
|
+
const routedSections = configSections?.filter(s => s.type !== "external") ?? []
|
|
39
|
+
|
|
40
|
+
/** Per-section article tree, keyed by section prefix */
|
|
41
|
+
export const sectionArticleTrees = new Map<string, ArticleNode[]>()
|
|
47
42
|
|
|
48
43
|
/** Per-section flat article lists, keyed by section prefix */
|
|
49
44
|
export const sectionFlatArticles = new Map<string, string[]>()
|
|
@@ -51,9 +46,9 @@ export const sectionFlatArticles = new Map<string, string[]>()
|
|
|
51
46
|
/** Per-section first article path, keyed by section prefix */
|
|
52
47
|
export const sectionFirstArticle = new Map<string, string | undefined>()
|
|
53
48
|
|
|
54
|
-
if (
|
|
55
|
-
const sectionByPrefix = new Map(
|
|
56
|
-
const buckets = partitionBySection(sortedArticles,
|
|
49
|
+
if (routedSections.length) {
|
|
50
|
+
const sectionByPrefix = new Map(routedSections.map(s => [s.prefix, s]))
|
|
51
|
+
const buckets = partitionBySection(sortedArticles, routedSections)
|
|
57
52
|
for (const [key, bucket] of buckets) {
|
|
58
53
|
const section = sectionByPrefix.get(key)
|
|
59
54
|
const sorted =
|
|
@@ -64,16 +59,15 @@ if (configSections?.length) {
|
|
|
64
59
|
)
|
|
65
60
|
: bucket
|
|
66
61
|
const tree = buildArticleTree(sorted)
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
sectionArticleGroups.set(key, groups)
|
|
62
|
+
const flat = flattenArticleTree(tree)
|
|
63
|
+
sectionArticleTrees.set(key, tree)
|
|
70
64
|
sectionFlatArticles.set(key, flat)
|
|
71
65
|
sectionFirstArticle.set(key, flat[0])
|
|
72
66
|
}
|
|
73
67
|
}
|
|
74
68
|
|
|
75
|
-
/** Find which config section an article path belongs to */
|
|
69
|
+
/** Find which routed config section an article path belongs to */
|
|
76
70
|
export function currentSection(path: string) {
|
|
77
|
-
if (!
|
|
78
|
-
return matchSection(path,
|
|
71
|
+
if (!routedSections.length) return undefined
|
|
72
|
+
return matchSection(path, routedSections)
|
|
79
73
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ArticleNode } from "../models/article.ts"
|
|
2
2
|
|
|
3
3
|
/** Build a tree from a flat sorted list of articles based on path hierarchy */
|
|
4
4
|
export function buildArticleTree(
|
|
@@ -41,44 +41,6 @@ export function buildArticleTree(
|
|
|
41
41
|
return roots
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
/**
|
|
45
|
-
* Partition root nodes into sidebar sections.
|
|
46
|
-
*
|
|
47
|
-
* Walks root nodes in sort order. A root whose article has a `group` field
|
|
48
|
-
* opens a new section; subsequent roots without `group` append to the current
|
|
49
|
-
* section. Roots before the first `group` field land in a single leading
|
|
50
|
-
* section with `name: undefined` (rendered without a label).
|
|
51
|
-
*
|
|
52
|
-
* `group` on non-root articles is ignored — only roots gate section boundaries.
|
|
53
|
-
*/
|
|
54
|
-
export function groupArticleTree(
|
|
55
|
-
tree: ArticleNode[],
|
|
56
|
-
articles: { path: string; group?: string }[],
|
|
57
|
-
): ArticleGroup[] {
|
|
58
|
-
const groupByPathname = new Map<string, string | undefined>()
|
|
59
|
-
for (const article of articles) {
|
|
60
|
-
groupByPathname.set(article.path, article.group)
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const sections: ArticleGroup[] = []
|
|
64
|
-
let current: ArticleGroup | undefined
|
|
65
|
-
|
|
66
|
-
for (const node of tree) {
|
|
67
|
-
const group = groupByPathname.get(node.path)
|
|
68
|
-
if (group) {
|
|
69
|
-
current = { name: group, nodes: [node] }
|
|
70
|
-
sections.push(current)
|
|
71
|
-
} else if (current) {
|
|
72
|
-
current.nodes.push(node)
|
|
73
|
-
} else {
|
|
74
|
-
current = { name: undefined, nodes: [node] }
|
|
75
|
-
sections.push(current)
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return sections
|
|
80
|
-
}
|
|
81
|
-
|
|
82
44
|
/** Depth-first flatten of an article tree into a list of paths */
|
|
83
45
|
export function flattenArticleTree(nodes: ArticleNode[]) {
|
|
84
46
|
const result: string[] = []
|
package/source/models/article.ts
CHANGED
|
@@ -12,7 +12,6 @@ export const Article = z.object({
|
|
|
12
12
|
icon: nonEmptyString.optional(),
|
|
13
13
|
order: z.number().optional(),
|
|
14
14
|
path: nonEmptyString.optional(),
|
|
15
|
-
group: nonEmptyString.optional(),
|
|
16
15
|
sidebar: z.boolean().default(true),
|
|
17
16
|
toc: z.boolean().default(true),
|
|
18
17
|
image: nonEmptyString.optional(),
|
|
@@ -49,12 +48,3 @@ export interface ArticleNode {
|
|
|
49
48
|
icon: string
|
|
50
49
|
children: ArticleNode[]
|
|
51
50
|
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* A contiguous section of root articles sharing the same `group` label.
|
|
55
|
-
* `name: undefined` represents the leading ungrouped section (at most one).
|
|
56
|
-
*/
|
|
57
|
-
export interface ArticleGroup {
|
|
58
|
-
name?: string
|
|
59
|
-
nodes: ArticleNode[]
|
|
60
|
-
}
|
package/source/models/section.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { z } from "zod"
|
|
|
3
3
|
const BaseSection = z.object({
|
|
4
4
|
icon: z.string().optional(),
|
|
5
5
|
title: z.string(),
|
|
6
|
-
prefix: z.string(),
|
|
7
6
|
position: z.enum(["header", "sidebar"]).default("header"),
|
|
8
7
|
})
|
|
9
8
|
|
|
@@ -11,22 +10,32 @@ const BaseSection = z.object({
|
|
|
11
10
|
export type ArticleSection = z.infer<typeof ArticleSection>
|
|
12
11
|
export const ArticleSection = BaseSection.extend({
|
|
13
12
|
type: z.literal("article"),
|
|
13
|
+
prefix: z.string(),
|
|
14
14
|
})
|
|
15
15
|
|
|
16
16
|
/** Blog section: date-sorted posts with tags and index. */
|
|
17
17
|
export type BlogSection = z.infer<typeof BlogSection>
|
|
18
18
|
export const BlogSection = BaseSection.extend({
|
|
19
19
|
type: z.literal("blog"),
|
|
20
|
+
prefix: z.string(),
|
|
20
21
|
})
|
|
21
22
|
|
|
22
23
|
/** Changelog section: single file or GitHub releases, split per version. */
|
|
23
24
|
export type ChangelogSection = z.infer<typeof ChangelogSection>
|
|
24
25
|
export const ChangelogSection = BaseSection.extend({
|
|
25
26
|
type: z.literal("changelog"),
|
|
27
|
+
prefix: z.string(),
|
|
26
28
|
source: z.string(),
|
|
27
29
|
version: z.boolean().optional(),
|
|
28
30
|
})
|
|
29
31
|
|
|
32
|
+
/** External section: renders as a link to an arbitrary URL. */
|
|
33
|
+
export type ExternalSection = z.infer<typeof ExternalSection>
|
|
34
|
+
export const ExternalSection = BaseSection.extend({
|
|
35
|
+
type: z.literal("external"),
|
|
36
|
+
url: z.string(),
|
|
37
|
+
})
|
|
38
|
+
|
|
30
39
|
/**
|
|
31
40
|
* A site section. Discriminated on `type`.
|
|
32
41
|
* When `type` is omitted, it defaults to "article" so plain
|
|
@@ -41,5 +50,10 @@ export const Section = z.preprocess(
|
|
|
41
50
|
const record = input as Record<string, unknown>
|
|
42
51
|
return "type" in record ? record : { ...record, type: "article" }
|
|
43
52
|
},
|
|
44
|
-
z.discriminatedUnion("type", [
|
|
53
|
+
z.discriminatedUnion("type", [
|
|
54
|
+
ArticleSection,
|
|
55
|
+
BlogSection,
|
|
56
|
+
ChangelogSection,
|
|
57
|
+
ExternalSection,
|
|
58
|
+
]),
|
|
45
59
|
)
|