@brett_lamy/docstream 1.3.0 → 1.4.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 +25 -5
- package/dist/assets.d.ts +3 -0
- package/dist/assets.d.ts.map +1 -0
- package/dist/assets.js +20 -0
- package/dist/assets.js.map +1 -0
- package/dist/demo/DemoViewer.d.ts +64 -0
- package/dist/demo/DemoViewer.d.ts.map +1 -0
- package/dist/demo/DemoViewer.js +426 -0
- package/dist/demo/DemoViewer.js.map +1 -0
- package/dist/demo/context.d.ts +14 -0
- package/dist/demo/context.d.ts.map +1 -0
- package/dist/demo/context.js +25 -0
- package/dist/demo/context.js.map +1 -0
- package/dist/demo/glob.d.ts +60 -0
- package/dist/demo/glob.d.ts.map +1 -0
- package/dist/demo/glob.js +158 -0
- package/dist/demo/glob.js.map +1 -0
- package/dist/demo/index.d.ts +10 -0
- package/dist/demo/index.d.ts.map +1 -0
- package/dist/demo/index.js +6 -0
- package/dist/demo/index.js.map +1 -0
- package/dist/demo/markdown.d.ts +60 -0
- package/dist/demo/markdown.d.ts.map +1 -0
- package/dist/demo/markdown.js +181 -0
- package/dist/demo/markdown.js.map +1 -0
- package/dist/demo/surface.d.ts +11 -0
- package/dist/demo/surface.d.ts.map +1 -0
- package/dist/demo/surface.js +69 -0
- package/dist/demo/surface.js.map +1 -0
- package/dist/demo/types.d.ts +91 -0
- package/dist/demo/types.d.ts.map +1 -0
- package/dist/demo/types.js +2 -0
- package/dist/demo/types.js.map +1 -0
- package/dist/docs/CollapsibleCode.d.ts +14 -0
- package/dist/docs/CollapsibleCode.d.ts.map +1 -0
- package/dist/docs/CollapsibleCode.js +19 -0
- package/dist/docs/CollapsibleCode.js.map +1 -0
- package/dist/docs/DocsRenderer.d.ts +49 -0
- package/dist/docs/DocsRenderer.d.ts.map +1 -0
- package/dist/docs/DocsRenderer.js +277 -0
- package/dist/docs/DocsRenderer.js.map +1 -0
- package/dist/docs/HighlightedCode.d.ts +6 -0
- package/dist/docs/HighlightedCode.d.ts.map +1 -0
- package/dist/docs/HighlightedCode.js +40 -0
- package/dist/docs/HighlightedCode.js.map +1 -0
- package/dist/docs/Mermaid.d.ts +7 -0
- package/dist/docs/Mermaid.d.ts.map +1 -0
- package/dist/docs/Mermaid.js +39 -0
- package/dist/docs/Mermaid.js.map +1 -0
- package/dist/docs/PageActions.d.ts +33 -0
- package/dist/docs/PageActions.d.ts.map +1 -0
- package/dist/docs/PageActions.js +115 -0
- package/dist/docs/PageActions.js.map +1 -0
- package/dist/docs/controls.d.ts +29 -0
- package/dist/docs/controls.d.ts.map +1 -0
- package/dist/docs/controls.js +46 -0
- package/dist/docs/controls.js.map +1 -0
- package/dist/docs/copy.d.ts +24 -0
- package/dist/docs/copy.d.ts.map +1 -0
- package/dist/docs/copy.js +62 -0
- package/dist/docs/copy.js.map +1 -0
- package/dist/docs/math.d.ts +3 -0
- package/dist/docs/math.d.ts.map +1 -0
- package/dist/docs/math.js +12 -0
- package/dist/docs/math.js.map +1 -0
- package/dist/docs/reference.d.ts +27 -0
- package/dist/docs/reference.d.ts.map +1 -0
- package/dist/docs/reference.js +73 -0
- package/dist/docs/reference.js.map +1 -0
- package/dist/docs/tabs-sync.d.ts +5 -0
- package/dist/docs/tabs-sync.d.ts.map +1 -0
- package/dist/docs/tabs-sync.js +58 -0
- package/dist/docs/tabs-sync.js.map +1 -0
- package/dist/gitbook/ast.d.ts +506 -0
- package/dist/gitbook/ast.d.ts.map +1 -0
- package/dist/gitbook/ast.js +8 -0
- package/dist/gitbook/ast.js.map +1 -0
- package/dist/gitbook/attrs.d.ts +14 -0
- package/dist/gitbook/attrs.d.ts.map +1 -0
- package/dist/gitbook/attrs.js +36 -0
- package/dist/gitbook/attrs.js.map +1 -0
- package/dist/gitbook/flatten.d.ts +14 -0
- package/dist/gitbook/flatten.d.ts.map +1 -0
- package/dist/gitbook/flatten.js +45 -0
- package/dist/gitbook/flatten.js.map +1 -0
- package/dist/gitbook/index.d.ts +10 -0
- package/dist/gitbook/index.d.ts.map +1 -0
- package/dist/gitbook/index.js +8 -0
- package/dist/gitbook/index.js.map +1 -0
- package/dist/gitbook/inline.d.ts +28 -0
- package/dist/gitbook/inline.d.ts.map +1 -0
- package/dist/gitbook/inline.js +956 -0
- package/dist/gitbook/inline.js.map +1 -0
- package/dist/gitbook/outline.d.ts +16 -0
- package/dist/gitbook/outline.d.ts.map +1 -0
- package/dist/gitbook/outline.js +44 -0
- package/dist/gitbook/outline.js.map +1 -0
- package/dist/gitbook/package-managers.d.ts +12 -0
- package/dist/gitbook/package-managers.d.ts.map +1 -0
- package/dist/gitbook/package-managers.js +93 -0
- package/dist/gitbook/package-managers.js.map +1 -0
- package/dist/gitbook/parse.d.ts +44 -0
- package/dist/gitbook/parse.d.ts.map +1 -0
- package/dist/gitbook/parse.js +1113 -0
- package/dist/gitbook/parse.js.map +1 -0
- package/dist/gitbook/serialize.d.ts +23 -0
- package/dist/gitbook/serialize.d.ts.map +1 -0
- package/dist/gitbook/serialize.js +498 -0
- package/dist/gitbook/serialize.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/openapi/OpenApiOperation.d.ts +6 -0
- package/dist/openapi/OpenApiOperation.d.ts.map +1 -0
- package/dist/openapi/OpenApiOperation.js +112 -0
- package/dist/openapi/OpenApiOperation.js.map +1 -0
- package/dist/playground/InlineDemoPreview.d.ts +24 -0
- package/dist/playground/InlineDemoPreview.d.ts.map +1 -0
- package/dist/playground/InlineDemoPreview.js +48 -0
- package/dist/playground/InlineDemoPreview.js.map +1 -0
- package/dist/playground/PlaygroundStreamdown.d.ts +16 -0
- package/dist/playground/PlaygroundStreamdown.d.ts.map +1 -0
- package/dist/playground/PlaygroundStreamdown.js +22 -0
- package/dist/playground/PlaygroundStreamdown.js.map +1 -0
- package/dist/playground/ReactCodePreview.d.ts +64 -0
- package/dist/playground/ReactCodePreview.d.ts.map +1 -0
- package/dist/playground/ReactCodePreview.js +108 -0
- package/dist/playground/ReactCodePreview.js.map +1 -0
- package/dist/playground/filesystem.d.ts +27 -0
- package/dist/playground/filesystem.d.ts.map +1 -0
- package/dist/playground/filesystem.js +65 -0
- package/dist/playground/filesystem.js.map +1 -0
- package/dist/playground/index.d.ts +9 -0
- package/dist/playground/index.d.ts.map +1 -0
- package/dist/playground/index.js +7 -0
- package/dist/playground/index.js.map +1 -0
- package/dist/playground/project.d.ts +57 -0
- package/dist/playground/project.d.ts.map +1 -0
- package/dist/playground/project.js +137 -0
- package/dist/playground/project.js.map +1 -0
- package/dist/replay/NativeReplay.d.ts +9 -0
- package/dist/replay/NativeReplay.d.ts.map +1 -0
- package/dist/replay/NativeReplay.js +173 -0
- package/dist/replay/NativeReplay.js.map +1 -0
- package/dist/replay/ReplayPreview.d.ts +33 -0
- package/dist/replay/ReplayPreview.d.ts.map +1 -0
- package/dist/replay/ReplayPreview.js +91 -0
- package/dist/replay/ReplayPreview.js.map +1 -0
- package/dist/replay/index.d.ts +5 -0
- package/dist/replay/index.d.ts.map +1 -0
- package/dist/replay/index.js +4 -0
- package/dist/replay/index.js.map +1 -0
- package/dist/replay/sanitize.d.ts +4 -0
- package/dist/replay/sanitize.d.ts.map +1 -0
- package/dist/replay/sanitize.js +86 -0
- package/dist/replay/sanitize.js.map +1 -0
- package/dist/replay/url.d.ts +8 -0
- package/dist/replay/url.d.ts.map +1 -0
- package/dist/replay/url.js +41 -0
- package/dist/replay/url.js.map +1 -0
- package/dist/source/SourcePreview.d.ts +13 -0
- package/dist/source/SourcePreview.d.ts.map +1 -0
- package/dist/source/SourcePreview.js +47 -0
- package/dist/source/SourcePreview.js.map +1 -0
- package/dist/source/client.d.ts +7 -0
- package/dist/source/client.d.ts.map +1 -0
- package/dist/source/client.js +52 -0
- package/dist/source/client.js.map +1 -0
- package/dist/source/index.d.ts +6 -0
- package/dist/source/index.d.ts.map +1 -0
- package/dist/source/index.js +3 -0
- package/dist/source/index.js.map +1 -0
- package/dist/source/types.d.ts +33 -0
- package/dist/source/types.d.ts.map +1 -0
- package/dist/source/types.js +2 -0
- package/dist/source/types.js.map +1 -0
- package/dist/streamdown.d.ts +19 -0
- package/dist/streamdown.d.ts.map +1 -0
- package/dist/streamdown.js +15 -0
- package/dist/streamdown.js.map +1 -0
- package/dist/styles.css +2441 -0
- package/dist/video/VideoEmbed.d.ts +17 -0
- package/dist/video/VideoEmbed.d.ts.map +1 -0
- package/dist/video/VideoEmbed.js +12 -0
- package/dist/video/VideoEmbed.js.map +1 -0
- package/dist/video/index.d.ts +3 -0
- package/dist/video/index.d.ts.map +1 -0
- package/dist/video/index.js +2 -0
- package/dist/video/index.js.map +1 -0
- package/dist/vite/index.d.ts +21 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +137 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/viz/VizEmbed.d.ts +18 -0
- package/dist/viz/VizEmbed.d.ts.map +1 -0
- package/dist/viz/VizEmbed.js +12 -0
- package/dist/viz/VizEmbed.js.map +1 -0
- package/dist/viz/index.d.ts +4 -0
- package/dist/viz/index.d.ts.map +1 -0
- package/dist/viz/index.js +3 -0
- package/dist/viz/index.js.map +1 -0
- package/package.json +62 -32
- package/src/docs/Mermaid.tsx +5 -3
- package/src/replay/ReplayPreview.tsx +0 -1
- package/src/styles.css +91 -0
- package/src/replay/styles.css +0 -87
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { TAG_ATTRS } from "../gitbook/attrs.js";
|
|
2
|
+
import { flattenForPlainMarkdown } from "../gitbook/flatten.js";
|
|
3
|
+
import { demoBody, fenceTracker, parseBlocks, parseMarkdown } from "../gitbook/parse.js";
|
|
4
|
+
import { fenceFor, serializeBlocks, serializeMarkdown } from "../gitbook/serialize.js";
|
|
5
|
+
import { languageForPath } from "./glob.js";
|
|
6
|
+
import { surfaceToCss } from "./surface.js";
|
|
7
|
+
export { fenceFor };
|
|
8
|
+
const TAG_RE = new RegExp(String.raw `^(\s*)\{%\s*demo(\s${TAG_ATTRS})?\s*\/?%\}\s*$`);
|
|
9
|
+
function titleFor(src, node, meta) {
|
|
10
|
+
return node.title ?? meta?.title ?? (src.split("/").pop() || src || "Demo");
|
|
11
|
+
}
|
|
12
|
+
/** The pre-1.2 "plain" rendering of one demo: prose plus titled fences. */
|
|
13
|
+
export function defaultDemoMarkdown(demo, filePath) {
|
|
14
|
+
const { node, meta, files, title } = demo;
|
|
15
|
+
const description = node.description ?? meta?.description;
|
|
16
|
+
const variants = node.variants ?? meta?.variants;
|
|
17
|
+
const parts = [`**Example — ${title}**`];
|
|
18
|
+
if (description)
|
|
19
|
+
parts.push(description);
|
|
20
|
+
if (variants?.length) {
|
|
21
|
+
parts.push(`Variants (the \`variant\` prop): ${variants.map((v) => `\`${v.id}\`${v.label !== v.id ? ` (${v.label})` : ""}`).join(", ")}.`);
|
|
22
|
+
}
|
|
23
|
+
if (!files.length)
|
|
24
|
+
parts.push(`> Demo \`${node.src}\` has no source files.`);
|
|
25
|
+
for (const file of files) {
|
|
26
|
+
const fence = fenceFor(file.content);
|
|
27
|
+
const language = file.language ?? languageForPath(file.path) ?? "";
|
|
28
|
+
const title = filePath ? filePath(node.src, file) : node.src ? `${node.src}/${file.path}` : file.path;
|
|
29
|
+
const body = file.content.replace(/\n+$/, "");
|
|
30
|
+
parts.push(`${fence}${language} title="${title}"\n${body}\n${fence}`);
|
|
31
|
+
}
|
|
32
|
+
return parts.join("\n\n");
|
|
33
|
+
}
|
|
34
|
+
/** Resolver / viewer files as inline demo files: trailing newlines dropped, language filled in. */
|
|
35
|
+
export function toInlineFiles(files) {
|
|
36
|
+
return files.map((file) => {
|
|
37
|
+
const language = file.language ?? languageForPath(file.path);
|
|
38
|
+
return { path: file.path, content: file.content.replace(/\n+$/, ""), ...(language ? { language } : {}) };
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A demo as a self-contained block-form `{% demo %}`: the node's attributes, with the
|
|
43
|
+
* folder's `meta.json` defaults folded in (so the block renders the same without the
|
|
44
|
+
* resolver) — title, description, height, layout, variants, entry and the look fields
|
|
45
|
+
* `status`, `bleed`, `className`, `surface` (as CSS declarations) and `variantsWidth` —
|
|
46
|
+
* and `files` as inline fences. Tag attributes win over `meta.json` where both exist.
|
|
47
|
+
*/
|
|
48
|
+
export function inlineDemoNode(node, files, meta) {
|
|
49
|
+
const inline = toInlineFiles(files);
|
|
50
|
+
const height = node.height ?? (meta?.height === undefined || meta.height === "" ? undefined : String(meta.height));
|
|
51
|
+
const title = node.title ?? meta?.title;
|
|
52
|
+
const description = node.description ?? meta?.description;
|
|
53
|
+
const layout = node.layout ?? meta?.layout;
|
|
54
|
+
const variants = node.variants?.length ? node.variants : meta?.variants?.length ? meta.variants : undefined;
|
|
55
|
+
const entry = node.entry ?? (meta?.entry && inline[0]?.path !== meta.entry ? meta.entry : undefined);
|
|
56
|
+
const status = node.status ?? meta?.status;
|
|
57
|
+
const bleed = node.bleed ?? meta?.bleed;
|
|
58
|
+
const className = node.className ?? meta?.className;
|
|
59
|
+
const surface = node.surface ?? (meta?.surface ? surfaceToCss(meta.surface) : undefined);
|
|
60
|
+
const variantsWidth = node.variantsWidth ?? (meta?.variantsWidth === undefined || meta.variantsWidth === "" ? undefined : String(meta.variantsWidth));
|
|
61
|
+
return {
|
|
62
|
+
type: "demo",
|
|
63
|
+
src: node.src,
|
|
64
|
+
...(title ? { title } : {}),
|
|
65
|
+
...(description ? { description } : {}),
|
|
66
|
+
...(height ? { height } : {}),
|
|
67
|
+
...(layout ? { layout } : {}),
|
|
68
|
+
...(variants ? { variants } : {}),
|
|
69
|
+
...(node.viewport ? { viewport: node.viewport } : {}),
|
|
70
|
+
...(entry ? { entry } : {}),
|
|
71
|
+
...(status ? { status } : {}),
|
|
72
|
+
...(bleed === undefined ? {} : { bleed }),
|
|
73
|
+
...(className ? { className } : {}),
|
|
74
|
+
...(surface ? { surface } : {}),
|
|
75
|
+
...(variantsWidth ? { variantsWidth } : {}),
|
|
76
|
+
...(inline.length ? { files: inline } : {}),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** `inlineDemoNode` serialized: `{% demo … %}` + titled fences + `{% enddemo %}`. */
|
|
80
|
+
export function inlineDemoMarkdown(node, files, meta) {
|
|
81
|
+
return serializeBlocks([inlineDemoNode(node, files, meta)]);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Make every `{% demo %}` in a page carry its real source files (Copy page, `.md`
|
|
85
|
+
* exports, llms.txt). By default the result is still docstream Markdown — see
|
|
86
|
+
* `DemoMarkdownFormat`. Everything outside demo blocks is returned byte-for-byte, and
|
|
87
|
+
* tags inside code fences are left alone.
|
|
88
|
+
*
|
|
89
|
+
* `"inline"`: blocks that already carry inline files, and demos the resolver cannot
|
|
90
|
+
* resolve (or no resolver), are left exactly as written — they are valid docstream.
|
|
91
|
+
* `"plain"`: unresolvable demos become a short note rather than tag syntax other tools
|
|
92
|
+
* would not understand.
|
|
93
|
+
*/
|
|
94
|
+
export async function resolveDemosToMarkdown(markdown, resolver, options = {}) {
|
|
95
|
+
// Plain output also flattens docstream-only presentation blocks (command boxes, titled tabs).
|
|
96
|
+
if (options.format === "plain" && /\{%\s*(?:command\b|tabs\s(?:[^%\n]|%(?!\}))*\btitle=)/.test(markdown)) {
|
|
97
|
+
markdown = serializeMarkdown(flattenForPlainMarkdown(parseMarkdown(markdown)));
|
|
98
|
+
}
|
|
99
|
+
const lines = markdown.split("\n");
|
|
100
|
+
const jobs = [];
|
|
101
|
+
const fences = fenceTracker();
|
|
102
|
+
for (let i = 0; i < lines.length; i++) {
|
|
103
|
+
const line = lines[i];
|
|
104
|
+
if (fences.step(line))
|
|
105
|
+
continue;
|
|
106
|
+
const tag = line.match(TAG_RE);
|
|
107
|
+
if (!tag)
|
|
108
|
+
continue;
|
|
109
|
+
const indent = tag[1];
|
|
110
|
+
const body = demoBody(lines, i + 1, /\/\s*%\}\s*$/.test(line));
|
|
111
|
+
const end = body ? body.next : i + 1;
|
|
112
|
+
const block = lines.slice(i, end).map((l) => (l.startsWith(indent) ? l.slice(indent.length) : l));
|
|
113
|
+
const node = parseBlocks(block)[0];
|
|
114
|
+
if (node?.type !== "demo")
|
|
115
|
+
continue;
|
|
116
|
+
jobs.push({ index: i, end, indent, promise: renderDemo(node, block[0], resolver, options) });
|
|
117
|
+
i = end - 1;
|
|
118
|
+
}
|
|
119
|
+
if (!jobs.length)
|
|
120
|
+
return markdown;
|
|
121
|
+
const rendered = await Promise.all(jobs.map((job) => job.promise));
|
|
122
|
+
for (let j = jobs.length - 1; j >= 0; j--) {
|
|
123
|
+
const out = rendered[j];
|
|
124
|
+
if (out === null)
|
|
125
|
+
continue;
|
|
126
|
+
const { index, end, indent } = jobs[j];
|
|
127
|
+
const text = indent ? out.split("\n").map((l) => (l ? indent + l : l)).join("\n") : out;
|
|
128
|
+
lines.splice(index, end - index, text);
|
|
129
|
+
}
|
|
130
|
+
return lines.join("\n");
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* `inlineDemoMarkdown`, but keeping the author's tag line byte-for-byte when folding in
|
|
134
|
+
* `meta.json` added no attributes (only the files are new).
|
|
135
|
+
*/
|
|
136
|
+
function inlineDemoKeepingTag(tagLine, node, files, meta) {
|
|
137
|
+
const next = inlineDemoNode(node, files, meta);
|
|
138
|
+
const out = serializeBlocks([next]);
|
|
139
|
+
const bare = (n) => {
|
|
140
|
+
const { files: _files, open: _open, raw: _raw, ...rest } = n;
|
|
141
|
+
return rest;
|
|
142
|
+
};
|
|
143
|
+
if (serializeBlocks([bare(next)]) !== serializeBlocks([bare(node)]))
|
|
144
|
+
return out;
|
|
145
|
+
const tag = tagLine.trim().replace(/\s*\/\s*%\}$/, " %}");
|
|
146
|
+
return tag + out.slice(out.indexOf("\n"));
|
|
147
|
+
}
|
|
148
|
+
/** The replacement for one demo block, or null to keep it byte-for-byte. */
|
|
149
|
+
async function renderDemo(node, tagLine, resolver, options) {
|
|
150
|
+
const plain = options.format === "plain";
|
|
151
|
+
const inlineFiles = node.files?.length ? node.files : undefined;
|
|
152
|
+
let meta;
|
|
153
|
+
let files;
|
|
154
|
+
let failure;
|
|
155
|
+
if (resolver && node.src && !(inlineFiles && !plain && !options.render)) {
|
|
156
|
+
try {
|
|
157
|
+
;
|
|
158
|
+
[meta, files] = await Promise.all([resolver.meta(node.src), resolver.files(node.src)]);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
failure = error instanceof Error ? error.message : String(error);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Resolver files are the authority; inline files stand in when it cannot help.
|
|
165
|
+
const chosen = files?.length ? files : inlineFiles;
|
|
166
|
+
if (!chosen) {
|
|
167
|
+
if (!plain)
|
|
168
|
+
return null;
|
|
169
|
+
if (failure !== undefined)
|
|
170
|
+
return `> Live demo \`${node.src}\` could not be resolved: ${failure}`;
|
|
171
|
+
if (!resolver || !node.src)
|
|
172
|
+
return `> Live demo \`${node.src || "?"}\` (interactive on the docs site).`;
|
|
173
|
+
}
|
|
174
|
+
const demo = { node, meta, files: chosen ?? [], title: titleFor(node.src, node, meta) };
|
|
175
|
+
if (options.render)
|
|
176
|
+
return options.render(demo);
|
|
177
|
+
if (plain)
|
|
178
|
+
return defaultDemoMarkdown(demo, options.filePath);
|
|
179
|
+
return chosen === inlineFiles ? null : inlineDemoKeepingTag(tagLine, node, chosen, meta);
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/demo/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
/** A `meta.json` surface object as the declaration string the demo tag carries. */
|
|
3
|
+
export declare function surfaceToCss(surface: Record<string, string | number>): string;
|
|
4
|
+
/**
|
|
5
|
+
* The tag's declaration string as a React style object. Custom properties keep their
|
|
6
|
+
* name; `kebab-case` becomes camelCase; plain numbers on ordinary properties become
|
|
7
|
+
* numbers (so `padding: 12` means 12px, as it does in `meta.json`).
|
|
8
|
+
*/
|
|
9
|
+
export declare function cssToSurface(css: string): Record<string, string | number>;
|
|
10
|
+
export declare function surfaceStyle(surface: Record<string, string | number> | undefined): CSSProperties | undefined;
|
|
11
|
+
//# sourceMappingURL=surface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/demo/surface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAU1C,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAK7E;AAyBD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAgBzE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAE5G"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A demo canvas's `surface` (inline style) has two spellings:
|
|
3
|
+
* - `meta.json`: an object, `{ "background": "var(--brand-50)", "--demo-gap": "12px", "padding": 12 }`;
|
|
4
|
+
* - the `{% demo surface="…" %}` attribute: CSS declarations,
|
|
5
|
+
* `background: var(--brand-50); --demo-gap: 12px; padding: 12`.
|
|
6
|
+
* Keys are kept as written (camelCase, kebab-case or custom properties).
|
|
7
|
+
*/
|
|
8
|
+
/** A `meta.json` surface object as the declaration string the demo tag carries. */
|
|
9
|
+
export function surfaceToCss(surface) {
|
|
10
|
+
return Object.entries(surface)
|
|
11
|
+
.filter(([key, value]) => key.trim() && value !== undefined && value !== null && String(value).trim() !== "")
|
|
12
|
+
.map(([key, value]) => `${key.trim()}: ${String(value).trim()}`)
|
|
13
|
+
.join("; ");
|
|
14
|
+
}
|
|
15
|
+
/** Split on `;` outside parentheses and quotes (`url("a;b")` stays whole). */
|
|
16
|
+
function declarations(css) {
|
|
17
|
+
const out = [];
|
|
18
|
+
let depth = 0;
|
|
19
|
+
let quote = "";
|
|
20
|
+
let current = "";
|
|
21
|
+
for (const ch of css) {
|
|
22
|
+
if (quote) {
|
|
23
|
+
if (ch === quote)
|
|
24
|
+
quote = "";
|
|
25
|
+
}
|
|
26
|
+
else if (ch === '"' || ch === "'")
|
|
27
|
+
quote = ch;
|
|
28
|
+
else if (ch === "(")
|
|
29
|
+
depth++;
|
|
30
|
+
else if (ch === ")")
|
|
31
|
+
depth = Math.max(0, depth - 1);
|
|
32
|
+
else if (ch === ";" && depth === 0) {
|
|
33
|
+
out.push(current);
|
|
34
|
+
current = "";
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
current += ch;
|
|
38
|
+
}
|
|
39
|
+
out.push(current);
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The tag's declaration string as a React style object. Custom properties keep their
|
|
44
|
+
* name; `kebab-case` becomes camelCase; plain numbers on ordinary properties become
|
|
45
|
+
* numbers (so `padding: 12` means 12px, as it does in `meta.json`).
|
|
46
|
+
*/
|
|
47
|
+
export function cssToSurface(css) {
|
|
48
|
+
const style = {};
|
|
49
|
+
for (const declaration of declarations(css)) {
|
|
50
|
+
const colon = declaration.indexOf(":");
|
|
51
|
+
if (colon < 0)
|
|
52
|
+
continue;
|
|
53
|
+
const key = declaration.slice(0, colon).trim();
|
|
54
|
+
const value = declaration.slice(colon + 1).trim();
|
|
55
|
+
if (!key || !value)
|
|
56
|
+
continue;
|
|
57
|
+
if (key.startsWith("--")) {
|
|
58
|
+
style[key] = value;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const name = key.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
|
|
62
|
+
style[name] = /^-?\d+(?:\.\d+)?$/.test(value) ? Number(value) : value;
|
|
63
|
+
}
|
|
64
|
+
return style;
|
|
65
|
+
}
|
|
66
|
+
export function surfaceStyle(surface) {
|
|
67
|
+
return surface && Object.keys(surface).length ? surface : undefined;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/demo/surface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { ComponentType, ReactNode } from "react";
|
|
2
|
+
import type { DemoLayout, DemoVariantOption } from "../gitbook/ast.js";
|
|
3
|
+
export type DemoVariant = DemoVariantOption;
|
|
4
|
+
/** Defaults for a demo folder, usually its `meta.json`. `{% demo %}` attributes override them. */
|
|
5
|
+
export interface DemoMeta {
|
|
6
|
+
title?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Preview height: pixels, or any CSS length (`"60vh"`, `"auto"`). Single-file previews
|
|
10
|
+
* treat it as a **minimum** (the card grows with its content); the multi-file viewer's
|
|
11
|
+
* resizable stage and inline-demo iframes use it as the height.
|
|
12
|
+
*/
|
|
13
|
+
height?: number | string;
|
|
14
|
+
variants?: DemoVariant[];
|
|
15
|
+
/** Entry file, relative to the demo folder. Defaults to `index.tsx`. */
|
|
16
|
+
entry?: string;
|
|
17
|
+
layout?: DemoLayout;
|
|
18
|
+
/** Drop the padded preview surface for demos that bring their own full-bleed frame. */
|
|
19
|
+
bleed?: boolean;
|
|
20
|
+
/** Extra class on the preview canvas (the surface the component renders on). */
|
|
21
|
+
className?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Inline style for the preview canvas: CSS custom properties or plain properties,
|
|
24
|
+
* e.g. `{ "background": "var(--brand-50)", "--demo-gap": "12px" }`.
|
|
25
|
+
*/
|
|
26
|
+
surface?: Record<string, string | number>;
|
|
27
|
+
/** A short status shown in the demo header, e.g. `"Live"` or `"Needs network"`. */
|
|
28
|
+
status?: string;
|
|
29
|
+
/** Width of the variant switch (px number or CSS length); its options share it equally. */
|
|
30
|
+
variantsWidth?: number | string;
|
|
31
|
+
}
|
|
32
|
+
export interface DemoFile {
|
|
33
|
+
/** Path relative to the demo folder (`index.tsx`, `parts/Card.tsx`). */
|
|
34
|
+
path: string;
|
|
35
|
+
content: string;
|
|
36
|
+
/** Highlighting language; defaults to the file extension. */
|
|
37
|
+
language?: string;
|
|
38
|
+
}
|
|
39
|
+
/** Props the loaded demo component receives. */
|
|
40
|
+
export interface DemoComponentProps {
|
|
41
|
+
variant?: string;
|
|
42
|
+
}
|
|
43
|
+
export type DemoComponent = ComponentType<DemoComponentProps>;
|
|
44
|
+
/**
|
|
45
|
+
* How a host turns `{% demo src="<page>/<example>" %}` into something renderable.
|
|
46
|
+
* `createGlobDemoResolver` builds one from Vite `import.meta.glob` maps.
|
|
47
|
+
*/
|
|
48
|
+
export interface DemoResolver {
|
|
49
|
+
/** Every known demo id (optional; used by tooling and llms.txt generators). */
|
|
50
|
+
list?(): string[];
|
|
51
|
+
meta(src: string): Promise<DemoMeta | undefined>;
|
|
52
|
+
/** The demo's source files, entry first. These are exactly what the Code view shows. */
|
|
53
|
+
files(src: string): Promise<DemoFile[]>;
|
|
54
|
+
/** The component to render in-page. */
|
|
55
|
+
load(src: string): Promise<DemoComponent>;
|
|
56
|
+
/**
|
|
57
|
+
* Optional deep link that renders the demo alone (e.g. `?demo=<src>`); the host
|
|
58
|
+
* routes it to `<DemoFullscreen>`. When present, the viewer shows an
|
|
59
|
+
* "Open in new tab" link next to its in-page fullscreen button.
|
|
60
|
+
*/
|
|
61
|
+
href?(src: string, options?: {
|
|
62
|
+
variant?: string;
|
|
63
|
+
}): string | undefined;
|
|
64
|
+
}
|
|
65
|
+
/** What an inline-demo runtime gets: the block's own files, ready to run. */
|
|
66
|
+
export interface InlineDemoRuntimeProps {
|
|
67
|
+
/** The block's `src` (may be empty); useful as a cache key or label. */
|
|
68
|
+
src: string;
|
|
69
|
+
title: string;
|
|
70
|
+
/** The inline files, entry first, paths relative to the demo folder. */
|
|
71
|
+
files: DemoFile[];
|
|
72
|
+
/** Path of the entry file (its default export is the component). */
|
|
73
|
+
entry: string;
|
|
74
|
+
/** The selected variant, passed to the component as its `variant` prop. */
|
|
75
|
+
variant?: string;
|
|
76
|
+
/** Extra npm dependencies (`{ "@brett_lamy/ui": "^1.2.0" }`) the files may import. */
|
|
77
|
+
dependencies?: Record<string, string>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Renders the Preview of a `{% demo %}` block that carries its files inline and has
|
|
81
|
+
* no resolver behind it. `@brett_lamy/docstream/playground` provides an almost-node
|
|
82
|
+
* implementation (`createAlmostNodeDemoRuntime`), which that entry's `PlaygroundStreamdown`
|
|
83
|
+
* wires in by default. The package root never loads a runtime on its own.
|
|
84
|
+
*/
|
|
85
|
+
export type InlineDemoRuntime = (props: InlineDemoRuntimeProps) => ReactNode;
|
|
86
|
+
export interface DemoRuntimeOptions {
|
|
87
|
+
runtime?: InlineDemoRuntime;
|
|
88
|
+
/** Extra npm dependencies handed to the runtime for every inline demo. */
|
|
89
|
+
dependencies?: Record<string, string>;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/demo/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEnE,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAA;AAE3C,kGAAkG;AAClG,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;IACxB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,uFAAuF;IACvF,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;IACzC,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2FAA2F;IAC3F,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAChC;AAED,MAAM,WAAW,QAAQ;IACvB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAA;AAE7D;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,IAAI,CAAC,IAAI,MAAM,EAAE,CAAA;IACjB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;IAChD,wFAAwF;IACxF,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IACvC,uCAAuC;IACvC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACzC;;;;OAIG;IACH,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,SAAS,CAAA;CACvE;AAED,6EAA6E;AAC7E,MAAM,WAAW,sBAAsB;IACrC,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,wEAAwE;IACxE,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAA;IACb,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,sBAAsB,KAAK,SAAS,CAAA;AAE5E,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/demo/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface CollapsibleCodeProps {
|
|
2
|
+
code: string;
|
|
3
|
+
language: string | null;
|
|
4
|
+
/** Lines visible while collapsed. Defaults to 3. */
|
|
5
|
+
collapsedLines?: number;
|
|
6
|
+
/** Lines visible when expanded before the panel scrolls. Defaults to 30. */
|
|
7
|
+
expandedLines?: number;
|
|
8
|
+
/** Show a copy button in the panel corner. Defaults to true. */
|
|
9
|
+
copy?: boolean;
|
|
10
|
+
copyLabel?: string;
|
|
11
|
+
}
|
|
12
|
+
/** The line-numbered code panel under a demo: a few lines, then "View Code" to expand. */
|
|
13
|
+
export declare function CollapsibleCode({ code, language, collapsedLines, expandedLines, copy, copyLabel }: CollapsibleCodeProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=CollapsibleCode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollapsibleCode.d.ts","sourceRoot":"","sources":["../../src/docs/CollapsibleCode.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gEAAgE;IAChE,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,IAAW,EAAE,SAAS,EAAE,EAAE,oBAAoB,+BAgC9H"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useState } from "react";
|
|
3
|
+
import { HighlightedCode } from "./HighlightedCode.js";
|
|
4
|
+
import { CopyButton } from "./copy.js";
|
|
5
|
+
function positiveLineCount(value, fallback) {
|
|
6
|
+
return value !== undefined && Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
|
|
7
|
+
}
|
|
8
|
+
/** The line-numbered code panel under a demo: a few lines, then "View Code" to expand. */
|
|
9
|
+
export function CollapsibleCode({ code, language, collapsedLines, expandedLines, copy = true, copyLabel }) {
|
|
10
|
+
const [expanded, setExpanded] = useState(false);
|
|
11
|
+
const panelId = useId();
|
|
12
|
+
const collapsed = positiveLineCount(collapsedLines, 3);
|
|
13
|
+
const expandedCount = Math.max(collapsed, positiveLineCount(expandedLines, 30));
|
|
14
|
+
const total = code.split("\n").length;
|
|
15
|
+
const needsToggle = total > collapsed;
|
|
16
|
+
const isOpen = expanded || !needsToggle;
|
|
17
|
+
return (_jsxs("div", { className: "docs-react-demo-code", "data-expanded": isOpen || undefined, children: [_jsx("pre", { id: panelId, className: isOpen ? "docs-react-demo-code-body docs-react-demo-code-body-expanded" : "docs-react-demo-code-body", "data-toggle": needsToggle || undefined, style: { "--docs-react-demo-code-lines": isOpen ? expandedCount : collapsed }, children: _jsx(HighlightedCode, { code: code, language: language, lineNumbers: true }) }), copy ? _jsx(CopyButton, { text: code, label: copyLabel, className: "docs-react-demo-code-copy" }) : null, needsToggle ? (_jsx("button", { type: "button", className: "docs-react-demo-code-toggle", "aria-controls": panelId, "aria-expanded": expanded, onClick: () => setExpanded((value) => !value), children: expanded ? "Hide Code" : "View Code" })) : null] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=CollapsibleCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollapsibleCode.js","sourceRoot":"","sources":["../../src/docs/CollapsibleCode.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAcnC,SAAS,iBAAiB,CAAC,KAAyB,EAAE,QAAgB;IACpE,OAAO,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AAClG,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAwB;IAC7H,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/C,MAAM,OAAO,GAAG,KAAK,EAAE,CAAA;IACvB,MAAM,SAAS,GAAG,iBAAiB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;IACtD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,iBAAiB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAA;IAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;IACrC,MAAM,WAAW,GAAG,KAAK,GAAG,SAAS,CAAA;IACrC,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,WAAW,CAAA;IACvC,OAAO,CACL,eAAK,SAAS,EAAC,sBAAsB,mBAAgB,MAAM,IAAI,SAAS,aACtE,cACE,EAAE,EAAE,OAAO,EACX,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,8DAA8D,CAAC,CAAC,CAAC,2BAA2B,iBACnG,WAAW,IAAI,SAAS,EACrC,KAAK,EAAE,EAAE,8BAA8B,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAmB,YAE9F,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,SAAG,GAC3D,EACL,IAAI,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAC,2BAA2B,GAAG,CAAC,CAAC,CAAC,IAAI,EAChG,WAAW,CAAC,CAAC,CAAC,CACb,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6BAA6B,mBACxB,OAAO,mBACP,QAAQ,EACvB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,YAE5C,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,GAC9B,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { DocumentNode, SourceRefNode } from "../gitbook/ast.js";
|
|
3
|
+
import type { DemoResolver, InlineDemoRuntime } from "../demo/types.js";
|
|
4
|
+
import { type DocPageActionsOptions } from "./PageActions.js";
|
|
5
|
+
export interface LivePreviewProps {
|
|
6
|
+
files: Record<string, string>;
|
|
7
|
+
entry: string;
|
|
8
|
+
title: string;
|
|
9
|
+
collapsedCodeLines?: number;
|
|
10
|
+
expandedCodeLines?: number;
|
|
11
|
+
}
|
|
12
|
+
export type LivePreviewRenderer = (props: LivePreviewProps) => ReactNode;
|
|
13
|
+
export type SourceReferenceRenderer = (reference: SourceRefNode) => ReactNode;
|
|
14
|
+
interface Renderers {
|
|
15
|
+
liveRenderer?: LivePreviewRenderer;
|
|
16
|
+
sourceRenderer?: SourceReferenceRenderer;
|
|
17
|
+
}
|
|
18
|
+
export interface DocRenderOptions {
|
|
19
|
+
/** Resolves `{% demo %}` blocks. Provided through context, so nested renderers inherit it. */
|
|
20
|
+
demoResolver?: DemoResolver;
|
|
21
|
+
/**
|
|
22
|
+
* Runs the Preview of `{% demo %}` blocks that carry their files inline and have no
|
|
23
|
+
* resolver behind them. Nothing is supplied by default: pass `createAlmostNodeDemoRuntime()`
|
|
24
|
+
* from `@brett_lamy/docstream/playground` (or use its `PlaygroundStreamdown`) to run them.
|
|
25
|
+
* Without one, such demos show their code with a short note.
|
|
26
|
+
*/
|
|
27
|
+
demoRuntime?: InlineDemoRuntime;
|
|
28
|
+
/** Extra npm dependencies inline demos may import (`{ "@brett_lamy/ui": "^1.2.0" }`). */
|
|
29
|
+
demoDependencies?: Record<string, string>;
|
|
30
|
+
/**
|
|
31
|
+
* Render "Copy page ▾" (Copy / View as Markdown, Open in ChatGPT / Claude) above the content.
|
|
32
|
+
* `true` uses the defaults; an object passes options to `DocPageActions`.
|
|
33
|
+
*/
|
|
34
|
+
pageActions?: boolean | DocPageActionsOptions;
|
|
35
|
+
}
|
|
36
|
+
export declare function PageActionsBar({ markdown, options }: {
|
|
37
|
+
markdown: string | (() => string);
|
|
38
|
+
options: boolean | DocPageActionsOptions | undefined;
|
|
39
|
+
}): import("react").JSX.Element | null;
|
|
40
|
+
export declare function MarkdownContent({ markdown, liveRenderer, sourceRenderer, demoResolver, demoRuntime, demoDependencies, pageActions, className, }: {
|
|
41
|
+
markdown: string;
|
|
42
|
+
className?: string;
|
|
43
|
+
} & Renderers & DocRenderOptions): string | number | boolean | Iterable<ReactNode> | import("react").JSX.Element | null | undefined;
|
|
44
|
+
export declare function DocsRenderer({ doc, liveRenderer, sourceRenderer, demoResolver, demoRuntime, demoDependencies, pageActions, markdown, }: {
|
|
45
|
+
doc: DocumentNode; /** Source for page actions; defaults to `serializeMarkdown(doc)`. */
|
|
46
|
+
markdown?: string;
|
|
47
|
+
} & Renderers & DocRenderOptions): string | number | boolean | Iterable<ReactNode> | import("react").JSX.Element | null | undefined;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=DocsRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocsRenderer.d.ts","sourceRoot":"","sources":["../../src/docs/DocsRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAYvF,OAAO,KAAK,EAAqC,YAAY,EAA0B,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAQ5H,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAGpE,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAuC1E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,SAAS,CAAA;AAExE,MAAM,MAAM,uBAAuB,GAAG,CAAC,SAAS,EAAE,aAAa,KAAK,SAAS,CAAA;AAiE7E,UAAU,SAAS;IACjB,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAClC,cAAc,CAAC,EAAE,uBAAuB,CAAA;CACzC;AA0bD,MAAM,WAAW,gBAAgB;IAC/B,8FAA8F;IAC9F,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAA;CAC9C;AAyBD,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,GAAG,qBAAqB,GAAG,SAAS,CAAA;CAAE,sCAOhJ;AAID,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,SAAS,GACV,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAAG,gBAAgB,oGAUzE;AAED,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,QAAQ,GACT,EAAE;IAAE,GAAG,EAAE,YAAY,CAAC,CAAC,qEAAqE;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAAG,gBAAgB,oGAS/I"}
|