import { NgTemplateOutlet } from '@angular/common';
import * as i0 from '@angular/core';
import { Directive, input, booleanAttribute, viewChild, viewChildren, inject, ChangeDetectorRef, HostListener, Component, NgModule } from '@angular/core';
import { elementRight2, elementBreadcrumbRoot } from '@siemens/element-icons';
import { addIcons, SiIconComponent } from '@siemens/element-ng/icon';
import { SiLinkDirective } from '@siemens/element-ng/link';
import { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';
import { t, injectSiTranslateService, SiTranslatePipe } from '@siemens/element-translate-ng/translate';
import { merge, of } from 'rxjs';
import { switchMap } from 'rxjs/operators';

/**
 * Copyright (c) Siemens 2016 - 2026
 * SPDX-License-Identifier: MIT
 */
class SiBreadcrumbItemTemplateDirective {
    static ngTemplateContextGuard(directive, context) {
        return true;
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiBreadcrumbItemTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.8", type: SiBreadcrumbItemTemplateDirective, isStandalone: true, selector: "[siBreadcrumbItemTemplate]", ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiBreadcrumbItemTemplateDirective, decorators: [{
            type: Directive,
            args: [{ selector: '[siBreadcrumbItemTemplate]' }]
        }] });

/**
 * Copyright (c) Siemens 2016 - 2026
 * SPDX-License-Identifier: MIT
 */
/**
 * Defines how many items should be displayed at the end of the breadcrumb if possible.
 */
const NUMBER_OF_SHOWN_ITEMS_AT_END = 2;
/**
 * Defines how long a display item can be without it being shortened.
 * Cannot be lower than 4.
 * If this is 0, titles will not be shortened
 */
const ITEM_MAX_LENGTH = 30;
/**
 * Defines how many characters of an item are always displayed in the beginning.
 * Must be at least 2 less than ITEM_MAX_LENGTH
 */
const ITEM_CHARACTERS_ALWAYS_DISPLAYED_IN_BEGINNING = 10;
/**
 * Defines the width of the root icon in pixels.
 */
