import '../../assert/js/assert.js';
import '../../globals.js';
import TEmitter from '../../axon/js/TEmitter.js';
import Range from '../../dot/js/Range.js';
import Transform1 from '../../dot/js/Transform1.js';
import Vector2 from '../../dot/js/Vector2.js';
import Orientation from '../../phet-core/js/Orientation.js';
import ClippingType from './ClippingType.js';
type SelfOptions = {
    viewWidth?: number;
    modelXRange?: Range;
    modelXRangeInverted?: boolean;
    xTransform?: Transform1;
    viewHeight?: number;
    modelYRange?: Range;
    modelYRangeInverted?: boolean;
    yTransform?: Transform1;
};
export type ChartTransformOptions = SelfOptions;
declare class ChartTransform {
    readonly changedEmitter: TEmitter;
    viewWidth: number;
    viewHeight: number;
    modelXRange: Range;
    modelYRange: Range;
    xTransform: Transform1;
    yTransform: Transform1;
    modelXRangeInverted: boolean;
    modelYRangeInverted: boolean;
    constructor(providedOptions?: ChartTransformOptions);
    dispose(): void;
    /**
     * For the axis that corresponds to Orientation, iterates over the range and performs an operation (specified by
     * callback) at regular intervals (specified by spacing).
     * @param axisOrientation
     * @param spacing - the spacing (delta) between operations, in model coordinates
     * @param origin - the origin for the operation, in model coordinates. The operation is guaranteed to occur at this position.
     * @param clippingType - if something is clipped elsewhere, we allow slack so it doesn't disappear from view like a flicker
     * @param callback
     */
    forEachSpacing(axisOrientation: Orientation, spacing: number, origin: number, clippingType: ClippingType, callback: (modelPosition: number, viewPosition: number) => void): void;
    modelToView(axisOrientation: Orientation, value: number): number;
    modelToViewX(x: number): number;
    modelToViewY(y: number): number;
    modelToViewXY(x: number, y: number): Vector2;
    modelToViewPosition(position: Vector2): Vector2;
    modelToViewDelta(axisOrientation: Orientation, modelDelta: number): number;
    modelToViewDeltaX(dx: number): number;
    modelToViewDeltaY(dy: number): number;
    modelToViewDeltaXY(dx: number, dy: number): Vector2;
    viewToModel(axisOrientation: Orientation, value: number): number;
    viewToModelX(x: number): number;
    viewToModelY(y: number): number;
    viewToModelXY(x: number, y: number): Vector2;
    viewToModelPosition(position: Vector2): Vector2;
    viewToModelDeltaX(dx: number): number;
    viewToModelDeltaY(dy: number): number;
    viewToModelDelta(deltaVector: Vector2): Vector2;
    setViewWidth(viewWidth: number): void;
    setViewHeight(viewHeight: number): void;
    setModelXRange(modelXRange: Range): void;
    setModelYRange(modelYRange: Range): void;
    getModelRange(axisOrientation: Orientation): Range;
    setXTransform(xTransform: Transform1): void;
    setYTransform(yTransform: Transform1): void;
    getSpacingBorders(axisOrientation: Orientation, spacing: number, origin: number, clippingType: ClippingType): Range;
}
export default ChartTransform;
//# sourceMappingURL=ChartTransform.d.ts.map