diff --git a/packages/designer/src/builtin-simulator/bem-tools/borders.less b/packages/designer/src/builtin-simulator/bem-tools/borders.less
index 511bae9c2..93ed2c1db 100644
--- a/packages/designer/src/builtin-simulator/bem-tools/borders.less
+++ b/packages/designer/src/builtin-simulator/bem-tools/borders.less
@@ -45,6 +45,27 @@
}
}
+ &.lc-resize-box {
+ border-width: 0;
+ z-index: 1;
+ cursor: ew-resize;
+ pointer-events: auto;
+ align-items: center;
+ justify-content: center;
+ display: flex;
+
+ &:after {
+ content: "";
+ display: block;
+ height: calc(100% - 20px);
+ min-height: 50%;
+ width: 4px;
+ background: #738397;
+ border-radius: 2px;
+ // animation: flashing 1.5s infinite linear;
+ }
+ }
+
&&-hovering {
z-index: 1;
border-style: dashed;
diff --git a/packages/designer/src/builtin-simulator/bem-tools/box-resizing.tsx b/packages/designer/src/builtin-simulator/bem-tools/box-resizing.tsx
new file mode 100644
index 000000000..471ce326d
--- /dev/null
+++ b/packages/designer/src/builtin-simulator/bem-tools/box-resizing.tsx
@@ -0,0 +1,345 @@
+import { Component, Fragment } from 'react';
+
+// import Bus from '../../../../core/bus';
+// import DragResizeEngine from '../../../../core/dragResizeEngine';
+// import OverlayCore from '../../../../core/overlay';
+import { observer, computed, Tip } from '@ali/lowcode-editor-core';
+import classNames from 'classnames';
+import { SimulatorContext } from '../context';
+import { BuiltinSimulatorHost } from '../host';
+import { OffsetObserver } from '../../designer';
+
+@observer
+export default class BoxResizing extends Component {
+ static contextType = SimulatorContext;
+
+ get host(): BuiltinSimulatorHost {
+ return this.context;
+ }
+
+ get dragging(): boolean {
+ return this.host.designer.dragon.dragging;
+ }
+
+ @computed get selecting() {
+ const doc = this.host.document;
+ if (doc.suspensed) {
+ return null;
+ }
+ const selection = doc.selection;
+ return this.dragging ? selection.getTopNodes() : selection.getNodes();
+ }
+
+ private hoveringLine: any;
+ private hoveringCapture: any;
+ private willDetach: () => any;
+ private willUnbind: () => any;
+ private handler: any;
+ // private bus: Bus;
+
+ private outline: any;
+ private outlineRight: any;
+ private outlineLeft: any;
+
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ componentWillMount() {
+ // this.hoveringLine = OverlayCore.getHoveringLine();
+ // this.hoveringCapture = OverlayCore.getHoveringCapture();
+ // this.willDetach = this.hoveringLine.onSync(() => this.forceUpdate());
+ // this.bus = new Bus();
+ }
+
+ // componentDidMount() {
+ // // this.hoveringCapture.setBoundary(this.outline);
+ // this.willBind();
+
+ // const resize = (e: MouseEvent, direction: string, node: any, moveX: number, moveY: number) => {
+ // const proto = node.getPrototype();
+ // if (proto && proto.options && typeof proto.options.onResize === 'function') {
+ // proto.options.onResize(e, direction, node, moveX, moveY);
+ // }
+ // };
+
+ // const resizeStart = (e: MouseEvent, direction: string, node: any) => {
+ // const proto = node.getPrototype();
+ // if (proto && proto.options && typeof proto.options.onResizeStart === 'function') {
+ // proto.options.onResizeStart(e, direction, node);
+ // }
+ // };
+
+ // const resizeEnd = (e: MouseEvent, direction: string, node: any) => {
+ // const proto = node.getPrototype();
+ // if (proto && proto.options && typeof proto.options.onResizeEnd === 'function') {
+ // proto.options.onResizeEnd(e, direction, node);
+ // }
+ // };
+
+ // // DragResizeEngine.onResize(resize);
+ // // DragResizeEngine.onResizeStart(resizeStart);
+ // // DragResizeEngine.onResizeEnd(resizeEnd);
+ // }
+
+ // componentDidUpdate() {
+ // this.hoveringCapture.setBoundary(this.outline);
+ // this.willBind();
+ // }
+
+ // componentWillUnmount() {
+ // this.hoveringCapture.setBoundary(null);
+ // if (this.willDetach) {
+ // this.willDetach();
+ // }
+ // if (this.willUnbind) {
+ // this.willUnbind();
+ // }
+ // }
+
+ // willBind() {
+ // if (this.willUnbind) {
+ // this.willUnbind();
+ // }
+
+ // if (!this.outlineRight && !this.outlineLeft) {
+ // return;
+ // }
+
+ // const unBind: any[] = [];
+ // unBind
+ // .push
+ // // DragResizeEngine.from(this.outlineRight, 'e', () => {
+ // // if (!this.hoveringLine.hasOutline()) {
+ // // return null;
+ // // }
+ // // return this.hoveringLine.getCurrentNode();
+ // // }),
+ // ();
+ // unBind
+ // .push
+ // // DragResizeEngine.from(this.outlineLeft, 'w', () => {
+ // // if (!this.hoveringLine.hasOutline()) {
+ // // return null;
+ // // }
+ // // return this.hoveringLine.getCurrentNode();
+ // // }),
+ // ();
+
+ // this.willUnbind = () => {
+ // if (unBind && unBind.length > 0) {
+ // unBind.forEach((item) => {
+ // item();
+ // });
+ // }
+ // this.willUnbind = null;
+ // };
+ // }
+
+ render() {
+ const selecting = this.selecting;
+ if (!selecting || selecting.length < 1) {
+ // DIRTY FIX, recore has a bug!
+ return