/**
 *
 * Layout calculation inspired by flexbox. The elements may have an
 * absolute size (in pixels) and a growth component for filling the
 * remaining space. Spacing around zero-sized items are collapsed.
 *
 * Read more at https://css-tricks.com/flex-grow-is-weird/
 *
 * @typedef {object} SizeDef Size definition inspired by CSS flexbox
 * @prop {number} [px] Size in pixels
 * @prop {number} [grow] Share of remaining space
 *
 * @typedef {object} LocSize One-dimensional location and size
 * @prop {number} location
 * @prop {number} size
 *
 * @typedef {object} FlexOptions
 * @prop {number} [spacing] gap between items in pixels
 * @prop {number} [devicePixelRatio] allows for snapping to "retina" pixels.
 *      Default: `undefined`, which disables the snapping.
 * @prop {number} [offset] add the offset to all locations. Default: `0`.
 * @prop {boolean} [reverse] fill from "right to left".
 *
 * @param {SizeDef[]} items
 * @param {number} containerSize in pixels
 * @param {FlexOptions} [options]
 * @returns {LocSize[]}
 */
export function mapToPixelCoords(items: SizeDef[], containerSize: number, { spacing, devicePixelRatio, offset, reverse }?: FlexOptions): LocSize[];
/**
 * Returns the minimum size  (the sum of pixels sizes) for the flex items
 *
 * @param {Iterable<SizeDef>} items
 * @param {FlexOptions} [options]
 */
export function getMinimumSize(items: Iterable<SizeDef>, { spacing }?: FlexOptions): number;
/**
 * @param {Iterable<SizeDef>} items
 * @returns {SizeDef}
 */
export function getLargestSize(items: Iterable<SizeDef>): SizeDef;
/**
 * Returns true if relative (stretching) elements are present
 * @param {SizeDef[]} items
 */
export function isStretching(items: SizeDef[]): boolean;
/**
 *
 * @param {SizeDef[]} sizeDefs
 */
export function sumSizeDefs(sizeDefs: SizeDef[]): {
    px: number;
    grow: number;
};
/**
 * Is the sizeDef taking no space at all
 *
 * @param {SizeDef} sizeDef
 */
export function isZeroSizeDef(sizeDef: SizeDef): boolean;
/**
 *
 * @param {*} spec
 * @returns {spec is SizeDef}
 */
export function isSizeDef(spec: any): spec is SizeDef;
/**
 *
 * @param {"container" | number | SizeDef | import("../../spec/view.js").Step} size
 * @returns {SizeDef}
 */
export function parseSizeDef(size: "container" | number | SizeDef | import("../../spec/view.js").Step): SizeDef;
export class FlexDimensions {
    /**
     *
     * @param {SizeDef} width
     * @param {SizeDef} height
     */
    constructor(width: SizeDef, height: SizeDef);
    /** @readonly */
    readonly width: SizeDef;
    /** @readonly */
    readonly height: SizeDef;
    /**
     * Adds padding to absolute (px) dimensions
     *
     * @param {import("./padding.js").default} padding
     */
    addPadding(padding: import("./padding.js").default): FlexDimensions;
    /**
     * Subtracts padding from absolute (px) dimensions
     *
     * @param {import("./padding.js").default} padding
     */
    subtractPadding(padding: import("./padding.js").default): FlexDimensions;
    /**
     * Returns true if either of the dimensions is growing
     *
     * @returns {boolean}
     */
    isGrowing(): boolean;
    #private;
}
/**
 * A sizedef that takes no space at all.
 *
 * @type {SizeDef}
 */
export const ZERO_SIZEDEF: SizeDef;
export const ZERO_FLEXDIMENSIONS: FlexDimensions;
/**
 * Size definition inspired by CSS flexbox
 */
export type SizeDef = {
    /**
     * Size in pixels
     */
    px?: number;
    /**
     * Share of remaining space
     */
    grow?: number;
};
/**
 * One-dimensional location and size
 */
export type LocSize = {
    location: number;
    size: number;
};
/**
 *
 * Layout calculation inspired by flexbox. The elements may have an
 * absolute size (in pixels) and a growth component for filling the
 * remaining space. Spacing around zero-sized items are collapsed.
 *
 * Read more at https://css-tricks.com/flex-grow-is-weird/
 */
export type FlexOptions = {
    /**
     * gap between items in pixels
     */
    spacing?: number;
    /**
     * allows for snapping to "retina" pixels.
     * Default: `undefined`, which disables the snapping.
     */
    devicePixelRatio?: number;
    /**
     * add the offset to all locations. Default: `0`.
     */
    offset?: number;
    /**
     * fill from "right to left".
     */
    reverse?: boolean;
};
//# sourceMappingURL=flexLayout.d.ts.map