@siemens/element-ng 49.16.1 → 49.17.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-result-details-list.mjs +2 -2
- package/fesm2022/siemens-element-ng-result-details-list.mjs.map +1 -1
- package/fesm2022/siemens-element-ng-tabs.mjs +6 -5
- package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
- package/package.json +3 -3
- package/types/siemens-element-ng-tabs.d.ts +1 -0
|
@@ -25,11 +25,11 @@ class SiResultDetailsListComponent {
|
|
|
25
25
|
elementStateTick
|
|
26
26
|
});
|
|
27
27
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiResultDetailsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
28
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiResultDetailsListComponent, isStandalone: true, selector: "si-result-details-list", inputs: { steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ul class=\"list-unstyled d-flex flex-column mb-0\">\n @for (step of steps(); track $index) {\n <li\n class=\"position-relative d-flex align-items-center timeline px-6 py-5\"\n [class.text-primary]=\"step.state === 'running'\"\n >\n @if (step.state === 'running') {\n
|
|
28
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiResultDetailsListComponent, isStandalone: true, selector: "si-result-details-list", inputs: { steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ul class=\"list-unstyled d-flex flex-column mb-0\">\n @for (step of steps(); track $index) {\n <li\n class=\"position-relative d-flex align-items-center timeline px-6 py-5\"\n [class.text-primary]=\"step.state === 'running'\"\n >\n <div class=\"icon-stack icon me-4\">\n @if (step.state === 'running') {\n <si-loading-spinner />\n } @else {\n @if (step.icon) {\n <si-icon [icon]=\"step.icon\" />\n } @else {\n @switch (step.state) {\n @case ('passed') {\n <si-icon class=\"status-success\" [icon]=\"icons.elementCircleFilled\" />\n <si-icon class=\"status-critical-contrast\" [icon]=\"icons.elementStateTick\" />\n }\n @case ('failed') {\n <si-icon class=\"status-danger\" [icon]=\"icons.elementCircleFilled\" />\n <si-icon\n class=\"status-critical-contrast\"\n [icon]=\"icons.elementStateExclamationMark\"\n />\n }\n @case ('not-started') {\n <si-icon [icon]=\"icons.elementNotChecked\" />\n }\n @default {\n <si-icon [icon]=\"icons.elementOutOfService\" />\n }\n }\n }\n }\n </div>\n\n <div class=\"d-flex flex-column justify-content-center w-100 overflow-hidden\">\n <div class=\"d-flex\">\n <div class=\"result-description\">\n <span class=\"si-h5\">{{ step.description | translate: step.translationParams }}</span>\n @if (step.detail) {\n <div class=\"si-body text-secondary result-detail\">{{\n step.detail | translate: step.translationParams\n }}</div>\n }\n @if (step.errorMessage) {\n <div class=\"si-h5 text-danger\">{{\n step.errorMessage | translate: step.translationParams\n }}</div>\n }\n </div>\n @if (step.value) {\n <span class=\"result-value\">{{ step.value }}</span>\n } @else if (stepHasValue()) {\n <!-- empty placeholder to align step description with other steps-->\n <span class=\"result-value\"></span>\n }\n </div>\n </div>\n </li>\n }\n</ul>\n", styles: ["si-loading-spinner{--loading-spinner-size: 1.25rem;--loading-spinner-color: var(--element-text-active);line-height:0}.result-description{flex:2 1;align-self:center;overflow:hidden}.result-value{flex:1 1;white-space:nowrap;align-self:top}.result-detail{letter-spacing:.15px;display:block;display:-webkit-box;max-block-size:2rem;word-wrap:break-word;line-clamp:2;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.timeline:not(:last-child):after,.timeline:not(:first-child):before{content:\"\";position:absolute;inline-size:1px;background-color:var(--element-ui-2);block-size:calc(50% - .625rem);margin-inline-start:calc(.625rem - .5px)}si-icon{color:var(--element-ui-2)}.timeline:not(:first-child):before{inset-block-start:0}.timeline:not(:last-child):after{inset-block-end:0}\n"], dependencies: [{ kind: "component", type: SiLoadingSpinnerComponent, selector: "si-loading-spinner", inputs: ["isBlockingSpinner", "isSpinnerOverlay", "ariaLabel"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Default });
|
|
29
29
|
}
|
|
30
30
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiResultDetailsListComponent, decorators: [{
|
|
31
31
|
type: Component,
|
|
32
|
-
args: [{ selector: 'si-result-details-list', imports: [SiLoadingSpinnerComponent, SiIconComponent, SiTranslatePipe], changeDetection: ChangeDetectionStrategy.Default, template: "<ul class=\"list-unstyled d-flex flex-column mb-0\">\n @for (step of steps(); track $index) {\n <li\n class=\"position-relative d-flex align-items-center timeline px-6 py-5\"\n [class.text-primary]=\"step.state === 'running'\"\n >\n @if (step.state === 'running') {\n
|
|
32
|
+
args: [{ selector: 'si-result-details-list', imports: [SiLoadingSpinnerComponent, SiIconComponent, SiTranslatePipe], changeDetection: ChangeDetectionStrategy.Default, template: "<ul class=\"list-unstyled d-flex flex-column mb-0\">\n @for (step of steps(); track $index) {\n <li\n class=\"position-relative d-flex align-items-center timeline px-6 py-5\"\n [class.text-primary]=\"step.state === 'running'\"\n >\n <div class=\"icon-stack icon me-4\">\n @if (step.state === 'running') {\n <si-loading-spinner />\n } @else {\n @if (step.icon) {\n <si-icon [icon]=\"step.icon\" />\n } @else {\n @switch (step.state) {\n @case ('passed') {\n <si-icon class=\"status-success\" [icon]=\"icons.elementCircleFilled\" />\n <si-icon class=\"status-critical-contrast\" [icon]=\"icons.elementStateTick\" />\n }\n @case ('failed') {\n <si-icon class=\"status-danger\" [icon]=\"icons.elementCircleFilled\" />\n <si-icon\n class=\"status-critical-contrast\"\n [icon]=\"icons.elementStateExclamationMark\"\n />\n }\n @case ('not-started') {\n <si-icon [icon]=\"icons.elementNotChecked\" />\n }\n @default {\n <si-icon [icon]=\"icons.elementOutOfService\" />\n }\n }\n }\n }\n </div>\n\n <div class=\"d-flex flex-column justify-content-center w-100 overflow-hidden\">\n <div class=\"d-flex\">\n <div class=\"result-description\">\n <span class=\"si-h5\">{{ step.description | translate: step.translationParams }}</span>\n @if (step.detail) {\n <div class=\"si-body text-secondary result-detail\">{{\n step.detail | translate: step.translationParams\n }}</div>\n }\n @if (step.errorMessage) {\n <div class=\"si-h5 text-danger\">{{\n step.errorMessage | translate: step.translationParams\n }}</div>\n }\n </div>\n @if (step.value) {\n <span class=\"result-value\">{{ step.value }}</span>\n } @else if (stepHasValue()) {\n <!-- empty placeholder to align step description with other steps-->\n <span class=\"result-value\"></span>\n }\n </div>\n </div>\n </li>\n }\n</ul>\n", styles: ["si-loading-spinner{--loading-spinner-size: 1.25rem;--loading-spinner-color: var(--element-text-active);line-height:0}.result-description{flex:2 1;align-self:center;overflow:hidden}.result-value{flex:1 1;white-space:nowrap;align-self:top}.result-detail{letter-spacing:.15px;display:block;display:-webkit-box;max-block-size:2rem;word-wrap:break-word;line-clamp:2;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.timeline:not(:last-child):after,.timeline:not(:first-child):before{content:\"\";position:absolute;inline-size:1px;background-color:var(--element-ui-2);block-size:calc(50% - .625rem);margin-inline-start:calc(.625rem - .5px)}si-icon{color:var(--element-ui-2)}.timeline:not(:first-child):before{inset-block-start:0}.timeline:not(:last-child):after{inset-block-end:0}\n"] }]
|
|
33
33
|
}], propDecorators: { steps: [{ type: i0.Input, args: [{ isSignal: true, alias: "steps", required: false }] }] } });
|
|
34
34
|
|
|
35
35
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-result-details-list.mjs","sources":["../../../../projects/element-ng/result-details-list/si-result-details-list.component.ts","../../../../projects/element-ng/result-details-list/si-result-details-list.component.html","../../../../projects/element-ng/result-details-list/si-result-details-list.datamodel.ts","../../../../projects/element-ng/result-details-list/si-result-details-list.module.ts","../../../../projects/element-ng/result-details-list/index.ts","../../../../projects/element-ng/result-details-list/siemens-element-ng-result-details-list.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport {\n elementCircleFilled,\n elementNotChecked,\n elementOutOfService,\n elementStateExclamationMark,\n elementStateTick\n} from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiLoadingSpinnerComponent } from '@siemens/element-ng/loading-spinner';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { ResultDetailStep } from './si-result-details-list.datamodel';\n\n@Component({\n selector: 'si-result-details-list',\n imports: [SiLoadingSpinnerComponent, SiIconComponent, SiTranslatePipe],\n templateUrl: './si-result-details-list.component.html',\n styleUrl: './si-result-details-list.component.scss',\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class SiResultDetailsListComponent {\n /**\n * Array of steps to show in the list.\n *\n * @defaultValue []\n */\n readonly steps = input<ResultDetailStep[]>([]);\n\n protected readonly stepHasValue = computed(() => this.steps().some(item => !!item.value));\n\n protected readonly icons = addIcons({\n elementCircleFilled,\n elementNotChecked,\n elementOutOfService,\n elementStateExclamationMark,\n elementStateTick\n });\n}\n","<ul class=\"list-unstyled d-flex flex-column mb-0\">\n @for (step of steps(); track $index) {\n <li\n class=\"position-relative d-flex align-items-center timeline px-6 py-5\"\n [class.text-primary]=\"step.state === 'running'\"\n >\n @if (step.state === 'running') {\n
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-result-details-list.mjs","sources":["../../../../projects/element-ng/result-details-list/si-result-details-list.component.ts","../../../../projects/element-ng/result-details-list/si-result-details-list.component.html","../../../../projects/element-ng/result-details-list/si-result-details-list.datamodel.ts","../../../../projects/element-ng/result-details-list/si-result-details-list.module.ts","../../../../projects/element-ng/result-details-list/index.ts","../../../../projects/element-ng/result-details-list/siemens-element-ng-result-details-list.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport {\n elementCircleFilled,\n elementNotChecked,\n elementOutOfService,\n elementStateExclamationMark,\n elementStateTick\n} from '@siemens/element-icons';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiLoadingSpinnerComponent } from '@siemens/element-ng/loading-spinner';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { ResultDetailStep } from './si-result-details-list.datamodel';\n\n@Component({\n selector: 'si-result-details-list',\n imports: [SiLoadingSpinnerComponent, SiIconComponent, SiTranslatePipe],\n templateUrl: './si-result-details-list.component.html',\n styleUrl: './si-result-details-list.component.scss',\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class SiResultDetailsListComponent {\n /**\n * Array of steps to show in the list.\n *\n * @defaultValue []\n */\n readonly steps = input<ResultDetailStep[]>([]);\n\n protected readonly stepHasValue = computed(() => this.steps().some(item => !!item.value));\n\n protected readonly icons = addIcons({\n elementCircleFilled,\n elementNotChecked,\n elementOutOfService,\n elementStateExclamationMark,\n elementStateTick\n });\n}\n","<ul class=\"list-unstyled d-flex flex-column mb-0\">\n @for (step of steps(); track $index) {\n <li\n class=\"position-relative d-flex align-items-center timeline px-6 py-5\"\n [class.text-primary]=\"step.state === 'running'\"\n >\n <div class=\"icon-stack icon me-4\">\n @if (step.state === 'running') {\n <si-loading-spinner />\n } @else {\n @if (step.icon) {\n <si-icon [icon]=\"step.icon\" />\n } @else {\n @switch (step.state) {\n @case ('passed') {\n <si-icon class=\"status-success\" [icon]=\"icons.elementCircleFilled\" />\n <si-icon class=\"status-critical-contrast\" [icon]=\"icons.elementStateTick\" />\n }\n @case ('failed') {\n <si-icon class=\"status-danger\" [icon]=\"icons.elementCircleFilled\" />\n <si-icon\n class=\"status-critical-contrast\"\n [icon]=\"icons.elementStateExclamationMark\"\n />\n }\n @case ('not-started') {\n <si-icon [icon]=\"icons.elementNotChecked\" />\n }\n @default {\n <si-icon [icon]=\"icons.elementOutOfService\" />\n }\n }\n }\n }\n </div>\n\n <div class=\"d-flex flex-column justify-content-center w-100 overflow-hidden\">\n <div class=\"d-flex\">\n <div class=\"result-description\">\n <span class=\"si-h5\">{{ step.description | translate: step.translationParams }}</span>\n @if (step.detail) {\n <div class=\"si-body text-secondary result-detail\">{{\n step.detail | translate: step.translationParams\n }}</div>\n }\n @if (step.errorMessage) {\n <div class=\"si-h5 text-danger\">{{\n step.errorMessage | translate: step.translationParams\n }}</div>\n }\n </div>\n @if (step.value) {\n <span class=\"result-value\">{{ step.value }}</span>\n } @else if (stepHasValue()) {\n <!-- empty placeholder to align step description with other steps-->\n <span class=\"result-value\"></span>\n }\n </div>\n </div>\n </li>\n }\n</ul>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\n\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\n/** */\nexport interface ResultDetailStep {\n /**\n * A description of the step.\n */\n description: TranslatableString;\n /**\n * A state object defining the state of the step.\n */\n state: ResultDetailStepState;\n /**\n * Optional value to be displayed for the step.\n */\n value?: string;\n /**\n * Optional error message to display.\n */\n errorMessage?: string;\n /**\n * Optional custom icon to display. Otherwise a default icon will be shown based on the state property.\n */\n icon?: string;\n /**\n * Optional detail text which appears below description.\n */\n detail?: TranslatableString;\n /**\n * Optional translation params to be used with translate pipe.\n */\n translationParams?: Record<string, unknown>;\n}\n\n/**\n * This type defines the state that a detailed result step can have.\n */\nexport type ResultDetailStepState =\n | 'passed'\n | 'failed'\n | 'running'\n | 'not-supported'\n | 'not-started';\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { NgModule } from '@angular/core';\n\nimport { SiResultDetailsListComponent } from './si-result-details-list.component';\n\n@NgModule({\n imports: [SiResultDetailsListComponent],\n exports: [SiResultDetailsListComponent]\n})\nexport class SiResultDetailsListModule {}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-result-details-list.component';\nexport * from './si-result-details-list.datamodel';\nexport * from './si-result-details-list.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAAA;;;AAGG;MAsBU,4BAA4B,CAAA;AACvC;;;;AAIG;AACM,IAAA,KAAK,GAAG,KAAK,CAAqB,EAAE,iDAAC;IAE3B,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAEtE,KAAK,GAAG,QAAQ,CAAC;QAClC,mBAAmB;QACnB,iBAAiB;QACjB,mBAAmB;QACnB,2BAA2B;QAC3B;AACD,KAAA,CAAC;uGAhBS,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,sNCzBzC,y0EA8DA,EAAA,MAAA,EAAA,CAAA,izBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1CY,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,kBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,iEAAE,eAAe,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,CAAA;;2FAK1D,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;+BACE,wBAAwB,EAAA,OAAA,EACzB,CAAC,yBAAyB,EAAE,eAAe,EAAE,eAAe,CAAC,EAAA,eAAA,EAGrD,uBAAuB,CAAC,OAAO,EAAA,QAAA,EAAA,y0EAAA,EAAA,MAAA,EAAA,CAAA,izBAAA,CAAA,EAAA;;;AEvBlD;;;AAGG;;ACHH;;;AAGG;MASU,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAzB,yBAAyB,EAAA,OAAA,EAAA,CAH1B,4BAA4B,CAAA,EAAA,OAAA,EAAA,CAC5B,4BAA4B,CAAA,EAAA,CAAA;AAE3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YAH1B,4BAA4B,CAAA,EAAA,CAAA;;2FAG3B,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,4BAA4B,CAAC;oBACvC,OAAO,EAAE,CAAC,4BAA4B;AACvC,iBAAA;;;ACXD;;;AAGG;;ACHH;;AAEG;;;;"}
|
|
@@ -281,6 +281,7 @@ class SiTabsetComponent {
|
|
|
281
281
|
.withWrap(true);
|
|
282
282
|
/** @internal */
|
|
283
283
|
showMenuButton = signal(false, ...(ngDevMode ? [{ debugName: "showMenuButton" }] : []));
|
|
284
|
+
menuButton = viewChild('menuButton', ...(ngDevMode ? [{ debugName: "menuButton" }] : []));
|
|
284
285
|
tabIsLink(tab) {
|
|
285
286
|
return tab instanceof SiTabLinkComponent;
|
|
286
287
|
}
|
|
@@ -317,8 +318,8 @@ class SiTabsetComponent {
|
|
|
317
318
|
}
|
|
318
319
|
}
|
|
319
320
|
resizeContainer(width, scrollWidth) {
|
|
320
|
-
|
|
321
|
-
this.showMenuButton.set(scrollWidth >
|
|
321
|
+
const totalWidth = width + (this.menuButton()?.nativeElement.offsetWidth ?? 0);
|
|
322
|
+
this.showMenuButton.set(scrollWidth > totalWidth);
|
|
322
323
|
}
|
|
323
324
|
keydown(event) {
|
|
324
325
|
this.focusKeyManager.onKeydown(event);
|
|
@@ -329,7 +330,7 @@ class SiTabsetComponent {
|
|
|
329
330
|
provide: SI_TABSET,
|
|
330
331
|
useExisting: SiTabsetComponent
|
|
331
332
|
}
|
|
332
|
-
], queries: [{ propertyName: "tabPanels", predicate: SiTabBaseDirective, isSignal: true }], viewQueries: [{ propertyName: "contentNode", first: true, predicate: ["contentNode"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n (keydown)=\"keydown($event)\"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n >\n <si-icon class=\"icon m-0\" [icon]=\"icons.elementOptions\" />\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n <div #contentNode class=\"d-contents\">\n @if (activeTab) {\n <div\n class=\"tab-content focus-inside\"\n role=\"tabpanel\"\n [id]=\"`content-${activeTab.tabId}`\"\n [class.tab-scroll]=\"contentOverflowAuto()\"\n [attr.tabindex]=\"contentOverflowAuto() ? '0' : null\"\n [attr.aria-labelledby]=\"`tab-${activeTab.tabId}`\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template #tabsMenu>\n <si-menu>\n @for (tab of tabPanels(); track tab) {\n @if (tabIsLink(tab)) {\n <a\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tab.routerLink.urlTree\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </button>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n <si-tab-badge [badgeContent]=\"tab.badgeContent()\" [badgeColor]=\"tab.badgeColor()\" />\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-direction:column;overflow:hidden;block-size:100%}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.btn.dropdown{color:var(--element-text-primary);min-inline-size:0;border-block-end:2px solid var(--element-ui-4);padding-inline:12px;flex-shrink:0}.btn.dropdown:hover{border-color:var(--element-ui-4);color:var(--element-action-secondary-text-hover)}.tab-content{flex-grow:1}.tab-scroll{flex-basis:0;overflow:auto}.tabs-wrapper{overflow-y:hidden;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}\n"], dependencies: [{ kind: "directive", type: SiMenuDirective, selector: "si-menu" }, { kind: "component", type: SiMenuItemComponent, selector: "si-menu-item, a[si-menu-item], button[si-menu-item]" }, { kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData", "cdkMenuTriggerTransformOriginOn"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SiResizeObserverModule }, { kind: "directive", type: i1$1.SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: SiTabBadgeComponent, selector: "si-tab-badge", inputs: ["badgeContent", "badgeColor"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
333
|
+
], queries: [{ propertyName: "tabPanels", predicate: SiTabBaseDirective, isSignal: true }], viewQueries: [{ propertyName: "contentNode", first: true, predicate: ["contentNode"], descendants: true, isSignal: true }, { propertyName: "menuButton", first: true, predicate: ["menuButton"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n (keydown)=\"keydown($event)\"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n #menuButton\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n >\n <si-icon class=\"icon m-0\" [icon]=\"icons.elementOptions\" />\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n <div #contentNode class=\"d-contents\">\n @if (activeTab) {\n <div\n class=\"tab-content focus-inside\"\n role=\"tabpanel\"\n [id]=\"`content-${activeTab.tabId}`\"\n [class.tab-scroll]=\"contentOverflowAuto()\"\n [attr.tabindex]=\"contentOverflowAuto() ? '0' : null\"\n [attr.aria-labelledby]=\"`tab-${activeTab.tabId}`\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template #tabsMenu>\n <si-menu>\n @for (tab of tabPanels(); track tab) {\n @if (tabIsLink(tab)) {\n <a\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tab.routerLink.urlTree\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </button>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n <si-tab-badge [badgeContent]=\"tab.badgeContent()\" [badgeColor]=\"tab.badgeColor()\" />\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-direction:column;overflow:hidden;block-size:100%}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.btn.dropdown{color:var(--element-text-primary);min-inline-size:0;border-block-end:2px solid var(--element-ui-4);padding-inline:12px;flex-shrink:0}.btn.dropdown:hover{border-color:var(--element-ui-4);color:var(--element-action-secondary-text-hover)}.tab-content{flex-grow:1}.tab-scroll{flex-basis:0;overflow:auto}.tabs-wrapper{overflow-y:hidden;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}\n"], dependencies: [{ kind: "directive", type: SiMenuDirective, selector: "si-menu" }, { kind: "component", type: SiMenuItemComponent, selector: "si-menu-item, a[si-menu-item], button[si-menu-item]" }, { kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData", "cdkMenuTriggerTransformOriginOn"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SiResizeObserverModule }, { kind: "directive", type: i1$1.SiResizeObserverDirective, selector: "[siResizeObserver]", inputs: ["resizeThrottle", "emitInitial"], outputs: ["siResizeObserver"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: SiTabBadgeComponent, selector: "si-tab-badge", inputs: ["badgeContent", "badgeColor"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
333
334
|
}
|
|
334
335
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiTabsetComponent, decorators: [{
|
|
335
336
|
type: Component,
|
|
@@ -347,8 +348,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
|
|
|
347
348
|
provide: SI_TABSET,
|
|
348
349
|
useExisting: SiTabsetComponent
|
|
349
350
|
}
|
|
350
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n (keydown)=\"keydown($event)\"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n >\n <si-icon class=\"icon m-0\" [icon]=\"icons.elementOptions\" />\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n <div #contentNode class=\"d-contents\">\n @if (activeTab) {\n <div\n class=\"tab-content focus-inside\"\n role=\"tabpanel\"\n [id]=\"`content-${activeTab.tabId}`\"\n [class.tab-scroll]=\"contentOverflowAuto()\"\n [attr.tabindex]=\"contentOverflowAuto() ? '0' : null\"\n [attr.aria-labelledby]=\"`tab-${activeTab.tabId}`\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template #tabsMenu>\n <si-menu>\n @for (tab of tabPanels(); track tab) {\n @if (tabIsLink(tab)) {\n <a\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tab.routerLink.urlTree\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </button>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n <si-tab-badge [badgeContent]=\"tab.badgeContent()\" [badgeColor]=\"tab.badgeColor()\" />\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-direction:column;overflow:hidden;block-size:100%}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.btn.dropdown{color:var(--element-text-primary);min-inline-size:0;border-block-end:2px solid var(--element-ui-4);padding-inline:12px;flex-shrink:0}.btn.dropdown:hover{border-color:var(--element-ui-4);color:var(--element-action-secondary-text-hover)}.tab-content{flex-grow:1}.tab-scroll{flex-basis:0;overflow:auto}.tabs-wrapper{overflow-y:hidden;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}\n"] }]
|
|
351
|
-
}], ctorParameters: () => [], propDecorators: { contentOverflowAuto: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentOverflowAuto", required: false }] }], contentNode: [{ type: i0.ViewChild, args: ['contentNode', { isSignal: true }] }], tabPanels: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SiTabBaseDirective), { isSignal: true }] }] } });
|
|
351
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n (keydown)=\"keydown($event)\"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n #menuButton\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n >\n <si-icon class=\"icon m-0\" [icon]=\"icons.elementOptions\" />\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n <div #contentNode class=\"d-contents\">\n @if (activeTab) {\n <div\n class=\"tab-content focus-inside\"\n role=\"tabpanel\"\n [id]=\"`content-${activeTab.tabId}`\"\n [class.tab-scroll]=\"contentOverflowAuto()\"\n [attr.tabindex]=\"contentOverflowAuto() ? '0' : null\"\n [attr.aria-labelledby]=\"`tab-${activeTab.tabId}`\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template #tabsMenu>\n <si-menu>\n @for (tab of tabPanels(); track tab) {\n @if (tabIsLink(tab)) {\n <a\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tab.routerLink.urlTree\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </button>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n <si-tab-badge [badgeContent]=\"tab.badgeContent()\" [badgeColor]=\"tab.badgeColor()\" />\n </div>\n</ng-template>\n", styles: [":host{display:block;flex-direction:column}.tabs-container{display:flex;flex-direction:column;overflow:hidden;block-size:100%}.tabs-container:before{inset-block-start:38px;inset-block-end:auto}.btn.dropdown{color:var(--element-text-primary);min-inline-size:0;border-block-end:2px solid var(--element-ui-4);padding-inline:12px;flex-shrink:0}.btn.dropdown:hover{border-color:var(--element-ui-4);color:var(--element-action-secondary-text-hover)}.tab-content{flex-grow:1}.tab-scroll{flex-basis:0;overflow:auto}.tabs-wrapper{overflow-y:hidden;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}\n"] }]
|
|
352
|
+
}], ctorParameters: () => [], propDecorators: { contentOverflowAuto: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentOverflowAuto", required: false }] }], contentNode: [{ type: i0.ViewChild, args: ['contentNode', { isSignal: true }] }], tabPanels: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SiTabBaseDirective), { isSignal: true }] }], menuButton: [{ type: i0.ViewChild, args: ['menuButton', { isSignal: true }] }] } });
|
|
352
353
|
|
|
353
354
|
/**
|
|
354
355
|
* Copyright (c) Siemens 2016 - 2026
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siemens-element-ng-tabs.mjs","sources":["../../../../projects/element-ng/tabs/si-tab-badge.component.ts","../../../../projects/element-ng/tabs/si-tab-badge.component.html","../../../../projects/element-ng/tabs/si-tabs-tokens.ts","../../../../projects/element-ng/tabs/si-tab-base.directive.ts","../../../../projects/element-ng/tabs/si-tab-link.component.ts","../../../../projects/element-ng/tabs/si-tab.component.html","../../../../projects/element-ng/tabs/si-tabset.component.ts","../../../../projects/element-ng/tabs/si-tabset.component.html","../../../../projects/element-ng/tabs/si-tab.component.ts","../../../../projects/element-ng/tabs/si-tab-portal.component.ts","../../../../projects/element-ng/tabs/index.ts","../../../../projects/element-ng/tabs/siemens-element-ng-tabs.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\n@Component({\n selector: 'si-tab-badge',\n imports: [SiTranslatePipe],\n templateUrl: './si-tab-badge.component.html',\n styleUrl: './si-tab-badge.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'd-contents'\n }\n})\nexport class SiTabBadgeComponent {\n /**\n * Content displayed in the tab badge. Set to `true` to display a red dot.\n */\n readonly badgeContent = input<TranslatableString | boolean>();\n /**\n * Background color of the badge. When omitted, string content is displayed in a red dot badge.\n */\n readonly badgeColor = input<string>();\n}\n","@let badgeContent = this.badgeContent();\n@if (badgeContent === true) {\n <span class=\"badge-dot\"></span>\n} @else if (badgeContent && badgeColor()) {\n <span class=\"badge\" [class]=\"`bg-${badgeColor() || 'default'}`\">\n {{ badgeContent ?? '' | translate }}\n </span>\n} @else if (badgeContent && !badgeColor()) {\n <span class=\"badge-text\"> {{ badgeContent ?? '' | translate }}</span>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { InjectionToken } from '@angular/core';\n\nimport { SiTabsetComponent } from './si-tabset.component';\n\nexport const SI_TABSET = new InjectionToken<SiTabsetComponent>('SiTabsetComponent');\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { FocusableOption } from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n Signal,\n TemplateRef,\n untracked,\n viewChild\n} from '@angular/core';\nimport { elementCancel } from '@siemens/element-icons';\nimport { addIcons } from '@siemens/element-ng/icon';\nimport { SiTooltipDirective, SiTooltipService, TooltipRef } from '@siemens/element-ng/tooltip';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SI_TABSET } from './si-tabs-tokens';\n\n@Directive({\n selector: '[siTabNextBase]',\n host: {\n class: 'nav-link focus-inside px-5',\n role: 'tab',\n '[class.disabled]': 'disabledTab()',\n '[class.icon-only]': '!!icon()',\n '[class.pe-3]': 'closable()',\n '[class.active]': 'active()',\n '[attr.id]': \"'tab-' + tabId\",\n '[attr.aria-selected]': 'active()',\n '[attr.aria-disabled]': 'disabledTab()',\n '[attr.tabindex]': 'tabset.focusKeyManager.activeItem === this && !disabledTab() ? 0 : -1',\n '[attr.aria-controls]': \"'content-' + tabId\",\n '(keydown.delete)': 'closeTab($event)'\n }\n})\nexport abstract class SiTabBaseDirective implements OnDestroy, FocusableOption {\n abstract readonly active: Signal<boolean | undefined>;\n /** Title of the tab item. */\n readonly heading = input.required<TranslatableString>();\n /**\n * Icon of the tab item.\n * If provided, heading text will be ignored and only icon will be displayed.\n */\n readonly icon = input<string>();\n /**\n * Additional badge content. A value of\n * - `true` will render a red dot\n * - any string without a `badgeColor` will render a red dot with text\n * - any string with a `badgeColor` will render a normal badge\n */\n readonly badgeContent = input<TranslatableString | boolean>();\n /**\n * Background color of the badge.\n * If no color is provided a red dot badge will be rendered.\n */\n readonly badgeColor = input<string>();\n /**\n * Disables the tab.\n *\n * @defaultValue false\n */\n readonly disabledTab = input(false, {\n transform: booleanAttribute,\n // eslint-disable-next-line @angular-eslint/no-input-rename\n alias: 'disabled'\n });\n /**\n * Close the current tab.\n *\n * @defaultValue false\n */\n readonly closable = input(false, {\n transform: booleanAttribute\n });\n /** Event emitter to notify when a tab is closed. */\n readonly closeTriggered = output();\n\n /** @internal */\n protected readonly tabButton = inject<ElementRef<HTMLElement>>(ElementRef);\n /** @internal */\n readonly tabContent = viewChild('tabContent', { read: TemplateRef });\n\n private static tabCounter = 0;\n private indexBeforeClose = -1;\n private readonly tooltipService = inject(SiTooltipService);\n private readonly existingTooltip = inject(SiTooltipDirective, { optional: true });\n private tooltipRef?: TooltipRef;\n\n /** @internal */\n tabId = `${SiTabBaseDirective.tabCounter++}`;\n protected readonly icons = addIcons({ elementCancel });\n protected tabset = inject(SI_TABSET);\n private readonly index = computed(() => this.tabset.tabPanels().indexOf(this));\n\n constructor() {\n this.setupIconTooltip();\n\n // Update the focusKeyManager if a tab is added that is active or if the tab is set active by the app.\n // This effect should not run, if active was already applied to the focusKeyManager.\n effect(() => {\n const active = this.active(); // We only want to subscribe to the active signal.\n untracked(() => {\n // !!! focusKeyManger.activeItem has signal reads internally. Do not move this outside of untracked.\n if (active && this.tabset.focusKeyManager.activeItem !== this) {\n this.tabset.focusKeyManager.updateActiveItem(this.index());\n }\n });\n });\n }\n\n private setupIconTooltip(): void {\n effect(onCleanup => {\n const icon = this.icon();\n // Only add an automatic tooltip if the consumer has not already applied an\n // active `siTooltip` directive (i.e. one that is not disabled and has a tooltip).\n const hasActiveTooltip =\n !!this.existingTooltip &&\n !this.existingTooltip.isDisabled() &&\n !!this.existingTooltip.siTooltip();\n\n if (icon && !hasActiveTooltip) {\n this.tooltipRef = this.tooltipService.createTooltip({\n element: this.tabButton,\n placement: 'auto',\n tooltip: () => this.heading(),\n tooltipContext: () => undefined\n });\n }\n\n onCleanup(() => {\n this.tooltipRef?.destroy();\n this.tooltipRef = undefined;\n });\n });\n }\n\n ngOnDestroy(): void {\n if (this.indexBeforeClose >= 0) {\n this.tabset.removedTabByUser(this.indexBeforeClose, this.active());\n }\n }\n\n protected closeTab(event: Event): void {\n if (this.closable() && !this.disabledTab()) {\n event.stopPropagation();\n const index = this.index();\n this.closeTriggered.emit();\n this.indexBeforeClose = index;\n }\n }\n\n /** @internal */\n focus(): void {\n this.tabButton.nativeElement.focus({ preventScroll: true });\n // The element is not fully scrolled into view when focused. So we prevent and scroll it manually.\n this.scrollTabIntoView();\n }\n\n /** @internal */\n get disabled(): boolean {\n return this.disabledTab();\n }\n\n /**\n * Programmatically selects the current tab.\n */\n selectTab(retainFocus?: boolean): void {\n this.tabset.focusKeyManager.updateActiveItem(this.index());\n if (retainFocus) {\n // We need the timeout to wait for cdkMenu to restore the focus before we move it again.\n setTimeout(() => this.focus());\n }\n }\n\n /** @internal */\n deSelectTab(): void {\n // Empty be default, can be overridden in derived classes.\n }\n\n /** @internal */\n scrollTabIntoView(): void {\n this.tabButton.nativeElement.scrollIntoView({\n inline: 'nearest',\n block: 'nearest',\n behavior: 'instant'\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Router, RouterLink, RouterLinkActive } from '@angular/router';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTooltipService } from '@siemens/element-ng/tooltip';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\nimport { startWith } from 'rxjs/operators';\n\nimport { SiTabBadgeComponent } from './si-tab-badge.component';\nimport { SiTabBaseDirective } from './si-tab-base.directive';\n\n/**\n * Creates a tab that uses the Angular router.\n *\n * @example\n * ```html\n * <si-tabset>\n * <a si-tab routerLink=\"/home\" heading=\"Home\"></a>\n *\n * <router-outlet />\n * </si-tabset>\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'a[si-tab][routerLink]',\n imports: [SiIconComponent, SiTranslatePipe, SiTabBadgeComponent],\n templateUrl: './si-tab.component.html',\n styleUrl: './si-tab.component.scss',\n providers: [SiTooltipService, { provide: SiTabBaseDirective, useExisting: SiTabLinkComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: RouterLinkActive\n }\n ]\n})\nexport class SiTabLinkComponent extends SiTabBaseDirective {\n private router = inject(Router);\n /** @internal */\n routerLink = inject(RouterLink, { self: true });\n protected routerLinkActive = inject(RouterLinkActive, { self: true });\n /** @defaultValue false */\n override readonly active = toSignal(\n this.routerLinkActive.isActiveChange.pipe(startWith(this.routerLinkActive.isActive))\n );\n /** {@inheritDoc} */\n override selectTab(retainFocus?: boolean): void {\n if (this.routerLink.urlTree) {\n this.router.navigateByUrl(this.routerLink.urlTree, {\n skipLocationChange: this.routerLink.skipLocationChange,\n replaceUrl: this.routerLink.replaceUrl,\n info: this.routerLink.info,\n state: this.routerLink.state\n });\n }\n super.selectTab(retainFocus);\n }\n}\n","@let icon = this.icon();\n<span class=\"text-truncate\" [class.visually-hidden]=\"!!icon\">{{ heading() | translate }}</span>\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" />\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-sm btn-tertiary-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { CdkMenuTrigger } from '@angular/cdk/menu';\nimport { DomPortal } from '@angular/cdk/portal';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n effect,\n inject,\n INJECTOR,\n input,\n signal,\n viewChild\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { elementOptions } from '@siemens/element-icons';\nimport { isRTL } from '@siemens/element-ng/common';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiMenuDirective, SiMenuItemComponent } from '@siemens/element-ng/menu';\nimport { SiResizeObserverModule } from '@siemens/element-ng/resize-observer';\n\nimport { SiTabBadgeComponent } from './si-tab-badge.component';\nimport { SiTabBaseDirective } from './si-tab-base.directive';\nimport { SiTabLinkComponent } from './si-tab-link.component';\nimport { SI_TABSET } from './si-tabs-tokens';\n\n/**\n * A component to group multiple tabs together.\n * Can either be used with {@link SiTabLinkComponent} or {@link SiTabComponent} components.\n */\n@Component({\n selector: 'si-tabset',\n imports: [\n SiMenuDirective,\n SiMenuItemComponent,\n CdkMenuTrigger,\n NgTemplateOutlet,\n SiResizeObserverModule,\n RouterLink,\n SiTabBadgeComponent,\n SiIconComponent\n ],\n templateUrl: './si-tabset.component.html',\n styleUrl: './si-tabset.component.scss',\n providers: [\n {\n provide: SI_TABSET,\n useExisting: SiTabsetComponent\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiTabsetComponent {\n /**\n * When set, the overflowing content inside the tab will automatically scroll\n * @defaultValue false\n **/\n readonly contentOverflowAuto = input(false, { transform: booleanAttribute });\n\n protected readonly icons = addIcons({ elementOptions });\n\n private readonly contentNode = viewChild.required('contentNode');\n /**\n * A `DomPortal` wrapping the tab panel container. Used by {@link SiTabPortalComponent}\n * to render the active tab's content at a remote location in the DOM.\n *\n * @internal\n */\n readonly contentPortal = computed(() => new DomPortal(this.contentNode()));\n\n /** @internal */\n readonly activeTab = computed(() => this.tabPanels().find(tab => tab.active()));\n\n /** @internal */\n readonly tabPanels = contentChildren(SiTabBaseDirective);\n\n /** @internal */\n focusKeyManager = new FocusKeyManager(this.tabPanels, inject(INJECTOR))\n .withHorizontalOrientation(isRTL() ? 'rtl' : 'ltr')\n .withWrap(true);\n\n /** @internal */\n protected readonly showMenuButton = signal(false);\n\n protected tabIsLink(tab: unknown): tab is SiTabLinkComponent {\n return tab instanceof SiTabLinkComponent;\n }\n\n constructor() {\n effect(() => {\n if (this.showMenuButton() && this.activeTab()) {\n // wait for menu button to render on DOM\n setTimeout(() => {\n this.activeTab()?.scrollTabIntoView();\n });\n }\n });\n }\n\n /** @internal */\n removedTabByUser(index: number, active?: boolean): void {\n // The tab was already removed from the tabPanels list when this function is called.\n // We need to:\n // - focus another tab if the closed one was focused\n // - activate another tab if the closed one was active\n // If the closed tab was not focussed, there is no need to restore the focus as it could only be closed by mouse.\n for (let i = 0; i < this.tabPanels().length; i++) {\n // Get the actual index using modulo to wrap around\n const checkIndex = (index + i) % this.tabPanels().length;\n const checkTab = this.tabPanels()[checkIndex];\n if (!checkTab.disabledTab()) {\n if (this.focusKeyManager.activeItemIndex === index) {\n this.focusKeyManager.setActiveItem(checkIndex);\n }\n if (active) {\n checkTab.selectTab(true);\n }\n return;\n }\n }\n }\n\n protected resizeContainer(width: number, scrollWidth: number): void {\n // 48px is the width of the menu button.\n this.showMenuButton.set(scrollWidth > width + (this.showMenuButton() ? 48 : 0));\n }\n\n protected keydown(event: KeyboardEvent): void {\n this.focusKeyManager.onKeydown(event);\n }\n}\n","<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n (keydown)=\"keydown($event)\"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n >\n <si-icon class=\"icon m-0\" [icon]=\"icons.elementOptions\" />\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n <div #contentNode class=\"d-contents\">\n @if (activeTab) {\n <div\n class=\"tab-content focus-inside\"\n role=\"tabpanel\"\n [id]=\"`content-${activeTab.tabId}`\"\n [class.tab-scroll]=\"contentOverflowAuto()\"\n [attr.tabindex]=\"contentOverflowAuto() ? '0' : null\"\n [attr.aria-labelledby]=\"`tab-${activeTab.tabId}`\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template #tabsMenu>\n <si-menu>\n @for (tab of tabPanels(); track tab) {\n @if (tabIsLink(tab)) {\n <a\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tab.routerLink.urlTree\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </button>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n <si-tab-badge [badgeContent]=\"tab.badgeContent()\" [badgeColor]=\"tab.badgeColor()\" />\n </div>\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, input, model, OnDestroy } from '@angular/core';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTooltipService } from '@siemens/element-ng/tooltip';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiTabBadgeComponent } from './si-tab-badge.component';\nimport { SiTabBaseDirective } from './si-tab-base.directive';\n\n/**\n * Creates a normal tab that can contain any content.\n *\n * @example\n * ```html\n * <si-tabset>\n * <si-tab heading=\"Tab 1\">\n * <p>Content of Tab 1</p>\n * </si-tab>\n * </si-tabset>\n * ```\n */\n@Component({\n selector: 'si-tab',\n imports: [SiIconComponent, SiTranslatePipe, SiTabBadgeComponent],\n templateUrl: './si-tab.component.html',\n styleUrl: './si-tab.component.scss',\n providers: [SiTooltipService, { provide: SiTabBaseDirective, useExisting: SiTabComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(click)': 'selectTabByUser()',\n '(keydown.enter)': 'selectTabByUser()'\n }\n})\nexport class SiTabComponent extends SiTabBaseDirective implements OnDestroy {\n /**\n * Whether the tab is active or not.\n * If set to `true`, the tab will be selected and its content will be displayed.\n * @defaultValue false\n * */\n override readonly active = model(false);\n\n /**\n * Guard to check if the tab can be activated.\n * If not provided, the tab can always be activated.\n */\n readonly canActivate = input<() => boolean>();\n /**\n * Guard to check if the tab can be deactivated.\n * If not provided, the tab can always be deactivated.\n */\n readonly canDeactivate = input<() => boolean>();\n\n protected selectTabByUser(): void {\n const canActivate = this.canActivate();\n if (!this.active() && (canActivate ? canActivate() : true)) {\n this.selectTab();\n }\n }\n\n /** {@inheritDoc} */\n override selectTab(retainFocus?: boolean): void {\n const activeTab = this.tabset.activeTab();\n if (activeTab instanceof SiTabComponent) {\n const canDeactivate = activeTab?.canDeactivate();\n if (canDeactivate ? !canDeactivate() : false) {\n return;\n }\n }\n this.tabset.activeTab()?.deSelectTab();\n this.active.set(true);\n super.selectTab(retainFocus);\n }\n\n /** @internal */\n override deSelectTab(): void {\n this.active.set(false);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nimport { SiTabsetComponent } from './si-tabset.component';\n\n/**\n * A component that renders the active tab's content at a remote\n * location in the DOM using an Angular CDK `DomPortal`.\n *\n * This component **automatically** renders the content of the currently\n * active `si-tab`, including the `role=\"tabpanel\"` container with proper\n * ARIA attributes linked to the active tab.\n *\n * @example\n * ```html\n * <si-tabset #tabset>\n * <si-tab heading=\"Overview\" [active]=\"true\">\n * overview content\n * </si-tab>\n * <si-tab heading=\"History\">\n * history content\n * </si-tab>\n * </si-tabset>\n *\n * <si-tab-portal [tabset]=\"tabset\" />\n * ```\n */\n@Component({\n selector: 'si-tab-portal',\n imports: [CdkPortalOutlet],\n template: ` <ng-template [cdkPortalOutlet]=\"tabset().contentPortal()\" /> `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiTabPortalComponent {\n /**\n * Reference to the {@link SiTabsetComponent} whose active tab content\n * this component renders via a `DomPortal`.\n *\n * The tabset's tab panel container, including the `role=\"tabpanel\"` element\n * with proper ARIA attributes, is transported to this component's location.\n */\n readonly tabset = input.required<SiTabsetComponent>();\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tabset.component';\nexport * from './si-tab.component';\nexport * from './si-tab-link.component';\nexport * from './si-tab-portal.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siemens-element-ng-tabs.mjs","sources":["../../../../projects/element-ng/tabs/si-tab-badge.component.ts","../../../../projects/element-ng/tabs/si-tab-badge.component.html","../../../../projects/element-ng/tabs/si-tabs-tokens.ts","../../../../projects/element-ng/tabs/si-tab-base.directive.ts","../../../../projects/element-ng/tabs/si-tab-link.component.ts","../../../../projects/element-ng/tabs/si-tab.component.html","../../../../projects/element-ng/tabs/si-tabset.component.ts","../../../../projects/element-ng/tabs/si-tabset.component.html","../../../../projects/element-ng/tabs/si-tab.component.ts","../../../../projects/element-ng/tabs/si-tab-portal.component.ts","../../../../projects/element-ng/tabs/index.ts","../../../../projects/element-ng/tabs/siemens-element-ng-tabs.ts"],"sourcesContent":["/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { SiTranslatePipe, TranslatableString } from '@siemens/element-translate-ng/translate';\n\n@Component({\n selector: 'si-tab-badge',\n imports: [SiTranslatePipe],\n templateUrl: './si-tab-badge.component.html',\n styleUrl: './si-tab-badge.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'd-contents'\n }\n})\nexport class SiTabBadgeComponent {\n /**\n * Content displayed in the tab badge. Set to `true` to display a red dot.\n */\n readonly badgeContent = input<TranslatableString | boolean>();\n /**\n * Background color of the badge. When omitted, string content is displayed in a red dot badge.\n */\n readonly badgeColor = input<string>();\n}\n","@let badgeContent = this.badgeContent();\n@if (badgeContent === true) {\n <span class=\"badge-dot\"></span>\n} @else if (badgeContent && badgeColor()) {\n <span class=\"badge\" [class]=\"`bg-${badgeColor() || 'default'}`\">\n {{ badgeContent ?? '' | translate }}\n </span>\n} @else if (badgeContent && !badgeColor()) {\n <span class=\"badge-text\"> {{ badgeContent ?? '' | translate }}</span>\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { InjectionToken } from '@angular/core';\n\nimport { SiTabsetComponent } from './si-tabset.component';\n\nexport const SI_TABSET = new InjectionToken<SiTabsetComponent>('SiTabsetComponent');\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { FocusableOption } from '@angular/cdk/a11y';\nimport {\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n Signal,\n TemplateRef,\n untracked,\n viewChild\n} from '@angular/core';\nimport { elementCancel } from '@siemens/element-icons';\nimport { addIcons } from '@siemens/element-ng/icon';\nimport { SiTooltipDirective, SiTooltipService, TooltipRef } from '@siemens/element-ng/tooltip';\nimport { TranslatableString } from '@siemens/element-translate-ng/translate';\n\nimport { SI_TABSET } from './si-tabs-tokens';\n\n@Directive({\n selector: '[siTabNextBase]',\n host: {\n class: 'nav-link focus-inside px-5',\n role: 'tab',\n '[class.disabled]': 'disabledTab()',\n '[class.icon-only]': '!!icon()',\n '[class.pe-3]': 'closable()',\n '[class.active]': 'active()',\n '[attr.id]': \"'tab-' + tabId\",\n '[attr.aria-selected]': 'active()',\n '[attr.aria-disabled]': 'disabledTab()',\n '[attr.tabindex]': 'tabset.focusKeyManager.activeItem === this && !disabledTab() ? 0 : -1',\n '[attr.aria-controls]': \"'content-' + tabId\",\n '(keydown.delete)': 'closeTab($event)'\n }\n})\nexport abstract class SiTabBaseDirective implements OnDestroy, FocusableOption {\n abstract readonly active: Signal<boolean | undefined>;\n /** Title of the tab item. */\n readonly heading = input.required<TranslatableString>();\n /**\n * Icon of the tab item.\n * If provided, heading text will be ignored and only icon will be displayed.\n */\n readonly icon = input<string>();\n /**\n * Additional badge content. A value of\n * - `true` will render a red dot\n * - any string without a `badgeColor` will render a red dot with text\n * - any string with a `badgeColor` will render a normal badge\n */\n readonly badgeContent = input<TranslatableString | boolean>();\n /**\n * Background color of the badge.\n * If no color is provided a red dot badge will be rendered.\n */\n readonly badgeColor = input<string>();\n /**\n * Disables the tab.\n *\n * @defaultValue false\n */\n readonly disabledTab = input(false, {\n transform: booleanAttribute,\n // eslint-disable-next-line @angular-eslint/no-input-rename\n alias: 'disabled'\n });\n /**\n * Close the current tab.\n *\n * @defaultValue false\n */\n readonly closable = input(false, {\n transform: booleanAttribute\n });\n /** Event emitter to notify when a tab is closed. */\n readonly closeTriggered = output();\n\n /** @internal */\n protected readonly tabButton = inject<ElementRef<HTMLElement>>(ElementRef);\n /** @internal */\n readonly tabContent = viewChild('tabContent', { read: TemplateRef });\n\n private static tabCounter = 0;\n private indexBeforeClose = -1;\n private readonly tooltipService = inject(SiTooltipService);\n private readonly existingTooltip = inject(SiTooltipDirective, { optional: true });\n private tooltipRef?: TooltipRef;\n\n /** @internal */\n tabId = `${SiTabBaseDirective.tabCounter++}`;\n protected readonly icons = addIcons({ elementCancel });\n protected tabset = inject(SI_TABSET);\n private readonly index = computed(() => this.tabset.tabPanels().indexOf(this));\n\n constructor() {\n this.setupIconTooltip();\n\n // Update the focusKeyManager if a tab is added that is active or if the tab is set active by the app.\n // This effect should not run, if active was already applied to the focusKeyManager.\n effect(() => {\n const active = this.active(); // We only want to subscribe to the active signal.\n untracked(() => {\n // !!! focusKeyManger.activeItem has signal reads internally. Do not move this outside of untracked.\n if (active && this.tabset.focusKeyManager.activeItem !== this) {\n this.tabset.focusKeyManager.updateActiveItem(this.index());\n }\n });\n });\n }\n\n private setupIconTooltip(): void {\n effect(onCleanup => {\n const icon = this.icon();\n // Only add an automatic tooltip if the consumer has not already applied an\n // active `siTooltip` directive (i.e. one that is not disabled and has a tooltip).\n const hasActiveTooltip =\n !!this.existingTooltip &&\n !this.existingTooltip.isDisabled() &&\n !!this.existingTooltip.siTooltip();\n\n if (icon && !hasActiveTooltip) {\n this.tooltipRef = this.tooltipService.createTooltip({\n element: this.tabButton,\n placement: 'auto',\n tooltip: () => this.heading(),\n tooltipContext: () => undefined\n });\n }\n\n onCleanup(() => {\n this.tooltipRef?.destroy();\n this.tooltipRef = undefined;\n });\n });\n }\n\n ngOnDestroy(): void {\n if (this.indexBeforeClose >= 0) {\n this.tabset.removedTabByUser(this.indexBeforeClose, this.active());\n }\n }\n\n protected closeTab(event: Event): void {\n if (this.closable() && !this.disabledTab()) {\n event.stopPropagation();\n const index = this.index();\n this.closeTriggered.emit();\n this.indexBeforeClose = index;\n }\n }\n\n /** @internal */\n focus(): void {\n this.tabButton.nativeElement.focus({ preventScroll: true });\n // The element is not fully scrolled into view when focused. So we prevent and scroll it manually.\n this.scrollTabIntoView();\n }\n\n /** @internal */\n get disabled(): boolean {\n return this.disabledTab();\n }\n\n /**\n * Programmatically selects the current tab.\n */\n selectTab(retainFocus?: boolean): void {\n this.tabset.focusKeyManager.updateActiveItem(this.index());\n if (retainFocus) {\n // We need the timeout to wait for cdkMenu to restore the focus before we move it again.\n setTimeout(() => this.focus());\n }\n }\n\n /** @internal */\n deSelectTab(): void {\n // Empty be default, can be overridden in derived classes.\n }\n\n /** @internal */\n scrollTabIntoView(): void {\n this.tabButton.nativeElement.scrollIntoView({\n inline: 'nearest',\n block: 'nearest',\n behavior: 'instant'\n });\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Router, RouterLink, RouterLinkActive } from '@angular/router';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTooltipService } from '@siemens/element-ng/tooltip';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\nimport { startWith } from 'rxjs/operators';\n\nimport { SiTabBadgeComponent } from './si-tab-badge.component';\nimport { SiTabBaseDirective } from './si-tab-base.directive';\n\n/**\n * Creates a tab that uses the Angular router.\n *\n * @example\n * ```html\n * <si-tabset>\n * <a si-tab routerLink=\"/home\" heading=\"Home\"></a>\n *\n * <router-outlet />\n * </si-tabset>\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'a[si-tab][routerLink]',\n imports: [SiIconComponent, SiTranslatePipe, SiTabBadgeComponent],\n templateUrl: './si-tab.component.html',\n styleUrl: './si-tab.component.scss',\n providers: [SiTooltipService, { provide: SiTabBaseDirective, useExisting: SiTabLinkComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: RouterLinkActive\n }\n ]\n})\nexport class SiTabLinkComponent extends SiTabBaseDirective {\n private router = inject(Router);\n /** @internal */\n routerLink = inject(RouterLink, { self: true });\n protected routerLinkActive = inject(RouterLinkActive, { self: true });\n /** @defaultValue false */\n override readonly active = toSignal(\n this.routerLinkActive.isActiveChange.pipe(startWith(this.routerLinkActive.isActive))\n );\n /** {@inheritDoc} */\n override selectTab(retainFocus?: boolean): void {\n if (this.routerLink.urlTree) {\n this.router.navigateByUrl(this.routerLink.urlTree, {\n skipLocationChange: this.routerLink.skipLocationChange,\n replaceUrl: this.routerLink.replaceUrl,\n info: this.routerLink.info,\n state: this.routerLink.state\n });\n }\n super.selectTab(retainFocus);\n }\n}\n","@let icon = this.icon();\n<span class=\"text-truncate\" [class.visually-hidden]=\"!!icon\">{{ heading() | translate }}</span>\n@if (icon) {\n <si-icon class=\"tab-icon\" [icon]=\"icon\" />\n}\n<si-tab-badge [badgeColor]=\"badgeColor()\" [badgeContent]=\"badgeContent()\" />\n@if (closable() && !disabledTab()) {\n <si-icon\n class=\"ms-2 btn btn-circle btn-sm btn-tertiary-ghost close\"\n [icon]=\"icons.elementCancel\"\n (click)=\"closeTab($event)\"\n />\n}\n\n<ng-template #tabContent>\n <ng-content />\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { CdkMenuTrigger } from '@angular/cdk/menu';\nimport { DomPortal } from '@angular/cdk/portal';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n ElementRef,\n effect,\n inject,\n INJECTOR,\n input,\n signal,\n viewChild\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { elementOptions } from '@siemens/element-icons';\nimport { isRTL } from '@siemens/element-ng/common';\nimport { addIcons, SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiMenuDirective, SiMenuItemComponent } from '@siemens/element-ng/menu';\nimport { SiResizeObserverModule } from '@siemens/element-ng/resize-observer';\n\nimport { SiTabBadgeComponent } from './si-tab-badge.component';\nimport { SiTabBaseDirective } from './si-tab-base.directive';\nimport { SiTabLinkComponent } from './si-tab-link.component';\nimport { SI_TABSET } from './si-tabs-tokens';\n\n/**\n * A component to group multiple tabs together.\n * Can either be used with {@link SiTabLinkComponent} or {@link SiTabComponent} components.\n */\n@Component({\n selector: 'si-tabset',\n imports: [\n SiMenuDirective,\n SiMenuItemComponent,\n CdkMenuTrigger,\n NgTemplateOutlet,\n SiResizeObserverModule,\n RouterLink,\n SiTabBadgeComponent,\n SiIconComponent\n ],\n templateUrl: './si-tabset.component.html',\n styleUrl: './si-tabset.component.scss',\n providers: [\n {\n provide: SI_TABSET,\n useExisting: SiTabsetComponent\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiTabsetComponent {\n /**\n * When set, the overflowing content inside the tab will automatically scroll\n * @defaultValue false\n **/\n readonly contentOverflowAuto = input(false, { transform: booleanAttribute });\n\n protected readonly icons = addIcons({ elementOptions });\n\n private readonly contentNode = viewChild.required('contentNode');\n /**\n * A `DomPortal` wrapping the tab panel container. Used by {@link SiTabPortalComponent}\n * to render the active tab's content at a remote location in the DOM.\n *\n * @internal\n */\n readonly contentPortal = computed(() => new DomPortal(this.contentNode()));\n\n /** @internal */\n readonly activeTab = computed(() => this.tabPanels().find(tab => tab.active()));\n\n /** @internal */\n readonly tabPanels = contentChildren(SiTabBaseDirective);\n\n /** @internal */\n focusKeyManager = new FocusKeyManager(this.tabPanels, inject(INJECTOR))\n .withHorizontalOrientation(isRTL() ? 'rtl' : 'ltr')\n .withWrap(true);\n\n /** @internal */\n protected readonly showMenuButton = signal(false);\n private readonly menuButton = viewChild<ElementRef<HTMLButtonElement>>('menuButton');\n\n protected tabIsLink(tab: unknown): tab is SiTabLinkComponent {\n return tab instanceof SiTabLinkComponent;\n }\n\n constructor() {\n effect(() => {\n if (this.showMenuButton() && this.activeTab()) {\n // wait for menu button to render on DOM\n setTimeout(() => {\n this.activeTab()?.scrollTabIntoView();\n });\n }\n });\n }\n\n /** @internal */\n removedTabByUser(index: number, active?: boolean): void {\n // The tab was already removed from the tabPanels list when this function is called.\n // We need to:\n // - focus another tab if the closed one was focused\n // - activate another tab if the closed one was active\n // If the closed tab was not focussed, there is no need to restore the focus as it could only be closed by mouse.\n for (let i = 0; i < this.tabPanels().length; i++) {\n // Get the actual index using modulo to wrap around\n const checkIndex = (index + i) % this.tabPanels().length;\n const checkTab = this.tabPanels()[checkIndex];\n if (!checkTab.disabledTab()) {\n if (this.focusKeyManager.activeItemIndex === index) {\n this.focusKeyManager.setActiveItem(checkIndex);\n }\n if (active) {\n checkTab.selectTab(true);\n }\n return;\n }\n }\n }\n\n protected resizeContainer(width: number, scrollWidth: number): void {\n const totalWidth = width + (this.menuButton()?.nativeElement.offsetWidth ?? 0);\n this.showMenuButton.set(scrollWidth > totalWidth);\n }\n\n protected keydown(event: KeyboardEvent): void {\n this.focusKeyManager.onKeydown(event);\n }\n}\n","<div class=\"tabs-container\">\n <div class=\"tab-container-buttonbar-list nav nav-tabs\">\n <div\n #tabScrollContainer\n role=\"tablist\"\n tabindex=\"-1\"\n class=\"d-flex tabs-wrapper\"\n (siResizeObserver)=\"\n resizeContainer(tabScrollContainer.clientWidth, tabScrollContainer.scrollWidth)\n \"\n (keydown)=\"keydown($event)\"\n >\n <ng-content />\n </div>\n\n @if (showMenuButton()) {\n <button\n #menuButton\n type=\"button\"\n class=\"dropdown btn btn-tertiary focus-inside\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"tabsMenu\"\n >\n <si-icon class=\"icon m-0\" [icon]=\"icons.elementOptions\" />\n </button>\n }\n </div>\n @let tabContent = this.activeTab()?.tabContent();\n @let activeTab = this.activeTab();\n\n <div #contentNode class=\"d-contents\">\n @if (activeTab) {\n <div\n class=\"tab-content focus-inside\"\n role=\"tabpanel\"\n [id]=\"`content-${activeTab.tabId}`\"\n [class.tab-scroll]=\"contentOverflowAuto()\"\n [attr.tabindex]=\"contentOverflowAuto() ? '0' : null\"\n [attr.aria-labelledby]=\"`tab-${activeTab.tabId}`\"\n >\n @if (tabContent) {\n <ng-container [ngTemplateOutlet]=\"tabContent\" />\n }\n\n <ng-content select=\"router-outlet\" />\n </div>\n }\n </div>\n</div>\n\n<ng-template #tabsMenu>\n <si-menu>\n @for (tab of tabPanels(); track tab) {\n @if (tabIsLink(tab)) {\n <a\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n [routerLink]=\"tab.routerLink.urlTree\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </a>\n } @else {\n <button\n type=\"button\"\n si-menu-item\n [disabled]=\"tab.disabledTab()\"\n [icon]=\"tab.icon()\"\n (triggered)=\"tab.selectTab(true)\"\n >\n <ng-container [ngTemplateOutlet]=\"badgeTemplate\" [ngTemplateOutletContext]=\"{ tab }\" />\n </button>\n }\n }\n </si-menu>\n</ng-template>\n\n<ng-template #badgeTemplate let-tab=\"tab\">\n <div class=\"d-flex align-items-center space-between flex-no-wrap justify-content-between\">\n {{ tab.heading() }}\n <si-tab-badge [badgeContent]=\"tab.badgeContent()\" [badgeColor]=\"tab.badgeColor()\" />\n </div>\n</ng-template>\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { ChangeDetectionStrategy, Component, input, model, OnDestroy } from '@angular/core';\nimport { SiIconComponent } from '@siemens/element-ng/icon';\nimport { SiTooltipService } from '@siemens/element-ng/tooltip';\nimport { SiTranslatePipe } from '@siemens/element-translate-ng/translate';\n\nimport { SiTabBadgeComponent } from './si-tab-badge.component';\nimport { SiTabBaseDirective } from './si-tab-base.directive';\n\n/**\n * Creates a normal tab that can contain any content.\n *\n * @example\n * ```html\n * <si-tabset>\n * <si-tab heading=\"Tab 1\">\n * <p>Content of Tab 1</p>\n * </si-tab>\n * </si-tabset>\n * ```\n */\n@Component({\n selector: 'si-tab',\n imports: [SiIconComponent, SiTranslatePipe, SiTabBadgeComponent],\n templateUrl: './si-tab.component.html',\n styleUrl: './si-tab.component.scss',\n providers: [SiTooltipService, { provide: SiTabBaseDirective, useExisting: SiTabComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(click)': 'selectTabByUser()',\n '(keydown.enter)': 'selectTabByUser()'\n }\n})\nexport class SiTabComponent extends SiTabBaseDirective implements OnDestroy {\n /**\n * Whether the tab is active or not.\n * If set to `true`, the tab will be selected and its content will be displayed.\n * @defaultValue false\n * */\n override readonly active = model(false);\n\n /**\n * Guard to check if the tab can be activated.\n * If not provided, the tab can always be activated.\n */\n readonly canActivate = input<() => boolean>();\n /**\n * Guard to check if the tab can be deactivated.\n * If not provided, the tab can always be deactivated.\n */\n readonly canDeactivate = input<() => boolean>();\n\n protected selectTabByUser(): void {\n const canActivate = this.canActivate();\n if (!this.active() && (canActivate ? canActivate() : true)) {\n this.selectTab();\n }\n }\n\n /** {@inheritDoc} */\n override selectTab(retainFocus?: boolean): void {\n const activeTab = this.tabset.activeTab();\n if (activeTab instanceof SiTabComponent) {\n const canDeactivate = activeTab?.canDeactivate();\n if (canDeactivate ? !canDeactivate() : false) {\n return;\n }\n }\n this.tabset.activeTab()?.deSelectTab();\n this.active.set(true);\n super.selectTab(retainFocus);\n }\n\n /** @internal */\n override deSelectTab(): void {\n this.active.set(false);\n }\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nimport { SiTabsetComponent } from './si-tabset.component';\n\n/**\n * A component that renders the active tab's content at a remote\n * location in the DOM using an Angular CDK `DomPortal`.\n *\n * This component **automatically** renders the content of the currently\n * active `si-tab`, including the `role=\"tabpanel\"` container with proper\n * ARIA attributes linked to the active tab.\n *\n * @example\n * ```html\n * <si-tabset #tabset>\n * <si-tab heading=\"Overview\" [active]=\"true\">\n * overview content\n * </si-tab>\n * <si-tab heading=\"History\">\n * history content\n * </si-tab>\n * </si-tabset>\n *\n * <si-tab-portal [tabset]=\"tabset\" />\n * ```\n */\n@Component({\n selector: 'si-tab-portal',\n imports: [CdkPortalOutlet],\n template: ` <ng-template [cdkPortalOutlet]=\"tabset().contentPortal()\" /> `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SiTabPortalComponent {\n /**\n * Reference to the {@link SiTabsetComponent} whose active tab content\n * this component renders via a `DomPortal`.\n *\n * The tabset's tab panel container, including the `role=\"tabpanel\"` element\n * with proper ARIA attributes, is transported to this component's location.\n */\n readonly tabset = input.required<SiTabsetComponent>();\n}\n","/**\n * Copyright (c) Siemens 2016 - 2026\n * SPDX-License-Identifier: MIT\n */\nexport * from './si-tabset.component';\nexport * from './si-tab.component';\nexport * from './si-tab-link.component';\nexport * from './si-tab-portal.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@siemens/element-ng",
|
|
3
3
|
"description": "Element Angular component library, implementing the Siemens Design Language",
|
|
4
|
-
"version": "49.
|
|
4
|
+
"version": "49.17.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"@ngx-formly/bootstrap": "^6.2.2",
|
|
44
44
|
"@ngx-formly/core": "^6.2.2",
|
|
45
45
|
"@siemens/element-icons": "1",
|
|
46
|
-
"@siemens/element-translate-ng": "49.
|
|
47
|
-
"@siemens/element-theme": "49.
|
|
46
|
+
"@siemens/element-translate-ng": "49.17.0",
|
|
47
|
+
"@siemens/element-theme": "49.17.0",
|
|
48
48
|
"@siemens/ngx-datatable": "22 - 26",
|
|
49
49
|
"ag-grid-community": "^34.3.1 || ^35.0.0",
|
|
50
50
|
"flag-icons": "^7.3.2",
|
|
@@ -128,6 +128,7 @@ declare class SiTabsetComponent {
|
|
|
128
128
|
focusKeyManager: FocusKeyManager<SiTabBaseDirective>;
|
|
129
129
|
/** @internal */
|
|
130
130
|
protected readonly showMenuButton: _angular_core.WritableSignal<boolean>;
|
|
131
|
+
private readonly menuButton;
|
|
131
132
|
protected tabIsLink(tab: unknown): tab is SiTabLinkComponent;
|
|
132
133
|
constructor();
|
|
133
134
|
/** @internal */
|