@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.
Files changed (207) hide show
  1. package/README.md +25 -5
  2. package/dist/assets.d.ts +3 -0
  3. package/dist/assets.d.ts.map +1 -0
  4. package/dist/assets.js +20 -0
  5. package/dist/assets.js.map +1 -0
  6. package/dist/demo/DemoViewer.d.ts +64 -0
  7. package/dist/demo/DemoViewer.d.ts.map +1 -0
  8. package/dist/demo/DemoViewer.js +426 -0
  9. package/dist/demo/DemoViewer.js.map +1 -0
  10. package/dist/demo/context.d.ts +14 -0
  11. package/dist/demo/context.d.ts.map +1 -0
  12. package/dist/demo/context.js +25 -0
  13. package/dist/demo/context.js.map +1 -0
  14. package/dist/demo/glob.d.ts +60 -0
  15. package/dist/demo/glob.d.ts.map +1 -0
  16. package/dist/demo/glob.js +158 -0
  17. package/dist/demo/glob.js.map +1 -0
  18. package/dist/demo/index.d.ts +10 -0
  19. package/dist/demo/index.d.ts.map +1 -0
  20. package/dist/demo/index.js +6 -0
  21. package/dist/demo/index.js.map +1 -0
  22. package/dist/demo/markdown.d.ts +60 -0
  23. package/dist/demo/markdown.d.ts.map +1 -0
  24. package/dist/demo/markdown.js +181 -0
  25. package/dist/demo/markdown.js.map +1 -0
  26. package/dist/demo/surface.d.ts +11 -0
  27. package/dist/demo/surface.d.ts.map +1 -0
  28. package/dist/demo/surface.js +69 -0
  29. package/dist/demo/surface.js.map +1 -0
  30. package/dist/demo/types.d.ts +91 -0
  31. package/dist/demo/types.d.ts.map +1 -0
  32. package/dist/demo/types.js +2 -0
  33. package/dist/demo/types.js.map +1 -0
  34. package/dist/docs/CollapsibleCode.d.ts +14 -0
  35. package/dist/docs/CollapsibleCode.d.ts.map +1 -0
  36. package/dist/docs/CollapsibleCode.js +19 -0
  37. package/dist/docs/CollapsibleCode.js.map +1 -0
  38. package/dist/docs/DocsRenderer.d.ts +49 -0
  39. package/dist/docs/DocsRenderer.d.ts.map +1 -0
  40. package/dist/docs/DocsRenderer.js +277 -0
  41. package/dist/docs/DocsRenderer.js.map +1 -0
  42. package/dist/docs/HighlightedCode.d.ts +6 -0
  43. package/dist/docs/HighlightedCode.d.ts.map +1 -0
  44. package/dist/docs/HighlightedCode.js +40 -0
  45. package/dist/docs/HighlightedCode.js.map +1 -0
  46. package/dist/docs/Mermaid.d.ts +7 -0
  47. package/dist/docs/Mermaid.d.ts.map +1 -0
  48. package/dist/docs/Mermaid.js +39 -0
  49. package/dist/docs/Mermaid.js.map +1 -0
  50. package/dist/docs/PageActions.d.ts +33 -0
  51. package/dist/docs/PageActions.d.ts.map +1 -0
  52. package/dist/docs/PageActions.js +115 -0
  53. package/dist/docs/PageActions.js.map +1 -0
  54. package/dist/docs/controls.d.ts +29 -0
  55. package/dist/docs/controls.d.ts.map +1 -0
  56. package/dist/docs/controls.js +46 -0
  57. package/dist/docs/controls.js.map +1 -0
  58. package/dist/docs/copy.d.ts +24 -0
  59. package/dist/docs/copy.d.ts.map +1 -0
  60. package/dist/docs/copy.js +62 -0
  61. package/dist/docs/copy.js.map +1 -0
  62. package/dist/docs/math.d.ts +3 -0
  63. package/dist/docs/math.d.ts.map +1 -0
  64. package/dist/docs/math.js +12 -0
  65. package/dist/docs/math.js.map +1 -0
  66. package/dist/docs/reference.d.ts +27 -0
  67. package/dist/docs/reference.d.ts.map +1 -0
  68. package/dist/docs/reference.js +73 -0
  69. package/dist/docs/reference.js.map +1 -0
  70. package/dist/docs/tabs-sync.d.ts +5 -0
  71. package/dist/docs/tabs-sync.d.ts.map +1 -0
  72. package/dist/docs/tabs-sync.js +58 -0
  73. package/dist/docs/tabs-sync.js.map +1 -0
  74. package/dist/gitbook/ast.d.ts +506 -0
  75. package/dist/gitbook/ast.d.ts.map +1 -0
  76. package/dist/gitbook/ast.js +8 -0
  77. package/dist/gitbook/ast.js.map +1 -0
  78. package/dist/gitbook/attrs.d.ts +14 -0
  79. package/dist/gitbook/attrs.d.ts.map +1 -0
  80. package/dist/gitbook/attrs.js +36 -0
  81. package/dist/gitbook/attrs.js.map +1 -0
  82. package/dist/gitbook/flatten.d.ts +14 -0
  83. package/dist/gitbook/flatten.d.ts.map +1 -0
  84. package/dist/gitbook/flatten.js +45 -0
  85. package/dist/gitbook/flatten.js.map +1 -0
  86. package/dist/gitbook/index.d.ts +10 -0
  87. package/dist/gitbook/index.d.ts.map +1 -0
  88. package/dist/gitbook/index.js +8 -0
  89. package/dist/gitbook/index.js.map +1 -0
  90. package/dist/gitbook/inline.d.ts +28 -0
  91. package/dist/gitbook/inline.d.ts.map +1 -0
  92. package/dist/gitbook/inline.js +956 -0
  93. package/dist/gitbook/inline.js.map +1 -0
  94. package/dist/gitbook/outline.d.ts +16 -0
  95. package/dist/gitbook/outline.d.ts.map +1 -0
  96. package/dist/gitbook/outline.js +44 -0
  97. package/dist/gitbook/outline.js.map +1 -0
  98. package/dist/gitbook/package-managers.d.ts +12 -0
  99. package/dist/gitbook/package-managers.d.ts.map +1 -0
  100. package/dist/gitbook/package-managers.js +93 -0
  101. package/dist/gitbook/package-managers.js.map +1 -0
  102. package/dist/gitbook/parse.d.ts +44 -0
  103. package/dist/gitbook/parse.d.ts.map +1 -0
  104. package/dist/gitbook/parse.js +1113 -0
  105. package/dist/gitbook/parse.js.map +1 -0
  106. package/dist/gitbook/serialize.d.ts +23 -0
  107. package/dist/gitbook/serialize.d.ts.map +1 -0
  108. package/dist/gitbook/serialize.js +498 -0
  109. package/dist/gitbook/serialize.js.map +1 -0
  110. package/dist/index.d.ts +34 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +24 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/openapi/OpenApiOperation.d.ts +6 -0
  115. package/dist/openapi/OpenApiOperation.d.ts.map +1 -0
  116. package/dist/openapi/OpenApiOperation.js +112 -0
  117. package/dist/openapi/OpenApiOperation.js.map +1 -0
  118. package/dist/playground/InlineDemoPreview.d.ts +24 -0
  119. package/dist/playground/InlineDemoPreview.d.ts.map +1 -0
  120. package/dist/playground/InlineDemoPreview.js +48 -0
  121. package/dist/playground/InlineDemoPreview.js.map +1 -0
  122. package/dist/playground/PlaygroundStreamdown.d.ts +16 -0
  123. package/dist/playground/PlaygroundStreamdown.d.ts.map +1 -0
  124. package/dist/playground/PlaygroundStreamdown.js +22 -0
  125. package/dist/playground/PlaygroundStreamdown.js.map +1 -0
  126. package/dist/playground/ReactCodePreview.d.ts +64 -0
  127. package/dist/playground/ReactCodePreview.d.ts.map +1 -0
  128. package/dist/playground/ReactCodePreview.js +108 -0
  129. package/dist/playground/ReactCodePreview.js.map +1 -0
  130. package/dist/playground/filesystem.d.ts +27 -0
  131. package/dist/playground/filesystem.d.ts.map +1 -0
  132. package/dist/playground/filesystem.js +65 -0
  133. package/dist/playground/filesystem.js.map +1 -0
  134. package/dist/playground/index.d.ts +9 -0
  135. package/dist/playground/index.d.ts.map +1 -0
  136. package/dist/playground/index.js +7 -0
  137. package/dist/playground/index.js.map +1 -0
  138. package/dist/playground/project.d.ts +57 -0
  139. package/dist/playground/project.d.ts.map +1 -0
  140. package/dist/playground/project.js +137 -0
  141. package/dist/playground/project.js.map +1 -0
  142. package/dist/replay/NativeReplay.d.ts +9 -0
  143. package/dist/replay/NativeReplay.d.ts.map +1 -0
  144. package/dist/replay/NativeReplay.js +173 -0
  145. package/dist/replay/NativeReplay.js.map +1 -0
  146. package/dist/replay/ReplayPreview.d.ts +33 -0
  147. package/dist/replay/ReplayPreview.d.ts.map +1 -0
  148. package/dist/replay/ReplayPreview.js +91 -0
  149. package/dist/replay/ReplayPreview.js.map +1 -0
  150. package/dist/replay/index.d.ts +5 -0
  151. package/dist/replay/index.d.ts.map +1 -0
  152. package/dist/replay/index.js +4 -0
  153. package/dist/replay/index.js.map +1 -0
  154. package/dist/replay/sanitize.d.ts +4 -0
  155. package/dist/replay/sanitize.d.ts.map +1 -0
  156. package/dist/replay/sanitize.js +86 -0
  157. package/dist/replay/sanitize.js.map +1 -0
  158. package/dist/replay/url.d.ts +8 -0
  159. package/dist/replay/url.d.ts.map +1 -0
  160. package/dist/replay/url.js +41 -0
  161. package/dist/replay/url.js.map +1 -0
  162. package/dist/source/SourcePreview.d.ts +13 -0
  163. package/dist/source/SourcePreview.d.ts.map +1 -0
  164. package/dist/source/SourcePreview.js +47 -0
  165. package/dist/source/SourcePreview.js.map +1 -0
  166. package/dist/source/client.d.ts +7 -0
  167. package/dist/source/client.d.ts.map +1 -0
  168. package/dist/source/client.js +52 -0
  169. package/dist/source/client.js.map +1 -0
  170. package/dist/source/index.d.ts +6 -0
  171. package/dist/source/index.d.ts.map +1 -0
  172. package/dist/source/index.js +3 -0
  173. package/dist/source/index.js.map +1 -0
  174. package/dist/source/types.d.ts +33 -0
  175. package/dist/source/types.d.ts.map +1 -0
  176. package/dist/source/types.js +2 -0
  177. package/dist/source/types.js.map +1 -0
  178. package/dist/streamdown.d.ts +19 -0
  179. package/dist/streamdown.d.ts.map +1 -0
  180. package/dist/streamdown.js +15 -0
  181. package/dist/streamdown.js.map +1 -0
  182. package/dist/styles.css +2441 -0
  183. package/dist/video/VideoEmbed.d.ts +17 -0
  184. package/dist/video/VideoEmbed.d.ts.map +1 -0
  185. package/dist/video/VideoEmbed.js +12 -0
  186. package/dist/video/VideoEmbed.js.map +1 -0
  187. package/dist/video/index.d.ts +3 -0
  188. package/dist/video/index.d.ts.map +1 -0
  189. package/dist/video/index.js +2 -0
  190. package/dist/video/index.js.map +1 -0
  191. package/dist/vite/index.d.ts +21 -0
  192. package/dist/vite/index.d.ts.map +1 -0
  193. package/dist/vite/index.js +137 -0
  194. package/dist/vite/index.js.map +1 -0
  195. package/dist/viz/VizEmbed.d.ts +18 -0
  196. package/dist/viz/VizEmbed.d.ts.map +1 -0
  197. package/dist/viz/VizEmbed.js +12 -0
  198. package/dist/viz/VizEmbed.js.map +1 -0
  199. package/dist/viz/index.d.ts +4 -0
  200. package/dist/viz/index.d.ts.map +1 -0
  201. package/dist/viz/index.js +3 -0
  202. package/dist/viz/index.js.map +1 -0
  203. package/package.json +62 -32
  204. package/src/docs/Mermaid.tsx +5 -3
  205. package/src/replay/ReplayPreview.tsx +0 -1
  206. package/src/styles.css +91 -0
  207. package/src/replay/styles.css +0 -87
