deepspace 0.10.0 → 0.10.2
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/CHANGELOG.md +15 -0
- package/dist/{chunk-DQ4G6VL6.js → chunk-T7V4GUIN.js} +283 -180
- package/dist/chunk-T7V4GUIN.js.map +1 -0
- package/dist/cli.js +1010 -6123
- package/dist/cli.js.map +1 -1
- package/dist/documentation-client-core.d.ts +18 -0
- package/dist/{docs-client-core.js → documentation-client-core.js} +60 -51
- package/dist/documentation-client-core.js.map +1 -0
- package/dist/documentation-default-renderer.cjs +124 -0
- package/dist/documentation-react.d.ts +2 -0
- package/dist/{docs-react.js → documentation-react.js} +8 -8
- package/dist/documentation-runtime.js +71 -0
- package/dist/documentation-server-core.d.ts +11 -0
- package/dist/{docs-server-core.js → documentation-server-core.js} +13 -13
- package/dist/documentation-server-core.js.map +1 -0
- package/dist/documentation.d.ts +366 -0
- package/dist/documentation.js +3953 -0
- package/dist/documentation.js.map +1 -0
- package/dist/feature-installer.js +145 -0
- package/dist/feature-installer.js.map +1 -1
- package/dist/index.d.ts +6 -8
- package/dist/index.js +5 -15
- package/dist/index.js.map +1 -1
- package/dist/public-BGRX_Cjd.d.ts +234 -0
- package/dist/schema.d.ts +186 -0
- package/dist/schema.js +610 -0
- package/dist/schema.js.map +1 -0
- package/dist/server.d.ts +19 -167
- package/dist/server.js +76 -1069
- package/dist/server.js.map +1 -1
- package/dist/testing.d.ts +5 -8
- package/dist/testing.js +48 -14
- package/dist/testing.js.map +1 -1
- package/dist/worker.d.ts +52 -173
- package/dist/worker.js +563 -492
- package/dist/worker.js.map +1 -1
- package/features/admin-page/src/admin-schema.ts +1 -1
- package/features/ai-chat/feature.json +2 -2
- package/features/ai-chat/src/ChatPanel.tsx +0 -1
- package/features/ai-chat/src/ai-chat-schema.ts +1 -2
- package/features/canvas/src/canvas-schema.ts +1 -1
- package/features/documentation/content/index.mdx +14 -0
- package/features/documentation/content/quickstart.mdx +12 -0
- package/features/documentation/documentation.json +18 -0
- package/features/documentation/feature.json +68 -0
- package/features/{docs → documents}/feature.json +27 -27
- package/features/{docs/src/DocsEditorPage.tsx → documents/src/DocumentsEditorPage.tsx} +74 -74
- package/features/{docs/src/DocsListPage.tsx → documents/src/DocumentsListPage.tsx} +102 -102
- package/features/{docs/src/DocsOutlinePanel.tsx → documents/src/DocumentsOutlinePanel.tsx} +9 -9
- package/features/{docs/src/DocsPresence.tsx → documents/src/DocumentsPresence.tsx} +18 -18
- package/features/{docs → documents}/src/InviteDialog.tsx +21 -21
- package/features/{docs → documents}/src/LibrarySidebar.tsx +25 -25
- package/features/documents/src/__tests__/documents-presence-access.test.ts +71 -0
- package/features/{docs/src/docs-library-types.ts → documents/src/documents-library-types.ts} +3 -3
- package/features/{docs/src/docs-schema.ts → documents/src/documents-schema.ts} +6 -6
- package/features/{docs/src/docs-ui.css → documents/src/documents-ui.css} +89 -89
- package/features/{docs → documents}/src/editor/DocEditorSurface.tsx +11 -11
- package/features/{docs/src/editor/DocsTiptapToolbar.tsx → documents/src/editor/DocumentsTiptapToolbar.tsx} +21 -21
- package/features/{docs → documents}/src/editor/useDocEditor.ts +4 -4
- package/features/{docs/src/use-docs-presence-access.ts → documents/src/use-documents-presence-access.ts} +51 -51
- package/features/file-attachments/src/attachments-schema.ts +1 -1
- package/features/items/src/items-schema.ts +1 -1
- package/features/leaderboard/src/leaderboard-schema.ts +1 -1
- package/features/messaging/src/ChatMultiPage.tsx +1 -1
- package/features/messaging/src/ChatPage.tsx +1 -1
- package/features/messaging/src/messaging-schema.ts +2 -2
- package/features/tasks/src/tasks-schema.ts +1 -1
- package/features/testing/src/test-schema.ts +2 -2
- package/package.json +12 -7
- package/dist/chunk-DQ4G6VL6.js.map +0 -1
- package/dist/docs-client-core.d.ts +0 -18
- package/dist/docs-client-core.js.map +0 -1
- package/dist/docs-react.d.ts +0 -2
- package/dist/docs-runtime.js +0 -71
- package/dist/docs-server-core.d.ts +0 -11
- package/dist/docs-server-core.js.map +0 -1
- package/dist/docs.d.ts +0 -350
- package/dist/docs.js +0 -5139
- package/dist/docs.js.map +0 -1
- package/dist/public-Cp1X8ZQ3.d.ts +0 -230
- package/features/docs/src/__tests__/docs-presence-access.test.ts +0 -71
- /package/dist/{docs-react.js.map → documentation-react.js.map} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
// src/
|
|
1
|
+
// src/documentation/runtime/app.tsx
|
|
2
2
|
import {
|
|
3
3
|
useCallback,
|
|
4
4
|
useEffect as useEffect7,
|
|
5
5
|
useState as useState6
|
|
6
6
|
} from "react";
|
|
7
7
|
|
|
8
|
-
// src/
|
|
8
|
+
// src/documentation/runtime/article.tsx
|
|
9
9
|
import {
|
|
10
10
|
useEffect as useEffect2,
|
|
11
11
|
useMemo,
|
|
@@ -13,7 +13,76 @@ import {
|
|
|
13
13
|
useState as useState2
|
|
14
14
|
} from "react";
|
|
15
15
|
|
|
16
|
-
// src/
|
|
16
|
+
// src/documentation/types.ts
|
|
17
|
+
var DocumentationError = class extends Error {
|
|
18
|
+
code;
|
|
19
|
+
diagnostics;
|
|
20
|
+
constructor(message, code, diagnostics = []) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = "DocumentationError";
|
|
23
|
+
this.code = code;
|
|
24
|
+
this.diagnostics = diagnostics;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// src/documentation/routing.ts
|
|
29
|
+
function collapseRoute(value) {
|
|
30
|
+
let route = `/${value}`.replace(/\/{2,}/g, "/");
|
|
31
|
+
if (route.length > 1) route = route.replace(/\/$/, "");
|
|
32
|
+
return route;
|
|
33
|
+
}
|
|
34
|
+
function normalizeRoute(value) {
|
|
35
|
+
assertSafeRoute(value);
|
|
36
|
+
let route = collapseRoute(value);
|
|
37
|
+
route = route.replace(/\.(?:md|mdx)$/i, "");
|
|
38
|
+
route = route.replace(/\/index$/i, "");
|
|
39
|
+
return route || "/";
|
|
40
|
+
}
|
|
41
|
+
function normalizeDocumentationBasePath(value) {
|
|
42
|
+
if (!value || value === "/") return "";
|
|
43
|
+
const normalized = normalizeRoute(value);
|
|
44
|
+
if (normalized === "/_documentation") {
|
|
45
|
+
throw new DocumentationError("The internal /_documentation namespace cannot be a public documentation base", "documentation_base_invalid");
|
|
46
|
+
}
|
|
47
|
+
return normalized;
|
|
48
|
+
}
|
|
49
|
+
function documentationPublicPath(basePath, path) {
|
|
50
|
+
const base = normalizeDocumentationBasePath(basePath);
|
|
51
|
+
const suffix = path.startsWith("/") ? path : `/${path}`;
|
|
52
|
+
if (suffix === "/") return base || "/";
|
|
53
|
+
return `${base}${suffix}`;
|
|
54
|
+
}
|
|
55
|
+
function documentationLogicalPath(basePath, pathname) {
|
|
56
|
+
const base = normalizeDocumentationBasePath(basePath);
|
|
57
|
+
if (!base) return pathname.startsWith("/") ? pathname : `/${pathname}`;
|
|
58
|
+
if (pathname === base) return "/";
|
|
59
|
+
if (!pathname.startsWith(`${base}/`)) return null;
|
|
60
|
+
return pathname.slice(base.length) || "/";
|
|
61
|
+
}
|
|
62
|
+
function assertSafeRoute(value) {
|
|
63
|
+
if (value.includes("\\") || value.includes("\0")) throw unsafeRoute(value);
|
|
64
|
+
let decoded = value;
|
|
65
|
+
for (let pass = 0; pass < 5; pass++) {
|
|
66
|
+
let next;
|
|
67
|
+
try {
|
|
68
|
+
next = decodeURIComponent(decoded);
|
|
69
|
+
} catch {
|
|
70
|
+
throw unsafeRoute(value);
|
|
71
|
+
}
|
|
72
|
+
if (next === decoded) break;
|
|
73
|
+
decoded = next;
|
|
74
|
+
}
|
|
75
|
+
if (decoded.includes("\\") || decoded.includes("\0") || decoded.split("/").some((segment) => segment === "." || segment === "..")) throw unsafeRoute(value);
|
|
76
|
+
}
|
|
77
|
+
function unsafeRoute(value) {
|
|
78
|
+
return new DocumentationError(
|
|
79
|
+
`Documentation route contains an unsafe path segment: ${value}`,
|
|
80
|
+
"documentation_route_invalid",
|
|
81
|
+
[{ code: "route_path_escape", message: value }]
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// src/documentation/runtime/browser.ts
|
|
17
86
|
async function writeClipboardText(text) {
|
|
18
87
|
try {
|
|
19
88
|
if (navigator.clipboard?.writeText) {
|
|
@@ -61,7 +130,7 @@ function errorMessage(error) {
|
|
|
61
130
|
return error instanceof Error ? error.message : String(error);
|
|
62
131
|
}
|
|
63
132
|
|
|
64
|
-
// src/
|
|
133
|
+
// src/documentation/runtime/icons.tsx
|
|
65
134
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
66
135
|
function Icon({ children, ...props }) {
|
|
67
136
|
return /* @__PURE__ */ jsx(
|
|
@@ -80,7 +149,7 @@ function Icon({ children, ...props }) {
|
|
|
80
149
|
function OrbitMark(props) {
|
|
81
150
|
return /* @__PURE__ */ jsxs(Icon, { viewBox: "0 0 32 32", ...props, children: [
|
|
82
151
|
/* @__PURE__ */ jsx("path", { d: "M16 2.5c.5 7.7 5.8 13 13.5 13.5-7.7.5-13 5.8-13.5 13.5C15.5 21.8 10.2 16.5 2.5 16 10.2 15.5 15.5 10.2 16 2.5Z", fill: "currentColor" }),
|
|
83
|
-
/* @__PURE__ */ jsx("circle", { cx: "16", cy: "16", fill: "var(--
|
|
152
|
+
/* @__PURE__ */ jsx("circle", { cx: "16", cy: "16", fill: "var(--documentation-bg)", r: "3.25" }),
|
|
84
153
|
/* @__PURE__ */ jsx("path", { d: "M4.5 22.7c5.6-2 16.4-8.3 22.7-14.1", opacity: ".45", stroke: "currentColor", strokeLinecap: "round" })
|
|
85
154
|
] });
|
|
86
155
|
}
|
|
@@ -169,7 +238,7 @@ function StopIcon(props) {
|
|
|
169
238
|
return /* @__PURE__ */ jsx(Icon, { ...props, children: /* @__PURE__ */ jsx("rect", { x: "6", y: "6", width: "12", height: "12", rx: "2", fill: "currentColor" }) });
|
|
170
239
|
}
|
|
171
240
|
|
|
172
|
-
// src/
|
|
241
|
+
// src/documentation/runtime/page-actions.tsx
|
|
173
242
|
import { useEffect, useRef, useState } from "react";
|
|
174
243
|
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
175
244
|
function PageActions({
|
|
@@ -179,7 +248,7 @@ function PageActions({
|
|
|
179
248
|
const [copied, setCopied] = useState(null);
|
|
180
249
|
const detailsRef = useRef(null);
|
|
181
250
|
const actions = data.config.contextual.actions.filter((action) => {
|
|
182
|
-
if (
|
|
251
|
+
if (data.page.route === "/404") return false;
|
|
183
252
|
if (action === "assistant" && data.config.assistant.access === "disabled") return false;
|
|
184
253
|
if ((action === "mcp" || action === "add-mcp" || action === "cursor" || action === "vscode") && data.config.mcp.access !== "public") return false;
|
|
185
254
|
return true;
|
|
@@ -213,18 +282,24 @@ function PageActions({
|
|
|
213
282
|
if (!response.ok) return;
|
|
214
283
|
await writeClipboardText(await response.text());
|
|
215
284
|
markCopied("copy");
|
|
285
|
+
closeMenu();
|
|
216
286
|
};
|
|
217
287
|
const copyMcp = async () => {
|
|
218
|
-
await writeClipboardText(new URL("/mcp", window.location.origin).toString());
|
|
288
|
+
await writeClipboardText(new URL(documentationPublicPath(data.basePath, "/mcp"), window.location.origin).toString());
|
|
219
289
|
markCopied("mcp");
|
|
290
|
+
closeMenu();
|
|
220
291
|
};
|
|
221
292
|
const copyMcpInstall = async () => {
|
|
222
|
-
const mcpUrl = new URL("/mcp", window.location.origin).toString();
|
|
293
|
+
const mcpUrl = new URL(documentationPublicPath(data.basePath, "/mcp"), window.location.origin).toString();
|
|
223
294
|
await writeClipboardText(`npx add-mcp ${mcpUrl}`);
|
|
224
295
|
markCopied("add-mcp");
|
|
296
|
+
closeMenu();
|
|
225
297
|
};
|
|
226
298
|
const closeMenu = () => {
|
|
227
|
-
|
|
299
|
+
const details = detailsRef.current;
|
|
300
|
+
if (!details?.open) return;
|
|
301
|
+
details.open = false;
|
|
302
|
+
details.querySelector("summary")?.focus();
|
|
228
303
|
};
|
|
229
304
|
const openAiContext = (provider) => {
|
|
230
305
|
const markdownUrl = new URL(data.page.markdownUrl, window.location.origin).toString();
|
|
@@ -235,8 +310,8 @@ function PageActions({
|
|
|
235
310
|
closeMenu();
|
|
236
311
|
};
|
|
237
312
|
const openMcpEditor = (editor) => {
|
|
238
|
-
const mcpUrl = new URL("/mcp", window.location.origin).toString();
|
|
239
|
-
const name = data.config.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/(^-|-$)/g, "") || "
|
|
313
|
+
const mcpUrl = new URL(documentationPublicPath(data.basePath, "/mcp"), window.location.origin).toString();
|
|
314
|
+
const name = data.config.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/(^-|-$)/g, "") || "documentation";
|
|
240
315
|
if (editor === "cursor") {
|
|
241
316
|
const config = window.btoa(JSON.stringify({ url: mcpUrl }));
|
|
242
317
|
window.location.href = `cursor://anysphere.cursor-deeplink/mcp/install?name=${encodeURIComponent(name)}&config=${encodeURIComponent(config)}`;
|
|
@@ -247,12 +322,12 @@ function PageActions({
|
|
|
247
322
|
closeMenu();
|
|
248
323
|
};
|
|
249
324
|
const content = (icon, label, description, menuItem, external = false) => menuItem ? /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
250
|
-
/* @__PURE__ */ jsx2("span", { className: "
|
|
251
|
-
/* @__PURE__ */ jsxs2("span", { className: "
|
|
325
|
+
/* @__PURE__ */ jsx2("span", { className: "documentation-contextual-action-icon", children: icon }),
|
|
326
|
+
/* @__PURE__ */ jsxs2("span", { className: "documentation-contextual-action-copy", children: [
|
|
252
327
|
/* @__PURE__ */ jsx2("strong", { children: label }),
|
|
253
328
|
/* @__PURE__ */ jsx2("small", { children: description })
|
|
254
329
|
] }),
|
|
255
|
-
external && /* @__PURE__ */ jsx2(ExternalIcon, { className: "
|
|
330
|
+
external && /* @__PURE__ */ jsx2(ExternalIcon, { className: "documentation-contextual-action-external" })
|
|
256
331
|
] }) : /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
257
332
|
icon,
|
|
258
333
|
label
|
|
@@ -287,16 +362,16 @@ function PageActions({
|
|
|
287
362
|
const label = copied === action ? "Page copied" : "Copy page";
|
|
288
363
|
return /* @__PURE__ */ jsx2("button", { role, type: "button", onClick: copyPage, children: content(copied === action ? /* @__PURE__ */ jsx2(CheckIcon, {}) : /* @__PURE__ */ jsx2(CopyIcon, {}), label, "Copy page as Markdown for LLMs", menuItem) }, action);
|
|
289
364
|
};
|
|
290
|
-
return /* @__PURE__ */ jsxs2("div", { className: "
|
|
291
|
-
/* @__PURE__ */ jsx2("div", { className: "
|
|
365
|
+
return /* @__PURE__ */ jsxs2("div", { className: "documentation-contextual-actions", "aria-label": "Page actions", children: [
|
|
366
|
+
/* @__PURE__ */ jsx2("div", { className: "documentation-contextual-primary", "aria-live": "polite", children: renderAction(primary) }),
|
|
292
367
|
actions.length > 0 && /* @__PURE__ */ jsxs2("details", { ref: detailsRef, children: [
|
|
293
368
|
/* @__PURE__ */ jsx2("summary", { "aria-label": "More page actions", children: /* @__PURE__ */ jsx2(ChevronDownIcon, {}) }),
|
|
294
|
-
/* @__PURE__ */ jsx2("div", { "aria-label": "More page actions", className: "
|
|
369
|
+
/* @__PURE__ */ jsx2("div", { "aria-label": "More page actions", className: "documentation-contextual-menu", role: "menu", children: actions.map((action) => renderAction(action, true)) })
|
|
295
370
|
] })
|
|
296
371
|
] });
|
|
297
372
|
}
|
|
298
373
|
|
|
299
|
-
// src/
|
|
374
|
+
// src/documentation/runtime/article.tsx
|
|
300
375
|
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
301
376
|
function Article({
|
|
302
377
|
children,
|
|
@@ -305,27 +380,27 @@ function Article({
|
|
|
305
380
|
}) {
|
|
306
381
|
const articleRef = useRef2(null);
|
|
307
382
|
useArticleEnhancements(articleRef, data, onAssistantOpen);
|
|
308
|
-
return /* @__PURE__ */ jsxs3("article", { className: "
|
|
383
|
+
return /* @__PURE__ */ jsxs3("article", { className: "documentation-article", ref: articleRef, children: [
|
|
309
384
|
/* @__PURE__ */ jsx3(Breadcrumbs, { items: data.breadcrumbs }),
|
|
310
|
-
/* @__PURE__ */ jsxs3("header", { className: "
|
|
311
|
-
/* @__PURE__ */ jsxs3("div", { className: "
|
|
312
|
-
data.config.theme.eyebrowStyle !== "none" && /* @__PURE__ */ jsx3("div", { className: "
|
|
385
|
+
/* @__PURE__ */ jsxs3("header", { className: "documentation-article-header", children: [
|
|
386
|
+
/* @__PURE__ */ jsxs3("div", { className: "documentation-article-meta", children: [
|
|
387
|
+
data.config.theme.eyebrowStyle !== "none" && /* @__PURE__ */ jsx3("div", { className: "documentation-eyebrow", children: data.page.kind === "openapi" ? "API reference" : data.config.theme.eyebrowStyle === "breadcrumbs" ? data.breadcrumbs.join(" / ") : data.breadcrumbs[0] ?? "Documentation" }),
|
|
313
388
|
/* @__PURE__ */ jsx3(PageActions, { data, onAssistantOpen })
|
|
314
389
|
] }),
|
|
315
390
|
/* @__PURE__ */ jsx3("h1", { children: data.page.title }),
|
|
316
|
-
data.page.description && /* @__PURE__ */ jsx3("p", { className: "
|
|
391
|
+
data.page.description && /* @__PURE__ */ jsx3("p", { className: "documentation-lede", children: data.page.description })
|
|
317
392
|
] }),
|
|
318
|
-
children ?? /* @__PURE__ */ jsx3("div", { className: "
|
|
393
|
+
children ?? /* @__PURE__ */ jsx3("div", { className: "documentation-prose", dangerouslySetInnerHTML: { __html: data.page.html } }),
|
|
319
394
|
data.page.openapi?.playground && /* @__PURE__ */ jsx3(ApiPlayground, { operation: data.page.openapi }),
|
|
320
|
-
/* @__PURE__ */ jsxs3("nav", { className: "
|
|
321
|
-
data.previous ? /* @__PURE__ */ jsxs3("a", { rel: "prev", href: data.previous.route, children: [
|
|
395
|
+
/* @__PURE__ */ jsxs3("nav", { className: "documentation-pagination", "aria-label": "Page navigation", children: [
|
|
396
|
+
data.previous ? /* @__PURE__ */ jsxs3("a", { rel: "prev", href: documentationPublicPath(data.basePath, data.previous.route), children: [
|
|
322
397
|
/* @__PURE__ */ jsx3("small", { children: "Previous" }),
|
|
323
398
|
/* @__PURE__ */ jsxs3("span", { children: [
|
|
324
399
|
/* @__PURE__ */ jsx3(ChevronRightIcon, { className: "is-back" }),
|
|
325
400
|
data.previous.title
|
|
326
401
|
] })
|
|
327
402
|
] }) : /* @__PURE__ */ jsx3("span", {}),
|
|
328
|
-
data.next ? /* @__PURE__ */ jsxs3("a", { rel: "next", href: data.next.route, children: [
|
|
403
|
+
data.next ? /* @__PURE__ */ jsxs3("a", { rel: "next", href: documentationPublicPath(data.basePath, data.next.route), children: [
|
|
329
404
|
/* @__PURE__ */ jsx3("small", { children: "Next" }),
|
|
330
405
|
/* @__PURE__ */ jsxs3("span", { children: [
|
|
331
406
|
data.next.title,
|
|
@@ -336,7 +411,7 @@ function Article({
|
|
|
336
411
|
] });
|
|
337
412
|
}
|
|
338
413
|
function Breadcrumbs({ items }) {
|
|
339
|
-
return /* @__PURE__ */ jsx3("nav", { className: "
|
|
414
|
+
return /* @__PURE__ */ jsx3("nav", { className: "documentation-breadcrumbs", "aria-label": "Breadcrumb", children: items.map((item, index) => /* @__PURE__ */ jsxs3("span", { children: [
|
|
340
415
|
index > 0 && /* @__PURE__ */ jsx3(ChevronRightIcon, {}),
|
|
341
416
|
item
|
|
342
417
|
] }, `${item}:${items.slice(0, index + 1).join("/")}`)) });
|
|
@@ -360,7 +435,7 @@ function ContextRail({
|
|
|
360
435
|
elements.forEach((element) => observer.observe(element));
|
|
361
436
|
return () => observer.disconnect();
|
|
362
437
|
}, [headings]);
|
|
363
|
-
return /* @__PURE__ */ jsx3("aside", { className: "
|
|
438
|
+
return /* @__PURE__ */ jsx3("aside", { className: "documentation-context-rail", "aria-label": "Page context", children: headings.length > 0 && /* @__PURE__ */ jsxs3("nav", { className: "documentation-outline", "aria-label": "On this page", children: [
|
|
364
439
|
/* @__PURE__ */ jsx3("h2", { children: "On this page" }),
|
|
365
440
|
headings.map((heading) => /* @__PURE__ */ jsx3(
|
|
366
441
|
"a",
|
|
@@ -403,8 +478,8 @@ ${text}`);
|
|
|
403
478
|
setSending(false);
|
|
404
479
|
}
|
|
405
480
|
};
|
|
406
|
-
return /* @__PURE__ */ jsxs3("section", { className: "
|
|
407
|
-
/* @__PURE__ */ jsxs3("div", { className: "
|
|
481
|
+
return /* @__PURE__ */ jsxs3("section", { className: "documentation-playground", "data-playground": true, children: [
|
|
482
|
+
/* @__PURE__ */ jsxs3("div", { className: "documentation-playground-title", children: [
|
|
408
483
|
/* @__PURE__ */ jsxs3("div", { children: [
|
|
409
484
|
/* @__PURE__ */ jsx3("span", { className: `method method-${operation.method.toLowerCase()}`, children: operation.method }),
|
|
410
485
|
/* @__PURE__ */ jsx3("strong", { children: "Try this operation" })
|
|
@@ -429,10 +504,10 @@ function useArticleEnhancements(articleRef, data, onAssistantOpen) {
|
|
|
429
504
|
const article = articleRef.current;
|
|
430
505
|
if (!article) return;
|
|
431
506
|
const cleanups = [];
|
|
432
|
-
article.querySelectorAll(".
|
|
433
|
-
if (pre.querySelector(".
|
|
507
|
+
article.querySelectorAll(".documentation-prose pre").forEach((pre) => {
|
|
508
|
+
if (pre.querySelector(".documentation-code-actions")) return;
|
|
434
509
|
const controls = document.createElement("div");
|
|
435
|
-
controls.className = "
|
|
510
|
+
controls.className = "documentation-code-actions";
|
|
436
511
|
const copy = document.createElement("button");
|
|
437
512
|
copy.type = "button";
|
|
438
513
|
copy.setAttribute("aria-label", "Copy code");
|
|
@@ -468,11 +543,11 @@ ${code}`);
|
|
|
468
543
|
});
|
|
469
544
|
});
|
|
470
545
|
article.querySelectorAll("[data-tab-group]").forEach((group, groupIndex) => {
|
|
471
|
-
if (group.querySelector(":scope > .
|
|
546
|
+
if (group.querySelector(":scope > .documentation-tab-buttons")) return;
|
|
472
547
|
const tabs = Array.from(group.querySelectorAll(":scope > [data-tab]"));
|
|
473
548
|
if (tabs.length === 0) return;
|
|
474
549
|
const controls = document.createElement("div");
|
|
475
|
-
controls.className = "
|
|
550
|
+
controls.className = "documentation-tab-buttons";
|
|
476
551
|
controls.setAttribute("role", "tablist");
|
|
477
552
|
const labels = tabs.map((tab, tabIndex) => tab.dataset.tabTitle ?? `Tab ${tabIndex + 1}`);
|
|
478
553
|
const activate = (activeIndex, broadcast = false) => {
|
|
@@ -487,8 +562,8 @@ ${code}`);
|
|
|
487
562
|
if (broadcast) {
|
|
488
563
|
const label = labels[activeIndex];
|
|
489
564
|
if (label) {
|
|
490
|
-
safeStorageSet("deepspace-
|
|
491
|
-
document.dispatchEvent(new CustomEvent("deepspace-
|
|
565
|
+
safeStorageSet("deepspace-documentation-tab-selection", label);
|
|
566
|
+
document.dispatchEvent(new CustomEvent("deepspace-documentation-tab-change", {
|
|
492
567
|
detail: { label, source: group }
|
|
493
568
|
}));
|
|
494
569
|
}
|
|
@@ -497,7 +572,7 @@ ${code}`);
|
|
|
497
572
|
tabs.forEach((tab, tabIndex) => {
|
|
498
573
|
const button = document.createElement("button");
|
|
499
574
|
button.type = "button";
|
|
500
|
-
button.id = `
|
|
575
|
+
button.id = `documentation-tab-${groupIndex}-${tabIndex}`;
|
|
501
576
|
button.setAttribute("role", "tab");
|
|
502
577
|
button.textContent = labels[tabIndex];
|
|
503
578
|
tab.setAttribute("aria-labelledby", button.id);
|
|
@@ -517,7 +592,7 @@ ${code}`);
|
|
|
517
592
|
button.removeEventListener("keydown", keydown);
|
|
518
593
|
});
|
|
519
594
|
});
|
|
520
|
-
const title = group.querySelector(":scope > .
|
|
595
|
+
const title = group.querySelector(":scope > .documentation-code-group-title");
|
|
521
596
|
if (title) group.insertBefore(controls, title.nextSibling);
|
|
522
597
|
if (!title) group.insertBefore(controls, group.firstChild);
|
|
523
598
|
const sync = (event) => {
|
|
@@ -526,12 +601,12 @@ ${code}`);
|
|
|
526
601
|
const matchingIndex = labels.findIndex((label) => label === detail.label);
|
|
527
602
|
if (matchingIndex >= 0) activate(matchingIndex);
|
|
528
603
|
};
|
|
529
|
-
document.addEventListener("deepspace-
|
|
530
|
-
const stored = safeStorageGet("deepspace-
|
|
604
|
+
document.addEventListener("deepspace-documentation-tab-change", sync);
|
|
605
|
+
const stored = safeStorageGet("deepspace-documentation-tab-selection");
|
|
531
606
|
const initial = stored ? labels.findIndex((label) => label === stored) : -1;
|
|
532
607
|
activate(initial >= 0 ? initial : 0);
|
|
533
608
|
cleanups.push(() => {
|
|
534
|
-
document.removeEventListener("deepspace-
|
|
609
|
+
document.removeEventListener("deepspace-documentation-tab-change", sync);
|
|
535
610
|
controls.remove();
|
|
536
611
|
});
|
|
537
612
|
});
|
|
@@ -539,7 +614,7 @@ ${code}`);
|
|
|
539
614
|
}, [articleRef, data.config.assistant.access, data.page.route, data.page.title, onAssistantOpen]);
|
|
540
615
|
}
|
|
541
616
|
|
|
542
|
-
// src/
|
|
617
|
+
// src/documentation/runtime/assistant.tsx
|
|
543
618
|
import {
|
|
544
619
|
useEffect as useEffect4,
|
|
545
620
|
useRef as useRef3,
|
|
@@ -562,8 +637,15 @@ function parseSseLine(line) {
|
|
|
562
637
|
}
|
|
563
638
|
}
|
|
564
639
|
|
|
565
|
-
// src/
|
|
566
|
-
function
|
|
640
|
+
// src/documentation/text.ts
|
|
641
|
+
function documentationSubject(name) {
|
|
642
|
+
const normalized = name.trim();
|
|
643
|
+
if (!normalized || /^documentation$/i.test(normalized)) return "documentation";
|
|
644
|
+
return /(?:\bdocs?|documentation)$/i.test(normalized) ? normalized : `${normalized} documentation`;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// src/documentation/runtime/assistant-transcript.ts
|
|
648
|
+
function completedDocumentationAssistantTranscript(messages, maxMessages = 12) {
|
|
567
649
|
const pairs = [];
|
|
568
650
|
for (let index = 0; index < messages.length - 1; index += 1) {
|
|
569
651
|
const user = messages[index];
|
|
@@ -583,7 +665,7 @@ function completedDocsAssistantHistory(messages, maxMessages = 12) {
|
|
|
583
665
|
return pairs.slice(-pairLimit).flat();
|
|
584
666
|
}
|
|
585
667
|
|
|
586
|
-
// src/
|
|
668
|
+
// src/documentation/runtime/dialog.ts
|
|
587
669
|
import { useEffect as useEffect3 } from "react";
|
|
588
670
|
function useDialogFocus(open, ref, onClose, trap = true, restoreId) {
|
|
589
671
|
useEffect3(() => {
|
|
@@ -625,54 +707,58 @@ function useDialogFocus(open, ref, onClose, trap = true, restoreId) {
|
|
|
625
707
|
}, [onClose, open, ref, restoreId, trap]);
|
|
626
708
|
}
|
|
627
709
|
|
|
628
|
-
// src/
|
|
710
|
+
// src/documentation/runtime/assistant.tsx
|
|
629
711
|
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
630
712
|
function AssistantLauncher({
|
|
713
|
+
input,
|
|
631
714
|
name,
|
|
715
|
+
onInputChange,
|
|
632
716
|
onOpen,
|
|
633
717
|
onSubmit,
|
|
634
718
|
open
|
|
635
719
|
}) {
|
|
636
|
-
const
|
|
720
|
+
const subject = documentationSubject(name);
|
|
637
721
|
const submit = (event) => {
|
|
638
722
|
event.preventDefault();
|
|
639
723
|
const question = input.trim();
|
|
640
724
|
if (!question) return;
|
|
641
|
-
setInput("");
|
|
642
725
|
onSubmit(question);
|
|
643
726
|
};
|
|
644
727
|
if (open) return null;
|
|
645
728
|
return /* @__PURE__ */ jsxs4(
|
|
646
729
|
"form",
|
|
647
730
|
{
|
|
648
|
-
className: "
|
|
649
|
-
id: "deepspace-
|
|
731
|
+
className: "documentation-assistant-launcher",
|
|
732
|
+
id: "deepspace-documentation-assistant-launcher",
|
|
650
733
|
onSubmit: submit,
|
|
651
734
|
children: [
|
|
652
|
-
/* @__PURE__ */ jsxs4("button", { className: "
|
|
735
|
+
/* @__PURE__ */ jsxs4("button", { className: "documentation-launcher-agent", type: "button", onClick: onOpen, "aria-label": `Open the ${subject} agent`, children: [
|
|
653
736
|
"Ask ",
|
|
654
737
|
name
|
|
655
738
|
] }),
|
|
656
739
|
/* @__PURE__ */ jsx4(
|
|
657
740
|
"input",
|
|
658
741
|
{
|
|
659
|
-
"aria-label": `Ask the ${
|
|
660
|
-
id: "deepspace-
|
|
742
|
+
"aria-label": `Ask the ${subject} agent`,
|
|
743
|
+
id: "deepspace-documentation-assistant-launcher-input",
|
|
661
744
|
maxLength: 4e3,
|
|
662
|
-
onChange: (event) =>
|
|
745
|
+
onChange: (event) => onInputChange(event.target.value),
|
|
663
746
|
placeholder: "Ask anything\u2026",
|
|
664
747
|
value: input
|
|
665
748
|
}
|
|
666
749
|
),
|
|
667
|
-
/* @__PURE__ */ jsx4("button", { className: "
|
|
750
|
+
/* @__PURE__ */ jsx4("button", { className: "documentation-launcher-send", type: "submit", disabled: !input.trim(), "aria-label": "Send question to documentation agent", children: /* @__PURE__ */ jsx4(SendIcon, {}) })
|
|
668
751
|
]
|
|
669
752
|
}
|
|
670
753
|
);
|
|
671
754
|
}
|
|
672
|
-
function
|
|
755
|
+
function DocumentationAssistant({
|
|
673
756
|
access,
|
|
757
|
+
basePath,
|
|
758
|
+
input,
|
|
674
759
|
name,
|
|
675
760
|
onClose,
|
|
761
|
+
onInputChange,
|
|
676
762
|
open,
|
|
677
763
|
route,
|
|
678
764
|
seed,
|
|
@@ -684,17 +770,15 @@ function DocsAssistant({
|
|
|
684
770
|
const abortRef = useRef3(null);
|
|
685
771
|
const queuedQuestionRef = useRef3(null);
|
|
686
772
|
const handledSeedRef = useRef3(0);
|
|
687
|
-
const [input, setInput] = useState3(seed.value);
|
|
688
773
|
const [messages, setMessages] = useState3([
|
|
689
|
-
{ id: "welcome", role: "assistant", text: `I can search the ${name}
|
|
774
|
+
{ id: "welcome", role: "assistant", text: `I can search the ${documentationSubject(name)} and cite the exact pages I use.` }
|
|
690
775
|
]);
|
|
691
776
|
const [sending, setSending] = useState3(false);
|
|
692
|
-
useDialogFocus(open, panelRef, onClose, false, "deepspace-
|
|
777
|
+
useDialogFocus(open, panelRef, onClose, false, "deepspace-documentation-assistant-launcher-input");
|
|
693
778
|
useEffect4(() => {
|
|
694
779
|
if (!open || seed.id === 0 || handledSeedRef.current === seed.id) return;
|
|
695
780
|
handledSeedRef.current = seed.id;
|
|
696
|
-
|
|
697
|
-
if (!seed.submit || !seed.value.trim()) return;
|
|
781
|
+
if (!seed.submit || !seed.value?.trim()) return;
|
|
698
782
|
queuedQuestionRef.current = seed.value;
|
|
699
783
|
const frame = window.requestAnimationFrame(() => formRef.current?.requestSubmit());
|
|
700
784
|
return () => window.cancelAnimationFrame(frame);
|
|
@@ -710,8 +794,8 @@ function DocsAssistant({
|
|
|
710
794
|
const question = (queuedQuestionRef.current ?? input).trim();
|
|
711
795
|
queuedQuestionRef.current = null;
|
|
712
796
|
if (!question || sending) return;
|
|
713
|
-
const
|
|
714
|
-
|
|
797
|
+
const transcript = completedDocumentationAssistantTranscript(messages);
|
|
798
|
+
onInputChange("");
|
|
715
799
|
setSending(true);
|
|
716
800
|
const userId = `user-${Date.now()}`;
|
|
717
801
|
const answerId = `assistant-${Date.now()}`;
|
|
@@ -728,8 +812,7 @@ function DocsAssistant({
|
|
|
728
812
|
}, 12e4);
|
|
729
813
|
try {
|
|
730
814
|
const headers = {
|
|
731
|
-
"Content-Type": "application/json"
|
|
732
|
-
"x-deepspace-surface": "docs"
|
|
815
|
+
"Content-Type": "application/json"
|
|
733
816
|
};
|
|
734
817
|
if (access === "authenticated") {
|
|
735
818
|
const tokenResponse = await fetch("/api/auth/token", { method: "POST", credentials: "include", headers: { "Content-Type": "application/json" } });
|
|
@@ -737,10 +820,10 @@ function DocsAssistant({
|
|
|
737
820
|
if (!tokenData?.token) throw new Error("Sign in to use the documentation assistant.");
|
|
738
821
|
headers.Authorization = `Bearer ${tokenData.token}`;
|
|
739
822
|
}
|
|
740
|
-
const response = await fetch("/api/ai
|
|
823
|
+
const response = await fetch(documentationPublicPath(basePath, "/api/ai"), {
|
|
741
824
|
method: "POST",
|
|
742
825
|
headers,
|
|
743
|
-
body: JSON.stringify({ question, route, messages:
|
|
826
|
+
body: JSON.stringify({ question, route, messages: transcript }),
|
|
744
827
|
signal: controller.signal
|
|
745
828
|
});
|
|
746
829
|
if (!response.ok || !response.body) {
|
|
@@ -758,7 +841,7 @@ function DocsAssistant({
|
|
|
758
841
|
answer += data.delta;
|
|
759
842
|
setMessages((current) => current.map((message) => message.id === answerId ? { ...message, text: answer, state: "streaming", status: void 0 } : message));
|
|
760
843
|
} else if (data.type === "tool-input-available") {
|
|
761
|
-
const status = data.toolName === "
|
|
844
|
+
const status = data.toolName === "documentation_read" ? "Reading the relevant source pages\u2026" : "Searching this documentation\u2026";
|
|
762
845
|
setMessages((current) => current.map((message) => message.id === answerId ? { ...message, status } : message));
|
|
763
846
|
} else if (data.type === "tool-output-available") {
|
|
764
847
|
setMessages((current) => current.map((message) => message.id === answerId ? { ...message, status: "Reviewing the source material\u2026" } : message));
|
|
@@ -792,14 +875,14 @@ function DocsAssistant({
|
|
|
792
875
|
"aside",
|
|
793
876
|
{
|
|
794
877
|
"aria-label": "Documentation assistant",
|
|
795
|
-
className: "
|
|
796
|
-
id: "deepspace-
|
|
878
|
+
className: "documentation-assistant",
|
|
879
|
+
id: "deepspace-documentation-assistant",
|
|
797
880
|
ref: panelRef,
|
|
798
881
|
role: "complementary",
|
|
799
882
|
children: [
|
|
800
883
|
/* @__PURE__ */ jsxs4("header", { children: [
|
|
801
884
|
/* @__PURE__ */ jsx4("div", { children: /* @__PURE__ */ jsxs4("span", { children: [
|
|
802
|
-
/* @__PURE__ */ jsxs4("strong", { id: "deepspace-
|
|
885
|
+
/* @__PURE__ */ jsxs4("strong", { id: "deepspace-documentation-assistant-title", children: [
|
|
803
886
|
"Ask ",
|
|
804
887
|
name
|
|
805
888
|
] }),
|
|
@@ -807,34 +890,34 @@ function DocsAssistant({
|
|
|
807
890
|
] }) }),
|
|
808
891
|
/* @__PURE__ */ jsx4("button", { type: "button", onClick: onClose, "aria-label": "Close documentation assistant", children: /* @__PURE__ */ jsx4(CloseIcon, {}) })
|
|
809
892
|
] }),
|
|
810
|
-
/* @__PURE__ */ jsxs4("div", { className: "
|
|
811
|
-
messages.map((message) => /* @__PURE__ */ jsx4("div", { className: `
|
|
893
|
+
/* @__PURE__ */ jsxs4("div", { className: "documentation-assistant-messages", ref: messagesRef, "aria-live": "polite", children: [
|
|
894
|
+
messages.map((message) => /* @__PURE__ */ jsx4("div", { className: `documentation-assistant-message is-${message.role}${message.state ? ` is-${message.state}` : ""}`, children: /* @__PURE__ */ jsxs4("div", { children: [
|
|
812
895
|
message.role === "assistant" ? /* @__PURE__ */ jsx4(AssistantMarkdown, { value: message.text }) : message.text,
|
|
813
|
-
message.state === "streaming" && !message.text && /* @__PURE__ */ jsxs4("span", { className: "
|
|
896
|
+
message.state === "streaming" && !message.text && /* @__PURE__ */ jsxs4("span", { className: "documentation-assistant-activity", role: "status", children: [
|
|
814
897
|
/* @__PURE__ */ jsx4("span", { "aria-hidden": "true" }),
|
|
815
898
|
message.status ?? "Working\u2026"
|
|
816
899
|
] })
|
|
817
900
|
] }) }, message.id)),
|
|
818
|
-
messages.length === 1 && /* @__PURE__ */ jsxs4("div", { className: "
|
|
901
|
+
messages.length === 1 && /* @__PURE__ */ jsxs4("div", { className: "documentation-assistant-suggestions", children: [
|
|
819
902
|
/* @__PURE__ */ jsx4("p", { children: "Try asking" }),
|
|
820
|
-
defaults.map((suggestion) => /* @__PURE__ */ jsx4("button", { type: "button", onClick: () =>
|
|
903
|
+
defaults.map((suggestion) => /* @__PURE__ */ jsx4("button", { type: "button", onClick: () => onInputChange(suggestion), children: suggestion }, suggestion))
|
|
821
904
|
] })
|
|
822
905
|
] }),
|
|
823
|
-
/* @__PURE__ */ jsxs4("form", { className: "
|
|
906
|
+
/* @__PURE__ */ jsxs4("form", { className: "documentation-assistant-composer", onSubmit: submit, ref: formRef, children: [
|
|
824
907
|
/* @__PURE__ */ jsx4(
|
|
825
908
|
"textarea",
|
|
826
909
|
{
|
|
827
910
|
"aria-label": "Ask a documentation question",
|
|
828
911
|
"data-autofocus": true,
|
|
829
912
|
maxLength: 4e3,
|
|
830
|
-
onChange: (event) =>
|
|
913
|
+
onChange: (event) => onInputChange(event.target.value),
|
|
831
914
|
onKeyDown: (event) => {
|
|
832
915
|
if (event.key === "Enter" && !event.shiftKey) {
|
|
833
916
|
event.preventDefault();
|
|
834
917
|
void submit();
|
|
835
918
|
}
|
|
836
919
|
},
|
|
837
|
-
placeholder: "Ask a question about
|
|
920
|
+
placeholder: "Ask a question about this documentation",
|
|
838
921
|
rows: 2,
|
|
839
922
|
value: input
|
|
840
923
|
}
|
|
@@ -866,7 +949,7 @@ function AssistantMarkdown({ value }) {
|
|
|
866
949
|
cursor = index + match[0].length;
|
|
867
950
|
}
|
|
868
951
|
if (cursor < value.length) blocks.push(...renderAssistantText(value.slice(cursor), `text-${cursor}`));
|
|
869
|
-
return /* @__PURE__ */ jsx4("div", { className: "
|
|
952
|
+
return /* @__PURE__ */ jsx4("div", { className: "documentation-assistant-markdown", children: blocks });
|
|
870
953
|
}
|
|
871
954
|
function AssistantCodeBlock({ code, language }) {
|
|
872
955
|
const [copied, setCopied] = useState3(false);
|
|
@@ -875,7 +958,7 @@ function AssistantCodeBlock({ code, language }) {
|
|
|
875
958
|
setCopied(true);
|
|
876
959
|
window.setTimeout(() => setCopied(false), 1400);
|
|
877
960
|
};
|
|
878
|
-
return /* @__PURE__ */ jsxs4("figure", { className: "
|
|
961
|
+
return /* @__PURE__ */ jsxs4("figure", { className: "documentation-assistant-code", children: [
|
|
879
962
|
/* @__PURE__ */ jsxs4("figcaption", { children: [
|
|
880
963
|
/* @__PURE__ */ jsx4("span", { children: language || "Code" }),
|
|
881
964
|
/* @__PURE__ */ jsx4("button", { type: "button", onClick: copy, children: copied ? "Copied" : "Copy" })
|
|
@@ -895,7 +978,7 @@ function renderAssistantText(value, keyPrefix) {
|
|
|
895
978
|
}
|
|
896
979
|
const heading = line.match(/^(#{1,4})\s+(.+)$/);
|
|
897
980
|
if (heading) {
|
|
898
|
-
blocks.push(/* @__PURE__ */ jsx4("strong", { className: "
|
|
981
|
+
blocks.push(/* @__PURE__ */ jsx4("strong", { className: "documentation-assistant-heading", children: renderInlineMarkdown(heading[2]) }, `${keyPrefix}-heading-${index}`));
|
|
899
982
|
index += 1;
|
|
900
983
|
continue;
|
|
901
984
|
}
|
|
@@ -939,37 +1022,37 @@ function renderInlineMarkdown(value) {
|
|
|
939
1022
|
});
|
|
940
1023
|
}
|
|
941
1024
|
|
|
942
|
-
// src/
|
|
1025
|
+
// src/documentation/runtime/navigation.tsx
|
|
943
1026
|
import { useEffect as useEffect5, useRef as useRef4, useState as useState4 } from "react";
|
|
944
1027
|
import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
945
|
-
function
|
|
1028
|
+
function DocumentationHeader({
|
|
946
1029
|
data,
|
|
947
1030
|
onMenuOpen,
|
|
948
1031
|
onSearchOpen
|
|
949
1032
|
}) {
|
|
950
|
-
return /* @__PURE__ */ jsxs5("header", { className: "
|
|
1033
|
+
return /* @__PURE__ */ jsxs5("header", { className: "documentation-header", children: [
|
|
951
1034
|
/* @__PURE__ */ jsx5(
|
|
952
1035
|
"a",
|
|
953
1036
|
{
|
|
954
|
-
className: "
|
|
955
|
-
href: data.config.theme.logoHref ?? "/",
|
|
956
|
-
"aria-label": `${data.config.name}
|
|
957
|
-
...externalProps(data.config.theme.logoHref ?? "/"),
|
|
1037
|
+
className: "documentation-brand",
|
|
1038
|
+
href: data.config.theme.logoHref ?? documentationPublicPath(data.basePath, "/"),
|
|
1039
|
+
"aria-label": `${documentationSubject(data.config.name)} home`,
|
|
1040
|
+
...externalProps(data.config.theme.logoHref ?? documentationPublicPath(data.basePath, "/")),
|
|
958
1041
|
children: /* @__PURE__ */ jsx5(BrandLogo, { data })
|
|
959
1042
|
}
|
|
960
1043
|
),
|
|
961
|
-
/* @__PURE__ */ jsx5("div", { className: "
|
|
1044
|
+
/* @__PURE__ */ jsx5("div", { className: "documentation-header-center", children: /* @__PURE__ */ jsxs5("button", { className: "documentation-search-trigger", type: "button", onClick: onSearchOpen, "aria-label": "Search documentation", children: [
|
|
962
1045
|
/* @__PURE__ */ jsx5(SearchIcon, {}),
|
|
963
1046
|
/* @__PURE__ */ jsx5("span", { children: "Search documentation" }),
|
|
964
1047
|
/* @__PURE__ */ jsx5("kbd", { children: "\u2318K" })
|
|
965
1048
|
] }) }),
|
|
966
|
-
/* @__PURE__ */ jsx5("nav", { className: "
|
|
1049
|
+
/* @__PURE__ */ jsx5("nav", { className: "documentation-top-links", "aria-label": "Product navigation", children: data.config.links.map((link) => /* @__PURE__ */ jsxs5("a", { href: link.href, ...externalProps(link.href), children: [
|
|
967
1050
|
link.label,
|
|
968
1051
|
isExternal(link.href) && /* @__PURE__ */ jsx5(ExternalIcon, {})
|
|
969
1052
|
] }, `${link.label}:${link.href}`)) }),
|
|
970
|
-
/* @__PURE__ */ jsxs5("div", { className: "
|
|
971
|
-
/* @__PURE__ */ jsx5("button", { className: "
|
|
972
|
-
/* @__PURE__ */ jsx5("button", { className: "
|
|
1053
|
+
/* @__PURE__ */ jsxs5("div", { className: "documentation-mobile-actions", children: [
|
|
1054
|
+
/* @__PURE__ */ jsx5("button", { className: "documentation-icon-button", type: "button", onClick: onSearchOpen, "aria-label": "Search documentation", children: /* @__PURE__ */ jsx5(SearchIcon, {}) }),
|
|
1055
|
+
/* @__PURE__ */ jsx5("button", { className: "documentation-icon-button", type: "button", onClick: onMenuOpen, "aria-label": "Open documentation navigation", children: /* @__PURE__ */ jsx5(MenuIcon, {}) })
|
|
973
1056
|
] })
|
|
974
1057
|
] });
|
|
975
1058
|
}
|
|
@@ -977,21 +1060,20 @@ function BrandLogo({ data }) {
|
|
|
977
1060
|
const { logo, logoDark } = data.config.theme;
|
|
978
1061
|
if (logo) {
|
|
979
1062
|
return /* @__PURE__ */ jsxs5(Fragment2, { children: [
|
|
980
|
-
/* @__PURE__ */ jsx5("img", { className: "
|
|
981
|
-
/* @__PURE__ */ jsx5("img", { className: "
|
|
982
|
-
/* @__PURE__ */ jsx5("span", { className: "
|
|
1063
|
+
/* @__PURE__ */ jsx5("img", { className: "documentation-brand-logo documentation-brand-logo-light", src: logo, alt: "" }),
|
|
1064
|
+
/* @__PURE__ */ jsx5("img", { className: "documentation-brand-logo documentation-brand-logo-dark", src: logoDark ?? logo, alt: "" }),
|
|
1065
|
+
/* @__PURE__ */ jsx5("span", { className: "documentation-brand-product", children: "Documentation" })
|
|
983
1066
|
] });
|
|
984
1067
|
}
|
|
985
1068
|
return /* @__PURE__ */ jsxs5(Fragment2, { children: [
|
|
986
|
-
/* @__PURE__ */ jsx5("span", { className: "
|
|
987
|
-
/* @__PURE__ */ jsx5("span", { className: "
|
|
988
|
-
/* @__PURE__ */ jsx5("span", { className: "docs-brand-product", children: "Docs" })
|
|
1069
|
+
/* @__PURE__ */ jsx5("span", { className: "documentation-brand-mark", children: /* @__PURE__ */ jsx5(OrbitMark, {}) }),
|
|
1070
|
+
/* @__PURE__ */ jsx5("span", { className: "documentation-brand-name", children: data.config.name })
|
|
989
1071
|
] });
|
|
990
1072
|
}
|
|
991
1073
|
function DesktopSidebar({ data }) {
|
|
992
|
-
return /* @__PURE__ */ jsxs5("aside", { className: "
|
|
993
|
-
/* @__PURE__ */ jsx5("nav", { className: "
|
|
994
|
-
/* @__PURE__ */ jsxs5("div", { className: "
|
|
1074
|
+
return /* @__PURE__ */ jsxs5("aside", { className: "documentation-sidebar", "aria-label": "Documentation navigation", children: [
|
|
1075
|
+
/* @__PURE__ */ jsx5("nav", { className: "documentation-page-tree", children: /* @__PURE__ */ jsx5(NavigationTree, { activeRoute: data.page.route, basePath: data.basePath, nodes: data.navigation }) }),
|
|
1076
|
+
/* @__PURE__ */ jsxs5("div", { className: "documentation-sidebar-footer", children: [
|
|
995
1077
|
!data.config.theme.strictMode && /* @__PURE__ */ jsx5(ThemeControls, { defaultMode: data.config.theme.defaultMode ?? "system" }),
|
|
996
1078
|
data.config.footer.length > 0 && /* @__PURE__ */ jsx5("nav", { "aria-label": "Documentation footer", children: data.config.footer.map((link) => /* @__PURE__ */ jsx5("a", { href: link.href, ...externalProps(link.href), children: link.label }, `${link.label}:${link.href}`)) }),
|
|
997
1079
|
/* @__PURE__ */ jsx5("span", { children: "Built on DeepSpace" })
|
|
@@ -1000,6 +1082,7 @@ function DesktopSidebar({ data }) {
|
|
|
1000
1082
|
}
|
|
1001
1083
|
function NavigationTree({
|
|
1002
1084
|
activeRoute,
|
|
1085
|
+
basePath,
|
|
1003
1086
|
depth = 0,
|
|
1004
1087
|
nodes
|
|
1005
1088
|
}) {
|
|
@@ -1007,26 +1090,26 @@ function NavigationTree({
|
|
|
1007
1090
|
if (node.kind === "group") {
|
|
1008
1091
|
const active2 = containsRoute(node, activeRoute);
|
|
1009
1092
|
if (depth === 0) {
|
|
1010
|
-
return /* @__PURE__ */ jsxs5("section", { className: "
|
|
1093
|
+
return /* @__PURE__ */ jsxs5("section", { className: "documentation-nav-section", children: [
|
|
1011
1094
|
/* @__PURE__ */ jsx5("h2", { children: node.label }),
|
|
1012
|
-
/* @__PURE__ */ jsx5(NavigationTree, { activeRoute, depth: depth + 1, nodes: node.items })
|
|
1095
|
+
/* @__PURE__ */ jsx5(NavigationTree, { activeRoute, basePath, depth: depth + 1, nodes: node.items })
|
|
1013
1096
|
] }, `group:${node.label}`);
|
|
1014
1097
|
}
|
|
1015
|
-
return /* @__PURE__ */ jsxs5("details", { className: "
|
|
1098
|
+
return /* @__PURE__ */ jsxs5("details", { className: "documentation-nav-folder", open: active2, children: [
|
|
1016
1099
|
/* @__PURE__ */ jsxs5("summary", { children: [
|
|
1017
1100
|
/* @__PURE__ */ jsx5("span", { children: node.label }),
|
|
1018
1101
|
/* @__PURE__ */ jsx5(ChevronDownIcon, {})
|
|
1019
1102
|
] }),
|
|
1020
|
-
/* @__PURE__ */ jsx5("div", { children: /* @__PURE__ */ jsx5(NavigationTree, { activeRoute, depth: depth + 1, nodes: node.items }) })
|
|
1103
|
+
/* @__PURE__ */ jsx5("div", { children: /* @__PURE__ */ jsx5(NavigationTree, { activeRoute, basePath, depth: depth + 1, nodes: node.items }) })
|
|
1021
1104
|
] }, `group:${node.label}`);
|
|
1022
1105
|
}
|
|
1023
|
-
const href = node.kind === "page" ? node.route : node.href;
|
|
1106
|
+
const href = node.kind === "page" ? documentationPublicPath(basePath, node.route) : node.href;
|
|
1024
1107
|
const active = node.kind === "page" && node.route === activeRoute;
|
|
1025
1108
|
return /* @__PURE__ */ jsxs5(
|
|
1026
1109
|
"a",
|
|
1027
1110
|
{
|
|
1028
1111
|
"aria-current": active ? "page" : void 0,
|
|
1029
|
-
className: active ? "
|
|
1112
|
+
className: active ? "documentation-nav-link is-active" : "documentation-nav-link",
|
|
1030
1113
|
href,
|
|
1031
1114
|
...externalProps(href),
|
|
1032
1115
|
children: [
|
|
@@ -1046,23 +1129,23 @@ function MobileNavigation({
|
|
|
1046
1129
|
const dialogRef = useRef4(null);
|
|
1047
1130
|
useDialogFocus(open, dialogRef, onClose);
|
|
1048
1131
|
if (!open) return null;
|
|
1049
|
-
return /* @__PURE__ */ jsx5("div", { className: "
|
|
1132
|
+
return /* @__PURE__ */ jsx5("div", { className: "documentation-modal-layer", role: "presentation", onMouseDown: (event) => {
|
|
1050
1133
|
if (event.currentTarget === event.target) onClose();
|
|
1051
|
-
}, children: /* @__PURE__ */ jsxs5("div", { className: "
|
|
1134
|
+
}, children: /* @__PURE__ */ jsxs5("div", { className: "documentation-mobile-nav", role: "dialog", "aria-modal": "true", "aria-label": "Documentation navigation", ref: dialogRef, children: [
|
|
1052
1135
|
/* @__PURE__ */ jsxs5("header", { children: [
|
|
1053
1136
|
/* @__PURE__ */ jsx5(
|
|
1054
1137
|
"a",
|
|
1055
1138
|
{
|
|
1056
|
-
"aria-label": `${data.config.name}
|
|
1057
|
-
className: "
|
|
1058
|
-
href: data.config.theme.logoHref ?? "/",
|
|
1059
|
-
...externalProps(data.config.theme.logoHref ?? "/"),
|
|
1139
|
+
"aria-label": `${documentationSubject(data.config.name)} home`,
|
|
1140
|
+
className: "documentation-brand",
|
|
1141
|
+
href: data.config.theme.logoHref ?? documentationPublicPath(data.basePath, "/"),
|
|
1142
|
+
...externalProps(data.config.theme.logoHref ?? documentationPublicPath(data.basePath, "/")),
|
|
1060
1143
|
children: /* @__PURE__ */ jsx5(BrandLogo, { data })
|
|
1061
1144
|
}
|
|
1062
1145
|
),
|
|
1063
|
-
/* @__PURE__ */ jsx5("button", { className: "
|
|
1146
|
+
/* @__PURE__ */ jsx5("button", { className: "documentation-icon-button", type: "button", onClick: onClose, "aria-label": "Close documentation navigation", "data-autofocus": true, children: /* @__PURE__ */ jsx5(CloseIcon, {}) })
|
|
1064
1147
|
] }),
|
|
1065
|
-
/* @__PURE__ */ jsx5("nav", { className: "
|
|
1148
|
+
/* @__PURE__ */ jsx5("nav", { className: "documentation-page-tree", children: /* @__PURE__ */ jsx5(NavigationTree, { activeRoute: data.page.route, basePath: data.basePath, nodes: data.navigation }) }),
|
|
1066
1149
|
/* @__PURE__ */ jsxs5("footer", { children: [
|
|
1067
1150
|
!data.config.theme.strictMode && /* @__PURE__ */ jsx5(ThemeControls, { defaultMode: data.config.theme.defaultMode ?? "system" }),
|
|
1068
1151
|
data.config.footer.map((link) => /* @__PURE__ */ jsx5("a", { href: link.href, ...externalProps(link.href), children: link.label }, `${link.label}:${link.href}`))
|
|
@@ -1072,15 +1155,15 @@ function MobileNavigation({
|
|
|
1072
1155
|
function ThemeControls({ defaultMode }) {
|
|
1073
1156
|
const [mode, setMode] = useState4(defaultMode);
|
|
1074
1157
|
useEffect5(() => {
|
|
1075
|
-
const saved = safeStorageGet("deepspace-
|
|
1158
|
+
const saved = safeStorageGet("deepspace-documentation-theme");
|
|
1076
1159
|
if (saved === "light" || saved === "dark" || saved === "system") setMode(saved);
|
|
1077
1160
|
}, []);
|
|
1078
1161
|
useEffect5(() => applyThemeMode(mode), [mode]);
|
|
1079
1162
|
const choose = (next) => {
|
|
1080
1163
|
setMode(next);
|
|
1081
|
-
safeStorageSet("deepspace-
|
|
1164
|
+
safeStorageSet("deepspace-documentation-theme", next);
|
|
1082
1165
|
};
|
|
1083
|
-
return /* @__PURE__ */ jsxs5("div", { className: "
|
|
1166
|
+
return /* @__PURE__ */ jsxs5("div", { className: "documentation-theme-controls", role: "group", "aria-label": "Theme preference", children: [
|
|
1084
1167
|
/* @__PURE__ */ jsx5("button", { "aria-pressed": mode === "system", "aria-label": "Use system theme", onClick: () => choose("system"), type: "button", children: /* @__PURE__ */ jsx5(SystemIcon, {}) }),
|
|
1085
1168
|
/* @__PURE__ */ jsx5("button", { "aria-pressed": mode === "light", "aria-label": "Use light theme", onClick: () => choose("light"), type: "button", children: /* @__PURE__ */ jsx5(SunIcon, {}) }),
|
|
1086
1169
|
/* @__PURE__ */ jsx5("button", { "aria-pressed": mode === "dark", "aria-label": "Use dark theme", onClick: () => choose("dark"), type: "button", children: /* @__PURE__ */ jsx5(MoonIcon, {}) })
|
|
@@ -1100,7 +1183,7 @@ function applyThemeMode(mode) {
|
|
|
1100
1183
|
return () => media.removeEventListener?.("change", apply);
|
|
1101
1184
|
}
|
|
1102
1185
|
|
|
1103
|
-
// src/
|
|
1186
|
+
// src/documentation/runtime/search.tsx
|
|
1104
1187
|
import {
|
|
1105
1188
|
useEffect as useEffect6,
|
|
1106
1189
|
useMemo as useMemo2,
|
|
@@ -1110,6 +1193,7 @@ import {
|
|
|
1110
1193
|
import { Fragment as Fragment3, jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1111
1194
|
function SearchCommand({
|
|
1112
1195
|
assistantEnabled,
|
|
1196
|
+
basePath,
|
|
1113
1197
|
name,
|
|
1114
1198
|
onAssistantOpen,
|
|
1115
1199
|
onClose,
|
|
@@ -1125,8 +1209,8 @@ function SearchCommand({
|
|
|
1125
1209
|
useEffect6(() => {
|
|
1126
1210
|
if (!open || index || loading) return;
|
|
1127
1211
|
setLoading(true);
|
|
1128
|
-
fetch("/
|
|
1129
|
-
}, [index, loading, open]);
|
|
1212
|
+
fetch(documentationPublicPath(basePath, "/search.json")).then((response) => response.ok ? response.json() : []).then(setIndex).catch(() => setIndex([])).finally(() => setLoading(false));
|
|
1213
|
+
}, [basePath, index, loading, open]);
|
|
1130
1214
|
useEffect6(() => {
|
|
1131
1215
|
if (!open) {
|
|
1132
1216
|
setQuery("");
|
|
@@ -1148,25 +1232,26 @@ function SearchCommand({
|
|
|
1148
1232
|
event.preventDefault();
|
|
1149
1233
|
if (activeIndex < results.length && results[activeIndex]) {
|
|
1150
1234
|
onClose();
|
|
1151
|
-
|
|
1152
|
-
|
|
1235
|
+
const href = documentationPublicPath(basePath, results[activeIndex].route);
|
|
1236
|
+
if (onNavigate) onNavigate(href);
|
|
1237
|
+
else window.location.assign(href);
|
|
1153
1238
|
} else if (assistantEnabled && query.trim()) {
|
|
1154
1239
|
onAssistantOpen(query.trim());
|
|
1155
1240
|
}
|
|
1156
1241
|
}
|
|
1157
1242
|
};
|
|
1158
|
-
return /* @__PURE__ */ jsx6("div", { className: "
|
|
1243
|
+
return /* @__PURE__ */ jsx6("div", { className: "documentation-modal-layer documentation-search-layer", role: "presentation", onMouseDown: (event) => {
|
|
1159
1244
|
if (event.currentTarget === event.target) onClose();
|
|
1160
|
-
}, children: /* @__PURE__ */ jsxs6("div", { className: "
|
|
1161
|
-
/* @__PURE__ */ jsxs6("label", { className: "
|
|
1245
|
+
}, children: /* @__PURE__ */ jsxs6("div", { className: "documentation-search-dialog", role: "dialog", "aria-modal": "true", "aria-label": "Search documentation", ref: dialogRef, children: [
|
|
1246
|
+
/* @__PURE__ */ jsxs6("label", { className: "documentation-search-input", children: [
|
|
1162
1247
|
/* @__PURE__ */ jsx6(SearchIcon, {}),
|
|
1163
1248
|
/* @__PURE__ */ jsx6(
|
|
1164
1249
|
"input",
|
|
1165
1250
|
{
|
|
1166
|
-
"aria-activedescendant": selectableCount > 0 ? `
|
|
1167
|
-
"aria-controls": "
|
|
1251
|
+
"aria-activedescendant": selectableCount > 0 ? `documentation-search-option-${activeIndex}` : void 0,
|
|
1252
|
+
"aria-controls": "documentation-search-results",
|
|
1168
1253
|
"aria-expanded": "true",
|
|
1169
|
-
"aria-label": `Search ${name}
|
|
1254
|
+
"aria-label": `Search ${documentationSubject(name)}`,
|
|
1170
1255
|
autoComplete: "off",
|
|
1171
1256
|
"data-autofocus": true,
|
|
1172
1257
|
onChange: (event) => {
|
|
@@ -1181,14 +1266,14 @@ function SearchCommand({
|
|
|
1181
1266
|
),
|
|
1182
1267
|
/* @__PURE__ */ jsx6("kbd", { children: "Esc" })
|
|
1183
1268
|
] }),
|
|
1184
|
-
/* @__PURE__ */ jsxs6("div", { className: "
|
|
1185
|
-
!query.trim() && /* @__PURE__ */ jsxs6("div", { className: "
|
|
1269
|
+
/* @__PURE__ */ jsxs6("div", { className: "documentation-search-results", id: "documentation-search-results", role: "listbox", "aria-label": "Search results", children: [
|
|
1270
|
+
!query.trim() && /* @__PURE__ */ jsxs6("div", { className: "documentation-search-empty", children: [
|
|
1186
1271
|
/* @__PURE__ */ jsx6(OrbitMark, {}),
|
|
1187
1272
|
/* @__PURE__ */ jsx6("strong", { children: "Find an answer in this commit" }),
|
|
1188
1273
|
/* @__PURE__ */ jsx6("span", { children: "Search pages, headings, APIs, and examples." })
|
|
1189
1274
|
] }),
|
|
1190
|
-
query.trim() && loading && /* @__PURE__ */ jsx6("div", { className: "
|
|
1191
|
-
query.trim() && !loading && results.length === 0 && /* @__PURE__ */ jsxs6("div", { className: "
|
|
1275
|
+
query.trim() && loading && /* @__PURE__ */ jsx6("div", { className: "documentation-search-state", children: "Searching this documentation\u2026" }),
|
|
1276
|
+
query.trim() && !loading && results.length === 0 && /* @__PURE__ */ jsxs6("div", { className: "documentation-search-state", children: [
|
|
1192
1277
|
"No documentation matched \u201C",
|
|
1193
1278
|
query.trim(),
|
|
1194
1279
|
"\u201D."
|
|
@@ -1197,9 +1282,9 @@ function SearchCommand({
|
|
|
1197
1282
|
"a",
|
|
1198
1283
|
{
|
|
1199
1284
|
"aria-selected": activeIndex === resultIndex,
|
|
1200
|
-
className: activeIndex === resultIndex ? "
|
|
1201
|
-
href: result.route,
|
|
1202
|
-
id: `
|
|
1285
|
+
className: activeIndex === resultIndex ? "documentation-search-result is-active" : "documentation-search-result",
|
|
1286
|
+
href: documentationPublicPath(basePath, result.route),
|
|
1287
|
+
id: `documentation-search-option-${resultIndex}`,
|
|
1203
1288
|
onClick: onClose,
|
|
1204
1289
|
onMouseEnter: () => setActiveIndex(resultIndex),
|
|
1205
1290
|
role: "option",
|
|
@@ -1217,8 +1302,8 @@ function SearchCommand({
|
|
|
1217
1302
|
"button",
|
|
1218
1303
|
{
|
|
1219
1304
|
"aria-selected": activeIndex === results.length,
|
|
1220
|
-
className: activeIndex === results.length ? "
|
|
1221
|
-
id: `
|
|
1305
|
+
className: activeIndex === results.length ? "documentation-search-assistant is-active" : "documentation-search-assistant",
|
|
1306
|
+
id: `documentation-search-option-${results.length}`,
|
|
1222
1307
|
onClick: () => onAssistantOpen(query.trim()),
|
|
1223
1308
|
onMouseEnter: () => setActiveIndex(results.length),
|
|
1224
1309
|
role: "option",
|
|
@@ -1290,9 +1375,9 @@ function normalizeSearch(value) {
|
|
|
1290
1375
|
return value.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
|
|
1291
1376
|
}
|
|
1292
1377
|
|
|
1293
|
-
// src/
|
|
1378
|
+
// src/documentation/runtime/app.tsx
|
|
1294
1379
|
import { Fragment as Fragment4, jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1295
|
-
function
|
|
1380
|
+
function DocumentationApp({
|
|
1296
1381
|
data,
|
|
1297
1382
|
children,
|
|
1298
1383
|
navigating = false,
|
|
@@ -1301,8 +1386,18 @@ function DocsApp({
|
|
|
1301
1386
|
const [mobileNavOpen, setMobileNavOpen] = useState6(false);
|
|
1302
1387
|
const [searchOpen, setSearchOpen] = useState6(false);
|
|
1303
1388
|
const [assistantOpen, setAssistantOpen] = useState6(false);
|
|
1304
|
-
const [
|
|
1305
|
-
const
|
|
1389
|
+
const [assistantDraft, setAssistantDraft] = useState6("");
|
|
1390
|
+
const [assistantSeed, setAssistantSeed] = useState6({ id: 0, submit: false });
|
|
1391
|
+
const assistantAccess = data.config.assistant.access === "disabled" ? null : data.config.assistant.access;
|
|
1392
|
+
const assistantEnabled = assistantAccess !== null;
|
|
1393
|
+
const appClassName = [
|
|
1394
|
+
"documentation-app",
|
|
1395
|
+
assistantEnabled ? "has-assistant" : "",
|
|
1396
|
+
assistantOpen ? "is-assistant-open" : "",
|
|
1397
|
+
navigating ? "is-navigating" : ""
|
|
1398
|
+
].filter(Boolean).join(" ");
|
|
1399
|
+
const openAssistant = useCallback((seed, submit = false) => {
|
|
1400
|
+
if (seed !== void 0) setAssistantDraft(seed);
|
|
1306
1401
|
setAssistantSeed((current) => ({ id: current.id + 1, submit, value: seed }));
|
|
1307
1402
|
setSearchOpen(false);
|
|
1308
1403
|
setAssistantOpen(true);
|
|
@@ -1329,20 +1424,20 @@ function DocsApp({
|
|
|
1329
1424
|
"div",
|
|
1330
1425
|
{
|
|
1331
1426
|
"aria-busy": navigating || void 0,
|
|
1332
|
-
className:
|
|
1427
|
+
className: appClassName,
|
|
1333
1428
|
children: [
|
|
1334
|
-
/* @__PURE__ */ jsx7("a", { className: "
|
|
1429
|
+
/* @__PURE__ */ jsx7("a", { className: "documentation-skip-link", href: "#documentation-content", children: "Skip to main content" }),
|
|
1335
1430
|
/* @__PURE__ */ jsx7(
|
|
1336
|
-
|
|
1431
|
+
DocumentationHeader,
|
|
1337
1432
|
{
|
|
1338
1433
|
data,
|
|
1339
1434
|
onMenuOpen: () => setMobileNavOpen(true),
|
|
1340
1435
|
onSearchOpen: () => setSearchOpen(true)
|
|
1341
1436
|
}
|
|
1342
1437
|
),
|
|
1343
|
-
/* @__PURE__ */ jsxs7("div", { className: "
|
|
1438
|
+
/* @__PURE__ */ jsxs7("div", { className: "documentation-frame", children: [
|
|
1344
1439
|
/* @__PURE__ */ jsx7(DesktopSidebar, { data }),
|
|
1345
|
-
/* @__PURE__ */ jsx7("main", { className: "
|
|
1440
|
+
/* @__PURE__ */ jsx7("main", { className: "documentation-main", id: "documentation-content", children: /* @__PURE__ */ jsxs7("div", { className: "documentation-reader-grid", children: [
|
|
1346
1441
|
/* @__PURE__ */ jsx7(Article, { data, onAssistantOpen: openAssistant, children }),
|
|
1347
1442
|
/* @__PURE__ */ jsx7(ContextRail, { data })
|
|
1348
1443
|
] }) })
|
|
@@ -1358,7 +1453,8 @@ function DocsApp({
|
|
|
1358
1453
|
/* @__PURE__ */ jsx7(
|
|
1359
1454
|
SearchCommand,
|
|
1360
1455
|
{
|
|
1361
|
-
assistantEnabled
|
|
1456
|
+
assistantEnabled,
|
|
1457
|
+
basePath: data.basePath,
|
|
1362
1458
|
name: data.config.name,
|
|
1363
1459
|
onAssistantOpen: openAssistant,
|
|
1364
1460
|
onClose: () => setSearchOpen(false),
|
|
@@ -1366,22 +1462,27 @@ function DocsApp({
|
|
|
1366
1462
|
open: searchOpen
|
|
1367
1463
|
}
|
|
1368
1464
|
),
|
|
1369
|
-
|
|
1465
|
+
assistantAccess && /* @__PURE__ */ jsxs7(Fragment4, { children: [
|
|
1370
1466
|
/* @__PURE__ */ jsx7(
|
|
1371
1467
|
AssistantLauncher,
|
|
1372
1468
|
{
|
|
1469
|
+
input: assistantDraft,
|
|
1373
1470
|
name: data.config.name,
|
|
1374
1471
|
onOpen: () => openAssistant(),
|
|
1472
|
+
onInputChange: setAssistantDraft,
|
|
1375
1473
|
onSubmit: (question) => openAssistant(question, true),
|
|
1376
1474
|
open: assistantOpen
|
|
1377
1475
|
}
|
|
1378
1476
|
),
|
|
1379
1477
|
/* @__PURE__ */ jsx7(
|
|
1380
|
-
|
|
1478
|
+
DocumentationAssistant,
|
|
1381
1479
|
{
|
|
1382
|
-
access:
|
|
1480
|
+
access: assistantAccess,
|
|
1481
|
+
basePath: data.basePath,
|
|
1482
|
+
input: assistantDraft,
|
|
1383
1483
|
name: data.config.name,
|
|
1384
1484
|
onClose: () => setAssistantOpen(false),
|
|
1485
|
+
onInputChange: setAssistantDraft,
|
|
1385
1486
|
open: assistantOpen,
|
|
1386
1487
|
route: data.page.route,
|
|
1387
1488
|
seed: assistantSeed,
|
|
@@ -1394,12 +1495,12 @@ function DocsApp({
|
|
|
1394
1495
|
);
|
|
1395
1496
|
}
|
|
1396
1497
|
|
|
1397
|
-
// src/
|
|
1498
|
+
// src/documentation/runtime/mdx-components.tsx
|
|
1398
1499
|
import { Children, createElement, isValidElement } from "react";
|
|
1399
1500
|
import { Fragment as Fragment5, jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1400
1501
|
function Callout({ children, title, kind }) {
|
|
1401
1502
|
const label = title ?? kind.charAt(0).toUpperCase() + kind.slice(1);
|
|
1402
|
-
return /* @__PURE__ */ jsxs8("aside", { className: `
|
|
1503
|
+
return /* @__PURE__ */ jsxs8("aside", { className: `documentation-callout documentation-callout-${kind}`, children: [
|
|
1403
1504
|
/* @__PURE__ */ jsx8("strong", { children: label }),
|
|
1404
1505
|
children
|
|
1405
1506
|
] });
|
|
@@ -1421,42 +1522,42 @@ function Card({ children, href, label, title }) {
|
|
|
1421
1522
|
title ?? label ? /* @__PURE__ */ jsx8("strong", { children: title ?? label }) : null,
|
|
1422
1523
|
children
|
|
1423
1524
|
] });
|
|
1424
|
-
return href ? /* @__PURE__ */ jsxs8("a", { className: "
|
|
1525
|
+
return href ? /* @__PURE__ */ jsxs8("a", { className: "documentation-card", href, children: [
|
|
1425
1526
|
content,
|
|
1426
1527
|
/* @__PURE__ */ jsx8("span", { "aria-hidden": "true", children: "\u2192" })
|
|
1427
|
-
] }) : /* @__PURE__ */ jsx8("div", { className: "
|
|
1528
|
+
] }) : /* @__PURE__ */ jsx8("div", { className: "documentation-card", children: content });
|
|
1428
1529
|
}
|
|
1429
1530
|
function Accordion({ children, label, title }) {
|
|
1430
|
-
return /* @__PURE__ */ jsxs8("details", { className: "
|
|
1531
|
+
return /* @__PURE__ */ jsxs8("details", { className: "documentation-accordion", children: [
|
|
1431
1532
|
/* @__PURE__ */ jsx8("summary", { children: title ?? label ?? "Details" }),
|
|
1432
1533
|
children
|
|
1433
1534
|
] });
|
|
1434
1535
|
}
|
|
1435
1536
|
function AccordionGroup({ children }) {
|
|
1436
|
-
return /* @__PURE__ */ jsx8("div", { className: "
|
|
1537
|
+
return /* @__PURE__ */ jsx8("div", { className: "documentation-accordion-group", children });
|
|
1437
1538
|
}
|
|
1438
1539
|
function Step({ children, label, title }) {
|
|
1439
|
-
return /* @__PURE__ */ jsxs8("section", { className: "
|
|
1540
|
+
return /* @__PURE__ */ jsxs8("section", { className: "documentation-step", children: [
|
|
1440
1541
|
title ?? label ? /* @__PURE__ */ jsx8("h3", { children: title ?? label }) : null,
|
|
1441
1542
|
children
|
|
1442
1543
|
] });
|
|
1443
1544
|
}
|
|
1444
1545
|
function Steps({ children }) {
|
|
1445
|
-
return /* @__PURE__ */ jsx8("div", { className: "
|
|
1546
|
+
return /* @__PURE__ */ jsx8("div", { className: "documentation-steps", children });
|
|
1446
1547
|
}
|
|
1447
1548
|
function Tab({ children, label, title }) {
|
|
1448
|
-
return /* @__PURE__ */ jsx8("section", { className: "
|
|
1549
|
+
return /* @__PURE__ */ jsx8("section", { className: "documentation-tab", "data-tab": true, "data-tab-title": title ?? label ?? "Tab", children });
|
|
1449
1550
|
}
|
|
1450
1551
|
function Tabs({ children }) {
|
|
1451
|
-
return /* @__PURE__ */ jsx8("div", { className: "
|
|
1552
|
+
return /* @__PURE__ */ jsx8("div", { className: "documentation-tabs", "data-tab-group": true, children });
|
|
1452
1553
|
}
|
|
1453
1554
|
function CodeGroup({ children, label, title }) {
|
|
1454
|
-
return /* @__PURE__ */ jsxs8("div", { className: "
|
|
1455
|
-
title ?? label ? /* @__PURE__ */ jsx8("div", { className: "
|
|
1555
|
+
return /* @__PURE__ */ jsxs8("div", { className: "documentation-code-group", "data-tab-group": true, children: [
|
|
1556
|
+
title ?? label ? /* @__PURE__ */ jsx8("div", { className: "documentation-code-group-title", children: title ?? label }) : null,
|
|
1456
1557
|
Children.toArray(children).map((child, index) => /* @__PURE__ */ jsx8(
|
|
1457
1558
|
"section",
|
|
1458
1559
|
{
|
|
1459
|
-
className: "
|
|
1560
|
+
className: "documentation-tab",
|
|
1460
1561
|
"data-tab": true,
|
|
1461
1562
|
"data-tab-title": codeBlockTitle(child) ?? `Example ${index + 1}`,
|
|
1462
1563
|
children: child
|
|
@@ -1478,10 +1579,10 @@ function Heading({ level, ...props }) {
|
|
|
1478
1579
|
`h${level}`,
|
|
1479
1580
|
props,
|
|
1480
1581
|
props.children,
|
|
1481
|
-
id ? /* @__PURE__ */ jsx8("a", { "aria-label": "Link to this section", className: "
|
|
1582
|
+
id ? /* @__PURE__ */ jsx8("a", { "aria-label": "Link to this section", className: "documentation-heading-anchor", href: `#${id}`, children: "#" }) : null
|
|
1482
1583
|
);
|
|
1483
1584
|
}
|
|
1484
|
-
var
|
|
1585
|
+
var documentationMdxComponents = {
|
|
1485
1586
|
Accordion,
|
|
1486
1587
|
AccordionGroup,
|
|
1487
1588
|
Card,
|
|
@@ -1502,21 +1603,23 @@ var docsMdxComponents = {
|
|
|
1502
1603
|
h6: (props) => /* @__PURE__ */ jsx8(Heading, { ...props, level: 6 })
|
|
1503
1604
|
};
|
|
1504
1605
|
|
|
1505
|
-
// src/
|
|
1606
|
+
// src/documentation/runtime/public.tsx
|
|
1506
1607
|
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
1507
|
-
var
|
|
1508
|
-
function
|
|
1608
|
+
var DefaultDocumentation = DocumentationApp;
|
|
1609
|
+
function DocumentationContent({
|
|
1509
1610
|
data,
|
|
1510
1611
|
Page
|
|
1511
1612
|
}) {
|
|
1512
1613
|
if (!Page) {
|
|
1513
|
-
return /* @__PURE__ */ jsx9("div", { className: "
|
|
1614
|
+
return /* @__PURE__ */ jsx9("div", { className: "documentation-prose", dangerouslySetInnerHTML: { __html: data.page.html } });
|
|
1514
1615
|
}
|
|
1515
|
-
return /* @__PURE__ */ jsx9("div", { className: "
|
|
1616
|
+
return /* @__PURE__ */ jsx9("div", { className: "documentation-prose", children: /* @__PURE__ */ jsx9(Page, { components: documentationMdxComponents }) });
|
|
1516
1617
|
}
|
|
1517
1618
|
|
|
1518
1619
|
export {
|
|
1519
|
-
|
|
1620
|
+
documentationPublicPath,
|
|
1621
|
+
documentationLogicalPath,
|
|
1622
|
+
DocumentationApp,
|
|
1520
1623
|
Note,
|
|
1521
1624
|
Tip,
|
|
1522
1625
|
Warning,
|
|
@@ -1529,7 +1632,7 @@ export {
|
|
|
1529
1632
|
Tab,
|
|
1530
1633
|
Tabs,
|
|
1531
1634
|
CodeGroup,
|
|
1532
|
-
|
|
1533
|
-
|
|
1635
|
+
DefaultDocumentation,
|
|
1636
|
+
DocumentationContent
|
|
1534
1637
|
};
|
|
1535
|
-
//# sourceMappingURL=chunk-
|
|
1638
|
+
//# sourceMappingURL=chunk-T7V4GUIN.js.map
|