Instantly share code, notes, and snippets.
Last active
September 23, 2022 20:22
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save JeanMeche/108ce377105b07146bc1887950f04e46 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Improved version of https://github.com/WICG/navigation-api/blob/main/navigation_api.d.ts | |
interface NavigationEventMap { | |
navigate: NavigateEvent; | |
navigatesuccess: Event; | |
navigateerror: ErrorEvent; | |
currententrychange: NavigationCurrentEntryChangeEvent; | |
} | |
interface NavigationResult { | |
committed: Promise<NavigationHistoryEntry>; | |
finished: Promise<NavigationHistoryEntry>; | |
} | |
declare class Navigation extends EventTarget { | |
entries(): NavigationHistoryEntry[]; | |
readonly currentEntry: NavigationHistoryEntry | null; | |
updateCurrentEntry(options: NavigationUpdateCurrentEntryOptions): void; | |
readonly transition: NavigationTransition | null; | |
readonly canGoBack: boolean; | |
readonly canGoForward: boolean; | |
navigate(url: string, options?: NavigationNavigateOptions): NavigationResult; | |
reload(options?: NavigationReloadOptions): NavigationResult; | |
traverseTo(key: string, options?: NavigationOptions): NavigationResult; | |
back(options?: NavigationOptions): NavigationResult; | |
forward(options?: NavigationOptions): NavigationResult; | |
onnavigate: ((this: Navigation, ev: NavigateEvent) => any) | null; | |
onnavigatesuccess: ((this: Navigation, ev: Event) => any) | null; | |
onnavigateerror: ((this: Navigation, ev: ErrorEvent) => any) | null; | |
oncurrententrychange: ((this: Navigation, ev: NavigationCurrentEntryChangeEvent) => any) | null; | |
addEventListener<K extends keyof NavigationEventMap>( | |
type: K, | |
listener: (this: Navigation, ev: NavigationEventMap[K]) => any, | |
options?: boolean | AddEventListenerOptions | |
): void; | |
addEventListener( | |
type: string, | |
listener: EventListenerOrEventListenerObject, | |
options?: boolean | AddEventListenerOptions | |
): void; | |
removeEventListener<K extends keyof NavigationEventMap>( | |
type: K, | |
listener: (this: Navigation, ev: NavigationEventMap[K]) => any, | |
options?: boolean | EventListenerOptions | |
): void; | |
removeEventListener( | |
type: string, | |
listener: EventListenerOrEventListenerObject, | |
options?: boolean | EventListenerOptions | |
): void; | |
} | |
declare class NavigationTransition { | |
readonly navigationType: NavigationType; | |
readonly from: NavigationHistoryEntry; | |
readonly finished: Promise<void>; | |
} | |
interface NavigationHistoryEntryEventMap { | |
dispose: Event; | |
} | |
declare class NavigationHistoryEntry extends EventTarget { | |
readonly key: string; | |
readonly id: string; | |
readonly url: string | null; | |
readonly index: number; | |
readonly sameDocument: boolean; | |
getState(): unknown; | |
ondispose: ((this: NavigationHistoryEntry, ev: Event) => any) | null; | |
addEventListener<K extends keyof NavigationHistoryEntryEventMap>( | |
type: K, | |
listener: (this: NavigationHistoryEntry, ev: NavigationHistoryEntryEventMap[K]) => any, | |
options?: boolean | AddEventListenerOptions | |
): void; | |
addEventListener( | |
type: string, | |
listener: EventListenerOrEventListenerObject, | |
options?: boolean | AddEventListenerOptions | |
): void; | |
removeEventListener<K extends keyof NavigationHistoryEntryEventMap>( | |
type: K, | |
listener: (this: NavigationHistoryEntry, ev: NavigationHistoryEntryEventMap[K]) => any, | |
options?: boolean | EventListenerOptions | |
): void; | |
removeEventListener( | |
type: string, | |
listener: EventListenerOrEventListenerObject, | |
options?: boolean | EventListenerOptions | |
): void; | |
} | |
type NavigationType = 'reload' | 'push' | 'replace' | 'traverse'; | |
interface NavigationUpdateCurrentEntryOptions { | |
state: unknown; | |
} | |
interface NavigationOptions { | |
info?: unknown; | |
} | |
interface NavigationNavigateOptions extends NavigationOptions { | |
state?: unknown; | |
history?: 'auto' | 'push' | 'replace'; | |
} | |
interface NavigationReloadOptions extends NavigationOptions { | |
state?: unknown; | |
} | |
declare class NavigationCurrentEntryChangeEvent extends Event { | |
constructor(type: string, eventInit?: NavigationCurrentEntryChangeEventInit); | |
readonly navigationType: NavigationType | null; | |
readonly from: NavigationHistoryEntry; | |
} | |
interface NavigationCurrentEntryChangeEventInit extends EventInit { | |
navigationType?: NavigationType | null; | |
from: NavigationHistoryEntry; | |
} | |
declare class NavigateEvent extends Event { | |
constructor(type: string, eventInit?: NavigateEventInit); | |
readonly navigationType: NavigationType; | |
readonly canIntercept: boolean; | |
readonly userInitiated: boolean; | |
readonly hashChange: boolean; | |
readonly destination: NavigationDestination; | |
readonly signal: AbortSignal; | |
readonly formData: FormData | null; | |
readonly downloadRequest: string | null; | |
readonly info: unknown; | |
intercept(options?: NavigationInterceptOptions): void; | |
scroll(): void; | |
} | |
interface NavigateEventInit extends EventInit { | |
navigationType?: NavigationType; | |
canIntercept?: boolean; | |
userInitiated?: boolean; | |
hashChange?: boolean; | |
destination: NavigationDestination; | |
signal: AbortSignal; | |
formData?: FormData | null; | |
downloadRequest?: string | null; | |
info?: unknown; | |
} | |
interface NavigationInterceptOptions { | |
handler?: () => Promise<undefined>; | |
focusReset?: 'after-transition' | 'manual'; | |
scroll?: 'after-transition' | 'manual'; | |
} | |
declare class NavigationDestination { | |
readonly url: string; | |
readonly key: string | null; | |
readonly id: string | null; | |
readonly index: number; | |
readonly sameDocument: boolean; | |
getState(): unknown; | |
} | |
export {}; | |
declare global { | |
const navigation: Navigation; | |
interface Window { | |
readonly navigation: Navigation; | |
} | |
interface Document { | |
createDocumentTransition(): DocumentTransition; | |
} | |
interface DocumentTransition { | |
abandon(): Promise<void>; | |
start(f: Function): Promise<void>; | |
} | |
} | |
export interface NavigationEvent extends NavigateEvent { | |
isTrusted: boolean; | |
navigationType: any; | |
currentTarget: Navigation; | |
srcElement: Navigation; | |
target: Navigation; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment