mordoc 1.1.3 → 1.2.1

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.
@@ -0,0 +1,12 @@
1
+ import type { HeaderLinksConfig } from '../types/navigation.js';
2
+ /**
3
+ * Loads config/navigation/headernav.yaml and returns the validated list of header links.
4
+ * Returns an empty array if the file does not exist — header links are optional.
5
+ *
6
+ * `variant` defaults to 'link' (plain text) when omitted. External paths
7
+ * (http/https) will open in a new tab; internal paths use React Router.
8
+ *
9
+ * @param projectRoot - Absolute path to the project's root directory.
10
+ */
11
+ export declare function loadHeaderLinks(projectRoot: string): Promise<HeaderLinksConfig>;
12
+ //# sourceMappingURL=header-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-loader.d.ts","sourceRoot":"","sources":["../../src/config/header-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA8C5E;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqBrF"}
@@ -0,0 +1,63 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import yaml from 'js-yaml';
4
+ const HEADER_CONFIG_PATH = join('config', 'navigation', 'headernav.yaml');
5
+ const VALID_VARIANTS = new Set(['link', 'primary', 'secondary']);
6
+ /**
7
+ * Validates the raw YAML from headernav.yaml and narrows it to `HeaderLinksConfig`.
8
+ * Throws a descriptive error for any malformed entry so authors get actionable feedback.
9
+ */
10
+ function validateHeaderLinks(raw) {
11
+ if (!Array.isArray(raw)) {
12
+ throw new Error('headernav.yaml: file must contain a YAML array at the top level.');
13
+ }
14
+ for (const [index, entry] of raw.entries()) {
15
+ if (typeof entry !== 'object' || entry === null) {
16
+ throw new Error(`headernav.yaml: items[${index}] must be an object.`);
17
+ }
18
+ const obj = entry;
19
+ if (typeof obj['label'] !== 'string' || obj['label'] === '') {
20
+ throw new Error(`headernav.yaml: items[${index}].label is required and must be a non-empty string.`);
21
+ }
22
+ if (typeof obj['path'] !== 'string' || obj['path'] === '') {
23
+ throw new Error(`headernav.yaml: items[${index}].path is required and must be a non-empty string.`);
24
+ }
25
+ if (obj['variant'] !== undefined) {
26
+ if (typeof obj['variant'] !== 'string' || !VALID_VARIANTS.has(obj['variant'])) {
27
+ throw new Error(`headernav.yaml: items[${index}].variant must be 'link', 'primary', or 'secondary'.`);
28
+ }
29
+ }
30
+ }
31
+ return raw;
32
+ }
33
+ /**
34
+ * Loads config/navigation/headernav.yaml and returns the validated list of header links.
35
+ * Returns an empty array if the file does not exist — header links are optional.
36
+ *
37
+ * `variant` defaults to 'link' (plain text) when omitted. External paths
38
+ * (http/https) will open in a new tab; internal paths use React Router.
39
+ *
40
+ * @param projectRoot - Absolute path to the project's root directory.
41
+ */
42
+ export async function loadHeaderLinks(projectRoot) {
43
+ const filePath = join(projectRoot, HEADER_CONFIG_PATH);
44
+ let content;
45
+ try {
46
+ content = await readFile(filePath, 'utf-8');
47
+ }
48
+ catch (err) {
49
+ if (err.code === 'ENOENT') {
50
+ return [];
51
+ }
52
+ throw new Error(`Failed to read ${filePath}: ${err.message}`);
53
+ }
54
+ let parsed;
55
+ try {
56
+ parsed = yaml.load(content);
57
+ }
58
+ catch (err) {
59
+ throw new Error(`Failed to parse ${filePath}: ${err.message}`);
60
+ }
61
+ return validateHeaderLinks(parsed);
62
+ }
63
+ //# sourceMappingURL=header-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-loader.js","sourceRoot":"","sources":["../../src/config/header-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;AAE1E,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAEtF;;;GAGG;AACH,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAK,GAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,sBAAsB,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,GAAG,GAAG,KAAgC,CAAC;QAE7C,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,qDAAqD,CACpF,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,oDAAoD,CACnF,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBAC9E,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,sDAAsD,CACrF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,GAAwB,CAAC;AAClC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAEvD,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,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,EAAE,CAAC;QACZ,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,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"markdoc-config.d.ts","sourceRoot":"","sources":["../../src/content/markdoc-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAA8B,MAAM,kBAAkB,CAAC;AA+M3E;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAKnD"}
1
+ {"version":3,"file":"markdoc-config.d.ts","sourceRoot":"","sources":["../../src/content/markdoc-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAA8B,MAAM,kBAAkB,CAAC;AAgN3E;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAKnD"}
@@ -189,6 +189,7 @@ const button = {
189
189
  children: ['paragraph', 'inline', 'text', 'strong', 'em'],
190
190
  attributes: {
191
191
  path: { type: String, required: true },
192
+ variant: { type: String, default: 'primary', matches: ['primary', 'secondary'] },
192
193
  },
193
194
  };
194
195
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"markdoc-config.js","sourceRoot":"","sources":["../../src/content/markdoc-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdoc-config.js","sourceRoot":"","sources":["../../src/content/markdoc-config.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { loadNavTranslations } from './config/translations-loader.js';
2
- export { loadNavTranslations };
2
+ import { loadHeaderLinks } from './config/header-loader.js';
3
+ export { loadNavTranslations, loadHeaderLinks };
3
4
  import type { ContentEntry, TransformedPage } from './types/content.js';
4
5
  import type { MordocData, NavigationConfig, ShellData } from './types/pipeline.js';
5
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAItE,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEnF;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAOnF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsB1E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAa/E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,CAKpE;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAYvD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAQpF"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAI5D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEnF;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAOnF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAuB1E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAa/E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,CAKpE;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAavD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,GAAG,IAAI,CAQpF"}
package/dist/pipeline.js CHANGED
@@ -5,10 +5,11 @@ import { loadSidenavConfig } from './config/sidenav-loader.js';
5
5
  import { loadAssets } from './config/assets-loader.js';
6
6
  import { loadContent } from './content/content-loader.js';
7
7
  import { loadNavTranslations } from './config/translations-loader.js';
8
+ import { loadHeaderLinks } from './config/header-loader.js';
8
9
  import { parseContent } from './content/content-parser.js';
9
10
  import { transformContent } from './content/content-transformer.js';
10
11
  import path from 'node:path';
11
- export { loadNavTranslations };
12
+ export { loadNavTranslations, loadHeaderLinks };
12
13
  /**
13
14
  * Loads the project's navigation configuration.
14
15
  *
@@ -52,9 +53,10 @@ export async function runPipeline(projectRoot) {
52
53
  const assets = await loadAssets(projectRoot);
53
54
  const contentMap = await loadContent(projectRoot, site.defaultLanguage, language?.languages ?? null);
54
55
  const translations = await loadNavTranslations(projectRoot, language?.languages ?? [site.defaultLanguage], site.defaultLanguage);
56
+ const headerLinks = await loadHeaderLinks(projectRoot);
55
57
  const parsedContent = await parseContent(contentMap);
56
58
  const transformedContent = transformContent(parsedContent);
57
- return { site, language, navigation, assets, pages: transformedContent, translations };
59
+ return { site, language, navigation, assets, pages: transformedContent, translations, headerLinks };
58
60
  }
59
61
  /**
60
62
  * Re-runs the parse + transform stages for a single content entry.
@@ -104,6 +106,7 @@ export function toShellData(data) {
104
106
  language: p.entry.language,
105
107
  })),
106
108
  translations: data.translations,
109
+ headerLinks: data.headerLinks,
107
110
  };
108
111
  }
109
112
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
@@ -35,4 +35,18 @@ export interface ResolvedTopnavItem {
35
35
  sidenav: SidenavConfig;
36
36
  }
37
37
  export type ResolvedTopnavConfig = ResolvedTopnavItem[];
38
+ /** A single link or button-styled link in the header's right-hand action area. */
39
+ export interface HeaderLink {
40
+ /** Display text. */
41
+ label: string;
42
+ /** Internal route path or external absolute URL. */
43
+ path: string;
44
+ /**
45
+ * Visual treatment. 'link' = plain text (default), 'primary' = filled
46
+ * accent button, 'secondary' = outlined accent button.
47
+ */
48
+ variant?: 'link' | 'primary' | 'secondary';
49
+ }
50
+ /** Shape of the config/navigation/headernav.yaml file. */
51
+ export type HeaderLinksConfig = HeaderLink[];
38
52
  //# sourceMappingURL=navigation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/types/navigation.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC;AAE1C,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uDAAuD;AACvD,MAAM,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;AAExC;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/types/navigation.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC;AAE1C,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uDAAuD;AACvD,MAAM,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;AAExC;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,EAAE,CAAC;AAExD,kFAAkF;AAClF,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;CAC5C;AAED,0DAA0D;AAC1D,MAAM,MAAM,iBAAiB,GAAG,UAAU,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { SiteConfig } from './site.js';
2
2
  import type { LanguageConfig } from './language.js';
3
- import type { ResolvedTopnavConfig, SidenavConfig } from './navigation.js';
3
+ import type { ResolvedTopnavConfig, SidenavConfig, HeaderLink } from './navigation.js';
4
4
  import type { ResolvedAssets } from './assets.js';
5
5
  import type { PageMeta, TransformedPage } from './content.js';
6
6
  /**
@@ -41,6 +41,8 @@ export interface MordocData {
41
41
  pages: TransformedPage[];
42
42
  /** Nav label translations keyed by language code. Empty for single-language projects. */
43
43
  translations: Record<string, Record<string, string>>;
44
+ /** Header action links from config/navigation/headernav.yaml. Empty array when file is absent. */
45
+ headerLinks: HeaderLink[];
44
46
  }
45
47
  /**
46
48
  * The lightweight projection of `MordocData` consumed by the React shell —
@@ -66,5 +68,7 @@ export interface ShellData {
66
68
  pagesIndex: PageMeta[];
67
69
  /** Nav label translations keyed by language code. Empty for single-language projects. */
68
70
  translations: Record<string, Record<string, string>>;
71
+ /** Header action links from config/navigation/headernav.yaml. Empty array when file is absent. */
72
+ headerLinks: HeaderLink[];
69
73
  }
