import '../../chipper/js/browser/initialize-globals.js';
import '../../assert/js/assert.js';
import '../../globals.js';
/**
 * Display one of N nodes based on a given Property. See the option "unselectedChildrenSceneGraphStrategy" for different
 * child management strategies and how they impact the overall bounds and performance.
 * Supports null and undefined as possible values.  Will not work correctly if the children are changed externally
 * after instantiation (manages its own children and their visibility).
 *
 * @author Sam Reid (PhET Interactive Simulations)
 */
import TReadOnlyProperty from '../../axon/js/TReadOnlyProperty.js';
import StrictOmit from '../../phet-core/js/types/StrictOmit.js';
import { Layoutable, Node, NodeOptions } from '../../scenery/js/imports.js';
import GroupItemOptions from './GroupItemOptions.js';
export type ToggleNodeElement<T, N extends Node = Node> = {
    value: T;
} & GroupItemOptions<N>;
type SelfOptions = {
    alignChildren?: (children: Layoutable[]) => void;
    unselectedChildrenSceneGraphStrategy?: 'included' | 'excluded';
};
export type ToggleNodeOptions = SelfOptions & StrictOmit<NodeOptions, 'children'>;
export default class ToggleNode<T, N extends Node = Node> extends Node {
    private readonly disposeToggleNode;
    readonly nodes: N[];
    constructor(valueProperty: TReadOnlyProperty<T>, elements: ToggleNodeElement<T, N>[], providedOptions?: ToggleNodeOptions);
    dispose(): void;
    /**
     * A value for the alignChildren option.
     * Centers the latter nodes on the x,y center of the first node.
     */
    static CENTER(children: Layoutable[]): void;
    /**
     * A value for the alignChildren option.
     * Centers the latter nodes on the x center of the first node.
     */
    static CENTER_X(children: Layoutable[]): void;
    /**
     * A value for the alignChildren option.
     * Centers the latter nodes on the y center of the first node.
     */
    static CENTER_Y(children: Layoutable[]): void;
    /**
     * A value for the alignChildren option.
     * Left aligns nodes on the left of the first node.
     */
    static LEFT(children: Layoutable[]): void;
    /**
     * A value for the alignChildren option.
     * Aligns nodes on the bottom of the first node.
     */
    static BOTTOM(children: Layoutable[]): void;
    /**
     * A value for the alignChildren option.
     * Aligns nodes on the bottom of the first node.
     */
    static CENTER_BOTTOM(children: Layoutable[]): void;
    /**
     * A value for the alignChildren option.
     * Right aligns nodes on the right of the first node.
     */
    static RIGHT(children: Layoutable[]): void;
    /**
     * A value for the alignChildren option.
     * No alignment is performed.
     */
    static NONE(children: Layoutable[]): void;
}
export {};
//# sourceMappingURL=ToggleNode.d.ts.map