import { EventEmitter, ElementRef, AfterViewInit, ChangeDetectorRef, Renderer2 } from '@angular/core';
import { ControlValueAccessor, NgControl } from '@angular/forms';
import { IBaseEventArgs } from '../core/utils';
import { EditorProvider } from '../core/edit-provider';
import { Subject } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "../directives/ripple/ripple.directive";
export declare const SwitchLabelPosition: {
    BEFORE: "before";
    AFTER: "after";
};
export type SwitchLabelPosition = (typeof SwitchLabelPosition)[keyof typeof SwitchLabelPosition];
export interface IChangeSwitchEventArgs extends IBaseEventArgs {
    checked: boolean;
    switch: IgxSwitchComponent;
}
/**
 *
 * The Switch component is a binary choice selection component.
 *
 * @igxModule IgxSwitchModule
 *
 * @igxTheme igx-switch-theme, igx-tooltip-theme
 *
 * @igxKeywords switch, states, tooltip
 *
 * @igxGroup Data Entry & Display
 *
 * @remarks
 *
 * The Ignite UI Switch lets the user toggle between on/off or true/false states.
 *
 * @example
 * ```html
 * <igx-switch [checked]="true">
 *   Simple switch
 * </igx-switch>
 * ```
 */
export declare class IgxSwitchComponent implements ControlValueAccessor, EditorProvider, AfterViewInit {
    private cdr;
    protected renderer: Renderer2;
    ngControl: NgControl;
    private static ngAcceptInputType_required;
    private static ngAcceptInputType_disabled;
    /**
     * @hidden
     * @internal
     */
    destroy$: Subject<boolean>;
    /**
     * Returns a reference to the native checkbox element.
     *
     * @example
     * ```typescript
     * let checkboxElement =  this.switch.nativeCheckbox;
     * ```
     */
    nativeCheckbox: ElementRef;
    /**
     * Returns reference to the native label element.
     *
     * @example
     * ```typescript
     * let labelElement =  this.switch.nativeLabel;
     * ```
     */
    nativeLabel: ElementRef;
    /**
     * Returns reference to the `nativeElement` of the igx-switch.
     *
     * @example
     * ```typescript
     * let nativeElement = this.switch.nativeElement;
     * ```
     */
    get nativeElement(): any;
    /**
     * Returns reference to the label placeholder element.
     *
     * @example
     * ```typescript
     * let labelPlaceholder = this.switch.placeholderLabel;
     * ```
     */
    placeholderLabel: ElementRef;
    /**
     * Sets/gets the `id` of the switch component.
     * If not set, the `id` of the first switch component will be `"igx-switch-0"`.
     *
     * @example
     * ```html
     * <igx-switch id="my-first-switch"></igx-switch>
     * ```
     */
    id: string;
    /**
     * Sets/gets the id of the `label` element of the switch component.
     * If not set, the label of the first switch component will have value `"igx-switch-0-label"`.
     *
     * @example
     * ```html
     * <igx-switch labelId="Label1"></igx-switch>
     * ```
     */
    labelId: string;
    /**
     * Sets/gets the `value` attribute of the switch component.
     *
     * @example
     * ```html
     * <igx-switch [value]="switchValue"></igx-switch>
     * ```
     */
    value: any;
    /**
     * Sets/gets the `name` attribute of the switch component.
     *
     * @example
     * ```html
     * <igx-switch name="Switch1"></igx-switch>
     * ```
     */
    name: string;
    /**
     * Sets/gets the value of the `tabindex` attribute.
     *
     * @example
     * ```html
     * <igx-switch [tabindex]="1"></igx-switch>
     * ```
     */
    tabindex: number;
    /**
     * Sets/gets the position of the `label` in the switch component.
     * If not set, `labelPosition` will have value `"after"`.
     *
     * @example
     * ```html
     * <igx-switch labelPosition="before"></igx-switch>
     * ```
     */
    labelPosition: SwitchLabelPosition | string;
    /**
     * Enables/Disables the ripple effect
     * If not set, `disableRipple` will have value `false`.
     *
     * @example
     * ```html
     * <igx-switch [disableRipple]="true"></igx-switch>
     * ```
     */
    disableRipple: boolean;
    /**
     * Sets/gets whether switch is required.
     * If not set, `required` will have value `false`.
     *
     * @example
     * ```html
     * <igx-switch required></igx-switch>
     * ```
     */
    get required(): boolean;
    set required(value: boolean);
    /**
     * Sets/gets the `aria-labelledBy` attribute.
     * If not set, the  value of `aria-labelledBy` will be equal to the value of `labelId` attribute.
     *
     * @example
     * ```html
     * <igx-switch aria-labelledby = "Label1"></igx-switch>
     * ```
     */
    ariaLabelledBy: string;
    /**
     * Sets/gets the value of the `aria-label` attribute.
     *
     * @example
     * ```html
     * <igx-switch aria-label = "Label1"></igx-switch>
     * ```
     */
    ariaLabel: string | null;
    /**
     * An event that is emitted after the switch state is changed.
     * Provides references to the `IgxSwitchComponent` and the `checked` property as event arguments.
     */
    readonly change: EventEmitter<IChangeSwitchEventArgs>;
    /**
     * Returns the class of the switch component.
     *
     * @example
     * ```typescript
     * let switchClass = this.switch.cssClass;
     * ```
     */
    cssClass: string;
    /**
     * Sets/gets whether the switch is on or off.
     * Default value is 'false'.
     *
     * @example
     * ```html
     *  <igx-switch [checked]="true"></igx-switch>
     * ```
     */
    set checked(value: boolean);
    get checked(): boolean;
    /**
     * Sets/gets the `disabled` attribute.
     * Default value is `false`.
     *
     * @example
     * ```html
     * <igx-switch disabled><igx-switch>
     * ```
     */
    get disabled(): boolean;
    set disabled(value: boolean);
    /**
     * Sets/gets whether the switch component is invalid.
     * Default value is `false`.
     *
     * @example
     * ```html
     * <igx-switch invalid></igx-switch>
     * ```
     * ```typescript
     * let isInvalid = this.switch.invalid;
     * ```
     */
    get invalid(): boolean;
    set invalid(value: boolean);
    /**
     * Sets/gets whether the switch component is on focus.
     * Default value is `false`.
     *
     * @example
     * ```typescript
     * this.switch.focused = true;
     * ```
     */
    focused: boolean;
    /**
     * @hidden
     * @internal
     */
    inputId: string;
    /**
     * @hidden
     * @internal
     */
    private _checked;
    /**
     * @hidden
     * @internal
     */
    private _required;
    /**
     * @hidden
     * @internal
     */
    private _disabled;
    /**
     * @hidden
     * @internal
     */
    private _invalid;
    /**
     * @hidden
     * @internal
     */
    private _onTouchedCallback;
    /**
     * @hidden
     * @internal
     */
    private _onChangeCallback;
    constructor(cdr: ChangeDetectorRef, renderer: Renderer2, ngControl: NgControl);
    /**
     * @hidden
     * @internal
    */
    ngAfterViewInit(): void;
    /**
     * @hidden
     * @internal
     */
    onKeyUp(event: KeyboardEvent): void;
    /**
     * @hidden
     * @internal
     */
    _onSwitchClick(): void;
    /**
     * @hidden
     * @internal
     */
    _onSwitchChange(event: Event): void;
    /**
     * @hidden
     * @internal
     */
    onBlur(): void;
    /**
     * @hidden
     * @internal
     */
    writeValue(value: boolean): void;
    /**
     * @hidden
     * @internal
     */
    getEditElement(): any;
    /**
     * @hidden
     * @internal
     */
    get labelClass(): string;
    /**
     * @hidden
     * @internal
     */
    registerOnChange(fn: (_: any) => void): void;
    /**
     * @hidden
     * @internal
     */
    registerOnTouched(fn: () => void): void;
    /**
     * @hidden
     * @internal
     */
    setDisabledState(isDisabled: boolean): void;
    /**
     * @hidden
     * @internal
     */
    protected updateValidityState(): void;
    /**
     * A function to assign a native validity property of a swicth.
     * This should be used when there's no ngControl
     *
     * @hidden
     * @internal
     */
    private checkNativeValidity;
    static ɵfac: i0.ɵɵFactoryDeclaration<IgxSwitchComponent, [null, null, { optional: true; self: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<IgxSwitchComponent, "igx-switch", never, { "id": "id"; "labelId": "labelId"; "value": "value"; "name": "name"; "tabindex": "tabindex"; "labelPosition": "labelPosition"; "disableRipple": "disableRipple"; "required": "required"; "ariaLabelledBy": "aria-labelledby"; "ariaLabel": "aria-label"; "checked": "checked"; "disabled": "disabled"; "invalid": "invalid"; }, { "change": "change"; }, never, ["*"], false, never>;
}
/**
 * @hidden
 */
export declare class IgxSwitchModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<IgxSwitchModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<IgxSwitchModule, [typeof IgxSwitchComponent], [typeof i1.IgxRippleModule], [typeof IgxSwitchComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<IgxSwitchModule>;
}