70
74
  //# sourceMappingURL=pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/types/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE9D;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC;AAEhD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,6EAA6E;IAC7E,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,yFAAyF;IACzF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,yFAAyF;IACzF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/types/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE9D;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC;AAEhD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,6EAA6E;IAC7E,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,yFAAyF;IACzF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,kGAAkG;IAClG,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,yFAAyF;IACzF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,kGAAkG;IAClG,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B"}
@@ -11,7 +11,7 @@ import type { MordocData } from '../types/pipeline.js';
11
11
  * prefix ({@link PAGE_MODULE_PREFIX}) and are loaded on navigation via
12
12
  * the `virtual:mordoc/page-loaders` map.
13
13
  */
14
- export declare const EAGER_VIRTUAL_IDS: readonly ["virtual:mordoc/site", "virtual:mordoc/language", "virtual:mordoc/navigation", "virtual:mordoc/assets", "virtual:mordoc/pages-index", "virtual:mordoc/page-loaders", "virtual:mordoc/translations"];
14
+ export declare const EAGER_VIRTUAL_IDS: readonly ["virtual:mordoc/site", "virtual:mordoc/language", "virtual:mordoc/navigation", "virtual:mordoc/assets", "virtual:mordoc/pages-index", "virtual:mordoc/page-loaders", "virtual:mordoc/translations", "virtual:mordoc/header-links"];
15
15
  export type EagerVirtualId = typeof EAGER_VIRTUAL_IDS[number];
