import * as _angular_core from '@angular/core';
import { EventEmitter } from '@angular/core';
import { HtmlColor } from '@obliczeniowo/elementary/classes';
import { ControlValueAccessor, ValidationErrors } from '@angular/forms';
import * as i4 from '@angular/common';
import * as i5 from '@obliczeniowo/elementary/connectors';

interface ItemModel {
    name: string;
    color?: HtmlColor;
    ext?: any;
}

interface GroupModel {
    color: HtmlColor;
    items: ItemModel[];
    ext?: any;
}
declare class GroupClass implements GroupModel {
    dAngle: number;
    offset: number;
    dCategoryOffset: number;
    color: HtmlColor;
    items: ItemModel[];
    ext?: any;
    constructor(group: GroupModel, dAngle: number, offset: number, dCategoryOffset?: number);
}

declare class CircleCategoriesTreeComponent implements ControlValueAccessor {
    groups: _angular_core.ModelSignal<GroupModel[]>;
    header: _angular_core.InputSignal<string | undefined>;
    clicked: EventEmitter<ItemModel>;
    protected total: number;
    protected groupsClasses: GroupClass[];
    constructor();
    protected prepareGroups(): void;
    onChange: (groups: GroupModel[]) => void;
    onTouched: () => void;
    writeValue(groups: GroupModel[]): void;
    registerOnChange(onChange: any): void;
    registerOnTouched(onTouched: any): void;
    setDisabledState?(isDisabled: boolean): void;
    validate(control: any): ValidationErrors | null;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<CircleCategoriesTreeComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<CircleCategoriesTreeComponent, "obl-circle-categories-tree", never, { "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; }, { "groups": "groupsChange"; "clicked": "clicked"; }, never, never, false, never>;
}

declare class CategoriesBranchComponent {
    group: _angular_core.InputSignal<GroupClass>;
    ray: _angular_core.InputSignal<number>;
    textLength: _angular_core.InputSignal<number>;
    clicked: EventEmitter<ItemModel>;
    get r(): number;
    endAngle(index: number): number;
    startAngle(): number;
    end(index: number): {
        x: number;
        y: number;
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<CategoriesBranchComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<CategoriesBranchComponent, "g[obl-categories-branch]", never, { "group": { "alias": "group"; "required": true; "isSignal": true; }; "ray": { "alias": "ray"; "required": false; "isSignal": true; }; "textLength": { "alias": "textLength"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, false, never>;
}

declare class BranchItemComponent {
    ray: _angular_core.InputSignal<number>;
    angle: _angular_core.InputSignal<number>;
    textLength: _angular_core.InputSignal<number>;
    item: _angular_core.InputSignal<ItemModel>;
    protected reverse: boolean;
    constructor();
    get r(): number;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<BranchItemComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<BranchItemComponent, "g[obl-branch-item]", never, { "ray": { "alias": "ray"; "required": true; "isSignal": true; }; "angle": { "alias": "angle"; "required": true; "isSignal": true; }; "textLength": { "alias": "textLength"; "required": false; "isSignal": true; }; "item": { "alias": "item"; "required": true; "isSignal": true; }; }, {}, never, never, false, never>;
}

declare class CircleCategoriesTreeModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<CircleCategoriesTreeModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<CircleCategoriesTreeModule, [typeof CircleCategoriesTreeComponent, typeof CategoriesBranchComponent, typeof BranchItemComponent], [typeof i4.CommonModule, typeof i5.ConnectorsModule], [typeof CircleCategoriesTreeComponent]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<CircleCategoriesTreeModule>;
}

export { CircleCategoriesTreeComponent, CircleCategoriesTreeModule, GroupClass };
export type { GroupModel, ItemModel };
