@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.
Files changed (200) hide show
  1. package/docs/changelog.html +61 -0
  2. package/docs/components/EdsButton.html +77 -203
  3. package/docs/components/EdsCalendarDay.html +1 -1
  4. package/docs/components/EdsCalendarHeader.html +1 -1
  5. package/docs/components/EdsDatepicker.html +1 -1
  6. package/docs/components/EdsDialogContainer.html +1 -1
  7. package/docs/components/EdsFeedbackMessage.html +35 -73
  8. package/docs/components/EdsFileUpload.html +1 -1
  9. package/docs/components/EdsFlexLayout.html +1 -1
  10. package/docs/components/EdsGridLayout.html +1 -1
  11. package/docs/components/EdsGridLayoutCell.html +1 -1
  12. package/docs/components/EdsGridLayoutRow.html +1 -1
  13. package/docs/components/EdsIconState.html +38 -3
  14. package/docs/components/EdsInputButton.html +0 -57
  15. package/docs/components/EdsInputCheckbox.html +0 -62
  16. package/docs/components/EdsInputIcon.html +0 -53
  17. package/docs/components/EdsInputNumber.html +0 -60
  18. package/docs/components/EdsInputRadio.html +0 -62
  19. package/docs/components/EdsInputText.html +0 -62
  20. package/docs/components/EdsLabel.html +1 -1
  21. package/docs/components/EdsLanguageSelectorDialog.html +3 -5
  22. package/docs/components/EdsLink.html +1 -1
  23. package/docs/components/EdsLoadingIndicator.html +1 -1
  24. package/docs/components/EdsPaginator.html +1 -1
  25. package/docs/components/EdsRating.html +66 -57
  26. package/docs/components/EdsSelect.html +0 -45
  27. package/docs/components/EdsSnc.html +2 -2
  28. package/docs/components/EdsTab.html +8 -133
  29. package/docs/components/EdsTabBody.html +21 -41
  30. package/docs/components/EdsTabHeader.html +13 -25
  31. package/docs/components/EdsTabHeaderLabel.html +4 -126
  32. package/docs/components/EdsTabHeaderLeftContent.html +4 -126
  33. package/docs/components/EdsTabHeaderRightContent.html +4 -126
  34. package/docs/components/EdsTabHeaderSublabel.html +4 -126
  35. package/docs/components/EdsTabs.html +113 -140
  36. package/docs/components/EdsTextarea.html +0 -62
  37. package/docs/components/EdsTreeListToolbar.html +1 -1
  38. package/docs/components/EdsTrend.html +1 -1
  39. package/docs/directives/EdsColorDirective.html +0 -9
  40. package/docs/directives/EdsFlexColDirective.html +1 -1
  41. package/docs/directives/EdsFlexGrowDirective.html +1 -1
  42. package/docs/directives/EdsFlexNoShrinkDirective.html +1 -1
  43. package/docs/directives/EdsSizeDirective.html +0 -3
  44. package/docs/directives/EdsTooltip.html +45 -281
  45. package/docs/js/search/search_index.js +2 -2
  46. package/docs/json/EdsButton.md +15 -24
  47. package/docs/json/EdsFeedbackMessage.md +4 -10
  48. package/docs/json/EdsIconState.md +2 -1
  49. package/docs/json/EdsRating.md +2 -0
  50. package/docs/json/EdsTab.md +1 -1
  51. package/docs/json/EdsTabs.md +7 -8
  52. package/docs/json/EdsTooltip.md +3 -3
  53. package/docs/json/documentation.json +1803 -2031
  54. package/docs/llms.txt +72 -109
  55. package/docs/miscellaneous/typealiases.html +179 -16
  56. package/docs/miscellaneous/variables.html +16 -16
  57. package/docs/properties.html +1 -1
  58. package/eds-flex-layout/package.json +4 -0
  59. package/eds-grid-layout/package.json +4 -0
  60. package/eds-icon-state/package.json +4 -0
  61. package/eds-label/package.json +4 -0
  62. package/eds-link/package.json +4 -0
  63. package/eds-loading-indicator/package.json +4 -0
  64. package/eds-snc/package.json +4 -0
  65. package/eds-trend/package.json +4 -0
  66. package/fesm2022/eui-eds-eds-alert.mjs +3 -3
  67. package/fesm2022/eui-eds-eds-alert.mjs.map +1 -1
  68. package/fesm2022/eui-eds-eds-button.mjs +53 -85
  69. package/fesm2022/eui-eds-eds-button.mjs.map +1 -1
  70. package/fesm2022/eui-eds-eds-calendar.mjs +4 -4
  71. package/fesm2022/eui-eds-eds-calendar.mjs.map +1 -1
  72. package/fesm2022/eui-eds-eds-datepicker.mjs +2 -2
  73. package/fesm2022/eui-eds-eds-datepicker.mjs.map +1 -1
  74. package/fesm2022/eui-eds-eds-dialog.mjs +4 -4
  75. package/fesm2022/eui-eds-eds-dialog.mjs.map +1 -1
  76. package/fesm2022/eui-eds-eds-discussion-thread.mjs +3 -3
  77. package/fesm2022/eui-eds-eds-discussion-thread.mjs.map +1 -1
  78. package/fesm2022/eui-eds-eds-feedback-message.mjs +28 -42
  79. package/fesm2022/eui-eds-eds-feedback-message.mjs.map +1 -1
  80. package/fesm2022/eui-eds-eds-file-upload.mjs +2 -2
  81. package/fesm2022/eui-eds-eds-file-upload.mjs.map +1 -1
  82. package/fesm2022/{eui-eds-utilities-eds-flex-layout.mjs → eui-eds-eds-flex-layout.mjs} +1 -1
  83. package/fesm2022/eui-eds-eds-flex-layout.mjs.map +1 -0
  84. package/fesm2022/{eui-eds-utilities-eds-grid-layout.mjs → eui-eds-eds-grid-layout.mjs} +1 -1
  85. package/fesm2022/eui-eds-eds-grid-layout.mjs.map +1 -0
  86. package/fesm2022/eui-eds-eds-growl.mjs +3 -3
  87. package/fesm2022/eui-eds-eds-growl.mjs.map +1 -1
  88. package/fesm2022/eui-eds-eds-icon-state.mjs +56 -0
  89. package/fesm2022/eui-eds-eds-icon-state.mjs.map +1 -0
  90. package/fesm2022/eui-eds-eds-input-button.mjs +10 -13
  91. package/fesm2022/eui-eds-eds-input-button.mjs.map +1 -1
  92. package/fesm2022/eui-eds-eds-input-checkbox.mjs +6 -17
  93. package/fesm2022/eui-eds-eds-input-checkbox.mjs.map +1 -1
  94. package/fesm2022/eui-eds-eds-input-icon.mjs +10 -9
  95. package/fesm2022/eui-eds-eds-input-icon.mjs.map +1 -1
  96. package/fesm2022/eui-eds-eds-input-number.mjs +5 -14
  97. package/fesm2022/eui-eds-eds-input-number.mjs.map +1 -1
  98. package/fesm2022/eui-eds-eds-input-radio.mjs +6 -17
  99. package/fesm2022/eui-eds-eds-input-radio.mjs.map +1 -1
  100. package/fesm2022/eui-eds-eds-input-text.mjs +5 -16
  101. package/fesm2022/eui-eds-eds-input-text.mjs.map +1 -1
  102. package/fesm2022/{eui-eds-utilities-eds-label.mjs → eui-eds-eds-label.mjs} +1 -1
  103. package/fesm2022/eui-eds-eds-label.mjs.map +1 -0
  104. package/fesm2022/eui-eds-eds-language-selector.mjs +5 -9
  105. package/fesm2022/eui-eds-eds-language-selector.mjs.map +1 -1
  106. package/fesm2022/{eui-eds-utilities-eds-link.mjs → eui-eds-eds-link.mjs} +1 -1
  107. package/fesm2022/eui-eds-eds-link.mjs.map +1 -0
  108. package/fesm2022/{eui-eds-utilities-eds-loading-indicator.mjs → eui-eds-eds-loading-indicator.mjs} +1 -1
  109. package/fesm2022/eui-eds-eds-loading-indicator.mjs.map +1 -0
  110. package/fesm2022/eui-eds-eds-paginator.mjs +2 -2
  111. package/fesm2022/eui-eds-eds-paginator.mjs.map +1 -1
  112. package/fesm2022/eui-eds-eds-progress-bar.mjs +3 -3
  113. package/fesm2022/eui-eds-eds-progress-bar.mjs.map +1 -1
  114. package/fesm2022/eui-eds-eds-rating.mjs +30 -16
  115. package/fesm2022/eui-eds-eds-rating.mjs.map +1 -1
  116. package/fesm2022/eui-eds-eds-select.mjs +10 -33
  117. package/fesm2022/eui-eds-eds-select.mjs.map +1 -1
  118. package/fesm2022/{eui-eds-utilities-eds-snc.mjs → eui-eds-eds-snc.mjs} +3 -3
  119. package/fesm2022/eui-eds-eds-snc.mjs.map +1 -0
  120. package/fesm2022/eui-eds-eds-tabs.mjs +192 -259
  121. package/fesm2022/eui-eds-eds-tabs.mjs.map +1 -1
  122. package/fesm2022/eui-eds-eds-textarea.mjs +5 -16
  123. package/fesm2022/eui-eds-eds-textarea.mjs.map +1 -1
  124. package/fesm2022/eui-eds-eds-tooltip.mjs +71 -86
  125. package/fesm2022/eui-eds-eds-tooltip.mjs.map +1 -1
  126. package/fesm2022/eui-eds-eds-tree-list.mjs +2 -2
  127. package/fesm2022/eui-eds-eds-tree-list.mjs.map +1 -1
  128. package/fesm2022/eui-eds-eds-tree.mjs +2 -2
  129. package/fesm2022/eui-eds-eds-tree.mjs.map +1 -1
  130. package/fesm2022/{eui-eds-utilities-eds-trend.mjs → eui-eds-eds-trend.mjs} +1 -1
  131. package/fesm2022/eui-eds-eds-trend.mjs.map +1 -0
  132. package/package.json +33 -33
  133. package/types/eui-eds-eds-button.d.ts +47 -33
  134. package/types/eui-eds-eds-button.d.ts.map +1 -1
  135. package/types/eui-eds-eds-feedback-message.d.ts +20 -10
  136. package/types/eui-eds-eds-feedback-message.d.ts.map +1 -1
  137. package/types/{eui-eds-utilities-eds-flex-layout.d.ts → eui-eds-eds-flex-layout.d.ts} +1 -1
  138. package/types/eui-eds-eds-flex-layout.d.ts.map +1 -0
  139. package/types/{eui-eds-utilities-eds-grid-layout.d.ts → eui-eds-eds-grid-layout.d.ts} +1 -1
  140. package/types/eui-eds-eds-grid-layout.d.ts.map +1 -0
  141. package/types/{eui-eds-utilities-eds-icon-state.d.ts → eui-eds-eds-icon-state.d.ts} +8 -3
  142. package/types/eui-eds-eds-icon-state.d.ts.map +1 -0
  143. package/types/eui-eds-eds-input-button.d.ts +5 -1
  144. package/types/eui-eds-eds-input-button.d.ts.map +1 -1
  145. package/types/eui-eds-eds-input-checkbox.d.ts +0 -4
  146. package/types/eui-eds-eds-input-checkbox.d.ts.map +1 -1
  147. package/types/eui-eds-eds-input-icon.d.ts +5 -1
  148. package/types/eui-eds-eds-input-icon.d.ts.map +1 -1
  149. package/types/eui-eds-eds-input-number.d.ts +1 -5
  150. package/types/eui-eds-eds-input-number.d.ts.map +1 -1
  151. package/types/eui-eds-eds-input-radio.d.ts +0 -4
  152. package/types/eui-eds-eds-input-radio.d.ts.map +1 -1
  153. package/types/eui-eds-eds-input-text.d.ts +1 -5
  154. package/types/eui-eds-eds-input-text.d.ts.map +1 -1
  155. package/types/{eui-eds-utilities-eds-label.d.ts → eui-eds-eds-label.d.ts} +1 -1
  156. package/types/eui-eds-eds-label.d.ts.map +1 -0
  157. package/types/eui-eds-eds-language-selector.d.ts.map +1 -1
  158. package/types/{eui-eds-utilities-eds-link.d.ts → eui-eds-eds-link.d.ts} +1 -1
  159. package/types/eui-eds-eds-link.d.ts.map +1 -0
  160. package/types/{eui-eds-utilities-eds-loading-indicator.d.ts → eui-eds-eds-loading-indicator.d.ts} +1 -1
  161. package/types/eui-eds-eds-loading-indicator.d.ts.map +1 -0
  162. package/types/eui-eds-eds-rating.d.ts +19 -2
  163. package/types/eui-eds-eds-rating.d.ts.map +1 -1
  164. package/types/eui-eds-eds-select.d.ts +1 -5
  165. package/types/eui-eds-eds-select.d.ts.map +1 -1
  166. package/types/{eui-eds-utilities-eds-snc.d.ts → eui-eds-eds-snc.d.ts} +1 -1
  167. package/types/eui-eds-eds-snc.d.ts.map +1 -0
  168. package/types/eui-eds-eds-tabs.d.ts +87 -100
  169. package/types/eui-eds-eds-tabs.d.ts.map +1 -1
  170. package/types/eui-eds-eds-textarea.d.ts +1 -5
  171. package/types/eui-eds-eds-textarea.d.ts.map +1 -1
  172. package/types/eui-eds-eds-tooltip.d.ts +27 -25
  173. package/types/eui-eds-eds-tooltip.d.ts.map +1 -1
  174. package/types/{eui-eds-utilities-eds-trend.d.ts → eui-eds-eds-trend.d.ts} +1 -1
  175. package/types/eui-eds-eds-trend.d.ts.map +1 -0
  176. package/fesm2022/eui-eds-utilities-eds-flex-layout.mjs.map +0 -1
  177. package/fesm2022/eui-eds-utilities-eds-grid-layout.mjs.map +0 -1
  178. package/fesm2022/eui-eds-utilities-eds-icon-state.mjs +0 -49
  179. package/fesm2022/eui-eds-utilities-eds-icon-state.mjs.map +0 -1
  180. package/fesm2022/eui-eds-utilities-eds-label.mjs.map +0 -1
  181. package/fesm2022/eui-eds-utilities-eds-link.mjs.map +0 -1
  182. package/fesm2022/eui-eds-utilities-eds-loading-indicator.mjs.map +0 -1
  183. package/fesm2022/eui-eds-utilities-eds-snc.mjs.map +0 -1
  184. package/fesm2022/eui-eds-utilities-eds-trend.mjs.map +0 -1
  185. package/types/eui-eds-utilities-eds-flex-layout.d.ts.map +0 -1
  186. package/types/eui-eds-utilities-eds-grid-layout.d.ts.map +0 -1
  187. package/types/eui-eds-utilities-eds-icon-state.d.ts.map +0 -1
  188. package/types/eui-eds-utilities-eds-label.d.ts.map +0 -1
  189. package/types/eui-eds-utilities-eds-link.d.ts.map +0 -1
  190. package/types/eui-eds-utilities-eds-loading-indicator.d.ts.map +0 -1
  191. package/types/eui-eds-utilities-eds-snc.d.ts.map +0 -1
  192. package/types/eui-eds-utilities-eds-trend.d.ts.map +0 -1
  193. package/utilities/eds-flex-layout/package.json +0 -4
  194. package/utilities/eds-grid-layout/package.json +0 -4
  195. package/utilities/eds-icon-state/package.json +0 -4
  196. package/utilities/eds-label/package.json +0 -4
  197. package/utilities/eds-link/package.json +0 -4
  198. package/utilities/eds-loading-indicator/package.json +0 -4
  199. package/utilities/eds-snc/package.json +0 -4
  200. 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, Input, contentChild, forwardRef, ContentChild, ChangeDetectionStrategy, input, computed, EventEmitter, PLATFORM_ID, ChangeDetectorRef, DOCUMENT, ViewChildren, ViewChild, ContentChildren, Output, HostBinding } from '@angular/core';
