import { Dimension, Insets, Point, Rectangle } from '../index';
export interface PrefSizeOptions {
    /**
     * When set to true the returned dimensions may contain fractional digits, otherwise the sizes are rounded up. Default is false.
     */
    exact?: boolean;
    /**
     * Whether to include the margins in the returned size. Default is false.
     */
    includeMargin?: boolean;
    /**
     * If true, the width and height properties are set to '' while measuring, thus allowing existing CSS rules to influence the sizes.
     * If set to false, the sizes are set to 'auto' or the corresponding hint values. Default is false.
     */
    useCssSize?: boolean;
    /**
     * If useCssSize is false, this value is used as width (in pixels) instead of 'auto'.
     * Useful to get the preferred height for a given width.
     */
    widthHint?: number;
    /**
     * Same as 'widthHint' but for the height.
     */
    heightHint?: number;
    /**
     * Sets min/max-width/height in addition to with width/height if widthHint resp. heightHint is set.
     * The browser sometimes makes the element smaller or larger than specified by width/height, especially in a flex container.
     * To prevent that, set this option to true. Default is false, but may change in the future.
     */
    enforceSizeHints?: boolean;
    /**
     * By default, the $elem's scrolling position is saved and restored during the execution of this method (because applying
     * intermediate styles for measurement might change the current position). If the calling method does that itself, you should
     * set this option to false to prevent overriding the stored scrolling position in $elem's data attributes. Default is true.
     */
    restoreScrollPositions?: boolean;
    /**
     * If set, the $elem is checked for one of these classes.
     * If one of these classes is currently set on the $elem, a clone of the $elem without the classes is created and measured instead. See also {@link prefSizeWithoutAnimation}.
     */
    animateClasses?: string[];
}
export interface SizeOptions {
    /**
     * When set to true the returned dimensions may contain fractional digits, otherwise the sizes are rounded up. Default is false.
     */
    exact?: boolean;
    /**
     * Whether to include the margins in the returned size. Default is false.
     */
    includeMargin?: boolean;
}
export interface InsetsOptions {
    /**
     * Whether to include the margins in the returned insets. Default is false.
     */
    includeMargin?: boolean;
    /**
     * Whether to include the paddings in the returned insets. Default is true.
     */
    includePadding?: boolean;
    /**
     * Whether to include the borders in the returned insets. Default is true.
     */
    includeBorder?: boolean;
}
export interface BoundsOptions {
    /**
     * When set to true the returned size may contain fractional digits, otherwise the sizes are rounded up. X and Y are not affected by this option. Default is false.
     */
    exact?: boolean;
    /**
     * Whether to include the margins in the returned size. X and Y are not affected by this option. Default is false.
     */
    includeMargin?: boolean;
}
declare function setBounds($comp: JQuery, x: number, y: number, width: number, height: number): any;
declare function setBounds($comp: JQuery, bounds: Rectangle): any;
declare function setSize($comp: JQuery, width: number, height: number): any;
declare function setSize($comp: JQuery, size: Dimension): any;
declare function setLocation($comp: JQuery, x: number, y: number): any;
declare function setLocation($comp: JQuery, location: Point): any;
/**
 * Helpers for graphical operations
 */
