diff --git a/blocksuite/blocks/src/index.ts b/blocksuite/blocks/src/index.ts index 83b5808068..75c05c1347 100644 --- a/blocksuite/blocks/src/index.ts +++ b/blocksuite/blocks/src/index.ts @@ -100,6 +100,10 @@ export { SpecProvider, stopPropagation, } from '@blocksuite/affine-shared/utils'; +export { + ViewportTurboRendererExtension, + ViewportTurboRendererIdentifier, +} from '@blocksuite/affine-shared/viewport-renderer'; export type { DragBlockPayload } from '@blocksuite/affine-widget-drag-handle'; const env: Record = diff --git a/packages/frontend/core/src/blocksuite/block-suite-editor/lit-adaper.tsx b/packages/frontend/core/src/blocksuite/block-suite-editor/lit-adaper.tsx index da25b82b0c..e6d386d653 100644 --- a/packages/frontend/core/src/blocksuite/block-suite-editor/lit-adaper.tsx +++ b/packages/frontend/core/src/blocksuite/block-suite-editor/lit-adaper.tsx @@ -21,7 +21,11 @@ import { toURLSearchParams } from '@affine/core/modules/navigation'; import { PeekViewService } from '@affine/core/modules/peek-view/services/peek-view'; import { WorkspaceService } from '@affine/core/modules/workspace'; import track from '@affine/track'; -import type { DocMode, DocTitle } from '@blocksuite/affine/blocks'; +import { + type DocMode, + type DocTitle, + ViewportTurboRendererExtension, +} from '@blocksuite/affine/blocks'; import type { Store } from '@blocksuite/affine/store'; import { useFramework, @@ -132,6 +136,10 @@ const usePatchSpecs = (mode: DocMode) => { const enableAI = useEnableAI(); + const enableTurboRenderer = useLiveData( + featureFlagService.flags.enable_turbo_renderer.$ + ); + const patchedSpecs = useMemo(() => { const builder = enableEditorExtension(framework, mode, enableAI); @@ -147,6 +155,9 @@ const usePatchSpecs = (mode: DocMode) => { patchQuickSearchService(framework), patchSideBarService(framework), patchDocModeService(docService, docsService, editorService), + mode === 'edgeless' && enableTurboRenderer + ? [ViewportTurboRendererExtension] + : [], ].flat() ); @@ -173,6 +184,7 @@ const usePatchSpecs = (mode: DocMode) => { referenceRenderer, featureFlagService, enableAI, + enableTurboRenderer, ]); return [ diff --git a/packages/frontend/core/src/modules/feature-flag/constant.ts b/packages/frontend/core/src/modules/feature-flag/constant.ts index c2cd3c99db..1e3c61a142 100644 --- a/packages/frontend/core/src/modules/feature-flag/constant.ts +++ b/packages/frontend/core/src/modules/feature-flag/constant.ts @@ -238,6 +238,13 @@ export const AFFINE_FLAGS = { configurable: BUILD_CONFIG.isMobileEdition, defaultState: false, }, + enable_turbo_renderer: { + category: 'affine', + displayName: 'Enable Turbo Renderer', + description: 'Enable experimental edgeless turbo renderer', + configurable: isCanaryBuild, + defaultState: false, + }, } satisfies { [key in string]: FlagInfo }; // oxlint-disable-next-line no-redeclare