UNPKG

@discoveryjs/discovery

Version:

Frontend framework for rapid data (JSON) analysis, shareable serverless reports and dashboards

153 lines (152 loc) 6.41 kB
import type { ViewModel } from '../main/view-model.js'; import type { PopupOptions, PopupRender } from '../views/layout/popup.js'; import { Dictionary } from './dict.js'; export type RenderContext = ReturnType<typeof createRenderContext>; type RenderFunction = (el: HTMLElement | DocumentFragment, props: RenderProps, data?: any, context?: any) => Promise<any> | void; type NormalizedViewPropsFunction = (data: any, context: { props: RenderProps; context: any; }) => any; type DefineViewRender = RenderFunction | RawViewConfig; type ViewUsage = any; export type RawViewConfig = SingleViewConfig | RenderFunction | string | RawViewConfig[]; export type NormalizedViewConfig = SingleViewConfig | SingleViewConfig[]; type ClassNameFn = (data: any, context: any) => string | false | null | undefined; type queryFn = (data: any, context: any) => any; type query = string | queryFn | boolean; export type RenderListOptions = { limit: number | false; moreContainer: HTMLElement; onSliceRender: (restCount: number, offset: number, limit: number, totalCount: number) => void; }; type ConfigTransitionTreeNode = { value: any; deps: ConfigTransitionTreeNode[]; }; type RootViewInfo = { name: string; [key: string]: any; }; type ViewTreeNode = { parent: ViewTreeNode | null; children: ViewTreeNode[]; node?: Node | null; view?: ViewInfo; viewRoot?: RootViewInfo; }; export interface ViewOptions { tag: string | false | null; render: DefineViewRender; usage: ViewUsage; props: NormalizedViewPropsFunction | string; } export type ViewOptionsWithoutRender = Exclude<ViewOptions, 'render'>; export interface NormalizedViewOptions { tag: string | null | undefined; usage?: ViewUsage; props?: NormalizedViewPropsFunction; } interface View { name: string | false; options: NormalizedViewOptions; render: RenderFunction; } export interface SingleViewConfig { view: string | RenderFunction; when?: query; context?: query; data?: query; whenData?: query; className?: string | ClassNameFn | (string | ClassNameFn)[]; tooltip?: TooltipConfig | RawViewConfig; [key: string]: any; } type RenderPropsForbiddenKeys = 'view' | 'when' | 'context' | 'data' | 'whenData' | 'postRender' | 'className' | 'tooltip'; type RenderProps = { [K in string]: K extends RenderPropsForbiddenKeys ? never : any; }; type PropsTransition = { props: any; fn: NormalizedViewPropsFunction & { query?: string; }; }; interface ViewInfo { config: NormalizedViewConfig; skipped?: 'when' | 'whenData'; props?: any; inputData: any; inputDataIndex?: number; data: any; context: any; } export type TooltipConfig = Partial<{ showDelay: boolean | number; className: string; position: PopupOptions['position']; positionMode: PopupOptions['positionMode']; pointerOffsetX: number; pointerOffsetY: number; content: RawViewConfig; }>; export declare function isRawViewConfig(value: unknown): value is RawViewConfig; declare function createRenderContext(viewRenderer: ViewRenderer, name: string): { name: string; normalizeConfig: any; ensureValidConfig: any; composeConfig: any; propsFromConfig: any; computeClassName: any; applyComputedClassName: any; render: any; listLimit: any; renderList: any; maybeMoreButtons: any; renderMoreButton: any; tooltip(el: HTMLElement, config: RenderProps, data?: any, context?: any): void; }; declare function createTooltip(host: ViewModel): ViewPopup; type PopupShowArgs = [triggerEl: HTMLElement, render?: PopupRender, showImmediately?: boolean]; export declare class ViewPopup { el: HTMLElement; position: TooltipConfig['position']; positionMode: TooltipConfig['positionMode']; pointerOffsetX: TooltipConfig['pointerOffsetX']; pointerOffsetY: TooltipConfig['pointerOffsetY']; constructor(config: Partial<PopupOptions>); toggle(...args: PopupShowArgs): void; show(...args: PopupShowArgs): Promise<void>; hide(): void; } export declare class ViewRenderer extends Dictionary<View> { host: ViewModel; defaultRenderErrorRenderer: View; viewEls: WeakMap<Node, ViewInfo>; fragmentEls: WeakMap<Node, ViewInfo[]>; tooltip: ReturnType<typeof createTooltip> | null; Popup: typeof ViewPopup; constructor(host: ViewModel); define(name: string, render: DefineViewRender, options?: ViewOptionsWithoutRender): Readonly<View>; define(name: string, options: ViewOptions): Readonly<View>; normalizeConfig(config: RawViewConfig | RenderFunction): SingleViewConfig | SingleViewConfig[] | null; badConfig(config: any, error: Error): SingleViewConfig; ensureValidConfig(config: any): NormalizedViewConfig; composeConfig(config: any, extension: any): NormalizedViewConfig; propsFromConfig(config: SingleViewConfig, data: any, context: any, fn?: NormalizedViewPropsFunction | null | false | undefined): Record<string, any>; render(container: HTMLElement | DocumentFragment, config: RawViewConfig, data?: any, context?: any, dataIndex?: number): Promise<void>; listLimit(value: any, defaultValue: number): number | false; renderList(container: HTMLElement, itemConfig: RawViewConfig, data: any[], context: any, offset: number, limit?: RenderListOptions['limit'], moreContainer?: RenderListOptions['moreContainer']): any; renderList(container: HTMLElement, itemConfig: RawViewConfig, data: any[], context: any, offset: number, options?: Partial<RenderListOptions>): any; maybeMoreButtons(container: HTMLElement, beforeEl: Node | null, count: number, offset: number, limit: number, renderMore: (offset: number, limit: number) => any): HTMLSpanElement | null; renderMoreButton(container: HTMLElement, caption: string, fn: () => void): void; attachTooltip(el: HTMLElement, config: TooltipConfig | RawViewConfig, data?: any, context?: any): void; adoptFragment(fragment: DocumentFragment, probe: Node): void; setViewRoot(node: HTMLElement, name: string, props: Record<string, any>): void; getViewTree(ignore: Node[]): ViewTreeNode[]; getViewStackTrace(el: Node): ViewInfo[] | null; getViewConfigTransitionTree(value: any): ConfigTransitionTreeNode; getViewPropsTransition(value: any): null | PropsTransition & { query: string | null; }; } export {};