import * as rxjs from 'rxjs';
import { Subject } from 'rxjs';
import * as _siemens_element_translate_ng_translate from '@siemens/element-translate-ng/translate';
import { TranslatableString } from '@siemens/element-translate-ng/translate';
import * as _angular_core from '@angular/core';
import { OnDestroy, TemplateRef, Injector, OnInit, OnChanges, SimpleChanges } from '@angular/core';
import { HeaderWithDropdowns, SiHeaderDropdownTriggerDirective } from '@siemens/element-ng/header-dropdown';
import * as _siemens_element_ng_application_header from '@siemens/element-ng/application-header';
import { NavigationExtras, IsActiveMatchOptions, ActivatedRoute } from '@angular/router';

/** Root component for the application header. */
declare class SiApplicationHeaderComponent implements HeaderWithDropdowns, OnDestroy {
    private static idCounter;
    /**
     * Defines the minimum breakpoint which must be matched to expand the header / switch to desktop mode.
     *
     * @defaultValue 'sm'
     */
    readonly expandBreakpoint: _angular_core.InputSignal<"sm" | "md" | "lg" | "xl" | "xxl" | "never">;
    readonly launchpad: _angular_core.InputSignal<TemplateRef<void> | undefined>;
    /**
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_APPLICATION_HEADER.LAUNCHPAD:Launchpad`)
     * ```
     */
    readonly launchpadLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /** @internal */
    readonly closeMobileMenus: Subject<void>;
    /** @internal */
    readonly mobileNavigationExpanded: _angular_core.WritableSignal<boolean>;
    /** @internal */
    readonly hasNavigation: _angular_core.WritableSignal<boolean>;
    protected readonly openDropdownCount: _angular_core.WritableSignal<number>;
    protected readonly launchpadOpen: _angular_core.WritableSignal<boolean>;
    protected readonly id: string;
    protected toggleNavigation: _siemens_element_translate_ng_translate.TranslatableString;
    protected injector: Injector;
    protected readonly icons: Record<"elementThumbnails" | "elementMenu", string>;
    private readonly navigationToggle;
    private readonly focusTrap;
    private breakpointObserver;
    private openDropdown?;
    private closeMobileSub;
    /** @internal */
    readonly inlineDropdown: rxjs.Observable<boolean>;
    ngOnDestroy(): void;
    /** @internal */
    onDropdownItemTriggered(): void;
    /** @internal */
    dropdownClosed(trigger?: SiHeaderDropdownTriggerDirective): void;
    /** @internal */
    dropdownOpened(trigger?: SiHeaderDropdownTriggerDirective): void;
    /** @internal */
    closeLaunchpad(): void;
    /** @internal */
    openLaunchpad(): void;
    protected toggleMobileNavigationExpanded(): void;
    protected toggleLaunchpad(): void;
    protected navigationEscapePressed(): void;
    protected backdropClicked(): void;
    private openMobileNavigation;
    private closeMobileNavigation;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiApplicationHeaderComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiApplicationHeaderComponent, "si-application-header", never, { "expandBreakpoint": { "alias": "expandBreakpoint"; "required": false; "isSignal": true; }; "launchpad": { "alias": "launchpad"; "required": false; "isSignal": true; }; "launchpadLabel": { "alias": "launchpadLabel"; "required": false; "isSignal": true; }; }, {}, never, ["si-header-brand, element-header-brand", "si-header-navigation, element-header-navigation", "si-header-actions, element-header-actions"], true, never>;
}

