import { ElementRef, Renderer2, EventEmitter, AfterViewInit, OnChanges } from '@angular/core';
import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';
import { FudisSelectOption } from '../../../../../types/forms';
import { FudisComponentChanges } from '../../../../../../lib/types/miscellaneous';
import * as i0 from "@angular/core";
declare class SelectBaseControlValueAccessorDirective implements ControlValueAccessor, Validator {
    constructor();
    onChanged: () => any;
    onTouched: () => any;
    onValidate: () => any;
    writeValue(value: unknown): void;
    registerOnChange(fn: () => any): void;
    registerOnTouched(fn: () => any): void;
    validate(control: AbstractControl): ValidationErrors | null;
    static ɵfac: i0.ɵɵFactoryDeclaration<SelectBaseControlValueAccessorDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<SelectBaseControlValueAccessorDirective, "[fudisSelectBaseControlValueAccessor]", never, {}, {}, never, never, false, never>;
}
export declare class SelectControlValueAccessorDirective extends SelectBaseControlValueAccessorDirective implements OnChanges {
    private _elementRef;
    private _renderer;
    constructor(_elementRef: ElementRef<HTMLInputElement>, _renderer: Renderer2);
    filterText: string | null;
    ngOnChanges(changes: FudisComponentChanges<SelectControlValueAccessorDirective>): void;
    writeValue(value?: FudisSelectOption<object> | null): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<SelectControlValueAccessorDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<SelectControlValueAccessorDirective, "[fudisSelectControlValueAccessor]", never, { "filterText": { "alias": "filterText"; "required": false; }; }, {}, never, never, false, never>;
}
export declare class MultiselectControlValueAccessorDirective extends SelectBaseControlValueAccessorDirective implements AfterViewInit {
    private _document;
    private _elementRef;
    private _renderer;
    constructor(_document: Document, _elementRef: ElementRef<HTMLInputElement>, _renderer: Renderer2);
    id: string;
    enableAutocomplete: boolean;
    handleSortedSelectedOptions: EventEmitter<FudisSelectOption<object>[] | null>;
    ngAfterViewInit(): void;
    /**
     * When selecting / deselecting options, variable for storing them in the order of their id's
     * (usually the DOM order)
     */
    protected _selectedOptions: FudisSelectOption<object>[] | null;
    writeValue(value: FudisSelectOption<object>[] | null): void;
    private _setVisibleLabel;
    /**
     * Sort selected options the same order they appear in the DOM
     */
    private _sortSelectedOptionsDOMOrder;
    static ɵfac: i0.ɵɵFactoryDeclaration<MultiselectControlValueAccessorDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<MultiselectControlValueAccessorDirective, "[fudisMultiselectControlValueAccessor]", never, { "id": { "alias": "id"; "required": false; }; "enableAutocomplete": { "alias": "enableAutocomplete"; "required": false; }; }, { "handleSortedSelectedOptions": "handleSortedSelectedOptions"; }, never, never, false, never>;
}
export {};
