feat(editor): connector gfx extension (#11940)

Closes: BS-3207
This commit is contained in:
Saul-Mirone
2025-04-24 01:27:28 +00:00
parent 9c0633b75c
commit 0cd7111f20
19 changed files with 67 additions and 28 deletions
+3 -1
View File
@@ -185,7 +185,9 @@
"./gfx/mindmap": "./src/gfx/mindmap/index.ts",
"./gfx/mindmap/store": "./src/gfx/mindmap/store.ts",
"./gfx/mindmap/view": "./src/gfx/mindmap/view.ts",
"./gfx/connector": "./src/gfx/connector.ts",
"./gfx/connector": "./src/gfx/connector/index.ts",
"./gfx/connector/store": "./src/gfx/connector/store.ts",
"./gfx/connector/view": "./src/gfx/connector/view.ts",
"./gfx/group": "./src/gfx/group.ts",
"./gfx/template": "./src/gfx/template/index.ts",
"./gfx/template/view": "./src/gfx/template/view.ts",
@@ -11,18 +11,10 @@ import {
PageSurfaceBlockSpec,
SurfaceBlockAdapterExtensions,
} from '@blocksuite/affine-block-surface';
import {
connectorToMarkdownAdapterMatcher,
connectorToPlainTextAdapterMatcher,
} from '@blocksuite/affine-gfx-connector';
import {
groupToMarkdownAdapterMatcher,
groupToPlainTextAdapterMatcher,
} from '@blocksuite/affine-gfx-group';
import {
mindmapToMarkdownAdapterMatcher,
mindmapToPlainTextAdapterMatcher,
} from '@blocksuite/affine-gfx-mindmap';
import {
textToMarkdownAdapterMatcher,
textToPlainTextAdapterMatcher,
@@ -38,16 +30,12 @@ import type { ExtensionType } from '@blocksuite/store';
const elementToPlainTextAdapterMatchers = [
groupToPlainTextAdapterMatcher,
connectorToPlainTextAdapterMatcher,
textToPlainTextAdapterMatcher,
mindmapToPlainTextAdapterMatcher,
];
const elementToMarkdownAdapterMatchers = [
groupToMarkdownAdapterMatcher,
connectorToMarkdownAdapterMatcher,
textToMarkdownAdapterMatcher,
mindmapToMarkdownAdapterMatcher,
];
const CommonBlockSpecs: ExtensionType[] = [
@@ -16,6 +16,7 @@ import { ParagraphStoreExtension } from '@blocksuite/affine-block-paragraph/stor
import { SurfaceRefStoreExtension } from '@blocksuite/affine-block-surface-ref/store';
import { TableStoreExtension } from '@blocksuite/affine-block-table/store';
import { BrushStoreExtension } from '@blocksuite/affine-gfx-brush/store';
import { ConnectorStoreExtension } from '@blocksuite/affine-gfx-connector/store';
import { MindmapStoreExtension } from '@blocksuite/affine-gfx-mindmap/store';
import { ShapeStoreExtension } from '@blocksuite/affine-gfx-shape/store';
import { FootnoteStoreExtension } from '@blocksuite/affine-inline-footnote/store';
@@ -55,6 +56,7 @@ export function getInternalStoreExtensions() {
BrushStoreExtension,
ShapeStoreExtension,
MindmapStoreExtension,
ConnectorStoreExtension,
MigratingStoreExtension,
];
@@ -16,6 +16,7 @@ import { ParagraphViewExtension } from '@blocksuite/affine-block-paragraph/view'
import { SurfaceRefViewExtension } from '@blocksuite/affine-block-surface-ref/view';
import { TableViewExtension } from '@blocksuite/affine-block-table/view';
import { BrushViewExtension } from '@blocksuite/affine-gfx-brush/view';
import { ConnectorViewExtension } from '@blocksuite/affine-gfx-connector/view';
import { MindmapViewExtension } from '@blocksuite/affine-gfx-mindmap/view';
import { NoteViewExtension as GfxNoteViewExtension } from '@blocksuite/affine-gfx-note/view';
import { ShapeViewExtension } from '@blocksuite/affine-gfx-shape/view';
@@ -35,6 +36,7 @@ export function getInternalViewExtensions() {
BrushViewExtension,
ShapeViewExtension,
MindmapViewExtension,
ConnectorViewExtension,
TemplateViewExtension,
// Block
@@ -0,0 +1 @@
export * from '@blocksuite/affine-gfx-connector/store';
@@ -0,0 +1 @@
export * from '@blocksuite/affine-gfx-connector/view';
@@ -1,4 +1,3 @@
import { connectorQuickTool } from '@blocksuite/affine-gfx-connector';
import { QuickToolExtension } from '@blocksuite/affine-widget-edgeless-toolbar';
import { html } from 'lit';
@@ -23,4 +22,4 @@ const linkQuickTool = QuickToolExtension('link', ({ block, gfx }) => {
};
});
export const quickTools = [defaultQuickTool, connectorQuickTool, linkQuickTool];
export const quickTools = [defaultQuickTool, linkQuickTool];
@@ -1,4 +1,3 @@
import { connectorToolbarExtension } from '@blocksuite/affine-gfx-connector';
import { groupToolbarExtension } from '@blocksuite/affine-gfx-group';
import { textToolbarExtension } from '@blocksuite/affine-gfx-text';
import { ToolbarModuleExtension } from '@blocksuite/affine-shared/services';
@@ -10,8 +9,6 @@ import { builtinLockedToolbarConfig, builtinMiscToolbarConfig } from './misc';
export const EdgelessElementToolbarExtension: ExtensionType[] = [
groupToolbarExtension,
connectorToolbarExtension,
textToolbarExtension,
ToolbarModuleExtension({
@@ -1,9 +1,5 @@
import { ConnectionOverlay } from '@blocksuite/affine-block-surface';
import type * as BrushEffect from '@blocksuite/affine-gfx-brush';
import {
ConnectorFilter,
ConnectorTool,
} from '@blocksuite/affine-gfx-connector';
import type * as NoteEffect from '@blocksuite/affine-gfx-note';
import type * as ShapeEffect from '@blocksuite/affine-gfx-shape';
import { TextTool } from '@blocksuite/affine-gfx-text';
@@ -30,13 +26,11 @@ export const EdgelessToolExtension: ExtensionType[] = [
DefaultTool,
PanTool,
TextTool,
ConnectorTool,
EmptyTool,
];
export const EdgelessEditExtensions: ExtensionType[] = [
InteractivityManager,
ConnectorFilter,
SnapExtension,
DblClickAddEdgelessText,
];
@@ -1,4 +1,3 @@
import { effects as gfxConnectorEffects } from '@blocksuite/affine-gfx-connector/effects';
import { effects as gfxGroupEffects } from '@blocksuite/affine-gfx-group/effects';
import { effects as gfxCanvasTextEffects } from '@blocksuite/affine-gfx-text/effects';
import { effects as widgetEdgelessToolbarEffects } from '@blocksuite/affine-widget-edgeless-toolbar/effects';
@@ -74,7 +73,6 @@ function registerRootComponents() {
function registerGfxEffects() {
gfxCanvasTextEffects();
gfxConnectorEffects();
gfxGroupEffects();
}
@@ -850,6 +850,7 @@ function renderRect(
ctx.restore();
}
// TODO(@mirone): move to connector package
export class ConnectionOverlay extends Overlay {
static override overlayName = 'connection';
+4 -1
View File
@@ -12,6 +12,7 @@
"dependencies": {
"@blocksuite/affine-block-surface": "workspace:*",
"@blocksuite/affine-components": "workspace:*",
"@blocksuite/affine-ext-loader": "workspace:*",
"@blocksuite/affine-gfx-text": "workspace:*",
"@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-rich-text": "workspace:*",
@@ -34,7 +35,9 @@
},
"exports": {
".": "./src/index.ts",
"./effects": "./src/effects.ts"
"./effects": "./src/effects.ts",
"./view": "./src/view.ts",
"./store": "./src/store.ts"
},
"files": [
"src",
+1 -1
View File
@@ -5,4 +5,4 @@ export * from './element-transform';
export * from './text';
export * from './toolbar/config';
export * from './toolbar/quick-tool';
export * from './view';
export * from './view/index';
@@ -0,0 +1,19 @@
import {
type StoreExtensionContext,
StoreExtensionProvider,
} from '@blocksuite/affine-ext-loader';
import {
connectorToMarkdownAdapterMatcher,
connectorToPlainTextAdapterMatcher,
} from './adapter';
export class ConnectorStoreExtension extends StoreExtensionProvider {
override name = 'affine-connector-gfx';
override setup(context: StoreExtensionContext) {
super.setup(context);
context.register(connectorToPlainTextAdapterMatcher);
context.register(connectorToMarkdownAdapterMatcher);
}
}
@@ -0,0 +1,29 @@
import {
type ViewExtensionContext,
ViewExtensionProvider,
} from '@blocksuite/affine-ext-loader';
import { ConnectorTool } from './connector-tool';
import { effects } from './effects';
import { ConnectorFilter } from './element-transform';
import { connectorToolbarExtension } from './toolbar/config';
import { connectorQuickTool } from './toolbar/quick-tool';
export class ConnectorViewExtension extends ViewExtensionProvider {
override name = 'affine-connector-gfx';
override effect(): void {
super.effect();
effects();
}
override setup(context: ViewExtensionContext) {
super.setup(context);
if (this.isEdgeless(context.scope)) {
context.register(ConnectorTool);
context.register(ConnectorFilter);
context.register(connectorQuickTool);
context.register(connectorToolbarExtension);
}
}
}
@@ -9,6 +9,7 @@
"references": [
{ "path": "../../blocks/surface" },
{ "path": "../../components" },
{ "path": "../../ext-loader" },
{ "path": "../text" },
{ "path": "../../model" },
{ "path": "../../rich-text" },
+1
View File
@@ -513,6 +513,7 @@ export const PackageList = [
workspaceDependencies: [
'blocksuite/affine/blocks/surface',
'blocksuite/affine/components',
'blocksuite/affine/ext-loader',
'blocksuite/affine/gfx/text',
'blocksuite/affine/model',
'blocksuite/affine/rich-text',
+1
View File
@@ -3130,6 +3130,7 @@ __metadata:
dependencies:
"@blocksuite/affine-block-surface": "workspace:*"
"@blocksuite/affine-components": "workspace:*"
"@blocksuite/affine-ext-loader": "workspace:*"
"@blocksuite/affine-gfx-text": "workspace:*"
"@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-rich-text": "workspace:*"