@siemens/element-ng 47.5.0 → 47.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/breadcrumb-router/index.d.ts +8 -0
- package/breadcrumb-router/package.json +3 -0
- package/breadcrumb-router/si-breadcrumb-default-resolver.service.d.ts +23 -0
- package/breadcrumb-router/si-breadcrumb-router.component.d.ts +30 -0
- package/breadcrumb-router/si-breadcrumb-router.model.d.ts +53 -0
- package/breadcrumb-router/si-breadcrumb-router.module.d.ts +7 -0
- package/date-range-filter/si-date-range-filter.component.d.ts +5 -1
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +263 -0
- package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-breadcrumb.mjs +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-date-range-filter.mjs +26 -5
- package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-formly.mjs +2 -2
- package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-icon.mjs +8 -22
- package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-main-detail-container.mjs +269 -0
- package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-modal.mjs +1 -1
- package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs +802 -0
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-resize-observer.mjs +6 -3
- package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-side-panel.mjs +1 -1
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-bar.mjs +1 -1
- package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tabs-next.mjs +29 -164
- package/fesm2022/siemens-element-ng-tabs-next.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tabs.mjs +1 -1
- package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-threshold.mjs +319 -0
- package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-tour.mjs +384 -0
- package/fesm2022/siemens-element-ng-tour.mjs.map +1 -0
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-wizard.mjs +1 -1
- package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
- package/icon/si-status-icon.component.d.ts +1 -6
- package/main-detail-container/index.d.ts +6 -0
- package/main-detail-container/package.json +3 -0
- package/main-detail-container/si-main-detail-container.component.d.ts +151 -0
- package/main-detail-container/si-main-detail-container.module.d.ts +7 -0
- package/navbar-vertical/index.d.ts +7 -0
- package/navbar-vertical/package.json +3 -0
- package/navbar-vertical/si-navbar-vertical-divider.component.d.ts +5 -0
- package/navbar-vertical/si-navbar-vertical-group-trigger.directive.d.ts +38 -0
- package/navbar-vertical/si-navbar-vertical-group.component.d.ts +16 -0
- package/navbar-vertical/si-navbar-vertical-header.component.d.ts +6 -0
- package/navbar-vertical/si-navbar-vertical-item-legacy.component.d.ts +17 -0
- package/navbar-vertical/si-navbar-vertical-item.component.d.ts +21 -0
- package/navbar-vertical/si-navbar-vertical.component.d.ts +148 -0
- package/navbar-vertical/si-navbar-vertical.model.d.ts +77 -0
- package/navbar-vertical/si-navbar-vertical.module.d.ts +7 -0
- package/navbar-vertical/si-navbar-vertical.provider.d.ts +7 -0
- package/package.json +24 -4
- package/resize-observer/si-resize-observer.directive.d.ts +3 -1
- package/tabs-next/si-tab-next-base.directive.d.ts +2 -5
- package/tabs-next/si-tab-next-link.component.d.ts +0 -2
- package/tabs-next/si-tabset-next.component.d.ts +3 -18
- package/template-i18n.json +16 -0
- package/threshold/index.d.ts +6 -0
- package/threshold/package.json +3 -0
- package/threshold/si-readonly-threshold-option.component.d.ts +11 -0
- package/threshold/si-threshold.component.d.ts +147 -0
- package/threshold/si-threshold.module.d.ts +7 -0
- package/tour/index.d.ts +6 -0
- package/tour/package.json +3 -0
- package/tour/si-tour-highlight.component.d.ts +15 -0
- package/tour/si-tour-token.model.d.ts +27 -0
- package/tour/si-tour.component.d.ts +31 -0
- package/tour/si-tour.model.d.ts +51 -0
- package/tour/si-tour.service.d.ts +62 -0
- package/translate/si-translatable-keys.interface.d.ts +16 -0
- package/tree-view/si-tree-view.component.d.ts +1 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Siemens 2016 - 2025.
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*/
|
|
5
|
+
export * from './si-breadcrumb-default-resolver.service';
|
|
6
|
+
export * from './si-breadcrumb-router.component';
|
|
7
|
+
export * from './si-breadcrumb-router.model';
|
|
8
|
+
export * from './si-breadcrumb-router.module';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ActivatedRouteSnapshot } from '@angular/router';
|
|
2
|
+
import { BreadcrumbItem } from '@siemens/element-ng/breadcrumb';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { SiBreadcrumbResolverService } from './si-breadcrumb-router.model';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class SiBreadcrumbDefaultResolverService implements SiBreadcrumbResolverService {
|
|
7
|
+
private locale;
|
|
8
|
+
/**
|
|
9
|
+
* Method which resolves the route and creates the breadcrumb items from it.
|
|
10
|
+
* Is called by the `si-breadcrumb-router-component` but can also be called manually in inheritance patterns.
|
|
11
|
+
*/
|
|
12
|
+
resolve(route: ActivatedRouteSnapshot): BreadcrumbItem[] | Observable<BreadcrumbItem[]>;
|
|
13
|
+
private resolveCustomRoutePart;
|
|
14
|
+
private resolveDefault;
|
|
15
|
+
private getUrl;
|
|
16
|
+
private getName;
|
|
17
|
+
private calculateName;
|
|
18
|
+
private calculateUrl;
|
|
19
|
+
private calculate;
|
|
20
|
+
private findParam;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SiBreadcrumbDefaultResolverService, never>;
|
|
22
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SiBreadcrumbDefaultResolverService>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Siemens 2016 - 2025.
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*/
|
|
5
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
6
|
+
import { BreadcrumbItem } from '@siemens/element-ng/breadcrumb';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export declare class SiBreadcrumbRouterComponent implements OnInit, OnDestroy {
|
|
9
|
+
/**
|
|
10
|
+
* Aria label for the main breadcrumb navigation. Needed for a11y.
|
|
11
|
+
*
|
|
12
|
+
* @defaultValue 'breadcrumb'
|
|
13
|
+
*/
|
|
14
|
+
readonly ariaLabel: import("@angular/core").InputSignal<string>;
|
|
15
|
+
protected readonly items: import("@angular/core").WritableSignal<BreadcrumbItem[]>;
|
|
16
|
+
private readonly currentCalcUrl;
|
|
17
|
+
private nextRoute;
|
|
18
|
+
private resolverService;
|
|
19
|
+
private route?;
|
|
20
|
+
private router?;
|
|
21
|
+
private routerSubscription?;
|
|
22
|
+
ngOnInit(): void;
|
|
23
|
+
ngOnDestroy(): void;
|
|
24
|
+
private checkItems;
|
|
25
|
+
private computePath;
|
|
26
|
+
private findRouteWithUrl;
|
|
27
|
+
private getUrl;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SiBreadcrumbRouterComponent, never>;
|
|
29
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SiBreadcrumbRouterComponent, "si-breadcrumb-router", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Siemens 2016 - 2025.
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*/
|
|
5
|
+
import { InjectionToken } from '@angular/core';
|
|
6
|
+
import { ActivatedRouteSnapshot } from '@angular/router';
|
|
7
|
+
import { BreadcrumbItem } from '@siemens/element-ng/breadcrumb';
|
|
8
|
+
import { TranslatableString } from '@siemens/element-translate-ng/translate';
|
|
9
|
+
import { Observable } from 'rxjs';
|
|
10
|
+
/**
|
|
11
|
+
* Defines the title and link of a breadcrumb item in a
|
|
12
|
+
* route configuration and compatible to {@link BreadcrumbItem}.
|
|
13
|
+
*
|
|
14
|
+
* ```
|
|
15
|
+
* {
|
|
16
|
+
* path: 'user-manual',
|
|
17
|
+
* component: UserManualComponent,
|
|
18
|
+
* data: {
|
|
19
|
+
* siBreadcrumb: [
|
|
20
|
+
* { title: 'USER_MANUAL.HEADING', link: '/main/user-manual' }
|
|
21
|
+
* ]
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
export interface BreadcrumbRouterLink {
|
|
28
|
+
/**
|
|
29
|
+
* Angular router link for the breadcrumb item.
|
|
30
|
+
*/
|
|
31
|
+
link?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Breadcrumb item title that will be translated.
|
|
34
|
+
*/
|
|
35
|
+
title: TranslatableString;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Service interface to resolve the breadcrumb items on the base of a route.
|
|
39
|
+
*/
|
|
40
|
+
export interface SiBreadcrumbResolverService {
|
|
41
|
+
resolve(route: ActivatedRouteSnapshot): BreadcrumbItem[] | Observable<BreadcrumbItem[]>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Injection token to provide your own `SiBreadcrumbResolverService` implementation.
|
|
45
|
+
*
|
|
46
|
+
* ```
|
|
47
|
+
* providers: [{
|
|
48
|
+
* provide: SI_BREADCRUMB_RESOLVER_SERVICE,
|
|
49
|
+
* useClass: CustomBreadcrumbResolverService,
|
|
50
|
+
* }]
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare const SI_BREADCRUMB_RESOLVER_SERVICE: InjectionToken<SiBreadcrumbResolverService>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./si-breadcrumb-router.component";
|
|
3
|
+
export declare class SiBreadcrumbRouterModule {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SiBreadcrumbRouterModule, never>;
|
|
5
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SiBreadcrumbRouterModule, never, [typeof i1.SiBreadcrumbRouterComponent], [typeof i1.SiBreadcrumbRouterComponent]>;
|
|
6
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<SiBreadcrumbRouterModule>;
|
|
7
|
+
}
|
|
@@ -9,6 +9,8 @@ export declare class PresetMatchFilterPipe implements PipeTransform {
|
|
|
9
9
|
}
|
|
10
10
|
export declare class SiDateRangeFilterComponent implements OnChanges {
|
|
11
11
|
private readonly service;
|
|
12
|
+
private readonly mediaMatcher;
|
|
13
|
+
protected readonly smallScreen: boolean;
|
|
12
14
|
/** The filter range object */
|
|
13
15
|
readonly range: import("@angular/core").ModelSignal<DateRangeFilter>;
|
|
14
16
|
/** List of preset time ranges. When not present or empty, the preset section won't show */
|
|
@@ -216,6 +218,7 @@ export declare class SiDateRangeFilterComponent implements OnChanges {
|
|
|
216
218
|
readonly applyClicked: import("@angular/core").OutputEmitterRef<void>;
|
|
217
219
|
/** Base configuration on how the dates should be displayed, parts of it may be overwritten internally. */
|
|
218
220
|
readonly datepickerConfig: import("@angular/core").InputSignal<DatepickerInputConfig | undefined>;
|
|
221
|
+
protected readonly icons: Record<"elementDown2", string>;
|
|
219
222
|
protected advancedMode: boolean;
|
|
220
223
|
protected dateRange: DateRange;
|
|
221
224
|
protected point1Now: boolean;
|
|
@@ -230,6 +233,7 @@ export declare class SiDateRangeFilterComponent implements OnChanges {
|
|
|
230
233
|
protected readonly dateRangeConfig: import("@angular/core").Signal<DatepickerConfig>;
|
|
231
234
|
protected readonly filteredPresetList: import("@angular/core").Signal<DateRangePreset[]>;
|
|
232
235
|
protected readonly presetFilter: import("@angular/core").WritableSignal<string>;
|
|
236
|
+
protected readonly presetOpen: import("@angular/core").WritableSignal<boolean>;
|
|
233
237
|
protected readonly inputMode: import("@angular/core").Signal<boolean>;
|
|
234
238
|
ngOnChanges(changes: SimpleChanges): void;
|
|
235
239
|
private getDateNow;
|
|
@@ -242,7 +246,7 @@ export declare class SiDateRangeFilterComponent implements OnChanges {
|
|
|
242
246
|
protected updateFromDateRange(): void;
|
|
243
247
|
protected point1Changed(): void;
|
|
244
248
|
protected point2Changed(): void;
|
|
245
|
-
protected selectPresetItem(item: DateRangePreset): void;
|
|
249
|
+
protected selectPresetItem(event: Event, item: DateRangePreset): void;
|
|
246
250
|
static ɵfac: i0.ɵɵFactoryDeclaration<SiDateRangeFilterComponent, never>;
|
|
247
251
|
static ɵcmp: i0.ɵɵComponentDeclaration<SiDateRangeFilterComponent, "si-date-range-filter", never, { "range": { "alias": "range"; "required": true; "isSignal": true; }; "presetList": { "alias": "presetList"; "required": false; "isSignal": true; }; "presetSearch": { "alias": "presetSearch"; "required": false; "isSignal": true; }; "enableTimeSelection": { "alias": "enableTimeSelection"; "required": false; "isSignal": true; }; "basicMode": { "alias": "basicMode"; "required": false; "isSignal": true; }; "reverseInputFields": { "alias": "reverseInputFields"; "required": false; "isSignal": true; }; "showApplyButton": { "alias": "showApplyButton"; "required": false; "isSignal": true; }; "hideAdvancedMode": { "alias": "hideAdvancedMode"; "required": false; "isSignal": true; }; "refLabel": { "alias": "refLabel"; "required": false; "isSignal": true; }; "fromLabel": { "alias": "fromLabel"; "required": false; "isSignal": true; }; "toLabel": { "alias": "toLabel"; "required": false; "isSignal": true; }; "rangeLabel": { "alias": "rangeLabel"; "required": false; "isSignal": true; }; "todayLabel": { "alias": "todayLabel"; "required": false; "isSignal": true; }; "nowLabel": { "alias": "nowLabel"; "required": false; "isSignal": true; }; "dateLabel": { "alias": "dateLabel"; "required": false; "isSignal": true; }; "previewLabel": { "alias": "previewLabel"; "required": false; "isSignal": true; }; "datePlaceholder": { "alias": "datePlaceholder"; "required": false; "isSignal": true; }; "beforeLabel": { "alias": "beforeLabel"; "required": false; "isSignal": true; }; "afterLabel": { "alias": "afterLabel"; "required": false; "isSignal": true; }; "withinLabel": { "alias": "withinLabel"; "required": false; "isSignal": true; }; "valueLabel": { "alias": "valueLabel"; "required": false; "isSignal": true; }; "unitLabel": { "alias": "unitLabel"; "required": false; "isSignal": true; }; "searchLabel": { "alias": "searchLabel"; "required": false; "isSignal": true; }; "presetLabel": { "alias": "presetLabel"; "required": false; "isSignal": true; }; "advancedLabel": { "alias": "advancedLabel"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "datepickerConfig": { "alias": "datepickerConfig"; "required": false; "isSignal": true; }; }, { "range": "rangeChange"; "applyClicked": "applyClicked"; }, never, never, true, never>;
|
|
248
252
|
}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, LOCALE_ID, Injectable, InjectionToken, input, signal, Component, NgModule } from '@angular/core';
|
|
3
|
+
import { ActivatedRoute, Router, NavigationEnd } from '@angular/router';
|
|
4
|
+
import { SiBreadcrumbComponent } from '@siemens/element-ng/breadcrumb';
|
|
5
|
+
import { Subject, Observable } from 'rxjs';
|
|
6
|
+
import { filter, takeUntil } from 'rxjs/operators';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Copyright Siemens 2016 - 2025.
|
|
10
|
+
* SPDX-License-Identifier: MIT
|
|
11
|
+
*/
|
|
12
|
+
class SiBreadcrumbDefaultResolverService {
|
|
13
|
+
locale = inject(LOCALE_ID).toString();
|
|
14
|
+
/**
|
|
15
|
+
* Method which resolves the route and creates the breadcrumb items from it.
|
|
16
|
+
* Is called by the `si-breadcrumb-router-component` but can also be called manually in inheritance patterns.
|
|
17
|
+
*/
|
|
18
|
+
resolve(route) {
|
|
19
|
+
if (route.data.siBreadcrumb) {
|
|
20
|
+
return this.resolveCustomRoutePart(route);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return this.resolveDefault(route);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
resolveCustomRoutePart(route) {
|
|
27
|
+
if (route.data.siBreadcrumb) {
|
|
28
|
+
const rawLinks = route.data.siBreadcrumb;
|
|
29
|
+
return rawLinks.map(rl => ({
|
|
30
|
+
title: this.calculateName(route, rl.title),
|
|
31
|
+
link: rl.link ? this.calculateUrl(route, rl.link) : route.fragment
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
resolveDefault(route) {
|
|
37
|
+
const links = [];
|
|
38
|
+
let currRoute = route;
|
|
39
|
+
while (currRoute != null) {
|
|
40
|
+
if (currRoute.data.siBreadcrumb) {
|
|
41
|
+
links.unshift(...this.resolveCustomRoutePart(currRoute));
|
|
42
|
+
}
|
|
43
|
+
else if (currRoute.url.length > 0) {
|
|
44
|
+
const routeUrl = this.getUrl(currRoute);
|
|
45
|
+
const routeName = this.getName(currRoute);
|
|
46
|
+
let link;
|
|
47
|
+
if (links.length === 0) {
|
|
48
|
+
link = { title: routeName };
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
link = { title: routeName, link: routeUrl };
|
|
52
|
+
}
|
|
53
|
+
links.unshift(link);
|
|
54
|
+
}
|
|
55
|
+
currRoute = currRoute.parent;
|
|
56
|
+
}
|
|
57
|
+
return links;
|
|
58
|
+
}
|
|
59
|
+
getUrl(route) {
|
|
60
|
+
const parent = route.parent;
|
|
61
|
+
let url;
|
|
62
|
+
if (parent != null) {
|
|
63
|
+
url = this.getUrl(parent);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
url = '';
|
|
67
|
+
}
|
|
68
|
+
const myUrl = route.url.map(o => o.toString()).join('/');
|
|
69
|
+
if (!url.endsWith('/')) {
|
|
70
|
+
url = url + '/';
|
|
71
|
+
}
|
|
72
|
+
url = url + myUrl;
|
|
73
|
+
return url;
|
|
74
|
+
}
|
|
75
|
+
getName(route) {
|
|
76
|
+
let name = route.data.title ?? route.url[0].path;
|
|
77
|
+
if (typeof name === 'object') {
|
|
78
|
+
name = name[this.locale];
|
|
79
|
+
}
|
|
80
|
+
return this.calculateName(route, name);
|
|
81
|
+
}
|
|
82
|
+
calculateName(route, baseName) {
|
|
83
|
+
return this.calculate(route, baseName, /{(\w+)}/g);
|
|
84
|
+
}
|
|
85
|
+
calculateUrl(route, baseName) {
|
|
86
|
+
return this.calculate(route, baseName, /:(\w+)\/?/g, ':', '');
|
|
87
|
+
}
|
|
88
|
+
calculate(route, base, pattern, replaceStart = '{', replaceEnd = '}') {
|
|
89
|
+
let name = base;
|
|
90
|
+
const values = [];
|
|
91
|
+
let finding;
|
|
92
|
+
// tslint:disable-next-line:no-conditional-assignment
|
|
93
|
+
while ((finding = pattern.exec(name)) != null) {
|
|
94
|
+
values.push(finding[1]);
|
|
95
|
+
}
|
|
96
|
+
values.forEach(value => {
|
|
97
|
+
let replace = this.findParam(route, value);
|
|
98
|
+
if (route.data.replaceValues) {
|
|
99
|
+
replace = route.data.replaceValues[replace] ?? replace;
|
|
100
|
+
}
|
|
101
|
+
name = name.replace(`${replaceStart}${value}${replaceEnd}`, replace);
|
|
102
|
+
});
|
|
103
|
+
return name;
|
|
104
|
+
}
|
|
105
|
+
findParam(route, paramKey) {
|
|
106
|
+
return (route.paramMap.get(paramKey) ??
|
|
107
|
+
(route.parent ? this.findParam(route.parent, paramKey) : paramKey));
|
|
108
|
+
}
|
|
109
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiBreadcrumbDefaultResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
110
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiBreadcrumbDefaultResolverService, providedIn: 'root' });
|
|
111
|
+
}
|
|
112
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiBreadcrumbDefaultResolverService, decorators: [{
|
|
113
|
+
type: Injectable,
|
|
114
|
+
args: [{ providedIn: 'root' }]
|
|
115
|
+
}] });
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Copyright Siemens 2016 - 2025.
|
|
119
|
+
* SPDX-License-Identifier: MIT
|
|
120
|
+
*/
|
|
121
|
+
/**
|
|
122
|
+
* Injection token to provide your own `SiBreadcrumbResolverService` implementation.
|
|
123
|
+
*
|
|
124
|
+
* ```
|
|
125
|
+
* providers: [{
|
|
126
|
+
* provide: SI_BREADCRUMB_RESOLVER_SERVICE,
|
|
127
|
+
* useClass: CustomBreadcrumbResolverService,
|
|
128
|
+
* }]
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
const SI_BREADCRUMB_RESOLVER_SERVICE = new InjectionToken('si.breadcrumb.resolver.service', { providedIn: 'root', factory: () => inject(SiBreadcrumbDefaultResolverService) });
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Copyright Siemens 2016 - 2025.
|
|
135
|
+
* SPDX-License-Identifier: MIT
|
|
136
|
+
*/
|
|
137
|
+
class SiBreadcrumbRouterComponent {
|
|
138
|
+
/**
|
|
139
|
+
* Aria label for the main breadcrumb navigation. Needed for a11y.
|
|
140
|
+
*
|
|
141
|
+
* @defaultValue 'breadcrumb'
|
|
142
|
+
*/
|
|
143
|
+
ariaLabel = input('breadcrumb');
|
|
144
|
+
items = signal([]);
|
|
145
|
+
currentCalcUrl = signal(undefined);
|
|
146
|
+
nextRoute = new Subject();
|
|
147
|
+
resolverService = inject(SI_BREADCRUMB_RESOLVER_SERVICE);
|
|
148
|
+
route = inject(ActivatedRoute, { optional: true });
|
|
149
|
+
router = inject(Router, { optional: true });
|
|
150
|
+
routerSubscription;
|
|
151
|
+
ngOnInit() {
|
|
152
|
+
this.checkItems();
|
|
153
|
+
}
|
|
154
|
+
ngOnDestroy() {
|
|
155
|
+
this.routerSubscription?.unsubscribe();
|
|
156
|
+
this.nextRoute.next();
|
|
157
|
+
}
|
|
158
|
+
checkItems() {
|
|
159
|
+
if (!this.routerSubscription && this.route && this.router) {
|
|
160
|
+
this.routerSubscription = this.router.events
|
|
161
|
+
.pipe(filter(e => e instanceof NavigationEnd))
|
|
162
|
+
.subscribe(navigationEvent => {
|
|
163
|
+
const event = navigationEvent;
|
|
164
|
+
// Get the new url
|
|
165
|
+
const newUrl = event.urlAfterRedirects || event.url;
|
|
166
|
+
// Only update when url differs from previous url
|
|
167
|
+
if (this.currentCalcUrl() !== newUrl) {
|
|
168
|
+
this.currentCalcUrl.set(newUrl);
|
|
169
|
+
this.nextRoute.next();
|
|
170
|
+
this.computePath();
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
if (this.router.navigated) {
|
|
174
|
+
this.currentCalcUrl.set(this.router.url);
|
|
175
|
+
this.computePath();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
computePath() {
|
|
180
|
+
if (!this.route || !this.resolverService) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
// Get a snapshot of the all current activate routes
|
|
184
|
+
const pathFromRoot = this.route.snapshot.pathFromRoot;
|
|
185
|
+
// Find the child/leaf route that fits to the url
|
|
186
|
+
const route = this.findRouteWithUrl(pathFromRoot, this.currentCalcUrl()?.split('?')[0] ?? '');
|
|
187
|
+
if (route) {
|
|
188
|
+
// Workaround to fix a bug that the route is null, in some cases
|
|
189
|
+
const links$ = this.resolverService.resolve(route);
|
|
190
|
+
if (links$ instanceof Observable) {
|
|
191
|
+
links$.pipe(takeUntil(this.nextRoute)).subscribe(links => {
|
|
192
|
+
this.items.set([{ link: '/', title: '/' }, ...links]);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
this.items.set([{ link: '/', title: '/' }, ...links$]);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
findRouteWithUrl(routes, url) {
|
|
201
|
+
let result = null;
|
|
202
|
+
for (const route of routes) {
|
|
203
|
+
const routeUrl = this.getUrl(route);
|
|
204
|
+
if (url === routeUrl && !route.data?.siBreadcrumbIgnore) {
|
|
205
|
+
result = route;
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
result = this.findRouteWithUrl(route.children, url);
|
|
210
|
+
if (result != null) {
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return result;
|
|
216
|
+
}
|
|
217
|
+
getUrl(route) {
|
|
218
|
+
let url = '';
|
|
219
|
+
for (const routeSegment of route.pathFromRoot) {
|
|
220
|
+
const myUrl = routeSegment.url.map(o => o.toString()).join('/');
|
|
221
|
+
if (!url.endsWith('/')) {
|
|
222
|
+
url = url + '/';
|
|
223
|
+
}
|
|
224
|
+
url = url + myUrl;
|
|
225
|
+
}
|
|
226
|
+
return url;
|
|
227
|
+
}
|
|
228
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiBreadcrumbRouterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
229
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.6", type: SiBreadcrumbRouterComponent, isStandalone: true, selector: "si-breadcrumb-router", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<si-breadcrumb [items]=\"items()\" [ariaLabel]=\"ariaLabel()\" />\n", dependencies: [{ kind: "component", type: SiBreadcrumbComponent, selector: "si-breadcrumb", inputs: ["items", "showRootAsText", "ariaLabel"] }] });
|
|
230
|
+
}
|
|
231
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiBreadcrumbRouterComponent, decorators: [{
|
|
232
|
+
type: Component,
|
|
233
|
+
args: [{ selector: 'si-breadcrumb-router', imports: [SiBreadcrumbComponent], template: "<si-breadcrumb [items]=\"items()\" [ariaLabel]=\"ariaLabel()\" />\n" }]
|
|
234
|
+
}] });
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Copyright Siemens 2016 - 2025.
|
|
238
|
+
* SPDX-License-Identifier: MIT
|
|
239
|
+
*/
|
|
240
|
+
class SiBreadcrumbRouterModule {
|
|
241
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiBreadcrumbRouterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
242
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: SiBreadcrumbRouterModule, imports: [SiBreadcrumbRouterComponent], exports: [SiBreadcrumbRouterComponent] });
|
|
243
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiBreadcrumbRouterModule, imports: [SiBreadcrumbRouterComponent] });
|
|
244
|
+
}
|
|
245
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiBreadcrumbRouterModule, decorators: [{
|
|
246
|
+
type: NgModule,
|
|
247
|
+
args: [{
|
|
248
|
+
imports: [SiBreadcrumbRouterComponent],
|
|
249
|
+
exports: [SiBreadcrumbRouterComponent]
|
|
250
|
+
}]
|
|
251
|
+
}] });
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Copyright Siemens 2016 - 2025.
|
|
255
|
+
* SPDX-License-Identifier: MIT
|
|
256
|
+
*/
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Generated bundle index. Do not edit.
|
|
260
|
+
*/
|
|
261
|
+
|
|
262
|
+
export { SI_BREADCRUMB_RESOLVER_SERVICE, SiBreadcrumbDefaultResolverService, SiBreadcrumbRouterComponent, SiBreadcrumbRouterModule };
|
|
263
|
+
//# sourceMappingURL=siemens-element-ng-breadcrumb-router.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-breadcrumb-router.mjs","sources":["../../../../projects/element-ng/breadcrumb-router/si-breadcrumb-default-resolver.service.ts","../../../../projects/element-ng/breadcrumb-router/si-breadcrumb-router.model.ts","../../../../projects/element-ng/breadcrumb-router/si-breadcrumb-router.component.ts","../../../../projects/element-ng/breadcrumb-router/si-breadcrumb-router.component.html","../../../../projects/element-ng/breadcrumb-router/si-breadcrumb-router.module.ts","../../../../projects/element-ng/breadcrumb-router/index.ts","../../../../projects/element-ng/breadcrumb-router/siemens-element-ng-breadcrumb-router.ts"],"sourcesContent":["/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { inject, Injectable, LOCALE_ID } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { BreadcrumbItem } from '@siemens/element-ng/breadcrumb';\nimport { Observable } from 'rxjs';\n\nimport { BreadcrumbRouterLink, SiBreadcrumbResolverService } from './si-breadcrumb-router.model';\n\n@Injectable({ providedIn: 'root' })\nexport class SiBreadcrumbDefaultResolverService implements SiBreadcrumbResolverService {\n private locale = inject(LOCALE_ID).toString();\n\n /**\n * Method which resolves the route and creates the breadcrumb items from it.\n * Is called by the `si-breadcrumb-router-component` but can also be called manually in inheritance patterns.\n */\n resolve(route: ActivatedRouteSnapshot): BreadcrumbItem[] | Observable<BreadcrumbItem[]> {\n if (route.data.siBreadcrumb) {\n return this.resolveCustomRoutePart(route)!;\n } else {\n return this.resolveDefault(route);\n }\n }\n\n private resolveCustomRoutePart(route: ActivatedRouteSnapshot): BreadcrumbItem[] | undefined {\n if (route.data.siBreadcrumb) {\n const rawLinks = route.data.siBreadcrumb as BreadcrumbRouterLink[];\n return rawLinks.map(\n rl =>\n ({\n title: this.calculateName(route, rl.title),\n link: rl.link ? this.calculateUrl(route, rl.link) : route.fragment!\n }) as BreadcrumbItem\n );\n }\n return;\n }\n\n private resolveDefault(route: ActivatedRouteSnapshot | null): BreadcrumbItem[] {\n const links: BreadcrumbItem[] = [];\n let currRoute = route;\n while (currRoute != null) {\n if (currRoute.data.siBreadcrumb) {\n links.unshift(...this.resolveCustomRoutePart(currRoute)!);\n } else if (currRoute.url.length > 0) {\n const routeUrl: string = this.getUrl(currRoute);\n const routeName: string = this.getName(currRoute);\n let link: BreadcrumbItem;\n if (links.length === 0) {\n link = { title: routeName } as BreadcrumbItem;\n } else {\n link = { title: routeName, link: routeUrl } as BreadcrumbItem;\n }\n links.unshift(link);\n }\n currRoute = currRoute.parent;\n }\n return links;\n }\n\n private getUrl(route: ActivatedRouteSnapshot): string {\n const parent = route.parent;\n let url: string;\n if (parent != null) {\n url = this.getUrl(parent);\n } else {\n url = '';\n }\n const myUrl: string = route.url.map(o => o.toString()).join('/');\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n url = url + myUrl;\n return url;\n }\n\n private getName(route: ActivatedRouteSnapshot): string {\n let name: string = route.data.title ?? route.url[0].path;\n if (typeof name === 'object') {\n name = name[this.locale];\n }\n\n return this.calculateName(route, name);\n }\n\n private calculateName(route: ActivatedRouteSnapshot, baseName: string): string {\n return this.calculate(route, baseName, /{(\\w+)}/g);\n }\n\n private calculateUrl(route: ActivatedRouteSnapshot, baseName: string): string {\n return this.calculate(route, baseName, /:(\\w+)\\/?/g, ':', '');\n }\n\n private calculate(\n route: ActivatedRouteSnapshot,\n base: string,\n pattern: RegExp,\n replaceStart = '{',\n replaceEnd = '}'\n ): string {\n let name = base;\n const values: string[] = [];\n\n let finding: RegExpExecArray | null;\n // tslint:disable-next-line:no-conditional-assignment\n while ((finding = pattern.exec(name)) != null) {\n values.push(finding[1]);\n }\n\n values.forEach(value => {\n let replace = this.findParam(route, value);\n if (route.data.replaceValues) {\n replace = route.data.replaceValues[replace] ?? replace;\n }\n name = name.replace(`${replaceStart}${value}${replaceEnd}`, replace);\n });\n\n return name;\n }\n\n private findParam(route: ActivatedRouteSnapshot, paramKey: string): string {\n return (\n route.paramMap.get(paramKey) ??\n (route.parent ? this.findParam(route.parent, paramKey) : paramKey)\n );\n }\n}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { inject, InjectionToken } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { BreadcrumbItem } from '@siemens/element-ng/breadcrumb';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { Observable } from 'rxjs';\n\nimport { SiBreadcrumbDefaultResolverService } from './si-breadcrumb-default-resolver.service';\n\n/**\n * Defines the title and link of a breadcrumb item in a\n * route configuration and compatible to {@link BreadcrumbItem}.\n *\n * ```\n * {\n * path: 'user-manual',\n * component: UserManualComponent,\n * data: {\n * siBreadcrumb: [\n * { title: 'USER_MANUAL.HEADING', link: '/main/user-manual' }\n * ]\n * }\n * }\n * ```\n *\n */\nexport interface BreadcrumbRouterLink {\n /**\n * Angular router link for the breadcrumb item.\n */\n link?: string;\n /**\n * Breadcrumb item title that will be translated.\n */\n title: TranslatableString;\n}\n\n/**\n * Service interface to resolve the breadcrumb items on the base of a route.\n */\nexport interface SiBreadcrumbResolverService {\n resolve(route: ActivatedRouteSnapshot): BreadcrumbItem[] | Observable<BreadcrumbItem[]>;\n}\n\n/**\n * Injection token to provide your own `SiBreadcrumbResolverService` implementation.\n *\n * ```\n * providers: [{\n * provide: SI_BREADCRUMB_RESOLVER_SERVICE,\n * useClass: CustomBreadcrumbResolverService,\n * }]\n * ```\n */\nexport const SI_BREADCRUMB_RESOLVER_SERVICE = new InjectionToken<SiBreadcrumbResolverService>(\n 'si.breadcrumb.resolver.service',\n { providedIn: 'root', factory: () => inject(SiBreadcrumbDefaultResolverService) }\n);\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { Component, inject, input, OnDestroy, OnInit, signal } from '@angular/core';\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationEnd, Router } from '@angular/router';\nimport { BreadcrumbItem, SiBreadcrumbComponent } from '@siemens/element-ng/breadcrumb';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { SI_BREADCRUMB_RESOLVER_SERVICE } from './si-breadcrumb-router.model';\n\n@Component({\n selector: 'si-breadcrumb-router',\n templateUrl: './si-breadcrumb-router.component.html',\n imports: [SiBreadcrumbComponent]\n})\nexport class SiBreadcrumbRouterComponent implements OnInit, OnDestroy {\n /**\n * Aria label for the main breadcrumb navigation. Needed for a11y.\n *\n * @defaultValue 'breadcrumb'\n */\n readonly ariaLabel = input('breadcrumb');\n\n protected readonly items = signal<BreadcrumbItem[]>([]);\n\n private readonly currentCalcUrl = signal<string | undefined>(undefined);\n private nextRoute = new Subject<void>();\n private resolverService = inject(SI_BREADCRUMB_RESOLVER_SERVICE);\n private route? = inject(ActivatedRoute, { optional: true });\n private router? = inject(Router, { optional: true });\n private routerSubscription?: Subscription;\n\n ngOnInit(): void {\n this.checkItems();\n }\n\n ngOnDestroy(): void {\n this.routerSubscription?.unsubscribe();\n this.nextRoute.next();\n }\n\n private checkItems(): void {\n if (!this.routerSubscription && this.route && this.router) {\n this.routerSubscription = this.router.events\n .pipe(filter(e => e instanceof NavigationEnd))\n .subscribe(navigationEvent => {\n const event = navigationEvent as NavigationEnd;\n // Get the new url\n const newUrl = event.urlAfterRedirects || event.url;\n // Only update when url differs from previous url\n\n if (this.currentCalcUrl() !== newUrl) {\n this.currentCalcUrl.set(newUrl);\n this.nextRoute.next();\n this.computePath();\n }\n });\n\n if (this.router.navigated) {\n this.currentCalcUrl.set(this.router.url);\n this.computePath();\n }\n }\n }\n\n private computePath(): void {\n if (!this.route || !this.resolverService) {\n return;\n }\n\n // Get a snapshot of the all current activate routes\n const pathFromRoot: ActivatedRouteSnapshot[] = this.route.snapshot.pathFromRoot;\n\n // Find the child/leaf route that fits to the url\n const route = this.findRouteWithUrl(pathFromRoot, this.currentCalcUrl()?.split('?')[0] ?? '');\n\n if (route) {\n // Workaround to fix a bug that the route is null, in some cases\n const links$ = this.resolverService.resolve(route);\n if (links$ instanceof Observable) {\n links$.pipe(takeUntil(this.nextRoute)).subscribe(links => {\n this.items.set([{ link: '/', title: '/' }, ...links]);\n });\n } else {\n this.items.set([{ link: '/', title: '/' }, ...links$]);\n }\n }\n }\n\n private findRouteWithUrl(\n routes: ActivatedRouteSnapshot[],\n url: string\n ): ActivatedRouteSnapshot | null {\n let result: ActivatedRouteSnapshot | null = null;\n for (const route of routes) {\n const routeUrl = this.getUrl(route);\n if (url === routeUrl && !route.data?.siBreadcrumbIgnore) {\n result = route;\n break;\n } else {\n result = this.findRouteWithUrl(route.children, url);\n if (result != null) {\n break;\n }\n }\n }\n return result;\n }\n\n private getUrl(route: ActivatedRouteSnapshot): string {\n let url = '';\n for (const routeSegment of route.pathFromRoot) {\n const myUrl: string = routeSegment.url.map(o => o.toString()).join('/');\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n url = url + myUrl;\n }\n return url;\n }\n}\n","<si-breadcrumb [items]=\"items()\" [ariaLabel]=\"ariaLabel()\" />\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiBreadcrumbRouterComponent } from './si-breadcrumb-router.component';\n\n@NgModule({\n imports: [SiBreadcrumbRouterComponent],\n exports: [SiBreadcrumbRouterComponent]\n})\nexport class SiBreadcrumbRouterModule {}\n","/**\n * Copyright Siemens 2016 - 2025.\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-breadcrumb-default-resolver.service';\nexport * from './si-breadcrumb-router.component';\nexport * from './si-breadcrumb-router.model';\nexport * from './si-breadcrumb-router.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAAA;;;AAGG;MASU,kCAAkC,CAAA;IACrC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;AAE7C;;;AAGG;AACH,IAAA,OAAO,CAAC,KAA6B,EAAA;AACnC,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAE;;aACrC;AACL,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;;;AAI7B,IAAA,sBAAsB,CAAC,KAA6B,EAAA;AAC1D,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE;AAC3B,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,YAAsC;YAClE,OAAO,QAAQ,CAAC,GAAG,CACjB,EAAE,KACC;gBACC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;gBAC1C,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC3D,aAAA,CAAmB,CACvB;;QAEH;;AAGM,IAAA,cAAc,CAAC,KAAoC,EAAA;QACzD,MAAM,KAAK,GAAqB,EAAE;QAClC,IAAI,SAAS,GAAG,KAAK;AACrB,QAAA,OAAO,SAAS,IAAI,IAAI,EAAE;AACxB,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC/B,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAE,CAAC;;iBACpD,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,MAAM,QAAQ,GAAW,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/C,MAAM,SAAS,GAAW,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AACjD,gBAAA,IAAI,IAAoB;AACxB,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,oBAAA,IAAI,GAAG,EAAE,KAAK,EAAE,SAAS,EAAoB;;qBACxC;oBACL,IAAI,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAoB;;AAE/D,gBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;;AAErB,YAAA,SAAS,GAAG,SAAS,CAAC,MAAM;;AAE9B,QAAA,OAAO,KAAK;;AAGN,IAAA,MAAM,CAAC,KAA6B,EAAA;AAC1C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,QAAA,IAAI,GAAW;AACf,QAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,YAAA,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;;aACpB;YACL,GAAG,GAAG,EAAE;;QAEV,MAAM,KAAK,GAAW,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAChE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,GAAG,GAAG,GAAG,GAAG,GAAG;;AAEjB,QAAA,GAAG,GAAG,GAAG,GAAG,KAAK;AACjB,QAAA,OAAO,GAAG;;AAGJ,IAAA,OAAO,CAAC,KAA6B,EAAA;AAC3C,QAAA,IAAI,IAAI,GAAW,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;AACxD,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;QAG1B,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC;;IAGhC,aAAa,CAAC,KAA6B,EAAE,QAAgB,EAAA;QACnE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC;;IAG5C,YAAY,CAAC,KAA6B,EAAE,QAAgB,EAAA;AAClE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,CAAC;;AAGvD,IAAA,SAAS,CACf,KAA6B,EAC7B,IAAY,EACZ,OAAe,EACf,YAAY,GAAG,GAAG,EAClB,UAAU,GAAG,GAAG,EAAA;QAEhB,IAAI,IAAI,GAAG,IAAI;QACf,MAAM,MAAM,GAAa,EAAE;AAE3B,QAAA,IAAI,OAA+B;;AAEnC,QAAA,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC7C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;;AAGzB,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;YACrB,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;AAC1C,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC5B,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO;;AAExD,YAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAG,EAAA,YAAY,CAAG,EAAA,KAAK,GAAG,UAAU,CAAA,CAAE,EAAE,OAAO,CAAC;AACtE,SAAC,CAAC;AAEF,QAAA,OAAO,IAAI;;IAGL,SAAS,CAAC,KAA6B,EAAE,QAAgB,EAAA;QAC/D,QACE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;aAC3B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC;;uGAlH3D,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cADrB,MAAM,EAAA,CAAA;;2FACnB,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACXlC;;;AAGG;AA4CH;;;;;;;;;AASG;AACU,MAAA,8BAA8B,GAAG,IAAI,cAAc,CAC9D,gCAAgC,EAChC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC,kCAAkC,CAAC,EAAE;;AC3DnF;;;AAGG;MAcU,2BAA2B,CAAA;AACtC;;;;AAIG;AACM,IAAA,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC;AAErB,IAAA,KAAK,GAAG,MAAM,CAAmB,EAAE,CAAC;AAEtC,IAAA,cAAc,GAAG,MAAM,CAAqB,SAAS,CAAC;AAC/D,IAAA,SAAS,GAAG,IAAI,OAAO,EAAQ;AAC/B,IAAA,eAAe,GAAG,MAAM,CAAC,8BAA8B,CAAC;IACxD,KAAK,GAAI,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACnD,MAAM,GAAI,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5C,IAAA,kBAAkB;IAE1B,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,EAAE;;IAGnB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;;IAGf,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AACzD,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;iBACnC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,aAAa,CAAC;iBAC5C,SAAS,CAAC,eAAe,IAAG;gBAC3B,MAAM,KAAK,GAAG,eAAgC;;gBAE9C,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,GAAG;;AAGnD,gBAAA,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,MAAM,EAAE;AACpC,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;AAC/B,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;oBACrB,IAAI,CAAC,WAAW,EAAE;;AAEtB,aAAC,CAAC;AAEJ,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;gBACzB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;gBACxC,IAAI,CAAC,WAAW,EAAE;;;;IAKhB,WAAW,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACxC;;;QAIF,MAAM,YAAY,GAA6B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY;;QAG/E,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE7F,IAAI,KAAK,EAAE;;YAET,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC;AAClD,YAAA,IAAI,MAAM,YAAY,UAAU,EAAE;AAChC,gBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;oBACvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;AACvD,iBAAC,CAAC;;iBACG;gBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;;;;IAKpD,gBAAgB,CACtB,MAAgC,EAChC,GAAW,EAAA;QAEX,IAAI,MAAM,GAAkC,IAAI;AAChD,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACnC,IAAI,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,EAAE;gBACvD,MAAM,GAAG,KAAK;gBACd;;iBACK;gBACL,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC;AACnD,gBAAA,IAAI,MAAM,IAAI,IAAI,EAAE;oBAClB;;;;AAIN,QAAA,OAAO,MAAM;;AAGP,IAAA,MAAM,CAAC,KAA6B,EAAA;QAC1C,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,YAAY,EAAE;YAC7C,MAAM,KAAK,GAAW,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACvE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtB,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG;;AAEjB,YAAA,GAAG,GAAG,GAAG,GAAG,KAAK;;AAEnB,QAAA,OAAO,GAAG;;uGAvGD,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBxC,qEACA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDcY,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAEpB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,sBAAsB,EAAA,OAAA,EAEvB,CAAC,qBAAqB,CAAC,EAAA,QAAA,EAAA,qEAAA,EAAA;;;AEflC;;;AAGG;MASU,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAxB,wBAAwB,EAAA,OAAA,EAAA,CAHzB,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAC3B,2BAA2B,CAAA,EAAA,CAAA;AAE1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAHzB,2BAA2B,CAAA,EAAA,CAAA;;2FAG1B,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,2BAA2B,CAAC;oBACtC,OAAO,EAAE,CAAC,2BAA2B;AACtC,iBAAA;;;ACXD;;;AAGG;;ACHH;;AAEG;;;;"}
|
|
@@ -255,7 +255,7 @@ class SiBreadcrumbComponent {
|
|
|
255
255
|
this.changeDetector.detectChanges();
|
|
256
256
|
}
|
|
257
257
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
258
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", 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\" [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-next class=\"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 }\n @if (!item.shortened) {\n <li #breadcrumbItem class=\"item\">\n @if (!isFirst) {\n <si-icon-next class=\"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-next class=\"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-next class=\"icon flip-rtl\" [icon]=\"icons.elementBreadcrumbRoot\" />\n }\n @if (item.level !== 0) {\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{font-size:1.5rem;color:var(--element-ui-2);margin-block:-.25rem;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: SiIconNextComponent, selector: "si-icon-next", 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"], outputs: ["siResizeObserver"] }, { kind: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }, { kind: "directive", type: SiBreadcrumbItemTemplateDirective, selector: "[siBreadcrumbItemTemplate]" }] });
|
|
258
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.6", 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\" [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-next class=\"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 }\n @if (!item.shortened) {\n <li #breadcrumbItem class=\"item\">\n @if (!isFirst) {\n <si-icon-next class=\"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-next class=\"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-next class=\"icon flip-rtl\" [icon]=\"icons.elementBreadcrumbRoot\" />\n }\n @if (item.level !== 0) {\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{font-size:1.5rem;color:var(--element-ui-2);margin-block:-.25rem;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: SiIconNextComponent, selector: "si-icon-next", 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: "ngmodule", type: SiTranslateModule }, { kind: "pipe", type: i1.SiTranslatePipe, name: "translate" }, { kind: "directive", type: SiBreadcrumbItemTemplateDirective, selector: "[siBreadcrumbItemTemplate]" }] });
|
|
259
259
|
}
|
|
260
260
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: SiBreadcrumbComponent, decorators: [{
|
|
261
261
|
type: Component,
|