@@ -75,6 +75,8 @@ import { createLoaderSignal, isSameOrigin, isSamePath, toUrl } from './utils';
7575import { startViewTransition } from './view-transition' ;
7676import transitionCss from './qwik-view-transition.css?inline' ;
7777
78+ declare const window : ClientSPAWindow ;
79+
7880/**
7981 * @deprecated Use `QWIK_ROUTER_SCROLLER` instead (will be removed in V3)
8082 * @public
@@ -254,16 +256,15 @@ export const useQwikRouter = (props?: QwikRouterProps) => {
254256 ( preventNav . $cbs$ ||= new Set ( ) ) . add ( fn$ ) ;
255257 // we need the QRLs to be synchronous if possible, for the beforeunload event
256258 fn$ . resolve ( ) ;
257- // TS thinks we're a webworker and doesn't know about beforeunload
258- ( window as any ) . addEventListener ( 'beforeunload' , preventNav . $handler$ ) ;
259+ window . addEventListener ( 'beforeunload' , preventNav . $handler$ ) ;
259260
260261 return ( ) => {
261262 if ( preventNav . $cbs$ ) {
262263 preventNav . $cbs$ . delete ( fn$ ) ;
263264 if ( ! preventNav . $cbs$ . size ) {
264265 preventNav . $cbs$ = undefined ;
265266 // unregister the event listener if no more callbacks, to make older Firefox happy
266- ( window as any ) . removeEventListener ( 'beforeunload' , preventNav . $handler$ ) ;
267+ window . removeEventListener ( 'beforeunload' , preventNav . $handler$ ! ) ;
267268 }
268269 }
269270 } ;
@@ -354,7 +355,7 @@ export const useQwikRouter = (props?: QwikRouterProps) => {
354355 restoreScroll ( type , dest , new URL ( location . href ) , scroller , getScrollHistory ( ) ) ;
355356
356357 if ( type === 'popstate' ) {
357- ( window as ClientSPAWindow ) . _qRouterScrollEnabled = true ;
358+ window . _qRouterScrollEnabled = true ;
358359 }
359360 }
360361
@@ -571,32 +572,32 @@ export const useQwikRouter = (props?: QwikRouterProps) => {
571572 }
572573 CLIENT_DATA_CACHE . clear ( ) ;
573574
574- const win = window as ClientSPAWindow ;
575- if ( ! win . _qRouterSPA ) {
575+ // See also spa-init.ts
576+ if ( ! window . _qRouterSPA ) {
576577 // only add event listener once
577- win . _qRouterSPA = true ;
578+ window . _qRouterSPA = true ;
578579 history . scrollRestoration = 'manual' ;
579580
580- win . addEventListener ( 'popstate' , ( ) => {
581+ window . addEventListener ( 'popstate' , ( ) => {
581582 // Disable scroll handler eagerly to prevent overwriting history.state.
582- win . _qRouterScrollEnabled = false ;
583- clearTimeout ( win . _qRouterScrollDebounce ) ;
583+ window . _qRouterScrollEnabled = false ;
584+ clearTimeout ( window . _qRouterScrollDebounce ) ;
584585
585586 goto ( location . href , {
586587 type : 'popstate' ,
587588 } ) ;
588589 } ) ;
589590
590- win . removeEventListener ( 'popstate' , win . _qRouterInitPopstate ! ) ;
591- win . _qRouterInitPopstate = undefined ;
591+ window . removeEventListener ( 'popstate' , window . _qRouterInitPopstate ! ) ;
592+ window . _qRouterInitPopstate = undefined ;
592593
593594 // Browsers natively will remember scroll on ALL history entries, incl. custom pushState.
594595 // Devs could push their own states that we can't control.
595596 // If a user doesn't initiate scroll after, it will not have any scrollState.
596597 // We patch these to always include scrollState.
597598 // TODO Block this after Navigation API PR, browsers that support it have a Navigation API solution.
598- if ( ! win . _qRouterHistoryPatch ) {
599- win . _qRouterHistoryPatch = true ;
599+ if ( ! window . _qRouterHistoryPatch ) {
600+ window . _qRouterHistoryPatch = true ;
600601 const pushState = history . pushState ;
601602 const replaceState = history . replaceState ;
602603
@@ -658,8 +659,8 @@ export const useQwikRouter = (props?: QwikRouterProps) => {
658659 history . pushState ( null , '' , dest ) ;
659660 }
660661
661- win . _qRouterScrollEnabled = false ;
662- clearTimeout ( win . _qRouterScrollDebounce ) ;
662+ window . _qRouterScrollEnabled = false ;
663+ clearTimeout ( window . _qRouterScrollDebounce ) ;
663664 saveScrollHistory ( {
664665 ...currentScrollState ( scroller ) ,
665666 x : 0 ,
@@ -674,8 +675,8 @@ export const useQwikRouter = (props?: QwikRouterProps) => {
674675 }
675676 } ) ;
676677
677- document . removeEventListener ( 'click' , win . _qRouterInitAnchors ! ) ;
678- win . _qRouterInitAnchors = undefined ;
678+ document . removeEventListener ( 'click' , window . _qRouterInitAnchors ! ) ;
679+ window . _qRouterInitAnchors = undefined ;
679680
680681 // TODO Remove block after Navigation API PR.
681682 // Calling `history.replaceState` during `visibilitychange` in Chromium will nuke BFCache.
@@ -686,10 +687,10 @@ export const useQwikRouter = (props?: QwikRouterProps) => {
686687 'visibilitychange' ,
687688 ( ) => {
688689 if (
689- ( win . _qRouterScrollEnabled || win . _qCityScrollEnabled ) &&
690+ ( window . _qRouterScrollEnabled || window . _qCityScrollEnabled ) &&
690691 document . visibilityState === 'hidden'
691692 ) {
692- if ( win . _qCityScrollEnabled ) {
693+ if ( window . _qCityScrollEnabled ) {
693694 console . warn (
694695 '"_qCityScrollEnabled" is deprecated. Use "_qRouterScrollEnabled" instead.'
695696 ) ;
@@ -703,39 +704,39 @@ export const useQwikRouter = (props?: QwikRouterProps) => {
703704 { passive : true }
704705 ) ;
705706
706- document . removeEventListener ( 'visibilitychange' , win . _qRouterInitVisibility ! ) ;
707- win . _qRouterInitVisibility = undefined ;
707+ document . removeEventListener ( 'visibilitychange' , window . _qRouterInitVisibility ! ) ;
708+ window . _qRouterInitVisibility = undefined ;
708709 }
709710
710- win . addEventListener (
711+ window . addEventListener (
711712 'scroll' ,
712713 ( ) => {
713714 // TODO: remove "_qCityScrollEnabled" condition in v3
714- if ( ! win . _qRouterScrollEnabled && ! win . _qCityScrollEnabled ) {
715+ if ( ! window . _qRouterScrollEnabled && ! window . _qCityScrollEnabled ) {
715716 return ;
716717 }
717718
718- clearTimeout ( win . _qRouterScrollDebounce ) ;
719- win . _qRouterScrollDebounce = setTimeout ( ( ) => {
719+ clearTimeout ( window . _qRouterScrollDebounce ) ;
720+ window . _qRouterScrollDebounce = setTimeout ( ( ) => {
720721 const scrollState = currentScrollState ( scroller ) ;
721722 saveScrollHistory ( scrollState ) ;
722723 // Needed for e2e debounceDetector.
723- win . _qRouterScrollDebounce = undefined ;
724+ window . _qRouterScrollDebounce = undefined ;
724725 } , 200 ) ;
725726 } ,
726727 { passive : true }
727728 ) ;
728729
729- removeEventListener ( 'scroll' , win . _qRouterInitScroll ! ) ;
730- win . _qRouterInitScroll = undefined ;
730+ removeEventListener ( 'scroll' , window . _qRouterInitScroll ! ) ;
731+ window . _qRouterInitScroll = undefined ;
731732
732733 // Cache SPA recovery script.
733734 spaInit . resolve ( ) ;
734735 }
735736
736737 if ( navType !== 'popstate' ) {
737- win . _qRouterScrollEnabled = false ;
738- clearTimeout ( win . _qRouterScrollDebounce ) ;
738+ window . _qRouterScrollEnabled = false ;
739+ clearTimeout ( window . _qRouterScrollDebounce ) ;
739740
740741 // Save the final scroll state before pushing new state.
741742 // Upgrades/replaces state with scroll pos on nav as needed.
@@ -768,7 +769,7 @@ export const useQwikRouter = (props?: QwikRouterProps) => {
768769 container . setAttribute ( Q_ROUTE , routeName ) ;
769770 const scrollState = currentScrollState ( scroller ) ;
770771 saveScrollHistory ( scrollState ) ;
771- win . _qRouterScrollEnabled = true ;
772+ window . _qRouterScrollEnabled = true ;
772773 if ( isBrowser ) {
773774 callRestoreScrollOnDocument ( ) ;
774775 }
0 commit comments