UNPKG

@tinijs/router

Version:

The router module for the TiniJS framework.

72 lines (71 loc) 1.94 kB
import type { Key } from 'path-to-regexp'; import type { Router } from './router.js'; export interface Route { title?: string; path: string; component: string; action?: () => Promise<unknown>; children?: Omit<Route, 'children'>[]; data?: Record<string, any>; } export interface FragmentManager { url: URL; container: HTMLElement; items: Record<string, HTMLElement>; options?: FragmentActivationOptions; } export interface FragmentActivationOptions extends ScrollIntoViewOptions { delay?: number; action?: (element: HTMLElement) => void; } export interface FragmentItem { id: string; title: string; level: number; element: HTMLElement; } export interface RegistryItem { page: Route; layout?: Route; regexp?: RegExp; } export interface RouterOptions { linkTrigger?: boolean; navIndicator?: boolean; } export interface MatchResult { url: URL; path: string; routePath?: string; regexp?: RegExp; keys?: Key[]; params?: Record<string, any>; query?: Record<string, any>; fragment?: string; pageRoute?: Route; layoutRoute?: Route; } export type ActivatedRoute = MatchResult; export interface NavIndicatorComponent extends HTMLElement { show?(): void; hide?(): void; } export type RouteCommand = () => void; export type RouteHookResult = void | null | string | RouteCommand | Promise<void | null | string | RouteCommand>; export type RouteHook = (router: Router, activeRoute: MatchResult, newEl: HTMLElement, currentEl: null | HTMLElement) => RouteHookResult; export type ElemHook = undefined | RouteHook; export interface AppWithRouter { router: Router; } export interface OnBeforeLeave { onBeforeLeave: RouteHook; } export interface OnBeforeEnter { onBeforeEnter: RouteHook; } export interface OnAfterEnter { onAfterEnter: RouteHook; } export interface OnAfterLeave { onAfterLeave: RouteHook; }