@@ -7,6 +7,9 @@ import { DDResizableHandle } from './dd-resizable-handle';
7
7
import { DDBaseImplement , HTMLElementExtendOpt } from './dd-base-impl' ;
8
8
import { Utils } from './utils' ;
9
9
import { DDUIData , Rect , Size } from './types' ;
10
+ import { DDManager } from './dd-manager' ;
11
+
12
+ // import { GridItemHTMLElement } from './types'; let count = 0; // TEST
10
13
11
14
// TODO: merge with DDDragOpt
12
15
export interface DDResizableOpt {
@@ -72,12 +75,14 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt
72
75
super . enable ( ) ;
73
76
this . el . classList . add ( 'ui-resizable' ) ;
74
77
this . el . classList . remove ( 'ui-resizable-disabled' ) ;
78
+ this . _setupAutoHide ( this . option . autoHide ) ;
75
79
}
76
80
77
81
public disable ( ) : void {
78
82
super . disable ( ) ;
79
83
this . el . classList . add ( 'ui-resizable-disabled' ) ;
80
84
this . el . classList . remove ( 'ui-resizable' ) ;
85
+ this . _setupAutoHide ( false ) ;
81
86
}
82
87
83
88
public destroy ( ) : void {
@@ -106,7 +111,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt
106
111
protected _setupAutoHide ( auto : boolean ) : DDResizable {
107
112
if ( auto ) {
108
113
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
110
115
this . el . addEventListener ( 'mouseover' , this . _mouseOver ) ;
111
116
this . el . addEventListener ( 'mouseout' , this . _mouseOut ) ;
112
117
} else {
@@ -119,14 +124,21 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt
119
124
120
125
/** @internal */
121
126
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}`)
122
132
this . el . classList . remove ( 'ui-resizable-autohide' ) ;
123
- e . stopPropagation ( ) ;
124
133
}
125
134
126
135
/** @internal */
127
136
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}`)
128
141
this . el . classList . add ( 'ui-resizable-autohide' ) ;
129
- e . stopPropagation ( ) ;
130
142
}
131
143
132
144
/** @internal */
0 commit comments