@@ -24,11 +24,16 @@ export interface UseFocusTrap {
24
24
overrideFocusTrapEl : ( el : HTMLElement ) => void ;
25
25
26
26
/**
27
- * Updates focusable elements within the trap.
27
+ * Sets the extra containers to be used in the focus trap.
28
28
*
29
29
* @see https://github.com/focus-trap/focus-trap#trapupdatecontainerelements
30
30
*/
31
- updateContainerElements : ( extraContainers ?: FocusTrapOptions [ "extraContainers" ] ) => void ;
31
+ setExtraContainers : ( extraContainers ?: FocusTrapOptions [ "extraContainers" ] ) => void ;
32
+
33
+ /**
34
+ * Updates focusable elements within the trap.
35
+ */
36
+ updateContainerElements : ( ) => void ;
32
37
}
33
38
34
39
interface UseFocusTrapOptions < T extends LitElement = LitElement > {
@@ -100,6 +105,7 @@ export const useFocusTrap = <T extends FocusTrapComponent>(
100
105
return makeGenericController < UseFocusTrap , T > ( ( component , controller ) => {
101
106
let focusTrap : FocusTrap ;
102
107
let focusTrapEl : HTMLElement ;
108
+ let effectiveContainers : FocusTrapOptions [ "extraContainers" ] ;
103
109
const internalFocusTrapOptions = options . focusTrapOptions ;
104
110
105
111
controller . onConnected ( ( ) => {
@@ -123,11 +129,9 @@ export const useFocusTrap = <T extends FocusTrapComponent>(
123
129
...internalFocusTrapOptions ,
124
130
...component . focusTrapOptions ,
125
131
} ;
132
+ effectiveContainers ||= getEffectiveContainerElements ( targetEl , component ) ;
126
133
127
- focusTrap = createFocusTrap (
128
- getEffectiveContainerElements ( targetEl , component ) ,
129
- createFocusTrapOptions ( targetEl , effectiveFocusTrapOptions ) ,
130
- ) ;
134
+ focusTrap = createFocusTrap ( effectiveContainers , createFocusTrapOptions ( targetEl , effectiveFocusTrapOptions ) ) ;
131
135
}
132
136
133
137
if (
@@ -146,9 +150,12 @@ export const useFocusTrap = <T extends FocusTrapComponent>(
146
150
147
151
focusTrapEl = el ;
148
152
} ,
149
- updateContainerElements : ( extraContainers ?: FocusTrapOptions [ "extraContainers" ] ) => {
153
+ setExtraContainers : ( extraContainers ?: FocusTrapOptions [ "extraContainers" ] ) => {
150
154
const targetEl = focusTrapEl || component . el ;
151
- return focusTrap ?. updateContainerElements ( getEffectiveContainerElements ( targetEl , component , extraContainers ) ) ;
155
+ effectiveContainers = getEffectiveContainerElements ( targetEl , component , extraContainers ) ;
156
+ } ,
157
+ updateContainerElements : ( ) => {
158
+ return focusTrap ?. updateContainerElements ( effectiveContainers ) ;
152
159
} ,
153
160
} ;
154
161
} ) ;
0 commit comments