3
- import { AsyncPipe, isPlatformBrowser } from '@angular/common';
4
- import * as i2 from '@angular/cdk/portal';
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 i3 from '@eui/eds/eds-icon-button';
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
- ngAfterViewInit() {
21
- this.templatePortal = new TemplatePortal(this.templateRef(), this.viewContainerRef);
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$ = new BehaviorSubject(0);
39
+ this.tabIndex = signal(0, /* @ts-ignore */
40
+ ...(ngDevMode ? [{ debugName: "tabIndex" }] : /* istanbul ignore next */ []));
42
41
  this.viewContainerRef = inject(ViewContainerRef);
43
- }
44
- ngAfterViewInit() {
45
- this.templatePortal = new TemplatePortal(this.templateRef(), this.viewContainerRef);
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: ["hasNoContentPadding", "hasNoContentPadding", booleanAttribute] }, 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$ | async\" [class.eds-tab__body--no-padding]=\"hasNoContentPadding\">\n <ng-content></ng-content>\n </div>\n</ng-template>\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }] }); }
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', imports: [
53
- AsyncPipe,
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 'eui-tab'
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.euiVariant = 'euiPrimary';
100
- this.isActive = false;
101
- this.isVisible$ = new BehaviorSubject(this.isVisible);
102
- this.isClosable$ = new BehaviorSubject(this.isClosable);
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 = true;
121
+ this.isActive.set(true);
118
122
  }
