/**
 * Manages the complex business of table 'pinning'; sticking columns and rows to the scrolling parent element.
 *
 * *knowing* when an element is pinned is tricky.
 * Managing the display of multiple, side-by-side pinned elements is trickier still.
 *
 * Pinning table columns are very different from pinning table rows:
 * - Rows are actual elements we can select, measure and apply styles to.
 * - Columns are disparate collections of elements that are much harder to select, measure and apply styles to.
 *
 * With this in mind, how columns and rows are pinned is different:
 * Rows can have changes applied directly, Columns have changes applied via dynamic stylesheets.
 *
 * The service is slightly opinionated on how it pins rows and columns (with some room for override):
 * - Pinned columns are stuck consecutively, without overlapping.
 * e.g. If column 'name' and 'surname' are both `pin: 'start'`; 'surname' will display **next** to name.
 * Both columns are important for context
 *
 * - Pinned rows are set to overlap *when* they have the same ancestor,
 * and stuck consecutively when they have a different ancestor.
 * e.g. `tbody > tr.pin ~ tr.pin` the second row will **overlap** the first; it's unlikely both rows will be important for context.
 * `thead > tr.pin`, `tbody > tr.pin`. Both rows are required for context so will require next to each other.
 *
 * Devs can override this behaviour by setting `--pin-start`, `--pin-end`, `--pin-top`, `--pin-bottom` custom vars.
 */
export declare class TablePinService {
    private cachedColMeta;
    private tableId;
    private tableEle;
    private scrollElement;
    private startColumns;
    private endColumns;
    private topRows;
    private bottomRows;
    private tableDims;
    constructor(table: HTMLTableElement, scrollElement: HTMLElement);
    private get pinnedStart();
    private set pinnedStart(value);
    private _pinnedStart;
    private addStyleSheet;
    /**
     * Called when columns are either pinned or unpinned.
     * Attaches a tiny stylesheet to target the 'last' start column.
     * (e.g. We only want to apply drop shadow on last pinned start column - not all pinned columns)
     */
    private handlePinnedStartChange;
    private get pinnedEnd();
    private set pinnedEnd(value);
    private _pinnedEnd;
    /**
     * Called when columns are either pinned or unpinned.
     * Attaches a tiny stylesheet to target the 'first' end column.
     * (e.g. We only want to apply drop shadow on first pinned end column - not all pinned columns)
     */
    private handlePinnedEndChange;
    private get cssColDimensionCacheKey();
    private set cssColDimensionCacheKey(value);
    private _cssColDimensionCacheKey;
    /**
     * To only generate column dimension styles when necessary we
     * maintain a cache key string via serialised column meta.
     * Only when this key changes do we generate a new stylesheet
     */
    private generateCssCacheKey;
    /**
     * Generates pinned column width offset styles
     * so pinned columns can appear stuck together,
     * then attaches a stylesheet.
     */
    private createPinnedColDimensionStyles;
    private getParentOffsets;
    /**
     * Loops through all 'top' & 'bottom' rows (on scroll or resize)
     * Manages their visual state by applying classes on stuck / unstuck
     * And their pinned offset / distance
     */
    assessRows(): void;
    /**
     * Loops through all 'start' & 'end' columns (on scroll or resize)
     * Caches meta about each column (e.g. size, position-index)
     * and decides which columns are pinned
     */
    assessCols(): Promise<void>;
    private cacheX;
    private cacheY;
    onScroll(pos: {
        x: number;
        y: number;
    }): void;
    onResize(): void;
}
