import { ElementRef, EventEmitter, OnInit, QueryList, SimpleChanges } from "@angular/core";
import { BehaviorSubject } from "rxjs";
import { DxcSelectHelper } from "./dxc-select.helper";
import { Option } from "./interfaces/option.interface";
import { OptionGroup } from "./interfaces/optionGroup.interface";
import { SelectService } from "./services/select.service";
import { VisualOptionFocus } from "./interfaces/visualFocus.interface";
import { ControlValueAccessor } from "@angular/forms";
import { SelectProperties, Space, Spacing, EmittedValue } from "./dxc-select.types";
import * as i0 from "@angular/core";
export declare class DxcSelectComponent implements OnInit, ControlValueAccessor {
    private helper;
    service: SelectService;
    private ref;
    className: any;
    /**
     * Text to be placed above the select.
     */
    label: string;
    /**
     * Name attribute of the input element. This attribute will allow users
     * to find the component's value during the submit event. In this event,
     * the component's value will always be a regular string, for both single
     * and multiple selection modes, been in the first one a single option
     * value and in the multiple variant more than one option value,
     * separated by commas.
     */
    name: string;
    /**
     * Value of the select. If undefined, the component will be uncontrolled
     * and the value will be managed internally by the component.
     */
    value: string | string[];
    /**
     * Helper text to be placed above the select.
     */
    defaultValue: string | string[];
    helperText: string;
    /**
     * If true, enables search functionality.
     */
    get searchable(): boolean;
    set searchable(value: boolean);
    private _searchable;
    /**
     * If true, the component will be disabled.
     */
    get disabled(): boolean;
    set disabled(value: boolean);
    private _disabled;
    /**
     * If true, the select component will support multiple selected options.
     * In that case, value will be an array of strings with each selected option value.
     */
    get multiple(): boolean;
    set multiple(value: boolean);
    private _multiple;
    /**
     * If true, the select will be optional, showing (Optional) next to the label
     * and adding a default first option with an empty string as value,
     * been the placeholder (if defined) its label.
     * Otherwise, the field will be considered required and an error will be passed
     * as a parameter to the OnBlur and onChange functions if an option wasn't selected.
     */
    get optional(): boolean;
    set optional(value: boolean);
    private _optional;
    /**
     * If it is defined, the component will change its appearance, showing the error below the select component.
     * If it is not defined, the error messages will be managed internally, but never displayed on its own.
     */
    error: string;
    /**
     * Text to be put as placeholder of the select.
     */
    placeholder: string;
    /**
     * Size of the margin to be applied to the component ('xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge').
     * You can pass an object with 'top', 'bottom', 'left' and 'right' properties in order to specify different margin sizes.
     */
    margin: Space | Spacing;
    /**
     * Value of the tabindex attribute.
     */
    tabIndexValue: number;
    /**
     * Size of the component.
     */
    size: "small" | "medium" | "large" | "fillParent";
    /**
     * An array of objects representing the selectable options.
     */
    options: Option[] | OptionGroup[];
    defaultInputs: BehaviorSubject<SelectProperties>;
    /**
     * This event will be emitted when the user selects an option. An object including the new value (or values)
     * and the error (if the value selected is not valid) will be passed to this function.
     */
    onChange: EventEmitter<EmittedValue>;
    /**
     * This event will be emitted when the select loses the focus. An object including the value (or values)
     * and the error (if the value selected is not valid) will be passed to this function.
     */
    onBlur: EventEmitter<EmittedValue>;
    id: string;
    optionsListId: string;
    selectLabelId: string;
    isOpened: boolean;
    inputValue: string;
    isInputVisible: boolean;
    controlled: boolean;
    focusedOption: VisualOptionFocus;
    optionalOption: Option;
    formValues: string | string[];
    activeDescendant: string;
    isDirty: boolean;
    isNotSelectable: boolean;
    containerRef: ElementRef;
    optionsRef: ElementRef;
    inputRef: ElementRef;
    optionGroupRef: QueryList<ElementRef>;
    clickout(event: any): void;
    constructor(helper: DxcSelectHelper, service: SelectService, ref: ElementRef);
    onTouched: () => void;
    onChangeRegister: (val: any) => void;
    writeValue(val: any): void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    setDisabledState?(isDisabled: boolean): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngOnInit(): void;
    private setActiveDescendantAttr;
    handleOptionMouseDown(event: any): void;
    handleOptionClick(option: any, event: any): void;
    handleOnFocusOut(): void;
    focusContainer(event: any, isOptionClicked: boolean): void;
    labelClick(event: any): void;
    removeSelectedValues(event: any): void;
    isValueSelected: (value: any) => boolean;
    isFocused: (indexGroup: any, indexOption: any) => boolean;
    setDefaultValues(): void;
    findOptionByValue(value: any): any;
    private findOption;
    handleSelectOpen(): void;
    private handleScrollSelected;
    private setFocusSelectedOption;
    private setFocusSelectedOptionGroup;
    private scrollByIndex;
    handleOnChangeInput(value: any): void;
    handlePropagation(event: any): void;
    handleClearInput(event: any): void;
    private setInputValue;
    private showInput;
    handleBlurInput(): void;
    private setPlaceholderOptional;
    setPlaceholder(): any;
    handleOnKeyDown(event: any): void;
    private setActualSelectedFocus;
    handleEnterKey(event: any): void;
    setInitialFocusOption(): void;
    hasOptional(): boolean;
    private isRequired;
    clickNotSelectable(): void;
    setDisplayValueContainer(): boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<DxcSelectComponent, [null, { self: true; }, null]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DxcSelectComponent, "dxc-select", never, { "label": "label"; "name": "name"; "value": "value"; "defaultValue": "defaultValue"; "helperText": "helperText"; "searchable": "searchable"; "disabled": "disabled"; "multiple": "multiple"; "optional": "optional"; "error": "error"; "placeholder": "placeholder"; "margin": "margin"; "tabIndexValue": "tabIndexValue"; "size": "size"; "options": "options"; }, { "onChange": "onChange"; "onBlur": "onBlur"; }, never, never>;
}
//# sourceMappingURL=dxc-select.component.d.ts.map