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

;