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
@@ -25,6 +25,7 @@ import {
IconColumns3,
IconColumns2,
IconTag,
IconRotate2,
} from "@tabler/icons-react";
import {
CommandProps,
@@ -231,7 +232,15 @@ const CommandGroups: SlashMenuGroupedItemsType = {
{
title: "Audio",
description: "Upload any audio from your device.",
searchTerms: ["audio", "music", "sound", "mp3", "media", "file", "attachment"],
searchTerms: [
"audio",
"music",
"sound",
"mp3",
"media",
"file",
"attachment",
],
icon: IconMusic,
command: ({ editor, range }) => {
editor.chain().focus().deleteRange(range).run();
@@ -484,6 +493,28 @@ const CommandGroups: SlashMenuGroupedItemsType = {
editor.chain().focus().deleteRange(range).insertSubpages().run();
},
},
{
title: "Synced block",
description: "Create a block that stays in sync across pages.",
searchTerms: [
"sync",
"synced",
"synced block",
"excerpt",
"transclusion",
"reusable",
"snippet",
],
icon: IconRotate2,
command: ({ editor, range }: CommandProps) => {
editor
.chain()
.focus()
.deleteRange(range)
.insertTransclusionSource()
.run();
},
},
{
title: "2 Columns",
description: "Split content into two columns.",