import * as _angular_core from '@angular/core';
import { TemplateRef, OnInit, OnDestroy } from '@angular/core';
import { CopyrightDetails } from '@siemens/element-ng/copyright-notice';
import { IsoLanguageValue } from '@siemens/element-ng/language-switcher';
import { Link } from '@siemens/element-ng/link';
import * as _siemens_element_translate_ng_translate from '@siemens/element-translate-ng/translate';
import { TranslatableString } from '@siemens/element-translate-ng/translate';
import { StatusType } from '@siemens/element-ng/common';
import { FormGroup, FormControl } from '@angular/forms';
import { PasswordPolicy } from '@siemens/element-ng/password-strength';

/**
 * Copyright (c) Siemens 2016 - 2026
 * SPDX-License-Identifier: MIT
 */

interface AlertConfig {
    severity: StatusType;
    heading?: string;
    message: string;
    action?: Link;
    translationParams?: {
        [key: string]: any;
    };
}

/**
 * Copyright (c) Siemens 2016 - 2026
 * SPDX-License-Identifier: MIT
 */

interface LandingPageWarning {
    title: TranslatableString;
    content: TranslatableString;
}
interface UsernamePassword {
    username: string | null | undefined;
    password: string | null | undefined;
}
interface ChangePassword {
    newPassword: string | null | undefined;
    confirmPassword: string | null | undefined;
}
type UsernameValidationPayload = Pick<UsernamePassword, 'username'> & {
    validate: (isValid: boolean) => void;
};

/**
 * A comprehensive landing page component that provides a standardized layout for authentication flows.
 *
 * This component serves as a container for various authentication-related components and provides
 * a consistent layout with support for branding, internationalization, legal acknowledgments,
 * and various notification types. It includes slots for custom content and handles responsive
 * layout adjustments.
 *
 * The component supports:
 * - Custom branding and background images
 * - Multi-language support with language switcher
 * - Legal acknowledgments and terms display
 * - Alert and notification systems
 * - Copyright information display
 * - Responsive layout with full-height section option
 *
 * @example
 * ```html
 * <si-landing-page
 *   [heading]="appTitle"
 *   [subtitle]="appDescription"
 *   [availableLanguages]="languages"
 *   [copyrightDetails]="copyright"
 *   [announcement]="announcementConfig"
 *   [loginAlert]="loginErrorConfig">
 *
 *   <si-login-basic
 *     (login)="handleLogin($event)"
 *     (usernameValidation)="validateUsername($event)">
 *   </si-login-basic>

 * </si-landing-page>
 * ```
 */
