@siemens/element-ng 47.4.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.
Files changed (198) hide show
  1. package/breadcrumb-router/index.d.ts +8 -0
  2. package/breadcrumb-router/package.json +3 -0
  3. package/breadcrumb-router/si-breadcrumb-default-resolver.service.d.ts +23 -0
  4. package/breadcrumb-router/si-breadcrumb-router.component.d.ts +30 -0
  5. package/breadcrumb-router/si-breadcrumb-router.model.d.ts +53 -0
  6. package/breadcrumb-router/si-breadcrumb-router.module.d.ts +7 -0
  7. package/common/models/status-type.model.d.ts +2 -0
  8. package/datatable/index.d.ts +42 -0
  9. package/datatable/package.json +3 -0
  10. package/datatable/si-datatable-interaction.directive.d.ts +34 -0
  11. package/datatable/si-datatable.module.d.ts +7 -0
  12. package/date-range-filter/si-date-range-filter.component.d.ts +5 -1
  13. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +263 -0
  14. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -0
  15. package/fesm2022/siemens-element-ng-breadcrumb.mjs +1 -1
  16. package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  18. package/fesm2022/siemens-element-ng-datatable.mjs +173 -0
  19. package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -0
  20. package/fesm2022/siemens-element-ng-date-range-filter.mjs +26 -5
  21. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  22. package/fesm2022/siemens-element-ng-filtered-search.mjs +1139 -0
  23. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -0
  24. package/fesm2022/siemens-element-ng-formly.mjs +935 -0
  25. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -0
  26. package/fesm2022/siemens-element-ng-icon.mjs +29 -15
  27. package/fesm2022/siemens-element-ng-icon.mjs.map +1 -1
  28. package/fesm2022/siemens-element-ng-list-details.mjs +390 -0
  29. package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -0
  30. package/fesm2022/siemens-element-ng-loading-spinner.mjs +15 -12
  31. package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
  32. package/fesm2022/siemens-element-ng-main-detail-container.mjs +269 -0
  33. package/fesm2022/siemens-element-ng-main-detail-container.mjs.map +1 -0
  34. package/fesm2022/siemens-element-ng-modal.mjs +5 -2
  35. package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
  36. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +802 -0
  37. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -0
  38. package/fesm2022/siemens-element-ng-password-strength.mjs +22 -16
  39. package/fesm2022/siemens-element-ng-password-strength.mjs.map +1 -1
  40. package/fesm2022/siemens-element-ng-phone-number.mjs +426 -0
  41. package/fesm2022/siemens-element-ng-phone-number.mjs.map +1 -0
  42. package/fesm2022/siemens-element-ng-resize-observer.mjs +6 -3
  43. package/fesm2022/siemens-element-ng-resize-observer.mjs.map +1 -1
  44. package/fesm2022/siemens-element-ng-result-details-list.mjs +74 -0
  45. package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -0
  46. package/fesm2022/siemens-element-ng-shadow-root.mjs +70 -0
  47. package/fesm2022/siemens-element-ng-shadow-root.mjs.map +1 -0
  48. package/fesm2022/siemens-element-ng-side-panel.mjs +554 -0
  49. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -0
  50. package/fesm2022/siemens-element-ng-status-bar.mjs +348 -0
  51. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -0
  52. package/fesm2022/siemens-element-ng-tabs-next.mjs +356 -0
  53. package/fesm2022/siemens-element-ng-tabs-next.mjs.map +1 -0
  54. package/fesm2022/siemens-element-ng-tabs.mjs +1 -1
  55. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  56. package/fesm2022/siemens-element-ng-threshold.mjs +319 -0
  57. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -0
  58. package/fesm2022/siemens-element-ng-tour.mjs +384 -0
  59. package/fesm2022/siemens-element-ng-tour.mjs.map +1 -0
  60. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  61. package/fesm2022/siemens-element-ng-tree-view.mjs +2936 -0
  62. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -0
  63. package/fesm2022/siemens-element-ng-wizard.mjs +2 -2
  64. package/fesm2022/siemens-element-ng-wizard.mjs.map +1 -1
  65. package/filtered-search/index.d.ts +7 -0
  66. package/filtered-search/package.json +3 -0
  67. package/filtered-search/si-filtered-search-helper.d.ts +22 -0
  68. package/filtered-search/si-filtered-search-value.component.d.ts +53 -0
  69. package/filtered-search/si-filtered-search.component.d.ts +329 -0
  70. package/filtered-search/si-filtered-search.model.d.ts +139 -0
  71. package/filtered-search/si-filtered-search.module.d.ts +7 -0
  72. package/filtered-search/values/date-value/si-filtered-search-date-value.component.d.ts +57 -0
  73. package/filtered-search/values/si-filtered-search-value.base.d.ts +27 -0
  74. package/filtered-search/values/typeahead/si-filtered-search-typeahead.component.d.ts +45 -0
  75. package/formly/fields/button/si-formly-button.component.d.ts +7 -0
  76. package/formly/fields/date-range/si-formly-date-range.component.d.ts +6 -0
  77. package/formly/fields/datetime/si-formly-datetime.component.d.ts +13 -0
  78. package/formly/fields/email/si-formly-email.component.d.ts +6 -0
  79. package/formly/fields/ip-input/si-formly-ip-input.component.d.ts +6 -0
  80. package/formly/fields/number/si-formly-number.component.d.ts +6 -0
  81. package/formly/fields/password/si-formly-password.component.d.ts +6 -0
  82. package/formly/fields/select/si-formly-select.component.d.ts +6 -0
  83. package/formly/fields/text/si-formly-text-display.component.d.ts +7 -0
  84. package/formly/fields/textarea/si-formly-textarea.component.d.ts +18 -0
  85. package/formly/fields/time/si-formly-time.component.d.ts +13 -0
  86. package/formly/index.d.ts +6 -0
  87. package/formly/package.json +3 -0
  88. package/formly/si-formly-translate.extension.d.ts +11 -0
  89. package/formly/si-formly.component.d.ts +62 -0
  90. package/formly/si-formly.module.d.ts +35 -0
  91. package/formly/structural/si-formly-accordion/si-formly-accordion.component.d.ts +13 -0
  92. package/formly/structural/si-formly-array/si-formly-array.component.d.ts +6 -0
  93. package/formly/structural/si-formly-object/si-formly-object.component.d.ts +6 -0
  94. package/formly/structural/si-formly-object-grid/si-formly-object-grid.component.d.ts +22 -0
  95. package/formly/structural/si-formly-object-grid/si-formly-object-grid.model.d.ts +21 -0
  96. package/formly/structural/si-formly-object-plain/si-formly-object-plain.component.d.ts +6 -0
  97. package/formly/structural/si-formly-tabset/si-formly-object-tabset.component.d.ts +7 -0
  98. package/formly/utils.d.ts +6 -0
  99. package/formly/wrapper/si-formly-fieldset.component.d.ts +8 -0
  100. package/formly/wrapper/si-formly-form-field-provider.directive.d.ts +19 -0
  101. package/formly/wrapper/si-formly-horizontal-wrapper.component.d.ts +6 -0
  102. package/formly/wrapper/si-formly-icon-wrapper.component.d.ts +6 -0
  103. package/formly/wrapper/si-formly-wrapper.component.d.ts +8 -0
  104. package/icon/element-icons.d.ts +5 -0
  105. package/list-details/index.d.ts +12 -0
  106. package/list-details/package.json +3 -0
  107. package/list-details/si-details-pane/si-details-pane.component.d.ts +8 -0
  108. package/list-details/si-details-pane-body/si-details-pane-body.component.d.ts +6 -0
  109. package/list-details/si-details-pane-footer/si-details-pane-footer.component.d.ts +6 -0
  110. package/list-details/si-details-pane-header/si-details-pane-header.component.d.ts +38 -0
  111. package/list-details/si-list-details.component.d.ts +100 -0
  112. package/list-details/si-list-pane/si-list-pane.component.d.ts +10 -0
  113. package/list-details/si-list-pane-body/si-list-pane-body.component.d.ts +6 -0
  114. package/list-details/si-list-pane-header/si-list-pane-header.component.d.ts +6 -0
  115. package/loading-spinner/si-loading-spinner.directive.d.ts +3 -2
  116. package/main-detail-container/index.d.ts +6 -0
  117. package/main-detail-container/package.json +3 -0
  118. package/main-detail-container/si-main-detail-container.component.d.ts +151 -0
  119. package/main-detail-container/si-main-detail-container.module.d.ts +7 -0
  120. package/navbar-vertical/index.d.ts +7 -0
  121. package/navbar-vertical/package.json +3 -0
  122. package/navbar-vertical/si-navbar-vertical-divider.component.d.ts +5 -0
  123. package/navbar-vertical/si-navbar-vertical-group-trigger.directive.d.ts +38 -0
  124. package/navbar-vertical/si-navbar-vertical-group.component.d.ts +16 -0
  125. package/navbar-vertical/si-navbar-vertical-header.component.d.ts +6 -0
  126. package/navbar-vertical/si-navbar-vertical-item-legacy.component.d.ts +17 -0
  127. package/navbar-vertical/si-navbar-vertical-item.component.d.ts +21 -0
  128. package/navbar-vertical/si-navbar-vertical.component.d.ts +148 -0
  129. package/navbar-vertical/si-navbar-vertical.model.d.ts +77 -0
  130. package/navbar-vertical/si-navbar-vertical.module.d.ts +7 -0
  131. package/navbar-vertical/si-navbar-vertical.provider.d.ts +7 -0
  132. package/package.json +93 -9
  133. package/password-strength/si-password-strength.directive.d.ts +11 -0
  134. package/phone-number/index.d.ts +7 -0
  135. package/phone-number/package.json +3 -0
  136. package/phone-number/si-phone-number-input-select.directive.d.ts +10 -0
  137. package/phone-number/si-phone-number-input.component.d.ts +137 -0
  138. package/phone-number/si-phone-number-input.models.d.ts +48 -0
  139. package/phone-number/si-phone-number-input.module.d.ts +7 -0
  140. package/resize-observer/si-resize-observer.directive.d.ts +3 -1
  141. package/result-details-list/index.d.ts +7 -0
  142. package/result-details-list/package.json +3 -0
  143. package/result-details-list/si-result-details-list.component.d.ts +14 -0
  144. package/result-details-list/si-result-details-list.datamodel.d.ts +48 -0
  145. package/result-details-list/si-result-details-list.module.d.ts +7 -0
  146. package/shadow-root/index.d.ts +5 -0
  147. package/shadow-root/package.json +3 -0
  148. package/shadow-root/si-shadow-root.directive.d.ts +39 -0
  149. package/side-panel/index.d.ts +9 -0
  150. package/side-panel/package.json +3 -0
  151. package/side-panel/si-side-panel-content.component.d.ts +105 -0
  152. package/side-panel/si-side-panel.component.d.ts +108 -0
  153. package/side-panel/si-side-panel.module.d.ts +8 -0
  154. package/side-panel/si-side-panel.service.d.ts +45 -0
  155. package/side-panel/side-panel.model.d.ts +16 -0
  156. package/status-bar/index.d.ts +7 -0
  157. package/status-bar/package.json +3 -0
  158. package/status-bar/si-status-bar-item/index.d.ts +6 -0
  159. package/status-bar/si-status-bar-item/si-status-bar-item.component.d.ts +22 -0
  160. package/status-bar/si-status-bar-item/si-status-bar-item.model.d.ts +33 -0
  161. package/status-bar/si-status-bar.component.d.ts +116 -0
  162. package/status-bar/si-status-bar.module.d.ts +7 -0
  163. package/tabs-next/index.d.ts +7 -0
  164. package/tabs-next/package.json +3 -0
  165. package/tabs-next/si-tab-next-base.directive.d.ts +63 -0
  166. package/tabs-next/si-tab-next-link.component.d.ts +16 -0
  167. package/tabs-next/si-tab-next.component.d.ts +16 -0
  168. package/tabs-next/si-tabs-tokens.d.ts +7 -0
  169. package/tabs-next/si-tabset-next.component.d.ts +57 -0
  170. package/template-i18n.json +45 -0
  171. package/threshold/index.d.ts +6 -0
  172. package/threshold/package.json +3 -0
  173. package/threshold/si-readonly-threshold-option.component.d.ts +11 -0
  174. package/threshold/si-threshold.component.d.ts +147 -0
  175. package/threshold/si-threshold.module.d.ts +7 -0
  176. package/tour/index.d.ts +6 -0
  177. package/tour/package.json +3 -0
  178. package/tour/si-tour-highlight.component.d.ts +15 -0
  179. package/tour/si-tour-token.model.d.ts +27 -0
  180. package/tour/si-tour.component.d.ts +31 -0
  181. package/tour/si-tour.model.d.ts +51 -0
  182. package/tour/si-tour.service.d.ts +62 -0
  183. package/translate/si-translatable-keys.interface.d.ts +45 -0
  184. package/tree-view/drag-drop.util.d.ts +32 -0
  185. package/tree-view/index.d.ts +12 -0
  186. package/tree-view/package.json +3 -0
  187. package/tree-view/si-tree-view-converter.service.d.ts +41 -0
  188. package/tree-view/si-tree-view-item/si-tree-view-item.component.d.ts +105 -0
  189. package/tree-view/si-tree-view-item/si-tree-view-item.directive.d.ts +24 -0
  190. package/tree-view/si-tree-view-item-context.d.ts +11 -0
  191. package/tree-view/si-tree-view-item-height.service.d.ts +49 -0
  192. package/tree-view/si-tree-view-item-template.directive.d.ts +18 -0
  193. package/tree-view/si-tree-view-virtualization.service.d.ts +150 -0
  194. package/tree-view/si-tree-view.component.d.ts +466 -0
  195. package/tree-view/si-tree-view.model.d.ts +146 -0
  196. package/tree-view/si-tree-view.module.d.ts +10 -0
  197. package/tree-view/si-tree-view.service.d.ts +55 -0
  198. package/tree-view/si-tree-view.utils.d.ts +46 -0
