import { BooleanInput } from '@angular/cdk/coercion';
import { ChangeDetectorRef, ElementRef, OnInit, TemplateRef } from '@angular/core';
import { ControlValueAccessor, NgControl } from '@angular/forms';
import { Destroy } from '@deja-js/component/core';
import { Position } from '@deja-js/component/core/graphics';
import * as i0 from "@angular/core";
export declare enum ClockwiseFactorEnum {
    clockwise = -1,
    counterClockwise = 1
}
export interface ICircularValue {
    position: Position;
    value: number;
}
/**
 * Circular-picker component for Angular
 */
export declare class DejaCircularPickerComponent extends Destroy implements OnInit, ControlValueAccessor {
    private changeDetectorRef;
    control: NgControl;
    /** ClockwiseFactor allows user to choose rotation direction of picker */
    clockwiseFactor: ClockwiseFactorEnum;
    /** Diameter of circular picker in pixels. Default 310px */
    fullDiameter: number;
    /** Diameter of labels on circular picker */
    labelsDiameter: number;
    /** Ranges of circular picker */
    ranges: ICircularRange[];
    /** Template for labels inside picker. Use it to customize labels */
    labelTemplate: TemplateRef<unknown>;
    /** template for cursor inside picker. Use it to customize labels */
    cursorTemplate: TemplateRef<unknown>;
    private picker;
    private _outerLabels;
    /**
     * Allows user to choose labels position. If outerLabels is true, labels will come outside the circular picker
     *
     * With outerLabels = true, and ranges.length > 1, labels will go outwards.
     * With outerLabels = false, and ranges.length > 1, labels will go inwards.
     */
    set outerLabels(value: BooleanInput);
    get outerLabels(): BooleanInput;
    /** disabled property setter. Can be string or empty so you can use it like : <circular-picker disabled></circular-picker> */
    set disabled(value: BooleanInput);
    /** To get disabled attribute. */
    get disabled(): BooleanInput;
    private _disabled;
    private _value;
    private twoPi;
    private _radius;
    private configs;
    private selectedConfig;
    private _circularValues;
    private _cursor;
    private _cursorHand;
    private cursorElement;
    private clickedTime;
    get cursorHand(): {
        width: number;
        angle: number;
    };
    get cursor(): ICircularValue;
    get radius(): number;
    get circularValues(): ICircularValue[];
    /**
     * Constructor.
     * Create MouseDown & mouseMove Observables needed inside this control.
     */
    constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, control: NgControl);
    /**
     * Init circular-picker configuration
     */
    ngOnInit(): void;
    /** set accessor including call the onchange callback */
    set value(v: number);
    /** get accessor */
    get value(): number;
    /** From ControlValueAccessor interface */
    writeValue(value: number): void;
    /** From ControlValueAccessor interface */
    registerOnChange(fn: (_a: unknown) => void): void;
    /** From ControlValueAccessor interface */
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    protected onChangeCallback: (_a: unknown) => void;
    protected onTouchedCallback: () => void;
    /**
     * Take a point in parameter and return corresponding value
     *
     * @param x xPos of point
     * @param y yPos of point
     * @param config config where the point is located
     *
     * @return value
     */
    protected pointToValue(x: number, y: number, config: IConfig): number;
    /**
     * Take velue and returns its position
     * @param value value to check
     * @param radiusOffset Radius to ckeck (if outerLabels are on, the radius offset = fullDiameter + labelsDiameter)
     * @param config the config where to check
     *
     * @return the position of value
     */
    protected valueToPoint(value: number, radiusOffset: number, config: IConfig): Position;
    private pointToAngle;
    private valueToAngle;
    private bind;
    private updateCursor;
    private getHtmlElement;
    static ɵfac: i0.ɵɵFactoryDeclaration<DejaCircularPickerComponent, [null, null, { optional: true; self: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DejaCircularPickerComponent, "deja-circular-picker", never, { "clockwiseFactor": "clockwiseFactor"; "fullDiameter": "fullDiameter"; "labelsDiameter": "labelsDiameter"; "ranges": "ranges"; "outerLabels": "outerLabels"; "disabled": "disabled"; }, {}, ["labelTemplate", "cursorTemplate"], never, false>;
}
export interface IConfig {
    range: ICircularRange;
    steps: number;
    stepAngle: number;
}
export interface ICircularRange {
    min: number;
    max: number;
    interval?: number;
    labelInterval?: number;
    beginOffset?: number;
}
