import '../../globals.js';
/**
 * A MappedProperty specialized for unit conversion. Just provide multiplicative factor to convert between the units,
 * or optionally a map/inverseMap. Additionally if there is a rangeProperty on the source, this Property will have a
 * mapped range.
 *
 * For example:
 * const metersProperty = new NumberProperty( 0.5, { range: new Range( 0, 1 ) } );
 * const centimetersProperty = new UnitConversionProperty( metersProperty, { factor: 100 } );
 * centimetersProperty.value; // 50
 * centimetersProperty.range; // Range( 0, 100 )
 *
 * // One way
 * metersProperty.value = 0.25
 * centimetersProperty.value; // 25
 *
 * // Bidirectional
 * centimetersProperty.value = 100;
 * metersProperty.value; // 1
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Range from '../../dot/js/Range.js';
import MappedProperty, { MappedPropertyOptions } from './MappedProperty.js';
import TProperty from './TProperty.js';
import TRangedProperty from './TRangedProperty.js';
import TReadOnlyProperty from './TReadOnlyProperty.js';
type SelfOptions = {
    factor: number;
};
type ParentOptions = MappedPropertyOptions<number, number>;
export type UnitConversionPropertyOptions = SelfOptions & ParentOptions;
export default class UnitConversionProperty extends MappedProperty<number, number> implements TRangedProperty {
    readonly rangeProperty: TProperty<Range>;
    private readonly _property;
    private readonly _rangeListener?;
    constructor(property: (TReadOnlyProperty<number> | TRangedProperty), providedOptions: UnitConversionPropertyOptions);
    get range(): Range;
    set range(value: Range);
    dispose(): void;
}
export {};
//# sourceMappingURL=UnitConversionProperty.d.ts.map