///
export declare type Size = {
width: number;
height: number;
};
export declare type Interval = {
lb: number;
ub: number;
};
export declare type SizeInterval = {
width: Interval;
height: Interval;
};
export declare type Position = {
x: number;
y: number;
};
export declare type BBox = {
x: number;
y: number;
width: number;
height: number;
};
export declare type Paint = (bbox: BBox, children: Component[], boundary?: string) => JSX.Element;
export declare type Layout = (interval: SizeInterval, children: Component[]) => {
size: Size;
ownPosition?: Position;
positions: Partial[];
boundary?: string;
};
export declare class Component {
children: Component[];
_layout: Layout;
_paint: Paint;
size?: Size;
position?: Partial;
boundary?: string;
parent?: Component;
constructor(children: Component[], layout: Layout, paint: Paint, boundary?: string);
layout(interval: SizeInterval): {
size: Size;
positions: Partial[];
boundary: string | undefined;
};
paint(): JSX.Element;
mod(...modify: ((component: Component) => Component)[]): Component;
}
export declare type ModifierPaint = (bbox: BBox, child: Component) => JSX.Element;
export declare type ModifierLayout = (interval: SizeInterval, child: Component) => {
size: Size;
position: Position;
};
export declare class Modifier extends Component {
constructor(child: Component, layout: ModifierLayout, paint: ModifierPaint);
}
export declare type ModifierFn = (component: Component) => Modifier;
//# sourceMappingURL=componentTypes.d.ts.map