@siemens/element-ng 49.8.0 → 49.9.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 (49) hide show
  1. package/fesm2022/siemens-element-ng-application-header.mjs +2 -2
  2. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-avatar.mjs +2 -2
  4. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +6 -2
  6. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-circle-status.mjs +2 -2
  8. package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
  9. package/fesm2022/siemens-element-ng-dashboard.mjs +8 -5
  10. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-datatable.mjs +10 -19
  12. package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
  13. package/fesm2022/siemens-element-ng-datepicker.mjs +6 -6
  14. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-file-uploader.mjs +2 -2
  16. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-form.mjs +8 -10
  18. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-header-dropdown.mjs +19 -55
  20. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  21. package/fesm2022/siemens-element-ng-menu.mjs +5 -7
  22. package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
  23. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +90 -49
  24. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  25. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +25 -29
  26. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  27. package/fesm2022/siemens-element-ng-select.mjs +455 -48
  28. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  29. package/fesm2022/siemens-element-ng-side-panel.mjs +2 -2
  30. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  31. package/fesm2022/siemens-element-ng-slider.mjs +2 -2
  32. package/fesm2022/siemens-element-ng-slider.mjs.map +1 -1
  33. package/fesm2022/siemens-element-ng-status-toggle.mjs +2 -2
  34. package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
  35. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  36. package/fesm2022/siemens-element-ng-tree-view.mjs +52 -30
  37. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  38. package/package.json +3 -3
  39. package/template-i18n.json +1 -0
  40. package/types/siemens-element-ng-breadcrumb-router.d.ts +6 -2
  41. package/types/siemens-element-ng-dashboard.d.ts +2 -1
  42. package/types/siemens-element-ng-datatable.d.ts +0 -1
  43. package/types/siemens-element-ng-form.d.ts +1 -1
  44. package/types/siemens-element-ng-header-dropdown.d.ts +0 -8
  45. package/types/siemens-element-ng-navbar-vertical-next.d.ts +29 -8
  46. package/types/siemens-element-ng-navbar-vertical.d.ts +2 -1
  47. package/types/siemens-element-ng-select.d.ts +241 -2
  48. package/types/siemens-element-ng-translate.d.ts +1 -0
  49. package/types/siemens-element-ng-tree-view.d.ts +4 -5
