import * as _angular_core from '@angular/core';
import { EventEmitter, SimpleChanges } from '@angular/core';
import * as i4 from '@angular/common';
import * as i5 from '@obliczeniowo/elementary/buttons';
import * as i6 from '@obliczeniowo/elementary/text-pipes';

declare class BowlingPinsComponent {
    protected styles: {
        [style: string]: string | number;
    };
    pins: _angular_core.ModelSignal<boolean[]>;
    blocked: boolean[];
    size: _angular_core.InputSignal<number>;
    translations: _angular_core.InputSignal<{
        [en: string]: string;
    }>;
    displayPoints: _angular_core.InputSignal<boolean>;
    displayReverse: _angular_core.InputSignal<boolean>;
    displayCancel: _angular_core.InputSignal<boolean>;
    disabled?: boolean;
    changed: EventEmitter<number>;
    constructor();
    counted: number;
    switch(index: number): void;
    ngOnChanges(changes: SimpleChanges): void;
    count(): number;
    reset(): void;
    protected reverse(): void;
    protected clear(): void;
    protected onKeyUp(event: KeyboardEvent, index: number): void;
    protected onClicked(index: number): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<BowlingPinsComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<BowlingPinsComponent, "obl-bowling-pins", never, { "pins": { "alias": "pins"; "required": false; "isSignal": true; }; "blocked": { "alias": "blocked"; "required": false; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "translations": { "alias": "translations"; "required": false; "isSignal": true; }; "displayPoints": { "alias": "displayPoints"; "required": false; "isSignal": true; }; "displayReverse": { "alias": "displayReverse"; "required": false; "isSignal": true; }; "displayCancel": { "alias": "displayCancel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "pins": "pinsChange"; "changed": "changed"; }, never, never, false, never>;
}

interface BowlingRoundScores {
    first: number;
    second: number;
}
interface BowlingRoundPins {
    first: boolean[];
    second: boolean[];
}
declare class BowlingRoundComponent {
    first: BowlingPinsComponent;
    second: BowlingPinsComponent;
    current: _angular_core.InputSignal<number>;
    pins: _angular_core.ModelSignal<BowlingRoundPins>;
    translations: _angular_core.InputSignal<{
        [en: string]: string;
    }>;
    changed: EventEmitter<BowlingRoundScores>;
    scores: BowlingRoundScores;
    reverse(bowling: boolean[]): boolean[];
    ngAfterViewInit(): void;
    onChanged(witch: 'first' | 'second', score: number): void;
    reset(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<BowlingRoundComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<BowlingRoundComponent, "obl-bowling-round", never, { "current": { "alias": "current"; "required": true; "isSignal": true; }; "pins": { "alias": "pins"; "required": false; "isSignal": true; }; "translations": { "alias": "translations"; "required": false; "isSignal": true; }; }, { "pins": "pinsChange"; "changed": "changed"; }, never, never, false, never>;
}

interface ScoreModel {
    first?: number;
    second?: number;
    firstPins?: boolean[];
    secondPins?: boolean[];
}
declare class RoundsModel {
    protected _list: ScoreModel[];
    protected current: number;
    set list(list: ScoreModel[]);
    get list(): ScoreModel[];
    counted: number[];
    totalScore: number;
    constructor();
    getCurrent(): number;
    setEmpty(): void;
    add(score: ScoreModel): void;
    protected max(): 10 | 11 | 12;
    protected calculate(): void;
    protected total(): number;
    protected count(index: number): number;
    /** only to use inside of class as helper */
    protected sum(index: number): number;
    /** checking type to calculate */
    resultType(index: number): 'Strike' | 'Spare' | 'Open' | undefined;
}

declare class BowlingScoreComponent {
    protected scores: RoundsModel;
    scoring: _angular_core.ModelSignal<ScoreModel[]>;
    editMode: _angular_core.InputSignal<boolean>;
    translations: _angular_core.InputSignal<{
        [en: string]: string;
    }>;
    constructor();
    add(round: BowlingRoundComponent): void;
    reset(round: BowlingRoundComponent): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<BowlingScoreComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<BowlingScoreComponent, "obl-bowling-score", never, { "scoring": { "alias": "scoring"; "required": false; "isSignal": true; }; "editMode": { "alias": "editMode"; "required": false; "isSignal": true; }; "translations": { "alias": "translations"; "required": false; "isSignal": true; }; }, { "scoring": "scoringChange"; }, never, never, false, never>;
}

declare class BowlingPinsModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<BowlingPinsModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<BowlingPinsModule, [typeof BowlingPinsComponent, typeof BowlingRoundComponent, typeof BowlingScoreComponent], [typeof i4.CommonModule, typeof i5.ButtonsModule, typeof i6.TextPipesModule, typeof i6.TextPipesModule], [typeof BowlingPinsComponent, typeof BowlingRoundComponent, typeof BowlingScoreComponent]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<BowlingPinsModule>;
}

export { BowlingPinsComponent, BowlingPinsModule, BowlingRoundComponent, BowlingScoreComponent };
export type { BowlingRoundPins, BowlingRoundScores };
