import '../../globals.js';
import IOType from '../../tandem/js/types/IOType.js';
import { StateObject } from '../../tandem/js/types/StateSchema.js';
import Bounds2 from './Bounds2.js';
declare const STATE_SCHEMA: {
    width: IOType<number, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject>;
    height: IOType<number, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject>;
};
export type Dimension2StateObject = StateObject<typeof STATE_SCHEMA>;
export default class Dimension2 {
    width: number;
    height: number;
    constructor(width: number, height: number);
    /**
     * Debugging string for the dimension.
     */
    toString(): string;
    /**
     * Sets this dimension to be a copy of another dimension.
     * This is the mutable form of the function copy(). This will mutate (change) this dimension, in addition to returning
     * this dimension itself.
     */
    set(dimension: Dimension2): Dimension2;
    /**
     * Sets the width of the dimension, returning this.
     */
    setWidth(width: number): Dimension2;
    /**
     * Sets the height of the dimension, returning this.
     */
    setHeight(height: number): Dimension2;
    /**
     * Creates a copy of this dimension, or if a dimension is passed in, set that dimension's values to ours.
     * This is the immutable form of the function set(), if a dimension is provided. This will return a new dimension,
     * and will not modify this dimension.
     *
     * @param [dimension] - If not provided, creates a new Dimension2 with filled in values. Otherwise, fills
     *                      in the values of the provided dimension so that it equals this dimension.
     */
    copy(dimension?: Dimension2): Dimension2;
    /**
     * Swap width and height and return a new Dimension2
     */
    swapped(): Dimension2;
    /**
     * Creates a Bounds2 from this dimension based on passing in the minimum (top-left) corner as (x,y).
     * @param [x] - Minimum x coordinate of the bounds, or 0 if not provided.
     * @param [y] - Minimum y coordinate of the bounds, or 0 if not provided.
     */
    toBounds(x?: number, y?: number): Bounds2;
    /**
     * Exact equality comparison between this dimension and another dimension.
     */
    equals(that: Dimension2): boolean;
    /**
     * Exact equality comparison between this dimension and another dimension.
     *
     * Whether difference between the two dimensions has no component with an absolute value greater than epsilon.
     */
    equalsEpsilon(that: Dimension2, epsilon?: number): boolean;
    toStateObject(): Dimension2StateObject;
    static fromStateObject(stateObject: Dimension2StateObject): Dimension2;
    static Dimension2IO: IOType<Dimension2, StateObject<{
        width: IOType<number, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject>;
        height: IOType<number, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject>;
    }>, StateObject<{
        width: IOType<number, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject>;
        height: IOType<number, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject, import("../../tandem/js/types/InfiniteNumberIO.js").InfiniteNumberStateObject>;
    }>>;
}
export {};
//# sourceMappingURL=Dimension2.d.ts.map