16
16
  /**
17
17
  * Prefix for lazy per-route page modules.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAYlD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,+MAQpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAmGxD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAmBjF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAIrF;AAwKD,MAAM,WAAW,uBAAuB;IACtC,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;;;;;OAcG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAgIzE"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAalD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,8OASpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE9D;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAmGxD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAqBjF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAIrF;AA0KD,MAAM,WAAW,uBAAuB;IACtC,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;;;;;OAcG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAgIzE"}
@@ -2,7 +2,7 @@ import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { loadAssets } from '../config/assets-loader.js';
4
4
  import { loadSiteConfig } from '../config/site-loader.js';
5
- import { loadNavigation, loadNavTranslations, pagesRouteSignature, replaceTransformedPage, reparsePage, runPipeline, } from '../pipeline.js';
5
+ import { loadNavigation, loadNavTranslations, loadHeaderLinks, pagesRouteSignature, replaceTransformedPage, reparsePage, runPipeline, } from '../pipeline.js';
6
6
  /**
7
7
  * The set of "eager" virtual module IDs this plugin exposes.
8
8
  *
@@ -22,6 +22,7 @@ export const EAGER_VIRTUAL_IDS = [
22
22
  'virtual:mordoc/pages-index',
23
23
  'virtual:mordoc/page-loaders',
24
24
  'virtual:mordoc/translations',
25
+ 'virtual:mordoc/header-links',
25
26
  ];
26
27
  /**
27
28
  * Prefix for lazy per-route page modules.
@@ -151,6 +152,8 @@ export function generateVirtualModule(id, data) {
151
152
  return generatePageLoadersSource(data);
152
153
  case 'virtual:mordoc/translations':
153
154
  return `export default ${JSON.stringify(data.translations)};`;
155
+ case 'virtual:mordoc/header-links':
156
+ return `export default ${JSON.stringify(data.headerLinks)};`;
154
157
  default:
155
158
  return null;
156
159
  }
@@ -240,7 +243,9 @@ async function applyMordocWatchBatch(server, projectRoot, batch, getData, setDat
240
243
  const isTranslationsChange = configEvents.some(({ rel }) => rel.startsWith('config/navigation/translations/'));
241
244
  if (isNavStructureChange) {
242
245
  data.navigation = await loadNavigation(projectRoot);
246
+ data.headerLinks = await loadHeaderLinks(projectRoot);
243
247
  await reloadVirtualModule(server, 'virtual:mordoc/navigation');
248
+ await reloadVirtualModule(server, 'virtual:mordoc/header-links');
244
249
  }
245
250
  if (isTranslationsChange) {
246
251
  data.translations = await loadNavTranslations(projectRoot, data.language?.languages ?? [data.site.defaultLanguage], data.site.defaultLanguage);
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAIxB;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,qBAAqB;IACrB,yBAAyB;IACzB,2BAA2B;IAC3B,uBAAuB;IACvB,4BAA4B;IAC5B,6BAA6B;IAC7B,6BAA6B;CACrB,CAAC;AAIX;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAExD,sFAAsF;AACtF,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,yEAAyE;AACzE,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAC5C,yFAAyF;AACzF,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AAE1D,MAAM,SAAS,GAAwB,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAElE;;;GAGG;AACH,SAAS,mBAAmB,CAAC,MAAsB;IACjD,MAAM,KAAK,GAAG,CAAC,CAAgB,EAAE,EAAE,CACjC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACxB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,SAAS,cAAc,CAAC,EAAU;IAChC,OAAO,EAAE,CAAC,UAAU,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,gEAAgE;AAChE,SAAS,yBAAyB,CAAC,EAAU;IAC3C,OAAO,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,IAAqB;IACvC,MAAM,IAAI,GAAa;QACrB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;QAC/B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;KAC9B,CAAC;IACF,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,IAAqB;IACvC,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,yBAAyB,CAAC,IAAgB;IACjD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,kBAAkB,GAAG,SAAS,EAAE,CAAC,CAAC;QACtE,OAAO,KAAK,GAAG,kBAAkB,SAAS,GAAG,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,OAAO,qBAAqB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAU,EAAE,IAAgB;IAChE,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,qBAAqB;YACxB,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACxD,KAAK,yBAAyB;YAC5B,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC5D,KAAK,2BAA2B;YAC9B,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9D,KAAK,uBAAuB;YAC1B,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QAC1D,KAAK,4BAA4B;YAC/B,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC;QACzE,KAAK,6BAA6B;YAChC,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACzC,KAAK,6BAA6B;YAChC,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;QAChE;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,IAAgB;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IACrE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,WAAmB,EAAE,OAAe;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,OAAO,eAAe,GAAG,SAAS,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,MAAqB,EAAE,SAAiB;IACzE,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAEhD,sDAAsD;IACtD,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC/D,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED,qEAAqE;IACrE,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7E,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,kCAAkC;IAClC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,6BAA6B,CAC1C,MAAqB,EACrB,KAAwB;IAExB,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACnC,MAAM,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,mBAAmB,CAAC,MAAM,EAAE,GAAG,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAID,mFAAmF;AACnF,KAAK,UAAU,qBAAqB,CAClC,MAAqB,EACrB,WAAmB,EACnB,KAA8B,EAC9B,OAAgC,EAChC,OAAmC;IAEnC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAEtC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;SAC3B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;SACjE,MAAM,CAAC,CAAC,CAAC,EAAqC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;IAEpE,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAEzE,MAAM,oBAAoB,GAAG,aAAa,CAAC,IAAI,CAC7C,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,CACzC,CAAC;IAEF,wDAAwD;IACxD,IAAI,oBAAoB,EAAE,CAAC;QACzB,MAAM,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,sBAAsB,CAAC,EAAE,CAAC;QACnE,MAAM,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC;IACnC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvD,MAAM,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAC5C,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CACV,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACpC,CAAC,GAAG,CAAC,UAAU,CAAC,iCAAiC,CAAC,CACrD,CAAC;IACF,MAAM,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CACzD,GAAG,CAAC,UAAU,CAAC,iCAAiC,CAAC,CAClD,CAAC;IAEF,IAAI,oBAAoB,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,mBAAmB,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,oBAAoB,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,MAAM,mBAAmB,CAC3C,WAAW,EACX,IAAI,CAAC,QAAQ,EAAE,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EACvD,IAAI,CAAC,IAAI,CAAC,eAAe,CAC1B,CAAC;QACF,MAAM,mBAAmB,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CACnC,GAAG,KAAK,eAAe,IAAI,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC9D,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAC7D,CAAC;IAED,6EAA6E;IAC7E,8EAA8E;IAC9E,oCAAoC;IACpC,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,KAAK,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ;YAAE,SAAS;QAC1C,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QAEjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,kBAAkB,CAAC,IAAI,CAAC,GAAG,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,MAAM,SAAS,IAAI,kBAAkB,EAAE,CAAC;YAC3C,MAAM,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,MAAqB,EACrB,WAAmB,EACnB,OAAgC,EAChC,OAAmC;IAEnC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC;IACd,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IACD,MAAM,6BAA6B,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAuBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgC;IAC/D,oEAAoE;IACpE,sEAAsE;IACtE,0DAA0D;IAC1D,IAAI,IAAI,GAAsB,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IAEnD,OAAO;QACL,IAAI,EAAE,QAAQ;QAEd,KAAK,CAAC,UAAU;YACd,oEAAoE;YACpE,gEAAgE;YAChE,uDAAuD;YACvD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,eAAe,CAAC,MAAM;YACpB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YACxC,IAAI,aAAa,GAAyC,IAAI,CAAC;YAC/D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;YAE9C,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;gBACvB,aAAa,GAAG,IAAI,CAAC;gBACrB,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;oBAAE,OAAO;gBAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,aAAa,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACtC,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC/B,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,qBAAqB,CACzB,MAAM,EACN,WAAW,EACX,KAAK,EACL,GAAG,EAAE,CAAC,IAAI,EACV,CAAC,IAAI,EAAE,EAAE;wBACP,IAAI,GAAG,IAAI,CAAC;oBACd,CAAC,CACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;oBACpD,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;wBACjD,IAAI,GAAG,SAAS,CAAC;wBACjB,MAAM,6BAA6B,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;wBAC7D,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;oBACrD,CAAC;oBAAC,OAAO,UAAU,EAAE,CAAC;wBACpB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,UAAU,CAAC,CAAC;oBAC/D,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,KAAiB,EAAE,EAAE;gBACtD,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC5B,IAAI,aAAa;oBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC/C,aAAa,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,CAAC,CAAC;YAEF,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;YAErD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC1C,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ;oBAAE,OAAO;gBACxE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBAChD,MAAM,GAAG,GAAG,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACpD,IAAI,CAAC,GAAG;oBAAE,OAAO;gBACjB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;oBAAE,OAAO;gBACtE,QAAQ,CAAC,OAAO,EAAE,KAAmB,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,SAAS,CAAC,EAAE;YACV,IAAI,EAAE,KAAK,YAAY,EAAE,CAAC;gBACxB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;gBAClF,OAAO,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC;YACzE,CAAC;YACD,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5C,OAAO,eAAe,GAAG,EAAE,CAAC;YAC9B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,EAAE;YACL,IAAI,EAAE,KAAK,wBAAwB;gBAAE,OAAO,EAAE,CAAC;YAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;gBAAE,OAAO,IAAI,CAAC;YACjD,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,+DAA+D;gBAC/D,gEAAgE;gBAChE,6CAA6C;gBAC7C,MAAM,IAAI,KAAK,CACb,wBAAwB,EAAE,6CAA6C,CACxE,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,wEAAwE;gBACxE,8DAA8D;gBAC9D,IAAI,SAAS,KAAK,uBAAuB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBAC3D,OAAO,qBAAqB,CAAC,SAAS,EAAE;wBACtC,GAAG,IAAI;wBACP,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;qBACzC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,SAAS,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,8DAA8D;gBAC9D,0DAA0D;gBAC1D,iEAAiE;gBACjE,6CAA6C;gBAC7C,MAAM,IAAI,KAAK,CACb,+CAA+C,SAAS,UAAU,EAAE,IAAI,CACzE,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "type": "git",
5
5
  "url": "https://github.com/shiva-varanasi/mordoc.git"
6
6
  },
7
- "version": "1.1.3",
7
+ "version": "1.2.1",
8
8
  "description": "A modern documentation site generator powered by Vite, React, and Markdoc.",
9
9
  "type": "module",
10
10
  "files": [
package/src/app/App.tsx CHANGED
@@ -1,7 +1,7 @@
1
1
  import { useEffect, useState } from 'react';
2
2
  import { Outlet, ScrollRestoration, useLocation, useMatches, useNavigation } from 'react-router';
3
3
  import { Header } from './header/Header.js';
4
- import { Sidenav } from './sidenav/Sidenav.js';
4
+ import { Sidenav, MobileTopnavSection } from './sidenav/Sidenav.js';
5
5
  import { SearchModal, switchPagefind } from './header/SearchModal.js';
6
6
  import { Skeleton } from './skeleton/Skeleton.js';
7
7
  import { useMordocData } from './data-context.js';
@@ -50,13 +50,11 @@ export function App() {
50
50
  return () => document.removeEventListener('keydown', handleKeyDown);
51
51
  }, []);
52
52
 
53
- // Keep --topnav-height in sync so sticky offsets (sidenav, TOC, scroll-margin)
54
- // stay correct whether or not a topnav row is present.
53
+ // Toggle a class instead of an inline style so that CSS media queries can
54
+ // override --topnav-height to 0px on mobile (inline styles win the cascade
55
+ // unconditionally, making the @media override impossible).
55
56
  useEffect(() => {
56
- document.documentElement.style.setProperty(
57
- '--topnav-height',
58
- navigation.kind === 'topnav' ? '2.75rem' : '0px',
59
- );
57
+ document.documentElement.classList.toggle('has-topnav', navigation.kind === 'topnav');
60
58
  }, [navigation.kind]);
61
59
 
62
60
  return (
@@ -76,6 +74,7 @@ export function App() {
76
74
  className={`${styles.sidenavArea} ${sidenavOpen ? styles.sidenavAreaOpen : ''}`}
77
75
  aria-label="Side navigation"
78
76
  >
77
+ <MobileTopnavSection />
79
78
  <Sidenav />
80
79
  </aside>
81
80
  )}
@@ -170,6 +170,114 @@
170
170
  outline-offset: 2px;
171
171
  }
172
172
 
173
+ /* ── Header links (from headernav.yaml) ─────────────────── */
174
+
175
+ /* Overrides --button-* tokens so Button renders at compact header size. */
176
+ .headerLinks {
177
+ display: flex;
178
+ align-items: center;
179
+ gap: 4px;
180
+ padding-right: 8px;
181
+ margin-right: 4px;
182
+ border-right: 1px solid var(--color-border);
183
+ --button-height: 2rem;
184
+ --button-px: 0.875rem;
185
+ --button-font-size: 0.875rem;
186
+ }
187
+
188
+ /* Plain 'link' variant — matches article prose link style */
189
+ .headerLink {
190
+ display: inline-flex;
191
+ align-items: center;
192
+ padding: 0 0.25rem;
193
+ height: 2rem;
194
+ font-size: 0.875rem;
195
+ font-weight: 500;
196
+ color: var(--accent-emphasis);
197
+ text-decoration: underline;
198
+ text-underline-offset: 2px;
199
+ text-decoration-color: transparent;
200
+ border-radius: var(--radius-sm);
201
+ white-space: nowrap;
202
+ transition: color 0.15s, text-decoration-color 0.15s;
203
+ }
204
+
205
+ .headerLink:hover {
206
+ color: var(--accent-strong);
207
+ text-decoration-color: var(--accent-strong);
208
+ }
209
+
210
+ /* ── Mobile overflow menu (≤ 767px) ────────────────────── */
211
+
212
+ /* Wrapper for the ellipsis trigger + dropdown — hidden on desktop */
213
+ .headerLinksMenu {
214
+ display: none;
215
+ position: relative;
216
+ }
217
+
218
+ .headerLinksMenuBtn {
219
+ display: flex;
220
+ align-items: center;
221
+ justify-content: center;
222
+ width: var(--toggle-size);
223
+ height: var(--toggle-size);
224
+ background: transparent;
225
+ border: 0;
226
+ border-radius: var(--toggle-radius);
227
+ color: var(--color-fg);
228
+ cursor: pointer;
229
+ transition: background 0.15s;
230
+ }
231
+
232
+ .headerLinksMenuBtn:hover {
233
+ background: var(--color-bg-hover);
234
+ }
235
+
236
+ .headerLinksMenuBtn:focus-visible {
237
+ outline: 2px solid var(--accent-emphasis);
238
+ outline-offset: 2px;
239
+ }
240
+
241
+ .headerLinksDropdown {
242
+ position: absolute;
243
+ top: calc(100% + 6px);
244
+ right: 0;
245
+ min-width: 160px;
246
+ background: var(--color-bg);
247
+ border: 1px solid var(--color-border);
248
+ border-radius: var(--radius-md);
249
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
250
+ padding: 4px;
251
+ z-index: 200;
252
+ }
253
+
254
+ :global(.dark) .headerLinksDropdown {
255
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
256
+ }
257
+
258
+ /* Each row in the dropdown */
259
+ .dropdownItem {
260
+ display: flex;
261
+ align-items: center;
262
+ width: 100%;
263
+ padding: 0.5rem 0.75rem;
264
+ font-size: 0.875rem;
265
+ font-weight: 500;
266
+ color: var(--color-fg);
267
+ text-decoration: none;
268
+ border-radius: var(--radius-sm);
269
+ white-space: nowrap;
270
+ transition: background 0.12s, color 0.12s;
271
+ cursor: pointer;
272
+ border: 0;
273
+ background: transparent;
274
+ text-align: left;
275
+ }
276
+
277
+ .dropdownItem:hover {
278
+ background: var(--color-bg-hover);
279
+ }
280
+
173
281
  /* ── Topnav second row ──────────────────────────────────── */
