import { BaseGridPlugin, CellClickEvent, GridElement, RowClickEvent } from '../../core/plugin/base-plugin';
import { ColumnConfig } from '../../core/types';
import { MasterDetailConfig } from './types';
/**
 * Master/Detail Plugin for tbw-grid
 *
 * @example
 * ```ts
 * new MasterDetailPlugin({
 *   enabled: true,
 *   detailRenderer: (row) => `<div>Details for ${row.name}</div>`,
 *   expandOnRowClick: true,
 * })
 * ```
 */
export declare class MasterDetailPlugin extends BaseGridPlugin<MasterDetailConfig> {
    #private;
    readonly name = "masterDetail";
    readonly styles: string;
    protected get defaultConfig(): Partial<MasterDetailConfig>;
    /**
     * Called when plugin is attached to the grid.
     * Parses light DOM for `<tbw-grid-detail>` elements to configure detail templates.
     */
    attach(grid: GridElement): void;
    /**
     * Parse `<tbw-grid-detail>` elements from the grid's light DOM.
     *
     * Allows declarative configuration:
     * ```html
     * <tbw-grid [rows]="data">
     *   <tbw-grid-detail>
     *     <div class="detail-content">
     *       <p>Name: {{ row.name }}</p>
     *       <p>Email: {{ row.email }}</p>
     *     </div>
     *   </tbw-grid-detail>
     * </tbw-grid>
     * ```
     *
     * Attributes:
     * - `animation`: 'slide' | 'fade' | 'false' (default: 'slide')
     * - `show-expand-column`: 'true' | 'false' (default: 'true')
     * - `expand-on-row-click`: 'true' | 'false' (default: 'false')
     * - `collapse-on-click-outside`: 'true' | 'false' (default: 'false')
     * - `height`: number (pixels) or 'auto' (default: 'auto')
     */
    private parseLightDomDetail;
    /**
     * Get expand/collapse animation style from plugin config.
     * Uses base class isAnimationEnabled to respect grid-level settings.
     */
    private get animationStyle();
    /**
     * Apply expand animation to a detail element.
     */
    private animateExpand;
    /**
     * Apply collapse animation to a detail element and remove after animation.
     */
    private animateCollapse;
    private expandedRows;
    private detailElements;
    /** Default height for detail rows when not configured */
    private static readonly DEFAULT_DETAIL_HEIGHT;
    /**
     * Get the estimated height for a detail row.
     */
    private getDetailHeight;
    /**
     * Toggle a row's detail and emit event.
     */
    private toggleAndEmit;
    detach(): void;
    processColumns(columns: readonly ColumnConfig[]): ColumnConfig[];
    onRowClick(event: RowClickEvent): boolean | void;
    onCellClick(event: CellClickEvent): boolean | void;
    onKeyDown(event: KeyboardEvent): boolean | void;
    afterRender(): void;
    /**
     * Called on scroll to sync detail elements with visible rows.
     * Removes details for rows that scrolled out of view and reattaches for visible rows.
     */
    onScrollRender(): void;
    /**
     * Return total extra height from all expanded detail rows.
     * Used by grid virtualization to adjust scrollbar height.
     */
    getExtraHeight(): number;
    /**
     * Return extra height that appears before a given row index.
     * This is the sum of heights of all expanded details whose parent row is before the given index.
     */
    getExtraHeightBefore(beforeRowIndex: number): number;
    /**
     * Adjust the virtualization start index to keep expanded row visible while its detail is visible.
     * This ensures the detail scrolls smoothly out of view instead of disappearing abruptly.
     */
    adjustVirtualStart(start: number, scrollTop: number, rowHeight: number): number;
    /**
     * Expand the detail row at the given index.
     * @param rowIndex - Index of the row to expand
     */
    expand(rowIndex: number): void;
    /**
     * Collapse the detail row at the given index.
     * @param rowIndex - Index of the row to collapse
     */
    collapse(rowIndex: number): void;
    /**
     * Toggle the detail row at the given index.
     * @param rowIndex - Index of the row to toggle
     */
    toggle(rowIndex: number): void;
    /**
     * Check if the detail row at the given index is expanded.
     * @param rowIndex - Index of the row to check
     * @returns Whether the detail row is expanded
     */
    isExpanded(rowIndex: number): boolean;
    /**
     * Expand all detail rows.
     */
    expandAll(): void;
    /**
     * Collapse all detail rows.
     */
    collapseAll(): void;
    /**
     * Get the indices of all expanded rows.
     * @returns Array of row indices that are expanded
     */
    getExpandedRows(): number[];
    /**
     * Get the detail element for a specific row.
     * @param rowIndex - Index of the row
     * @returns The detail HTMLElement or undefined
     */
    getDetailElement(rowIndex: number): HTMLElement | undefined;
    /**
     * Re-parse light DOM to refresh the detail renderer.
     * Call this after framework templates are registered (e.g., Angular ngAfterContentInit).
     *
     * This allows frameworks to register templates asynchronously and then
     * update the plugin's detailRenderer.
     */
    refreshDetailRenderer(): void;
}
//# sourceMappingURL=MasterDetailPlugin.d.ts.map