import { DataSource } from './liveDataSlides';

/** Column definition for slide DataGrid. */
export interface SlideGridColumn {
    /** Unique column ID. */
    id: string;
    /** Column header. */
    header: string;
    /** Data property key. */
    field: string;
    /** Column width (px or 'auto'). */
    width?: number | 'auto';
    /** Minimum width. */
    minWidth?: number;
    /** Text alignment. */
    align?: 'left' | 'center' | 'right';
    /** Data type for formatting. */
    dataType?: 'string' | 'number' | 'date' | 'currency' | 'percent' | 'boolean';
    /** Number format precision. */
    precision?: number;
    /** Currency code (for currency type). */
    currency?: string;
    /** Date format. */
    dateFormat?: string;
    /** Enable sorting on this column. */
    sortable?: boolean;
    /** Enable filtering on this column. */
    filterable?: boolean;
    /** Conditional formatting rules. */
    conditionalFormat?: ConditionalFormatRule[];
    /** Cell renderer type. */
    cellRenderer?: 'text' | 'badge' | 'progress' | 'sparkline' | 'icon' | 'image';
    /** Make column fixed (frozen). */
    fixed?: 'left' | 'right';
    /** Hide column initially. */
    hidden?: boolean;
}
/** Conditional formatting rule. */
export interface ConditionalFormatRule {
    condition: {
        operator: 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'between' | 'contains' | 'isEmpty';
        value?: unknown;
        valueTo?: unknown;
    };
    style: {
        backgroundColor?: string;
        color?: string;
        fontWeight?: 'normal' | 'bold';
        icon?: string;
        badge?: string;
    };
}
/** Sort configuration. */
export interface SlideGridSort {
    field: string;
    direction: 'asc' | 'desc';
}
/** Filter configuration. */
export interface SlideGridFilter {
    field: string;
    operator: 'equals' | 'notEquals' | 'contains' | 'startsWith' | 'endsWith' | 'greaterThan' | 'lessThan' | 'between' | 'in';
    value: unknown;
    valueTo?: unknown;
}
/** Row highlight configuration. */
export interface RowHighlight {
    /** Row indexes to highlight. */
    rowIndexes?: number[];
    /** Row IDs to highlight (if using row ID). */
    rowIds?: string[];
    /** Highlight color. */
    color: string;
    /** Animation effect. */
    animation?: 'pulse' | 'glow' | 'shake' | 'none';
}
/** Cell highlight configuration. */
export interface CellHighlight {
    rowIndex: number;
    columnId: string;
    color: string;
    annotation?: string;
    animation?: 'pulse' | 'glow' | 'blink' | 'none';
}
/** Animation configuration for grid. */
export interface GridAnimation {
    /** Row entrance animation. */
    rowEntrance?: 'fadeIn' | 'slideInLeft' | 'slideInRight' | 'slideInUp' | 'none';
    /** Stagger delay between rows (ms). */
    staggerDelay?: number;
    /** Total animation duration (ms). */
    duration?: number;
    /** Progressive reveal: show N rows, then N more on click. */
    progressiveReveal?: boolean;
    /** Rows to reveal per click. */
    revealBatchSize?: number;
}
/** DataGrid slide configuration. */
export interface DataGridSlideConfig {
    /** Slide ID. */
    id: string;
    /** Grid title. */
    title: string;
    /** Optional subtitle / description. */
    subtitle?: string;
    /** Column definitions. */
    columns: SlideGridColumn[];
    /** Static data rows. */
    data?: Record<string, unknown>[];
    /** Data source binding (alternative to static data). */
    dataSource?: DataSource;
    /** Initial sort. */
    defaultSort?: SlideGridSort[];
    /** Initial filters. */
    defaultFilters?: SlideGridFilter[];
    /** Enable interactive sorting during presentation. */
    interactiveSort?: boolean;
    /** Enable interactive filtering during presentation. */
    interactiveFilter?: boolean;
    /** Enable cell selection. */
    enableSelection?: boolean;
    /** Show row numbers. */
    showRowNumbers?: boolean;
    /** Show column borders. */
    showColumnBorders?: boolean;
    /** Alternating row colors. */
    stripedRows?: boolean;
    /** Max rows to display (pagination). */
    pageSize?: number;
    /** Highlight configuration. */
    highlights?: {
        rows?: RowHighlight[];
        cells?: CellHighlight[];
    };
    /** Animation settings. */
    animation?: GridAnimation;
    /** Grid styling. */
    style?: GridStyle;
    /** Footer summary row. */
    summaryRow?: SummaryRowConfig;
    /** Presenter annotations. */
    annotations?: GridAnnotation[];
}
/** Grid styling options. */
export interface GridStyle {
    /** Header background color. */
    headerBackground?: string;
    /** Header text color. */
    headerColor?: string;
    /** Row background color. */
    rowBackground?: string;
    /** Alternate row background. */
    rowBackgroundAlt?: string;
    /** Cell text color. */
    cellColor?: string;
    /** Border color. */
    borderColor?: string;
    /** Font size. */
    fontSize?: number;
    /** Header font size. */
    headerFontSize?: number;
    /** Row height. */
    rowHeight?: number;
    /** Cell padding. */
    cellPadding?: number;
    /** Border radius. */
    borderRadius?: number;
}
/** Summary row configuration. */
export interface SummaryRowConfig {
    enabled: boolean;
    columns: Array<{
        columnId: string;
        aggregation: 'sum' | 'avg' | 'min' | 'max' | 'count' | 'custom';
        label?: string;
        customValue?: string | number;
    }>;
}
/** Presenter annotation on grid. */
export interface GridAnnotation {
    id: string;
    type: 'arrow' | 'circle' | 'box' | 'text' | 'callout';
    target: {
        rowIndex?: number;
        columnId?: string;
        position?: {
            x: number;
            y: number;
        };
    };
    content?: string;
    color?: string;
    showOnBuild?: number;
}
/** Generated DataGrid slide. */
export interface DataGridSlide {
    id: string;
    type: 'datagrid';
    title: string;
    subtitle?: string;
    config: DataGridSlideConfig;
    state: DataGridSlideState;
}
/** Runtime state of DataGrid slide. */
export interface DataGridSlideState {
    currentSort: SlideGridSort[];
    currentFilters: SlideGridFilter[];
    selectedCells: Array<{
        rowIndex: number;
        columnId: string;
    }>;
    currentPage: number;
    revealedRowCount: number;
    isFullyRevealed: boolean;
    lastUpdated: string;
}
/**
 * Create a DataGrid slide.
 */