export declare const graphics: {
    /**
     * Returns the preferred size of $elem.
     *
     * Precondition: $elem and its parents must not be hidden ('display: none' - other styles like 'visibility: hidden'
     * or 'opacity: 0' would be ok because in this case the browser reserves the space the element would be using).
     *
     * The `style` and `class` properties are temporarily altered to allow the element to assume its "natural size".
     * A marker CSS class `measure` is added that can be used to reset element-specific CSS constraints (e.g. flexbox).
     *
     * @param $elem
     *          the jQuery element to measure
     * @param options
     *          an optional options object. Shorthand version: If a boolean is passed instead
     *          of an object, the value is automatically converted to the option "includeMargin".
     */
    prefSize($elem: JQuery, options?: PrefSizeOptions | boolean): Dimension;
    /**
     * Ensure resulting numbers are integers. getBoundingClientRect() might correctly return fractional values
     * (because of the browser's sub-pixel rendering). However, if we use those numbers to set the size
     * of an element using CSS, it gets rounded or cut off. The behavior is not defined amongst different
     * browser engines.
     * <p>
     * Example:
     * - Measured size from this method:      h = 345.239990234375
     * - Set the size to an element:          $elem.css('height', h + 'px')
     * - Results:
     *    Firefox & Chrome     <div id="elem" style="height: 345.24px">     [Fractional part rounded to three digits]
     */
    exactPrefSize(prefSize: Dimension, options: PrefSizeOptions): Dimension;
    /**
     * If the $elem is currently animated by CSS, create a clone, remove the animating CSS class and measure the clone instead.
     * This may be necessary because the animation might change the size of the element.
     * If prefSize is called during the animation, the current size is returned instead of the one after the animation.
     */
    prefSizeWithoutAnimation($elem: JQuery, options: PrefSizeOptions): Dimension;
    /**
     * Returns the size of the element, insets included. The sizes are rounded up, unless the option 'exact' is set to true.
     *
     * @param $elem
     *          the jQuery element to measure
     * @param options
     *          an optional options object. Shorthand version: If a boolean is passed instead
     *          of an object, the value is automatically converted to the option "includeMargin".
     */
    size($elem: JQuery, options?: SizeOptions | boolean): Dimension;
    /**
     * @returns the size of the element specified by the style.
     */
    cssSize($elem: JQuery): Dimension;
    /**
     * @returns the max size of the element specified by the style.
     */
    cssMaxSize($elem: JQuery): Dimension;
    /**
     * @returns the min size of the element specified by the style.
     */
    cssMinSize($elem: JQuery): Dimension;
    setSize: typeof setSize;
    /**
     * Returns the inset-dimensions of the component (padding, margin, border).
     *
     * @param $elem
     *          the jQuery element to measure
     * @param options
     *          an optional options object. Shorthand version: If a boolean is passed instead
     *          of an object, the value is automatically converted to the option {@link InsetsOptions.includeMargin}.
     */
    insets($comp: JQuery, options?: InsetsOptions | boolean): Insets;
    margins($comp: JQuery): Insets;
    setMargins($comp: JQuery, margins: Insets): void;
    paddings($comp: JQuery): Insets;
    borders($comp: JQuery): Insets;
    setLocation: typeof setLocation;
    /**
     * Returns a Point consisting of the component's "cssLeft" and
     * "cssTop" values (reverse operation to setLocation).
     */
    location($comp: JQuery): Point;
    /**
     * Returns the bounds of the element relative to the offset parent, insets included.
     * The sizes are rounded up, unless the option 'exact' is set to true.
     *
     * @param $elem
     *          the jQuery element to measure
     * @param options
     *          an optional options object. Shorthand version: If a boolean is passed instead
     *          of an object, the value is automatically converted to the option "includeMargin".
     */
    bounds($elem: JQuery, options?: BoundsOptions | boolean): Rectangle;
    /**
     * @returns {Point} the position relative to the offset parent ($elem.position()).
     */
    position($elem: JQuery): Point;
    /**
     * Returns the bounds of the element relative to the document, insets included.
     * The sizes are rounded up, unless the option 'exact' is set to true.
     *
     * @param $elem
     *          the jQuery element to measure
     * @param options
     *          an optional options object. Shorthand version: If a boolean is passed instead
     *          of an object, the value is automatically converted to the option "includeMargin".
     */
    offsetBounds($elem: JQuery, options?: BoundsOptions | boolean): Rectangle;
    /**
     * @returns the position relative to the document, see also {@link JQuery.offset}.
     */
    offset($elem: JQuery): Point;
    /** @internal */
    _bounds($elem: JQuery, pos: JQuery.Coordinates, options?: BoundsOptions | boolean): Rectangle;
    setBounds: typeof setBounds;
    /**
     * @returns the bounds of the element specified by the style.
     */
    cssBounds($elem: JQuery): Rectangle;
    debugOutput($comp: JQuery | HTMLElement): string;
};
export {};
//# sourceMappingURL=graphics.d.ts.map