119
123
  deactivateTab() {
120
- this.isActive = false;
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: ["isClosable", "isClosable", booleanAttribute], isDisabled: ["isDisabled", "isDisabled", booleanAttribute], isVisible: ["isVisible", "isVisible", booleanAttribute], isHandleCloseOnClose: ["isHandleCloseOnClose", "isHandleCloseOnClose", booleanAttribute], isHandleActivateTab: ["isHandleActivateTab", "isHandleActivateTab", booleanAttribute], euiVariant: "euiVariant" }, queries: [{ propertyName: "templateHeader", first: true, predicate: i0.forwardRef(() => EdsTabHeader), descendants: true, isSignal: true }, { propertyName: "templateBody", first: true, predicate: i0.forwardRef(() => EdsTabBody), descendants: true }], usesOnChanges: true, ngImport: i0, template: '<ng-content/>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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
- * Index of the active tab
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 host element.
162
+ * Sets the `aria-label` attribute for the tab list.
187
163
  *
188
- * @default 'eUI Tabs'
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 = new EventEmitter();
174
+ this.tabClose = output();
199
175
  /**
200
176
  * Event emitted when a tab is activated
201
177
  */
202
- this.tabActivate = new EventEmitter();
178
+ this.tabActivate = output();
203
179
  /**
204
180
  * Event emitted when a tab is clicked
205
181
  */
