import { type VNode } from '../../stencil-public-runtime';
import type { ColumnProp, ColumnRegular, DataType, PluginProviders } from "../../types/index";
import { BasePlugin } from '../base.plugin';
import type { ColumnFilterConfig, FilterCollectionItem, LogicFunction, MultiFilterItem, ShowData } from './filter.types';
import { TrimmedEntity } from "../../store/index";
export * from './filter.types';
export * from './filter.indexed';
export * from './filter.button';
export declare const FILTER_TRIMMED_TYPE = "filter";
export declare const FILTER_CONFIG_CHANGED_EVENT = "filterconfigchanged";
export declare const FILTE_PANEL = "revogr-filter-panel";
/**
 * @typedef ColumnFilterConfig
 * @type {object}
 *
 * @property {MultiFilterItem|undefined} multiFilterItems - data for multi filtering with relation
 *
 * @property {Record<ColumnProp, FilterCollectionItem>|undefined} collection - preserved filter data, relation for filters will be applied as 'and'
 *
 * @property {string[]|undefined} include - filters to be included, if defined everything else out of scope will be ignored
 *
 * @property {Record<string, CustomFilter>|undefined} customFilters - hash map of {FilterType:CustomFilter}.
 *
 * @property {FilterLocalization|undefined} localization - translation for filter popup captions.
 *
 * @property {boolean|undefined} disableDynamicFiltering - disables dynamic filtering. A way to apply filters on Save only.
 */
/**
 * @internal
 */
export declare class FilterPlugin extends BasePlugin {
    revogrid: HTMLRevoGridElement;
    config?: ColumnFilterConfig | undefined;
    pop?: HTMLRevogrFilterPanelElement;
    filterCollection: Record<ColumnProp, FilterCollectionItem>;
    multiFilterItems: MultiFilterItem;
    /**
     * Filter types
     * @example
     * {
     *    string: ['contains', 'beginswith'],
     *    number: ['eqN', 'neqN', 'gt']
     *  }
     */
    filterByType: Record<string, string[]>;
    filterNameIndexByType: Record<string, string>;
    filterFunctionsIndexedByType: Record<string, LogicFunction>;
    filterProp: string;
    extraHyperContent?: (data: ShowData) => VNode | VNode[];
    extraBottomHyperContent?: (data: ShowData) => VNode | VNode[];
    constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders, config?: ColumnFilterConfig | undefined);
    beforeshow(_: ShowData): void;
    extraContent(): any;
    initConfig(config: ColumnFilterConfig): void;
    headerclick(e: CustomEvent<ColumnRegular>): Promise<void>;
    getColumnFilter(type?: boolean | string | string[]): Record<string, string[]>;
    isValidType(type: any): type is string;
    /**
     * Called on internal component change
     */
    onFilterChange(filterItems: MultiFilterItem): Promise<void>;
    onFilterReset(prop?: ColumnProp): void;
    /**
     * Triggers grid filtering
     */
    doFiltering(collection: Record<ColumnProp, FilterCollectionItem>, source: DataType[], columns: ColumnRegular[], filterItems: MultiFilterItem): Promise<void>;
    clearFiltering(): Promise<void>;
    runFiltering(multiFilterItems: MultiFilterItem): Promise<void>;
    /**
     * Get trimmed rows based on filter
     */
    getRowFilter(rows: DataType[], filterItems: MultiFilterItem, columnByProp: Record<string, ColumnRegular>): TrimmedEntity;
    private shouldTrimRow;
}
