import { PluginManifest, BaseGridPlugin } from '../../core/plugin/base-plugin';
import { ColumnConfig } from '../../core/types';
import { ColumnGroup, GroupingColumnsConfig } from './types';
/**
 * Column Grouping Plugin for tbw-grid
 *
 * Enables visual grouping of columns under shared headers. Supports two approaches:
 * declarative `columnGroups` at the grid level, or inline `group` property on columns.
 *
 * ## Installation
 *
 * ```ts
 * import { GroupingColumnsPlugin } from '@toolbox-web/grid/plugins/grouping-columns';
 * ```
 *
 * ## Configuration Options
 *
 * | Option | Type | Default | Description |
 * |--------|------|---------|-------------|
 * | `showGroupBorders` | `boolean` | `true` | Show borders between groups |
 * | `groupHeaderRenderer` | `function` | - | Custom renderer for group header content |
 *
 * ## Grid Config: `columnGroups`
 *
 * | Property | Type | Description |
 * |----------|------|-------------|
 * | `id` | `string` | Unique group identifier |
 * | `header` | `string` | Display label for the group header |
 * | `children` | `string[]` | Array of column field names in this group |
 *
 * ## Column Config: `group`
 *
 * | Type | Description |
 * |------|-------------|
 * | `string` | Simple group ID (used as both id and label) |
 * | `{ id: string; label?: string }` | Group object with explicit id and optional label |
 *
 * ## Programmatic API
 *
 * | Method | Signature | Description |
 * |--------|-----------|-------------|
 * | `isGroupingActive` | `() => boolean` | Check if grouping is active |
 * | `getGroups` | `() => ColumnGroup[]` | Get all computed groups |
 * | `getGroupColumns` | `(groupId) => ColumnConfig[]` | Get columns in a specific group |
 * | `refresh` | `() => void` | Force refresh of column groups |
 *
 * @example Declarative columnGroups (Recommended)
 * ```ts
 * import '@toolbox-web/grid';
 * import { GroupingColumnsPlugin } from '@toolbox-web/grid/plugins/grouping-columns';
 *
 * grid.gridConfig = {
 *   columnGroups: [
 *     { id: 'personal', header: 'Personal Info', children: ['firstName', 'lastName', 'email'] },
 *     { id: 'work', header: 'Work Info', children: ['department', 'title', 'salary'] },
 *   ],
 *   columns: [
 *     { field: 'firstName', header: 'First Name' },
 *     { field: 'lastName', header: 'Last Name' },
 *     // ...
 *   ],
 *   plugins: [new GroupingColumnsPlugin()],
 * };
 * ```
 *
 * @example Inline group Property
 * ```ts
 * grid.gridConfig = {
 *   columns: [
 *     { field: 'firstName', header: 'First Name', group: { id: 'personal', label: 'Personal Info' } },
 *     { field: 'lastName', header: 'Last Name', group: 'personal' }, // string shorthand
 *   ],
 *   plugins: [new GroupingColumnsPlugin()],
 * };
 * ```
 *
 * @see {@link GroupingColumnsConfig} for all configuration options
 * @see {@link ColumnGroup} for the group structure
 * @see {@link ReorderPlugin} for drag-to-reorder within groups
 *
 * @internal Extends BaseGridPlugin
 */
export declare class GroupingColumnsPlugin extends BaseGridPlugin<GroupingColumnsConfig> {
    #private;
    /**
     * Plugin manifest - declares owned properties for configuration validation.
     * @internal
     */
    static readonly manifest: PluginManifest;
    /** @internal */
    readonly name = "groupingColumns";
    /** @internal */
    readonly styles: string;
    /** @internal */
    protected get defaultConfig(): Partial<GroupingColumnsConfig>;
    private groups;
    private isActive;
    /** @internal */
    detach(): void;
    /**
     * Auto-detect column groups from column configuration.
     * Detects both inline `column.group` properties and declarative `columnGroups` config.
     */
    static detect(rows: readonly any[], config: any): boolean;
    /** @internal */
    processColumns(columns: readonly ColumnConfig[]): ColumnConfig[];
    /** @internal */
    afterRender(): void;
    /**
     * Check if column groups are active.
     * @returns Whether grouping is active
     */
    isGroupingActive(): boolean;
    /**
     * Get the computed column groups.
     * @returns Array of column groups
     */
    getGroups(): ColumnGroup[];
    /**
     * Get columns in a specific group.
     * @param groupId - The group ID to find
     * @returns Array of columns in the group
     */
    getGroupColumns(groupId: string): ColumnConfig[];
    /**
     * Refresh column groups (recompute from current columns).
     */
    refresh(): void;
}
//# sourceMappingURL=GroupingColumnsPlugin.d.ts.map