import { PluginManifest, BaseGridPlugin, PluginQuery } from '../../core/plugin/base-plugin';
import { ColumnConfig } from '../../core/types';
import { PinnedColumnsConfig } from './types';
/**
 * Pinned Columns Plugin for tbw-grid
 *
 * Freezes columns to the left or right edge of the grid—essential for keeping key
 * identifiers or action buttons visible while scrolling through wide datasets. Just set
 * `pinned: 'left'` or `pinned: 'right'` on your column definitions.
 *
 * ## Installation
 *
 * ```ts
 * import { PinnedColumnsPlugin } from '@toolbox-web/grid/plugins/pinned-columns';
 * ```
 *
 * ## Column Configuration
 *
 * | Property | Type | Description |
 * |----------|------|-------------|
 * | `pinned` | `'left' \| 'right'` | Pin column to left or right edge |
 *
 * ## CSS Custom Properties
 *
 * | Property | Default | Description |
 * |----------|---------|-------------|
 * | `--tbw-pinned-shadow` | `4px 0 8px rgba(0,0,0,0.1)` | Shadow on pinned column edge |
 * | `--tbw-pinned-border` | `var(--tbw-color-border)` | Border between pinned and scrollable |
 *
 * @example Pin ID Left and Actions Right
 * ```ts
 * import '@toolbox-web/grid';
 * import { PinnedColumnsPlugin } from '@toolbox-web/grid/plugins/pinned-columns';
 *
 * const grid = document.querySelector('tbw-grid');
 * grid.gridConfig = {
 *   columns: [
 *     { field: 'id', header: 'ID', pinned: 'left', width: 80 },
 *     { field: 'name', header: 'Name' },
 *     { field: 'email', header: 'Email' },
 *     { field: 'department', header: 'Department' },
 *     { field: 'actions', header: 'Actions', pinned: 'right', width: 120 },
 *   ],
 *   plugins: [new PinnedColumnsPlugin()],
 * };
 * ```
 *
 * @example Left Pinned Only
 * ```ts
 * grid.gridConfig = {
 *   columns: [
 *     { field: 'id', header: 'ID', pinned: 'left' },
 *     { field: 'name', header: 'Name' },
 *     // ... scrollable columns
 *   ],
 *   plugins: [new PinnedColumnsPlugin()],
 * };
 * ```
 *
 * @see {@link PinnedColumnsConfig} for configuration options
 *
 * @internal Extends BaseGridPlugin
 */
export declare class PinnedColumnsPlugin extends BaseGridPlugin<PinnedColumnsConfig> {
    /**
     * Plugin manifest - declares owned properties for configuration validation.
     * @internal
     */
    static readonly manifest: PluginManifest;
    /** @internal */
    readonly name = "pinnedColumns";
    /** @internal */
    protected get defaultConfig(): Partial<PinnedColumnsConfig>;
    private isApplied;
    private leftOffsets;
    private rightOffsets;
    /** @internal */
    detach(): void;
    /**
     * Auto-detect sticky columns from column configuration.
     */
    static detect(rows: readonly unknown[], config: {
        columns?: ColumnConfig[];
    }): boolean;
    /** @internal */
    processColumns(columns: readonly ColumnConfig[]): ColumnConfig[];
    /** @internal */
    afterRender(): void;
    /**
     * Handle inter-plugin queries.
     * @internal
     */
    onPluginQuery(query: PluginQuery): unknown;
    /**
     * Re-apply sticky offsets (e.g., after column resize).
     */
    refreshStickyOffsets(): void;
    /**
     * Get columns pinned to the left.
     */
    getLeftPinnedColumns(): ColumnConfig[];
    /**
     * Get columns pinned to the right.
     */
    getRightPinnedColumns(): ColumnConfig[];
    /**
     * Clear all sticky positioning.
     */
    clearStickyPositions(): void;
    /**
     * Report horizontal scroll boundary offsets for pinned columns.
     * Used by keyboard navigation to ensure focused cells aren't hidden behind sticky columns.
     * @internal
     */
    getHorizontalScrollOffsets(rowEl?: HTMLElement, focusedCell?: HTMLElement): {
        left: number;
        right: number;
        skipScroll?: boolean;
    } | undefined;
}
//# sourceMappingURL=PinnedColumnsPlugin.d.ts.map