206
- this.tabClick = new EventEmitter();
207
- this.tabs = [];
208
- this.scrolling = false;
209
- this.navigationLeftButtonDisabled = true;
210
- this.navigationRightButtonDisabled = false;
211
- this.currentOffset = 0;
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 = index;
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 (this.tabs[index]) {
299
- this.tabs[index].deactivateTab();
300
- this.tabs = this.tabs.filter((_, i) => i !== index);
301
- if (index === this.activeTabIndex) {
302
- const previousVisibleIndex = this.tabs.indexOf(this.tabs[index - 1]);
303
- this.cd.markForCheck();
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
- if (index < this.activeTabIndex) {
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 === this.edsTabListItems.toArray().length - 1;
335
+ const isLastItem = i === items.length - 1;
356
336
  const index = isLastItem ? 0 : i + 1;
357
337
  this.setScrollToTabIndex(index, false);
358
- this.edsTabListItems.toArray()[index]?.nativeElement.focus();
338
+ items[index]?.nativeElement.focus();
359
339
  break;
360
340
  }
361
341
  case 'ArrowLeft': {
362
- const lastIndex = this.edsTabListItems.toArray().length - 1;
342
+ const lastIndex = items.length - 1;
363
343
  const index = i === 0 ? lastIndex : i - 1;
364
344
  this.setScrollToTabIndex(index, false);
365
- this.edsTabListItems.toArray()[index]?.nativeElement.focus();
345
+ items[index]?.nativeElement.focus();
366
346
  break;
367
347
  }
368
348
  case 'Home': {
369
349
  this.setScrollToTabIndex(0, false);
370
- this.edsTabListItems.toArray()[0]?.nativeElement.focus();
350
+ items[0]?.nativeElement.focus();
371
351
  event.preventDefault();
372
352
  break;
373
353
  }
374
354
  case 'End': {
375
- this.setScrollToTabIndex(this.edsTabListItems.toArray().length - 1, false);
376
- this.edsTabListItems.toArray()[this.edsTabListItems.toArray().length - 1]?.nativeElement.focus();
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 === this.edsTabListItems.toArray().length - 1) {
383
- this.edsTabListItems.toArray()[i - 1]?.nativeElement.focus();
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
- this.edsTabListItems.toArray()[i]?.nativeElement.focus();
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
- this.tabs[index - 1].templateBody.tabIndex$.next(-1);
426
+ body?.tabIndex.set(-1);
446
427
  }
447
428
  else {
448
- this.tabs[index - 1].templateBody.tabIndex$.next(0);
429
+ body?.tabIndex.set(0);
449
430
  }
450
431
  }
451
432
  }
