import { Signal, InputSignal, ModelSignal, WritableSignal, OutputEmitterRef, InputSignalWithTransform } from '@angular/core';
import { ControlValueAccessor, Validator, UntypedFormControl } from '@angular/forms';
import { ActiveRating, FractionRating, InactiveRating } from './custom-rating';
import { BarRatingOptions } from './bar-rating.model';
import * as i0 from "@angular/core";
declare enum BarRatingUnitStateEnum {
    active = "active",
    inactive = "inactive",
    selected = "selected",
    fraction = "fraction"
}
type BarRatingUnitState = `${BarRatingUnitStateEnum}`;
export declare class BarRating implements ControlValueAccessor, Validator {
    readonly defaultOptions: BarRatingOptions;
    onChange: OnChangeFn<number>;
    onTouched: OnTouchedFn;
    readonly UNITS: typeof BarRatingUnitStateEnum;
    disabled: boolean;
    /** Current rating. Can be a decimal value like 3.14 */
    rate: ModelSignal<number>;
    /** Maximal rating that can be given using this widget. */
    max: InputSignalWithTransform<number, number | string>;
    /** A flag indicating if rating can be updated. */
    readonly: InputSignalWithTransform<boolean, string | boolean>;
    /** Set the theme */
    theme: InputSignal<string>;
    /** Show rating title */
    showText: InputSignalWithTransform<boolean, string | boolean>;
    /** Replace rate value with a title */
    titles: InputSignal<string[]>;
    /** A flag indicating if rating is required for form validation. */
    required: InputSignalWithTransform<boolean, string | boolean>;
    tabIndex: InputSignalWithTransform<number, number | string>;
    hoveredIndex: WritableSignal<number>;
    contexts: Signal<BarRatingUnitState[]>;
    ratingText: Signal<string | number>;
    /**
     * A stream that forwards a bar rating click since clicks are not propagated
     */
    barClick: OutputEmitterRef<number>;
    customActiveRating: Signal<ActiveRating>;
    customInActiveRating: Signal<InactiveRating>;
    customFractionRating: Signal<FractionRating>;
    updateRating(value: number): void;
    /**
     * This is the initial value set to the component
     */
    writeValue(value: number): void;
    validate(c: UntypedFormControl): {
        required: boolean;
    } | null;
    registerOnChange(fn: OnChangeFn<number>): void;
    registerOnTouched(fn: () => OnTouchedFn): void;
    setDisabledState(isDisabled: boolean): void;
    handleKeydown(event: KeyboardEvent): void;
    handleClick(event: MouseEvent): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<BarRating, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<BarRating, "bar-rating", never, { "rate": { "alias": "rate"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "showText": { "alias": "showText"; "required": false; "isSignal": true; }; "titles": { "alias": "titles"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; "isSignal": true; }; }, { "rate": "rateChange"; "barClick": "barClick"; }, ["customActiveRating", "customInActiveRating", "customFractionRating"], never, true, never>;
}
type OnChangeFn<T> = (value: T) => void;
type OnTouchedFn = () => void;
export {};
