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.
Files changed (82) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/{chunk-DQ4G6VL6.js → chunk-T7V4GUIN.js} +283 -180
  3. package/dist/chunk-T7V4GUIN.js.map +1 -0
  4. package/dist/cli.js +1010 -6123
  5. package/dist/cli.js.map +1 -1
  6. package/dist/documentation-client-core.d.ts +18 -0
  7. package/dist/{docs-client-core.js → documentation-client-core.js} +60 -51
  8. package/dist/documentation-client-core.js.map +1 -0
  9. package/dist/documentation-default-renderer.cjs +124 -0
  10. package/dist/documentation-react.d.ts +2 -0
  11. package/dist/{docs-react.js → documentation-react.js} +8 -8
  12. package/dist/documentation-runtime.js +71 -0
  13. package/dist/documentation-server-core.d.ts +11 -0
  14. package/dist/{docs-server-core.js → documentation-server-core.js} +13 -13
  15. package/dist/documentation-server-core.js.map +1 -0
  16. package/dist/documentation.d.ts +366 -0
  17. package/dist/documentation.js +3953 -0
  18. package/dist/documentation.js.map +1 -0
  19. package/dist/feature-installer.js +145 -0
  20. package/dist/feature-installer.js.map +1 -1
  21. package/dist/index.d.ts +6 -8
  22. package/dist/index.js +5 -15
  23. package/dist/index.js.map +1 -1
  24. package/dist/public-BGRX_Cjd.d.ts +234 -0
  25. package/dist/schema.d.ts +186 -0
  26. package/dist/schema.js +610 -0
  27. package/dist/schema.js.map +1 -0
  28. package/dist/server.d.ts +19 -167
  29. package/dist/server.js +76 -1069
  30. package/dist/server.js.map +1 -1
  31. package/dist/testing.d.ts +5 -8
  32. package/dist/testing.js +48 -14
  33. package/dist/testing.js.map +1 -1
  34. package/dist/worker.d.ts +52 -173
  35. package/dist/worker.js +563 -492
  36. package/dist/worker.js.map +1 -1
  37. package/features/admin-page/src/admin-schema.ts +1 -1
  38. package/features/ai-chat/feature.json +2 -2
  39. package/features/ai-chat/src/ChatPanel.tsx +0 -1
  40. package/features/ai-chat/src/ai-chat-schema.ts +1 -2
  41. package/features/canvas/src/canvas-schema.ts +1 -1
  42. package/features/documentation/content/index.mdx +14 -0
  43. package/features/documentation/content/quickstart.mdx +12 -0
  44. package/features/documentation/documentation.json +18 -0
  45. package/features/documentation/feature.json +68 -0
  46. package/features/{docs → documents}/feature.json +27 -27
  47. package/features/{docs/src/DocsEditorPage.tsx → documents/src/DocumentsEditorPage.tsx} +74 -74
  48. package/features/{docs/src/DocsListPage.tsx → documents/src/DocumentsListPage.tsx} +102 -102
  49. package/features/{docs/src/DocsOutlinePanel.tsx → documents/src/DocumentsOutlinePanel.tsx} +9 -9
  50. package/features/{docs/src/DocsPresence.tsx → documents/src/DocumentsPresence.tsx} +18 -18
  51. package/features/{docs → documents}/src/InviteDialog.tsx +21 -21
  52. package/features/{docs → documents}/src/LibrarySidebar.tsx +25 -25
  53. package/features/documents/src/__tests__/documents-presence-access.test.ts +71 -0
  54. package/features/{docs/src/docs-library-types.ts → documents/src/documents-library-types.ts} +3 -3
  55. package/features/{docs/src/docs-schema.ts → documents/src/documents-schema.ts} +6 -6
  56. package/features/{docs/src/docs-ui.css → documents/src/documents-ui.css} +89 -89
  57. package/features/{docs → documents}/src/editor/DocEditorSurface.tsx +11 -11
  58. package/features/{docs/src/editor/DocsTiptapToolbar.tsx → documents/src/editor/DocumentsTiptapToolbar.tsx} +21 -21
  59. package/features/{docs → documents}/src/editor/useDocEditor.ts +4 -4
  60. package/features/{docs/src/use-docs-presence-access.ts → documents/src/use-documents-presence-access.ts} +51 -51
  61. package/features/file-attachments/src/attachments-schema.ts +1 -1
  62. package/features/items/src/items-schema.ts +1 -1
  63. package/features/leaderboard/src/leaderboard-schema.ts +1 -1
  64. package/features/messaging/src/ChatMultiPage.tsx +1 -1
  65. package/features/messaging/src/ChatPage.tsx +1 -1
  66. package/features/messaging/src/messaging-schema.ts +2 -2
  67. package/features/tasks/src/tasks-schema.ts +1 -1
  68. package/features/testing/src/test-schema.ts +2 -2
  69. package/package.json +12 -7
  70. package/dist/chunk-DQ4G6VL6.js.map +0 -1
  71. package/dist/docs-client-core.d.ts +0 -18
  72. package/dist/docs-client-core.js.map +0 -1
  73. package/dist/docs-react.d.ts +0 -2
  74. package/dist/docs-runtime.js +0 -71
  75. package/dist/docs-server-core.d.ts +0 -11
  76. package/dist/docs-server-core.js.map +0 -1
  77. package/dist/docs.d.ts +0 -350
  78. package/dist/docs.js +0 -5139
  79. package/dist/docs.js.map +0 -1
  80. package/dist/public-Cp1X8ZQ3.d.ts +0 -230
  81. package/features/docs/src/__tests__/docs-presence-access.test.ts +0 -71
  82. /package/dist/{docs-react.js.map → documentation-react.js.map} +0 -0
