import * as i0 from '@angular/core';
import { TemplateRef, OnChanges, OnInit, SimpleChanges } from '@angular/core';
import { Direction } from '@angular/cdk/bidi';
import { NzConfigKey } from 'ng-zorro-antd/core/config';
import { NgStyleInterface } from 'ng-zorro-antd/core/types';

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

type NzProgressGapPositionType = 'top' | 'bottom' | 'left' | 'right';
type NzProgressStatusType = 'success' | 'exception' | 'active' | 'normal';
type NzProgressTypeType = 'line' | 'circle' | 'dashboard';
type NzProgressStrokeLinecapType = 'round' | 'square';
interface NzProgressGradientProgress {
    [percent: string]: string;
}
interface NzProgressGradientFromTo {
    from: string;
    to: string;
}
type NzProgressColorGradient = {
    direction?: string;
} & (NzProgressGradientProgress | NzProgressGradientFromTo);
type NzProgressStrokeColorType = string | NzProgressColorGradient;
type NzProgressFormatter = ((percent: number) => string | null) | TemplateRef<{
    $implicit: number;
}>;
interface NzProgressCirclePath {
    stroke: string | null;
    strokePathStyle: NgStyleInterface;
}
interface NzProgressStepItem {
    backgroundColor: string;
    width: string;
    height: string;
}

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

declare class NzProgressComponent implements OnChanges, OnInit {
    readonly _nzModuleName: NzConfigKey;
    private readonly cdr;
    private readonly directionality;
    private readonly destroyRef;
    nzShowInfo: boolean;
    nzWidth: number;
    nzStrokeColor?: NzProgressStrokeColorType;
    nzSize: 'default' | 'small';
    nzFormat?: NzProgressFormatter;
    nzSuccessPercent?: number;
    nzPercent: number;
    nzStrokeWidth?: number;
    nzGapDegree?: number;
    nzStatus?: NzProgressStatusType;
    nzType: NzProgressTypeType;
    nzGapPosition: NzProgressGapPositionType;
    nzStrokeLinecap: NzProgressStrokeLinecapType;
    nzSteps: number;
    steps: NzProgressStepItem[];
    /** Gradient style when `nzType` is `line`. */
    lineGradient: string | null;
    /** If user uses gradient color. */
    isGradient: boolean;
    /** If the linear progress is a step progress. */
    isSteps: boolean;
    /**
     * Each progress whose `nzType` is circle or dashboard should have unique id to
     * define `<linearGradient>`.
     */
    gradientId: number;
    /** Paths to rendered in the template. */
    progressCirclePath: NzProgressCirclePath[];
    circleGradient?: Array<{
        offset: string;
        color: string;
    }>;
    trailPathStyle: NgStyleInterface | null;
    pathString?: string;
    icon: string;
    dir: Direction;
    get formatter(): NzProgressFormatter;
    get status(): NzProgressStatusType;
    get strokeWidth(): number;
    get isCircleStyle(): boolean;
    private cachedStatus;
    private inferredStatus;
    constructor();
    ngOnChanges(changes: SimpleChanges): void;
    ngOnInit(): void;
    private updateIcon;
    /**
     * Calculate step render configs.
     */
    private getSteps;
    /**
     * Calculate paths when the type is circle or dashboard.
     */
    private getCirclePaths;
    private setStrokeColor;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzProgressComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzProgressComponent, "nz-progress", ["nzProgress"], { "nzShowInfo": { "alias": "nzShowInfo"; "required": false; }; "nzWidth": { "alias": "nzWidth"; "required": false; }; "nzStrokeColor": { "alias": "nzStrokeColor"; "required": false; }; "nzSize": { "alias": "nzSize"; "required": false; }; "nzFormat": { "alias": "nzFormat"; "required": false; }; "nzSuccessPercent": { "alias": "nzSuccessPercent"; "required": false; }; "nzPercent": { "alias": "nzPercent"; "required": false; }; "nzStrokeWidth": { "alias": "nzStrokeWidth"; "required": false; }; "nzGapDegree": { "alias": "nzGapDegree"; "required": false; }; "nzStatus": { "alias": "nzStatus"; "required": false; }; "nzType": { "alias": "nzType"; "required": false; }; "nzGapPosition": { "alias": "nzGapPosition"; "required": false; }; "nzStrokeLinecap": { "alias": "nzStrokeLinecap"; "required": false; }; "nzSteps": { "alias": "nzSteps"; "required": false; }; }, {}, never, never, true, never>;
    static ngAcceptInputType_nzSuccessPercent: unknown;
    static ngAcceptInputType_nzPercent: unknown;
    static ngAcceptInputType_nzStrokeWidth: unknown;
    static ngAcceptInputType_nzGapDegree: unknown;
    static ngAcceptInputType_nzSteps: unknown;
}

declare class NzProgressModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzProgressModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<NzProgressModule, never, [typeof NzProgressComponent], [typeof NzProgressComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<NzProgressModule>;
}

export { NzProgressComponent, NzProgressModule };
export type { NzProgressCirclePath, NzProgressColorGradient, NzProgressFormatter, NzProgressGapPositionType, NzProgressGradientFromTo, NzProgressGradientProgress, NzProgressStatusType, NzProgressStepItem, NzProgressStrokeColorType, NzProgressStrokeLinecapType, NzProgressTypeType };
