import * as _angular_core from '@angular/core';
import { Provider, OnInit, AfterViewInit, ElementRef, TemplateRef, EventEmitter } from '@angular/core';
import { InputComponent } from '@agorapulse/ui-components/legacy/input';
import { ControlValueAccessor } from '@angular/forms';
import { NgSelectComponent, NgOption } from '@ng-select/ng-select';
import { Observable } from 'rxjs';

type DisplayType = 'text' | 'label' | 'tag' | 'withAvatar';
declare const SELECT_VALUE_ACCESSOR: Provider;
/**
 * @deprecated use NgSelectComponent with directive apSelectSingle or apSelectMultiple
 */
declare class SelectComponent<T extends Record<string, unknown> | string> implements OnInit, AfterViewInit, ControlValueAccessor {
    private symbolRegistry;
    private destroyRef;
    private elementRef;
    searchInput: InputComponent;
    inlineLabelElement: ElementRef<HTMLDivElement>;
    select: NgSelectComponent;
    hovered: boolean;
    optionsSignal: _angular_core.WritableSignal<T[]>;
    set options(options: T[]);
    ariaLabel: string;
    ariaLabelledBy: string;
    ariaDescribedBy: string;
    appendTo: string;
    clearable: boolean;
    description?: string;
    disabled: boolean;
    selectId?: string;
    private _inline;
    set inlineLabel(inlineLabel: boolean);
    get inlineLabel(): boolean;
    create: boolean;
    createText: string;
    group: boolean;
    selectableGroup: boolean;
    label: string;
    multiple: boolean;
    only: boolean;
    onlyText: string;
    placeholder: string;
    selectAll: boolean;
    selectAllText: string;
    unselectAllText: string;
    searchable: boolean;
    searchPlaceholder: string;
    searchFn: (term: string) => Observable<T[]>;
    notFoundText: string;
    loadingText: string;
    set displayType(displayType: DisplayType);
    optionLabel?: string;
    optionCaption?: string;
    optionDivider?: string;
    optionProfileImageUrl?: string;
    optionBadgeLabel?: string;
    optionValue?: string;
    optionDisabled: string;
    optionGroupLabel: string;
    optionGroupTag?: Record<string, string>;
    set maximumDisplayOptions(maximumDisplayOptions: number);
    customOptionTemplate?: TemplateRef<{
        option: T;
    }>;
    customLabelTemplate?: TemplateRef<{
        option: T;
    }>;
    customMultiLabelTemplate?: TemplateRef<{
        options: T[];
    }>;
    errorMessage?: string;
    successMessage?: string;
    compareWith: (a: any, b: any) => boolean;
    createNew: EventEmitter<string>;
    valueChanges: EventEmitter<unknown[]>;
    private _controlValueAccessorChangeFn;
    onTouched: () => void;
    displayTypeSignal: _angular_core.WritableSignal<DisplayType>;
    enabledOptions: _angular_core.Signal<T[]>;
    itemHoveredSignal: _angular_core.WritableSignal<string | null>;
    filteredOptionsSignal: _angular_core.WritableSignal<T[]>;
    loadingSignal: _angular_core.WritableSignal<boolean>;
    selectedValuesSignal: _angular_core.WritableSignal<unknown[]>;
    searchTermSignal: _angular_core.WritableSignal<string>;
    searchTerm$: Observable<string>;
    maximumDisplayValuesSignal: _angular_core.WritableSignal<number>;
    hiddenCountSignal: _angular_core.WritableSignal<number>;
    allSelectedSignal: _angular_core.Signal<boolean>;
    partialySelectedSignal: _angular_core.Signal<boolean>;
    private injector;
    private selectValueContainer;
    private selectValueContainerWidthSignal;
    constructor();
    writeValue(selectedValues?: unknown[]): void;
    registerOnChange(fn: (value: unknown[]) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    ngOnInit(): void;
    ngAfterViewInit(): void;
    onSearchTermChange(searchTerm: string): void;
    private defaultSearchFn;
    isGroupIndeterminate(children: NgOption[]): boolean;
    isGroupDisabled(children: NgOption[]): boolean;
    isGroupChecked(children: NgOption[]): boolean;
    onSelectOnly(item: T): void;
    onSelectOpened(): void;
    onHoverItem(htmlid: string): void;
    onLeaveItem(): void;
    onToggleAll(): void;
    onSelectedValuesChange(selectedValues: unknown[]): void;
    onOpenSelect(): void;
    onInlineInputEnter(): void;
    onInlineInputLeave(): void;
    onCreateNew(): void;
    removeSelectedItem({ $event }: {
        $event: PointerEvent | MouseEvent;
    }, item: T): void;
    private callControlValueAccessorChangeFn;
    private updateSelectValueContainerWidthSignal;
    private calculateResponsiveLabels;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent<any>, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent<any>, "ap-select", never, { "options": { "alias": "options"; "required": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "description": { "alias": "description"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "selectId": { "alias": "selectId"; "required": false; }; "inlineLabel": { "alias": "inlineLabel"; "required": false; }; "create": { "alias": "create"; "required": false; }; "createText": { "alias": "createText"; "required": false; }; "group": { "alias": "group"; "required": false; }; "selectableGroup": { "alias": "selectableGroup"; "required": false; }; "label": { "alias": "label"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "only": { "alias": "only"; "required": false; }; "onlyText": { "alias": "onlyText"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "selectAll": { "alias": "selectAll"; "required": false; }; "selectAllText": { "alias": "selectAllText"; "required": false; }; "unselectAllText": { "alias": "unselectAllText"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "searchFn": { "alias": "searchFn"; "required": false; }; "notFoundText": { "alias": "notFoundText"; "required": false; }; "loadingText": { "alias": "loadingText"; "required": false; }; "displayType": { "alias": "displayType"; "required": false; }; "optionLabel": { "alias": "optionLabel"; "required": false; }; "optionCaption": { "alias": "optionCaption"; "required": false; }; "optionDivider": { "alias": "optionDivider"; "required": false; }; "optionProfileImageUrl": { "alias": "optionProfileImageUrl"; "required": false; }; "optionBadgeLabel": { "alias": "optionBadgeLabel"; "required": false; }; "optionValue": { "alias": "optionValue"; "required": false; }; "optionDisabled": { "alias": "optionDisabled"; "required": false; }; "optionGroupLabel": { "alias": "optionGroupLabel"; "required": false; }; "optionGroupTag": { "alias": "optionGroupTag"; "required": false; }; "maximumDisplayOptions": { "alias": "maximumDisplayOptions"; "required": false; }; "customOptionTemplate": { "alias": "customOptionTemplate"; "required": false; }; "customLabelTemplate": { "alias": "customLabelTemplate"; "required": false; }; "customMultiLabelTemplate": { "alias": "customMultiLabelTemplate"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "successMessage": { "alias": "successMessage"; "required": false; }; "compareWith": { "alias": "compareWith"; "required": false; }; }, { "createNew": "createNew"; "valueChanges": "valueChanges"; }, never, never, true, never>;
}

export { SELECT_VALUE_ACCESSOR, SelectComponent };
export type { DisplayType };
