diff --git a/blocksuite/affine/blocks/root/src/clipboard/readonly-clipboard.ts b/blocksuite/affine/blocks/root/src/clipboard/readonly-clipboard.ts index 9b2b6ee14..82e44916a 100644 --- a/blocksuite/affine/blocks/root/src/clipboard/readonly-clipboard.ts +++ b/blocksuite/affine/blocks/root/src/clipboard/readonly-clipboard.ts @@ -1,12 +1,6 @@ import { - AttachmentAdapter, - ClipboardAdapter, copyMiddleware, defaultImageProxyMiddleware, - HtmlAdapter, - ImageAdapter, - MixTextAdapter, - NotionTextAdapter, titleMiddleware, } from '@blocksuite/affine-shared/adapters'; import { @@ -15,67 +9,7 @@ import { getSelectedModelsCommand, } from '@blocksuite/affine-shared/commands'; import { DisposableGroup } from '@blocksuite/global/disposable'; -import { - ClipboardAdapterConfigExtension, - LifeCycleWatcher, - type UIEventHandler, -} from '@blocksuite/std'; -import type { ExtensionType } from '@blocksuite/store'; - -const SnapshotClipboardConfig = ClipboardAdapterConfigExtension({ - mimeType: ClipboardAdapter.MIME, - adapter: ClipboardAdapter, - priority: 100, -}); - -const NotionClipboardConfig = ClipboardAdapterConfigExtension({ - mimeType: 'text/_notion-text-production', - adapter: NotionTextAdapter, - priority: 95, -}); - -const HtmlClipboardConfig = ClipboardAdapterConfigExtension({ - mimeType: 'text/html', - adapter: HtmlAdapter, - priority: 90, -}); - -const imageClipboardConfigs = [ - 'image/apng', - 'image/avif', - 'image/gif', - 'image/jpeg', - 'image/png', - 'image/svg+xml', - 'image/webp', -].map(mimeType => { - return ClipboardAdapterConfigExtension({ - mimeType, - adapter: ImageAdapter, - priority: 80, - }); -}); - -const PlainTextClipboardConfig = ClipboardAdapterConfigExtension({ - mimeType: 'text/plain', - adapter: MixTextAdapter, - priority: 70, -}); - -const AttachmentClipboardConfig = ClipboardAdapterConfigExtension({ - mimeType: '*/*', - adapter: AttachmentAdapter, - priority: 60, -}); - -export const clipboardConfigs: ExtensionType[] = [ - SnapshotClipboardConfig, - NotionClipboardConfig, - HtmlClipboardConfig, - ...imageClipboardConfigs, - PlainTextClipboardConfig, - AttachmentClipboardConfig, -]; +import { LifeCycleWatcher, type UIEventHandler } from '@blocksuite/std'; /** * ReadOnlyClipboard is a class that provides a read-only clipboard for the root block. diff --git a/blocksuite/affine/blocks/root/src/common-specs/index.ts b/blocksuite/affine/blocks/root/src/common-specs/index.ts index 0deb0c593..2532a0e6b 100644 --- a/blocksuite/affine/blocks/root/src/common-specs/index.ts +++ b/blocksuite/affine/blocks/root/src/common-specs/index.ts @@ -4,14 +4,12 @@ import { BlockFlavourIdentifier, FlavourExtension } from '@blocksuite/std'; import type { ExtensionType } from '@blocksuite/store'; import { RootBlockAdapterExtensions } from '../adapters/extension'; -import { clipboardConfigs } from '../clipboard'; import { builtinToolbarConfig } from '../configs/toolbar'; import { fallbackKeymap } from '../keyboard/keymap'; export const CommonSpecs: ExtensionType[] = [ FlavourExtension('affine:page'), ...RootBlockAdapterExtensions, - ...clipboardConfigs, fallbackKeymap, ToolbarModuleExtension({ diff --git a/blocksuite/affine/foundation/src/view.ts b/blocksuite/affine/foundation/src/view.ts index 5c9da7d82..e7de06f29 100644 --- a/blocksuite/affine/foundation/src/view.ts +++ b/blocksuite/affine/foundation/src/view.ts @@ -3,6 +3,14 @@ import { type ViewExtensionContext, ViewExtensionProvider, } from '@blocksuite/affine-ext-loader'; +import { + AttachmentAdapter, + ClipboardAdapter, + HtmlAdapter, + ImageAdapter, + MixTextAdapter, + NotionTextAdapter, +} from '@blocksuite/affine-shared/adapters'; import { AutoClearSelectionService, DefaultOpenDocExtension, @@ -16,10 +24,67 @@ import { ThemeService, ToolbarRegistryExtension, } from '@blocksuite/affine-shared/services'; +import { ClipboardAdapterConfigExtension } from '@blocksuite/std'; import { InteractivityManager, ToolController } from '@blocksuite/std/gfx'; +import type { ExtensionType } from '@blocksuite/store'; import { effects } from './effects'; +const SnapshotClipboardConfig = ClipboardAdapterConfigExtension({ + mimeType: ClipboardAdapter.MIME, + adapter: ClipboardAdapter, + priority: 100, +}); + +const NotionClipboardConfig = ClipboardAdapterConfigExtension({ + mimeType: 'text/_notion-text-production', + adapter: NotionTextAdapter, + priority: 95, +}); + +const HtmlClipboardConfig = ClipboardAdapterConfigExtension({ + mimeType: 'text/html', + adapter: HtmlAdapter, + priority: 90, +}); + +const imageClipboardConfigs = [ + 'image/apng', + 'image/avif', + 'image/gif', + 'image/jpeg', + 'image/png', + 'image/svg+xml', + 'image/webp', +].map(mimeType => { + return ClipboardAdapterConfigExtension({ + mimeType, + adapter: ImageAdapter, + priority: 80, + }); +}); + +const PlainTextClipboardConfig = ClipboardAdapterConfigExtension({ + mimeType: 'text/plain', + adapter: MixTextAdapter, + priority: 70, +}); + +const AttachmentClipboardConfig = ClipboardAdapterConfigExtension({ + mimeType: '*/*', + adapter: AttachmentAdapter, + priority: 60, +}); + +export const clipboardConfigs: ExtensionType[] = [ + SnapshotClipboardConfig, + NotionClipboardConfig, + HtmlClipboardConfig, + ...imageClipboardConfigs, + PlainTextClipboardConfig, + AttachmentClipboardConfig, +]; + export class FoundationViewExtension extends ViewExtensionProvider { override name = 'foundation'; @@ -45,6 +110,7 @@ export class FoundationViewExtension extends ViewExtensionProvider { ToolbarRegistryExtension, AutoClearSelectionService, ]); + context.register(clipboardConfigs); if (this.isEdgeless(context.scope)) { context.register([InteractivityManager, ToolController]); }