@eui/eds 22.0.0-alpha.21 → 22.0.0-alpha.23
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/docs/changelog.html +61 -0
- package/docs/components/EdsButton.html +77 -203
- package/docs/components/EdsCalendarDay.html +1 -1
- package/docs/components/EdsCalendarHeader.html +1 -1
- package/docs/components/EdsDatepicker.html +1 -1
- package/docs/components/EdsDialogContainer.html +1 -1
- package/docs/components/EdsFeedbackMessage.html +35 -73
- package/docs/components/EdsFileUpload.html +1 -1
- package/docs/components/EdsFlexLayout.html +1 -1
- package/docs/components/EdsGridLayout.html +1 -1
- package/docs/components/EdsGridLayoutCell.html +1 -1
- package/docs/components/EdsGridLayoutRow.html +1 -1
- package/docs/components/EdsIconState.html +38 -3
- package/docs/components/EdsInputButton.html +0 -57
- package/docs/components/EdsInputCheckbox.html +0 -62
- package/docs/components/EdsInputIcon.html +0 -53
- package/docs/components/EdsInputNumber.html +0 -60
- package/docs/components/EdsInputRadio.html +0 -62
- package/docs/components/EdsInputText.html +0 -62
- package/docs/components/EdsLabel.html +1 -1
- package/docs/components/EdsLanguageSelectorDialog.html +3 -5
- package/docs/components/EdsLink.html +1 -1
- package/docs/components/EdsLoadingIndicator.html +1 -1
- package/docs/components/EdsPaginator.html +1 -1
- package/docs/components/EdsRating.html +66 -57
- package/docs/components/EdsSelect.html +0 -45
- package/docs/components/EdsSnc.html +2 -2
- package/docs/components/EdsTab.html +8 -133
- package/docs/components/EdsTabBody.html +21 -41
- package/docs/components/EdsTabHeader.html +13 -25
- package/docs/components/EdsTabHeaderLabel.html +4 -126
- package/docs/components/EdsTabHeaderLeftContent.html +4 -126
- package/docs/components/EdsTabHeaderRightContent.html +4 -126
- package/docs/components/EdsTabHeaderSublabel.html +4 -126
- package/docs/components/EdsTabs.html +113 -140
- package/docs/components/EdsTextarea.html +0 -62
- package/docs/components/EdsTreeListToolbar.html +1 -1
- package/docs/components/EdsTrend.html +1 -1
- package/docs/directives/EdsColorDirective.html +0 -9
- package/docs/directives/EdsFlexColDirective.html +1 -1
- package/docs/directives/EdsFlexGrowDirective.html +1 -1
- package/docs/directives/EdsFlexNoShrinkDirective.html +1 -1
- package/docs/directives/EdsSizeDirective.html +0 -3
- package/docs/directives/EdsTooltip.html +45 -281
- package/docs/js/search/search_index.js +2 -2
- package/docs/json/EdsButton.md +15 -24
- package/docs/json/EdsFeedbackMessage.md +4 -10
- package/docs/json/EdsIconState.md +2 -1
- package/docs/json/EdsRating.md +2 -0
- package/docs/json/EdsTab.md +1 -1
- package/docs/json/EdsTabs.md +7 -8
- package/docs/json/EdsTooltip.md +3 -3
- package/docs/json/documentation.json +1803 -2031
- package/docs/llms.txt +72 -109
- package/docs/miscellaneous/typealiases.html +179 -16
- package/docs/miscellaneous/variables.html +16 -16
- package/docs/properties.html +1 -1
- package/eds-flex-layout/package.json +4 -0
- package/eds-grid-layout/package.json +4 -0
- package/eds-icon-state/package.json +4 -0
- package/eds-label/package.json +4 -0
- package/eds-link/package.json +4 -0
- package/eds-loading-indicator/package.json +4 -0
- package/eds-snc/package.json +4 -0
- package/eds-trend/package.json +4 -0
- package/fesm2022/eui-eds-eds-alert.mjs +3 -3
- package/fesm2022/eui-eds-eds-alert.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-button.mjs +53 -85
- package/fesm2022/eui-eds-eds-button.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-calendar.mjs +4 -4
- package/fesm2022/eui-eds-eds-calendar.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-datepicker.mjs +2 -2
- package/fesm2022/eui-eds-eds-datepicker.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-dialog.mjs +4 -4
- package/fesm2022/eui-eds-eds-dialog.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-discussion-thread.mjs +3 -3
- package/fesm2022/eui-eds-eds-discussion-thread.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-feedback-message.mjs +28 -42
- package/fesm2022/eui-eds-eds-feedback-message.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-file-upload.mjs +2 -2
- package/fesm2022/eui-eds-eds-file-upload.mjs.map +1 -1
- package/fesm2022/{eui-eds-utilities-eds-flex-layout.mjs → eui-eds-eds-flex-layout.mjs} +1 -1
- package/fesm2022/eui-eds-eds-flex-layout.mjs.map +1 -0
- package/fesm2022/{eui-eds-utilities-eds-grid-layout.mjs → eui-eds-eds-grid-layout.mjs} +1 -1
- package/fesm2022/eui-eds-eds-grid-layout.mjs.map +1 -0
- package/fesm2022/eui-eds-eds-growl.mjs +3 -3
- package/fesm2022/eui-eds-eds-growl.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-icon-state.mjs +56 -0
- package/fesm2022/eui-eds-eds-icon-state.mjs.map +1 -0
- package/fesm2022/eui-eds-eds-input-button.mjs +10 -13
- package/fesm2022/eui-eds-eds-input-button.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-input-checkbox.mjs +6 -17
- package/fesm2022/eui-eds-eds-input-checkbox.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-input-icon.mjs +10 -9
- package/fesm2022/eui-eds-eds-input-icon.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-input-number.mjs +5 -14
- package/fesm2022/eui-eds-eds-input-number.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-input-radio.mjs +6 -17
- package/fesm2022/eui-eds-eds-input-radio.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-input-text.mjs +5 -16
- package/fesm2022/eui-eds-eds-input-text.mjs.map +1 -1
- package/fesm2022/{eui-eds-utilities-eds-label.mjs → eui-eds-eds-label.mjs} +1 -1
- package/fesm2022/eui-eds-eds-label.mjs.map +1 -0
- package/fesm2022/eui-eds-eds-language-selector.mjs +5 -9
- package/fesm2022/eui-eds-eds-language-selector.mjs.map +1 -1
- package/fesm2022/{eui-eds-utilities-eds-link.mjs → eui-eds-eds-link.mjs} +1 -1
- package/fesm2022/eui-eds-eds-link.mjs.map +1 -0
- package/fesm2022/{eui-eds-utilities-eds-loading-indicator.mjs → eui-eds-eds-loading-indicator.mjs} +1 -1
- package/fesm2022/eui-eds-eds-loading-indicator.mjs.map +1 -0
- package/fesm2022/eui-eds-eds-paginator.mjs +2 -2
- package/fesm2022/eui-eds-eds-paginator.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-progress-bar.mjs +3 -3
- package/fesm2022/eui-eds-eds-progress-bar.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-rating.mjs +30 -16
- package/fesm2022/eui-eds-eds-rating.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-select.mjs +10 -33
- package/fesm2022/eui-eds-eds-select.mjs.map +1 -1
- package/fesm2022/{eui-eds-utilities-eds-snc.mjs → eui-eds-eds-snc.mjs} +3 -3
- package/fesm2022/eui-eds-eds-snc.mjs.map +1 -0
- package/fesm2022/eui-eds-eds-tabs.mjs +192 -259
- package/fesm2022/eui-eds-eds-tabs.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-textarea.mjs +5 -16
- package/fesm2022/eui-eds-eds-textarea.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-tooltip.mjs +71 -86
- package/fesm2022/eui-eds-eds-tooltip.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-tree-list.mjs +2 -2
- package/fesm2022/eui-eds-eds-tree-list.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-tree.mjs +2 -2
- package/fesm2022/eui-eds-eds-tree.mjs.map +1 -1
- package/fesm2022/{eui-eds-utilities-eds-trend.mjs → eui-eds-eds-trend.mjs} +1 -1
- package/fesm2022/eui-eds-eds-trend.mjs.map +1 -0
- package/package.json +33 -33
- package/types/eui-eds-eds-button.d.ts +47 -33
- package/types/eui-eds-eds-button.d.ts.map +1 -1
- package/types/eui-eds-eds-feedback-message.d.ts +20 -10
- package/types/eui-eds-eds-feedback-message.d.ts.map +1 -1
- package/types/{eui-eds-utilities-eds-flex-layout.d.ts → eui-eds-eds-flex-layout.d.ts} +1 -1
- package/types/eui-eds-eds-flex-layout.d.ts.map +1 -0
- package/types/{eui-eds-utilities-eds-grid-layout.d.ts → eui-eds-eds-grid-layout.d.ts} +1 -1
- package/types/eui-eds-eds-grid-layout.d.ts.map +1 -0
- package/types/{eui-eds-utilities-eds-icon-state.d.ts → eui-eds-eds-icon-state.d.ts} +8 -3
- package/types/eui-eds-eds-icon-state.d.ts.map +1 -0
- package/types/eui-eds-eds-input-button.d.ts +5 -1
- package/types/eui-eds-eds-input-button.d.ts.map +1 -1
- package/types/eui-eds-eds-input-checkbox.d.ts +0 -4
- package/types/eui-eds-eds-input-checkbox.d.ts.map +1 -1
- package/types/eui-eds-eds-input-icon.d.ts +5 -1
- package/types/eui-eds-eds-input-icon.d.ts.map +1 -1
- package/types/eui-eds-eds-input-number.d.ts +1 -5
- package/types/eui-eds-eds-input-number.d.ts.map +1 -1
- package/types/eui-eds-eds-input-radio.d.ts +0 -4
- package/types/eui-eds-eds-input-radio.d.ts.map +1 -1
- package/types/eui-eds-eds-input-text.d.ts +1 -5
- package/types/eui-eds-eds-input-text.d.ts.map +1 -1
- package/types/{eui-eds-utilities-eds-label.d.ts → eui-eds-eds-label.d.ts} +1 -1
- package/types/eui-eds-eds-label.d.ts.map +1 -0
- package/types/eui-eds-eds-language-selector.d.ts.map +1 -1
- package/types/{eui-eds-utilities-eds-link.d.ts → eui-eds-eds-link.d.ts} +1 -1
- package/types/eui-eds-eds-link.d.ts.map +1 -0
- package/types/{eui-eds-utilities-eds-loading-indicator.d.ts → eui-eds-eds-loading-indicator.d.ts} +1 -1
- package/types/eui-eds-eds-loading-indicator.d.ts.map +1 -0
- package/types/eui-eds-eds-rating.d.ts +19 -2
- package/types/eui-eds-eds-rating.d.ts.map +1 -1
- package/types/eui-eds-eds-select.d.ts +1 -5
- package/types/eui-eds-eds-select.d.ts.map +1 -1
- package/types/{eui-eds-utilities-eds-snc.d.ts → eui-eds-eds-snc.d.ts} +1 -1
- package/types/eui-eds-eds-snc.d.ts.map +1 -0
- package/types/eui-eds-eds-tabs.d.ts +87 -100
- package/types/eui-eds-eds-tabs.d.ts.map +1 -1
- package/types/eui-eds-eds-textarea.d.ts +1 -5
- package/types/eui-eds-eds-textarea.d.ts.map +1 -1
- package/types/eui-eds-eds-tooltip.d.ts +27 -25
- package/types/eui-eds-eds-tooltip.d.ts.map +1 -1
- package/types/{eui-eds-utilities-eds-trend.d.ts → eui-eds-eds-trend.d.ts} +1 -1
- package/types/eui-eds-eds-trend.d.ts.map +1 -0
- package/fesm2022/eui-eds-utilities-eds-flex-layout.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-grid-layout.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-icon-state.mjs +0 -49
- package/fesm2022/eui-eds-utilities-eds-icon-state.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-label.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-link.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-loading-indicator.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-snc.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-trend.mjs.map +0 -1
- package/types/eui-eds-utilities-eds-flex-layout.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-grid-layout.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-icon-state.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-label.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-link.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-loading-indicator.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-snc.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-trend.d.ts.map +0 -1
- package/utilities/eds-flex-layout/package.json +0 -4
- package/utilities/eds-grid-layout/package.json +0 -4
- package/utilities/eds-icon-state/package.json +0 -4
- package/utilities/eds-label/package.json +0 -4
- package/utilities/eds-link/package.json +0 -4
- package/utilities/eds-loading-indicator/package.json +0 -4
- package/utilities/eds-snc/package.json +0 -4
- package/utilities/eds-trend/package.json +0 -4
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { viewChild, inject, ViewContainerRef, Component, booleanAttribute,
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
2
|
+
import { viewChild, inject, ViewContainerRef, afterNextRender, Component, input, booleanAttribute, signal, contentChild, forwardRef, ChangeDetectionStrategy, model, output, contentChildren, viewChildren, PLATFORM_ID, DestroyRef, DOCUMENT, effect } from '@angular/core';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
5
|
+
import * as i1 from '@angular/cdk/portal';
|
|
5
6
|
import { TemplatePortal, PortalModule } from '@angular/cdk/portal';
|
|
6
7
|
import { AnimationBuilder, animate, style } from '@angular/animations';
|
|
7
|
-
import { BehaviorSubject, Subject, takeUntil, startWith } from 'rxjs';
|
|
8
8
|
import { uniqueId, EuiAppShellService } from '@eui/core';
|
|
9
|
-
import * as
|
|
9
|
+
import * as i2 from '@eui/eds/eds-icon-button';
|
|
10
10
|
import { EDS_ICON_BUTTON } from '@eui/eds/eds-icon-button';
|
|
11
|
-
import * as i1 from '@eui/eds/shared';
|
|
12
|
-
import { EdsColorDirective } from '@eui/eds/shared';
|
|
13
11
|
|
|
14
12
|
class EdsTabHeader {
|
|
15
13
|
constructor() {
|
|
16
14
|
this.templateRef = viewChild.required('templateRef', /* @ts-ignore */
|
|
17
15
|
...(ngDevMode ? [{ debugName: "templateRef" }] : /* istanbul ignore next */ []));
|
|
18
16
|
this.viewContainerRef = inject(ViewContainerRef);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
afterNextRender(() => {
|
|
18
|
+
this.templatePortal = new TemplatePortal(this.templateRef(), this.viewContainerRef);
|
|
19
|
+
});
|
|
22
20
|
}
|
|
23
21
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
22
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EdsTabHeader, isStandalone: true, selector: "eds-tab-header", viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["templateRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #templateRef>\n <div class=\"eds-tab-header-wrapper\">\n <ng-content select=\"eds-tab-header-left-content\"/>\n <div class=\"eds-tab-header-label-wrapper\">\n <ng-content select=\"eds-tab-header-label\"/>\n <ng-content select=\"eds-tab-header-sub-label\"/>\n </div>\n <ng-content/>\n <ng-content select=\"eds-tab-header-right-content\"/>\n </div>\n</ng-template>\n" }); }
|
|
@@ -26,7 +24,7 @@ class EdsTabHeader {
|
|
|
26
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabHeader, decorators: [{
|
|
27
25
|
type: Component,
|
|
28
26
|
args: [{ selector: 'eds-tab-header', template: "<ng-template #templateRef>\n <div class=\"eds-tab-header-wrapper\">\n <ng-content select=\"eds-tab-header-left-content\"/>\n <div class=\"eds-tab-header-label-wrapper\">\n <ng-content select=\"eds-tab-header-label\"/>\n <ng-content select=\"eds-tab-header-sub-label\"/>\n </div>\n <ng-content/>\n <ng-content select=\"eds-tab-header-right-content\"/>\n </div>\n</ng-template>\n" }]
|
|
29
|
-
}], propDecorators: { templateRef: [{ type: i0.ViewChild, args: ['templateRef', { isSignal: true }] }] } });
|
|
27
|
+
}], ctorParameters: () => [], propDecorators: { templateRef: [{ type: i0.ViewChild, args: ['templateRef', { isSignal: true }] }] } });
|
|
30
28
|
|
|
31
29
|
class EdsTabBody {
|
|
32
30
|
constructor() {
|
|
@@ -35,92 +33,98 @@ class EdsTabBody {
|
|
|
35
33
|
* Useful for full-width content, custom layouts, or when content provides its own spacing.
|
|
36
34
|
* @default false
|
|
37
35
|
*/
|
|
38
|
-
this.hasNoContentPadding = false;
|
|
36
|
+
this.hasNoContentPadding = input(false, { ...(ngDevMode ? { debugName: "hasNoContentPadding" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
39
37
|
this.templateRef = viewChild.required('templateRef', /* @ts-ignore */
|
|
40
38
|
...(ngDevMode ? [{ debugName: "templateRef" }] : /* istanbul ignore next */ []));
|
|
41
|
-
this.tabIndex
|
|
39
|
+
this.tabIndex = signal(0, /* @ts-ignore */
|
|
40
|
+
...(ngDevMode ? [{ debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
42
41
|
this.viewContainerRef = inject(ViewContainerRef);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
afterNextRender(() => {
|
|
43
|
+
this.templatePortal = new TemplatePortal(this.templateRef(), this.viewContainerRef);
|
|
44
|
+
});
|
|
46
45
|
}
|
|
47
46
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabBody, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
48
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EdsTabBody, isStandalone: true, selector: "eds-tab-body", inputs: { hasNoContentPadding:
|
|
47
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EdsTabBody, isStandalone: true, selector: "eds-tab-body", inputs: { hasNoContentPadding: { classPropertyName: "hasNoContentPadding", publicName: "hasNoContentPadding", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["templateRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #templateRef>\n <div class=\"eds-tab__body\" [tabindex]=\"tabIndex()\" [class.eds-tab__body--no-padding]=\"hasNoContentPadding()\">\n <ng-content></ng-content>\n </div>\n</ng-template>\n" }); }
|
|
49
48
|
}
|
|
50
49
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabBody, decorators: [{
|
|
51
50
|
type: Component,
|
|
52
|
-
args: [{ selector: 'eds-tab-body',
|
|
53
|
-
|
|
54
|
-
], template: "<ng-template #templateRef>\n <div class=\"eds-tab__body\" [tabindex]=\"tabIndex$ | async\" [class.eds-tab__body--no-padding]=\"hasNoContentPadding\">\n <ng-content></ng-content>\n </div>\n</ng-template>\n" }]
|
|
55
|
-
}], propDecorators: { hasNoContentPadding: [{
|
|
56
|
-
type: Input,
|
|
57
|
-
args: [{ transform: booleanAttribute }]
|
|
58
|
-
}], templateRef: [{ type: i0.ViewChild, args: ['templateRef', { isSignal: true }] }] } });
|
|
51
|
+
args: [{ selector: 'eds-tab-body', template: "<ng-template #templateRef>\n <div class=\"eds-tab__body\" [tabindex]=\"tabIndex()\" [class.eds-tab__body--no-padding]=\"hasNoContentPadding()\">\n <ng-content></ng-content>\n </div>\n</ng-template>\n" }]
|
|
52
|
+
}], ctorParameters: () => [], propDecorators: { hasNoContentPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasNoContentPadding", required: false }] }], templateRef: [{ type: i0.ViewChild, args: ['templateRef', { isSignal: true }] }] } });
|
|
59
53
|
|
|
60
54
|
class EdsTab {
|
|
61
55
|
constructor() {
|
|
56
|
+
/**
|
|
57
|
+
* Unique identifier for the tab.
|
|
58
|
+
* Used for programmatic tab selection and tracking.
|
|
59
|
+
* Required for proper tab management and routing.
|
|
60
|
+
*/
|
|
61
|
+
this.id = input(/* @ts-ignore */
|
|
62
|
+
...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
|
|
63
|
+
/**
|
|
64
|
+
* URL or route path associated with the tab.
|
|
65
|
+
* Enables deep linking and browser history integration for tab navigation.
|
|
66
|
+
*/
|
|
67
|
+
this.url = input(/* @ts-ignore */
|
|
68
|
+
...(ngDevMode ? [undefined, { debugName: "url" }] : /* istanbul ignore next */ []));
|
|
62
69
|
/**
|
|
63
70
|
* Data attribute used for end-to-end testing identification.
|
|
64
|
-
* @default '
|
|
71
|
+
* @default 'eds-tab'
|
|
65
72
|
*/
|
|
66
|
-
this.e2eAttr = 'eds-tab'
|
|
73
|
+
this.e2eAttr = input('eds-tab', /* @ts-ignore */
|
|
74
|
+
...(ngDevMode ? [{ debugName: "e2eAttr" }] : /* istanbul ignore next */ []));
|
|
75
|
+
/**
|
|
76
|
+
* Tooltip text displayed when hovering over the tab header.
|
|
77
|
+
* Provides additional context or information about the tab content.
|
|
78
|
+
*/
|
|
79
|
+
this.tooltip = input(/* @ts-ignore */
|
|
80
|
+
...(ngDevMode ? [undefined, { debugName: "tooltip" }] : /* istanbul ignore next */ []));
|
|
67
81
|
/**
|
|
68
82
|
* Enables a close button on the tab header for dismissible tabs.
|
|
69
83
|
* Allows users to remove or hide the tab from the tab bar.
|
|
70
84
|
* @default false
|
|
71
85
|
*/
|
|
72
|
-
this.isClosable = false;
|
|
86
|
+
this.isClosable = input(false, { ...(ngDevMode ? { debugName: "isClosable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
73
87
|
/**
|
|
74
88
|
* Disables the tab, preventing user interaction and selection.
|
|
75
89
|
* Applies disabled styling and blocks tab activation.
|
|
76
90
|
* @default false
|
|
77
91
|
*/
|
|
78
|
-
this.isDisabled = false;
|
|
92
|
+
this.isDisabled = input(false, { ...(ngDevMode ? { debugName: "isDisabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
79
93
|
/**
|
|
80
94
|
* Controls the visibility of the tab in the tab bar.
|
|
81
95
|
* When false, hides the tab from display without removing it from the DOM.
|
|
82
96
|
* @default true
|
|
83
97
|
*/
|
|
84
|
-
this.isVisible = true;
|
|
98
|
+
this.isVisible = input(true, { ...(ngDevMode ? { debugName: "isVisible" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
85
99
|
/**
|
|
86
100
|
* Enables automatic tab closure when the close button is clicked.
|
|
87
101
|
* When false, close button click must be handled externally.
|
|
88
102
|
* @default false
|
|
89
103
|
*/
|
|
90
|
-
this.isHandleCloseOnClose = false;
|
|
104
|
+
this.isHandleCloseOnClose = input(false, { ...(ngDevMode ? { debugName: "isHandleCloseOnClose" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
91
105
|
/**
|
|
92
106
|
* Enables automatic tab activation when the tab is clicked.
|
|
93
107
|
* When false, tab activation must be handled externally.
|
|
94
108
|
* @default false
|
|
95
109
|
*/
|
|
96
|
-
this.isHandleActivateTab = false;
|
|
110
|
+
this.isHandleActivateTab = input(false, { ...(ngDevMode ? { debugName: "isHandleActivateTab" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
111
|
+
this.euiVariant = input('euiPrimary', /* @ts-ignore */
|
|
112
|
+
...(ngDevMode ? [{ debugName: "euiVariant" }] : /* istanbul ignore next */ []));
|
|
97
113
|
this.templateHeader = contentChild.required(forwardRef(() => EdsTabHeader), /* @ts-ignore */
|
|
98
114
|
...(ngDevMode ? [{ debugName: "templateHeader" }] : /* istanbul ignore next */ []));
|
|
99
|
-
this.
|
|
100
|
-
|
|
101
|
-
this.
|
|
102
|
-
|
|
103
|
-
this.isDisabled$ = new BehaviorSubject(this.isDisabled);
|
|
104
|
-
}
|
|
105
|
-
ngOnChanges(c) {
|
|
106
|
-
if (c?.isVisible) {
|
|
107
|
-
this.isVisible$.next(c.isVisible.currentValue);
|
|
108
|
-
}
|
|
109
|
-
if (c?.isClosable) {
|
|
110
|
-
this.isClosable$.next(c.isClosable.currentValue);
|
|
111
|
-
}
|
|
112
|
-
if (c?.isDisabled) {
|
|
113
|
-
this.isDisabled$.next(c.isDisabled.currentValue);
|
|
114
|
-
}
|
|
115
|
+
this.templateBody = contentChild(forwardRef(() => EdsTabBody), /* @ts-ignore */
|
|
116
|
+
...(ngDevMode ? [{ debugName: "templateBody" }] : /* istanbul ignore next */ []));
|
|
117
|
+
this.isActive = signal(false, /* @ts-ignore */
|
|
118
|
+
...(ngDevMode ? [{ debugName: "isActive" }] : /* istanbul ignore next */ []));
|
|
115
119
|
}
|
|
116
120
|
activateTab() {
|
|
117
|
-
this.isActive
|
|
121
|
+
this.isActive.set(true);
|
|
118
122
|
}
|
|
119
123
|
deactivateTab() {
|
|
120
|
-
this.isActive
|
|
124
|
+
this.isActive.set(false);
|
|
121
125
|
}
|
|
122
126
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTab, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
123
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EdsTab, isStandalone: true, selector: "eds-tab", inputs: { id: "id", url: "url", e2eAttr: "e2eAttr", tooltip: "tooltip", isClosable:
|
|
127
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.2", type: EdsTab, isStandalone: true, selector: "eds-tab", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: false, transformFunction: null }, e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, isClosable: { classPropertyName: "isClosable", publicName: "isClosable", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, isVisible: { classPropertyName: "isVisible", publicName: "isVisible", isSignal: true, isRequired: false, transformFunction: null }, isHandleCloseOnClose: { classPropertyName: "isHandleCloseOnClose", publicName: "isHandleCloseOnClose", isSignal: true, isRequired: false, transformFunction: null }, isHandleActivateTab: { classPropertyName: "isHandleActivateTab", publicName: "isHandleActivateTab", isSignal: true, isRequired: false, transformFunction: null }, euiVariant: { classPropertyName: "euiVariant", publicName: "euiVariant", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "templateHeader", first: true, predicate: i0.forwardRef(() => EdsTabHeader), descendants: true, isSignal: true }, { propertyName: "templateBody", first: true, predicate: i0.forwardRef(() => EdsTabBody), descendants: true, isSignal: true }], ngImport: i0, template: '<ng-content/>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
124
128
|
}
|
|
125
129
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTab, decorators: [{
|
|
126
130
|
type: Component,
|
|
@@ -129,35 +133,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
129
133
|
template: '<ng-content/>',
|
|
130
134
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
131
135
|
}]
|
|
132
|
-
}], propDecorators: { id: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], url: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], e2eAttr: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], tooltip: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], isClosable: [{
|
|
141
|
-
type: Input,
|
|
142
|
-
args: [{ transform: booleanAttribute }]
|
|
143
|
-
}], isDisabled: [{
|
|
144
|
-
type: Input,
|
|
145
|
-
args: [{ transform: booleanAttribute }]
|
|
146
|
-
}], isVisible: [{
|
|
147
|
-
type: Input,
|
|
148
|
-
args: [{ transform: booleanAttribute }]
|
|
149
|
-
}], isHandleCloseOnClose: [{
|
|
150
|
-
type: Input,
|
|
151
|
-
args: [{ transform: booleanAttribute }]
|
|
152
|
-
}], isHandleActivateTab: [{
|
|
153
|
-
type: Input,
|
|
154
|
-
args: [{ transform: booleanAttribute }]
|
|
155
|
-
}], templateHeader: [{ type: i0.ContentChild, args: [forwardRef(() => EdsTabHeader), { isSignal: true }] }], templateBody: [{
|
|
156
|
-
type: ContentChild,
|
|
157
|
-
args: [forwardRef(() => EdsTabBody)]
|
|
158
|
-
}], euiVariant: [{
|
|
159
|
-
type: Input
|
|
160
|
-
}] } });
|
|
136
|
+
}], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], url: [{ type: i0.Input, args: [{ isSignal: true, alias: "url", required: false }] }], e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], tooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip", required: false }] }], isClosable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isClosable", required: false }] }], isDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDisabled", required: false }] }], isVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "isVisible", required: false }] }], isHandleCloseOnClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "isHandleCloseOnClose", required: false }] }], isHandleActivateTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "isHandleActivateTab", required: false }] }], euiVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "euiVariant", required: false }] }], templateHeader: [{ type: i0.ContentChild, args: [forwardRef(() => EdsTabHeader), { isSignal: true }] }], templateBody: [{ type: i0.ContentChild, args: [forwardRef(() => EdsTabBody), { isSignal: true }] }] } });
|
|
161
137
|
|
|
162
138
|
class EdsTabs {
|
|
163
139
|
constructor() {
|
|
@@ -168,24 +144,24 @@ class EdsTabs {
|
|
|
168
144
|
*/
|
|
169
145
|
this.e2eAttr = input('eds-tabs', /* @ts-ignore */
|
|
170
146
|
...(ngDevMode ? [{ debugName: "e2eAttr" }] : /* istanbul ignore next */ []));
|
|
171
|
-
this.colorDirective = inject(EdsColorDirective);
|
|
172
|
-
/** Computed host class that applies the color and variant modifiers. */
|
|
173
|
-
this.hostColorClass = computed(() => {
|
|
174
|
-
const color = this.colorDirective.getCssClass('eds-tabs');
|
|
175
|
-
const navbar = this.isNavBar() ? 'eds-tabs--navbar' : '';
|
|
176
|
-
return `eds-tabs ${color} ${navbar}`.trim();
|
|
177
|
-
}, /* @ts-ignore */
|
|
178
|
-
...(ngDevMode ? [{ debugName: "hostColorClass" }] : /* istanbul ignore next */ []));
|
|
179
147
|
/**
|
|
180
|
-
*
|
|
148
|
+
* Semantic color variant, reflected as the `color` host attribute.
|
|
149
|
+
*
|
|
150
|
+
* @default 'neutral'
|
|
151
|
+
*/
|
|
152
|
+
this.color = input('neutral', /* @ts-ignore */
|
|
153
|
+
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
154
|
+
/**
|
|
155
|
+
* Index of the active tab. Two-way bindable.
|
|
181
156
|
*
|
|
182
157
|
* @default 0
|
|
183
158
|
*/
|
|
184
|
-
this.activeTabIndex = 0
|
|
159
|
+
this.activeTabIndex = model(0, /* @ts-ignore */
|
|
160
|
+
...(ngDevMode ? [{ debugName: "activeTabIndex" }] : /* istanbul ignore next */ []));
|
|
185
161
|
/**
|
|
186
|
-
* Sets the `aria-label` attribute for the
|
|
162
|
+
* Sets the `aria-label` attribute for the tab list.
|
|
187
163
|
*
|
|
188
|
-
* @default '
|
|
164
|
+
* @default 'EDS Tabs'
|
|
189
165
|
*/
|
|
190
166
|
this.ariaLabel = input('EDS Tabs', /* @ts-ignore */
|
|
191
167
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
@@ -195,77 +171,84 @@ class EdsTabs {
|
|
|
195
171
|
/**
|
|
196
172
|
* Event emitted when a tab is closed
|
|
197
173
|
*/
|
|
198
|
-
this.tabClose =
|
|
174
|
+
this.tabClose = output();
|
|
199
175
|
/**
|
|
200
176
|
* Event emitted when a tab is activated
|
|
201
177
|
*/
|
|
202
|
-
this.tabActivate =
|
|
178
|
+
this.tabActivate = output();
|
|
203
179
|
/**
|
|
204
180
|
* Event emitted when a tab is clicked
|
|
205
181
|
*/
|
|
206
|
-
this.tabClick =
|
|
207
|
-
this.
|
|
208
|
-
this.
|
|
209
|
-
|
|
210
|
-
this.
|
|
211
|
-
|
|
182
|
+
this.tabClick = output();
|
|
183
|
+
this._tabs = contentChildren(EdsTab, { ...(ngDevMode ? { debugName: "_tabs" } : /* istanbul ignore next */ {}), descendants: false });
|
|
184
|
+
this.edsTabsHeadersContainer = viewChild('edsTabsHeadersContainer', /* @ts-ignore */
|
|
185
|
+
...(ngDevMode ? [{ debugName: "edsTabsHeadersContainer" }] : /* istanbul ignore next */ []));
|
|
186
|
+
this.edsTabsHeaders = viewChild('edsTabsHeaders', /* @ts-ignore */
|
|
187
|
+
...(ngDevMode ? [{ debugName: "edsTabsHeaders" }] : /* istanbul ignore next */ []));
|
|
188
|
+
this.edsTabsRightContent = viewChild('edsTabsRightContent', /* @ts-ignore */
|
|
189
|
+
...(ngDevMode ? [{ debugName: "edsTabsRightContent" }] : /* istanbul ignore next */ []));
|
|
190
|
+
this.edsTabListItems = viewChildren('edsTabListItems', /* @ts-ignore */
|
|
191
|
+
...(ngDevMode ? [{ debugName: "edsTabListItems" }] : /* istanbul ignore next */ []));
|
|
192
|
+
this.tabs = signal([], /* @ts-ignore */
|
|
193
|
+
...(ngDevMode ? [{ debugName: "tabs" }] : /* istanbul ignore next */ []));
|
|
194
|
+
this.scrolling = signal(false, /* @ts-ignore */
|
|
195
|
+
...(ngDevMode ? [{ debugName: "scrolling" }] : /* istanbul ignore next */ []));
|
|
196
|
+
this.navigationLeftButtonDisabled = signal(true, /* @ts-ignore */
|
|
197
|
+
...(ngDevMode ? [{ debugName: "navigationLeftButtonDisabled" }] : /* istanbul ignore next */ []));
|
|
198
|
+
this.navigationRightButtonDisabled = signal(false, /* @ts-ignore */
|
|
199
|
+
...(ngDevMode ? [{ debugName: "navigationRightButtonDisabled" }] : /* istanbul ignore next */ []));
|
|
200
|
+
this.currentOffset = signal(0, /* @ts-ignore */
|
|
201
|
+
...(ngDevMode ? [{ debugName: "currentOffset" }] : /* istanbul ignore next */ []));
|
|
212
202
|
this.tabId = uniqueId();
|
|
213
|
-
this.destroy$ = new Subject();
|
|
214
203
|
this.platformId = inject(PLATFORM_ID);
|
|
204
|
+
this.destroyRef = inject(DestroyRef);
|
|
215
205
|
this.stepMove = 400;
|
|
216
206
|
this.scrollOffset = 40;
|
|
217
207
|
this.scrollingCount = 0;
|
|
218
|
-
this.cd = inject(ChangeDetectorRef);
|
|
219
208
|
this.builder = inject(AnimationBuilder);
|
|
220
209
|
this.euiAppShellService = inject(EuiAppShellService);
|
|
221
210
|
this.document = inject(DOCUMENT);
|
|
211
|
+
this.viewReady = false;
|
|
212
|
+
// React to app-shell state changes (e.g. layout resize) to recompute scrolling.
|
|
213
|
+
this.euiAppShellService.state$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
214
|
+
if (this.viewReady) {
|
|
215
|
+
this.tabsScrollingHandler();
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
// Rebuild the tabs array whenever the projected tabs change.
|
|
219
|
+
effect(() => {
|
|
220
|
+
this.tabs.set(this._tabs().slice());
|
|
221
|
+
if (this.viewReady) {
|
|
222
|
+
setTimeout(() => this.tabsScrollingHandler());
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
afterNextRender(() => {
|
|
226
|
+
this.viewReady = true;
|
|
227
|
+
setTimeout(() => {
|
|
228
|
+
this.tabsScrollingHandler();
|
|
229
|
+
if (this.tabs()[this.activeTabIndex()]) {
|
|
230
|
+
this.activate(this.activeTabIndex(), false, { emitEvent: false });
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
});
|
|
222
234
|
}
|
|
223
235
|
/**
|
|
224
236
|
* Width of the tabs headers container
|
|
225
237
|
*/
|
|
226
238
|
get edsTabsHeadersContainerWidth() {
|
|
227
|
-
return (this.edsTabsHeadersContainer?.nativeElement.clientWidth - this.edsTabsRightContentWidth);
|
|
239
|
+
return (this.edsTabsHeadersContainer()?.nativeElement.clientWidth - this.edsTabsRightContentWidth);
|
|
228
240
|
}
|
|
229
241
|
/**
|
|
230
242
|
* Width of the tabs headers
|
|
231
243
|
*/
|
|
232
244
|
get edsTabsHeadersWidth() {
|
|
233
|
-
return this.edsTabsHeaders?.nativeElement.clientWidth;
|
|
245
|
+
return this.edsTabsHeaders()?.nativeElement.clientWidth;
|
|
234
246
|
}
|
|
235
247
|
/**
|
|
236
248
|
* Width of the tabs right content
|
|
237
249
|
*/
|
|
238
250
|
get edsTabsRightContentWidth() {
|
|
239
|
-
return this.edsTabsRightContent?.nativeElement?.offsetWidth || 0;
|
|
240
|
-
}
|
|
241
|
-
ngOnChanges(c) {
|
|
242
|
-
if (c?.activeTabIndex && !c.activeTabIndex.isFirstChange()) {
|
|
243
|
-
this.activate(this.activeTabIndex);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
ngOnInit() {
|
|
247
|
-
this.euiAppShellService.state$.pipe(takeUntil(this.destroy$)).subscribe((state) => {
|
|
248
|
-
this.tabsScrollingHandler();
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
ngAfterViewInit() {
|
|
252
|
-
this._tabs.changes.pipe(startWith(this._tabs), takeUntil(this.destroy$)).subscribe((tabs) => {
|
|
253
|
-
this.tabs = tabs.toArray();
|
|
254
|
-
setTimeout(() => {
|
|
255
|
-
this.tabsScrollingHandler();
|
|
256
|
-
});
|
|
257
|
-
this.cd.detectChanges();
|
|
258
|
-
});
|
|
259
|
-
setTimeout(() => {
|
|
260
|
-
if (this.tabs[this.activeTabIndex]) {
|
|
261
|
-
this.cd.markForCheck();
|
|
262
|
-
this.activate(this.activeTabIndex, false, { emitEvent: false });
|
|
263
|
-
}
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
ngOnDestroy() {
|
|
267
|
-
this.destroy$.next(true);
|
|
268
|
-
this.destroy$.unsubscribe();
|
|
251
|
+
return this.edsTabsRightContent()?.nativeElement?.offsetWidth || 0;
|
|
269
252
|
}
|
|
270
253
|
/**
|
|
271
254
|
* Activate a tab having index passed in parameter if exists.
|
|
@@ -275,18 +258,17 @@ class EdsTabs {
|
|
|
275
258
|
* @param options Object with emitEvent property to emit the event or not
|
|
276
259
|
*/
|
|
277
260
|
activateTab(index, isAnimated = true, options = { emitEvent: true }) {
|
|
278
|
-
const tab = this.tabs[index];
|
|
261
|
+
const tab = this.tabs()[index];
|
|
279
262
|
if (tab) {
|
|
280
|
-
this.tabs.forEach((t) => {
|
|
263
|
+
this.tabs().forEach((t) => {
|
|
281
264
|
t.deactivateTab();
|
|
282
265
|
});
|
|
283
266
|
this.setScrollToTabIndex(index, isAnimated);
|
|
284
267
|
tab.activateTab();
|
|
285
|
-
this.activeTabIndex
|
|
268
|
+
this.activeTabIndex.set(index);
|
|
286
269
|
if (options.emitEvent) {
|
|
287
270
|
this.tabActivate.emit({ tab, index });
|
|
288
271
|
}
|
|
289
|
-
this.cd.detectChanges();
|
|
290
272
|
}
|
|
291
273
|
}
|
|
292
274
|
/**
|
|
@@ -294,13 +276,13 @@ class EdsTabs {
|
|
|
294
276
|
* @param index Index of the tab to close
|
|
295
277
|
*/
|
|
296
278
|
closeTab(index) {
|
|
297
|
-
const tab = this.tabs[index];
|
|
298
|
-
if (
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
279
|
+
const tab = this.tabs()[index];
|
|
280
|
+
if (tab) {
|
|
281
|
+
tab.deactivateTab();
|
|
282
|
+
const activeIndex = this.activeTabIndex();
|
|
283
|
+
this.tabs.set(this.tabs().filter((_, i) => i !== index));
|
|
284
|
+
if (index === activeIndex) {
|
|
285
|
+
const previousVisibleIndex = index - 1;
|
|
304
286
|
if (previousVisibleIndex < 0) {
|
|
305
287
|
this.activate(0);
|
|
306
288
|
}
|
|
@@ -308,12 +290,9 @@ class EdsTabs {
|
|
|
308
290
|
this.activate(previousVisibleIndex);
|
|
309
291
|
}
|
|
310
292
|
}
|
|
311
|
-
else {
|
|
312
|
-
|
|
313
|
-
this.activeTabIndex = this.activeTabIndex - 1;
|
|
314
|
-
}
|
|
293
|
+
else if (index < activeIndex) {
|
|
294
|
+
this.activeTabIndex.set(activeIndex - 1);
|
|
315
295
|
}
|
|
316
|
-
this.cd.detectChanges();
|
|
317
296
|
this.tabsScrollingHandler();
|
|
318
297
|
}
|
|
319
298
|
}
|
|
@@ -321,7 +300,7 @@ class EdsTabs {
|
|
|
321
300
|
* Scroll to the left handler
|
|
322
301
|
*/
|
|
323
302
|
goToLeft() {
|
|
324
|
-
let scrollTo = this.currentOffset + this.stepMove;
|
|
303
|
+
let scrollTo = this.currentOffset() + this.stepMove;
|
|
325
304
|
if (scrollTo > 0) {
|
|
326
305
|
scrollTo = 0;
|
|
327
306
|
}
|
|
@@ -331,7 +310,7 @@ class EdsTabs {
|
|
|
331
310
|
* Scroll to the rihgt handler
|
|
332
311
|
*/
|
|
333
312
|
goToRight() {
|
|
334
|
-
let scrollTo = this.currentOffset - this.stepMove;
|
|
313
|
+
let scrollTo = this.currentOffset() - this.stepMove;
|
|
335
314
|
if (Math.abs(scrollTo) > this.edsTabsHeadersWidth - this.edsTabsHeadersContainerWidth) {
|
|
336
315
|
scrollTo = -(this.edsTabsHeadersWidth - this.edsTabsHeadersContainerWidth) - this.scrollOffset;
|
|
337
316
|
}
|
|
@@ -344,48 +323,49 @@ class EdsTabs {
|
|
|
344
323
|
* @param event The keyboard event
|
|
345
324
|
*/
|
|
346
325
|
onKeydown(i, event) {
|
|
326
|
+
const items = this.edsTabListItems();
|
|
347
327
|
switch (event.key) {
|
|
348
328
|
case 'Enter': {
|
|
349
|
-
if (!this.tabs[i].isDisabled) {
|
|
329
|
+
if (!this.tabs()[i].isDisabled()) {
|
|
350
330
|
this.activate(i);
|
|
351
331
|
}
|
|
352
332
|
break;
|
|
353
333
|
}
|
|
354
334
|
case 'ArrowRight': {
|
|
355
|
-
const isLastItem = i ===
|
|
335
|
+
const isLastItem = i === items.length - 1;
|
|
356
336
|
const index = isLastItem ? 0 : i + 1;
|
|
357
337
|
this.setScrollToTabIndex(index, false);
|
|
358
|
-
|
|
338
|
+
items[index]?.nativeElement.focus();
|
|
359
339
|
break;
|
|
360
340
|
}
|
|
361
341
|
case 'ArrowLeft': {
|
|
362
|
-
const lastIndex =
|
|
342
|
+
const lastIndex = items.length - 1;
|
|
363
343
|
const index = i === 0 ? lastIndex : i - 1;
|
|
364
344
|
this.setScrollToTabIndex(index, false);
|
|
365
|
-
|
|
345
|
+
items[index]?.nativeElement.focus();
|
|
366
346
|
break;
|
|
367
347
|
}
|
|
368
348
|
case 'Home': {
|
|
369
349
|
this.setScrollToTabIndex(0, false);
|
|
370
|
-
|
|
350
|
+
items[0]?.nativeElement.focus();
|
|
371
351
|
event.preventDefault();
|
|
372
352
|
break;
|
|
373
353
|
}
|
|
374
354
|
case 'End': {
|
|
375
|
-
this.setScrollToTabIndex(
|
|
376
|
-
|
|
355
|
+
this.setScrollToTabIndex(items.length - 1, false);
|
|
356
|
+
items[items.length - 1]?.nativeElement.focus();
|
|
377
357
|
event.preventDefault();
|
|
378
358
|
break;
|
|
379
359
|
}
|
|
380
360
|
case 'Delete': {
|
|
381
|
-
if (this.tabs[i].isClosable) {
|
|
382
|
-
if (i ===
|
|
383
|
-
|
|
361
|
+
if (this.tabs()[i].isClosable()) {
|
|
362
|
+
if (i === items.length - 1) {
|
|
363
|
+
items[i - 1]?.nativeElement.focus();
|
|
384
364
|
this.close(i, event);
|
|
385
365
|
}
|
|
386
366
|
else {
|
|
387
367
|
this.close(i, event);
|
|
388
|
-
|
|
368
|
+
items[i]?.nativeElement.focus();
|
|
389
369
|
}
|
|
390
370
|
}
|
|
391
371
|
break;
|
|
@@ -401,7 +381,7 @@ class EdsTabs {
|
|
|
401
381
|
* @param index Index of the tab clicked
|
|
402
382
|
*/
|
|
403
383
|
tabListItemClick(index) {
|
|
404
|
-
const tab = this.tabs[index];
|
|
384
|
+
const tab = this.tabs()[index];
|
|
405
385
|
this.tabClick.emit({ tab, index });
|
|
406
386
|
this.activate(index);
|
|
407
387
|
}
|
|
@@ -413,8 +393,8 @@ class EdsTabs {
|
|
|
413
393
|
* @param options Object with emitEvent property to emit the event or not
|
|
414
394
|
*/
|
|
415
395
|
activate(index, isAnimated = true, options = { emitEvent: true }) {
|
|
416
|
-
const tab = this.tabs[index];
|
|
417
|
-
if (tab && !tab.isHandleActivateTab) {
|
|
396
|
+
const tab = this.tabs()[index];
|
|
397
|
+
if (tab && !tab.isHandleActivateTab()) {
|
|
418
398
|
this.activateTab(index, isAnimated, options);
|
|
419
399
|
}
|
|
420
400
|
}
|
|
@@ -425,8 +405,8 @@ class EdsTabs {
|
|
|
425
405
|
* @param e
|
|
426
406
|
*/
|
|
427
407
|
close(index, e) {
|
|
428
|
-
const tab = this.tabs[index];
|
|
429
|
-
if (tab && !tab.isHandleCloseOnClose) {
|
|
408
|
+
const tab = this.tabs()[index];
|
|
409
|
+
if (tab && !tab.isHandleCloseOnClose()) {
|
|
430
410
|
this.closeTab(index);
|
|
431
411
|
}
|
|
432
412
|
this.tabClose.emit({ tab, index });
|
|
@@ -439,18 +419,19 @@ class EdsTabs {
|
|
|
439
419
|
onAttached(index) {
|
|
440
420
|
if (isPlatformBrowser(this.platformId)) {
|
|
441
421
|
const tabbody = this.document.querySelector('#tabpanel-' + index + '-' + this.tabId)?.children[0];
|
|
422
|
+
const body = this.tabs()[index - 1].templateBody();
|
|
442
423
|
if (tabbody?.children?.length && tabbody.children.length > 0) {
|
|
443
424
|
for (const child of Array.from(tabbody.children)) {
|
|
444
425
|
if (this.isFocusableElement(child)) {
|
|
445
|
-
|
|
426
|
+
body?.tabIndex.set(-1);
|
|
446
427
|
}
|
|
447
428
|
else {
|
|
448
|
-
|
|
429
|
+
body?.tabIndex.set(0);
|
|
449
430
|
}
|
|
450
431
|
}
|
|
451
432
|
}
|
|
452
433
|
else {
|
|
453
|
-
|
|
434
|
+
body?.tabIndex.set(0);
|
|
454
435
|
}
|
|
455
436
|
}
|
|
456
437
|
}
|
|
@@ -471,26 +452,26 @@ class EdsTabs {
|
|
|
471
452
|
*/
|
|
472
453
|
tabsScrollingHandler() {
|
|
473
454
|
if (this.edsTabsHeadersContainerWidth && this.edsTabsHeadersWidth) {
|
|
474
|
-
|
|
475
|
-
|
|
455
|
+
const isScrolling = this.edsTabsHeadersWidth > this.edsTabsHeadersContainerWidth;
|
|
456
|
+
this.scrolling.set(isScrolling);
|
|
457
|
+
if (!isScrolling) {
|
|
476
458
|
this.scrollingCount = 0;
|
|
477
459
|
this.setScrollTo(0, false);
|
|
478
|
-
this.navigationLeftButtonDisabled
|
|
479
|
-
this.navigationRightButtonDisabled
|
|
460
|
+
this.navigationLeftButtonDisabled.set(true);
|
|
461
|
+
this.navigationRightButtonDisabled.set(true);
|
|
480
462
|
}
|
|
481
463
|
else {
|
|
482
464
|
const maxScrollableWidth = this.edsTabsHeadersWidth - this.edsTabsHeadersContainerWidth;
|
|
483
|
-
if (maxScrollableWidth <= Math.abs(this.currentOffset) + this.scrollOffset && this.scrollingCount !== 0) {
|
|
465
|
+
if (maxScrollableWidth <= Math.abs(this.currentOffset()) + this.scrollOffset && this.scrollingCount !== 0) {
|
|
484
466
|
const scrollTo = -maxScrollableWidth - this.scrollOffset;
|
|
485
467
|
this.setScrollTo(scrollTo);
|
|
486
468
|
}
|
|
487
469
|
else {
|
|
488
|
-
this.navigationRightButtonDisabled
|
|
489
|
-
this.navigationLeftButtonDisabled
|
|
470
|
+
this.navigationRightButtonDisabled.set(Math.abs(this.currentOffset()) >= maxScrollableWidth);
|
|
471
|
+
this.navigationLeftButtonDisabled.set(this.currentOffset() >= 0);
|
|
490
472
|
}
|
|
491
473
|
this.scrollingCount++;
|
|
492
474
|
}
|
|
493
|
-
this.cd.detectChanges();
|
|
494
475
|
}
|
|
495
476
|
}
|
|
496
477
|
/**
|
|
@@ -500,12 +481,13 @@ class EdsTabs {
|
|
|
500
481
|
* @param isAnimated Whether the tab activation should be animated
|
|
501
482
|
*/
|
|
502
483
|
setScrollToTabIndex(index, isAnimated = true) {
|
|
503
|
-
const
|
|
484
|
+
const headers = this.edsTabsHeaders();
|
|
485
|
+
const activeTab = headers?.nativeElement.children.item(index);
|
|
504
486
|
if (activeTab && !this.isActiveTabFullyVisible(activeTab) && !this.isMainNavigation()) {
|
|
505
487
|
let scrollTo = 0;
|
|
506
488
|
let subsetWidth = 0;
|
|
507
489
|
for (let i = 0; i <= index; i++) {
|
|
508
|
-
subsetWidth +=
|
|
490
|
+
subsetWidth += headers.nativeElement.children.item(i).clientWidth;
|
|
509
491
|
}
|
|
510
492
|
scrollTo = this.edsTabsHeadersContainerWidth / 2 - subsetWidth;
|
|
511
493
|
if (Math.abs(scrollTo) > this.edsTabsHeadersWidth - this.edsTabsHeadersContainerWidth + this.scrollOffset) {
|
|
@@ -524,24 +506,27 @@ class EdsTabs {
|
|
|
524
506
|
* @param isAnimated Whether the tab activation should be animated
|
|
525
507
|
*/
|
|
526
508
|
setScrollTo(scrollTo, isAnimated = true) {
|
|
509
|
+
const headers = this.edsTabsHeaders();
|
|
510
|
+
if (!headers) {
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
527
513
|
const timings = isAnimated ? '500ms cubic-bezier(0.35, 0, 0.25, 1)' : 0;
|
|
528
514
|
const animation = this.builder.build([animate(timings, style({ 'margin-left': +scrollTo + 'px' }))]);
|
|
529
|
-
this.player = animation.create(
|
|
515
|
+
this.player = animation.create(headers.nativeElement);
|
|
530
516
|
this.player.play();
|
|
531
|
-
this.currentOffset
|
|
517
|
+
this.currentOffset.set(scrollTo);
|
|
532
518
|
if (scrollTo === 0) {
|
|
533
|
-
this.navigationLeftButtonDisabled
|
|
519
|
+
this.navigationLeftButtonDisabled.set(true);
|
|
534
520
|
}
|
|
535
|
-
if (Math.abs(this.currentOffset) < this.edsTabsHeadersWidth - this.edsTabsHeadersContainerWidth + this.scrollOffset) {
|
|
536
|
-
this.navigationRightButtonDisabled
|
|
521
|
+
if (Math.abs(this.currentOffset()) < this.edsTabsHeadersWidth - this.edsTabsHeadersContainerWidth + this.scrollOffset) {
|
|
522
|
+
this.navigationRightButtonDisabled.set(false);
|
|
537
523
|
}
|
|
538
|
-
if (this.currentOffset < 0) {
|
|
539
|
-
this.navigationLeftButtonDisabled
|
|
524
|
+
if (this.currentOffset() < 0) {
|
|
525
|
+
this.navigationLeftButtonDisabled.set(false);
|
|
540
526
|
}
|
|
541
527
|
if (Math.abs(scrollTo) === this.edsTabsHeadersWidth - this.edsTabsHeadersContainerWidth + this.scrollOffset) {
|
|
542
|
-
this.navigationRightButtonDisabled
|
|
528
|
+
this.navigationRightButtonDisabled.set(true);
|
|
543
529
|
}
|
|
544
|
-
this.cd.detectChanges();
|
|
545
530
|
}
|
|
546
531
|
/**
|
|
547
532
|
* Checks if the active tab is fully visible
|
|
@@ -555,52 +540,20 @@ class EdsTabs {
|
|
|
555
540
|
return fullyVisible;
|
|
556
541
|
}
|
|
557
542
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabs, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
558
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsTabs, isStandalone: true, selector: "eds-tabs", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, activeTabIndex: { classPropertyName: "activeTabIndex", publicName: "activeTabIndex", isSignal: false, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, isMainNavigation: { classPropertyName: "isMainNavigation", publicName: "isMainNavigation", isSignal: true, isRequired: false, transformFunction: null }, isFlat: { classPropertyName: "isFlat", publicName: "isFlat", isSignal: true, isRequired: false, transformFunction: null }, isNavBar: { classPropertyName: "isNavBar", publicName: "isNavBar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tabClose: "tabClose", tabActivate: "tabActivate", tabClick: "tabClick" }, host: { properties: { "attr.data-e2e": "e2eAttr()", "class": "hostColorClass()" }, classAttribute: "eds-tabs" }, queries: [{ propertyName: "_tabs", predicate: i0.forwardRef(() => EdsTab) }], viewQueries: [{ propertyName: "edsTabsHeadersContainer", first: true, predicate: ["edsTabsHeadersContainer"], descendants: true }, { propertyName: "edsTabsHeaders", first: true, predicate: ["edsTabsHeaders"], descendants: true }, { propertyName: "edsTabsRightContent", first: true, predicate: ["edsTabsRightContent"], descendants: true }, { propertyName: "edsTabListItems", predicate: ["edsTabListItems"], descendants: true }], usesOnChanges: true, hostDirectives: [{ directive: i1.EdsColorDirective, inputs: ["edsBrand", "edsBrand", "edsNeutral", "edsNeutral", "edsColorVariant", "edsColorVariant"] }], ngImport: i0, template: "<div #edsTabsHeadersContainer class=\"eds-tabs-wrapper\" [class.eds-tabs-wrapper--scrolling]=\"scrolling\">\n <div class=\"eds-tabs-navigation\">\n <div class=\"eds-tabs-navigation__left-item\">\n <button edsIconButton\n (click)=\"goToLeft()\"\n [disabled]=\"navigationLeftButtonDisabled\"\n icon=\"caret-left:core\"\n ariaLabel=\"Scroll left\">\n </button>\n </div>\n\n <ul #edsTabsHeaders class=\"eds-tab-items\" [attr.data-offset]=\"currentOffset\" role=\"tablist\" [attr.aria-label]=\"ariaLabel\">\n @for (tab of tabs; let i = $index; track tab) {\n @if (tab.isVisible$ | async) {\n <li #edsTabListItems\n class=\"eds-tab-item\"\n id=\"tab-{{ i + 1 }}-{{ tabId }}\"\n [tabindex]=\"i === activeTabIndex ? '0' : '-1'\"\n role=\"tab\"\n attr.aria-controls=\"tabpanel-{{ i + 1 }}-{{ tabId }}\"\n [attr.aria-selected]=\"i === activeTabIndex\"\n [class.eds-tab-item--active]=\"i === activeTabIndex\"\n [class.eds-tab-item--disabled]=\"tab.isDisabled$ | async\"\n attr.aria-disabled=\"{{ tab.isDisabled$ | async }}\"\n (click)=\"tabListItemClick(i)\"\n (keydown)=\"onKeydown(i, $event)\">\n <ng-template [cdkPortalOutlet]=\"tab.templateHeader().templatePortal\"></ng-template>\n\n @if (tab.isClosable$ | async) {\n <button edsIconButton\n [tabindex]=\"-1\"\n ariaLabel=\"Closable\"\n rounded\n class=\"eds-tab-close-button\"\n icon=\"x:core\"\n size=\"s\"\n [disabled]=\"tab.isDisabled$ | async\"\n (buttonClick)=\"close(i, $event)\">\n </button>\n }\n </li>\n }\n }\n </ul>\n\n <div class=\"eds-tabs-navigation__right-item\">\n <button edsIconButton\n (click)=\"goToRight()\"\n [disabled]=\"navigationRightButtonDisabled\"\n icon=\"caret-right:core\"\n ariaLabel=\"Scroll right\">\n </button>\n </div>\n </div>\n <div #edsTabsRightContent class=\"eds-tabs-right-content-wrapper\">\n <ng-content select=\"eds-tabs-right-content\"></ng-content>\n </div>\n</div>\n\n@for (tab of tabs; let i = $index; track tab) {\n @if (i === activeTabIndex && (tab.isDisabled$ | async) === false && tab.templateBody) {\n <div id=\"tabpanel-{{ i + 1 }}-{{ tabId }}\" class=\"eds-tab-body-container\" role=\"tabpanel\" attr.aria-labelledby=\"tab-{{ i + 1 }}-{{ tabId }}\">\n <ng-template [cdkPortalOutlet]=\"tab.templateBody.templatePortal\" (attached)=\"onAttached(i + 1)\"></ng-template>\n </div>\n }\n}\n", styles: [".eui-21 :host.eds-tabs{--_label-font: var(--eds-f-label-m-semibold);--_sublabel-font: var(--eds-f-paragraph-s)}.eui-21 :host.eds-tabs{display:flex;flex-direction:column;width:100%}.eui-21 :host.eds-tabs .eds-tab-item{--_border-color: transparent;--_color: var(--eds-c-foreground-subtler);--_color-hover: var(--eds-c-foreground)}.eui-21 :host.eds-tabs .eds-tab-item--active{--_color: var(--eds-c-foreground);--_border-color: var(--eds-c-border)}.eui-21 :host.eds-tabs .eds-tab-item--disabled{--_color: var(--eds-c-foreground-disabled);--_icon-color: var(--eds-c-foreground-disabled);--_border-color-hover: transparent}.eui-21 :host.eds-tabs--brand .eds-tab-item{--_color: var(--eds-c-foreground-inverted);--_color-hover: var(--eds-c-on-surface-brand)}.eui-21 :host.eds-tabs--brand .eds-tab-item--active{--_color: var(--eds-c-on-surface-brand);--_border-color: var(--eds-c-on-surface-brand)}.eui-21 :host.eds-tabs--neutral .eds-tab-item{--_color: var(--eds-c-foreground-subtler);--_color-hover: var(--eds-c-foreground)}.eui-21 :host.eds-tabs--neutral .eds-tab-item--active{--_color: var(--eds-c-foreground);--_border-color: var(--eds-c-foreground)}.eui-21 :host.eds-tabs.eds-tabs--navbar .eds-tabs-wrapper{border-bottom:none}.eui-21 :host.eds-tabs .eds-tabs-wrapper{align-items:center;border-bottom:var(--eds-bw-xs) solid var(--eds-c-border-divider);display:flex;overflow:hidden;position:relative}.eui-21 :host.eds-tabs .eds-tabs-wrapper .eds-tabs-right-content-wrapper{display:flex;margin-left:var(--eds-sp-m)}.eui-21 :host.eds-tabs .eds-tab-items{display:flex;height:100%;list-style:none;list-style-type:none;margin:0;padding:0}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item{align-items:center;background-color:inherit;border:var(--eui-bw-none);border-bottom:var(--eds-bw-s) solid transparent;color:var(--_color);cursor:pointer;display:flex;padding:var(--eds-sp-s) var(--eds-sp-m) var(--eds-sp-s) var(--eds-sp-m);position:relative;text-align:center;gap:var(--eds-sp-2xs)}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper{display:flex;align-items:center;gap:var(--eds-sp-s);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper{display:flex;flex-direction:column}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper ::ng-deep .eds-tab-header-label{display:block;font-weight:700;line-height:var(--eds-sp-l);color:var(--_color);font:var(--_label-font)}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper ::ng-deep .eds-tab-header-sub-label{font-weight:400;color:var(--_color);font:var(--_sublabel-font)}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-left-content,.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-right-content{display:flex}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item--active{border-color:var(--_border-color)}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item--disabled{cursor:not-allowed;pointer-events:none}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item:hover:not(.eds-tab-header--active) ::ng-deep .eds-tab-header-label{color:var(--_color-hover)}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item:hover:not(.eds-tab-header--active) ::ng-deep .eds-tab-header-sub-label{color:var(--_color-hover)}.eui-21 :host.eds-tabs .eds-tabs-navigation{display:flex;overflow:hidden;position:relative;width:100%}.eui-21 :host.eds-tabs .eds-tabs-navigation .eds-tabs-navigation__left-item,.eui-21 :host.eds-tabs .eds-tabs-navigation .eds-tabs-navigation__right-item{align-self:center;background-color:var(--eui-c-surface-page);display:none;height:100%;position:absolute;z-index:1}.eui-21 :host.eds-tabs .eds-tabs-navigation .eds-tabs-navigation__left-item{left:0}.eui-21 :host.eds-tabs .eds-tabs-navigation .eds-tabs-navigation__right-item{right:0}.eui-21 :host.eds-tabs .eds-tabs-wrapper.eui-tabs-wrapper--scrolling .eds-tab-items{padding-left:var(--eui-s-5xl)}.eui-21 :host.eds-tabs .eds-tabs-wrapper.eui-tabs-wrapper--scrolling .eds-tab-items .eds-tab-item{min-width:unset;overflow:unset}.eui-21 :host.eds-tabs .eds-tabs-wrapper.eui-tabs-wrapper--scrolling .eds-tabs-navigation__left-item,.eui-21 :host.eds-tabs .eds-tabs-wrapper.eui-tabs-wrapper--scrolling .eds-tabs-navigation__right-item{display:flex}.eui-21 :host.eds-tabs .eds-tab-body-container ::ng-deep .eds-tab__body{padding:var(--eui-s-s)}.eui-21 :host.eds-tabs .eds-tab-body-container ::ng-deep .eds-tab__body:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-tabs .eds-tab-body-container ::ng-deep .eds-tab__body.eds-tab__body--no-padding{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i3.EdsIconButton, selector: "button[edsIconButton]", inputs: ["icon", "color", "size", "ariaLabel", "rounded", "disabled"], outputs: ["buttonClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
543
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsTabs, isStandalone: true, selector: "eds-tabs", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, activeTabIndex: { classPropertyName: "activeTabIndex", publicName: "activeTabIndex", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, isMainNavigation: { classPropertyName: "isMainNavigation", publicName: "isMainNavigation", isSignal: true, isRequired: false, transformFunction: null }, isFlat: { classPropertyName: "isFlat", publicName: "isFlat", isSignal: true, isRequired: false, transformFunction: null }, isNavBar: { classPropertyName: "isNavBar", publicName: "isNavBar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeTabIndex: "activeTabIndexChange", tabClose: "tabClose", tabActivate: "tabActivate", tabClick: "tabClick" }, host: { properties: { "attr.data-e2e": "e2eAttr()", "attr.color": "color()", "attr.navbar": "isNavBar() || null" }, classAttribute: "eds-tabs" }, queries: [{ propertyName: "_tabs", predicate: EdsTab, isSignal: true }], viewQueries: [{ propertyName: "edsTabsHeadersContainer", first: true, predicate: ["edsTabsHeadersContainer"], descendants: true, isSignal: true }, { propertyName: "edsTabsHeaders", first: true, predicate: ["edsTabsHeaders"], descendants: true, isSignal: true }, { propertyName: "edsTabsRightContent", first: true, predicate: ["edsTabsRightContent"], descendants: true, isSignal: true }, { propertyName: "edsTabListItems", predicate: ["edsTabListItems"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #edsTabsHeadersContainer class=\"eds-tabs-wrapper\" [class.eds-tabs-wrapper--scrolling]=\"scrolling()\">\n <div class=\"eds-tabs-navigation\">\n <div class=\"eds-tabs-navigation__left-item\">\n <button edsIconButton\n (click)=\"goToLeft()\"\n [disabled]=\"navigationLeftButtonDisabled()\"\n icon=\"caret-left:core\"\n ariaLabel=\"Scroll left\">\n </button>\n </div>\n\n <ul #edsTabsHeaders class=\"eds-tab-items\" [attr.data-offset]=\"currentOffset()\" role=\"tablist\" [attr.aria-label]=\"ariaLabel()\">\n @for (tab of tabs(); let i = $index; track tab) {\n @if (tab.isVisible()) {\n <li #edsTabListItems\n class=\"eds-tab-item\"\n id=\"tab-{{ i + 1 }}-{{ tabId }}\"\n [tabindex]=\"i === activeTabIndex() ? '0' : '-1'\"\n role=\"tab\"\n attr.aria-controls=\"tabpanel-{{ i + 1 }}-{{ tabId }}\"\n [attr.aria-selected]=\"i === activeTabIndex()\"\n [class.eds-tab-item--active]=\"i === activeTabIndex()\"\n [class.eds-tab-item--disabled]=\"tab.isDisabled()\"\n [attr.aria-disabled]=\"tab.isDisabled()\"\n (click)=\"tabListItemClick(i)\"\n (keydown)=\"onKeydown(i, $event)\">\n <ng-template [cdkPortalOutlet]=\"tab.templateHeader().templatePortal\"></ng-template>\n\n @if (tab.isClosable()) {\n <button edsIconButton\n [tabindex]=\"-1\"\n ariaLabel=\"Closable\"\n rounded\n class=\"eds-tab-close-button\"\n icon=\"x:core\"\n size=\"s\"\n [disabled]=\"tab.isDisabled()\"\n (buttonClick)=\"close(i, $event)\">\n </button>\n }\n </li>\n }\n }\n </ul>\n\n <div class=\"eds-tabs-navigation__right-item\">\n <button edsIconButton\n (click)=\"goToRight()\"\n [disabled]=\"navigationRightButtonDisabled()\"\n icon=\"caret-right:core\"\n ariaLabel=\"Scroll right\">\n </button>\n </div>\n </div>\n <div #edsTabsRightContent class=\"eds-tabs-right-content-wrapper\">\n <ng-content select=\"eds-tabs-right-content\"></ng-content>\n </div>\n</div>\n\n@for (tab of tabs(); let i = $index; track tab) {\n @if (i === activeTabIndex() && tab.isDisabled() === false && tab.templateBody()) {\n <div id=\"tabpanel-{{ i + 1 }}-{{ tabId }}\" class=\"eds-tab-body-container\" role=\"tabpanel\" attr.aria-labelledby=\"tab-{{ i + 1 }}-{{ tabId }}\">\n <ng-template [cdkPortalOutlet]=\"tab.templateBody()!.templatePortal\" (attached)=\"onAttached(i + 1)\"></ng-template>\n </div>\n }\n}\n", styles: [":host{--_eds-tabs-label-font: var(--eds-f-label-m-semibold);--_eds-tabs-sublabel-font: var(--eds-f-paragraph-s);display:flex;flex-direction:column;width:100%}:host .eds-tab-item{--_eds-tabs-border-color: transparent;--_eds-tabs-color: var(--eds-c-foreground-subtler);--_eds-tabs-color-hover: var(--eds-c-foreground)}:host .eds-tab-item--active{--_eds-tabs-color: var(--eds-c-foreground);--_eds-tabs-border-color: var(--eds-c-border-primary)}:host .eds-tab-item--disabled{--_eds-tabs-color: var(--eds-c-foreground-disabled);--_eds-tabs-icon-color: var(--eds-c-foreground-disabled);--_eds-tabs-border-color-hover: transparent}:host([color=brand]) .eds-tab-item{--_eds-tabs-color: var(--eds-c-foreground-inverted);--_eds-tabs-color-hover: var(--eds-c-on-surface-brand)}:host([color=brand]) .eds-tab-item--active{--_eds-tabs-color: var(--eds-c-on-surface-brand);--_eds-tabs-border-color: var(--eds-c-on-surface-brand)}:host([color=neutral]) .eds-tab-item{--_eds-tabs-color: var(--eds-c-foreground-subtler);--_eds-tabs-color-hover: var(--eds-c-foreground)}:host([color=neutral]) .eds-tab-item--active{--_eds-tabs-color: var(--eds-c-foreground);--_eds-tabs-border-color: var(--eds-c-foreground)}:host([navbar]) .eds-tabs-wrapper{border-bottom:none}:host .eds-tabs-wrapper{align-items:center;border-bottom:var(--eds-bw-xs) solid var(--eds-c-border-divider);display:flex;overflow:hidden;position:relative}:host .eds-tabs-wrapper .eds-tabs-right-content-wrapper{display:flex;margin-left:var(--eds-sp-m)}:host .eds-tab-items{display:flex;height:100%;list-style:none;list-style-type:none;margin:0;padding:0}:host .eds-tab-items .eds-tab-item{align-items:center;background-color:inherit;border:var(--eds-bw-none);border-bottom:var(--eds-bw-s) solid transparent;color:var(--_eds-tabs-color);cursor:pointer;display:flex;padding:var(--eds-sp-s) var(--eds-sp-m) var(--eds-sp-s) var(--eds-sp-m);position:relative;text-align:center;gap:var(--eds-sp-2xs)}:host .eds-tab-items .eds-tab-item:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper{display:flex;align-items:center;gap:var(--eds-sp-s);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper{display:flex;flex-direction:column}:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper ::ng-deep .eds-tab-header-label{display:block;font-weight:700;line-height:var(--eds-sp-l);color:var(--_eds-tabs-color);font:var(--_eds-tabs-label-font)}:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper ::ng-deep .eds-tab-header-sub-label{font-weight:400;color:var(--_eds-tabs-color);font:var(--_eds-tabs-sublabel-font)}:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-left-content,:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-right-content{display:flex}:host .eds-tab-items .eds-tab-item--active{border-color:var(--_eds-tabs-border-color)}:host .eds-tab-items .eds-tab-item--disabled{cursor:not-allowed;pointer-events:none}:host .eds-tab-items .eds-tab-item:hover:not(.eds-tab-header--active) ::ng-deep .eds-tab-header-label{color:var(--_eds-tabs-color-hover)}:host .eds-tab-items .eds-tab-item:hover:not(.eds-tab-header--active) ::ng-deep .eds-tab-header-sub-label{color:var(--_eds-tabs-color-hover)}:host .eds-tabs-navigation{display:flex;overflow:hidden;position:relative;width:100%}:host .eds-tabs-navigation .eds-tabs-navigation__left-item,:host .eds-tabs-navigation .eds-tabs-navigation__right-item{align-self:center;background-color:var(--eds-c-surface-elevation);display:none;height:100%;position:absolute;z-index:1}:host .eds-tabs-navigation .eds-tabs-navigation__left-item{left:0}:host .eds-tabs-navigation .eds-tabs-navigation__right-item{right:0}:host .eds-tabs-wrapper--scrolling .eds-tab-items{padding-left:var(--eds-sp-5xl)}:host .eds-tabs-wrapper--scrolling .eds-tab-items .eds-tab-item{min-width:unset;overflow:unset}:host .eds-tabs-wrapper--scrolling .eds-tabs-navigation__left-item,:host .eds-tabs-wrapper--scrolling .eds-tabs-navigation__right-item{display:flex}:host .eds-tab-body-container ::ng-deep .eds-tab__body{padding:var(--eds-sp-s)}:host .eds-tab-body-container ::ng-deep .eds-tab__body:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}:host .eds-tab-body-container ::ng-deep .eds-tab__body.eds-tab__body--no-padding{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i2.EdsIconButton, selector: "button[edsIconButton]", inputs: ["icon", "color", "size", "ariaLabel", "rounded", "disabled"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
559
544
|
}
|
|
560
545
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabs, decorators: [{
|
|
561
546
|
type: Component,
|
|
562
547
|
args: [{ selector: 'eds-tabs', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
563
548
|
class: 'eds-tabs',
|
|
564
549
|
'[attr.data-e2e]': 'e2eAttr()',
|
|
565
|
-
'[
|
|
550
|
+
'[attr.color]': 'color()',
|
|
551
|
+
'[attr.navbar]': 'isNavBar() || null',
|
|
566
552
|
}, imports: [
|
|
567
|
-
AsyncPipe,
|
|
568
553
|
PortalModule,
|
|
569
554
|
...EDS_ICON_BUTTON,
|
|
570
|
-
],
|
|
571
|
-
|
|
572
|
-
directive: EdsColorDirective,
|
|
573
|
-
inputs: [
|
|
574
|
-
'edsBrand',
|
|
575
|
-
'edsNeutral',
|
|
576
|
-
'edsColorVariant',
|
|
577
|
-
],
|
|
578
|
-
},
|
|
579
|
-
], template: "<div #edsTabsHeadersContainer class=\"eds-tabs-wrapper\" [class.eds-tabs-wrapper--scrolling]=\"scrolling\">\n <div class=\"eds-tabs-navigation\">\n <div class=\"eds-tabs-navigation__left-item\">\n <button edsIconButton\n (click)=\"goToLeft()\"\n [disabled]=\"navigationLeftButtonDisabled\"\n icon=\"caret-left:core\"\n ariaLabel=\"Scroll left\">\n </button>\n </div>\n\n <ul #edsTabsHeaders class=\"eds-tab-items\" [attr.data-offset]=\"currentOffset\" role=\"tablist\" [attr.aria-label]=\"ariaLabel\">\n @for (tab of tabs; let i = $index; track tab) {\n @if (tab.isVisible$ | async) {\n <li #edsTabListItems\n class=\"eds-tab-item\"\n id=\"tab-{{ i + 1 }}-{{ tabId }}\"\n [tabindex]=\"i === activeTabIndex ? '0' : '-1'\"\n role=\"tab\"\n attr.aria-controls=\"tabpanel-{{ i + 1 }}-{{ tabId }}\"\n [attr.aria-selected]=\"i === activeTabIndex\"\n [class.eds-tab-item--active]=\"i === activeTabIndex\"\n [class.eds-tab-item--disabled]=\"tab.isDisabled$ | async\"\n attr.aria-disabled=\"{{ tab.isDisabled$ | async }}\"\n (click)=\"tabListItemClick(i)\"\n (keydown)=\"onKeydown(i, $event)\">\n <ng-template [cdkPortalOutlet]=\"tab.templateHeader().templatePortal\"></ng-template>\n\n @if (tab.isClosable$ | async) {\n <button edsIconButton\n [tabindex]=\"-1\"\n ariaLabel=\"Closable\"\n rounded\n class=\"eds-tab-close-button\"\n icon=\"x:core\"\n size=\"s\"\n [disabled]=\"tab.isDisabled$ | async\"\n (buttonClick)=\"close(i, $event)\">\n </button>\n }\n </li>\n }\n }\n </ul>\n\n <div class=\"eds-tabs-navigation__right-item\">\n <button edsIconButton\n (click)=\"goToRight()\"\n [disabled]=\"navigationRightButtonDisabled\"\n icon=\"caret-right:core\"\n ariaLabel=\"Scroll right\">\n </button>\n </div>\n </div>\n <div #edsTabsRightContent class=\"eds-tabs-right-content-wrapper\">\n <ng-content select=\"eds-tabs-right-content\"></ng-content>\n </div>\n</div>\n\n@for (tab of tabs; let i = $index; track tab) {\n @if (i === activeTabIndex && (tab.isDisabled$ | async) === false && tab.templateBody) {\n <div id=\"tabpanel-{{ i + 1 }}-{{ tabId }}\" class=\"eds-tab-body-container\" role=\"tabpanel\" attr.aria-labelledby=\"tab-{{ i + 1 }}-{{ tabId }}\">\n <ng-template [cdkPortalOutlet]=\"tab.templateBody.templatePortal\" (attached)=\"onAttached(i + 1)\"></ng-template>\n </div>\n }\n}\n", styles: [".eui-21 :host.eds-tabs{--_label-font: var(--eds-f-label-m-semibold);--_sublabel-font: var(--eds-f-paragraph-s)}.eui-21 :host.eds-tabs{display:flex;flex-direction:column;width:100%}.eui-21 :host.eds-tabs .eds-tab-item{--_border-color: transparent;--_color: var(--eds-c-foreground-subtler);--_color-hover: var(--eds-c-foreground)}.eui-21 :host.eds-tabs .eds-tab-item--active{--_color: var(--eds-c-foreground);--_border-color: var(--eds-c-border)}.eui-21 :host.eds-tabs .eds-tab-item--disabled{--_color: var(--eds-c-foreground-disabled);--_icon-color: var(--eds-c-foreground-disabled);--_border-color-hover: transparent}.eui-21 :host.eds-tabs--brand .eds-tab-item{--_color: var(--eds-c-foreground-inverted);--_color-hover: var(--eds-c-on-surface-brand)}.eui-21 :host.eds-tabs--brand .eds-tab-item--active{--_color: var(--eds-c-on-surface-brand);--_border-color: var(--eds-c-on-surface-brand)}.eui-21 :host.eds-tabs--neutral .eds-tab-item{--_color: var(--eds-c-foreground-subtler);--_color-hover: var(--eds-c-foreground)}.eui-21 :host.eds-tabs--neutral .eds-tab-item--active{--_color: var(--eds-c-foreground);--_border-color: var(--eds-c-foreground)}.eui-21 :host.eds-tabs.eds-tabs--navbar .eds-tabs-wrapper{border-bottom:none}.eui-21 :host.eds-tabs .eds-tabs-wrapper{align-items:center;border-bottom:var(--eds-bw-xs) solid var(--eds-c-border-divider);display:flex;overflow:hidden;position:relative}.eui-21 :host.eds-tabs .eds-tabs-wrapper .eds-tabs-right-content-wrapper{display:flex;margin-left:var(--eds-sp-m)}.eui-21 :host.eds-tabs .eds-tab-items{display:flex;height:100%;list-style:none;list-style-type:none;margin:0;padding:0}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item{align-items:center;background-color:inherit;border:var(--eui-bw-none);border-bottom:var(--eds-bw-s) solid transparent;color:var(--_color);cursor:pointer;display:flex;padding:var(--eds-sp-s) var(--eds-sp-m) var(--eds-sp-s) var(--eds-sp-m);position:relative;text-align:center;gap:var(--eds-sp-2xs)}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper{display:flex;align-items:center;gap:var(--eds-sp-s);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper{display:flex;flex-direction:column}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper ::ng-deep .eds-tab-header-label{display:block;font-weight:700;line-height:var(--eds-sp-l);color:var(--_color);font:var(--_label-font)}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper ::ng-deep .eds-tab-header-sub-label{font-weight:400;color:var(--_color);font:var(--_sublabel-font)}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-left-content,.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-right-content{display:flex}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item--active{border-color:var(--_border-color)}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item--disabled{cursor:not-allowed;pointer-events:none}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item:hover:not(.eds-tab-header--active) ::ng-deep .eds-tab-header-label{color:var(--_color-hover)}.eui-21 :host.eds-tabs .eds-tab-items .eds-tab-item:hover:not(.eds-tab-header--active) ::ng-deep .eds-tab-header-sub-label{color:var(--_color-hover)}.eui-21 :host.eds-tabs .eds-tabs-navigation{display:flex;overflow:hidden;position:relative;width:100%}.eui-21 :host.eds-tabs .eds-tabs-navigation .eds-tabs-navigation__left-item,.eui-21 :host.eds-tabs .eds-tabs-navigation .eds-tabs-navigation__right-item{align-self:center;background-color:var(--eui-c-surface-page);display:none;height:100%;position:absolute;z-index:1}.eui-21 :host.eds-tabs .eds-tabs-navigation .eds-tabs-navigation__left-item{left:0}.eui-21 :host.eds-tabs .eds-tabs-navigation .eds-tabs-navigation__right-item{right:0}.eui-21 :host.eds-tabs .eds-tabs-wrapper.eui-tabs-wrapper--scrolling .eds-tab-items{padding-left:var(--eui-s-5xl)}.eui-21 :host.eds-tabs .eds-tabs-wrapper.eui-tabs-wrapper--scrolling .eds-tab-items .eds-tab-item{min-width:unset;overflow:unset}.eui-21 :host.eds-tabs .eds-tabs-wrapper.eui-tabs-wrapper--scrolling .eds-tabs-navigation__left-item,.eui-21 :host.eds-tabs .eds-tabs-wrapper.eui-tabs-wrapper--scrolling .eds-tabs-navigation__right-item{display:flex}.eui-21 :host.eds-tabs .eds-tab-body-container ::ng-deep .eds-tab__body{padding:var(--eui-s-s)}.eui-21 :host.eds-tabs .eds-tab-body-container ::ng-deep .eds-tab__body:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-tabs .eds-tab-body-container ::ng-deep .eds-tab__body.eds-tab__body--no-padding{padding:0}\n"] }]
|
|
580
|
-
}], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], activeTabIndex: [{
|
|
581
|
-
type: Input
|
|
582
|
-
}], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], isMainNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMainNavigation", required: false }] }], isFlat: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFlat", required: false }] }], isNavBar: [{ type: i0.Input, args: [{ isSignal: true, alias: "isNavBar", required: false }] }], tabClose: [{
|
|
583
|
-
type: Output
|
|
584
|
-
}], tabActivate: [{
|
|
585
|
-
type: Output
|
|
586
|
-
}], tabClick: [{
|
|
587
|
-
type: Output
|
|
588
|
-
}], _tabs: [{
|
|
589
|
-
type: ContentChildren,
|
|
590
|
-
args: [forwardRef(() => EdsTab), { descendants: false }]
|
|
591
|
-
}], edsTabsHeadersContainer: [{
|
|
592
|
-
type: ViewChild,
|
|
593
|
-
args: ['edsTabsHeadersContainer']
|
|
594
|
-
}], edsTabsHeaders: [{
|
|
595
|
-
type: ViewChild,
|
|
596
|
-
args: ['edsTabsHeaders']
|
|
597
|
-
}], edsTabsRightContent: [{
|
|
598
|
-
type: ViewChild,
|
|
599
|
-
args: ['edsTabsRightContent']
|
|
600
|
-
}], edsTabListItems: [{
|
|
601
|
-
type: ViewChildren,
|
|
602
|
-
args: ['edsTabListItems']
|
|
603
|
-
}] } });
|
|
555
|
+
], template: "<div #edsTabsHeadersContainer class=\"eds-tabs-wrapper\" [class.eds-tabs-wrapper--scrolling]=\"scrolling()\">\n <div class=\"eds-tabs-navigation\">\n <div class=\"eds-tabs-navigation__left-item\">\n <button edsIconButton\n (click)=\"goToLeft()\"\n [disabled]=\"navigationLeftButtonDisabled()\"\n icon=\"caret-left:core\"\n ariaLabel=\"Scroll left\">\n </button>\n </div>\n\n <ul #edsTabsHeaders class=\"eds-tab-items\" [attr.data-offset]=\"currentOffset()\" role=\"tablist\" [attr.aria-label]=\"ariaLabel()\">\n @for (tab of tabs(); let i = $index; track tab) {\n @if (tab.isVisible()) {\n <li #edsTabListItems\n class=\"eds-tab-item\"\n id=\"tab-{{ i + 1 }}-{{ tabId }}\"\n [tabindex]=\"i === activeTabIndex() ? '0' : '-1'\"\n role=\"tab\"\n attr.aria-controls=\"tabpanel-{{ i + 1 }}-{{ tabId }}\"\n [attr.aria-selected]=\"i === activeTabIndex()\"\n [class.eds-tab-item--active]=\"i === activeTabIndex()\"\n [class.eds-tab-item--disabled]=\"tab.isDisabled()\"\n [attr.aria-disabled]=\"tab.isDisabled()\"\n (click)=\"tabListItemClick(i)\"\n (keydown)=\"onKeydown(i, $event)\">\n <ng-template [cdkPortalOutlet]=\"tab.templateHeader().templatePortal\"></ng-template>\n\n @if (tab.isClosable()) {\n <button edsIconButton\n [tabindex]=\"-1\"\n ariaLabel=\"Closable\"\n rounded\n class=\"eds-tab-close-button\"\n icon=\"x:core\"\n size=\"s\"\n [disabled]=\"tab.isDisabled()\"\n (buttonClick)=\"close(i, $event)\">\n </button>\n }\n </li>\n }\n }\n </ul>\n\n <div class=\"eds-tabs-navigation__right-item\">\n <button edsIconButton\n (click)=\"goToRight()\"\n [disabled]=\"navigationRightButtonDisabled()\"\n icon=\"caret-right:core\"\n ariaLabel=\"Scroll right\">\n </button>\n </div>\n </div>\n <div #edsTabsRightContent class=\"eds-tabs-right-content-wrapper\">\n <ng-content select=\"eds-tabs-right-content\"></ng-content>\n </div>\n</div>\n\n@for (tab of tabs(); let i = $index; track tab) {\n @if (i === activeTabIndex() && tab.isDisabled() === false && tab.templateBody()) {\n <div id=\"tabpanel-{{ i + 1 }}-{{ tabId }}\" class=\"eds-tab-body-container\" role=\"tabpanel\" attr.aria-labelledby=\"tab-{{ i + 1 }}-{{ tabId }}\">\n <ng-template [cdkPortalOutlet]=\"tab.templateBody()!.templatePortal\" (attached)=\"onAttached(i + 1)\"></ng-template>\n </div>\n }\n}\n", styles: [":host{--_eds-tabs-label-font: var(--eds-f-label-m-semibold);--_eds-tabs-sublabel-font: var(--eds-f-paragraph-s);display:flex;flex-direction:column;width:100%}:host .eds-tab-item{--_eds-tabs-border-color: transparent;--_eds-tabs-color: var(--eds-c-foreground-subtler);--_eds-tabs-color-hover: var(--eds-c-foreground)}:host .eds-tab-item--active{--_eds-tabs-color: var(--eds-c-foreground);--_eds-tabs-border-color: var(--eds-c-border-primary)}:host .eds-tab-item--disabled{--_eds-tabs-color: var(--eds-c-foreground-disabled);--_eds-tabs-icon-color: var(--eds-c-foreground-disabled);--_eds-tabs-border-color-hover: transparent}:host([color=brand]) .eds-tab-item{--_eds-tabs-color: var(--eds-c-foreground-inverted);--_eds-tabs-color-hover: var(--eds-c-on-surface-brand)}:host([color=brand]) .eds-tab-item--active{--_eds-tabs-color: var(--eds-c-on-surface-brand);--_eds-tabs-border-color: var(--eds-c-on-surface-brand)}:host([color=neutral]) .eds-tab-item{--_eds-tabs-color: var(--eds-c-foreground-subtler);--_eds-tabs-color-hover: var(--eds-c-foreground)}:host([color=neutral]) .eds-tab-item--active{--_eds-tabs-color: var(--eds-c-foreground);--_eds-tabs-border-color: var(--eds-c-foreground)}:host([navbar]) .eds-tabs-wrapper{border-bottom:none}:host .eds-tabs-wrapper{align-items:center;border-bottom:var(--eds-bw-xs) solid var(--eds-c-border-divider);display:flex;overflow:hidden;position:relative}:host .eds-tabs-wrapper .eds-tabs-right-content-wrapper{display:flex;margin-left:var(--eds-sp-m)}:host .eds-tab-items{display:flex;height:100%;list-style:none;list-style-type:none;margin:0;padding:0}:host .eds-tab-items .eds-tab-item{align-items:center;background-color:inherit;border:var(--eds-bw-none);border-bottom:var(--eds-bw-s) solid transparent;color:var(--_eds-tabs-color);cursor:pointer;display:flex;padding:var(--eds-sp-s) var(--eds-sp-m) var(--eds-sp-s) var(--eds-sp-m);position:relative;text-align:center;gap:var(--eds-sp-2xs)}:host .eds-tab-items .eds-tab-item:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper{display:flex;align-items:center;gap:var(--eds-sp-s);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper{display:flex;flex-direction:column}:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper ::ng-deep .eds-tab-header-label{display:block;font-weight:700;line-height:var(--eds-sp-l);color:var(--_eds-tabs-color);font:var(--_eds-tabs-label-font)}:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-wrapper ::ng-deep .eds-tab-header-label-wrapper ::ng-deep .eds-tab-header-sub-label{font-weight:400;color:var(--_eds-tabs-color);font:var(--_eds-tabs-sublabel-font)}:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-left-content,:host .eds-tab-items .eds-tab-item ::ng-deep .eds-tab-header-right-content{display:flex}:host .eds-tab-items .eds-tab-item--active{border-color:var(--_eds-tabs-border-color)}:host .eds-tab-items .eds-tab-item--disabled{cursor:not-allowed;pointer-events:none}:host .eds-tab-items .eds-tab-item:hover:not(.eds-tab-header--active) ::ng-deep .eds-tab-header-label{color:var(--_eds-tabs-color-hover)}:host .eds-tab-items .eds-tab-item:hover:not(.eds-tab-header--active) ::ng-deep .eds-tab-header-sub-label{color:var(--_eds-tabs-color-hover)}:host .eds-tabs-navigation{display:flex;overflow:hidden;position:relative;width:100%}:host .eds-tabs-navigation .eds-tabs-navigation__left-item,:host .eds-tabs-navigation .eds-tabs-navigation__right-item{align-self:center;background-color:var(--eds-c-surface-elevation);display:none;height:100%;position:absolute;z-index:1}:host .eds-tabs-navigation .eds-tabs-navigation__left-item{left:0}:host .eds-tabs-navigation .eds-tabs-navigation__right-item{right:0}:host .eds-tabs-wrapper--scrolling .eds-tab-items{padding-left:var(--eds-sp-5xl)}:host .eds-tabs-wrapper--scrolling .eds-tab-items .eds-tab-item{min-width:unset;overflow:unset}:host .eds-tabs-wrapper--scrolling .eds-tabs-navigation__left-item,:host .eds-tabs-wrapper--scrolling .eds-tabs-navigation__right-item{display:flex}:host .eds-tab-body-container ::ng-deep .eds-tab__body{padding:var(--eds-sp-s)}:host .eds-tab-body-container ::ng-deep .eds-tab__body:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}:host .eds-tab-body-container ::ng-deep .eds-tab__body.eds-tab__body--no-padding{padding:0}\n"] }]
|
|
556
|
+
}], ctorParameters: () => [], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], activeTabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTabIndex", required: false }] }, { type: i0.Output, args: ["activeTabIndexChange"] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], isMainNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMainNavigation", required: false }] }], isFlat: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFlat", required: false }] }], isNavBar: [{ type: i0.Input, args: [{ isSignal: true, alias: "isNavBar", required: false }] }], tabClose: [{ type: i0.Output, args: ["tabClose"] }], tabActivate: [{ type: i0.Output, args: ["tabActivate"] }], tabClick: [{ type: i0.Output, args: ["tabClick"] }], _tabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => EdsTab), { ...{ descendants: false }, isSignal: true }] }], edsTabsHeadersContainer: [{ type: i0.ViewChild, args: ['edsTabsHeadersContainer', { isSignal: true }] }], edsTabsHeaders: [{ type: i0.ViewChild, args: ['edsTabsHeaders', { isSignal: true }] }], edsTabsRightContent: [{ type: i0.ViewChild, args: ['edsTabsRightContent', { isSignal: true }] }], edsTabListItems: [{ type: i0.ViewChildren, args: ['edsTabListItems', { isSignal: true }] }] } });
|
|
604
557
|
|
|
605
558
|
class EdsTabsRightContent {
|
|
606
559
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabsRightContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -612,76 +565,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
612
565
|
}] });
|
|
613
566
|
|
|
614
567
|
class EdsTabHeaderLabel {
|
|
615
|
-
constructor() {
|
|
616
|
-
this.string = 'eds-tab-header-label';
|
|
617
|
-
}
|
|
618
568
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabHeaderLabel, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
619
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EdsTabHeaderLabel, isStandalone: true, selector: "eds-tab-header-label", host: {
|
|
569
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EdsTabHeaderLabel, isStandalone: true, selector: "eds-tab-header-label", host: { classAttribute: "eds-tab-header-label" }, ngImport: i0, template: '<ng-content />', isInline: true }); }
|
|
620
570
|
}
|
|
621
571
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabHeaderLabel, decorators: [{
|
|
622
572
|
type: Component,
|
|
623
573
|
args: [{
|
|
624
574
|
selector: 'eds-tab-header-label',
|
|
625
575
|
template: '<ng-content />',
|
|
576
|
+
host: { class: 'eds-tab-header-label' },
|
|
626
577
|
}]
|
|
627
|
-
}]
|
|
628
|
-
type: HostBinding,
|
|
629
|
-
args: ['class']
|
|
630
|
-
}] } });
|
|
578
|
+
}] });
|
|
631
579
|
|
|
632
580
|
class EdsTabHeaderSublabel {
|
|
633
|
-
constructor() {
|
|
634
|
-
this.string = 'eds-tab-header-sub-label';
|
|
635
|
-
}
|
|
636
581
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabHeaderSublabel, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
637
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EdsTabHeaderSublabel, isStandalone: true, selector: "eds-tab-header-sub-label", host: {
|
|
582
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EdsTabHeaderSublabel, isStandalone: true, selector: "eds-tab-header-sub-label", host: { classAttribute: "eds-tab-header-sub-label" }, ngImport: i0, template: '<ng-content />', isInline: true }); }
|
|
638
583
|
}
|
|
639
584
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabHeaderSublabel, decorators: [{
|
|
640
585
|
type: Component,
|
|
641
586
|
args: [{
|
|
642
587
|
selector: 'eds-tab-header-sub-label',
|
|
643
588
|
template: '<ng-content />',
|
|
589
|
+
host: { class: 'eds-tab-header-sub-label' },
|
|
644
590
|
}]
|
|
645
|
-
}]
|
|
646
|
-
type: HostBinding,
|
|
647
|
-
args: ['class']
|
|
648
|
-
}] } });
|
|
591
|
+
}] });
|
|
649
592
|
|
|
650
593
|
class EdsTabHeaderLeftContent {
|
|
651
|
-
constructor() {
|
|
652
|
-
this.string = 'eds-tab-header-left-content';
|
|
653
|
-
}
|
|
654
594
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabHeaderLeftContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
655
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EdsTabHeaderLeftContent, isStandalone: true, selector: "eds-tab-header-left-content", host: {
|
|
595
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EdsTabHeaderLeftContent, isStandalone: true, selector: "eds-tab-header-left-content", host: { classAttribute: "eds-tab-header-left-content" }, ngImport: i0, template: '<ng-content />', isInline: true }); }
|
|
656
596
|
}
|
|
657
597
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabHeaderLeftContent, decorators: [{
|
|
658
598
|
type: Component,
|
|
659
599
|
args: [{
|
|
660
600
|
selector: 'eds-tab-header-left-content',
|
|
661
601
|
template: '<ng-content />',
|
|
602
|
+
host: { class: 'eds-tab-header-left-content' },
|
|
662
603
|
}]
|
|
663
|
-
}]
|
|
664
|
-
type: HostBinding,
|
|
665
|
-
args: ['class']
|
|
666
|
-
}] } });
|
|
604
|
+
}] });
|
|
667
605
|
|
|
668
606
|
class EdsTabHeaderRightContent {
|
|
669
|
-
constructor() {
|
|
670
|
-
this.string = 'eds-tab-header-right-content';
|
|
671
|
-
}
|
|
672
607
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabHeaderRightContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
673
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EdsTabHeaderRightContent, isStandalone: true, selector: "eds-tab-header-right-content", host: {
|
|
608
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.2", type: EdsTabHeaderRightContent, isStandalone: true, selector: "eds-tab-header-right-content", host: { classAttribute: "eds-tab-header-right-content" }, ngImport: i0, template: '<ng-content />', isInline: true }); }
|
|
674
609
|
}
|
|
675
610
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsTabHeaderRightContent, decorators: [{
|
|
676
611
|
type: Component,
|
|
677
612
|
args: [{
|
|
678
613
|
selector: 'eds-tab-header-right-content',
|
|
679
614
|
template: '<ng-content />',
|
|
615
|
+
host: { class: 'eds-tab-header-right-content' },
|
|
680
616
|
}]
|
|
681
|
-
}]
|
|
682
|
-
type: HostBinding,
|
|
683
|
-
args: ['class']
|
|
684
|
-
}] } });
|
|
617
|
+
}] });
|
|
685
618
|
|
|
686
619
|
const EDS_TABS = [
|
|
687
620
|
EdsTabs,
|