diff --git a/packages/designer/src/builtin-simulator/bem-tools/border-detecting.tsx b/packages/designer/src/builtin-simulator/bem-tools/border-detecting.tsx
index f3da9396f..e3e9089dc 100644
--- a/packages/designer/src/builtin-simulator/bem-tools/border-detecting.tsx
+++ b/packages/designer/src/builtin-simulator/bem-tools/border-detecting.tsx
@@ -77,11 +77,7 @@ export class BorderDetecting extends Component<{ host: BuiltinSimulatorHost }> {
const canHoverHook = current?.componentMeta.getMetadata()?.experimental?.callbacks?.onHoverHook;
const canHover = (canHoverHook && typeof canHoverHook === 'function') ? canHoverHook(current) : true;
- if (!canHover) {
- return null;
- }
-
- if (!current || host.viewport.scrolling || host.liveEditing.editing) {
+ if (!canHover || !current || host.viewport.scrolling || host.liveEditing.editing) {
return null;
}
const instances = host.getComponentInstances(current);
diff --git a/packages/designer/src/builtin-simulator/bem-tools/index.tsx b/packages/designer/src/builtin-simulator/bem-tools/index.tsx
index d7bfdf720..f50f6a26b 100644
--- a/packages/designer/src/builtin-simulator/bem-tools/index.tsx
+++ b/packages/designer/src/builtin-simulator/bem-tools/index.tsx
@@ -27,6 +27,12 @@ export class BemTools extends Component<{ host: BuiltinSimulatorHost }> {
+ {
+ host.designer.bemToolsManager.getAllBemTools().map(tools => {
+ const ToolsCls = tools.item;
+ return ;
+ })
+ }
);
}
diff --git a/packages/designer/src/builtin-simulator/bem-tools/manager.ts b/packages/designer/src/builtin-simulator/bem-tools/manager.ts
new file mode 100644
index 000000000..3756600ed
--- /dev/null
+++ b/packages/designer/src/builtin-simulator/bem-tools/manager.ts
@@ -0,0 +1,37 @@
+import { ComponentType } from 'react';
+import { Designer } from '../../designer';
+import { invariant } from '../../utils';
+import { BuiltinSimulatorHost } from '../../builtin-simulator/host';
+
+export type BemToolsData = {
+ name: string;
+ item: ComponentType<{ host: BuiltinSimulatorHost }>;
+};
+
+export class BemToolsManager {
+ private designer: Designer;
+
+ private toolsContainer: BemToolsData[] = [];
+
+ constructor(designer: Designer) {
+ this.designer = designer;
+ }
+
+ addBemTools(toolsData: BemToolsData) {
+ const found = this.toolsContainer.find(item => item.name === toolsData.name);
+ invariant(!found, `${toolsData.name} already exists`);
+
+ this.toolsContainer.push(toolsData);
+ }
+
+ removeBemTools(name: string) {
+ const index = this.toolsContainer.findIndex(item => item.name === name);
+ if (index !== -1) {
+ this.toolsContainer.splice(index, 1);
+ }
+ }
+
+ getAllBemTools() {
+ return this.toolsContainer;
+ }
+}
\ No newline at end of file
diff --git a/packages/designer/src/designer/designer.ts b/packages/designer/src/designer/designer.ts
index 1a9e88b93..e61b038bd 100644
--- a/packages/designer/src/designer/designer.ts
+++ b/packages/designer/src/designer/designer.ts
@@ -24,6 +24,7 @@ import { DropLocation, LocationData, isLocationChildrenDetail } from './location
import { OffsetObserver, createOffsetObserver } from './offset-observer';
import { focusing } from './focusing';
import { SettingTopEntry } from './setting';
+import { BemToolsManager } from '../builtin-simulator/bem-tools/manager';
export interface DesignerProps {
editor: IEditor;
@@ -55,6 +56,8 @@ export class Designer {
readonly editor: IEditor;
+ readonly bemToolsManager = new BemToolsManager(this);
+
get currentDocument() {
return this.project.currentDocument;
}
@@ -228,9 +231,9 @@ export class Designer {
this.editor.emit(`designer.${event}`, ...args);
}
- private _dropLocation?: DropLocation;
+ @obx.ref private _dropLocation?: DropLocation;
- get dropLocation() {
+ @computed get dropLocation() {
return this._dropLocation;
}
@@ -391,7 +394,6 @@ export class Designer {
this.refreshComponentMetasMap();
// 完成加载增量资源后发送事件,方便插件监听并处理相关逻辑
this.editor.emit('designer.incrementalAssetsReady');
-
}
/**
diff --git a/packages/engine/src/modules/designer-types.ts b/packages/engine/src/modules/designer-types.ts
index a715ea8da..a11126e79 100644
--- a/packages/engine/src/modules/designer-types.ts
+++ b/packages/engine/src/modules/designer-types.ts
@@ -5,6 +5,7 @@ export {
ILowCodePluginManager,
ILowCodePluginContext,
IDesignerCabin,
+ BuiltinSimulatorHost,
} from '@ali/lowcode-designer';
// 这样做的目的是为了去除 Node / DocumentModel 等的值属性,仅保留类型属性