declare class SiAccountDetailsComponent {
    /** The user's full name. */
    readonly name: _angular_core.InputSignal<string>;
    /** The user's company name. */
    readonly company: _angular_core.InputSignal<string | undefined>;
    /** The user's email address. */
    readonly email: _angular_core.InputSignal<string | undefined>;
    /** The user's role. */
    readonly userRole: _angular_core.InputSignal<TranslatableString | undefined>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiAccountDetailsComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiAccountDetailsComponent, "si-account-details", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "company": { "alias": "company"; "required": false; "isSignal": true; }; "email": { "alias": "email"; "required": false; "isSignal": true; }; "userRole": { "alias": "userRole"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

/** Adds a navigation item to the header. Should be located inside `.header-navigation`. */
declare class SiHeaderNavigationItemComponent {
    /** @internal */
    dropdownTrigger: SiHeaderDropdownTriggerDirective | null;
    protected readonly icons: Record<"elementDown2", string>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderNavigationItemComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiHeaderNavigationItemComponent, "button[si-header-navigation-item], a[si-header-navigation-item]", never, {}, {}, never, ["*"], true, never>;
}

/** Container for actions that should be collapsed in mobile mode. */
declare class SiHeaderCollapsibleActionsComponent implements OnDestroy {
    private static idCounter;
    /**
     * Accessible label of the toggle button if actions are collapsed.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_APPLICATION_HEADER.TOGGLE_ACTIONS:Toggle actions`)
     * ```
     */
    readonly mobileToggleLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /** @internal **/
    readonly mobileExpanded: _angular_core.WritableSignal<boolean>;
    /** @internal **/
    readonly badgeCount: _angular_core.WritableSignal<number>;
    protected readonly id: string;
    protected readonly icons: Record<"elementOptionsVertical", string>;
    private readonly toggle;
    private readonly focusTrap;
    private header;
    private closeMobileSub;
    private inlineChangeSubscription?;
    ngOnDestroy(): void;
    protected toggleMobileExpanded(): void;
    protected escapePressed(): void;
    private openMobile;
    private closeMobile;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderCollapsibleActionsComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiHeaderCollapsibleActionsComponent, "si-header-collapsible-actions", never, { "mobileToggleLabel": { "alias": "mobileToggleLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
}

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

declare abstract class SiHeaderActionItemBase implements OnInit {
    /** @internal */
    dropdownTrigger: SiHeaderDropdownTriggerDirective | null;
    protected collapsibleActions: SiHeaderCollapsibleActionsComponent | null;
    protected readonly icons: Record<"elementDown2", string>;
    private header;
    ngOnInit(): void;
    protected click(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderActionItemBase, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiHeaderActionItemBase, never, never, {}, {}, never, never, true, never>;
}

/**
 * Base for icon based actions.
 * @internal
 */
declare abstract class SiHeaderActionIconItemBase extends SiHeaderActionItemBase implements OnChanges, OnInit {
    /**
     * Adds a badge to the header item.
     * If type
     * - =number, the number will be shown and automatically trimmed if \>99
     * - =true, an empty red dot will be shown
     */
    readonly badge: _angular_core.InputSignal<number | boolean | null | undefined>;
    protected readonly badgeDot: _angular_core.Signal<boolean>;
    protected readonly badgeValue: _angular_core.Signal<string | undefined>;
    ngOnChanges(changes: SimpleChanges<this>): void;
    protected get visuallyHideTitle(): boolean;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderActionIconItemBase, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiHeaderActionIconItemBase, never, never, { "badge": { "alias": "badge"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

/** Adds an action item to the header. Should be located inside `.header-actions`. */
declare class SiHeaderActionItemComponent extends SiHeaderActionIconItemBase {
    /** The icon to be shown. */
    readonly icon: _angular_core.InputSignal<string>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderActionItemComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiHeaderActionItemComponent, "button[si-header-action-item], a[si-header-action-item]", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; }, {}, never, ["si-avatar", "*"], true, never>;
}

/** Adds an account item to the header. Should be located inside `.header-actions`. */
declare class SiHeaderAccountItemComponent extends SiHeaderActionIconItemBase {
    /** Name of the account. */
    readonly name: _angular_core.InputSignal<string>;
    /** Initials of the account. If not provided, they will be calculated. */
    readonly initials: _angular_core.InputSignal<string | undefined>;
    /** URL to an image which should be shown instead of the initials. */
    readonly imageUrl: _angular_core.InputSignal<string | undefined>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderAccountItemComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiHeaderAccountItemComponent, "button[si-header-account-item]", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "imageUrl": { "alias": "imageUrl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare class SiHeaderSelectionItemComponent extends SiHeaderActionItemBase {
    /**
     * Sets the open state which will only affect the arrow. Only use this property when not using {@link SiHeaderDropdownTriggerDirective}.
     *
     * @defaultValue false
     */
    readonly open: _angular_core.InputSignal<boolean>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderSelectionItemComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiHeaderSelectionItemComponent, "button[si-header-selection-item]", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
}

/** The siemens logo. Should be located inside `.header-brand`. */
declare class SiHeaderLogoDirective implements OnInit {
    protected readonly logoText: _angular_core.WritableSignal<string | undefined>;
    private elementRef;
    private injector;
    ngOnInit(): void;
    protected updateLogoText(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderLogoDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiHeaderLogoDirective, "si-header-logo, [siHeaderLogo]", never, {}, {}, never, never, true, never>;
}

/**
 * The siemens logo.
 * Should be located inside `.header-brand`.
 *
 * @deprecated Use the {@link SiHeaderLogoDirective} instead.
 * The new component will use the logo provided by the global theme instead
 * of containing a hard coded siemens logo.
 * ```html
 * // previous
 * <a si-header-siemens-logo routerLink="/" aria-label="Siemens" class="d-none d-md-flex"></a>
 * // new
 * <a siHeaderLogo routerLink="/" class="d-none d-md-flex"></a>
 * ```
 *
 */
declare class SiHeaderSiemensLogoComponent extends SiHeaderLogoDirective {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderSiemensLogoComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiHeaderSiemensLogoComponent, "si-header-siemens-logo, [si-header-siemens-logo]", never, {}, {}, never, never, true, never>;
}

declare class SiHeaderActionsDirective {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderActionsDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiHeaderActionsDirective, "si-header-actions", never, {}, {}, never, never, true, never>;
}

declare class SiHeaderBrandDirective {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderBrandDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiHeaderBrandDirective, "si-header-brand", never, {}, {}, never, never, true, never>;
}

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

declare class SiHeaderNavigationComponent implements OnDestroy {
    protected header: SiApplicationHeaderComponent;
    protected readonly icons: Record<"elementThumbnails", string>;
    constructor();
    ngOnDestroy(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiHeaderNavigationComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiHeaderNavigationComponent, "si-header-navigation", never, {}, {}, never, ["*"], true, never>;
}

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

/** Represents an app to be shown in the launchpad. */
interface AppLink extends AppBase {
    /** The type of the app. can be either 'link' or 'router-link' */
    type?: 'link';
    /** URL destination of the app. */
    href: string;
    /** Value for the anchor target attribute. */
    target?: string;
    /** Whether the app is the currently running app. */
    active?: boolean;
}
interface AppRouterLink extends AppBase {
    type: 'router-link';
    /** Link for the angular router. Accepts the same values as {@link https://angular.dev/api/router/RouterLink}. */
    routerLink: string | any[];
    /** Navigation extras that are passed to the {@link https://angular.dev/api/router/NavigationExtras}. */
    extras?: NavigationExtras;
    /** Active match options for routerLinkActive {@link https://angular.dev/api/router/IsActiveMatchOptions}.*/
    activeMatchOptions?: {
        exact: boolean;
    } | IsActiveMatchOptions;
}
/** Represents a categories in the launchpad. */
interface AppCategory {
    /** The name of the app category. */
    name?: TranslatableString;
    /** The apps to show under this category.  */
    apps: App[];
}
interface AppBase {
    /** Name of the app */
    name: TranslatableString;
    /** Name of the related system. */
    systemName?: TranslatableString;
    /** Icon of the app. */
    iconUrl?: string;
    /** CSS class to apply, which should render the icon. Typically, "element-*". */
    iconClass?: string;
    /** Whether the app is marked as favorite.  */
    favorite?: boolean;
    /** Whether the app should be marked as external. */
    external?: boolean;
}
type App = AppLink | AppRouterLink;

interface FavoriteChangeEvent {
    app: App;
    favorite: boolean;
}
declare class SiLaunchpadFactoryComponent {
    /**
     * Text to close the launchpad. Needed for a11y.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_LAUNCHPAD.CLOSE:Close launchpad`)
     * ```
     */
    readonly closeText: _angular_core.InputSignal<TranslatableString>;
    /**
     * Title of the launchpad.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_LAUNCHPAD.TITLE:Switch applications`)
     * ```
     */
    readonly titleText: _angular_core.InputSignal<TranslatableString>;
    /**
     * Subtitle of the launchpad.
     * When not provided, no subtitle is displayed.
     */
    readonly subtitleText: _angular_core.InputSignal<TranslatableString | undefined>;
    /** All app items shown in the launchpad. */
    readonly apps: _angular_core.InputSignal<App[] | AppCategory[]>;
    /**
     * Allow the user to select favorite apps which will then be displayed at the top.
     *
     * @defaultValue false
     */
    readonly enableFavorites: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Title of the favorite apps section.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_LAUNCHPAD.FAVORITE_APPS:Favorites`)
     * ```
     */
    readonly favoriteAppsText: _angular_core.InputSignal<TranslatableString>;
    /**
     * Title of the show more apps button.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_LAUNCHPAD.SHOW_MORE:Show more`)
     * ```
     */
    readonly showMoreAppsText: _angular_core.InputSignal<TranslatableString>;
    /**
     * Title of the show less apps button.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_LAUNCHPAD.SHOW_LESS:Show less`)
     * ```
     */
    readonly showLessAppsText: _angular_core.InputSignal<TranslatableString>;
    readonly favoriteChange: _angular_core.OutputEmitterRef<FavoriteChangeEvent>;
    protected showAllApps: boolean;
    protected readonly categories: _angular_core.Signal<AppCategory[]>;
    protected readonly favorites: _angular_core.Signal<(_siemens_element_ng_application_header.AppLink | _siemens_element_ng_application_header.AppRouterLink)[]>;
    protected readonly hasFavorites: _angular_core.Signal<boolean>;
    protected readonly icons: Record<"elementDown2" | "elementCancel", string>;
    protected readonly activatedRoute: ActivatedRoute | null;
    private header;
    protected closeLaunchpad(): void;
    protected toggleFavorite(app: App, favorite: boolean): void;
    protected escape(): void;
    protected isCategories(items: App[] | AppCategory[]): items is AppCategory[];
    protected isFavoriteToggleDisabled(app: App): boolean;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiLaunchpadFactoryComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiLaunchpadFactoryComponent, "si-launchpad-factory", never, { "closeText": { "alias": "closeText"; "required": false; "isSignal": true; }; "titleText": { "alias": "titleText"; "required": false; "isSignal": true; }; "subtitleText": { "alias": "subtitleText"; "required": false; "isSignal": true; }; "apps": { "alias": "apps"; "required": true; "isSignal": true; }; "enableFavorites": { "alias": "enableFavorites"; "required": false; "isSignal": true; }; "favoriteAppsText": { "alias": "favoriteAppsText"; "required": false; "isSignal": true; }; "showMoreAppsText": { "alias": "showMoreAppsText"; "required": false; "isSignal": true; }; "showLessAppsText": { "alias": "showLessAppsText"; "required": false; "isSignal": true; }; }, { "favoriteChange": "favoriteChange"; }, never, never, true, never>;
}

export { SiAccountDetailsComponent, SiApplicationHeaderComponent, SiHeaderAccountItemComponent, SiHeaderActionItemComponent, SiHeaderActionsDirective, SiHeaderBrandDirective, SiHeaderCollapsibleActionsComponent, SiHeaderLogoDirective, SiHeaderNavigationComponent, SiHeaderNavigationItemComponent, SiHeaderSelectionItemComponent, SiHeaderSiemensLogoComponent, SiLaunchpadFactoryComponent };
export type { App, AppBase, AppCategory, AppLink, AppRouterLink, FavoriteChangeEvent };
