import '../../../../assert/js/assert.js';
import '../../../../globals.js';
/**
 * Mixin for storing options that can affect each cell. `null` for values usually means "inherit from the default".
 *
 * Handles a lot of conversion from internal Enumeration values (for performance) and external string representations.
 * This is done primarily for performance and that style of internal enumeration pattern. If string comparisons are
 * faster, that could be used instead.
 *
 * NOTE: Internal non-string representations are also orientation-agnostic - thus "left" and "top" map to the same
 * "start" internally, and thus the external value will appear to "switch" depending on the orientation.
 *
 * NOTE: This is mixed into both the constraint AND the cell, since we have two layers of options. The `null` meaning
 * "inherit from the default" is mainly used for the cells, so that if it's not specified in the cell, it will be
 * specified in the constraint (as non-null).
 *
 * NOTE: This is a mixin meant to be used internally only by Scenery (for the constraint and cell), and should not be
 * used by outside code.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import TEmitter from '../../../../axon/js/TEmitter.js';
import Orientation from '../../../../phet-core/js/Orientation.js';
import Constructor from '../../../../phet-core/js/types/Constructor.js';
import WithoutNull from '../../../../phet-core/js/types/WithoutNull.js';
import { HorizontalLayoutAlign, LayoutAlign, LayoutOrientation, MarginLayoutConfigurableOptions, RestrictedHorizontalLayoutAlign, RestrictedVerticalLayoutAlign, VerticalLayoutAlign, TMarginLayoutConfigurable } from '../../imports.js';
declare const FLOW_CONFIGURABLE_OPTION_KEYS: string[];
type SelfOptions = {
    orientation?: LayoutOrientation | null;
    align?: HorizontalLayoutAlign | VerticalLayoutAlign | null;
    cellAlign?: RestrictedVerticalLayoutAlign | RestrictedHorizontalLayoutAlign | null;
    stretch?: boolean;
    grow?: number | null;
};
export type FlowConfigurableOptions = SelfOptions & MarginLayoutConfigurableOptions;
export type ExternalFlowConfigurableOptions = WithoutNull<FlowConfigurableOptions, Exclude<keyof FlowConfigurableOptions, 'minContentWidth' | 'minContentHeight' | 'maxContentWidth' | 'maxContentHeight'>>;
type TFlowConfigurable = {
    _align: LayoutAlign | null;
    _cellAlign: LayoutAlign | null;
    _stretch: boolean | null;
    _grow: number | null;
    readonly orientationChangedEmitter: TEmitter;
    orientation: LayoutOrientation;
    align: HorizontalLayoutAlign | VerticalLayoutAlign | null;
    stretch: boolean | null;
    grow: number | null;
    _orientation: Orientation;
} & TMarginLayoutConfigurable;
declare const FlowConfigurable: <SuperType extends Constructor>(k: SuperType) => SuperType & Constructor<TFlowConfigurable>;
export default FlowConfigurable;
export { FLOW_CONFIGURABLE_OPTION_KEYS };
//# sourceMappingURL=FlowConfigurable.d.ts.map