import { ChangeDetectorRef, DoCheck, ElementRef, OnDestroy, OnInit, Renderer2, TemplateRef, NgZone, OnChanges, QueryList, AfterContentInit, EventEmitter } from '@angular/core';
import { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';
import { LyField, LyFieldControlBase } from '@alyle/ui/field';
import { LyOverlay, LySelectionModel, LyTheme2, LyRippleService, StyleCollection, LyClasses, StyleTemplate, ThemeRef } from '@alyle/ui';
import { Subject } from 'rxjs';
export interface LySelectTheme {
    /** Styles for Select Component */
    root?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)> | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);
}
export interface LySelectVariables {
    select?: LySelectTheme;
}
export declare const STYLES: (theme: import("@alyle/ui/alyle-ui").LyStyleUtils & import("@alyle/ui/alyle-ui").ThemeConfig & LySelectVariables, ref: ThemeRef) => {
    $priority: number;
    root: () => (className: string) => string;
    container: {
        background: import("@alyle/ui/color/color").Color;
        borderRadius: string;
        boxShadow: string;
        display: string;
        transformOrigin: string;
        pointerEvents: string;
        overflow: string;
        maxHeight: string;
    };
    valueText: {
        overflow: string;
        textOverflow: string;
        whiteSpace: string;
    };
    option: {
        display: string;
        fontFamily: string;
        color: import("@alyle/ui/color/color").Color;
        '-webkit-tap-highlight-color': string;
        backgroundColor: string;
        border: number;
        padding: string;
        margin: number;
        outline: string;
        boxSizing: string;
        position: string;
        justifyContent: string;
        alignItems: string;
        alignContent: string;
        '-webkit-user-select': string;
        '-moz-user-select': string;
        '-ms-user-select': string;
        userSelect: string;
        lineHeight: string;
        height: string;
        cursor: string;
    };
    optionText: {
        'ly-checkbox ~ &': {
            marginBefore: string;
            display: string;
            alignItems: string;
            alignContent: string;
        };
    };
    content: {
        padding: number;
        display: string;
        justifyContent: string;
        alignItems: string;
        alignContent: string;
        width: string;
        height: string;
        boxSizing: string;
    };
};
/** Change event object that is emitted when the select value has changed. */
export declare class LySelectChange {
    /** Reference to the select that emitted the change event. */
    source: LySelect;
    /** Current value of the select that emitted the event. */
    value: any;
    constructor(
    /** Reference to the select that emitted the change event. */
    source: LySelect, 
    /** Current value of the select that emitted the event. */
    value: any);
}
/** @docs-private */
export declare class LySelectBase {
}
/** @docs-private */
export declare const LySelectMixinBase: import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/alyle-ui").HasTabIndex> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/alyle-ui").CanDisable>;
/**
 * Allows the user to customize the trigger that is displayed when the select has a value.
 */