@@ -1,11 +1,11 @@
1
- // src/docs/runtime/app.tsx
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/docs/runtime/article.tsx
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/docs/runtime/browser.ts
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/docs/runtime/icons.tsx
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(--docs-bg)", r: "3.25" }),
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/docs/runtime/page-actions.tsx
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 ((action === "copy" || action === "view" || action === "chatgpt" || action === "claude") && data.page.route === "/404") return false;
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
- if (detailsRef.current) detailsRef.current.open = false;
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, "") || "docs";
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: "docs-contextual-action-icon", children: icon }),
251
- /* @__PURE__ */ jsxs2("span", { className: "docs-contextual-action-copy", children: [
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: "docs-contextual-action-external" })
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: "docs-contextual-actions", "aria-label": "Page actions", children: [
291
- /* @__PURE__ */ jsx2("div", { className: "docs-contextual-primary", "aria-live": "polite", children: renderAction(primary) }),
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: "docs-contextual-menu", role: "menu", children: actions.map((action) => renderAction(action, true)) })
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/docs/runtime/article.tsx
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: "docs-article", ref: articleRef, children: [
383
+ return /* @__PURE__ */ jsxs3("article", { className: "documentation-article", ref: articleRef, children: [
309
384
  /* @__PURE__ */ jsx3(Breadcrumbs, { items: data.breadcrumbs }),
310
- /* @__PURE__ */ jsxs3("header", { className: "docs-article-header", children: [
311
- /* @__PURE__ */ jsxs3("div", { className: "docs-article-meta", children: [
312
- data.config.theme.eyebrowStyle !== "none" && /* @__PURE__ */ jsx3("div", { className: "docs-eyebrow", children: data.page.kind === "openapi" ? "API reference" : data.config.theme.eyebrowStyle === "breadcrumbs" ? data.breadcrumbs.join(" / ") : data.breadcrumbs[0] ?? "Documentation" }),
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: "docs-lede", children: data.page.description })
391
+ data.page.description && /* @__PURE__ */ jsx3("p", { className: "documentation-lede", children: data.page.description })
317
392
  ] }),
318
- children ?? /* @__PURE__ */ jsx3("div", { className: "docs-prose", dangerouslySetInnerHTML: { __html: data.page.html } }),
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: "docs-pagination", "aria-label": "Page navigation", children: [
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: "docs-breadcrumbs", "aria-label": "Breadcrumb", children: items.map((item, index) => /* @__PURE__ */ jsxs3("span", { children: [
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: "docs-context-rail", "aria-label": "Page context", children: headings.length > 0 && /* @__PURE__ */ jsxs3("nav", { className: "docs-outline", "aria-label": "On this page", children: [
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: "docs-playground", "data-playground": true, children: [
407
- /* @__PURE__ */ jsxs3("div", { className: "docs-playground-title", children: [
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(".docs-prose pre").forEach((pre) => {
433
- if (pre.querySelector(".docs-code-actions")) return;
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 = "docs-code-actions";
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 > .docs-tab-buttons")) return;
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 = "docs-tab-buttons";
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-docs-tab-selection", label);
491
- document.dispatchEvent(new CustomEvent("deepspace-docs-tab-change", {
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 = `docs-tab-${groupIndex}-${tabIndex}`;
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 > .docs-code-group-title");
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-docs-tab-change", sync);
530
- const stored = safeStorageGet("deepspace-docs-tab-selection");
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-docs-tab-change", sync);
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/docs/runtime/assistant.tsx
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/docs/runtime/assistant-history.ts
566
- function completedDocsAssistantHistory(messages, maxMessages = 12) {
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/docs/runtime/dialog.ts
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/docs/runtime/assistant.tsx
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 [input, setInput] = useState3("");
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: "docs-assistant-launcher",
649
- id: "deepspace-docs-assistant-launcher",
731
+ className: "documentation-assistant-launcher",
732
+ id: "deepspace-documentation-assistant-launcher",
650
733
  onSubmit: submit,
651
734
  children: [
652
- /* @__PURE__ */ jsxs4("button", { className: "docs-launcher-agent", type: "button", onClick: onOpen, "aria-label": `Open the ${name} documentation agent`, children: [
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 ${name} documentation agent`,
660
- id: "deepspace-docs-assistant-launcher-input",
742
+ "aria-label": `Ask the ${subject} agent`,
743
+ id: "deepspace-documentation-assistant-launcher-input",
661
744
  maxLength: 4e3,
662
- onChange: (event) => setInput(event.target.value),
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: "docs-launcher-send", type: "submit", disabled: !input.trim(), "aria-label": "Send question to documentation agent", children: /* @__PURE__ */ jsx4(SendIcon, {}) })
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 DocsAssistant({
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} documentation and cite the exact pages I use.` }
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-docs-assistant-launcher-input");
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
- setInput(seed.value);
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 history = completedDocsAssistantHistory(messages);
714
- setInput("");
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/docs", {
823
+ const response = await fetch(documentationPublicPath(basePath, "/api/ai"), {
741
824
  method: "POST",
742
825
  headers,
743
- body: JSON.stringify({ question, route, messages: history }),
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 === "docs_read" ? "Reading the relevant source pages\u2026" : "Searching this documentation\u2026";
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: "docs-assistant",
796
- id: "deepspace-docs-assistant",
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-docs-assistant-title", children: [
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: "docs-assistant-messages", ref: messagesRef, "aria-live": "polite", children: [
811
- messages.map((message) => /* @__PURE__ */ jsx4("div", { className: `docs-assistant-message is-${message.role}${message.state ? ` is-${message.state}` : ""}`, children: /* @__PURE__ */ jsxs4("div", { children: [
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: "docs-assistant-activity", role: "status", children: [
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: "docs-assistant-suggestions", children: [
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: () => setInput(suggestion), children: suggestion }, suggestion))
903
+ defaults.map((suggestion) => /* @__PURE__ */ jsx4("button", { type: "button", onClick: () => onInputChange(suggestion), children: suggestion }, suggestion))
821
904
  ] })
822
905
  ] }),
823
- /* @__PURE__ */ jsxs4("form", { className: "docs-assistant-composer", onSubmit: submit, ref: formRef, children: [
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) => setInput(event.target.value),
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 these docs",
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: "docs-assistant-markdown", children: blocks });
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: "docs-assistant-code", children: [
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: "docs-assistant-heading", children: renderInlineMarkdown(heading[2]) }, `${keyPrefix}-heading-${index}`));
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/docs/runtime/navigation.tsx
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 DocsHeader({
1028
+ function DocumentationHeader({
946
1029
  data,
947
1030
  onMenuOpen,
948
1031
  onSearchOpen
949
1032
  }) {
950
- return /* @__PURE__ */ jsxs5("header", { className: "docs-header", children: [
1033
+ return /* @__PURE__ */ jsxs5("header", { className: "documentation-header", children: [
951
1034
  /* @__PURE__ */ jsx5(
952
1035
  "a",
953
1036
  {
954
- className: "docs-brand",
955
- href: data.config.theme.logoHref ?? "/",
956
- "aria-label": `${data.config.name} documentation home`,
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: "docs-header-center", children: /* @__PURE__ */ jsxs5("button", { className: "docs-search-trigger", type: "button", onClick: onSearchOpen, "aria-label": "Search documentation", children: [
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: "docs-top-links", "aria-label": "Product navigation", children: data.config.links.map((link) => /* @__PURE__ */ jsxs5("a", { href: link.href, ...externalProps(link.href), children: [
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: "docs-mobile-actions", children: [
971
- /* @__PURE__ */ jsx5("button", { className: "docs-icon-button", type: "button", onClick: onSearchOpen, "aria-label": "Search documentation", children: /* @__PURE__ */ jsx5(SearchIcon, {}) }),
972
- /* @__PURE__ */ jsx5("button", { className: "docs-icon-button", type: "button", onClick: onMenuOpen, "aria-label": "Open documentation navigation", children: /* @__PURE__ */ jsx5(MenuIcon, {}) })
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: "docs-brand-logo docs-brand-logo-light", src: logo, alt: "" }),
981
- /* @__PURE__ */ jsx5("img", { className: "docs-brand-logo docs-brand-logo-dark", src: logoDark ?? logo, alt: "" }),
982
- /* @__PURE__ */ jsx5("span", { className: "docs-brand-product", children: "Docs" })
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: "docs-brand-mark", children: /* @__PURE__ */ jsx5(OrbitMark, {}) }),
987
- /* @__PURE__ */ jsx5("span", { className: "docs-brand-name", children: data.config.name }),
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: "docs-sidebar", "aria-label": "Documentation navigation", children: [
993
- /* @__PURE__ */ jsx5("nav", { className: "docs-page-tree", children: /* @__PURE__ */ jsx5(NavigationTree, { activeRoute: data.page.route, nodes: data.navigation }) }),
994
- /* @__PURE__ */ jsxs5("div", { className: "docs-sidebar-footer", children: [
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: "docs-nav-section", children: [
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: "docs-nav-folder", open: active2, children: [
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 ? "docs-nav-link is-active" : "docs-nav-link",
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: "docs-modal-layer", role: "presentation", onMouseDown: (event) => {
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: "docs-mobile-nav", role: "dialog", "aria-modal": "true", "aria-label": "Documentation navigation", ref: dialogRef, children: [
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} documentation home`,
1057
- className: "docs-brand",
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: "docs-icon-button", type: "button", onClick: onClose, "aria-label": "Close documentation navigation", "data-autofocus": true, children: /* @__PURE__ */ jsx5(CloseIcon, {}) })
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: "docs-page-tree", children: /* @__PURE__ */ jsx5(NavigationTree, { activeRoute: data.page.route, nodes: data.navigation }) }),
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-docs-theme");
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-docs-theme", next);
1164
+ safeStorageSet("deepspace-documentation-theme", next);
1082
1165
  };
1083
- return /* @__PURE__ */ jsxs5("div", { className: "docs-theme-controls", role: "group", "aria-label": "Theme preference", children: [
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/docs/runtime/search.tsx
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("/_docs/search.json").then((response) => response.ok ? response.json() : []).then(setIndex).catch(() => setIndex([])).finally(() => setLoading(false));
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
- if (onNavigate) onNavigate(results[activeIndex].route);
1152
- else window.location.assign(results[activeIndex].route);
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: "docs-modal-layer docs-search-layer", role: "presentation", onMouseDown: (event) => {
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: "docs-search-dialog", role: "dialog", "aria-modal": "true", "aria-label": "Search documentation", ref: dialogRef, children: [
1161
- /* @__PURE__ */ jsxs6("label", { className: "docs-search-input", children: [
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 ? `docs-search-option-${activeIndex}` : void 0,
1167
- "aria-controls": "docs-search-results",
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} documentation`,
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: "docs-search-results", id: "docs-search-results", role: "listbox", "aria-label": "Search results", children: [
1185
- !query.trim() && /* @__PURE__ */ jsxs6("div", { className: "docs-search-empty", children: [
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: "docs-search-state", children: "Searching this documentation\u2026" }),
1191
- query.trim() && !loading && results.length === 0 && /* @__PURE__ */ jsxs6("div", { className: "docs-search-state", children: [
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 ? "docs-search-result is-active" : "docs-search-result",
1201
- href: result.route,
1202
- id: `docs-search-option-${resultIndex}`,
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 ? "docs-search-assistant is-active" : "docs-search-assistant",
1221
- id: `docs-search-option-${results.length}`,
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/docs/runtime/app.tsx
1378
+ // src/documentation/runtime/app.tsx
1294
1379
  import { Fragment as Fragment4, jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
1295
- function DocsApp({
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 [assistantSeed, setAssistantSeed] = useState6({ id: 0, submit: false, value: "" });
1305
- const openAssistant = useCallback((seed = "", submit = false) => {
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: `${assistantOpen ? "docs-app is-assistant-open" : "docs-app"}${navigating ? " is-navigating" : ""}`,
1427
+ className: appClassName,
1333
1428
  children: [
1334
- /* @__PURE__ */ jsx7("a", { className: "docs-skip-link", href: "#docs-content", children: "Skip to main content" }),
1429
+ /* @__PURE__ */ jsx7("a", { className: "documentation-skip-link", href: "#documentation-content", children: "Skip to main content" }),
1335
1430
  /* @__PURE__ */ jsx7(
1336
- DocsHeader,
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: "docs-frame", children: [
1438
+ /* @__PURE__ */ jsxs7("div", { className: "documentation-frame", children: [
1344
1439
  /* @__PURE__ */ jsx7(DesktopSidebar, { data }),
1345
- /* @__PURE__ */ jsx7("main", { className: "docs-main", id: "docs-content", children: /* @__PURE__ */ jsxs7("div", { className: "docs-reader-grid", children: [
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: data.config.assistant.access !== "disabled",
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
- data.config.assistant.access !== "disabled" && /* @__PURE__ */ jsxs7(Fragment4, { children: [
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
- DocsAssistant,
1478
+ DocumentationAssistant,
1381
1479
  {
1382
- access: data.config.assistant.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/docs/runtime/mdx-components.tsx
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: `docs-callout docs-callout-${kind}`, children: [
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: "docs-card", href, children: [
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: "docs-card", children: content });
1528
+ ] }) : /* @__PURE__ */ jsx8("div", { className: "documentation-card", children: content });
1428
1529
  }
1429
1530
  function Accordion({ children, label, title }) {
1430
- return /* @__PURE__ */ jsxs8("details", { className: "docs-accordion", children: [
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: "docs-accordion-group", children });
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: "docs-step", children: [
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: "docs-steps", children });
1546
+ return /* @__PURE__ */ jsx8("div", { className: "documentation-steps", children });
1446
1547
  }
1447
1548
  function Tab({ children, label, title }) {
1448
- return /* @__PURE__ */ jsx8("section", { className: "docs-tab", "data-tab": true, "data-tab-title": title ?? label ?? "Tab", children });
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: "docs-tabs", "data-tab-group": true, children });
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: "docs-code-group", "data-tab-group": true, children: [
1455
- title ?? label ? /* @__PURE__ */ jsx8("div", { className: "docs-code-group-title", children: title ?? label }) : null,
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: "docs-tab",
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: "docs-heading-anchor", href: `#${id}`, children: "#" }) : null
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 docsMdxComponents = {
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/docs/runtime/public.tsx
1606
+ // src/documentation/runtime/public.tsx
1506
1607
  import { jsx as jsx9 } from "react/jsx-runtime";
1507
- var DefaultDocs = DocsApp;
1508
- function DocsContent({
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: "docs-prose", dangerouslySetInnerHTML: { __html: data.page.html } });
1614
+ return /* @__PURE__ */ jsx9("div", { className: "documentation-prose", dangerouslySetInnerHTML: { __html: data.page.html } });
1514
1615
  }
1515
- return /* @__PURE__ */ jsx9("div", { className: "docs-prose", children: /* @__PURE__ */ jsx9(Page, { components: docsMdxComponents }) });
1616
+ return /* @__PURE__ */ jsx9("div", { className: "documentation-prose", children: /* @__PURE__ */ jsx9(Page, { components: documentationMdxComponents }) });
1516
1617
  }
1517
1618
 
1518
1619
  export {
1519
- DocsApp,
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
- DefaultDocs,
1533
- DocsContent
1635
+ DefaultDocumentation,
1636
+ DocumentationContent
1534
1637
  };
1535
- //# sourceMappingURL=chunk-DQ4G6VL6.js.map
1638
+ //# sourceMappingURL=chunk-T7V4GUIN.js.map