@@ -0,0 +1,277 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useContext, useEffect, useId, useMemo, useState } from "react";
3
+ import { motion, useReducedMotion } from "framer-motion";
4
+ import { AlertTriangle, CheckCircle2, ChevronRight, File, Info, Terminal, XCircle, } from "lucide-react";
5
+ import { PACKAGE_MANAGERS, packageManagerCommands } from "../gitbook/package-managers.js";
6
+ import { slugify } from "../gitbook/outline.js";
7
+ import { resolveAsset } from "../assets.js";
8
+ import { parseMarkdown } from "../gitbook/parse.js";
9
+ import { serializeMarkdown } from "../gitbook/serialize.js";
10
+ import { DocstreamDemoContext, DocstreamDemoRuntimeContext } from "../demo/context.js";
11
+ import { DemoBlock } from "../demo/DemoViewer.js";
12
+ import { CopyButton } from "./copy.js";
13
+ import { PillTabs, rovingKeyDown } from "./controls.js";
14
+ import { DocPageActions } from "./PageActions.js";
15
+ import { useSyncedTab } from "./tabs-sync.js";
16
+ import { ReplayPreview } from "../replay/ReplayPreview.js";
17
+ import { isReplayQaUrl } from "../replay/url.js";
18
+ import { VideoEmbed } from "../video/index.js";
19
+ import { OpenApiOperation } from "../openapi/OpenApiOperation.js";
20
+ import { Mermaid } from "./Mermaid.js";
21
+ import { HighlightedCode } from "./HighlightedCode.js";
22
+ import { CitationSources, InlineReference } from "./reference.js";
23
+ let mathRenderer = null;
24
+ let mathLoad = null;
25
+ function loadMathRenderer() {
26
+ mathLoad ??= import("./math.js").then((m) => (mathRenderer = m.renderMathToHtml));
27
+ return mathLoad;
28
+ }
29
+ // KaTeX loads on first use; until then the TeX source shows in place.
30
+ function MathBlock({ formula }) {
31
+ const [render, setRender] = useState(() => mathRenderer);
32
+ useEffect(() => {
33
+ if (render)
34
+ return;
35
+ let live = true;
36
+ loadMathRenderer().then((fn) => live && setRender(() => fn), () => { });
37
+ return () => {
38
+ live = false;
39
+ };
40
+ }, [render]);
41
+ if (!render) {
42
+ return (_jsx("div", { className: "docs-math", "data-pending": "", children: _jsx("code", { children: formula }) }));
43
+ }
44
+ return _jsx("div", { className: "docs-math", dangerouslySetInnerHTML: { __html: render(formula) } });
45
+ }
46
+ function InlineText({ nodes }) {
47
+ return (_jsx(_Fragment, { children: nodes.map((n, i) => {
48
+ const emphasized = !!(n.bold || n.italic || n.strike);
49
+ let el;
50
+ if (n.type === "reference") {
51
+ if (!emphasized && !n.link)
52
+ return _jsx(InlineReference, { node: n }, i);
53
+ el = _jsx(InlineReference, { node: n });
54
+ }
55
+ else if (n.type === "image") {
56
+ const img = (_jsx("img", { src: resolveAsset(n.src), alt: n.alt ?? "", className: "docs-inline-img", style: { width: n.width, height: n.height } }));
57
+ const linked = n.link ? (_jsx("a", { href: n.link, target: "_blank", rel: "noreferrer", className: "docs-inline-img-link", children: img }, i)) : null;
58
+ if (!emphasized)
59
+ return linked ?? _jsx("span", { children: img }, i);
60
+ // The image's link is its own anchor; emphasis wraps it.
61
+ el = linked ?? img;
62
+ if (n.bold)
63
+ el = _jsx("strong", { children: el });
64
+ if (n.italic)
65
+ el = _jsx("em", { children: el });
66
+ if (n.strike)
67
+ el = _jsx("s", { children: el });
68
+ return _jsx("span", { children: el }, i);
69
+ }
70
+ else
71
+ el = n.text;
72
+ if (n.type === "text" && n.code)
73
+ el = _jsx("code", { children: el });
74
+ if (n.bold)
75
+ el = _jsx("strong", { children: el });
76
+ if (n.italic)
77
+ el = _jsx("em", { children: el });
78
+ if (n.strike)
79
+ el = _jsx("s", { children: el });
80
+ if (n.link)
81
+ el = (_jsx("a", { href: n.link, target: "_blank", rel: "noreferrer", children: el }));
82
+ return _jsx("span", { children: el }, i);
83
+ }) }));
84
+ }
85
+ const HINT_ICONS = {
86
+ info: Info,
87
+ success: CheckCircle2,
88
+ warning: AlertTriangle,
89
+ danger: XCircle,
90
+ };
91
+ function embedSrc(url) {
92
+ const yt = url.match(/(?:youtube\.com\/watch\?v=|youtu\.be\/)([\w-]+)/);
93
+ return yt ? `https://www.youtube.com/embed/${yt[1]}` : null;
94
+ }
95
+ function isDirectVideo(url) {
96
+ return /\.(?:mp4|webm|ogg)(?:[?#]|$)/i.test(url);
97
+ }
98
+ const SHELL_LANGUAGES = new Set(["sh", "bash", "shell", "zsh", "console", "shellsession", "powershell", "ps1", "bat", "cmd"]);
99
+ /** A tab set whose every tab is exactly one code block renders as one code block with tabs in its header. */
100
+ function codeOnlyTabs(block) {
101
+ if (!block.tabs.length)
102
+ return null;
103
+ const codes = [];
104
+ for (const tab of block.tabs) {
105
+ const only = tab.children.length === 1 ? tab.children[0] : null;
106
+ if (!only || only.type !== "code" || only.live || only.language === "mermaid")
107
+ return null;
108
+ codes.push(only);
109
+ }
110
+ return codes;
111
+ }
112
+ /** The underline tab strip shared by tab sets and command boxes. */
113
+ function TabStrip({ titles, active, onSelect, label, baseId }) {
114
+ const reduced = useReducedMotion();
115
+ const ids = titles.map((_, i) => String(i));
116
+ return (_jsx("div", { className: "docs-tabs-header", role: "tablist", "aria-label": label, onKeyDown: (event) => rovingKeyDown(event, ids, String(active), (id) => onSelect(Number(id))), children: titles.map((title, i) => (_jsxs("button", { id: `${baseId}-tab-${i}`, type: "button", role: "tab", "data-roving": "", "aria-selected": i === active, "aria-controls": `${baseId}-panel`, tabIndex: i === active ? 0 : -1, className: i === active ? "docs-tab-active" : "", onClick: () => onSelect(i), children: [i === active ? (_jsx(motion.span, { className: "docs-tab-indicator", layoutId: `docs-tab-indicator-${baseId}`, transition: reduced ? { duration: 0 } : { type: "spring", bounce: 0.2, duration: 0.6 } })) : null, _jsx("span", { className: "docs-tab-label", children: title })] }, i))) }));
117
+ }
118
+ /** `{% command %}`: one npm command, shown for the reader's package manager (synced page-wide). */
119
+ function CommandBox({ block }) {
120
+ const [synced, setSynced] = useSyncedTab(block.sync ?? "pm");
121
+ const [local, setLocal] = useState(PACKAGE_MANAGERS[0]);
122
+ const active = synced && PACKAGE_MANAGERS.includes(synced) ? synced : local;
123
+ const commands = useMemo(() => packageManagerCommands(block.command, block.overrides), [block.command, block.overrides]);
124
+ const baseId = useId();
125
+ const index = PACKAGE_MANAGERS.indexOf(active);
126
+ const select = (i) => {
127
+ const pm = PACKAGE_MANAGERS[i];
128
+ setLocal(pm);
129
+ setSynced(pm);
130
+ };
131
+ return (_jsxs("div", { className: "docs-tabs docs-tabs-code docs-command", "data-sync": block.sync ?? "pm", "data-pm": active, children: [_jsxs("div", { className: "docs-tabs-code-head", children: [_jsx("span", { className: "docs-tabs-code-term", "aria-hidden": "true", children: _jsx(Terminal, { width: 12, height: 12, strokeWidth: 2.4 }) }), _jsx(TabStrip, { titles: [...PACKAGE_MANAGERS], active: index, onSelect: select, label: "Package manager", baseId: baseId }), _jsx("span", { className: "docs-tabs-code-title" }), _jsx(CopyButton, { text: commands[active], label: `Copy ${active} command` })] }), _jsx("div", { className: "docs-tabs-code-body", role: "tabpanel", id: `${baseId}-panel`, "aria-labelledby": `${baseId}-tab-${index}`, children: _jsx("pre", { children: _jsx(HighlightedCode, { code: commands[active], language: "sh", lineNumbers: false }) }) })] }));
132
+ }
133
+ function Tabs({ block, liveRenderer, sourceRenderer }) {
134
+ const [local, setLocal] = useState(0);
135
+ const [synced, setSynced] = useSyncedTab(block.sync);
136
+ const syncedIndex = synced === null ? -1 : block.tabs.findIndex((t) => t.title === synced);
137
+ const active = Math.min(syncedIndex >= 0 ? syncedIndex : local, Math.max(0, block.tabs.length - 1));
138
+ const baseId = useId();
139
+ const codes = useMemo(() => codeOnlyTabs(block), [block]);
140
+ const select = (index) => {
141
+ setLocal(index);
142
+ const title = block.tabs[index]?.title;
143
+ if (block.sync && title !== undefined)
144
+ setSynced(title);
145
+ };
146
+ const header = (_jsx(TabStrip, { titles: block.tabs.map((t) => t.title), active: active, onSelect: select, label: block.sync ? `${block.sync} options` : "Content tabs", baseId: baseId }));
147
+ if (block.title) {
148
+ const Heading = `h${block.level ?? 2}`;
149
+ const headingId = slugify(block.title);
150
+ return (_jsxs("section", { className: "docs-tabs-section", "data-sync": block.sync, "aria-labelledby": headingId, children: [_jsxs("div", { className: "docs-tabs-section-head", children: [_jsx(Heading, { id: headingId, className: "docs-tabs-section-title", children: block.title }), _jsx(PillTabs, { options: block.tabs.map((t, i) => ({ id: String(i), label: t.title })), value: String(active), onChange: (id) => select(Number(id)), label: `${block.title}: ${block.sync ? `${block.sync} options` : "options"}`, tabId: (id) => `${baseId}-tab-${id}`, panelId: () => `${baseId}-panel` })] }), _jsx("div", { className: "docs-tabs-section-body", role: "tabpanel", id: `${baseId}-panel`, "aria-labelledby": `${baseId}-tab-${active}`, children: _jsx(Blocks, { blocks: block.tabs[active]?.children ?? [], liveRenderer: liveRenderer, sourceRenderer: sourceRenderer }) })] }));
151
+ }
152
+ if (codes) {
153
+ const code = codes[active];
154
+ const shell = codes.every((c) => c.language && SHELL_LANGUAGES.has(c.language.toLowerCase()));
155
+ const numbered = code.lineNumbers && code.code.includes("\n") && !shell;
156
+ return (_jsxs("div", { className: "docs-tabs docs-tabs-code", "data-sync": block.sync, children: [_jsxs("div", { className: "docs-tabs-code-head", children: [shell ? (_jsx("span", { className: "docs-tabs-code-term", "aria-hidden": "true", children: _jsx(Terminal, { width: 12, height: 12, strokeWidth: 2.4 }) })) : null, header, _jsx("span", { className: "docs-tabs-code-title", children: code.title }), _jsx(CopyButton, { text: code.code, label: `Copy ${block.tabs[active]?.title ?? "code"}` })] }), _jsx("div", { className: "docs-tabs-code-body", role: "tabpanel", id: `${baseId}-panel`, "aria-labelledby": `${baseId}-tab-${active}`, children: _jsx("pre", { className: numbered ? "docs-code-numbered" : "", children: _jsx(HighlightedCode, { code: code.code, language: code.language, lineNumbers: numbered }) }) })] }));
157
+ }
158
+ return (_jsxs("div", { className: "docs-tabs", "data-sync": block.sync, children: [header, _jsx("div", { className: "docs-tabs-body", role: "tabpanel", id: `${baseId}-panel`, "aria-labelledby": `${baseId}-tab-${active}`, children: _jsx(Blocks, { blocks: block.tabs[active]?.children ?? [], liveRenderer: liveRenderer, sourceRenderer: sourceRenderer }) })] }));
159
+ }
160
+ function BlockView({ block, liveRenderer, sourceRenderer }) {
161
+ switch (block.type) {
162
+ case "paragraph":
163
+ return (_jsx("p", { children: _jsx(InlineText, { nodes: block.children }) }));
164
+ case "heading": {
165
+ const Tag = `h${block.level}`;
166
+ return (_jsx(Tag, { children: _jsx(InlineText, { nodes: block.children }) }));
167
+ }
168
+ case "code":
169
+ if (block.language === "mermaid") {
170
+ return (_jsx(Mermaid, { code: block.code, collapsedCodeLines: block.collapsedCodeLines, expandedCodeLines: block.expandedCodeLines }));
171
+ }
172
+ if (block.live && isReactLanguage(block.language) && liveRenderer) {
173
+ const entry = block.entry ?? "/src/main.jsx";
174
+ return liveRenderer({
175
+ files: { [entry]: block.code },
176
+ entry,
177
+ title: block.title ?? "Live React preview",
178
+ collapsedCodeLines: block.collapsedCodeLines,
179
+ expandedCodeLines: block.expandedCodeLines,
180
+ });
181
+ }
182
+ return (_jsxs("div", { className: "docs-code", "data-language": block.language ?? undefined, children: [block.title ? (_jsxs("div", { className: "docs-code-header", children: [_jsx("span", { children: block.title }), _jsx("span", { className: "docs-code-lang", children: block.language }), _jsx(CopyButton, { text: block.code, label: `Copy ${block.title}` })] })) : (_jsx(CopyButton, { text: block.code, className: "docs-code-copy-float" })), _jsx("pre", { className: block.lineNumbers ? "docs-code-numbered" : "", children: _jsx(HighlightedCode, { code: block.code, language: block.language, lineNumbers: block.lineNumbers }) })] }));
183
+ case "hint": {
184
+ const Icon = HINT_ICONS[block.style] ?? Info;
185
+ return (_jsxs("div", { className: `docs-hint docs-hint-${block.style}`, children: [_jsx(Icon, { className: "docs-hint-icon" }), _jsx("div", { children: _jsx(Blocks, { blocks: block.children, liveRenderer: liveRenderer, sourceRenderer: sourceRenderer }) })] }));
186
+ }
187
+ case "tabs":
188
+ return _jsx(Tabs, { block: block, liveRenderer: liveRenderer, sourceRenderer: sourceRenderer });
189
+ case "command":
190
+ return block.command ? _jsx(CommandBox, { block: block }) : null;
191
+ case "expandable":
192
+ return (_jsxs("details", { className: "docs-expandable", children: [_jsx("summary", { children: block.summary }), _jsx("div", { className: "docs-expandable-body", children: _jsx(Blocks, { blocks: block.children, liveRenderer: liveRenderer, sourceRenderer: sourceRenderer }) })] }));
193
+ case "stepper":
194
+ return (_jsx("div", { className: "docs-stepper", children: block.steps.map((s, i) => (_jsxs("div", { className: "docs-step", children: [_jsxs("div", { className: "docs-step-rail", children: [_jsx("div", { className: "docs-step-badge", children: i + 1 }), i < block.steps.length - 1 && _jsx("div", { className: "docs-step-line" })] }), _jsxs("div", { className: "docs-step-main", children: [s.title && _jsx("div", { className: "docs-step-title", children: s.title }), _jsx(Blocks, { blocks: s.children, liveRenderer: liveRenderer, sourceRenderer: sourceRenderer })] })] }, i))) }));
195
+ case "embed": {
196
+ if (isReplayQaUrl(block.url)) {
197
+ return _jsx(ReplayPreview, { source: block.url, title: "Replay preview" });
198
+ }
199
+ const src = embedSrc(block.url);
200
+ return src || isDirectVideo(block.url) ? (_jsx(VideoEmbed, { src: src ?? block.url, className: "docs-embed", title: block.title ?? block.url, ...(block.autoplay === undefined ? {} : { autoplay: block.autoplay }), ...(block.loop === undefined ? {} : { loop: block.loop }), ...(block.muted === undefined ? {} : { muted: block.muted }), ...(block.controls === undefined ? {} : { controls: block.controls }), ...(block.poster === undefined ? {} : { poster: resolveAsset(block.poster) }) })) : (_jsxs("a", { className: "docs-content-ref", href: block.url, target: "_blank", rel: "noreferrer", children: [_jsx(File, { className: "size-4" }), " ", block.url] }));
201
+ }
202
+ case "content-ref":
203
+ return (_jsxs("a", { className: "docs-content-ref", href: block.url, children: [_jsx(File, { className: "size-4" }), _jsx("span", { children: _jsx(InlineText, { nodes: block.children }) }), _jsx(ChevronRight, { className: "size-4 ml-auto" })] }));
204
+ case "source-ref":
205
+ return sourceRenderer ? (sourceRenderer(block)) : (_jsxs("div", { className: "docs-source-ref", "data-docstream-source-ref": "", children: [_jsx(File, { className: "size-4" }), _jsx("span", { children: block.title ?? `${block.path}#${block.exportName}` }), _jsxs("code", { children: [block.mount, ":", block.path] })] }));
206
+ case "demo":
207
+ return _jsx(DemoBlock, { node: block });
208
+ case "columns":
209
+ return (_jsx("div", { className: "docs-columns", children: block.columns.map((c, i) => (_jsx("div", { className: "docs-column", children: _jsx(Blocks, { blocks: c.children, liveRenderer: liveRenderer, sourceRenderer: sourceRenderer }) }, i))) }));
210
+ case "figure":
211
+ return (_jsxs("figure", { className: "docs-figure", children: [block.src && _jsx("img", { src: resolveAsset(block.src), alt: block.alt }), block.caption && _jsx("figcaption", { children: block.caption })] }));
212
+ case "list": {
213
+ const Tag = block.ordered ? "ol" : "ul";
214
+ return (_jsx(Tag, { className: block.task ? "docs-tasklist" : undefined, children: block.items.map((item, i) => (_jsxs("li", { children: [block.task && _jsx("input", { type: "checkbox", checked: !!item.checked, readOnly: true }), _jsx(Blocks, { blocks: item.children, inline: true, liveRenderer: liveRenderer, sourceRenderer: sourceRenderer })] }, i))) }));
215
+ }
216
+ case "blockquote":
217
+ return (_jsx("blockquote", { children: _jsx(Blocks, { blocks: block.children, liveRenderer: liveRenderer, sourceRenderer: sourceRenderer }) }));
218
+ case "divider":
219
+ return _jsx("hr", {});
220
+ case "table":
221
+ if (block.view === "cards") {
222
+ const cards = block.rows.length ? block.rows : [block.header];
223
+ return (_jsx("div", { className: "docs-cards", children: cards.map((row, i) => (_jsx("div", { className: "docs-card", children: row.map((cell, j) => (_jsx("div", { className: j === 0 ? "docs-card-title" : "docs-card-body", children: _jsx(InlineText, { nodes: cell }) }, j))) }, i))) }));
224
+ }
225
+ return (_jsxs("table", { className: "docs-table", children: [_jsx("thead", { children: _jsx("tr", { children: block.header.map((cell, i) => (_jsx("th", { children: _jsx(InlineText, { nodes: cell }) }, i))) }) }), _jsx("tbody", { children: block.rows.map((row, i) => (_jsx("tr", { children: row.map((cell, j) => (_jsx("td", { children: _jsx(InlineText, { nodes: cell }) }, j))) }, i))) })] }));
226
+ case "math":
227
+ return _jsx(MathBlock, { formula: block.formula });
228
+ case "updates":
229
+ return (_jsx("div", { className: "docs-updates", children: block.updates.map((u, i) => (_jsxs("div", { className: "docs-update", children: [_jsx("div", { className: "docs-update-date", children: u.date }), _jsx("div", { className: "docs-update-body", children: _jsx(Blocks, { blocks: u.children, liveRenderer: liveRenderer, sourceRenderer: sourceRenderer }) })] }, i))) }));
230
+ case "openapi-operation":
231
+ return (_jsx(OpenApiOperation, { specUrl: block.specUrl, path: block.path, method: block.method || "get" }));
232
+ // Reference definitions and verbatim-kept tags carry no content of their own.
233
+ case "definition":
234
+ case "raw":
235
+ return null;
236
+ }
237
+ }
238
+ function isReactLanguage(language) {
239
+ return language === "jsx" || language === "tsx" || language === "react";
240
+ }
241
+ function Blocks({ blocks, inline, liveRenderer, sourceRenderer }) {
242
+ return (_jsx("div", { "data-docstream-blocks": "", className: inline ? "docs-blocks-inline" : undefined, style: inline ? { display: "inline" } : undefined, children: blocks.map((b, i) => (_jsx(BlockView, { block: b, liveRenderer: liveRenderer, sourceRenderer: sourceRenderer }, i))) }));
243
+ }
244
+ function withDemoContext({ demoResolver, demoRuntime, demoDependencies }, children) {
245
+ let out = children;
246
+ if (demoRuntime || demoDependencies) {
247
+ out = _jsx(DemoRuntimeProvider, { runtime: demoRuntime, dependencies: demoDependencies, children: out });
248
+ }
249
+ return demoResolver ? _jsx(DocstreamDemoContext.Provider, { value: demoResolver, children: out }) : out;
250
+ }
251
+ /** Merges runtime options over the inherited ones, keeping a stable context value. */
252
+ function DemoRuntimeProvider({ runtime, dependencies, children }) {
253
+ const inherited = useContext(DocstreamDemoRuntimeContext);
254
+ const depsKey = dependencies ? JSON.stringify(dependencies) : "";
255
+ const value = useMemo(() => ({
256
+ runtime: runtime ?? inherited.runtime,
257
+ dependencies: dependencies || inherited.dependencies ? { ...inherited.dependencies, ...dependencies } : undefined,
258
+ }),
259
+ // eslint-disable-next-line react-hooks/exhaustive-deps
260
+ [runtime, inherited, depsKey]);
261
+ return _jsx(DocstreamDemoRuntimeContext.Provider, { value: value, children: children });
262
+ }
263
+ export function PageActionsBar({ markdown, options }) {
264
+ if (!options)
265
+ return null;
266
+ return (_jsx("div", { className: "docs-page-actions-bar", children: _jsx(DocPageActions, { markdown: markdown, ...(options === true ? {} : options) }) }));
267
+ }
268
+ // Renders a markdown string inline — used for embedded markdown like
269
+ // OpenAPI descriptions, which can themselves contain GitBook blocks.
270
+ export function MarkdownContent({ markdown, liveRenderer, sourceRenderer, demoResolver, demoRuntime, demoDependencies, pageActions, className, }) {
271
+ const doc = useMemo(() => parseMarkdown(markdown), [markdown]);
272
+ return withDemoContext({ demoResolver, demoRuntime, demoDependencies }, _jsxs("div", { "data-docstream": "", className: className, children: [_jsx(PageActionsBar, { markdown: markdown, options: pageActions }), _jsx(Blocks, { blocks: doc.children, liveRenderer: liveRenderer, sourceRenderer: sourceRenderer }), _jsx(CitationSources, { citations: doc.citations })] }));
273
+ }
274
+ export function DocsRenderer({ doc, liveRenderer, sourceRenderer, demoResolver, demoRuntime, demoDependencies, pageActions, markdown, }) {
275
+ return withDemoContext({ demoResolver, demoRuntime, demoDependencies }, _jsxs("article", { className: "docs-article", children: [_jsx(PageActionsBar, { markdown: markdown ?? (() => serializeMarkdown(doc)), options: pageActions }), _jsx(Blocks, { blocks: doc.children, liveRenderer: liveRenderer, sourceRenderer: sourceRenderer }), _jsx(CitationSources, { citations: doc.citations })] }));
276
+ }
277
+ //# sourceMappingURL=DocsRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocsRenderer.js","sourceRoot":"","sources":["../../src/docs/DocsRenderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function HighlightedCode({ code, language: _language, lineNumbers }: {
2
+ code: string;
3
+ language: string | null;
4
+ lineNumbers?: boolean;
5
+ }): import("react").JSX.Element;
6
+ //# sourceMappingURL=HighlightedCode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HighlightedCode.d.ts","sourceRoot":"","sources":["../../src/docs/HighlightedCode.tsx"],"names":[],"mappings":"AA0BA,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAmB,EAAE,EAAE;IAClF,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,+BAwBA"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from "react";
3
+ import { parse } from "gpu-lexer";
4
+ /* Token colors live in styles.css (`.docs-tok-*`) and follow the host's color-scheme, so code reads on
5
+ light and dark backgrounds alike. Hosts can retheme via the --docs-tok-* custom properties. */
6
+ function escapeHtml(value) {
7
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\"/g, "&quot;");
8
+ }
9
+ function spansToHtml(code, spans) {
10
+ let cursor = 0;
11
+ return spans.map((span) => {
12
+ const prefix = escapeHtml(code.slice(cursor, span.start));
13
+ const text = escapeHtml(code.slice(span.start, span.end));
14
+ cursor = span.end;
15
+ return `${prefix}${span.type === "plain" ? text : `<span class="docs-tok docs-tok-${span.type}">${text}</span>`}`;
16
+ }).join("") + escapeHtml(code.slice(cursor));
17
+ }
18
+ export function HighlightedCode({ code, language: _language, lineNumbers = false }) {
19
+ const lines = useMemo(() => code.split("\n"), [code]);
20
+ const [spans, setSpans] = useState(null);
21
+ useEffect(() => {
22
+ let cancelled = false;
23
+ setSpans(null);
24
+ parse(code).then((result) => { if (!cancelled)
25
+ setSpans(result); }).catch(() => { if (!cancelled)
26
+ setSpans([]); });
27
+ return () => { cancelled = true; };
28
+ }, [code]);
29
+ const html = useMemo(() => spans && spans.length ? spansToHtml(code, spans) : null, [code, spans]);
30
+ if (!lineNumbers)
31
+ return html === null ? _jsx("code", { children: code }) : _jsx("code", { dangerouslySetInnerHTML: { __html: html } });
32
+ return _jsx("code", { children: lines.map((line, index) => {
33
+ const start = lines.slice(0, index).reduce((total, value) => total + value.length + 1, 0);
34
+ const lineSpans = spans?.filter((span) => span.start >= start && span.end <= start + line.length)
35
+ .map((span) => ({ ...span, start: span.start - start, end: span.end - start }));
36
+ const lineHtml = lineSpans?.length ? spansToHtml(line, lineSpans) : null;
37
+ return _jsxs("span", { className: "docs-code-line", children: [_jsx("span", { className: "docs-code-lineno", children: index + 1 }), lineHtml === null ? _jsx("span", { children: line }) : _jsx("span", { dangerouslySetInnerHTML: { __html: lineHtml } })] }, index);
38
+ }) });
39
+ }
40
+ //# sourceMappingURL=HighlightedCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HighlightedCode.js","sourceRoot":"","sources":["../../src/docs/HighlightedCode.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAQjC;iGACiG;AAEjG,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AAC1G,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC9C,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACzD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACzD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAA;QACjB,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC,IAAI,CAAC,IAAI,KAAK,IAAI,SAAS,EAAE,CAAA;IACnH,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,GAAG,KAAK,EAI/E;IACC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;YAAE,QAAQ,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QAChH,OAAO,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAA,CAAC,CAAC,CAAA;IACnC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IAClG,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,yBAAO,IAAI,GAAQ,CAAC,CAAC,CAAC,eAAM,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAI,CAAA;IAElH,OAAO,yBAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YACzF,MAAM,SAAS,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;iBAC9F,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAA;YACjF,MAAM,QAAQ,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACxE,OAAO,gBAAkB,SAAS,EAAC,gBAAgB,aACjD,eAAM,SAAS,EAAC,kBAAkB,YAAE,KAAK,GAAG,CAAC,GAAQ,EACpD,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,yBAAO,IAAI,GAAQ,CAAC,CAAC,CAAC,eAAM,uBAAuB,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAI,KAFlF,KAAK,CAGhB,CAAA;QACT,CAAC,CAAC,GAAQ,CAAA;AACZ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface MermaidProps {
2
+ code: string;
3
+ collapsedCodeLines?: number;
4
+ expandedCodeLines?: number;
5
+ }
6
+ export declare function Mermaid({ code, collapsedCodeLines, expandedCodeLines }: MermaidProps): import("react").JSX.Element;
7
+ //# sourceMappingURL=Mermaid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mermaid.d.ts","sourceRoot":"","sources":["../../src/docs/Mermaid.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAMD,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,kBAAsB,EAAE,iBAAsB,EAAE,EAAE,YAAY,+BA0D7F"}
@@ -0,0 +1,39 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useId, useState } from "react";
3
+ import { HighlightedCode } from "./HighlightedCode.js";
4
+ let seq = 0;
5
+ function positiveLineCount(value, fallback) {
6
+ return value !== undefined && Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
7
+ }
8
+ export function Mermaid({ code, collapsedCodeLines = 3, expandedCodeLines = 30 }) {
9
+ const [svg, setSvg] = useState(null);
10
+ const [error, setError] = useState(null);
11
+ const [codeExpanded, setCodeExpanded] = useState(false);
12
+ const codePanelId = useId();
13
+ const collapsedLines = positiveLineCount(collapsedCodeLines, 3);
14
+ const expandedLines = Math.max(collapsedLines, positiveLineCount(expandedCodeLines, 30));
15
+ useEffect(() => {
16
+ let cancelled = false;
17
+ import("mermaid")
18
+ .then(async ({ default: mermaid }) => {
19
+ mermaid.initialize({ startOnLoad: false, securityLevel: "strict" });
20
+ // A fresh id per render: mermaid.render removes any element with the id it is given,
21
+ // so reusing one (StrictMode's double effect, a code change) deleted the diagram an
22
+ // earlier render had already mounted.
23
+ const { svg } = await mermaid.render(`mermaid-${++seq}`, code);
24
+ if (!cancelled)
25
+ setSvg(svg);
26
+ })
27
+ .catch((e) => {
28
+ if (!cancelled)
29
+ setError(String(e.message ?? e));
30
+ });
31
+ return () => {
32
+ cancelled = true;
33
+ };
34
+ }, [code]);
35
+ return (_jsxs("section", { className: "docs-mermaid-preview", "data-docstream-mermaid": "", children: [error ? (_jsxs("pre", { className: "docs-mermaid-error", children: ["mermaid error: ", error] })) : svg ? (_jsx("div", { className: "docs-mermaid", dangerouslySetInnerHTML: { __html: svg } })) : (_jsx("div", { className: "docs-mermaid", children: "Rendering diagram\u2026" })), _jsxs("div", { className: "docs-react-demo-code docs-mermaid-code", children: [_jsx("pre", { id: codePanelId, className: codeExpanded ? "docs-react-demo-code-body docs-react-demo-code-body-expanded" : "docs-react-demo-code-body", style: {
36
+ "--docs-react-demo-code-lines": codeExpanded ? expandedLines : collapsedLines,
37
+ }, children: _jsx(HighlightedCode, { code: code, language: "mermaid", lineNumbers: true }) }), _jsx("button", { type: "button", className: "docs-react-demo-code-toggle", "aria-controls": codePanelId, "aria-expanded": codeExpanded, onClick: () => setCodeExpanded((value) => !value), children: codeExpanded ? "Hide Code" : "View Code" })] })] }));
38
+ }
39
+ //# sourceMappingURL=Mermaid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mermaid.js","sourceRoot":"","sources":["../../src/docs/Mermaid.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type ResolveDemosOptions } from "../demo/markdown.js";
2
+ import type { DemoResolver } from "../demo/types.js";
3
+ export type DocPageAction = "copy" | "view" | "chatgpt" | "claude";
4
+ export interface DocPageActionsOptions {
5
+ /**
6
+ * Public URL of this page as Markdown (e.g. `/md/button.md`). "View as Markdown" opens it and the
7
+ * ChatGPT / Claude prompts reference it. Without it, "View" opens the resolved Markdown as a
8
+ * blob and the prompts reference `pageUrl` (default: the current location).
9
+ */
10
+ markdownUrl?: string;
11
+ pageUrl?: string;
12
+ /** The question handed to ChatGPT / Claude. */
13
+ prompt?: (url: string) => string;
14
+ /** Which menu entries to show, in order. Defaults to all four. */
15
+ actions?: DocPageAction[];
16
+ /** Final touch on the copied Markdown (e.g. append a "Source:" footer). */
17
+ transform?: (markdown: string) => string;
18
+ /**
19
+ * Options for resolving `{% demo %}` blocks. The default `format: "inline"` keeps the page
20
+ * renderable by docstream; `{ format: "plain" }` gives the pre-1.2 prose + fences form.
21
+ */
22
+ demoOptions?: ResolveDemosOptions;
23
+ /** Overrides the resolver from context. */
24
+ resolver?: DemoResolver;
25
+ className?: string;
26
+ }
27
+ export interface DocPageActionsProps extends DocPageActionsOptions {
28
+ /** The page's Markdown source (or a function producing it on demand). */
29
+ markdown: string | (() => string | Promise<string>);
30
+ }
31
+ /** A shadcn-style split button: "Copy page" plus a menu of Markdown / AI actions. */
32
+ export declare function DocPageActions(props: DocPageActionsProps): import("react").JSX.Element;
33
+ //# sourceMappingURL=PageActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageActions.d.ts","sourceRoot":"","sources":["../../src/docs/PageActions.tsx"],"names":[],"mappings":"AAQA,OAAO,EAA0B,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAGjD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAA;AAElE,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IAChC,kEAAkE;IAClE,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAA;IACxC;;;OAGG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAA;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,yEAAyE;IACzE,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;CACpD;AAkCD,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,+BAyIxD"}
@@ -0,0 +1,115 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /* "Copy page ▾": copy the page as Markdown, view it as Markdown, or open it in ChatGPT / Claude.
3
+ Copy and View give renderable docstream Markdown: each {% demo %} keeps its tag and carries its
4
+ real files inline, so pasting the page into docstream renders the same page (demos included). */
5
+ import { useEffect, useId, useRef, useState } from "react";
6
+ import { AnimatePresence, motion, useReducedMotion } from "framer-motion";
7
+ import { ArrowUpRight, ChevronDown, FileText } from "lucide-react";
8
+ import { useDemoResolver } from "../demo/context.js";
9
+ import { resolveDemosToMarkdown } from "../demo/markdown.js";
10
+ import { CopyIcon, useCopied } from "./copy.js";
11
+ const OpenAIGlyph = () => (_jsx("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.9", "aria-hidden": "true", children: [0, 60, 120].map((a) => (_jsx("rect", { x: "8.6", y: "2.6", width: "6.8", height: "18.8", rx: "3.4", transform: `rotate(${a} 12 12)` }, a))) }));
12
+ const AnthropicGlyph = () => (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { d: "M17.3 3.54h-3.67l6.7 16.92H24zM6.7 3.54 0 20.46h3.74l1.37-3.55h7.01l1.37 3.55h3.74L10.54 3.54zm-.37 10.22 2.29-5.94 2.29 5.94z" }) }));
13
+ const defaultPrompt = (url) => `Read ${url}, I want to ask questions about it.`;
14
+ /** The page as renderable Markdown (demo files inline) for copying or exporting. */
15
+ async function pageMarkdown(props, resolver) {
16
+ const source = typeof props.markdown === "function" ? await props.markdown() : props.markdown;
17
+ const resolved = await resolveDemosToMarkdown(source, resolver, props.demoOptions);
18
+ return props.transform ? props.transform(resolved) : resolved;
19
+ }
20
+ /** A shadcn-style split button: "Copy page" plus a menu of Markdown / AI actions. */
21
+ export function DocPageActions(props) {
22
+ const resolver = useDemoResolver(props.resolver);
23
+ const { copied, copy } = useCopied();
24
+ const [open, setOpen] = useState(false);
25
+ const reduced = useReducedMotion();
26
+ const root = useRef(null);
27
+ const trigger = useRef(null);
28
+ const menuId = useId();
29
+ useEffect(() => {
30
+ if (!open)
31
+ return;
32
+ const onDown = (event) => {
33
+ if (!root.current?.contains(event.target))
34
+ setOpen(false);
35
+ };
36
+ document.addEventListener("pointerdown", onDown);
37
+ // Focus the first item once the menu is in the DOM.
38
+ const frame = requestAnimationFrame(() => root.current?.querySelector("[role=menuitem]")?.focus());
39
+ return () => {
40
+ document.removeEventListener("pointerdown", onDown);
41
+ cancelAnimationFrame(frame);
42
+ };
43
+ }, [open]);
44
+ const copyPage = () => copy(() => pageMarkdown(props, resolver));
45
+ const here = typeof location === "undefined" ? "" : location.href;
46
+ const target = props.markdownUrl ? absolute(props.markdownUrl) : props.pageUrl ?? here;
47
+ const ask = (props.prompt ?? defaultPrompt)(target);
48
+ const viewMarkdown = async () => {
49
+ const text = await pageMarkdown(props, resolver);
50
+ const url = URL.createObjectURL(new Blob([text], { type: "text/plain;charset=utf-8" }));
51
+ window.open(url, "_blank", "noopener");
52
+ setTimeout(() => URL.revokeObjectURL(url), 60_000);
53
+ };
54
+ const all = [
55
+ { id: "copy", icon: _jsx(CopyIcon, { copied: false }), label: "Copy as Markdown", hint: "Copy this page, demos included", run: () => void copyPage() },
56
+ props.markdownUrl
57
+ ? { id: "view", icon: _jsx(FileText, { width: 15, height: 15, "aria-hidden": "true" }), label: "View as Markdown", hint: "Open the page as plain text", href: props.markdownUrl }
58
+ : { id: "view", icon: _jsx(FileText, { width: 15, height: 15, "aria-hidden": "true" }), label: "View as Markdown", hint: "Open the page as plain text", run: () => void viewMarkdown() },
59
+ { id: "chatgpt", icon: _jsx(OpenAIGlyph, {}), label: "Open in ChatGPT", hint: "Ask questions about this page", href: `https://chatgpt.com/?hints=search&q=${encodeURIComponent(ask)}` },
60
+ { id: "claude", icon: _jsx(AnthropicGlyph, {}), label: "Open in Claude", hint: "Ask questions about this page", href: `https://claude.ai/new?q=${encodeURIComponent(ask)}` },
61
+ ];
62
+ const wanted = props.actions ?? ["copy", "view", "chatgpt", "claude"];
63
+ const items = wanted.map((id) => all.find((item) => item.id === id)).filter((item) => !!item);
64
+ const close = (refocus = true) => {
65
+ setOpen(false);
66
+ if (refocus)
67
+ trigger.current?.focus();
68
+ };
69
+ const onMenuKey = (event) => {
70
+ const entries = Array.from(event.currentTarget.querySelectorAll("[role=menuitem]"));
71
+ const index = entries.indexOf(document.activeElement);
72
+ let next = -1;
73
+ if (event.key === "ArrowDown")
74
+ next = (index + 1) % entries.length;
75
+ else if (event.key === "ArrowUp")
76
+ next = (index - 1 + entries.length) % entries.length;
77
+ else if (event.key === "Home")
78
+ next = 0;
79
+ else if (event.key === "End")
80
+ next = entries.length - 1;
81
+ else if (event.key === "Escape") {
82
+ event.preventDefault();
83
+ close();
84
+ return;
85
+ }
86
+ else if (event.key === "Tab") {
87
+ close(false);
88
+ return;
89
+ }
90
+ if (next < 0)
91
+ return;
92
+ event.preventDefault();
93
+ entries[next]?.focus();
94
+ };
95
+ return (_jsxs("div", { ref: root, className: props.className ? `docs-page-actions ${props.className}` : "docs-page-actions", children: [_jsxs("button", { type: "button", className: "docs-page-actions-main", onClick: () => void copyPage(), "aria-label": "Copy page as Markdown", children: [_jsx(CopyIcon, { copied: copied, size: 13 }), _jsx("span", { "aria-live": "polite", children: copied ? "Copied" : "Copy page" })] }), _jsx("button", { ref: trigger, type: "button", className: "docs-page-actions-more", "aria-label": "More page actions", "aria-haspopup": "menu", "aria-expanded": open, "aria-controls": open ? menuId : undefined, onClick: () => setOpen((value) => !value), onKeyDown: (event) => {
96
+ if (event.key === "ArrowDown" && !open) {
97
+ event.preventDefault();
98
+ setOpen(true);
99
+ }
100
+ }, children: _jsx(ChevronDown, { width: 13, height: 13, strokeWidth: 2.4, "aria-hidden": "true", className: open ? "docs-page-actions-caret-open" : undefined }) }), _jsx(AnimatePresence, { children: open ? (_jsx(motion.div, { id: menuId, role: "menu", "aria-label": "Page actions", className: "docs-page-actions-menu", onKeyDown: onMenuKey, initial: reduced ? { opacity: 0 } : { opacity: 0, scale: 0.95, y: -4 }, animate: { opacity: 1, scale: 1, y: 0, transition: reduced ? { duration: 0.1 } : { type: "spring", bounce: 0.2, duration: 0.32 } }, exit: { opacity: 0, scale: reduced ? 1 : 0.97, transition: { duration: 0.12 } }, style: { transformOrigin: "top right" }, children: items.map((item) => {
101
+ const body = (_jsxs(_Fragment, { children: [_jsx("span", { className: "docs-page-actions-icon", children: item.icon }), _jsxs("span", { className: "docs-page-actions-text", children: [_jsxs("span", { className: "docs-page-actions-label", children: [item.label, item.href ? _jsx(ArrowUpRight, { width: 12, height: 12, "aria-hidden": "true" }) : null] }), _jsx("span", { className: "docs-page-actions-hint", children: item.hint })] })] }));
102
+ return item.href ? (_jsx("a", { role: "menuitem", tabIndex: -1, className: "docs-page-actions-item", href: item.href, target: "_blank", rel: "noreferrer", onClick: () => close(false), children: body }, item.id)) : (_jsx("button", { type: "button", role: "menuitem", tabIndex: -1, className: "docs-page-actions-item", onClick: () => { item.run?.(); close(); }, children: body }, item.id));
103
+ }) })) : null })] }));
104
+ }
105
+ function absolute(url) {
106
+ if (typeof location === "undefined")
107
+ return url;
108
+ try {
109
+ return new URL(url, location.href).toString();
110
+ }
111
+ catch {
112
+ return url;
113
+ }
114
+ }
115
+ //# sourceMappingURL=PageActions.js.map