/**
 * The GatedBooleanProperty class abstracts the process of creating a boolean Property with an extra controlling Property.
 * Partially designed for its primary use case, PhET-iO instrumented Properties. This pattern comes in handy when an
 * object's boolean value is already controlled within the simulation, but there is a need to grant additional control
 * to an external entity such as a studio or a PhET-iO client. Here "gate" is an extra level of control (via the
 * composed Property). The class is a DerivedProperty that listens correctly to convey the boolean with
 * respect to all inputs.
 *
 * Subclasses GatedVisibleProperty and GatedEnabledProperty should be used when your Property fills the role
 * of a visibleProperty or enabledProperty respectively. These subclasses provide standardized tandem names
 * and PhET-iO metadata.
 *
 * @author Marla Schulz (PhET Interactive Simulations)
 * @author Michael Kauzmann (PhET Interactive Simulations)
 * @author Sam Reid (PhET Interactive Simulations)
 */
import '../../globals.js';
import type StrictOmit from '../../phet-core/js/types/StrictOmit.js';
import type Tandem from '../../tandem/js/Tandem.js';
import { type BooleanPropertyOptions } from './BooleanProperty.js';
import { DerivedProperty2, type DerivedPropertyOptions } from './DerivedProperty.js';
import type TProperty from './TProperty.js';
import type TReadOnlyProperty from './TReadOnlyProperty.js';
type SelfOptions = {
    tandemName?: string;
    selfTandemName?: string;
    selfBooleanInitialValue?: boolean;
    selfBooleanPropertyOptions?: BooleanPropertyOptions;
};
type ParentOptions = DerivedPropertyOptions<boolean>;
type GatedBooleanPropertyOptions = SelfOptions & StrictOmit<ParentOptions, 'tandem'>;
declare class GatedBooleanProperty extends DerivedProperty2<boolean, boolean, boolean> {
    readonly selfBooleanProperty: TProperty<boolean>;
    constructor(providedBooleanProperty: TReadOnlyProperty<boolean>, parentTandem: Tandem, providedOptions?: GatedBooleanPropertyOptions);
    dispose(): void;
}
/**
 * Provides PhET-iO clients with a way to permanently hide this Node via 'selfVisibleProperty'
 */
export declare class GatedVisibleProperty extends GatedBooleanProperty {
    constructor(providedBooleanProperty: TReadOnlyProperty<boolean>, parentTandem: Tandem, providedOptions?: GatedBooleanPropertyOptions);
}
export declare class GatedEnabledProperty extends GatedBooleanProperty {
    constructor(providedBooleanProperty: TReadOnlyProperty<boolean>, parentTandem: Tandem, providedOptions?: GatedBooleanPropertyOptions);
}
export default GatedBooleanProperty;
//# sourceMappingURL=GatedBooleanProperty.d.ts.map