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 { OnChanges, OnInit, SimpleChanges } from '@angular/core';
import { NavigationExtras, IsActiveMatchOptions, ActivatedRoute } from '@angular/router';
import { MenuItem } from '@siemens/element-ng/common';

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

/** Common properties shared among navbar item types. */
interface NavbarVerticalItemBase {
    /** The ID is required if the navbar is used with UIState. */
    id?: string;
    /** Label that is shown to the user. */
    label: TranslatableString;
    /** Optional icon that will be rendered before the label. */
    icon?: string;
    /** Badge that is rendered after the label or as a red dot in the collapsed state. */
    badge?: string | number;
    /** Color of the badge.
     * Use any color shown here {@link https://element.siemens.io/components/status-notifications/badges/#example}
     * without `bg-` prefix.
     */
    badgeColor?: string;
    /**
     * Hide badge when navbar is collapsed.
     * By default, badges are always visible (both expanded and collapsed).
     */
    hideBadgeWhenCollapsed?: boolean;
}
/** Use this type to create a group that can hold multiple items. */
interface NavbarVerticalItemGroup extends NavbarVerticalItemBase {
    type: 'group';
    /** Submenu items for this menu item. */
    children: NavbarVerticalSubItem[];
    /** Set this property if the item should be expanded by default. */
    expanded?: boolean;
}
/** Use this type to create a routerLink item. */
interface NavbarVerticalItemRouterLink extends NavbarVerticalItemBase {
    type: 'router-link';
    /** Link for the angular router. Accepts the same values as {@link RouterLink}. */
    routerLink: string | any[];
    /** Navigation extras that are passed to the {@link RouterLink}. */
    extras?: NavigationExtras;
    /** Active match options for routerLinkActive */
    activeMatchOptions?: {
        exact: boolean;
    } | IsActiveMatchOptions;
}
/** Use this type to create an href link that will cause a real navigation. */
interface NavbarVerticalItemLink extends NavbarVerticalItemBase {
    type: 'link';
    /** The href property of the anchor. */
    href: string;
    /** The target property of the anchor. */
    target?: string;
}
/**
 * AVOID USING THIS TYPE!
 * Actions inside the navbar are an indication for a code smell.
 *
 * Use {@link NavbarVerticalItemRouterLink} instead whenever possible.
 */
interface NavbarVerticalItemAction extends NavbarVerticalItemBase {
    type: 'action';
    /** Action that is called when the navbar item is triggered. */
    action: (source: this) => void;
    /**
     * The active state of the item.
     * Note: It must be set manually.
     */
    active?: boolean;
}
interface NavbarVerticalItemHeader {
    type: 'header';
    label: TranslatableString;
}
interface NavbarVerticalItemDivider {
    type: 'divider';
}
/** Union type for all possible all items in the navbar. */
type NavbarVerticalItem = NavbarVerticalItemGroup | NavbarVerticalItemRouterLink | NavbarVerticalItemLink | NavbarVerticalItemAction | NavbarVerticalItemHeader | NavbarVerticalItemDivider;
/** Union type for all items that can be wrapped in a group. */
type NavbarVerticalSubItem = NavbarVerticalItemRouterLink | NavbarVerticalItemLink | NavbarVerticalItemAction;