export declare function createDataGridSlide(config: DataGridSlideConfig): DataGridSlide;
/**
 * Apply sort to data.
 */
export declare function applySortToData<T extends Record<string, unknown>>(data: T[], sorts: SlideGridSort[]): T[];
/**
 * Apply filters to data.
 */
export declare function applyFiltersToData<T extends Record<string, unknown>>(data: T[], filters: SlideGridFilter[]): T[];
/**
 * Calculate summary row values.
 */
export declare function calculateSummaryRow<T extends Record<string, unknown>>(data: T[], config: SummaryRowConfig): Record<string, string | number>;
/**
 * Format cell value based on column definition.
 */
export declare function formatCellValue(value: unknown, column: SlideGridColumn, locale?: string): string;
/**
 * Get conditional format style for a cell.
 */
export declare function getConditionalStyle(value: unknown, rules: ConditionalFormatRule[] | undefined): ConditionalFormatRule['style'] | null;
/** Sales data grid template. */
export declare function createSalesDataGrid(data?: Record<string, unknown>[]): DataGridSlideConfig;
/** Employee directory grid template. */
export declare function createEmployeeDataGrid(data?: Record<string, unknown>[]): DataGridSlideConfig;
declare const _default: {
    createDataGridSlide: typeof createDataGridSlide;
    applySortToData: typeof applySortToData;
    applyFiltersToData: typeof applyFiltersToData;
    calculateSummaryRow: typeof calculateSummaryRow;
    formatCellValue: typeof formatCellValue;
    getConditionalStyle: typeof getConditionalStyle;
    createSalesDataGrid: typeof createSalesDataGrid;
    createEmployeeDataGrid: typeof createEmployeeDataGrid;
};
export default _default;
//# sourceMappingURL=dataGridSlide.d.ts.map