import { type MultipleSelectInstance, type MultipleSelectOption, type OptionRowData } from 'multiple-select-vanilla';
import type { SlickGrid } from '../core/index.js';
import { type OperatorType, type SearchTerm } from '../enums/index.js';
import type { CollectionService } from '../services/collection.service.js';
import { type RxJsFacade, type Subscription, type TranslaterService } from '../services/index.js';
import type { CollectionCustomStructure, CollectionOption, Column, ColumnFilter, Filter, FilterArguments, FilterCallback, GridOption, Locale } from './../interfaces/index.js';
export declare class SelectFilter implements Filter {
    protected readonly translaterService?: TranslaterService | undefined;
    protected readonly collectionService?: CollectionService | undefined;
    protected readonly rxjs?: RxJsFacade | undefined;
    protected _isMultipleSelect: boolean;
    protected _collectionLength: number;
    protected _collectionObservers: Array<null | {
        disconnect: () => void;
    }>;
    protected _locales: Locale;
    protected _msInstance?: MultipleSelectInstance;
    protected _shouldTriggerQuery: boolean;
    protected _isLazyDataLoaded: boolean;
    /** DOM Element Name, useful for auto-detecting positioning (dropup / dropdown) */
    elementName: string;
    /** Filter Multiple-Select options */
    filterElmOptions: Partial<MultipleSelectOption>;
    /** The DOM element */
    filterElm?: HTMLElement;
    grid: SlickGrid;
    searchTerms: SearchTerm[] | undefined;
    columnDef: Column;
    callback: FilterCallback;
    defaultOptions: Partial<MultipleSelectOption>;
    isFilled: boolean;
    labelName: string;
    labelPrefixName: string;
    labelSuffixName: string;
    optionLabel: string;
    valueName: string;
    enableTranslateLabel: boolean;
    subscriptions: Subscription[];
    filterContainerElm: HTMLElement;
    /**
     * Initialize the Filter
     */
    constructor(translaterService?: TranslaterService | undefined, collectionService?: CollectionService | undefined, rxjs?: RxJsFacade | undefined, isMultipleSelect?: boolean);
    /** Getter for the Collection Options */
    protected get collectionOptions(): CollectionOption;
    get columnId(): string | number;
    /** Getter for the Filter Operator */
    get columnFilter(): ColumnFilter;
    /** Getter for the Custom Structure if exist */
    get customStructure(): CollectionCustomStructure | undefined;
    /** Getter for the Grid Options pulled through the Grid Object */
    get gridOptions(): GridOption;
    /** Getter to know what would be the default operator when none is specified */
    get defaultOperator(): OperatorType;
    get filterOptions(): MultipleSelectOption;
    /** Getter to know if the current filter is a multiple-select (false means it's a single select) */
    get isMultipleSelect(): boolean;
    get msInstance(): MultipleSelectInstance | undefined;
    get selectOptions(): Partial<MultipleSelectOption>;
    /** Getter for the Filter Operator */
    get operator(): OperatorType;
    /** Setter for the filter operator */
    set operator(operator: OperatorType);
    /** Initialize the filter template */
    init(args: FilterArguments): Promise<any[]>;
    /** Clear the filter values */
    clear(shouldTriggerQuery?: boolean): void;
    /** destroy the filter */
    destroy(): void;
    /**
     * Get selected values retrieved from the multiple-selected element
     * @params selected items
     */
    getValues(): any[];
    /** Set value(s) on the DOM element */
    setValues(values: SearchTerm | SearchTerm[], operator?: OperatorType, triggerChange?: boolean): void;
    /**
     * Subscribe to both CollectionObserver & PropertyObserver with BindingEngine.
     * They each have their own purpose, the "propertyObserver" will trigger once the collection is replaced entirely
     * while the "collectionObverser" will trigger on collection changes (`push`, `unshift`, `splice`, ...)
     */
    protected watchCollectionChanges(): void;
    protected propertyObserverCallback(newValue: any): void;
    protected watchCallback(updatedArray: any[]): void;
    renderDomElement(inputCollection: any[]): void;
    /**
     * From the Select DOM Element created earlier, create a Multiple/Single Select Filter using the multiple-select-vanilla.js lib
     * @param {Object} selectElement
     */
    protected createFilterElement(selectElement: HTMLSelectElement, dataCollection: OptionRowData[]): void;
    protected filterSortAndParseCollection(inputCollection: any[]): {
        selectElement: HTMLSelectElement;
        dataCollection: OptionRowData[];
        hasFoundSearchTerm: boolean;
    };
    protected initMultipleSelectTemplate(): void;
    protected onTriggerEvent(): void;
    /** add/remove "filled" CSS class */
    protected updateFilterStyle(isFilled: boolean): void;
    protected translateOrDefault(translationKey: string, defaultValue?: string): string;
}
//# sourceMappingURL=selectFilter.d.ts.map