import * as _angular_core from '@angular/core';
import { AfterViewInit, OnDestroy, EventEmitter, ElementRef, OutputRefSubscription } from '@angular/core';
import { AvatarNetwork } from '@agorapulse/ui-components/avatar';
import { CheckboxComponent } from '@agorapulse/ui-components/checkbox';
import { TagColor } from '@agorapulse/ui-components/tag';
import { InputSearchComponent } from '@agorapulse/ui-components/input-search';
import * as i12 from '@ng-select/ng-select';
import { NgSelectComponent, NgOption } from '@ng-select/ng-select';
import { BehaviorSubject } from 'rxjs';

declare class SelectBaseDirective implements AfterViewInit {
    inlineLabel: _angular_core.InputSignal<string | undefined>;
    symbolId: _angular_core.InputSignal<string | undefined>;
    private readonly selectComponent;
    private el;
    private renderer;
    private viewContainerRef;
    private symbolRegistry;
    private symbolComponentRef?;
    private labelElement?;
    constructor();
    ngAfterViewInit(): void;
    private addInlineSymbol;
    private removeInlineSymbol;
    private addInlineLabel;
    private removeInlineLabel;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectBaseDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectBaseDirective, "ng-select[apSelect]", never, { "inlineLabel": { "alias": "inlineLabel"; "required": false; "isSignal": true; }; "symbolId": { "alias": "symbolId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare class SelectMultipleDirective implements AfterViewInit, OnDestroy {
    private readonly selectComponent;
    private readonly elementRef;
    private readonly originalDisabledState;
    maxItemsTooltip: _angular_core.InputSignal<string | undefined>;
    /** Pins items selected at open time to the top of the dropdown. Ignored when `groupBy` is set. */
    pinnedItemsEnabled: _angular_core.InputSignal<boolean>;
    valueContainer: HTMLElement | null;
    private readonly subs;
    constructor();
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    onMousedown: (event: MouseEvent) => void;
    private pinSelectedAtTop;
    private openAtTop;
    private updateMaxItemsDisabledState;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectMultipleDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectMultipleDirective, "ng-select[apSelectMultiple]", never, { "maxItemsTooltip": { "alias": "maxItemsTooltip"; "required": false; "isSignal": true; }; "pinnedItemsEnabled": { "alias": "pinnedItemsEnabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof SelectBaseDirective; inputs: { "inlineLabel": "inlineLabel"; "symbolId": "symbolId"; }; outputs: {}; }]>;
}

declare class SelectSingleDirective implements AfterViewInit {
    private readonly selectComponent;
    constructor();
    ngAfterViewInit(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectSingleDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectSingleDirective, "ng-select[apSelectSingle]", never, {}, {}, never, never, true, [{ directive: typeof SelectBaseDirective; inputs: { "inlineLabel": "inlineLabel"; "symbolId": "symbolId"; }; outputs: {}; }]>;
}

declare class DropdownItemSingleOneLineComponent {
    private readonly symbolRegistry;
    constructor();
    text: string;
    selected: boolean;
    disabled: boolean;
    avatarUrl?: string;
    showAvatarInitials: boolean;
    symbolId?: string;
    disabledTooltip?: string;
    badgeText?: string;
    dividerEnabled: boolean;
    network: AvatarNetwork | undefined;
    roundedAvatar: _angular_core.InputSignal<boolean>;
    isFeatureLocked: _angular_core.InputSignal<boolean>;
    lockedFeatureClicked: _angular_core.OutputEmitterRef<void>;
    onClick($event: MouseEvent): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownItemSingleOneLineComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownItemSingleOneLineComponent, "ap-dropdown-item-single-one-line", never, { "text": { "alias": "text"; "required": true; }; "selected": { "alias": "selected"; "required": true; }; "disabled": { "alias": "disabled"; "required": false; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; }; "showAvatarInitials": { "alias": "showAvatarInitials"; "required": false; }; "symbolId": { "alias": "symbolId"; "required": false; }; "disabledTooltip": { "alias": "disabledTooltip"; "required": false; }; "badgeText": { "alias": "badgeText"; "required": false; }; "dividerEnabled": { "alias": "dividerEnabled"; "required": false; }; "network": { "alias": "network"; "required": false; }; "roundedAvatar": { "alias": "roundedAvatar"; "required": false; "isSignal": true; }; "isFeatureLocked": { "alias": "isFeatureLocked"; "required": false; "isSignal": true; }; }, { "lockedFeatureClicked": "lockedFeatureClicked"; }, never, never, true, never>;
}

declare class DropdownItemSingleTwoLinesComponent {
    private readonly symbolRegistry;
    constructor();
    text: string;
    caption: string;
    selected: boolean;
    disabled: boolean;
    avatarUrl?: string;
    symbolId?: string;
    disabledTooltip?: string;
    badgeText?: string;
    dividerEnabled: boolean;
    network: AvatarNetwork | undefined;
    roundedAvatar: _angular_core.InputSignal<boolean>;
    isFeatureLocked: _angular_core.InputSignal<boolean>;
    lockedFeatureClicked: _angular_core.OutputEmitterRef<void>;
    onClick($event: MouseEvent): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownItemSingleTwoLinesComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownItemSingleTwoLinesComponent, "ap-dropdown-item-single-two-lines", never, { "text": { "alias": "text"; "required": true; }; "caption": { "alias": "caption"; "required": true; }; "selected": { "alias": "selected"; "required": true; }; "disabled": { "alias": "disabled"; "required": false; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; }; "symbolId": { "alias": "symbolId"; "required": false; }; "disabledTooltip": { "alias": "disabledTooltip"; "required": false; }; "badgeText": { "alias": "badgeText"; "required": false; }; "dividerEnabled": { "alias": "dividerEnabled"; "required": false; }; "network": { "alias": "network"; "required": false; }; "roundedAvatar": { "alias": "roundedAvatar"; "required": false; "isSignal": true; }; "isFeatureLocked": { "alias": "isFeatureLocked"; "required": false; "isSignal": true; }; }, { "lockedFeatureClicked": "lockedFeatureClicked"; }, never, never, true, never>;
}

declare class DropdownItemMultipleOneLineComponent {
    private readonly symbolRegistry;
    protected readonly selectMultiple: SelectMultipleDirective | null;
    constructor();
    text: string;
    selected: boolean;
    indeterminate: boolean;
    htmlId: string;
    disabled: boolean;
    avatarUrl?: string;
    symbolId?: string;
    disabledTooltip?: string;
    badgeText?: string;
    dividerEnabled: boolean;
    onlyEnabled: boolean;
    onlyText: string;
    isFeatureLocked: _angular_core.InputSignal<boolean>;
    roundedAvatar: _angular_core.InputSignal<boolean>;
    network: _angular_core.InputSignal<"meta" | "bluesky" | "facebook" | "instagram" | "linkedin" | "web" | "youtube" | "google" | "twitter" | "pinterest" | "threads" | "tiktok" | "webBlog" | "webNews" | "X" | "xPlus" | "reddit" | undefined>;
    symbolColor: _angular_core.InputSignal<string | undefined>;
    symbolTooltipText: _angular_core.InputSignal<string | undefined>;
    selectOnly: _angular_core.OutputEmitterRef<void>;
    selectionChange: _angular_core.OutputEmitterRef<boolean>;
    lockedFeatureClicked: _angular_core.OutputEmitterRef<void>;
    checkbox: CheckboxComponent;
    onClick($event: MouseEvent): void;
    onSelectOnly(): void;
    onCheckboxChange(checked: boolean): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownItemMultipleOneLineComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownItemMultipleOneLineComponent, "ap-dropdown-item-multiple-one-line", never, { "text": { "alias": "text"; "required": true; }; "selected": { "alias": "selected"; "required": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; }; "htmlId": { "alias": "htmlId"; "required": true; }; "disabled": { "alias": "disabled"; "required": false; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; }; "symbolId": { "alias": "symbolId"; "required": false; }; "disabledTooltip": { "alias": "disabledTooltip"; "required": false; }; "badgeText": { "alias": "badgeText"; "required": false; }; "dividerEnabled": { "alias": "dividerEnabled"; "required": false; }; "onlyEnabled": { "alias": "onlyEnabled"; "required": false; }; "onlyText": { "alias": "onlyText"; "required": false; }; "isFeatureLocked": { "alias": "isFeatureLocked"; "required": false; "isSignal": true; }; "roundedAvatar": { "alias": "roundedAvatar"; "required": false; "isSignal": true; }; "network": { "alias": "network"; "required": false; "isSignal": true; }; "symbolColor": { "alias": "symbolColor"; "required": false; "isSignal": true; }; "symbolTooltipText": { "alias": "symbolTooltipText"; "required": false; "isSignal": true; }; }, { "selectOnly": "selectOnly"; "selectionChange": "selectionChange"; "lockedFeatureClicked": "lockedFeatureClicked"; }, never, never, true, never>;
}

declare class DropdownItemMultipleTwoLinesComponent {
    private readonly symbolRegistry;
    protected readonly selectMultiple: SelectMultipleDirective | null;
    constructor();
    text: string;
    caption: string;
    selected: boolean;
    htmlId: string;
    disabled: boolean;
    avatarUrl?: string;
    symbolId?: string;
    disabledTooltip?: string;
    badgeText?: string;
    dividerEnabled: boolean;
    onlyEnabled: boolean;
    onlyText: string;
    isFeatureLocked: _angular_core.InputSignal<boolean>;
    roundedAvatar: _angular_core.InputSignal<boolean>;
    network: _angular_core.InputSignal<"meta" | "bluesky" | "facebook" | "instagram" | "linkedin" | "web" | "youtube" | "google" | "twitter" | "pinterest" | "threads" | "tiktok" | "webBlog" | "webNews" | "X" | "xPlus" | "reddit" | undefined>;
    symbolColor: _angular_core.InputSignal<string | undefined>;
    symbolTooltipText: _angular_core.InputSignal<string | undefined>;
    selectOnly: EventEmitter<void>;
    lockedFeatureClicked: _angular_core.OutputEmitterRef<void>;
    checkbox: CheckboxComponent;
    onClick($event: MouseEvent): void;
    onSelectOnly(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownItemMultipleTwoLinesComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownItemMultipleTwoLinesComponent, "ap-dropdown-item-multiple-two-lines", never, { "text": { "alias": "text"; "required": true; }; "caption": { "alias": "caption"; "required": true; }; "selected": { "alias": "selected"; "required": true; }; "htmlId": { "alias": "htmlId"; "required": true; }; "disabled": { "alias": "disabled"; "required": false; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; }; "symbolId": { "alias": "symbolId"; "required": false; }; "disabledTooltip": { "alias": "disabledTooltip"; "required": false; }; "badgeText": { "alias": "badgeText"; "required": false; }; "dividerEnabled": { "alias": "dividerEnabled"; "required": false; }; "onlyEnabled": { "alias": "onlyEnabled"; "required": false; }; "onlyText": { "alias": "onlyText"; "required": false; }; "isFeatureLocked": { "alias": "isFeatureLocked"; "required": false; "isSignal": true; }; "roundedAvatar": { "alias": "roundedAvatar"; "required": false; "isSignal": true; }; "network": { "alias": "network"; "required": false; "isSignal": true; }; "symbolColor": { "alias": "symbolColor"; "required": false; "isSignal": true; }; "symbolTooltipText": { "alias": "symbolTooltipText"; "required": false; "isSignal": true; }; }, { "selectOnly": "selectOnly"; "lockedFeatureClicked": "lockedFeatureClicked"; }, never, never, true, never>;
}

type SelectBaseDisplayType = 'tag' | 'label';
type SelectLabelSingleDisplayType = 'text' | 'withAvatar' | SelectBaseDisplayType;
type SelectLabelMultipleDisplayType = SelectBaseDisplayType;

declare class SelectLabelSingleComponent {
    displayType: _angular_core.InputSignal<SelectLabelSingleDisplayType>;
    label: _angular_core.InputSignal<string>;
    avatarUrl: _angular_core.InputSignal<string | undefined>;
    network: _angular_core.InputSignal<"meta" | "bluesky" | "facebook" | "instagram" | "linkedin" | "web" | "youtube" | "google" | "twitter" | "pinterest" | "threads" | "tiktok" | "webBlog" | "webNews" | "X" | "xPlus" | "reddit" | undefined>;
    showAvatarInitials: _angular_core.InputSignal<boolean>;
    roundedAvatar: _angular_core.InputSignal<boolean>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectLabelSingleComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectLabelSingleComponent, "ap-select-label-single", never, { "displayType": { "alias": "displayType"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; "isSignal": true; }; "network": { "alias": "network"; "required": false; "isSignal": true; }; "showAvatarInitials": { "alias": "showAvatarInitials"; "required": false; "isSignal": true; }; "roundedAvatar": { "alias": "roundedAvatar"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare class SelectLabelMultipleComponent {
    displayType: _angular_core.InputSignal<"label" | "tag">;
    tagColor: _angular_core.InputSignal<TagColor>;
    selectedItems: _angular_core.InputSignal<any[]>;
    bindLabel: _angular_core.InputSignal<string>;
    bindValue: _angular_core.InputSignal<string>;
    bindAvatarUrl: _angular_core.InputSignal<string>;
    bindSymbolId: _angular_core.InputSignal<string>;
    roundedAvatar: _angular_core.InputSignal<boolean>;
    bindNetwork: _angular_core.InputSignal<string>;
    bindTagColor: _angular_core.InputSignal<string>;
    removeItem: _angular_core.OutputEmitterRef<any>;
    /**
     * Parent ng-select, resolved through the DI chain of the `ng-multi-label-tmp` template.
     * `optional` so the component still works when rendered outside a ng-select.
     */
    private readonly ngSelect;
    /** True when the whole select is disabled/readonly — hides every tag/label remove button. */
    protected readonly selectDisabled: _angular_core.Signal<boolean>;
    selectedLabels: _angular_core.Signal<{
        label: any;
        avatarUrl: any;
        symbolId: any;
        value: any;
        network: any;
        tagColor: TagColor | undefined;
    }[]>;
    hiddenCount: _angular_core.WritableSignal<number>;
    trackByItem: (_: number, item: any) => any;
    mainContainer: _angular_core.Signal<ElementRef<any>>;
    itemsElement: _angular_core.Signal<readonly ElementRef<any>[]>;
    private responsiveLayout;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectLabelMultipleComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectLabelMultipleComponent, "ap-select-label-multiple", never, { "displayType": { "alias": "displayType"; "required": false; "isSignal": true; }; "tagColor": { "alias": "tagColor"; "required": false; "isSignal": true; }; "selectedItems": { "alias": "selectedItems"; "required": true; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "bindAvatarUrl": { "alias": "bindAvatarUrl"; "required": false; "isSignal": true; }; "bindSymbolId": { "alias": "bindSymbolId"; "required": false; "isSignal": true; }; "roundedAvatar": { "alias": "roundedAvatar"; "required": false; "isSignal": true; }; "bindNetwork": { "alias": "bindNetwork"; "required": false; "isSignal": true; }; "bindTagColor": { "alias": "bindTagColor"; "required": false; "isSignal": true; }; }, { "removeItem": "removeItem"; }, never, never, true, never>;
}

/** Search input for an ng-select dropdown — place inside its `ng-header-tmp`. */
declare class DropdownSearchFormComponent implements AfterViewInit, OnDestroy {
    searchPlaceholder: string;
    createNewEnabled: boolean;
    createText: string;
    select: NgSelectComponent;
    inputSearch: InputSearchComponent;
    createNew: EventEmitter<string>;
    searchTermSignal: _angular_core.WritableSignal<string>;
    searchTerm$: BehaviorSubject<string>;
    submitSubscription: OutputRefSubscription | null;
    constructor();
    ngOnDestroy(): void;
    ngAfterViewInit(): void;
    /**
     * Register the keyboard submit event allowing to press enter to select the first item found.
     * And escape to close the dropdown. This is useful for keyboard navigation.
     * Use case: search for an item by typing the first characters and press enter to select it.
     * Furthermore: arrow keys currently don't work in the dropdown search form.
     */
    registerKeyboardSubmit(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownSearchFormComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownSearchFormComponent, "ap-dropdown-search-form", never, { "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "createNewEnabled": { "alias": "createNewEnabled"; "required": false; }; "createText": { "alias": "createText"; "required": false; }; "select": { "alias": "select"; "required": true; }; }, { "createNew": "createNew"; }, never, never, true, never>;
}

declare class DropdownCreateNewComponent {
    private readonly symbolRegistry;
    text: _angular_core.InputSignal<string>;
    searchTerm: _angular_core.InputSignal<string | undefined>;
    readonly createNew: _angular_core.OutputEmitterRef<string>;
    constructor();
    onClick(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownCreateNewComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownCreateNewComponent, "ap-dropdown-create-new", never, { "text": { "alias": "text"; "required": false; "isSignal": true; }; "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; }, { "createNew": "createNew"; }, never, never, true, never>;
}

declare class DropdownGroupItemComponent {
    groupLabel: string;
    groupTag?: string;
    selectableGroup: boolean;
    children: NgOption[];
    select: NgSelectComponent;
    disabled: boolean;
    disabledTooltip?: string;
    isGroupIntermediate(): boolean;
    isGroupChecked(): boolean;
    isGroupDisabled(): boolean;
    onGroupClick(event: Event): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownGroupItemComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownGroupItemComponent, "ap-dropdown-group-item", never, { "groupLabel": { "alias": "groupLabel"; "required": true; }; "groupTag": { "alias": "groupTag"; "required": false; }; "selectableGroup": { "alias": "selectableGroup"; "required": false; }; "children": { "alias": "children"; "required": true; }; "select": { "alias": "select"; "required": true; }; "disabled": { "alias": "disabled"; "required": false; }; "disabledTooltip": { "alias": "disabledTooltip"; "required": false; }; }, {}, never, never, true, never>;
}

declare class ApSelectModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<ApSelectModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<ApSelectModule, never, [typeof SelectMultipleDirective, typeof SelectSingleDirective, typeof DropdownItemSingleOneLineComponent, typeof DropdownItemSingleTwoLinesComponent, typeof DropdownItemMultipleOneLineComponent, typeof DropdownItemMultipleTwoLinesComponent, typeof SelectLabelSingleComponent, typeof SelectLabelMultipleComponent, typeof DropdownSearchFormComponent, typeof DropdownCreateNewComponent, typeof DropdownGroupItemComponent, typeof i12.NgSelectModule], [typeof SelectMultipleDirective, typeof SelectSingleDirective, typeof DropdownItemSingleOneLineComponent, typeof DropdownItemSingleTwoLinesComponent, typeof DropdownItemMultipleOneLineComponent, typeof DropdownItemMultipleTwoLinesComponent, typeof SelectLabelSingleComponent, typeof SelectLabelMultipleComponent, typeof DropdownSearchFormComponent, typeof DropdownCreateNewComponent, typeof DropdownGroupItemComponent, typeof i12.NgSelectModule]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<ApSelectModule>;
}

export { ApSelectModule, DropdownCreateNewComponent, DropdownGroupItemComponent, DropdownItemMultipleOneLineComponent, DropdownItemMultipleTwoLinesComponent, DropdownItemSingleOneLineComponent, DropdownItemSingleTwoLinesComponent, DropdownSearchFormComponent, SelectBaseDirective, SelectLabelMultipleComponent, SelectLabelSingleComponent, SelectMultipleDirective, SelectSingleDirective };
export type { SelectLabelMultipleDisplayType, SelectLabelSingleDisplayType };
