@@ -7,6 +7,9 @@ import { DDResizableHandle } from './dd-resizable-handle';
77import { DDBaseImplement , HTMLElementExtendOpt } from './dd-base-impl' ;
88import { Utils } from './utils' ;
99import { DDUIData , Rect , Size } from './types' ;
10+ import { DDManager } from './dd-manager' ;
11+
12+ // import { GridItemHTMLElement } from './types'; let count = 0; // TEST
1013
1114// TODO: merge with DDDragOpt
1215export interface DDResizableOpt {
@@ -72,12 +75,14 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt
7275 super . enable ( ) ;
7376 this . el . classList . add ( 'ui-resizable' ) ;
7477 this . el . classList . remove ( 'ui-resizable-disabled' ) ;
78+ this . _setupAutoHide ( this . option . autoHide ) ;
7579 }
7680
7781 public disable ( ) : void {
7882 super . disable ( ) ;
7983 this . el . classList . add ( 'ui-resizable-disabled' ) ;
8084 this . el . classList . remove ( 'ui-resizable' ) ;
85+ this . _setupAutoHide ( false ) ;
8186 }
8287
8388 public destroy ( ) : void {
@@ -106,7 +111,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt
106111 protected _setupAutoHide ( auto : boolean ) : DDResizable {
107112 if ( auto ) {
108113 this . el . classList . add ( 'ui-resizable-autohide' ) ;
109- // use mouseover/mouseout instead of mouseenter/mouseleave to get better performance;
114+ // use mouseover and not mouseenter to get better performance and track for nested cases
110115 this . el . addEventListener ( 'mouseover' , this . _mouseOver ) ;
111116 this . el . addEventListener ( 'mouseout' , this . _mouseOut ) ;
112117 } else {
@@ -119,14 +124,21 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt
119124
120125 /** @internal */
121126 protected _mouseOver ( e : Event ) {
127+ // console.log(`${count++} pre-enter ${(this.el as GridItemHTMLElement).gridstackNode._id}`)
128+ // already over a child, ignore. Ideally we just call e.stopPropagation() but see https://github.com/gridstack/gridstack.js/issues/2018
129+ if ( DDManager . overResizeElement || DDManager . dragElement ) return ;
130+ DDManager . overResizeElement = this ;
131+ // console.log(`${count++} enter ${(this.el as GridItemHTMLElement).gridstackNode._id}`)
122132 this . el . classList . remove ( 'ui-resizable-autohide' ) ;
123- e . stopPropagation ( ) ;
124133 }
125134
126135 /** @internal */
127136 protected _mouseOut ( e : Event ) {
137+ // console.log(`${count++} pre-leave ${(this.el as GridItemHTMLElement).gridstackNode._id}`)
138+ if ( DDManager . overResizeElement !== this ) return ;
139+ delete DDManager . overResizeElement ;
140+ // console.log(`${count++} leave ${(this.el as GridItemHTMLElement).gridstackNode._id}`)
128141 this . el . classList . add ( 'ui-resizable-autohide' ) ;
129- e . stopPropagation ( ) ;
130142 }
131143
132144 /** @internal */
0 commit comments