iportal
Version:
web-portal
159 lines (158 loc) • 5.58 kB
TypeScript
import { Module } from './Module';
import { Application } from './Application';
import { Animate } from './Animate';
declare type FilterOptional<T> = Pick<T, Exclude<{
[K in keyof T]: T extends Record<K, T[K]> ? K : never;
}[keyof T], undefined>>;
declare type FilterNotOptional<T> = Pick<T, Exclude<{
[K in keyof T]: T extends Record<K, T[K]> ? never : K;
}[keyof T], undefined>>;
declare type PartialEither<T, K extends keyof any> = {
[P in Exclude<keyof FilterOptional<T>, K>]-?: T[P];
} & {
[P in Exclude<keyof FilterNotOptional<T>, K>]?: T[P];
} & {
[P in Extract<keyof T, K>]?: undefined;
};
declare type Object = {
[name: string]: any;
};
declare type EitherOr<O extends Object, L extends string, R extends string> = (PartialEither<Pick<O, L | R>, L> | PartialEither<Pick<O, L | R>, R>) & Omit<O, L | R>;
declare type ModuleRel = 'module' | 'frameworks' | 'system';
declare type animationFunction = (e: TransformAnimateEvent) => void | Promise<boolean>;
declare type animationConfig = string | boolean | Array<string> | [animationFunction, animationFunction];
declare type ApplicationSafeAreaValue = string | Array<string>;
declare type GlobalCSSVariables = {
[key: string]: string;
};
declare interface ModuleStatus {
init: boolean;
preload: boolean;
prefetch: boolean;
prerender: boolean;
}
declare interface ModuleElements {
container: HTMLElement;
}
declare interface ModuleResources {
script?: Array<string>;
image?: Array<string>;
worker?: Array<string>;
video?: Array<string>;
audio?: Array<string>;
font?: Array<string>;
style?: Array<string>;
}
declare interface ModuleManifest {
config: ModuleConfig;
resources?: ModuleResources;
components?: ((w: Window) => CustomElementConstructor)[];
events?: ModuleEvents;
}
declare interface ModuleTouchBorder {
topHolder: HTMLElement;
rightHolder: HTMLElement;
bottomHolder: HTMLElement;
leftHolder: HTMLElement;
mainHolder: HTMLElement;
}
declare interface ModuleConfig {
title?: string;
rel?: ModuleRel;
level?: number;
source?: EitherOr<{
src?: string;
html?: string;
}, 'src', 'html'>;
render?: (target: HTMLElement) => void;
timeout?: number;
prerender?: Array<string>;
free?: boolean;
animation?: animationConfig;
background?: boolean | 'auto';
singleFlow?: boolean;
singleLock?: boolean;
index?: string;
preindex?: string;
limit?: number;
notFind?: string;
color?: string;
portal?: boolean;
capture?: string | ((resolve: {
pathname: string;
origin: string;
host: string;
hash: string;
href: string;
search: string;
port: string;
searchParams: URLSearchParams;
}, url: string) => boolean);
transient?: boolean;
allowHosts?: Array<string>;
mediaGuard?: boolean;
safeArea?: ApplicationSafeAreaValue;
holdBack?: (backoutCount: number) => boolean;
moduleManifestProcess?: (config: ModuleManifest) => ModuleManifest;
globalCSSVariables?: GlobalCSSVariables;
touchBorder?: (borders: ModuleTouchBorder, module: Module, application: Application) => void;
apply?: Array<'smart-setTimeout' | 'smart-setInterval' | 'link-in-new-window' | 'tap-highlight' | ['tap-highlight', string]>;
inject?: (w: Window, m: Module) => void;
sandbox?: 'allow-same-origin' | 'allow-scripts' | 'allow-forms' | 'allow-modals' | 'allow-orientation-lock' | 'allow-popups' | 'allow-pointer-lock' | 'allow-popups-to-escape-sandbox' | 'allow-presentation' | 'allow-top-navigation' | 'allow-top-navigation-by-user-activation' | 'allow-downloads-without-user-activation' | 'allow-storage-access-by-user-activation' | 'allow-top-navigation-by-user-activation' | string;
}
declare interface ModuleEvents {
transformStart: () => void | boolean;
transformEnd: () => void;
start: () => void;
load: () => void;
loadError: () => void;
preload: () => void;
destroy: () => void;
}
declare interface TransformAnimateEvent {
x: number;
y: number;
in: Animate;
out: Animate;
view: Array<HTMLElement>;
width: number;
height: number;
viewport: Array<HTMLElement>;
modules: Array<Module>;
reverse: boolean;
direction: number;
backset: number;
origin: string | Array<number>;
attach: string | Array<number>;
touches: TransformActionOrigin | undefined;
historyDirection: number;
callback: Function;
}
declare interface TransformOptions {
index: string;
defaultIndex: string;
singleFlow?: boolean;
singleLock?: boolean;
notFound?: string;
limit?: number;
exists?: boolean;
defaultAnimation?: animationConfig;
holdBack?: ModuleConfig['holdBack'];
}
declare interface PopState {
id: string;
title: string;
time: Date;
search: string;
historyIndex: number;
}
declare interface TransformActionOrigin {
x: number;
y: number;
}
declare interface ServiceWorkerInstallConfig {
swPathUrl?: string;
scope?: string;
source?: Array<string>;
}
export { PopState, TransformOptions, TransformAnimateEvent, TransformActionOrigin, Animate, ModuleStatus, ModuleElements, ModuleResources, ModuleManifest, ModuleEvents, ModuleConfig, Module, Application, ServiceWorkerInstallConfig, ApplicationSafeAreaValue, GlobalCSSVariables, EitherOr };