import type { LoadState, Metric } from './base.js';
/**
 * A CLS-specific version of the Metric object.
 */
export interface CLSMetric extends Metric {
    name: 'CLS';
    entries: LayoutShift[];
}
/**
 * An object containing potentially-helpful debugging information that
 * can be sent along with the CLS value for the current page visit in order
 * to help identify issues happening to real-users in the field.
 */
export interface CLSAttribution {
    /**
     * A selector identifying the first element (in document order) that
     * shifted when the single largest layout shift contributing to the page's
     * CLS score occurred.
     */
    largestShiftTarget?: string;
    /**
     * The time when the single largest layout shift contributing to the page's
     * CLS score occurred.
     */
    largestShiftTime?: DOMHighResTimeStamp;
    /**
     * The layout shift score of the single largest layout shift contributing to
     * the page's CLS score.
     */
    largestShiftValue?: number;
    /**
     * The `LayoutShiftEntry` representing the single largest layout shift
     * contributing to the page's CLS score. (Useful when you need more than just
     * `largestShiftTarget`, `largestShiftTime`, and `largestShiftValue`).
     */
    largestShiftEntry?: LayoutShift;
    /**
     * The first element source (in document order) among the `sources` list
     * of the `largestShiftEntry` object. (Also useful when you need more than
     * just `largestShiftTarget`, `largestShiftTime`, and `largestShiftValue`).
     */
    largestShiftSource?: LayoutShiftAttribution;
    /**
     * The loading state of the document at the time when the largest layout
     * shift contribution to the page's CLS score occurred (see `LoadState`
     * for details).
     */
    loadState?: LoadState;
}
/**
 * A CLS-specific version of the Metric object with attribution.
 */
export interface CLSMetricWithAttribution extends CLSMetric {
    attribution: CLSAttribution;
}
