import type { ReactNode } from 'react';
import Route from './entities/Route';

export declare type Structure = string | null;

export declare type Page = Structure;
export declare type View = Structure;
export declare type Panel = Structure;
export declare type Modal = Structure;
export declare type Popout = Structure;

export declare type HistoryEvent = {
  next: Readonly<Route>,
  prev: Readonly<Route>
};

export declare type RouteLike = Readonly<Partial<Route>>;

export declare type RouteStack = Array<Route>;
export declare type RouteParams = {
  [key: string]: string | string[]
};
export declare type RouteList = {
  [key: string]: Route
};
export declare type RouteMatch = {
  isExact: boolean,
  path: Page,
  url: string,
  params: RouteParams
};

export declare type RouterCache = Map<View, Panel>;

export declare type SharedConfig = {
  debug: boolean,
  positive: boolean
};

export declare type RenderNode = ReactNode | null;