/** Required to have compiler checks on the factory template */
declare class SiNavbarVerticalItemGuardDirective {
    static ngTemplateContextGuard(dir: SiNavbarVerticalItemGuardDirective, ctx: any): ctx is {
        item: NavbarVerticalItem;
        group: NavbarVerticalItemGroup;
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiNavbarVerticalItemGuardDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SiNavbarVerticalItemGuardDirective, "[siNavbarVerticalItemGuard]", never, {}, {}, never, never, true, never>;
}
declare class SiNavbarVerticalComponent implements OnChanges, OnInit {
    protected readonly icons: Record<"elementSearch" | "elementDoubleLeft" | "elementDoubleRight", string>;
    /**
     * Whether the navbar-vertical is collapsed.
     *
     * @defaultValue false
     */
    readonly collapsed: _angular_core.ModelSignal<boolean>;
    /**
     * Toggles search bar
     *
     * @defaultValue false
     */
    readonly searchable: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Placeholder text for search
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_NAVBAR_VERTICAL.SEARCH_PLACEHOLDER:Search ...`)
     * ```
     */
    readonly searchPlaceholder: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * List of vertical navigation items
     *
     * @defaultValue []
     */
    readonly items: _angular_core.ModelSignal<(MenuItem | NavbarVerticalItem)[]>;
    /**
     * Set to `true` if there are no icons
     *
     * @defaultValue false
     */
    /**
     * Set to `true` if there are no icons
     *
     * @defaultValue false
     */
    readonly textOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Set to false to hide the vertical navbar
     *
     * @defaultValue true
     */
    /**
     * Set to false to hide the vertical navbar
     *
     * @defaultValue true
     */
    readonly visible: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Text for the navbar expand button. Required for a11y
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_NAVBAR_VERTICAL.EXPAND:Expand`)
     * ```
     */
    readonly navbarExpandButtonText: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Text for the navbar collapse button. Required for a11y
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_NAVBAR_VERTICAL.COLLAPSE:Collapse`)
     * ```
     */
    readonly navbarCollapseButtonText: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * An optional stateId to uniquely identify a component instance.
     * Required for persistence of ui state.
     */
    readonly stateId: _angular_core.InputSignal<string | undefined>;
    /**
     * Label for the skip link to the vertical navbar
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_NAVBAR_VERTICAL.SKIP_LINK.NAVIGATION_LABEL:Navigation`)
     * ```
     */
    readonly skipLinkNavigationLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Label for the skip link to main content
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_NAVBAR_VERTICAL.SKIP_LINK.MAIN_LABEL:Main content`)
     * ```
     */
    readonly skipLinkMainContentLabel: _angular_core.InputSignal<_siemens_element_translate_ng_translate.TranslatableString>;
    /**
     * Debounce time for the search input
     * @defaultValue 400
     */
    readonly searchDebounceTime: _angular_core.InputSignal<number>;
    /**
     * Output for search bar input
     */
    readonly searchEvent: _angular_core.OutputEmitterRef<string>;
    private readonly searchBar;
    protected readonly activatedRoute: ActivatedRoute | null;
    protected readonly ready = true;
    private uiStateService;
    private breakpointObserver;
    private readonly navbarItems;
    private readonly navbarItemsLegacy;
    private readonly itemsToComponents;
    protected readonly smallScreen: _angular_core.WritableSignal<boolean>;
    protected readonly uiStateExpandedItems: _angular_core.WritableSignal<Record<string, boolean>>;
    private preferCollapse;
    constructor();
    ngOnChanges(changes: SimpleChanges<this>): void;
    ngOnInit(): void;
    protected toggleCollapse(): void;
    /** Expands the vertical navbar. */
    expand(): void;
    /** Collapses the vertical navbar. */
    collapse(): void;
    protected expandForSearch(): void;
    protected doSearch(event: string): void;
    /** @internal */
    groupTriggered(): void;
    protected saveUIState(): void;
    /** @internal */
    itemTriggered(): void;
    protected isLegacyStyle(item: MenuItem | NavbarVerticalItem): item is MenuItem;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiNavbarVerticalComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiNavbarVerticalComponent, "si-navbar-vertical", never, { "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "textOnly": { "alias": "textOnly"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "navbarExpandButtonText": { "alias": "navbarExpandButtonText"; "required": false; "isSignal": true; }; "navbarCollapseButtonText": { "alias": "navbarCollapseButtonText"; "required": false; "isSignal": true; }; "stateId": { "alias": "stateId"; "required": false; "isSignal": true; }; "skipLinkNavigationLabel": { "alias": "skipLinkNavigationLabel"; "required": false; "isSignal": true; }; "skipLinkMainContentLabel": { "alias": "skipLinkMainContentLabel"; "required": false; "isSignal": true; }; "searchDebounceTime": { "alias": "searchDebounceTime"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; "items": "itemsChange"; "searchEvent": "searchEvent"; }, never, ["*"], true, never>;
}

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

export { SiNavbarVerticalComponent, SiNavbarVerticalItemGuardDirective, SiNavbarVerticalModule };
export type { NavbarVerticalItem, NavbarVerticalItemAction, NavbarVerticalItemBase, NavbarVerticalItemDivider, NavbarVerticalItemGroup, NavbarVerticalItemHeader, NavbarVerticalItemLink, NavbarVerticalItemRouterLink, NavbarVerticalSubItem };