@@ -1 +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 (c) Siemens 2016 - 2026\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 currentRouteUrl = route.url.map(o => o.toString()).join('/');\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n url = url + currentRouteUrl;\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 (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\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 imports: [SiBreadcrumbComponent],\n templateUrl: './si-breadcrumb-router.component.html'\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 segmentUrl = routeSegment.url.map(o => o.toString()).join('/');\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n url = url + segmentUrl;\n }\n return url;\n }\n}\n","<si-breadcrumb [items]=\"items()\" [ariaLabel]=\"ariaLabel()\" />\n","/**\n * Copyright (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\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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"}
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 (c) Siemens 2016 - 2026\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 currentRouteUrl = route.url.map(o => o.toString()).join('/');\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n url = url + currentRouteUrl;\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 (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\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 { t } from '@siemens/element-translate-ng/translate';\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 imports: [SiBreadcrumbComponent],\n templateUrl: './si-breadcrumb-router.component.html'\n})\nexport class SiBreadcrumbRouterComponent implements OnInit, OnDestroy {\n /**\n * Aria label for the main breadcrumb navigation. Needed for a11y.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_BREADCRUMB_ROUTER_LABEL:breadcrumb`)\n * ```\n */\n readonly ariaLabel = input(t(() => $localize`:@@SI_BREADCRUMB_ROUTER_LABEL: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 segmentUrl = routeSegment.url.map(o => o.toString()).join('/');\n if (!url.endsWith('/')) {\n url = url + '/';\n }\n url = url + segmentUrl;\n }\n return url;\n }\n}\n","<si-breadcrumb [items]=\"items()\" [ariaLabel]=\"ariaLabel()\" />\n","/**\n * Copyright (c) Siemens 2016 - 2026\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 (c) Siemens 2016 - 2026\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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"}
@@ -108,11 +108,11 @@ class SiCircleStatusComponent {
108
108
  return !!rgb && Math.round((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000) <= 128;
109
109
  }
110
110
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiCircleStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
111
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiCircleStatusComponent, isStandalone: true, selector: "si-circle-status", inputs: { status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, eventOut: { classPropertyName: "eventOut", publicName: "eventOut", isSignal: true, isRequired: false, transformFunction: null }, eventIcon: { classPropertyName: "eventIcon", publicName: "eventIcon", isSignal: true, isRequired: false, transformFunction: null }, blink: { classPropertyName: "blink", publicName: "blink", isSignal: true, isRequired: false, transformFunction: null }, blinkPulse: { classPropertyName: "blinkPulse", publicName: "blinkPulse", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "bg", first: true, predicate: ["bg"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"status-indication d-flex align-items-center justify-content-center\"\n role=\"status\"\n [class.has-icon]=\"icon()\"\n [class.small]=\"size() === 'small'\"\n [attr.aria-label]=\"theAriaLabel() | translate\"\n>\n <div\n #bg\n [class]=\"`bg ${backgroundClass()}`\"\n [class.pulse]=\"blinkOn()\"\n [class.deprecated-color]=\"!status()\"\n [class.contrast-fix]=\"contrastFix()\"\n [style.background-color]=\"color()\"\n ></div>\n @if (!status()) {\n <div class=\"deprecated-dot\" [style.background-color]=\"color()\"></div>\n }\n @let iconConfig = statusIcon();\n @if (iconConfig) {\n <span class=\"status-icon icon-stack indicator\">\n <si-icon [class]=\"`status-icon ${iconConfig.color}`\" [icon]=\"iconConfig.icon\" />\n <si-icon [class]=\"`status-icon ${iconConfig.stackedColor}`\" [icon]=\"iconConfig.stacked\" />\n </span>\n }\n @let eventIconValue = eventIcon();\n @if (eventOut()) {\n <si-icon class=\"icon text-body event-out flip-rtl\" [icon]=\"icons.elementRight4\" />\n } @else if (eventIconValue) {\n <si-icon class=\"icon text-body event-out\" [icon]=\"eventIconValue\" />\n }\n @let iconValue = icon();\n @if (iconValue) {\n <si-icon class=\"icon position-relative text-body\" [icon]=\"iconValue\" />\n }\n</div>\n", styles: [":host{display:inline-block;vertical-align:middle}:host .status-indication ::ng-deep .status-icon{font-size:1.25rem}:host .status-indication.has-icon.small ::ng-deep .status-icon,:host .status-indication.has-icon.small ::ng-deep .event-out{font-size:1rem}.deprecated-dot{inline-size:.625rem;block-size:.625rem;border-radius:50%}.event-out{position:absolute;inset-block-end:-.125rem;inset-inline-end:-.8125rem}.status-indication{position:relative;inline-size:2.5rem;block-size:2.5rem;border-radius:50%;border:1px solid transparent}.status-indication.has-icon{border-color:var(--element-ui-4);background-color:var(--element-base-1);margin-block:.375rem;margin-inline:0 .75rem}.status-indication.has-icon .deprecated-dot,.status-indication.has-icon .indicator{position:absolute}.status-indication.has-icon .deprecated-dot{inset-block-start:-.125rem;inset-inline-end:0}.status-indication.has-icon .indicator{inset-block-start:-.4375rem;inset-inline-end:-.6875rem}.status-indication.has-icon.small{inline-size:2rem;block-size:2rem;margin-block:.25rem;margin-inline:0 .5rem}.status-indication.has-icon.small .event-out{inset-block-end:.0625rem;inset-inline-end:-.5625rem}.status-indication.has-icon.small .deprecated-dot{inline-size:.5rem;block-size:.5rem;inset-block-start:-.0625rem;inset-inline-end:-.0625rem}.status-indication.has-icon.small .indicator{inset-block-start:-.375rem;inset-inline-end:-.5rem}.status-indication>*{pointer-events:none;line-height:0}.bg{position:absolute;inset:0;border-radius:50%;transition:opacity calc(.5s * var(--element-animations-enabled, 1));opacity:0}.pulse.deprecated-color{opacity:.5}.pulse.deprecated-color.contrast-fix{opacity:.25}.pulse:not(.deprecated-color){opacity:1}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
111
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiCircleStatusComponent, isStandalone: true, selector: "si-circle-status", inputs: { status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, eventOut: { classPropertyName: "eventOut", publicName: "eventOut", isSignal: true, isRequired: false, transformFunction: null }, eventIcon: { classPropertyName: "eventIcon", publicName: "eventIcon", isSignal: true, isRequired: false, transformFunction: null }, blink: { classPropertyName: "blink", publicName: "blink", isSignal: true, isRequired: false, transformFunction: null }, blinkPulse: { classPropertyName: "blinkPulse", publicName: "blinkPulse", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "bg", first: true, predicate: ["bg"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"status-indication d-flex align-items-center justify-content-center\"\n role=\"status\"\n [class.has-icon]=\"icon()\"\n [class.small]=\"size() === 'small'\"\n [attr.aria-label]=\"theAriaLabel() | translate\"\n>\n <div\n #bg\n [class]=\"`bg ${backgroundClass()}`\"\n [class.pulse]=\"blinkOn()\"\n [class.deprecated-color]=\"!status()\"\n [class.contrast-fix]=\"contrastFix()\"\n [style.background-color]=\"color()\"\n ></div>\n @if (!status()) {\n <div class=\"deprecated-dot\" [style.background-color]=\"color()\"></div>\n }\n @let iconConfig = statusIcon();\n @if (iconConfig) {\n <span class=\"status-icon icon-stack indicator\">\n <si-icon [class]=\"`status-icon ${iconConfig.color}`\" [icon]=\"iconConfig.icon\" />\n <si-icon [class]=\"`status-icon ${iconConfig.stackedColor}`\" [icon]=\"iconConfig.stacked\" />\n </span>\n }\n @let eventIconValue = eventIcon();\n @if (eventOut()) {\n <si-icon class=\"icon text-body event-out flip-rtl\" [icon]=\"icons.elementRight4\" />\n } @else if (eventIconValue) {\n <si-icon class=\"icon text-body event-out\" [icon]=\"eventIconValue\" />\n }\n @let iconValue = icon();\n @if (iconValue) {\n <si-icon class=\"icon position-relative text-body\" [icon]=\"iconValue\" />\n }\n</div>\n", styles: [":host{display:inline-block;vertical-align:middle}:host .status-indication ::ng-deep .status-icon{font-size:1.25rem}:host .status-indication.has-icon.small ::ng-deep .status-icon,:host .status-indication.has-icon.small ::ng-deep .event-out{font-size:1rem}.deprecated-dot{inline-size:.625rem;block-size:.625rem;border-radius:50%}.event-out{position:absolute;inset-block-end:-.125rem;inset-inline-end:-.8125rem}.status-indication{position:relative;inline-size:calc(1.25rem + 20px);block-size:calc(1.25rem + 20px);border-radius:50%;border:1px solid transparent}.status-indication.has-icon{border-color:var(--element-ui-4);background-color:var(--element-base-1);margin-block:.375rem;margin-inline:0 .75rem}.status-indication.has-icon .deprecated-dot,.status-indication.has-icon .indicator{position:absolute}.status-indication.has-icon .deprecated-dot{inset-block-start:-.125rem;inset-inline-end:0}.status-indication.has-icon .indicator{inset-block-start:-.4375rem;inset-inline-end:-.6875rem}.status-indication.has-icon.small{inline-size:calc(1.25rem + 12px);block-size:calc(1.25rem + 12px);margin-block:.25rem;margin-inline:0 .5rem}.status-indication.has-icon.small .event-out{inset-block-end:.0625rem;inset-inline-end:-.5625rem}.status-indication.has-icon.small .deprecated-dot{inline-size:.5rem;block-size:.5rem;inset-block-start:-.0625rem;inset-inline-end:-.0625rem}.status-indication.has-icon.small .indicator{inset-block-start:-.375rem;inset-inline-end:-.5rem}.status-indication>*{pointer-events:none;line-height:0}.bg{position:absolute;inset:0;border-radius:50%;transition:opacity calc(.5s * var(--element-animations-enabled, 1));opacity:0}.pulse.deprecated-color{opacity:.5}.pulse.deprecated-color.contrast-fix{opacity:.25}.pulse:not(.deprecated-color){opacity:1}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
112
112
  }
113
113
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiCircleStatusComponent, decorators: [{
114
114
  type: Component,
115
- args: [{ selector: 'si-circle-status', imports: [SiIconComponent, SiTranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"status-indication d-flex align-items-center justify-content-center\"\n role=\"status\"\n [class.has-icon]=\"icon()\"\n [class.small]=\"size() === 'small'\"\n [attr.aria-label]=\"theAriaLabel() | translate\"\n>\n <div\n #bg\n [class]=\"`bg ${backgroundClass()}`\"\n [class.pulse]=\"blinkOn()\"\n [class.deprecated-color]=\"!status()\"\n [class.contrast-fix]=\"contrastFix()\"\n [style.background-color]=\"color()\"\n ></div>\n @if (!status()) {\n <div class=\"deprecated-dot\" [style.background-color]=\"color()\"></div>\n }\n @let iconConfig = statusIcon();\n @if (iconConfig) {\n <span class=\"status-icon icon-stack indicator\">\n <si-icon [class]=\"`status-icon ${iconConfig.color}`\" [icon]=\"iconConfig.icon\" />\n <si-icon [class]=\"`status-icon ${iconConfig.stackedColor}`\" [icon]=\"iconConfig.stacked\" />\n </span>\n }\n @let eventIconValue = eventIcon();\n @if (eventOut()) {\n <si-icon class=\"icon text-body event-out flip-rtl\" [icon]=\"icons.elementRight4\" />\n } @else if (eventIconValue) {\n <si-icon class=\"icon text-body event-out\" [icon]=\"eventIconValue\" />\n }\n @let iconValue = icon();\n @if (iconValue) {\n <si-icon class=\"icon position-relative text-body\" [icon]=\"iconValue\" />\n }\n</div>\n", styles: [":host{display:inline-block;vertical-align:middle}:host .status-indication ::ng-deep .status-icon{font-size:1.25rem}:host .status-indication.has-icon.small ::ng-deep .status-icon,:host .status-indication.has-icon.small ::ng-deep .event-out{font-size:1rem}.deprecated-dot{inline-size:.625rem;block-size:.625rem;border-radius:50%}.event-out{position:absolute;inset-block-end:-.125rem;inset-inline-end:-.8125rem}.status-indication{position:relative;inline-size:2.5rem;block-size:2.5rem;border-radius:50%;border:1px solid transparent}.status-indication.has-icon{border-color:var(--element-ui-4);background-color:var(--element-base-1);margin-block:.375rem;margin-inline:0 .75rem}.status-indication.has-icon .deprecated-dot,.status-indication.has-icon .indicator{position:absolute}.status-indication.has-icon .deprecated-dot{inset-block-start:-.125rem;inset-inline-end:0}.status-indication.has-icon .indicator{inset-block-start:-.4375rem;inset-inline-end:-.6875rem}.status-indication.has-icon.small{inline-size:2rem;block-size:2rem;margin-block:.25rem;margin-inline:0 .5rem}.status-indication.has-icon.small .event-out{inset-block-end:.0625rem;inset-inline-end:-.5625rem}.status-indication.has-icon.small .deprecated-dot{inline-size:.5rem;block-size:.5rem;inset-block-start:-.0625rem;inset-inline-end:-.0625rem}.status-indication.has-icon.small .indicator{inset-block-start:-.375rem;inset-inline-end:-.5rem}.status-indication>*{pointer-events:none;line-height:0}.bg{position:absolute;inset:0;border-radius:50%;transition:opacity calc(.5s * var(--element-animations-enabled, 1));opacity:0}.pulse.deprecated-color{opacity:.5}.pulse.deprecated-color.contrast-fix{opacity:.25}.pulse:not(.deprecated-color){opacity:1}\n"] }]
115
+ args: [{ selector: 'si-circle-status', imports: [SiIconComponent, SiTranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"status-indication d-flex align-items-center justify-content-center\"\n role=\"status\"\n [class.has-icon]=\"icon()\"\n [class.small]=\"size() === 'small'\"\n [attr.aria-label]=\"theAriaLabel() | translate\"\n>\n <div\n #bg\n [class]=\"`bg ${backgroundClass()}`\"\n [class.pulse]=\"blinkOn()\"\n [class.deprecated-color]=\"!status()\"\n [class.contrast-fix]=\"contrastFix()\"\n [style.background-color]=\"color()\"\n ></div>\n @if (!status()) {\n <div class=\"deprecated-dot\" [style.background-color]=\"color()\"></div>\n }\n @let iconConfig = statusIcon();\n @if (iconConfig) {\n <span class=\"status-icon icon-stack indicator\">\n <si-icon [class]=\"`status-icon ${iconConfig.color}`\" [icon]=\"iconConfig.icon\" />\n <si-icon [class]=\"`status-icon ${iconConfig.stackedColor}`\" [icon]=\"iconConfig.stacked\" />\n </span>\n }\n @let eventIconValue = eventIcon();\n @if (eventOut()) {\n <si-icon class=\"icon text-body event-out flip-rtl\" [icon]=\"icons.elementRight4\" />\n } @else if (eventIconValue) {\n <si-icon class=\"icon text-body event-out\" [icon]=\"eventIconValue\" />\n }\n @let iconValue = icon();\n @if (iconValue) {\n <si-icon class=\"icon position-relative text-body\" [icon]=\"iconValue\" />\n }\n</div>\n", styles: [":host{display:inline-block;vertical-align:middle}:host .status-indication ::ng-deep .status-icon{font-size:1.25rem}:host .status-indication.has-icon.small ::ng-deep .status-icon,:host .status-indication.has-icon.small ::ng-deep .event-out{font-size:1rem}.deprecated-dot{inline-size:.625rem;block-size:.625rem;border-radius:50%}.event-out{position:absolute;inset-block-end:-.125rem;inset-inline-end:-.8125rem}.status-indication{position:relative;inline-size:calc(1.25rem + 20px);block-size:calc(1.25rem + 20px);border-radius:50%;border:1px solid transparent}.status-indication.has-icon{border-color:var(--element-ui-4);background-color:var(--element-base-1);margin-block:.375rem;margin-inline:0 .75rem}.status-indication.has-icon .deprecated-dot,.status-indication.has-icon .indicator{position:absolute}.status-indication.has-icon .deprecated-dot{inset-block-start:-.125rem;inset-inline-end:0}.status-indication.has-icon .indicator{inset-block-start:-.4375rem;inset-inline-end:-.6875rem}.status-indication.has-icon.small{inline-size:calc(1.25rem + 12px);block-size:calc(1.25rem + 12px);margin-block:.25rem;margin-inline:0 .5rem}.status-indication.has-icon.small .event-out{inset-block-end:.0625rem;inset-inline-end:-.5625rem}.status-indication.has-icon.small .deprecated-dot{inline-size:.5rem;block-size:.5rem;inset-block-start:-.0625rem;inset-inline-end:-.0625rem}.status-indication.has-icon.small .indicator{inset-block-start:-.375rem;inset-inline-end:-.5rem}.status-indication>*{pointer-events:none;line-height:0}.bg{position:absolute;inset:0;border-radius:50%;transition:opacity calc(.5s * var(--element-animations-enabled, 1));opacity:0}.pulse.deprecated-color{opacity:.5}.pulse.deprecated-color.contrast-fix{opacity:.25}.pulse:not(.deprecated-color){opacity:1}\n"] }]
116
116
  }], propDecorators: { status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], eventOut: [{ type: i0.Input, args: [{ isSignal: true, alias: "eventOut", required: false }] }], eventIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "eventIcon", required: false }] }], blink: [{ type: i0.Input, args: [{ isSignal: true, alias: "blink", required: false }] }], blinkPulse: [{ type: i0.Input, args: [{ isSignal: true, alias: "blinkPulse", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], bg: [{ type: i0.ViewChild, args: ['bg', { isSignal: true }] }] } });
117
117
 
118
118
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"siemens-element-ng-circle-status.mjs","sources":["../../../../projects/element-ng/circle-status/si-circle-status.component.ts","../../../../projects/element-ng/circle-status/si-circle-status.component.html","../../../../projects/element-ng/circle-status/si-circle-status.module.ts","../../../../projects/element-ng/circle-status/index.ts","../../../../projects/element-ng/circle-status/siemens-element-ng-circle-status.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n OnChanges,\n OnDestroy,\n signal,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { elementRight4 } from '@siemens/element-icons';\nimport { BlinkService, EntityStatusType, StatusIcon } from '@siemens/element-ng/common';\nimport { addIcons, SiIconComponent, STATUS_ICON_CONFIG } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { Observable, Subscription } from 'rxjs';\n\n@Component({\n selector: 'si-circle-status',\n imports: [SiIconComponent, SiTranslatePipe],\n templateUrl: './si-circle-status.component.html',\n styleUrl: './si-circle-status.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiCircleStatusComponent implements OnChanges, OnDestroy {\n private readonly statusIcons = inject(STATUS_ICON_CONFIG);\n /**\n * The status (success, info, warning, danger) to be visualized.\n */\n readonly status = input<EntityStatusType>();\n\n /* DO NOT REMOVE: Even though the input is marked as deprecated, the core-team decided not to remove the\n input. The possibility to have custom color is often requested by projects, so we keep it.\n however in order to discourage it's use, we keep it marked deprecated.\n */\n /**\n * A custom color (e.g. `#fefefe`) for exceptional cases.\n * @deprecated use the semantic `status` input instead.\n */\n readonly color = input<string>();\n\n /**\n * Set a domain type icon (e.g. `element-door`) for which the status shall be shown.\n * Leave undefined for visualizing the status without an icon.\n */\n readonly icon = input<string>();\n\n /**\n * Set the size using either regular or small only works when used together with `icon`\n *\n * @defaultValue 'regular'\n */\n readonly size = input<'regular' | 'small'>('regular');\n\n /**\n * event direction is out\n *\n * @defaultValue false\n */\n readonly eventOut = input(false, { transform: booleanAttribute });\n\n /**\n * Custom icon class for event out\n */\n readonly eventIcon = input<string>();\n\n /**\n * Whether the status should appear with a pulsing circle around the badge.\n *\n * @defaultValue false\n */\n readonly blink = input(false, { transform: booleanAttribute });\n\n /**\n * Blink pulse generator for synchronized blinking with other components\n */\n readonly blinkPulse = input<Observable<boolean>>();\n\n /**\n * Aria label for icon and status combo. Needed for a11y\n */\n readonly ariaLabel = input<TranslatableString>();\n\n protected readonly backgroundClass = computed(() => this.statusIcon()?.background ?? '');\n protected readonly theAriaLabel = computed(() => this.ariaLabel() ?? this.autoLabel());\n protected readonly autoLabel = computed(() => {\n const status = this.status();\n const statusName = status && this.statusIcons[status] ? status : 'none';\n const direction = this.eventOut() ? ' out' : '';\n const iconName = this.icon()?.replace(/^element-{0,1}(.+)/, '$1 ') ?? '';\n return `${iconName.toLocaleLowerCase()}${\n this.status() && this.icon() ? 'in ' : ''\n }status ${statusName}${direction}`;\n });\n protected readonly statusIcon = computed<StatusIcon | undefined>(() => {\n const status = this.status();\n return status ? this.statusIcons[status] : undefined;\n });\n protected readonly blinkOn = signal(false);\n protected readonly contrastFix = signal(false);\n protected readonly icons = addIcons({ elementRight4 });\n private blinkSubs?: Subscription;\n\n private readonly bg = viewChild.required<ElementRef>('bg');\n\n private blinkService = inject(BlinkService);\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (this.blinkService && changes.blink) {\n this.blinkSubs?.unsubscribe();\n\n if (this.blink()) {\n const pulse = this.blinkPulse() ?? this.blinkService.pulse$;\n this.blinkSubs = pulse.subscribe(onOff => {\n this.blinkOn.set(onOff);\n });\n } else {\n this.blinkOn.set(false);\n }\n }\n if (changes.color || changes.blink) {\n queueMicrotask(() => {\n this.contrastFix.set(!!this.color() && this.blink() && this.calculateContrastFix());\n });\n }\n }\n\n ngOnDestroy(): void {\n this.blinkSubs?.unsubscribe();\n }\n\n private calculateContrastFix(): boolean {\n // see https://www.w3.org/TR/AERT/#color-contrast\n const rgb = getComputedStyle(this.bg().nativeElement)\n .backgroundColor?.match(/\\d+/g)\n ?.map(v => +v);\n return !!rgb && Math.round((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000) <= 128;\n }\n}\n","<div\n class=\"status-indication d-flex align-items-center justify-content-center\"\n role=\"status\"\n [class.has-icon]=\"icon()\"\n [class.small]=\"size() === 'small'\"\n [attr.aria-label]=\"theAriaLabel() | translate\"\n>\n <div\n #bg\n [class]=\"`bg ${backgroundClass()}`\"\n [class.pulse]=\"blinkOn()\"\n [class.deprecated-color]=\"!status()\"\n [class.contrast-fix]=\"contrastFix()\"\n [style.background-color]=\"color()\"\n ></div>\n @if (!status()) {\n <div class=\"deprecated-dot\" [style.background-color]=\"color()\"></div>\n }\n @let iconConfig = statusIcon();\n @if (iconConfig) {\n <span class=\"status-icon icon-stack indicator\">\n <si-icon [class]=\"`status-icon ${iconConfig.color}`\" [icon]=\"iconConfig.icon\" />\n <si-icon [class]=\"`status-icon ${iconConfig.stackedColor}`\" [icon]=\"iconConfig.stacked\" />\n </span>\n }\n @let eventIconValue = eventIcon();\n @if (eventOut()) {\n <si-icon class=\"icon text-body event-out flip-rtl\" [icon]=\"icons.elementRight4\" />\n } @else if (eventIconValue) {\n <si-icon class=\"icon text-body event-out\" [icon]=\"eventIconValue\" />\n }\n @let iconValue = icon();\n @if (iconValue) {\n <si-icon class=\"icon position-relative text-body\" [icon]=\"iconValue\" />\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiCircleStatusComponent } from './si-circle-status.component';\n\n@NgModule({\n imports: [SiCircleStatusComponent],\n exports: [SiCircleStatusComponent]\n})\nexport class SiCircleStatusModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-circle-status.component';\nexport * from './si-circle-status.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"siemens-element-ng-circle-status.mjs","sources":["../../../../projects/element-ng/circle-status/si-circle-status.component.ts","../../../../projects/element-ng/circle-status/si-circle-status.component.html","../../../../projects/element-ng/circle-status/si-circle-status.module.ts","../../../../projects/element-ng/circle-status/index.ts","../../../../projects/element-ng/circle-status/siemens-element-ng-circle-status.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n OnChanges,\n OnDestroy,\n signal,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { elementRight4 } from '@siemens/element-icons';\nimport { BlinkService, EntityStatusType, StatusIcon } from '@siemens/element-ng/common';\nimport { addIcons, SiIconComponent, STATUS_ICON_CONFIG } from '@siemens/element-ng/icon';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\nimport { Observable, Subscription } from 'rxjs';\n\n@Component({\n selector: 'si-circle-status',\n imports: [SiIconComponent, SiTranslatePipe],\n templateUrl: './si-circle-status.component.html',\n styleUrl: './si-circle-status.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiCircleStatusComponent implements OnChanges, OnDestroy {\n private readonly statusIcons = inject(STATUS_ICON_CONFIG);\n /**\n * The status (success, info, warning, danger) to be visualized.\n */\n readonly status = input<EntityStatusType>();\n\n /* DO NOT REMOVE: Even though the input is marked as deprecated, the core-team decided not to remove the\n input. The possibility to have custom color is often requested by projects, so we keep it.\n however in order to discourage it's use, we keep it marked deprecated.\n */\n /**\n * A custom color (e.g. `#fefefe`) for exceptional cases.\n * @deprecated use the semantic `status` input instead.\n */\n readonly color = input<string>();\n\n /**\n * Set a domain type icon (e.g. `element-door`) for which the status shall be shown.\n * Leave undefined for visualizing the status without an icon.\n */\n readonly icon = input<string>();\n\n /**\n * Set the size using either regular or small only works when used together with `icon`\n *\n * @defaultValue 'regular'\n */\n readonly size = input<'regular' | 'small'>('regular');\n\n /**\n * event direction is out\n *\n * @defaultValue false\n */\n readonly eventOut = input(false, { transform: booleanAttribute });\n\n /**\n * Custom icon class for event out\n */\n readonly eventIcon = input<string>();\n\n /**\n * Whether the status should appear with a pulsing circle around the badge.\n *\n * @defaultValue false\n */\n readonly blink = input(false, { transform: booleanAttribute });\n\n /**\n * Blink pulse generator for synchronized blinking with other components\n */\n readonly blinkPulse = input<Observable<boolean>>();\n\n /**\n * Aria label for icon and status combo. Needed for a11y\n */\n readonly ariaLabel = input<TranslatableString>();\n\n protected readonly backgroundClass = computed(() => this.statusIcon()?.background ?? '');\n protected readonly theAriaLabel = computed(() => this.ariaLabel() ?? this.autoLabel());\n protected readonly autoLabel = computed(() => {\n const status = this.status();\n const statusName = status && this.statusIcons[status] ? status : 'none';\n const direction = this.eventOut() ? ' out' : '';\n const iconName = this.icon()?.replace(/^element-{0,1}(.+)/, '$1 ') ?? '';\n return `${iconName.toLocaleLowerCase()}${\n this.status() && this.icon() ? 'in ' : ''\n }status ${statusName}${direction}`;\n });\n protected readonly statusIcon = computed<StatusIcon | undefined>(() => {\n const status = this.status();\n return status ? this.statusIcons[status] : undefined;\n });\n protected readonly blinkOn = signal(false);\n protected readonly contrastFix = signal(false);\n protected readonly icons = addIcons({ elementRight4 });\n private blinkSubs?: Subscription;\n\n private readonly bg = viewChild.required<ElementRef>('bg');\n\n private blinkService = inject(BlinkService);\n\n ngOnChanges(changes: SimpleChanges<this>): void {\n if (this.blinkService && changes.blink) {\n this.blinkSubs?.unsubscribe();\n\n if (this.blink()) {\n const pulse = this.blinkPulse() ?? this.blinkService.pulse$;\n this.blinkSubs = pulse.subscribe(onOff => {\n this.blinkOn.set(onOff);\n });\n } else {\n this.blinkOn.set(false);\n }\n }\n if (changes.color || changes.blink) {\n queueMicrotask(() => {\n this.contrastFix.set(!!this.color() && this.blink() && this.calculateContrastFix());\n });\n }\n }\n\n ngOnDestroy(): void {\n this.blinkSubs?.unsubscribe();\n }\n\n private calculateContrastFix(): boolean {\n // see https://www.w3.org/TR/AERT/#color-contrast\n const rgb = getComputedStyle(this.bg().nativeElement)\n .backgroundColor?.match(/\\d+/g)\n ?.map(v => +v);\n return !!rgb && Math.round((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000) <= 128;\n }\n}\n","<div\n class=\"status-indication d-flex align-items-center justify-content-center\"\n role=\"status\"\n [class.has-icon]=\"icon()\"\n [class.small]=\"size() === 'small'\"\n [attr.aria-label]=\"theAriaLabel() | translate\"\n>\n <div\n #bg\n [class]=\"`bg ${backgroundClass()}`\"\n [class.pulse]=\"blinkOn()\"\n [class.deprecated-color]=\"!status()\"\n [class.contrast-fix]=\"contrastFix()\"\n [style.background-color]=\"color()\"\n ></div>\n @if (!status()) {\n <div class=\"deprecated-dot\" [style.background-color]=\"color()\"></div>\n }\n @let iconConfig = statusIcon();\n @if (iconConfig) {\n <span class=\"status-icon icon-stack indicator\">\n <si-icon [class]=\"`status-icon ${iconConfig.color}`\" [icon]=\"iconConfig.icon\" />\n <si-icon [class]=\"`status-icon ${iconConfig.stackedColor}`\" [icon]=\"iconConfig.stacked\" />\n </span>\n }\n @let eventIconValue = eventIcon();\n @if (eventOut()) {\n <si-icon class=\"icon text-body event-out flip-rtl\" [icon]=\"icons.elementRight4\" />\n } @else if (eventIconValue) {\n <si-icon class=\"icon text-body event-out\" [icon]=\"eventIconValue\" />\n }\n @let iconValue = icon();\n @if (iconValue) {\n <si-icon class=\"icon position-relative text-body\" [icon]=\"iconValue\" />\n }\n</div>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiCircleStatusComponent } from './si-circle-status.component';\n\n@NgModule({\n imports: [SiCircleStatusComponent],\n exports: [SiCircleStatusComponent]\n})\nexport class SiCircleStatusModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-circle-status.component';\nexport * from './si-circle-status.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -4,11 +4,11 @@ import { elementZoom, elementPinch, elementRight2, elementSortUp, elementSortDow
4
4
  import { SiCardComponent, SiCardHeaderComponent } from '@siemens/element-ng/card';
5
5
  import { addIcons, SiIconComponent, SiStatusIconComponent } from '@siemens/element-ng/icon';
6
6
  import { t, SiTranslatePipe, injectSiTranslateService } from '@siemens/element-translate-ng/translate';
7
- import { BehaviorSubject, switchMap, of, map } from 'rxjs';
7
+ import { BehaviorSubject, Subject, takeUntil, switchMap, of, map } from 'rxjs';
8
8
  import * as i1 from '@angular/cdk/portal';
9
9
  import { CdkPortalOutlet, DomPortal, PortalModule } from '@angular/cdk/portal';
10
10
  import { ViewportScroller } from '@angular/common';
11
- import { takeUntilDestroyed, toSignal, toObservable } from '@angular/core/rxjs-interop';
11
+ import { takeUntilDestroyed, outputToObservable, toSignal, toObservable } from '@angular/core/rxjs-interop';
12
12
  import { ScrollbarHelper } from '@siemens/element-ng/common';
13
13
  import { ResizeObserverService, BOOTSTRAP_BREAKPOINTS } from '@siemens/element-ng/resize-observer';
14
14
  import { SiLinkDirective } from '@siemens/element-ng/link';
@@ -277,6 +277,7 @@ class SiDashboardComponent {
277
277
  hideMenubarComputed = computed(() => this.hideMenubar() || this.hideMenubarInternal(), ...(ngDevMode ? [{ debugName: "hideMenubarComputed" }] : []));
278
278
  _isExpanded = false;
279
279
  scrollPosition = [0, 0];
280
+ reinitCards$ = new Subject();
280
281
  cards = [];
281
282
  expandedPortalOutlet = viewChild.required('expandedPortalOutlet', {
282
283
  read: CdkPortalOutlet
@@ -296,6 +297,7 @@ class SiDashboardComponent {
296
297
  this.dashboardService.cards$
297
298
  .pipe(takeUntilDestroyed())
298
299
  .subscribe(cards => this.subscribeToCards(cards));
300
+ this.destroyRef.onDestroy(() => this.reinitCards$.complete());
299
301
  }
300
302
  ngOnChanges(changes) {
301
303
  if (changes.enableExpandInteractions) {
@@ -317,6 +319,7 @@ class SiDashboardComponent {
317
319
  this.initCards();
318
320
  }
319
321
  initCards() {
322
+ this.reinitCards$.next();
320
323
  for (const card of this.cards) {
321
324
  // We only enforce expand if the dashboard value is true, otherwise we would remove the individual
322
325
  // card settings.
@@ -324,7 +327,9 @@ class SiDashboardComponent {
324
327
  if (enableExpandInteractions) {
325
328
  card.enableExpandInteractionInternal.set(enableExpandInteractions);
326
329
  }
327
- card.expandChange.subscribe((expand) => {
330
+ outputToObservable(card.expandChange)
331
+ .pipe(takeUntil(this.reinitCards$), takeUntilDestroyed(this.destroyRef))
332
+ .subscribe((expand) => {
328
333
  if (expand) {
329
334
  this.expand(card);
330
335
  }
@@ -377,8 +382,6 @@ class SiDashboardComponent {
377
382
  }
378
383
  // Restore the dashboard and scroll to previous position
379
384
  this.restoreDashboard();
380
- // Subscribe to cards events again
381
- this.initCards();
382
385
  this.cdRef.markForCheck();
383
386
  }
384
387
  /**