polen 0.10.0-next.4 → 0.10.0-next.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/build/api/config/load.js +5 -5
- package/build/api/config/load.js.map +1 -1
- package/build/api/config-resolver/resolve.js +2 -2
- package/build/api/config-resolver/resolve.js.map +1 -1
- package/build/api/content/$$.d.ts +5 -0
- package/build/api/content/$$.d.ts.map +1 -0
- package/build/api/content/$$.js +5 -0
- package/build/api/content/$$.js.map +1 -0
- package/build/api/content/$.d.ts +2 -0
- package/build/api/content/$.d.ts.map +1 -0
- package/build/api/content/$.js +2 -0
- package/build/api/content/$.js.map +1 -0
- package/build/api/content/metadata.d.ts +10 -0
- package/build/api/content/metadata.d.ts.map +1 -0
- package/build/api/content/metadata.js +9 -0
- package/build/api/content/metadata.js.map +1 -0
- package/build/api/content/page.d.ts +11 -0
- package/build/api/content/page.d.ts.map +1 -0
- package/build/api/content/page.js +2 -0
- package/build/api/content/page.js.map +1 -0
- package/build/api/content/scan.d.ts +19 -0
- package/build/api/content/scan.d.ts.map +1 -0
- package/build/api/content/scan.js +57 -0
- package/build/api/content/scan.js.map +1 -0
- package/build/{lib/file-router/sidebar/types.d.ts → api/content/sidebar.d.ts} +8 -1
- package/build/api/content/sidebar.d.ts.map +1 -0
- package/build/api/content/sidebar.js +90 -0
- package/build/api/content/sidebar.js.map +1 -0
- package/build/api/schema/data-sources/schema-directory/schema-directory.js +1 -1
- package/build/api/schema/data-sources/schema-directory/schema-directory.js.map +1 -1
- package/build/api/vite/plugins/branding/index.js +4 -4
- package/build/api/vite/plugins/branding/index.js.map +1 -1
- package/build/api/vite/plugins/core.js +4 -4
- package/build/api/vite/plugins/core.js.map +1 -1
- package/build/api/vite/plugins/pages.d.ts +6 -8
- package/build/api/vite/plugins/pages.d.ts.map +1 -1
- package/build/api/vite/plugins/pages.js +99 -155
- package/build/api/vite/plugins/pages.js.map +1 -1
- package/build/api/vite/plugins/serve.js +5 -5
- package/build/api/vite/plugins/serve.js.map +1 -1
- package/build/cli/_/self-contained-mode.js +5 -5
- package/build/cli/_/self-contained-mode.js.map +1 -1
- package/build/exports/components.d.ts +2 -0
- package/build/exports/components.d.ts.map +1 -0
- package/build/exports/components.js +2 -0
- package/build/exports/components.js.map +1 -0
- package/build/lib/demos/config-schema.d.ts +14 -14
- package/build/lib/file-router/file-router.d.ts +0 -2
- package/build/lib/file-router/file-router.d.ts.map +1 -1
- package/build/lib/file-router/file-router.js +0 -2
- package/build/lib/file-router/file-router.js.map +1 -1
- package/build/lib/file-router/route.d.ts +2 -0
- package/build/lib/file-router/route.d.ts.map +1 -1
- package/build/lib/file-router/route.js.map +1 -1
- package/build/lib/file-router/scan.d.ts.map +1 -1
- package/build/lib/file-router/scan.js +16 -12
- package/build/lib/file-router/scan.js.map +1 -1
- package/build/singletons/debug.d.ts +1 -1
- package/build/singletons/debug.d.ts.map +1 -1
- package/build/singletons/debug.js +1 -1
- package/build/singletons/debug.js.map +1 -1
- package/build/template/components/ThemeToggle.d.ts +3 -0
- package/build/template/components/ThemeToggle.d.ts.map +1 -0
- package/build/template/components/ThemeToggle.jsx +10 -0
- package/build/template/components/ThemeToggle.jsx.map +1 -0
- package/build/template/components/content/$$.d.ts +2 -0
- package/build/template/components/content/$$.d.ts.map +1 -0
- package/build/template/components/content/$$.js +2 -0
- package/build/template/components/content/$$.js.map +1 -0
- package/build/template/components/sidebar/Sidebar.d.ts +2 -2
- package/build/template/components/sidebar/Sidebar.d.ts.map +1 -1
- package/build/template/components/sidebar/SidebarItem.d.ts +3 -3
- package/build/template/components/sidebar/SidebarItem.d.ts.map +1 -1
- package/build/template/components/sidebar/SidebarItem.jsx +1 -1
- package/build/template/components/sidebar/SidebarItem.jsx.map +1 -1
- package/build/template/contexts/ThemeContext.d.ts +12 -0
- package/build/template/contexts/ThemeContext.d.ts.map +1 -0
- package/build/template/contexts/ThemeContext.jsx +41 -0
- package/build/template/contexts/ThemeContext.jsx.map +1 -0
- package/build/template/routes/root.d.ts.map +1 -1
- package/build/template/routes/root.jsx +15 -9
- package/build/template/routes/root.jsx.map +1 -1
- package/package.json +10 -3
- package/src/api/config/load.ts +5 -5
- package/src/api/config-resolver/resolve.ts +2 -2
- package/src/api/content/$$.ts +4 -0
- package/src/api/content/$.test.ts +72 -0
- package/src/api/content/$.ts +1 -0
- package/src/api/content/metadata.ts +11 -0
- package/src/api/content/page.ts +12 -0
- package/src/api/content/scan.ts +82 -0
- package/src/api/content/sidebar.ts +136 -0
- package/src/api/schema/data-sources/schema-directory/schema-directory.ts +1 -1
- package/src/api/vite/plugins/branding/index.ts +4 -4
- package/src/api/vite/plugins/core.ts +4 -4
- package/src/api/vite/plugins/pages.ts +117 -171
- package/src/api/vite/plugins/serve.ts +5 -5
- package/src/cli/_/self-contained-mode.ts +5 -5
- package/src/exports/components.ts +1 -0
- package/src/lib/deployment/$$.ts +1 -1
- package/src/lib/deployment/$.test.ts +3 -3
- package/src/lib/deployment/$.ts +1 -1
- package/src/lib/file-router/file-router.ts +0 -2
- package/src/lib/file-router/linter.test.ts +2 -0
- package/src/lib/file-router/route.ts +2 -0
- package/src/lib/file-router/scan.ts +19 -13
- package/src/lib/task/$.test.ts +3 -3
- package/src/singletons/debug.ts +1 -1
- package/src/template/components/ThemeToggle.tsx +21 -0
- package/src/template/components/content/$$.ts +1 -0
- package/src/template/components/sidebar/Sidebar.tsx +2 -2
- package/src/template/components/sidebar/SidebarItem.tsx +8 -8
- package/src/template/contexts/ThemeContext.tsx +60 -0
- package/src/template/routes/root.tsx +15 -9
- package/build/lib/file-router/scan-tree.d.ts +0 -20
- package/build/lib/file-router/scan-tree.d.ts.map +0 -1
- package/build/lib/file-router/scan-tree.js +0 -158
- package/build/lib/file-router/scan-tree.js.map +0 -1
- package/build/lib/file-router/sidebar/index.d.ts +0 -3
- package/build/lib/file-router/sidebar/index.d.ts.map +0 -1
- package/build/lib/file-router/sidebar/index.js +0 -4
- package/build/lib/file-router/sidebar/index.js.map +0 -1
- package/build/lib/file-router/sidebar/sidebar-tree.d.ts +0 -9
- package/build/lib/file-router/sidebar/sidebar-tree.d.ts.map +0 -1
- package/build/lib/file-router/sidebar/sidebar-tree.js +0 -85
- package/build/lib/file-router/sidebar/sidebar-tree.js.map +0 -1
- package/build/lib/file-router/sidebar/types.d.ts.map +0 -1
- package/build/lib/file-router/sidebar/types.js +0 -2
- package/build/lib/file-router/sidebar/types.js.map +0 -1
- package/build/lib/tree/index.d.ts +0 -3
- package/build/lib/tree/index.d.ts.map +0 -1
- package/build/lib/tree/index.js +0 -2
- package/build/lib/tree/index.js.map +0 -1
- package/build/lib/tree/tree.d.ts +0 -62
- package/build/lib/tree/tree.d.ts.map +0 -1
- package/build/lib/tree/tree.js +0 -134
- package/build/lib/tree/tree.js.map +0 -1
- package/src/lib/file-router/scan-tree.test.ts +0 -189
- package/src/lib/file-router/scan-tree.ts +0 -205
- package/src/lib/file-router/sidebar/index.ts +0 -3
- package/src/lib/file-router/sidebar/sidebar-tree.test.ts +0 -123
- package/src/lib/file-router/sidebar/sidebar-tree.ts +0 -110
- package/src/lib/file-router/sidebar/types.ts +0 -19
- package/src/lib/tree/index.ts +0 -2
- package/src/lib/tree/tree.test.ts +0 -117
- package/src/lib/tree/tree.ts +0 -183
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAU3C,MAAM,MAAM,IAAI,GAAG,WAAW,EAAE,CAAA;AAEhC,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEzB,MAAM,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,CAAA;AAEnC,MAAM,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;AAElE,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,eAAO,MAAM,GAAG,MAAM,CAAA;AAEtB,eAAO,MAAM,gBAAgB,GAAI,MAAM,IAAI,WAE1C,CAAA;AAUD,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,YAAY,CAAA;IACrB,IAAI,EAAE,SAAS,CAAA;
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAU3C,MAAM,MAAM,IAAI,GAAG,WAAW,EAAE,CAAA;AAEhC,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEzB,MAAM,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,CAAA;AAEnC,MAAM,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;AAElE,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,eAAO,MAAM,GAAG,MAAM,CAAA;AAEtB,eAAO,MAAM,gBAAgB,GAAI,MAAM,IAAI,WAE1C,CAAA;AAUD,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,YAAY,CAAA;IACrB,IAAI,EAAE,SAAS,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE;QACJ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAA;QACrB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAA;KACtB,CAAA;CACF;AAUD,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,OAAO,EAAE,oBAAoB,CAAA;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAA;CACd;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,KAAK,KAAG,KAAK,IAAI,aAEvD,CAAA;AAcD,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAA;CACd;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,KAAK,KAAG,KAAK,IAAI,aAEvD,CAAA;AAcD;;;;EAIE;AACF,eAAO,MAAM,gBAAgB,GAAI,OAAO,KAAK,KAAG,KAAK,IAAI,aAIxD,CAAA;AASD,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,KAAG,OAEnD,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,uBAAuB,WAAW,EAAE,KAAG,OAQjF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,EAAE,qBAAqB,WAAW,EAAE,KAAG,KAUrF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,OAAO,KAAK,WAEjD,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/lib/file-router/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAa,MAAM,iBAAiB,CAAA;AAoB3C,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAA;AAEtB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAU,EAAE,EAAE;IAC7C,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7B,CAAC,CAAA;
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/lib/file-router/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAa,MAAM,iBAAiB,CAAA;AAoB3C,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAA;AAEtB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAU,EAAE,EAAE;IAC7C,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7B,CAAC,CAAA;AA6CD;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAY,EAA0B,EAAE;IACtE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;AACxC,CAAC,CAAA;AAsBD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAY,EAA0B,EAAE;IACtE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,EAAE;AACF,gBAAgB;AAChB,EAAE;AAEF,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,gEAAgE;AAChE,EAAE;AACF,EAAE;AAEF;;;;EAIE;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAA0B,EAAE;IACvE,oCAAoC;IACpC,8CAA8C;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;AACxC,CAAC,CAAA;AAED,EAAE;AACF,EAAE;AACF,EAAE;AACF,mCAAmC;AACnC,EAAE;AACF,EAAE;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAY,EAAW,EAAE;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,IAAI,CAAA;AACjE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,qBAAoC,EAAW,EAAE;IAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,qBAAqB,CAAC,MAAM,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,WAAW,CAChB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,MAAM,CAAC,EACzD,qBAAqB,CACtB,CAAA;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAY,EAAE,mBAAkC,EAAS,EAAE;IAC5F,2FAA2F;IAC3F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpE,OAAO;QACL,GAAG,KAAK;QACR,OAAO,EAAE;YACP,GAAG,KAAK,CAAC,OAAO;YAChB,IAAI,EAAE,OAAO;SACd;KACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAY,EAAE,EAAE;IACpD,OAAO,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;KACd;CACF,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/scan.ts"],"names":[],"mappings":"
|
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,9 +1,7 @@
|
|
1
1
|
import { TinyGlobby } from '#dep/tiny-globby/index';
|
2
|
-
import { Tree } from '#lib/tree/index';
|
3
2
|
import { Path, Str } from '@wollybeard/kit';
|
4
3
|
import { lint } from "./linter.js";
|
5
|
-
import {
|
6
|
-
import { scanTree } from "./scan-tree.js";
|
4
|
+
import {} from "./route.js";
|
7
5
|
//
|
8
6
|
//
|
9
7
|
//
|
@@ -27,18 +25,17 @@ const conventions = {
|
|
27
25
|
//
|
28
26
|
//
|
29
27
|
export const scan = async (parameters) => {
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
routes.push(node.value.route);
|
37
|
-
}
|
28
|
+
const { dir, glob = `**/*.{md,mdx}` } = parameters;
|
29
|
+
// Get all files directly
|
30
|
+
const filePaths = await TinyGlobby.glob(glob, {
|
31
|
+
absolute: true,
|
32
|
+
cwd: dir,
|
33
|
+
onlyFiles: true,
|
38
34
|
});
|
35
|
+
// Convert to routes
|
36
|
+
const routes = filePaths.map(filePath => filePathToRoute(filePath, dir));
|
39
37
|
// Apply linting
|
40
38
|
const lintResult = lint(routes);
|
41
|
-
// Routes are already sorted by the tree structure
|
42
39
|
return lintResult;
|
43
40
|
};
|
44
41
|
export const filePathToRoute = (filePathExpression, rootDir) => {
|
@@ -49,9 +46,16 @@ export const filePathToRoute = (filePathExpression, rootDir) => {
|
|
49
46
|
},
|
50
47
|
};
|
51
48
|
const logical = filePathToRouteLogical(file.path.relative);
|
49
|
+
// Generate id and parentId for tree building
|
50
|
+
const id = filePathExpression; // Use absolute path as unique ID
|
51
|
+
const relativePath = Path.relative(rootDir, filePathExpression);
|
52
|
+
const parentDir = Path.dirname(relativePath);
|
53
|
+
const parentId = parentDir === '.' ? null : Path.join(rootDir, parentDir);
|
52
54
|
return {
|
53
55
|
logical,
|
54
56
|
file,
|
57
|
+
id,
|
58
|
+
parentId,
|
55
59
|
};
|
56
60
|
};
|
57
61
|
export const filePathToRouteLogical = (filePath) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/lib/file-router/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/lib/file-router/scan.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/singletons/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,eAAO,MAAM,
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/singletons/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,eAAO,MAAM,UAAU,aAAwB,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/singletons/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,MAAM,CAAC,MAAM,
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/singletons/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ThemeToggle.d.ts","sourceRoot":"","sources":["../../../src/template/components/ThemeToggle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAK7C,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAe/B,CAAA"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { MoonIcon, SunIcon } from '@radix-ui/react-icons';
|
2
|
+
import { IconButton } from '@radix-ui/themes';
|
3
|
+
import { useTheme } from "../contexts/ThemeContext.jsx";
|
4
|
+
export const ThemeToggle = () => {
|
5
|
+
const { appearance, toggleTheme } = useTheme();
|
6
|
+
return (<IconButton size="2" variant="ghost" color="gray" onClick={toggleTheme} aria-label={`Switch to ${appearance === 'light' ? 'dark' : 'light'} theme`} style={{ cursor: 'pointer' }}>
|
7
|
+
{appearance === 'light' ? <MoonIcon width="18" height="18"/> : <SunIcon width="18" height="18"/>}
|
8
|
+
</IconButton>);
|
9
|
+
};
|
10
|
+
//# sourceMappingURL=ThemeToggle.jsx.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ThemeToggle.jsx","sourceRoot":"","sources":["../../../src/template/components/ThemeToggle.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAEvD,MAAM,CAAC,MAAM,WAAW,GAAa,GAAG,EAAE;IACxC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAA;IAE9C,OAAO,CACL,CAAC,UAAU,CACT,IAAI,CAAC,GAAG,CACR,OAAO,CAAC,OAAO,CACf,KAAK,CAAC,MAAM,CACZ,OAAO,CAAC,CAAC,WAAW,CAAC,CACrB,UAAU,CAAC,CAAC,aAAa,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,CAC3E,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAE7B;MAAA,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAG,CACpG;IAAA,EAAE,UAAU,CAAC,CACd,CAAA;AACH,CAAC,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"$$.d.ts","sourceRoot":"","sources":["../../../../src/template/components/content/$$.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"$$.js","sourceRoot":"","sources":["../../../../src/template/components/content/$$.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA"}
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import type {
|
1
|
+
import type { Content } from '#api/content/$';
|
2
2
|
import type { BoxOwnProps, LayoutProps, MarginProps } from '@radix-ui/themes/props';
|
3
3
|
interface SidebarProps extends LayoutProps, MarginProps, BoxOwnProps {
|
4
|
-
data:
|
4
|
+
data: Content.Item[];
|
5
5
|
style?: React.CSSProperties;
|
6
6
|
}
|
7
7
|
export declare const Sidebar: ({ data, ...props }: SidebarProps) => import("react").JSX.Element;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../src/template/components/sidebar/Sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../../src/template/components/sidebar/Sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGnF,UAAU,YAAa,SAAQ,WAAW,EAAE,WAAW,EAAE,WAAW;IAClE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAA;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;CAC5B;AAED,eAAO,MAAM,OAAO,GAAI,oBAAoB,YAAY,gCAiBvD,CAAA"}
|
@@ -1,9 +1,9 @@
|
|
1
|
+
import type { Content } from '#api/content/$';
|
1
2
|
import type { React } from '#dep/react/index';
|
2
|
-
import type { FileRouter } from '#lib/file-router/index';
|
3
3
|
export declare const Items: React.FC<{
|
4
|
-
items:
|
4
|
+
items: Content.Item[];
|
5
5
|
}>;
|
6
6
|
export declare const Item: React.FC<{
|
7
|
-
item:
|
7
|
+
item: Content.Item;
|
8
8
|
}>;
|
9
9
|
//# sourceMappingURL=SidebarItem.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SidebarItem.d.ts","sourceRoot":"","sources":["../../../../src/template/components/sidebar/SidebarItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"SidebarItem.d.ts","sourceRoot":"","sources":["../../../../src/template/components/sidebar/SidebarItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAM7C,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAA;CAAE,CAWrD,CAAA;AAUD,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAA;CAAE,CAUjD,CAAA"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Texts } from '#template/components/Texts/index';
|
2
|
-
import { Box, Flex
|
2
|
+
import { Box, Flex } from '@radix-ui/themes';
|
3
3
|
import { useLocation } from 'react-router';
|
4
4
|
import { getPathActiveReport, Link } from "../Link.jsx";
|
5
5
|
export const Items = ({ items }) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SidebarItem.jsx","sourceRoot":"","sources":["../../../../src/template/components/sidebar/SidebarItem.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,
|
1
|
+
{"version":3,"file":"SidebarItem.jsx","sourceRoot":"","sources":["../../../../src/template/components/sidebar/SidebarItem.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import type { React } from '#dep/react/index';
|
2
|
+
type ThemeAppearance = 'light' | 'dark';
|
3
|
+
interface ThemeContextValue {
|
4
|
+
appearance: ThemeAppearance;
|
5
|
+
toggleTheme: () => void;
|
6
|
+
}
|
7
|
+
export declare const ThemeProvider: React.FC<{
|
8
|
+
children: React.ReactNode;
|
9
|
+
}>;
|
10
|
+
export declare const useTheme: () => ThemeContextValue;
|
11
|
+
export {};
|
12
|
+
//# sourceMappingURL=ThemeContext.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../../src/template/contexts/ThemeContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAG7C,KAAK,eAAe,GAAG,OAAO,GAAG,MAAM,CAAA;AAEvC,UAAU,iBAAiB;IACzB,UAAU,EAAE,eAAe,CAAA;IAC3B,WAAW,EAAE,MAAM,IAAI,CAAA;CACxB;AAMD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAqCjE,CAAA;AAED,eAAO,MAAM,QAAQ,yBAMpB,CAAA"}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import { createContext, useContext, useEffect, useState } from 'react';
|
2
|
+
const ThemeContext = createContext(undefined);
|
3
|
+
const THEME_STORAGE_KEY = 'polen-theme-preference';
|
4
|
+
export const ThemeProvider = ({ children }) => {
|
5
|
+
const [appearance, setAppearance] = useState(() => {
|
6
|
+
// Check if we're in the browser
|
7
|
+
if (typeof window === 'undefined') {
|
8
|
+
return 'light';
|
9
|
+
}
|
10
|
+
// Check localStorage first
|
11
|
+
const stored = localStorage.getItem(THEME_STORAGE_KEY);
|
12
|
+
if (stored === 'light' || stored === 'dark') {
|
13
|
+
return stored;
|
14
|
+
}
|
15
|
+
// Check system preference
|
16
|
+
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
17
|
+
return 'dark';
|
18
|
+
}
|
19
|
+
return 'light';
|
20
|
+
});
|
21
|
+
useEffect(() => {
|
22
|
+
// Persist to localStorage
|
23
|
+
if (typeof window !== 'undefined') {
|
24
|
+
localStorage.setItem(THEME_STORAGE_KEY, appearance);
|
25
|
+
}
|
26
|
+
}, [appearance]);
|
27
|
+
const toggleTheme = () => {
|
28
|
+
setAppearance(prev => prev === 'light' ? 'dark' : 'light');
|
29
|
+
};
|
30
|
+
return (<ThemeContext.Provider value={{ appearance, toggleTheme }}>
|
31
|
+
{children}
|
32
|
+
</ThemeContext.Provider>);
|
33
|
+
};
|
34
|
+
export const useTheme = () => {
|
35
|
+
const context = useContext(ThemeContext);
|
36
|
+
if (!context) {
|
37
|
+
throw new Error('useTheme must be used within a ThemeProvider');
|
38
|
+
}
|
39
|
+
return context;
|
40
|
+
};
|
41
|
+
//# sourceMappingURL=ThemeContext.jsx.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ThemeContext.jsx","sourceRoot":"","sources":["../../../src/template/contexts/ThemeContext.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAStE,MAAM,YAAY,GAAG,aAAa,CAAgC,SAAS,CAAC,CAAA;AAE5E,MAAM,iBAAiB,GAAG,wBAAwB,CAAA;AAElD,MAAM,CAAC,MAAM,aAAa,GAA4C,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrF,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAkB,GAAG,EAAE;QACjE,gCAAgC;QAChC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,2BAA2B;QAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QACtD,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAA;QACf,CAAC;QAED,0BAA0B;QAC1B,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,EAAE,CAAC;YACnF,OAAO,MAAM,CAAA;QACf,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,0BAA0B;QAC1B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,YAAY,CAAC,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAA;QACrD,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAEhB,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5D,CAAC,CAAA;IAED,OAAO,CACL,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CACxD;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,YAAY,CAAC,QAAQ,CAAC,CACzB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,EAAE;IAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/template/routes/root.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/template/routes/root.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAiC1D,eAAO,MAAM,SAAS,mCAuBrB,CAAA;AAuLD,eAAO,MAAM,IAAI;;;;CAIf,CAAA"}
|
@@ -12,13 +12,15 @@ import projectDataNavbar from 'virtual:polen/project/data/navbar.jsonsuper';
|
|
12
12
|
import projectDataPages from 'virtual:polen/project/data/pages.jsonsuper';
|
13
13
|
import { pages } from 'virtual:polen/project/pages.jsx';
|
14
14
|
import { templateVariables } from 'virtual:polen/template/variables';
|
15
|
-
import { Link } from
|
16
|
-
import { Logo } from
|
17
|
-
import { Sidebar } from
|
15
|
+
import { Link } from "../components/Link.jsx";
|
16
|
+
import { Logo } from "../components/Logo.jsx";
|
17
|
+
import { Sidebar } from "../components/sidebar/Sidebar.jsx";
|
18
|
+
import { ThemeToggle } from "../components/ThemeToggle.jsx";
|
19
|
+
import { ThemeProvider, useTheme } from "../contexts/ThemeContext.jsx";
|
18
20
|
import entryClientUrl from '../entry.client.jsx?url';
|
19
|
-
import { changelog } from
|
20
|
-
import { index } from
|
21
|
-
import { reference } from
|
21
|
+
import { changelog } from "./changelog.jsx";
|
22
|
+
import { index } from "./index.jsx";
|
23
|
+
import { reference } from "./reference.jsx";
|
22
24
|
// todo: not needed anymore because not using hono dev vite plugin right?
|
23
25
|
const reactRefreshPreamble = `
|
24
26
|
import RefreshRuntime from "/@react-refresh";
|
@@ -41,7 +43,9 @@ export const Component = () => {
|
|
41
43
|
{/* <meta name='theme-color' content='#000000' /> */}
|
42
44
|
</head>
|
43
45
|
<body style={{ margin: 0 }}>
|
44
|
-
<
|
46
|
+
<ThemeProvider>
|
47
|
+
<Layout />
|
48
|
+
</ThemeProvider>
|
45
49
|
<ScrollRestoration />
|
46
50
|
{import.meta.env.DEV && <script type='module' src={entryClientUrl}></script>}
|
47
51
|
</body>
|
@@ -49,6 +53,7 @@ export const Component = () => {
|
|
49
53
|
};
|
50
54
|
const Layout = () => {
|
51
55
|
const location = useLocation();
|
56
|
+
const { appearance } = useTheme();
|
52
57
|
// Determine if we should show sidebar based on current path
|
53
58
|
const getCurrentNavPathExp = () => {
|
54
59
|
// todo: general path manipulation lib because we are duplicating logic here found in FileRouter
|
@@ -68,13 +73,14 @@ const Layout = () => {
|
|
68
73
|
<LinkReactRouter to='/' style={{ color: `inherit`, textDecoration: `none` }}>
|
69
74
|
<Logo src={logoSrc} title={templateVariables.title} height={30} showTitle={true}/>
|
70
75
|
</LinkReactRouter>
|
71
|
-
<Flex direction='row' gap='4'>
|
76
|
+
<Flex direction='row' gap='4' style={{ flex: 1 }}>
|
72
77
|
{projectDataNavbar.map((item, key) => (<Link key={key} color='gray' to={item.pathExp}>
|
73
78
|
{item.title}
|
74
79
|
</Link>))}
|
75
80
|
</Flex>
|
81
|
+
<ThemeToggle />
|
76
82
|
</Flex>);
|
77
|
-
return (<Theme asChild>
|
83
|
+
return (<Theme asChild appearance={appearance}>
|
78
84
|
<Grid width={{ initial: 'var(--container-4)' }} areas="'header header header header header header header header' 'sidebar sidebar . content content content content content'" rows='min-content auto' columns='repeat(8, 1fr)' gapX='2' my='8' mx='auto'>
|
79
85
|
<style>
|
80
86
|
{`
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"root.jsx","sourceRoot":"","sources":["../../../src/template/routes/root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AACpE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,cAAc,MAAM,iCAAiC,CAAA;AAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,OAAO,MAAM,uCAAuC,CAAA;AAC3D,OAAO,YAAY,MAAM,sCAAsC,CAAA;AAC/D,OAAO,iBAAiB,MAAM,6CAA6C,CAAA;AAC3E,OAAO,gBAAgB,MAAM,4CAA4C,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAC3D,OAAO,cAAc,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,yEAAyE;AACzE,MAAM,oBAAoB,GAAG;;;;;;CAM5B,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACb;MAAA,CAAC,IAAI,CACH;QAAA,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,CAC7E;QAAA,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,CAC3E;QAAA,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EACrB;QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,qCAAqC,EACnE;QAAA,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CACvC;QAAA,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAG,CACvE;QAAA,CAAC,qGAAqG,CACtG;QAAA,CAAC,sFAAsF,CACvF;QAAA,CAAC,mDAAmD,CACtD;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CACzB;QAAA,CAAC,MAAM,CAAC,AAAD,
|
1
|
+
{"version":3,"file":"root.jsx","sourceRoot":"","sources":["../../../src/template/routes/root.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "polen",
|
3
|
-
"version": "0.10.0-next.
|
3
|
+
"version": "0.10.0-next.6",
|
4
4
|
"type": "module",
|
5
5
|
"description": "A framework for delightful GraphQL developer portals",
|
6
6
|
"author": {
|
@@ -41,13 +41,18 @@
|
|
41
41
|
"#lib/task": "./src/lib/task/$.ts",
|
42
42
|
"#lib/task/task": "./src/lib/task/$$.ts",
|
43
43
|
"#lib/deployment": "./src/lib/deployment/$.ts",
|
44
|
-
"#lib/deployment/deployment": "./src/lib/deployment/$$.ts"
|
44
|
+
"#lib/deployment/deployment": "./src/lib/deployment/$$.ts",
|
45
|
+
"#template/components/content/$$": "./src/template/components/content/$$.ts"
|
45
46
|
},
|
46
47
|
"exports": {
|
47
48
|
".": {
|
48
49
|
"source": "./src/exports/index.ts",
|
49
50
|
"default": "./build/exports/index.js"
|
50
51
|
},
|
52
|
+
"./components": {
|
53
|
+
"source": "./src/exports/components.ts",
|
54
|
+
"default": "./build/exports/components.js"
|
55
|
+
},
|
51
56
|
"./polen": {
|
52
57
|
"source": "./src/exports/polen.ts",
|
53
58
|
"default": "./build/exports/polen.js"
|
@@ -94,7 +99,7 @@
|
|
94
99
|
"@vitejs/plugin-react-oxc": "^0.2.3",
|
95
100
|
"@vltpkg/semver": "0.0.0-15",
|
96
101
|
"@vue/reactivity": "^3.5.16",
|
97
|
-
"@wollybeard/kit": "^0.
|
102
|
+
"@wollybeard/kit": "^0.41.0",
|
98
103
|
"@wollybeard/projector": "^0.2.0",
|
99
104
|
"ansis": "^4.1.0",
|
100
105
|
"clean-stack": "^5.2.0",
|
@@ -104,6 +109,7 @@
|
|
104
109
|
"fuse.js": "^7.1.0",
|
105
110
|
"graffle": "8.0.0-next.163",
|
106
111
|
"graphql": "^16.11.0",
|
112
|
+
"gray-matter": "^4.0.3",
|
107
113
|
"hono": "^4.7.11",
|
108
114
|
"jsesc": "^3.1.0",
|
109
115
|
"jsonc-parser": "^3.3.1",
|
@@ -112,6 +118,7 @@
|
|
112
118
|
"react-router": "^7.6.2",
|
113
119
|
"rehype-stringify": "^10.0.1",
|
114
120
|
"remark": "^15.0.1",
|
121
|
+
"remark-frontmatter": "^5.0.0",
|
115
122
|
"remark-gfm": "^4.0.1",
|
116
123
|
"remark-html": "^16.0.1",
|
117
124
|
"remark-parse": "^11.0.0",
|
package/src/api/config/load.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import type { SelfContainedModeHooksData } from '#cli/_/self-contained-mode'
|
2
2
|
import { assertOptionalPathAbsolute, pickFirstPathExisting } from '#lib/kit-temp'
|
3
3
|
import { packagePaths } from '#package-paths'
|
4
|
-
import {
|
4
|
+
import { debugPolen } from '#singletons/debug'
|
5
5
|
import type { Prom } from '@wollybeard/kit'
|
6
6
|
import { Path } from '@wollybeard/kit'
|
7
7
|
import * as Module from 'node:module'
|
@@ -20,7 +20,7 @@ export interface LoadOptions {
|
|
20
20
|
let isSelfContainedModeRegistered = false
|
21
21
|
|
22
22
|
export const load = async (options: LoadOptions): Promise<ConfigInput> => {
|
23
|
-
const
|
23
|
+
const debug = debugPolen.sub(`load`)
|
24
24
|
assertOptionalPathAbsolute(options.dir)
|
25
25
|
|
26
26
|
//
|
@@ -35,7 +35,7 @@ export const load = async (options: LoadOptions): Promise<ConfigInput> => {
|
|
35
35
|
const initializeData: SelfContainedModeHooksData = {
|
36
36
|
projectDirPathExp: options.dir,
|
37
37
|
}
|
38
|
-
|
38
|
+
debug(`register node module hooks`, { data: initializeData })
|
39
39
|
// TODO: would be simpler to use sync hooks
|
40
40
|
// https://nodejs.org/api/module.html#synchronous-hooks-accepted-by-moduleregisterhooks
|
41
41
|
// Requires NodeJS 22.15+ -- which is not working with PW until its next release.
|
@@ -67,7 +67,7 @@ export const load = async (options: LoadOptions): Promise<ConfigInput> => {
|
|
67
67
|
// eslint-disable-next-line
|
68
68
|
module = await import(filePath)
|
69
69
|
}
|
70
|
-
|
70
|
+
debug(`imported config module`)
|
71
71
|
|
72
72
|
// // Use dynamic import with file URL to support Windows
|
73
73
|
// const configUrl = pathToFileURL(configPath).href
|
@@ -97,7 +97,7 @@ export const load = async (options: LoadOptions): Promise<ConfigInput> => {
|
|
97
97
|
configInput.advanced.isSelfContainedMode = true
|
98
98
|
}
|
99
99
|
|
100
|
-
|
100
|
+
debug(`loaded config input`, configInput)
|
101
101
|
|
102
102
|
return configInput
|
103
103
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { debugPolen } from '#singletons/debug'
|
2
2
|
import { type ConfigInput, normalizeInput } from '../config/configurator.ts'
|
3
3
|
import { load, type LoadOptions } from '../config/load.ts'
|
4
4
|
import { mergeInputs } from '../config/merge.ts'
|
@@ -12,7 +12,7 @@ export const fromFile = async (options: ResolveFromFileOptions): Promise<ViteUse
|
|
12
12
|
const configInput = await load(options)
|
13
13
|
const configInputMerged = mergeInputs(configInput, options.overrides)
|
14
14
|
const config = await fromMemory(configInputMerged, options.dir)
|
15
|
-
|
15
|
+
debugPolen(`resolved config`, config)
|
16
16
|
return config
|
17
17
|
}
|
18
18
|
|
@@ -0,0 +1,72 @@
|
|
1
|
+
import { Fs, Path } from '@wollybeard/kit'
|
2
|
+
import { afterEach, beforeEach, describe, expect, test } from 'vitest'
|
3
|
+
import { Content } from './$.ts'
|
4
|
+
|
5
|
+
describe('content', () => {
|
6
|
+
let testDir: string
|
7
|
+
|
8
|
+
beforeEach(async () => {
|
9
|
+
testDir = await Fs.makeTemporaryDirectory()
|
10
|
+
})
|
11
|
+
|
12
|
+
afterEach(async () => {
|
13
|
+
if (testDir && await Fs.exists(testDir)) {
|
14
|
+
await Fs.remove(testDir)
|
15
|
+
}
|
16
|
+
})
|
17
|
+
|
18
|
+
describe('MetadataSchema', () => {
|
19
|
+
test('validates metadata correctly', () => {
|
20
|
+
const valid = Content.MetadataSchema.safeParse({
|
21
|
+
description: 'Test page description',
|
22
|
+
hidden: true,
|
23
|
+
})
|
24
|
+
expect(valid.success).toBe(true)
|
25
|
+
expect(valid.data).toEqual({
|
26
|
+
description: 'Test page description',
|
27
|
+
hidden: true,
|
28
|
+
})
|
29
|
+
})
|
30
|
+
|
31
|
+
test('applies default values', () => {
|
32
|
+
const result = Content.MetadataSchema.safeParse({
|
33
|
+
description: 'Just a description',
|
34
|
+
})
|
35
|
+
expect(result.success).toBe(true)
|
36
|
+
expect(result.data?.hidden).toBe(false)
|
37
|
+
})
|
38
|
+
|
39
|
+
test('rejects invalid values', () => {
|
40
|
+
const result = Content.MetadataSchema.safeParse({
|
41
|
+
hidden: 'not a boolean',
|
42
|
+
invalid_field: 123,
|
43
|
+
})
|
44
|
+
expect(result.success).toBe(false)
|
45
|
+
})
|
46
|
+
})
|
47
|
+
|
48
|
+
describe('scan', () => {
|
49
|
+
test('scans directory and extracts metadata', async () => {
|
50
|
+
const filePath = Path.join(testDir, 'page.md')
|
51
|
+
await Fs.write({
|
52
|
+
path: filePath,
|
53
|
+
content: `---
|
54
|
+
description: Page description
|
55
|
+
---
|
56
|
+
Content`,
|
57
|
+
})
|
58
|
+
|
59
|
+
const result = await Content.scan({
|
60
|
+
dir: testDir,
|
61
|
+
glob: '**/*.md',
|
62
|
+
})
|
63
|
+
|
64
|
+
expect(result.list).toHaveLength(1)
|
65
|
+
expect(result.list[0]?.metadata).toEqual({
|
66
|
+
description: 'Page description',
|
67
|
+
hidden: false,
|
68
|
+
})
|
69
|
+
expect(result.diagnostics).toEqual([])
|
70
|
+
})
|
71
|
+
})
|
72
|
+
})
|
@@ -0,0 +1 @@
|
|
1
|
+
export * as Content from './$$.ts'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { z } from 'zod/v4'
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Schema for validating front matter content
|
5
|
+
*/
|
6
|
+
export const MetadataSchema = z.object({
|
7
|
+
description: z.string().optional(),
|
8
|
+
hidden: z.boolean().default(false),
|
9
|
+
})
|
10
|
+
|
11
|
+
export type Metadata = z.infer<typeof MetadataSchema>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import type { FileRouter } from '#lib/file-router/index'
|
2
|
+
import type { Metadata } from './metadata.ts'
|
3
|
+
|
4
|
+
export type { Metadata }
|
5
|
+
|
6
|
+
/**
|
7
|
+
* A route with its associated metadata
|
8
|
+
*/
|
9
|
+
export interface Page {
|
10
|
+
route: FileRouter.Route
|
11
|
+
metadata: Metadata
|
12
|
+
}
|