@x12i/docify-render 1.0.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.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # @x12i/docify-render
2
+
3
+ Convert `BOOK.md` into case-file HTML (`.chapter` / kicker / title) and extract chapter indexes for the reader, PDF, and use-case packs.
@@ -0,0 +1,12 @@
1
+ import { type ChapterEntry } from "@x12i/docify-core";
2
+ export type ExtractedChapter = ChapterEntry & {
3
+ markdown: string;
4
+ };
5
+ /** Split BOOK.md into H2 chapters (and leading preamble as first optional block). */
6
+ export declare function extractChapters(markdown: string): ExtractedChapter[];
7
+ export declare function chapterIndex(markdown: string): ChapterEntry[];
8
+ export declare function spliceChapters(markdown: string, slugs: string[]): {
9
+ found: ExtractedChapter[];
10
+ missing: string[];
11
+ };
12
+ //# sourceMappingURL=extract-chapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-chapters.d.ts","sourceRoot":"","sources":["../src/extract-chapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA0CpE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAO7D;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EAAE,GACd;IAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAWlD"}
@@ -0,0 +1,66 @@
1
+ import { slugify } from "@x12i/docify-core";
2
+ /** Split BOOK.md into H2 chapters (and leading preamble as first optional block). */
3
+ export function extractChapters(markdown) {
4
+ const lines = markdown.replace(/\r\n/g, "\n").split("\n");
5
+ const chapters = [];
6
+ let currentTitle = null;
7
+ let currentLines = [];
8
+ let order = 0;
9
+ const flush = () => {
10
+ if (currentTitle == null) {
11
+ const preamble = currentLines.join("\n").trim();
12
+ if (preamble) {
13
+ chapters.push({
14
+ slug: "preamble",
15
+ title: "Introduction",
16
+ level: 2,
17
+ order: order++,
18
+ markdown: preamble,
19
+ });
20
+ }
21
+ return;
22
+ }
23
+ chapters.push({
24
+ slug: slugify(currentTitle),
25
+ title: currentTitle,
26
+ level: 2,
27
+ order: order++,
28
+ markdown: currentLines.join("\n").trimEnd(),
29
+ });
30
+ };
31
+ for (const line of lines) {
32
+ const m = /^##\s+(.+?)\s*$/.exec(line);
33
+ if (m) {
34
+ flush();
35
+ currentTitle = m[1].trim();
36
+ currentLines = [];
37
+ continue;
38
+ }
39
+ currentLines.push(line);
40
+ }
41
+ flush();
42
+ return chapters;
43
+ }
44
+ export function chapterIndex(markdown) {
45
+ return extractChapters(markdown).map(({ slug, title, level, order }) => ({
46
+ slug,
47
+ title,
48
+ level,
49
+ order,
50
+ }));
51
+ }
52
+ export function spliceChapters(markdown, slugs) {
53
+ const all = extractChapters(markdown);
54
+ const bySlug = new Map(all.map((c) => [c.slug, c]));
55
+ const found = [];
56
+ const missing = [];
57
+ for (const slug of slugs) {
58
+ const hit = bySlug.get(slug);
59
+ if (hit)
60
+ found.push(hit);
61
+ else
62
+ missing.push(slug);
63
+ }
64
+ return { found, missing };
65
+ }
66
+ //# sourceMappingURL=extract-chapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-chapters.js","sourceRoot":"","sources":["../src/extract-chapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAqB,MAAM,mBAAmB,CAAC;AAM/D,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,YAAY,GAAa,EAAE,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,cAAc;oBACrB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,KAAK,EAAE;oBACd,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC;YAC3B,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,KAAK,EAAE;YACd,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;SAC5C,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC;YACN,KAAK,EAAE,CAAC;YACR,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3B,YAAY,GAAG,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI;QACJ,KAAK;QACL,KAAK;QACL,KAAK;KACN,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,KAAe;IAEf,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;YACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { extractChapters, chapterIndex, spliceChapters, type ExtractedChapter, } from "./extract-chapters.js";
2
+ export { renderBookHtml, enhanceCalloutBlockquotes, type RenderBookOptions } from "./md-to-casefile.js";
3
+ export { renderSitePageHtml, renderBookLandingHtml, type RenderSitePageOptions, type RenderBookLandingOptions, } from "./md-to-page.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxG,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,GAC9B,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { extractChapters, chapterIndex, spliceChapters, } from "./extract-chapters.js";
2
+ export { renderBookHtml, enhanceCalloutBlockquotes } from "./md-to-casefile.js";
3
+ export { renderSitePageHtml, renderBookLandingHtml, } from "./md-to-page.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,GAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAA0B,MAAM,qBAAqB,CAAC;AACxG,OAAO,EACL,kBAAkB,EAClB,qBAAqB,GAGtB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ChapterEntry } from "@x12i/docify-core";
2
+ export type RenderBookOptions = {
3
+ title: string;
4
+ kicker?: string;
5
+ color?: string;
6
+ cssHref?: string;
7
+ };
8
+ /** Map GFM blockquotes that start with Tip:/Watch:/Remember: into .box callouts. */
9
+ export declare function enhanceCalloutBlockquotes(html: string): string;
10
+ /** Render BOOK.md to case-file HTML with .chapter markers. */
11
+ export declare function renderBookHtml(markdown: string, opts: RenderBookOptions): Promise<{
12
+ html: string;
13
+ chapters: ChapterEntry[];
14
+ }>;
15
+ //# sourceMappingURL=md-to-casefile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md-to-casefile.d.ts","sourceRoot":"","sources":["../src/md-to-casefile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AA2BF,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsB9D;AAED,8DAA8D;AAC9D,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAmDrD"}
@@ -0,0 +1,94 @@
1
+ import { marked } from "marked";
2
+ import { extractChapters } from "./extract-chapters.js";
3
+ const SCREEN_FONTS_HREF = "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans+Condensed:wght@500;600;700&family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,600;1,8..60,400&display=swap";
4
+ function escapeAttr(s) {
5
+ return s.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;");
6
+ }
7
+ function escapeHtml(s) {
8
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
9
+ }
10
+ const CALLOUT_RE = /^(Tip|Watch|Remember|Tech|Field)\s*:\s*/i;
11
+ function calloutKind(label) {
12
+ const k = label.toLowerCase();
13
+ if (k === "tip")
14
+ return "tip";
15
+ if (k === "watch")
16
+ return "watch";
17
+ if (k === "remember")
18
+ return "remember";
19
+ if (k === "tech")
20
+ return "tech";
21
+ return "field";
22
+ }
23
+ /** Map GFM blockquotes that start with Tip:/Watch:/Remember: into .box callouts. */
24
+ export function enhanceCalloutBlockquotes(html) {
25
+ return html.replace(/<blockquote>\s*([\s\S]*?)<\/blockquote>/gi, (full, inner) => {
26
+ const text = inner.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim();
27
+ const m = text.match(CALLOUT_RE);
28
+ if (!m)
29
+ return full;
30
+ const kind = calloutKind(m[1]);
31
+ const stamp = m[1].toUpperCase();
32
+ let replaced = false;
33
+ const body = inner.replace(/<p>([\s\S]*?)<\/p>/i, (_p, pInner) => {
34
+ if (replaced)
35
+ return _p;
36
+ replaced = true;
37
+ const cleaned = String(pInner).replace(CALLOUT_RE, "").trim();
38
+ return cleaned ? `<p>${cleaned}</p>` : "";
39
+ });
40
+ return `<div class="box -${kind}"><span class="stamp">${escapeHtml(stamp)}</span>${body}</div>`;
41
+ });
42
+ }
43
+ /** Render BOOK.md to case-file HTML with .chapter markers. */
44
+ export async function renderBookHtml(markdown, opts) {
45
+ const chapters = extractChapters(markdown);
46
+ const color = opts.color || "#16324f";
47
+ const cssHref = opts.cssHref || "../assets/book.css";
48
+ const parts = [];
49
+ for (const ch of chapters) {
50
+ const bodyMd = ch.markdown;
51
+ let bodyHtml = await marked.parse(bodyMd, { async: true, gfm: true });
52
+ if (typeof bodyHtml !== "string")
53
+ bodyHtml = String(bodyHtml);
54
+ bodyHtml = enhanceCalloutBlockquotes(bodyHtml);
55
+ const tabColor = color;
56
+ parts.push(`
57
+ <div class="chapter" id="${escapeAttr(ch.slug)}" style="--tab-color:${escapeAttr(tabColor)};">
58
+ <div class="chapter-header">
59
+ <span class="chapter-tab">Case file</span>
60
+ <p class="chapter-kicker">${escapeAttr(opts.kicker || "CASE FILE")}</p>
61
+ <h1 class="chapter-title">${escapeAttr(ch.title)}</h1>
62
+ </div>
63
+ <div class="chapter-body">
64
+ ${bodyHtml}
65
+ </div>
66
+ </div>`);
67
+ }
68
+ const html = `<!DOCTYPE html>
69
+ <html lang="en">
70
+ <head>
71
+ <meta charset="utf-8">
72
+ <meta name="viewport" content="width=device-width, initial-scale=1">
73
+ <title>${escapeAttr(opts.title)}</title>
74
+ <link rel="stylesheet" href="${escapeAttr(cssHref)}">
75
+ <link rel="stylesheet" media="screen" href="${escapeAttr(SCREEN_FONTS_HREF)}">
76
+ </head>
77
+ <body class="book-document">
78
+ <div class="book-shell">
79
+ ${parts.join("\n")}
80
+ </div>
81
+ </body>
82
+ </html>
83
+ `;
84
+ return {
85
+ html,
86
+ chapters: chapters.map(({ slug, title, level, order }) => ({
87
+ slug,
88
+ title,
89
+ level,
90
+ order,
91
+ })),
92
+ };
93
+ }
94
+ //# sourceMappingURL=md-to-casefile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md-to-casefile.js","sourceRoot":"","sources":["../src/md-to-casefile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Book, Catalog, LoadedSitePage, SiteConfig } from "@x12i/docify-core";
2
+ export type RenderSitePageOptions = {
3
+ site: SiteConfig;
4
+ catalog: Catalog;
5
+ cssHrefs?: string[];
6
+ /** Relative path to app.js for hydration pages. */
7
+ appJsHref?: string;
8
+ /** When true, emit hydrate markers for catalog / use-cases / audience. */
9
+ hydrate?: boolean;
10
+ };
11
+ export declare function renderSitePageHtml(loaded: LoadedSitePage, opts: RenderSitePageOptions): Promise<string>;
12
+ export type RenderBookLandingOptions = RenderSitePageOptions & {
13
+ book: Book;
14
+ /** Optional downloads from agent manifest. */
15
+ downloads?: {
16
+ md?: Record<string, string>;
17
+ pdf?: Record<string, string | null>;
18
+ };
19
+ };
20
+ export declare function renderBookLandingHtml(loaded: LoadedSitePage | null, opts: RenderBookLandingOptions): Promise<string>;
21
+ //# sourceMappingURL=md-to-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md-to-page.d.ts","sourceRoot":"","sources":["../src/md-to-page.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,IAAI,EACJ,OAAO,EACP,cAAc,EACd,UAAU,EAEX,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAmNF,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA+EjB;AAED,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,GAAG;IAC7D,IAAI,EAAE,IAAI,CAAC;IACX,8CAA8C;IAC9C,SAAS,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;KAAE,CAAC;CAClF,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,MAAM,CAAC,CA2GjB"}
@@ -0,0 +1,347 @@
1
+ import { marked } from "marked";
2
+ function escapeHtml(s) {
3
+ return String(s)
4
+ .replace(/&/g, "&amp;")
5
+ .replace(/</g, "&lt;")
6
+ .replace(/>/g, "&gt;")
7
+ .replace(/"/g, "&quot;");
8
+ }
9
+ function ctaClass(variant) {
10
+ if (variant === "secondary")
11
+ return "btn btn-secondary";
12
+ if (variant === "link")
13
+ return "btn btn-link";
14
+ return "btn btn-primary";
15
+ }
16
+ function renderCtas(ctas) {
17
+ if (!ctas.length)
18
+ return "";
19
+ return `<div class="cta-row">${ctas
20
+ .map((c) => `<a class="${ctaClass(c.variant)}" href="${escapeHtml(c.href)}">${escapeHtml(c.label)}</a>`)
21
+ .join("")}</div>`;
22
+ }
23
+ function renderHeader(site, page, mode) {
24
+ if (page.nav === false)
25
+ return "";
26
+ const brand = site.product || site.brand.split("·")[0].trim();
27
+ const nav = mode === "docs"
28
+ ? site.nav ?? [
29
+ { label: "Getting started", href: "/getting-started" },
30
+ { label: "Use cases", href: "/use-cases" },
31
+ { label: "Catalog", href: "/catalog" },
32
+ ]
33
+ : [
34
+ { label: "Product", href: "/#product" },
35
+ { label: "Docs", href: "/docs" },
36
+ ];
37
+ const badge = mode === "docs"
38
+ ? `<span class="brand-badge">docs</span>`
39
+ : "";
40
+ const extra = mode === "docs" && site.productUrl
41
+ ? `<a class="nav-external" href="${escapeHtml(site.productUrl)}">${escapeHtml(brand)}.x12i.com ↗</a>`
42
+ : mode === "product"
43
+ ? `<a class="btn btn-primary btn-sm" href="/docs">Read the docs →</a>`
44
+ : "";
45
+ return `<header class="site-header">
46
+ <a class="brand" href="${mode === "docs" ? "/docs" : "/"}">
47
+ <span class="brand-mark" aria-hidden="true"></span>
48
+ <span class="brand-name">${escapeHtml(brand.toLowerCase())}</span>
49
+ ${badge}
50
+ </a>
51
+ <button type="button" class="nav-toggle" aria-label="Menu" data-nav-toggle>Menu</button>
52
+ <nav class="site-nav" data-site-nav>
53
+ ${nav.map((l) => `<a href="${escapeHtml(l.href)}">${escapeHtml(l.label)}</a>`).join("")}
54
+ ${extra}
55
+ </nav>
56
+ </header>`;
57
+ }
58
+ function renderFooter(site, page) {
59
+ const links = page.footer?.links ??
60
+ site.footerLinks ??
61
+ [
62
+ { label: "Docs home", href: "/docs" },
63
+ { label: "Getting started", href: "/getting-started" },
64
+ { label: "Use cases", href: "/use-cases" },
65
+ { label: "Catalog", href: "/catalog" },
66
+ { label: "Agents/SDK", href: "/agents" },
67
+ ];
68
+ const left = site.footer || site.siteUrl.replace(/^https?:\/\//, "");
69
+ return `<footer class="site-footer">
70
+ <div class="footer-id">${escapeHtml(left)}</div>
71
+ <nav class="footer-nav">
72
+ ${links.map((l) => `<a href="${escapeHtml(l.href)}">${escapeHtml(l.label)}</a>`).join("")}
73
+ </nav>
74
+ </footer>`;
75
+ }
76
+ function renderHero(page) {
77
+ const h = page.hero;
78
+ if (!h)
79
+ return "";
80
+ return `<section class="hero">
81
+ ${h.kicker ? `<div class="hero-kicker">${escapeHtml(h.kicker)}</div>` : ""}
82
+ <h1>${escapeHtml(h.headline)}</h1>
83
+ ${h.lead ? `<p class="hero-lead">${escapeHtml(h.lead)}</p>` : ""}
84
+ ${renderCtas(h.ctas || [])}
85
+ </section>`;
86
+ }
87
+ function bookCard(book) {
88
+ const num = book.id.split("-")[0] || book.id;
89
+ const tags = book.audiences
90
+ .map((a) => {
91
+ const primary = a === "builders" && book.buildersPrimary ? " · primary" : "";
92
+ const cls = a === "builders" ? "tag tag-alt" : "tag";
93
+ const label = a === "developers" ? "Dev" : `Builder${primary}`;
94
+ return `<span class="${cls}">${escapeHtml(label)}</span>`;
95
+ })
96
+ .join("");
97
+ return `<a class="book-card" href="/books/${escapeHtml(book.id)}">
98
+ <span class="book-num">Book ${escapeHtml(num)}</span>
99
+ <span class="book-title">${escapeHtml(book.title)}</span>
100
+ <span class="tag-row">${tags}</span>
101
+ </a>`;
102
+ }
103
+ function renderSection(section, catalog, page) {
104
+ switch (section.type) {
105
+ case "capabilities":
106
+ return `<section class="section" id="product">
107
+ ${section.title ? `<h2 class="section-kicker">${escapeHtml(section.title)}</h2>` : ""}
108
+ <div class="grid-cells">${section.cells
109
+ .map((c) => `<div class="grid-cell"><div class="cell-title">${escapeHtml(c.title)}</div><div class="cell-body">${escapeHtml(c.body)}</div></div>`)
110
+ .join("")}</div>
111
+ </section>`;
112
+ case "trust":
113
+ return `<section class="trust-strip"><div class="trust-inner">${section.items
114
+ .map((i) => `<span>${escapeHtml(i)}</span>`)
115
+ .join("")}</div></section>`;
116
+ case "featured": {
117
+ const books = section.bookIds
118
+ .map((id) => catalog.books.find((b) => b.id === id))
119
+ .filter((b) => !!b);
120
+ return `<section class="section">
121
+ <div class="section-head">
122
+ <h2>${escapeHtml(section.title || "From the library")}</h2>
123
+ <a class="section-link" href="/catalog">View full catalog →</a>
124
+ </div>
125
+ <div class="book-card-grid">${books.map(bookCard).join("")}</div>
126
+ </section>`;
127
+ }
128
+ case "tracks":
129
+ return `<section class="section tracks">${section.tracks
130
+ .map((t) => {
131
+ const accent = t.accent === "accent-alt" ? "track-alt" : "track-main";
132
+ const steps = t.steps
133
+ .map((s, i) => {
134
+ const inner = s.href
135
+ ? `<a href="${escapeHtml(s.href)}">${escapeHtml(s.text)}</a>`
136
+ : escapeHtml(s.text);
137
+ return `<li><span class="step-num">${i + 1}</span><span class="step-text">${inner}</span></li>`;
138
+ })
139
+ .join("");
140
+ return `<div class="track ${accent}">
141
+ <div class="tag ${t.accent === "accent-alt" ? "tag-alt" : ""}">${escapeHtml(t.label)}</div>
142
+ <ol class="step-list">${steps}</ol>
143
+ ${t.note ? `<p class="track-note">${escapeHtml(t.note)}</p>` : ""}
144
+ ${t.cta ? renderCtas([t.cta]) : ""}
145
+ </div>`;
146
+ })
147
+ .join("")}</section>`;
148
+ case "audience-cards":
149
+ return `<section class="section audience-grid" data-hydrate="audience">${section.cards
150
+ .map((c) => {
151
+ const alt = c.roleId === "builders";
152
+ return `<div class="audience-card ${alt ? "audience-alt" : ""}">
153
+ <span class="tag ${alt ? "tag-alt" : ""}">${escapeHtml(c.roleId)}</span>
154
+ <h2>${escapeHtml(c.title)}</h2>
155
+ <p>${escapeHtml(c.body)}</p>
156
+ ${c.path ? `<div class="path-line">${escapeHtml(c.path)}</div>` : ""}
157
+ <a class="btn ${alt ? "btn-alt" : "btn-primary"}" href="${escapeHtml(c.cta.href)}">${escapeHtml(c.cta.label)}</a>
158
+ </div>`;
159
+ })
160
+ .join("")}</section>`;
161
+ case "note":
162
+ return `<section class="section"><div class="note">${section.title
163
+ ? `<div class="note-title">${escapeHtml(section.title)}</div>`
164
+ : ""}<div class="note-body">${escapeHtml(section.body)}</div></div></section>`;
165
+ case "catalog-table":
166
+ return `<section class="section" data-hydrate="catalog">
167
+ <div id="catalog-root" class="list-table-wrap" data-coming-soon="${escapeHtml((section.comingSoon || []).join("|"))}"></div>
168
+ </section>`;
169
+ case "use-case-lists":
170
+ return `<section class="section" data-hydrate="use-cases"><div id="use-cases-root"></div></section>`;
171
+ default:
172
+ return "";
173
+ }
174
+ }
175
+ function chromeMode(page) {
176
+ return page.page === "product-home" ? "product" : "docs";
177
+ }
178
+ function styleVars(site) {
179
+ const parts = [];
180
+ if (site.accent)
181
+ parts.push(`--accent:${site.accent}`);
182
+ if (site.accentAlt)
183
+ parts.push(`--accent-alt:${site.accentAlt}`);
184
+ return parts.length ? ` style="${parts.join(";")}"` : "";
185
+ }
186
+ export async function renderSitePageHtml(loaded, opts) {
187
+ const { page, body } = loaded;
188
+ const site = opts.site;
189
+ const catalog = opts.catalog;
190
+ const css = opts.cssHrefs ?? ["/assets/site.css", "/assets/extras.css"];
191
+ const appJs = opts.appJsHref ?? "/app.js";
192
+ // Expand featured shorthand into a section if needed
193
+ const sections = [...page.sections];
194
+ if (page.featured?.length && !sections.some((s) => s.type === "featured")) {
195
+ sections.push({
196
+ type: "featured",
197
+ title: "Featured books",
198
+ bookIds: page.featured,
199
+ });
200
+ }
201
+ let bodyHtml = "";
202
+ if (body.trim()) {
203
+ const parsed = await marked.parse(body, { async: true, gfm: true });
204
+ bodyHtml = `<section class="section prose">${typeof parsed === "string" ? parsed : String(parsed)}</section>`;
205
+ }
206
+ const hydrateKinds = new Set(sections
207
+ .filter((s) => s.type === "catalog-table" ||
208
+ s.type === "use-case-lists" ||
209
+ s.type === "audience-cards")
210
+ .map((s) => s.type));
211
+ const needsApp = hydrateKinds.size > 0 ||
212
+ page.page === "catalog" ||
213
+ page.page === "use-cases" ||
214
+ page.page === "agents" ||
215
+ page.page === "audience-chooser";
216
+ const mode = chromeMode(page);
217
+ return `<!DOCTYPE html>
218
+ <html lang="en">
219
+ <head>
220
+ <meta charset="utf-8">
221
+ <meta name="viewport" content="width=device-width, initial-scale=1">
222
+ <title>${escapeHtml(page.title)}</title>
223
+ <link rel="preconnect" href="https://fonts.googleapis.com">
224
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
225
+ ${css.map((h) => `<link rel="stylesheet" href="${escapeHtml(h)}">`).join("\n")}
226
+ </head>
227
+ <body class="page-${escapeHtml(page.page)}"${styleVars(site)} data-page="${escapeHtml(page.page)}">
228
+ <div class="page-shell">
229
+ ${renderHeader(site, page, mode)}
230
+ <main>
231
+ ${renderHero(page)}
232
+ ${sections.map((s) => renderSection(s, catalog, page)).join("\n")}
233
+ ${bodyHtml}
234
+ </main>
235
+ ${renderFooter(site, page)}
236
+ </div>
237
+ ${needsApp ? `<script src="${escapeHtml(appJs)}"></script>` : ""}
238
+ <script>
239
+ document.querySelectorAll("[data-nav-toggle]").forEach((btn) => {
240
+ btn.addEventListener("click", () => {
241
+ document.querySelector("[data-site-nav]")?.classList.toggle("open");
242
+ });
243
+ });
244
+ </script>
245
+ ${needsApp
246
+ ? `<script>
247
+ if (typeof hydratePage === "function") hydratePage(document.body.dataset.page);
248
+ </script>`
249
+ : ""}
250
+ </body>
251
+ </html>`;
252
+ }
253
+ export async function renderBookLandingHtml(loaded, opts) {
254
+ const book = opts.book;
255
+ const page = loaded?.page ?? {
256
+ page: "book-landing",
257
+ route: `/books/${book.id}`,
258
+ title: book.title,
259
+ nav: true,
260
+ bookId: book.id,
261
+ hero: {
262
+ kicker: `Book ${book.id.split("-")[0]}`,
263
+ headline: book.title,
264
+ lead: book.blurb,
265
+ ctas: [],
266
+ },
267
+ sections: [],
268
+ };
269
+ const site = opts.site;
270
+ const catalog = opts.catalog;
271
+ const css = opts.cssHrefs ?? ["/assets/site.css", "/assets/extras.css"];
272
+ const num = book.id.split("-")[0] || book.id;
273
+ const prereq = (page.prerequisites || [])
274
+ .map((id) => catalog.books.find((b) => b.id === id))
275
+ .filter((b) => !!b);
276
+ const related = (page.related || [])
277
+ .map((id) => catalog.books.find((b) => b.id === id))
278
+ .filter((b) => !!b);
279
+ const readCtas = book.audiences
280
+ .map((a) => {
281
+ const alt = a === "builders";
282
+ return `<a class="btn ${alt ? "btn-alt" : "btn-primary"}" href="/read?book=${encodeURIComponent(book.id)}&role=${encodeURIComponent(a)}">Read — ${escapeHtml(a)}</a>`;
283
+ })
284
+ .join("");
285
+ const tags = book.audiences
286
+ .map((a) => {
287
+ const alt = a === "builders";
288
+ return `<span class="tag ${alt ? "tag-alt" : ""}">${escapeHtml(a)}</span>`;
289
+ })
290
+ .join("");
291
+ const assetBits = [];
292
+ if (page.assets?.diagrams != null)
293
+ assetBits.push(`${page.assets.diagrams} diagrams`);
294
+ if (page.assets?.screenshots != null)
295
+ assetBits.push(`${page.assets.screenshots} screenshots`);
296
+ const lead = page.hero?.lead || book.subtitle || book.blurb;
297
+ return `<!DOCTYPE html>
298
+ <html lang="en">
299
+ <head>
300
+ <meta charset="utf-8">
301
+ <meta name="viewport" content="width=device-width, initial-scale=1">
302
+ <title>${escapeHtml(book.title)} · ${escapeHtml(site.brand)}</title>
303
+ <link rel="preconnect" href="https://fonts.googleapis.com">
304
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
305
+ ${css.map((h) => `<link rel="stylesheet" href="${escapeHtml(h)}">`).join("\n")}
306
+ </head>
307
+ <body class="page-book-landing"${styleVars(site)} data-page="book-landing">
308
+ <div class="page-shell">
309
+ ${renderHeader(site, page, "docs")}
310
+ <main>
311
+ <div class="crumb"><a href="/catalog">← Catalog</a></div>
312
+ <section class="hero book-hero">
313
+ <div class="hero-kicker">Book ${escapeHtml(num)}</div>
314
+ <h1>${escapeHtml(book.title)}</h1>
315
+ <p class="hero-lead">${escapeHtml(lead)}</p>
316
+ <div class="tag-row">${tags}</div>
317
+ <div class="cta-row">${readCtas}</div>
318
+ </section>
319
+ <section class="section meta-grid">
320
+ ${prereq.length
321
+ ? `<div class="meta-card"><div class="meta-label">Prerequisites</div><div class="meta-body">${prereq
322
+ .map((b) => `<a href="/books/${escapeHtml(b.id)}">${escapeHtml(b.title)}</a>`)
323
+ .join(", ")}</div></div>`
324
+ : ""}
325
+ ${assetBits.length
326
+ ? `<div class="meta-card"><div class="meta-label">Assets</div><div class="meta-body">${escapeHtml(assetBits.join(" · "))}</div></div>`
327
+ : ""}
328
+ </section>
329
+ ${related.length
330
+ ? `<section class="section"><h2 class="section-title">Related books</h2><div class="related-row">${related
331
+ .map((b) => `<a class="related-chip" href="/books/${escapeHtml(b.id)}">${escapeHtml(b.id.split("-")[0] || "")} · ${escapeHtml(b.title)}</a>`)
332
+ .join("")}</div></section>`
333
+ : ""}
334
+ </main>
335
+ ${renderFooter(site, page)}
336
+ </div>
337
+ <script>
338
+ document.querySelectorAll("[data-nav-toggle]").forEach((btn) => {
339
+ btn.addEventListener("click", () => {
340
+ document.querySelector("[data-site-nav]")?.classList.toggle("open");
341
+ });
342
+ });
343
+ </script>
344
+ </body>
345
+ </html>`;
346
+ }
347
+ //# sourceMappingURL=md-to-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md-to-page.js","sourceRoot":"","sources":["../src/md-to-page.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@x12i/docify-render",
3
+ "version": "1.0.0",
4
+ "description": "Markdown BOOK.md and site-pages \u2192 HTML for x12i docify reader/PDF and site.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "prebuild": "rm -rf dist",
20
+ "build": "tsc -p tsconfig.build.json",
21
+ "test": "vitest run",
22
+ "typecheck": "tsc --noEmit"
23
+ },
24
+ "engines": {
25
+ "node": ">=18.0.0"
26
+ },
27
+ "dependencies": {
28
+ "@x12i/docify-core": "^1.0.0",
29
+ "marked": "^14.1.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^20.14.0",
33
+ "typescript": "^5.6.0",
34
+ "vitest": "^2.1.0"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public",
38
+ "registry": "https://registry.npmjs.org/"
39
+ },
40
+ "license": "exellix-license"
41
+ }