import { Class } from 'everyday-types'; import { Point, Rect } from './'; export declare type ShapeLike = ({ x: number; y: number; width?: number; height?: number; } | { x?: number; y?: number; width: number; height: number; } | { x: number; y: number; width: number; height: number; }) & { toJSON?: () => ShapeLike; }; export declare abstract class Shape { abstract x: number; abstract y: number; abstract get width(): number; abstract set width(x: number); abstract get height(): number; abstract set height(y: number); get left(): number; set left(x: number); get top(): number; set top(y: number); get bottom(): number; set bottom(y: number); get right(): number; set right(x: number); setLeft(x: number): this; setTop(y: number): this; clone(this: this): this; toJSON(): ShapeLike; draw(color?: string, position?: string): HTMLDivElement; screen(this: this, other?: Shape): this; screenSelf(this: this, other?: Shape): this; negate(this: this): this; negateSelf(this: this): this; contain(this: this, other: Rect): this; containSelf(this: this, other: Rect): this; scale(this: this, x: Shape): InstanceType>; scale(this: this, x: number, y?: number): InstanceType>; scaleSelf(this: this, x: Shape): InstanceType>; scaleSelf(this: this, x: number, y?: number): InstanceType>; scaleLinear(this: this, x: Shape): InstanceType>; scaleLinear(this: this, x: number, y?: number): InstanceType>; scaleLinearSelf(this: this, x: Shape): InstanceType>; scaleLinearSelf(this: this, x: number, y?: number): InstanceType>; zoomLinear(this: this, x: Shape): InstanceType>; zoomLinear(this: this, x: number, y?: number): InstanceType>; zoomLinearSelf(this: this, x: Shape): InstanceType>; zoomLinearSelf(this: this, x: number, y?: number): InstanceType>; add(this: this, x: Shape): InstanceType>; add(this: this, x: number, y?: number): InstanceType>; addSelf(this: this, x: Shape): InstanceType>; addSelf(this: this, x: number, y?: number): InstanceType>; sub(this: this, x: Shape): InstanceType>; sub(this: this, x: number, y?: number): InstanceType>; subSelf(this: this, x: Shape): InstanceType>; subSelf(this: this, x: number, y?: number): InstanceType>; translate(this: this, x: Shape): InstanceType>; translate(this: this, x: number, y?: number): InstanceType>; translateSelf(this: this, x: Shape): InstanceType>; translateSelf(this: this, x: number, y?: number): InstanceType>; touchPoint(this: this, other: Rect, center?: Point): Point; intersectPoint(this: this, other: Rect, center?: Point): Point; toStylePosition(): Partial; toStylePositionPct(): Partial; toStyleSize(): Partial; toStyleSizePct(): Partial; toStyle(): Partial; toStylePct(): Partial; toCSSStyle(): string; toPositionObject(): { x: number; y: number; }; toSizeObject(): { width: number; height: number; }; }