diff --git a/blocksuite/affine/block-surface/src/extensions/crud-extension.ts b/blocksuite/affine/block-surface/src/extensions/crud-extension.ts index 9788beaccc..2b8fb7edd3 100644 --- a/blocksuite/affine/block-surface/src/extensions/crud-extension.ts +++ b/blocksuite/affine/block-surface/src/extensions/crud-extension.ts @@ -1,3 +1,4 @@ +import type { SurfaceElementModelMap } from '@blocksuite/affine-model'; import { EditPropsStore } from '@blocksuite/affine-shared/services'; import { type BlockStdScope, StdIdentifier } from '@blocksuite/block-std'; import { @@ -62,13 +63,13 @@ export class EdgelessCRUDExtension extends Extension { }; addBlock = ( - flavour: BlockSuite.EdgelessModelKeys | string, + flavour: string, props: Record, parentId?: string | BlockModel, parentIndex?: number ) => { const gfx = this.std.get(GfxControllerIdentifier); - const key = getLastPropsKey(flavour as BlockSuite.EdgelessModelKeys, props); + const key = getLastPropsKey(flavour, props); if (key) { props = this.std.get(EditPropsStore).applyLastProps(key, props); } @@ -94,7 +95,7 @@ export class EdgelessCRUDExtension extends Extension { } const gfx = this.std.get(GfxControllerIdentifier); - const key = getLastPropsKey(type as BlockSuite.EdgelessModelKeys, props); + const key = getLastPropsKey(type, props); if (key) { props = this.std.get(EditPropsStore).applyLastProps(key, props) as T; } @@ -117,10 +118,10 @@ export class EdgelessCRUDExtension extends Extension { const element = this._surface.getElementById(id); if (element) { - const key = getLastPropsKey( - element.type as BlockSuite.EdgelessModelKeys, - { ...element.yMap.toJSON(), ...props } - ); + const key = getLastPropsKey(element.type, { + ...element.yMap.toJSON(), + ...props, + }); key && this.std.get(EditPropsStore).recordLastProps(key, props); this._surface.updateElement(id, props); return; @@ -128,10 +129,10 @@ export class EdgelessCRUDExtension extends Extension { const block = this.std.store.getBlockById(id); if (block) { - const key = getLastPropsKey( - block.flavour as BlockSuite.EdgelessModelKeys, - { ...block.yBlock.toJSON(), ...props } - ); + const key = getLastPropsKey(block.flavour, { + ...block.yBlock.toJSON(), + ...props, + }); key && this.std.get(EditPropsStore).recordLastProps(key, props); this.std.store.updateBlock(block, props); } @@ -142,17 +143,13 @@ export class EdgelessCRUDExtension extends Extension { if (!surface) { return null; } - const el = - surface.getElementById(id) ?? - (this.std.store.getBlockById( - id - ) as BlockSuite.EdgelessBlockModelType | null); - return el; + const el = surface.getElementById(id) ?? this.std.store.getBlockById(id); + return el as GfxModel | null; } - getElementsByType( + getElementsByType( type: K - ): BlockSuite.SurfaceElementModelMap[K][] { + ): SurfaceElementModelMap[K][] { if (!this._surface) { return []; } diff --git a/blocksuite/affine/block-surface/src/managers/connector-manager.ts b/blocksuite/affine/block-surface/src/managers/connector-manager.ts index 4569ba1b99..637997e61a 100644 --- a/blocksuite/affine/block-surface/src/managers/connector-manager.ts +++ b/blocksuite/affine/block-surface/src/managers/connector-manager.ts @@ -7,7 +7,11 @@ import { type LocalConnectorElementModel, } from '@blocksuite/affine-model'; import { ThemeProvider } from '@blocksuite/affine-shared/services'; -import type { GfxController, GfxModel } from '@blocksuite/block-std/gfx'; +import type { + GfxController, + GfxLocalElementModel, + GfxModel, +} from '@blocksuite/block-std/gfx'; import type { IBound, IVec, IVec3 } from '@blocksuite/global/utils'; import { almostEqual, @@ -70,9 +74,7 @@ export const ConnectorEndpointLocationsOnTriangle: IVec[] = [ [0.25, 0.5], ]; -export function isConnectorWithLabel( - model: GfxModel | BlockSuite.SurfaceLocalModel -) { +export function isConnectorWithLabel(model: GfxModel | GfxLocalElementModel) { return model instanceof ConnectorElementModel && model.hasLabel(); } diff --git a/blocksuite/affine/block-surface/src/renderer/elements/index.ts b/blocksuite/affine/block-surface/src/renderer/elements/index.ts index 5113afe5a0..719aef4486 100644 --- a/blocksuite/affine/block-surface/src/renderer/elements/index.ts +++ b/blocksuite/affine/block-surface/src/renderer/elements/index.ts @@ -1,6 +1,7 @@ +import type { GfxPrimitiveElementModel } from '@blocksuite/block-std/gfx'; import type { IBound } from '@blocksuite/global/utils'; -import type { RoughCanvas, SurfaceElementModel } from '../../index.js'; +import type { RoughCanvas } from '../../index.js'; import type { CanvasRenderer } from '../canvas-renderer.js'; import { brush } from './brush/index.js'; import { connector } from './connector/index.js'; @@ -11,7 +12,7 @@ import { text } from './text/index.js'; export { normalizeShapeBound } from './shape/utils.js'; export type ElementRenderer< - T extends BlockSuite.SurfaceElementModel = SurfaceElementModel, + T extends GfxPrimitiveElementModel = GfxPrimitiveElementModel, > = ( model: T, ctx: CanvasRenderingContext2D, diff --git a/blocksuite/affine/block-surface/src/surface-model.ts b/blocksuite/affine/block-surface/src/surface-model.ts index cae84c6ca8..e5c94332ad 100644 --- a/blocksuite/affine/block-surface/src/surface-model.ts +++ b/blocksuite/affine/block-surface/src/surface-model.ts @@ -1,4 +1,7 @@ -import type { ConnectorElementModel } from '@blocksuite/affine-model'; +import type { + ConnectorElementModel, + SurfaceElementModelMap, +} from '@blocksuite/affine-model'; import type { SurfaceBlockProps } from '@blocksuite/block-std/gfx'; import { SurfaceBlockModel as BaseSurfaceModel } from '@blocksuite/block-std/gfx'; import { DisposableGroup } from '@blocksuite/global/utils'; @@ -55,11 +58,9 @@ export class SurfaceBlockModel extends BaseSurfaceModel { ); } - override getElementsByType( + override getElementsByType( type: K - ): BlockSuite.SurfaceElementModelMap[K][] { - return super.getElementsByType( - type - ) as BlockSuite.SurfaceElementModelMap[K][]; + ): SurfaceElementModelMap[K][] { + return super.getElementsByType(type) as SurfaceElementModelMap[K][]; } } diff --git a/blocksuite/affine/block-surface/src/utils/add-note.ts b/blocksuite/affine/block-surface/src/utils/add-note.ts index 42833a878a..e0888606d7 100644 --- a/blocksuite/affine/block-surface/src/utils/add-note.ts +++ b/blocksuite/affine/block-surface/src/utils/add-note.ts @@ -10,7 +10,10 @@ import { TelemetryProvider } from '@blocksuite/affine-shared/services'; import type { NoteChildrenFlavour } from '@blocksuite/affine-shared/types'; import { handleNativeRangeAtPoint } from '@blocksuite/affine-shared/utils'; import type { BlockStdScope } from '@blocksuite/block-std'; -import { GfxControllerIdentifier } from '@blocksuite/block-std/gfx'; +import { + type GfxBlockElementModel, + GfxControllerIdentifier, +} from '@blocksuite/block-std/gfx'; import { type IPoint, type Point, @@ -117,7 +120,7 @@ export function addNote( const blocks = (doc.root?.children.filter( child => child.flavour === 'affine:note' - ) as BlockSuite.EdgelessBlockModelType[]) ?? []; + ) as GfxBlockElementModel[]) ?? []; const element = blocks.find(b => b.id === noteId); if (element) { gfx.selection.set({ diff --git a/blocksuite/affine/block-surface/src/utils/get-last-props-key.ts b/blocksuite/affine/block-surface/src/utils/get-last-props-key.ts index 18f4a495bd..b7846cf1a9 100644 --- a/blocksuite/affine/block-surface/src/utils/get-last-props-key.ts +++ b/blocksuite/affine/block-surface/src/utils/get-last-props-key.ts @@ -8,7 +8,7 @@ import { NodePropsSchema } from '@blocksuite/affine-shared/utils'; const LastPropsSchema = NodePropsSchema; export function getLastPropsKey( - modelType: BlockSuite.EdgelessModelKeys, + modelType: string, modelProps: Partial ): LastPropsKey | null { if (modelType === 'shape') { diff --git a/blocksuite/affine/model/src/blocks/attachment/attachment-model.ts b/blocksuite/affine/model/src/blocks/attachment/attachment-model.ts index fcdac29658..bb82c69d2f 100644 --- a/blocksuite/affine/model/src/blocks/attachment/attachment-model.ts +++ b/blocksuite/affine/model/src/blocks/attachment/attachment-model.ts @@ -88,11 +88,3 @@ export const AttachmentBlockSchema = defineBlockSchema({ export class AttachmentBlockModel extends GfxCompatible(BlockModel) implements GfxElementGeometry {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:attachment': AttachmentBlockModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/bookmark/bookmark-model.ts b/blocksuite/affine/model/src/blocks/bookmark/bookmark-model.ts index ed13c426df..6f5027b9d7 100644 --- a/blocksuite/affine/model/src/blocks/bookmark/bookmark-model.ts +++ b/blocksuite/affine/model/src/blocks/bookmark/bookmark-model.ts @@ -57,11 +57,3 @@ export const BookmarkBlockSchema = defineBlockSchema({ export class BookmarkBlockModel extends GfxCompatible(BlockModel) implements GfxElementGeometry {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:bookmark': BookmarkBlockModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/edgeless-text/edgeless-text-model.ts b/blocksuite/affine/model/src/blocks/edgeless-text/edgeless-text-model.ts index 88a6a4d3af..4559a9a11b 100644 --- a/blocksuite/affine/model/src/blocks/edgeless-text/edgeless-text-model.ts +++ b/blocksuite/affine/model/src/blocks/edgeless-text/edgeless-text-model.ts @@ -79,15 +79,3 @@ export const EdgelessTextBlockSchema = defineBlockSchema({ export class EdgelessTextBlockModel extends GfxCompatible(BlockModel) implements GfxElementGeometry {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:edgeless-text': EdgelessTextBlockModel; - } - - interface EdgelessTextModelMap { - 'edgeless-text': EdgelessTextBlockModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/embed/figma/figma-model.ts b/blocksuite/affine/model/src/blocks/embed/figma/figma-model.ts index 1097804b66..34c3c2260e 100644 --- a/blocksuite/affine/model/src/blocks/embed/figma/figma-model.ts +++ b/blocksuite/affine/model/src/blocks/embed/figma/figma-model.ts @@ -19,11 +19,3 @@ export type EmbedFigmaBlockProps = { export class EmbedFigmaModel extends defineEmbedModel( BlockModel ) {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:embed-figma': EmbedFigmaModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/embed/github/github-model.ts b/blocksuite/affine/model/src/blocks/embed/github/github-model.ts index fafc7930ea..3d37ddfded 100644 --- a/blocksuite/affine/model/src/blocks/embed/github/github-model.ts +++ b/blocksuite/affine/model/src/blocks/embed/github/github-model.ts @@ -33,11 +33,3 @@ export type EmbedGithubBlockProps = { export class EmbedGithubModel extends defineEmbedModel( BlockModel ) {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:embed-github': EmbedGithubModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/embed/html/html-model.ts b/blocksuite/affine/model/src/blocks/embed/html/html-model.ts index a153a4cff7..f96ebccf78 100644 --- a/blocksuite/affine/model/src/blocks/embed/html/html-model.ts +++ b/blocksuite/affine/model/src/blocks/embed/html/html-model.ts @@ -15,11 +15,3 @@ export type EmbedHtmlBlockProps = { export class EmbedHtmlModel extends defineEmbedModel( BlockModel ) {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:embed-html': EmbedHtmlModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/embed/linked-doc/linked-doc-model.ts b/blocksuite/affine/model/src/blocks/embed/linked-doc/linked-doc-model.ts index 93c82d226b..dfca91366b 100644 --- a/blocksuite/affine/model/src/blocks/embed/linked-doc/linked-doc-model.ts +++ b/blocksuite/affine/model/src/blocks/embed/linked-doc/linked-doc-model.ts @@ -20,11 +20,3 @@ export type EmbedLinkedDocBlockProps = { export class EmbedLinkedDocModel extends defineEmbedModel( BlockModel ) {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:embed-linked-doc': EmbedLinkedDocModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/embed/loom/loom-model.ts b/blocksuite/affine/model/src/blocks/embed/loom/loom-model.ts index 8115bb7172..bc5e05ab8d 100644 --- a/blocksuite/affine/model/src/blocks/embed/loom/loom-model.ts +++ b/blocksuite/affine/model/src/blocks/embed/loom/loom-model.ts @@ -21,11 +21,3 @@ export type EmbedLoomBlockProps = { export class EmbedLoomModel extends defineEmbedModel( BlockModel ) {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:embed-loom': EmbedLoomModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/embed/synced-doc/synced-doc-model.ts b/blocksuite/affine/model/src/blocks/embed/synced-doc/synced-doc-model.ts index 32a8fd098b..2b1e6930ce 100644 --- a/blocksuite/affine/model/src/blocks/embed/synced-doc/synced-doc-model.ts +++ b/blocksuite/affine/model/src/blocks/embed/synced-doc/synced-doc-model.ts @@ -15,11 +15,3 @@ export type EmbedSyncedDocBlockProps = { export class EmbedSyncedDocModel extends defineEmbedModel( BlockModel ) {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:embed-synced-doc': EmbedSyncedDocModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/embed/youtube/youtube-model.ts b/blocksuite/affine/model/src/blocks/embed/youtube/youtube-model.ts index a2084b3719..4e2233ccc4 100644 --- a/blocksuite/affine/model/src/blocks/embed/youtube/youtube-model.ts +++ b/blocksuite/affine/model/src/blocks/embed/youtube/youtube-model.ts @@ -24,11 +24,3 @@ export type EmbedYoutubeBlockProps = { export class EmbedYoutubeModel extends defineEmbedModel( BlockModel ) {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:embed-youtube': EmbedYoutubeModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/frame/frame-model.ts b/blocksuite/affine/model/src/blocks/frame/frame-model.ts index 2eec73509b..6dd9a003cc 100644 --- a/blocksuite/affine/model/src/blocks/frame/frame-model.ts +++ b/blocksuite/affine/model/src/blocks/frame/frame-model.ts @@ -144,11 +144,3 @@ export class FrameBlockModel }); } } - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:frame': FrameBlockModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/image/image-model.ts b/blocksuite/affine/model/src/blocks/image/image-model.ts index b3002d9c07..a10db389d7 100644 --- a/blocksuite/affine/model/src/blocks/image/image-model.ts +++ b/blocksuite/affine/model/src/blocks/image/image-model.ts @@ -42,11 +42,3 @@ export const ImageBlockSchema = defineBlockSchema({ export class ImageBlockModel extends GfxCompatible(BlockModel) implements GfxElementGeometry {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:image': ImageBlockModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/latex/latex-model.ts b/blocksuite/affine/model/src/blocks/latex/latex-model.ts index 5253ac89fc..7081fca61a 100644 --- a/blocksuite/affine/model/src/blocks/latex/latex-model.ts +++ b/blocksuite/affine/model/src/blocks/latex/latex-model.ts @@ -37,11 +37,3 @@ export const LatexBlockSchema = defineBlockSchema({ export class LatexBlockModel extends GfxCompatible(BlockModel) implements GfxElementGeometry {} - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:latex': LatexBlockModel; - } - } -} diff --git a/blocksuite/affine/model/src/blocks/note/note-model.ts b/blocksuite/affine/model/src/blocks/note/note-model.ts index 561d3d282f..b9057f94cc 100644 --- a/blocksuite/affine/model/src/blocks/note/note-model.ts +++ b/blocksuite/affine/model/src/blocks/note/note-model.ts @@ -155,11 +155,3 @@ export class NoteBlockModel return false; } } - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:note': NoteBlockModel; - } - } -} diff --git a/blocksuite/affine/model/src/elements/brush/brush.ts b/blocksuite/affine/model/src/elements/brush/brush.ts index 557fe398a2..5d8c8a832f 100644 --- a/blocksuite/affine/model/src/elements/brush/brush.ts +++ b/blocksuite/affine/model/src/elements/brush/brush.ts @@ -224,11 +224,3 @@ export class BrushElementModel extends GfxPrimitiveElementModel { } type Instance = GfxPrimitiveElementModel & BrushProps; - -declare global { - namespace BlockSuite { - interface SurfaceElementModelMap { - brush: BrushElementModel; - } - } -} diff --git a/blocksuite/affine/model/src/elements/connector/connector.ts b/blocksuite/affine/model/src/elements/connector/connector.ts index 8a64cfdebc..57d83419f8 100644 --- a/blocksuite/affine/model/src/elements/connector/connector.ts +++ b/blocksuite/affine/model/src/elements/connector/connector.ts @@ -508,14 +508,3 @@ export class ConnectorElementModel extends GfxPrimitiveElementModel(); + const stashed = new Set(); const traverse = (node: MindmapNode) => { node.element.stash('xywh'); stashed.add(node.element); @@ -975,11 +976,3 @@ export class MindmapElementModel extends GfxGroupLikeElementModel @field() accessor xywh: SerializedXYWH = '[0,0,16,16]'; } - -declare global { - namespace BlockSuite { - interface SurfaceElementModelMap { - text: TextElementModel; - } - - interface EdgelessTextModelMap { - text: TextElementModel; - } - } -} diff --git a/blocksuite/affine/model/src/utils/global.ts b/blocksuite/affine/model/src/utils/global.ts deleted file mode 100644 index 7c44631a75..0000000000 --- a/blocksuite/affine/model/src/utils/global.ts +++ /dev/null @@ -1,46 +0,0 @@ -import type { - GfxBlockElementModel, - GfxGroupLikeElementModel, - GfxLocalElementModel, - GfxPrimitiveElementModel, -} from '@blocksuite/block-std/gfx'; - -declare global { - namespace BlockSuite { - interface EdgelessBlockModelMap {} - type EdgelessBlockModelKeyType = keyof EdgelessBlockModelMap; - type EdgelessBlockModelType = - | EdgelessBlockModelMap[EdgelessBlockModelKeyType] - | GfxBlockElementModel; - - interface EdgelessTextModelMap {} - type EdgelessTextModelKeyType = keyof EdgelessTextModelMap; - type EdgelessTextModelType = EdgelessTextModelMap[EdgelessTextModelKeyType]; - - interface SurfaceElementModelMap {} - type SurfaceElementModelKeys = keyof SurfaceElementModelMap; - type SurfaceElementModel = - | SurfaceElementModelMap[SurfaceElementModelKeys] - | GfxPrimitiveElementModel; - - interface SurfaceGroupLikeModelMap {} - type SurfaceGroupLikeModelKeys = keyof SurfaceGroupLikeModelMap; - type SurfaceGroupLikeModel = - | SurfaceGroupLikeModelMap[SurfaceGroupLikeModelKeys] - | GfxGroupLikeElementModel; - - interface SurfaceLocalModelMap {} - type SurfaceLocalModelKeys = keyof SurfaceLocalModelMap; - type SurfaceLocalModel = - | SurfaceLocalModelMap[SurfaceLocalModelKeys] - | GfxLocalElementModel; - - // not include local model - type SurfaceModel = SurfaceElementModel | SurfaceGroupLikeModel; - type SurfaceModelKeyType = - | SurfaceElementModelKeys - | SurfaceGroupLikeModelKeys; - - type EdgelessModelKeys = EdgelessBlockModelKeyType | SurfaceModelKeyType; - } -} diff --git a/blocksuite/affine/model/src/utils/index.ts b/blocksuite/affine/model/src/utils/index.ts index b316f75db1..54c368fa8e 100644 --- a/blocksuite/affine/model/src/utils/index.ts +++ b/blocksuite/affine/model/src/utils/index.ts @@ -1,4 +1,3 @@ export * from './enum.js'; -export * from './global.js'; export * from './helper.js'; export * from './types.js'; diff --git a/blocksuite/blocks/src/_common/export-manager/export-manager.ts b/blocksuite/blocks/src/_common/export-manager/export-manager.ts index 8e5f2fba90..4bd4ae863e 100644 --- a/blocksuite/blocks/src/_common/export-manager/export-manager.ts +++ b/blocksuite/blocks/src/_common/export-manager/export-manager.ts @@ -22,7 +22,10 @@ import { type EditorHost, StdIdentifier, } from '@blocksuite/block-std'; -import type { GfxBlockElementModel } from '@blocksuite/block-std/gfx'; +import type { + GfxBlockElementModel, + GfxPrimitiveElementModel, +} from '@blocksuite/block-std/gfx'; import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions'; import type { IBound } from '@blocksuite/global/utils'; import { Bound } from '@blocksuite/global/utils'; @@ -410,7 +413,7 @@ export class ExportManager { bound: IBound, edgeless?: EdgelessRootBlockComponent, nodes?: GfxBlockElementModel[], - surfaces?: BlockSuite.SurfaceElementModel[], + surfaces?: GfxPrimitiveElementModel[], edgelessBackground?: { zoom: number; } diff --git a/blocksuite/blocks/src/root-block/edgeless/clipboard/clipboard.ts b/blocksuite/blocks/src/root-block/edgeless/clipboard/clipboard.ts index 9dd5e7054d..ba5ae71465 100644 --- a/blocksuite/blocks/src/root-block/edgeless/clipboard/clipboard.ts +++ b/blocksuite/blocks/src/root-block/edgeless/clipboard/clipboard.ts @@ -6,7 +6,7 @@ import { SurfaceGroupLikeModel, TextUtils, } from '@blocksuite/affine-block-surface'; -import type { Connection } from '@blocksuite/affine-model'; +import type { Connection, ShapeElementModel } from '@blocksuite/affine-model'; import { BookmarkStyles, DEFAULT_NOTE_HEIGHT, @@ -40,8 +40,10 @@ import type { } from '@blocksuite/block-std'; import { compareLayer, + type GfxBlockElementModel, type GfxCompatibleProps, type GfxModel, + type GfxPrimitiveElementModel, type SerializedElement, SortOrder, } from '@blocksuite/block-std/gfx'; @@ -313,7 +315,7 @@ export class EdgelessClipboardController extends PageClipboard { .get(EmbedOptionProvider) .getEmbedBlockOptions(url); if (embedOptions) { - flavour = embedOptions.flavour as BlockSuite.EdgelessModelKeys; + flavour = embedOptions.flavour; style = embedOptions.styles[0]; } } @@ -605,7 +607,7 @@ export class EdgelessClipboardController extends PageClipboard { segment: 'toolbar', type: clipboardData.type as string, }); - const element = this.crud.getElementById(id) as BlockSuite.SurfaceModel; + const element = this.crud.getElementById(id) as GfxPrimitiveElementModel; assertExists(element); return element; } @@ -882,8 +884,8 @@ export class EdgelessClipboardController extends PageClipboard { private async _edgelessToCanvas( edgeless: EdgelessRootBlockComponent, bound: IBound, - nodes?: BlockSuite.EdgelessBlockModelType[], - canvasElements: BlockSuite.SurfaceModel[] = [], + nodes?: GfxBlockElementModel[], + canvasElements: GfxPrimitiveElementModel[] = [], { background, padding = IMAGE_PADDING, @@ -961,7 +963,7 @@ export class EdgelessClipboardController extends PageClipboard { }; const _drawTopLevelBlock = async ( - block: BlockSuite.EdgelessBlockModelType, + block: GfxBlockElementModel, isInFrame = false ) => { const blockComponent = this.std.view.getBlock(block.id); @@ -992,19 +994,19 @@ export class EdgelessClipboardController extends PageClipboard { nodes ?? (edgeless.service.gfx.getElementsByBound(bound, { type: 'block', - }) as BlockSuite.EdgelessBlockModelType[]); + }) as GfxBlockElementModel[]); for (const nodeElement of nodeElements) { await _drawTopLevelBlock(nodeElement); if (matchModels(nodeElement, [FrameBlockModel])) { - const blocksInsideFrame: BlockSuite.EdgelessBlockModelType[] = []; + const blocksInsideFrame: GfxBlockElementModel[] = []; this.edgeless.service.frame .getElementsInFrameBound(nodeElement, false) .forEach(ele => { if (isTopLevelBlock(ele)) { - blocksInsideFrame.push(ele as BlockSuite.EdgelessBlockModelType); + blocksInsideFrame.push(ele as GfxBlockElementModel); } else { - canvasElements.push(ele as BlockSuite.SurfaceModel); + canvasElements.push(ele as GfxPrimitiveElementModel); } }); @@ -1245,8 +1247,8 @@ export class EdgelessClipboardController extends PageClipboard { ), }; - const blockModels: BlockSuite.EdgelessBlockModelType[] = []; - const canvasElements: BlockSuite.SurfaceModel[] = []; + const blockModels: GfxBlockElementModel[] = []; + const canvasElements: GfxPrimitiveElementModel[] = []; const allElements: GfxModel[] = []; for (const data of elementsRawData) { @@ -1283,7 +1285,7 @@ export class EdgelessClipboardController extends PageClipboard { const block = this.doc.getBlock(newId); if (!block) continue; - assertType(block.model); + assertType(block.model); blockModels.push(block.model); allElements.push(block.model); context.oldToNewIdMap.set(oldId, newId); @@ -1343,8 +1345,8 @@ export class EdgelessClipboardController extends PageClipboard { } async toCanvas( - blocks: BlockSuite.EdgelessBlockModelType[], - shapes: BlockSuite.SurfaceModel[], + blocks: GfxBlockElementModel[], + shapes: ShapeElementModel[], options?: CanvasExportOptions ) { blocks.sort(compareLayer); diff --git a/blocksuite/blocks/src/root-block/edgeless/components/rects/edgeless-selected-rect.ts b/blocksuite/blocks/src/root-block/edgeless/components/rects/edgeless-selected-rect.ts index 64f3244edf..dd8a63735c 100644 --- a/blocksuite/blocks/src/root-block/edgeless/components/rects/edgeless-selected-rect.ts +++ b/blocksuite/blocks/src/root-block/edgeless/components/rects/edgeless-selected-rect.ts @@ -43,6 +43,7 @@ import { GfxControllerIdentifier, GfxExtensionIdentifier, type GfxModel, + type GfxPrimitiveElementModel, } from '@blocksuite/block-std/gfx'; import type { Disposable, @@ -891,7 +892,7 @@ export class EdgelessSelectedRectWidget extends WidgetComponent< areAllConnectors = false; areAllShapes = false; } else { - assertType(element); + assertType(element); if (element.type === CanvasElementType.CONNECTOR) { const connector = element as ConnectorElementModel; areAllIndependentConnectors &&= !( diff --git a/blocksuite/blocks/src/root-block/edgeless/edgeless-keyboard.ts b/blocksuite/blocks/src/root-block/edgeless/edgeless-keyboard.ts index ba4b1891e5..ac50402ce4 100644 --- a/blocksuite/blocks/src/root-block/edgeless/edgeless-keyboard.ts +++ b/blocksuite/blocks/src/root-block/edgeless/edgeless-keyboard.ts @@ -23,6 +23,7 @@ import { matchModels } from '@blocksuite/affine-shared/utils'; import { SurfaceSelection, TextSelection } from '@blocksuite/block-std'; import { GfxBlockElementModel, + type GfxPrimitiveElementModel, type GfxToolsMap, type GfxToolsOption, isGfxGroupCompatibleModel, @@ -573,7 +574,7 @@ export class EdgelessPageKeyboardManager extends PageKeyboardManager { const node = mindmapNodes[0]; const mindmap = node.group as MindmapElementModel; const nodeDirection = mindmap.getLayoutDir(node.id); - let targetNode: BlockSuite.SurfaceElementModel | null = null; + let targetNode: GfxPrimitiveElementModel | null = null; switch (key) { case 'ArrowUp': diff --git a/blocksuite/blocks/src/root-block/edgeless/frame-manager.ts b/blocksuite/blocks/src/root-block/edgeless/frame-manager.ts index 1fb42ba907..a110de1a22 100644 --- a/blocksuite/blocks/src/root-block/edgeless/frame-manager.ts +++ b/blocksuite/blocks/src/root-block/edgeless/frame-manager.ts @@ -491,11 +491,7 @@ export function getBlocksInFrameBound( if (!surface) return []; return ( - getNotesInFrameBound( - doc, - model, - fullyContained - ) as BlockSuite.EdgelessBlockModelType[] + getNotesInFrameBound(doc, model, fullyContained) as GfxBlockElementModel[] ).concat( surface.children.filter(ele => { if (ele.id === model.id) return false; @@ -507,6 +503,6 @@ export function getBlocksInFrameBound( } return false; - }) as BlockSuite.EdgelessBlockModelType[] + }) as GfxBlockElementModel[] ); } diff --git a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/mind-map-ext.ts b/blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/mind-map-ext.ts index 26761d0dda..52d3adb89c 100644 --- a/blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/mind-map-ext.ts +++ b/blocksuite/blocks/src/root-block/edgeless/gfx-tool/default-tool-ext/mind-map-ext/mind-map-ext.ts @@ -14,6 +14,7 @@ import { import type { PointerEventState } from '@blocksuite/block-std'; import { type GfxModel, + type GfxPrimitiveElementModel, isGfxGroupCompatibleModel, } from '@blocksuite/block-std/gfx'; import type { Bound, IVec } from '@blocksuite/global/utils'; @@ -352,7 +353,7 @@ export class MindMapExt extends DefaultToolExt { ) { const OPACITY = 0.3; const updatedNodes = new Set< - BlockSuite.SurfaceElementModel | LocalConnectorElementModel + GfxPrimitiveElementModel | LocalConnectorElementModel >(); const traverse = (node: MindmapNode, parent: MindmapNode | null) => { node.element.opacity = OPACITY; diff --git a/blocksuite/blocks/src/root-block/edgeless/middlewares/base.ts b/blocksuite/blocks/src/root-block/edgeless/middlewares/base.ts index 38c055b8ab..0935e5bc2e 100644 --- a/blocksuite/blocks/src/root-block/edgeless/middlewares/base.ts +++ b/blocksuite/blocks/src/root-block/edgeless/middlewares/base.ts @@ -11,7 +11,7 @@ export class EditPropsMiddlewareBuilder extends SurfaceMiddlewareBuilder { middleware: SurfaceMiddleware = ctx => { if (ctx.type === 'beforeAdd') { const { type, props } = ctx.payload; - const key = getLastPropsKey(type as BlockSuite.EdgelessModelKeys, props); + const key = getLastPropsKey(type, props); const nProps = key ? this.std.get(EditPropsStore).applyLastProps(key, ctx.payload.props) : null; diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/clipboard-utils.ts b/blocksuite/blocks/src/root-block/edgeless/utils/clipboard-utils.ts index e55eff4012..75bf97c0bb 100644 --- a/blocksuite/blocks/src/root-block/edgeless/utils/clipboard-utils.ts +++ b/blocksuite/blocks/src/root-block/edgeless/utils/clipboard-utils.ts @@ -6,6 +6,7 @@ import type { FrameBlockProps, ImageBlockModel, NoteBlockModel, + ShapeElementModel, } from '@blocksuite/affine-model'; import { getElementsWithoutGroup } from '@blocksuite/affine-shared/utils'; import { @@ -72,7 +73,7 @@ export const splitElements = (elements: GfxModel[]) => { return 'shapes'; }) as { notes: NoteBlockModel[]; - shapes: BlockSuite.SurfaceModel[]; + shapes: ShapeElementModel[]; frames: FrameBlockModel[]; images: ImageBlockModel[]; edgelessTexts: EdgelessTextBlockModel[]; diff --git a/blocksuite/blocks/src/root-block/edgeless/utils/clone-utils.ts b/blocksuite/blocks/src/root-block/edgeless/utils/clone-utils.ts index f731913918..ac5f8e15aa 100644 --- a/blocksuite/blocks/src/root-block/edgeless/utils/clone-utils.ts +++ b/blocksuite/blocks/src/root-block/edgeless/utils/clone-utils.ts @@ -15,6 +15,7 @@ import { getTopElements, GfxBlockElementModel, type GfxModel, + type GfxPrimitiveElementModel, isGfxGroupCompatibleModel, type SerializedElement, } from '@blocksuite/block-std/gfx'; @@ -225,7 +226,7 @@ export function mapMindmapIds( } export function getElementProps( - element: BlockSuite.SurfaceModel, + element: GfxPrimitiveElementModel, ids: Map ) { if (element instanceof ConnectorElementModel) { diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-text-menu.ts b/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-text-menu.ts index f0f941a266..cbec5599c5 100644 --- a/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-text-menu.ts +++ b/blocksuite/blocks/src/root-block/widgets/element-toolbar/change-text-menu.ts @@ -29,6 +29,8 @@ import { FontWeight, resolveColor, ShapeElementModel, + type SurfaceTextModel, + type SurfaceTextModelMap, TextAlign, TextElementModel, type TextStyleProps, @@ -76,14 +78,14 @@ const TEXT_ALIGN_CHOOSE: [TextAlign, () => TemplateResult<1>][] = [ ] as const; function countByField>( - elements: BlockSuite.EdgelessTextModelType[], + elements: SurfaceTextModel[], field: K ) { return countBy(elements, element => extractField(element, field)); } function extractField>( - element: BlockSuite.EdgelessTextModelType, + element: SurfaceTextModel, field: K ) { //TODO: It's not a very good handling method. @@ -101,23 +103,23 @@ function extractField>( } function getMostCommonValue>( - elements: BlockSuite.EdgelessTextModelType[], + elements: SurfaceTextModel[], field: K ) { const values = countByField(elements, field); return maxBy(Object.entries(values), ([_k, count]) => count); } -function getMostCommonAlign(elements: BlockSuite.EdgelessTextModelType[]) { +function getMostCommonAlign(elements: SurfaceTextModel[]) { const max = getMostCommonValue(elements, 'textAlign'); return max ? (max[0] as TextAlign) : TextAlign.Left; } function getMostCommonColor( - elements: BlockSuite.EdgelessTextModelType[], + elements: SurfaceTextModel[], colorScheme: ColorScheme ): string { - const colors = countBy(elements, (ele: BlockSuite.EdgelessTextModelType) => { + const colors = countBy(elements, (ele: SurfaceTextModel) => { const color = ele instanceof ConnectorElementModel ? ele.labelStyle.color : ele.color; return resolveColor(color, colorScheme); @@ -128,28 +130,28 @@ function getMostCommonColor( : resolveColor(DefaultTheme.textColor, colorScheme); } -function getMostCommonFontFamily(elements: BlockSuite.EdgelessTextModelType[]) { +function getMostCommonFontFamily(elements: SurfaceTextModel[]) { const max = getMostCommonValue(elements, 'fontFamily'); return max ? (max[0] as FontFamily) : FontFamily.Inter; } -function getMostCommonFontSize(elements: BlockSuite.EdgelessTextModelType[]) { +function getMostCommonFontSize(elements: SurfaceTextModel[]) { const max = getMostCommonValue(elements, 'fontSize'); return max ? Number(max[0]) : FONT_SIZE_LIST[0].value; } -function getMostCommonFontStyle(elements: BlockSuite.EdgelessTextModelType[]) { +function getMostCommonFontStyle(elements: SurfaceTextModel[]) { const max = getMostCommonValue(elements, 'fontStyle'); return max ? (max[0] as FontStyle) : FontStyle.Normal; } -function getMostCommonFontWeight(elements: BlockSuite.EdgelessTextModelType[]) { +function getMostCommonFontWeight(elements: SurfaceTextModel[]) { const max = getMostCommonValue(elements, 'fontWeight'); return max ? (max[0] as FontWeight) : FontWeight.Regular; } function buildProps( - element: BlockSuite.EdgelessTextModelType, + element: SurfaceTextModel, props: { [K in keyof TextStyleProps]?: TextStyleProps[K] } ) { if (element instanceof ConnectorElementModel) { @@ -236,9 +238,7 @@ export class EdgelessChangeTextMenu extends WithDisposable(LitElement) { }); }; - private readonly _updateElementBound = ( - element: BlockSuite.EdgelessTextModelType - ) => { + private readonly _updateElementBound = (element: SurfaceTextModel) => { const elementType = this.elementType; if (elementType === 'text' && element instanceof TextElementModel) { // the change of font family will change the bound of the text @@ -506,10 +506,10 @@ export class EdgelessChangeTextMenu extends WithDisposable(LitElement) { accessor edgeless!: EdgelessRootBlockComponent; @property({ attribute: false }) - accessor elements!: BlockSuite.EdgelessTextModelType[]; + accessor elements!: SurfaceTextModel[]; @property({ attribute: false }) - accessor elementType!: BlockSuite.EdgelessTextModelKeyType; + accessor elementType!: keyof SurfaceTextModelMap; @query('edgeless-color-picker-button.text-color') accessor textColorButton!: EdgelessColorPickerButton; diff --git a/blocksuite/blocks/src/root-block/widgets/element-toolbar/index.ts b/blocksuite/blocks/src/root-block/widgets/element-toolbar/index.ts index e233feafbd..6b9961924c 100644 --- a/blocksuite/blocks/src/root-block/widgets/element-toolbar/index.ts +++ b/blocksuite/blocks/src/root-block/widgets/element-toolbar/index.ts @@ -178,7 +178,7 @@ export class EdgelessElementToolbarWidget extends WidgetComponent< return 'edgelessText'; } - return (model as BlockSuite.SurfaceElementModel).type; + return model.type; }); return result as CategorizedElements; } diff --git a/blocksuite/presets/src/__tests__/edgeless/layer.spec.ts b/blocksuite/presets/src/__tests__/edgeless/layer.spec.ts index efd0020008..d1f0f0c5b3 100644 --- a/blocksuite/presets/src/__tests__/edgeless/layer.spec.ts +++ b/blocksuite/presets/src/__tests__/edgeless/layer.spec.ts @@ -4,6 +4,7 @@ import type { EdgelessRootBlockComponent, GroupElementModel, NoteBlockModel, + SurfaceElementModel, } from '@blocksuite/blocks'; import type { BlockModel, Store } from '@blocksuite/store'; import { beforeEach, describe, expect, test } from 'vitest'; @@ -852,7 +853,7 @@ test('the actual rendering z-index should satisfy the logic order of their index }); describe('index generator', () => { - let preinsertedShape: BlockSuite.SurfaceElementModel; + let preinsertedShape: SurfaceElementModel; let preinsertedNote: NoteBlockModel; beforeEach(() => { @@ -863,7 +864,7 @@ describe('index generator', () => { preinsertedShape = service.crud.getElementById( shapeId - )! as BlockSuite.SurfaceElementModel; + )! as SurfaceElementModel; preinsertedNote = service.crud.getElementById(noteId)! as NoteBlockModel; }); diff --git a/packages/frontend/core/src/blocksuite/blocks/ai-chat-block/ai-chat-model.ts b/packages/frontend/core/src/blocksuite/blocks/ai-chat-block/ai-chat-model.ts index 34af4a01b0..150a6e5688 100644 --- a/packages/frontend/core/src/blocksuite/blocks/ai-chat-block/ai-chat-model.ts +++ b/packages/frontend/core/src/blocksuite/blocks/ai-chat-block/ai-chat-model.ts @@ -34,12 +34,3 @@ export const AIChatBlockSchema = defineBlockSchema({ }); export class AIChatBlockModel extends GfxCompatible(BlockModel) {} - -declare global { - // oxlint-disable-next-line @typescript-eslint/no-namespace - namespace BlockSuite { - interface EdgelessBlockModelMap { - 'affine:embed-ai-chat': AIChatBlockModel; - } - } -} diff --git a/packages/frontend/core/src/blocksuite/presets/ai/actions/types.ts b/packages/frontend/core/src/blocksuite/presets/ai/actions/types.ts index 2530a05119..17dfa361e6 100644 --- a/packages/frontend/core/src/blocksuite/presets/ai/actions/types.ts +++ b/packages/frontend/core/src/blocksuite/presets/ai/actions/types.ts @@ -1,5 +1,6 @@ import type { getCopilotHistoriesQuery, RequestOptions } from '@affine/graphql'; import type { EditorHost } from '@blocksuite/affine/block-std'; +import type { GfxModel } from '@blocksuite/affine/block-std/gfx'; import type { BlockModel } from '@blocksuite/affine/store'; import type { DocContext } from '../chat-panel/chat-context'; @@ -72,7 +73,7 @@ declare global { // internal context host: EditorHost; - models?: (BlockModel | BlockSuite.SurfaceElementModel)[]; + models?: (BlockModel | GfxModel)[]; control: TrackerControl; where: TrackerWhere; } diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/tracker.ts b/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/tracker.ts index 272c6ee6ad..adb0a4ae45 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/tracker.ts +++ b/packages/frontend/core/src/components/blocksuite/block-suite-editor/ai/tracker.ts @@ -1,10 +1,11 @@ import { AIProvider } from '@affine/core/blocksuite/presets/ai'; import { mixpanel, track } from '@affine/track'; import type { EditorHost } from '@blocksuite/affine/block-std'; +import type { GfxPrimitiveElementModel } from '@blocksuite/affine/block-std/gfx'; import type { BlockModel } from '@blocksuite/affine/store'; import { lowerCase, omit } from 'lodash-es'; -type ElementModel = BlockSuite.SurfaceElementModel; +type ElementModel = GfxPrimitiveElementModel; type AIActionEventName = | 'AI action invoked'