polen 0.8.0-next.5 → 0.8.0-next.7
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/api/load-config.d.ts.map +1 -1
- package/build/api/load-config.js +0 -1
- package/build/api/load-config.js.map +1 -1
- package/build/api/vite/plugins/core.d.ts.map +1 -1
- package/build/api/vite/plugins/core.js +83 -20
- package/build/api/vite/plugins/core.js.map +1 -1
- package/build/cli/commands/dev.js +25 -0
- package/build/cli/commands/dev.js.map +1 -1
- package/build/lib/file-router/sidebar.d.ts +2 -0
- package/build/lib/file-router/sidebar.d.ts.map +1 -0
- package/build/lib/file-router/sidebar.js +2 -0
- package/build/lib/file-router/sidebar.js.map +1 -0
- package/build/project-data.d.ts +15 -4
- package/build/project-data.d.ts.map +1 -1
- package/build/template/components/Sidebar.d.ts +1 -5
- package/build/template/components/Sidebar.d.ts.map +1 -1
- package/build/template/components/Sidebar.jsx +73 -12
- package/build/template/components/Sidebar.jsx.map +1 -1
- package/build/template/routes/root.jsx +3 -3
- package/build/template/routes/root.jsx.map +1 -1
- package/package.json +1 -1
- package/src/api/load-config.ts +0 -1
- package/src/api/vite/plugins/core.ts +107 -26
- package/src/cli/commands/dev.ts +29 -0
- package/src/lib/file-router/sidebar.ts +0 -0
- package/src/project-data.ts +18 -4
- package/src/template/components/Sidebar.tsx +123 -30
- package/src/template/routes/root.tsx +3 -3
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../src/api/load-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAgB,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAG/E,eAAO,MAAM,UAAU,GAAU,MAAM;IACrC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAA;CACrC,KAAG,OAAO,CAAC,uBAAuB,
|
1
|
+
{"version":3,"file":"load-config.d.ts","sourceRoot":"","sources":["../../src/api/load-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAgB,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAG/E,eAAO,MAAM,UAAU,GAAU,MAAM;IACrC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAA;CACrC,KAAG,OAAO,CAAC,uBAAuB,CA2ClC,CAAA"}
|
package/build/api/load-config.js
CHANGED
@@ -13,7 +13,6 @@ export const loadConfig = async (args) => {
|
|
13
13
|
// since its via CLI, no Vite bundle context, maybe we can use the new nodejs flags for parsing TS...
|
14
14
|
// or just use tsx
|
15
15
|
const loaded = await Vite.loadConfigFromFile(env, configFilePath, dir, undefined, logger);
|
16
|
-
// console.log(`wtf??`, args)
|
17
16
|
let config;
|
18
17
|
if (loaded) {
|
19
18
|
// hack: do one read
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"load-config.js","sourceRoot":"","sources":["../../src/api/load-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,YAAY,EAAgC,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,IAIhC,EAAoC,EAAE;IACrC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACpB,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAEjE,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;IAElE,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3C,CAAC;IAED,uFAAuF;IACvF,qGAAqG;IACrG,kBAAkB;IAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC1C,GAAG,EACH,cAAc,EACd,GAAG,EACH,SAAS,EACT,MAAM,CACP,CAAA;IAED,
|
1
|
+
{"version":3,"file":"load-config.js","sourceRoot":"","sources":["../../src/api/load-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,EAAE,YAAY,EAAgC,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,IAIhC,EAAoC,EAAE;IACrC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACpB,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAEjE,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;IAElE,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3C,CAAC;IAED,uFAAuF;IACvF,qGAAqG;IACrG,kBAAkB;IAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC1C,GAAG,EACH,cAAc,EACd,GAAG,EACH,SAAS,EACT,MAAM,CACP,CAAA;IAED,IAAI,MAA+B,CAAA;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,oBAAoB;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAiC,CAAA;QACxD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAA;QAClC,MAAM,GAAG,MAAM,YAAY,CAAC;YAC1B,GAAG,KAAK;YACR,KAAK,EAAE;gBACL,GAAG,KAAK,EAAE,KAAK;gBACf,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK;aACzB;YACD,QAAQ,EAAE;gBACR,GAAG,KAAK,EAAE,QAAQ;gBAClB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ;aAC5B;SACF,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC7C,CAAC;IACD,eAAe;IAEf,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/api/vite/plugins/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/api/vite/plugins/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAgB9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAW/D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,WAAW,CAAC,WAAW,EAAE,CAAA;CACjC;AAED,eAAO,MAAM,IAAI,GAAI,QAAQ,YAAY,CAAC,MAAM,KAAG,IAAI,CAAC,YAAY,EA4OnE,CAAA"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { FileRouter } from '#lib/file-router/index.js';
|
2
2
|
import { ViteVirtual } from '#lib/vite-virtual/index.js';
|
3
3
|
import mdx from '@mdx-js/rollup';
|
4
|
-
import { Cache, Json, Path, Str } from '@wollybeard/kit';
|
4
|
+
import { Cache, Idx, Json, Path, Str } from '@wollybeard/kit';
|
5
5
|
import jsesc from 'jsesc';
|
6
6
|
import remarkGfm from 'remark-gfm';
|
7
7
|
import { superjson } from '../../../singletons/superjson.js';
|
@@ -159,31 +159,18 @@ export const Core = (config) => {
|
|
159
159
|
//
|
160
160
|
// ━━ Build Sidebar
|
161
161
|
//
|
162
|
-
const
|
162
|
+
const sidebarIndex = {};
|
163
163
|
for (const dirPath of topDirsPaths) {
|
164
164
|
const childPages = pagesScanResult.routes.filter(page => FileRouter.routeIsSubOf(page, dirPath));
|
165
|
-
|
166
|
-
// ━ Pages in this dir become sidebar items
|
167
|
-
for (const childPage of childPages) {
|
168
|
-
const childPageRelative = FileRouter.makeRelativeUnsafe(childPage, dirPath);
|
169
|
-
if (FileRouter.routeIsRootLevel(childPageRelative)) {
|
170
|
-
// We elide root from items. Root represents this whole group of items.
|
171
|
-
continue;
|
172
|
-
}
|
173
|
-
if (FileRouter.routeIsTopLevel(childPageRelative)) {
|
174
|
-
const pathExp = FileRouter.routeToPathExpression(childPage);
|
175
|
-
const relativePathExp = FileRouter.routeToPathExpression(childPageRelative);
|
176
|
-
const title = Str.titlizeSlug(relativePathExp);
|
177
|
-
sidebarItems.push({ pathExp, title });
|
178
|
-
}
|
179
|
-
// TODO: Handle nested directories in phase 3
|
180
|
-
}
|
181
|
-
sidebar[FileRouter.pathToExpression(dirPath)] = sidebarItems;
|
165
|
+
sidebarIndex[FileRouter.pathToExpression(dirPath)] = buildSidebar(childPages, dirPath);
|
182
166
|
}
|
167
|
+
//
|
168
|
+
// ━━ Put It All together
|
169
|
+
//
|
183
170
|
const projectData = {
|
184
171
|
schema,
|
185
172
|
siteNavigationItems,
|
186
|
-
|
173
|
+
sidebarIndex,
|
187
174
|
faviconPath: `/logo.svg`,
|
188
175
|
pagesScanResult: pagesScanResult,
|
189
176
|
paths: config.paths.project,
|
@@ -235,4 +222,80 @@ export const Core = (config) => {
|
|
235
222
|
},
|
236
223
|
];
|
237
224
|
};
|
225
|
+
/**
|
226
|
+
* Helper function to build sidebar items recursively
|
227
|
+
*/
|
228
|
+
const buildSidebar = (pages, basePath) => {
|
229
|
+
const navs = [];
|
230
|
+
const sections = Idx.create({ toKey: (item) => item.pathExp });
|
231
|
+
// Items
|
232
|
+
for (const page of pages) {
|
233
|
+
const pageRelative = FileRouter.makeRelativeUnsafe(page, basePath);
|
234
|
+
if (FileRouter.routeIsRootLevel(pageRelative)) {
|
235
|
+
continue;
|
236
|
+
}
|
237
|
+
if (FileRouter.routeIsTopLevel(pageRelative)) {
|
238
|
+
// Section (index)
|
239
|
+
if (FileRouter.routeIsFromIndexFile(pageRelative)) {
|
240
|
+
const sectionPath = page.logical.path;
|
241
|
+
const sectionPathExp = FileRouter.pathToExpression(sectionPath);
|
242
|
+
let section;
|
243
|
+
section = sections.getKey(sectionPathExp);
|
244
|
+
if (!section) {
|
245
|
+
const sectionTitle = Str.titlizeSlug(FileRouter.pathToExpression(pageRelative.logical.path));
|
246
|
+
section = {
|
247
|
+
type: `SidebarSection`,
|
248
|
+
title: sectionTitle,
|
249
|
+
pathExp: sectionPathExp,
|
250
|
+
isNavToo: false,
|
251
|
+
navs: [],
|
252
|
+
};
|
253
|
+
sections.set(section);
|
254
|
+
}
|
255
|
+
section.isNavToo = true;
|
256
|
+
continue;
|
257
|
+
}
|
258
|
+
// Nav
|
259
|
+
navs.push(pageToSidebarNav(page, basePath));
|
260
|
+
continue;
|
261
|
+
}
|
262
|
+
// Section (sub-page)
|
263
|
+
if (FileRouter.routeIsSubLevel(pageRelative)) {
|
264
|
+
const sectionRelativePath = [pageRelative.logical.path[0]];
|
265
|
+
const sectionPath = [...basePath, ...sectionRelativePath];
|
266
|
+
const sectionPathExp = FileRouter.pathToExpression(sectionPath);
|
267
|
+
let section;
|
268
|
+
section = sections.getKey(sectionPathExp);
|
269
|
+
if (!section) {
|
270
|
+
const sectionTitle = Str.titlizeSlug(FileRouter.pathToExpression(sectionRelativePath));
|
271
|
+
section = {
|
272
|
+
type: `SidebarSection`,
|
273
|
+
title: sectionTitle,
|
274
|
+
pathExp: sectionPathExp,
|
275
|
+
isNavToo: false,
|
276
|
+
navs: [],
|
277
|
+
};
|
278
|
+
sections.set(section);
|
279
|
+
}
|
280
|
+
section.navs.push(pageToSidebarNav(page, sectionPath));
|
281
|
+
}
|
282
|
+
}
|
283
|
+
const items = [...navs, ...sections.data.array];
|
284
|
+
return {
|
285
|
+
items,
|
286
|
+
};
|
287
|
+
};
|
288
|
+
/**
|
289
|
+
* Helper function to build sidebar items recursively
|
290
|
+
*/
|
291
|
+
const pageToSidebarNav = (page, basePath) => {
|
292
|
+
const pagePathExp = FileRouter.routeToPathExpression(page);
|
293
|
+
const pageRelative = FileRouter.makeRelativeUnsafe(page, basePath);
|
294
|
+
const pageRelativePathExp = FileRouter.routeToPathExpression(pageRelative);
|
295
|
+
return {
|
296
|
+
type: `SidebarItem`,
|
297
|
+
pathExp: pagePathExp,
|
298
|
+
title: Str.titlizeSlug(pageRelativePathExp),
|
299
|
+
};
|
300
|
+
};
|
238
301
|
//# sourceMappingURL=core.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/api/vite/plugins/core.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,GAAG,MAAM,gBAAgB,CAAA;AAChC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/api/vite/plugins/core.ts"],"names":[],"mappings":"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"}
|
@@ -1,11 +1,36 @@
|
|
1
|
+
/* eslint-disable */
|
2
|
+
// @ts-nocheck
|
1
3
|
import { Vite } from '#dep/vite/index.js';
|
4
|
+
import { Command } from '@molt/command';
|
2
5
|
import { Err } from '@wollybeard/kit';
|
6
|
+
import { z } from 'zod';
|
3
7
|
import { loadConfig } from '../../api/load-config.js';
|
8
|
+
const args = Command.create()
|
9
|
+
.parameter(`--project -p`,
|
10
|
+
// @ts-expect-error
|
11
|
+
z.string().optional().describe(`The path to the project directory. Default is CWD (current working directory).`))
|
12
|
+
.settings({
|
13
|
+
parameters: {
|
14
|
+
environment: {
|
15
|
+
$default: {
|
16
|
+
// todo prfix seting doesn't seem to work with Molt!
|
17
|
+
prefix: `POLEN_DEV_`,
|
18
|
+
enabled: false,
|
19
|
+
},
|
20
|
+
},
|
21
|
+
},
|
22
|
+
})
|
23
|
+
.parse();
|
24
|
+
const dir = args.project;
|
4
25
|
const config = await loadConfig({
|
5
26
|
env: {
|
6
27
|
command: `serve`,
|
7
28
|
mode: `development`,
|
8
29
|
},
|
30
|
+
dir,
|
31
|
+
overrides: {
|
32
|
+
root: dir,
|
33
|
+
},
|
9
34
|
});
|
10
35
|
const viteDevServer = await Err.tryCatch(() => Vite.createServer(config));
|
11
36
|
if (Err.is(viteDevServer)) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAErD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;IAC9B,GAAG,EAAE;QACH,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,aAAa;KACpB;CACF,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA;AAEzE,IAAI,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;IAC1B,yBAAyB;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,aAAa,CAAC,MAAM,EAAE,CAAA;AAE5B,aAAa,CAAC,SAAS,EAAE,CAAA"}
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,cAAc;AACd,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAErD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE;KAC1B,SAAS,CACR,cAAc;AACd,mBAAmB;AACnB,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gFAAgF,CAAC,CACjH;KACA,QAAQ,CAAC;IACR,UAAU,EAAE;QACV,WAAW,EAAE;YACX,QAAQ,EAAE;gBACR,oDAAoD;gBACpD,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,KAAK;aACf;SACF;KACF;CACF,CAAC;KACD,KAAK,EAAE,CAAA;AAEV,MAAM,GAAG,GAAG,IAAI,CAAC,OAAiB,CAAA;AAElC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;IAC9B,GAAG,EAAE;QACH,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,aAAa;KACpB;IACD,GAAG;IACH,SAAS,EAAE;QACT,IAAI,EAAE,GAAG;KACV;CACF,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA;AAEzE,IAAI,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;IAC1B,yBAAyB;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,aAAa,CAAC,MAAM,EAAE,CAAA;AAE5B,aAAa,CAAC,SAAS,EAAE,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/sidebar.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../src/lib/file-router/sidebar.ts"],"names":[],"mappings":""}
|
package/build/project-data.d.ts
CHANGED
@@ -4,7 +4,7 @@ import type { Schema } from './api/schema/index.js';
|
|
4
4
|
export interface ProjectData {
|
5
5
|
schema: null | Schema.Schema;
|
6
6
|
siteNavigationItems: SiteNavigationItem[];
|
7
|
-
|
7
|
+
sidebarIndex: SidebarIndex;
|
8
8
|
faviconPath: string;
|
9
9
|
paths: Configurator.Config[`paths`][`project`];
|
10
10
|
pagesScanResult: FileRouter.ScanResult;
|
@@ -19,12 +19,23 @@ export interface SiteNavigationItem {
|
|
19
19
|
title: string;
|
20
20
|
pathExp: string;
|
21
21
|
}
|
22
|
+
export interface SidebarIndex {
|
23
|
+
[pathExpression: string]: Sidebar;
|
24
|
+
}
|
22
25
|
export interface Sidebar {
|
23
|
-
|
26
|
+
items: SidebarItem[];
|
27
|
+
}
|
28
|
+
export type SidebarItem = SidebarNav | SidebarSection;
|
29
|
+
export interface SidebarNav {
|
30
|
+
type: `SidebarItem`;
|
31
|
+
title: string;
|
32
|
+
pathExp: string;
|
24
33
|
}
|
25
|
-
export interface
|
34
|
+
export interface SidebarSection {
|
35
|
+
type: `SidebarSection`;
|
26
36
|
title: string;
|
27
37
|
pathExp: string;
|
28
|
-
|
38
|
+
isNavToo: boolean;
|
39
|
+
navs: SidebarNav[];
|
29
40
|
}
|
30
41
|
//# sourceMappingURL=project-data.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"project-data.d.ts","sourceRoot":"","sources":["../src/project-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;IAC5B,mBAAmB,EAAE,kBAAkB,EAAE,CAAA;IACzC,
|
1
|
+
{"version":3,"file":"project-data.d.ts","sourceRoot":"","sources":["../src/project-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;IAC5B,mBAAmB,EAAE,kBAAkB,EAAE,CAAA;IACzC,YAAY,EAAE,YAAY,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAA;IAC9C,eAAe,EAAE,UAAU,CAAC,UAAU,CAAA;IACtC,MAAM,EAAE;QACN,MAAM,EAAE;YACN,SAAS,EAAE,MAAM,CAAA;YACjB,KAAK,EAAE,MAAM,CAAA;SACd,CAAA;KACF,CAAA;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAA;CAClC;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,WAAW,EAAE,CAAA;CACrB;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,cAAc,CAAA;AAErD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,gBAAgB,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,UAAU,EAAE,CAAA;CACnB"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/template/components/Sidebar.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/template/components/Sidebar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,uBAAuB,CAAA;AAEpF,UAAU,YAAY;IACpB,KAAK,EAAE,WAAW,EAAE,CAAA;CACrB;AAED,eAAO,MAAM,OAAO,GAAI,WAAW,YAAY,gCAyB9C,CAAA"}
|
@@ -1,23 +1,31 @@
|
|
1
|
+
import { ChevronDownIcon, ChevronRightIcon } from '@radix-ui/react-icons';
|
1
2
|
import { Box, Flex, Text } from '@radix-ui/themes';
|
3
|
+
import { useState } from 'react';
|
2
4
|
import { Link, useLocation } from 'react-router';
|
3
5
|
export const Sidebar = ({ items }) => {
|
4
6
|
const location = useLocation();
|
5
7
|
return (<Box style={{
|
6
8
|
width: `240px`,
|
9
|
+
minWidth: `240px`,
|
10
|
+
flexShrink: 0,
|
7
11
|
borderRight: `1px solid var(--gray-3)`,
|
8
12
|
height: `100%`,
|
9
13
|
paddingRight: `var(--space-4)`,
|
10
14
|
}}>
|
11
15
|
<Flex direction='column' gap='1'>
|
12
|
-
{items.map((item) => (<
|
16
|
+
{items.map((item) => (<SidebarItemComponent key={item.pathExp} item={item} currentPathExp={location.pathname}/>))}
|
13
17
|
</Flex>
|
14
18
|
</Box>);
|
15
19
|
};
|
16
|
-
const
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
const SidebarItemComponent = ({ item, currentPathExp, level = 0 }) => {
|
21
|
+
if (item.type === `SidebarItem`) {
|
22
|
+
return <SidebarNavItem nav={item} currentPathExp={currentPathExp} level={level}/>;
|
23
|
+
}
|
24
|
+
return <SidebarSectionItem section={item} currentPathExp={currentPathExp} level={level}/>;
|
25
|
+
};
|
26
|
+
const SidebarNavItem = ({ nav, currentPathExp, level }) => {
|
27
|
+
const isActive = currentPathExp === nav.pathExp;
|
28
|
+
return (<Link to={nav.pathExp} style={{
|
21
29
|
textDecoration: `none`,
|
22
30
|
color: isActive ? `var(--accent-11)` : `var(--gray-12)`,
|
23
31
|
padding: `var(--space-2) var(--space-3)`,
|
@@ -35,12 +43,65 @@ const SidebarItem = ({ item, currentPathExp: currentPath, level = 0 }) => {
|
|
35
43
|
e.currentTarget.style.backgroundColor = `transparent`;
|
36
44
|
}
|
37
45
|
}}>
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
46
|
+
<Text size='2' weight={isActive ? `medium` : `regular`}>
|
47
|
+
{nav.title}
|
48
|
+
</Text>
|
49
|
+
</Link>);
|
50
|
+
};
|
51
|
+
const SidebarSectionItem = ({ section, currentPathExp, level }) => {
|
52
|
+
const [isExpanded, setIsExpanded] = useState(true);
|
53
|
+
const isDirectlyActive = currentPathExp === section.pathExp;
|
54
|
+
const hasActiveChild = section.navs.some(nav => currentPathExp === nav.pathExp);
|
55
|
+
const isActiveGroup = isDirectlyActive || hasActiveChild;
|
56
|
+
return (<>
|
57
|
+
<Flex align='center' style={{
|
58
|
+
padding: `var(--space-2) var(--space-3)`,
|
59
|
+
paddingLeft: `calc(var(--space-3) + ${(level * 16).toString()}px)`,
|
60
|
+
borderRadius: `var(--radius-2)`,
|
61
|
+
backgroundColor: isDirectlyActive ? `var(--accent-3)` : hasActiveChild ? `var(--accent-2)` : `transparent`,
|
62
|
+
transition: `background-color 0.2s ease`,
|
63
|
+
}} onMouseEnter={(e) => {
|
64
|
+
if (!isActiveGroup) {
|
65
|
+
e.currentTarget.style.backgroundColor = `var(--gray-2)`;
|
66
|
+
}
|
67
|
+
}} onMouseLeave={(e) => {
|
68
|
+
if (!isActiveGroup) {
|
69
|
+
e.currentTarget.style.backgroundColor = `transparent`;
|
70
|
+
}
|
71
|
+
}}>
|
72
|
+
<Box onClick={(e) => {
|
73
|
+
e.stopPropagation();
|
74
|
+
console.log(`Chevron clicked!`);
|
75
|
+
setIsExpanded(!isExpanded);
|
76
|
+
}} style={{
|
77
|
+
display: `flex`,
|
78
|
+
alignItems: `center`,
|
79
|
+
cursor: `pointer`,
|
80
|
+
padding: `4px`,
|
81
|
+
marginRight: `4px`,
|
82
|
+
marginLeft: `-4px`,
|
83
|
+
}}>
|
84
|
+
{isExpanded ? <ChevronDownIcon /> : <ChevronRightIcon />}
|
85
|
+
</Box>
|
86
|
+
{section.isNavToo
|
87
|
+
? (<Link to={section.pathExp} style={{
|
88
|
+
textDecoration: `none`,
|
89
|
+
color: isDirectlyActive ? `var(--accent-11)` : `var(--gray-12)`,
|
90
|
+
flex: 1,
|
91
|
+
}}>
|
92
|
+
<Text size='2' weight={isDirectlyActive ? `bold` : `medium`}>
|
93
|
+
{section.title}
|
94
|
+
</Text>
|
95
|
+
</Link>)
|
96
|
+
: (<Text size='2' weight={isDirectlyActive ? `bold` : `medium`} style={{
|
97
|
+
flex: 1,
|
98
|
+
color: isDirectlyActive ? `var(--accent-11)` : `var(--gray-12)`,
|
99
|
+
}}>
|
100
|
+
{section.title}
|
101
|
+
</Text>)}
|
102
|
+
</Flex>
|
103
|
+
{isExpanded && (<Flex direction='column' gap='1'>
|
104
|
+
{section.navs.map((nav) => (<SidebarNavItem key={nav.pathExp} nav={nav} currentPathExp={currentPathExp} level={level + 1}/>))}
|
44
105
|
</Flex>)}
|
45
106
|
</>);
|
46
107
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Sidebar.jsx","sourceRoot":"","sources":["../../../src/template/components/Sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;
|
1
|
+
{"version":3,"file":"Sidebar.jsx","sourceRoot":"","sources":["../../../src/template/components/Sidebar.tsx"],"names":[],"mappings":"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"}
|
@@ -53,8 +53,8 @@ const Layout = () => {
|
|
53
53
|
return null;
|
54
54
|
};
|
55
55
|
const currentNavPathExp = getCurrentNavPathExp();
|
56
|
-
const
|
57
|
-
const showSidebar =
|
56
|
+
const sidebar = currentNavPathExp && PROJECT_DATA.sidebarIndex[currentNavPathExp];
|
57
|
+
const showSidebar = sidebar && sidebar.items.length > 0;
|
58
58
|
return (<Theme asChild>
|
59
59
|
<Box m='8'>
|
60
60
|
<Flex align='center' gap='8' pb='4' mb='8' style={{
|
@@ -76,7 +76,7 @@ const Layout = () => {
|
|
76
76
|
</Flex>
|
77
77
|
{showSidebar
|
78
78
|
? (<Flex gap='8'>
|
79
|
-
<Sidebar items={
|
79
|
+
<Sidebar items={sidebar.items}/>
|
80
80
|
<Box style={{ flex: 1 }}>
|
81
81
|
<Outlet />
|
82
82
|
</Box>
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"root.jsx","sourceRoot":"","sources":["../../../src/template/routes/root.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,cAAc,MAAM,iCAAiC,CAAA;AAC5D,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,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,IAAI,CACH,GAAG,CAAC,MAAM,CACV,IAAI,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAChE,KAAK,CAAC,WAAW,EAEnB;QAAA,CAAC,IAAI,CACH,GAAG,CAAC,MAAM,CACV,IAAI,CAAC,CAAC,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC,CACxC,KAAK,CAAC,KAAK,CACX,IAAI,CAAC,eAAe,EAExB;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CACzB;QAAA,CAAC,MAAM,CAAC,AAAD,EACP;QAAA,CAAC,iBAAiB,CAAC,AAAD,EAClB;QAAA,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,CAC9E;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,GAAG,EAAE;IAClB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,4DAA4D;IAC5D,MAAM,oBAAoB,GAAG,GAAkB,EAAE;QAC/C,gGAAgG;QAChG,iGAAiG;QACjG,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC7D,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAA;IAChD,MAAM,
|
1
|
+
{"version":3,"file":"root.jsx","sourceRoot":"","sources":["../../../src/template/routes/root.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,cAAc,MAAM,iCAAiC,CAAA;AAC5D,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,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,IAAI,CACH,GAAG,CAAC,MAAM,CACV,IAAI,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAChE,KAAK,CAAC,WAAW,EAEnB;QAAA,CAAC,IAAI,CACH,GAAG,CAAC,MAAM,CACV,IAAI,CAAC,CAAC,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC,CACxC,KAAK,CAAC,KAAK,CACX,IAAI,CAAC,eAAe,EAExB;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CACzB;QAAA,CAAC,MAAM,CAAC,AAAD,EACP;QAAA,CAAC,iBAAiB,CAAC,AAAD,EAClB;QAAA,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,CAC9E;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,GAAG,EAAE;IAClB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,4DAA4D;IAC5D,MAAM,oBAAoB,GAAG,GAAkB,EAAE;QAC/C,gGAAgG;QAChG,iGAAiG;QACjG,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC7D,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAA;IAChD,MAAM,OAAO,GAAG,iBAAiB,IAAI,YAAY,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;IACjF,MAAM,WAAW,GAAG,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAEvD,OAAO,CACL,CAAC,KAAK,CAAC,OAAO,CACZ;MAAA,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CACR;QAAA,CAAC,IAAI,CACH,KAAK,CAAC,QAAQ,CACd,GAAG,CAAC,GAAG,CACP,EAAE,CAAC,GAAG,CACN,EAAE,CAAC,GAAG,CACN,KAAK,CAAC,CAAC;YACL,YAAY,EAAE,yBAAyB;SACxC,CAAC,CAEF;UAAA,CAAC,eAAe,CACd,EAAE,CAAC,GAAG,CACN,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAEpD;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAC1B;cAAA,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EACjD;cAAA,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAC5B;gBAAA,CAAC,iBAAiB,CAAC,KAAK,CAC1B;cAAA,EAAE,IAAI,CACR;YAAA,EAAE,IAAI,CACR;UAAA,EAAE,eAAe,CACjB;UAAA,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAC3B;YAAA,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CACnD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAC5C;gBAAA,CAAC,IAAI,CAAC,KAAK,CACb;cAAA,EAAE,IAAI,CAAC,CACR,CAAC,CACJ;UAAA,EAAE,IAAI,CACR;QAAA,EAAE,IAAI,CACN;QAAA,CAAC,WAAW;YACV,CAAC,CAAC,CACA,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CACX;cAAA,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAC9B;cAAA,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CACtB;gBAAA,CAAC,MAAM,CAAC,AAAD,EACT;cAAA,EAAE,GAAG,CACP;YAAA,EAAE,IAAI,CAAC,CACR;YACD,CAAC,CAAC,CACA,CAAC,GAAG,CACF;cAAA,CAAC,MAAM,CAAC,AAAD,EACT;YAAA,EAAE,GAAG,CAAC,CACP,CACL;MAAA,EAAE,GAAG,CACP;IAAA,EAAE,KAAK,CAAC,CACT,CAAA;AACH,CAAC,CAAA;AAED,MAAM,QAAQ,GAA8B;IAC1C,KAAK;IACL,GAAG,KAAK;CACT,CAAA;AAED,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,8DAA8D;AAC9D,EAAE;AACF,EAAE;AACF,EAAE;AAEF,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AAC1B,CAAC;AAED,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,mCAAmC;AACnC,EAAE;AACF,EAAE;AACF,EAAE;AAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAC7B,OAAO,CACL,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CACjG;MAAA,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,CAClE;MAAA,CAAC,GAAG,CACF;QAAA,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAChD;QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CACzB;;QACF,EAAE,IAAI,CACR;MAAA,EAAE,GAAG,CACL;MAAA,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CACX;QAAA,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,CACrB;UAAA,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAC7B;;UACF,EAAE,MAAM,CACV;QAAA,EAAE,eAAe,CACjB;QAAA,CAAC,eAAe,CAAC,EAAE,CAAC,YAAY,CAC9B;UAAA,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAChC;;UACF,EAAE,MAAM,CACV;QAAA,EAAE,eAAe,CACnB;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,WAAW,CAAC;IAChC,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,GAAG;IACT,SAAS,EAAE,iBAAiB;IAC5B,MAAM,EAAE;QACN,UAAU,EAAE,GAAG;KAChB;CACF,CAAC,CAAA;AACF,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AAE5B,EAAE;AACF,EAAE;AACF,EAAE;AACF,8BAA8B;AAC9B,EAAE;AACF,EAAE;AAEF,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAEvD,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAC;IAC9B,IAAI,EAAE,GAAG;IACT,SAAS;IACT,QAAQ;CACT,CAAC,CAAA"}
|
package/package.json
CHANGED
package/src/api/load-config.ts
CHANGED
@@ -3,10 +3,17 @@ import type { Vite } from '#dep/vite/index.js'
|
|
3
3
|
import { FileRouter } from '#lib/file-router/index.js'
|
4
4
|
import { ViteVirtual } from '#lib/vite-virtual/index.js'
|
5
5
|
import mdx from '@mdx-js/rollup'
|
6
|
-
import { Cache, Json, Path, Str } from '@wollybeard/kit'
|
6
|
+
import { Cache, Idx, Json, Path, Str } from '@wollybeard/kit'
|
7
7
|
import jsesc from 'jsesc'
|
8
8
|
import remarkGfm from 'remark-gfm'
|
9
|
-
import type {
|
9
|
+
import type {
|
10
|
+
ProjectData,
|
11
|
+
Sidebar,
|
12
|
+
SidebarIndex,
|
13
|
+
SidebarNav,
|
14
|
+
SidebarSection,
|
15
|
+
SiteNavigationItem,
|
16
|
+
} from '../../../project-data.js'
|
10
17
|
import { superjson } from '../../../singletons/superjson.js'
|
11
18
|
import type { Configurator } from '../../configurator/index.js'
|
12
19
|
import { SchemaAugmentation } from '../../schema-augmentation/index.js'
|
@@ -185,38 +192,21 @@ export const Core = (config: Configurator.Config): Vite.PluginOption[] => {
|
|
185
192
|
// ━━ Build Sidebar
|
186
193
|
//
|
187
194
|
|
188
|
-
const
|
195
|
+
const sidebarIndex: SidebarIndex = {}
|
189
196
|
|
190
197
|
for (const dirPath of topDirsPaths) {
|
191
198
|
const childPages = pagesScanResult.routes.filter(page => FileRouter.routeIsSubOf(page, dirPath))
|
192
|
-
|
193
|
-
const sidebarItems: SidebarItem[] = []
|
194
|
-
|
195
|
-
// ━ Pages in this dir become sidebar items
|
196
|
-
for (const childPage of childPages) {
|
197
|
-
const childPageRelative = FileRouter.makeRelativeUnsafe(childPage, dirPath)
|
198
|
-
|
199
|
-
if (FileRouter.routeIsRootLevel(childPageRelative)) {
|
200
|
-
// We elide root from items. Root represents this whole group of items.
|
201
|
-
continue
|
202
|
-
}
|
203
|
-
|
204
|
-
if (FileRouter.routeIsTopLevel(childPageRelative)) {
|
205
|
-
const pathExp = FileRouter.routeToPathExpression(childPage)
|
206
|
-
const relativePathExp = FileRouter.routeToPathExpression(childPageRelative)
|
207
|
-
const title = Str.titlizeSlug(relativePathExp)
|
208
|
-
sidebarItems.push({ pathExp, title })
|
209
|
-
}
|
210
|
-
// TODO: Handle nested directories in phase 3
|
211
|
-
}
|
212
|
-
|
213
|
-
sidebar[FileRouter.pathToExpression(dirPath)] = sidebarItems
|
199
|
+
sidebarIndex[FileRouter.pathToExpression(dirPath)] = buildSidebar(childPages, dirPath)
|
214
200
|
}
|
215
201
|
|
202
|
+
//
|
203
|
+
// ━━ Put It All together
|
204
|
+
//
|
205
|
+
|
216
206
|
const projectData: ProjectData = {
|
217
207
|
schema,
|
218
208
|
siteNavigationItems,
|
219
|
-
|
209
|
+
sidebarIndex,
|
220
210
|
faviconPath: `/logo.svg`,
|
221
211
|
pagesScanResult: pagesScanResult,
|
222
212
|
paths: config.paths.project,
|
@@ -277,3 +267,94 @@ export const Core = (config: Configurator.Config): Vite.PluginOption[] => {
|
|
277
267
|
},
|
278
268
|
]
|
279
269
|
}
|
270
|
+
|
271
|
+
/**
|
272
|
+
* Helper function to build sidebar items recursively
|
273
|
+
*/
|
274
|
+
const buildSidebar = (pages: FileRouter.Route[], basePath: FileRouter.Path): Sidebar => {
|
275
|
+
const navs: SidebarNav[] = []
|
276
|
+
const sections = Idx.create<SidebarSection, string>({ toKey: (item) => item.pathExp })
|
277
|
+
|
278
|
+
// Items
|
279
|
+
for (const page of pages) {
|
280
|
+
const pageRelative = FileRouter.makeRelativeUnsafe(page, basePath)
|
281
|
+
|
282
|
+
if (FileRouter.routeIsRootLevel(pageRelative)) {
|
283
|
+
continue
|
284
|
+
}
|
285
|
+
|
286
|
+
if (FileRouter.routeIsTopLevel(pageRelative)) {
|
287
|
+
// Section (index)
|
288
|
+
if (FileRouter.routeIsFromIndexFile(pageRelative)) {
|
289
|
+
const sectionPath = page.logical.path
|
290
|
+
const sectionPathExp = FileRouter.pathToExpression(sectionPath)
|
291
|
+
|
292
|
+
let section: SidebarSection | undefined
|
293
|
+
section = sections.getKey(sectionPathExp)
|
294
|
+
|
295
|
+
if (!section) {
|
296
|
+
const sectionTitle = Str.titlizeSlug(FileRouter.pathToExpression(pageRelative.logical.path))
|
297
|
+
section = {
|
298
|
+
type: `SidebarSection`,
|
299
|
+
title: sectionTitle,
|
300
|
+
pathExp: sectionPathExp,
|
301
|
+
isNavToo: false,
|
302
|
+
navs: [],
|
303
|
+
}
|
304
|
+
|
305
|
+
sections.set(section)
|
306
|
+
}
|
307
|
+
section.isNavToo = true
|
308
|
+
continue
|
309
|
+
}
|
310
|
+
|
311
|
+
// Nav
|
312
|
+
navs.push(pageToSidebarNav(page, basePath))
|
313
|
+
continue
|
314
|
+
}
|
315
|
+
|
316
|
+
// Section (sub-page)
|
317
|
+
if (FileRouter.routeIsSubLevel(pageRelative)) {
|
318
|
+
const sectionRelativePath = [pageRelative.logical.path[0]]
|
319
|
+
const sectionPath = [...basePath, ...sectionRelativePath]
|
320
|
+
const sectionPathExp = FileRouter.pathToExpression(sectionPath)
|
321
|
+
|
322
|
+
let section: SidebarSection | undefined
|
323
|
+
section = sections.getKey(sectionPathExp)
|
324
|
+
|
325
|
+
if (!section) {
|
326
|
+
const sectionTitle = Str.titlizeSlug(FileRouter.pathToExpression(sectionRelativePath))
|
327
|
+
section = {
|
328
|
+
type: `SidebarSection`,
|
329
|
+
title: sectionTitle,
|
330
|
+
pathExp: sectionPathExp,
|
331
|
+
isNavToo: false,
|
332
|
+
navs: [],
|
333
|
+
}
|
334
|
+
sections.set(section)
|
335
|
+
}
|
336
|
+
section.navs.push(pageToSidebarNav(page, sectionPath))
|
337
|
+
}
|
338
|
+
}
|
339
|
+
|
340
|
+
const items = [...navs, ...sections.data.array]
|
341
|
+
|
342
|
+
return {
|
343
|
+
items,
|
344
|
+
}
|
345
|
+
}
|
346
|
+
|
347
|
+
/**
|
348
|
+
* Helper function to build sidebar items recursively
|
349
|
+
*/
|
350
|
+
const pageToSidebarNav = (page: FileRouter.Route, basePath: FileRouter.Path): SidebarNav => {
|
351
|
+
const pagePathExp = FileRouter.routeToPathExpression(page)
|
352
|
+
const pageRelative = FileRouter.makeRelativeUnsafe(page, basePath)
|
353
|
+
const pageRelativePathExp = FileRouter.routeToPathExpression(pageRelative)
|
354
|
+
|
355
|
+
return {
|
356
|
+
type: `SidebarItem`,
|
357
|
+
pathExp: pagePathExp,
|
358
|
+
title: Str.titlizeSlug(pageRelativePathExp),
|
359
|
+
}
|
360
|
+
}
|
package/src/cli/commands/dev.ts
CHANGED
@@ -1,12 +1,41 @@
|
|
1
|
+
/* eslint-disable */
|
2
|
+
// @ts-nocheck
|
1
3
|
import { Vite } from '#dep/vite/index.js'
|
4
|
+
import { Command } from '@molt/command'
|
2
5
|
import { Err } from '@wollybeard/kit'
|
6
|
+
import { z } from 'zod'
|
3
7
|
import { loadConfig } from '../../api/load-config.js'
|
4
8
|
|
9
|
+
const args = Command.create()
|
10
|
+
.parameter(
|
11
|
+
`--project -p`,
|
12
|
+
// @ts-expect-error
|
13
|
+
z.string().optional().describe(`The path to the project directory. Default is CWD (current working directory).`),
|
14
|
+
)
|
15
|
+
.settings({
|
16
|
+
parameters: {
|
17
|
+
environment: {
|
18
|
+
$default: {
|
19
|
+
// todo prfix seting doesn't seem to work with Molt!
|
20
|
+
prefix: `POLEN_DEV_`,
|
21
|
+
enabled: false,
|
22
|
+
},
|
23
|
+
},
|
24
|
+
},
|
25
|
+
})
|
26
|
+
.parse()
|
27
|
+
|
28
|
+
const dir = args.project as string
|
29
|
+
|
5
30
|
const config = await loadConfig({
|
6
31
|
env: {
|
7
32
|
command: `serve`,
|
8
33
|
mode: `development`,
|
9
34
|
},
|
35
|
+
dir,
|
36
|
+
overrides: {
|
37
|
+
root: dir,
|
38
|
+
},
|
10
39
|
})
|
11
40
|
|
12
41
|
const viteDevServer = await Err.tryCatch(() => Vite.createServer(config))
|
File without changes
|
package/src/project-data.ts
CHANGED
@@ -5,7 +5,7 @@ import type { Schema } from './api/schema/index.js'
|
|
5
5
|
export interface ProjectData {
|
6
6
|
schema: null | Schema.Schema
|
7
7
|
siteNavigationItems: SiteNavigationItem[]
|
8
|
-
|
8
|
+
sidebarIndex: SidebarIndex
|
9
9
|
faviconPath: string
|
10
10
|
paths: Configurator.Config[`paths`][`project`]
|
11
11
|
pagesScanResult: FileRouter.ScanResult
|
@@ -22,12 +22,26 @@ export interface SiteNavigationItem {
|
|
22
22
|
pathExp: string
|
23
23
|
}
|
24
24
|
|
25
|
+
export interface SidebarIndex {
|
26
|
+
[pathExpression: string]: Sidebar
|
27
|
+
}
|
28
|
+
|
25
29
|
export interface Sidebar {
|
26
|
-
|
30
|
+
items: SidebarItem[]
|
31
|
+
}
|
32
|
+
|
33
|
+
export type SidebarItem = SidebarNav | SidebarSection
|
34
|
+
|
35
|
+
export interface SidebarNav {
|
36
|
+
type: `SidebarItem`
|
37
|
+
title: string
|
38
|
+
pathExp: string
|
27
39
|
}
|
28
40
|
|
29
|
-
export interface
|
41
|
+
export interface SidebarSection {
|
42
|
+
type: `SidebarSection`
|
30
43
|
title: string
|
31
44
|
pathExp: string
|
32
|
-
|
45
|
+
isNavToo: boolean
|
46
|
+
navs: SidebarNav[]
|
33
47
|
}
|
@@ -1,11 +1,8 @@
|
|
1
|
+
import { ChevronDownIcon, ChevronRightIcon } from '@radix-ui/react-icons'
|
1
2
|
import { Box, Flex, Text } from '@radix-ui/themes'
|
3
|
+
import { useState } from 'react'
|
2
4
|
import { Link, useLocation } from 'react-router'
|
3
|
-
|
4
|
-
export interface SidebarItem {
|
5
|
-
title: string
|
6
|
-
pathExp: string
|
7
|
-
children?: SidebarItem[]
|
8
|
-
}
|
5
|
+
import type { SidebarItem, SidebarNav, SidebarSection } from '../../project-data.js'
|
9
6
|
|
10
7
|
interface SidebarProps {
|
11
8
|
items: SidebarItem[]
|
@@ -18,6 +15,8 @@ export const Sidebar = ({ items }: SidebarProps) => {
|
|
18
15
|
<Box
|
19
16
|
style={{
|
20
17
|
width: `240px`,
|
18
|
+
minWidth: `240px`,
|
19
|
+
flexShrink: 0,
|
21
20
|
borderRight: `1px solid var(--gray-3)`,
|
22
21
|
height: `100%`,
|
23
22
|
paddingRight: `var(--space-4)`,
|
@@ -25,7 +24,7 @@ export const Sidebar = ({ items }: SidebarProps) => {
|
|
25
24
|
>
|
26
25
|
<Flex direction='column' gap='1'>
|
27
26
|
{items.map((item) => (
|
28
|
-
<
|
27
|
+
<SidebarItemComponent
|
29
28
|
key={item.pathExp}
|
30
29
|
item={item}
|
31
30
|
currentPathExp={location.pathname}
|
@@ -36,52 +35,146 @@ export const Sidebar = ({ items }: SidebarProps) => {
|
|
36
35
|
)
|
37
36
|
}
|
38
37
|
|
39
|
-
interface
|
38
|
+
interface SidebarItemComponentProps {
|
40
39
|
item: SidebarItem
|
41
40
|
currentPathExp: string
|
42
41
|
level?: number
|
43
42
|
}
|
44
43
|
|
45
|
-
const
|
46
|
-
|
47
|
-
|
44
|
+
const SidebarItemComponent = ({ item, currentPathExp, level = 0 }: SidebarItemComponentProps) => {
|
45
|
+
if (item.type === `SidebarItem`) {
|
46
|
+
return <SidebarNavItem nav={item} currentPathExp={currentPathExp} level={level} />
|
47
|
+
}
|
48
|
+
|
49
|
+
return <SidebarSectionItem section={item} currentPathExp={currentPathExp} level={level} />
|
50
|
+
}
|
51
|
+
|
52
|
+
interface SidebarNavItemProps {
|
53
|
+
nav: SidebarNav
|
54
|
+
currentPathExp: string
|
55
|
+
level: number
|
56
|
+
}
|
57
|
+
|
58
|
+
const SidebarNavItem = ({ nav, currentPathExp, level }: SidebarNavItemProps) => {
|
59
|
+
const isActive = currentPathExp === nav.pathExp
|
60
|
+
|
61
|
+
return (
|
62
|
+
<Link
|
63
|
+
to={nav.pathExp}
|
64
|
+
style={{
|
65
|
+
textDecoration: `none`,
|
66
|
+
color: isActive ? `var(--accent-11)` : `var(--gray-12)`,
|
67
|
+
padding: `var(--space-2) var(--space-3)`,
|
68
|
+
paddingLeft: `calc(var(--space-3) + ${(level * 16).toString()}px)`,
|
69
|
+
borderRadius: `var(--radius-2)`,
|
70
|
+
display: `block`,
|
71
|
+
backgroundColor: isActive ? `var(--accent-3)` : `transparent`,
|
72
|
+
transition: `background-color 0.2s ease, color 0.2s ease`,
|
73
|
+
}}
|
74
|
+
onMouseEnter={(e) => {
|
75
|
+
if (!isActive) {
|
76
|
+
e.currentTarget.style.backgroundColor = `var(--gray-2)`
|
77
|
+
}
|
78
|
+
}}
|
79
|
+
onMouseLeave={(e) => {
|
80
|
+
if (!isActive) {
|
81
|
+
e.currentTarget.style.backgroundColor = `transparent`
|
82
|
+
}
|
83
|
+
}}
|
84
|
+
>
|
85
|
+
<Text size='2' weight={isActive ? `medium` : `regular`}>
|
86
|
+
{nav.title}
|
87
|
+
</Text>
|
88
|
+
</Link>
|
89
|
+
)
|
90
|
+
}
|
91
|
+
|
92
|
+
interface SidebarSectionItemProps {
|
93
|
+
section: SidebarSection
|
94
|
+
currentPathExp: string
|
95
|
+
level: number
|
96
|
+
}
|
97
|
+
|
98
|
+
const SidebarSectionItem = ({ section, currentPathExp, level }: SidebarSectionItemProps) => {
|
99
|
+
const [isExpanded, setIsExpanded] = useState(true)
|
100
|
+
const isDirectlyActive = currentPathExp === section.pathExp
|
101
|
+
const hasActiveChild = section.navs.some(nav => currentPathExp === nav.pathExp)
|
102
|
+
const isActiveGroup = isDirectlyActive || hasActiveChild
|
48
103
|
|
49
104
|
return (
|
50
105
|
<>
|
51
|
-
<
|
52
|
-
|
106
|
+
<Flex
|
107
|
+
align='center'
|
53
108
|
style={{
|
54
|
-
textDecoration: `none`,
|
55
|
-
color: isActive ? `var(--accent-11)` : `var(--gray-12)`,
|
56
109
|
padding: `var(--space-2) var(--space-3)`,
|
57
110
|
paddingLeft: `calc(var(--space-3) + ${(level * 16).toString()}px)`,
|
58
111
|
borderRadius: `var(--radius-2)`,
|
59
|
-
|
60
|
-
|
61
|
-
transition: `background-color 0.2s ease, color 0.2s ease`,
|
112
|
+
backgroundColor: isDirectlyActive ? `var(--accent-3)` : hasActiveChild ? `var(--accent-2)` : `transparent`,
|
113
|
+
transition: `background-color 0.2s ease`,
|
62
114
|
}}
|
63
115
|
onMouseEnter={(e) => {
|
64
|
-
if (!
|
116
|
+
if (!isActiveGroup) {
|
65
117
|
e.currentTarget.style.backgroundColor = `var(--gray-2)`
|
66
118
|
}
|
67
119
|
}}
|
68
120
|
onMouseLeave={(e) => {
|
69
|
-
if (!
|
121
|
+
if (!isActiveGroup) {
|
70
122
|
e.currentTarget.style.backgroundColor = `transparent`
|
71
123
|
}
|
72
124
|
}}
|
73
125
|
>
|
74
|
-
<
|
75
|
-
{
|
76
|
-
|
77
|
-
|
78
|
-
|
126
|
+
<Box
|
127
|
+
onClick={(e) => {
|
128
|
+
e.stopPropagation()
|
129
|
+
console.log(`Chevron clicked!`)
|
130
|
+
setIsExpanded(!isExpanded)
|
131
|
+
}}
|
132
|
+
style={{
|
133
|
+
display: `flex`,
|
134
|
+
alignItems: `center`,
|
135
|
+
cursor: `pointer`,
|
136
|
+
padding: `4px`,
|
137
|
+
marginRight: `4px`,
|
138
|
+
marginLeft: `-4px`,
|
139
|
+
}}
|
140
|
+
>
|
141
|
+
{isExpanded ? <ChevronDownIcon /> : <ChevronRightIcon />}
|
142
|
+
</Box>
|
143
|
+
{section.isNavToo
|
144
|
+
? (
|
145
|
+
<Link
|
146
|
+
to={section.pathExp}
|
147
|
+
style={{
|
148
|
+
textDecoration: `none`,
|
149
|
+
color: isDirectlyActive ? `var(--accent-11)` : `var(--gray-12)`,
|
150
|
+
flex: 1,
|
151
|
+
}}
|
152
|
+
>
|
153
|
+
<Text size='2' weight={isDirectlyActive ? `bold` : `medium`}>
|
154
|
+
{section.title}
|
155
|
+
</Text>
|
156
|
+
</Link>
|
157
|
+
)
|
158
|
+
: (
|
159
|
+
<Text
|
160
|
+
size='2'
|
161
|
+
weight={isDirectlyActive ? `bold` : `medium`}
|
162
|
+
style={{
|
163
|
+
flex: 1,
|
164
|
+
color: isDirectlyActive ? `var(--accent-11)` : `var(--gray-12)`,
|
165
|
+
}}
|
166
|
+
>
|
167
|
+
{section.title}
|
168
|
+
</Text>
|
169
|
+
)}
|
170
|
+
</Flex>
|
171
|
+
{isExpanded && (
|
79
172
|
<Flex direction='column' gap='1'>
|
80
|
-
{
|
81
|
-
<
|
82
|
-
key={
|
83
|
-
|
84
|
-
currentPathExp={
|
173
|
+
{section.navs.map((nav) => (
|
174
|
+
<SidebarNavItem
|
175
|
+
key={nav.pathExp}
|
176
|
+
nav={nav}
|
177
|
+
currentPathExp={currentPathExp}
|
85
178
|
level={level + 1}
|
86
179
|
/>
|
87
180
|
))}
|
@@ -70,8 +70,8 @@ const Layout = () => {
|
|
70
70
|
}
|
71
71
|
|
72
72
|
const currentNavPathExp = getCurrentNavPathExp()
|
73
|
-
const
|
74
|
-
const showSidebar =
|
73
|
+
const sidebar = currentNavPathExp && PROJECT_DATA.sidebarIndex[currentNavPathExp]
|
74
|
+
const showSidebar = sidebar && sidebar.items.length > 0
|
75
75
|
|
76
76
|
return (
|
77
77
|
<Theme asChild>
|
@@ -107,7 +107,7 @@ const Layout = () => {
|
|
107
107
|
{showSidebar
|
108
108
|
? (
|
109
109
|
<Flex gap='8'>
|
110
|
-
<Sidebar items={
|
110
|
+
<Sidebar items={sidebar.items} />
|
111
111
|
<Box style={{ flex: 1 }}>
|
112
112
|
<Outlet />
|
113
113
|
</Box>
|