const ROOT_ICON_WIDTH = 24;
let controlIdCounter = 1;
class SiBreadcrumbComponent {
    /** Array of breadcrumb items. */
    items = input.required(...(ngDevMode ? [{ debugName: "items" }] : []));
    /**
     * Shows the "root" route as the provided title string instead of an icon.
     *
     * @defaultValue false
     */
    showRootAsText = input(false, { ...(ngDevMode ? { debugName: "showRootAsText" } : {}), transform: booleanAttribute });
    /**
     * Aria label for the main breadcrumb navigation. Needed for a11y.
     *
     * @defaultValue
     * ```
     * t(() => $localize`:@@SI_BREADCRUMB:Breadcrumbs`)
     * ```
     */
    ariaLabel = input(t(() => $localize `:@@SI_BREADCRUMB:Breadcrumbs`), ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
    translationSubscription;
    itemsProcessed = false;
    numberOfItems = 0;
    itemsShown = [];
    itemsHidden = [];
    breadcrumbShortened = false;
    ellipsesLevel = 0;
    // Record to allow for -1 (root).
    breadcrumbDropdownOpen = undefined;
    addExpandDropdown = false;
    controlId = `__si-breadcrumb-${controlIdCounter++}-`;
    icons = addIcons({ elementBreadcrumbRoot, elementRight2 });
    breadcrumbElement = viewChild.required('breadcrumb');
    breadcrumbElements = viewChildren('breadcrumbItem', ...(ngDevMode ? [{ debugName: "breadcrumbElements" }] : []));
    changeDetector = inject(ChangeDetectorRef);
    translate = injectSiTranslateService();
    ngOnChanges() {
        // Reprocess items on every change and on init
        this.processItems();
    }
    ngOnDestroy() {
        this.translationSubscription?.unsubscribe();
    }
    processItems() {
        this.numberOfItems = this.items().length;
        this.translationSubscription?.unsubscribe();
        if (this.numberOfItems) {
            this.translationSubscription = merge(this.translate.translationChange, of(undefined))
                .pipe(switchMap(() => this.translate.translateAsync(this.items().map(item => item.title))))
                .subscribe(translatedTitles => {
                // Add the level to the items and check if they need to be shortened.
                // If they need to be shortened, shorten them at a convenient place.
                // Set the lastItem tag to true for the last item
                let counter = -1;
                const enumeratedItems = this.items().map(item => {
                    counter++;
                    const title = translatedTitles[item.title];
                    let shortened = false;
                    let shortenedTitle = title;
                    // If this is not the last item and the title too long, shorten the title
                    if (counter !== this.numberOfItems - 1 && title && title.length > ITEM_MAX_LENGTH) {
                        shortened = true;
                        // This regex gets the last space, dash or underscore.
                        const regexMatch = title
                            .slice(ITEM_CHARACTERS_ALWAYS_DISPLAYED_IN_BEGINNING, ITEM_MAX_LENGTH - 2)
                            .match(/^.*[- _](?=.*?$)/);
                        if (regexMatch) {
                            shortenedTitle = title.slice(0, ITEM_CHARACTERS_ALWAYS_DISPLAYED_IN_BEGINNING + regexMatch[0].length - 1);
                        }
                        else {
                            shortenedTitle = title.slice(0, ITEM_MAX_LENGTH - 3);
                        }
                    }
                    // If the root element should be displayed as text, set level not to 0.
                    // This is used to distinguish in the template between icon and text.
                    const level = counter === 0 && this.showRootAsText() ? -1 : counter;
                    return {
                        ...item,
                        title,
                        level,
                        hide: false,
                        shortened,
                        shortenedTitle,
                        lastItem: counter === this.numberOfItems - 1
                    };
                });
                this.itemsShown = enumeratedItems;
                this.itemsHidden = [];
                this.breadcrumbShortened = false;
                this.breadcrumbDropdownOpen = undefined;
                this.itemsProcessed = true;
                this.resetBreadcrumb();
            });
        }
        else {
            this.itemsShown = [];
            this.itemsHidden = [];
            this.breadcrumbShortened = false;
            this.breadcrumbDropdownOpen = undefined;
            this.itemsProcessed = true;
            this.resetBreadcrumb();
        }
    }
    /*
     * Toggle dropdown (on click of ellipses), either for
     * the general dropdown list if itemLevel is at ellipsesLevel
     * or otherwise the name expansion at the specified item level.
     * Close any open dropdown before opening a new one.
     */
    toggleBreadcrumbDropdown(itemLevel) {
        this.breadcrumbDropdownOpen = this.breadcrumbDropdownOpen === itemLevel ? undefined : itemLevel;
    }
    // Close dropdown on click anywhere else
    documentClick(targetElement) {
        if (this.breadcrumbDropdownOpen) {
            if (!this.breadcrumbElement().nativeElement.contains(targetElement)) {
                // Close all dropdowns.
                this.breadcrumbDropdownOpen = undefined;
            }
        }
    }
    resetBreadcrumb() {
        if (this.itemsProcessed) {
            this.numberOfItems = this.items().length;
            // Add an additional the ellipses item to the end of the shownItems (breadcrumb items).
            // Disable addExpandDropdown for now, to make every item a proper SiBreadcrumbItemComponent.
            const ellipsesItem = { title: '...', level: this.numberOfItems, shortenedTitle: '' };
            this.itemsShown.push(ellipsesItem);
            if (this.breadcrumbShortened) {
                // If the breadcrumb was shortened before, remove the ellipses and add back itemsHidden (breadcrumb dropdown items).
                this.breadcrumbShortened = false;
                this.itemsShown.splice(this.ellipsesLevel, 1, ...this.itemsHidden);
                this.itemsHidden = [];
            }
            this.addExpandDropdown = false;
            // Wait for the next change detection cycle to measure the updated item length.
            this.changeDetector.detectChanges();
            this.calculateBreadcrumb();
        }
    }
    calculateBreadcrumb() {
        this.addExpandDropdown = true;
        const maxWidth = this.breadcrumbElement().nativeElement.clientWidth;
        const breadcrumbElementsList = this.breadcrumbElements().map(item => item);
        // Measure the length of the last additional ellipses item, then remove it from itemsShown (breadcrumb items).
        const ellipsesWidth = breadcrumbElementsList[this.numberOfItems].nativeElement.offsetWidth;
        this.itemsShown.splice(this.numberOfItems, 1);
        let currentWidth = this.showRootAsText() ? 0 : ROOT_ICON_WIDTH;
        const numberOfItemsKeptAtEnd = Math.min(NUMBER_OF_SHOWN_ITEMS_AT_END, this.numberOfItems - 1);
        let reverseCounter = this.numberOfItems;
        // Test for numberOfItemsKeptAtEnd items from the end if they still fit, if not, set breadcrumbShortened to true.
        breadcrumbElementsList
            .slice(this.numberOfItems - numberOfItemsKeptAtEnd, this.numberOfItems)
            .reverse()
            .map(item => {
            if (!this.breadcrumbShortened) {
                const currentItemWidth = item.nativeElement.offsetWidth;
                if (currentWidth + currentItemWidth > maxWidth) {
                    this.breadcrumbShortened = true;
                    // Test if the ellipses item still fits, if not remove last (actually next in original order) item as well.
                    if (currentWidth + ellipsesWidth > maxWidth) {
                        reverseCounter++;
                    }
                }
                else {
                    currentWidth += currentItemWidth;
                    reverseCounter--;
                }
            }
        });
        const start = this.showRootAsText() ? 0 : 1;
        let counter = start;
        // If breadcrumbShortened is not true yet, test for the rest of the items from the start
        // Whether they still fit, if not, set breadcrumbShortened to true.
        breadcrumbElementsList.slice(start, this.numberOfItems - numberOfItemsKeptAtEnd).map(item => {
            if (!this.breadcrumbShortened) {
                const currentItemWidth = item.nativeElement.offsetWidth;
                if (currentWidth + currentItemWidth > maxWidth) {
                    this.breadcrumbShortened = true;
                    // Test if the ellipses item still fits, if not remove last item as well.
                    // If the counter is still on 1, instead remove last (actually next in original order) from
                    // the previous reverse calculation
                    if (currentWidth + ellipsesWidth > maxWidth) {
                        if (counter > 1) {
                            counter--;
                        }
                        else {
                            reverseCounter++;
                        }
                    }
                }
                else {
                    currentWidth += currentItemWidth;
                    counter++;
                }
            }
        });
        // If breadcrumbShortened is true, move the items that do not fit to itemsHidden (breadcrumb dropdown items) and add ellipses item.
        if (this.breadcrumbShortened) {
            this.ellipsesLevel = counter;
            this.itemsHidden = this.itemsShown.slice(this.ellipsesLevel, reverseCounter);
            const ellipsesItem = { title: '...', level: this.ellipsesLevel, shortenedTitle: '' };
            this.itemsShown.splice(this.ellipsesLevel, reverseCounter - this.ellipsesLevel, ellipsesItem);
        }
        // Manually detect changes to prevent them from not being detected on language change
        this.changeDetector.detectChanges();
    }
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
    static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiBreadcrumbComponent, isStandalone: true, selector: "si-breadcrumb", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, showRootAsText: { classPropertyName: "showRootAsText", publicName: "showRootAsText", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "document:click": "documentClick($event.target)" } }, viewQueries: [{ propertyName: "breadcrumbElement", first: true, predicate: ["breadcrumb"], descendants: true, isSignal: true }, { propertyName: "breadcrumbElements", predicate: ["breadcrumbItem"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<nav role=\"navigation\" class=\"py-2\" [attr.aria-label]=\"ariaLabel() | translate\">\n  <ol #breadcrumb class=\"breadcrumb\" (siResizeObserver)=\"resetBreadcrumb()\">\n    @for (item of itemsShown; track $index; let isFirst = $first) {\n      @if (!breadcrumbShortened || item.level !== ellipsesLevel) {\n        @if (item.shortened) {\n          <li #breadcrumbItem class=\"item text-nowrap shortened\">\n            @if (!isFirst) {\n              <si-icon class=\"d-block separator flip-rtl\" [icon]=\"icons.elementRight2\" />\n            }\n            <div class=\"breadcrumb-dropdown-wrapper\">\n              <ng-container\n                *ngTemplateOutlet=\"\n                  toggleTemplate;\n                  context: { item: item, title: item.shortenedTitle }\n                \"\n              />\n              @if (addExpandDropdown) {\n                <div\n                  class=\"dropdown-menu\"\n                  role=\"menu\"\n                  [id]=\"controlId + item.level\"\n                  [class.show]=\"breadcrumbDropdownOpen === item.level\"\n                >\n                  <ng-container *ngTemplateOutlet=\"dropdownTemplate; context: { item: item }\" />\n                </div>\n              }\n            </div>\n          </li>\n        } @else {\n          <li #breadcrumbItem class=\"item\">\n            @if (!isFirst) {\n              <si-icon class=\"d-block icon-sm separator flip-rtl\" [icon]=\"icons.elementRight2\" />\n            }\n            <ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item }\" />\n          </li>\n        }\n      }\n      @if (breadcrumbShortened && item.level === ellipsesLevel) {\n        <li class=\"item breadcrumb-ellipses-item\">\n          @if (!isFirst) {\n            <si-icon class=\"d-block icon-sm separator flip-rtl\" [icon]=\"icons.elementRight2\" />\n          }\n          <div class=\"breadcrumb-dropdown-wrapper\">\n            <ng-container *ngTemplateOutlet=\"toggleTemplate; context: { item: item, title: '' }\" />\n            <div\n              class=\"dropdown-menu\"\n              role=\"menu\"\n              [id]=\"controlId + item.level\"\n              [class.show]=\"breadcrumbDropdownOpen === item.level\"\n            >\n              @for (item of itemsHidden; track $index) {\n                <ng-container *ngTemplateOutlet=\"dropdownTemplate; context: { item: item }\" />\n              }\n            </div>\n          </div>\n        </li>\n      }\n    }\n  </ol>\n</nav>\n\n<ng-template #itemTemplate let-item=\"item\" siBreadcrumbItemTemplate>\n  <a\n    class=\"breadcrumb-link text-nowrap\"\n    activeClass=\"active\"\n    ariaCurrent=\"page\"\n    [class.disable-router-link]=\"!item.link && !item.action && !item.href\"\n    [class.text-secondary]=\"item.lastItem\"\n    [siLink]=\"item\"\n    [exactMatch]=\"true\"\n    [attr.aria-label]=\"item.title\"\n    [attr.aria-disabled]=\"!item.link && !item.href && !item.action\"\n  >\n    @if (item.level === 0) {\n      <si-icon class=\"d-block icon-sm flip-rtl\" [icon]=\"icons.elementBreadcrumbRoot\" />\n    } @else {\n      <span>{{ item.title }}</span>\n    }\n  </a>\n</ng-template>\n\n<ng-template #toggleTemplate let-item=\"item\" let-title=\"title\" siBreadcrumbItemTemplate>\n  <div\n    class=\"breadcrumb-dropdown-toggle link\"\n    role=\"button\"\n    aria-haspopup=\"true\"\n    tabindex=\"0\"\n    [attr.aria-controls]=\"controlId + item.level\"\n    [attr.aria-expanded]=\"breadcrumbDropdownOpen === item.level\"\n    (keydown.enter)=\"toggleBreadcrumbDropdown(item.level)\"\n    (click)=\"toggleBreadcrumbDropdown(item.level)\"\n    >{{ title }}...</div\n  >\n</ng-template>\n\n<ng-template #dropdownTemplate let-item=\"item\" siBreadcrumbItemTemplate>\n  <a\n    class=\"dropdown-item breadcrumb-link focus-inside\"\n    activeClass=\"active\"\n    ariaCurrent=\"page\"\n    role=\"menuitem\"\n    [class.disable-router-link]=\"!item.link && !item.action && !item.href\"\n    [siLink]=\"item\"\n    [exactMatch]=\"true\"\n    [attr.aria-disabled]=\"!item.link && !item.action && !item.href\"\n    >{{ item.title }}</a\n  >\n</ng-template>\n", styles: [".breadcrumb{flex-wrap:nowrap}.dropdown-menu.show>.dropdown-item{background-color:var(--element-base-1)}.item{display:flex;align-items:center}.separator{color:var(--element-ui-2);margin-block:0;margin-inline:0}.breadcrumb-dropdown-toggle{cursor:pointer}.dropdown-item.active,.dropdown-item:active{background-color:var(--element-base-1)}.dropdown-item:hover,.dropdown-item:focus{background-color:var(--element-base-0)!important;text-decoration:underline}.disable-router-link,.disable-router-link:hover{pointer-events:none;color:var(--element-text-disabled)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "directive", type: SiLinkDirective, selector: "[siLink]", inputs: ["siLink", "siLinkDefaultTarget", "actionParam", "activeClass", "exactMatch", "ariaCurrent"], outputs: ["activeChange"], exportAs: ["siLink"] }, { kind: "directive", type: SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "directive", type: SiBreadcrumbItemTemplateDirective, selector: "[siBreadcrumbItemTemplate]" }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiBreadcrumbComponent, decorators: [{
            type: Component,
            args: [{ selector: 'si-breadcrumb', imports: [
                        NgTemplateOutlet,
                        SiIconComponent,
                        SiLinkDirective,
                        SiResizeObserverDirective,
                        SiTranslatePipe,
                        SiBreadcrumbItemTemplateDirective
                    ], template: "<nav role=\"navigation\" class=\"py-2\" [attr.aria-label]=\"ariaLabel() | translate\">\n  <ol #breadcrumb class=\"breadcrumb\" (siResizeObserver)=\"resetBreadcrumb()\">\n    @for (item of itemsShown; track $index; let isFirst = $first) {\n      @if (!breadcrumbShortened || item.level !== ellipsesLevel) {\n        @if (item.shortened) {\n          <li #breadcrumbItem class=\"item text-nowrap shortened\">\n            @if (!isFirst) {\n              <si-icon class=\"d-block separator flip-rtl\" [icon]=\"icons.elementRight2\" />\n            }\n            <div class=\"breadcrumb-dropdown-wrapper\">\n              <ng-container\n                *ngTemplateOutlet=\"\n                  toggleTemplate;\n                  context: { item: item, title: item.shortenedTitle }\n                \"\n              />\n              @if (addExpandDropdown) {\n                <div\n                  class=\"dropdown-menu\"\n                  role=\"menu\"\n                  [id]=\"controlId + item.level\"\n                  [class.show]=\"breadcrumbDropdownOpen === item.level\"\n                >\n                  <ng-container *ngTemplateOutlet=\"dropdownTemplate; context: { item: item }\" />\n                </div>\n              }\n            </div>\n          </li>\n        } @else {\n          <li #breadcrumbItem class=\"item\">\n            @if (!isFirst) {\n              <si-icon class=\"d-block icon-sm separator flip-rtl\" [icon]=\"icons.elementRight2\" />\n            }\n            <ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item }\" />\n          </li>\n        }\n      }\n      @if (breadcrumbShortened && item.level === ellipsesLevel) {\n        <li class=\"item breadcrumb-ellipses-item\">\n          @if (!isFirst) {\n            <si-icon class=\"d-block icon-sm separator flip-rtl\" [icon]=\"icons.elementRight2\" />\n          }\n          <div class=\"breadcrumb-dropdown-wrapper\">\n            <ng-container *ngTemplateOutlet=\"toggleTemplate; context: { item: item, title: '' }\" />\n            <div\n              class=\"dropdown-menu\"\n              role=\"menu\"\n              [id]=\"controlId + item.level\"\n              [class.show]=\"breadcrumbDropdownOpen === item.level\"\n            >\n              @for (item of itemsHidden; track $index) {\n                <ng-container *ngTemplateOutlet=\"dropdownTemplate; context: { item: item }\" />\n              }\n            </div>\n          </div>\n        </li>\n      }\n    }\n  </ol>\n</nav>\n\n<ng-template #itemTemplate let-item=\"item\" siBreadcrumbItemTemplate>\n  <a\n    class=\"breadcrumb-link text-nowrap\"\n    activeClass=\"active\"\n    ariaCurrent=\"page\"\n    [class.disable-router-link]=\"!item.link && !item.action && !item.href\"\n    [class.text-secondary]=\"item.lastItem\"\n    [siLink]=\"item\"\n    [exactMatch]=\"true\"\n    [attr.aria-label]=\"item.title\"\n    [attr.aria-disabled]=\"!item.link && !item.href && !item.action\"\n  >\n    @if (item.level === 0) {\n      <si-icon class=\"d-block icon-sm flip-rtl\" [icon]=\"icons.elementBreadcrumbRoot\" />\n    } @else {\n      <span>{{ item.title }}</span>\n    }\n  </a>\n</ng-template>\n\n<ng-template #toggleTemplate let-item=\"item\" let-title=\"title\" siBreadcrumbItemTemplate>\n  <div\n    class=\"breadcrumb-dropdown-toggle link\"\n    role=\"button\"\n    aria-haspopup=\"true\"\n    tabindex=\"0\"\n    [attr.aria-controls]=\"controlId + item.level\"\n    [attr.aria-expanded]=\"breadcrumbDropdownOpen === item.level\"\n    (keydown.enter)=\"toggleBreadcrumbDropdown(item.level)\"\n    (click)=\"toggleBreadcrumbDropdown(item.level)\"\n    >{{ title }}...</div\n  >\n</ng-template>\n\n<ng-template #dropdownTemplate let-item=\"item\" siBreadcrumbItemTemplate>\n  <a\n    class=\"dropdown-item breadcrumb-link focus-inside\"\n    activeClass=\"active\"\n    ariaCurrent=\"page\"\n    role=\"menuitem\"\n    [class.disable-router-link]=\"!item.link && !item.action && !item.href\"\n    [siLink]=\"item\"\n    [exactMatch]=\"true\"\n    [attr.aria-disabled]=\"!item.link && !item.action && !item.href\"\n    >{{ item.title }}</a\n  >\n</ng-template>\n", styles: [".breadcrumb{flex-wrap:nowrap}.dropdown-menu.show>.dropdown-item{background-color:var(--element-base-1)}.item{display:flex;align-items:center}.separator{color:var(--element-ui-2);margin-block:0;margin-inline:0}.breadcrumb-dropdown-toggle{cursor:pointer}.dropdown-item.active,.dropdown-item:active{background-color:var(--element-base-1)}.dropdown-item:hover,.dropdown-item:focus{background-color:var(--element-base-0)!important;text-decoration:underline}.disable-router-link,.disable-router-link:hover{pointer-events:none;color:var(--element-text-disabled)}\n"] }]
        }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], showRootAsText: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRootAsText", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], breadcrumbElement: [{ type: i0.ViewChild, args: ['breadcrumb', { isSignal: true }] }], breadcrumbElements: [{ type: i0.ViewChildren, args: ['breadcrumbItem', { isSignal: true }] }], documentClick: [{
                type: HostListener,
                args: ['document:click', ['$event.target']]
            }] } });

/**
 * Copyright (c) Siemens 2016 - 2026
 * SPDX-License-Identifier: MIT
 */
class SiBreadcrumbModule {
    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiBreadcrumbModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
    static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.8", ngImport: i0, type: SiBreadcrumbModule, imports: [SiBreadcrumbComponent], exports: [SiBreadcrumbComponent] });
    static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiBreadcrumbModule, imports: [SiBreadcrumbComponent] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiBreadcrumbModule, decorators: [{
            type: NgModule,
            args: [{
                    imports: [SiBreadcrumbComponent],
                    exports: [SiBreadcrumbComponent]
                }]
        }] });

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

/**
 * Generated bundle index. Do not edit.
 */

export { SiBreadcrumbComponent, SiBreadcrumbModule };
//# sourceMappingURL=siemens-element-ng-breadcrumb.mjs.map
