import '../../chipper/js/browser/initialize-globals.js';
import '../../assert/js/assert.js';
import '../../globals.js';
import Property from '../../axon/js/Property.js';
import TReadOnlyProperty from '../../axon/js/TReadOnlyProperty.js';
import Bounds2 from '../../dot/js/Bounds2.js';
import Vector2 from '../../dot/js/Vector2.js';
import StrictOmit from '../../phet-core/js/types/StrictOmit.js';
import ModelViewTransform2 from '../../phetcommon/js/view/ModelViewTransform2.js';
import { Font, Node, NodeOptions, NodeTranslationOptions, PressListenerEvent, TColor } from '../../scenery/js/imports.js';
import { SoundDragListenerOptions } from './SoundDragListener.js';
import { SoundKeyboardDragListenerOptions } from './SoundKeyboardDragListener.js';
export type MeasuringTapeUnits = {
    name: string;
    multiplier: number;
};
type SelfOptions = {
    basePositionProperty?: Property<Vector2>;
    tipPositionProperty?: Property<Vector2>;
    hasValue?: boolean;
    dragBounds?: Bounds2;
    textPosition?: Vector2;
    modelViewTransform?: ModelViewTransform2;
    significantFigures?: number;
    textColor?: TColor;
    textBackgroundColor?: TColor;
    textBackgroundXMargin?: number;
    textBackgroundYMargin?: number;
    textBackgroundCornerRadius?: number;
    textMaxWidth?: number;
    textFont?: Font;
    baseScale?: number;
    lineColor?: TColor;
    tapeLineWidth?: number;
    tipCircleColor?: TColor;
    tipCircleRadius?: number;
    crosshairColor?: TColor;
    crosshairSize?: number;
    crosshairLineWidth?: number;
    isBaseCrosshairRotating?: boolean;
    isTipCrosshairRotating?: boolean;
    isTipDragBounded?: boolean;
    interactive?: boolean;
    baseDragStarted?: () => void;
    baseDragEnded?: () => void;
    phetioReadoutStringPropertyInstrumented?: boolean;
    phetioFeaturedMeasuredDistanceProperty?: boolean;
    baseDragListenerOptions?: SoundDragListenerOptions;
    tipDragListenerOptions?: SoundDragListenerOptions;
    baseKeyboardDragListenerOptions?: SoundKeyboardDragListenerOptions;
    tipKeyboardDragListenerOptions?: SoundKeyboardDragListenerOptions;
};
/**
 * NOTE: NodeTranslationOptions are omitted because you must use basePositionProperty and tipPositionProperty to
 * position this Node.
 */
export type MeasuringTapeNodeOptions = SelfOptions & StrictOmit<NodeOptions, keyof NodeTranslationOptions>;
type MeasuringTapeIconSelfOptions = {
    tapeLength?: number;
};
export type MeasuringTapeIconOptions = MeasuringTapeIconSelfOptions & StrictOmit<NodeOptions, 'children'>;
declare class MeasuringTapeNode extends Node {
    readonly measuredDistanceProperty: TReadOnlyProperty<number>;
    readonly isTipUserControlledProperty: TReadOnlyProperty<boolean>;
    readonly isBaseUserControlledProperty: TReadOnlyProperty<boolean>;
    readonly basePositionProperty: Property<Vector2>;
    readonly tipPositionProperty: Property<Vector2>;
    readonly modelViewTransformProperty: Property<ModelViewTransform2>;
    private readonly unitsProperty;
    private readonly significantFigures;
    readonly _isTipUserControlledProperty: Property<boolean>;
    readonly _isBaseUserControlledProperty: Property<boolean>;
    private readonly dragBoundsProperty;
    private readonly isTipDragBounded;
    private readonly baseDragListener;
    private readonly baseImage;
    private readonly valueNode;
    private readonly valueBackgroundNode;
    private readonly valueContainer;
    private readonly disposeMeasuringTapeNode;
    private readonly ownsBasePositionProperty;
    private readonly ownsTipPositionProperty;
    constructor(unitsProperty: TReadOnlyProperty<MeasuringTapeUnits>, providedOptions?: MeasuringTapeNodeOptions);
    reset(): void;
    dispose(): void;
    /**
     * Sets the dragBounds of the measuring tape.
     * In addition, it forces the tip and base of the measuring tape to be within the new bounds.
     */
    setDragBounds(newDragBounds: Bounds2): void;
    /**
     * Gets the dragBounds of the measuring tape.
     */
    getDragBounds(): Bounds2;
    /**
     * Returns the center of the base in the measuring tape's local coordinate frame.
     */
    getLocalBaseCenter(): Vector2;
    /**
     * Returns the bounding box of the measuring tape's base within its local coordinate frame
     */
    getLocalBaseBounds(): Bounds2;
    /**
     * Initiates a drag of the base (whole measuring tape) from a Scenery event.
     */
    startBaseDrag(event: PressListenerEvent): void;
    /**
     * Creates an icon of the measuring tape.
     */
    static createIcon(providedOptions?: MeasuringTapeIconOptions): Node;
}
export default MeasuringTapeNode;
//# sourceMappingURL=MeasuringTapeNode.d.ts.map