// Generated by dts-bundle-generator v9.5.1

export type Vec2Point = {
	x: number;
	y: number;
};
export type Vec2Tuple = [
	x: number,
	y: number
];
export type Vec2Size = {
	width: number;
	height: number;
};
export type Vec2PageXY = {
	pageX: number;
	pageY: number;
};
export type Vec2OffsetXY = {
	offsetX: number;
	offsetY: number;
};
export type Vec2DeltaXY = {
	deltaX: number;
	deltaY: number;
};
export type Vec2OffsetSize = {
	offsetWidth: number;
	offsetHeight: number;
};
export type Vec2InnerSize = {
	innerWidth: number;
	innerHeight: number;
};
export type Vec2Args = [
	xy: number | Vec2Point
] | [
	x: number,
	y: number
];
export type Vec2Clamp = [
	min: Vec2Args[0],
	max: Vec2Args[0]
] | [
	minX: number,
	minY: number,
	maxX: number,
	maxY: number
];
export declare function vec2(...args: Vec2Args | [
]): Vec2;
export declare class Vec2 {
	x: number;
	y: number;
	get point(): Vec2Point;
	get tuple(): Vec2Tuple;
	get size(): Vec2Size;
	get p(): Vec2Point;
	get t(): Vec2Tuple;
	get s(): Vec2Size;
	[Symbol.iterator](): Iterator<number>;
	toString(): string;
	constructor(...args: Vec2Args | [
	]);
	equal(...args: Vec2Args): boolean;
	set(...args: Vec2Args): this;
	toObject(o: Vec2Point): this;
	toObjectSize(o: Vec2Size): this;
	toTuple(o: Vec2Tuple): this;
	clone(): Vec2;
	min(): number;
	max(): number;
	angle(): number;
	length(): number;
	distance(...args: Vec2Args): number;
	dot(...args: Vec2Args): number;
	scalar(...args: Vec2Args): number;
	plus(...args: Vec2Args): this;
	minus(...args: Vec2Args): this;
	times(...args: Vec2Args): this;
	div(...args: Vec2Args): this;
	rem(...args: Vec2Args): this;
	pow(...args: Vec2Args): this;
	abs(): this;
	sign(): this;
	round(): this;
	ceil(): this;
	floor(): this;
	normalize(): this;
	inverse(): this;
	clampMin(...args: Vec2Args): this;
	clampMax(...args: Vec2Args): this;
	clamp(...args: Vec2Clamp): this;
	cplus(...args: Vec2Args): Vec2;
	cminus(...args: Vec2Args): Vec2;
	ctimes(...args: Vec2Args): Vec2;
	cdiv(...args: Vec2Args): Vec2;
	crem(...args: Vec2Args): Vec2;
	cpow(...args: Vec2Args): Vec2;
	cabs(): Vec2;
	csign(): Vec2;
	cround(): Vec2;
	cceil(): Vec2;
	cfloor(): Vec2;
	cnormalize(): Vec2;
	cinverse(): Vec2;
	cclampMin(...args: Vec2Args): Vec2;
	cclampMax(...args: Vec2Args): Vec2;
	cclamp(...args: Vec2Clamp): Vec2;
	static fromAngle(angle: number, vec?: Vec2): Vec2;
	static fromRandom(vec?: Vec2): Vec2;
	static fromSrandom(vec?: Vec2): Vec2;
	static fromSize(size: Vec2Size, vec?: Vec2): Vec2;
	static fromDeltaXY(page: Vec2DeltaXY, vec?: Vec2): Vec2;
	static fromPageXY(page: Vec2PageXY, vec?: Vec2): Vec2;
	static fromOffsetXY(offset: Vec2OffsetXY, vec?: Vec2): Vec2;
	static fromInnerSize(offsetSize: Vec2InnerSize, vec?: Vec2): Vec2;
	static fromOffsetSize(offsetSize: Vec2OffsetSize, vec?: Vec2): Vec2;
	static fromSvgLength(x: SVGAnimatedLength, y: SVGAnimatedLength, vec?: Vec2): Vec2;
}
export declare class Vec2Map<T> {
	private _data;
	private _keys;
	private _vectors;
	get size(): number;
	has(...args: Vec2Args): boolean;
	get(...args: Vec2Args): T | undefined;
	set(...args: [
		...Vec2Args,
		value: T
	]): this;
	delete(...args: Vec2Args): boolean;
	clear(): this;
	forEach(callback: (value: T, key: Vec2) => any): void;
	[Symbol.iterator](): Iterator<[
		key: Vec2,
		value: T
	]>;
}
export declare class Vec2Set {
	private _data;
	private _keys;
	private _vectors;
	get size(): number;
	has(...args: Vec2Args): boolean;
	add(...args: Vec2Args): this;
	delete(...args: Vec2Args): boolean;
	clear(): this;
	forEach(callback: (value: Vec2) => any): void;
	[Symbol.iterator](): Iterator<Vec2>;
}
declare global {
	type TXY = [
		x: number,
		y: number
	] | [
		xy: Vec2
	];
	type TAB = [
		a: number,
		b: number
	] | [
		ab: Vec2
	];
	type TCD = [
		c: number,
		d: number
	] | [
		cd: Vec2
	];
	type TEF = [
		e: number,
		f: number
	] | [
		cd: Vec2
	];
	type TSXY = [
		sx: number,
		sy: number
	] | [
		xy: Vec2
	];
	type TXY0 = [
		x0: number,
		y0: number
	] | [
		xy0: Vec2
	];
	type TXY1 = [
		x1: number,
		y1: number
	] | [
		xy1: Vec2
	];
	type TXY2 = [
		x2: number,
		y2: number
	] | [
		xy2: Vec2
	];
	type TCP = [
		cpx: number,
		cpy: number
	] | [
		cp: Vec2
	];
	type TCP1 = [
		cp1x: number,
		cp1y: number
	] | [
		cp1: Vec2
	];
	type TCP2 = [
		cp2x: number,
		cp2y: number
	] | [
		cp2: Vec2
	];
	type TDXY = [
		dx: number,
		dy: number
	] | [
		dxy: Vec2
	];
	type TWH = [
		w: number,
		h: number
	] | [
		wh: Vec2
	];
	type TSWH = [
		sw: number,
		sh: number
	] | [
		wh: Vec2
	];
	type TDWH = [
		dw: number,
		dh: number
	] | [
		dwh: Vec2
	];
	type TAngles = [
		startAngle: number,
		endAngle: number
	] | [
		startEndAngle: Vec2
	];
	type TRadius = [
		radiusX: number,
		radiusY: number
	] | [
		radiusXY: Vec2
	];
	type TDirtyXY = [
		dirtyX: number,
		dirtyY: number
	] | [
		dirtyXY: Vec2
	];
	type TDirtyWidthHeight = [
		dirtyWidth: number,
		dirtyHeight: number
	] | [
		dirtyWidthHeight: Vec2
	];
	type TABCDEF = [
		...TAB,
		...TCD,
		...TEF
	];
	type TXY01 = [
		...TXY0,
		...TXY1
	];
	type TXY01R = [
		...TXY0,
		r0: number,
		...TXY1,
		r1: number
	];
	type TXYMaxWidth = [
		...TXY,
		maxWidth?: number
	];
	type TXYFillRule = [
		...TXY,
		fillRule?: CanvasFillRule
	];
	type TXYWH = [
		...TXY,
		...TWH
	];
	type TDXYWH = [
		...TDXY,
		...TDWH
	];
	type TDSXYWH = [
		...TSXY,
		...TSWH,
		...TDXYWH
	];
	interface CanvasRect {
		clearRect(...args: TXYWH): void;
		fillRect(...args: TXYWH): void;
		strokeRect(...args: TXYWH): void;
	}
	interface CanvasPath {
		arc(...args: [
			...TXY,
			radius: number,
			...TAngles,
			counterclockwise?: boolean
		]): void;
		arcTo(...args: [
			...TXY1,
			...TXY2,
			radius: number
		]): void;
		bezierCurveTo(...args: [
			...TCP1,
			...TCP2,
			...TXY
		]): void;
		ellipse(...args: [
			...TXY,
			...TRadius,
			rotation: number,
			...TAngles,
			counterclockwise?: boolean
		]): void;
		lineTo(...args: TXY): void;
		moveTo(...args: TXY): void;
		quadraticCurveTo(...args: [
			...TCP,
			...TXY
		]): void;
		rect(...args: TXYWH): void;
		roundRect(...args: [
			...TXYWH,
			radii?: number | DOMPointInit | (number | DOMPointInit)[]
		]): void;
	}
	interface Path2D {
		arc(...args: [
			...TXY,
			radius: number,
			...TAngles,
			counterclockwise?: boolean
		]): void;
		arcTo(...args: [
			...TXY1,
			...TXY2,
			radius: number
		]): void;
		bezierCurveTo(...args: [
			...TCP1,
			...TCP2,
			...TXY
		]): void;
		ellipse(...args: [
			...TXY,
			...TRadius,
			rotation: number,
			...TAngles,
			counterclockwise?: boolean
		]): void;
		lineTo(...args: TXY): void;
		moveTo(...args: TXY): void;
		quadraticCurveTo(...args: [
			...TCP,
			...TXY
		]): void;
		rect(...args: TXYWH): void;
		roundRect(...args: [
			...TXYWH,
			radii?: number | DOMPointInit | (number | DOMPointInit)[]
		]): void;
	}
	interface CanvasDrawImage {
		drawImage(image: CanvasImageSource, ...args: TDXY): void;
		drawImage(image: CanvasImageSource, ...args: TDXYWH): void;
		drawImage(image: CanvasImageSource, ...args: TDSXYWH): void;
	}
	interface CanvasImageData {
		createImageData(...args: [
			...TSWH,
			settings?: ImageDataSettings
		]): ImageData;
		getImageData(...args: [
			...TXYWH,
			settings?: ImageDataSettings
		]): ImageData;
		putImageData(imagedata: ImageData, ...args: TDXY): void;
		putImageData(imagedata: ImageData, ...args: [
			...TDXY,
			...TDirtyXY,
			...TDirtyWidthHeight
		]): void;
	}
	interface CanvasDrawPath {
		isPointInPath(...args: TXYFillRule): boolean;
		isPointInPath(path: Path2D, ...args: TXYFillRule): boolean;
		isPointInStroke(...args: TXY): boolean;
		isPointInStroke(path: Path2D, ...args: TXY): boolean;
	}
	interface CanvasFillStrokeStyles {
		createConicGradient(startAngle: number, ...args: TXY): CanvasGradient;
		createLinearGradient(...args: TXY01): CanvasGradient;
		createRadialGradient(...args: TXY01R): CanvasGradient;
	}
	interface CanvasText {
		fillText(text: string, ...args: TXYMaxWidth): void;
		strokeText(text: string, ...args: TXYMaxWidth): void;
	}
	interface CanvasTransform {
		scale(...args: TXY): void;
		setTransform(...args: TABCDEF): void;
		transform(...args: TABCDEF): void;
		translate(...args: TXY): void;
	}
}

export {};
