import { type FixedPositionOptions, type HorizontalPosition } from "./types.js";
import { type XCoordConfig } from "./utils.js";
/**
 * @internal
 */
interface XPosition {
    left: number;
    right?: number;
    width?: number;
    minWidth?: number;
    actualX: HorizontalPosition;
}
/**
 * @internal
 */
export interface HorizontalFixConfig extends XCoordConfig {
    vwMargin: number;
    screenRight: number;
    disableSwapping: boolean;
}
/**
 * @internal
 */
export interface CreateHorizontalPositionOptions extends Required<Pick<FixedPositionOptions, "vwMargin" | "xMargin" | "width" | "disableSwapping">> {
    x: HorizontalPosition;
    vw: number;
    elWidth: number;
    initialX?: number;
    containerRect: DOMRect;
}
/**
 * Attempts to position the fixed element so that it will appear to the left of
 * the container element but also within the viewport boundaries. When swapping
 * is enabled, it will attempt to swap to the right position if it can't fit
 * within the viewport to the left. If it can't fit in the viewport even after
 * being swapped to the right or swapping is disabled, it will be positioned to
 * the viewport left boundary.
 *
 * @internal
 */
export declare function createAnchoredLeft(config: HorizontalFixConfig): XPosition;
/**
 * Attempts to position the fixed element so that it will appear to the
 * inner-left of the container element but also within the viewport boundaries.
 * When swapping is enabled, it will attempt to swap to the right position if it
 * can't fit within the viewport to the left. If it can't fit in the viewport
 * even after being swapped to the right or swapping is disabled, it will be
 * positioned to the viewport left boundary.
 *
 * @internal
 */
export declare function createAnchoredInnerLeft(config: HorizontalFixConfig): XPosition;
/**
 * Attempts to position the fixed element so that it will appear at the center
 * of the container element but also within the viewport boundaries. If the
 * centered element can't fit within the viewport, it will use the vwMargin
 * value if it overflowed to the left, it'll position to the screen right
 * boundary.
 *
 * @internal
 */
export declare function createAnchoredHorizontalCenter(config: HorizontalFixConfig): XPosition;
/**
 * Attempts to position the fixed element so that it will appear to the
 * inner-right of the container element but also within the viewport boundaries.
 * When swapping is enabled, it will attempt to swap to the inner-left position
 * if it can't fit within the viewport to the right. If it can't fit in the
 * viewport even after being swapped to the left or swapping is disabled, it
 * will be positioned to the viewport right boundary.
 *
 * @internal
 */
export declare function createAnchoredInnerRight(config: HorizontalFixConfig): XPosition;
/**
 * Attempts to position the fixed element so that it will appear to the right of
 * the container element but also within the viewport boundaries. When swapping
 * is enabled, it will attempt to swap to the left position if it can't fit
 * within the viewport to the right. If it can't fit in the viewport even after
 * being swapped to the left or swapping is disabled, it will be positioned to
 * the viewport right boundary.
 *
 * @internal
 */
export declare function createAnchoredRight(config: HorizontalFixConfig): XPosition;
export interface EqualWidthOptions extends Pick<CreateHorizontalPositionOptions, "x" | "elWidth" | "xMargin" | "vwMargin" | "containerRect" | "initialX"> {
    screenRight: number;
    isMinWidth: boolean;
}
/**
 * @internal
 */
export declare function createEqualWidth(options: EqualWidthOptions): XPosition;
/**
 * Creates the horizontal position for a fixed element with the provided
 * options.
 * @internal
 */
export declare function createHorizontalPosition(options: CreateHorizontalPositionOptions): XPosition;
export {};
