import { AfterContentInit, AfterViewInit, ChangeDetectorRef, ElementRef, OnInit, Renderer2, QueryList, NgZone, OnDestroy, DoCheck, InjectionToken } from '@angular/core';
import { LyTheme2, ThemeVariables, StyleCollection, LyClasses, StyleTemplate, StyleRenderer, ThemeRef, WithStyles } from '@alyle/ui';
import { LyLabel } from './label';
import { LyPlaceholder } from './placeholder';
import { LyHint } from './hint';
import { LyPrefix } from './prefix';
import { LySuffix } from './suffix';
import { Subject } from 'rxjs';
import { NgControl, NgForm, FormGroupDirective } from '@angular/forms';
import { LyError } from './error';
import { LyFieldControlBase } from './field-control-base';
import { Platform } from '@angular/cdk/platform';
import { LyDisplayWith } from './display-with';
export interface LyFieldTheme {
    /** Styles for Field Component */
    root?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)> | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);
    appearance?: {
        standard?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)> | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);
        filled?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)> | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);
        outlined?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)> | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);
        [name: string]: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)> | ((classes: LyClasses<typeof STYLES>) => StyleTemplate) | undefined;
    };
}
export interface LyFieldVariables {
    field?: LyFieldTheme;
}
export interface LyFieldDefaultOptions {
    appearance?: string;
    /**
     * Whether the label is floating.
     * false (default): The label will only float when needed
     * true: The label will always be floating
     */
    floatingLabel?: boolean;
    /**
     * Whether the hint will always show.
     * false (default): The hint will only be shown when the text is focused
     * true: The hint will always show
     */
    persistentHint?: boolean;
    /**
     * Floating label size
     * Default: 0.75
     */
    floatingLabelSize?: number;
}
export declare const LY_FIELD_DEFAULT_OPTIONS: InjectionToken<LyFieldDefaultOptions>;
export declare const STYLE_SELECT_ARROW: (className: string) => string;
export declare const STYLES: (theme: ThemeVariables & LyFieldVariables, ref: ThemeRef) => {
    $priority: number;
    $global: (className: string) => string;
    root: () => (className: string) => string;
    animations: () => (className: string) => string;
    container: (className: string) => string;
    fieldset: (className: string) => string;
    fieldsetSpan: (className: string) => string;
    prefix: (className: string) => string;
    infix: (className: string) => string;
    suffix: (className: string) => string;
    labelContainer: (className: string) => string;
    labelSpacingStart: any;
    labelCenter: (className: string) => string;
    labelSpacingEnd: (className: string) => string;
    label: (className: string) => string;
    labelSpan: (className: string) => string;
    isFloatingLabel: any;
    floatingLabel: any;
    placeholder: (className: string) => string;
    focused: any;
    inputNative: (className: string) => string;
    /** Is used to hide the input when `displayWith` is shown */
    _hiddenInput: (className: string) => string;
    displayWith: (className: string) => string;
    hintContainer: (className: string) => string;
    disabled: () => (className: string) => string;
    hint: any;
    error: any;
    errorState: () => (className: string) => string;
    hintAfter: (className: string) => string;
    hintBefore: (className: string) => string;
    selectArrow: () => (className: string) => string;
};
/**
 * @dynamic
 */
