diff --git a/blocksuite/affine/block-bookmark/package.json b/blocksuite/affine/block-bookmark/package.json index e3109fc204..93d3ee9201 100644 --- a/blocksuite/affine/block-bookmark/package.json +++ b/blocksuite/affine/block-bookmark/package.json @@ -17,6 +17,7 @@ "@blocksuite/affine-components": "workspace:*", "@blocksuite/affine-model": "workspace:*", "@blocksuite/affine-shared": "workspace:*", + "@blocksuite/affine-widget-slash-menu": "workspace:*", "@blocksuite/block-std": "workspace:*", "@blocksuite/global": "workspace:*", "@blocksuite/icons": "^2.2.1", diff --git a/blocksuite/affine/block-bookmark/src/bookmark-spec.ts b/blocksuite/affine/block-bookmark/src/bookmark-spec.ts index 3467c4d277..dd3a8d7353 100644 --- a/blocksuite/affine/block-bookmark/src/bookmark-spec.ts +++ b/blocksuite/affine/block-bookmark/src/bookmark-spec.ts @@ -1,5 +1,6 @@ import { BookmarkBlockSchema } from '@blocksuite/affine-model'; import { ToolbarModuleExtension } from '@blocksuite/affine-shared/services'; +import { SlashMenuConfigExtension } from '@blocksuite/affine-widget-slash-menu'; import { BlockFlavourIdentifier, BlockViewExtension, @@ -9,6 +10,7 @@ import type { ExtensionType } from '@blocksuite/store'; import { literal } from 'lit/static-html.js'; import { BookmarkBlockAdapterExtensions } from './adapters/extension'; +import { bookmarkSlashMenuConfig } from './configs/slash-menu'; import { builtinToolbarConfig } from './configs/toolbar'; const flavour = BookmarkBlockSchema.model.flavour; @@ -25,4 +27,5 @@ export const BookmarkBlockSpec: ExtensionType[] = [ id: BlockFlavourIdentifier(flavour), config: builtinToolbarConfig, }), + SlashMenuConfigExtension(flavour, bookmarkSlashMenuConfig), ].flat(); diff --git a/blocksuite/affine/block-bookmark/src/configs/slash-menu.ts b/blocksuite/affine/block-bookmark/src/configs/slash-menu.ts new file mode 100644 index 0000000000..c683e621e9 --- /dev/null +++ b/blocksuite/affine/block-bookmark/src/configs/slash-menu.ts @@ -0,0 +1,42 @@ +import { toggleEmbedCardCreateModal } from '@blocksuite/affine-components/embed-card-modal'; +import { type SlashMenuConfig } from '@blocksuite/affine-widget-slash-menu'; +import { LinkIcon } from '@blocksuite/icons/lit'; + +import { LinkTooltip } from './tooltips'; + +export const bookmarkSlashMenuConfig: SlashMenuConfig = { + items: [ + { + name: 'Link', + description: 'Add a bookmark for reference.', + icon: LinkIcon(), + tooltip: { + figure: LinkTooltip, + caption: 'Link', + }, + group: '4_Content & Media@2', + when: ({ model }) => + model.doc.schema.flavourSchemaMap.has('affine:bookmark'), + action: ({ std, model }) => { + const { host } = std; + const parentModel = host.doc.getParent(model); + if (!parentModel) { + return; + } + const index = parentModel.children.indexOf(model) + 1; + toggleEmbedCardCreateModal( + host, + 'Links', + 'The added link will be displayed as a card view.', + { mode: 'page', parentModel, index } + ) + .then(() => { + if (model.text?.length === 0) { + model.doc.deleteBlock(model); + } + }) + .catch(console.error); + }, + }, + ], +}; diff --git a/blocksuite/affine/widget-slash-menu/src/tooltips/link.ts b/blocksuite/affine/block-bookmark/src/configs/tooltips.ts similarity index 100% rename from blocksuite/affine/widget-slash-menu/src/tooltips/link.ts rename to blocksuite/affine/block-bookmark/src/configs/tooltips.ts diff --git a/blocksuite/affine/block-bookmark/tsconfig.json b/blocksuite/affine/block-bookmark/tsconfig.json index 4494890a0c..4c7ec7ee67 100644 --- a/blocksuite/affine/block-bookmark/tsconfig.json +++ b/blocksuite/affine/block-bookmark/tsconfig.json @@ -11,6 +11,7 @@ { "path": "../components" }, { "path": "../model" }, { "path": "../shared" }, + { "path": "../widget-slash-menu" }, { "path": "../../framework/block-std" }, { "path": "../../framework/global" }, { "path": "../../framework/inline" }, diff --git a/blocksuite/affine/widget-slash-menu/src/tooltips/index.ts b/blocksuite/affine/widget-slash-menu/src/tooltips/index.ts index 11ab92f2be..eff93623b1 100644 --- a/blocksuite/affine/widget-slash-menu/src/tooltips/index.ts +++ b/blocksuite/affine/widget-slash-menu/src/tooltips/index.ts @@ -17,7 +17,6 @@ import { Heading5Tooltip } from './heading-5'; import { Heading6Tooltip } from './heading-6'; import { ItalicTooltip } from './italic'; import { LinearTooltip } from './linear'; -import { LinkTooltip } from './link'; import { LinkDocTooltip } from './link-doc'; import { MoveDownTooltip } from './move-down'; import { MoveUpTooltip } from './move-up'; @@ -126,11 +125,6 @@ export const slashMenuToolTips: Record = { caption: 'Link Doc', }, - Link: { - figure: LinkTooltip, - caption: 'Link', - }, - Attachment: { figure: AttachmentTooltip, caption: 'Attachment', diff --git a/tools/utils/src/workspace.gen.ts b/tools/utils/src/workspace.gen.ts index d9b8bbd525..68e57e7bec 100644 --- a/tools/utils/src/workspace.gen.ts +++ b/tools/utils/src/workspace.gen.ts @@ -36,6 +36,7 @@ export const PackageList = [ 'blocksuite/affine/components', 'blocksuite/affine/model', 'blocksuite/affine/shared', + 'blocksuite/affine/widget-slash-menu', 'blocksuite/framework/block-std', 'blocksuite/framework/global', 'blocksuite/framework/inline', diff --git a/yarn.lock b/yarn.lock index b3c1290084..aace16ca52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2248,6 +2248,7 @@ __metadata: "@blocksuite/affine-components": "workspace:*" "@blocksuite/affine-model": "workspace:*" "@blocksuite/affine-shared": "workspace:*" + "@blocksuite/affine-widget-slash-menu": "workspace:*" "@blocksuite/block-std": "workspace:*" "@blocksuite/global": "workspace:*" "@blocksuite/icons": "npm:^2.2.1"