import * as i0 from '@angular/core';
import { EventEmitter, TemplateRef } from '@angular/core';
import { Observable } from 'rxjs';
import { HtmlColor } from '@obliczeniowo/elementary/classes';
import * as i4 from '@angular/common';
import * as i5 from '@obliczeniowo/elementary/loading';
import * as i6 from '@obliczeniowo/elementary/year-picker';

interface DayStatistic<T extends {} = {
    [key: string]: any;
}> {
    date: Date;
    count: number;
    data?: T;
    x?: number;
    y?: number;
}
interface DaySettings {
    size: number;
    margin: number;
    colors: HtmlColor[];
    colorsStats?: {
        [key: number]: HtmlColor;
    };
    getExtData?: (statistic: DayStatistic) => Observable<any>;
}
declare class DailyStatisticComponent {
    protected loading: boolean;
    selected: boolean;
    /** day statistic day */
    statistics: i0.InputSignal<DayStatistic<{
        [key: string]: any;
    }>>;
    /** */
    settings: i0.InputSignal<DaySettings>;
    get x(): number;
    get y(): number;
    clicked: EventEmitter<DayStatistic<{
        [key: string]: any;
    }>>;
    onClick(): Promise<void>;
    hovered: EventEmitter<DayStatistic<{
        [key: string]: any;
    }> | undefined>;
    hover(): void;
    leave(): void;
    constructor();
    protected setCurrentColor(): void;
    protected currentColor: HtmlColor;
    get width(): number;
    get height(): number;
    size: i0.Signal<number>;
    static ɵfac: i0.ɵɵFactoryDeclaration<DailyStatisticComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DailyStatisticComponent, "obl-daily-statistic", never, { "selected": { "alias": "selected"; "required": false; }; "statistics": { "alias": "statistics"; "required": true; "isSignal": true; }; "settings": { "alias": "settings"; "required": true; "isSignal": true; }; }, { "clicked": "clicked"; "hovered": "hovered"; }, never, never, false, never>;
}

interface DailyStatisticsSettings<ext extends {} = {
    [key: string]: any;
}> extends DaySettings {
    start: Date;
    end: Date;
    colors: HtmlColor[];
    yearSwitcher?: boolean;
    minYear?: number;
    maxYear?: number;
    get: (start: Date, end: Date) => Observable<DayStatistic<ext>[]>;
    /** for legend translation text */
    text?: {
        less: string;
        more: string;
    };
}
declare class DailyStatisticsComponent {
    readonly locale: string;
    protected statistics: DayStatistic<any>[];
    protected _settings: DailyStatisticsSettings;
    protected max: number;
    protected daysHeaders: Date[];
    protected monthHeaders: {
        date: Date;
        x: number;
    }[];
    protected selected?: DayStatistic;
    protected hovered?: DayStatistic;
    protected total?: number;
    protected selectedIndex?: number;
    protected default: {
        min: number;
        max: number;
    };
    protected totalRef: TemplateRef<any>;
    protected selectedRef: TemplateRef<any>;
    /** settings for all view components */
    set settings(value: DailyStatisticsSettings);
    private _weakDayOffset;
    /**
     * Set weak day offset to for example start weak not from Sunday but from Monday you should set it to 6
     *
     * Do not use values less then 0
     */
    set weakDayOffset(value: number);
    get weakDayOffset(): number;
    get settings(): DailyStatisticsSettings;
    get margin(): number;
    get height(): number;
    get width(): number;
    get size(): number;
    get fontSize(): number;
    clicked: EventEmitter<DayStatistic<{
        [key: string]: any;
    }>>;
    selectionChanged: EventEmitter<DayStatistic<{
        [key: string]: any;
    }> | undefined>;
    constructor(locale: string);
    protected changed(year: number): void;
    protected onClicked(statistic: DayStatistic, index: number): void;
    protected onHovered(statistics: DayStatistic | undefined): void;
    protected setColors(statistics: DayStatistic[]): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DailyStatisticsComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DailyStatisticsComponent, "obl-daily-statistics", never, { "settings": { "alias": "settings"; "required": false; }; "weakDayOffset": { "alias": "weakDayOffset"; "required": false; }; }, { "clicked": "clicked"; "selectionChanged": "selectionChanged"; }, ["totalRef", "selectedRef"], never, false, never>;
}

interface LegendSettings extends DaySettings {
    text?: {
        less: string;
        more: string;
    };
}
declare class DailyLegendComponent {
    settings: i0.InputSignal<LegendSettings>;
    sort: (p: any, c: any) => number;
    static ɵfac: i0.ɵɵFactoryDeclaration<DailyLegendComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DailyLegendComponent, "obl-daily-legend", never, { "settings": { "alias": "settings"; "required": true; "isSignal": true; }; }, {}, never, never, false, never>;
}

declare class DailyStatisticsModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<DailyStatisticsModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<DailyStatisticsModule, [typeof DailyStatisticsComponent, typeof DailyStatisticComponent, typeof DailyLegendComponent], [typeof i4.CommonModule, typeof i5.LoadingModule, typeof i6.YearPickerModule], [typeof DailyStatisticsComponent, typeof DailyStatisticComponent, typeof DailyLegendComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<DailyStatisticsModule>;
}

export { DailyLegendComponent, DailyStatisticComponent, DailyStatisticsComponent, DailyStatisticsModule };
export type { DailyStatisticsSettings, DaySettings, DayStatistic, LegendSettings };
