UNPKG

vasille-router

Version:

The first Developer eXperience Orientated front-end framework (router library).

40 lines (39 loc) 2.66 kB
import { App, Fragment, Reference } from "vasille"; import { TagOptions } from "vasille/web-runner"; import { Router as AbstractRouter, RouteRenderScope, RouterInitialization } from "../router.js"; import { QueryParams, Answer, ScreenProps, RouteParameters } from "../types.js"; export interface WebRouterInitialization<Routes extends string> extends RouterInitialization<Node, Element, TagOptions, Routes, {}> { loadingScreen?(props: object, node: Fragment<Node, Element, TagOptions>): void; loadingOverlay?(props: object, node: Fragment<Node, Element, TagOptions>): void; } export type NavigationMode = "silent" | "loading-screen" | "loading-overlay"; export declare class Router<Routes extends string> extends AbstractRouter<Node, Element, TagOptions, Routes, {}, [ NavigationMode ]> { readonly currentUrl: Reference<string>; readonly loadingUrl: Reference<string>; protected readonly webInit: WebRouterInitialization<Routes>; protected readonly window: Window; protected readonly location: Location; protected readonly node: Fragment<Node, Element, TagOptions>; protected loadingNode: Fragment<Node, Element, TagOptions>; protected contentNode: Fragment<Node, Element, TagOptions>; protected overlayNode: Fragment<Node, Element, TagOptions>; constructor(window: Window, location: Location, node: Fragment<Node, Element, TagOptions>, init: WebRouterInitialization<Routes>); navigate<T extends Routes>(route: T, params: RouteParameters<T>, mode: NavigationMode): void; /** * Do a silent navigation without any modification in DOM until successful * @param route target route * @param params target route params * @throws {Error} a lot of errors */ silentNavigate<T extends Routes>(route: T, params: RouteParameters<T>): Promise<void>; reload(): void; protected doNavigate(url: string, canNavigate: boolean, mode: NavigationMode): void; protected parseUrl(url: string): [string, QueryParams, string]; protected loadTarget<Route extends string>(target: Answer<Node, Element, TagOptions, Route, {}>, props: ScreenProps<Route>, mode: NavigationMode): Promise<void>; protected renderScreen<Props>(screen: (props: Props, ctx: Fragment<Node, Element, TagOptions>) => void | Promise<void>, props: Props, scope: RouteRenderScope): Promise<void>; protected clearLoadings(): void; protected clearNode(node: Fragment<Node, Element, TagOptions>): void; } export declare function routeApp<Routes extends string>(node: Element, window: Window, location: Location, init: WebRouterInitialization<Routes>, debugUi?: boolean): App<Node, Element, TagOptions, {}>;