mordoc 1.0.1 → 1.0.2
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/bin/cli.js +1 -1
- package/dist/cli/build.d.ts.map +1 -1
- package/dist/cli/build.js +31 -0
- package/dist/cli/build.js.map +1 -1
- package/dist/cli/ssg-runner.d.ts.map +1 -1
- package/dist/cli/ssg-runner.js +49 -8
- package/dist/cli/ssg-runner.js.map +1 -1
- package/dist/config/site-loader.d.ts.map +1 -1
- package/dist/config/site-loader.js +15 -0
- package/dist/config/site-loader.js.map +1 -1
- package/package.json +5 -1
- package/src/app/App.module.css +1 -1
- package/src/app/index.css +2 -3
- package/src/app/landing/button/Button.module.css +7 -1
- package/src/app/main.tsx +2 -1
- package/src/app/not-found/NotFound.module.css +0 -24
- package/src/app/not-found/NotFound.tsx +3 -2
- package/src/app/sidenav/Sidenav.module.css +39 -39
package/bin/cli.js
CHANGED
package/dist/cli/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;CACrB;AA0BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GjF"}
|
package/dist/cli/build.js
CHANGED
|
@@ -144,11 +144,42 @@ export async function runBuildCommand(options) {
|
|
|
144
144
|
await fs.rm(ssrOutDir, { recursive: true, force: true });
|
|
145
145
|
console.log('\n→ verifying output...');
|
|
146
146
|
await verifyBuildOutput(data, clientOutDir);
|
|
147
|
+
console.log('\n→ writing sitemap and robots.txt...');
|
|
148
|
+
await writeSitemapAndRobots(data, clientOutDir);
|
|
147
149
|
console.log('\n→ building search index...');
|
|
148
150
|
await runPagefindIndexer(data, clientOutDir);
|
|
149
151
|
console.log('\n✔ build complete');
|
|
150
152
|
console.log(` output → ${clientOutDir}\n`);
|
|
151
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Writes `sitemap.xml` and `robots.txt` into the client output directory.
|
|
156
|
+
*
|
|
157
|
+
* Every page discovered by the pipeline gets a `<loc>` entry — the sitemap
|
|
158
|
+
* is filesystem-driven, not sidenav-driven, so orphaned pages are included.
|
|
159
|
+
* Both files reference `site.baseUrl`, which is validated to be a full URL
|
|
160
|
+
* with no trailing slash.
|
|
161
|
+
*/
|
|
162
|
+
async function writeSitemapAndRobots(data, clientOutDir) {
|
|
163
|
+
const { baseUrl } = data.site;
|
|
164
|
+
// XML spec requires & to be encoded as & in attribute/text content.
|
|
165
|
+
// routePaths are always slash-only ASCII paths so this is academic, but correct.
|
|
166
|
+
const escapeXml = (v) => v.replace(/&/g, '&');
|
|
167
|
+
const urlEntries = data.pages
|
|
168
|
+
.map((page) => ` <url>\n <loc>${escapeXml(baseUrl + page.entry.routePath)}</loc>\n </url>`)
|
|
169
|
+
.join('\n');
|
|
170
|
+
const sitemap = '<?xml version="1.0" encoding="UTF-8"?>\n' +
|
|
171
|
+
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n' +
|
|
172
|
+
urlEntries + '\n' +
|
|
173
|
+
'</urlset>\n';
|
|
174
|
+
await fs.writeFile(path.join(clientOutDir, 'sitemap.xml'), sitemap, 'utf-8');
|
|
175
|
+
console.log(` sitemap.xml (${data.pages.length} URL${data.pages.length === 1 ? '' : 's'})`);
|
|
176
|
+
const robots = 'User-agent: *\n' +
|
|
177
|
+
'Allow: /\n' +
|
|
178
|
+
'\n' +
|
|
179
|
+
`Sitemap: ${baseUrl}/sitemap.xml\n`;
|
|
180
|
+
await fs.writeFile(path.join(clientOutDir, 'robots.txt'), robots, 'utf-8');
|
|
181
|
+
console.log(' robots.txt');
|
|
182
|
+
}
|
|
152
183
|
/**
|
|
153
184
|
* Defensive post-build checks.
|
|
154
185
|
*
|
package/dist/cli/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,MAAM,sBAAsB,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssg-runner.d.ts","sourceRoot":"","sources":["../../src/cli/ssg-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ssg-runner.d.ts","sourceRoot":"","sources":["../../src/cli/ssg-runner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,sBAAsB,CAAC;AAclE,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,IAAI,EAAE,UAAU,CAAC;IACjB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAmHD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCrE"}
|
package/dist/cli/ssg-runner.js
CHANGED
|
@@ -20,21 +20,62 @@ function escapeHtml(value) {
|
|
|
20
20
|
*
|
|
21
21
|
* Title format matches `Content.tsx`'s `document.title` assignment so
|
|
22
22
|
* dev and prod are consistent: `Page Title — Site Name`.
|
|
23
|
-
*
|
|
24
|
-
*
|
|
23
|
+
*
|
|
24
|
+
* Always emits:
|
|
25
|
+
* - `<title>`, `<meta name="description">` (if available), `<link rel="icon">` (if configured)
|
|
26
|
+
* - `<link rel="canonical">` and `og:url` using `site.baseUrl + routePath`
|
|
27
|
+
* - `og:title`, `og:description` (falls back to site description when page has none)
|
|
28
|
+
*
|
|
29
|
+
* Emits conditionally from `site.metadata`:
|
|
30
|
+
* - `og:type` and `og:image` if declared
|
|
31
|
+
* - Full Twitter Card block (`twitter:card`, `twitter:site`, `twitter:title`,
|
|
32
|
+
* `twitter:description`, `twitter:image`) when `twitterCard` is declared — without
|
|
33
|
+
* `twitter:card` the other twitter tags have no effect, so the whole block is gated on it.
|
|
25
34
|
*/
|
|
26
|
-
function buildHeadHtml(page,
|
|
35
|
+
function buildHeadHtml(page, site, faviconUrl, routePath) {
|
|
27
36
|
const pageTitle = page.frontmatter.title;
|
|
28
37
|
const title = pageTitle
|
|
29
|
-
? `${escapeHtml(pageTitle)} — ${escapeHtml(
|
|
30
|
-
: escapeHtml(
|
|
38
|
+
? `${escapeHtml(pageTitle)} — ${escapeHtml(site.name)}`
|
|
39
|
+
: escapeHtml(site.name);
|
|
40
|
+
// Page description with fallback to site description for social tags only.
|
|
41
|
+
const pageDescription = page.frontmatter.description;
|
|
42
|
+
const socialDescription = pageDescription ?? site.description;
|
|
43
|
+
const canonicalUrl = `${site.baseUrl}${routePath}`;
|
|
44
|
+
const meta = site.metadata;
|
|
31
45
|
const parts = [`<title>${title}</title>`];
|
|
32
|
-
if (
|
|
33
|
-
parts.push(`<meta name="description" content="${escapeHtml(
|
|
46
|
+
if (pageDescription) {
|
|
47
|
+
parts.push(`<meta name="description" content="${escapeHtml(pageDescription)}">`);
|
|
34
48
|
}
|
|
35
49
|
if (faviconUrl) {
|
|
36
50
|
parts.push(`<link rel="icon" href="${escapeHtml(faviconUrl)}">`);
|
|
37
51
|
}
|
|
52
|
+
parts.push(`<link rel="canonical" href="${escapeHtml(canonicalUrl)}">`);
|
|
53
|
+
// OpenGraph
|
|
54
|
+
parts.push(`<meta property="og:url" content="${escapeHtml(canonicalUrl)}">`);
|
|
55
|
+
parts.push(`<meta property="og:title" content="${escapeHtml(title)}">`);
|
|
56
|
+
if (socialDescription) {
|
|
57
|
+
parts.push(`<meta property="og:description" content="${escapeHtml(socialDescription)}">`);
|
|
58
|
+
}
|
|
59
|
+
if (meta?.ogType) {
|
|
60
|
+
parts.push(`<meta property="og:type" content="${escapeHtml(meta.ogType)}">`);
|
|
61
|
+
}
|
|
62
|
+
if (meta?.ogImage) {
|
|
63
|
+
parts.push(`<meta property="og:image" content="${escapeHtml(site.baseUrl + meta.ogImage)}">`);
|
|
64
|
+
}
|
|
65
|
+
// Twitter Card — the full block is only useful when twitter:card is present.
|
|
66
|
+
if (meta?.twitterCard) {
|
|
67
|
+
parts.push(`<meta name="twitter:card" content="${escapeHtml(meta.twitterCard)}">`);
|
|
68
|
+
if (meta.twitterSite) {
|
|
69
|
+
parts.push(`<meta name="twitter:site" content="${escapeHtml(meta.twitterSite)}">`);
|
|
70
|
+
}
|
|
71
|
+
parts.push(`<meta name="twitter:title" content="${escapeHtml(title)}">`);
|
|
72
|
+
if (socialDescription) {
|
|
73
|
+
parts.push(`<meta name="twitter:description" content="${escapeHtml(socialDescription)}">`);
|
|
74
|
+
}
|
|
75
|
+
if (meta.ogImage) {
|
|
76
|
+
parts.push(`<meta name="twitter:image" content="${escapeHtml(site.baseUrl + meta.ogImage)}">`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
38
79
|
return parts.join('\n ');
|
|
39
80
|
}
|
|
40
81
|
/**
|
|
@@ -111,7 +152,7 @@ export async function runSsg(options) {
|
|
|
111
152
|
const request = new Request(`http://localhost${routePath}`);
|
|
112
153
|
const { html: appHtml } = await ssrModule.render(request, shellData);
|
|
113
154
|
const pageLang = detectCurrentLang(routePath, data.language, data.site.defaultLanguage);
|
|
114
|
-
const headHtml = buildHeadHtml(page, data.site
|
|
155
|
+
const headHtml = buildHeadHtml(page, data.site, data.assets.favicon, routePath);
|
|
115
156
|
// lang is a plain ASCII code — string-form replace is safe (no $-patterns)
|
|
116
157
|
const withLang = template.replace(SSR_LANG_MARKER, pageLang);
|
|
117
158
|
const withHead = withLang.replace(SSR_HEAD_MARKER, () => headHtml);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssg-runner.js","sourceRoot":"","sources":["../../src/cli/ssg-runner.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ssg-runner.js","sourceRoot":"","sources":["../../src/cli/ssg-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site-loader.d.ts","sourceRoot":"","sources":["../../src/config/site-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"site-loader.d.ts","sourceRoot":"","sources":["../../src/config/site-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkEnD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsB7E"}
|
|
@@ -37,6 +37,21 @@ function validateSiteConfig(raw) {
|
|
|
37
37
|
if (baseUrl.endsWith('/')) {
|
|
38
38
|
throw new Error(`site.json: "baseUrl" must not end with a trailing slash. Got: "${baseUrl}"`);
|
|
39
39
|
}
|
|
40
|
+
const meta = obj['metadata'];
|
|
41
|
+
if (meta !== undefined) {
|
|
42
|
+
if (typeof meta !== 'object' || meta === null || Array.isArray(meta)) {
|
|
43
|
+
throw new Error('site.json: "metadata" must be an object.');
|
|
44
|
+
}
|
|
45
|
+
const metaObj = meta;
|
|
46
|
+
if (metaObj['ogImage'] !== undefined) {
|
|
47
|
+
if (typeof metaObj['ogImage'] !== 'string') {
|
|
48
|
+
throw new Error('site.json: "metadata.ogImage" must be a string.');
|
|
49
|
+
}
|
|
50
|
+
if (!metaObj['ogImage'].startsWith('/')) {
|
|
51
|
+
throw new Error(`site.json: "metadata.ogImage" must be a root-relative path starting with "/" (e.g. "/images/og-cover.png"). Got: "${metaObj['ogImage']}"`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
40
55
|
return raw;
|
|
41
56
|
}
|
|
42
57
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site-loader.js","sourceRoot":"","sources":["../../src/config/site-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,wEAAwE;AACxE,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAErD,iFAAiF;AACjF,MAAM,eAAe,GAAyB;IAC5C,MAAM;IACN,aAAa;IACb,SAAS;IACT,iBAAiB;CAClB,CAAC;AAEF;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,GAAY;IACtC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,GAAG,GAAG,GAA8B,CAAC;IAE3C,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,+CAA+C,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAW,CAAC;IACzC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,mDAAmD,OAAO,GAAG,CAAC,CAAC;IACjF,CAAC;IAED,kFAAkF;IAClF,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kEAAkE,OAAO,GAAG,CAAC,CAAC;IAChG,CAAC;IAED,OAAO,GAAiB,CAAC;AAC3B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAErD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,0DAA0D,CAAC,CAAC;QAChH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,iBAAiB,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"site-loader.js","sourceRoot":"","sources":["../../src/config/site-loader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mordoc",
|
|
3
|
-
"
|
|
3
|
+
"repoitory": {
|
|
4
|
+
"type": "git",
|
|
5
|
+
"url": "https://github.com/shiva-varanasi/mordoc.git"
|
|
6
|
+
},
|
|
7
|
+
"version": "1.0.2",
|
|
4
8
|
"description": "A modern documentation site generator powered by Vite, React, and Markdoc.",
|
|
5
9
|
"type": "module",
|
|
6
10
|
"files": [
|
package/src/app/App.module.css
CHANGED
package/src/app/index.css
CHANGED
|
@@ -27,14 +27,13 @@
|
|
|
27
27
|
--accent-muted: color-mix(in oklch, var(--accent) 20%, white);
|
|
28
28
|
--accent-emphasis: var(--accent);
|
|
29
29
|
--accent-strong: color-mix(in oklch, var(--accent) 80%, black);
|
|
30
|
-
--accent-on: white;
|
|
31
30
|
|
|
32
31
|
/* Layout — shared across multiple components */
|
|
33
32
|
--header-height: 4rem;
|
|
34
33
|
--topnav-height: 0px;
|
|
35
34
|
--header-total: calc(var(--header-height) + var(--topnav-height));
|
|
36
|
-
--
|
|
37
|
-
--
|
|
35
|
+
--sidenav-width: 16rem;
|
|
36
|
+
--sidenav-width-icon: 3.5rem;
|
|
38
37
|
--toc-width: 16rem;
|
|
39
38
|
--content-max-width: 48rem;
|
|
40
39
|
--page-gutter: 2.5rem;
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/* ── Button tokens ────────────────────────────────────────────── */
|
|
2
|
+
|
|
3
|
+
:root {
|
|
4
|
+
--button-primary-fg: white;
|
|
5
|
+
}
|
|
6
|
+
|
|
1
7
|
/* ── Button ───────────────────────────────────────────────────── */
|
|
2
8
|
|
|
3
9
|
.button {
|
|
@@ -21,7 +27,7 @@
|
|
|
21
27
|
|
|
22
28
|
.primary {
|
|
23
29
|
background: var(--accent);
|
|
24
|
-
color: var(--
|
|
30
|
+
color: var(--button-primary-fg);
|
|
25
31
|
border-color: var(--accent);
|
|
26
32
|
}
|
|
27
33
|
|
package/src/app/main.tsx
CHANGED
|
@@ -9,9 +9,10 @@ import pagesIndex from 'virtual:mordoc/pages-index';
|
|
|
9
9
|
import translations from 'virtual:mordoc/translations';
|
|
10
10
|
import type { ShellData } from '../types/pipeline.js';
|
|
11
11
|
import './index.css';
|
|
12
|
-
import 'virtual:mordoc/theme';
|
|
13
12
|
import { MordocDataContext } from './data-context.js';
|
|
14
13
|
import { createAppRouter } from './routes.js';
|
|
14
|
+
// theme.css must be last so user overrides win over component-level :root tokens
|
|
15
|
+
import 'virtual:mordoc/theme';
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
18
|
* Browser entry. Assembles `ShellData` from the eager virtual modules
|
|
@@ -66,27 +66,3 @@
|
|
|
66
66
|
font-size: 0.875em;
|
|
67
67
|
font-weight: 500;
|
|
68
68
|
}
|
|
69
|
-
|
|
70
|
-
/* ── Go home button ─────────────────────────────────────────── */
|
|
71
|
-
|
|
72
|
-
.homeButton {
|
|
73
|
-
display: inline-flex;
|
|
74
|
-
align-items: center;
|
|
75
|
-
padding: 0.5rem 1.125rem;
|
|
76
|
-
background: var(--accent-emphasis);
|
|
77
|
-
color: var(--accent-on);
|
|
78
|
-
border-radius: var(--radius-md);
|
|
79
|
-
font-size: 0.9375rem;
|
|
80
|
-
font-weight: 500;
|
|
81
|
-
text-decoration: none;
|
|
82
|
-
transition: background 150ms ease;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.homeButton:hover {
|
|
86
|
-
background: var(--accent-strong);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.homeButton:focus-visible {
|
|
90
|
-
outline: 2px solid var(--accent-emphasis);
|
|
91
|
-
outline-offset: 2px;
|
|
92
|
-
}
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
* rendering this component.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import { useLocation } from 'react-router';
|
|
14
|
+
import { Button } from '../landing/button/Button.js';
|
|
14
15
|
import { Footer } from '../footer/Footer.js';
|
|
15
16
|
import styles from './NotFound.module.css';
|
|
16
17
|
|
|
@@ -25,7 +26,7 @@ export function NotFound() {
|
|
|
25
26
|
<p className={styles.description}>
|
|
26
27
|
No page exists at <code className={styles.path}>{location.pathname}</code>.
|
|
27
28
|
</p>
|
|
28
|
-
<
|
|
29
|
+
<Button path="/">Go home</Button>
|
|
29
30
|
</div>
|
|
30
31
|
</div>
|
|
31
32
|
<Footer />
|
|
@@ -2,30 +2,30 @@
|
|
|
2
2
|
SIDENAV TOKENS
|
|
3
3
|
============================================================ */
|
|
4
4
|
:root {
|
|
5
|
-
--
|
|
6
|
-
--
|
|
7
|
-
--
|
|
8
|
-
--
|
|
9
|
-
--
|
|
10
|
-
--
|
|
11
|
-
--
|
|
12
|
-
--
|
|
13
|
-
--
|
|
14
|
-
--
|
|
15
|
-
--
|
|
16
|
-
--
|
|
17
|
-
--
|
|
18
|
-
--
|
|
5
|
+
--sidenav-bg: #FAFAFA;
|
|
6
|
+
--sidenav-fg: #383838;
|
|
7
|
+
--sidenav-fg-muted: #666666;
|
|
8
|
+
--sidenav-border: #E5E5E5;
|
|
9
|
+
--sidenav-accent: #EFEFEF;
|
|
10
|
+
--sidenav-accent-fg: #1C1C1C;
|
|
11
|
+
--sidenav-group-label-fg: rgba(56, 56, 56, 0.7);
|
|
12
|
+
--sidenav-gap-y: 4px;
|
|
13
|
+
--sidenav-item-h: 36px;
|
|
14
|
+
--sidenav-group-h: 36px;
|
|
15
|
+
--sidenav-pad-x: 8px;
|
|
16
|
+
--sidenav-pad-y: 16px;
|
|
17
|
+
--sidenav-item-pad-x: 8px;
|
|
18
|
+
--sidenav-item-pad-y: 6px;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
:global(.dark) {
|
|
22
|
-
--
|
|
23
|
-
--
|
|
24
|
-
--
|
|
25
|
-
--
|
|
26
|
-
--
|
|
27
|
-
--
|
|
28
|
-
--
|
|
22
|
+
--sidenav-bg: #0F0F0F;
|
|
23
|
+
--sidenav-fg: #D6D6D6;
|
|
24
|
+
--sidenav-fg-muted: #9E9E9E;
|
|
25
|
+
--sidenav-border: #292929;
|
|
26
|
+
--sidenav-accent: #1F1F1F;
|
|
27
|
+
--sidenav-accent-fg: #EBEBEB;
|
|
28
|
+
--sidenav-group-label-fg: rgba(214, 214, 214, 0.7);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/* ============================================================
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
============================================================ */
|
|
35
35
|
|
|
36
36
|
.sidenav {
|
|
37
|
-
padding: var(--
|
|
37
|
+
padding: var(--sidenav-pad-y) var(--sidenav-pad-x);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
/* ── Menu list ───────────────────────────────────────────────── */
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
align-items: center;
|
|
65
65
|
justify-content: space-between;
|
|
66
66
|
width: 100%;
|
|
67
|
-
min-height: var(--
|
|
68
|
-
padding: var(--
|
|
67
|
+
min-height: var(--sidenav-group-h);
|
|
68
|
+
padding: var(--sidenav-item-pad-y) var(--sidenav-item-pad-x);
|
|
69
69
|
margin-top: 10px;
|
|
70
70
|
border-radius: var(--radius-md);
|
|
71
71
|
background: none;
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
font-weight: 500;
|
|
75
75
|
line-height: 1.25;
|
|
76
76
|
letter-spacing: 0;
|
|
77
|
-
color: var(--
|
|
77
|
+
color: var(--sidenav-group-label-fg);
|
|
78
78
|
font-family: var(--font-sans);
|
|
79
79
|
cursor: pointer;
|
|
80
80
|
text-align: left;
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
.groupLabelTrigger:hover {
|
|
89
|
-
background: var(--
|
|
89
|
+
background: var(--sidenav-accent);
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
.groupLabelText {
|
|
@@ -103,13 +103,13 @@
|
|
|
103
103
|
justify-content: space-between;
|
|
104
104
|
gap: 8px;
|
|
105
105
|
width: 100%;
|
|
106
|
-
min-height: var(--
|
|
107
|
-
padding: var(--
|
|
106
|
+
min-height: var(--sidenav-group-h);
|
|
107
|
+
padding: var(--sidenav-item-pad-y) var(--sidenav-item-pad-x);
|
|
108
108
|
border-radius: var(--radius-md);
|
|
109
109
|
font-size: 14px;
|
|
110
110
|
font-weight: 500;
|
|
111
111
|
line-height: 1.25;
|
|
112
|
-
color: var(--
|
|
112
|
+
color: var(--sidenav-fg);
|
|
113
113
|
text-decoration: none;
|
|
114
114
|
cursor: pointer;
|
|
115
115
|
margin-top: 10px;
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
.linkedGroupLabel:hover {
|
|
124
|
-
background: var(--
|
|
124
|
+
background: var(--sidenav-accent);
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
.linkedGroupLabel.linkActive {
|
|
@@ -138,19 +138,19 @@
|
|
|
138
138
|
display: flex;
|
|
139
139
|
align-items: center;
|
|
140
140
|
width: 100%;
|
|
141
|
-
min-height: var(--
|
|
142
|
-
padding: var(--
|
|
141
|
+
min-height: var(--sidenav-group-h);
|
|
142
|
+
padding: var(--sidenav-item-pad-y) var(--sidenav-item-pad-x);
|
|
143
143
|
border-radius: var(--radius-md);
|
|
144
144
|
font-size: 14px;
|
|
145
145
|
font-weight: 500;
|
|
146
146
|
line-height: 1.25;
|
|
147
|
-
color: var(--
|
|
147
|
+
color: var(--sidenav-fg);
|
|
148
148
|
text-decoration: none;
|
|
149
149
|
transition: color 150ms ease, background-color 150ms ease;
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
.topLink:hover {
|
|
153
|
-
background: var(--
|
|
153
|
+
background: var(--sidenav-accent);
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
.topLink.topLinkActive {
|
|
@@ -168,19 +168,19 @@
|
|
|
168
168
|
display: flex;
|
|
169
169
|
align-items: center;
|
|
170
170
|
width: 100%;
|
|
171
|
-
min-height: var(--
|
|
172
|
-
padding: var(--
|
|
171
|
+
min-height: var(--sidenav-item-h);
|
|
172
|
+
padding: var(--sidenav-item-pad-y) 8px var(--sidenav-item-pad-y) 24px;
|
|
173
173
|
border-radius: var(--radius-md);
|
|
174
174
|
font-size: 14px;
|
|
175
175
|
font-weight: 400;
|
|
176
176
|
line-height: 1.4;
|
|
177
|
-
color: var(--
|
|
177
|
+
color: var(--sidenav-fg);
|
|
178
178
|
text-decoration: none;
|
|
179
179
|
transition: color 150ms ease, background-color 150ms ease;
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
.navLink:hover {
|
|
183
|
-
background: var(--
|
|
183
|
+
background: var(--sidenav-accent);
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
.navLink.navLinkActive {
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
|
|
204
204
|
.chevron {
|
|
205
205
|
flex-shrink: 0;
|
|
206
|
-
color: var(--
|
|
206
|
+
color: var(--sidenav-fg-muted);
|
|
207
207
|
transition: transform 200ms ease;
|
|
208
208
|
}
|
|
209
209
|
|