mordoc 1.1.3 → 1.2.0

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":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAIvC;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,QAA8B;IACjD,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,IAAI,IAAI,KAAK,CAAC;aACxC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,GAAW;IACtB,QAAQ,EAAE,CAAC,QAAQ,CAAC;IACpB,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACpB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE;KACpD;IACD,SAAS,CAAC,IAAI,EAAE,MAAM;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,OAAO,GAAI,MAAM,CAAC,SAA+C,EAAE,OAAO,CAAC;QACjF,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE;YAChF,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;YAClB,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,UAAU,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAE1D,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,UAAqC,CAAC;QAC/E,KAAK,QAAQ,CAAC;QACd,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;CACF,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,IAAI,GAAW;IACnB,MAAM,EAAE,aAAa;IACrB,QAAQ,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;IACvD,UAAU,EAAE;QACV,IAAI,EAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;KACxB;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,KAAK,GAAW;IACpB,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QAC1B,OAAO,EAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;KACzC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,KAAK,GAAW;IACpB,MAAM,EAAE,OAAO;IACf,UAAU,EAAE;QACV,GAAG,EAAI,EAAE,IAAI,EAAE,MAAM,EAAE;QACvB,GAAG,EAAI,EAAE,IAAI,EAAE,MAAM,EAAE;QACvB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;KACxB;CACF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,OAAO,GAAW;IACtB,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC;IACtD,UAAU,EAAE;QACV,IAAI,EAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;QACvF,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;KACxB;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,IAAI,GAAW;IACnB,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC;IACzC,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvC,IAAI,EAAG,EAAE,IAAI,EAAE,MAAM,EAAE;QACvB,IAAI,EAAG,EAAE,IAAI,EAAE,MAAM,EAAE;QACvB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACvB,GAAG,EAAI,EAAE,IAAI,EAAE,MAAM,EAAE;KACxB;CACF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,QAAQ,GAAW;IACvB,MAAM,EAAE,UAAU;IAClB,QAAQ,EAAE,CAAC,KAAK,CAAC;IACjB,UAAU,EAAE;QACV,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;KACrC;CACF,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,IAAI,GAAW;IACnB,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC;IAC9B,UAAU,EAAE;QACV,KAAK,EAAa,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QAClD,WAAW,EAAO,EAAE,IAAI,EAAE,MAAM,EAAE;QAClC,WAAW,EAAO,EAAE,IAAI,EAAE,MAAM,EAAE;QAClC,KAAK,EAAa,EAAE,IAAI,EAAE,MAAM,EAAE;QAClC,UAAU,EAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;QAClC,UAAU,EAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;QAClC,gBAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QAClC,gBAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;KACnC;CACF,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,OAAO,GAAW;IACtB,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC;IAC9E,UAAU,EAAE;QACV,KAAK,EAAO,EAAE,IAAI,EAAE,MAAM,EAAE;QAC5B,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;KAC7B;CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,GAAW;IACrB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC;IACzD,UAAU,EAAE;QACV,IAAI,EAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE;KACjF;CACF,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;QACtC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;KACzD,CAAC;AACJ,CAAC"}
@@ -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":"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"}
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.0",
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';
@@ -45,6 +46,7 @@ const shellData: ShellData = {
45
46
  assets,
46
47
  pagesIndex,
47
48
  translations,
49
+ headerLinks,
48
50
  };
49
51
 
50
52
  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