import type { ComponentCtrl, Props, VNode } from './core';
export { opt, props, req, widget };
export type { ComponentCtrl, PropDef, PropsDef };
declare type ComponentFunc
= (p: P) => () => VNode;
declare type PropDefReq = {
required: true;
};
declare type PropDefOpt = {
required: false;
defaultValue: never;
};
declare type PropDefVal = {
required: false;
defaultValue: T;
};
declare type PropDef = PropDefReq | PropDefOpt | PropDefVal;
declare type PropsDef = Record>;
declare type Prettify = T;
declare type PropsType = Prettify<{
[K in keyof T as T[K] extends PropDefReq ? K : never]: T[K] extends PropDefReq ? U : never;
} & {
[K in keyof T as T[K] extends PropDefOpt ? K : never]?: T[K] extends PropDefOpt ? U : never;
} & {
[K in keyof T as T[K] extends PropDefVal ? K : never]?: T[K] extends PropDefVal ? U : never;
}>;
declare type DefaultsType = {
[K in keyof T as T[K] extends PropDefVal ? K : never]: T[K] extends PropDefVal ? U : never;
};
interface PropsConfig {
validateProps?: (nextProps: P, oldProps: P) => null | Error;
defaults: D;
}
declare function req(): PropDefReq;
declare function opt(): PropDefOpt;
declare function opt(defaultValue?: T): PropDefVal;
declare function props(propsDef: T): PropsConfig, DefaultsType>;
declare function widget(name: string, main: ComponentFunc<{}>): ComponentFunc<{}>;
declare function widget(name: string): >(propsConfig: PropsConfig
) => (fn: (props: Prettify
) => () => VNode) => ComponentFunc
;