import '../../../../assert/js/assert.js';
import '../../../../globals.js';
/**
 * Main flow-layout logic. Usually used indirectly through FlowBox, but can also be used directly (say, if nodes don't
 * have the same parent, or a FlowBox can't be used).
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import TProperty from '../../../../axon/js/TProperty.js';
import Orientation from '../../../../phet-core/js/Orientation.js';
import { ExternalFlowConfigurableOptions, FlowCell, HorizontalLayoutJustification, LayoutAlign, Node, NodeLayoutAvailableConstraintOptions, NodeLayoutConstraint, VerticalLayoutJustification } from '../../imports.js';
declare const FLOW_CONSTRAINT_OPTION_KEYS: string[];
type SelfOptions = {
    spacing?: number;
    lineSpacing?: number;
    justify?: HorizontalLayoutJustification | VerticalLayoutJustification;
    justifyLines?: HorizontalLayoutJustification | VerticalLayoutJustification | null;
    wrap?: boolean;
    preferredWidthProperty?: TProperty<number | null>;
    preferredHeightProperty?: TProperty<number | null>;
    minimumWidthProperty?: TProperty<number | null>;
    minimumHeightProperty?: TProperty<number | null>;
};
type ParentOptions = ExternalFlowConfigurableOptions & NodeLayoutAvailableConstraintOptions;
export type FlowConstraintOptions = SelfOptions & ParentOptions;
declare const FlowConstraint_base: typeof NodeLayoutConstraint & import("../../../../phet-core/js/types/Constructor.js").default<{
    _align: LayoutAlign | null;
    _cellAlign: LayoutAlign | null;
    _stretch: boolean | null;
    _grow: number | null;
    readonly orientationChangedEmitter: import("../../../../axon.js").TEmitter;
    orientation: import("../LayoutOrientation.js").LayoutOrientation;
    align: import("../LayoutAlign.js").HorizontalLayoutAlign | import("../LayoutAlign.js").VerticalLayoutAlign | null;
    stretch: boolean | null;
    grow: number | null;
    _orientation: Orientation;
} & import("./MarginLayoutConfigurable.js").TMarginLayoutConfigurable>;
export default class FlowConstraint extends FlowConstraint_base {
    private readonly cells;
    private _justify;
    private _justifyLines;
    private _wrap;
    private _spacing;
    private _lineSpacing;
    displayedCells: FlowCell[];
    constructor(ancestorNode: Node, providedOptions?: FlowConstraintOptions);
    private updateSeparatorVisibility;
    protected layout(): void;
    get justify(): HorizontalLayoutJustification | VerticalLayoutJustification;
    set justify(value: HorizontalLayoutJustification | VerticalLayoutJustification);
    get justifyLines(): HorizontalLayoutJustification | VerticalLayoutJustification | null;
    set justifyLines(value: HorizontalLayoutJustification | VerticalLayoutJustification | null);
    get wrap(): boolean;
    set wrap(value: boolean);
    get spacing(): number;
    set spacing(value: number);
    get lineSpacing(): number;
    set lineSpacing(value: number);
    insertCell(index: number, cell: FlowCell): void;
    removeCell(cell: FlowCell): void;
    reorderCells(cells: FlowCell[], minChangeIndex: number, maxChangeIndex: number): void;
    getPreferredProperty(orientation: Orientation): TProperty<number | null>;
    /**
     * Releases references
     */
    dispose(): void;
    static create(ancestorNode: Node, options?: FlowConstraintOptions): FlowConstraint;
}
export { FLOW_CONSTRAINT_OPTION_KEYS };
//# sourceMappingURL=FlowConstraint.d.ts.map