import { ElementContainer } from '../dom/element-container';
import { BoundCurves } from './bound-curves';
import { ClipPathEffect, EffectTarget, IElementEffect } from './effects';
import { Bounds } from '../css/layout/bounds';
import { ClipPathValue, ShapeRadius } from '../css/property-descriptors/clip-path';
export declare class StackingContext {
    element: ElementPaint;
    negativeZIndex: StackingContext[];
    zeroOrAutoZIndexOrTransformedOrOpacity: StackingContext[];
    positiveZIndex: StackingContext[];
    nonPositionedFloats: StackingContext[];
    nonPositionedInlineLevel: StackingContext[];
    inlineLevel: ElementPaint[];
    nonInlineLevel: ElementPaint[];
    constructor(container: ElementPaint);
}
export declare class ElementPaint {
    readonly container: ElementContainer;
    readonly parent: ElementPaint | null;
    readonly effects: IElementEffect[];
    readonly curves: BoundCurves;
    listValue?: string;
    constructor(container: ElementContainer, parent: ElementPaint | null);
    getEffects(target: EffectTarget): IElementEffect[];
}
/** @internal – exported for testing only. */
export declare const hasOverflowClip: (styles: ElementContainer["styles"]) => boolean;
/**
 * Resolve a `closest-side` or `farthest-side` shape-radius keyword to pixels
 * for a single axis. Used by both `circle()` (per-axis) and `ellipse()`.
 *
 * @param r       - The ShapeRadius (keyword or length-percentage).
 * @param center  - Absolute center coordinate on this axis (cx or cy).
 * @param start   - Absolute start of the reference box on this axis.
 * @param end     - Absolute end of the reference box on this axis.
 * @param dimRef  - Reference dimension for resolving a length-percentage value.
 * @internal – exported for testing only.
 */
export declare const resolveAxisRadius: (r: ShapeRadius, center: number, start: number, end: number, dimRef: number) => number;
/**
 * Convert a parsed ClipPathValue + element bounds into a ClipPathEffect whose
 * `applyClip` callback draws the clip shape directly onto the canvas context.
 *
 * All coordinates are computed in page-absolute space at construction time so
 * the callback itself is allocation-free and executes synchronously.
 * @internal – exported for testing only.
 */
export declare const buildClipPathEffect: (clipPath: ClipPathValue, bounds: Bounds) => ClipPathEffect | null;
export declare const parseStackingContexts: (container: ElementContainer) => StackingContext;