@@ -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,3 @@
1
+ {
2
+ "module": "../fesm2022/siemens-element-ng-breadcrumb-router.mjs"
3
+ }
@@ -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
+ }
@@ -2,6 +2,7 @@
2
2
  * Copyright Siemens 2016 - 2025.
3
3
  * SPDX-License-Identifier: MIT
4
4
  */
5
+ import { TranslatableString } from '@siemens/element-translate-ng/translate';
5
6
  export type StatusType = 'success' | 'info' | 'warning' | 'danger' | 'caution' | 'critical';
6
7
  export type ExtendedStatusType = StatusType | 'unknown';
7
8
  export type EntityStatusType = ExtendedStatusType | 'pending' | 'progress';
@@ -13,6 +14,7 @@ export interface StatusIcon {
13
14
  stackedColor: string;
14
15
  background: string;
15
16
  severity: number;
17
+ ariaLabel?: TranslatableString;
16
18
  }
17
19
  export declare const STATUS_ICON: {
18
20
  [key in EntityStatusType]: StatusIcon;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Copyright Siemens 2016 - 2025.
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ import { Provider } from '@angular/core';
6
+ export * from './si-datatable-interaction.directive';
7
+ export * from './si-datatable.module';
8
+ export interface INgxDatatableConfig {
9
+ messages?: {
10
+ emptyMessage: string;
11
+ totalMessage: string;
12
+ selectedMessage: string;
13
+ };
14
+ cssClasses?: {
15
+ sortAscending: string;
16
+ sortDescending: string;
17
+ sortUnset: string;
18
+ pagerLeftArrow: string;
19
+ pagerRightArrow: string;
20
+ pagerPrevious: string;
21
+ pagerNext: string;
22
+ };
23
+ headerHeight?: number;
24
+ footerHeight?: number;
25
+ rowHeight?: number;
26
+ }
27
+ interface SiDatatableConfig extends INgxDatatableConfig {
28
+ cssClasses: Exclude<INgxDatatableConfig['cssClasses'], undefined>;
29
+ headerHeight: number;
30
+ footerHeight: number;
31
+ rowHeight: number;
32
+ rowHeightSmall: number;
33
+ rowHeightExtraSmall: number;
34
+ rowHeightTiny: number;
35
+ }
36
+ export declare const SI_DATATABLE_CONFIG: SiDatatableConfig;
37
+ /**
38
+ * Provides element configuration for the \@siemens/ngx-datatable.
39
+ *
40
+ * @param configOverrides - overrides that will be merged with the element configuration.
41
+ */
42
+ export declare const provideSiDatatableConfig: (configOverrides?: INgxDatatableConfig) => Provider;
@@ -0,0 +1,3 @@
1
+ {
2
+ "module": "../fesm2022/siemens-element-ng-datatable.mjs"
3
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Copyright Siemens 2016 - 2025.
3
+ * SPDX-License-Identifier: MIT
4
+ */
5
+ import { OnDestroy, OnInit } from '@angular/core';
6
+ import * as i0 from "@angular/core";
7
+ export declare class SiDatatableInteractionDirective implements OnDestroy, OnInit {
8
+ /**
9
+ * The selection type of the datatable, will automatically be set if set for datatable.
10
+ *
11
+ * @defaultValue ''
12
+ */
13
+ readonly selectionType: import("@angular/core").InputSignal<string>;
14
+ /**
15
+ * Automatically select every row or cell that is navigated trough.
16
+ * Is ignored unless `selectionType` is `single` or `cell`.
17
+ *
18
+ * @defaultValue false
19
+ */
20
+ readonly datatableInteractionAutoSelect: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
21
+ protected tabIndex: string;
22
+ private element;
23
+ private tableBody?;
24
+ private autoSelectTimeout;
25
+ private isMousedown;
26
+ protected onKeydown(event: KeyboardEvent): void;
27
+ protected onMousedown(event: MouseEvent): void;
28
+ protected onMouseup(event: MouseEvent): void;
29
+ protected onFocusin(event: FocusEvent): void;
30
+ ngOnInit(): void;
31
+ ngOnDestroy(): void;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<SiDatatableInteractionDirective, never>;
33
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SiDatatableInteractionDirective, "[siDatatableInteraction]", ["si-datatable-interaction"], { "selectionType": { "alias": "selectionType"; "required": false; "isSignal": true; }; "datatableInteractionAutoSelect": { "alias": "datatableInteractionAutoSelect"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
34
+ }
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./si-datatable-interaction.directive";
3
+ export declare class SiDatatableModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<SiDatatableModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SiDatatableModule, never, [typeof i1.SiDatatableInteractionDirective], [typeof i1.SiDatatableInteractionDirective]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<SiDatatableModule>;
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":"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"}
@@ -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,