export type ElementType
= | { [K in keyof JSX.IntrinsicElements]: P extends JSX.IntrinsicElements[K] ? K : never; }[keyof JSX.IntrinsicElements] | React.ComponentType
;
/**
* React(or other such as Preact) components.
*/
export type Component = string | ElementType;
/**
* Properties of React(or other such as Preact) components.
*/
export interface ComponentProps {
[name: string]: any;
}
export interface ComponentOption {
hasEventObject?: boolean;
targetPropName?: string;
valuePropName?: string;
getValueFromEvent?: Function;
changeEventName?: string;
needToJS?: boolean;
[key: string]: any;
}
export interface ComponentOptionFunc {
(...args: any[]): ComponentOption;
}
export namespace Template {
export interface Global {
tmplKey: string;
[key: string]: any;
}
export interface Data {
components?: Component | Component[];
[key: string]: any;
}
/**
* React(or other such as Preact) component instance.
*/
export interface ContextThis {
[key: string]: any;
}
export interface Context {
$this: ContextThis;
data: Data[] | any[];
getData: typeof import('../src/transforms/transformData').getData;
parent: Context;
index: number;
item: any;
[key: string]: any;
}
export interface ChildrenParams {
data?: Data[] | any[];
index?: number;
item?: any;
newParent?: boolean;
[key: string]: any;
}
export interface RenderChildren {
(params?: ChildrenParams): JSX.Element | any;
}
/**
* NornJ render function, example:
*
* `template({ ...args1 }, { ...args2 }, ...)`
*/
export interface RenderFunc {
(...args: Data[]): any;
}
}
export interface FilterDelegateOption {
_njOpts: number;
useString?: boolean;
global?: Template.Global;
context?: Template.Context;
outputH?: boolean;
level?: number;
}
export interface FilterDelegate {
(...args: any[]): any;
}
export interface FilterOption {
onlyGlobal?: boolean;
hasOptions?: boolean;
isOperator?: boolean;
hasLevel?: boolean;
hasTmplCtx?: boolean;
alias?: string;
symbol?: string;
placeholder?: string;
[key: string]: any;
}
export interface ExtensionDelegateOption extends FilterDelegateOption {
name?: string;
tagName?: Component;
setTagName?(tagName: Component): void;
tagProps?: ComponentProps;
props?: ComponentProps;
children?: Template.RenderChildren;
value?: Template.RenderChildren;
}
export interface ExtensionDelegate {
(options?: ExtensionDelegateOption): any;
}
export interface ExtensionDelegateMultiParams extends FilterDelegate {}
export enum ExtensionPrefixConfig {
onlyLowerCase = 'onlyLowerCase',
onlyUpperCase = 'onlyUpperCase',
free = 'free'
}
export interface ExtensionOption {
onlyGlobal?: boolean;
useString?: boolean;
newContext?: boolean | object;
isSubTag?: boolean;
isDirective?: boolean;
isBindable?: boolean;
useExpressionInProps?: boolean;
hasName?: boolean;
noTagName?: boolean;
hasTagProps?: boolean;
hasTmplCtx?: boolean;
hasOutputH?: boolean;
needPrefix?: boolean | keyof typeof ExtensionPrefixConfig;
[key: string]: any;
}
export interface ConfigOption {
delimiters?: object;
includeParser?: Function;
createElement?: Function;
outputH?: boolean;
textMode?: boolean;
noWsMode?: boolean;
fixTagName?: boolean;
}
export type JSXNode = JSX.Element | string | number | boolean | null | undefined;
export type JSXChild = JSXNode | Array