import * as _angular_core from '@angular/core';
import { ElementRef, EventEmitter, QueryList, SimpleChanges } from '@angular/core';
import { ControlValueAccessor, ValidationErrors } from '@angular/forms';
import { GroupModel, ItemModel, GroupClass } from '@obliczeniowo/elementary/circle-categories-tree';
import { IPoint2D } from '@obliczeniowo/elementary/classes';
import * as i5 from '@obliczeniowo/elementary/connectors';
import { Connector, DirectionalConnectorComponent } from '@obliczeniowo/elementary/connectors';
import * as i6 from '@obliczeniowo/elementary/menu';
import { MenuComponent, MenuItem } from '@obliczeniowo/elementary/menu';
import { Subscription } from 'rxjs';
import * as i4 from '@angular/common';

declare class CircleCategoriesTreeRelationsComponent implements ControlValueAccessor {
    protected element: ElementRef<HTMLElement>;
    connectors: Connector[];
    groups: GroupModel[];
    disabled?: boolean;
    menu: _angular_core.InputSignal<MenuComponent | undefined>;
    itemClicked: EventEmitter<{
        item: ItemModel;
        connectors: Connector[];
    }>;
    connectorClicked: EventEmitter<{
        left?: ItemModel;
        right?: ItemModel;
    }>;
    connectorsChange: EventEmitter<Connector[]>;
    protected total: number;
    protected groupsClasses: GroupClass[];
    protected newConnector?: Connector;
    set relations(relation: QueryList<DirectionalConnectorComponent>);
    protected relationsChanged: DirectionalConnectorComponent[];
    protected mouse?: IPoint2D;
    protected angle?: number;
    protected menuItems: MenuItem[];
    constructor(element: ElementRef<HTMLElement>);
    ngOnChanges(changes: SimpleChanges): void;
    protected move(event: MouseEvent): void;
    mouseOver(): void;
    protected clicked(event: MouseEvent): void;
    protected remove(item: ItemModel): void;
    protected onItemClicked(item: ItemModel): void;
    protected update(): void;
    protected onConnectorClicked(connector: Connector): void;
    protected removeConnector(connector: Connector): void;
    protected over(data: any): void;
    protected prepareGroups(): void;
    onChange: any;
    onTouched: () => void;
    writeValue(value: {
        groups: GroupModel[];
        connectors: Connector[];
    }): void;
    registerOnChange(onChange: any): void;
    registerOnTouched(onTouched: any): void;
    setDisabledState?(isDisabled: boolean): void;
    validate(control: any): ValidationErrors | null;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<CircleCategoriesTreeRelationsComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<CircleCategoriesTreeRelationsComponent, "obl-circle-categories-tree-relations", never, { "connectors": { "alias": "connectors"; "required": false; }; "groups": { "alias": "groups"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "menu": { "alias": "menu"; "required": false; "isSignal": true; }; }, { "itemClicked": "itemClicked"; "connectorClicked": "connectorClicked"; "connectorsChange": "connectorsChange"; }, never, never, false, never>;
}

declare class CategoryRelationGroupComponent {
    group: _angular_core.InputSignal<GroupClass>;
    ray: _angular_core.InputSignal<number>;
    textLength: _angular_core.InputSignal<number>;
    connectors: _angular_core.InputSignal<DirectionalConnectorComponent[]>;
    /** */
    menu: _angular_core.InputSignal<MenuComponent | undefined>;
    /** */
    remove: EventEmitter<ItemModel>;
    clicked: EventEmitter<ItemModel>;
    over: EventEmitter<{
        item: ItemModel;
        pos: IPoint2D;
        angle: number;
    }>;
    leave: EventEmitter<undefined>;
    get r(): number;
    endAngle(index: number): number;
    startAngle(): number;
    end(index: number): {
        x: number;
        y: number;
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<CategoryRelationGroupComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<CategoryRelationGroupComponent, "g[obl-category-relation-group]", never, { "group": { "alias": "group"; "required": true; "isSignal": true; }; "ray": { "alias": "ray"; "required": false; "isSignal": true; }; "textLength": { "alias": "textLength"; "required": false; "isSignal": true; }; "connectors": { "alias": "connectors"; "required": false; "isSignal": true; }; "menu": { "alias": "menu"; "required": false; "isSignal": true; }; }, { "remove": "remove"; "clicked": "clicked"; "over": "over"; "leave": "leave"; }, never, never, false, never>;
}

declare class CategoryItemComponent {
    ray: _angular_core.InputSignal<number>;
    angle: _angular_core.InputSignal<number>;
    textLength: _angular_core.InputSignal<number>;
    item: _angular_core.InputSignal<ItemModel>;
    connectors: _angular_core.InputSignal<DirectionalConnectorComponent[]>;
    menu: _angular_core.InputSignal<MenuComponent | undefined>;
    clicked: EventEmitter<ItemModel>;
    over: EventEmitter<{
        item: ItemModel;
        pos: IPoint2D;
        angle: number;
    }>;
    leave: EventEmitter<undefined>;
    /** */
    remove: EventEmitter<ItemModel>;
    protected reverse: boolean;
    protected filtered?: DirectionalConnectorComponent[];
    protected menuItems: MenuItem[];
    protected subscription?: Subscription;
    mouseOver(): void;
    mouseLeave(): void;
    constructor();
    ngOnDestroy(): void;
    position(): IPoint2D;
    get r(): number;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<CategoryItemComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<CategoryItemComponent, "g[obl-category-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; }; "connectors": { "alias": "connectors"; "required": false; "isSignal": true; }; "menu": { "alias": "menu"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; "over": "over"; "leave": "leave"; "remove": "remove"; }, never, never, false, never>;
}

declare class CircleTreeCategoriesRelationsModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<CircleTreeCategoriesRelationsModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<CircleTreeCategoriesRelationsModule, [typeof CircleCategoriesTreeRelationsComponent, typeof CategoryRelationGroupComponent, typeof CategoryItemComponent], [typeof i4.CommonModule, typeof i5.ConnectorsModule, typeof i6.MenuModule], [typeof CircleCategoriesTreeRelationsComponent]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<CircleTreeCategoriesRelationsModule>;
}

export { CircleCategoriesTreeRelationsComponent, CircleTreeCategoriesRelationsModule };