export declare class LySelectTrigger {
}
export declare class LySelect extends LySelectMixinBase implements ControlValueAccessor, LyFieldControlBase, OnInit, DoCheck, AfterContentInit, OnDestroy {
    private _theme;
    private _renderer;
    private _el;
    private _overlay;
    /** @internal */
    _field: LyField;
    /** @internal */
    _cd: ChangeDetectorRef;
    private _ngZone;
    /** @docs-private */
    ngControl: NgControl;
    private _parentForm;
    private _parentFormGroup;
    /** @docs-private */
    readonly classes: Pick<{
        $priority: string;
        root: string;
        container: string;
        valueText: string;
        option: string;
        optionText: string;
        content: string;
    }, "root" | "container" | "valueText" | "option" | "optionText" | "content">;
    /** @internal */
    _selectionModel: LySelectionModel<LyOption>;
    /** @internal */
    _value: any;
    private _overlayRef;
    protected _disabled: boolean;
    protected _required: boolean;
    protected _placeholder: string;
    readonly stateChanges: Subject<void>;
    private _hasDisabledClass?;
    private _errorClass?;
    private _form;
    private _multiple;
    private _opened;
    private _valueKey;
    private _valueKeyFn;
    _focused: boolean;
    errorState: boolean;
    private _cursorClass;
    /** Emits whenever the component is destroyed. */
    private readonly _destroy;
    templateRef: TemplateRef<any>;
    valueTextDivRef: ElementRef<HTMLDivElement>;
    /** @internal */
    _options: QueryList<LyOption>;
    options: QueryList<LyOption>;
    customTrigger: LySelectTrigger;
    /** Event emitted when the selected value has been changed by the user. */
    readonly selectionChange: EventEmitter<LySelectChange>;
    /**
     * Event that emits whenever the raw value of the select changes. This is here primarily
     * to facilitate the two-way binding for the `value` input.
     * @docs-private
     */
    readonly valueChange: EventEmitter<any>;
    /**
     * The registered callback function called when a change event occurs on the input element.
     */
    onChange: (_: any) => void;
    /**
     * The registered callback function called when a blur event occurs on the input element.
     */
    onTouched: () => void;
    _onBlur(): void;
    _onFocus(): void;
    /** @internal */
    _endAnimation(e: any): void;
    /** @docs-private */
    set value(val: any);
    get value(): any;
    /** Whether the input is disabled. */
    set disabled(val: boolean);
    get disabled(): boolean;
    set required(value: boolean);
    get required(): boolean;
    set multiple(value: boolean);
    get multiple(): boolean;
    set valueKey(fn: (opt: unknown) => unknown);
    get valueKey(): (opt: unknown) => unknown;
    set placeholder(val: string);
    get placeholder(): string;
    get focused(): boolean;
    get empty(): boolean;
    get floatingLabel(): boolean;
    /** The value displayed in the trigger. */
    get triggerValue(): string;
    /** Current selecteds */
    get selected(): any;
    constructor(_theme: LyTheme2, _renderer: Renderer2, _el: ElementRef, _overlay: LyOverlay, 
    /** @internal */
    _field: LyField, 
    /** @internal */
    _cd: ChangeDetectorRef, _ngZone: NgZone, 
    /** @docs-private */
    ngControl: NgControl, _parentForm: NgForm, _parentFormGroup: FormGroupDirective);
    ngOnInit(): void;
    ngDoCheck(): void;
    ngAfterContentInit(): void;
    ngOnDestroy(): void;
    open(): void;
    close(): void;
    /** @docs-private */
    onContainerClick(): void;
    /** Focuses the input. */
    focus(): void;
    _getHostElement(): any;
    /**
     * Sets the "value" property on the input element.
     *
     * @param value The checked value
     */
    writeValue(value: any): void;
    /**
     * Registers a function called when the control value changes.
     *
     * @param fn The callback function
     */
    registerOnChange(fn: (value: any) => any): void;
    /**
     * Registers a function called when the control is touched.
     *
     * @param fn The callback function
     */
    registerOnTouched(fn: () => any): void;
    /**
     * Disables the select. Part of the ControlValueAccessor interface required
     * to integrate with Angular's core forms API.
     *
     * @param isDisabled Sets whether the component is disabled.
     */
    setDisabledState(isDisabled: boolean): void;
    private _updatePlacement;
}
/** @docs-private */
export declare class LyOptionBase {
    _theme: LyTheme2;
    _ngZone: NgZone;
    constructor(_theme: LyTheme2, _ngZone: NgZone);
}
/** @docs-private */
export declare const LyOptionMixinBase: import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/build-common-behaviors").CanStyleUpdater> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/bg").CanBg> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/color").CanColor> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/raised").CanRaised> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/alyle-ui").CanDisable> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/outlined").CanOutlined> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/elevation").CanElevation> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/shadow-color").CanShadowColor> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/disable-ripple").CanDisableRipple> & typeof LyOptionBase;
export declare class LyOption extends LyOptionMixinBase implements OnInit, OnChanges {
    _select: LySelect;
    private _el;
    /** @internal */
    _rippleService: LyRippleService;
    /** @internal */
    _cd: ChangeDetectorRef;
    /** @docs-private */
    readonly classes: Pick<{
        $priority: string;
        root: string;
        container: string;
        valueText: string;
        option: string;
        optionText: string;
        content: string;
    }, "root" | "container" | "valueText" | "option" | "optionText" | "content">;
    private _value;
    _rippleContainer: ElementRef;
    _onClick(): void;
    /**
     * Tracks simple string values bound to the option element.
     */
    set value(value: any);
    get value(): any;
    /** The displayed value of the option. */
    get viewValue(): string;
    /** The color of Select */
    get _color(): string;
    get isSelected(): boolean;
    constructor(/** @internal */ _select: LySelect, _el: ElementRef, 
    /** @internal */
    _rippleService: LyRippleService, _renderer: Renderer2, _theme: LyTheme2, 
    /** @internal */
    _cd: ChangeDetectorRef, _ngZone: NgZone);
    ngOnInit(): void;
    ngOnChanges(): void;
    select(): void;
    toggle(): void;
    /** @internal */
    _getHostElement(): any;
}
