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
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { D as DocumentationRuntimeData, a as DocumentationPageComponent, b as DocumentationSiteComponent } from './public-BGRX_Cjd.js';
|
|
3
|
+
export { A as Accordion, c as AccordionGroup, C as Card, d as CodeGroup, e as DefaultDocumentation, f as DocumentationApp, g as DocumentationAppProps, h as DocumentationContent, i as DocumentationSiteProps, I as Info, N as Note, S as Step, j as Steps, T as Tab, k as Tabs, l as Tip, W as Warning } from './public-BGRX_Cjd.js';
|
|
4
|
+
import 'react';
|
|
5
|
+
|
|
6
|
+
declare function DocumentationRuntimeRoot({ initialData, loadPage, pages, Site, }: {
|
|
7
|
+
initialData: DocumentationRuntimeData;
|
|
8
|
+
loadPage?: (route: string) => Promise<void>;
|
|
9
|
+
pages?: Record<string, DocumentationPageComponent>;
|
|
10
|
+
Site?: DocumentationSiteComponent;
|
|
11
|
+
}): react_jsx_runtime.JSX.Element;
|
|
12
|
+
declare function hydrateDocumentation({ loadPage, pages, Site, }?: {
|
|
13
|
+
loadPage?: (route: string) => Promise<void>;
|
|
14
|
+
pages?: Record<string, DocumentationPageComponent>;
|
|
15
|
+
Site?: DocumentationSiteComponent;
|
|
16
|
+
}): void;
|
|
17
|
+
|
|
18
|
+
export { DocumentationPageComponent, DocumentationRuntimeRoot, DocumentationSiteComponent, hydrateDocumentation };
|
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
AccordionGroup,
|
|
4
4
|
Card,
|
|
5
5
|
CodeGroup,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
DefaultDocumentation,
|
|
7
|
+
DocumentationApp,
|
|
8
|
+
DocumentationContent,
|
|
9
9
|
Info,
|
|
10
10
|
Note,
|
|
11
11
|
Step,
|
|
@@ -13,15 +13,17 @@ import {
|
|
|
13
13
|
Tab,
|
|
14
14
|
Tabs,
|
|
15
15
|
Tip,
|
|
16
|
-
Warning
|
|
17
|
-
|
|
16
|
+
Warning,
|
|
17
|
+
documentationLogicalPath,
|
|
18
|
+
documentationPublicPath
|
|
19
|
+
} from "./chunk-T7V4GUIN.js";
|
|
18
20
|
|
|
19
|
-
// src/
|
|
21
|
+
// src/documentation/runtime/client.tsx
|
|
20
22
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
21
23
|
import { flushSync } from "react-dom";
|
|
22
24
|
import { hydrateRoot } from "react-dom/client";
|
|
23
25
|
|
|
24
|
-
// src/
|
|
26
|
+
// src/documentation/runtime/client-document.ts
|
|
25
27
|
function currentRuntimeDocument(data) {
|
|
26
28
|
return {
|
|
27
29
|
canonical: document.querySelector('link[rel="canonical"]')?.href ?? null,
|
|
@@ -79,9 +81,11 @@ function syncLink(rel, href) {
|
|
|
79
81
|
function locationKey(url) {
|
|
80
82
|
return `${url.pathname}${url.search}`;
|
|
81
83
|
}
|
|
82
|
-
function routeDataUrl(url) {
|
|
83
|
-
const
|
|
84
|
-
|
|
84
|
+
function routeDataUrl(url, basePath) {
|
|
85
|
+
const logical = documentationLogicalPath(basePath, url.pathname);
|
|
86
|
+
if (logical === null) throw new Error(`${url.pathname} is outside the documentation route`);
|
|
87
|
+
const clean = logical.replace(/^\/+|\/+$/g, "");
|
|
88
|
+
return `${documentationPublicPath(basePath, `/data/${clean || "index"}.json`)}${url.search}`;
|
|
85
89
|
}
|
|
86
90
|
function scrollToTarget(target, restoredScroll) {
|
|
87
91
|
if (target.hash) {
|
|
@@ -96,20 +100,20 @@ function currentHistoryState() {
|
|
|
96
100
|
}
|
|
97
101
|
function replaceHistoryScroll(scrollY) {
|
|
98
102
|
history.replaceState(
|
|
99
|
-
{ ...currentHistoryState(),
|
|
103
|
+
{ ...currentHistoryState(), deepspaceDocumentation: true, scrollY },
|
|
100
104
|
"",
|
|
101
105
|
window.location.href
|
|
102
106
|
);
|
|
103
107
|
}
|
|
104
108
|
function focusArticleHeading() {
|
|
105
|
-
const heading = document.querySelector(".
|
|
109
|
+
const heading = document.querySelector(".documentation-article h1");
|
|
106
110
|
if (!heading) return;
|
|
107
111
|
heading.tabIndex = -1;
|
|
108
112
|
heading.focus({ preventScroll: true });
|
|
109
113
|
}
|
|
110
114
|
|
|
111
|
-
// src/
|
|
112
|
-
var
|
|
115
|
+
// src/documentation/resource-path.ts
|
|
116
|
+
var RESOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
113
117
|
"7z",
|
|
114
118
|
"avif",
|
|
115
119
|
"css",
|
|
@@ -141,32 +145,34 @@ var DOCS_RESOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
|
141
145
|
"yml",
|
|
142
146
|
"zip"
|
|
143
147
|
]);
|
|
144
|
-
function
|
|
148
|
+
function isNativeDocumentationResourcePath(pathname) {
|
|
145
149
|
const leaf = pathname.slice(pathname.lastIndexOf("/") + 1);
|
|
146
150
|
const extension = leaf.includes(".") ? leaf.slice(leaf.lastIndexOf(".") + 1).toLowerCase() : "";
|
|
147
|
-
return extension !== "" &&
|
|
151
|
+
return extension !== "" && RESOURCE_EXTENSIONS.has(extension);
|
|
148
152
|
}
|
|
149
153
|
|
|
150
|
-
// src/
|
|
154
|
+
// src/documentation/runtime/routing.ts
|
|
151
155
|
var RESOURCE_ROUTES = /* @__PURE__ */ new Set(["/mcp"]);
|
|
152
|
-
var RESOURCE_PREFIXES = ["/api/", "/
|
|
153
|
-
function
|
|
156
|
+
var RESOURCE_PREFIXES = ["/api/", "/assets/", "/data/", "/media/", "/.well-known/"];
|
|
157
|
+
function shouldHandleDocumentationNavigation(href, basePath = "/docs") {
|
|
154
158
|
if (!href.startsWith("/") || href.startsWith("//")) return false;
|
|
155
159
|
const pathname = href.split(/[?#]/, 1)[0] ?? "";
|
|
156
|
-
|
|
157
|
-
if (
|
|
158
|
-
|
|
160
|
+
const logical = documentationLogicalPath(basePath, pathname);
|
|
161
|
+
if (!logical || RESOURCE_ROUTES.has(logical)) return false;
|
|
162
|
+
if (RESOURCE_PREFIXES.some((prefix) => logical.startsWith(prefix))) return false;
|
|
163
|
+
return !isNativeDocumentationResourcePath(logical);
|
|
159
164
|
}
|
|
160
165
|
|
|
161
|
-
// src/
|
|
166
|
+
// src/documentation/runtime/client.tsx
|
|
162
167
|
import { jsx } from "react/jsx-runtime";
|
|
163
|
-
function
|
|
168
|
+
function DocumentationRuntimeRoot({
|
|
164
169
|
initialData,
|
|
165
170
|
loadPage,
|
|
166
171
|
pages = {},
|
|
167
|
-
Site =
|
|
172
|
+
Site = DefaultDocumentation
|
|
168
173
|
}) {
|
|
169
174
|
const [data, setData] = useState(initialData);
|
|
175
|
+
const basePath = initialData.basePath;
|
|
170
176
|
const [navigating, setNavigating] = useState(false);
|
|
171
177
|
const cacheRef = useRef(/* @__PURE__ */ new Map());
|
|
172
178
|
const inFlightRef = useRef(/* @__PURE__ */ new Map());
|
|
@@ -176,6 +182,8 @@ function DocsRuntimeRoot({
|
|
|
176
182
|
const scrollFrameRef = useRef(null);
|
|
177
183
|
const renderedLocationRef = useRef(locationKey(new URL(window.location.href)));
|
|
178
184
|
useEffect(() => {
|
|
185
|
+
const root = document.getElementById("deepspace-documentation-root");
|
|
186
|
+
root?.setAttribute("data-documentation-hydrated", "true");
|
|
179
187
|
cacheRef.current.set(locationKey(new URL(window.location.href)), currentRuntimeDocument(initialData));
|
|
180
188
|
const previous = history.scrollRestoration;
|
|
181
189
|
history.scrollRestoration = "manual";
|
|
@@ -200,6 +208,7 @@ function DocsRuntimeRoot({
|
|
|
200
208
|
window.removeEventListener("popstate", handlePopState);
|
|
201
209
|
if (scrollFrameRef.current !== null) window.cancelAnimationFrame(scrollFrameRef.current);
|
|
202
210
|
history.scrollRestoration = previous;
|
|
211
|
+
root?.removeAttribute("data-documentation-hydrated");
|
|
203
212
|
};
|
|
204
213
|
}, []);
|
|
205
214
|
const load = useCallback(async (target) => {
|
|
@@ -209,13 +218,13 @@ function DocsRuntimeRoot({
|
|
|
209
218
|
const pending = inFlightRef.current.get(key);
|
|
210
219
|
if (pending) return pending;
|
|
211
220
|
const request = (async () => {
|
|
212
|
-
const response = await fetch(routeDataUrl(target), {
|
|
213
|
-
headers: { Accept: "application/json", "x-deepspace-
|
|
221
|
+
const response = await fetch(routeDataUrl(target, basePath), {
|
|
222
|
+
headers: { Accept: "application/json", "x-deepspace-documentation-navigation": "true" }
|
|
214
223
|
});
|
|
215
224
|
if (!response.ok) throw new Error(`Route data returned ${response.status}`);
|
|
216
225
|
const routeDocument = await response.json();
|
|
217
226
|
if (!routeDocument?.data?.page || typeof routeDocument.title !== "string") {
|
|
218
|
-
throw new Error("Navigation response did not contain valid DeepSpace
|
|
227
|
+
throw new Error("Navigation response did not contain valid DeepSpace documentation route data");
|
|
219
228
|
}
|
|
220
229
|
const runtime = {
|
|
221
230
|
...routeDocument,
|
|
@@ -230,7 +239,7 @@ function DocsRuntimeRoot({
|
|
|
230
239
|
} finally {
|
|
231
240
|
if (inFlightRef.current.get(key) === request) inFlightRef.current.delete(key);
|
|
232
241
|
}
|
|
233
|
-
}, []);
|
|
242
|
+
}, [basePath]);
|
|
234
243
|
const navigate = useCallback(async (href, historyMode = "push", restoredScroll) => {
|
|
235
244
|
const target = new URL(href, window.location.href);
|
|
236
245
|
if (target.origin !== window.location.origin) {
|
|
@@ -242,7 +251,7 @@ function DocsRuntimeRoot({
|
|
|
242
251
|
if (targetKey === renderedLocationRef.current) {
|
|
243
252
|
if (historyMode === "push" && target.href !== currentUrl.href) {
|
|
244
253
|
replaceHistoryScroll(window.scrollY);
|
|
245
|
-
history.pushState({
|
|
254
|
+
history.pushState({ deepspaceDocumentation: true, scrollY: 0 }, "", target.href);
|
|
246
255
|
}
|
|
247
256
|
scrollToTarget(target, historyMode === "none" ? restoredScroll : void 0);
|
|
248
257
|
restoringHistoryRef.current = false;
|
|
@@ -259,7 +268,7 @@ function DocsRuntimeRoot({
|
|
|
259
268
|
if (navigationId !== navigationIdRef.current) return;
|
|
260
269
|
if (historyMode === "push") {
|
|
261
270
|
replaceHistoryScroll(window.scrollY);
|
|
262
|
-
history.pushState({
|
|
271
|
+
history.pushState({ deepspaceDocumentation: true, scrollY: 0 }, "", target.href);
|
|
263
272
|
}
|
|
264
273
|
syncDocument(runtime, target);
|
|
265
274
|
renderedLocationRef.current = targetKey;
|
|
@@ -281,7 +290,7 @@ function DocsRuntimeRoot({
|
|
|
281
290
|
} catch (error) {
|
|
282
291
|
if (navigationId !== navigationIdRef.current) return;
|
|
283
292
|
restoringHistoryRef.current = false;
|
|
284
|
-
console.error("[DeepSpace
|
|
293
|
+
console.error("[DeepSpace Documentation] Client navigation failed; falling back to a document navigation", error);
|
|
285
294
|
window.location.assign(target.href);
|
|
286
295
|
} finally {
|
|
287
296
|
window.clearTimeout(progressTimer);
|
|
@@ -294,7 +303,7 @@ function DocsRuntimeRoot({
|
|
|
294
303
|
});
|
|
295
304
|
}, [load, loadPage]);
|
|
296
305
|
useEffect(() => {
|
|
297
|
-
const root = document.getElementById("deepspace-
|
|
306
|
+
const root = document.getElementById("deepspace-documentation-root");
|
|
298
307
|
if (!root) return;
|
|
299
308
|
const anchorFor = (target) => target instanceof Element ? target.closest("a[href]") : null;
|
|
300
309
|
const handleClick = (event) => {
|
|
@@ -303,7 +312,7 @@ function DocsRuntimeRoot({
|
|
|
303
312
|
const anchor = anchorFor(event.target);
|
|
304
313
|
if (!anchor || anchor.target || anchor.hasAttribute("download")) return;
|
|
305
314
|
const href = anchor.getAttribute("href");
|
|
306
|
-
if (!href || !
|
|
315
|
+
if (!href || !shouldHandleDocumentationNavigation(href, basePath)) return;
|
|
307
316
|
const url = new URL(href, window.location.href);
|
|
308
317
|
if (url.origin !== window.location.origin) return;
|
|
309
318
|
if (url.pathname === window.location.pathname && url.search === window.location.search && url.hash) return;
|
|
@@ -312,7 +321,7 @@ function DocsRuntimeRoot({
|
|
|
312
321
|
};
|
|
313
322
|
const handlePrefetch = (event) => {
|
|
314
323
|
const href = anchorFor(event.target)?.getAttribute("href");
|
|
315
|
-
if (href &&
|
|
324
|
+
if (href && shouldHandleDocumentationNavigation(href, basePath)) prefetch(href);
|
|
316
325
|
};
|
|
317
326
|
root.addEventListener("click", handleClick);
|
|
318
327
|
root.addEventListener("focusin", handlePrefetch);
|
|
@@ -324,15 +333,15 @@ function DocsRuntimeRoot({
|
|
|
324
333
|
root.removeEventListener("mouseover", handlePrefetch);
|
|
325
334
|
root.removeEventListener("pointerdown", handlePrefetch);
|
|
326
335
|
};
|
|
327
|
-
}, [navigate, prefetch]);
|
|
336
|
+
}, [basePath, navigate, prefetch]);
|
|
328
337
|
useEffect(() => {
|
|
329
338
|
const timer = window.setTimeout(() => {
|
|
330
|
-
if (data.previous) prefetch(data.previous.route);
|
|
331
|
-
if (data.next) prefetch(data.next.route);
|
|
339
|
+
if (data.previous) prefetch(documentationPublicPath(basePath, data.previous.route));
|
|
340
|
+
if (data.next) prefetch(documentationPublicPath(basePath, data.next.route));
|
|
332
341
|
}, 350);
|
|
333
342
|
return () => window.clearTimeout(timer);
|
|
334
|
-
}, [data.next, data.page.route, data.previous, prefetch]);
|
|
335
|
-
const content = /* @__PURE__ */ jsx(
|
|
343
|
+
}, [basePath, data.next, data.page.route, data.previous, prefetch]);
|
|
344
|
+
const content = /* @__PURE__ */ jsx(DocumentationContent, { Page: pages[data.page.route], data });
|
|
336
345
|
return /* @__PURE__ */ jsx(
|
|
337
346
|
Site,
|
|
338
347
|
{
|
|
@@ -347,21 +356,21 @@ function DocsRuntimeRoot({
|
|
|
347
356
|
);
|
|
348
357
|
}
|
|
349
358
|
var hydrated = false;
|
|
350
|
-
function
|
|
359
|
+
function hydrateDocumentation({
|
|
351
360
|
loadPage,
|
|
352
361
|
pages,
|
|
353
362
|
Site
|
|
354
363
|
} = {}) {
|
|
355
|
-
const root = document.getElementById("deepspace-
|
|
356
|
-
const payload = document.getElementById("deepspace-
|
|
364
|
+
const root = document.getElementById("deepspace-documentation-root");
|
|
365
|
+
const payload = document.getElementById("deepspace-documentation-data");
|
|
357
366
|
if (hydrated || !root || !payload?.textContent) return;
|
|
358
367
|
try {
|
|
359
368
|
const initialData = JSON.parse(payload.textContent);
|
|
360
369
|
hydrated = true;
|
|
361
|
-
hydrateRoot(root, /* @__PURE__ */ jsx(
|
|
370
|
+
hydrateRoot(root, /* @__PURE__ */ jsx(DocumentationRuntimeRoot, { initialData, loadPage, pages, Site }));
|
|
362
371
|
} catch (error) {
|
|
363
372
|
root.setAttribute("data-hydration-error", "true");
|
|
364
|
-
console.error("[DeepSpace
|
|
373
|
+
console.error("[DeepSpace Documentation] Unable to hydrate the documentation surface", error);
|
|
365
374
|
}
|
|
366
375
|
}
|
|
367
376
|
export {
|
|
@@ -369,10 +378,10 @@ export {
|
|
|
369
378
|
AccordionGroup,
|
|
370
379
|
Card,
|
|
371
380
|
CodeGroup,
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
381
|
+
DefaultDocumentation,
|
|
382
|
+
DocumentationApp,
|
|
383
|
+
DocumentationContent,
|
|
384
|
+
DocumentationRuntimeRoot,
|
|
376
385
|
Info,
|
|
377
386
|
Note,
|
|
378
387
|
Step,
|
|
@@ -381,6 +390,6 @@ export {
|
|
|
381
390
|
Tabs,
|
|
382
391
|
Tip,
|
|
383
392
|
Warning,
|
|
384
|
-
|
|
393
|
+
hydrateDocumentation
|
|
385
394
|
};
|
|
386
|
-
//# sourceMappingURL=
|
|
395
|
+
//# sourceMappingURL=documentation-client-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/documentation/runtime/client.tsx","../src/documentation/runtime/client-document.ts","../src/documentation/resource-path.ts","../src/documentation/runtime/routing.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react'\nimport { flushSync } from 'react-dom'\nimport { hydrateRoot } from 'react-dom/client'\nimport type { DocumentationRuntimeData, DocumentationRuntimeRouteDocument } from '../types'\nimport { documentationPublicPath } from '../routing'\nimport {\n currentHistoryState,\n currentRuntimeDocument,\n focusArticleHeading,\n locationKey,\n replaceHistoryScroll,\n routeDataUrl,\n scrollToTarget,\n syncDocument,\n type RuntimeDocument,\n} from './client-document'\nimport {\n DefaultDocumentation,\n DocumentationContent,\n type DocumentationPageComponent,\n type DocumentationSiteComponent,\n} from './public'\nimport { shouldHandleDocumentationNavigation } from './routing'\nexport * from './public'\n\n\ntype HistoryMode = 'none' | 'push'\n\nexport function DocumentationRuntimeRoot({\n initialData,\n loadPage,\n pages = {},\n Site = DefaultDocumentation as DocumentationSiteComponent,\n}: {\n initialData: DocumentationRuntimeData\n loadPage?: (route: string) => Promise<void>\n pages?: Record<string, DocumentationPageComponent>\n Site?: DocumentationSiteComponent\n}) {\n const [data, setData] = useState(initialData)\n const basePath = initialData.basePath\n const [navigating, setNavigating] = useState(false)\n const cacheRef = useRef(new Map<string, RuntimeDocument>())\n const inFlightRef = useRef(new Map<string, Promise<RuntimeDocument>>())\n const siteDataRef = useRef({ config: initialData.config, navigation: initialData.navigation })\n const navigationIdRef = useRef(0)\n const restoringHistoryRef = useRef(false)\n const scrollFrameRef = useRef<number | null>(null)\n const renderedLocationRef = useRef(locationKey(new URL(window.location.href)))\n\n useEffect(() => {\n const root = document.getElementById('deepspace-documentation-root')\n root?.setAttribute('data-documentation-hydrated', 'true')\n cacheRef.current.set(locationKey(new URL(window.location.href)), currentRuntimeDocument(initialData))\n const previous = history.scrollRestoration\n history.scrollRestoration = 'manual'\n replaceHistoryScroll(window.scrollY)\n const handleScroll = (): void => {\n if (restoringHistoryRef.current) return\n if (scrollFrameRef.current !== null) return\n scrollFrameRef.current = window.requestAnimationFrame(() => {\n scrollFrameRef.current = null\n replaceHistoryScroll(window.scrollY)\n })\n }\n const handlePopState = (): void => {\n const restoredScroll = currentHistoryState().scrollY\n restoringHistoryRef.current = true\n void navigate(window.location.href, 'none', restoredScroll)\n }\n window.addEventListener('scroll', handleScroll, { passive: true })\n window.addEventListener('popstate', handlePopState)\n return () => {\n window.removeEventListener('scroll', handleScroll)\n window.removeEventListener('popstate', handlePopState)\n if (scrollFrameRef.current !== null) window.cancelAnimationFrame(scrollFrameRef.current)\n history.scrollRestoration = previous\n root?.removeAttribute('data-documentation-hydrated')\n }\n // The initial payload is immutable for the lifetime of this hydrated root.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const load = useCallback(async (target: URL): Promise<RuntimeDocument> => {\n const key = locationKey(target)\n const cached = cacheRef.current.get(key)\n if (cached) return cached\n const pending = inFlightRef.current.get(key)\n if (pending) return pending\n const request = (async (): Promise<RuntimeDocument> => {\n const response = await fetch(routeDataUrl(target, basePath), {\n headers: { Accept: 'application/json', 'x-deepspace-documentation-navigation': 'true' },\n })\n if (!response.ok) throw new Error(`Route data returned ${response.status}`)\n const routeDocument = await response.json() as DocumentationRuntimeRouteDocument\n if (!routeDocument?.data?.page || typeof routeDocument.title !== 'string') {\n throw new Error('Navigation response did not contain valid DeepSpace documentation route data')\n }\n const runtime: RuntimeDocument = {\n ...routeDocument,\n data: { ...siteDataRef.current, ...routeDocument.data },\n }\n cacheRef.current.set(key, runtime)\n return runtime\n })()\n inFlightRef.current.set(key, request)\n try {\n return await request\n } finally {\n if (inFlightRef.current.get(key) === request) inFlightRef.current.delete(key)\n }\n }, [basePath])\n\n const navigate = useCallback(async (\n href: string,\n historyMode: HistoryMode = 'push',\n restoredScroll?: number,\n ): Promise<void> => {\n const target = new URL(href, window.location.href)\n if (target.origin !== window.location.origin) {\n window.location.assign(target.href)\n return\n }\n const currentUrl = new URL(window.location.href)\n const targetKey = locationKey(target)\n if (targetKey === renderedLocationRef.current) {\n if (historyMode === 'push' && target.href !== currentUrl.href) {\n replaceHistoryScroll(window.scrollY)\n history.pushState({ deepspaceDocumentation: true, scrollY: 0 }, '', target.href)\n }\n scrollToTarget(target, historyMode === 'none' ? restoredScroll : undefined)\n restoringHistoryRef.current = false\n replaceHistoryScroll(window.scrollY)\n return\n }\n\n const navigationId = ++navigationIdRef.current\n const progressTimer = window.setTimeout(() => {\n if (navigationId === navigationIdRef.current) setNavigating(true)\n }, 120)\n try {\n const runtime = await load(target)\n await loadPage?.(runtime.data.page.route)\n if (navigationId !== navigationIdRef.current) return\n if (historyMode === 'push') {\n replaceHistoryScroll(window.scrollY)\n history.pushState({ deepspaceDocumentation: true, scrollY: 0 }, '', target.href)\n }\n syncDocument(runtime, target)\n renderedLocationRef.current = targetKey\n const startViewTransition = typeof document.startViewTransition === 'function'\n ? document.startViewTransition.bind(document)\n : undefined\n const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches\n if (startViewTransition && !prefersReducedMotion) {\n const transition = startViewTransition(() => {\n flushSync(() => setData(runtime.data))\n })\n await transition.updateCallbackDone\n } else {\n flushSync(() => setData(runtime.data))\n }\n scrollToTarget(target, historyMode === 'none' ? restoredScroll : undefined)\n restoringHistoryRef.current = false\n replaceHistoryScroll(window.scrollY)\n focusArticleHeading()\n if (navigationId === navigationIdRef.current) setNavigating(false)\n } catch (error) {\n if (navigationId !== navigationIdRef.current) return\n restoringHistoryRef.current = false\n console.error('[DeepSpace Documentation] Client navigation failed; falling back to a document navigation', error)\n window.location.assign(target.href)\n } finally {\n window.clearTimeout(progressTimer)\n }\n }, [load, loadPage])\n\n const prefetch = useCallback((href: string): void => {\n const target = new URL(href, window.location.href)\n if (target.origin !== window.location.origin || cacheRef.current.has(locationKey(target))) return\n void load(target).then((runtime) => loadPage?.(runtime.data.page.route)).catch(() => {\n // Prefetch is opportunistic; an explicit navigation still retries.\n })\n }, [load, loadPage])\n\n useEffect(() => {\n const root = document.getElementById('deepspace-documentation-root')\n if (!root) return\n const anchorFor = (target: EventTarget | null): HTMLAnchorElement | null =>\n target instanceof Element ? target.closest<HTMLAnchorElement>('a[href]') : null\n const handleClick = (event: MouseEvent): void => {\n if (event.defaultPrevented || event.button !== 0) return\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return\n const anchor = anchorFor(event.target)\n if (!anchor || anchor.target || anchor.hasAttribute('download')) return\n const href = anchor.getAttribute('href')\n if (!href || !shouldHandleDocumentationNavigation(href, basePath)) return\n const url = new URL(href, window.location.href)\n if (url.origin !== window.location.origin) return\n if (url.pathname === window.location.pathname && url.search === window.location.search && url.hash) return\n event.preventDefault()\n void navigate(`${url.pathname}${url.search}${url.hash}`)\n }\n const handlePrefetch = (event: Event): void => {\n const href = anchorFor(event.target)?.getAttribute('href')\n if (href && shouldHandleDocumentationNavigation(href, basePath)) prefetch(href)\n }\n root.addEventListener('click', handleClick)\n root.addEventListener('focusin', handlePrefetch)\n root.addEventListener('mouseover', handlePrefetch)\n root.addEventListener('pointerdown', handlePrefetch)\n return () => {\n root.removeEventListener('click', handleClick)\n root.removeEventListener('focusin', handlePrefetch)\n root.removeEventListener('mouseover', handlePrefetch)\n root.removeEventListener('pointerdown', handlePrefetch)\n }\n }, [basePath, navigate, prefetch])\n\n useEffect(() => {\n const timer = window.setTimeout(() => {\n if (data.previous) prefetch(documentationPublicPath(basePath, data.previous.route))\n if (data.next) prefetch(documentationPublicPath(basePath, data.next.route))\n }, 350)\n return () => window.clearTimeout(timer)\n }, [basePath, data.next, data.page.route, data.previous, prefetch])\n\n const content = <DocumentationContent Page={pages[data.page.route]} data={data} />\n return (\n <Site\n data={data}\n navigating={navigating}\n onNavigate={(href) => { void navigate(href) }}\n onPrefetch={prefetch}\n >\n {content}\n </Site>\n )\n}\n\n\nlet hydrated = false\n\nexport function hydrateDocumentation({\n loadPage,\n pages,\n Site,\n}: {\n loadPage?: (route: string) => Promise<void>\n pages?: Record<string, DocumentationPageComponent>\n Site?: DocumentationSiteComponent\n} = {}): void {\n const root = document.getElementById('deepspace-documentation-root')\n const payload = document.getElementById('deepspace-documentation-data')\n if (hydrated || !root || !payload?.textContent) return\n try {\n const initialData = JSON.parse(payload.textContent) as DocumentationRuntimeData\n hydrated = true\n hydrateRoot(root, <DocumentationRuntimeRoot initialData={initialData} loadPage={loadPage} pages={pages} Site={Site} />)\n } catch (error) {\n root.setAttribute('data-hydration-error', 'true')\n console.error('[DeepSpace Documentation] Unable to hydrate the documentation surface', error)\n }\n}\n","import type { DocumentationRuntimeData, DocumentationRuntimeRouteDocument } from '../types'\nimport { documentationLogicalPath, documentationPublicPath } from '../routing'\n\nexport interface RuntimeDocument extends Omit<DocumentationRuntimeRouteDocument, 'data'> {\n data: DocumentationRuntimeData\n}\n\nexport interface DocumentationHistoryState {\n deepspaceDocumentation?: boolean\n scrollY?: number\n [key: string]: unknown\n}\n\nexport function currentRuntimeDocument(data: DocumentationRuntimeData): RuntimeDocument {\n return {\n canonical: document.querySelector<HTMLLinkElement>('link[rel=\"canonical\"]')?.href ?? null,\n data,\n description: document.querySelector<HTMLMetaElement>('meta[name=\"description\"]')?.content ?? null,\n openGraph: readOpenGraph(document),\n robots: document.querySelector<HTMLMetaElement>('meta[name=\"robots\"]')?.content ?? null,\n title: document.title,\n }\n}\n\nexport function syncDocument(runtime: RuntimeDocument, target: URL): void {\n document.title = runtime.title\n syncMeta('description', runtime.description)\n syncMeta('robots', runtime.robots)\n syncLink('canonical', runtime.canonical)\n for (const property of ['og:title', 'og:description', 'og:url'] as const) {\n syncMeta(property, runtime.openGraph[property], 'property')\n }\n document.body.dataset.route = runtime.data.page.route === '/404'\n ? target.pathname\n : runtime.data.page.route\n}\n\nfunction readOpenGraph(source: Document): DocumentationRuntimeRouteDocument['openGraph'] {\n return Object.fromEntries(\n ['og:title', 'og:description', 'og:url'].map((property) => [\n property,\n source.querySelector<HTMLMetaElement>(`meta[property=\"${property}\"]`)?.content ?? null,\n ]),\n ) as DocumentationRuntimeRouteDocument['openGraph']\n}\n\nfunction syncMeta(name: string, content: string | null, attribute: 'name' | 'property' = 'name'): void {\n let element = document.head.querySelector<HTMLMetaElement>(`meta[${attribute}=\"${name}\"]`)\n if (!content) {\n element?.remove()\n return\n }\n if (!element) {\n element = document.createElement('meta')\n element.setAttribute(attribute, name)\n document.head.appendChild(element)\n }\n element.content = content\n}\n\nfunction syncLink(rel: string, href: string | null): void {\n let element = document.head.querySelector<HTMLLinkElement>(`link[rel=\"${rel}\"]`)\n if (!href) {\n element?.remove()\n return\n }\n if (!element) {\n element = document.createElement('link')\n element.rel = rel\n document.head.appendChild(element)\n }\n element.href = href\n}\n\nexport function locationKey(url: URL): string {\n return `${url.pathname}${url.search}`\n}\n\nexport function routeDataUrl(url: URL, basePath: string): string {\n const logical = documentationLogicalPath(basePath, url.pathname)\n if (logical === null) throw new Error(`${url.pathname} is outside the documentation route`)\n const clean = logical.replace(/^\\/+|\\/+$/g, '')\n return `${documentationPublicPath(basePath, `/data/${clean || 'index'}.json`)}${url.search}`\n}\n\nexport function scrollToTarget(target: URL, restoredScroll?: number): void {\n if (target.hash) {\n const id = decodeURIComponent(target.hash.slice(1))\n document.getElementById(id)?.scrollIntoView()\n return\n }\n window.scrollTo({ top: restoredScroll ?? 0, behavior: 'instant' })\n}\n\nexport function currentHistoryState(): DocumentationHistoryState {\n return history.state && typeof history.state === 'object'\n ? history.state as DocumentationHistoryState\n : {}\n}\n\nexport function replaceHistoryScroll(scrollY: number): void {\n history.replaceState(\n { ...currentHistoryState(), deepspaceDocumentation: true, scrollY },\n '',\n window.location.href,\n )\n}\n\nexport function focusArticleHeading(): void {\n const heading = document.querySelector<HTMLElement>('.documentation-article h1')\n if (!heading) return\n heading.tabIndex = -1\n heading.focus({ preventScroll: true })\n}\n","const RESOURCE_EXTENSIONS = new Set([\n '7z', 'avif', 'css', 'csv', 'gif', 'gz', 'ico', 'jpeg', 'jpg', 'js', 'json', 'map',\n 'md', 'mjs', 'mp3', 'mp4', 'pdf', 'png', 'svg', 'tar', 'txt', 'wasm', 'webm',\n 'webp', 'woff', 'woff2', 'xml', 'yaml', 'yml', 'zip',\n])\n\n/** Distinguish generated documentation resources from authored page routes. */\nexport function isNativeDocumentationResourcePath(pathname: string): boolean {\n const leaf = pathname.slice(pathname.lastIndexOf('/') + 1)\n const extension = leaf.includes('.') ? leaf.slice(leaf.lastIndexOf('.') + 1).toLowerCase() : ''\n return extension !== '' && RESOURCE_EXTENSIONS.has(extension)\n}\n\n/** Encode a compiler-owned logical path without collapsing its segment boundaries. */\nexport function encodeNativeDocumentationPath(pathname: string): string {\n return pathname.split('/').map((segment) => encodeURIComponent(segment)).join('/')\n}\n\n/** Normalize one URL pathname while preserving encoded slashes as data, not separators. */\nexport function canonicalNativeDocumentationRequestPath(pathname: string): string | null {\n try {\n return pathname\n .split('/')\n .map((segment) => encodeURIComponent(decodeURIComponent(segment)))\n .join('/')\n } catch {\n return null\n }\n}\n","import { documentationLogicalPath } from '../routing'\nimport { isNativeDocumentationResourcePath } from '../resource-path'\n\nconst RESOURCE_ROUTES = new Set(['/mcp'])\nconst RESOURCE_PREFIXES = ['/api/', '/assets/', '/data/', '/media/', '/.well-known/'] as const\n\n/** Return true only for pages compiled into the client-side documentation graph. */\nexport function shouldHandleDocumentationNavigation(href: string, basePath = '/docs'): boolean {\n if (!href.startsWith('/') || href.startsWith('//')) return false\n const pathname = href.split(/[?#]/, 1)[0] ?? ''\n const logical = documentationLogicalPath(basePath, pathname)\n if (!logical || RESOURCE_ROUTES.has(logical)) return false\n if (RESOURCE_PREFIXES.some((prefix) => logical.startsWith(prefix))) return false\n return !isNativeDocumentationResourcePath(logical)\n}\n"],"mappings":"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","names":[]}
|