polen 0.10.0-next.6 → 0.10.0-next.8

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.
Files changed (48) hide show
  1. package/build/api/content/$$.d.ts +1 -0
  2. package/build/api/content/$$.d.ts.map +1 -1
  3. package/build/api/content/$$.js +1 -0
  4. package/build/api/content/$$.js.map +1 -1
  5. package/build/api/content/navbar.d.ts +10 -0
  6. package/build/api/content/navbar.d.ts.map +1 -0
  7. package/build/api/content/navbar.js +45 -0
  8. package/build/api/content/navbar.js.map +1 -0
  9. package/build/api/content/sidebar.d.ts +85 -5
  10. package/build/api/content/sidebar.d.ts.map +1 -1
  11. package/build/api/content/sidebar.js +151 -75
  12. package/build/api/content/sidebar.js.map +1 -1
  13. package/build/api/vite/plugins/pages.d.ts +1 -4
  14. package/build/api/vite/plugins/pages.d.ts.map +1 -1
  15. package/build/api/vite/plugins/pages.js +4 -42
  16. package/build/api/vite/plugins/pages.js.map +1 -1
  17. package/build/lib/file-router/scan.d.ts.map +1 -1
  18. package/build/lib/file-router/scan.js +6 -1
  19. package/build/lib/file-router/scan.js.map +1 -1
  20. package/build/sandbox.js +17 -2
  21. package/build/sandbox.js.map +1 -1
  22. package/build/template/components/HamburgerMenu.d.ts +9 -0
  23. package/build/template/components/HamburgerMenu.d.ts.map +1 -0
  24. package/build/template/components/HamburgerMenu.jsx +53 -0
  25. package/build/template/components/HamburgerMenu.jsx.map +1 -0
  26. package/build/template/components/NotFound.d.ts +2 -0
  27. package/build/template/components/NotFound.d.ts.map +1 -0
  28. package/build/template/components/NotFound.jsx +26 -0
  29. package/build/template/components/NotFound.jsx.map +1 -0
  30. package/build/template/components/ThemeToggle.jsx +2 -2
  31. package/build/template/routes/root.d.ts.map +1 -1
  32. package/build/template/routes/root.jsx +40 -30
  33. package/build/template/routes/root.jsx.map +1 -1
  34. package/package.json +1 -1
  35. package/src/api/content/$$.ts +1 -0
  36. package/src/api/content/navbar.test.ts +55 -0
  37. package/src/api/content/navbar.ts +61 -0
  38. package/src/api/content/sidebar.test.ts +297 -0
  39. package/src/api/content/sidebar.ts +235 -88
  40. package/src/api/vite/plugins/pages.ts +5 -51
  41. package/src/lib/file-router/scan.ts +7 -1
  42. package/src/lib/version-history/index.test.ts +12 -4
  43. package/src/sandbox.ts +20 -1
  44. package/src/template/components/HamburgerMenu.tsx +96 -0
  45. package/src/template/components/NotFound.tsx +28 -0
  46. package/src/template/components/ThemeToggle.tsx +5 -5
  47. package/src/template/contexts/ThemeContext.tsx +4 -4
  48. package/src/template/routes/root.tsx +59 -42
@@ -1,4 +1,5 @@
1
1
  export * from './metadata.ts';
2
+ export * from './navbar.ts';
2
3
  export * from './page.ts';
3
4
  export * from './scan.ts';
4
5
  export * from './sidebar.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"$$.d.ts","sourceRoot":"","sources":["../../../src/api/content/$$.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"$$.d.ts","sourceRoot":"","sources":["../../../src/api/content/$$.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA"}
@@ -1,4 +1,5 @@
1
1
  export * from "./metadata.js";
2
+ export * from "./navbar.js";
2
3
  export * from "./page.js";
3
4
  export * from "./scan.js";
4
5
  export * from "./sidebar.js";