174
282
  .topnavRow {
175
283
  width: 100%;
@@ -189,7 +297,8 @@
189
297
  Responsive
190
298
  ════════════════════════════════════════════════════════════ */
191
299
 
192
- /* < 768px: hamburger visible, search + topnav row hidden */
300
+ /* < 768px: hamburger visible, search + topnav row hidden;
301
+ header links strip hidden, overflow menu button visible */
193
302
  @media (max-width: 767.98px) {
194
303
  .menuBtn {
195
304
  display: inline-flex;
@@ -202,4 +311,12 @@
202
311
  .topnavRow {
203
312
  display: none;
204
313
  }
314
+
315
+ .headerLinks {
316
+ display: none;
317
+ }
318
+
319
+ .headerLinksMenu {
320
+ display: block;
321
+ }
205
322
  }
@@ -1,10 +1,12 @@
1
- import { useEffect, useState } from 'react';
1
+ import { useEffect, useRef, useState } from 'react';
2
2
  import { Link, useLocation, useNavigate } from 'react-router';
3
3
  import { useMordocData } from '../data-context.js';
4
- import { detectCurrentLang, buildLangPrefix, stripLangPrefix } from '../lang-utils.js';
4
+ import { detectCurrentLang, buildLangPrefix, stripLangPrefix, resolveLabel } from '../lang-utils.js';
5
5
  import { SearchBar } from './SearchBar.js';
6
6
  import { Topnav } from './Topnav.js';
7
7
  import { LanguagePicker } from './LanguagePicker.js';
8
+ import { Button } from '../landing/button/Button.js';
9
+ import type { HeaderLink } from '../../types/navigation.js';
8
10
  import styles from './Header.module.css';
9
11
 
10
12
  type Theme = 'light' | 'dark';
@@ -98,8 +100,135 @@ function SunIcon() {
98
100
  );
99
101
  }
100
102
 
103
+ function EllipsisIcon() {
104
+ return (
105
+ <svg
106
+ viewBox="0 0 24 24"
107
+ fill="currentColor"
108
+ aria-hidden="true"
109
+ style={{ width: 20, height: 20 }}
110
+ >
111
+ <circle cx="5" cy="12" r="2" />
112
+ <circle cx="12" cy="12" r="2" />
113
+ <circle cx="19" cy="12" r="2" />
114
+ </svg>
115
+ );
116
+ }
117
+
118
+ /**
119
+ * Renders a single headernav.yaml entry. 'link' variant = plain text link;
120
+ * 'primary'/'secondary' delegate to the shared Button component.
121
+ * External paths (http/https) open in a new tab regardless of variant.
122
+ */
123
+ function HeaderLinkItem({ item }: { item: HeaderLink }) {
124
+ const variant = item.variant ?? 'link';
125
+ const isExternal =
126
+ item.path.startsWith('http://') ||
127
+ item.path.startsWith('https://') ||
128
+ item.path.startsWith('//');
129
+
130
+ if (variant === 'primary' || variant === 'secondary') {
131
+ return <Button path={item.path} variant={variant}>{item.label}</Button>;
132
+ }
133
+
134
+ if (isExternal) {
135
+ return (
136
+ <a
137
+ href={item.path}
138
+ className={styles.headerLink}
139
+ target="_blank"
140
+ rel="noopener noreferrer"
141
+ >
142
+ {item.label}
143
+ </a>
144
+ );
145
+ }
146
+
147
+ return (
148
+ <Link to={item.path} className={styles.headerLink}>
149
+ {item.label}
150
+ </Link>
151
+ );
152
+ }
153
+
154
+ /**
155
+ * Mobile overflow menu — renders a '...' button that opens a dropdown
156
+ * listing all header links. Shown only on small screens via CSS; the
157
+ * horizontal strip is shown on desktop via the sibling `.headerLinks` div.
158
+ *
159
+ * Click-outside closes the dropdown via a ref attached to the wrapper.
160
+ */
161
+ function HeaderLinksOverflowMenu({ links }: { links: HeaderLink[] }) {
162
+ const [open, setOpen] = useState(false);
163
+ const wrapperRef = useRef<HTMLDivElement>(null);
164
+
165
+ useEffect(() => {
166
+ if (!open) return;
167
+ function handleClick(e: MouseEvent) {
168
+ if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {
169
+ setOpen(false);
170
+ }
171
+ }
172
+ document.addEventListener('mousedown', handleClick);
173
+ return () => document.removeEventListener('mousedown', handleClick);
174
+ }, [open]);
175
+
176
+ const isExternal = (path: string) =>
177
+ path.startsWith('http://') || path.startsWith('https://') || path.startsWith('//');
178
+
179
+ return (
180
+ <div className={styles.headerLinksMenu} ref={wrapperRef}>
181
+ <button
182
+ className={styles.headerLinksMenuBtn}
183
+ onClick={() => setOpen((o) => !o)}
184
+ aria-label="More links"
185
+ aria-expanded={open}
186
+ aria-haspopup="true"
187
+ >
188
+ <EllipsisIcon />
189
+ </button>
190
+ {open && (
191
+ <div className={styles.headerLinksDropdown} role="menu">
192
+ {links.map((item) => {
193
+ const isPrimary = item.variant === 'primary';
194
+ const className = `${styles.dropdownItem}${isPrimary ? ` ${styles.dropdownItemPrimary}` : ''}`;
195
+
196
+ if (isExternal(item.path)) {
197
+ return (
198
+ <a
199
+ key={item.path}
200
+ href={item.path}
201
+ className={className}
202
+ target="_blank"
203
+ rel="noopener noreferrer"
204
+ role="menuitem"
205
+ onClick={() => setOpen(false)}
206
+ >
207
+ {item.label}
208
+ </a>
209
+ );
210
+ }
211
+
212
+ return (
213
+ <Link
214
+ key={item.path}
215
+ to={item.path}
216
+ className={className}
217
+ role="menuitem"
218
+ onClick={() => setOpen(false)}
219
+ >
220
+ {item.label}
221
+ </Link>
222
+ );
223
+ })}
224
+ </div>
225
+ )}
226
+ </div>
227
+ );
228
+ }
229
+
101
230
  export function Header({ sidenavOpen, onMenuToggle, onSearchOpen, showMenu = true, className }: HeaderProps) {
102
- const { site, assets, language, navigation } = useMordocData();
231
+ const { site, assets, language, navigation, headerLinks, translations } = useMordocData();
103
232
  const location = useLocation();
104
233
  const navigate = useNavigate();
105
234
  const [theme, setTheme] = useState<Theme>(() => {
@@ -117,6 +246,10 @@ export function Header({ sidenavOpen, onMenuToggle, onSearchOpen, showMenu = tru
117
246
 
118
247
  const currentLang = detectCurrentLang(location.pathname, language, site.defaultLanguage);
119
248
  const currentContentPath = stripLangPrefix(location.pathname, currentLang, site.defaultLanguage);
249
+ const translatedHeaderLinks = headerLinks.map((item) => ({
250
+ ...item,
251
+ label: resolveLabel(item.label, currentLang, site.defaultLanguage, translations),
252
+ }));
120
253
  const logo = theme === 'dark' ? (assets.logoDark ?? assets.logo) : assets.logo;
121
254
 
122
255
  function handleLangChange(newLang: string) {
@@ -160,6 +293,18 @@ export function Header({ sidenavOpen, onMenuToggle, onSearchOpen, showMenu = tru
160
293
 
161
294
  {/* Right actions */}
162
295
  <div className={styles.actions}>
296
+ {translatedHeaderLinks.length > 0 && (
297
+ <>
298
+ {/* Desktop: horizontal strip of links/buttons */}
299
+ <div className={styles.headerLinks}>
300
+ {translatedHeaderLinks.map((item) => (
301
+ <HeaderLinkItem key={item.path} item={item} />
302
+ ))}
303
+ </div>
304
+ {/* Mobile: collapses into a '...' dropdown */}
305
+ <HeaderLinksOverflowMenu links={translatedHeaderLinks} />
306
+ </>
307
+ )}
163
308
  {language && language.languages.length > 1 && (
164
309
  <LanguagePicker
165
310
  languages={language.languages}
package/src/app/index.css CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  /* Layout — shared across multiple components */
32
32
  --header-height: 4rem;
33
- --topnav-height: 0px;
33
+ --topnav-height: 0px; /* overridden by .has-topnav below */
34
34
  --header-total: calc(var(--header-height) + var(--topnav-height));
35
35
  --sidenav-width: 16rem;
36
36
  --sidenav-width-icon: 3.5rem;
@@ -72,6 +72,18 @@
72
72
  --accent-strong: color-mix(in oklch, var(--accent) 50%, white);
73
73
  }
74
74
 
75
+ /* Topnav height — class-based so @media can override it on mobile.
76
+ Inline style.setProperty() cannot be overridden by media queries. */
77
+ .has-topnav {
78
+ --topnav-height: 2.75rem;
79
+ }
80
+
81
+ @media (max-width: 767.98px) {
82
+ .has-topnav {
83
+ --topnav-height: 0px;
84
+ }
85
+ }
86
+
75
87
  /* ============================================================
76
88
  BASE RESET
77
89
  ============================================================ */
@@ -2,6 +2,9 @@
2
2
 
3
3
  :root {
4
4
  --button-primary-fg: white;
5
+ --button-height: 2.625rem;
6
+ --button-px: 1.375rem;
7
+ --button-font-size: 0.9375rem;
5
8
  }
6
9
 
7
10
  /* ── Button ───────────────────────────────────────────────────── */
@@ -10,10 +13,10 @@
10
13
  display: inline-flex;
11
14
  align-items: center;
12
15
  justify-content: center;
13
- height: 2.625rem;
14
- padding: 0 1.375rem;
16
+ height: var(--button-height);
17
+ padding: 0 var(--button-px);
15
18
  border-radius: var(--radius-md);
16
- font-size: 0.9375rem;
19
+ font-size: var(--button-font-size);
17
20
  font-weight: 600;
18
21
  line-height: 1;
19
22
  text-decoration: none;
@@ -36,6 +39,18 @@
36
39
  border-color: var(--accent-strong);
37
40
  }
38
41
 
42
+ /* ── Secondary ────────────────────────────────────────────── */
43
+
44
+ .secondary {
45
+ background: transparent;
46
+ color: var(--accent);
47
+ border-color: transparent;
48
+ }
49
+
50
+ .secondary:hover {
51
+ background: var(--accent-subtle);
52
+ }
53
+
39
54
  /* Markdoc wraps button body text in <p> — collapse it so the button
40
55
  renders cleanly without affecting inline-flex layout */
41
56
  .button :global(p) {
@@ -22,6 +22,7 @@ import styles from './Button.module.css';
22
22
 
23
23
  interface ButtonProps {
24
24
  path: string;
25
+ variant?: 'primary' | 'secondary';
25
26
  children?: React.ReactNode;
26
27
  }
27
28
 
@@ -29,8 +30,8 @@ function isExternal(path: string) {
29
30
  return path.startsWith('http://') || path.startsWith('https://') || path.startsWith('//');
30
31
  }
31
32
 
32
- export function Button({ path, children }: ButtonProps) {
33
- const className = `${styles.button} ${styles.primary}`;
33
+ export function Button({ path, variant = 'primary', children }: ButtonProps) {
34
+ const className = `${styles.button} ${styles[variant]}`;
34
35
 
35
36
  if (isExternal(path)) {
36
37
  return (
package/src/app/main.tsx CHANGED
@@ -7,6 +7,7 @@ import navigation from 'virtual:mordoc/navigation';
7
7
  import assets from 'virtual:mordoc/assets';
8
8
  import pagesIndex from 'virtual:mordoc/pages-index';
9
9
  import translations from 'virtual:mordoc/translations';
10
+ import headerLinks from 'virtual:mordoc/header-links';
10
11
  import type { ShellData } from '../types/pipeline.js';
11
12
  import './index.css';
12
13
  import { MordocDataContext } from './data-context.js';
@@ -33,6 +34,16 @@ import 'virtual:mordoc/theme';
33
34
  * triggering a redundant fetch of the same lazy page chunk that the
34
35
  * server already used to produce the initial HTML.
35
36
  */
37
+ // React Router's beforeunload handler saves scroll position to sessionStorage
38
+ // on every page exit — including reloads — so the next load restores it,
39
+ // causing a visible jump from top to the saved position. Clearing the entry
40
+ // here (after the reload, before hydrateRoot) prevents the restoration.
41
+ if ((performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming | undefined)?.type === 'reload') {
42
+ try {
43
+ sessionStorage.removeItem('react-router-scroll-positions');
44
+ } catch { /* unavailable in some private-browsing modes */ }
45
+ }
46
+
36
47
  const container = document.getElementById('app');
37
48
  if (!container) {
38
49
  throw new Error('mordoc: #app element not found in HTML shell');
@@ -45,6 +56,7 @@ const shellData: ShellData = {
45
56
  assets,
46
57
  pagesIndex,
47
58
  translations,
59
+ headerLinks,
48
60
  };
49
61
 
50
62
  const hydrationData = window.__staticRouterHydrationData;
@@ -225,6 +225,29 @@
225
225
  border-radius: var(--radius-md);
226
226
  }
227
227
 
228
+ /* ============================================================
229
+ MOBILE TOPNAV SECTION (drawer only)
230
+ Hidden on desktop — the Topnav row handles that breakpoint.
231
+ Rendered above the sidenav tree inside the off-canvas drawer.
232
+ ============================================================ */
233
+
234
+ .mobileTopnav {
235
+ display: none;
236
+ padding: var(--sidenav-pad-y) var(--sidenav-pad-x) 0;
237
+ }
238
+
239
+ @media (max-width: 767.98px) {
240
+ .mobileTopnav {
241
+ display: block;
242
+ }
243
+ }
244
+
245
+ .mobileTopnavDivider {
246
+ border: none;
247
+ border-top: 1px solid var(--sidenav-border);
248
+ margin: var(--sidenav-pad-y) 0 0;
249
+ }
250
+
228
251
  /* ============================================================
229
252
  REDUCED MOTION
230
253
  ============================================================ */
@@ -157,6 +157,41 @@ function resolveActiveSidenav(
157
157
  return match?.sidenav ?? [];
158
158
  }
159
159
 
160
+ /**
161
+ * Renders the topnav section links inside the mobile off-canvas drawer.
162
+ * Hidden on desktop (display:none) — the `<Topnav>` row handles desktop.
163
+ * Only rendered when navigation.kind === 'topnav'; returns null otherwise.
164
+ */
165
+ export function MobileTopnavSection() {
166
+ const { navigation, language, site, translations } = useMordocData();
167
+ const { pathname } = useLocation();
168
+
169
+ if (navigation.kind !== 'topnav') return null;
170
+
171
+ const currentLang = detectCurrentLang(pathname, language, site.defaultLanguage);
172
+ const prefix = buildLangPrefix(currentLang, site.defaultLanguage);
173
+
174
+ return (
175
+ <div className={styles.mobileTopnav}>
176
+ <ul className={styles.menu}>
177
+ {navigation.topnav.map((item) => (
178
+ <li key={item.path} className={styles.menuItem}>
179
+ <NavLink
180
+ to={`${prefix}${item.path}`}
181
+ className={({ isActive }) =>
182
+ isActive ? `${styles.topLink} ${styles.topLinkActive}` : styles.topLink
183
+ }
184
+ >
185
+ {resolveLabel(item.label, currentLang, site.defaultLanguage, translations)}
186
+ </NavLink>
187
+ </li>
188
+ ))}
189
+ </ul>
190
+ <hr className={styles.mobileTopnavDivider} />
191
+ </div>
192
+ );
193
+ }
194
+
160
195
  export function Sidenav() {
161
196
  const { navigation, language, site, translations } = useMordocData();
162
197
  const { pathname } = useLocation();
@@ -57,6 +57,11 @@ declare module 'virtual:mordoc/translations' {
57
57
  export default value;
58
58
  }
59
59
 
60
+ declare module 'virtual:mordoc/header-links' {
61
+ const value: import('../types/navigation.js').HeaderLink[];
62
+ export default value;
63
+ }
64
+
60
65
  // CSS-only side-effect import; resolves to config/styles/theme.css when present.
61
66
  declare module 'virtual:mordoc/theme' {}
62
67