feat: synced blocks (transclusion) (#2163)

* feat: synced blocks (transclusion)

* fix:remove name

* make placeholders smaller

* feat: enforce strict transclusion schema

* fix: scope synced blocks to workspace, gate unsync on edit permission

* fix collab module error
This commit is contained in:
Philip Okugbe
2026-05-08 13:23:16 +01:00
committed by GitHub
parent c9fa6e20b3
commit de60aa7e61
64 changed files with 4388 additions and 105 deletions

View File

@@ -9,7 +9,6 @@ import SubScript from "@tiptap/extension-subscript";
import { Typography } from "@tiptap/extension-typography";
import { TextStyle } from "@tiptap/extension-text-style";
import { Color } from "@tiptap/extension-color";
import GlobalDragHandle from "tiptap-extension-global-drag-handle";
import { Youtube } from "@tiptap/extension-youtube";
import SlashCommand, { SlashCommandExtension as Command } from "@/features/editor/extensions/slash-command";
import renderItems from "@/features/editor/components/slash-menu/render-items";
@@ -52,6 +51,8 @@ import {
Columns,
Column,
Status,
TransclusionSource,
TransclusionReference,
} from "@docmost/editor-ext";
import {
randomElement,
@@ -80,6 +81,8 @@ import ExcalidrawView from "@/features/editor/components/excalidraw/excalidraw-v
import EmbedView from "@/features/editor/components/embed/embed-view.tsx";
import PdfView from "@/features/editor/components/pdf/pdf-view.tsx";
import SubpagesView from "@/features/editor/components/subpages/subpages-view.tsx";
import TransclusionView from "@/features/editor/components/transclusion/transclusion-view.tsx";
import TransclusionReferenceView from "@/features/editor/components/transclusion/transclusion-reference-view.tsx";
import { common, createLowlight } from "lowlight";
import plaintext from "highlight.js/lib/languages/plaintext";
import powershell from "highlight.js/lib/languages/powershell";
@@ -100,6 +103,7 @@ import { MarkdownClipboard } from "@/features/editor/extensions/markdown-clipboa
import EmojiCommand from "./emoji-command";
import { countWords } from "alfaaz";
import AutoJoiner from "@/features/editor/extensions/autojoiner.ts";
import GlobalDragHandle from "@/features/editor/extensions/drag-handle.ts";
const lowlight = createLowlight(common);
lowlight.register("mermaid", plaintext);
@@ -167,7 +171,7 @@ export const mainExtensions = [
SharedStorage,
Heading,
UniqueID.configure({
types: ["heading", "paragraph"],
types: ["heading", "paragraph", "transclusionSource"],
filterTransaction: (transaction) => !isChangeOrigin(transaction),
}),
Placeholder.configure({
@@ -215,7 +219,9 @@ export const mainExtensions = [
}),
Typography,
TrailingNode,
GlobalDragHandle,
GlobalDragHandle.configure({
customNodes: ["transclusionSource", "transclusionReference"],
}),
TextStyle,
Color,
SlashCommand,
@@ -351,6 +357,12 @@ export const mainExtensions = [
Status.configure({
view: StatusView,
}),
TransclusionSource.configure({
view: TransclusionView,
}),
TransclusionReference.configure({
view: TransclusionReferenceView,
}),
MarkdownClipboard.configure({
transformPastedText: true,
}),