@brett_lamy/docstream 1.3.0 → 1.5.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 +79 -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 +78 -0
- package/dist/demo/DemoViewer.d.ts.map +1 -0
- package/dist/demo/DemoViewer.js +467 -0
- package/dist/demo/DemoViewer.js.map +1 -0
- package/dist/demo/clipboard.d.ts +70 -0
- package/dist/demo/clipboard.d.ts.map +1 -0
- package/dist/demo/clipboard.js +187 -0
- package/dist/demo/clipboard.js.map +1 -0
- package/dist/demo/context.d.ts +20 -0
- package/dist/demo/context.d.ts.map +1 -0
- package/dist/demo/context.js +31 -0
- package/dist/demo/context.js.map +1 -0
- package/dist/demo/copy-demo.d.ts +23 -0
- package/dist/demo/copy-demo.d.ts.map +1 -0
- package/dist/demo/copy-demo.js +81 -0
- package/dist/demo/copy-demo.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 +16 -0
- package/dist/demo/index.d.ts.map +1 -0
- package/dist/demo/index.js +9 -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/demo/vfs.d.ts +51 -0
- package/dist/demo/vfs.d.ts.map +1 -0
- package/dist/demo/vfs.js +156 -0
- package/dist/demo/vfs.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 +55 -0
- package/dist/docs/DocsRenderer.d.ts.map +1 -0
- package/dist/docs/DocsRenderer.js +279 -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 +65 -32
- package/src/demo/DemoViewer.tsx +56 -11
- package/src/demo/clipboard.ts +228 -0
- package/src/demo/context.ts +7 -0
- package/src/demo/copy-demo.tsx +102 -0
- package/src/demo/index.ts +29 -2
- package/src/demo/vfs.ts +197 -0
- package/src/docs/DocsRenderer.tsx +13 -4
- package/src/docs/Mermaid.tsx +5 -3
- package/src/index.ts +19 -0
- package/src/replay/ReplayPreview.tsx +0 -1
- package/src/streamdown.tsx +2 -0
- package/src/styles.css +91 -0
- package/src/replay/styles.css +0 -87
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { parseMarkdown } from "../gitbook/parse.js";
|
|
2
|
+
import { serializeMarkdown } from "../gitbook/serialize.js";
|
|
3
|
+
import { inlineDemoNode, toInlineFiles } from "./markdown.js";
|
|
4
|
+
import { cssToSurface } from "./surface.js";
|
|
5
|
+
export const DOCSTREAM_CLIPBOARD_TYPE = "application/x-docstream+json";
|
|
6
|
+
/** Every `{% demo %}` node in a document (inside tabs, hints, lists …), in document order. */
|
|
7
|
+
export function collectDemoNodes(doc) {
|
|
8
|
+
const out = [];
|
|
9
|
+
const walk = (value) => {
|
|
10
|
+
if (Array.isArray(value)) {
|
|
11
|
+
for (const item of value)
|
|
12
|
+
walk(item);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (!value || typeof value !== "object")
|
|
16
|
+
return;
|
|
17
|
+
const node = value;
|
|
18
|
+
if (node.type === "demo") {
|
|
19
|
+
out.push(value);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
for (const child of Object.values(value))
|
|
23
|
+
if (child && typeof child === "object")
|
|
24
|
+
walk(child);
|
|
25
|
+
};
|
|
26
|
+
walk(doc.children);
|
|
27
|
+
return out;
|
|
28
|
+
}
|
|
29
|
+
/** A copy of `doc` with every demo node replaced by `map(node)`. */
|
|
30
|
+
export function mapDemoNodes(doc, map) {
|
|
31
|
+
const walk = (value) => {
|
|
32
|
+
if (Array.isArray(value))
|
|
33
|
+
return value.map(walk);
|
|
34
|
+
if (!value || typeof value !== "object")
|
|
35
|
+
return value;
|
|
36
|
+
if (value.type === "demo")
|
|
37
|
+
return map(value);
|
|
38
|
+
const out = {};
|
|
39
|
+
for (const [k, v] of Object.entries(value))
|
|
40
|
+
out[k] = v && typeof v === "object" ? walk(v) : v;
|
|
41
|
+
return out;
|
|
42
|
+
};
|
|
43
|
+
return walk(doc);
|
|
44
|
+
}
|
|
45
|
+
/** A demo tag's attributes as `meta.json`-style defaults. */
|
|
46
|
+
export function demoNodeMeta(node) {
|
|
47
|
+
const meta = {};
|
|
48
|
+
if (node.title)
|
|
49
|
+
meta.title = node.title;
|
|
50
|
+
if (node.description)
|
|
51
|
+
meta.description = node.description;
|
|
52
|
+
if (node.height)
|
|
53
|
+
meta.height = /^\d+(?:\.\d+)?$/.test(node.height) ? Number(node.height) : node.height;
|
|
54
|
+
if (node.layout)
|
|
55
|
+
meta.layout = node.layout;
|
|
56
|
+
if (node.variants?.length)
|
|
57
|
+
meta.variants = node.variants.map((v) => ({ ...v }));
|
|
58
|
+
if (node.entry)
|
|
59
|
+
meta.entry = node.entry;
|
|
60
|
+
if (node.status)
|
|
61
|
+
meta.status = node.status;
|
|
62
|
+
if (node.bleed !== undefined)
|
|
63
|
+
meta.bleed = node.bleed;
|
|
64
|
+
if (node.className)
|
|
65
|
+
meta.className = node.className;
|
|
66
|
+
if (node.surface)
|
|
67
|
+
meta.surface = cssToSurface(node.surface);
|
|
68
|
+
if (node.variantsWidth)
|
|
69
|
+
meta.variantsWidth = node.variantsWidth;
|
|
70
|
+
return meta;
|
|
71
|
+
}
|
|
72
|
+
/** The clipboard representations of a document (or a selection of one). */
|
|
73
|
+
export function createDocstreamClipboard(doc, options = {}) {
|
|
74
|
+
const serialize = options.serialize ?? serializeMarkdown;
|
|
75
|
+
const files = {};
|
|
76
|
+
const meta = {};
|
|
77
|
+
const inlined = mapDemoNodes(doc, (node) => {
|
|
78
|
+
if (node.files?.length) {
|
|
79
|
+
if (node.src) {
|
|
80
|
+
files[node.src] = toInlineFiles(node.files);
|
|
81
|
+
const tagMeta = demoNodeMeta(node);
|
|
82
|
+
if (Object.keys(tagMeta).length)
|
|
83
|
+
meta[node.src] = tagMeta;
|
|
84
|
+
}
|
|
85
|
+
return node;
|
|
86
|
+
}
|
|
87
|
+
const found = node.src ? options.lookup?.(node) : undefined;
|
|
88
|
+
if (!found?.files.length)
|
|
89
|
+
return node;
|
|
90
|
+
files[node.src] = toInlineFiles(found.files);
|
|
91
|
+
const merged = { ...found.meta, ...demoNodeMeta(node) };
|
|
92
|
+
if (Object.keys(merged).length)
|
|
93
|
+
meta[node.src] = merged;
|
|
94
|
+
return inlineDemoNode(node, found.files, found.meta);
|
|
95
|
+
});
|
|
96
|
+
return {
|
|
97
|
+
payload: { kind: "docstream", version: 1, markdown: serialize(doc), files, meta },
|
|
98
|
+
text: serialize(inlined),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/** Parse the Markdown of a copied docstream selection (or a single demo). */
|
|
102
|
+
export function createDocstreamClipboardFromMarkdown(markdown, options = {}) {
|
|
103
|
+
const clip = createDocstreamClipboard(parseMarkdown(markdown), options);
|
|
104
|
+
// Keep the author's bytes for the exact representation.
|
|
105
|
+
return { ...clip, payload: { ...clip.payload, markdown } };
|
|
106
|
+
}
|
|
107
|
+
/** The clipboard as react-aria `DragItem`s (for `useClipboard`'s `getItems` / `useDrag`). */
|
|
108
|
+
export function docstreamClipboardItems(clip) {
|
|
109
|
+
return [
|
|
110
|
+
{
|
|
111
|
+
"text/plain": clip.text,
|
|
112
|
+
"text/markdown": clip.text,
|
|
113
|
+
[DOCSTREAM_CLIPBOARD_TYPE]: JSON.stringify(clip.payload),
|
|
114
|
+
},
|
|
115
|
+
];
|
|
116
|
+
}
|
|
117
|
+
/** Writes the representations straight onto a `DataTransfer` (a copy / cut / dragstart event's). */
|
|
118
|
+
export function writeDocstreamClipboard(data, clip) {
|
|
119
|
+
for (const [type, value] of Object.entries(docstreamClipboardItems(clip)[0]))
|
|
120
|
+
data.setData(type, value);
|
|
121
|
+
}
|
|
122
|
+
/** Validates a `DOCSTREAM_CLIPBOARD_TYPE` string. */
|
|
123
|
+
export function parseDocstreamClipboard(json) {
|
|
124
|
+
if (!json)
|
|
125
|
+
return null;
|
|
126
|
+
let raw;
|
|
127
|
+
try {
|
|
128
|
+
raw = JSON.parse(json);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
if (!raw || typeof raw !== "object")
|
|
134
|
+
return null;
|
|
135
|
+
const value = raw;
|
|
136
|
+
if (value.kind !== "docstream" || typeof value.markdown !== "string")
|
|
137
|
+
return null;
|
|
138
|
+
const files = {};
|
|
139
|
+
for (const [src, list] of Object.entries(value.files && typeof value.files === "object" ? value.files : {})) {
|
|
140
|
+
if (!Array.isArray(list))
|
|
141
|
+
continue;
|
|
142
|
+
const clean = list
|
|
143
|
+
.filter((f) => !!f && typeof f === "object" && typeof f.path === "string" && typeof f.content === "string")
|
|
144
|
+
.map((f) => ({ path: f.path, content: f.content, ...(typeof f.language === "string" && f.language ? { language: f.language } : {}) }));
|
|
145
|
+
if (clean.length)
|
|
146
|
+
files[src] = clean;
|
|
147
|
+
}
|
|
148
|
+
const meta = {};
|
|
149
|
+
for (const [src, m] of Object.entries(value.meta && typeof value.meta === "object" ? value.meta : {})) {
|
|
150
|
+
if (m && typeof m === "object")
|
|
151
|
+
meta[src] = m;
|
|
152
|
+
}
|
|
153
|
+
return { kind: "docstream", version: 1, markdown: value.markdown, files, meta };
|
|
154
|
+
}
|
|
155
|
+
function hasType(types, type) {
|
|
156
|
+
return !!types && Array.prototype.indexOf.call(types, type) >= 0;
|
|
157
|
+
}
|
|
158
|
+
/** True when a `DataTransfer` carries a docstream payload. */
|
|
159
|
+
export function hasDocstreamClipboard(data) {
|
|
160
|
+
return hasType(data?.types, DOCSTREAM_CLIPBOARD_TYPE);
|
|
161
|
+
}
|
|
162
|
+
/** The docstream payload on a paste / drop `DataTransfer`, if any. */
|
|
163
|
+
export function readDocstreamClipboard(data) {
|
|
164
|
+
if (!data || !hasDocstreamClipboard(data))
|
|
165
|
+
return null;
|
|
166
|
+
return parseDocstreamClipboard(data.getData(DOCSTREAM_CLIPBOARD_TYPE));
|
|
167
|
+
}
|
|
168
|
+
/** The docstream payload among react-aria `DropItem`s (`useClipboard`'s `onPaste`, `useDrop`). */
|
|
169
|
+
export async function readDocstreamClipboardItems(items) {
|
|
170
|
+
for (const item of items) {
|
|
171
|
+
if (item.kind === "text" && item.types?.has(DOCSTREAM_CLIPBOARD_TYPE) && item.getText) {
|
|
172
|
+
const payload = parseDocstreamClipboard(await item.getText(DOCSTREAM_CLIPBOARD_TYPE));
|
|
173
|
+
if (payload)
|
|
174
|
+
return payload;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* A payload for Markdown that arrived without one (only `text/plain` / `text/markdown`):
|
|
181
|
+
* inline-file demos give their files by `src`.
|
|
182
|
+
*/
|
|
183
|
+
export function docstreamPayloadFromMarkdown(markdown) {
|
|
184
|
+
const { payload } = createDocstreamClipboardFromMarkdown(markdown);
|
|
185
|
+
return payload;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=clipboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/demo/clipboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DemoResolver, DemoRuntimeOptions } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The host's demo resolver. Renderers given a `demoResolver` prop provide it, so
|
|
4
|
+
* nested renderers (Markdown inside tabs, hints, a demo's own Markdown) inherit it.
|
|
5
|
+
*/
|
|
6
|
+
export declare const DocstreamDemoContext: import("react").Context<DemoResolver | undefined>;
|
|
7
|
+
export declare function useDemoResolver(override?: DemoResolver): DemoResolver | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* How inline-file demos without a resolver run their Preview (`demoRuntime`) and which
|
|
10
|
+
* extra npm packages they may import (`demoDependencies`). Provided by the renderers.
|
|
11
|
+
*/
|
|
12
|
+
export declare const DocstreamDemoRuntimeContext: import("react").Context<DemoRuntimeOptions>;
|
|
13
|
+
export declare function useDemoRuntime(override?: DemoRuntimeOptions): DemoRuntimeOptions;
|
|
14
|
+
/**
|
|
15
|
+
* Demo files held in memory by `src` (a `DemoVFS`), e.g. demos pasted from another page or
|
|
16
|
+
* editor. `DemoViewer` falls back to them when a block has no inline files; the host
|
|
17
|
+
* resolver still wins when it knows `src`. Provided by renderers' / editors' `demoVFS`.
|
|
18
|
+
*/
|
|
19
|
+
export declare const DocstreamDemoVFSContext: import("react").Context<import("./vfs.js").DemoVFS | undefined>;
|
|
20
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/demo/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE/D;;;GAGG;AACH,eAAO,MAAM,oBAAoB,mDAAqD,CAAA;AAEtF,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS,CAGjF;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B,6CAAwC,CAAA;AAEhF,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,CAQhF;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,8DAAgE,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* The host's demo resolver. Renderers given a `demoResolver` prop provide it, so
|
|
4
|
+
* nested renderers (Markdown inside tabs, hints, a demo's own Markdown) inherit it.
|
|
5
|
+
*/
|
|
6
|
+
export const DocstreamDemoContext = createContext(undefined);
|
|
7
|
+
export function useDemoResolver(override) {
|
|
8
|
+
const inherited = useContext(DocstreamDemoContext);
|
|
9
|
+
return override ?? inherited;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* How inline-file demos without a resolver run their Preview (`demoRuntime`) and which
|
|
13
|
+
* extra npm packages they may import (`demoDependencies`). Provided by the renderers.
|
|
14
|
+
*/
|
|
15
|
+
export const DocstreamDemoRuntimeContext = createContext({});
|
|
16
|
+
export function useDemoRuntime(override) {
|
|
17
|
+
const inherited = useContext(DocstreamDemoRuntimeContext);
|
|
18
|
+
return {
|
|
19
|
+
runtime: override?.runtime ?? inherited.runtime,
|
|
20
|
+
dependencies: override?.dependencies || inherited.dependencies
|
|
21
|
+
? { ...inherited.dependencies, ...override?.dependencies }
|
|
22
|
+
: undefined,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Demo files held in memory by `src` (a `DemoVFS`), e.g. demos pasted from another page or
|
|
27
|
+
* editor. `DemoViewer` falls back to them when a block has no inline files; the host
|
|
28
|
+
* resolver still wins when it knows `src`. Provided by renderers' / editors' `demoVFS`.
|
|
29
|
+
*/
|
|
30
|
+
export const DocstreamDemoVFSContext = createContext(undefined);
|
|
31
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/demo/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAGjD;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAA2B,SAAS,CAAC,CAAA;AAEtF,MAAM,UAAU,eAAe,CAAC,QAAuB;IACrD,MAAM,SAAS,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;IAClD,OAAO,QAAQ,IAAI,SAAS,CAAA;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,aAAa,CAAqB,EAAE,CAAC,CAAA;AAEhF,MAAM,UAAU,cAAc,CAAC,QAA6B;IAC1D,MAAM,SAAS,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAA;IACzD,OAAO;QACL,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,SAAS,CAAC,OAAO;QAC/C,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,SAAS,CAAC,YAAY;YAC5D,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,YAAY,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE;YAC1D,CAAC,CAAC,SAAS;KACd,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAsC,SAAS,CAAC,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type DOMAttributes, type MutableRefObject } from "react";
|
|
2
|
+
import { type DocstreamClipboard } from "./clipboard.js";
|
|
3
|
+
export interface DocstreamCopy<T extends HTMLElement> {
|
|
4
|
+
ref: MutableRefObject<T | null>;
|
|
5
|
+
/** react-aria `useClipboard`'s focus handlers: Cmd/Ctrl+C on the focused element copies too. */
|
|
6
|
+
props: DOMAttributes<T>;
|
|
7
|
+
/** Copies; resolves false when there was nothing to copy. */
|
|
8
|
+
copy: () => Promise<boolean>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Copies a `DocstreamClipboard` (all three representations) from a click. Spread `props` on
|
|
12
|
+
* the triggering element (a focusable one, e.g. a `<button>`) and give it `ref`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useDocstreamCopy<T extends HTMLElement = HTMLButtonElement>(produce: () => DocstreamClipboard | null): DocstreamCopy<T>;
|
|
15
|
+
export interface CopyDemoButtonProps {
|
|
16
|
+
/** The clipboard to write, computed on click. `null` disables the copy. */
|
|
17
|
+
clipboard: () => DocstreamClipboard | null;
|
|
18
|
+
label?: string;
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
/** Icon button: copies the demo (Markdown + files + docstream payload) and swaps to a tick. */
|
|
22
|
+
export declare function CopyDemoButton({ clipboard, label, className }: CopyDemoButtonProps): import("react").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=copy-demo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-demo.d.ts","sourceRoot":"","sources":["../../src/demo/copy-demo.tsx"],"names":[],"mappings":"AAMA,OAAO,EAA+B,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAG9F,OAAO,EAA2B,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAE9E,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,WAAW;IAClD,GAAG,EAAE,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAC/B,gGAAgG;IAChG,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IACvB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CAC7B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,WAAW,GAAG,iBAAiB,EAAE,OAAO,EAAE,MAAM,kBAAkB,GAAG,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAyCtI;AAED,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,kBAAkB,GAAG,IAAI,CAAA;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,+FAA+F;AAC/F,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,KAAmB,EAAE,SAAS,EAAE,EAAE,mBAAmB,+BA2BhG"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/* "Copy demo": writes the docstream clipboard (Markdown with the demo's files inline, plus the
|
|
3
|
+
`application/x-docstream+json` payload) through react-aria's `useClipboard`, so pasting into
|
|
4
|
+
a docstream editor recreates the demo with its files. A button click has no copy event of
|
|
5
|
+
its own, so the button focuses itself and runs the browser's copy command; react-aria's
|
|
6
|
+
listener then fills the event's DataTransfer. Where that is unavailable, the Markdown is
|
|
7
|
+
copied as plain text (editors still parse its inline-file demos). */
|
|
8
|
+
import { useEffect, useRef, useState } from "react";
|
|
9
|
+
import { useClipboard } from "react-aria";
|
|
10
|
+
import { CopyIcon, copyText } from "../docs/copy.js";
|
|
11
|
+
import { docstreamClipboardItems } from "./clipboard.js";
|
|
12
|
+
/**
|
|
13
|
+
* Copies a `DocstreamClipboard` (all three representations) from a click. Spread `props` on
|
|
14
|
+
* the triggering element (a focusable one, e.g. a `<button>`) and give it `ref`.
|
|
15
|
+
*/
|
|
16
|
+
export function useDocstreamCopy(produce) {
|
|
17
|
+
const ref = useRef(null);
|
|
18
|
+
const latest = useRef(produce);
|
|
19
|
+
latest.current = produce;
|
|
20
|
+
const wrote = useRef(false);
|
|
21
|
+
const { clipboardProps } = useClipboard({
|
|
22
|
+
getItems: () => {
|
|
23
|
+
const clip = latest.current();
|
|
24
|
+
return clip ? docstreamClipboardItems(clip) : [];
|
|
25
|
+
},
|
|
26
|
+
onCopy: () => {
|
|
27
|
+
wrote.current = true;
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
const copy = async () => {
|
|
31
|
+
const clip = latest.current();
|
|
32
|
+
if (!clip)
|
|
33
|
+
return false;
|
|
34
|
+
const el = ref.current;
|
|
35
|
+
wrote.current = false;
|
|
36
|
+
if (el && typeof document !== "undefined" && typeof document.execCommand === "function") {
|
|
37
|
+
// The copy event targets the selection when there is one; clear it so it targets
|
|
38
|
+
// this (focused) element and nothing else — an editor around us — claims the event.
|
|
39
|
+
const selection = typeof window !== "undefined" ? window.getSelection() : null;
|
|
40
|
+
const ranges = [];
|
|
41
|
+
if (selection)
|
|
42
|
+
for (let i = 0; i < selection.rangeCount; i++)
|
|
43
|
+
ranges.push(selection.getRangeAt(i));
|
|
44
|
+
try {
|
|
45
|
+
if (document.activeElement !== el)
|
|
46
|
+
el.focus({ preventScroll: true });
|
|
47
|
+
selection?.removeAllRanges();
|
|
48
|
+
document.execCommand("copy");
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// fall through to the plain-text copy
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
if (selection && ranges.length && !selection.rangeCount)
|
|
55
|
+
for (const range of ranges)
|
|
56
|
+
selection.addRange(range);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (!wrote.current)
|
|
60
|
+
await copyText(clip.text);
|
|
61
|
+
return true;
|
|
62
|
+
};
|
|
63
|
+
return { ref, props: clipboardProps, copy };
|
|
64
|
+
}
|
|
65
|
+
/** Icon button: copies the demo (Markdown + files + docstream payload) and swaps to a tick. */
|
|
66
|
+
export function CopyDemoButton({ clipboard, label = "Copy demo", className }) {
|
|
67
|
+
const { ref, props, copy } = useDocstreamCopy(clipboard);
|
|
68
|
+
const [copied, setCopied] = useState(false);
|
|
69
|
+
const timer = useRef(undefined);
|
|
70
|
+
useEffect(() => () => clearTimeout(timer.current), []);
|
|
71
|
+
return (_jsx("button", { ...props, ref: ref, type: "button", className: className ? `docs-copy ${className}` : "docs-copy", onClick: () => {
|
|
72
|
+
void copy().then((ok) => {
|
|
73
|
+
if (!ok)
|
|
74
|
+
return;
|
|
75
|
+
setCopied(true);
|
|
76
|
+
clearTimeout(timer.current);
|
|
77
|
+
timer.current = setTimeout(() => setCopied(false), 1600);
|
|
78
|
+
});
|
|
79
|
+
}, "aria-label": copied ? "Copied" : label, title: copied ? "Copied" : `${label} (Markdown with its files — paste into a docstream editor)`, "data-copied": copied || undefined, "data-docstream-copy-demo": "", children: _jsx(CopyIcon, { copied: copied }) }));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=copy-demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-demo.js","sourceRoot":"","sources":["../../src/demo/copy-demo.tsx"],"names":[],"mappings":";AAAA;;;;;uEAKuE;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAA6C,MAAM,OAAO,CAAA;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,uBAAuB,EAA2B,MAAM,aAAa,CAAA;AAU9E;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAA4C,OAAwC;IAClH,MAAM,GAAG,GAAG,MAAM,CAAW,IAAI,CAAC,CAAA;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAC9B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,MAAM,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC;QACtC,QAAQ,EAAE,GAAG,EAAE;YACb,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;YAC7B,OAAO,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAClD,CAAC;QACD,MAAM,EAAE,GAAG,EAAE;YACX,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;QACtB,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,KAAK,IAAsB,EAAE;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;QAC7B,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QACvB,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAA;QACtB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAA;QACrB,IAAI,EAAE,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;YACxF,iFAAiF;YACjF,oFAAoF;YACpF,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;YAC9E,MAAM,MAAM,GAAY,EAAE,CAAA;YAC1B,IAAI,SAAS;gBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE;oBAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;YAClG,IAAI,CAAC;gBACH,IAAI,QAAQ,CAAC,aAAa,KAAK,EAAE;oBAAE,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;gBACpE,SAAS,EAAE,eAAe,EAAE,CAAA;gBAC5B,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,sCAAsC;YACxC,CAAC;oBAAS,CAAC;gBACT,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU;oBAAE,KAAK,MAAM,KAAK,IAAI,MAAM;wBAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YAChH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7C,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,cAAkC,EAAE,IAAI,EAAE,CAAA;AACjE,CAAC;AASD,+FAA+F;AAC/F,MAAM,UAAU,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,GAAG,WAAW,EAAE,SAAS,EAAuB;IAC/F,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAA;IACxD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,MAAM,CAA4C,SAAS,CAAC,CAAA;IAC1E,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;IACtD,OAAO,CACL,oBACM,KAAK,EACT,GAAG,EAAE,GAAG,EACR,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC,CAAC,WAAW,EAC7D,OAAO,EAAE,GAAG,EAAE;YACZ,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;gBACtB,IAAI,CAAC,EAAE;oBAAE,OAAM;gBACf,SAAS,CAAC,IAAI,CAAC,CAAA;gBACf,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBAC3B,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;QACJ,CAAC,gBACW,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EACrC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,4DAA4D,iBAClF,MAAM,IAAI,SAAS,8BACP,EAAE,YAE3B,KAAC,QAAQ,IAAC,MAAM,EAAE,MAAM,GAAI,GACrB,CACV,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { DemoComponent, DemoFile, DemoResolver } from "./types.js";
|
|
2
|
+
type Lazy<T> = () => Promise<T>;
|
|
3
|
+
type MaybeLazy<T> = T | Lazy<T>;
|
|
4
|
+
export interface GlobDemoResolverOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Entry modules, e.g. `import.meta.glob("./examples/*\/*\/index.tsx")`.
|
|
7
|
+
* Lazy (the default for `import.meta.glob`) or eager module objects both work.
|
|
8
|
+
*/
|
|
9
|
+
modules: Record<string, MaybeLazy<unknown>>;
|
|
10
|
+
/**
|
|
11
|
+
* Raw file contents, e.g.
|
|
12
|
+
* `import.meta.glob("./examples/**\/*.{ts,tsx,css,json}", { query: "?raw", import: "default" })`.
|
|
13
|
+
* Values are file text (or loaders of it); no `<string>` generic is needed. A module
|
|
14
|
+
* object with a string `default` (a `?raw` glob without `import: "default"`) also works.
|
|
15
|
+
*/
|
|
16
|
+
sources: Record<string, MaybeLazy<unknown>>;
|
|
17
|
+
/**
|
|
18
|
+
* Folder metadata, e.g.
|
|
19
|
+
* `import.meta.glob("./examples/*\/*\/meta.json", { eager: true, import: "default" })`.
|
|
20
|
+
*/
|
|
21
|
+
metas?: Record<string, MaybeLazy<unknown>>;
|
|
22
|
+
/**
|
|
23
|
+
* The glob prefix the `<page>/<example>` ids are relative to, e.g. `"./examples"`.
|
|
24
|
+
* When omitted, a demo's id is the last two folders of its entry path.
|
|
25
|
+
*/
|
|
26
|
+
root?: string;
|
|
27
|
+
/** Default entry file name. Defaults to `index.tsx`; a folder's `meta.entry` wins. */
|
|
28
|
+
entry?: string;
|
|
29
|
+
/** Hide files from the Code view (`meta.json` is always hidden). */
|
|
30
|
+
exclude?: (path: string, src: string) => boolean;
|
|
31
|
+
/** Deep link for a demo alone, e.g. `(src) => demoHref(src)`. */
|
|
32
|
+
href?: DemoResolver["href"];
|
|
33
|
+
}
|
|
34
|
+
export declare function languageForPath(path: string): string | undefined;
|
|
35
|
+
/** Picks the component out of a loaded module: `default`, else the first function export. */
|
|
36
|
+
export declare function demoComponentFrom(module: unknown, src?: string): DemoComponent;
|
|
37
|
+
/** Orders files entry first, then top-level before nested, then by path. */
|
|
38
|
+
export declare function sortDemoFiles(files: DemoFile[], entry?: string): DemoFile[];
|
|
39
|
+
/**
|
|
40
|
+
* Build a `DemoResolver` from Vite `import.meta.glob` maps. Each `<page>/<example>`
|
|
41
|
+
* folder holds an entry module (default export = the demo component, which receives
|
|
42
|
+
* `variant`), any number of source files, and an optional `meta.json`.
|
|
43
|
+
*/
|
|
44
|
+
export declare function createGlobDemoResolver(options: GlobDemoResolverOptions): DemoResolver;
|
|
45
|
+
/**
|
|
46
|
+
* The conventional deep link for one demo: `?demo=<src>` on the current page
|
|
47
|
+
* (or `base`). Hosts route it to `<DemoFullscreen>`; see `demoFromSearch`.
|
|
48
|
+
*/
|
|
49
|
+
export declare function demoHref(src: string, options?: {
|
|
50
|
+
base?: string;
|
|
51
|
+
variant?: string;
|
|
52
|
+
param?: string;
|
|
53
|
+
}): string;
|
|
54
|
+
/** Reads the `?demo=<src>` (and optional `variant`) deep link. */
|
|
55
|
+
export declare function demoFromSearch(search?: string, param?: string): {
|
|
56
|
+
src: string;
|
|
57
|
+
variant?: string;
|
|
58
|
+
} | null;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=glob.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/demo/glob.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAY,YAAY,EAAE,MAAM,SAAS,CAAA;AAE9E,KAAK,IAAI,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;AAC/B,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAE/B,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3C;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3C;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1C;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IAChD,iEAAiE;IACjE,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAA;CAC5B;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIhE;AASD,6FAA6F;AAC7F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,GAAG,aAAa,CAS9E;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,SAAc,GAAG,QAAQ,EAAE,CAOhF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,YAAY,CAgGrF;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAK/G;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAOxG"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
const LANGUAGES = { mjs: "js", cjs: "js", mts: "ts", cts: "ts", md: "markdown", yml: "yaml" };
|
|
2
|
+
export function languageForPath(path) {
|
|
3
|
+
const ext = path.split("/").pop()?.split(".").pop()?.toLowerCase();
|
|
4
|
+
if (!ext || ext === path)
|
|
5
|
+
return undefined;
|
|
6
|
+
return LANGUAGES[ext] ?? ext;
|
|
7
|
+
}
|
|
8
|
+
const unwrap = async (value) => typeof value === "function" ? value() : value;
|
|
9
|
+
function trimSlashes(path) {
|
|
10
|
+
return path.replace(/\\/g, "/").replace(/\/+$/, "");
|
|
11
|
+
}
|
|
12
|
+
/** Picks the component out of a loaded module: `default`, else the first function export. */
|
|
13
|
+
export function demoComponentFrom(module, src = "demo") {
|
|
14
|
+
if (typeof module === "function")
|
|
15
|
+
return module;
|
|
16
|
+
const record = (module ?? {});
|
|
17
|
+
const candidate = typeof record.default === "function"
|
|
18
|
+
? record.default
|
|
19
|
+
: Object.values(record).find((value) => typeof value === "function");
|
|
20
|
+
if (typeof candidate !== "function")
|
|
21
|
+
throw new Error(`Demo ${src} has no default-exported component`);
|
|
22
|
+
return candidate;
|
|
23
|
+
}
|
|
24
|
+
/** Orders files entry first, then top-level before nested, then by path. */
|
|
25
|
+
export function sortDemoFiles(files, entry = "index.tsx") {
|
|
26
|
+
const depth = (path) => path.split("/").length;
|
|
27
|
+
return [...files].sort((a, b) => {
|
|
28
|
+
if (a.path === entry)
|
|
29
|
+
return -1;
|
|
30
|
+
if (b.path === entry)
|
|
31
|
+
return 1;
|
|
32
|
+
return depth(a.path) - depth(b.path) || a.path.localeCompare(b.path);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build a `DemoResolver` from Vite `import.meta.glob` maps. Each `<page>/<example>`
|
|
37
|
+
* folder holds an entry module (default export = the demo component, which receives
|
|
38
|
+
* `variant`), any number of source files, and an optional `meta.json`.
|
|
39
|
+
*/
|
|
40
|
+
export function createGlobDemoResolver(options) {
|
|
41
|
+
const defaultEntry = options.entry ?? "index.tsx";
|
|
42
|
+
const root = options.root === undefined ? undefined : trimSlashes(options.root);
|
|
43
|
+
// Demo ids come from the entry modules: with `root`, the first two folders under it;
|
|
44
|
+
// without, the last two folders of each entry path.
|
|
45
|
+
const folders = new Map(); // src → folder prefix (with trailing slash)
|
|
46
|
+
for (const key of Object.keys(options.modules)) {
|
|
47
|
+
const path = key.replace(/\\/g, "/");
|
|
48
|
+
if (root !== undefined) {
|
|
49
|
+
const prefix = root ? `${root}/` : "";
|
|
50
|
+
if (!path.startsWith(prefix))
|
|
51
|
+
continue;
|
|
52
|
+
const parts = path.slice(prefix.length).split("/");
|
|
53
|
+
if (parts.length < 3)
|
|
54
|
+
continue;
|
|
55
|
+
const src = `${parts[0]}/${parts[1]}`;
|
|
56
|
+
if (!folders.has(src))
|
|
57
|
+
folders.set(src, `${prefix}${src}/`);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const parts = path.split("/").slice(0, -1);
|
|
61
|
+
if (parts.length < 2)
|
|
62
|
+
continue;
|
|
63
|
+
const src = parts.slice(-2).join("/");
|
|
64
|
+
if (!folders.has(src))
|
|
65
|
+
folders.set(src, `${parts.join("/")}/`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** The key's path relative to the demo folder, or null when it lives elsewhere. */
|
|
69
|
+
const inFolder = (src, key) => {
|
|
70
|
+
const prefix = folders.get(src);
|
|
71
|
+
const path = key.replace(/\\/g, "/");
|
|
72
|
+
return prefix && path.startsWith(prefix) ? path.slice(prefix.length) : null;
|
|
73
|
+
};
|
|
74
|
+
const metaCache = new Map();
|
|
75
|
+
const filesCache = new Map();
|
|
76
|
+
const loadCache = new Map();
|
|
77
|
+
const meta = (src) => {
|
|
78
|
+
let hit = metaCache.get(src);
|
|
79
|
+
if (!hit) {
|
|
80
|
+
const key = Object.keys(options.metas ?? {}).find((k) => inFolder(src, k) === "meta.json");
|
|
81
|
+
hit = key
|
|
82
|
+
? unwrap(options.metas[key]).then((m) => {
|
|
83
|
+
const value = m;
|
|
84
|
+
return value && typeof value === "object" && "default" in value && value.default ? value.default : value;
|
|
85
|
+
})
|
|
86
|
+
: Promise.resolve(undefined);
|
|
87
|
+
metaCache.set(src, hit);
|
|
88
|
+
}
|
|
89
|
+
return hit;
|
|
90
|
+
};
|
|
91
|
+
const entryFor = async (src) => (await meta(src))?.entry ?? defaultEntry;
|
|
92
|
+
return {
|
|
93
|
+
list: () => [...folders.keys()].sort(),
|
|
94
|
+
meta,
|
|
95
|
+
files(src) {
|
|
96
|
+
let hit = filesCache.get(src);
|
|
97
|
+
if (!hit) {
|
|
98
|
+
hit = (async () => {
|
|
99
|
+
const entry = await entryFor(src);
|
|
100
|
+
const found = Object.entries(options.sources)
|
|
101
|
+
.map(([key, value]) => ({ path: inFolder(src, key), value }))
|
|
102
|
+
.filter((f) => !!f.path && f.path !== "meta.json" && !options.exclude?.(f.path, src));
|
|
103
|
+
const files = await Promise.all(found.map(async ({ path, value }) => {
|
|
104
|
+
const content = await unwrap(value);
|
|
105
|
+
const text = typeof content === "string"
|
|
106
|
+
? content
|
|
107
|
+
: content && typeof content === "object" && typeof content.default === "string"
|
|
108
|
+
? content.default
|
|
109
|
+
: String(content);
|
|
110
|
+
return { path, content: text, language: languageForPath(path) };
|
|
111
|
+
}));
|
|
112
|
+
return sortDemoFiles(files, entry);
|
|
113
|
+
})();
|
|
114
|
+
filesCache.set(src, hit);
|
|
115
|
+
}
|
|
116
|
+
return hit;
|
|
117
|
+
},
|
|
118
|
+
load(src) {
|
|
119
|
+
let hit = loadCache.get(src);
|
|
120
|
+
if (!hit) {
|
|
121
|
+
hit = (async () => {
|
|
122
|
+
const entry = await entryFor(src);
|
|
123
|
+
const keys = Object.keys(options.modules).filter((k) => inFolder(src, k) !== null);
|
|
124
|
+
const key = keys.find((k) => inFolder(src, k) === entry) ?? keys[0];
|
|
125
|
+
if (!key)
|
|
126
|
+
throw new Error(`No demo module found for ${src}`);
|
|
127
|
+
return demoComponentFrom(await unwrap(options.modules[key]), src);
|
|
128
|
+
})();
|
|
129
|
+
hit.catch(() => loadCache.delete(src));
|
|
130
|
+
loadCache.set(src, hit);
|
|
131
|
+
}
|
|
132
|
+
return hit;
|
|
133
|
+
},
|
|
134
|
+
...(options.href ? { href: options.href } : {}),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* The conventional deep link for one demo: `?demo=<src>` on the current page
|
|
139
|
+
* (or `base`). Hosts route it to `<DemoFullscreen>`; see `demoFromSearch`.
|
|
140
|
+
*/
|
|
141
|
+
export function demoHref(src, options = {}) {
|
|
142
|
+
const base = options.base ?? (typeof location === "undefined" ? "/" : location.pathname);
|
|
143
|
+
const params = new URLSearchParams({ [options.param ?? "demo"]: src });
|
|
144
|
+
if (options.variant)
|
|
145
|
+
params.set("variant", options.variant);
|
|
146
|
+
return `${base}?${params.toString().replace(/%2F/gi, "/")}`;
|
|
147
|
+
}
|
|
148
|
+
/** Reads the `?demo=<src>` (and optional `variant`) deep link. */
|
|
149
|
+
export function demoFromSearch(search, param = "demo") {
|
|
150
|
+
const query = search ?? (typeof location === "undefined" ? "" : location.search);
|
|
151
|
+
const params = new URLSearchParams(query);
|
|
152
|
+
const src = params.get(param);
|
|
153
|
+
if (!src)
|
|
154
|
+
return null;
|
|
155
|
+
const variant = params.get("variant");
|
|
156
|
+
return variant ? { src, variant } : { src };
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=glob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/demo/glob.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { DocstreamDemoContext, DocstreamDemoRuntimeContext, DocstreamDemoVFSContext, useDemoResolver, useDemoRuntime } from "./context.js";
|
|
2
|
+
export { DemoBlock, DemoFullscreen, DemoViewer, peekDemoSource, prefetchDemoSources, preloadDemos } from "./DemoViewer.js";
|
|
3
|
+
export { DOCSTREAM_CLIPBOARD_TYPE, collectDemoNodes, createDocstreamClipboard, createDocstreamClipboardFromMarkdown, demoNodeMeta, docstreamClipboardItems, docstreamPayloadFromMarkdown, hasDocstreamClipboard, mapDemoNodes, parseDocstreamClipboard, readDocstreamClipboard, readDocstreamClipboardItems, writeDocstreamClipboard, } from "./clipboard.js";
|
|
4
|
+
export type { CreateDocstreamClipboardOptions, DemoSourceSnapshot, DocstreamClipboard, DocstreamClipboardItem, DocstreamClipboardPayload, DocstreamDropItem, } from "./clipboard.js";
|
|
5
|
+
export { CopyDemoButton, useDocstreamCopy } from "./copy-demo.js";
|
|
6
|
+
export type { CopyDemoButtonProps, DocstreamCopy } from "./copy-demo.js";
|
|
7
|
+
export { createDemoVFS, useDemoVFS, useDemoVFSContext, useDemoVFSEntry, useDemoVFSFiles } from "./vfs.js";
|
|
8
|
+
export type { DemoVFS, DemoVFSChange, DemoVFSEntry, DemoVFSResolverOptions } from "./vfs.js";
|
|
9
|
+
export type { DemoFullscreenProps, DemoViewerProps } from "./DemoViewer.js";
|
|
10
|
+
export { createGlobDemoResolver, demoComponentFrom, demoFromSearch, demoHref, languageForPath, sortDemoFiles, } from "./glob.js";
|
|
11
|
+
export type { GlobDemoResolverOptions } from "./glob.js";
|
|
12
|
+
export { defaultDemoMarkdown, inlineDemoMarkdown, inlineDemoNode, resolveDemosToMarkdown, toInlineFiles } from "./markdown.js";
|
|
13
|
+
export { cssToSurface, surfaceToCss } from "./surface.js";
|
|
14
|
+
export type { DemoMarkdownFormat, ResolveDemosOptions, ResolvedDemo } from "./markdown.js";
|
|
15
|
+
export type { DemoComponent, DemoComponentProps, DemoFile, DemoMeta, DemoResolver, DemoRuntimeOptions, DemoVariant, InlineDemoRuntime, InlineDemoRuntimeProps, } from "./types.js";
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|