@@ -6,14 +6,14 @@ const ready = new Promise<void>(resolve => {
66 if ( document . readyState !== 'loading' ) {
77 resolve ( )
88 } else {
9- document . addEventListener ( 'readystatechange' , ( ) => resolve ( ) , { once : true } )
9+ document . addEventListener ( 'readystatechange' , ( ) => resolve ( ) , { once : true } )
1010 }
1111} )
1212
1313const firstInteraction = new Promise < void > ( resolve => {
1414 const controller = new AbortController ( )
1515 controller . signal . addEventListener ( 'abort' , ( ) => resolve ( ) )
16- const listenerOptions = { once : true , passive : true , signal : controller . signal }
16+ const listenerOptions = { once : true , passive : true , signal : controller . signal }
1717 const handler = ( ) => controller . abort ( )
1818
1919 document . addEventListener ( 'mousedown' , handler , listenerOptions )
@@ -65,11 +65,12 @@ function scan(element: ElementLike) {
6565 if ( scanTimer != null ) return
6666 scanTimer = requestAnimationFrame ( ( ) => {
6767 scanTimer = null
68+ const elements = new Set ( pendingElements )
69+ pendingElements . clear ( )
6870 if ( ! dynamicElements . size ) {
69- pendingElements . clear ( )
7071 return
7172 }
72- for ( const el of pendingElements ) {
73+ outer: for ( const el of elements ) {
7374 for ( const tagName of dynamicElements . keys ( ) ) {
7475 const child : Element | null = el instanceof Element && el . matches ( tagName ) ? el : el . querySelector ( tagName )
7576 if ( customElements . get ( tagName ) || child ) {
@@ -78,10 +79,10 @@ function scan(element: ElementLike) {
7879 // eslint-disable-next-line github/no-then
7980 for ( const cb of dynamicElements . get ( tagName ) || [ ] ) strategy ( tagName ) . then ( cb )
8081 dynamicElements . delete ( tagName )
82+ if ( ! dynamicElements . size ) break outer
8183 }
8284 }
8385 }
84- pendingElements . clear ( )
8586 } )
8687}
8788
@@ -91,7 +92,7 @@ export function lazyDefine(object: Record<string, () => void>): void
9192export function lazyDefine ( tagName : string , callback : ( ) => void ) : void
9293export function lazyDefine ( tagNameOrObj : string | Record < string , ( ) => void > , singleCallback ?: ( ) => void ) {
9394 if ( typeof tagNameOrObj === 'string' && singleCallback ) {
94- tagNameOrObj = { [ tagNameOrObj ] : singleCallback }
95+ tagNameOrObj = { [ tagNameOrObj ] : singleCallback }
9596 }
9697 for ( const [ tagName , callback ] of Object . entries ( tagNameOrObj ) ) {
9798 if ( ! dynamicElements . has ( tagName ) ) dynamicElements . set ( tagName , new Set < ( ) => void > ( ) )
@@ -112,5 +113,5 @@ export function observe(target: ElementLike): void {
112113
113114 scan ( target )
114115
115- elementLoader . observe ( target , { subtree : true , childList : true } )
116+ elementLoader . observe ( target , { subtree : true , childList : true } )
116117}
0 commit comments