import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * Sizable is a trait that provides a minimum and preferred width/height (both WidthSizable and HeightSizable,
 * but with added features that allow convenience of working with both dimensions at once).
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Dimension2 from '../../../dot/js/Dimension2.js';
import Constructor from '../../../phet-core/js/types/Constructor.js';
import { HeightSizableOptions, Node, WidthSizableOptions } from '../imports.js';
import { THeightSizable } from './HeightSizable.js';
import { TWidthSizable } from './WidthSizable.js';
export declare const SIZABLE_SELF_OPTION_KEYS: string[];
export declare const SIZABLE_OPTION_KEYS: string[];
type SelfOptions = {
    preferredSize?: Dimension2 | null;
    minimumSize?: Dimension2 | null;
    localPreferredSize?: Dimension2 | null;
    localMinimumSize?: Dimension2 | null;
    sizable?: boolean;
};
type ParentOptions = WidthSizableOptions & HeightSizableOptions;
export type SizableOptions = SelfOptions & ParentOptions;
type TSizable = TWidthSizable & THeightSizable & {
    validateLocalPreferredSize(): void;
};
declare const Sizable: <SuperType extends Constructor<Node>>(k: SuperType) => SuperType & Constructor<TSizable>;
declare const isSizable: (node: Node) => node is SizableNode;
declare const extendsSizable: (node: Node) => node is SizableNode;
export type SizableNode = Node & TSizable;
export default Sizable;
export { isSizable, extendsSizable };
//# sourceMappingURL=Sizable.d.ts.map