import { AfterContentInit, AfterViewInit, ChangeDetectorRef, ComponentRef, ElementRef, EventEmitter, OnDestroy, QueryList, Renderer2, NgZone } from '@angular/core';
import { NgClass } from '@angular/common';
import { ControlValueAccessor } from '@angular/forms';
import { Subject, BehaviorSubject } from 'rxjs';
import { Overlay, OverlayPositionBuilder, OverlayRef, PositionStrategy } from '@angular/cdk/overlay';
import { FocusableOption, FocusKeyManager, FocusMonitor } from '@angular/cdk/a11y';
import { ROptionComponent } from '../option/option.component';
import { CdkPortal } from '@angular/cdk/portal';
import { RTriggerStrategyBuilderService } from '../../../cdk/overlay/overlay-trigger';
export declare type RSelectCompareFunction<T = any> = (v1: any, v2: any) => boolean;
export declare type RSelectAppearance = 'outline' | 'filled' | 'hero';
export declare type RFocusableOption = FocusableOption;
export declare class RFocusKeyManager<T> extends FocusKeyManager<T> {
}
export declare class RFocusKeyManagerFactoryService<T extends RFocusableOption> {
    create(items: QueryList<T> | T[]): RFocusKeyManager<T>;
}
export declare class RSelectLabelComponent {
}
export declare function rSelectFormFieldControlConfigFactory(): any;
export declare class RSelectComponent implements AfterViewInit, AfterContentInit, OnDestroy, ControlValueAccessor {
    protected document: any;
    protected overlay: Overlay;
    protected hostRef: ElementRef<HTMLElement>;
    protected positionBuilder: OverlayPositionBuilder;
    protected cd: ChangeDetectorRef;
    protected triggerStrategyBuilder: RTriggerStrategyBuilderService;
    protected focusKeyManagerFactoryService: RFocusKeyManagerFactoryService<ROptionComponent>;
    protected focusMonitor: FocusMonitor;
    protected renderer: Renderer2;
    protected zone: NgZone;
    focused$: BehaviorSubject<boolean>;
    positionStrategy: PositionStrategy;
    /**
     * Select size, available sizes:
     * `tiny`, `small`, `medium` (default), `large`, `giant`
     */
    size: string;
    /**
     * Select status (adds specific styles):
     * `basic`, `primary`, `info`, `success`, `warning`, `danger`, `control`
     */
    status: string;
    /**
     * Select shapes: `rectangle` (default), `round`, `semi-round`
     */
    shape: string;
    /**
     * Select appearances: `outline` (default), `filled`, `hero`
     */
    appearance: RSelectAppearance;
    /**
     * Specifies class to be set on `r-option`s container (`r-option-list`)
     */
    optionsListClass: NgClass['ngClass'];
    /**
     * Specifies class for the overlay panel with options
     */
    optionsPanelClass: string | string[];
    /**
     * Adds `outline` styles
     */
    get outline(): boolean;
    set outline(value: boolean);
    static ngAcceptInputType_outline: any;
    /**
     * Adds `filled` styles
     */
    get filled(): boolean;
    set filled(value: boolean);
    static ngAcceptInputType_filled: any;
    /**
     * Adds `hero` styles
     */
    get hero(): boolean;
    set hero(value: boolean);
    static ngAcceptInputType_hero: any;
    /**
     * Disables the select
     */
    get disabled(): boolean;
    set disabled(value: boolean);
    protected _disabled: boolean;
    static ngAcceptInputType_disabled: any;
    /**
     * If set element will fill its container
     */
    get fullWidth(): boolean;
    set fullWidth(value: boolean);
    protected _fullWidth: boolean;
    static ngAcceptInputType_fullWidth: any;
    /**
     * Renders select placeholder if nothing selected.
     */
    placeholder: string;
    /**
     * A function to compare option value with selected value.
     * By default, values are compared with strict equality (`===`).
     */
    get compareWith(): RSelectCompareFunction;
    set compareWith(fn: RSelectCompareFunction);
    protected _compareWith: RSelectCompareFunction;
    /**
     * Accepts selected item or array of selected items.
     */
    set selected(value: any);
    get selected(): any;
    /**
     * Gives capability just write `multiple` over the element.
     */
    get multiple(): boolean;
    set multiple(value: boolean);
    protected _multiple: boolean;
    static ngAcceptInputType_multiple: any;
    /**
     * Determines options overlay offset (in pixels).
     **/
    optionsOverlayOffset: number;
    /**
     * Determines options overlay scroll strategy.
     **/
    scrollStrategy: string;
    /**
     * Will be emitted when selected value changes.
     */
    selectedChange: EventEmitter<any>;
    /**
     * List of `ROptionComponent`'s components passed as content.
     * TODO maybe it would be better provide wrapper
     */
    options: QueryList<ROptionComponent>;
    /**
     * Custom select label, will be rendered instead of default enumeration with coma.
     */
    customLabel: any;
    /**
     * RCard with options content.
     */
    portal: CdkPortal;
    button: ElementRef<HTMLButtonElement>;
    /**
     * Determines is select opened.
     */
    get isOpen(): boolean;
    /**
     * List of selected options.
     */
    selectionModel: ROptionComponent[];
    /**
     * Current overlay position because of we have to toggle overlayPosition
     * in [ngClass] direction and this directive can use only string.
     */
    overlayPosition: string;
    protected ref: OverlayRef;
    protected triggerStrategy: any;
    protected alive: boolean;
    protected destroy$: Subject<void>;
    protected keyManager: FocusKeyManager<ROptionComponent>;
    /**
     * If a user assigns value before content r-options's rendered the value will be putted in this variable.
     * And then applied after content rendered.
     * Only the last value will be applied.
     */
    protected queue: any;
    /**
     * Function passed through control value accessor to propagate changes.
     */
    protected onChange: Function;
    protected onTouched: Function;
    constructor(document: any, overlay: Overlay, hostRef: ElementRef<HTMLElement>, positionBuilder: OverlayPositionBuilder, cd: ChangeDetectorRef, triggerStrategyBuilder: RTriggerStrategyBuilderService, focusKeyManagerFactoryService: RFocusKeyManagerFactoryService<ROptionComponent>, focusMonitor: FocusMonitor, renderer: Renderer2, zone: NgZone);
    /**
     * Determines is select hidden.
     */
    get isHidden(): boolean;
    /**
     * Returns width of the select button.
     */
    get hostWidth(): number;
    get selectButtonClasses(): string[];
    /**
     * Content rendered in the label.
     */
    get selectionView(): any;
    ngAfterContentInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    show(): void;
    hide(): void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    setDisabledState(isDisabled: boolean): void;
    writeValue(value: any): void;
    /**
     * Selects option or clear all selected options if value is null.
     */
    protected handleOptionClick(option: ROptionComponent): void;
    /**
     * Deselect all selected options.
     */
    protected reset(): void;
    /**
     * Determines how to select option as multiple or single.
     */
    protected selectOption(option: ROptionComponent): void;
    /**
     * Select single option.
     */
    protected handleSingleSelect(option: ROptionComponent): void;
    /**
     * Select for multiple options.
     */
    protected handleMultipleSelect(option: ROptionComponent): void;
    protected attachToOverlay(): void;
    protected setActiveOption(): void;
    protected createOverlay(): void;
    protected createKeyManager(): void;
    protected createPositionStrategy(): import("@angular/cdk/overlay").FlexibleConnectedPositionStrategy;
    protected createScrollStrategy(): any;
    protected createTriggerStrategy(): import("../../../cdk/overlay/overlay-trigger").RTriggerStrategy;
    protected subscribeOnTriggers(): void;
    protected subscribeOnOptionClick(): void;
    protected subscribeOnOverlayKeys(): void;
    protected subscribeOnButtonFocus(): void;
    protected getContainer(): ComponentRef<any>;
    /**
     * Propagate selected value.
     */
    protected emitSelected(selected: any): void;
    /**
     * Set selected value in model.
     */
    protected setSelection(value: any): void;
    /**
     * Selects value.
     */
    protected selectValue(value: any): void;
    /**
     * Sets touched if focus moved outside of button and overlay,
     * ignoring the case when focus moved to options overlay.
     */
    trySetTouched(): void;
    protected isClickedWithinComponent($event: Event): boolean;
    protected canSelectValue(): boolean;
    get tiny(): boolean;
    get small(): boolean;
    get medium(): boolean;
    get large(): boolean;
    get giant(): boolean;
    get primary(): boolean;
    get info(): boolean;
    get success(): boolean;
    get warning(): boolean;
    get danger(): boolean;
    get basic(): boolean;
    get control(): boolean;
    get rectangle(): boolean;
    get round(): boolean;
    get semiRound(): boolean;
}
