diff --git a/blocksuite/affine/block-root/package.json b/blocksuite/affine/block-root/package.json
new file mode 100644
index 000000000..32797513f
--- /dev/null
+++ b/blocksuite/affine/block-root/package.json
@@ -0,0 +1,73 @@
+{
+ "name": "@blocksuite/affine-block-root",
+ "description": "Root block for BlockSuite.",
+ "type": "module",
+ "scripts": {
+ "build": "tsc",
+ "test:unit": "nx vite:test --run --passWithNoTests",
+ "test:unit:coverage": "nx vite:test --run --coverage",
+ "test:e2e": "playwright test"
+ },
+ "sideEffects": false,
+ "keywords": [],
+ "author": "toeverything",
+ "license": "MIT",
+ "dependencies": {
+ "@blocksuite/affine-block-attachment": "workspace:*",
+ "@blocksuite/affine-block-bookmark": "workspace:*",
+ "@blocksuite/affine-block-data-view": "workspace:*",
+ "@blocksuite/affine-block-database": "workspace:*",
+ "@blocksuite/affine-block-edgeless-text": "workspace:*",
+ "@blocksuite/affine-block-embed": "workspace:*",
+ "@blocksuite/affine-block-frame": "workspace:*",
+ "@blocksuite/affine-block-image": "workspace:*",
+ "@blocksuite/affine-block-latex": "workspace:*",
+ "@blocksuite/affine-block-list": "workspace:*",
+ "@blocksuite/affine-block-note": "workspace:*",
+ "@blocksuite/affine-block-paragraph": "workspace:*",
+ "@blocksuite/affine-block-surface": "workspace:*",
+ "@blocksuite/affine-block-surface-ref": "workspace:*",
+ "@blocksuite/affine-block-table": "workspace:*",
+ "@blocksuite/affine-components": "workspace:*",
+ "@blocksuite/affine-model": "workspace:*",
+ "@blocksuite/affine-shared": "workspace:*",
+ "@blocksuite/affine-widget-drag-handle": "workspace:*",
+ "@blocksuite/affine-widget-edgeless-auto-connect": "workspace:*",
+ "@blocksuite/affine-widget-frame-title": "workspace:*",
+ "@blocksuite/affine-widget-remote-selection": "workspace:*",
+ "@blocksuite/affine-widget-scroll-anchoring": "workspace:*",
+ "@blocksuite/block-std": "workspace:*",
+ "@blocksuite/data-view": "workspace:*",
+ "@blocksuite/global": "workspace:*",
+ "@blocksuite/icons": "^2.2.1",
+ "@blocksuite/inline": "workspace:*",
+ "@blocksuite/store": "workspace:*",
+ "@floating-ui/dom": "^1.6.10",
+ "@lit/context": "^1.1.2",
+ "@preact/signals-core": "^1.8.0",
+ "@toeverything/theme": "^1.1.11",
+ "@types/lodash-es": "^4.17.12",
+ "@types/mdast": "^4.0.4",
+ "@vanilla-extract/css": "^1.17.0",
+ "dompurify": "^3.2.4",
+ "fflate": "^0.8.2",
+ "html2canvas": "^1.4.1",
+ "lit": "^3.2.0",
+ "lodash-es": "^4.17.21",
+ "minimatch": "^10.0.1",
+ "simple-xml-to-json": "^1.2.2",
+ "yjs": "^13.6.21",
+ "zod": "^3.23.8"
+ },
+ "exports": {
+ ".": "./src/index.ts",
+ "./effects": "./src/effects.ts"
+ },
+ "files": [
+ "src",
+ "dist",
+ "!src/__tests__",
+ "!dist/__tests__"
+ ],
+ "version": "0.19.0"
+}
diff --git a/blocksuite/blocks/src/root-block/adapters/extension.ts b/blocksuite/affine/block-root/src/adapters/extension.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/adapters/extension.ts
rename to blocksuite/affine/block-root/src/adapters/extension.ts
diff --git a/blocksuite/blocks/src/root-block/adapters/html.ts b/blocksuite/affine/block-root/src/adapters/html.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/adapters/html.ts
rename to blocksuite/affine/block-root/src/adapters/html.ts
diff --git a/blocksuite/blocks/src/root-block/adapters/index.ts b/blocksuite/affine/block-root/src/adapters/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/adapters/index.ts
rename to blocksuite/affine/block-root/src/adapters/index.ts
diff --git a/blocksuite/blocks/src/root-block/adapters/markdown.ts b/blocksuite/affine/block-root/src/adapters/markdown.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/adapters/markdown.ts
rename to blocksuite/affine/block-root/src/adapters/markdown.ts
diff --git a/blocksuite/blocks/src/root-block/adapters/notion-html.ts b/blocksuite/affine/block-root/src/adapters/notion-html.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/adapters/notion-html.ts
rename to blocksuite/affine/block-root/src/adapters/notion-html.ts
diff --git a/blocksuite/blocks/src/root-block/clipboard/adapter.ts b/blocksuite/affine/block-root/src/clipboard/adapter.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/clipboard/adapter.ts
rename to blocksuite/affine/block-root/src/clipboard/adapter.ts
diff --git a/blocksuite/blocks/src/root-block/clipboard/index.ts b/blocksuite/affine/block-root/src/clipboard/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/clipboard/index.ts
rename to blocksuite/affine/block-root/src/clipboard/index.ts
diff --git a/blocksuite/blocks/src/root-block/clipboard/page-clipboard.ts b/blocksuite/affine/block-root/src/clipboard/page-clipboard.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/clipboard/page-clipboard.ts
rename to blocksuite/affine/block-root/src/clipboard/page-clipboard.ts
diff --git a/blocksuite/blocks/src/root-block/clipboard/readonly-clipboard.ts b/blocksuite/affine/block-root/src/clipboard/readonly-clipboard.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/clipboard/readonly-clipboard.ts
rename to blocksuite/affine/block-root/src/clipboard/readonly-clipboard.ts
diff --git a/blocksuite/blocks/src/root-block/clipboard/utils.ts b/blocksuite/affine/block-root/src/clipboard/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/clipboard/utils.ts
rename to blocksuite/affine/block-root/src/clipboard/utils.ts
diff --git a/blocksuite/blocks/src/root-block/common-specs/index.ts b/blocksuite/affine/block-root/src/common-specs/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/common-specs/index.ts
rename to blocksuite/affine/block-root/src/common-specs/index.ts
diff --git a/blocksuite/blocks/src/root-block/common-specs/widgets.ts b/blocksuite/affine/block-root/src/common-specs/widgets.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/common-specs/widgets.ts
rename to blocksuite/affine/block-root/src/common-specs/widgets.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/clipboard/clipboard.ts b/blocksuite/affine/block-root/src/edgeless/clipboard/clipboard.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/clipboard/clipboard.ts
rename to blocksuite/affine/block-root/src/edgeless/clipboard/clipboard.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/auto-complete/auto-complete-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/auto-complete/auto-complete-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/auto-complete/auto-complete-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/auto-complete/auto-complete-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/auto-complete/edgeless-auto-complete.ts b/blocksuite/affine/block-root/src/edgeless/components/auto-complete/edgeless-auto-complete.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/auto-complete/edgeless-auto-complete.ts
rename to blocksuite/affine/block-root/src/edgeless/components/auto-complete/edgeless-auto-complete.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/auto-complete/utils.ts b/blocksuite/affine/block-root/src/edgeless/components/auto-complete/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/auto-complete/utils.ts
rename to blocksuite/affine/block-root/src/edgeless/components/auto-complete/utils.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/buttons/tool-icon-button.ts b/blocksuite/affine/block-root/src/edgeless/components/buttons/tool-icon-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/buttons/tool-icon-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/buttons/tool-icon-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/buttons/toolbar-button.ts b/blocksuite/affine/block-root/src/edgeless/components/buttons/toolbar-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/buttons/toolbar-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/buttons/toolbar-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/connector/connector-handle.ts b/blocksuite/affine/block-root/src/edgeless/components/connector/connector-handle.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/connector/connector-handle.ts
rename to blocksuite/affine/block-root/src/edgeless/components/connector/connector-handle.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/frame/frame-preview.ts b/blocksuite/affine/block-root/src/edgeless/components/frame/frame-preview.ts
similarity index 98%
rename from blocksuite/blocks/src/root-block/edgeless/components/frame/frame-preview.ts
rename to blocksuite/affine/block-root/src/edgeless/components/frame/frame-preview.ts
index 18da693c2..0154bd35a 100644
--- a/blocksuite/blocks/src/root-block/edgeless/components/frame/frame-preview.ts
+++ b/blocksuite/affine/block-root/src/edgeless/components/frame/frame-preview.ts
@@ -1,4 +1,5 @@
import type { FrameBlockModel } from '@blocksuite/affine-model';
+import { SpecProvider } from '@blocksuite/affine-shared/utils';
import {
BlockServiceWatcher,
BlockStdScope,
@@ -18,7 +19,6 @@ import { css, html, nothing, type PropertyValues } from 'lit';
import { property, query, state } from 'lit/decorators.js';
import { styleMap } from 'lit/directives/style-map.js';
-import { SpecProvider } from '../../../../_specs/index.js';
import type { EdgelessRootPreviewBlockComponent } from '../../edgeless-root-preview-block.js';
const DEFAULT_PREVIEW_CONTAINER_WIDTH = 280;
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/note-slicer/index.ts b/blocksuite/affine/block-root/src/edgeless/components/note-slicer/index.ts
similarity index 97%
rename from blocksuite/blocks/src/root-block/edgeless/components/note-slicer/index.ts
rename to blocksuite/affine/block-root/src/edgeless/components/note-slicer/index.ts
index aa9cb9977..297622782 100644
--- a/blocksuite/blocks/src/root-block/edgeless/components/note-slicer/index.ts
+++ b/blocksuite/affine/block-root/src/edgeless/components/note-slicer/index.ts
@@ -1,5 +1,10 @@
+import type { NoteBlockComponent } from '@blocksuite/affine-block-note';
import { isNoteBlock } from '@blocksuite/affine-block-surface';
-import { DEFAULT_NOTE_HEIGHT } from '@blocksuite/affine-model';
+import {
+ DEFAULT_NOTE_HEIGHT,
+ type NoteBlockModel,
+ type RootBlockModel,
+} from '@blocksuite/affine-model';
import { EDGELESS_BLOCK_CHILD_PADDING } from '@blocksuite/affine-shared/consts';
import { TelemetryProvider } from '@blocksuite/affine-shared/services';
import { getRectByBlockComponent } from '@blocksuite/affine-shared/utils';
@@ -17,12 +22,7 @@ import { state } from 'lit/decorators.js';
import { classMap } from 'lit/directives/class-map.js';
import { styleMap } from 'lit/directives/style-map.js';
-import type {
- EdgelessRootBlockComponent,
- NoteBlockComponent,
- NoteBlockModel,
- RootBlockModel,
-} from '../../../../index.js';
+import type { EdgelessRootBlockComponent } from '../../edgeless-root-block';
const DIVIDING_LINE_OFFSET = 4;
const NEW_NOTE_GAP = 40;
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/align-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/align-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/align-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/align-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/card-style-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/card-style-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/card-style-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/card-style-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/color-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/color-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/color-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/color-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/font-family-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/font-family-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/font-family-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/font-family-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/font-weight-and-style-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/font-weight-and-style-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/font-weight-and-style-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/font-weight-and-style-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/icons.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/icons.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/icons.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/icons.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/line-styles-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/line-styles-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/line-styles-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/line-styles-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/line-width-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/line-width-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/line-width-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/line-width-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/note-display-mode-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/note-display-mode-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/note-display-mode-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/note-display-mode-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/note-shadow-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/note-shadow-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/note-shadow-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/note-shadow-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/scale-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/scale-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/scale-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/scale-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/shape-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/shape-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/shape-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/shape-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/shape-style-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/shape-style-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/shape-style-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/shape-style-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/size-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/size-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/size-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/size-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/panel/stroke-style-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/panel/stroke-style-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/panel/stroke-style-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/panel/stroke-style-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/presentation/edgeless-navigator-black-background.ts b/blocksuite/affine/block-root/src/edgeless/components/presentation/edgeless-navigator-black-background.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/presentation/edgeless-navigator-black-background.ts
rename to blocksuite/affine/block-root/src/edgeless/components/presentation/edgeless-navigator-black-background.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/rects/edgeless-dragging-area-rect.ts b/blocksuite/affine/block-root/src/edgeless/components/rects/edgeless-dragging-area-rect.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/rects/edgeless-dragging-area-rect.ts
rename to blocksuite/affine/block-root/src/edgeless/components/rects/edgeless-dragging-area-rect.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/rects/edgeless-selected-rect.ts b/blocksuite/affine/block-root/src/edgeless/components/rects/edgeless-selected-rect.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/rects/edgeless-selected-rect.ts
rename to blocksuite/affine/block-root/src/edgeless/components/rects/edgeless-selected-rect.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/resize/resize-handles.ts b/blocksuite/affine/block-root/src/edgeless/components/resize/resize-handles.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/resize/resize-handles.ts
rename to blocksuite/affine/block-root/src/edgeless/components/resize/resize-handles.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/resize/resize-manager.ts b/blocksuite/affine/block-root/src/edgeless/components/resize/resize-manager.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/resize/resize-manager.ts
rename to blocksuite/affine/block-root/src/edgeless/components/resize/resize-manager.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/text/edgeless-connector-label-editor.ts b/blocksuite/affine/block-root/src/edgeless/components/text/edgeless-connector-label-editor.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/text/edgeless-connector-label-editor.ts
rename to blocksuite/affine/block-root/src/edgeless/components/text/edgeless-connector-label-editor.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/text/edgeless-frame-title-editor.ts b/blocksuite/affine/block-root/src/edgeless/components/text/edgeless-frame-title-editor.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/text/edgeless-frame-title-editor.ts
rename to blocksuite/affine/block-root/src/edgeless/components/text/edgeless-frame-title-editor.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/text/edgeless-group-title-editor.ts b/blocksuite/affine/block-root/src/edgeless/components/text/edgeless-group-title-editor.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/text/edgeless-group-title-editor.ts
rename to blocksuite/affine/block-root/src/edgeless/components/text/edgeless-group-title-editor.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/text/edgeless-shape-text-editor.ts b/blocksuite/affine/block-root/src/edgeless/components/text/edgeless-shape-text-editor.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/text/edgeless-shape-text-editor.ts
rename to blocksuite/affine/block-root/src/edgeless/components/text/edgeless-shape-text-editor.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/text/edgeless-text-editor.ts b/blocksuite/affine/block-root/src/edgeless/components/text/edgeless-text-editor.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/text/edgeless-text-editor.ts
rename to blocksuite/affine/block-root/src/edgeless/components/text/edgeless-text-editor.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/brush/brush-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/brush/brush-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/brush/brush-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/brush/brush-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/brush/brush-tool-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/brush/brush-tool-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/brush/brush-tool-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/brush/brush-tool-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/brush/icons.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/brush/icons.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/brush/icons.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/brush/icons.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/create-popper.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/common/create-popper.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/create-popper.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/common/create-popper.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/draggable/draggable-element.controller.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/common/draggable/draggable-element.controller.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/draggable/draggable-element.controller.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/common/draggable/draggable-element.controller.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/draggable/event-resolver.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/common/draggable/event-resolver.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/draggable/event-resolver.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/common/draggable/event-resolver.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/draggable/overlay-factory.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/common/draggable/overlay-factory.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/draggable/overlay-factory.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/common/draggable/overlay-factory.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/draggable/types.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/common/draggable/types.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/draggable/types.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/common/draggable/types.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/slide-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/common/slide-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/slide-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/common/slide-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/toolbar-arrow-up-icon.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/common/toolbar-arrow-up-icon.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/toolbar-arrow-up-icon.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/common/toolbar-arrow-up-icon.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/type.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/common/type.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/common/type.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/common/type.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/connector/connector-dense-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/connector/connector-dense-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/connector/connector-dense-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/connector/connector-dense-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/connector/connector-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/connector/connector-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/connector/connector-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/connector/connector-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/connector/connector-tool-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/connector/connector-tool-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/connector/connector-tool-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/connector/connector-tool-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/context.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/context.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/context.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/context.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/default/default-tool-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/default/default-tool-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/default/default-tool-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/default/default-tool-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/edgeless-toolbar.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/edgeless-toolbar.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/edgeless-toolbar.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/edgeless-toolbar.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/eraser/eraser-tool-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/eraser/eraser-tool-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/eraser/eraser-tool-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/eraser/eraser-tool-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/eraser/icons.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/eraser/icons.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/eraser/icons.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/eraser/icons.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/frame/config.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/frame/config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/frame/config.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/frame/config.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/frame/frame-dense-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/frame/frame-dense-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/frame/frame-dense-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/frame/frame-dense-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/frame/frame-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/frame/frame-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/frame/frame-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/frame/frame-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/frame/frame-tool-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/frame/frame-tool-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/frame/frame-tool-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/frame/frame-tool-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/lasso/icons.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/lasso/icons.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/lasso/icons.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/lasso/icons.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/lasso/lasso-dense-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/lasso/lasso-dense-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/lasso/lasso-dense-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/lasso/lasso-dense-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/lasso/lasso-tool-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/lasso/lasso-tool-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/lasso/lasso-tool-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/lasso/lasso-tool-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/link/link-dense-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/link/link-dense-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/link/link-dense-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/link/link-dense-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/link/link-tool-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/link/link-tool-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/link/link-tool-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/link/link-tool-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/assets.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/assets.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/assets.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/assets.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/basket-elements.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/basket-elements.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/basket-elements.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/basket-elements.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/icons.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/icons.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/icons.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/icons.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/mindmap-importing-placeholder.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/mindmap-importing-placeholder.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/mindmap-importing-placeholder.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/mindmap-importing-placeholder.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/mindmap-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/mindmap-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/mindmap-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/mindmap-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/mindmap-tool-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/mindmap-tool-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/mindmap-tool-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/mindmap-tool-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/utils/import-mindmap.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/utils/import-mindmap.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/mindmap/utils/import-mindmap.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/mindmap/utils/import-mindmap.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mixins/quick-tool.mixin.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mixins/quick-tool.mixin.ts
similarity index 92%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/mixins/quick-tool.mixin.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/mixins/quick-tool.mixin.ts
index 1442d145c..6b6d86316 100644
--- a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mixins/quick-tool.mixin.ts
+++ b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mixins/quick-tool.mixin.ts
@@ -2,7 +2,7 @@ import type { Constructor } from '@blocksuite/global/utils';
import type { LitElement } from 'lit';
import {
- // eslint-disable-next-line no-unused-vars
+ // oxlint-disable-next-line no-unused-vars
type EdgelessToolbarToolClass,
EdgelessToolbarToolMixin,
} from './tool.mixin.js';
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mixins/tool.mixin.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mixins/tool.mixin.ts
similarity index 99%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/mixins/tool.mixin.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/mixins/tool.mixin.ts
index f960c762d..46df3e030 100644
--- a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mixins/tool.mixin.ts
+++ b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mixins/tool.mixin.ts
@@ -6,7 +6,7 @@ import type {
} from '@blocksuite/block-std/gfx';
import {
type Constructor,
- // eslint-disable-next-line no-unused-vars
+ // oxlint-disable-next-line no-unused-vars
type DisposableClass,
WithDisposable,
} from '@blocksuite/global/utils';
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mixins/toolbar-button-with-menu.mixin.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mixins/toolbar-button-with-menu.mixin.ts
similarity index 92%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/mixins/toolbar-button-with-menu.mixin.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/mixins/toolbar-button-with-menu.mixin.ts
index 56cb1af69..29c6e081e 100644
--- a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/mixins/toolbar-button-with-menu.mixin.ts
+++ b/blocksuite/affine/block-root/src/edgeless/components/toolbar/mixins/toolbar-button-with-menu.mixin.ts
@@ -2,7 +2,7 @@ import type { Constructor } from '@blocksuite/global/utils';
import type { LitElement } from 'lit';
import {
- // eslint-disable-next-line no-unused-vars
+ // oxlint-disable-next-line no-unused-vars
type EdgelessToolbarToolClass,
EdgelessToolbarToolMixin,
} from './tool.mixin.js';
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/note/icon.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/note/icon.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/note/icon.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/note/icon.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/note/note-menu-config.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/note/note-menu-config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/note/note-menu-config.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/note/note-menu-config.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/note/note-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/note/note-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/note/note-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/note/note-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/note/note-senior-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/note/note-senior-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/note/note-senior-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/note/note-senior-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/note/note-tool-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/note/note-tool-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/note/note-tool-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/note/note-tool-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/present/frame-order-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/present/frame-order-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/present/frame-order-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/present/frame-order-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/present/frame-order-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/present/frame-order-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/present/frame-order-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/present/frame-order-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/present/navigator-setting-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/present/navigator-setting-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/present/navigator-setting-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/present/navigator-setting-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/present/present-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/present/present-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/present/present-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/present/present-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/presentation-toolbar.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/presentation-toolbar.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/presentation-toolbar.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/presentation-toolbar.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/icons.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/icons.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/icons.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/icons.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/shape-draggable.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/shape-draggable.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/shape-draggable.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/shape-draggable.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/shape-menu-config.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/shape-menu-config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/shape-menu-config.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/shape-menu-config.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/shape-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/shape-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/shape-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/shape-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/shape-tool-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/shape-tool-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/shape-tool-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/shape-tool-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/shape-tool-element.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/shape-tool-element.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/shape-tool-element.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/shape-tool-element.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/utils.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/shape/utils.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/shape/utils.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/builtin-templates.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/template/builtin-templates.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/builtin-templates.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/template/builtin-templates.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/cards.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/template/cards.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/cards.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/template/cards.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/overlay-scrollbar.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/template/overlay-scrollbar.ts
similarity index 98%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/overlay-scrollbar.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/template/overlay-scrollbar.ts
index 2b9b0fa35..1cb079246 100644
--- a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/overlay-scrollbar.ts
+++ b/blocksuite/affine/block-root/src/edgeless/components/toolbar/template/overlay-scrollbar.ts
@@ -1,4 +1,3 @@
-/* eslint-disable @typescript-eslint/no-non-null-assertion */
import {
on,
once,
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/template-loading.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/template/template-loading.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/template-loading.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/template/template-loading.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/template-panel.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/template/template-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/template-panel.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/template/template-panel.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/template-tool-button.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/template/template-tool-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/template-tool-button.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/template/template-tool-button.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/template-type.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/template/template-type.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/template-type.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/template/template-type.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/utils.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/template/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/template/utils.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/template/utils.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/text/text-menu.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/text/text-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/text/text-menu.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/text/text-menu.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/toolbar/tools.ts b/blocksuite/affine/block-root/src/edgeless/components/toolbar/tools.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/toolbar/tools.ts
rename to blocksuite/affine/block-root/src/edgeless/components/toolbar/tools.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/components/utils.ts b/blocksuite/affine/block-root/src/edgeless/components/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/components/utils.ts
rename to blocksuite/affine/block-root/src/edgeless/components/utils.ts
diff --git a/blocksuite/affine/block-root/src/edgeless/edgeless-builtin-spec.ts b/blocksuite/affine/block-root/src/edgeless/edgeless-builtin-spec.ts
new file mode 100644
index 000000000..75db495b5
--- /dev/null
+++ b/blocksuite/affine/block-root/src/edgeless/edgeless-builtin-spec.ts
@@ -0,0 +1,57 @@
+import {
+ EdgelessFrameManager,
+ FrameOverlay,
+ PresentTool,
+} from '@blocksuite/affine-block-frame';
+import { ConnectionOverlay } from '@blocksuite/affine-block-surface';
+import type { ExtensionType } from '@blocksuite/store';
+
+import { EdgelessRootBlockSpec } from './edgeless-root-spec.js';
+import { BrushTool } from './gfx-tool/brush-tool.js';
+import { ConnectorTool } from './gfx-tool/connector-tool.js';
+import { CopilotTool } from './gfx-tool/copilot-tool.js';
+import { DefaultTool } from './gfx-tool/default-tool.js';
+import { MindMapIndicatorOverlay } from './gfx-tool/default-tool-ext/mind-map-ext/indicator-overlay.js';
+import { EmptyTool } from './gfx-tool/empty-tool.js';
+import { EraserTool } from './gfx-tool/eraser-tool.js';
+import { FrameTool } from './gfx-tool/frame-tool.js';
+import { LassoTool } from './gfx-tool/lasso-tool.js';
+import { NoteTool } from './gfx-tool/note-tool.js';
+import { PanTool } from './gfx-tool/pan-tool.js';
+import { ShapeTool } from './gfx-tool/shape-tool.js';
+import { TemplateTool } from './gfx-tool/template-tool.js';
+import { TextTool } from './gfx-tool/text-tool.js';
+import { EditPropsMiddlewareBuilder } from './middlewares/base.js';
+import { EdgelessSnapManager } from './utils/snap-manager.js';
+
+export const EdgelessToolExtension: ExtensionType[] = [
+ DefaultTool,
+ PanTool,
+ EraserTool,
+ TextTool,
+ ShapeTool,
+ NoteTool,
+ BrushTool,
+ ConnectorTool,
+ CopilotTool,
+ TemplateTool,
+ EmptyTool,
+ FrameTool,
+ LassoTool,
+ PresentTool,
+];
+
+export const EdgelessBuiltInManager: ExtensionType[] = [
+ ConnectionOverlay,
+ FrameOverlay,
+ MindMapIndicatorOverlay,
+ EdgelessSnapManager,
+ EdgelessFrameManager,
+ EditPropsMiddlewareBuilder,
+];
+
+export const EdgelessBuiltInSpecs: ExtensionType[] = [
+ EdgelessRootBlockSpec,
+ EdgelessToolExtension,
+ EdgelessBuiltInManager,
+].flat();
diff --git a/blocksuite/blocks/src/root-block/edgeless/edgeless-keyboard.ts b/blocksuite/affine/block-root/src/edgeless/edgeless-keyboard.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/edgeless-keyboard.ts
rename to blocksuite/affine/block-root/src/edgeless/edgeless-keyboard.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/edgeless-root-block.ts b/blocksuite/affine/block-root/src/edgeless/edgeless-root-block.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/edgeless-root-block.ts
rename to blocksuite/affine/block-root/src/edgeless/edgeless-root-block.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/edgeless-root-preview-block.ts b/blocksuite/affine/block-root/src/edgeless/edgeless-root-preview-block.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/edgeless-root-preview-block.ts
rename to blocksuite/affine/block-root/src/edgeless/edgeless-root-preview-block.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/edgeless-root-service.ts b/blocksuite/affine/block-root/src/edgeless/edgeless-root-service.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/edgeless-root-service.ts
rename to blocksuite/affine/block-root/src/edgeless/edgeless-root-service.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/edgeless-root-spec.ts b/blocksuite/affine/block-root/src/edgeless/edgeless-root-spec.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/edgeless-root-spec.ts
rename to blocksuite/affine/block-root/src/edgeless/edgeless-root-spec.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/brush-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/brush-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/brush-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/brush-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/connector-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/connector-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/connector-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/connector-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/copilot-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/copilot-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/copilot-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/copilot-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/event-ext.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool-ext/event-ext.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/event-ext.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool-ext/event-ext.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/ext.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool-ext/ext.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/ext.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool-ext/ext.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/drag-utils.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool-ext/mind-map-ext/drag-utils.ts
similarity index 98%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/drag-utils.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool-ext/mind-map-ext/drag-utils.ts
index 51625170f..63a680d4e 100644
--- a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/drag-utils.ts
+++ b/blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool-ext/mind-map-ext/drag-utils.ts
@@ -1,4 +1,3 @@
-/* eslint-disable @typescript-eslint/no-non-null-assertion */
import {
NODE_HORIZONTAL_SPACING,
NODE_VERTICAL_SPACING,
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/indicator-overlay.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool-ext/mind-map-ext/indicator-overlay.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/indicator-overlay.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool-ext/mind-map-ext/indicator-overlay.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/mind-map-ext.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool-ext/mind-map-ext/mind-map-ext.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/mind-map-ext.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool-ext/mind-map-ext/mind-map-ext.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/default-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/empty-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/empty-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/empty-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/empty-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/eraser-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/eraser-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/eraser-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/eraser-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/frame-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/frame-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/frame-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/frame-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/index.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/index.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/index.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/lasso-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/lasso-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/lasso-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/lasso-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/note-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/note-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/note-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/note-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/pan-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/pan-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/pan-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/pan-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/shape-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/shape-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/shape-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/shape-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/template-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/template-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/template-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/template-tool.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/text-tool.ts b/blocksuite/affine/block-root/src/edgeless/gfx-tool/text-tool.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/gfx-tool/text-tool.ts
rename to blocksuite/affine/block-root/src/edgeless/gfx-tool/text-tool.ts
diff --git a/blocksuite/affine/block-root/src/edgeless/index.ts b/blocksuite/affine/block-root/src/edgeless/index.ts
new file mode 100644
index 000000000..94d490b5a
--- /dev/null
+++ b/blocksuite/affine/block-root/src/edgeless/index.ts
@@ -0,0 +1,9 @@
+export { FramePreview } from './components/frame/frame-preview.js';
+export { EdgelessTemplatePanel } from './components/toolbar/template/template-panel.js';
+export * from './components/toolbar/template/template-type.js';
+export * from './edgeless-root-block.js';
+export { EdgelessRootPreviewBlockComponent } from './edgeless-root-preview-block.js';
+export { EdgelessRootService } from './edgeless-root-service.js';
+export * from './gfx-tool';
+export * from './utils/clipboard-utils.js';
+export { isCanvasElement } from './utils/query.js';
diff --git a/blocksuite/blocks/src/root-block/edgeless/middlewares/base.ts b/blocksuite/affine/block-root/src/edgeless/middlewares/base.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/middlewares/base.ts
rename to blocksuite/affine/block-root/src/edgeless/middlewares/base.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/services/template-middlewares.ts b/blocksuite/affine/block-root/src/edgeless/services/template-middlewares.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/services/template-middlewares.ts
rename to blocksuite/affine/block-root/src/edgeless/services/template-middlewares.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/services/template.ts b/blocksuite/affine/block-root/src/edgeless/services/template.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/services/template.ts
rename to blocksuite/affine/block-root/src/edgeless/services/template.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/bound-utils.ts b/blocksuite/affine/block-root/src/edgeless/utils/bound-utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/bound-utils.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/bound-utils.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/clipboard-utils.ts b/blocksuite/affine/block-root/src/edgeless/utils/clipboard-utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/clipboard-utils.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/clipboard-utils.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/clone-utils.ts b/blocksuite/affine/block-root/src/edgeless/utils/clone-utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/clone-utils.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/clone-utils.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/connector.ts b/blocksuite/affine/block-root/src/edgeless/utils/connector.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/connector.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/connector.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/consts.ts b/blocksuite/affine/block-root/src/edgeless/utils/consts.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/consts.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/consts.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/crud.ts b/blocksuite/affine/block-root/src/edgeless/utils/crud.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/crud.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/crud.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/hotkey-utils.ts b/blocksuite/affine/block-root/src/edgeless/utils/hotkey-utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/hotkey-utils.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/hotkey-utils.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/mindmap.ts b/blocksuite/affine/block-root/src/edgeless/utils/mindmap.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/mindmap.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/mindmap.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/panning-utils.ts b/blocksuite/affine/block-root/src/edgeless/utils/panning-utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/panning-utils.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/panning-utils.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/query.ts b/blocksuite/affine/block-root/src/edgeless/utils/query.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/query.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/query.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/snap-manager.ts b/blocksuite/affine/block-root/src/edgeless/utils/snap-manager.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/snap-manager.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/snap-manager.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/text.ts b/blocksuite/affine/block-root/src/edgeless/utils/text.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/text.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/text.ts
diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/tool-overlay.ts b/blocksuite/affine/block-root/src/edgeless/utils/tool-overlay.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/edgeless/utils/tool-overlay.ts
rename to blocksuite/affine/block-root/src/edgeless/utils/tool-overlay.ts
diff --git a/blocksuite/affine/block-root/src/effects.ts b/blocksuite/affine/block-root/src/effects.ts
new file mode 100644
index 000000000..307f6d297
--- /dev/null
+++ b/blocksuite/affine/block-root/src/effects.ts
@@ -0,0 +1,313 @@
+import { EdgelessAutoCompletePanel } from './edgeless/components/auto-complete/auto-complete-panel.js';
+import { EdgelessAutoComplete } from './edgeless/components/auto-complete/edgeless-auto-complete.js';
+import { EdgelessToolIconButton } from './edgeless/components/buttons/tool-icon-button.js';
+import { EdgelessToolbarButton } from './edgeless/components/buttons/toolbar-button.js';
+import { EdgelessConnectorHandle } from './edgeless/components/connector/connector-handle.js';
+import {
+ NOTE_SLICER_WIDGET,
+ NoteSlicer,
+} from './edgeless/components/note-slicer/index.js';
+import { EdgelessAlignPanel } from './edgeless/components/panel/align-panel.js';
+import { CardStylePanel } from './edgeless/components/panel/card-style-panel.js';
+import {
+ EdgelessColorButton,
+ EdgelessColorPanel,
+ EdgelessTextColorIcon,
+} from './edgeless/components/panel/color-panel.js';
+import { EdgelessFontFamilyPanel } from './edgeless/components/panel/font-family-panel.js';
+import { EdgelessFontWeightAndStylePanel } from './edgeless/components/panel/font-weight-and-style-panel.js';
+import { EdgelessLineWidthPanel } from './edgeless/components/panel/line-width-panel.js';
+import { NoteDisplayModePanel } from './edgeless/components/panel/note-display-mode-panel.js';
+import { EdgelessNoteShadowPanel } from './edgeless/components/panel/note-shadow-panel.js';
+import { EdgelessScalePanel } from './edgeless/components/panel/scale-panel.js';
+import { EdgelessShapePanel } from './edgeless/components/panel/shape-panel.js';
+import { EdgelessShapeStylePanel } from './edgeless/components/panel/shape-style-panel.js';
+import { EdgelessSizePanel } from './edgeless/components/panel/size-panel.js';
+import { StrokeStylePanel } from './edgeless/components/panel/stroke-style-panel.js';
+import {
+ EDGELESS_NAVIGATOR_BLACK_BACKGROUND_WIDGET,
+ EdgelessNavigatorBlackBackgroundWidget,
+} from './edgeless/components/presentation/edgeless-navigator-black-background.js';
+import {
+ EDGELESS_DRAGGING_AREA_WIDGET,
+ EdgelessDraggingAreaRectWidget,
+} from './edgeless/components/rects/edgeless-dragging-area-rect.js';
+import {
+ EDGELESS_SELECTED_RECT_WIDGET,
+ EdgelessSelectedRectWidget,
+} from './edgeless/components/rects/edgeless-selected-rect.js';
+import { EdgelessConnectorLabelEditor } from './edgeless/components/text/edgeless-connector-label-editor.js';
+import { EdgelessFrameTitleEditor } from './edgeless/components/text/edgeless-frame-title-editor.js';
+import { EdgelessGroupTitleEditor } from './edgeless/components/text/edgeless-group-title-editor.js';
+import { EdgelessShapeTextEditor } from './edgeless/components/text/edgeless-shape-text-editor.js';
+import { EdgelessTextEditor } from './edgeless/components/text/edgeless-text-editor.js';
+import { EdgelessBrushMenu } from './edgeless/components/toolbar/brush/brush-menu.js';
+import { EdgelessBrushToolButton } from './edgeless/components/toolbar/brush/brush-tool-button.js';
+import { EdgelessSlideMenu } from './edgeless/components/toolbar/common/slide-menu.js';
+import { ToolbarArrowUpIcon } from './edgeless/components/toolbar/common/toolbar-arrow-up-icon.js';
+import { EdgelessConnectorMenu } from './edgeless/components/toolbar/connector/connector-menu.js';
+import { EdgelessConnectorToolButton } from './edgeless/components/toolbar/connector/connector-tool-button.js';
+import { EdgelessDefaultToolButton } from './edgeless/components/toolbar/default/default-tool-button.js';
+import { EdgelessToolbarWidget } from './edgeless/components/toolbar/edgeless-toolbar.js';
+import { EdgelessEraserToolButton } from './edgeless/components/toolbar/eraser/eraser-tool-button.js';
+import { EdgelessFrameMenu } from './edgeless/components/toolbar/frame/frame-menu.js';
+import { EdgelessFrameToolButton } from './edgeless/components/toolbar/frame/frame-tool-button.js';
+import { EdgelessLassoToolButton } from './edgeless/components/toolbar/lasso/lasso-tool-button.js';
+import { EdgelessLinkToolButton } from './edgeless/components/toolbar/link/link-tool-button.js';
+import { MindMapPlaceholder } from './edgeless/components/toolbar/mindmap/mindmap-importing-placeholder.js';
+import { EdgelessMindmapMenu } from './edgeless/components/toolbar/mindmap/mindmap-menu.js';
+import { EdgelessMindmapToolButton } from './edgeless/components/toolbar/mindmap/mindmap-tool-button.js';
+import { EdgelessNoteMenu } from './edgeless/components/toolbar/note/note-menu.js';
+import { EdgelessNoteSeniorButton } from './edgeless/components/toolbar/note/note-senior-button.js';
+import { EdgelessNoteToolButton } from './edgeless/components/toolbar/note/note-tool-button.js';
+import { EdgelessFrameOrderButton } from './edgeless/components/toolbar/present/frame-order-button.js';
+import { EdgelessFrameOrderMenu } from './edgeless/components/toolbar/present/frame-order-menu.js';
+import { EdgelessNavigatorSettingButton } from './edgeless/components/toolbar/present/navigator-setting-button.js';
+import { EdgelessPresentButton } from './edgeless/components/toolbar/present/present-button.js';
+import { PresentationToolbar } from './edgeless/components/toolbar/presentation-toolbar.js';
+import { EdgelessToolbarShapeDraggable } from './edgeless/components/toolbar/shape/shape-draggable.js';
+import { EdgelessShapeMenu } from './edgeless/components/toolbar/shape/shape-menu.js';
+import { EdgelessShapeToolButton } from './edgeless/components/toolbar/shape/shape-tool-button.js';
+import { EdgelessShapeToolElement } from './edgeless/components/toolbar/shape/shape-tool-element.js';
+import { OverlayScrollbar } from './edgeless/components/toolbar/template/overlay-scrollbar.js';
+import { AffineTemplateLoading } from './edgeless/components/toolbar/template/template-loading.js';
+import { EdgelessTemplatePanel } from './edgeless/components/toolbar/template/template-panel.js';
+import { EdgelessTemplateButton } from './edgeless/components/toolbar/template/template-tool-button.js';
+import { EdgelessTextMenu } from './edgeless/components/toolbar/text/text-menu.js';
+import {
+ AFFINE_AI_PANEL_WIDGET,
+ AFFINE_EDGELESS_COPILOT_WIDGET,
+ AFFINE_EMBED_CARD_TOOLBAR_WIDGET,
+ AFFINE_FORMAT_BAR_WIDGET,
+ AffineAIPanelWidget,
+ AffineFormatBarWidget,
+ AffineImageToolbarWidget,
+ AffineModalWidget,
+ EDGELESS_TOOLBAR_WIDGET,
+ EdgelessCopilotToolbarEntry,
+ EdgelessCopilotWidget,
+ EdgelessRootBlockComponent,
+ EdgelessRootPreviewBlockComponent,
+ EmbedCardToolbar,
+ FramePreview,
+ PageRootBlockComponent,
+ PreviewRootBlockComponent,
+} from './index.js';
+import { AIPanelDivider } from './widgets/ai-panel/components/divider.js';
+import { AIFinishTip } from './widgets/ai-panel/components/finish-tip.js';
+import { GeneratingPlaceholder } from './widgets/ai-panel/components/generating-placeholder.js';
+import {
+ AIPanelAnswer,
+ AIPanelError,
+ AIPanelGenerating,
+ AIPanelInput,
+} from './widgets/ai-panel/components/index.js';
+import { EdgelessCopilotPanel } from './widgets/edgeless-copilot-panel/index.js';
+import {
+ AFFINE_EDGELESS_ZOOM_TOOLBAR_WIDGET,
+ AffineEdgelessZoomToolbarWidget,
+} from './widgets/edgeless-zoom-toolbar/index.js';
+import { ZoomBarToggleButton } from './widgets/edgeless-zoom-toolbar/zoom-bar-toggle-button.js';
+import { EdgelessZoomToolbar } from './widgets/edgeless-zoom-toolbar/zoom-toolbar.js';
+import { effects as widgetEdgelessElementToolbarEffects } from './widgets/element-toolbar/effects.js';
+import { AffineImageToolbar } from './widgets/image-toolbar/components/image-toolbar.js';
+import { AFFINE_IMAGE_TOOLBAR_WIDGET } from './widgets/image-toolbar/index.js';
+import {
+ AFFINE_INNER_MODAL_WIDGET,
+ AffineInnerModalWidget,
+} from './widgets/inner-modal/inner-modal.js';
+import { effects as widgetMobileToolbarEffects } from './widgets/keyboard-toolbar/effects.js';
+import { effects as widgetLinkedDocEffects } from './widgets/linked-doc/effects.js';
+import { Loader } from './widgets/linked-doc/import-doc/loader.js';
+import { AffineCustomModal } from './widgets/modal/custom-modal.js';
+import { AFFINE_MODAL_WIDGET } from './widgets/modal/modal.js';
+import {
+ AFFINE_PAGE_DRAGGING_AREA_WIDGET,
+ AffinePageDraggingAreaWidget,
+} from './widgets/page-dragging-area/page-dragging-area.js';
+import {
+ AFFINE_SLASH_MENU_WIDGET,
+ AffineSlashMenuWidget,
+} from './widgets/slash-menu/index.js';
+import {
+ InnerSlashMenu,
+ SlashMenu,
+} from './widgets/slash-menu/slash-menu-popover.js';
+import {
+ AFFINE_SURFACE_REF_TOOLBAR,
+ AffineSurfaceRefToolbar,
+} from './widgets/surface-ref-toolbar/surface-ref-toolbar.js';
+import {
+ AFFINE_VIEWPORT_OVERLAY_WIDGET,
+ AffineViewportOverlayWidget,
+} from './widgets/viewport-overlay/viewport-overlay.js';
+
+export function effects() {
+ widgetEdgelessElementToolbarEffects();
+ widgetMobileToolbarEffects();
+ widgetLinkedDocEffects();
+
+ customElements.define('affine-page-root', PageRootBlockComponent);
+ customElements.define('affine-preview-root', PreviewRootBlockComponent);
+ customElements.define('affine-edgeless-root', EdgelessRootBlockComponent);
+ customElements.define('edgeless-copilot-panel', EdgelessCopilotPanel);
+ customElements.define(
+ 'edgeless-copilot-toolbar-entry',
+ EdgelessCopilotToolbarEntry
+ );
+ customElements.define('edgeless-connector-handle', EdgelessConnectorHandle);
+ customElements.define('edgeless-zoom-toolbar', EdgelessZoomToolbar);
+ customElements.define(
+ 'affine-edgeless-root-preview',
+ EdgelessRootPreviewBlockComponent
+ );
+ customElements.define('affine-custom-modal', AffineCustomModal);
+ customElements.define('affine-slash-menu', SlashMenu);
+ customElements.define('inner-slash-menu', InnerSlashMenu);
+ customElements.define('generating-placeholder', GeneratingPlaceholder);
+ customElements.define('ai-finish-tip', AIFinishTip);
+ customElements.define('ai-panel-divider', AIPanelDivider);
+ customElements.define(NOTE_SLICER_WIDGET, NoteSlicer);
+ customElements.define(
+ EDGELESS_NAVIGATOR_BLACK_BACKGROUND_WIDGET,
+ EdgelessNavigatorBlackBackgroundWidget
+ );
+ customElements.define('zoom-bar-toggle-button', ZoomBarToggleButton);
+ customElements.define(
+ EDGELESS_DRAGGING_AREA_WIDGET,
+ EdgelessDraggingAreaRectWidget
+ );
+ customElements.define('loader-element', Loader);
+ customElements.define('edgeless-brush-menu', EdgelessBrushMenu);
+ customElements.define('edgeless-brush-tool-button', EdgelessBrushToolButton);
+ customElements.define(
+ 'edgeless-connector-tool-button',
+ EdgelessConnectorToolButton
+ );
+ customElements.define(
+ 'edgeless-default-tool-button',
+ EdgelessDefaultToolButton
+ );
+ customElements.define('edgeless-connector-menu', EdgelessConnectorMenu);
+ customElements.define('ai-panel-answer', AIPanelAnswer);
+ customElements.define(
+ 'edgeless-eraser-tool-button',
+ EdgelessEraserToolButton
+ );
+ customElements.define('edgeless-frame-menu', EdgelessFrameMenu);
+ customElements.define('edgeless-frame-tool-button', EdgelessFrameToolButton);
+ customElements.define('ai-panel-input', AIPanelInput);
+ customElements.define('ai-panel-generating', AIPanelGenerating);
+ customElements.define('edgeless-link-tool-button', EdgelessLinkToolButton);
+ customElements.define('edgeless-mindmap-menu', EdgelessMindmapMenu);
+ customElements.define('edgeless-lasso-tool-button', EdgelessLassoToolButton);
+ customElements.define('ai-panel-error', AIPanelError);
+ customElements.define(
+ EDGELESS_SELECTED_RECT_WIDGET,
+ EdgelessSelectedRectWidget
+ );
+ customElements.define('mindmap-import-placeholder', MindMapPlaceholder);
+ customElements.define(
+ 'edgeless-note-senior-button',
+ EdgelessNoteSeniorButton
+ );
+ customElements.define('edgeless-align-panel', EdgelessAlignPanel);
+ customElements.define('card-style-panel', CardStylePanel);
+ customElements.define('edgeless-color-button', EdgelessColorButton);
+ customElements.define('edgeless-color-panel', EdgelessColorPanel);
+ customElements.define('edgeless-text-color-icon', EdgelessTextColorIcon);
+ customElements.define(
+ 'edgeless-mindmap-tool-button',
+ EdgelessMindmapToolButton
+ );
+ customElements.define('edgeless-note-tool-button', EdgelessNoteToolButton);
+ customElements.define('edgeless-note-menu', EdgelessNoteMenu);
+ customElements.define('edgeless-line-width-panel', EdgelessLineWidthPanel);
+ customElements.define(
+ 'edgeless-frame-order-button',
+ EdgelessFrameOrderButton
+ );
+ customElements.define('edgeless-frame-order-menu', EdgelessFrameOrderMenu);
+ customElements.define(
+ 'edgeless-auto-complete-panel',
+ EdgelessAutoCompletePanel
+ );
+ customElements.define(
+ 'edgeless-navigator-setting-button',
+ EdgelessNavigatorSettingButton
+ );
+ customElements.define('edgeless-present-button', EdgelessPresentButton);
+ customElements.define('overlay-scrollbar', OverlayScrollbar);
+ customElements.define('affine-template-loading', AffineTemplateLoading);
+ customElements.define('edgeless-auto-complete', EdgelessAutoComplete);
+ customElements.define(
+ 'edgeless-font-weight-and-style-panel',
+ EdgelessFontWeightAndStylePanel
+ );
+ customElements.define('edgeless-note-shadow-panel', EdgelessNoteShadowPanel);
+ customElements.define('edgeless-templates-panel', EdgelessTemplatePanel);
+ customElements.define('edgeless-text-menu', EdgelessTextMenu);
+ customElements.define('edgeless-template-button', EdgelessTemplateButton);
+ customElements.define('edgeless-tool-icon-button', EdgelessToolIconButton);
+ customElements.define('edgeless-size-panel', EdgelessSizePanel);
+ customElements.define('edgeless-scale-panel', EdgelessScalePanel);
+ customElements.define('edgeless-font-family-panel', EdgelessFontFamilyPanel);
+ customElements.define('edgeless-shape-panel', EdgelessShapePanel);
+ customElements.define('note-display-mode-panel', NoteDisplayModePanel);
+ customElements.define('edgeless-toolbar-button', EdgelessToolbarButton);
+ customElements.define('frame-preview', FramePreview);
+ customElements.define('presentation-toolbar', PresentationToolbar);
+ customElements.define('edgeless-shape-menu', EdgelessShapeMenu);
+ customElements.define('stroke-style-panel', StrokeStylePanel);
+ customElements.define('edgeless-shape-tool-button', EdgelessShapeToolButton);
+ customElements.define(
+ 'edgeless-connector-label-editor',
+ EdgelessConnectorLabelEditor
+ );
+ customElements.define(
+ 'edgeless-shape-tool-element',
+ EdgelessShapeToolElement
+ );
+ customElements.define('edgeless-shape-text-editor', EdgelessShapeTextEditor);
+ customElements.define(
+ 'edgeless-group-title-editor',
+ EdgelessGroupTitleEditor
+ );
+ customElements.define(EDGELESS_TOOLBAR_WIDGET, EdgelessToolbarWidget);
+ customElements.define('edgeless-shape-style-panel', EdgelessShapeStylePanel);
+ customElements.define(
+ 'edgeless-frame-title-editor',
+ EdgelessFrameTitleEditor
+ );
+ customElements.define('edgeless-text-editor', EdgelessTextEditor);
+ customElements.define('affine-image-toolbar', AffineImageToolbar);
+ customElements.define('edgeless-slide-menu', EdgelessSlideMenu);
+ customElements.define(
+ 'edgeless-toolbar-shape-draggable',
+ EdgelessToolbarShapeDraggable
+ );
+ customElements.define('toolbar-arrow-up-icon', ToolbarArrowUpIcon);
+
+ customElements.define(AFFINE_AI_PANEL_WIDGET, AffineAIPanelWidget);
+ customElements.define(AFFINE_EMBED_CARD_TOOLBAR_WIDGET, EmbedCardToolbar);
+ customElements.define(AFFINE_INNER_MODAL_WIDGET, AffineInnerModalWidget);
+ customElements.define(AFFINE_MODAL_WIDGET, AffineModalWidget);
+ customElements.define(
+ AFFINE_PAGE_DRAGGING_AREA_WIDGET,
+ AffinePageDraggingAreaWidget
+ );
+ customElements.define(AFFINE_EDGELESS_COPILOT_WIDGET, EdgelessCopilotWidget);
+
+ customElements.define(AFFINE_IMAGE_TOOLBAR_WIDGET, AffineImageToolbarWidget);
+ customElements.define(AFFINE_SLASH_MENU_WIDGET, AffineSlashMenuWidget);
+ customElements.define(
+ AFFINE_VIEWPORT_OVERLAY_WIDGET,
+ AffineViewportOverlayWidget
+ );
+ customElements.define(
+ AFFINE_EDGELESS_ZOOM_TOOLBAR_WIDGET,
+ AffineEdgelessZoomToolbarWidget
+ );
+ customElements.define(AFFINE_SURFACE_REF_TOOLBAR, AffineSurfaceRefToolbar);
+ customElements.define(AFFINE_FORMAT_BAR_WIDGET, AffineFormatBarWidget);
+}
diff --git a/blocksuite/blocks/src/root-block/index.ts b/blocksuite/affine/block-root/src/index.ts
similarity index 90%
rename from blocksuite/blocks/src/root-block/index.ts
rename to blocksuite/affine/block-root/src/index.ts
index dcf49ca3a..f04b42247 100644
--- a/blocksuite/blocks/src/root-block/index.ts
+++ b/blocksuite/affine/block-root/src/index.ts
@@ -1,6 +1,7 @@
-export * from './adapters/markdown.js';
+export * from './adapters';
export * from './clipboard/index.js';
export * from './common-specs/index.js';
+export * from './edgeless/edgeless-builtin-spec.js';
export * from './edgeless/edgeless-root-spec.js';
export * from './edgeless/index.js';
export { TemplateJob } from './edgeless/services/template.js';
diff --git a/blocksuite/blocks/src/root-block/keyboard/keyboard-manager.ts b/blocksuite/affine/block-root/src/keyboard/keyboard-manager.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/keyboard/keyboard-manager.ts
rename to blocksuite/affine/block-root/src/keyboard/keyboard-manager.ts
diff --git a/blocksuite/blocks/src/root-block/page/page-root-block.ts b/blocksuite/affine/block-root/src/page/page-root-block.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/page/page-root-block.ts
rename to blocksuite/affine/block-root/src/page/page-root-block.ts
diff --git a/blocksuite/blocks/src/root-block/page/page-root-service.ts b/blocksuite/affine/block-root/src/page/page-root-service.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/page/page-root-service.ts
rename to blocksuite/affine/block-root/src/page/page-root-service.ts
diff --git a/blocksuite/blocks/src/root-block/page/page-root-spec.ts b/blocksuite/affine/block-root/src/page/page-root-spec.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/page/page-root-spec.ts
rename to blocksuite/affine/block-root/src/page/page-root-spec.ts
diff --git a/blocksuite/blocks/src/root-block/preview/preview-root-block.ts b/blocksuite/affine/block-root/src/preview/preview-root-block.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/preview/preview-root-block.ts
rename to blocksuite/affine/block-root/src/preview/preview-root-block.ts
diff --git a/blocksuite/blocks/src/root-block/preview/preview-root-spec.ts b/blocksuite/affine/block-root/src/preview/preview-root-spec.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/preview/preview-root-spec.ts
rename to blocksuite/affine/block-root/src/preview/preview-root-spec.ts
diff --git a/blocksuite/blocks/src/root-block/root-config.ts b/blocksuite/affine/block-root/src/root-config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/root-config.ts
rename to blocksuite/affine/block-root/src/root-config.ts
diff --git a/blocksuite/blocks/src/root-block/root-service.ts b/blocksuite/affine/block-root/src/root-service.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/root-service.ts
rename to blocksuite/affine/block-root/src/root-service.ts
diff --git a/blocksuite/blocks/src/root-block/transformers/html.ts b/blocksuite/affine/block-root/src/transformers/html.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/transformers/html.ts
rename to blocksuite/affine/block-root/src/transformers/html.ts
diff --git a/blocksuite/blocks/src/root-block/transformers/index.ts b/blocksuite/affine/block-root/src/transformers/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/transformers/index.ts
rename to blocksuite/affine/block-root/src/transformers/index.ts
diff --git a/blocksuite/blocks/src/root-block/transformers/markdown.ts b/blocksuite/affine/block-root/src/transformers/markdown.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/transformers/markdown.ts
rename to blocksuite/affine/block-root/src/transformers/markdown.ts
diff --git a/blocksuite/blocks/src/root-block/transformers/notion-html.ts b/blocksuite/affine/block-root/src/transformers/notion-html.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/transformers/notion-html.ts
rename to blocksuite/affine/block-root/src/transformers/notion-html.ts
diff --git a/blocksuite/blocks/src/root-block/transformers/utils.ts b/blocksuite/affine/block-root/src/transformers/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/transformers/utils.ts
rename to blocksuite/affine/block-root/src/transformers/utils.ts
diff --git a/blocksuite/blocks/src/root-block/transformers/zip.ts b/blocksuite/affine/block-root/src/transformers/zip.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/transformers/zip.ts
rename to blocksuite/affine/block-root/src/transformers/zip.ts
diff --git a/blocksuite/blocks/src/root-block/types.ts b/blocksuite/affine/block-root/src/types.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/types.ts
rename to blocksuite/affine/block-root/src/types.ts
diff --git a/blocksuite/blocks/src/root-block/utils/callback.ts b/blocksuite/affine/block-root/src/utils/callback.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/utils/callback.ts
rename to blocksuite/affine/block-root/src/utils/callback.ts
diff --git a/blocksuite/blocks/src/root-block/utils/index.ts b/blocksuite/affine/block-root/src/utils/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/utils/index.ts
rename to blocksuite/affine/block-root/src/utils/index.ts
diff --git a/blocksuite/blocks/src/root-block/utils/misc.ts b/blocksuite/affine/block-root/src/utils/misc.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/utils/misc.ts
rename to blocksuite/affine/block-root/src/utils/misc.ts
diff --git a/blocksuite/blocks/src/root-block/utils/position.ts b/blocksuite/affine/block-root/src/utils/position.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/utils/position.ts
rename to blocksuite/affine/block-root/src/utils/position.ts
diff --git a/blocksuite/blocks/src/root-block/utils/query.ts b/blocksuite/affine/block-root/src/utils/query.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/utils/query.ts
rename to blocksuite/affine/block-root/src/utils/query.ts
diff --git a/blocksuite/blocks/src/root-block/utils/types.ts b/blocksuite/affine/block-root/src/utils/types.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/utils/types.ts
rename to blocksuite/affine/block-root/src/utils/types.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/ai-panel.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/ai-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/ai-panel.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/ai-panel.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/components/divider.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/components/divider.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/components/divider.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/components/divider.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/components/finish-tip.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/components/finish-tip.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/components/finish-tip.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/components/finish-tip.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/components/generating-placeholder.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/components/generating-placeholder.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/components/generating-placeholder.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/components/generating-placeholder.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/components/index.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/components/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/components/index.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/components/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/components/state/answer.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/components/state/answer.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/components/state/answer.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/components/state/answer.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/components/state/error.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/components/state/error.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/components/state/error.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/components/state/error.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/components/state/generating.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/components/state/generating.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/components/state/generating.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/components/state/generating.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/components/state/index.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/components/state/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/components/state/index.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/components/state/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/components/state/input.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/components/state/input.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/components/state/input.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/components/state/input.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/type.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/type.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/type.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/type.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/ai-panel/utils.ts b/blocksuite/affine/block-root/src/widgets/ai-panel/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/ai-panel/utils.ts
rename to blocksuite/affine/block-root/src/widgets/ai-panel/utils.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/edgeless-copilot-panel/index.ts b/blocksuite/affine/block-root/src/widgets/edgeless-copilot-panel/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/edgeless-copilot-panel/index.ts
rename to blocksuite/affine/block-root/src/widgets/edgeless-copilot-panel/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/edgeless-copilot-panel/toolbar-entry.ts b/blocksuite/affine/block-root/src/widgets/edgeless-copilot-panel/toolbar-entry.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/edgeless-copilot-panel/toolbar-entry.ts
rename to blocksuite/affine/block-root/src/widgets/edgeless-copilot-panel/toolbar-entry.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/edgeless-copilot/index.ts b/blocksuite/affine/block-root/src/widgets/edgeless-copilot/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/edgeless-copilot/index.ts
rename to blocksuite/affine/block-root/src/widgets/edgeless-copilot/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/edgeless-zoom-toolbar/index.ts b/blocksuite/affine/block-root/src/widgets/edgeless-zoom-toolbar/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/edgeless-zoom-toolbar/index.ts
rename to blocksuite/affine/block-root/src/widgets/edgeless-zoom-toolbar/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/edgeless-zoom-toolbar/zoom-bar-toggle-button.ts b/blocksuite/affine/block-root/src/widgets/edgeless-zoom-toolbar/zoom-bar-toggle-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/edgeless-zoom-toolbar/zoom-bar-toggle-button.ts
rename to blocksuite/affine/block-root/src/widgets/edgeless-zoom-toolbar/zoom-bar-toggle-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/edgeless-zoom-toolbar/zoom-toolbar.ts b/blocksuite/affine/block-root/src/widgets/edgeless-zoom-toolbar/zoom-toolbar.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/edgeless-zoom-toolbar/zoom-toolbar.ts
rename to blocksuite/affine/block-root/src/widgets/edgeless-zoom-toolbar/zoom-toolbar.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/add-frame-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/add-frame-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/add-frame-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/add-frame-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/add-group-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/add-group-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/add-group-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/add-group-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/align-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/align-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/align-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/align-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-attachment-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-attachment-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-attachment-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-attachment-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-brush-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-brush-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-brush-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-brush-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-connector-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-connector-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-connector-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-connector-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-edgeless-text-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-edgeless-text-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-edgeless-text-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-edgeless-text-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-embed-card-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-embed-card-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-embed-card-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-embed-card-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-frame-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-frame-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-frame-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-frame-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-group-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-group-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-group-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-group-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-image-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-image-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-image-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-image-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-mindmap-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-mindmap-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-mindmap-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-mindmap-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-note-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-note-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-note-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-note-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-shape-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-shape-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-shape-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-shape-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-text-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-text-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-text-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-text-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-text-menu.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/change-text-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/change-text-menu.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/change-text-menu.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/effects.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/effects.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/effects.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/effects.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/icons.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/icons.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/icons.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/icons.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/index.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/index.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/lock-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/lock-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/lock-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/lock-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/more-menu/button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/more-menu/button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/more-menu/button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/more-menu/button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/more-menu/config.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/more-menu/config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/more-menu/config.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/more-menu/config.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/more-menu/context.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/more-menu/context.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/more-menu/context.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/more-menu/context.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/more-menu/render-linked-doc.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/more-menu/render-linked-doc.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/more-menu/render-linked-doc.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/more-menu/render-linked-doc.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/release-from-group-button.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/release-from-group-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/release-from-group-button.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/release-from-group-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/styles.css.ts b/blocksuite/affine/block-root/src/widgets/element-toolbar/styles.css.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/element-toolbar/styles.css.ts
rename to blocksuite/affine/block-root/src/widgets/element-toolbar/styles.css.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/embed-card-toolbar/config.ts b/blocksuite/affine/block-root/src/widgets/embed-card-toolbar/config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/embed-card-toolbar/config.ts
rename to blocksuite/affine/block-root/src/widgets/embed-card-toolbar/config.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/embed-card-toolbar/context.ts b/blocksuite/affine/block-root/src/widgets/embed-card-toolbar/context.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/embed-card-toolbar/context.ts
rename to blocksuite/affine/block-root/src/widgets/embed-card-toolbar/context.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/embed-card-toolbar/embed-card-toolbar.ts b/blocksuite/affine/block-root/src/widgets/embed-card-toolbar/embed-card-toolbar.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/embed-card-toolbar/embed-card-toolbar.ts
rename to blocksuite/affine/block-root/src/widgets/embed-card-toolbar/embed-card-toolbar.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/embed-card-toolbar/styles.ts b/blocksuite/affine/block-root/src/widgets/embed-card-toolbar/styles.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/embed-card-toolbar/styles.ts
rename to blocksuite/affine/block-root/src/widgets/embed-card-toolbar/styles.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/format-bar/components/config-renderer.ts b/blocksuite/affine/block-root/src/widgets/format-bar/components/config-renderer.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/format-bar/components/config-renderer.ts
rename to blocksuite/affine/block-root/src/widgets/format-bar/components/config-renderer.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/format-bar/components/highlight/consts.ts b/blocksuite/affine/block-root/src/widgets/format-bar/components/highlight/consts.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/format-bar/components/highlight/consts.ts
rename to blocksuite/affine/block-root/src/widgets/format-bar/components/highlight/consts.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/format-bar/components/highlight/highlight-button.ts b/blocksuite/affine/block-root/src/widgets/format-bar/components/highlight/highlight-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/format-bar/components/highlight/highlight-button.ts
rename to blocksuite/affine/block-root/src/widgets/format-bar/components/highlight/highlight-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/format-bar/components/paragraph-button.ts b/blocksuite/affine/block-root/src/widgets/format-bar/components/paragraph-button.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/format-bar/components/paragraph-button.ts
rename to blocksuite/affine/block-root/src/widgets/format-bar/components/paragraph-button.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/format-bar/config.ts b/blocksuite/affine/block-root/src/widgets/format-bar/config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/format-bar/config.ts
rename to blocksuite/affine/block-root/src/widgets/format-bar/config.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/format-bar/context.ts b/blocksuite/affine/block-root/src/widgets/format-bar/context.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/format-bar/context.ts
rename to blocksuite/affine/block-root/src/widgets/format-bar/context.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/format-bar/format-bar.ts b/blocksuite/affine/block-root/src/widgets/format-bar/format-bar.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/format-bar/format-bar.ts
rename to blocksuite/affine/block-root/src/widgets/format-bar/format-bar.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/format-bar/index.ts b/blocksuite/affine/block-root/src/widgets/format-bar/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/format-bar/index.ts
rename to blocksuite/affine/block-root/src/widgets/format-bar/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/format-bar/styles.ts b/blocksuite/affine/block-root/src/widgets/format-bar/styles.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/format-bar/styles.ts
rename to blocksuite/affine/block-root/src/widgets/format-bar/styles.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/image-toolbar/components/image-toolbar.ts b/blocksuite/affine/block-root/src/widgets/image-toolbar/components/image-toolbar.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/image-toolbar/components/image-toolbar.ts
rename to blocksuite/affine/block-root/src/widgets/image-toolbar/components/image-toolbar.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/image-toolbar/config.ts b/blocksuite/affine/block-root/src/widgets/image-toolbar/config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/image-toolbar/config.ts
rename to blocksuite/affine/block-root/src/widgets/image-toolbar/config.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/image-toolbar/context.ts b/blocksuite/affine/block-root/src/widgets/image-toolbar/context.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/image-toolbar/context.ts
rename to blocksuite/affine/block-root/src/widgets/image-toolbar/context.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/image-toolbar/index.ts b/blocksuite/affine/block-root/src/widgets/image-toolbar/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/image-toolbar/index.ts
rename to blocksuite/affine/block-root/src/widgets/image-toolbar/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/image-toolbar/styles.ts b/blocksuite/affine/block-root/src/widgets/image-toolbar/styles.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/image-toolbar/styles.ts
rename to blocksuite/affine/block-root/src/widgets/image-toolbar/styles.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/image-toolbar/utils.ts b/blocksuite/affine/block-root/src/widgets/image-toolbar/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/image-toolbar/utils.ts
rename to blocksuite/affine/block-root/src/widgets/image-toolbar/utils.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/index.ts b/blocksuite/affine/block-root/src/widgets/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/index.ts
rename to blocksuite/affine/block-root/src/widgets/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/inner-modal/inner-modal.ts b/blocksuite/affine/block-root/src/widgets/inner-modal/inner-modal.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/inner-modal/inner-modal.ts
rename to blocksuite/affine/block-root/src/widgets/inner-modal/inner-modal.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/config.ts b/blocksuite/affine/block-root/src/widgets/keyboard-toolbar/config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/config.ts
rename to blocksuite/affine/block-root/src/widgets/keyboard-toolbar/config.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/effects.ts b/blocksuite/affine/block-root/src/widgets/keyboard-toolbar/effects.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/effects.ts
rename to blocksuite/affine/block-root/src/widgets/keyboard-toolbar/effects.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/icons.ts b/blocksuite/affine/block-root/src/widgets/keyboard-toolbar/icons.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/icons.ts
rename to blocksuite/affine/block-root/src/widgets/keyboard-toolbar/icons.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/index.ts b/blocksuite/affine/block-root/src/widgets/keyboard-toolbar/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/index.ts
rename to blocksuite/affine/block-root/src/widgets/keyboard-toolbar/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/keyboard-tool-panel.ts b/blocksuite/affine/block-root/src/widgets/keyboard-toolbar/keyboard-tool-panel.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/keyboard-tool-panel.ts
rename to blocksuite/affine/block-root/src/widgets/keyboard-toolbar/keyboard-tool-panel.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/keyboard-toolbar.ts b/blocksuite/affine/block-root/src/widgets/keyboard-toolbar/keyboard-toolbar.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/keyboard-toolbar.ts
rename to blocksuite/affine/block-root/src/widgets/keyboard-toolbar/keyboard-toolbar.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/styles.ts b/blocksuite/affine/block-root/src/widgets/keyboard-toolbar/styles.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/styles.ts
rename to blocksuite/affine/block-root/src/widgets/keyboard-toolbar/styles.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/utils.ts b/blocksuite/affine/block-root/src/widgets/keyboard-toolbar/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/keyboard-toolbar/utils.ts
rename to blocksuite/affine/block-root/src/widgets/keyboard-toolbar/utils.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/linked-doc/config.ts b/blocksuite/affine/block-root/src/widgets/linked-doc/config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/linked-doc/config.ts
rename to blocksuite/affine/block-root/src/widgets/linked-doc/config.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/linked-doc/effects.ts b/blocksuite/affine/block-root/src/widgets/linked-doc/effects.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/linked-doc/effects.ts
rename to blocksuite/affine/block-root/src/widgets/linked-doc/effects.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/linked-doc/import-doc/import-doc.ts b/blocksuite/affine/block-root/src/widgets/linked-doc/import-doc/import-doc.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/linked-doc/import-doc/import-doc.ts
rename to blocksuite/affine/block-root/src/widgets/linked-doc/import-doc/import-doc.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/linked-doc/import-doc/index.ts b/blocksuite/affine/block-root/src/widgets/linked-doc/import-doc/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/linked-doc/import-doc/index.ts
rename to blocksuite/affine/block-root/src/widgets/linked-doc/import-doc/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/linked-doc/import-doc/loader.ts b/blocksuite/affine/block-root/src/widgets/linked-doc/import-doc/loader.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/linked-doc/import-doc/loader.ts
rename to blocksuite/affine/block-root/src/widgets/linked-doc/import-doc/loader.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/linked-doc/import-doc/styles.ts b/blocksuite/affine/block-root/src/widgets/linked-doc/import-doc/styles.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/linked-doc/import-doc/styles.ts
rename to blocksuite/affine/block-root/src/widgets/linked-doc/import-doc/styles.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/linked-doc/index.ts b/blocksuite/affine/block-root/src/widgets/linked-doc/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/linked-doc/index.ts
rename to blocksuite/affine/block-root/src/widgets/linked-doc/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/linked-doc/linked-doc-popover.ts b/blocksuite/affine/block-root/src/widgets/linked-doc/linked-doc-popover.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/linked-doc/linked-doc-popover.ts
rename to blocksuite/affine/block-root/src/widgets/linked-doc/linked-doc-popover.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/linked-doc/mobile-linked-doc-menu.ts b/blocksuite/affine/block-root/src/widgets/linked-doc/mobile-linked-doc-menu.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/linked-doc/mobile-linked-doc-menu.ts
rename to blocksuite/affine/block-root/src/widgets/linked-doc/mobile-linked-doc-menu.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/linked-doc/styles.ts b/blocksuite/affine/block-root/src/widgets/linked-doc/styles.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/linked-doc/styles.ts
rename to blocksuite/affine/block-root/src/widgets/linked-doc/styles.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/linked-doc/utils.ts b/blocksuite/affine/block-root/src/widgets/linked-doc/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/linked-doc/utils.ts
rename to blocksuite/affine/block-root/src/widgets/linked-doc/utils.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/modal/custom-modal.ts b/blocksuite/affine/block-root/src/widgets/modal/custom-modal.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/modal/custom-modal.ts
rename to blocksuite/affine/block-root/src/widgets/modal/custom-modal.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/modal/modal.ts b/blocksuite/affine/block-root/src/widgets/modal/modal.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/modal/modal.ts
rename to blocksuite/affine/block-root/src/widgets/modal/modal.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/page-dragging-area/page-dragging-area.ts b/blocksuite/affine/block-root/src/widgets/page-dragging-area/page-dragging-area.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/page-dragging-area/page-dragging-area.ts
rename to blocksuite/affine/block-root/src/widgets/page-dragging-area/page-dragging-area.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/config.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/config.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/config.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/index.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/index.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/slash-menu-popover.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/slash-menu-popover.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/slash-menu-popover.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/slash-menu-popover.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/styles.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/styles.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/styles.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/styles.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/attachment.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/attachment.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/attachment.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/attachment.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/bold-text.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/bold-text.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/bold-text.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/bold-text.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/bulleted-list.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/bulleted-list.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/bulleted-list.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/bulleted-list.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/code-block.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/code-block.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/code-block.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/code-block.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/copy.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/copy.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/copy.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/copy.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/delete.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/delete.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/delete.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/delete.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/divider.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/divider.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/divider.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/divider.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/edgeless.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/edgeless.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/edgeless.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/edgeless.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/empty.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/empty.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/empty.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/empty.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/figma.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/figma.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/figma.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/figma.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/github-repo.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/github-repo.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/github-repo.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/github-repo.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-1.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-1.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-1.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-1.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-2.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-2.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-2.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-2.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-3.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-3.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-3.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-3.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-4.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-4.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-4.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-4.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-5.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-5.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-5.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-5.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-6.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-6.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/heading-6.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/heading-6.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/index.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/index.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/index.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/index.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/italic.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/italic.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/italic.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/italic.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/kanban-view.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/kanban-view.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/kanban-view.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/kanban-view.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/linear.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/linear.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/linear.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/linear.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/link-doc.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/link-doc.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/link-doc.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/link-doc.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/link.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/link.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/link.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/link.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/move-down.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/move-down.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/move-down.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/move-down.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/move-up.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/move-up.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/move-up.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/move-up.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/new-doc.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/new-doc.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/new-doc.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/new-doc.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/now.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/now.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/now.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/now.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/numbered-list.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/numbered-list.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/numbered-list.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/numbered-list.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/pdf.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/pdf.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/pdf.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/pdf.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/photo.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/photo.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/photo.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/photo.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/quote.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/quote.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/quote.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/quote.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/strikethrough.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/strikethrough.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/strikethrough.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/strikethrough.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/table-view.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/table-view.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/table-view.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/table-view.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/text.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/text.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/text.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/text.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/to-do-list.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/to-do-list.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/to-do-list.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/to-do-list.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/today.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/today.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/today.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/today.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/tomorrow.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/tomorrow.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/tomorrow.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/tomorrow.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/tweet.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/tweet.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/tweet.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/tweet.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/underline.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/underline.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/underline.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/underline.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/yesterday.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/yesterday.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/yesterday.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/yesterday.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/youtube-video.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/youtube-video.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/tooltips/youtube-video.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/tooltips/youtube-video.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/slash-menu/utils.ts b/blocksuite/affine/block-root/src/widgets/slash-menu/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/slash-menu/utils.ts
rename to blocksuite/affine/block-root/src/widgets/slash-menu/utils.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/surface-ref-toolbar/config.ts b/blocksuite/affine/block-root/src/widgets/surface-ref-toolbar/config.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/surface-ref-toolbar/config.ts
rename to blocksuite/affine/block-root/src/widgets/surface-ref-toolbar/config.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/surface-ref-toolbar/context.ts b/blocksuite/affine/block-root/src/widgets/surface-ref-toolbar/context.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/surface-ref-toolbar/context.ts
rename to blocksuite/affine/block-root/src/widgets/surface-ref-toolbar/context.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/surface-ref-toolbar/surface-ref-toolbar.ts b/blocksuite/affine/block-root/src/widgets/surface-ref-toolbar/surface-ref-toolbar.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/surface-ref-toolbar/surface-ref-toolbar.ts
rename to blocksuite/affine/block-root/src/widgets/surface-ref-toolbar/surface-ref-toolbar.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/surface-ref-toolbar/utils.ts b/blocksuite/affine/block-root/src/widgets/surface-ref-toolbar/utils.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/surface-ref-toolbar/utils.ts
rename to blocksuite/affine/block-root/src/widgets/surface-ref-toolbar/utils.ts
diff --git a/blocksuite/blocks/src/root-block/widgets/viewport-overlay/viewport-overlay.ts b/blocksuite/affine/block-root/src/widgets/viewport-overlay/viewport-overlay.ts
similarity index 100%
rename from blocksuite/blocks/src/root-block/widgets/viewport-overlay/viewport-overlay.ts
rename to blocksuite/affine/block-root/src/widgets/viewport-overlay/viewport-overlay.ts
diff --git a/blocksuite/affine/block-root/tsconfig.json b/blocksuite/affine/block-root/tsconfig.json
new file mode 100644
index 000000000..12fbcabc0
--- /dev/null
+++ b/blocksuite/affine/block-root/tsconfig.json
@@ -0,0 +1,39 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "tsBuildInfoFile": "./dist/tsconfig.tsbuildinfo"
+ },
+ "include": ["./src"],
+ "references": [
+ { "path": "../block-attachment" },
+ { "path": "../block-bookmark" },
+ { "path": "../block-data-view" },
+ { "path": "../block-database" },
+ { "path": "../block-edgeless-text" },
+ { "path": "../block-embed" },
+ { "path": "../block-frame" },
+ { "path": "../block-image" },
+ { "path": "../block-latex" },
+ { "path": "../block-list" },
+ { "path": "../block-note" },
+ { "path": "../block-paragraph" },
+ { "path": "../block-surface" },
+ { "path": "../block-surface-ref" },
+ { "path": "../block-table" },
+ { "path": "../components" },
+ { "path": "../model" },
+ { "path": "../shared" },
+ { "path": "../widget-drag-handle" },
+ { "path": "../widget-edgeless-auto-connect" },
+ { "path": "../widget-frame-title" },
+ { "path": "../widget-remote-selection" },
+ { "path": "../widget-scroll-anchoring" },
+ { "path": "../../framework/block-std" },
+ { "path": "../data-view" },
+ { "path": "../../framework/global" },
+ { "path": "../../framework/inline" },
+ { "path": "../../framework/store" }
+ ]
+}
diff --git a/blocksuite/blocks/package.json b/blocksuite/blocks/package.json
index f42b15a84..ab6043503 100644
--- a/blocksuite/blocks/package.json
+++ b/blocksuite/blocks/package.json
@@ -28,6 +28,7 @@
"@blocksuite/affine-block-list": "workspace:*",
"@blocksuite/affine-block-note": "workspace:*",
"@blocksuite/affine-block-paragraph": "workspace:*",
+ "@blocksuite/affine-block-root": "workspace:*",
"@blocksuite/affine-block-surface": "workspace:*",
"@blocksuite/affine-block-surface-ref": "workspace:*",
"@blocksuite/affine-block-table": "workspace:*",
diff --git a/blocksuite/blocks/src/_common/adapters/html/block-matcher.ts b/blocksuite/blocks/src/_common/adapters/html/block-matcher.ts
index b8a5bf8a5..1a190068d 100644
--- a/blocksuite/blocks/src/_common/adapters/html/block-matcher.ts
+++ b/blocksuite/blocks/src/_common/adapters/html/block-matcher.ts
@@ -13,10 +13,9 @@ import {
import { ImageBlockHtmlAdapterExtension } from '@blocksuite/affine-block-image';
import { ListBlockHtmlAdapterExtension } from '@blocksuite/affine-block-list';
import { ParagraphBlockHtmlAdapterExtension } from '@blocksuite/affine-block-paragraph';
+import { RootBlockHtmlAdapterExtension } from '@blocksuite/affine-block-root';
import { TableBlockHtmlAdapterExtension } from '@blocksuite/affine-block-table';
-import { RootBlockHtmlAdapterExtension } from '../../../root-block/adapters/html.js';
-
export const defaultBlockHtmlAdapterMatchers = [
ListBlockHtmlAdapterExtension,
ParagraphBlockHtmlAdapterExtension,
diff --git a/blocksuite/blocks/src/_common/adapters/markdown/block-matcher.ts b/blocksuite/blocks/src/_common/adapters/markdown/block-matcher.ts
index eaa943d61..f753874da 100644
--- a/blocksuite/blocks/src/_common/adapters/markdown/block-matcher.ts
+++ b/blocksuite/blocks/src/_common/adapters/markdown/block-matcher.ts
@@ -15,10 +15,9 @@ import { LatexBlockMarkdownAdapterExtension } from '@blocksuite/affine-block-lat
import { ListBlockMarkdownAdapterExtension } from '@blocksuite/affine-block-list';
import { DocNoteBlockMarkdownAdapterExtension } from '@blocksuite/affine-block-note';
import { ParagraphBlockMarkdownAdapterExtension } from '@blocksuite/affine-block-paragraph';
+import { RootBlockMarkdownAdapterExtension } from '@blocksuite/affine-block-root';
import { TableBlockMarkdownAdapterExtension } from '@blocksuite/affine-block-table';
-import { RootBlockMarkdownAdapterExtension } from '../../../root-block/adapters/markdown.js';
-
export const defaultBlockMarkdownAdapterMatchers = [
RootBlockMarkdownAdapterExtension,
DocNoteBlockMarkdownAdapterExtension,
diff --git a/blocksuite/blocks/src/_common/adapters/notion-html/block-matcher.ts b/blocksuite/blocks/src/_common/adapters/notion-html/block-matcher.ts
index fe2e61bdc..ef903c5e1 100644
--- a/blocksuite/blocks/src/_common/adapters/notion-html/block-matcher.ts
+++ b/blocksuite/blocks/src/_common/adapters/notion-html/block-matcher.ts
@@ -13,10 +13,9 @@ import { ImageBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-i
import { LatexBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-latex';
import { ListBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-list';
import { ParagraphBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-paragraph';
+import { RootBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-root';
import type { ExtensionType } from '@blocksuite/store';
-import { RootBlockNotionHtmlAdapterExtension } from '../../../root-block/adapters/notion-html.js';
-
export const defaultBlockNotionHtmlAdapterMatchers: ExtensionType[] = [
ListBlockNotionHtmlAdapterExtension,
ParagraphBlockNotionHtmlAdapterExtension,
diff --git a/blocksuite/blocks/src/_specs/preset/edgeless-specs.ts b/blocksuite/blocks/src/_specs/preset/edgeless-specs.ts
index f97a2d772..732dc01f0 100644
--- a/blocksuite/blocks/src/_specs/preset/edgeless-specs.ts
+++ b/blocksuite/blocks/src/_specs/preset/edgeless-specs.ts
@@ -1,59 +1,9 @@
-import {
- EdgelessFrameManager,
- FrameOverlay,
- PresentTool,
-} from '@blocksuite/affine-block-frame';
-import { ConnectionOverlay } from '@blocksuite/affine-block-surface';
+import { EdgelessBuiltInSpecs } from '@blocksuite/affine-block-root';
import type { ExtensionType } from '@blocksuite/store';
-import { EdgelessRootBlockSpec } from '../../root-block/edgeless/edgeless-root-spec.js';
-import { BrushTool } from '../../root-block/edgeless/gfx-tool/brush-tool.js';
-import { ConnectorTool } from '../../root-block/edgeless/gfx-tool/connector-tool.js';
-import { CopilotTool } from '../../root-block/edgeless/gfx-tool/copilot-tool.js';
-import { DefaultTool } from '../../root-block/edgeless/gfx-tool/default-tool.js';
-import { MindMapIndicatorOverlay } from '../../root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/indicator-overlay.js';
-import { EmptyTool } from '../../root-block/edgeless/gfx-tool/empty-tool.js';
-import { EraserTool } from '../../root-block/edgeless/gfx-tool/eraser-tool.js';
-import { FrameTool } from '../../root-block/edgeless/gfx-tool/frame-tool.js';
-import { LassoTool } from '../../root-block/edgeless/gfx-tool/lasso-tool.js';
-import { NoteTool } from '../../root-block/edgeless/gfx-tool/note-tool.js';
-import { PanTool } from '../../root-block/edgeless/gfx-tool/pan-tool.js';
-import { ShapeTool } from '../../root-block/edgeless/gfx-tool/shape-tool.js';
-import { TemplateTool } from '../../root-block/edgeless/gfx-tool/template-tool.js';
-import { TextTool } from '../../root-block/edgeless/gfx-tool/text-tool.js';
-import { EditPropsMiddlewareBuilder } from '../../root-block/edgeless/middlewares/base.js';
-import { EdgelessSnapManager } from '../../root-block/edgeless/utils/snap-manager.js';
-import { EdgelessFirstPartyBlockSpecs } from '../common.js';
-
-export const EdgelessToolExtension: ExtensionType[] = [
- DefaultTool,
- PanTool,
- EraserTool,
- TextTool,
- ShapeTool,
- NoteTool,
- BrushTool,
- ConnectorTool,
- CopilotTool,
- TemplateTool,
- EmptyTool,
- FrameTool,
- LassoTool,
- PresentTool,
-];
-
-export const EdgelessBuiltInManager: ExtensionType[] = [
- ConnectionOverlay,
- FrameOverlay,
- MindMapIndicatorOverlay,
- EdgelessSnapManager,
- EdgelessFrameManager,
- EditPropsMiddlewareBuilder,
-];
+import { EdgelessFirstPartyBlockSpecs } from '../common';
export const EdgelessEditorBlockSpecs: ExtensionType[] = [
- EdgelessRootBlockSpec,
+ EdgelessBuiltInSpecs,
EdgelessFirstPartyBlockSpecs,
- EdgelessToolExtension,
- EdgelessBuiltInManager,
].flat();
diff --git a/blocksuite/blocks/src/_specs/preset/page-specs.ts b/blocksuite/blocks/src/_specs/preset/page-specs.ts
index 4642c3aaf..366178fb0 100644
--- a/blocksuite/blocks/src/_specs/preset/page-specs.ts
+++ b/blocksuite/blocks/src/_specs/preset/page-specs.ts
@@ -1,6 +1,6 @@
+import { PageRootBlockSpec } from '@blocksuite/affine-block-root';
import type { ExtensionType } from '@blocksuite/store';
-import { PageRootBlockSpec } from '../../root-block/page/page-root-spec.js';
import { PageFirstPartyBlockSpecs } from '../common.js';
export const PageEditorBlockSpecs: ExtensionType[] = [
diff --git a/blocksuite/blocks/src/_specs/preset/preview-specs.ts b/blocksuite/blocks/src/_specs/preset/preview-specs.ts
index e484da420..341295600 100644
--- a/blocksuite/blocks/src/_specs/preset/preview-specs.ts
+++ b/blocksuite/blocks/src/_specs/preset/preview-specs.ts
@@ -1,7 +1,9 @@
+import {
+ PreviewEdgelessRootBlockSpec,
+ PreviewPageRootBlockSpec,
+} from '@blocksuite/affine-block-root';
import type { ExtensionType } from '@blocksuite/store';
-import { PreviewEdgelessRootBlockSpec } from '../../root-block/edgeless/edgeless-root-spec.js';
-import { PreviewPageRootBlockSpec } from '../../root-block/page/page-root-spec.js';
import {
EdgelessFirstPartyBlockSpecs,
PageFirstPartyBlockSpecs,
diff --git a/blocksuite/blocks/src/effects.ts b/blocksuite/blocks/src/effects.ts
index f607b7035..0a84e30bd 100644
--- a/blocksuite/blocks/src/effects.ts
+++ b/blocksuite/blocks/src/effects.ts
@@ -12,6 +12,7 @@ import { effects as blockLatexEffects } from '@blocksuite/affine-block-latex/eff
import { effects as blockListEffects } from '@blocksuite/affine-block-list/effects';
import { effects as blockNoteEffects } from '@blocksuite/affine-block-note/effects';
import { effects as blockParagraphEffects } from '@blocksuite/affine-block-paragraph/effects';
+import { effects as blockRootEffects } from '@blocksuite/affine-block-root/effects';
import { effects as blockSurfaceEffects } from '@blocksuite/affine-block-surface/effects';
import { effects as blockSurfaceRefEffects } from '@blocksuite/affine-block-surface-ref/effects';
import { effects as blockTableEffects } from '@blocksuite/affine-block-table/effects';
@@ -45,141 +46,6 @@ import { effects as dataViewEffects } from '@blocksuite/data-view/effects';
import { effects as inlineEffects } from '@blocksuite/inline/effects';
import { registerSpecs } from './_specs/register-specs.js';
-import { EdgelessAutoCompletePanel } from './root-block/edgeless/components/auto-complete/auto-complete-panel.js';
-import { EdgelessAutoComplete } from './root-block/edgeless/components/auto-complete/edgeless-auto-complete.js';
-import { EdgelessToolIconButton } from './root-block/edgeless/components/buttons/tool-icon-button.js';
-import { EdgelessToolbarButton } from './root-block/edgeless/components/buttons/toolbar-button.js';
-import { EdgelessConnectorHandle } from './root-block/edgeless/components/connector/connector-handle.js';
-import {
- NOTE_SLICER_WIDGET,
- NoteSlicer,
-} from './root-block/edgeless/components/note-slicer/index.js';
-import { EdgelessAlignPanel } from './root-block/edgeless/components/panel/align-panel.js';
-import { CardStylePanel } from './root-block/edgeless/components/panel/card-style-panel.js';
-import {
- EdgelessColorButton,
- EdgelessColorPanel,
- EdgelessTextColorIcon,
-} from './root-block/edgeless/components/panel/color-panel.js';
-import { EdgelessFontFamilyPanel } from './root-block/edgeless/components/panel/font-family-panel.js';
-import { EdgelessFontWeightAndStylePanel } from './root-block/edgeless/components/panel/font-weight-and-style-panel.js';
-import { EdgelessLineWidthPanel } from './root-block/edgeless/components/panel/line-width-panel.js';
-import { NoteDisplayModePanel } from './root-block/edgeless/components/panel/note-display-mode-panel.js';
-import { EdgelessNoteShadowPanel } from './root-block/edgeless/components/panel/note-shadow-panel.js';
-import { EdgelessScalePanel } from './root-block/edgeless/components/panel/scale-panel.js';
-import { EdgelessShapePanel } from './root-block/edgeless/components/panel/shape-panel.js';
-import { EdgelessShapeStylePanel } from './root-block/edgeless/components/panel/shape-style-panel.js';
-import { EdgelessSizePanel } from './root-block/edgeless/components/panel/size-panel.js';
-import { StrokeStylePanel } from './root-block/edgeless/components/panel/stroke-style-panel.js';
-import {
- EDGELESS_NAVIGATOR_BLACK_BACKGROUND_WIDGET,
- EdgelessNavigatorBlackBackgroundWidget,
-} from './root-block/edgeless/components/presentation/edgeless-navigator-black-background.js';
-import {
- EDGELESS_DRAGGING_AREA_WIDGET,
- EdgelessDraggingAreaRectWidget,
-} from './root-block/edgeless/components/rects/edgeless-dragging-area-rect.js';
-import {
- EDGELESS_SELECTED_RECT_WIDGET,
- EdgelessSelectedRectWidget,
-} from './root-block/edgeless/components/rects/edgeless-selected-rect.js';
-import { EdgelessConnectorLabelEditor } from './root-block/edgeless/components/text/edgeless-connector-label-editor.js';
-import { EdgelessFrameTitleEditor } from './root-block/edgeless/components/text/edgeless-frame-title-editor.js';
-import { EdgelessGroupTitleEditor } from './root-block/edgeless/components/text/edgeless-group-title-editor.js';
-import { EdgelessShapeTextEditor } from './root-block/edgeless/components/text/edgeless-shape-text-editor.js';
-import { EdgelessTextEditor } from './root-block/edgeless/components/text/edgeless-text-editor.js';
-import { EdgelessBrushMenu } from './root-block/edgeless/components/toolbar/brush/brush-menu.js';
-import { EdgelessBrushToolButton } from './root-block/edgeless/components/toolbar/brush/brush-tool-button.js';
-import { EdgelessSlideMenu } from './root-block/edgeless/components/toolbar/common/slide-menu.js';
-import { ToolbarArrowUpIcon } from './root-block/edgeless/components/toolbar/common/toolbar-arrow-up-icon.js';
-import { EdgelessConnectorMenu } from './root-block/edgeless/components/toolbar/connector/connector-menu.js';
-import { EdgelessConnectorToolButton } from './root-block/edgeless/components/toolbar/connector/connector-tool-button.js';
-import { EdgelessDefaultToolButton } from './root-block/edgeless/components/toolbar/default/default-tool-button.js';
-import {
- EDGELESS_TOOLBAR_WIDGET,
- EdgelessToolbarWidget,
-} from './root-block/edgeless/components/toolbar/edgeless-toolbar.js';
-import { EdgelessEraserToolButton } from './root-block/edgeless/components/toolbar/eraser/eraser-tool-button.js';
-import { EdgelessFrameMenu } from './root-block/edgeless/components/toolbar/frame/frame-menu.js';
-import { EdgelessFrameToolButton } from './root-block/edgeless/components/toolbar/frame/frame-tool-button.js';
-import { EdgelessLassoToolButton } from './root-block/edgeless/components/toolbar/lasso/lasso-tool-button.js';
-import { EdgelessLinkToolButton } from './root-block/edgeless/components/toolbar/link/link-tool-button.js';
-import { MindMapPlaceholder } from './root-block/edgeless/components/toolbar/mindmap/mindmap-importing-placeholder.js';
-import { EdgelessMindmapMenu } from './root-block/edgeless/components/toolbar/mindmap/mindmap-menu.js';
-import { EdgelessMindmapToolButton } from './root-block/edgeless/components/toolbar/mindmap/mindmap-tool-button.js';
-import { EdgelessNoteMenu } from './root-block/edgeless/components/toolbar/note/note-menu.js';
-import { EdgelessNoteSeniorButton } from './root-block/edgeless/components/toolbar/note/note-senior-button.js';
-import { EdgelessNoteToolButton } from './root-block/edgeless/components/toolbar/note/note-tool-button.js';
-import { EdgelessFrameOrderButton } from './root-block/edgeless/components/toolbar/present/frame-order-button.js';
-import { EdgelessFrameOrderMenu } from './root-block/edgeless/components/toolbar/present/frame-order-menu.js';
-import { EdgelessNavigatorSettingButton } from './root-block/edgeless/components/toolbar/present/navigator-setting-button.js';
-import { EdgelessPresentButton } from './root-block/edgeless/components/toolbar/present/present-button.js';
-import { PresentationToolbar } from './root-block/edgeless/components/toolbar/presentation-toolbar.js';
-import { EdgelessToolbarShapeDraggable } from './root-block/edgeless/components/toolbar/shape/shape-draggable.js';
-import { EdgelessShapeMenu } from './root-block/edgeless/components/toolbar/shape/shape-menu.js';
-import { EdgelessShapeToolButton } from './root-block/edgeless/components/toolbar/shape/shape-tool-button.js';
-import { EdgelessShapeToolElement } from './root-block/edgeless/components/toolbar/shape/shape-tool-element.js';
-import { OverlayScrollbar } from './root-block/edgeless/components/toolbar/template/overlay-scrollbar.js';
-import { AffineTemplateLoading } from './root-block/edgeless/components/toolbar/template/template-loading.js';
-import { EdgelessTemplatePanel } from './root-block/edgeless/components/toolbar/template/template-panel.js';
-import { EdgelessTemplateButton } from './root-block/edgeless/components/toolbar/template/template-tool-button.js';
-import { EdgelessTextMenu } from './root-block/edgeless/components/toolbar/text/text-menu.js';
-import { EdgelessRootPreviewBlockComponent } from './root-block/edgeless/edgeless-root-preview-block.js';
-import {
- AFFINE_AI_PANEL_WIDGET,
- AFFINE_EDGELESS_COPILOT_WIDGET,
- AFFINE_EMBED_CARD_TOOLBAR_WIDGET,
- AFFINE_FORMAT_BAR_WIDGET,
- AffineAIPanelWidget,
- AffineEdgelessZoomToolbarWidget,
- AffineFormatBarWidget,
- AffineImageToolbarWidget,
- AffineInnerModalWidget,
- AffineModalWidget,
- AffinePageDraggingAreaWidget,
- AffineSlashMenuWidget,
- AffineSurfaceRefToolbar,
- EdgelessCopilotToolbarEntry,
- EdgelessCopilotWidget,
- EdgelessRootBlockComponent,
- EmbedCardToolbar,
- FramePreview,
- PageRootBlockComponent,
- PreviewRootBlockComponent,
-} from './root-block/index.js';
-import { AIFinishTip } from './root-block/widgets/ai-panel/components/finish-tip.js';
-import { GeneratingPlaceholder } from './root-block/widgets/ai-panel/components/generating-placeholder.js';
-import {
- AIPanelAnswer,
- AIPanelDivider,
- AIPanelError,
- AIPanelGenerating,
- AIPanelInput,
-} from './root-block/widgets/ai-panel/components/index.js';
-import { EdgelessCopilotPanel } from './root-block/widgets/edgeless-copilot-panel/index.js';
-import { AFFINE_EDGELESS_ZOOM_TOOLBAR_WIDGET } from './root-block/widgets/edgeless-zoom-toolbar/index.js';
-import { ZoomBarToggleButton } from './root-block/widgets/edgeless-zoom-toolbar/zoom-bar-toggle-button.js';
-import { EdgelessZoomToolbar } from './root-block/widgets/edgeless-zoom-toolbar/zoom-toolbar.js';
-import { effects as widgetEdgelessElementToolbarEffects } from './root-block/widgets/element-toolbar/effects.js';
-import { AffineImageToolbar } from './root-block/widgets/image-toolbar/components/image-toolbar.js';
-import { AFFINE_IMAGE_TOOLBAR_WIDGET } from './root-block/widgets/image-toolbar/index.js';
-import { AFFINE_INNER_MODAL_WIDGET } from './root-block/widgets/inner-modal/inner-modal.js';
-import { effects as widgetMobileToolbarEffects } from './root-block/widgets/keyboard-toolbar/effects.js';
-import { effects as widgetLinkedDocEffects } from './root-block/widgets/linked-doc/effects.js';
-import { Loader } from './root-block/widgets/linked-doc/import-doc/loader';
-import { AffineCustomModal } from './root-block/widgets/modal/custom-modal.js';
-import { AFFINE_MODAL_WIDGET } from './root-block/widgets/modal/modal.js';
-import { AFFINE_PAGE_DRAGGING_AREA_WIDGET } from './root-block/widgets/page-dragging-area/page-dragging-area.js';
-import { AFFINE_SLASH_MENU_WIDGET } from './root-block/widgets/slash-menu/index.js';
-import {
- InnerSlashMenu,
- SlashMenu,
-} from './root-block/widgets/slash-menu/slash-menu-popover.js';
-import { AFFINE_SURFACE_REF_TOOLBAR } from './root-block/widgets/surface-ref-toolbar/surface-ref-toolbar.js';
-import {
- AFFINE_VIEWPORT_OVERLAY_WIDGET,
- AffineViewportOverlayWidget,
-} from './root-block/widgets/viewport-overlay/viewport-overlay.js';
export function effects() {
registerSpecs();
@@ -206,7 +72,7 @@ export function effects() {
blockDataViewEffects();
blockCodeEffects();
blockTableEffects();
-
+ blockRootEffects();
componentCaptionEffects();
componentContextMenuEffects();
componentDatePickerEffects();
@@ -221,10 +87,7 @@ export function effects() {
componentDocTitleEffects();
widgetScrollAnchoringEffects();
- widgetMobileToolbarEffects();
- widgetLinkedDocEffects();
widgetFrameTitleEffects();
- widgetEdgelessElementToolbarEffects();
widgetRemoteSelectionEffects();
widgetDragHandleEffects();
widgetEdgelessAutoConnectEffects();
@@ -232,173 +95,10 @@ export function effects() {
fragmentFramePanelEffects();
fragmentOutlineEffects();
- customElements.define('affine-page-root', PageRootBlockComponent);
- customElements.define('affine-preview-root', PreviewRootBlockComponent);
- customElements.define('affine-edgeless-root', EdgelessRootBlockComponent);
- customElements.define('edgeless-copilot-panel', EdgelessCopilotPanel);
- customElements.define(
- 'edgeless-copilot-toolbar-entry',
- EdgelessCopilotToolbarEntry
- );
- customElements.define('edgeless-connector-handle', EdgelessConnectorHandle);
- customElements.define('edgeless-zoom-toolbar', EdgelessZoomToolbar);
- customElements.define(
- 'affine-edgeless-root-preview',
- EdgelessRootPreviewBlockComponent
- );
- customElements.define('affine-custom-modal', AffineCustomModal);
- customElements.define('affine-slash-menu', SlashMenu);
- customElements.define('inner-slash-menu', InnerSlashMenu);
- customElements.define('generating-placeholder', GeneratingPlaceholder);
- customElements.define('ai-finish-tip', AIFinishTip);
- customElements.define('ai-panel-divider', AIPanelDivider);
- customElements.define(NOTE_SLICER_WIDGET, NoteSlicer);
- customElements.define(
- EDGELESS_NAVIGATOR_BLACK_BACKGROUND_WIDGET,
- EdgelessNavigatorBlackBackgroundWidget
- );
- customElements.define('zoom-bar-toggle-button', ZoomBarToggleButton);
- customElements.define(
- EDGELESS_DRAGGING_AREA_WIDGET,
- EdgelessDraggingAreaRectWidget
- );
customElements.define('icon-button', IconButton);
- customElements.define('loader-element', Loader);
- customElements.define('edgeless-brush-menu', EdgelessBrushMenu);
- customElements.define('edgeless-brush-tool-button', EdgelessBrushToolButton);
- customElements.define(
- 'edgeless-connector-tool-button',
- EdgelessConnectorToolButton
- );
- customElements.define(
- 'edgeless-default-tool-button',
- EdgelessDefaultToolButton
- );
- customElements.define('edgeless-connector-menu', EdgelessConnectorMenu);
customElements.define('smooth-corner', SmoothCorner);
customElements.define('toggle-switch', ToggleSwitch);
- customElements.define('ai-panel-answer', AIPanelAnswer);
- customElements.define(
- 'edgeless-eraser-tool-button',
- EdgelessEraserToolButton
- );
- customElements.define('edgeless-frame-menu', EdgelessFrameMenu);
- customElements.define('edgeless-frame-tool-button', EdgelessFrameToolButton);
- customElements.define('ai-panel-input', AIPanelInput);
- customElements.define('ai-panel-generating', AIPanelGenerating);
- customElements.define('edgeless-link-tool-button', EdgelessLinkToolButton);
- customElements.define('edgeless-mindmap-menu', EdgelessMindmapMenu);
- customElements.define('edgeless-lasso-tool-button', EdgelessLassoToolButton);
customElements.define('affine-filterable-list', FilterableListComponent);
- customElements.define('ai-panel-error', AIPanelError);
- customElements.define(
- EDGELESS_SELECTED_RECT_WIDGET,
- EdgelessSelectedRectWidget
- );
- customElements.define('mindmap-import-placeholder', MindMapPlaceholder);
- customElements.define(
- 'edgeless-note-senior-button',
- EdgelessNoteSeniorButton
- );
- customElements.define('edgeless-align-panel', EdgelessAlignPanel);
- customElements.define('card-style-panel', CardStylePanel);
- customElements.define('edgeless-color-button', EdgelessColorButton);
- customElements.define('edgeless-color-panel', EdgelessColorPanel);
- customElements.define('edgeless-text-color-icon', EdgelessTextColorIcon);
- customElements.define(
- 'edgeless-mindmap-tool-button',
- EdgelessMindmapToolButton
- );
- customElements.define('edgeless-note-tool-button', EdgelessNoteToolButton);
- customElements.define('edgeless-note-menu', EdgelessNoteMenu);
- customElements.define('edgeless-line-width-panel', EdgelessLineWidthPanel);
- customElements.define(
- 'edgeless-frame-order-button',
- EdgelessFrameOrderButton
- );
- customElements.define('edgeless-frame-order-menu', EdgelessFrameOrderMenu);
- customElements.define(
- 'edgeless-auto-complete-panel',
- EdgelessAutoCompletePanel
- );
- customElements.define(
- 'edgeless-navigator-setting-button',
- EdgelessNavigatorSettingButton
- );
- customElements.define('edgeless-present-button', EdgelessPresentButton);
- customElements.define('overlay-scrollbar', OverlayScrollbar);
- customElements.define('affine-template-loading', AffineTemplateLoading);
- customElements.define('edgeless-auto-complete', EdgelessAutoComplete);
- customElements.define(
- 'edgeless-font-weight-and-style-panel',
- EdgelessFontWeightAndStylePanel
- );
- customElements.define('edgeless-note-shadow-panel', EdgelessNoteShadowPanel);
- customElements.define('edgeless-templates-panel', EdgelessTemplatePanel);
- customElements.define('edgeless-text-menu', EdgelessTextMenu);
- customElements.define('edgeless-template-button', EdgelessTemplateButton);
- customElements.define('edgeless-tool-icon-button', EdgelessToolIconButton);
- customElements.define('edgeless-size-panel', EdgelessSizePanel);
- customElements.define('edgeless-scale-panel', EdgelessScalePanel);
- customElements.define('edgeless-font-family-panel', EdgelessFontFamilyPanel);
- customElements.define('edgeless-shape-panel', EdgelessShapePanel);
- customElements.define('note-display-mode-panel', NoteDisplayModePanel);
- customElements.define('edgeless-toolbar-button', EdgelessToolbarButton);
- customElements.define('frame-preview', FramePreview);
- customElements.define('presentation-toolbar', PresentationToolbar);
- customElements.define('edgeless-shape-menu', EdgelessShapeMenu);
- customElements.define('stroke-style-panel', StrokeStylePanel);
- customElements.define('edgeless-shape-tool-button', EdgelessShapeToolButton);
- customElements.define(
- 'edgeless-connector-label-editor',
- EdgelessConnectorLabelEditor
- );
customElements.define('block-zero-width', BlockZeroWidth);
- customElements.define(
- 'edgeless-shape-tool-element',
- EdgelessShapeToolElement
- );
- customElements.define('edgeless-shape-text-editor', EdgelessShapeTextEditor);
- customElements.define(
- 'edgeless-group-title-editor',
- EdgelessGroupTitleEditor
- );
- customElements.define(EDGELESS_TOOLBAR_WIDGET, EdgelessToolbarWidget);
- customElements.define('edgeless-shape-style-panel', EdgelessShapeStylePanel);
- customElements.define(
- 'edgeless-frame-title-editor',
- EdgelessFrameTitleEditor
- );
- customElements.define('edgeless-text-editor', EdgelessTextEditor);
- customElements.define('affine-image-toolbar', AffineImageToolbar);
customElements.define('affine-block-selection', BlockSelection);
- customElements.define('edgeless-slide-menu', EdgelessSlideMenu);
- customElements.define(
- 'edgeless-toolbar-shape-draggable',
- EdgelessToolbarShapeDraggable
- );
- customElements.define('toolbar-arrow-up-icon', ToolbarArrowUpIcon);
-
- customElements.define(AFFINE_AI_PANEL_WIDGET, AffineAIPanelWidget);
- customElements.define(AFFINE_EMBED_CARD_TOOLBAR_WIDGET, EmbedCardToolbar);
- customElements.define(AFFINE_INNER_MODAL_WIDGET, AffineInnerModalWidget);
- customElements.define(AFFINE_MODAL_WIDGET, AffineModalWidget);
- customElements.define(
- AFFINE_PAGE_DRAGGING_AREA_WIDGET,
- AffinePageDraggingAreaWidget
- );
- customElements.define(AFFINE_EDGELESS_COPILOT_WIDGET, EdgelessCopilotWidget);
-
- customElements.define(AFFINE_IMAGE_TOOLBAR_WIDGET, AffineImageToolbarWidget);
- customElements.define(AFFINE_SLASH_MENU_WIDGET, AffineSlashMenuWidget);
- customElements.define(
- AFFINE_VIEWPORT_OVERLAY_WIDGET,
- AffineViewportOverlayWidget
- );
- customElements.define(
- AFFINE_EDGELESS_ZOOM_TOOLBAR_WIDGET,
- AffineEdgelessZoomToolbarWidget
- );
- customElements.define(AFFINE_SURFACE_REF_TOOLBAR, AffineSurfaceRefToolbar);
- customElements.define(AFFINE_FORMAT_BAR_WIDGET, AffineFormatBarWidget);
}
diff --git a/blocksuite/blocks/src/index.ts b/blocksuite/blocks/src/index.ts
index 0b31e8a9c..2eb475680 100644
--- a/blocksuite/blocks/src/index.ts
+++ b/blocksuite/blocks/src/index.ts
@@ -1,24 +1,8 @@
/* oxlint-disable @typescript-eslint/triple-slash-reference */
///
-import { matchModels } from '@blocksuite/affine-shared/utils';
-import { deserializeXYWH, Point } from '@blocksuite/global/utils';
-
-import { splitElements } from './root-block/edgeless/utils/clipboard-utils.js';
-import { isCanvasElement } from './root-block/edgeless/utils/query.js';
export * from './_common/adapters/index.js';
export * from './_specs/index.js';
-export { EdgelessTemplatePanel } from './root-block/edgeless/components/toolbar/template/template-panel.js';
-export type {
- Template,
- TemplateCategory,
- TemplateManager,
-} from './root-block/edgeless/components/toolbar/template/template-type.js';
-export { CopilotTool } from './root-block/edgeless/gfx-tool/copilot-tool.js';
-export * from './root-block/edgeless/gfx-tool/index.js';
-export { EditPropsMiddlewareBuilder } from './root-block/edgeless/middlewares/base.js';
-export { EdgelessSnapManager } from './root-block/edgeless/utils/snap-manager.js';
-export * from './root-block/index.js';
export * from './schemas.js';
export * from '@blocksuite/affine-block-attachment';
export * from '@blocksuite/affine-block-bookmark';
@@ -34,6 +18,7 @@ export * from '@blocksuite/affine-block-latex';
export * from '@blocksuite/affine-block-list';
export * from '@blocksuite/affine-block-note';
export * from '@blocksuite/affine-block-paragraph';
+export * from '@blocksuite/affine-block-root';
export * from '@blocksuite/affine-block-surface';
export * from '@blocksuite/affine-block-surface-ref';
export * from '@blocksuite/affine-block-table';
@@ -124,14 +109,6 @@ export {
} from '@blocksuite/affine-shared/utils';
export type { DragBlockPayload } from '@blocksuite/affine-widget-drag-handle';
-export const BlocksUtils = {
- splitElements,
- matchModels,
- deserializeXYWH,
- isCanvasElement,
- Point,
-};
-
const env: Record =
typeof globalThis !== 'undefined'
? globalThis
diff --git a/blocksuite/blocks/src/root-block/edgeless/index.ts b/blocksuite/blocks/src/root-block/edgeless/index.ts
deleted file mode 100644
index e14d8ddf4..000000000
--- a/blocksuite/blocks/src/root-block/edgeless/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export { FramePreview } from './components/frame/frame-preview.js';
-export * from './edgeless-root-block.js';
-export { EdgelessRootPreviewBlockComponent } from './edgeless-root-preview-block.js';
-export { EdgelessRootService } from './edgeless-root-service.js';
diff --git a/blocksuite/blocks/tsconfig.json b/blocksuite/blocks/tsconfig.json
index 681b898bc..84c8ee462 100644
--- a/blocksuite/blocks/tsconfig.json
+++ b/blocksuite/blocks/tsconfig.json
@@ -21,6 +21,7 @@
{ "path": "../affine/block-list" },
{ "path": "../affine/block-note" },
{ "path": "../affine/block-paragraph" },
+ { "path": "../affine/block-root" },
{ "path": "../affine/block-surface" },
{ "path": "../affine/block-surface-ref" },
{ "path": "../affine/block-table" },
diff --git a/packages/frontend/core/src/blocksuite/presets/ai/_common/chat-actions-handle.ts b/packages/frontend/core/src/blocksuite/presets/ai/_common/chat-actions-handle.ts
index 671152979..1b3c39f72 100644
--- a/packages/frontend/core/src/blocksuite/presets/ai/_common/chat-actions-handle.ts
+++ b/packages/frontend/core/src/blocksuite/presets/ai/_common/chat-actions-handle.ts
@@ -8,11 +8,11 @@ import {
import { GfxControllerIdentifier } from '@blocksuite/affine/block-std/gfx';
import type { DocMode, ImageSelection } from '@blocksuite/affine/blocks';
import {
- BlocksUtils,
DocModeProvider,
EdgelessCRUDIdentifier,
EditPropsStore,
getSelectedBlocksCommand,
+ matchModels,
NoteDisplayMode,
NotificationProvider,
ParagraphBlockModel,
@@ -34,8 +34,6 @@ import { reportResponse } from '../utils/action-reporter';
import { insertBelow, replace } from '../utils/editor-actions';
import { BlockIcon, CreateIcon, InsertBelowIcon, ReplaceIcon } from './icons';
-const { matchModels } = BlocksUtils;
-
type Selections = {
text?: TextSelection;
blocks?: BlockSelection[];
diff --git a/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-handler.ts b/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-handler.ts
index fe3538f11..e9e28c9b9 100644
--- a/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-handler.ts
+++ b/packages/frontend/core/src/blocksuite/presets/ai/actions/edgeless-handler.ts
@@ -9,13 +9,14 @@ import type {
EdgelessCopilotWidget,
} from '@blocksuite/affine/blocks';
import {
- BlocksUtils,
CodeBlockModel,
EdgelessTextBlockModel,
EmbedSyncedDocModel,
ImageBlockModel,
+ matchModels,
NoteBlockModel,
ShapeElementModel,
+ splitElements,
TextElementModel,
} from '@blocksuite/affine/blocks';
import { assertExists } from '@blocksuite/affine/global/utils';
@@ -431,7 +432,7 @@ export function actionToHandler(
togglePanel = async () => {
if (isEmpty) return true;
const { notes, shapes, images, edgelessTexts, embedSyncedDocs } =
- BlocksUtils.splitElements(selectedElements);
+ splitElements(selectedElements);
const blocks = [
...notes,
...shapes,
@@ -489,7 +490,7 @@ export function noteWithCodeBlockShowWen(
return (
selected[0] instanceof NoteBlockModel &&
selected[0].children.length === 1 &&
- BlocksUtils.matchModels(selected[0].children[0], [CodeBlockModel])
+ matchModels(selected[0].children[0], [CodeBlockModel])
);
}
diff --git a/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/actions-config.ts b/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/actions-config.ts
index 609341b79..9f0cb59a4 100644
--- a/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/actions-config.ts
+++ b/packages/frontend/core/src/blocksuite/presets/ai/entries/edgeless/actions-config.ts
@@ -1,9 +1,9 @@
import {
type AIItemGroupConfig,
AIStarIconWithAnimation,
- BlocksUtils,
MindmapElementModel,
ShapeElementModel,
+ splitElements,
TextElementModel,
} from '@blocksuite/affine/blocks';
@@ -293,7 +293,7 @@ const generateGroup: AIItemGroupConfig = {
shapes,
notes: _,
frames: __,
- } = BlocksUtils.splitElements(selectedElements);
+ } = splitElements(selectedElements);
const pureShapes = shapes.filter(
e =>
@@ -412,7 +412,7 @@ const generateGroup: AIItemGroupConfig = {
}
const { notes, frames, shapes, images, edgelessTexts } =
- BlocksUtils.splitElements(selectedElements);
+ splitElements(selectedElements);
const f = frames.length;
const i = images.length;
const n = notes.length;
diff --git a/packages/frontend/core/src/blocksuite/presets/ai/utils/extract.ts b/packages/frontend/core/src/blocksuite/presets/ai/utils/extract.ts
index 6129b105a..1f9111246 100644
--- a/packages/frontend/core/src/blocksuite/presets/ai/utils/extract.ts
+++ b/packages/frontend/core/src/blocksuite/presets/ai/utils/extract.ts
@@ -1,6 +1,5 @@
import type { EditorHost } from '@blocksuite/affine/block-std';
import {
- BlocksUtils,
DatabaseBlockModel,
DocModeProvider,
embedSyncedDocMiddleware,
@@ -9,6 +8,7 @@ import {
ImageBlockModel,
isInsideEdgelessEditor,
MarkdownAdapter,
+ matchModels,
type NoteBlockModel,
NoteDisplayMode,
titleMiddleware,
@@ -163,8 +163,7 @@ export async function extractMarkdownFromDoc(
const adapter = new MarkdownAdapter(transformer, provider);
const blockModels = getNoteBlockModels(doc);
const textModels = blockModels.filter(
- model =>
- !BlocksUtils.matchModels(model, [ImageBlockModel, DatabaseBlockModel])
+ model => !matchModels(model, [ImageBlockModel, DatabaseBlockModel])
);
const drafts = textModels.map(toDraftModel);
const slice = Slice.fromModels(doc, drafts);
diff --git a/packages/frontend/core/src/blocksuite/presets/ai/utils/selection-utils.ts b/packages/frontend/core/src/blocksuite/presets/ai/utils/selection-utils.ts
index 3615e5849..6bc6b77c5 100644
--- a/packages/frontend/core/src/blocksuite/presets/ai/utils/selection-utils.ts
+++ b/packages/frontend/core/src/blocksuite/presets/ai/utils/selection-utils.ts
@@ -4,7 +4,6 @@ import {
type GfxModel,
} from '@blocksuite/affine/block-std/gfx';
import {
- BlocksUtils,
type CopilotTool,
DatabaseBlockModel,
type FrameBlockModel,
@@ -14,6 +13,9 @@ import {
getSelectedModelsCommand,
getTextSelectionCommand,
ImageBlockModel,
+ isCanvasElement,
+ matchModels,
+ splitElements,
type SurfaceBlockComponent,
} from '@blocksuite/affine/blocks';
import {
@@ -51,7 +53,7 @@ export async function allToCanvas(host: EditorHost) {
export async function elementsToCanvas(host: EditorHost, elements: GfxModel[]) {
const edgelessRoot = getEdgelessRootFromEditor(host);
const { notes, frames, shapes, images, edgelessTexts, embedSyncedDocs } =
- BlocksUtils.splitElements(elements);
+ splitElements(elements);
const blockElements = [
...notes,
@@ -119,8 +121,7 @@ export async function getTextContentFromBlockModels(
) {
// Currently only filter out images and databases
const selectedTextModels = models.filter(
- model =>
- !BlocksUtils.matchModels(model, [ImageBlockModel, DatabaseBlockModel])
+ model => !matchModels(model, [ImageBlockModel, DatabaseBlockModel])
);
const drafts = selectedTextModels.map(toDraftModel);
drafts.forEach(draft => traverse(draft, drafts));
@@ -218,7 +219,7 @@ export const getFirstImageInFrame = (
false
);
const image = elements.find(ele => {
- if (!BlocksUtils.isCanvasElement(ele)) {
+ if (!isCanvasElement(ele)) {
return ele.flavour === 'affine:image';
}
return false;
diff --git a/tools/utils/src/workspace.gen.ts b/tools/utils/src/workspace.gen.ts
index 6d6fbcd20..5c30988aa 100644
--- a/tools/utils/src/workspace.gen.ts
+++ b/tools/utils/src/workspace.gen.ts
@@ -210,6 +210,40 @@ export const PackageList = [
'blocksuite/framework/store',
],
},
+ {
+ location: 'blocksuite/affine/block-root',
+ name: '@blocksuite/affine-block-root',
+ workspaceDependencies: [
+ 'blocksuite/affine/block-attachment',
+ 'blocksuite/affine/block-bookmark',
+ 'blocksuite/affine/block-data-view',
+ 'blocksuite/affine/block-database',
+ 'blocksuite/affine/block-edgeless-text',
+ 'blocksuite/affine/block-embed',
+ 'blocksuite/affine/block-frame',
+ 'blocksuite/affine/block-image',
+ 'blocksuite/affine/block-latex',
+ 'blocksuite/affine/block-list',
+ 'blocksuite/affine/block-note',
+ 'blocksuite/affine/block-paragraph',
+ 'blocksuite/affine/block-surface',
+ 'blocksuite/affine/block-surface-ref',
+ 'blocksuite/affine/block-table',
+ 'blocksuite/affine/components',
+ 'blocksuite/affine/model',
+ 'blocksuite/affine/shared',
+ 'blocksuite/affine/widget-drag-handle',
+ 'blocksuite/affine/widget-edgeless-auto-connect',
+ 'blocksuite/affine/widget-frame-title',
+ 'blocksuite/affine/widget-remote-selection',
+ 'blocksuite/affine/widget-scroll-anchoring',
+ 'blocksuite/framework/block-std',
+ 'blocksuite/affine/data-view',
+ 'blocksuite/framework/global',
+ 'blocksuite/framework/inline',
+ 'blocksuite/framework/store',
+ ],
+ },
{
location: 'blocksuite/affine/block-surface',
name: '@blocksuite/affine-block-surface',
@@ -404,6 +438,7 @@ export const PackageList = [
'blocksuite/affine/block-list',
'blocksuite/affine/block-note',
'blocksuite/affine/block-paragraph',
+ 'blocksuite/affine/block-root',
'blocksuite/affine/block-surface',
'blocksuite/affine/block-surface-ref',
'blocksuite/affine/block-table',
@@ -788,6 +823,7 @@ export type PackageName =
| '@blocksuite/affine-block-list'
| '@blocksuite/affine-block-note'
| '@blocksuite/affine-block-paragraph'
+ | '@blocksuite/affine-block-root'
| '@blocksuite/affine-block-surface'
| '@blocksuite/affine-block-surface-ref'
| '@blocksuite/affine-block-table'
diff --git a/tsconfig.json b/tsconfig.json
index c247221d7..cd8227ea9 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -65,6 +65,7 @@
{ "path": "./blocksuite/affine/block-list" },
{ "path": "./blocksuite/affine/block-note" },
{ "path": "./blocksuite/affine/block-paragraph" },
+ { "path": "./blocksuite/affine/block-root" },
{ "path": "./blocksuite/affine/block-surface" },
{ "path": "./blocksuite/affine/block-surface-ref" },
{ "path": "./blocksuite/affine/block-table" },
diff --git a/yarn.lock b/yarn.lock
index 8bc889787..ce2607183 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3613,6 +3613,58 @@ __metadata:
languageName: unknown
linkType: soft
+"@blocksuite/affine-block-root@workspace:*, @blocksuite/affine-block-root@workspace:blocksuite/affine/block-root":
+ version: 0.0.0-use.local
+ resolution: "@blocksuite/affine-block-root@workspace:blocksuite/affine/block-root"
+ dependencies:
+ "@blocksuite/affine-block-attachment": "workspace:*"
+ "@blocksuite/affine-block-bookmark": "workspace:*"
+ "@blocksuite/affine-block-data-view": "workspace:*"
+ "@blocksuite/affine-block-database": "workspace:*"
+ "@blocksuite/affine-block-edgeless-text": "workspace:*"
+ "@blocksuite/affine-block-embed": "workspace:*"
+ "@blocksuite/affine-block-frame": "workspace:*"
+ "@blocksuite/affine-block-image": "workspace:*"
+ "@blocksuite/affine-block-latex": "workspace:*"
+ "@blocksuite/affine-block-list": "workspace:*"
+ "@blocksuite/affine-block-note": "workspace:*"
+ "@blocksuite/affine-block-paragraph": "workspace:*"
+ "@blocksuite/affine-block-surface": "workspace:*"
+ "@blocksuite/affine-block-surface-ref": "workspace:*"
+ "@blocksuite/affine-block-table": "workspace:*"
+ "@blocksuite/affine-components": "workspace:*"
+ "@blocksuite/affine-model": "workspace:*"
+ "@blocksuite/affine-shared": "workspace:*"
+ "@blocksuite/affine-widget-drag-handle": "workspace:*"
+ "@blocksuite/affine-widget-edgeless-auto-connect": "workspace:*"
+ "@blocksuite/affine-widget-frame-title": "workspace:*"
+ "@blocksuite/affine-widget-remote-selection": "workspace:*"
+ "@blocksuite/affine-widget-scroll-anchoring": "workspace:*"
+ "@blocksuite/block-std": "workspace:*"
+ "@blocksuite/data-view": "workspace:*"
+ "@blocksuite/global": "workspace:*"
+ "@blocksuite/icons": "npm:^2.2.1"
+ "@blocksuite/inline": "workspace:*"
+ "@blocksuite/store": "workspace:*"
+ "@floating-ui/dom": "npm:^1.6.10"
+ "@lit/context": "npm:^1.1.2"
+ "@preact/signals-core": "npm:^1.8.0"
+ "@toeverything/theme": "npm:^1.1.11"
+ "@types/lodash-es": "npm:^4.17.12"
+ "@types/mdast": "npm:^4.0.4"
+ "@vanilla-extract/css": "npm:^1.17.0"
+ dompurify: "npm:^3.2.4"
+ fflate: "npm:^0.8.2"
+ html2canvas: "npm:^1.4.1"
+ lit: "npm:^3.2.0"
+ lodash-es: "npm:^4.17.21"
+ minimatch: "npm:^10.0.1"
+ simple-xml-to-json: "npm:^1.2.2"
+ yjs: "npm:^13.6.21"
+ zod: "npm:^3.23.8"
+ languageName: unknown
+ linkType: soft
+
"@blocksuite/affine-block-surface-ref@workspace:*, @blocksuite/affine-block-surface-ref@workspace:blocksuite/affine/block-surface-ref":
version: 0.0.0-use.local
resolution: "@blocksuite/affine-block-surface-ref@workspace:blocksuite/affine/block-surface-ref"
@@ -3980,6 +4032,7 @@ __metadata:
"@blocksuite/affine-block-list": "workspace:*"
"@blocksuite/affine-block-note": "workspace:*"
"@blocksuite/affine-block-paragraph": "workspace:*"
+ "@blocksuite/affine-block-root": "workspace:*"
"@blocksuite/affine-block-surface": "workspace:*"
"@blocksuite/affine-block-surface-ref": "workspace:*"
"@blocksuite/affine-block-table": "workspace:*"