@siemens/element-ng 51.4.0 → 51.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/siemens-element-ng-about.mjs +2 -2
- package/fesm2022/siemens-element-ng-about.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-ag-grid.mjs +5 -4
- package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-breadcrumb.mjs +15 -28
- package/fesm2022/siemens-element-ng-breadcrumb.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-carousel.mjs +6 -4
- package/fesm2022/siemens-element-ng-carousel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-chat-messages.mjs +1 -1
- package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-common.mjs +11 -1
- package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-datatable.mjs +1 -1
- package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-empty-state.mjs +2 -2
- package/fesm2022/siemens-element-ng-empty-state.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-formly.mjs +1 -1
- package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-header-dropdown.mjs +2 -2
- package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-list-details.mjs +7 -4
- package/fesm2022/siemens-element-ng-list-details.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-loading-spinner.mjs +21 -7
- package/fesm2022/siemens-element-ng-loading-spinner.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-maplibre.mjs +2 -2
- package/fesm2022/siemens-element-ng-maplibre.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-markdown-extensions-katex.mjs +4 -1
- package/fesm2022/siemens-element-ng-markdown-extensions-katex.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-markdown-extensions-mermaid.mjs +9 -0
- package/fesm2022/siemens-element-ng-markdown-extensions-mermaid.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-markdown.mjs +6 -2
- package/fesm2022/siemens-element-ng-markdown.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-menu.mjs +6 -6
- package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-modal.mjs +4 -3
- package/fesm2022/siemens-element-ng-modal.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +10 -4
- package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs +12 -6
- package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-pills-input.mjs +5 -4
- package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-popover-legacy.mjs +1 -1
- package/fesm2022/siemens-element-ng-popover-legacy.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-popover.mjs +33 -6
- package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-result-details-list.mjs +1 -1
- package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-select.mjs +3 -3
- package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-side-panel.mjs +17 -7
- package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-skip-links.mjs +18 -4
- package/fesm2022/siemens-element-ng-skip-links.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-source-chip.mjs +1 -1
- package/fesm2022/siemens-element-ng-source-chip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-split.mjs +2 -2
- package/fesm2022/siemens-element-ng-split.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-status-bar.mjs +2 -2
- package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tooltip.mjs +1 -1
- package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tree-view.mjs +3 -4
- package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-typeahead.mjs +2 -2
- package/fesm2022/siemens-element-ng-typeahead.mjs.map +1 -1
- package/package.json +6 -6
- package/schematics/utils/ts-compiler-host.js +21 -0
- package/template-i18n.json +1 -0
- package/types/siemens-element-ng-ag-grid.d.ts +1 -0
- package/types/siemens-element-ng-breadcrumb.d.ts +3 -6
- package/types/siemens-element-ng-common.d.ts +23 -3
- package/types/siemens-element-ng-list-details.d.ts +2 -0
- package/types/siemens-element-ng-loading-spinner.d.ts +11 -4
- package/types/siemens-element-ng-markdown-extensions-katex.d.ts +4 -1
- package/types/siemens-element-ng-markdown-extensions-mermaid.d.ts +9 -0
- package/types/siemens-element-ng-navbar-vertical-next.d.ts +2 -1
- package/types/siemens-element-ng-navbar-vertical.d.ts +2 -2
- package/types/siemens-element-ng-popover.d.ts +18 -1
- package/types/siemens-element-ng-side-panel.d.ts +7 -2
- package/types/siemens-element-ng-skip-links.d.ts +4 -2
- package/types/siemens-element-ng-translate.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-breadcrumb.mjs","sources":["../../../../projects/element-ng/breadcrumb/si-breadcrumb-item-template.directive.ts","../../../../projects/element-ng/breadcrumb/si-breadcrumb.component.ts","../../../../projects/element-ng/breadcrumb/si-breadcrumb.component.html","../../../../projects/element-ng/breadcrumb/si-breadcrumb.module.ts","../../../../projects/element-ng/breadcrumb/index.ts","../../../../projects/element-ng/breadcrumb/siemens-element-ng-breadcrumb.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive } from '@angular/core';\n\nimport { EnumeratedBreadcrumbItem } from './breadcrumb-item.model';\n\n@Directive({ selector: '[siBreadcrumbItemTemplate]' })\nexport class SiBreadcrumbItemTemplateDirective {\n static ngTemplateContextGuard(\n directive: SiBreadcrumbItemTemplateDirective,\n context: unknown\n ): context is { item: EnumeratedBreadcrumbItem; title?: string } {\n return true;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n inject,\n input,\n OnChanges,\n OnDestroy,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { elementBreadcrumbRoot, elementRight2 } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiLinkDirective } from '@siemens/element-ng/link';\nimport { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';\nimport { SiTooltipOverflowDirective } from '@siemens/element-ng/tooltip';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t\n} from '@siemens/element-translate-ng/translate';\nimport { merge, of, Subscription } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\nimport { BreadcrumbItem, EnumeratedBreadcrumbItem } from './breadcrumb-item.model';\nimport { SiBreadcrumbItemTemplateDirective } from './si-breadcrumb-item-template.directive';\n\n/**\n * Defines how many items should be displayed at the end of the breadcrumb if possible.\n */\nconst NUMBER_OF_SHOWN_ITEMS_AT_END = 2;\n\n/**\n * Defines the width of the root icon in pixels.\n */\nconst ROOT_ICON_WIDTH = 24;\n\nlet controlIdCounter = 1;\n\n@Component({\n selector: 'si-breadcrumb',\n imports: [\n NgTemplateOutlet,\n SiIconComponent,\n SiLinkDirective,\n SiResizeObserverDirective,\n SiTooltipOverflowDirective,\n SiTranslatePipe,\n SiBreadcrumbItemTemplateDirective\n ],\n templateUrl: './si-breadcrumb.component.html',\n styleUrl: './si-breadcrumb.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class SiBreadcrumbComponent implements OnChanges, OnDestroy {\n /** Array of breadcrumb items. */\n readonly items = input.required<BreadcrumbItem[]>();\n /**\n * Shows the \"root\" route as the provided title string instead of an icon.\n *\n * @defaultValue false\n */\n readonly showRootAsText = input(false, { transform: booleanAttribute });\n /**\n * Aria label for the main breadcrumb navigation. Needed for a11y.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_BREADCRUMB:Breadcrumb navigation`)\n * ```\n */\n readonly ariaLabel = input(t(() => $localize`:@@SI_BREADCRUMB:Breadcrumb navigation`));\n\n private translationSubscription?: Subscription;\n private itemsProcessed = false;\n private numberOfItems = 0;\n\n protected itemsShown: EnumeratedBreadcrumbItem[] = [];\n protected itemsHidden: EnumeratedBreadcrumbItem[] = [];\n protected breadcrumbShortened = false;\n protected ellipsesLevel = 0;\n // Record to allow for -1 (root).\n protected breadcrumbDropdownOpen: number | undefined = undefined;\n protected controlId = `__si-breadcrumb-${controlIdCounter++}-`;\n protected readonly icons = addIcons({ elementBreadcrumbRoot, elementRight2 });\n\n private readonly breadcrumbElement = viewChild.required<ElementRef>('breadcrumb');\n private readonly breadcrumbElements = viewChildren<ElementRef>('breadcrumbItem');\n\n private changeDetector = inject(ChangeDetectorRef);\n private translate = injectSiTranslateService();\n\n ngOnChanges(): void {\n // Reprocess items on every change and on init\n this.processItems();\n }\n\n ngOnDestroy(): void {\n this.translationSubscription?.unsubscribe();\n }\n\n private processItems(): void {\n this.numberOfItems = this.items().length;\n\n this.translationSubscription?.unsubscribe();\n if (this.numberOfItems) {\n this.translationSubscription = merge(this.translate.translationChange, of(undefined))\n .pipe(switchMap(() => this.translate.translateAsync(this.items().map(item => item.title))))\n .subscribe(translatedTitles => {\n // Add the level and mark the last item, keeping the full translated titles.\n let counter = -1;\n const enumeratedItems = this.items().map(item => {\n counter++;\n const title = translatedTitles[item.title];\n\n // If the root element should be displayed as text, set level not to 0.\n // This is used to distinguish in the template between icon and text.\n const level = counter === 0 && this.showRootAsText() ? -1 : counter;\n\n return {\n ...item,\n title,\n level,\n hide: false,\n lastItem: counter === this.numberOfItems - 1\n };\n });\n this.itemsShown = enumeratedItems;\n this.itemsHidden = [];\n this.breadcrumbShortened = false;\n this.breadcrumbDropdownOpen = undefined;\n this.itemsProcessed = true;\n this.resetBreadcrumb();\n });\n } else {\n this.itemsShown = [];\n this.itemsHidden = [];\n this.breadcrumbShortened = false;\n this.breadcrumbDropdownOpen = undefined;\n this.itemsProcessed = true;\n this.resetBreadcrumb();\n }\n }\n\n /** Toggle the ellipses dropdown to show the hidden breadcrumb levels. */\n protected toggleBreadcrumbDropdown(itemLevel: number): void {\n this.breadcrumbDropdownOpen = this.breadcrumbDropdownOpen === itemLevel ? undefined : itemLevel;\n }\n\n // Close dropdown on click anywhere else\n @HostListener('document:click', ['$event.target'])\n protected documentClick(targetElement: any): void {\n if (this.breadcrumbDropdownOpen) {\n if (!this.breadcrumbElement().nativeElement.contains(targetElement)) {\n // Close all dropdowns.\n this.breadcrumbDropdownOpen = undefined;\n }\n }\n }\n\n protected resetBreadcrumb(): void {\n if (this.itemsProcessed) {\n this.numberOfItems = this.items().length;\n // Add an additional the ellipses item to the end of the shownItems (breadcrumb items).\n const ellipsesItem = { title: '...', level: this.numberOfItems };\n this.itemsShown.push(ellipsesItem);\n if (this.breadcrumbShortened) {\n // If the breadcrumb was shortened before, remove the ellipses and add back itemsHidden (breadcrumb dropdown items).\n this.breadcrumbShortened = false;\n this.itemsShown.splice(this.ellipsesLevel, 1, ...this.itemsHidden);\n this.itemsHidden = [];\n }\n // Wait for the next change detection cycle to measure the updated item length.\n this.changeDetector.detectChanges();\n this.calculateBreadcrumb();\n }\n }\n\n private calculateBreadcrumb(): void {\n const maxWidth = this.breadcrumbElement().nativeElement.clientWidth;\n const breadcrumbElementsList = this.breadcrumbElements().map(item => item);\n // Measure the length of the last additional ellipses item, then remove it from itemsShown (breadcrumb items).\n const ellipsesWidth = breadcrumbElementsList[this.numberOfItems].nativeElement.offsetWidth;\n this.itemsShown.splice(this.numberOfItems, 1);\n let currentWidth = this.showRootAsText() ? 0 : ROOT_ICON_WIDTH;\n const numberOfItemsKeptAtEnd = Math.min(NUMBER_OF_SHOWN_ITEMS_AT_END, this.numberOfItems - 1);\n let reverseCounter = this.numberOfItems;\n // Test for numberOfItemsKeptAtEnd items from the end if they still fit, if not, set breadcrumbShortened to true.\n breadcrumbElementsList\n .slice(this.numberOfItems - numberOfItemsKeptAtEnd, this.numberOfItems)\n .reverse()\n .map(item => {\n if (!this.breadcrumbShortened) {\n const currentItemWidth = item.nativeElement.offsetWidth;\n if (currentWidth + currentItemWidth > maxWidth) {\n this.breadcrumbShortened = true;\n // Test if the ellipses item still fits, if not remove last (actually next in original order) item as well.\n if (currentWidth + ellipsesWidth > maxWidth) {\n reverseCounter++;\n }\n } else {\n currentWidth += currentItemWidth;\n reverseCounter--;\n }\n }\n });\n\n const start = this.showRootAsText() ? 0 : 1;\n let counter = start;\n // If breadcrumbShortened is not true yet, test for the rest of the items from the start\n // Whether they still fit, if not, set breadcrumbShortened to true.\n breadcrumbElementsList.slice(start, this.numberOfItems - numberOfItemsKeptAtEnd).map(item => {\n if (!this.breadcrumbShortened) {\n const currentItemWidth = item.nativeElement.offsetWidth;\n if (currentWidth + currentItemWidth > maxWidth) {\n this.breadcrumbShortened = true;\n // Test if the ellipses item still fits, if not remove last item as well.\n // If the counter is still on 1, instead remove last (actually next in original order) from\n // the previous reverse calculation\n if (currentWidth + ellipsesWidth > maxWidth) {\n if (counter > 1) {\n counter--;\n } else {\n reverseCounter++;\n }\n }\n } else {\n currentWidth += currentItemWidth;\n counter++;\n }\n }\n });\n // If breadcrumbShortened is true, move the items that do not fit to itemsHidden (breadcrumb dropdown items) and add ellipses item.\n if (this.breadcrumbShortened) {\n this.ellipsesLevel = counter;\n this.itemsHidden = this.itemsShown.slice(this.ellipsesLevel, reverseCounter);\n const ellipsesItem = { title: '...', level: this.ellipsesLevel };\n this.itemsShown.splice(this.ellipsesLevel, reverseCounter - this.ellipsesLevel, ellipsesItem);\n }\n // Manually detect changes to prevent them from not being detected on language change\n this.changeDetector.detectChanges();\n }\n}\n","<nav class=\"py-2\" [attr.aria-label]=\"ariaLabel() | translate\">\n <ol #breadcrumb class=\"breadcrumb\" (siResizeObserver)=\"resetBreadcrumb()\">\n @for (item of itemsShown; track $index; let isFirst = $first) {\n @if (!breadcrumbShortened || item.level !== ellipsesLevel) {\n <li #breadcrumbItem class=\"item\" [class.current-item]=\"item.lastItem\">\n @if (!isFirst) {\n <si-icon class=\"d-block icon-sm separator flip-rtl\" [icon]=\"icons.elementRight2\" />\n }\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item }\" />\n </li>\n }\n @if (breadcrumbShortened && item.level === ellipsesLevel) {\n <li class=\"item breadcrumb-ellipses-item\">\n @if (!isFirst) {\n <si-icon class=\"d-block icon-sm separator flip-rtl\" [icon]=\"icons.elementRight2\" />\n }\n <div class=\"breadcrumb-dropdown-wrapper\">\n <ng-container *ngTemplateOutlet=\"toggleTemplate; context: { item: item }\" />\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 siTooltipOverflow\n [class.disable-router-link]=\"!item.link && !item.action && !item.href\"\n [class.text-secondary]=\"item.lastItem\"\n [siLink]=\"item\"\n [exactMatch]=\"true\"\n [attr.aria-label]=\"item.title\"\n [attr.aria-disabled]=\"!item.link && !item.href && !item.action\"\n >\n @if (item.level === 0) {\n <si-icon class=\"d-block icon-sm flip-rtl\" [icon]=\"icons.elementBreadcrumbRoot\" />\n } @else {\n <span>{{ item.title }}</span>\n }\n </a>\n</ng-template>\n\n<ng-template #toggleTemplate let-item=\"item\" siBreadcrumbItemTemplate>\n <button\n type=\"button\"\n class=\"btn btn-link\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"controlId + item.level\"\n [attr.aria-expanded]=\"breadcrumbDropdownOpen === item.level\"\n (click)=\"toggleBreadcrumbDropdown(item.level)\"\n >...</button\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","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiBreadcrumbComponent } from './si-breadcrumb.component';\n\n@NgModule({\n imports: [SiBreadcrumbComponent],\n exports: [SiBreadcrumbComponent]\n})\nexport class SiBreadcrumbModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './breadcrumb-item.model';\nexport * from './si-breadcrumb.component';\nexport * from './si-breadcrumb.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.mjs","sources":["../../../../projects/element-ng/breadcrumb/si-breadcrumb-item-template.directive.ts","../../../../projects/element-ng/breadcrumb/si-breadcrumb.component.ts","../../../../projects/element-ng/breadcrumb/si-breadcrumb.component.html","../../../../projects/element-ng/breadcrumb/si-breadcrumb.module.ts","../../../../projects/element-ng/breadcrumb/index.ts","../../../../projects/element-ng/breadcrumb/siemens-element-ng-breadcrumb.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { Directive } from '@angular/core';\n\nimport { EnumeratedBreadcrumbItem } from './breadcrumb-item.model';\n\n@Directive({ selector: '[siBreadcrumbItemTemplate]' })\nexport class SiBreadcrumbItemTemplateDirective {\n static ngTemplateContextGuard(\n directive: SiBreadcrumbItemTemplateDirective,\n context: unknown\n ): context is { item: EnumeratedBreadcrumbItem; title?: string } {\n return true;\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { CdkMenuTrigger } from '@angular/cdk/menu';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n input,\n OnChanges,\n OnDestroy,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { elementBreadcrumbRoot, elementRight2 } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiLinkDirective } from '@siemens/element-ng/link';\nimport { SiMenuDirective, SiMenuItemComponent } from '@siemens/element-ng/menu';\nimport { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';\nimport { SiTooltipOverflowDirective } from '@siemens/element-ng/tooltip';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t\n} from '@siemens/element-translate-ng/translate';\nimport { merge, of, Subscription } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\nimport { BreadcrumbItem, EnumeratedBreadcrumbItem } from './breadcrumb-item.model';\nimport { SiBreadcrumbItemTemplateDirective } from './si-breadcrumb-item-template.directive';\n\n/**\n * Defines how many items should be displayed at the end of the breadcrumb if possible.\n */\nconst NUMBER_OF_SHOWN_ITEMS_AT_END = 2;\n\n/**\n * Defines the width of the root icon in pixels.\n */\nconst ROOT_ICON_WIDTH = 24;\n\n@Component({\n selector: 'si-breadcrumb',\n imports: [\n CdkMenuTrigger,\n NgTemplateOutlet,\n SiIconComponent,\n SiLinkDirective,\n SiMenuDirective,\n SiMenuItemComponent,\n SiResizeObserverDirective,\n SiTooltipOverflowDirective,\n SiTranslatePipe,\n SiBreadcrumbItemTemplateDirective\n ],\n templateUrl: './si-breadcrumb.component.html',\n styleUrl: './si-breadcrumb.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager\n})\nexport class SiBreadcrumbComponent implements OnChanges, OnDestroy {\n /** Array of breadcrumb items. */\n readonly items = input.required<BreadcrumbItem[]>();\n /**\n * Shows the \"root\" route as the provided title string instead of an icon.\n *\n * @defaultValue false\n */\n readonly showRootAsText = input(false, { transform: booleanAttribute });\n /**\n * Aria label for the main breadcrumb navigation. Needed for a11y.\n *\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_BREADCRUMB:Breadcrumb navigation`)\n * ```\n */\n readonly ariaLabel = input(t(() => $localize`:@@SI_BREADCRUMB:Breadcrumb navigation`));\n\n private translationSubscription?: Subscription;\n private itemsProcessed = false;\n private numberOfItems = 0;\n\n protected itemsShown: EnumeratedBreadcrumbItem[] = [];\n protected itemsHidden: EnumeratedBreadcrumbItem[] = [];\n protected breadcrumbShortened = false;\n protected ellipsesLevel = 0;\n protected readonly hiddenItemsLabel = t(\n () => $localize`:@@SI_BREADCRUMB.HIDDEN_ITEMS:Hidden breadcrumb items`\n );\n protected readonly icons = addIcons({ elementBreadcrumbRoot, elementRight2 });\n\n private readonly breadcrumbElement = viewChild.required<ElementRef>('breadcrumb');\n private readonly breadcrumbElements = viewChildren<ElementRef>('breadcrumbItem');\n private readonly breadcrumbMenu = viewChild(CdkMenuTrigger);\n\n private changeDetector = inject(ChangeDetectorRef);\n private translate = injectSiTranslateService();\n\n ngOnChanges(): void {\n // Reprocess items on every change and on init\n this.processItems();\n }\n\n ngOnDestroy(): void {\n this.translationSubscription?.unsubscribe();\n }\n\n private processItems(): void {\n this.numberOfItems = this.items().length;\n\n this.translationSubscription?.unsubscribe();\n if (this.numberOfItems) {\n this.translationSubscription = merge(this.translate.translationChange, of(undefined))\n .pipe(switchMap(() => this.translate.translateAsync(this.items().map(item => item.title))))\n .subscribe(translatedTitles => {\n // Add the level and mark the last item, keeping the full translated titles.\n let counter = -1;\n const enumeratedItems = this.items().map(item => {\n counter++;\n const title = translatedTitles[item.title];\n\n // If the root element should be displayed as text, set level not to 0.\n // This is used to distinguish in the template between icon and text.\n const level = counter === 0 && this.showRootAsText() ? -1 : counter;\n\n return {\n ...item,\n title,\n level,\n hide: false,\n lastItem: counter === this.numberOfItems - 1\n };\n });\n this.itemsShown = enumeratedItems;\n this.itemsHidden = [];\n this.breadcrumbShortened = false;\n this.itemsProcessed = true;\n this.resetBreadcrumb();\n });\n } else {\n this.itemsShown = [];\n this.itemsHidden = [];\n this.breadcrumbShortened = false;\n this.itemsProcessed = true;\n this.resetBreadcrumb();\n }\n }\n\n protected resetBreadcrumb(): void {\n this.breadcrumbMenu()?.close();\n if (this.itemsProcessed) {\n this.numberOfItems = this.items().length;\n // Add an additional the ellipses item to the end of the shownItems (breadcrumb items).\n const ellipsesItem = { title: '...', level: this.numberOfItems };\n this.itemsShown.push(ellipsesItem);\n if (this.breadcrumbShortened) {\n // If the breadcrumb was shortened before, remove the ellipses and add back itemsHidden (breadcrumb menu items).\n this.breadcrumbShortened = false;\n this.itemsShown.splice(this.ellipsesLevel, 1, ...this.itemsHidden);\n this.itemsHidden = [];\n }\n // Wait for the next change detection cycle to measure the updated item length.\n this.changeDetector.detectChanges();\n this.calculateBreadcrumb();\n }\n }\n\n private calculateBreadcrumb(): void {\n const maxWidth = this.breadcrumbElement().nativeElement.clientWidth;\n const breadcrumbElementsList = this.breadcrumbElements().map(item => item);\n // Measure the length of the last additional ellipses item, then remove it from itemsShown (breadcrumb items).\n const ellipsesWidth = breadcrumbElementsList[this.numberOfItems].nativeElement.offsetWidth;\n this.itemsShown.splice(this.numberOfItems, 1);\n let currentWidth = this.showRootAsText() ? 0 : ROOT_ICON_WIDTH;\n const numberOfItemsKeptAtEnd = Math.min(NUMBER_OF_SHOWN_ITEMS_AT_END, this.numberOfItems - 1);\n let reverseCounter = this.numberOfItems;\n // Test for numberOfItemsKeptAtEnd items from the end if they still fit, if not, set breadcrumbShortened to true.\n breadcrumbElementsList\n .slice(this.numberOfItems - numberOfItemsKeptAtEnd, this.numberOfItems)\n .reverse()\n .map(item => {\n if (!this.breadcrumbShortened) {\n const currentItemWidth = item.nativeElement.offsetWidth;\n if (currentWidth + currentItemWidth > maxWidth) {\n this.breadcrumbShortened = true;\n // Test if the ellipses item still fits, if not remove last (actually next in original order) item as well.\n if (currentWidth + ellipsesWidth > maxWidth) {\n reverseCounter++;\n }\n } else {\n currentWidth += currentItemWidth;\n reverseCounter--;\n }\n }\n });\n\n const start = this.showRootAsText() ? 0 : 1;\n let counter = start;\n // If breadcrumbShortened is not true yet, test for the rest of the items from the start\n // Whether they still fit, if not, set breadcrumbShortened to true.\n breadcrumbElementsList.slice(start, this.numberOfItems - numberOfItemsKeptAtEnd).map(item => {\n if (!this.breadcrumbShortened) {\n const currentItemWidth = item.nativeElement.offsetWidth;\n if (currentWidth + currentItemWidth > maxWidth) {\n this.breadcrumbShortened = true;\n // Test if the ellipses item still fits, if not remove last item as well.\n // If the counter is still on 1, instead remove last (actually next in original order) from\n // the previous reverse calculation\n if (currentWidth + ellipsesWidth > maxWidth) {\n if (counter > 1) {\n counter--;\n } else {\n reverseCounter++;\n }\n }\n } else {\n currentWidth += currentItemWidth;\n counter++;\n }\n }\n });\n // If breadcrumbShortened is true, move the items that do not fit to itemsHidden (breadcrumb menu items) and add ellipses item.\n if (this.breadcrumbShortened) {\n this.ellipsesLevel = counter;\n this.itemsHidden = this.itemsShown.slice(this.ellipsesLevel, reverseCounter);\n const ellipsesItem = { title: '...', level: this.ellipsesLevel };\n this.itemsShown.splice(this.ellipsesLevel, reverseCounter - this.ellipsesLevel, ellipsesItem);\n }\n // Manually detect changes to prevent them from not being detected on language change\n this.changeDetector.detectChanges();\n }\n}\n","<nav class=\"py-2\" [attr.aria-label]=\"ariaLabel() | translate\">\n <ol #breadcrumb class=\"breadcrumb\" (siResizeObserver)=\"resetBreadcrumb()\">\n @for (item of itemsShown; track $index) {\n @if (!breadcrumbShortened || item.level !== ellipsesLevel) {\n <li #breadcrumbItem class=\"item\" [class.current-item]=\"item.lastItem\">\n @if (!$first) {\n <si-icon class=\"d-block icon-sm separator flip-rtl\" [icon]=\"icons.elementRight2\" />\n }\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item }\" />\n </li>\n }\n @if (breadcrumbShortened && item.level === ellipsesLevel) {\n <li class=\"item breadcrumb-ellipses-item\">\n @if (!$first) {\n <si-icon class=\"d-block icon-sm separator flip-rtl\" [icon]=\"icons.elementRight2\" />\n }\n <button\n type=\"button\"\n class=\"btn btn-link\"\n [attr.aria-label]=\"hiddenItemsLabel | translate\"\n [cdkMenuTriggerFor]=\"hiddenItemsTemplate\"\n >...</button\n >\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 siTooltipOverflow\n [class.disable-router-link]=\"!item.link && !item.action && !item.href\"\n [class.text-secondary]=\"item.lastItem\"\n [siLink]=\"item\"\n [exactMatch]=\"true\"\n [attr.aria-label]=\"item.title\"\n [attr.aria-disabled]=\"!item.link && !item.href && !item.action\"\n >\n @if (item.level === 0) {\n <si-icon class=\"d-block icon-sm flip-rtl\" [icon]=\"icons.elementBreadcrumbRoot\" />\n } @else {\n <span>{{ item.title }}</span>\n }\n </a>\n</ng-template>\n\n<ng-template #hiddenItemsTemplate>\n <si-menu [attr.aria-label]=\"hiddenItemsLabel | translate\">\n @for (item of itemsHidden; track $index) {\n <a\n si-menu-item\n activeClass=\"active\"\n ariaCurrent=\"page\"\n [disabled]=\"!item.link && !item.action && !item.href\"\n [siLink]=\"item\"\n [exactMatch]=\"true\"\n >\n {{ item.title }}\n </a>\n }\n </si-menu>\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiBreadcrumbComponent } from './si-breadcrumb.component';\n\n@NgModule({\n imports: [SiBreadcrumbComponent],\n exports: [SiBreadcrumbComponent]\n})\nexport class SiBreadcrumbModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './breadcrumb-item.model';\nexport * from './si-breadcrumb.component';\nexport * from './si-breadcrumb.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { inject, computed, ElementRef, signal, Directive, input, booleanAttribute, contentChildren, linkedSignal, DestroyRef, viewChild, ChangeDetectorRef, effect, Component } from '@angular/core';
|
|
3
3
|
import { toSignal, toObservable } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { elementPause, elementPlay, elementRight2, elementLeft2 } from '@siemens/element-icons';
|
|
5
|
+
import { isRTL } from '@siemens/element-ng/common';
|
|
5
6
|
import { addIcons, SiIconComponent } from '@siemens/element-ng/icon';
|
|
6
7
|
import { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';
|
|
7
8
|
import { t, injectSiTranslateService, SiTranslatePipe } from '@siemens/element-translate-ng/translate';
|
|
@@ -441,8 +442,9 @@ class SiCarouselComponent {
|
|
|
441
442
|
// Clamp the target to the scrollable range. A wrapped slide can be placed right at the track
|
|
442
443
|
// edge, where the rect-derived target may exceed the maximum by a sub-pixel; without clamping
|
|
443
444
|
// the loop would never reach it and never settle (leaving the order normalization undone).
|
|
444
|
-
const
|
|
445
|
-
const
|
|
445
|
+
const scrollRange = viewport.scrollWidth - viewport.clientWidth;
|
|
446
|
+
const [minScrollLeft, maxScrollLeft] = isRTL(viewport) ? [-scrollRange, 0] : [0, scrollRange];
|
|
447
|
+
const target = Math.max(minScrollLeft, Math.min(this.animationTargetLeft, maxScrollLeft));
|
|
446
448
|
const diff = target - current;
|
|
447
449
|
if (Math.abs(diff) < SCROLL_SETTLE_THRESHOLD) {
|
|
448
450
|
viewport.scrollLeft = target;
|
|
@@ -541,7 +543,7 @@ class SiCarouselComponent {
|
|
|
541
543
|
}
|
|
542
544
|
}
|
|
543
545
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
544
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiCarouselComponent, isStandalone: true, selector: "si-carousel", inputs: { hidePageControls: { classPropertyName: "hidePageControls", publicName: "hidePageControls", isSignal: true, isRequired: false, transformFunction: null }, autoPlay: { classPropertyName: "autoPlay", publicName: "autoPlay", isSignal: true, isRequired: false, transformFunction: null }, ariaRole: { classPropertyName: "ariaRole", publicName: "ariaRole", isSignal: true, isRequired: false, transformFunction: null }, previousButtonAriaLabel: { classPropertyName: "previousButtonAriaLabel", publicName: "previousButtonAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, nextButtonAriaLabel: { classPropertyName: "nextButtonAriaLabel", publicName: "nextButtonAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, slidePageAriaLabel: { classPropertyName: "slidePageAriaLabel", publicName: "slidePageAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, playButtonLabel: { classPropertyName: "playButtonLabel", publicName: "playButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, pauseButtonLabel: { classPropertyName: "pauseButtonLabel", publicName: "pauseButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, carouselRoleDescription: { classPropertyName: "carouselRoleDescription", publicName: "carouselRoleDescription", isSignal: true, isRequired: false, transformFunction: null }, slideRoleDescription: { classPropertyName: "slideRoleDescription", publicName: "slideRoleDescription", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.role": "ariaRole()", "attr.aria-roledescription": "translatedCarouselRoleDescription()", "style.min-width.px": "pageControlContainerMinWidth()" } }, queries: [{ propertyName: "items", predicate: SiCarouselItemDirective, isSignal: true }], viewQueries: [{ propertyName: "viewport", first: true, predicate: ["viewport"], descendants: true, isSignal: true }, { propertyName: "pageControl", first: true, predicate: ["pageControl"], descendants: true, isSignal: true }, { propertyName: "playPauseBtn", first: true, predicate: ["playPauseBtn"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"carousel-body d-flex flex-grow-1 align-items-center gap-2 min-h-0\">\n <div #viewport class=\"carousel-viewport flex-grow-1 align-self-stretch\" tabindex=\"0\">\n <div class=\"carousel-track h-100\">\n <ng-content />\n </div>\n </div>\n</div>\n@if ((!hidePageControls() || autoPlay()) && totalPages() > 1) {\n <div\n class=\"position-relative d-flex justify-content-center align-items-center mt-4\"\n (siResizeObserver)=\"onResize($event)\"\n >\n @if (!hidePageControls()) {\n <div #pageControl class=\"d-flex align-items-center gap-2\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"previousButtonAriaLabel() | translate\"\n (click)=\"previous()\"\n >\n <si-icon [icon]=\"icons.elementLeft2\"\n /></button>\n <div class=\"d-flex align-items-center\">\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n <div\n class=\"d-flex overflow-hidden\"\n [style.width.px]=\"dotBtn.clientWidth * (totalPages() > 5 ? 5 : totalPages())\"\n >\n <div\n class=\"d-flex page-buttons\"\n [style.
|
|
546
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiCarouselComponent, isStandalone: true, selector: "si-carousel", inputs: { hidePageControls: { classPropertyName: "hidePageControls", publicName: "hidePageControls", isSignal: true, isRequired: false, transformFunction: null }, autoPlay: { classPropertyName: "autoPlay", publicName: "autoPlay", isSignal: true, isRequired: false, transformFunction: null }, ariaRole: { classPropertyName: "ariaRole", publicName: "ariaRole", isSignal: true, isRequired: false, transformFunction: null }, previousButtonAriaLabel: { classPropertyName: "previousButtonAriaLabel", publicName: "previousButtonAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, nextButtonAriaLabel: { classPropertyName: "nextButtonAriaLabel", publicName: "nextButtonAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, slidePageAriaLabel: { classPropertyName: "slidePageAriaLabel", publicName: "slidePageAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, playButtonLabel: { classPropertyName: "playButtonLabel", publicName: "playButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, pauseButtonLabel: { classPropertyName: "pauseButtonLabel", publicName: "pauseButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, carouselRoleDescription: { classPropertyName: "carouselRoleDescription", publicName: "carouselRoleDescription", isSignal: true, isRequired: false, transformFunction: null }, slideRoleDescription: { classPropertyName: "slideRoleDescription", publicName: "slideRoleDescription", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.role": "ariaRole()", "attr.aria-roledescription": "translatedCarouselRoleDescription()", "style.min-width.px": "pageControlContainerMinWidth()" } }, queries: [{ propertyName: "items", predicate: SiCarouselItemDirective, isSignal: true }], viewQueries: [{ propertyName: "viewport", first: true, predicate: ["viewport"], descendants: true, isSignal: true }, { propertyName: "pageControl", first: true, predicate: ["pageControl"], descendants: true, isSignal: true }, { propertyName: "playPauseBtn", first: true, predicate: ["playPauseBtn"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"carousel-body d-flex flex-grow-1 align-items-center gap-2 min-h-0\">\n <div #viewport class=\"carousel-viewport flex-grow-1 align-self-stretch\" tabindex=\"0\">\n <div class=\"carousel-track h-100\">\n <ng-content />\n </div>\n </div>\n</div>\n@if ((!hidePageControls() || autoPlay()) && totalPages() > 1) {\n <div\n class=\"position-relative d-flex justify-content-center align-items-center mt-4\"\n (siResizeObserver)=\"onResize($event)\"\n >\n @if (!hidePageControls()) {\n <div #pageControl class=\"d-flex align-items-center gap-2\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"previousButtonAriaLabel() | translate\"\n (click)=\"previous()\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"icons.elementLeft2\"\n /></button>\n <div class=\"d-flex align-items-center\">\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n <div\n class=\"d-flex overflow-hidden\"\n [style.width.px]=\"dotBtn.clientWidth * (totalPages() > 5 ? 5 : totalPages())\"\n >\n <div\n class=\"d-flex page-buttons\"\n [style.margin-inline-start.px]=\"-edgeLeftIndex() * dotBtn.clientWidth\"\n >\n @for (page of items(); track page) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost focus-inside btn-icon btn-sm d-flex align-items-center justify-content-center\"\n [aria-label]=\"\n slidePageAriaLabel() | translate: { page: $index + 1, total: totalPages() }\n \"\n [tabIndex]=\"$index >= edgeLeftIndex() && $index <= edgeRightIndex() ? 0 : -1\"\n [aria-current]=\"currentPage() === $index ? 'true' : 'false'\"\n (click)=\"goToSlide($index)\"\n ><span\n class=\"carousel-pager-dot d-block\"\n [class.active]=\"currentPage() === $index\"\n [class.rounded-circle]=\"currentPage() !== $index\"\n ></span\n ></button>\n }\n </div>\n </div>\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"nextButtonAriaLabel() | translate\"\n (click)=\"next()\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"icons.elementRight2\"\n /></button>\n </div>\n }\n\n @if (autoPlay()) {\n <div\n #playPauseBtn\n class=\"position-absolute top-0 end-0\"\n [class.invisible]=\"insufficientSpace()\"\n >\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon class=\"icon\" [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n <span aria-hidden=\"true\">{{\n (isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\n }}</span>\n </button>\n </div>\n @if (insufficientSpace()) {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0 align-items-center position-absolute top-0 end-0 ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n </button>\n }\n }\n </div>\n}\n", styles: [":host{--si-carousel-gap: var(--si-sys-sizing-spacing-y-60);display:flex;flex-direction:column;flex:1 1 0}.carousel-viewport{min-block-size:0;overflow-y:hidden;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}.page-buttons{transition:margin-inline-start calc(.5s * var(--element-animations-enabled, 1)) ease}.carousel-track{display:flex;gap:var(--si-carousel-gap)}.carousel-pager-dot{inline-size:.375rem;block-size:.375rem;background-color:var(--si-sys-color-text-secondary);transition:background-color calc(.5s * var(--element-animations-enabled, 1)) ease}.carousel-pager-dot.active{transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease,background-color calc(.5s * var(--element-animations-enabled, 1)) ease;inline-size:.75rem;background-color:var(--si-sys-color-background-accent);border-radius:6.25rem}.carousel-pager-small-dot{background-color:var(--si-sys-color-text-secondary);inline-size:.25rem;block-size:.25rem}\n"], dependencies: [{ kind: "directive", type: SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
|
|
545
547
|
}
|
|
546
548
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiCarouselComponent, decorators: [{
|
|
547
549
|
type: Component,
|
|
@@ -549,7 +551,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
549
551
|
'[attr.role]': 'ariaRole()',
|
|
550
552
|
'[attr.aria-roledescription]': 'translatedCarouselRoleDescription()',
|
|
551
553
|
'[style.min-width.px]': 'pageControlContainerMinWidth()'
|
|
552
|
-
}, template: "<div class=\"carousel-body d-flex flex-grow-1 align-items-center gap-2 min-h-0\">\n <div #viewport class=\"carousel-viewport flex-grow-1 align-self-stretch\" tabindex=\"0\">\n <div class=\"carousel-track h-100\">\n <ng-content />\n </div>\n </div>\n</div>\n@if ((!hidePageControls() || autoPlay()) && totalPages() > 1) {\n <div\n class=\"position-relative d-flex justify-content-center align-items-center mt-4\"\n (siResizeObserver)=\"onResize($event)\"\n >\n @if (!hidePageControls()) {\n <div #pageControl class=\"d-flex align-items-center gap-2\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"previousButtonAriaLabel() | translate\"\n (click)=\"previous()\"\n >\n <si-icon [icon]=\"icons.elementLeft2\"\n /></button>\n <div class=\"d-flex align-items-center\">\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n <div\n class=\"d-flex overflow-hidden\"\n [style.width.px]=\"dotBtn.clientWidth * (totalPages() > 5 ? 5 : totalPages())\"\n >\n <div\n class=\"d-flex page-buttons\"\n [style.
|
|
554
|
+
}, template: "<div class=\"carousel-body d-flex flex-grow-1 align-items-center gap-2 min-h-0\">\n <div #viewport class=\"carousel-viewport flex-grow-1 align-self-stretch\" tabindex=\"0\">\n <div class=\"carousel-track h-100\">\n <ng-content />\n </div>\n </div>\n</div>\n@if ((!hidePageControls() || autoPlay()) && totalPages() > 1) {\n <div\n class=\"position-relative d-flex justify-content-center align-items-center mt-4\"\n (siResizeObserver)=\"onResize($event)\"\n >\n @if (!hidePageControls()) {\n <div #pageControl class=\"d-flex align-items-center gap-2\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"previousButtonAriaLabel() | translate\"\n (click)=\"previous()\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"icons.elementLeft2\"\n /></button>\n <div class=\"d-flex align-items-center\">\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n <div\n class=\"d-flex overflow-hidden\"\n [style.width.px]=\"dotBtn.clientWidth * (totalPages() > 5 ? 5 : totalPages())\"\n >\n <div\n class=\"d-flex page-buttons\"\n [style.margin-inline-start.px]=\"-edgeLeftIndex() * dotBtn.clientWidth\"\n >\n @for (page of items(); track page) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost focus-inside btn-icon btn-sm d-flex align-items-center justify-content-center\"\n [aria-label]=\"\n slidePageAriaLabel() | translate: { page: $index + 1, total: totalPages() }\n \"\n [tabIndex]=\"$index >= edgeLeftIndex() && $index <= edgeRightIndex() ? 0 : -1\"\n [aria-current]=\"currentPage() === $index ? 'true' : 'false'\"\n (click)=\"goToSlide($index)\"\n ><span\n class=\"carousel-pager-dot d-block\"\n [class.active]=\"currentPage() === $index\"\n [class.rounded-circle]=\"currentPage() !== $index\"\n ></span\n ></button>\n }\n </div>\n </div>\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"nextButtonAriaLabel() | translate\"\n (click)=\"next()\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"icons.elementRight2\"\n /></button>\n </div>\n }\n\n @if (autoPlay()) {\n <div\n #playPauseBtn\n class=\"position-absolute top-0 end-0\"\n [class.invisible]=\"insufficientSpace()\"\n >\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon class=\"icon\" [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n <span aria-hidden=\"true\">{{\n (isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\n }}</span>\n </button>\n </div>\n @if (insufficientSpace()) {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0 align-items-center position-absolute top-0 end-0 ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n </button>\n }\n }\n </div>\n}\n", styles: [":host{--si-carousel-gap: var(--si-sys-sizing-spacing-y-60);display:flex;flex-direction:column;flex:1 1 0}.carousel-viewport{min-block-size:0;overflow-y:hidden;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}.page-buttons{transition:margin-inline-start calc(.5s * var(--element-animations-enabled, 1)) ease}.carousel-track{display:flex;gap:var(--si-carousel-gap)}.carousel-pager-dot{inline-size:.375rem;block-size:.375rem;background-color:var(--si-sys-color-text-secondary);transition:background-color calc(.5s * var(--element-animations-enabled, 1)) ease}.carousel-pager-dot.active{transition:inline-size calc(.5s * var(--element-animations-enabled, 1)) ease,background-color calc(.5s * var(--element-animations-enabled, 1)) ease;inline-size:.75rem;background-color:var(--si-sys-color-background-accent);border-radius:6.25rem}.carousel-pager-small-dot{background-color:var(--si-sys-color-text-secondary);inline-size:.25rem;block-size:.25rem}\n"] }]
|
|
553
555
|
}], ctorParameters: () => [], propDecorators: { hidePageControls: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidePageControls", required: false }] }], autoPlay: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoPlay", required: false }] }], ariaRole: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaRole", required: false }] }], previousButtonAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousButtonAriaLabel", required: false }] }], nextButtonAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextButtonAriaLabel", required: false }] }], slidePageAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "slidePageAriaLabel", required: false }] }], playButtonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "playButtonLabel", required: false }] }], pauseButtonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseButtonLabel", required: false }] }], carouselRoleDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "carouselRoleDescription", required: false }] }], slideRoleDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideRoleDescription", required: false }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SiCarouselItemDirective), { isSignal: true }] }], viewport: [{ type: i0.ViewChild, args: ['viewport', { isSignal: true }] }], pageControl: [{ type: i0.ViewChild, args: ['pageControl', { isSignal: true }] }], playPauseBtn: [{ type: i0.ViewChild, args: ['playPauseBtn', { isSignal: true }] }] } });
|
|
554
556
|
|
|
555
557
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-carousel.mjs","sources":["../../../../projects/element-ng/carousel/si-carousel-item.directive.ts","../../../../projects/element-ng/carousel/si-carousel.component.ts","../../../../projects/element-ng/carousel/si-carousel.component.html","../../../../projects/element-ng/carousel/index.ts","../../../../projects/element-ng/carousel/siemens-element-ng-carousel.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { computed, Directive, ElementRef, inject, signal } from '@angular/core';\n\nimport { SiCarouselComponent } from './si-carousel.component';\n\n@Directive({\n selector: '[siCarouselItem]',\n host: {\n style: 'flex-shrink: 0; flex-basis: 100%; scroll-snap-align: center;',\n '[style.order]': 'order()',\n 'role': 'group',\n '[attr.aria-roledescription]': 'carousel.translatedSlideRoleDescription()',\n '[attr.inert]': 'isVisible() ? null : \"\"',\n '[attr.aria-hidden]': 'isVisible() ? null : \"true\"'\n }\n})\nexport class SiCarouselItemDirective {\n protected readonly carousel = inject(SiCarouselComponent);\n protected readonly isVisible = computed(() => {\n if (this.carousel.currentActiveSlide() === this.elementRef) {\n return true;\n }\n return false;\n });\n /** @internal */\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n /** @internal */\n readonly order = signal(0);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n signal,\n viewChild\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { elementLeft2, elementRight2, elementPause, elementPlay } from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t\n} from '@siemens/element-translate-ng/translate';\nimport { switchMap } from 'rxjs';\n\nimport { SiCarouselItemDirective } from './si-carousel-item.directive';\n\n/**\n * Maximum number of pagination dots shown in the pager.\n */\nconst MAX_PAGES = 5;\n\n/**\n * Time constant (in milliseconds) for the exponential-smoothing scroll animation. Smaller values\n * settle faster. The animation is retargetable, so rapid clicks keep adjusting the same animation\n * towards the latest slide instead of starting separate, queued scrolls.\n */\nconst SCROLL_SMOOTHING_TAU = 100;\n\n/**\n * Assumed duration (in milliseconds) of the first animation frame, used before two timestamps are\n * available to measure a real delta. 16ms corresponds to one frame at ~60Hz, a safe default that\n * keeps the first easing step the same size as a normal frame.\n */\nconst FIRST_FRAME_DELTA = 16;\n\n/**\n * Distance (in CSS pixels) below which the viewport is considered to have reached its target. Less\n * than a pixel is imperceptible, so the animation snaps to the target and stops instead of easing\n * across ever-smaller, invisible fractions of a pixel forever.\n */\nconst SCROLL_SETTLE_THRESHOLD = 0.5;\n\n/**\n * Per-frame progress (in CSS pixels) below which the animation is treated as stalled. The browser\n * can cap `scrollLeft` a sub-pixel short of the computed target at the scroll boundary; without\n * this guard the loop would never reach the target and would spin forever. Kept below\n * {@link SCROLL_SETTLE_THRESHOLD} so it only triggers when real movement has effectively stopped.\n */\nconst SCROLL_STALL_THRESHOLD = 0.25;\n\n/**\n * A carousel component for displaying slides with navigation controls and auto-play.\n *\n * Features horizontal scrolling with snap behavior, pagination dots, and ARIA accessibility.\n * Suitable for dashboards, image galleries, and content showcases.\n *\n * @example\n *\n * ```typescript\n * import { SiCarouselComponent, SiCarouselItemDirective } from '@siemens/element-ng/carousel';\n *\n * @Component({\n * imports: [SiCarouselComponent, SiCarouselItemDirective],\n * template: `\n * <si-carousel>\n * <div siCarouselItem><h2>Slide 1</h2></div>\n * <div siCarouselItem><h2>Slide 2</h2></div>\n * <div siCarouselItem><h2>Slide 3</h2></div>\n * </si-carousel>\n * `\n * })\n * export class MyComponent {}\n * ```\n */\n@Component({\n selector: 'si-carousel',\n imports: [SiTranslatePipe, SiResizeObserverDirective, SiIconComponent],\n templateUrl: './si-carousel.component.html',\n styleUrl: './si-carousel.component.scss',\n host: {\n '[attr.role]': 'ariaRole()',\n '[attr.aria-roledescription]': 'translatedCarouselRoleDescription()',\n '[style.min-width.px]': 'pageControlContainerMinWidth()'\n }\n})\nexport class SiCarouselComponent {\n /**\n * Controls whether pagination controls are shown.\n * When `true`, the carousel shows one slide per page and hides pagination controls.\n * @defaultValue false\n * */\n readonly hidePageControls = input(false, { transform: booleanAttribute });\n /**\n * Enables or configures auto-play for the carousel. When set to `true`, the carousel automatically\n * navigates to the next slide every 5000 milliseconds (5 seconds). Pass a positive number to set a\n * custom interval in milliseconds. Pass `false` to disable auto-play.\n * @defaultValue false\n * */\n readonly autoPlay = input<boolean | number>(false);\n /**\n * Aria role of the carousel element. Can be set to 'region' or 'group' depending on the desired accessibility semantics.\n * @defaultValue 'region'\n * */\n readonly ariaRole = input<'region' | 'group'>('region');\n\n /**\n * Aria label for the previous button, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PREVIOUS:Previous slide`)\n * ```\n */\n readonly previousButtonAriaLabel = input(\n t(() => $localize`:@@SI_CAROUSEL.PREVIOUS:Previous slide`)\n );\n /**\n * Aria label for the next button, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.NEXT:Next slide`)\n * ```\n */\n readonly nextButtonAriaLabel = input(t(() => $localize`:@@SI_CAROUSEL.NEXT:Next slide`));\n\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.SLIDE_PAGE:Slide {{page}} of {{total}}`)\n * ```\n */\n readonly slidePageAriaLabel = input(\n t(() => $localize`:@@SI_CAROUSEL.SLIDE_PAGE:Slide {{page}} of {{total}}`)\n );\n\n /**\n * Label for the play button when autoplay is paused.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PLAY:Play`)\n * ```\n */\n readonly playButtonLabel = input(t(() => $localize`:@@SI_CAROUSEL.PLAY:Play`));\n\n /**\n * Label for the pause button when autoplay is active.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PAUSE:Pause`)\n * ```\n */\n readonly pauseButtonLabel = input(t(() => $localize`:@@SI_CAROUSEL.PAUSE:Pause`));\n\n /**\n * Role description for the carousel container, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.ROLE_DESCRIPTION:carousel`)\n * ```\n */\n readonly carouselRoleDescription = input(\n t(() => $localize`:@@SI_CAROUSEL.ROLE_DESCRIPTION:carousel`)\n );\n /**\n * Role description for each slide, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.SLIDE_ROLE_DESCRIPTION:Slide`)\n * ```\n */\n readonly slideRoleDescription = input(\n t(() => $localize`:@@SI_CAROUSEL.SLIDE_ROLE_DESCRIPTION:Slide`)\n );\n\n /** @internal */\n readonly translatedSlideRoleDescription = toSignal(\n toObservable(this.slideRoleDescription).pipe(\n switchMap(key => this.translateService.translateAsync(key))\n ),\n { initialValue: '' }\n );\n /** @internal */\n readonly currentActiveSlide = computed(() => {\n const currentPage = this.currentPage();\n if (currentPage !== null && this.items().length) {\n return this.items()[currentPage].elementRef;\n }\n return null;\n });\n\n protected readonly translatedCarouselRoleDescription = toSignal(\n toObservable(this.carouselRoleDescription).pipe(\n switchMap(key => this.translateService.translateAsync(key))\n ),\n { initialValue: '' }\n );\n protected readonly items = contentChildren(SiCarouselItemDirective);\n\n protected readonly currentPage = linkedSignal<number | null>(() =>\n this.items().length ? 0 : null\n );\n protected readonly isPaused = signal(false);\n protected readonly totalPages = computed(() => this.items().length);\n protected readonly edgeLeftIndex = signal(0);\n protected readonly edgeRightIndex = signal(MAX_PAGES - 1);\n protected readonly insufficientSpace = signal(false);\n protected readonly pageControlContainerMinWidth = signal(0);\n protected readonly icons = addIcons({ elementLeft2, elementRight2, elementPlay, elementPause });\n\n private readonly autoPlayDuration = computed(() => {\n const autoPlayValue = this.autoPlay();\n if (typeof autoPlayValue === 'boolean') {\n return autoPlayValue ? 5000 : 0;\n }\n return autoPlayValue > 0 ? autoPlayValue : 0;\n });\n private intervalId: ReturnType<typeof setInterval> | null = null;\n private scrollObserver: IntersectionObserver | null = null;\n /** requestAnimationFrame id of the running scroll animation, or null when idle. */\n private animationFrameId: number | null = null;\n /** Scroll position (`scrollLeft`) the running animation is easing towards. */\n private animationTargetLeft = 0;\n /** Timestamp of the previous animation frame, used to make the easing frame-rate independent. */\n private lastFrameTime = 0;\n /** Whether any slide's CSS order has been changed from its natural (source-index) position. */\n private ordersModified = false;\n private readonly destroyRef = inject(DestroyRef);\n private readonly viewport = viewChild.required<ElementRef<HTMLElement>>('viewport');\n private readonly pageControl = viewChild<ElementRef<HTMLElement>>('pageControl');\n private readonly playPauseBtn = viewChild<ElementRef<HTMLElement>>('playPauseBtn');\n private readonly translateService = injectSiTranslateService();\n private cdRef = inject(ChangeDetectorRef);\n\n constructor() {\n effect(onCleanup => {\n this.scheduleAutoPlay();\n onCleanup(() => clearInterval(this.intervalId!));\n });\n\n effect(() => {\n // Reset to the first page if the current page becomes out of range due to items being added/removed.\n const currentPage = this.currentPage();\n if (currentPage !== null && currentPage >= this.totalPages()) {\n this.cancelAnimation();\n this.items().forEach((_, i) => this.setSlideOrder(i, i));\n this.ordersModified = false;\n this.goToPage(0);\n }\n });\n\n effect(() => {\n this.setupScrollObserver();\n });\n\n effect(() => {\n // Establish the canonical track order (each slide's CSS order equals its source index) so the\n // navigation maths stay consistent. Skipped while an order change is mid-flight, where the\n // orders are intentionally extended and normalized once the animation settles.\n const items = this.items();\n if (this.ordersModified) {\n return;\n }\n items.forEach((_, i) => this.setSlideOrder(i, i));\n });\n\n effect(() => {\n this.updateEdgeIndices();\n });\n\n this.destroyRef.onDestroy(() => {\n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n }\n this.scrollObserver?.disconnect();\n });\n }\n\n protected goToPage(page: number, forceScroll = true): void {\n this.currentPage.set(page);\n this.scheduleAutoPlay();\n if (forceScroll) {\n this.animateToSlide(page);\n }\n }\n\n protected next(): void {\n this.step(1);\n }\n\n protected previous(): void {\n this.step(-1);\n }\n\n /** Navigates directly to a specific slide, used by the pagination dots. */\n protected goToSlide(index: number): void {\n this.cancelAnimation();\n this.normalizeOrders();\n this.goToPage(index, true);\n }\n\n protected toggleAutoPlay(): void {\n this.isPaused.update(paused => !paused);\n if (this.isPaused()) {\n this.stopAutoPlay();\n } else {\n this.scheduleAutoPlay();\n }\n }\n\n protected onResize(size: { width: number; height: number }): void {\n const pageControl = this.pageControl();\n if (!pageControl) {\n return;\n }\n const pageControlWidth = pageControl.nativeElement.offsetWidth;\n if (this.autoPlay()) {\n const playPauseBtnWidth = this.playPauseBtn()?.nativeElement.offsetWidth ?? 0;\n const minWidth = pageControlWidth + playPauseBtnWidth;\n if (minWidth > size.width - playPauseBtnWidth) {\n this.insufficientSpace.set(true);\n } else {\n this.insufficientSpace.set(false);\n }\n this.pageControlContainerMinWidth.set(minWidth);\n } else {\n this.insufficientSpace.set(false);\n this.pageControlContainerMinWidth.set(pageControlWidth);\n }\n }\n\n /**\n * Navigates a single slide forward (`1`) or backward (`-1`). Rapid clicks are intentionally not\n * queued or throttled: each click advances {@link currentPage} immediately and retargets the\n * running scroll animation (see {@link animateTo}) towards the new slide, so the carousel keeps\n * gliding in the click direction without waiting for the previous scroll to finish.\n *\n * To keep the first/last wrap a continuous one-slide glide instead of a jump across the whole\n * track, the target slide's CSS order is placed exactly one slot away from the current slide in\n * the click direction (so it sits adjacent to it). The viewport scroll is compensated so this\n * reorder is invisible. Orders may extend while the user keeps clicking; they are silently\n * normalized once the animation settles (see {@link normalizeOrders}).\n */\n private step(direction: 1 | -1): void {\n const total = this.totalPages();\n if (total <= 1) {\n return;\n }\n const from = this.currentPage() ?? 0;\n const to = (from + direction + total) % total;\n\n // Ensure the target slide sits one slot away from the current slide in the click direction.\n // For a normal step it already does; for a first/last wrap it does not, so move it there.\n const desiredOrder = this.items()[from].order() + direction;\n if (this.items()[to].order() !== desiredOrder) {\n this.reorderSlide(to, desiredOrder, from);\n }\n\n this.currentPage.set(to);\n this.scheduleAutoPlay();\n this.animateToSlide(to);\n }\n\n /**\n * Changes a slide's CSS order while keeping the picture stable. Reordering shifts slides along\n * the flex track, so the scroll position is adjusted by the exact amount the anchor slide moved,\n * making the relocation invisible and letting any in-flight animation continue seamlessly.\n */\n private reorderSlide(index: number, order: number, anchorIndex: number): void {\n const viewport = this.viewport().nativeElement;\n const anchor = this.items()[anchorIndex].elementRef.nativeElement;\n const before = anchor.getBoundingClientRect().left;\n this.setSlideOrder(index, order);\n // Reading layout after the order change forces a synchronous reflow with the new positions.\n const after = anchor.getBoundingClientRect().left;\n viewport.scrollLeft += after - before;\n this.ordersModified = true;\n }\n\n /**\n * Sets the CSS order of a slide. The value is written to the DOM synchronously in addition to\n * the signal, so a subsequent reflow/scroll uses the new order immediately instead of waiting\n * for the asynchronous, signal-driven change detection update.\n */\n private setSlideOrder(index: number, order: number): void {\n const slide = this.items()[index];\n slide.order.set(order);\n slide.elementRef.nativeElement.style.order = `${order}`;\n }\n\n /**\n * Silently restores the canonical slide order (each slide's CSS order equals its source index).\n * Reordering shifts the track, so it anchors on the current slide and compensates the scroll\n * position to avoid any visible jump. Called once the scroll animation settles.\n */\n private normalizeOrders(): void {\n if (!this.ordersModified) {\n return;\n }\n const items = this.items();\n const viewport = this.viewport().nativeElement;\n const current = this.currentPage();\n const anchor = current !== null ? items[current]?.elementRef.nativeElement : undefined;\n const before = anchor?.getBoundingClientRect().left ?? 0;\n for (let i = 0; i < items.length; i++) {\n if (items[i].order() !== i) {\n this.setSlideOrder(i, i);\n }\n }\n if (anchor) {\n const after = anchor.getBoundingClientRect().left;\n viewport.scrollLeft += after - before;\n }\n this.ordersModified = false;\n }\n\n /** Animates the viewport so the given slide is horizontally centered. */\n private animateToSlide(index: number): void {\n const viewport = this.viewport().nativeElement;\n const slide = this.items()[index].elementRef.nativeElement;\n const viewportRect = viewport.getBoundingClientRect();\n const slideRect = slide.getBoundingClientRect();\n const delta =\n slideRect.left + slideRect.width / 2 - (viewportRect.left + viewportRect.width / 2);\n this.animateTo(viewport.scrollLeft + delta);\n }\n\n /**\n * Eases `scrollLeft` towards `targetLeft` using a frame-rate independent exponential smoothing\n * loop. The target can be updated mid-flight (rapid clicks), so the same animation simply chases\n * the latest slide. Native scroll-snap and smooth scroll-behavior are disabled while animating so\n * they do not fight the manual scrolling, and the scroll observer is paused to avoid feedback.\n */\n private animateTo(targetLeft: number): void {\n this.animationTargetLeft = targetLeft;\n if (this.animationFrameId !== null) {\n return;\n }\n const viewport = this.viewport().nativeElement;\n this.scrollObserver?.disconnect();\n viewport.style.scrollSnapType = 'none';\n viewport.style.scrollBehavior = 'auto';\n this.lastFrameTime = 0;\n this.animationFrameId = requestAnimationFrame(time => this.animationFrame(time));\n }\n\n private animationFrame(now: number): void {\n const viewport = this.viewport().nativeElement;\n const dt = this.lastFrameTime ? now - this.lastFrameTime : FIRST_FRAME_DELTA;\n this.lastFrameTime = now;\n const current = viewport.scrollLeft;\n // Clamp the target to the scrollable range. A wrapped slide can be placed right at the track\n // edge, where the rect-derived target may exceed the maximum by a sub-pixel; without clamping\n // the loop would never reach it and never settle (leaving the order normalization undone).\n const maxScrollLeft = viewport.scrollWidth - viewport.clientWidth;\n const target = Math.max(0, Math.min(this.animationTargetLeft, maxScrollLeft));\n const diff = target - current;\n if (Math.abs(diff) < SCROLL_SETTLE_THRESHOLD) {\n viewport.scrollLeft = target;\n this.animationFrameId = null;\n this.endAnimation();\n return;\n }\n viewport.scrollLeft = current + diff * (1 - Math.exp(-dt / SCROLL_SMOOTHING_TAU));\n // The browser can cap `scrollLeft` a sub-pixel short of the computed target (rounding at the\n // scroll boundary). If a frame makes no real progress, treat the animation as settled instead\n // of spinning forever.\n if (Math.abs(viewport.scrollLeft - current) < SCROLL_STALL_THRESHOLD) {\n this.animationFrameId = null;\n this.endAnimation();\n return;\n }\n this.animationFrameId = requestAnimationFrame(time => this.animationFrame(time));\n }\n\n /** Finalizes the animation: normalizes orders, restores native scrolling and the observer. */\n private endAnimation(): void {\n this.normalizeOrders();\n const viewport = this.viewport().nativeElement;\n viewport.style.scrollSnapType = '';\n viewport.style.scrollBehavior = '';\n this.cdRef.markForCheck();\n this.setupScrollObserver();\n }\n\n /** Stops the running scroll animation and restores native scrolling, without normalizing. */\n private cancelAnimation(): void {\n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n const viewport = this.viewport().nativeElement;\n viewport.style.scrollSnapType = '';\n viewport.style.scrollBehavior = '';\n this.cdRef.markForCheck();\n }\n\n private scheduleAutoPlay(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n }\n if (!this.autoPlayDuration() || this.items().length === 0 || this.isPaused()) {\n return;\n }\n this.intervalId = setInterval(() => this.next(), this.autoPlayDuration());\n }\n\n private stopAutoPlay(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n\n private setupScrollObserver(): void {\n if (this.scrollObserver) {\n this.scrollObserver.disconnect();\n }\n\n const items = this.items();\n if (items.length === 0) {\n return;\n }\n\n const viewport = this.viewport().nativeElement;\n this.scrollObserver = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const target = entry.target as HTMLElement;\n\n const itemIndex = items.findIndex(item => item.elementRef.nativeElement === target);\n if (itemIndex !== -1) {\n this.goToPage(itemIndex, false);\n }\n }\n });\n },\n { root: viewport, threshold: 0.6, rootMargin: '0px' }\n );\n\n for (const item of items) {\n this.scrollObserver.observe(item.elementRef.nativeElement);\n }\n }\n\n private updateEdgeIndices(): void {\n const total = this.totalPages();\n const current = this.currentPage();\n if (current === null) {\n return;\n }\n if (total <= MAX_PAGES) {\n this.edgeLeftIndex.set(0);\n this.edgeRightIndex.set(total - 1);\n return;\n }\n\n if (current < this.edgeLeftIndex()) {\n this.edgeLeftIndex.set(current);\n this.edgeRightIndex.set(current + MAX_PAGES - 1);\n }\n\n if (current > this.edgeRightIndex()) {\n this.edgeRightIndex.set(current);\n this.edgeLeftIndex.set(current - MAX_PAGES + 1);\n }\n }\n}\n","<div class=\"carousel-body d-flex flex-grow-1 align-items-center gap-2 min-h-0\">\n <div #viewport class=\"carousel-viewport flex-grow-1 align-self-stretch\" tabindex=\"0\">\n <div class=\"carousel-track h-100\">\n <ng-content />\n </div>\n </div>\n</div>\n@if ((!hidePageControls() || autoPlay()) && totalPages() > 1) {\n <div\n class=\"position-relative d-flex justify-content-center align-items-center mt-4\"\n (siResizeObserver)=\"onResize($event)\"\n >\n @if (!hidePageControls()) {\n <div #pageControl class=\"d-flex align-items-center gap-2\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"previousButtonAriaLabel() | translate\"\n (click)=\"previous()\"\n >\n <si-icon [icon]=\"icons.elementLeft2\"\n /></button>\n <div class=\"d-flex align-items-center\">\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n <div\n class=\"d-flex overflow-hidden\"\n [style.width.px]=\"dotBtn.clientWidth * (totalPages() > 5 ? 5 : totalPages())\"\n >\n <div\n class=\"d-flex page-buttons\"\n [style.transform]=\"'translateX(-' + edgeLeftIndex() * dotBtn.clientWidth + 'px)'\"\n >\n @for (page of items(); track page) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost focus-inside btn-icon btn-sm d-flex align-items-center justify-content-center\"\n [aria-label]=\"\n slidePageAriaLabel() | translate: { page: $index + 1, total: totalPages() }\n \"\n [tabIndex]=\"$index >= edgeLeftIndex() && $index <= edgeRightIndex() ? 0 : -1\"\n [aria-current]=\"currentPage() === $index ? 'true' : 'false'\"\n (click)=\"goToSlide($index)\"\n ><span\n class=\"carousel-pager-dot d-block\"\n [class.active]=\"currentPage() === $index\"\n [class.rounded-circle]=\"currentPage() !== $index\"\n ></span\n ></button>\n }\n </div>\n </div>\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"nextButtonAriaLabel() | translate\"\n (click)=\"next()\"\n >\n <si-icon [icon]=\"icons.elementRight2\"\n /></button>\n </div>\n }\n\n @if (autoPlay()) {\n <div\n #playPauseBtn\n class=\"position-absolute top-0 end-0\"\n [class.invisible]=\"insufficientSpace()\"\n >\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon class=\"icon\" [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n <span aria-hidden=\"true\">{{\n (isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\n }}</span>\n </button>\n </div>\n @if (insufficientSpace()) {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0 align-items-center position-absolute top-0 end-0 ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n </button>\n }\n }\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-carousel.component';\nexport * from './si-carousel-item.directive';\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-carousel.mjs","sources":["../../../../projects/element-ng/carousel/si-carousel-item.directive.ts","../../../../projects/element-ng/carousel/si-carousel.component.ts","../../../../projects/element-ng/carousel/si-carousel.component.html","../../../../projects/element-ng/carousel/index.ts","../../../../projects/element-ng/carousel/siemens-element-ng-carousel.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { computed, Directive, ElementRef, inject, signal } from '@angular/core';\n\nimport { SiCarouselComponent } from './si-carousel.component';\n\n@Directive({\n selector: '[siCarouselItem]',\n host: {\n style: 'flex-shrink: 0; flex-basis: 100%; scroll-snap-align: center;',\n '[style.order]': 'order()',\n 'role': 'group',\n '[attr.aria-roledescription]': 'carousel.translatedSlideRoleDescription()',\n '[attr.inert]': 'isVisible() ? null : \"\"',\n '[attr.aria-hidden]': 'isVisible() ? null : \"true\"'\n }\n})\nexport class SiCarouselItemDirective {\n protected readonly carousel = inject(SiCarouselComponent);\n protected readonly isVisible = computed(() => {\n if (this.carousel.currentActiveSlide() === this.elementRef) {\n return true;\n }\n return false;\n });\n /** @internal */\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n /** @internal */\n readonly order = signal(0);\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport {\n booleanAttribute,\n ChangeDetectorRef,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n signal,\n viewChild\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { elementLeft2, elementRight2, elementPause, elementPlay } from '@siemens/element-icons';\nimport { isRTL } from '@siemens/element-ng/common';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiResizeObserverDirective } from '@siemens/element-ng/resize-observer';\nimport {\n injectSiTranslateService,\n SiTranslatePipe,\n t\n} from '@siemens/element-translate-ng/translate';\nimport { switchMap } from 'rxjs';\n\nimport { SiCarouselItemDirective } from './si-carousel-item.directive';\n\n/**\n * Maximum number of pagination dots shown in the pager.\n */\nconst MAX_PAGES = 5;\n\n/**\n * Time constant (in milliseconds) for the exponential-smoothing scroll animation. Smaller values\n * settle faster. The animation is retargetable, so rapid clicks keep adjusting the same animation\n * towards the latest slide instead of starting separate, queued scrolls.\n */\nconst SCROLL_SMOOTHING_TAU = 100;\n\n/**\n * Assumed duration (in milliseconds) of the first animation frame, used before two timestamps are\n * available to measure a real delta. 16ms corresponds to one frame at ~60Hz, a safe default that\n * keeps the first easing step the same size as a normal frame.\n */\nconst FIRST_FRAME_DELTA = 16;\n\n/**\n * Distance (in CSS pixels) below which the viewport is considered to have reached its target. Less\n * than a pixel is imperceptible, so the animation snaps to the target and stops instead of easing\n * across ever-smaller, invisible fractions of a pixel forever.\n */\nconst SCROLL_SETTLE_THRESHOLD = 0.5;\n\n/**\n * Per-frame progress (in CSS pixels) below which the animation is treated as stalled. The browser\n * can cap `scrollLeft` a sub-pixel short of the computed target at the scroll boundary; without\n * this guard the loop would never reach the target and would spin forever. Kept below\n * {@link SCROLL_SETTLE_THRESHOLD} so it only triggers when real movement has effectively stopped.\n */\nconst SCROLL_STALL_THRESHOLD = 0.25;\n\n/**\n * A carousel component for displaying slides with navigation controls and auto-play.\n *\n * Features horizontal scrolling with snap behavior, pagination dots, and ARIA accessibility.\n * Suitable for dashboards, image galleries, and content showcases.\n *\n * @example\n *\n * ```typescript\n * import { SiCarouselComponent, SiCarouselItemDirective } from '@siemens/element-ng/carousel';\n *\n * @Component({\n * imports: [SiCarouselComponent, SiCarouselItemDirective],\n * template: `\n * <si-carousel>\n * <div siCarouselItem><h2>Slide 1</h2></div>\n * <div siCarouselItem><h2>Slide 2</h2></div>\n * <div siCarouselItem><h2>Slide 3</h2></div>\n * </si-carousel>\n * `\n * })\n * export class MyComponent {}\n * ```\n */\n@Component({\n selector: 'si-carousel',\n imports: [SiTranslatePipe, SiResizeObserverDirective, SiIconComponent],\n templateUrl: './si-carousel.component.html',\n styleUrl: './si-carousel.component.scss',\n host: {\n '[attr.role]': 'ariaRole()',\n '[attr.aria-roledescription]': 'translatedCarouselRoleDescription()',\n '[style.min-width.px]': 'pageControlContainerMinWidth()'\n }\n})\nexport class SiCarouselComponent {\n /**\n * Controls whether pagination controls are shown.\n * When `true`, the carousel shows one slide per page and hides pagination controls.\n * @defaultValue false\n * */\n readonly hidePageControls = input(false, { transform: booleanAttribute });\n /**\n * Enables or configures auto-play for the carousel. When set to `true`, the carousel automatically\n * navigates to the next slide every 5000 milliseconds (5 seconds). Pass a positive number to set a\n * custom interval in milliseconds. Pass `false` to disable auto-play.\n * @defaultValue false\n * */\n readonly autoPlay = input<boolean | number>(false);\n /**\n * Aria role of the carousel element. Can be set to 'region' or 'group' depending on the desired accessibility semantics.\n * @defaultValue 'region'\n * */\n readonly ariaRole = input<'region' | 'group'>('region');\n\n /**\n * Aria label for the previous button, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PREVIOUS:Previous slide`)\n * ```\n */\n readonly previousButtonAriaLabel = input(\n t(() => $localize`:@@SI_CAROUSEL.PREVIOUS:Previous slide`)\n );\n /**\n * Aria label for the next button, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.NEXT:Next slide`)\n * ```\n */\n readonly nextButtonAriaLabel = input(t(() => $localize`:@@SI_CAROUSEL.NEXT:Next slide`));\n\n /**\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.SLIDE_PAGE:Slide {{page}} of {{total}}`)\n * ```\n */\n readonly slidePageAriaLabel = input(\n t(() => $localize`:@@SI_CAROUSEL.SLIDE_PAGE:Slide {{page}} of {{total}}`)\n );\n\n /**\n * Label for the play button when autoplay is paused.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PLAY:Play`)\n * ```\n */\n readonly playButtonLabel = input(t(() => $localize`:@@SI_CAROUSEL.PLAY:Play`));\n\n /**\n * Label for the pause button when autoplay is active.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.PAUSE:Pause`)\n * ```\n */\n readonly pauseButtonLabel = input(t(() => $localize`:@@SI_CAROUSEL.PAUSE:Pause`));\n\n /**\n * Role description for the carousel container, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.ROLE_DESCRIPTION:carousel`)\n * ```\n */\n readonly carouselRoleDescription = input(\n t(() => $localize`:@@SI_CAROUSEL.ROLE_DESCRIPTION:carousel`)\n );\n /**\n * Role description for each slide, used for accessibility purposes.\n * @defaultValue\n * ```\n * t(() => $localize`:@@SI_CAROUSEL.SLIDE_ROLE_DESCRIPTION:Slide`)\n * ```\n */\n readonly slideRoleDescription = input(\n t(() => $localize`:@@SI_CAROUSEL.SLIDE_ROLE_DESCRIPTION:Slide`)\n );\n\n /** @internal */\n readonly translatedSlideRoleDescription = toSignal(\n toObservable(this.slideRoleDescription).pipe(\n switchMap(key => this.translateService.translateAsync(key))\n ),\n { initialValue: '' }\n );\n /** @internal */\n readonly currentActiveSlide = computed(() => {\n const currentPage = this.currentPage();\n if (currentPage !== null && this.items().length) {\n return this.items()[currentPage].elementRef;\n }\n return null;\n });\n\n protected readonly translatedCarouselRoleDescription = toSignal(\n toObservable(this.carouselRoleDescription).pipe(\n switchMap(key => this.translateService.translateAsync(key))\n ),\n { initialValue: '' }\n );\n protected readonly items = contentChildren(SiCarouselItemDirective);\n\n protected readonly currentPage = linkedSignal<number | null>(() =>\n this.items().length ? 0 : null\n );\n protected readonly isPaused = signal(false);\n protected readonly totalPages = computed(() => this.items().length);\n protected readonly edgeLeftIndex = signal(0);\n protected readonly edgeRightIndex = signal(MAX_PAGES - 1);\n protected readonly insufficientSpace = signal(false);\n protected readonly pageControlContainerMinWidth = signal(0);\n protected readonly icons = addIcons({ elementLeft2, elementRight2, elementPlay, elementPause });\n\n private readonly autoPlayDuration = computed(() => {\n const autoPlayValue = this.autoPlay();\n if (typeof autoPlayValue === 'boolean') {\n return autoPlayValue ? 5000 : 0;\n }\n return autoPlayValue > 0 ? autoPlayValue : 0;\n });\n private intervalId: ReturnType<typeof setInterval> | null = null;\n private scrollObserver: IntersectionObserver | null = null;\n /** requestAnimationFrame id of the running scroll animation, or null when idle. */\n private animationFrameId: number | null = null;\n /** Scroll position (`scrollLeft`) the running animation is easing towards. */\n private animationTargetLeft = 0;\n /** Timestamp of the previous animation frame, used to make the easing frame-rate independent. */\n private lastFrameTime = 0;\n /** Whether any slide's CSS order has been changed from its natural (source-index) position. */\n private ordersModified = false;\n private readonly destroyRef = inject(DestroyRef);\n private readonly viewport = viewChild.required<ElementRef<HTMLElement>>('viewport');\n private readonly pageControl = viewChild<ElementRef<HTMLElement>>('pageControl');\n private readonly playPauseBtn = viewChild<ElementRef<HTMLElement>>('playPauseBtn');\n private readonly translateService = injectSiTranslateService();\n private cdRef = inject(ChangeDetectorRef);\n\n constructor() {\n effect(onCleanup => {\n this.scheduleAutoPlay();\n onCleanup(() => clearInterval(this.intervalId!));\n });\n\n effect(() => {\n // Reset to the first page if the current page becomes out of range due to items being added/removed.\n const currentPage = this.currentPage();\n if (currentPage !== null && currentPage >= this.totalPages()) {\n this.cancelAnimation();\n this.items().forEach((_, i) => this.setSlideOrder(i, i));\n this.ordersModified = false;\n this.goToPage(0);\n }\n });\n\n effect(() => {\n this.setupScrollObserver();\n });\n\n effect(() => {\n // Establish the canonical track order (each slide's CSS order equals its source index) so the\n // navigation maths stay consistent. Skipped while an order change is mid-flight, where the\n // orders are intentionally extended and normalized once the animation settles.\n const items = this.items();\n if (this.ordersModified) {\n return;\n }\n items.forEach((_, i) => this.setSlideOrder(i, i));\n });\n\n effect(() => {\n this.updateEdgeIndices();\n });\n\n this.destroyRef.onDestroy(() => {\n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n }\n this.scrollObserver?.disconnect();\n });\n }\n\n protected goToPage(page: number, forceScroll = true): void {\n this.currentPage.set(page);\n this.scheduleAutoPlay();\n if (forceScroll) {\n this.animateToSlide(page);\n }\n }\n\n protected next(): void {\n this.step(1);\n }\n\n protected previous(): void {\n this.step(-1);\n }\n\n /** Navigates directly to a specific slide, used by the pagination dots. */\n protected goToSlide(index: number): void {\n this.cancelAnimation();\n this.normalizeOrders();\n this.goToPage(index, true);\n }\n\n protected toggleAutoPlay(): void {\n this.isPaused.update(paused => !paused);\n if (this.isPaused()) {\n this.stopAutoPlay();\n } else {\n this.scheduleAutoPlay();\n }\n }\n\n protected onResize(size: { width: number; height: number }): void {\n const pageControl = this.pageControl();\n if (!pageControl) {\n return;\n }\n const pageControlWidth = pageControl.nativeElement.offsetWidth;\n if (this.autoPlay()) {\n const playPauseBtnWidth = this.playPauseBtn()?.nativeElement.offsetWidth ?? 0;\n const minWidth = pageControlWidth + playPauseBtnWidth;\n if (minWidth > size.width - playPauseBtnWidth) {\n this.insufficientSpace.set(true);\n } else {\n this.insufficientSpace.set(false);\n }\n this.pageControlContainerMinWidth.set(minWidth);\n } else {\n this.insufficientSpace.set(false);\n this.pageControlContainerMinWidth.set(pageControlWidth);\n }\n }\n\n /**\n * Navigates a single slide forward (`1`) or backward (`-1`). Rapid clicks are intentionally not\n * queued or throttled: each click advances {@link currentPage} immediately and retargets the\n * running scroll animation (see {@link animateTo}) towards the new slide, so the carousel keeps\n * gliding in the click direction without waiting for the previous scroll to finish.\n *\n * To keep the first/last wrap a continuous one-slide glide instead of a jump across the whole\n * track, the target slide's CSS order is placed exactly one slot away from the current slide in\n * the click direction (so it sits adjacent to it). The viewport scroll is compensated so this\n * reorder is invisible. Orders may extend while the user keeps clicking; they are silently\n * normalized once the animation settles (see {@link normalizeOrders}).\n */\n private step(direction: 1 | -1): void {\n const total = this.totalPages();\n if (total <= 1) {\n return;\n }\n const from = this.currentPage() ?? 0;\n const to = (from + direction + total) % total;\n\n // Ensure the target slide sits one slot away from the current slide in the click direction.\n // For a normal step it already does; for a first/last wrap it does not, so move it there.\n const desiredOrder = this.items()[from].order() + direction;\n if (this.items()[to].order() !== desiredOrder) {\n this.reorderSlide(to, desiredOrder, from);\n }\n\n this.currentPage.set(to);\n this.scheduleAutoPlay();\n this.animateToSlide(to);\n }\n\n /**\n * Changes a slide's CSS order while keeping the picture stable. Reordering shifts slides along\n * the flex track, so the scroll position is adjusted by the exact amount the anchor slide moved,\n * making the relocation invisible and letting any in-flight animation continue seamlessly.\n */\n private reorderSlide(index: number, order: number, anchorIndex: number): void {\n const viewport = this.viewport().nativeElement;\n const anchor = this.items()[anchorIndex].elementRef.nativeElement;\n const before = anchor.getBoundingClientRect().left;\n this.setSlideOrder(index, order);\n // Reading layout after the order change forces a synchronous reflow with the new positions.\n const after = anchor.getBoundingClientRect().left;\n viewport.scrollLeft += after - before;\n this.ordersModified = true;\n }\n\n /**\n * Sets the CSS order of a slide. The value is written to the DOM synchronously in addition to\n * the signal, so a subsequent reflow/scroll uses the new order immediately instead of waiting\n * for the asynchronous, signal-driven change detection update.\n */\n private setSlideOrder(index: number, order: number): void {\n const slide = this.items()[index];\n slide.order.set(order);\n slide.elementRef.nativeElement.style.order = `${order}`;\n }\n\n /**\n * Silently restores the canonical slide order (each slide's CSS order equals its source index).\n * Reordering shifts the track, so it anchors on the current slide and compensates the scroll\n * position to avoid any visible jump. Called once the scroll animation settles.\n */\n private normalizeOrders(): void {\n if (!this.ordersModified) {\n return;\n }\n const items = this.items();\n const viewport = this.viewport().nativeElement;\n const current = this.currentPage();\n const anchor = current !== null ? items[current]?.elementRef.nativeElement : undefined;\n const before = anchor?.getBoundingClientRect().left ?? 0;\n for (let i = 0; i < items.length; i++) {\n if (items[i].order() !== i) {\n this.setSlideOrder(i, i);\n }\n }\n if (anchor) {\n const after = anchor.getBoundingClientRect().left;\n viewport.scrollLeft += after - before;\n }\n this.ordersModified = false;\n }\n\n /** Animates the viewport so the given slide is horizontally centered. */\n private animateToSlide(index: number): void {\n const viewport = this.viewport().nativeElement;\n const slide = this.items()[index].elementRef.nativeElement;\n const viewportRect = viewport.getBoundingClientRect();\n const slideRect = slide.getBoundingClientRect();\n const delta =\n slideRect.left + slideRect.width / 2 - (viewportRect.left + viewportRect.width / 2);\n this.animateTo(viewport.scrollLeft + delta);\n }\n\n /**\n * Eases `scrollLeft` towards `targetLeft` using a frame-rate independent exponential smoothing\n * loop. The target can be updated mid-flight (rapid clicks), so the same animation simply chases\n * the latest slide. Native scroll-snap and smooth scroll-behavior are disabled while animating so\n * they do not fight the manual scrolling, and the scroll observer is paused to avoid feedback.\n */\n private animateTo(targetLeft: number): void {\n this.animationTargetLeft = targetLeft;\n if (this.animationFrameId !== null) {\n return;\n }\n const viewport = this.viewport().nativeElement;\n this.scrollObserver?.disconnect();\n viewport.style.scrollSnapType = 'none';\n viewport.style.scrollBehavior = 'auto';\n this.lastFrameTime = 0;\n this.animationFrameId = requestAnimationFrame(time => this.animationFrame(time));\n }\n\n private animationFrame(now: number): void {\n const viewport = this.viewport().nativeElement;\n const dt = this.lastFrameTime ? now - this.lastFrameTime : FIRST_FRAME_DELTA;\n this.lastFrameTime = now;\n const current = viewport.scrollLeft;\n // Clamp the target to the scrollable range. A wrapped slide can be placed right at the track\n // edge, where the rect-derived target may exceed the maximum by a sub-pixel; without clamping\n // the loop would never reach it and never settle (leaving the order normalization undone).\n const scrollRange = viewport.scrollWidth - viewport.clientWidth;\n const [minScrollLeft, maxScrollLeft] = isRTL(viewport) ? [-scrollRange, 0] : [0, scrollRange];\n const target = Math.max(minScrollLeft, Math.min(this.animationTargetLeft, maxScrollLeft));\n const diff = target - current;\n if (Math.abs(diff) < SCROLL_SETTLE_THRESHOLD) {\n viewport.scrollLeft = target;\n this.animationFrameId = null;\n this.endAnimation();\n return;\n }\n viewport.scrollLeft = current + diff * (1 - Math.exp(-dt / SCROLL_SMOOTHING_TAU));\n // The browser can cap `scrollLeft` a sub-pixel short of the computed target (rounding at the\n // scroll boundary). If a frame makes no real progress, treat the animation as settled instead\n // of spinning forever.\n if (Math.abs(viewport.scrollLeft - current) < SCROLL_STALL_THRESHOLD) {\n this.animationFrameId = null;\n this.endAnimation();\n return;\n }\n this.animationFrameId = requestAnimationFrame(time => this.animationFrame(time));\n }\n\n /** Finalizes the animation: normalizes orders, restores native scrolling and the observer. */\n private endAnimation(): void {\n this.normalizeOrders();\n const viewport = this.viewport().nativeElement;\n viewport.style.scrollSnapType = '';\n viewport.style.scrollBehavior = '';\n this.cdRef.markForCheck();\n this.setupScrollObserver();\n }\n\n /** Stops the running scroll animation and restores native scrolling, without normalizing. */\n private cancelAnimation(): void {\n if (this.animationFrameId !== null) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n const viewport = this.viewport().nativeElement;\n viewport.style.scrollSnapType = '';\n viewport.style.scrollBehavior = '';\n this.cdRef.markForCheck();\n }\n\n private scheduleAutoPlay(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n }\n if (!this.autoPlayDuration() || this.items().length === 0 || this.isPaused()) {\n return;\n }\n this.intervalId = setInterval(() => this.next(), this.autoPlayDuration());\n }\n\n private stopAutoPlay(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n\n private setupScrollObserver(): void {\n if (this.scrollObserver) {\n this.scrollObserver.disconnect();\n }\n\n const items = this.items();\n if (items.length === 0) {\n return;\n }\n\n const viewport = this.viewport().nativeElement;\n this.scrollObserver = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const target = entry.target as HTMLElement;\n\n const itemIndex = items.findIndex(item => item.elementRef.nativeElement === target);\n if (itemIndex !== -1) {\n this.goToPage(itemIndex, false);\n }\n }\n });\n },\n { root: viewport, threshold: 0.6, rootMargin: '0px' }\n );\n\n for (const item of items) {\n this.scrollObserver.observe(item.elementRef.nativeElement);\n }\n }\n\n private updateEdgeIndices(): void {\n const total = this.totalPages();\n const current = this.currentPage();\n if (current === null) {\n return;\n }\n if (total <= MAX_PAGES) {\n this.edgeLeftIndex.set(0);\n this.edgeRightIndex.set(total - 1);\n return;\n }\n\n if (current < this.edgeLeftIndex()) {\n this.edgeLeftIndex.set(current);\n this.edgeRightIndex.set(current + MAX_PAGES - 1);\n }\n\n if (current > this.edgeRightIndex()) {\n this.edgeRightIndex.set(current);\n this.edgeLeftIndex.set(current - MAX_PAGES + 1);\n }\n }\n}\n","<div class=\"carousel-body d-flex flex-grow-1 align-items-center gap-2 min-h-0\">\n <div #viewport class=\"carousel-viewport flex-grow-1 align-self-stretch\" tabindex=\"0\">\n <div class=\"carousel-track h-100\">\n <ng-content />\n </div>\n </div>\n</div>\n@if ((!hidePageControls() || autoPlay()) && totalPages() > 1) {\n <div\n class=\"position-relative d-flex justify-content-center align-items-center mt-4\"\n (siResizeObserver)=\"onResize($event)\"\n >\n @if (!hidePageControls()) {\n <div #pageControl class=\"d-flex align-items-center gap-2\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"previousButtonAriaLabel() | translate\"\n (click)=\"previous()\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"icons.elementLeft2\"\n /></button>\n <div class=\"d-flex align-items-center\">\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n <div\n class=\"d-flex overflow-hidden\"\n [style.width.px]=\"dotBtn.clientWidth * (totalPages() > 5 ? 5 : totalPages())\"\n >\n <div\n class=\"d-flex page-buttons\"\n [style.margin-inline-start.px]=\"-edgeLeftIndex() * dotBtn.clientWidth\"\n >\n @for (page of items(); track page) {\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost focus-inside btn-icon btn-sm d-flex align-items-center justify-content-center\"\n [aria-label]=\"\n slidePageAriaLabel() | translate: { page: $index + 1, total: totalPages() }\n \"\n [tabIndex]=\"$index >= edgeLeftIndex() && $index <= edgeRightIndex() ? 0 : -1\"\n [aria-current]=\"currentPage() === $index ? 'true' : 'false'\"\n (click)=\"goToSlide($index)\"\n ><span\n class=\"carousel-pager-dot d-block\"\n [class.active]=\"currentPage() === $index\"\n [class.rounded-circle]=\"currentPage() !== $index\"\n ></span\n ></button>\n }\n </div>\n </div>\n <div\n #dotBtn\n class=\"btn btn-tertiary-ghost btn-icon btn-sm pe-none\"\n [class.opacity-0]=\"totalPages() <= 5\"\n [class.position-absolute]=\"totalPages() <= 5\"\n >\n <span class=\"carousel-pager-small-dot d-block rounded-circle\"></span>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0\"\n [aria-label]=\"nextButtonAriaLabel() | translate\"\n (click)=\"next()\"\n >\n <si-icon class=\"flip-rtl\" [icon]=\"icons.elementRight2\"\n /></button>\n </div>\n }\n\n @if (autoPlay()) {\n <div\n #playPauseBtn\n class=\"position-absolute top-0 end-0\"\n [class.invisible]=\"insufficientSpace()\"\n >\n <button\n type=\"button\"\n class=\"btn btn-tertiary-ghost ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon class=\"icon\" [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n <span aria-hidden=\"true\">{{\n (isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\n }}</span>\n </button>\n </div>\n @if (insufficientSpace()) {\n <button\n type=\"button\"\n class=\"btn btn-icon btn-tertiary-ghost flex-shrink-0 align-items-center position-absolute top-0 end-0 ms-2\"\n [aria-label]=\"(isPaused() ? playButtonLabel() : pauseButtonLabel()) | translate\"\n (click)=\"toggleAutoPlay()\"\n >\n <si-icon [icon]=\"isPaused() ? icons.elementPlay : icons.elementPause\" />\n </button>\n }\n }\n </div>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-carousel.component';\nexport * from './si-carousel-item.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -228,7 +228,7 @@ class SiActivityMessageComponent {
|
|
|
228
228
|
elementRight2
|
|
229
229
|
});
|
|
230
230
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiActivityMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
231
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiActivityMessageComponent, isStandalone: true, selector: "si-activity-message", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, host: { properties: { "class.expanded": "expanded()", "class.failed": "state() === 'failed'" } }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"activity-toggle\"\n [attr.aria-expanded]=\"expanded()\"\n (click)=\"expanded.update(value => !value)\"\n>\n <span class=\"activity-marker\">\n @switch (state()) {\n @case ('running') {\n <si-loading-spinner class=\"activity-icon\" />\n }\n @case ('failed') {\n <si-icon class=\"activity-icon\" [icon]=\"icons.elementIssue\" />\n }\n @default {\n <si-icon\n class=\"activity-icon\"\n [class.default-icon]=\"!icon()\"\n [icon]=\"icon() ?? icons.elementCircleFilled\"\n />\n }\n }\n <si-icon class=\"disclosure-icon\" [class.expanded]=\"expanded()\" [icon]=\"icons.elementRight2\" />\n </span>\n <span class=\"activity-heading\">{{ heading() | translate }}</span>\n</button>\n\n@if (expanded()) {\n <div class=\"content-motion\" animate.enter=\"content-enter\" animate.leave=\"content-leave\">\n <div class=\"overflow-hidden\">\n <div class=\"activity-content\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n", styles: [":host{position:relative;display:block;color:var(--si-sys-color-text-secondary);padding-block:var(--si-sys-sizing-spacing-y-20)}:host.failed{color:var(--si-sys-color-text-danger)}si-activity-message+:host{margin-block-start:var(--si-sys-sizing-spacing-y-20)}si-activity-message+:host:before{position:absolute;content:\"\";z-index:0;block-size:calc(var(--si-sys-sizing-spacing-y-20) + var(--si-sys-sizing-spacing-y-20) + var(--si-sys-sizing-spacing-y-20));inset-block-end:calc(100% - var(--si-sys-sizing-spacing-y-20));inset-inline-start:calc(var(--si-sys-sizing-icon-sm) / 2);border-inline-start:1px solid var(--si-sys-color-border-3)}.activity-toggle{position:relative;z-index:1;display:flex;align-items:center;gap:var(--si-sys-sizing-spacing-x-30);padding:0;border:0;background:transparent;color:inherit;font:inherit;font-weight:inherit;text-align:start}.activity-toggle:is(:hover,:focus-visible) .activity-icon{display:none}.activity-toggle:is(:hover,:focus-visible) .disclosure-icon{display:inline-flex}.activity-marker{--loading-spinner-size: var(--si-sys-sizing-icon-sm);display:inline-flex;flex:0 0 var(--si-sys-sizing-icon-sm);align-items:center;justify-content:center;inline-size:var(--si-sys-sizing-icon-sm);block-size:var(--si-sys-sizing-icon-sm)}.activity-icon,.disclosure-icon{font-size:var(--si-sys-sizing-icon-sm)}.activity-heading{display:flex;align-items:center;min-block-size:calc(var(--si-sys-sizing-icon-sm) + 2 * var(--si-sys-sizing-spacing-y-20))}.default-icon{font-size:6px}.disclosure-icon{display:none;transition:transform calc(.5s * var(--element-animations-enabled, 1))}.disclosure-icon.expanded{transform:rotate(90deg)}.content-motion{display:grid;grid-template-rows:1fr;margin-inline-start:calc(var(--si-sys-sizing-icon-sm) / 2);padding-inline-start:calc(var(--si-sys-sizing-icon-sm) / 2 + var(--si-sys-sizing-spacing-x-30));border-inline-start:1px solid var(--si-sys-color-border-3)}.content-motion:is(.content-enter,.content-leave){transition:grid-template-rows calc(.5s * var(--element-animations-enabled, 1))}@starting-style{.content-motion.content-enter{grid-template-rows:0fr}}.content-motion.content-leave{grid-template-rows:0fr}.activity-content{overflow:hidden;padding-block-start:var(--si-sys-sizing-spacing-y-40)}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "component", type: SiLoadingSpinnerComponent, selector: "si-loading-spinner", inputs: ["isBlockingSpinner", "isSpinnerOverlay", "ariaLabel"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
|
|
231
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: SiActivityMessageComponent, isStandalone: true, selector: "si-activity-message", inputs: { heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, host: { properties: { "class.expanded": "expanded()", "class.failed": "state() === 'failed'" } }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"activity-toggle\"\n [attr.aria-expanded]=\"expanded()\"\n (click)=\"expanded.update(value => !value)\"\n>\n <span class=\"activity-marker\">\n @switch (state()) {\n @case ('running') {\n <si-loading-spinner class=\"activity-icon\" />\n }\n @case ('failed') {\n <si-icon class=\"activity-icon\" [icon]=\"icons.elementIssue\" />\n }\n @default {\n <si-icon\n class=\"activity-icon\"\n [class.default-icon]=\"!icon()\"\n [icon]=\"icon() ?? icons.elementCircleFilled\"\n />\n }\n }\n <si-icon class=\"disclosure-icon\" [class.expanded]=\"expanded()\" [icon]=\"icons.elementRight2\" />\n </span>\n <span class=\"activity-heading\">{{ heading() | translate }}</span>\n</button>\n\n@if (expanded()) {\n <div class=\"content-motion\" animate.enter=\"content-enter\" animate.leave=\"content-leave\">\n <div class=\"overflow-hidden\">\n <div class=\"activity-content\">\n <ng-content />\n </div>\n </div>\n </div>\n}\n", styles: [":host{position:relative;display:block;color:var(--si-sys-color-text-secondary);padding-block:var(--si-sys-sizing-spacing-y-20)}:host.failed{color:var(--si-sys-color-text-danger)}si-activity-message+:host{margin-block-start:var(--si-sys-sizing-spacing-y-20)}si-activity-message+:host:before{position:absolute;content:\"\";z-index:0;block-size:calc(var(--si-sys-sizing-spacing-y-20) + var(--si-sys-sizing-spacing-y-20) + var(--si-sys-sizing-spacing-y-20));inset-block-end:calc(100% - var(--si-sys-sizing-spacing-y-20));inset-inline-start:calc(var(--si-sys-sizing-icon-sm) / 2);border-inline-start:1px solid var(--si-sys-color-border-3)}.activity-toggle{position:relative;z-index:1;display:flex;align-items:center;gap:var(--si-sys-sizing-spacing-x-30);padding:0;border:0;background:transparent;color:inherit;font:inherit;font-weight:inherit;text-align:start}.activity-toggle:is(:hover,:focus-visible) .activity-icon{display:none}.activity-toggle:is(:hover,:focus-visible) .disclosure-icon{display:inline-flex}.activity-marker{--loading-spinner-size: var(--si-sys-sizing-icon-sm);display:inline-flex;flex:0 0 var(--si-sys-sizing-icon-sm);align-items:center;justify-content:center;inline-size:var(--si-sys-sizing-icon-sm);block-size:var(--si-sys-sizing-icon-sm)}.activity-icon,.disclosure-icon{font-size:var(--si-sys-sizing-icon-sm)}.activity-heading{display:flex;align-items:center;min-block-size:calc(var(--si-sys-sizing-icon-sm) + 2 * var(--si-sys-sizing-spacing-y-20))}.default-icon{font-size:6px}.disclosure-icon{display:none;transition:transform calc(.5s * var(--element-animations-enabled, 1))}.disclosure-icon.expanded{transform:rotate(90deg)}.content-motion{display:grid;grid-template-rows:1fr;margin-inline-start:calc(var(--si-sys-sizing-icon-sm) / 2);padding-inline-start:calc(var(--si-sys-sizing-icon-sm) / 2 + var(--si-sys-sizing-spacing-x-30));border-inline-start:1px solid var(--si-sys-color-border-3)}.content-motion:is(.content-enter,.content-leave){transition:grid-template-rows calc(.5s * var(--element-animations-enabled, 1))}@starting-style{.content-motion.content-enter{grid-template-rows:0fr}}.content-motion.content-leave{grid-template-rows:0fr}.activity-content{overflow:hidden;padding-block-start:var(--si-sys-sizing-spacing-y-40)}\n"], dependencies: [{ kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "component", type: SiLoadingSpinnerComponent, selector: "si-loading-spinner", inputs: ["isBlockingSpinner", "isSpinnerOverlay", "ariaLabel", "loadingText"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
|
|
232
232
|
}
|
|
233
233
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SiActivityMessageComponent, decorators: [{
|
|
234
234
|
type: Component,
|