declare class SiLandingPageComponent {
    /**
     * Heading of the application.
     */
    readonly heading: _angular_core.InputSignal<TranslatableString>;
    /**
     * Secondary heading of the application.
     */
    readonly subheading: _angular_core.InputSignal<TranslatableString | undefined>;
    /**
     * Short description of the application.
     */
    readonly subtitle: _angular_core.InputSignal<TranslatableString>;
    /**
     * List of links (e.g. Corporate information)
     *
     * @defaultValue []
     */
    readonly links: _angular_core.InputSignal<Link[]>;
    /**
     * URL to custom background image
     *
     * @defaultValue './assets/images/landing-page-steel.webp'
     */
    readonly backgroundImageUrl: _angular_core.InputSignal<string>;
    /**
     * URL to custom brand image.
     *
     * @deprecated By default the logo provided in the theme will be used.
     * For a different logo use the respective CSS variables:
     * ```html
     * <si-landing-page style="--landing-page-logo: url('https://example.com'); --landing-page-logo-width: 100px; --landing-page-logo-height: 100px" />
     * ```
     */
    readonly logoUrl: _angular_core.InputSignal<string | undefined>;
    /**
     * Input of si-language-switcher: Key for translation.
     * If your languages are already translated, you may display them without any
     * manipulation by passing in an empty string.
     *
     * @defaultValue 'LANGUAGE'
     */
    readonly translationKey: _angular_core.InputSignal<string>;
    /**
     * Input of si-language-switcher: List of all available languages in this
     * application.
     *
     * @defaultValue []
     */
    readonly availableLanguages: _angular_core.InputSignal<string[] | IsoLanguageValue[]>;
    /**
     *
     * Config to enable/disable general alerts on landing page
     */
    readonly announcement: _angular_core.InputSignal<AlertConfig | undefined>;
    /**
     *
     * Config to enable/disable login related error/alerts
     */
    readonly loginAlert: _angular_core.InputSignal<AlertConfig | undefined>;
    /**
     * Warning text for Live Data. Can be shown, if there is no legal artifact which needs immediate user attention.
     */
    readonly liveDataWarning: _angular_core.InputSignal<LandingPageWarning | undefined>;
    /**
     * Text for some legal artifacts (e.g. Terms of Use) that needs more attention before the login.
     */
    readonly implicitLegalAcknowledge: _angular_core.InputSignal<string | TemplateRef<unknown> | undefined>;
    /**
     * Version of the application.
     */
    readonly version: _angular_core.InputSignal<string | undefined>;
    /**
     * Copyright information to be displayed. Alternatively, you can use the {@link SI_COPYRIGHT_DETAILS} global inject.
     */
    readonly copyrightDetails: _angular_core.InputSignal<CopyrightDetails | undefined>;
    /**
     * Option to display the landing page content in full height.
     *
     * @defaultValue false
     */
    readonly isFullHeightSection: _angular_core.WritableSignal<boolean>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiLandingPageComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiLandingPageComponent, "si-landing-page", never, { "heading": { "alias": "heading"; "required": true; "isSignal": true; }; "subheading": { "alias": "subheading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": true; "isSignal": true; }; "links": { "alias": "links"; "required": false; "isSignal": true; }; "backgroundImageUrl": { "alias": "backgroundImageUrl"; "required": false; "isSignal": true; }; "logoUrl": { "alias": "logoUrl"; "required": false; "isSignal": true; }; "translationKey": { "alias": "translationKey"; "required": false; "isSignal": true; }; "availableLanguages": { "alias": "availableLanguages"; "required": false; "isSignal": true; }; "announcement": { "alias": "announcement"; "required": false; "isSignal": true; }; "loginAlert": { "alias": "loginAlert"; "required": false; "isSignal": true; }; "liveDataWarning": { "alias": "liveDataWarning"; "required": false; "isSignal": true; }; "implicitLegalAcknowledge": { "alias": "implicitLegalAcknowledge"; "required": false; "isSignal": true; }; "version": { "alias": "version"; "required": false; "isSignal": true; }; "copyrightDetails": { "alias": "copyrightDetails"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
}

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

/**
 * A basic login component that supports both single-step and two-step authentication flows.
 *
 * This component provides a standard login form with username and password fields.
 * It can be configured to work in two-step mode where username validation happens first,
 * followed by password entry.
 *
 * @example
 * ```html
 * <si-login-basic
 *   [forgotPasswordLink]="forgotPasswordLink"
 *   [registerNowLink]="registerNowLink"
 *   [twoStep]="true"
 *   [loading]="isLoading"
 *   (login)="handleLogin($event)"
 *   (usernameValidation)="handleUsernameValidation($event)">
 * </si-login-basic>
 * ```
 */
declare class SiLoginBasicComponent implements OnInit {
    private static idCounter;
    /**
     * Label for username input field.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_LOGIN_BASIC.USERNAME:Username`)
     * ```
     */
    readonly usernameLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Label for password input field.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_LOGIN_BASIC.PASSWORD:Password`)
     * ```
     */
    readonly passwordLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Config for Forgot Password link.
     * If `title` is omitted, a default translated label is used.
     */
    readonly forgotPasswordLink: _angular_core.InputSignal<Link | undefined>;
    /**
     * Config for Register Now link.
     * If `title` is omitted, a default translated label is used.
     */
    readonly registerNowLink: _angular_core.InputSignal<Link | undefined>;
    /**
     * Label for login button.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_LOGIN_BASIC.LOGIN:Login`)
     * ```
     */
    readonly loginButtonLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Disables the login button.
     *
     * @defaultValue false
     */
    readonly disableLogin: _angular_core.InputSignal<boolean>;
    /**
     * Enables the two-step login flow.
     *
     * @defaultValue false
     */
    readonly twoStep: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Indicates whether the login button should show a loading state.
     *
     * @defaultValue false
     */
    readonly loading: _angular_core.InputSignal<boolean>;
    /**
     * Description of back button.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_LOGIN_BASIC.BACK:Back`)
     * ```
     */
    readonly backButtonLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Description of next button.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_LOGIN_BASIC.NEXT:Next`)
     * ```
     */
    readonly nextButtonLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Emits username when user clicks on next button.
     */
    readonly usernameValidation: _angular_core.OutputEmitterRef<UsernameValidationPayload>;
    /**
     * Emits username and password on value change.
     */
    readonly valueChanged: _angular_core.OutputEmitterRef<UsernamePassword>;
    /**
     * Emits username and password on login event.
     */
    readonly login: _angular_core.OutputEmitterRef<UsernamePassword>;
    private destroyRef;
    protected readonly secondStepVisible: _angular_core.WritableSignal<boolean>;
    protected readonly loadingNext: _angular_core.WritableSignal<boolean>;
    private readonly defaultForgotPasswordTitle;
    private readonly defaultRegisterNowTitle;
    protected readonly effectiveForgotPasswordLink: _angular_core.Signal<Link>;
    protected readonly effectiveRegisterNowLink: _angular_core.Signal<Link>;
    private readonly index;
    protected usernameId: string;
    protected passwordId: string;
    protected loginCredentials: FormGroup<{
        username: FormControl<string | null>;
        password: FormControl<string | null>;
    }>;
    ngOnInit(): void;
    protected submit(): void;
    protected handleValueChanges(): void;
    protected validateUsername(): void;
    private getLoginFormValues;
    protected goBack(): void;
    private nextStep;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiLoginBasicComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiLoginBasicComponent, "si-login-basic", never, { "usernameLabel": { "alias": "usernameLabel"; "required": false; "isSignal": true; }; "passwordLabel": { "alias": "passwordLabel"; "required": false; "isSignal": true; }; "forgotPasswordLink": { "alias": "forgotPasswordLink"; "required": false; "isSignal": true; }; "registerNowLink": { "alias": "registerNowLink"; "required": false; "isSignal": true; }; "loginButtonLabel": { "alias": "loginButtonLabel"; "required": false; "isSignal": true; }; "disableLogin": { "alias": "disableLogin"; "required": false; "isSignal": true; }; "twoStep": { "alias": "twoStep"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "backButtonLabel": { "alias": "backButtonLabel"; "required": false; "isSignal": true; }; "nextButtonLabel": { "alias": "nextButtonLabel"; "required": false; "isSignal": true; }; }, { "usernameValidation": "usernameValidation"; "valueChanged": "valueChanged"; "login": "login"; }, never, never, true, never>;
}

/**
 * A single sign-on (SSO) login component that provides a button for SSO authentication.
 *
 * This component renders a simple button that users can click to initiate
 * single sign-on authentication flow.
 *
 * @example
 * ```html
 * <si-login-single-sign-on
 *   [ssoButtonLabel]="customLabel"
 *   [disableSso]="isLoading"
 *   (ssoEvent)="handleSsoLogin()">
 * </si-login-single-sign-on>
 * ```
 */
declare class SiLoginSingleSignOnComponent {
    /**
     * Label for login button.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_LOGIN_SINGLE-SIGN-ON.LOGIN_SIGN_UP:Login / Sign un`)
     * ```
     */
    readonly ssoButtonLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Disables the sso button.
     *
     * @defaultValue false
     */
    readonly disableSso: _angular_core.InputSignal<boolean>;
    /**
     * Emits username and password on login event.
     */
    readonly ssoEvent: _angular_core.OutputEmitterRef<void>;
    protected ssoClick(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiLoginSingleSignOnComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiLoginSingleSignOnComponent, "si-login-single-sign-on", never, { "ssoButtonLabel": { "alias": "ssoButtonLabel"; "required": false; "isSignal": true; }; "disableSso": { "alias": "disableSso"; "required": false; "isSignal": true; }; }, { "ssoEvent": "ssoEvent"; }, never, never, true, never>;
}

/**
 * A component for displaying legal agreements that require explicit user acknowledgment.
 *
 * This component provides a standardized interface for presenting legal documents,
 * terms of service, privacy policies, or other agreements that users must
 * explicitly accept before proceeding.
 *
 * @example
 * ```html
 * <si-explicit-legal-acknowledge
 *   [heading]="agreementTitle"
 *   [subheading]="agreementDescription"
 *   [disableAcceptance]="isProcessing"
 *   (accept)="handleAcceptance()"
 *   (back)="handleBack()">
 *   <div>
 *     <h3>Terms of Service</h3>
 *     <p>Please read and accept our terms before continuing.</p>
 *     <ul>
 *       <li>Term 1: You agree to ...</li>
 *       <li>Term 2: You acknowledge ...</li>
 *     </ul>
 *   </div>
 * </si-explicit-legal-acknowledge>
 * ```
 */
declare class SiExplicitLegalAcknowledgeComponent implements OnInit, OnDestroy {
    /**
     * Heading of the agreement.
     */
    readonly heading: _angular_core.InputSignal<TranslatableString>;
    /**
     * Short description of the agreement.
     */
    readonly subheading: _angular_core.InputSignal<TranslatableString>;
    /**
     * Label for accept button.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_EXPLICIT_LEGAL_ACKNOWLEDGE.ACCEPT:Accept`)
     * ```
     */
    readonly acceptButtonLabel: _angular_core.InputSignal<TranslatableString>;
    /**
     * Description of back button.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_EXPLICIT_LEGAL_ACKNOWLEDGE.BACK:Back`)
     * ```
     */
    readonly backButtonLabel: _angular_core.InputSignal<TranslatableString>;
    /**
     * Disables the acceptance button.
     *
     * @defaultValue false
     */
    readonly disableAcceptance: _angular_core.InputSignal<boolean>;
    /**
     * Emits end user license agreement on acceptance event.
     */
    readonly accept: _angular_core.OutputEmitterRef<void>;
    /**
     * Emits on back click.
     */
    readonly back: _angular_core.OutputEmitterRef<void>;
    /**
     * Reference to the landing page parent component.
     */
    protected landingPage: SiLandingPageComponent | null;
    protected handleBack(): void;
    protected handleAccept(): void;
    ngOnInit(): void;
    ngOnDestroy(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiExplicitLegalAcknowledgeComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiExplicitLegalAcknowledgeComponent, "si-explicit-legal-acknowledge", never, { "heading": { "alias": "heading"; "required": true; "isSignal": true; }; "subheading": { "alias": "subheading"; "required": true; "isSignal": true; }; "acceptButtonLabel": { "alias": "acceptButtonLabel"; "required": false; "isSignal": true; }; "backButtonLabel": { "alias": "backButtonLabel"; "required": false; "isSignal": true; }; "disableAcceptance": { "alias": "disableAcceptance"; "required": false; "isSignal": true; }; }, { "accept": "accept"; "back": "back"; }, never, ["*"], true, never>;
}

/**
 * A component for changing user passwords with strength validation and policy enforcement.
 *
 * This component provides a form for users to change their password, including
 * password strength indicators, policy validation, and confirmation fields.
 * It supports custom password policies and displays inline notifications for alerts.
 *
 * @example
 * ```html
 * <si-change-password
 *   [passwordStrength]="passwordPolicy"
 *   [passwordPolicyContent]="policyTemplate"
 *   [changePasswordAlert]="alertConfig"
 *   (changePasswordRequested)="handlePasswordChange($event)"
 *   (back)="handleBack()">
 * </si-change-password>
 * ```
 */
declare class SiChangePasswordComponent implements OnInit, OnDestroy {
    private static idCounter;
    /**
     * Change password heading.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE_PASSWORD:Change password`)
     * ```
     */
    readonly heading: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Short description of the action to perform.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE_FACTORY_PASSWORD:Factory set password must be changed`)
     * ```
     */
    readonly subheading: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Label for new password input field.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_CHANGE_PASSWORD.NEW_PASSWORD:New password`)
     * ```
     */
    readonly newPasswordLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Label for confirm password input field.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_CHANGE_PASSWORD.CONFIRM_PASSWORD:Confirm password`)
     * ```
     */
    readonly confirmPasswordLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Label for change password button.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_CHANGE_PASSWORD.CHANGE:Change`)
     * ```
     */
    readonly changeButtonLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Description of back button.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_CHANGE_PASSWORD.BACK:Back`)
     * ```
     */
    readonly backButtonLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Disables the change password button.
     *
     * @defaultValue false
     */
    readonly disableChange: _angular_core.InputSignal<boolean>;
    /**
     * Title of the password policy.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_CHANGE_PASSWORD.PASSWORD_POLICY:Password policy`)
     * ```
     */
    readonly passwordPolicyTitle: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Description of the password policy requirements.
     */
    readonly passwordPolicyContent: _angular_core.InputSignal<string | TemplateRef<unknown>>;
    /**
     * Description of the password policy requirements.
     */
    readonly passwordStrength: _angular_core.InputSignal<PasswordPolicy>;
    /**
     * Config to enable/disable password related error/alerts.
     */
    readonly changePasswordAlert: _angular_core.InputSignal<AlertConfig | undefined>;
    /**
     * Emits password on value change.
     */
    readonly valueChanged: _angular_core.OutputEmitterRef<ChangePassword>;
    /**
     * Emits password on change event.
     */
    readonly changePasswordRequested: _angular_core.OutputEmitterRef<ChangePassword>;
    /**
     * The number indicating 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>;
    /**
     * Emits on back click.
     */
    readonly back: _angular_core.OutputEmitterRef<void>;
    /**
     * Reference to the landing page parent component.
     */
    protected landingPage: SiLandingPageComponent | null;
    private readonly index;
    protected newPasswordId: string;
    protected confirmPasswordId: string;
    protected changePasswordForm: FormGroup<{
        newPassword: FormControl<string | null>;
        confirmPassword: FormControl<string | null>;
    }>;
    protected passwordPolicyContentTemplate: TemplateRef<any> | null;
    private destroyRef;
    ngOnInit(): void;
    ngOnDestroy(): void;
    protected submit(): void;
    protected handleValueChanges(): void;
    protected handlePasswordStrengthChanged(data: number | void): void;
    private getPasswordFormValues;
    protected handleBackClick(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiChangePasswordComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiChangePasswordComponent, "si-change-password", never, { "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subheading": { "alias": "subheading"; "required": false; "isSignal": true; }; "newPasswordLabel": { "alias": "newPasswordLabel"; "required": false; "isSignal": true; }; "confirmPasswordLabel": { "alias": "confirmPasswordLabel"; "required": false; "isSignal": true; }; "changeButtonLabel": { "alias": "changeButtonLabel"; "required": false; "isSignal": true; }; "backButtonLabel": { "alias": "backButtonLabel"; "required": false; "isSignal": true; }; "disableChange": { "alias": "disableChange"; "required": false; "isSignal": true; }; "passwordPolicyTitle": { "alias": "passwordPolicyTitle"; "required": false; "isSignal": true; }; "passwordPolicyContent": { "alias": "passwordPolicyContent"; "required": true; "isSignal": true; }; "passwordStrength": { "alias": "passwordStrength"; "required": true; "isSignal": true; }; "changePasswordAlert": { "alias": "changePasswordAlert"; "required": false; "isSignal": true; }; }, { "valueChanged": "valueChanged"; "changePasswordRequested": "changePasswordRequested"; "passwordStrengthChanged": "passwordStrengthChanged"; "back": "back"; }, never, never, true, never>;
}

export { SiChangePasswordComponent, SiExplicitLegalAcknowledgeComponent, SiLandingPageComponent, SiLandingPageModule, SiLoginBasicComponent, SiLoginSingleSignOnComponent };
export type { AlertConfig, ChangePassword, LandingPageWarning, UsernamePassword, UsernameValidationPayload };
