@@ -30,6 +30,17 @@ export class UUIPopoverContainerElement extends LitElement {
30
30
@property ( { type : Number } )
31
31
margin = 0 ;
32
32
33
+ /**
34
+ * Read-only attribute to check if the popover is open
35
+ * @type {boolean }
36
+ * @attr open
37
+ * @default false
38
+ */
39
+ @property ( { type : Boolean } )
40
+ get open ( ) {
41
+ return this . _open ;
42
+ }
43
+
33
44
/**
34
45
* Define the placement of the popover container.
35
46
* @attr placement
@@ -48,6 +59,9 @@ export class UUIPopoverContainerElement extends LitElement {
48
59
@state ( )
49
60
_placement : PopoverContainerPlacement = 'bottom-start' ;
50
61
62
+ @state ( )
63
+ _open : boolean = false ;
64
+
51
65
@state ( )
52
66
_actualPlacement : PopoverContainerPlacement = this . _placement ;
53
67
@@ -74,6 +88,8 @@ export class UUIPopoverContainerElement extends LitElement {
74
88
}
75
89
76
90
#onBeforeToggle = async ( event : any ) => {
91
+ this . _open = event . newState === 'open' ;
92
+
77
93
this . #targetElement = this . #findAncestorWithAttribute(
78
94
this ,
79
95
'popovertarget' ,
@@ -93,7 +109,7 @@ export class UUIPopoverContainerElement extends LitElement {
93
109
} )
94
110
) ;
95
111
96
- if ( event . newState !== 'open' ) {
112
+ if ( ! this . _open ) {
97
113
document . removeEventListener ( 'scroll' , this . #initUpdate) ;
98
114
return ;
99
115
}
@@ -106,8 +122,11 @@ export class UUIPopoverContainerElement extends LitElement {
106
122
} ;
107
123
108
124
#initUpdate = ( ) => {
125
+ if ( ! this . _open ) return ;
126
+
109
127
this . _actualPlacement = this . _placement ;
110
128
this . style . opacity = '0' ;
129
+
111
130
// 3 iterations makes the popover flip back to the initial position if theres no space for it on either side.
112
131
this . #updatePosition( 3 ) ;
113
132
} ;
0 commit comments