@backmatter/next 0.0.33 → 0.0.35
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/package.json +3 -3
- package/src/preview-refresh.tsx +48 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backmatter/next",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.35",
|
|
4
4
|
"description": "Experimental Next.js adapter for Backmatter. APIs will break. Not ready for production.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -47,10 +47,10 @@
|
|
|
47
47
|
"test": "bun test"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@backmatter/core": "^0.0.
|
|
50
|
+
"@backmatter/core": "^0.0.27",
|
|
51
51
|
"@mdx-js/mdx": "^3.1.1",
|
|
52
52
|
"remark-gfm": "^4.0.1",
|
|
53
|
-
"@backmatter/studio": "^0.0.
|
|
53
|
+
"@backmatter/studio": "^0.0.13"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"next": ">=16.3.0",
|
package/src/preview-refresh.tsx
CHANGED
|
@@ -8,9 +8,14 @@ import {
|
|
|
8
8
|
createPreviewPage,
|
|
9
9
|
createWindowPreviewTransport,
|
|
10
10
|
type PreviewChannelRef,
|
|
11
|
+
type PreviewPageSession,
|
|
11
12
|
type PreviewRenderDoc,
|
|
12
13
|
type PreviewTransport,
|
|
13
14
|
} from "@backmatter/core/preview";
|
|
15
|
+
import { POINTER_ARM_EVENT } from "@backmatter/studio/src/chat/pointer-arm";
|
|
16
|
+
import { installPreviewPointer } from "@backmatter/studio/src/install-preview-pointer";
|
|
17
|
+
import { registerPreviewPointerHost } from "@backmatter/studio/src/preview-pointer-host";
|
|
18
|
+
import { findPointedElement, highlightPointedElement } from "@backmatter/studio/src/site-pointer";
|
|
14
19
|
import { fanInPreviewTransports, sitePageTransport } from "./site-channel";
|
|
15
20
|
import { PreviewPageReloader as PreviewStreamReloader, PreviewRemoved } from "./preview-live";
|
|
16
21
|
|
|
@@ -189,9 +194,27 @@ export function PreviewClient({
|
|
|
189
194
|
startTransition(() => router.refresh());
|
|
190
195
|
};
|
|
191
196
|
const unsubscribeTree = subscribeTreeStream(ref, refreshOthers);
|
|
192
|
-
|
|
197
|
+
let session: PreviewPageSession;
|
|
198
|
+
const previewPointer = installPreviewPointer(document, {
|
|
199
|
+
bar: () => document.querySelector("[data-backmatter-devbar]"),
|
|
200
|
+
ignore: (target) => {
|
|
201
|
+
if (!(target instanceof Element)) return true;
|
|
202
|
+
if (target.closest("[data-backmatter-panel]")) return true;
|
|
203
|
+
return target.closest("iframe") !== null;
|
|
204
|
+
},
|
|
205
|
+
onEditorGrab: (grab) => session.grab(grab),
|
|
206
|
+
onDevbarGrab: (grab) => {
|
|
207
|
+
window.dispatchEvent(new CustomEvent("backmatter:devbar-grab", { detail: grab }));
|
|
208
|
+
},
|
|
209
|
+
onEscape: (source) => {
|
|
210
|
+
if (source === "editor") session.point(false);
|
|
211
|
+
window.dispatchEvent(new CustomEvent(POINTER_ARM_EVENT, { detail: { on: false } }));
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
session = createPreviewPage({
|
|
193
215
|
ref,
|
|
194
216
|
transport,
|
|
217
|
+
capabilities: ["point"],
|
|
195
218
|
subscribeSse: (onEvent) => subscribeDocStream(ref, onEvent),
|
|
196
219
|
renderer: async (_ref, doc) => {
|
|
197
220
|
const result = await renderPreview(ref, doc, checkoutToken);
|
|
@@ -212,10 +235,34 @@ export function PreviewClient({
|
|
|
212
235
|
onNavigate: (path) => {
|
|
213
236
|
startTransition(() => router.push(path));
|
|
214
237
|
},
|
|
238
|
+
onPoint(on) {
|
|
239
|
+
if (on) {
|
|
240
|
+
previewPointer.arm("editor");
|
|
241
|
+
window.dispatchEvent(new CustomEvent(POINTER_ARM_EVENT, { detail: { on: false } }));
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (previewPointer.source() === "editor") previewPointer.disarm();
|
|
245
|
+
},
|
|
246
|
+
onHighlight(blockId) {
|
|
247
|
+
const target = blockId ? findPointedElement(document, { blockId, quote: "" }) : null;
|
|
248
|
+
highlightPointedElement(document, target);
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
const stopHost = registerPreviewPointerHost({
|
|
253
|
+
armFromDevbar() {
|
|
254
|
+
previewPointer.arm("devbar");
|
|
255
|
+
session.point(false);
|
|
256
|
+
},
|
|
257
|
+
disarmFromDevbar() {
|
|
258
|
+
if (previewPointer.source() !== "devbar") return;
|
|
259
|
+
previewPointer.disarm();
|
|
215
260
|
},
|
|
216
261
|
});
|
|
217
262
|
return () => {
|
|
218
263
|
unsubscribeTree();
|
|
264
|
+
stopHost();
|
|
265
|
+
previewPointer.dispose();
|
|
219
266
|
session.close();
|
|
220
267
|
windowTransport?.close();
|
|
221
268
|
};
|