import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * WidthSizable is a trait that provides a minimum and preferred width. The minimum width is set by the component,
 * so that layout containers could know how "small" the component can be made. The preferred width is set by the
 * layout container, and the component should adjust its size so that it takes up that width.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import TinyProperty from '../../../axon/js/TinyProperty.js';
import Constructor from '../../../phet-core/js/types/Constructor.js';
import { Node } from '../imports.js';
export declare const WIDTH_SIZABLE_OPTION_KEYS: string[];
export type WidthSizableOptions = {
    preferredWidth?: number | null;
    minimumWidth?: number | null;
    localPreferredWidth?: number | null;
    localMinimumWidth?: number | null;
    widthSizable?: boolean;
};
export type TWidthSizable = {
    readonly preferredWidthProperty: TinyProperty<number | null>;
    readonly minimumWidthProperty: TinyProperty<number | null>;
    readonly localPreferredWidthProperty: TinyProperty<number | null>;
    readonly localMinimumWidthProperty: TinyProperty<number | null>;
    readonly isWidthResizableProperty: TinyProperty<boolean>;
    preferredWidth: number | null;
    localPreferredWidth: number | null;
    minimumWidth: number | null;
    localMinimumWidth: number | null;
    widthSizable: boolean;
    get extendsWidthSizable(): boolean;
    validateLocalPreferredWidth(): void;
    _preferredSizeChanging: boolean;
    _minimumSizeChanging: boolean;
    _preferredSizeChangeAttemptDuringLock: boolean;
    _minimumSizeChangeAttemptDuringLock: boolean;
    _updatePreferredWidthListener: () => void;
    _updateLocalPreferredWidthListener: () => void;
    _updateMinimumWidthListener: () => void;
    _updateLocalMinimumWidthListener: () => void;
    _calculateLocalPreferredWidth(): number | null;
    _onReentrantPreferredWidth(): void;
    _calculatePreferredWidth(): number | null;
    _calculateLocalMinimumWidth(): number | null;
    _onReentrantLocalMinimumWidth(): void;
    _calculateMinimumWidth(): number | null;
};
declare const WidthSizable: <SuperType extends Constructor<Node>>(k: SuperType) => SuperType & Constructor<TWidthSizable>;
declare const isWidthSizable: (node: Node) => node is WidthSizableNode;
declare const extendsWidthSizable: (node: Node) => node is WidthSizableNode;
export type WidthSizableNode = Node & TWidthSizable;
export default WidthSizable;
export { isWidthSizable, extendsWidthSizable };
//# sourceMappingURL=WidthSizable.d.ts.map