feat(editor) shape gfx extension (#11928)

Closes: BS-3211
This commit is contained in:
Saul-Mirone
2025-04-23 15:46:23 +00:00
parent 61121ab727
commit bc0530a708
20 changed files with 104 additions and 60 deletions

View File

@@ -0,0 +1,28 @@
import { ShapeElementModel } from '@blocksuite/affine-model';
import { GfxElementModelView } from '@blocksuite/std/gfx';
import { mountShapeTextEditor } from './text/edgeless-shape-text-editor';
export class ShapeElementView extends GfxElementModelView<ShapeElementModel> {
static override type: string = 'shape';
override onCreated(): void {
super.onCreated();
this._initDblClickToEdit();
}
private _initDblClickToEdit(): void {
this.on('dblclick', () => {
const edgeless = this.std.view.getBlock(this.std.store.root!.id);
if (
edgeless &&
!this.model.isLocked() &&
this.model instanceof ShapeElementModel
) {
mountShapeTextEditor(this.model, edgeless);
}
});
}
}

View File

@@ -2,8 +2,8 @@ export * from './adapter';
export * from './consts';
export * from './draggable';
export * from './element-renderer';
export * from './element-view';
export * from './overlay';
export * from './shape-tool';
export * from './text';
export * from './toolbar';
export * from './view';

View File

@@ -0,0 +1,19 @@
import {
type StoreExtensionContext,
StoreExtensionProvider,
} from '@blocksuite/affine-ext-loader';
import {
shapeToMarkdownAdapterMatcher,
shapeToPlainTextAdapterMatcher,
} from './adapter';
export class ShapeStoreExtension extends StoreExtensionProvider {
override name = 'affine-shape-gfx';
override setup(context: StoreExtensionContext) {
super.setup(context);
context.register(shapeToMarkdownAdapterMatcher);
context.register(shapeToPlainTextAdapterMatcher);
}
}

View File

@@ -1,28 +1,31 @@
import { ShapeElementModel } from '@blocksuite/affine-model';
import { GfxElementModelView } from '@blocksuite/std/gfx';
import {
type ViewExtensionContext,
ViewExtensionProvider,
} from '@blocksuite/affine-ext-loader';
import { mountShapeTextEditor } from './text/edgeless-shape-text-editor';
import { effects } from './effects';
import {
HighlighterElementRendererExtension,
ShapeElementRendererExtension,
} from './element-renderer';
import { ShapeElementView } from './element-view';
import { ShapeTool } from './shape-tool';
import { shapeSeniorTool } from './toolbar';
export class ShapeElementView extends GfxElementModelView<ShapeElementModel> {
static override type: string = 'shape';
export class ShapeViewExtension extends ViewExtensionProvider {
override name = 'affine-shape-gfx';
override onCreated(): void {
super.onCreated();
this._initDblClickToEdit();
override effect(): void {
super.effect();
effects();
}
private _initDblClickToEdit(): void {
this.on('dblclick', () => {
const edgeless = this.std.view.getBlock(this.std.store.root!.id);
if (
edgeless &&
!this.model.isLocked() &&
this.model instanceof ShapeElementModel
) {
mountShapeTextEditor(this.model, edgeless);
}
});
override setup(context: ViewExtensionContext) {
super.setup(context);
context.register(HighlighterElementRendererExtension);
context.register(ShapeElementRendererExtension);
context.register(ShapeElementView);
context.register(ShapeTool);
context.register(shapeSeniorTool);
}
}