import * as _koalarx_ui_shared_components_input_field_select from '@koalarx/ui/shared/components/input-field/select';
import * as _angular_core from '@angular/core';
import { ResourceRef, Signal, OnInit, ApplicationRef, Injector, ElementRef } from '@angular/core';
import { InputFieldBase } from '@koalarx/ui/shared/components/input-field';

interface SelectDataOptionsFnParams {
    filter?: string | null;
    currentValue?: any | null;
    internalFilter?: string | null;
}
type SelectValue = string | number | boolean | null;
interface SelectOption<TData = any> {
    label: string;
    value: SelectValue;
    description?: string;
    data?: TData;
}
type SelectList<TData = any> = SelectOption<TData>[];
type SelectDataOptionsFn = (data: Signal<SelectDataOptionsFnParams>) => ResourceRef<SelectList>;
type SelectDataOptions = SelectDataOptionsFn | ResourceRef<SelectList> | Signal<SelectList> | SelectList;
interface OptionsResource {
    onDemand?: ResourceRef<SelectList>;
    onServer?: ResourceRef<SelectList>;
    inMemory?: SelectList;
    inMemoryWithLoading?: Signal<SelectList>;
}

declare class Select extends InputFieldBase implements OnInit {
    readonly appRef: ApplicationRef;
    readonly injector: Injector;
    readonly selectField: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
    readonly optionsResource: _angular_core.WritableSignal<OptionsResource | null>;
    readonly optionList: _angular_core.WritableSignal<SelectList>;
    readonly selectedOptions: _angular_core.WritableSignal<SelectList>;
    readonly isLoading: _angular_core.WritableSignal<boolean>;
    readonly requestOptionsParams: _angular_core.WritableSignal<SelectDataOptionsFnParams>;
    readonly translations: {
        required: string;
        invalidEmail: string;
        invalidMinLength: (requiredLength: number) => string;
        invalidCPF: string;
        invalidCNPJ: string;
        invalidURL: string;
        invalidPasswordHasSpecialCharacters: string;
        invalidPasswordHasLowercase: string;
        invalidPasswordHasUppercase: string;
        invalidPasswordHasNumber: string;
        invalidConfirmPassword: string;
        selectTypeSearch: string;
    };
    readonly supportsExperimentalSelect: boolean;
    readonly hasValue: _angular_core.WritableSignal<boolean>;
    filter: _angular_core.ModelSignal<string | undefined>;
    filteredValue: _angular_core.WritableSignal<string | null>;
    options: _angular_core.InputSignal<SelectDataOptions>;
    internalFilter: _angular_core.InputSignal<string | null>;
    withoutFilter: _angular_core.InputSignalWithTransform<boolean, unknown>;
    multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
    selectedItem: _angular_core.OutputEmitterRef<any>;
    get selectElement(): HTMLDivElement;
    constructor();
    ngOnInit(): void;
    applyFilter(options: SelectList): _koalarx_ui_shared_components_input_field_select.SelectOption<any>[];
    setValue(event: Event): void;
    clear(event: MouseEvent): void;
    removeOption(event: MouseEvent): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<Select, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<Select, "kl-select", never, { "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "internalFilter": { "alias": "internalFilter"; "required": false; "isSignal": true; }; "withoutFilter": { "alias": "withoutFilter"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; }, { "filter": "filterChange"; "selectedItem": "selectedItem"; }, never, ["[errors]"], true, never>;
}

declare class SelectBuilder {
    onDemand(config: SelectDataOptionsFn): SelectDataOptionsFn;
    onServer(config: ResourceRef<SelectList>): ResourceRef<SelectList>;
    inMemory(config: SelectList): SelectList;
    inMemoryWithLoading(config: Signal<SelectList>): Signal<SelectList>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectBuilder, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<SelectBuilder>;
}

export { Select, SelectBuilder };
export type { OptionsResource, SelectDataOptions, SelectDataOptionsFn, SelectDataOptionsFnParams, SelectList, SelectOption, SelectValue };