@@ -1 +1 @@
1
- {"version":3,"file":"$$.js","sourceRoot":"","sources":["../../../src/api/content/$$.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"$$.js","sourceRoot":"","sources":["../../../src/api/content/$$.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { Page } from './page.ts';
2
+ export interface NavbarItem {
3
+ pathExp: string;
4
+ title: string;
5
+ }
6
+ /**
7
+ * Generate navbar items from a list of pages
8
+ */
9
+ export declare const createNavbar: (pages: Page[]) => NavbarItem[];
10
+ //# sourceMappingURL=navbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navbar.d.ts","sourceRoot":"","sources":["../../../src/api/content/navbar.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,IAAI,EAAE,KAAG,UAAU,EAiDtD,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { Str } from '@wollybeard/kit';
2
+ /**
3
+ * Generate navbar items from a list of pages
4
+ */
5
+ export const createNavbar = (pages) => {
6
+ const navbarItems = [];
7
+ // Group pages by their top-level directory/segment
8
+ const topLevelGroups = new Map();
9
+ pages.forEach(page => {
10
+ // Skip hidden pages
11
+ if (page.metadata.hidden)
12
+ return;
13
+ const firstSegment = page.route.logical.path[0];
14
+ if (firstSegment) {
15
+ if (!topLevelGroups.has(firstSegment)) {
16
+ topLevelGroups.set(firstSegment, []);
17
+ }
18
+ topLevelGroups.get(firstSegment).push(page);
19
+ }
20
+ });
21
+ // Add each top-level group to navbar
22
+ topLevelGroups.forEach((pages, segment) => {
23
+ // For directories, check if there's an index page
24
+ const indexPage = pages.find(p => p.route.logical.path.length === 1
25
+ && p.route.file.path.relative.name === 'index');
26
+ // For single non-index files at top level
27
+ const singlePage = pages.length === 1 && pages[0].route.logical.path.length === 1
28
+ && pages[0].route.file.path.relative.name !== 'index';
29
+ // Include in navbar if:
30
+ // 1. It's a directory with an index page, OR
31
+ // 2. It's a single top-level page (not index)
32
+ if (indexPage || singlePage) {
33
+ const title = Str.titlizeSlug(segment);
34
+ const pathExp = `/${segment}`;
35
+ navbarItems.push({
36
+ pathExp,
37
+ title,
38
+ });
39
+ }
40
+ });
41
+ // Sort navbar items alphabetically for consistency
42
+ navbarItems.sort((a, b) => a.title.localeCompare(b.title));
43
+ return navbarItems;
44
+ };
45
+ //# sourceMappingURL=navbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navbar.js","sourceRoot":"","sources":["../../../src/api/content/navbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAQrC;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAgB,EAAE;IAC1D,MAAM,WAAW,GAAiB,EAAE,CAAA;IAEpC,mDAAmD;IACnD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEhD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,oBAAoB;QACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAM;QAEhC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/C,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtC,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;YACtC,CAAC;YACD,cAAc,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,qCAAqC;IACrC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxC,kDAAkD;QAClD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC/B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;eAC9B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAC/C,CAAA;QAED,0CAA0C;QAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;eAC7E,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAA;QAExD,wBAAwB;QACxB,6CAA6C;QAC7C,8CAA8C;QAC9C,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YACtC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;YAE7B,WAAW,CAAC,IAAI,CAAC;gBACf,OAAO;gBACP,KAAK;aACN,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,mDAAmD;IACnD,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAE1D,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA"}
@@ -1,24 +1,104 @@
1
- import { FileRouter } from '#lib/file-router/index';
2
- import { Tree } from '@wollybeard/kit';
3
- import type { Page } from './page.ts';
1
+ import type { ScanResult } from './scan.ts';
2
+ /**
3
+ * Represents a complete sidebar structure with navigation items.
4
+ * This is the main data structure used to render sidebars in the UI.
5
+ */
4
6
  export interface Sidebar {
7
+ /** Array of navigation items that can be either direct links or sections containing multiple links */
5
8
  items: Item[];
6
9
  }
10
+ /**
11
+ * A sidebar navigation item that can be either a direct link or a section containing multiple links.
12
+ * @see {@link ItemLink} for direct navigation links
13
+ * @see {@link ItemSection} for grouped navigation sections
14
+ */
7
15
  export type Item = ItemLink | ItemSection;
16
+ /**
17
+ * A direct navigation link in the sidebar.
18
+ * Used for pages that don't have child pages.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const link: ItemLink = {
23
+ * type: 'ItemLink',
24
+ * title: 'Getting Started',
25
+ * pathExp: 'guide/getting-started'
26
+ * }
27
+ * ```
28
+ */
8
29
  export interface ItemLink {
30
+ /** Discriminator for TypeScript union types */
9
31
  type: `ItemLink`;
32
+ /** Display title for the link (e.g., "Getting Started") */
10
33
  title: string;
34
+ /** Path expression relative to the base path, without leading slash (e.g., "guide/getting-started") */
11
35
  pathExp: string;
12
36
  }
37
+ /**
38
+ * A collapsible section in the sidebar that groups related links.
39
+ * Used for directories that contain multiple pages.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * const section: ItemSection = {
44
+ * type: 'ItemSection',
45
+ * title: 'Guide',
46
+ * pathExp: 'guide',
47
+ * isLinkToo: true, // Has an index page
48
+ * links: [
49
+ * { type: 'ItemLink', title: 'Installation', pathExp: 'guide/installation' },
50
+ * { type: 'ItemLink', title: 'Configuration', pathExp: 'guide/configuration' }
51
+ * ]
52
+ * }
53
+ * ```
54
+ */
13
55
  export interface ItemSection {
56
+ /** Discriminator for TypeScript union types */
14
57
  type: `ItemSection`;
58
+ /** Display title for the section (e.g., "Guide", "API Reference") */
15
59
  title: string;
60
+ /** Path expression for the section's index page, if it exists (e.g., "guide") */
16
61
  pathExp: string;
62
+ /** Whether this section also acts as a link (true if the directory has an index page) */
17
63
  isLinkToo: boolean;
64
+ /** Child navigation links within this section */
18
65
  links: ItemLink[];
19
66
  }
20
67
  /**
21
- * Build sidebar from page tree structure
68
+ * A mapping of route paths to their corresponding sidebar structures.
69
+ * Used to store different sidebars for different sections of a site.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * const sidebarIndex: SidebarIndex = {
74
+ * '/guide': { items: [...] }, // Sidebar for /guide section
75
+ * '/api': { items: [...] }, // Sidebar for /api section
76
+ * '/reference': { items: [...] } // Sidebar for /reference section
77
+ * }
78
+ * ```
79
+ */
80
+ export type SidebarIndex = Record<string, Sidebar>;
81
+ /**
82
+ * Builds sidebars for all top-level directories that contain both an index page and nested content.
83
+ *
84
+ * This function analyzes a scan result to identify which directories should have sidebars.
85
+ * A directory gets a sidebar if it meets these criteria:
86
+ * 1. It's a top-level directory (e.g., /guide, /api, /docs)
87
+ * 2. It has an index page (e.g., /guide/index.md)
88
+ * 3. It has nested pages (e.g., /guide/getting-started.md, /guide/configuration.md)
89
+ *
90
+ * @param scanResult - The result of scanning pages, containing both a flat list and tree structure
91
+ * @returns A mapping of route paths to sidebar structures
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * const scanResult = await Content.scan({ dir: './pages' })
96
+ * const sidebars = buildSidebarIndex(scanResult)
97
+ * // Returns: {
98
+ * // '/guide': { items: [...] },
99
+ * // '/api': { items: [...] }
100
+ * // }
101
+ * ```
22
102
  */
23
- export declare const buildFromPageTree: (pageTree: Tree.Tree<Page>, basePath: FileRouter.Path) => Sidebar;
103
+ export declare const buildSidebarIndex: (scanResult: ScanResult) => SidebarIndex;
24
104
  //# sourceMappingURL=sidebar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/api/content/sidebar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,IAAI,EAAE,CAAA;CACd;AAED,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEzC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,aAAa,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAA;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,UAAU,CAAC,IAAI,KAAG,OAgBxF,CAAA"}
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/api/content/sidebar.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3C;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,sGAAsG;IACtG,KAAK,EAAE,IAAI,EAAE,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEzC;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,QAAQ;IACvB,+CAA+C;IAC/C,IAAI,EAAE,UAAU,CAAA;IAChB,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAA;IACb,uGAAuG;IACvG,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,IAAI,EAAE,aAAa,CAAA;IACnB,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAA;IACb,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAA;IACf,yFAAyF;IACzF,SAAS,EAAE,OAAO,CAAA;IAClB,iDAAiD;IACjD,KAAK,EAAE,QAAQ,EAAE,CAAA;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAElD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,iBAAiB,GAAI,YAAY,UAAU,KAAG,YAqC1D,CAAA"}
@@ -1,90 +1,166 @@
1
1
  import { FileRouter } from '#lib/file-router/index';
2
- import { Tree } from '@wollybeard/kit';
3
2
  import { Str } from '@wollybeard/kit';
4
3
  /**
5
- * Build sidebar from page tree structure
4
+ * Builds sidebars for all top-level directories that contain both an index page and nested content.
5
+ *
6
+ * This function analyzes a scan result to identify which directories should have sidebars.
7
+ * A directory gets a sidebar if it meets these criteria:
8
+ * 1. It's a top-level directory (e.g., /guide, /api, /docs)
9
+ * 2. It has an index page (e.g., /guide/index.md)
10
+ * 3. It has nested pages (e.g., /guide/getting-started.md, /guide/configuration.md)
11
+ *
12
+ * @param scanResult - The result of scanning pages, containing both a flat list and tree structure
13
+ * @returns A mapping of route paths to sidebar structures
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const scanResult = await Content.scan({ dir: './pages' })
18
+ * const sidebars = buildSidebarIndex(scanResult)
19
+ * // Returns: {
20
+ * // '/guide': { items: [...] },
21
+ * // '/api': { items: [...] }
22
+ * // }
23
+ * ```
6
24
  */
7
- export const buildFromPageTree = (pageTree, basePath) => {
8
- const links = [];
9
- const sections = [];
10
- // Process only the children of the root node
11
- if (pageTree.root) {
12
- for (const child of pageTree.root.children) {
13
- processPageNode(child, basePath, [], links, sections);
25
+ export const buildSidebarIndex = (scanResult) => {
26
+ const sidebarIndex = {};
27
+ // Group pages by their top-level directory
28
+ const pagesByTopLevelDir = new Map();
29
+ for (const page of scanResult.list) {
30
+ const topLevelDir = page.route.logical.path[0];
31
+ // Skip pages that are not in a directory or are hidden
32
+ if (!topLevelDir || page.metadata.hidden)
33
+ continue;
34
+ if (!pagesByTopLevelDir.has(topLevelDir)) {
35
+ pagesByTopLevelDir.set(topLevelDir, []);
14
36
  }
37
+ pagesByTopLevelDir.get(topLevelDir).push(page);
15
38
  }
16
- const items = [...links, ...sections];
17
- return {
18
- items,
19
- };
20
- };
21
- const processPageNode = (node, basePath, parentPath, links, sections) => {
22
- const page = node.value;
23
- const routeName = page.route.logical.path.slice(-1)[0] || 'index';
24
- const currentPath = [...parentPath, routeName];
25
- // If this page has children, treat it as a section
26
- if (node.children.length > 0) {
27
- const sectionPath = [...basePath, ...currentPath];
28
- const sectionPathExp = FileRouter.pathToExpression(sectionPath);
29
- const sectionTitle = Str.titlizeSlug(routeName);
30
- // Check if any child is an index page
31
- const hasIndexChild = node.children.some(child => isIndexPage(child.value));
32
- const section = {
33
- type: `ItemSection`,
34
- title: sectionTitle,
35
- pathExp: sectionPathExp.startsWith('/') ? sectionPathExp.slice(1) : sectionPathExp,
36
- isLinkToo: hasIndexChild, // Section is linkable if it has an index page
37
- links: [],
38
- };
39
- // Process all children as links for this section
40
- for (const child of node.children) {
41
- const childPage = child.value;
42
- if (child.children.length > 0) {
43
- // This child has children - only collect its descendants, not the child itself
44
- collectPagesFromNode(child, basePath, section.links);
45
- }
46
- else if (!childPage.metadata.hidden && !isIndexPage(childPage)) {
47
- // This is a leaf node - add it as a link
48
- section.links.push(pageToItemLink(childPage, basePath));
49
- }
39
+ // Build sidebar for each directory that has an index page
40
+ for (const [topLevelDir, pages] of pagesByTopLevelDir) {
41
+ const hasIndexPage = pages.some(page => page.route.logical.path.length === 1
42
+ && FileRouter.routeIsFromIndexFile(page.route));
43
+ // Skip directories without index pages
44
+ if (!hasIndexPage)
45
+ continue;
46
+ const pathExp = `/${topLevelDir}`;
47
+ const sidebar = buildSidebarForDirectory(topLevelDir, pages);
48
+ if (sidebar.items.length > 0) {
49
+ sidebarIndex[pathExp] = sidebar;
50
50
  }
51
- sections.push(section);
52
51
  }
53
- else {
54
- // This is a standalone file - add as top-level link
55
- if (!page.metadata.hidden && !isIndexPage(page)) {
56
- links.push(pageToItemLink(page, basePath));
52
+ return sidebarIndex;
53
+ };
54
+ /**
55
+ * Builds a sidebar for a specific directory from its pages
56
+ */
57
+ const buildSidebarForDirectory = (topLevelDir, pages) => {
58
+ const items = [];
59
+ // Group pages by their immediate parent path
60
+ const pagesByParent = new Map();
61
+ for (const page of pages) {
62
+ // Skip the index page at the top level directory
63
+ if (page.route.logical.path.length === 1 && FileRouter.routeIsFromIndexFile(page.route)) {
64
+ continue;
65
+ }
66
+ // Get the immediate parent path (e.g., for ['guide', 'advanced', 'tips'], parent is ['guide', 'advanced'])
67
+ const parentPath = page.route.logical.path.slice(0, -1).join('/');
68
+ if (!pagesByParent.has(parentPath)) {
69
+ pagesByParent.set(parentPath, []);
57
70
  }
71
+ pagesByParent.get(parentPath).push(page);
58
72
  }
59
- };
60
- const collectPagesFromNode = (node, basePath, links) => {
61
- // Only process children, not the node itself (to avoid double-adding intermediate directories)
62
- for (const child of node.children) {
63
- const childPage = child.value;
64
- if (childPage && !childPage.metadata.hidden && !isIndexPage(childPage)) {
65
- links.push(pageToItemLink(childPage, basePath));
73
+ // Process top-level pages (direct children of the directory)
74
+ const topLevelPages = pagesByParent.get(topLevelDir) || [];
75
+ // Sort pages by their directory order (extracted from file path)
76
+ const sortedTopLevelPages = [...topLevelPages].sort((a, b) => {
77
+ // For sections, we need to look at the directory name in the file path
78
+ const dirA = a.route.file.path.relative.dir.split('/').pop() || '';
79
+ const dirB = b.route.file.path.relative.dir.split('/').pop() || '';
80
+ // Extract order from directory names like "10_b", "20_c"
81
+ const orderMatchA = dirA.match(/^(\d+)[_-]/);
82
+ const orderMatchB = dirB.match(/^(\d+)[_-]/);
83
+ const orderA = orderMatchA ? parseInt(orderMatchA[1], 10) : Number.MAX_SAFE_INTEGER;
84
+ const orderB = orderMatchB ? parseInt(orderMatchB[1], 10) : Number.MAX_SAFE_INTEGER;
85
+ if (orderA !== orderB)
86
+ return orderA - orderB;
87
+ // Fall back to alphabetical order
88
+ return dirA.localeCompare(dirB);
89
+ });
90
+ for (const page of sortedTopLevelPages) {
91
+ const pageName = page.route.logical.path[page.route.logical.path.length - 1];
92
+ const childPath = page.route.logical.path.join('/');
93
+ const childPages = pagesByParent.get(childPath) || [];
94
+ if (childPages.length > 0 || FileRouter.routeIsFromIndexFile(page.route)) {
95
+ // This is a section (has children or is an index page for a subdirectory)
96
+ const hasIndex = FileRouter.routeIsFromIndexFile(page.route);
97
+ const section = {
98
+ type: 'ItemSection',
99
+ title: Str.titlizeSlug(pageName),
100
+ pathExp: childPath,
101
+ isLinkToo: hasIndex,
102
+ links: [],
103
+ };
104
+ // Add direct children as links (sorted by order)
105
+ const sortedChildPages = [...childPages].sort((a, b) => {
106
+ const orderA = a.route.logical.order ?? Number.MAX_SAFE_INTEGER;
107
+ const orderB = b.route.logical.order ?? Number.MAX_SAFE_INTEGER;
108
+ return orderA - orderB;
109
+ });
110
+ for (const childPage of sortedChildPages) {
111
+ if (!FileRouter.routeIsFromIndexFile(childPage.route)) {
112
+ section.links.push({
113
+ type: 'ItemLink',
114
+ title: Str.titlizeSlug(childPage.route.logical.path[childPage.route.logical.path.length - 1]),
115
+ pathExp: childPage.route.logical.path.join('/'),
116
+ });
117
+ }
118
+ }
119
+ // Also add any deeper descendants as flat links
120
+ const allDescendants = [];
121
+ for (const [parentPath, pagesInParent] of pagesByParent) {
122
+ // Check if this path is a descendant (but not direct child)
123
+ if (parentPath.startsWith(childPath + '/')) {
124
+ for (const descendantPage of pagesInParent) {
125
+ if (!FileRouter.routeIsFromIndexFile(descendantPage.route)) {
126
+ allDescendants.push(descendantPage);
127
+ }
128
+ }
129
+ }
130
+ }
131
+ // Sort all descendants by their full path order
132
+ allDescendants.sort((a, b) => {
133
+ // Compare paths segment by segment, considering order at each level
134
+ const pathA = a.route.logical.path;
135
+ const pathB = b.route.logical.path;
136
+ const minLength = Math.min(pathA.length, pathB.length);
137
+ for (let i = 0; i < minLength; i++) {
138
+ const segmentCompare = pathA[i].localeCompare(pathB[i]);
139
+ if (segmentCompare !== 0)
140
+ return segmentCompare;
141
+ }
142
+ return pathA.length - pathB.length;
143
+ });
144
+ for (const descendantPage of allDescendants) {
145
+ section.links.push({
146
+ type: 'ItemLink',
147
+ title: Str.titlizeSlug(descendantPage.route.logical.path[descendantPage.route.logical.path.length - 1]),
148
+ pathExp: descendantPage.route.logical.path.join('/'),
149
+ });
150
+ }
151
+ if (section.links.length > 0 || section.isLinkToo) {
152
+ items.push(section);
153
+ }
66
154
  }
67
- // Recursively process grandchildren
68
- if (child.children.length > 0) {
69
- collectPagesFromNode(child, basePath, links);
155
+ else {
156
+ // This is a simple link
157
+ items.push({
158
+ type: 'ItemLink',
159
+ title: Str.titlizeSlug(pageName),
160
+ pathExp: page.route.logical.path.join('/'),
161
+ });
70
162
  }
71
163
  }
72
- };
73
- const pageToItemLink = (page, basePath) => {
74
- const pagePathExp = FileRouter.routeToPathExpression(page.route);
75
- const pageRelative = FileRouter.makeRelativeUnsafe(page.route, basePath);
76
- const pageRelativePathExp = FileRouter.routeToPathExpression(pageRelative);
77
- // Remove leading slash for title generation
78
- const titlePath = pageRelativePathExp.startsWith('/') ? pageRelativePathExp.slice(1) : pageRelativePathExp;
79
- // Use only the last segment for the title
80
- const titleSegment = pageRelative.logical.path[pageRelative.logical.path.length - 1] || titlePath;
81
- return {
82
- type: `ItemLink`,
83
- pathExp: pagePathExp.startsWith('/') ? pagePathExp.slice(1) : pagePathExp,
84
- title: Str.titlizeSlug(titleSegment),
85
- };
86
- };
87
- const isIndexPage = (page) => {
88
- return page.route.file.path.relative.name === 'index';
164
+ return { items };
89
165
  };
90
166
  //# sourceMappingURL=sidebar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../src/api/content/sidebar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../src/api/content/sidebar.ts"],"names":[],"mappings":"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"}
@@ -10,12 +10,9 @@ export interface Options {
10
10
  onChange?: (scanResult: Content.ScanResult) => void;
11
11
  }
12
12
  export interface ProjectDataPages {
13
- sidebarIndex: SidebarIndex;
13
+ sidebarIndex: Content.SidebarIndex;
14
14
  pages: Content.Page[];
15
15
  }
16
- export interface SidebarIndex {
17
- [pathExpression: string]: Content.Sidebar;
18
- }
19
16
  /**
20
17
  * Pages plugin with tree support
21
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../../src/api/vite/plugins/pages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAc3C,eAAO,MAAM,cAAc,8DAA0E,CAAA;AACrG,eAAO,MAAM,kBAAkB,8DAAwF,CAAA;AAEvH,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,kBAAkB,CAAA;IAC/B,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,IAAI,CAAA;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAA;CAC1C;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,mCAInB,OAAO,KAAG,IAAI,CAAC,MAAM,EAmQvB,CAAA"}
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../../src/api/vite/plugins/pages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAa3C,eAAO,MAAM,cAAc,8DAA0E,CAAA;AACrG,eAAO,MAAM,kBAAkB,8DAAwF,CAAA;AAEvH,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,kBAAkB,CAAA;IAC/B,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,IAAI,CAAA;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,OAAO,CAAC,YAAY,CAAA;IAClC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAA;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,mCAInB,OAAO,KAAG,IAAI,CAAC,MAAM,EAyNvB,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { Content } from '#api/content/$';
2
+ import { createNavbar } from '#api/content/navbar';
2
3
  import { polenVirtual } from '#api/vite/vi';
3
4
  import { reportDiagnostics } from '#lib/file-router/diagnostic-reporter';
4
5
  import { FileRouter } from '#lib/file-router/index';
@@ -6,7 +7,6 @@ import { debugPolen } from '#singletons/debug';
6
7
  import { superjson } from '#singletons/superjson';
7
8
  import mdx from '@mdx-js/rollup';
8
9
  import rehypeShiki from '@shikijs/rehype';
9
- import { Tree } from '@wollybeard/kit';
10
10
  import { Arr, Cache, Path, Str } from '@wollybeard/kit';
11
11
  import remarkFrontmatter from 'remark-frontmatter';
12
12
  import remarkGfm from 'remark-gfm';
@@ -153,51 +153,13 @@ export const Pages = ({ config, navbarData, onChange, }) => {
153
153
  if (navbarData) {
154
154
  const navbarPages = navbarData.get('pages');
155
155
  navbarPages.length = 0; // Clear existing
156
- // Process first-level children as navigation items
157
- if (scanResult.tree.root) {
158
- for (const child of scanResult.tree.root.children) {
159
- // Now we have Page objects in the tree
160
- const page = child.value;
161
- const pathExp = FileRouter.routeToPathExpression(page.route);
162
- // Skip hidden pages and index files at root level
163
- if (page.metadata.hidden || page.route.logical.path.slice(-1)[0] === 'index') {
164
- continue;
165
- }
166
- // Only include top-level pages (files directly in pages directory)
167
- if (page.route.logical.path.length === 1) {
168
- const title = Str.titlizeSlug(page.route.logical.path[0]);
169
- navbarPages.push({
170
- // IMPORTANT: Always ensure paths start with '/' for React Router compatibility.
171
- pathExp: pathExp.startsWith('/') ? pathExp : '/' + pathExp,
172
- title,
173
- });
174
- }
175
- }
176
- }
156
+ const navbarItems = createNavbar(scanResult.list);
157
+ navbarPages.push(...navbarItems);
177
158
  }
178
159
  //
179
160
  // ━━ Build Sidebar
180
161
  //
181
- const sidebarIndex = {};
182
- // Build sidebar for each top-level directory using the page tree
183
- if (scanResult.tree.root) {
184
- Tree.visit(scanResult.tree, (node) => {
185
- if (!node.value)
186
- return;
187
- const page = node.value;
188
- // Only process top-level directories (pages with logical path length > 1 indicate nested structure)
189
- if (page.route.logical.path.length === 1 && node.children.length > 0) {
190
- const topLevelDir = page.route.logical.path[0];
191
- const pathExp = `/${topLevelDir}`;
192
- // Create a subtree for this directory
193
- const subtree = Tree.Tree(Tree.Node(page, node.children));
194
- // Build sidebar using the new page tree builder
195
- const sidebar = Content.buildFromPageTree(subtree, [topLevelDir]);
196
- debug(`Built sidebar for ${pathExp}:`, sidebar);
197
- sidebarIndex[pathExp] = sidebar;
198
- }
199
- });
200
- }
162
+ const sidebarIndex = Content.buildSidebarIndex(scanResult);
201
163
  //
202
164
  // ━━ Put It All together
203
165
  //
@@ -1 +1 @@
1
- {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../../../src/api/vite/plugins/pages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../../../src/api/vite/plugins/pages.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/scan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAO,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,KAAK,KAAK,EAAkB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AA2B1E,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B;AAUD,eAAO,MAAM,IAAI,GAAU,YAAY;IACrC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,KAAG,OAAO,CAAC,UAAU,CAiBrB,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,oBAAoB,MAAM,EAAE,SAAS,MAAM,KAAG,KAqB7E,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,UAAU,IAAI,CAAC,MAAM,KAAG,YAqB9D,CAAA"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/scan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAO,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,KAAK,KAAK,EAAkB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AA2B1E,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B;AAUD,eAAO,MAAM,IAAI,GAAU,YAAY;IACrC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,KAAG,OAAO,CAAC,UAAU,CAiBrB,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,oBAAoB,MAAM,EAAE,SAAS,MAAM,KAAG,KAqB7E,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,UAAU,IAAI,CAAC,MAAM,KAAG,YA2B9D,CAAA"}