452
433
  else {
453
- this.tabs[index - 1].templateBody.tabIndex$.next(0);
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
- this.scrolling = this.edsTabsHeadersWidth > this.edsTabsHeadersContainerWidth;
475
- if (!this.scrolling) {
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 = true;
479
- this.navigationRightButtonDisabled = true;
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 = Math.abs(this.currentOffset) >= maxScrollableWidth;
489
- this.navigationLeftButtonDisabled = this.currentOffset >= 0;
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 activeTab = this.edsTabsHeaders.nativeElement.children.item(index);
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 += this.edsTabsHeaders.nativeElement.children.item(i).clientWidth;
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(this.edsTabsHeaders.nativeElement);
515
+ this.player = animation.create(headers.nativeElement);
530
516
  this.player.play();
531
- this.currentOffset = scrollTo;
517
+ this.currentOffset.set(scrollTo);
532
518
  if (scrollTo === 0) {
533
- this.navigationLeftButtonDisabled = true;
519
+ this.navigationLeftButtonDisabled.set(true);
534
520
  }
535
- if (Math.abs(this.currentOffset) < this.edsTabsHeadersWidth - this.edsTabsHeadersContainerWidth + this.scrollOffset) {
536
- this.navigationRightButtonDisabled = false;
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 = false;
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 = true;
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
- '[class]': 'hostColorClass()',
550
+ '[attr.color]': 'color()',
551
+ '[attr.navbar]': 'isNavBar() || null',
566
552
  }, imports: [
567
- AsyncPipe,
568
553
  PortalModule,
569
554
  ...EDS_ICON_BUTTON,
570
- ], hostDirectives: [
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: { properties: { "class": "this.string" } }, ngImport: i0, template: '<ng-content />', isInline: true }); }
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
- }], propDecorators: { string: [{
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: { properties: { "class": "this.string" } }, ngImport: i0, template: '<ng-content />', isInline: true }); }
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
- }], propDecorators: { string: [{
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: { properties: { "class": "this.string" } }, ngImport: i0, template: '<ng-content />', isInline: true }); }
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
- }], propDecorators: { string: [{
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: { properties: { "class": "this.string" } }, ngImport: i0, template: '<ng-content />', isInline: true }); }
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
- }], propDecorators: { string: [{
682
- type: HostBinding,
683
- args: ['class']
684
- }] } });
617
+ }] });
685
618
 
686
619
  const EDS_TABS = [
687
620
  EdsTabs,