export declare class LyField implements WithStyles, OnInit, AfterContentInit, AfterViewInit, OnDestroy {
    private _renderer;
    private _el;
    private _theme;
    private _cd;
    private _ngZone;
    readonly sRenderer: StyleRenderer;
    private _platform;
    private _defaults;
    /**
     * styles
     * @docs-private
     */
    readonly classes: Pick<{
        $priority: string;
        $global: string;
        root: string;
        animations: string;
        container: string;
        fieldset: string;
        fieldsetSpan: string;
        prefix: string;
        infix: string;
        suffix: string;
        labelContainer: string;
        labelSpacingStart: string;
        labelCenter: string;
        labelSpacingEnd: string;
        label: string;
        labelSpan: string;
        isFloatingLabel: string;
        floatingLabel: string;
        placeholder: string;
        focused: string;
        inputNative: string;
        _hiddenInput: string;
        displayWith: string;
        hintContainer: string;
        disabled: string;
        hint: string;
        error: string;
        errorState: string;
        hintAfter: string;
        hintBefore: string;
        selectArrow: string;
    }, "displayWith" | "root" | "animations" | "container" | "fieldset" | "fieldsetSpan" | "prefix" | "infix" | "suffix" | "labelContainer" | "labelSpacingStart" | "labelCenter" | "labelSpacingEnd" | "label" | "labelSpan" | "isFloatingLabel" | "floatingLabel" | "placeholder" | "focused" | "inputNative" | "_hiddenInput" | "hintContainer" | "disabled" | "hint" | "error" | "errorState" | "hintAfter" | "hintBefore" | "selectArrow">;
    protected _appearance: string;
    protected _appearanceClass: string;
    protected _color: string;
    protected _colorClass: string;
    protected _isFloating: boolean;
    protected _floatingLabel: boolean;
    private _destroyed;
    private _fielsetSpanClass;
    private _fullWidth;
    private _fullWidthClass?;
    private _updateFielsetSpanOnStable;
    _container: ElementRef<HTMLDivElement>;
    _labelContainer: ElementRef<HTMLDivElement>;
    _labelContainer2: ElementRef<HTMLDivElement>;
    _labelSpan: ElementRef<HTMLDivElement>;
    _prefixContainer: ElementRef<HTMLDivElement>;
    _suffixContainer: ElementRef<HTMLDivElement>;
    _controlNonStatic?: LyFieldControlBase;
    _controlStatic: LyFieldControlBase<any>;
    get _control(): LyFieldControlBase<any>;
    _placeholderChild: LyPlaceholder;
    _labelChild: LyLabel;
    readonly _displayWithChild: QueryList<LyDisplayWith>;
    _hintChildren: QueryList<LyHint>;
    _prefixChildren: QueryList<LyPrefix>;
    _suffixChildren: QueryList<LySuffix>;
    _errorChildren: QueryList<LyError>;
    get errorState(): boolean;
    get displayWithStatus(): boolean;
    persistentHint: boolean;
    /**
     * Floating label size
     * Default: 0.75
     */
    floatingLabelSize: number | null;
    set fullWidth(val: boolean);
    get fullWidth(): boolean;
    /** Whether the label is floating. */
    set floatingLabel(val: boolean);
    get floatingLabel(): boolean;
    /** Theme color for the component. */
    color: string;
    /** The field appearance style. */
    set appearance(val: string | null);
    onFocus(): void;
    constructor(_renderer: Renderer2, _el: ElementRef, _theme: LyTheme2, _cd: ChangeDetectorRef, _ngZone: NgZone, sRenderer: StyleRenderer, _platform: Platform, _defaults: LyFieldDefaultOptions);
    ngOnInit(): void;
    ngAfterContentInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    _updateFielsetSpan(): void;
    /** @ignore */
    _isLabel(): boolean;
    /** @ignore */
    _isPlaceholder(): boolean;
    /** @ignore */
    _isEmpty(): boolean;
    private _updateFloatingLabel;
    private _updateDisplayWith;
    private _markForCheck;
    _getHostElement(): any;
}
export declare class LyNativeControl implements LyFieldControlBase, OnInit, DoCheck, OnDestroy {
    private _theme;
    readonly sRenderer: StyleRenderer;
    private _el;
    private _renderer;
    private _field;
    /** @docs-private */
    ngControl: NgControl;
    private _parentForm;
    private _parentFormGroup;
    protected _disabled: boolean;
    protected _required: boolean;
    protected _placeholder: string;
    readonly stateChanges: Subject<void>;
    private _hasDisabledClass?;
    private _errorClass?;
    private _cursorClass;
    private _isSelectInput;
    private _form;
    _focused: boolean;
    errorState: boolean;
    _onInput(): void;
    _onBlur(): void;
    _onFocus(): void;
    /** @ignore */
    set value(val: string);
    get value(): string;
    /** Whether the input is disabled. */
    set disabled(val: boolean);
    get disabled(): boolean;
    set required(value: boolean);
    get required(): boolean;
    set placeholder(val: string);
    get placeholder(): string;
    get focused(): boolean;
    get empty(): boolean;
    get floatingLabel(): boolean;
    constructor(_theme: LyTheme2, sRenderer: StyleRenderer, _el: ElementRef<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>, _renderer: Renderer2, _field: LyField, 
    /** @docs-private */
    ngControl: NgControl, _parentForm: NgForm, _parentFormGroup: FormGroupDirective);
    ngOnInit(): void;
    ngDoCheck(): void;
    ngOnDestroy(): void;
    /** @docs-private */
    onContainerClick(_e: MouseEvent): void;
    /** Focuses the input. */
    focus(): void;
    _getHostElement(): HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;
    private _hasLabelSelectionOption;
}
