import * as _angular_core from '@angular/core';
import { AfterViewInit } from '@angular/core';
import { Validator, AbstractControl, ValidationErrors } from '@angular/forms';

declare class SiPasswordStrengthComponent implements AfterViewInit {
    /**
     * Whether to show the visibility toggle icon.
     *
     * @defaultValue true
     */
    readonly showVisibilityIcon: _angular_core.InputSignal<boolean>;
    private readonly passwordStrengthDirective;
    private readonly passwordInput;
    protected readonly bad: _angular_core.WritableSignal<boolean>;
    protected readonly weak: _angular_core.WritableSignal<boolean>;
    protected readonly medium: _angular_core.WritableSignal<boolean>;
    protected readonly good: _angular_core.WritableSignal<boolean>;
    protected readonly strong: _angular_core.WritableSignal<boolean>;
    protected toggle(type: string): void;
    ngAfterViewInit(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiPasswordStrengthComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiPasswordStrengthComponent, "si-password-strength", never, { "showVisibilityIcon": { "alias": "showVisibilityIcon"; "required": false; "isSignal": true; }; }, {}, ["passwordStrengthDirective", "passwordInput"], ["*"], true, never>;
}

interface PasswordPolicy {
    /**
     * Define minimal number of characters.
     */
    minLength: number;
    /**
     * Define if uppercase characters are required in password.
     */
    uppercase: boolean;
    /**
     * Define if lowercase characters are required in password.
     */
    lowercase: boolean;
    /**
     * Define if digits are required in password.
     */
    digits: boolean;
    /**
     * Define if special characters are required in password.
     */
    special: boolean;
    /**
     * Whether to allow whitespaces. By default whitespaces are not allowed.
     */
    allowWhitespace?: boolean;
    /**
     * Minimum required policies for valid password. When set to a number greater than 0,
     * defines the number of policies that must be met for the password to be valid.
     * E.g. when set to 3 and the policies uppercase/lowercase/digits/special are all set
     * and the password contains 3 out of these four, the password will be valid.
     */
    minRequiredPolicies?: number;
}
declare class SiPasswordStrengthDirective implements Validator {
    private readonly maxStrength;
    protected noValidation: boolean;
    /**
     * Define Siemens password strength.
     *
     * @defaultValue
     * ```
     * {
     *     minLength: 8,
     *     uppercase: true,
     *     lowercase: true,
     *     digits: true,
     *     special: true
     *   }
     * ```
     */
    readonly siPasswordStrength: _angular_core.InputSignal<PasswordPolicy>;
    /**
     * Output callback event called when the password changes. The number
     * indicated the number of rules which still can be met. (`-2` --\> 2 rules are
     * still unmet, `0` --\> all met)
     */
    readonly passwordStrengthChanged: _angular_core.OutputEmitterRef<number | void>;
    /** @internal */
    validate(control: AbstractControl): ValidationErrors;
    private getStrength;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiPasswordStrengthDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiPasswordStrengthDirective, "[siPasswordStrength]", never, { "siPasswordStrength": { "alias": "siPasswordStrength"; "required": false; "isSignal": true; }; }, { "passwordStrengthChanged": "passwordStrengthChanged"; }, never, never, true, never>;
}

declare class SiPasswordStrengthModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiPasswordStrengthModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<SiPasswordStrengthModule, never, [typeof SiPasswordStrengthComponent, typeof SiPasswordStrengthDirective], [typeof SiPasswordStrengthComponent, typeof SiPasswordStrengthDirective]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<SiPasswordStrengthModule>;
}

export { SiPasswordStrengthComponent, SiPasswordStrengthDirective, SiPasswordStrengthModule };
export type { PasswordPolicy };
