@ethlete/cdk 3.19.0 → 3.19.2

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 (71) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/esm2022/lib/components/button/directives/button/button.directive.mjs +10 -25
  3. package/esm2022/lib/components/button/directives/query-button/query-button.directive.mjs +8 -17
  4. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox/checkbox.directive.mjs +7 -11
  5. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-field/checkbox-field.directive.mjs +17 -14
  6. package/esm2022/lib/components/forms/components/checkbox/directives/checkbox-group-control/checkbox-group-control.directive.mjs +6 -13
  7. package/esm2022/lib/components/forms/components/error/components/error/error.component.mjs +7 -9
  8. package/esm2022/lib/components/forms/components/radio/directives/radio/radio.directive.mjs +6 -8
  9. package/esm2022/lib/components/forms/components/radio/directives/radio-field/radio-field.directive.mjs +14 -18
  10. package/esm2022/lib/components/forms/components/radio/directives/radio-group/radio-group.directive.mjs +5 -11
  11. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button/segmented-button.directive.mjs +6 -8
  12. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-field/segmented-button-field.directive.mjs +14 -18
  13. package/esm2022/lib/components/forms/components/segmented-button/directives/segmented-button-group/segmented-button-group.directive.mjs +6 -11
  14. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.mjs +17 -25
  15. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.mjs +20 -24
  16. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.mjs +11 -23
  17. package/esm2022/lib/components/forms/components/select/components/select/directives/select/select.directive.mjs +29 -22
  18. package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.mjs +7 -15
  19. package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.mjs +13 -14
  20. package/esm2022/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.mjs +9 -3
  21. package/esm2022/lib/components/forms/components/select/directives/select-field/select-field.directive.mjs +3 -4
  22. package/esm2022/lib/components/forms/components/slide-toggle/directives/slide-toggle/slide-toggle.directive.mjs +6 -8
  23. package/esm2022/lib/components/forms/components/slider/components/slider/slider.component.mjs +18 -41
  24. package/esm2022/lib/components/forms/directives/input/input.directive.mjs +4 -1
  25. package/esm2022/lib/components/forms/directives/writeable-input/writeable-input.directive.mjs +10 -23
  26. package/esm2022/lib/components/forms/services/input-state.service.mjs +21 -4
  27. package/esm2022/lib/components/forms/utils/decorated-form-field.base.mjs +5 -8
  28. package/esm2022/lib/components/forms/utils/decorated-input.base.mjs +26 -23
  29. package/esm2022/lib/components/masonry/components/masonry/masonry.component.mjs +6 -8
  30. package/esm2022/lib/components/overlay/components/overlay/components/overlay-container/overlay-container.component.mjs +11 -4
  31. package/esm2022/lib/components/overlay/components/toggletip/components/toggletip/toggletip.component.mjs +9 -3
  32. package/esm2022/lib/components/overlay/components/toggletip/directives/toggletip/toggletip.directive.mjs +4 -1
  33. package/esm2022/lib/components/overlay/components/tooltip/components/tooltip/tooltip.component.mjs +9 -3
  34. package/esm2022/lib/components/overlay/components/tooltip/directives/tooltip/tooltip.directive.mjs +4 -1
  35. package/esm2022/lib/components/picture/picture.component.mjs +7 -4
  36. package/fesm2022/ethlete-cdk.mjs +255 -356
  37. package/fesm2022/ethlete-cdk.mjs.map +1 -1
  38. package/lib/components/button/directives/button/button.directive.d.ts +4 -1
  39. package/lib/components/button/directives/query-button/query-button.directive.d.ts +4 -1
  40. package/lib/components/forms/components/checkbox/directives/checkbox/checkbox.directive.d.ts +4 -1
  41. package/lib/components/forms/components/checkbox/directives/checkbox-field/checkbox-field.directive.d.ts +11 -6
  42. package/lib/components/forms/components/checkbox/directives/checkbox-group-control/checkbox-group-control.directive.d.ts +6 -4
  43. package/lib/components/forms/components/error/components/error/error.component.d.ts +4 -1
  44. package/lib/components/forms/components/radio/directives/radio/radio.directive.d.ts +4 -1
  45. package/lib/components/forms/components/radio/directives/radio-field/radio-field.directive.d.ts +12 -6
  46. package/lib/components/forms/components/radio/directives/radio-group/radio-group.directive.d.ts +4 -1
  47. package/lib/components/forms/components/segmented-button/directives/segmented-button/segmented-button.directive.d.ts +4 -1
  48. package/lib/components/forms/components/segmented-button/directives/segmented-button-field/segmented-button-field.directive.d.ts +12 -7
  49. package/lib/components/forms/components/segmented-button/directives/segmented-button-group/segmented-button-group.directive.d.ts +4 -1
  50. package/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.d.ts +10 -1
  51. package/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.d.ts +13 -2
  52. package/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.d.ts +8 -1
  53. package/lib/components/forms/components/select/components/select/directives/select/select.directive.d.ts +15 -3
  54. package/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.d.ts +4 -1
  55. package/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.d.ts +10 -1
  56. package/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.d.ts +5 -1
  57. package/lib/components/forms/components/select/directives/select-field/select-field.directive.d.ts +2 -2
  58. package/lib/components/forms/components/slide-toggle/directives/slide-toggle/slide-toggle.directive.d.ts +4 -1
  59. package/lib/components/forms/components/slider/components/slider/slider.component.d.ts +8 -1
  60. package/lib/components/forms/directives/input/input.directive.d.ts +21 -19
  61. package/lib/components/forms/directives/writeable-input/writeable-input.directive.d.ts +4 -1
  62. package/lib/components/forms/services/input-state.service.d.ts +13 -6
  63. package/lib/components/forms/utils/decorated-form-field.base.d.ts +4 -1
  64. package/lib/components/forms/utils/decorated-input.base.d.ts +13 -6
  65. package/lib/components/masonry/components/masonry/masonry.component.d.ts +4 -1
  66. package/lib/components/overlay/components/overlay/components/overlay-container/overlay-container.component.d.ts +4 -1
  67. package/lib/components/overlay/components/toggletip/components/toggletip/toggletip.component.d.ts +5 -1
  68. package/lib/components/overlay/components/toggletip/directives/toggletip/toggletip.directive.d.ts +1 -0
  69. package/lib/components/overlay/components/tooltip/components/tooltip/tooltip.component.d.ts +5 -1
  70. package/lib/components/overlay/components/tooltip/directives/tooltip/tooltip.directive.d.ts +1 -0
  71. package/package.json +3 -3
@@ -4,10 +4,11 @@ import { AsyncPipe, NgIf, NgClass, NgTemplateOutlet, NgForOf, NgFor, NgComponent
4
4
  import * as i0 from '@angular/core';
5
5
  import { Component, ViewEncapsulation, ChangeDetectionStrategy, Directive, InjectionToken, booleanAttribute, Input, ContentChild, ContentChildren, inject, ElementRef, Injector, HostBinding, computed, signal, Optional, Inject, Injectable, SkipSelf, HostListener, ViewContainerRef, EventEmitter, NgZone, isDevMode, Output, NgModule, ChangeDetectorRef, ViewChild, runInInjectionContext, TemplateRef, forwardRef, LOCALE_ID, numberAttribute, ViewChildren, Renderer2, Attribute } from '@angular/core';
6
6
  import * as i1$2 from '@ethlete/core';
7
- import { LetDirective, createDestroy, ScrollObserverFirstElementDirective, ScrollObserverLastElementDirective, Memo, createReactiveBindings, signalHostClasses, AnimatedIfDirective, AnimatedLifecycleDirective, SmartBlockScrollStrategy, RouterStateService, ANIMATED_LIFECYCLE_TOKEN, nextFrame, elementCanScroll, equal, ViewportService, AnimatedOverlayDirective, ClickObserverService, FocusVisibleService, cloneFormGroup, getFormGroupValue, ObserveVisibilityDirective, signalVisibilityChangeClasses, IS_EMAIL, MUST_MATCH, IS_ARRAY_NOT_EMPTY, AT_LEAST_ONE_REQUIRED, ResizeObserverService, createFlipAnimation, RuntimeError, SelectionModel, ActiveSelectionModel, KeyPressManager, scrollToElement, isEmptyArray, isObjectArray, isPrimitiveArray, ClickOutsideDirective, ObserveContentDirective, clamp, DELAYABLE_TOKEN, ObserveResizeDirective, getElementVisibleStates, IS_ACTIVE_ELEMENT, IS_ELEMENT, CursorDragScrollDirective, ObserveScrollStateDirective, IsElementDirective, IsActiveElementDirective, ScrollObserverIgnoreTargetDirective, TypedQueryList } from '@ethlete/core';
8
- import { BehaviorSubject, startWith, map, switchMap, combineLatest, pairwise, tap, takeUntil, skip, of, Subject, filter, take, merge, skipUntil, defer, fromEvent, partition, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, withLatestFrom, skipWhile, catchError, throwError, firstValueFrom, timer, Subscription, Observable } from 'rxjs';
7
+ import { LetDirective, createDestroy, ScrollObserverFirstElementDirective, ScrollObserverLastElementDirective, Memo, signalHostAttributes, signalHostClasses, AnimatedIfDirective, AnimatedLifecycleDirective, SmartBlockScrollStrategy, RouterStateService, ANIMATED_LIFECYCLE_TOKEN, nextFrame, elementCanScroll, equal, ViewportService, AnimatedOverlayDirective, ClickObserverService, FocusVisibleService, cloneFormGroup, getFormGroupValue, ObserveVisibilityDirective, signalVisibilityChangeClasses, IS_EMAIL, MUST_MATCH, IS_ARRAY_NOT_EMPTY, AT_LEAST_ONE_REQUIRED, switchQueryListChanges, signalAttributes, ResizeObserverService, createFlipAnimation, RuntimeError, SelectionModel, ActiveSelectionModel, KeyPressManager, signalClasses, scrollToElement, isEmptyArray, isObjectArray, isPrimitiveArray, ClickOutsideDirective, ObserveContentDirective, clamp, DELAYABLE_TOKEN, ObserveResizeDirective, getElementVisibleStates, IS_ACTIVE_ELEMENT, IS_ELEMENT, CursorDragScrollDirective, ObserveScrollStateDirective, IsElementDirective, IsActiveElementDirective, ScrollObserverIgnoreTargetDirective, TypedQueryList } from '@ethlete/core';
8
+ import { BehaviorSubject, startWith, map, switchMap, combineLatest, pairwise, tap, takeUntil, skip, of, Subject, filter, take, merge, skipUntil, defer, fromEvent, partition, debounceTime as debounceTime$1, Observable, distinctUntilChanged as distinctUntilChanged$1, withLatestFrom, skipWhile, catchError, throwError, firstValueFrom, timer, Subscription } from 'rxjs';
9
9
  import { trigger, state, style, transition, animate } from '@angular/animations';
10
10
  import { __decorate, __metadata } from 'tslib';
11
+ import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
12
  import { extractQuery, isQueryStateLoading, isQueryStateSuccess, isQueryStateFailure, QueryDirective, shouldRetryRequest, isClassValidatorError, isSymfonyFormViolationListError } from '@ethlete/query';
12
13
  import { CdkDialogContainer, Dialog, DialogConfig, DIALOG_SCROLL_STRATEGY_PROVIDER as DIALOG_SCROLL_STRATEGY_PROVIDER$1 } from '@angular/cdk/dialog';
13
14
  import * as i1$1 from '@angular/cdk/a11y';
@@ -18,11 +19,12 @@ import { ESCAPE, hasModifierKey, UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW,
18
19
  import * as i1$4 from '@angular/cdk/bidi';
19
20
  import { Directionality } from '@angular/cdk/bidi';
20
21
  import { coerceBooleanProperty, coerceCssPixelValue, coerceElement, _isNumberValue } from '@angular/cdk/coercion';
21
- import * as i2$1 from '@angular/cdk/platform';
22
+ import * as i2$2 from '@angular/cdk/platform';
22
23
  import { _getEventTarget } from '@angular/cdk/platform';
23
24
  import { startWith as startWith$1, debounceTime, distinctUntilChanged, takeUntil as takeUntil$1, skip as skip$1, filter as filter$1, mergeMap, mapTo, mergeAll, switchMap as switchMap$1, take as take$1 } from 'rxjs/operators';
24
25
  import { UniqueSelectionDispatcher, _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, _DisposeViewRepeaterStrategy, DataSource } from '@angular/cdk/collections';
25
- import { toSignal } from '@angular/core/rxjs-interop';
26
+ import * as i2$1 from '@ethlete/theming';
27
+ import { THEME_PROVIDER, ProvideThemeDirective } from '@ethlete/theming';
26
28
  import { AutofillMonitor } from '@angular/cdk/text-field';
27
29
  import { FormControl, NgControl, Validators, NG_VALUE_ACCESSOR } from '@angular/forms';
28
30
  import { Title } from '@angular/platform-browser';
@@ -1027,27 +1029,11 @@ class ButtonDirective {
1027
1029
  this._disabled$ = new BehaviorSubject(false);
1028
1030
  this._type$ = new BehaviorSubject('button');
1029
1031
  this._pressed$ = new BehaviorSubject(false);
1030
- this._bindings = createReactiveBindings({
1031
- attribute: ['disabled', 'aria-disabled'],
1032
- observable: this.disabled$.pipe(map((disabled) => ({
1033
- render: disabled,
1034
- value: true,
1035
- }))),
1036
- }, {
1037
- attribute: ['tabindex'],
1038
- observable: this.disabled$.pipe(map((disabled) => ({
1039
- render: disabled && this.isAnchor,
1040
- value: -1,
1041
- }))),
1042
- }, {
1043
- attribute: ['type'],
1044
- observable: this.type$.pipe(map((type) => ({
1045
- render: this.isButton,
1046
- value: type,
1047
- }))),
1048
- }, {
1049
- attribute: ['aria-pressed'],
1050
- observable: this._pressed$,
1032
+ this.hostAttributeBindings = signalHostAttributes({
1033
+ 'disabled aria-disabled': toSignal(this.disabled$),
1034
+ 'aria-pressed': toSignal(this._pressed$),
1035
+ ...(this.isAnchor ? { tabindex: toSignal(this.disabled$.pipe(map((disabled) => (disabled ? -1 : 0)))) } : {}),
1036
+ ...(this.isButton ? { type: toSignal(this.type$) } : {}),
1051
1037
  });
1052
1038
  }
1053
1039
  get disabled() {
@@ -1075,10 +1061,10 @@ class ButtonDirective {
1075
1061
  this._pressed$.next(booleanAttribute(value));
1076
1062
  }
1077
1063
  _removeDisabledBindings() {
1078
- this._bindings.remove('disabled', 'aria-disabled');
1064
+ this.hostAttributeBindings.remove('disabled', 'aria-disabled');
1079
1065
  }
1080
1066
  _removeTabIndexBindings() {
1081
- this._bindings.remove('tabindex');
1067
+ this.hostAttributeBindings.remove('tabindex');
1082
1068
  }
1083
1069
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: ButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1084
1070
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: ButtonDirective, isStandalone: true, inputs: { disabled: "disabled", type: "type", pressed: "pressed" }, exportAs: ["etButton"], ngImport: i0 }); }
@@ -1133,7 +1119,6 @@ class QueryButtonDirective {
1133
1119
  classList.remove(CLASSES.success);
1134
1120
  classList.remove(CLASSES.failure);
1135
1121
  classList.remove(CLASSES.loading);
1136
- this._bindings.reset();
1137
1122
  const query = extractQuery(this._query$.value);
1138
1123
  if (!query) {
1139
1124
  return;
@@ -1184,15 +1169,9 @@ class QueryButtonDirective {
1184
1169
  this._skipFailure = false;
1185
1170
  this._skipLoading = false;
1186
1171
  this._query$ = new BehaviorSubject(null);
1187
- this._bindings = createReactiveBindings({
1188
- attribute: ['disabled', 'aria-disabled'],
1189
- observable: combineLatest([this._button.disabled$, this.showFailure$, this.showSuccess$, this.isLoading$]).pipe(map(([disabled, showFailure, showSuccess, isLoading]) => ({
1190
- render: disabled || showFailure || showSuccess || isLoading,
1191
- value: true,
1192
- }))),
1193
- }, {
1194
- attribute: ['aria-live'],
1195
- observable: combineLatest([
1172
+ this.hostAttributeBindings = signalHostAttributes({
1173
+ 'disabled aria-disabled': toSignal(combineLatest([this._button.disabled$, this.showFailure$, this.showSuccess$, this.isLoading$]).pipe(map(([disabled, showFailure, showSuccess, isLoading]) => disabled || showFailure || showSuccess || isLoading))),
1174
+ 'aria-live': toSignal(combineLatest([
1196
1175
  this.query$.pipe(map((q) => extractQuery(q)), switchMap((q) => q?.state$ ?? of(null))),
1197
1176
  this.didLoadOnce$,
1198
1177
  ]).pipe(map(([state, didLoadOnce]) => {
@@ -1200,11 +1179,8 @@ class QueryButtonDirective {
1200
1179
  if (isQueryStateLoading(state) || isQueryStateSuccess(state) || isQueryStateFailure(state) || didLoadOnce) {
1201
1180
  value = 'assertive';
1202
1181
  }
1203
- return {
1204
- render: true,
1205
- value,
1206
- };
1207
- })),
1182
+ return value;
1183
+ }))),
1208
1184
  });
1209
1185
  this._button._removeDisabledBindings();
1210
1186
  }
@@ -4023,10 +3999,15 @@ class OverlayContainerComponent extends CdkDialogContainer {
4023
3999
  super(inject(ElementRef), inject(FocusTrapFactory), inject(DOCUMENT), inject(OVERLAY_CONFIG), inject(InteractivityChecker), inject(NgZone), inject(OverlayRef$1), inject(FocusMonitor));
4024
4000
  this._swipeHandlerService = inject(SwipeHandlerService);
4025
4001
  this._dragToDismissStop$ = new Subject();
4002
+ this._themeProvider = inject(THEME_PROVIDER);
4003
+ this._parentThemeProvider = inject(THEME_PROVIDER, { optional: true, skipSelf: true });
4026
4004
  this._animatedLifecycle = inject(ANIMATED_LIFECYCLE_TOKEN);
4027
4005
  this.cdkOverlayRef = inject(OverlayRef$1);
4028
4006
  this.overlayRef = null;
4029
4007
  this.elementRef = this._elementRef;
4008
+ if (this._parentThemeProvider) {
4009
+ this._themeProvider.syncWithProvider(this._parentThemeProvider);
4010
+ }
4030
4011
  }
4031
4012
  _contentAttached() {
4032
4013
  super._contentAttached();
@@ -4257,7 +4238,7 @@ class OverlayContainerComponent extends CdkDialogContainer {
4257
4238
  }
4258
4239
  }
4259
4240
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: OverlayContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4260
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: OverlayContainerComponent, isStandalone: true, selector: "et-overlay-container", host: { attributes: { "tabindex": "-1" }, properties: { "attr.aria-modal": "_config.ariaModal", "id": "_config.id", "attr.role": "_config.role", "attr.aria-labelledby": "_config.ariaLabel ? null : _ariaLabelledBy", "attr.aria-label": "_config.ariaLabel", "attr.aria-describedby": "_config.ariaDescribedBy || null", "class.et-with-default-animation": "!_config.customAnimated" }, classAttribute: "et-overlay" }, usesInheritance: true, hostDirectives: [{ directive: i1$2.AnimatedLifecycleDirective }], ngImport: i0, template: `<ng-template cdkPortalOutlet></ng-template>`, isInline: true, styles: [".et-overlay{position:relative;display:grid;overflow:hidden;pointer-events:all;outline:none}.et-overlay>*{overflow:auto}.et-overlay-pane{pointer-events:none}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-leave-to{transform:scale(0)!important;border-radius:250px}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-active{transition:transform .3s var(--ease-out-5),border-radius .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-active{transition:transform .3s var(--ease-spring-1),border-radius .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-leave-active{transition:transform .15s var(--ease-in-5),border-radius .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet{bottom:-50px;padding-bottom:50px}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-leave-to{transform:translateY(100%)!important}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--top-sheet{top:-50px;padding-top:50px}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-leave-to{transform:translateY(-100%)!important}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--left-sheet{left:-50px;padding-left:50px}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-leave-to{transform:translate(-100%)!important}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--right-sheet{right:-50px;padding-right:50px}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-leave-to{transform:translate(100%)!important}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-from{opacity:0!important;transform:scale(.85)!important}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-leave-to{opacity:0!important;transform:scale(.7)!important}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-active{transition:transform .3s var(--ease-out-5),opacity .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-active{transition:transform .3s var(--ease-spring-2),opacity .3s var(--ease-out-5)}}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-leave-active{transition:transform .15s var(--ease-out-5),opacity .15s var(--ease-out-5)}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
4241
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: OverlayContainerComponent, isStandalone: true, selector: "et-overlay-container", host: { attributes: { "tabindex": "-1" }, properties: { "attr.aria-modal": "_config.ariaModal", "id": "_config.id", "attr.role": "_config.role", "attr.aria-labelledby": "_config.ariaLabel ? null : _ariaLabelledBy", "attr.aria-label": "_config.ariaLabel", "attr.aria-describedby": "_config.ariaDescribedBy || null", "class.et-with-default-animation": "!_config.customAnimated" }, classAttribute: "et-overlay" }, usesInheritance: true, hostDirectives: [{ directive: i1$2.AnimatedLifecycleDirective }, { directive: i2$1.ProvideThemeDirective }], ngImport: i0, template: `<ng-template cdkPortalOutlet></ng-template>`, isInline: true, styles: [".et-overlay{position:relative;display:grid;overflow:hidden;pointer-events:all;outline:none}.et-overlay>*{overflow:auto}.et-overlay-pane{pointer-events:none}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-leave-to{transform:scale(0)!important;border-radius:250px}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-active{transition:transform .3s var(--ease-out-5),border-radius .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-active{transition:transform .3s var(--ease-spring-1),border-radius .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-leave-active{transition:transform .15s var(--ease-in-5),border-radius .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet{bottom:-50px;padding-bottom:50px}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-leave-to{transform:translateY(100%)!important}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--top-sheet{top:-50px;padding-top:50px}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-leave-to{transform:translateY(-100%)!important}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--left-sheet{left:-50px;padding-left:50px}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-leave-to{transform:translate(-100%)!important}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--right-sheet{right:-50px;padding-right:50px}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-leave-to{transform:translate(100%)!important}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-from{opacity:0!important;transform:scale(.85)!important}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-leave-to{opacity:0!important;transform:scale(.7)!important}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-active{transition:transform .3s var(--ease-out-5),opacity .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-active{transition:transform .3s var(--ease-spring-2),opacity .3s var(--ease-out-5)}}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-leave-active{transition:transform .15s var(--ease-out-5),opacity .15s var(--ease-out-5)}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
4261
4242
  }
4262
4243
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: OverlayContainerComponent, decorators: [{
4263
4244
  type: Component,
@@ -4271,7 +4252,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
4271
4252
  '[attr.aria-label]': '_config.ariaLabel',
4272
4253
  '[attr.aria-describedby]': '_config.ariaDescribedBy || null',
4273
4254
  '[class.et-with-default-animation]': '!_config.customAnimated',
4274
- }, standalone: true, imports: [PortalModule], hostDirectives: [AnimatedLifecycleDirective], styles: [".et-overlay{position:relative;display:grid;overflow:hidden;pointer-events:all;outline:none}.et-overlay>*{overflow:auto}.et-overlay-pane{pointer-events:none}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-leave-to{transform:scale(0)!important;border-radius:250px}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-active{transition:transform .3s var(--ease-out-5),border-radius .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-active{transition:transform .3s var(--ease-spring-1),border-radius .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-leave-active{transition:transform .15s var(--ease-in-5),border-radius .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet{bottom:-50px;padding-bottom:50px}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-leave-to{transform:translateY(100%)!important}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--top-sheet{top:-50px;padding-top:50px}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-leave-to{transform:translateY(-100%)!important}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--left-sheet{left:-50px;padding-left:50px}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-leave-to{transform:translate(-100%)!important}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--right-sheet{right:-50px;padding-right:50px}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-leave-to{transform:translate(100%)!important}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-from{opacity:0!important;transform:scale(.85)!important}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-leave-to{opacity:0!important;transform:scale(.7)!important}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-active{transition:transform .3s var(--ease-out-5),opacity .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-active{transition:transform .3s var(--ease-spring-2),opacity .3s var(--ease-out-5)}}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-leave-active{transition:transform .15s var(--ease-out-5),opacity .15s var(--ease-out-5)}\n"] }]
4255
+ }, standalone: true, imports: [PortalModule], hostDirectives: [AnimatedLifecycleDirective, ProvideThemeDirective], styles: [".et-overlay{position:relative;display:grid;overflow:hidden;pointer-events:all;outline:none}.et-overlay>*{overflow:auto}.et-overlay-pane{pointer-events:none}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-leave-to{transform:scale(0)!important;border-radius:250px}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-active{transition:transform .3s var(--ease-out-5),border-radius .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-enter-active{transition:transform .3s var(--ease-spring-1),border-radius .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--full-screen-dialog.et-animation-leave-active{transition:transform .15s var(--ease-in-5),border-radius .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet{bottom:-50px;padding-bottom:50px}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-leave-to{transform:translateY(100%)!important}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--bottom-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--top-sheet{top:-50px;padding-top:50px}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-leave-to{transform:translateY(-100%)!important}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--top-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--left-sheet{left:-50px;padding-left:50px}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-leave-to{transform:translate(-100%)!important}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--left-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--right-sheet{right:-50px;padding-right:50px}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-from,.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-leave-to{transform:translate(100%)!important}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-active{transition:transform .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-enter-active{transition:transform .3s var(--ease-spring-1)}}.et-overlay.et-with-default-animation.et-overlay--right-sheet.et-animation-leave-active{transition:transform .15s var(--ease-in-5)}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-from{opacity:0!important;transform:scale(.85)!important}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-leave-to{opacity:0!important;transform:scale(.7)!important}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-active{transition:transform .3s var(--ease-out-5),opacity .3s var(--ease-out-5)}@supports (transition-timing-function: linear(0,1)){.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-enter-active{transition:transform .3s var(--ease-spring-2),opacity .3s var(--ease-out-5)}}.et-overlay.et-with-default-animation.et-overlay--dialog.et-animation-leave-active{transition:transform .15s var(--ease-out-5),opacity .15s var(--ease-out-5)}\n"] }]
4275
4256
  }], ctorParameters: function () { return []; } });
4276
4257
 
4277
4258
  const createOverlayConfig = (globalConfig, localConfig) => ({
@@ -4999,6 +4980,7 @@ class ToggletipDirective {
4999
4980
  this._destroy$ = createDestroy();
5000
4981
  this._defaultConfig = inject(TOGGLETIP_CONFIG, { optional: true }) ?? createToggletipConfig();
5001
4982
  this._animatedOverlay = inject(AnimatedOverlayDirective);
4983
+ this._themeProvider = inject(THEME_PROVIDER, { optional: true });
5002
4984
  this._toggletip = null;
5003
4985
  this._showToggletip = false;
5004
4986
  this.toggletipClose = new EventEmitter();
@@ -5045,6 +5027,7 @@ class ToggletipDirective {
5045
5027
  _mountToggletip() {
5046
5028
  this._animatedOverlay.mount({
5047
5029
  component: ToggletipComponent,
5030
+ themeProvider: this._themeProvider,
5048
5031
  providers: [
5049
5032
  {
5050
5033
  provide: TOGGLETIP_CONFIG,
@@ -5102,6 +5085,7 @@ class ToggletipComponent {
5102
5085
  this._config = inject(TOGGLETIP_CONFIG);
5103
5086
  this.toggletipText = inject(TOGGLETIP_TEXT, { optional: true });
5104
5087
  this.toggletipTemplate = inject(TOGGLETIP_TEMPLATE, { optional: true });
5088
+ this._themeProvider = inject(THEME_PROVIDER);
5105
5089
  this.injector = inject(Injector);
5106
5090
  this._cdr = inject(ChangeDetectorRef);
5107
5091
  this._trigger = inject(TOGGLETIP_DIRECTIVE);
@@ -5119,17 +5103,20 @@ class ToggletipComponent {
5119
5103
  _markForCheck() {
5120
5104
  this._cdr.markForCheck();
5121
5105
  }
5106
+ _setThemeFromProvider(provider) {
5107
+ this._themeProvider.syncWithProvider(provider);
5108
+ }
5122
5109
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: ToggletipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5123
5110
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: ToggletipComponent, isStandalone: true, selector: "et-toggletip", host: { properties: { "attr.aria-hidden": "this.attrAriaHidden", "class.et-with-default-animation": "this.usesDefaultAnimation", "class": "this.containerClass" }, classAttribute: "et-toggletip" }, providers: [
5124
5111
  {
5125
5112
  provide: TOGGLETIP,
5126
5113
  useExisting: ToggletipComponent,
5127
5114
  },
5128
- ], viewQueries: [{ propertyName: "_animatedLifecycle", first: true, predicate: ANIMATED_LIFECYCLE_TOKEN, descendants: true, static: true }], ngImport: i0, template: "<div class=\"et-toggletip-container\" etAnimatedLifecycle>\n <ng-container *ngIf=\"toggletipText\">\n {{ toggletipText }}\n </ng-container>\n\n <ng-container *ngIf=\"toggletipTemplate\">\n <ng-container *ngTemplateOutlet=\"toggletipTemplate; injector: injector\" />\n </ng-container>\n\n <div class=\"toggletip-arrow\" et-floating-arrow></div>\n</div>\n", styles: [":where(.et-toggletip){--background-color: hsl(0 0% 20%);--foreground-color: CanvasText;--border-radius: 4px;--padding-inline: 1.5ch;--padding-block: .75ch;--inline-max-size: 25ch;--arrow-size: 10px;--arrow-radius: 2px}.et-toggletip{transform:var(--et-floating-translate);will-change:transform}.et-toggletip[et-floating-placement^=top] .toggletip-arrow{bottom:-4px;left:0}.et-toggletip[et-floating-placement^=right] .toggletip-arrow{left:-4px;top:0}.et-toggletip[et-floating-placement^=bottom] .toggletip-arrow{top:-4px;left:0}.et-toggletip[et-floating-placement^=left] .toggletip-arrow{right:-4px;top:0}.et-toggletip-container{z-index:1;inline-size:max-content;max-inline-size:var(--inline-max-size);padding:var(--padding-block) var(--padding-inline);border-radius:var(--border-radius);background:var(--background-color);color:var(--foreground-color);will-change:transform}.et-toggletip-container:before{content:\"; Has toggletip: \";clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.toggletip-arrow{transform:var(--et-floating-arrow-translate);inline-size:var(--arrow-size);block-size:var(--arrow-size);position:absolute;z-index:1;will-change:transform}.toggletip-arrow:before{inline-size:var(--arrow-size);block-size:var(--arrow-size);border-radius:var(--arrow-radius);position:absolute;z-index:-1;transform:rotate(45deg);background:var(--background-color);top:0;left:0;content:\"\"}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-leave-to{opacity:0}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-enter-from .toggletip-arrow:before,.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-leave-to .toggletip-arrow:before{transform:rotate(45deg) scale(0)}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-enter-active{transition:transform .2s var(--ease-out-5),opacity .2s var(--ease-out-5)}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-enter-active .toggletip-arrow:before{transition:transform .2s var(--ease-out-5)}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-leave-active{transition:transform .15s var(--ease-in-5),opacity .15s var(--ease-in-5)}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-leave-active .toggletip-arrow:before{transition:transform .15s var(--ease-in-5)}.et-toggletip.et-with-default-animation[et-floating-placement^=top] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[et-floating-placement^=top] .et-toggletip-container.et-animation-leave-to{transform:translateY(5px)}.et-toggletip.et-with-default-animation[et-floating-placement^=right] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[et-floating-placement^=right] .et-toggletip-container.et-animation-leave-to{transform:translate(-5px)}.et-toggletip.et-with-default-animation[et-floating-placement^=bottom] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[et-floating-placement^=bottom] .et-toggletip-container.et-animation-leave-to{transform:translateY(-5px)}.et-toggletip.et-with-default-animation[et-floating-placement^=left] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[et-floating-placement^=left] .et-toggletip-container.et-animation-leave-to{transform:translate(5px)}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AnimatedLifecycleDirective, selector: "[etAnimatedLifecycle]", exportAs: ["etAnimatedLifecycle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5115
+ ], viewQueries: [{ propertyName: "_animatedLifecycle", first: true, predicate: ANIMATED_LIFECYCLE_TOKEN, descendants: true, static: true }], hostDirectives: [{ directive: i2$1.ProvideThemeDirective }], ngImport: i0, template: "<div class=\"et-toggletip-container\" etAnimatedLifecycle>\n <ng-container *ngIf=\"toggletipText\">\n {{ toggletipText }}\n </ng-container>\n\n <ng-container *ngIf=\"toggletipTemplate\">\n <ng-container *ngTemplateOutlet=\"toggletipTemplate; injector: injector\" />\n </ng-container>\n\n <div class=\"toggletip-arrow\" et-floating-arrow></div>\n</div>\n", styles: [":where(.et-toggletip){--background-color: hsl(0 0% 20%);--foreground-color: CanvasText;--border-radius: 4px;--padding-inline: 1.5ch;--padding-block: .75ch;--inline-max-size: 25ch;--arrow-size: 10px;--arrow-radius: 2px}.et-toggletip{transform:var(--et-floating-translate);will-change:transform}.et-toggletip[et-floating-placement^=top] .toggletip-arrow{bottom:-4px;left:0}.et-toggletip[et-floating-placement^=right] .toggletip-arrow{left:-4px;top:0}.et-toggletip[et-floating-placement^=bottom] .toggletip-arrow{top:-4px;left:0}.et-toggletip[et-floating-placement^=left] .toggletip-arrow{right:-4px;top:0}.et-toggletip-container{z-index:1;inline-size:max-content;max-inline-size:var(--inline-max-size);padding:var(--padding-block) var(--padding-inline);border-radius:var(--border-radius);background:var(--background-color);color:var(--foreground-color);will-change:transform}.et-toggletip-container:before{content:\"; Has toggletip: \";clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.toggletip-arrow{transform:var(--et-floating-arrow-translate);inline-size:var(--arrow-size);block-size:var(--arrow-size);position:absolute;z-index:1;will-change:transform}.toggletip-arrow:before{inline-size:var(--arrow-size);block-size:var(--arrow-size);border-radius:var(--arrow-radius);position:absolute;z-index:-1;transform:rotate(45deg);background:var(--background-color);top:0;left:0;content:\"\"}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-leave-to{opacity:0}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-enter-from .toggletip-arrow:before,.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-leave-to .toggletip-arrow:before{transform:rotate(45deg) scale(0)}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-enter-active{transition:transform .2s var(--ease-out-5),opacity .2s var(--ease-out-5)}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-enter-active .toggletip-arrow:before{transition:transform .2s var(--ease-out-5)}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-leave-active{transition:transform .15s var(--ease-in-5),opacity .15s var(--ease-in-5)}.et-toggletip.et-with-default-animation .et-toggletip-container.et-animation-leave-active .toggletip-arrow:before{transition:transform .15s var(--ease-in-5)}.et-toggletip.et-with-default-animation[et-floating-placement^=top] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[et-floating-placement^=top] .et-toggletip-container.et-animation-leave-to{transform:translateY(5px)}.et-toggletip.et-with-default-animation[et-floating-placement^=right] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[et-floating-placement^=right] .et-toggletip-container.et-animation-leave-to{transform:translate(-5px)}.et-toggletip.et-with-default-animation[et-floating-placement^=bottom] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[et-floating-placement^=bottom] .et-toggletip-container.et-animation-leave-to{transform:translateY(-5px)}.et-toggletip.et-with-default-animation[et-floating-placement^=left] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[et-floating-placement^=left] .et-toggletip-container.et-animation-leave-to{transform:translate(5px)}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AnimatedLifecycleDirective, selector: "[etAnimatedLifecycle]", exportAs: ["etAnimatedLifecycle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5129
5116
  }
5130
5117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: ToggletipComponent, decorators: [{
5131
5118
  type: Component,
5132
- args: [{ selector: 'et-toggletip', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgIf, NgTemplateOutlet, AnimatedLifecycleDirective], host: {
5119
+ args: [{ selector: 'et-toggletip', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgIf, NgTemplateOutlet, AnimatedLifecycleDirective], hostDirectives: [ProvideThemeDirective], host: {
5133
5120
  class: 'et-toggletip',
5134
5121
  }, providers: [
5135
5122
  {
@@ -5198,6 +5185,7 @@ class TooltipDirective {
5198
5185
  constructor() {
5199
5186
  this._defaultConfig = inject(TOOLTIP_CONFIG, { optional: true }) ?? createTooltipConfig();
5200
5187
  this._animatedOverlay = inject(AnimatedOverlayDirective);
5188
+ this._themeProvider = inject(THEME_PROVIDER, { optional: true });
5201
5189
  this._tooltip = null;
5202
5190
  this._tooltipAriaDescription = null;
5203
5191
  this._lastTooltipText = null;
@@ -5276,6 +5264,7 @@ class TooltipDirective {
5276
5264
  _mountTooltip() {
5277
5265
  this._animatedOverlay.mount({
5278
5266
  component: TooltipComponent,
5267
+ themeProvider: this._themeProvider,
5279
5268
  providers: [
5280
5269
  {
5281
5270
  provide: TOOLTIP_CONFIG,
@@ -5336,6 +5325,7 @@ class TooltipComponent {
5336
5325
  this._config = inject(TOOLTIP_CONFIG);
5337
5326
  this.tooltipText = inject(TOOLTIP_TEXT, { optional: true });
5338
5327
  this.tooltipTemplate = inject(TOOLTIP_TEMPLATE, { optional: true });
5328
+ this._themeProvider = inject(THEME_PROVIDER);
5339
5329
  this.injector = inject(Injector);
5340
5330
  this._cdr = inject(ChangeDetectorRef);
5341
5331
  this._trigger = inject(TOOLTIP_DIRECTIVE);
@@ -5353,17 +5343,20 @@ class TooltipComponent {
5353
5343
  _markForCheck() {
5354
5344
  this._cdr.markForCheck();
5355
5345
  }
5346
+ _setThemeFromProvider(provider) {
5347
+ this._themeProvider.syncWithProvider(provider);
5348
+ }
5356
5349
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5357
5350
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: TooltipComponent, isStandalone: true, selector: "et-tooltip", host: { properties: { "attr.aria-hidden": "this.attrAriaHidden", "class.et-with-default-animation": "this.usesDefaultAnimation", "class": "this.containerClass" }, classAttribute: "et-tooltip" }, providers: [
5358
5351
  {
5359
5352
  provide: TOOLTIP,
5360
5353
  useExisting: TooltipComponent,
5361
5354
  },
5362
- ], viewQueries: [{ propertyName: "_animatedLifecycle", first: true, predicate: ANIMATED_LIFECYCLE_TOKEN, descendants: true, static: true }], ngImport: i0, template: "<div class=\"et-tooltip-container\" etAnimatedLifecycle>\n <ng-container *ngIf=\"tooltipText\">\n {{ tooltipText }}\n </ng-container>\n\n <ng-container *ngIf=\"tooltipTemplate\">\n <ng-container *ngTemplateOutlet=\"tooltipTemplate; injector: injector\" />\n </ng-container>\n\n <div class=\"tooltip-arrow\" et-floating-arrow></div>\n</div>\n", styles: [":where(.et-tooltip){--background-color: hsl(0 0% 20%);--foreground-color: CanvasText;--border-radius: 4px;--padding-inline: 1.5ch;--padding-block: .75ch;--inline-max-size: 25ch;--arrow-size: 10px;--arrow-radius: 2px}.et-tooltip{pointer-events:none;-webkit-user-select:none;user-select:none;transform:var(--et-floating-translate);will-change:transform}.et-tooltip[et-floating-placement^=top] .tooltip-arrow{bottom:-4px;left:0}.et-tooltip[et-floating-placement^=right] .tooltip-arrow{left:-4px;top:0}.et-tooltip[et-floating-placement^=bottom] .tooltip-arrow{top:-4px;left:0}.et-tooltip[et-floating-placement^=left] .tooltip-arrow{right:-4px;top:0}.et-tooltip-container{z-index:1;inline-size:max-content;max-inline-size:var(--inline-max-size);padding:var(--padding-block) var(--padding-inline);border-radius:var(--border-radius);background:var(--background-color);color:var(--foreground-color);will-change:transform}.et-tooltip-container:before{content:\"; Has tooltip: \";clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.tooltip-arrow{inline-size:var(--arrow-size);block-size:var(--arrow-size);position:absolute;z-index:1;transform:var(--et-floating-arrow-translate);will-change:transform}.tooltip-arrow:before{inline-size:var(--arrow-size);block-size:var(--arrow-size);border-radius:var(--arrow-radius);position:absolute;z-index:-1;transform:rotate(45deg);background:var(--background-color);top:0;left:0;content:\"\"}.et-tooltip.et-with-default-animation .et-tooltip-container.et-animation-enter-from,.et-tooltip.et-with-default-animation .et-tooltip-container.et-animation-leave-to{opacity:0}.et-tooltip.et-with-default-animation .et-tooltip-container.et-animation-enter-active{transition:transform .3s var(--ease-out-5),opacity .3s var(--ease-out-5)}.et-tooltip.et-with-default-animation .et-tooltip-container.et-animation-leave-active{transition:transform .15s var(--ease-in-5),opacity .15s var(--ease-in-5)}.et-tooltip.et-with-default-animation[et-floating-placement^=top] .et-tooltip-container.et-animation-enter-from,.et-tooltip.et-with-default-animation[et-floating-placement^=top] .et-tooltip-container.et-animation-leave-to{transform:translateY(5px)}.et-tooltip.et-with-default-animation[et-floating-placement^=right] .et-tooltip-container.et-animation-enter-from,.et-tooltip.et-with-default-animation[et-floating-placement^=right] .et-tooltip-container.et-animation-leave-to{transform:translate(-5px)}.et-tooltip.et-with-default-animation[et-floating-placement^=bottom] .et-tooltip-container.et-animation-enter-from,.et-tooltip.et-with-default-animation[et-floating-placement^=bottom] .et-tooltip-container.et-animation-leave-to{transform:translateY(-5px)}.et-tooltip.et-with-default-animation[et-floating-placement^=left] .et-tooltip-container.et-animation-enter-from,.et-tooltip.et-with-default-animation[et-floating-placement^=left] .et-tooltip-container.et-animation-leave-to{transform:translate(5px)}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AnimatedLifecycleDirective, selector: "[etAnimatedLifecycle]", exportAs: ["etAnimatedLifecycle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5355
+ ], viewQueries: [{ propertyName: "_animatedLifecycle", first: true, predicate: ANIMATED_LIFECYCLE_TOKEN, descendants: true, static: true }], hostDirectives: [{ directive: i2$1.ProvideThemeDirective }], ngImport: i0, template: "<div class=\"et-tooltip-container\" etAnimatedLifecycle>\n <ng-container *ngIf=\"tooltipText\">\n {{ tooltipText }}\n </ng-container>\n\n <ng-container *ngIf=\"tooltipTemplate\">\n <ng-container *ngTemplateOutlet=\"tooltipTemplate; injector: injector\" />\n </ng-container>\n\n <div class=\"tooltip-arrow\" et-floating-arrow></div>\n</div>\n", styles: [":where(.et-tooltip){--background-color: hsl(0 0% 20%);--foreground-color: CanvasText;--border-radius: 4px;--padding-inline: 1.5ch;--padding-block: .75ch;--inline-max-size: 25ch;--arrow-size: 10px;--arrow-radius: 2px}.et-tooltip{pointer-events:none;-webkit-user-select:none;user-select:none;transform:var(--et-floating-translate);will-change:transform}.et-tooltip[et-floating-placement^=top] .tooltip-arrow{bottom:-4px;left:0}.et-tooltip[et-floating-placement^=right] .tooltip-arrow{left:-4px;top:0}.et-tooltip[et-floating-placement^=bottom] .tooltip-arrow{top:-4px;left:0}.et-tooltip[et-floating-placement^=left] .tooltip-arrow{right:-4px;top:0}.et-tooltip-container{z-index:1;inline-size:max-content;max-inline-size:var(--inline-max-size);padding:var(--padding-block) var(--padding-inline);border-radius:var(--border-radius);background:var(--background-color);color:var(--foreground-color);will-change:transform}.et-tooltip-container:before{content:\"; Has tooltip: \";clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.tooltip-arrow{inline-size:var(--arrow-size);block-size:var(--arrow-size);position:absolute;z-index:1;transform:var(--et-floating-arrow-translate);will-change:transform}.tooltip-arrow:before{inline-size:var(--arrow-size);block-size:var(--arrow-size);border-radius:var(--arrow-radius);position:absolute;z-index:-1;transform:rotate(45deg);background:var(--background-color);top:0;left:0;content:\"\"}.et-tooltip.et-with-default-animation .et-tooltip-container.et-animation-enter-from,.et-tooltip.et-with-default-animation .et-tooltip-container.et-animation-leave-to{opacity:0}.et-tooltip.et-with-default-animation .et-tooltip-container.et-animation-enter-active{transition:transform .3s var(--ease-out-5),opacity .3s var(--ease-out-5)}.et-tooltip.et-with-default-animation .et-tooltip-container.et-animation-leave-active{transition:transform .15s var(--ease-in-5),opacity .15s var(--ease-in-5)}.et-tooltip.et-with-default-animation[et-floating-placement^=top] .et-tooltip-container.et-animation-enter-from,.et-tooltip.et-with-default-animation[et-floating-placement^=top] .et-tooltip-container.et-animation-leave-to{transform:translateY(5px)}.et-tooltip.et-with-default-animation[et-floating-placement^=right] .et-tooltip-container.et-animation-enter-from,.et-tooltip.et-with-default-animation[et-floating-placement^=right] .et-tooltip-container.et-animation-leave-to{transform:translate(-5px)}.et-tooltip.et-with-default-animation[et-floating-placement^=bottom] .et-tooltip-container.et-animation-enter-from,.et-tooltip.et-with-default-animation[et-floating-placement^=bottom] .et-tooltip-container.et-animation-leave-to{transform:translateY(-5px)}.et-tooltip.et-with-default-animation[et-floating-placement^=left] .et-tooltip-container.et-animation-enter-from,.et-tooltip.et-with-default-animation[et-floating-placement^=left] .et-tooltip-container.et-animation-leave-to{transform:translate(5px)}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AnimatedLifecycleDirective, selector: "[etAnimatedLifecycle]", exportAs: ["etAnimatedLifecycle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
5363
5356
  }
5364
5357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: TooltipComponent, decorators: [{
5365
5358
  type: Component,
5366
- args: [{ selector: 'et-tooltip', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgIf, NgTemplateOutlet, AnimatedLifecycleDirective], host: {
5359
+ args: [{ selector: 'et-tooltip', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgIf, NgTemplateOutlet, AnimatedLifecycleDirective], hostDirectives: [ProvideThemeDirective], host: {
5367
5360
  class: 'et-tooltip',
5368
5361
  }, providers: [
5369
5362
  {
@@ -5854,8 +5847,25 @@ class InputStateService {
5854
5847
  this.valueIsTruthy = toSignal(this.valueIsTruthy$, { requireSync: true });
5855
5848
  this.valueIsFalsy$ = this.value$.pipe(map((value) => !value));
5856
5849
  this.valueIsFalsy = toSignal(this.valueIsFalsy$, { requireSync: true });
5857
- this.valueIsEmpty$ = combineLatest([this.value$, this.autofilled$]).pipe(map(([value, autofilled]) => (value === null || value === undefined || value === '' || (Array.isArray(value) && !value.length)) &&
5858
- !autofilled));
5850
+ /**
5851
+ * Selects might have a option that is "null".
5852
+ * This helper can be used to enhance the detection of empty values.
5853
+ * The input is empty if the helper returns a falsy value and the value itself is falsy or an empty array.
5854
+ */
5855
+ this.isEmptyHelper$ = new BehaviorSubject(undefined);
5856
+ this.isEmptyHelper = toSignal(this.isEmptyHelper$, { requireSync: true });
5857
+ this.valueIsEmpty$ = combineLatest([
5858
+ this.value$,
5859
+ this.autofilled$,
5860
+ this.isEmptyHelper$.pipe(switchMap((isEmptyHelper) => (isEmptyHelper instanceof Observable ? isEmptyHelper : of(isEmptyHelper)))),
5861
+ ]).pipe(map(([value, autofilled, isEmptyHelper]) => {
5862
+ const defaultIsEmpty = (value === null || value === undefined || value === '' || (Array.isArray(value) && !value.length)) &&
5863
+ !autofilled;
5864
+ if (isEmptyHelper !== undefined) {
5865
+ return !isEmptyHelper && defaultIsEmpty;
5866
+ }
5867
+ return defaultIsEmpty;
5868
+ }));
5859
5869
  this.valueIsEmpty = toSignal(this.valueIsEmpty$, { requireSync: true });
5860
5870
  this.errors$ = new BehaviorSubject(null);
5861
5871
  this.errors = toSignal(this.errors$, { requireSync: true });
@@ -6335,6 +6345,9 @@ class InputDirective {
6335
6345
  }
6336
6346
  this._inputStateService.shouldDisplayError$.next(value);
6337
6347
  }
6348
+ _setEmptyHelper(value) {
6349
+ this._inputStateService.isEmptyHelper$.next(value);
6350
+ }
6338
6351
  _detectControlRequiredValidationChanges() {
6339
6352
  const hasRequired = this.control.hasValidator(Validators.required) ?? false;
6340
6353
  const hasRequiredTrue = this.control.hasValidator(Validators.requiredTrue) ?? false;
@@ -6618,27 +6631,14 @@ const WRITEABLE_INPUT_VALUE_ACCESSOR = {
6618
6631
  class WriteableInputDirective {
6619
6632
  constructor() {
6620
6633
  this._inputStateService = inject(InputStateService);
6621
- this._bindings = createReactiveBindings({
6622
- attribute: 'class.et-required',
6623
- observable: this._inputStateService.required$,
6624
- }, {
6625
- attribute: 'class.et-disabled',
6626
- observable: this._inputStateService.disabled$,
6627
- }, {
6628
- attribute: 'class.et-value-is-truthy',
6629
- observable: this._inputStateService.valueIsTruthy$,
6630
- }, {
6631
- attribute: 'class.et-value-is-falsy',
6632
- observable: this._inputStateService.valueIsFalsy$,
6633
- }, {
6634
- attribute: 'class.et-empty',
6635
- observable: this._inputStateService.valueIsEmpty$,
6636
- }, {
6637
- attribute: 'class.et-should-display-error',
6638
- observable: this._inputStateService.shouldDisplayError$,
6639
- }, {
6640
- attribute: 'class.et-autofilled',
6641
- observable: this._inputStateService.autofilled$,
6634
+ this.hostClassBindings = signalHostClasses({
6635
+ 'et-required': this._inputStateService.required,
6636
+ 'et-disabled': this._inputStateService.disabled,
6637
+ 'et-value-is-truthy': this._inputStateService.valueIsTruthy,
6638
+ 'et-value-is-falsy': this._inputStateService.valueIsFalsy,
6639
+ 'et-empty': this._inputStateService.valueIsEmpty,
6640
+ 'et-should-display-error': this._inputStateService.shouldDisplayError,
6641
+ 'et-autofilled': this._inputStateService.autofilled,
6642
6642
  });
6643
6643
  }
6644
6644
  writeValue(value) {
@@ -6682,12 +6682,9 @@ class ErrorComponent {
6682
6682
  this.errorText$ = new BehaviorSubject(null);
6683
6683
  this.id = `et-error-${_uniqueIdCounter++}`;
6684
6684
  this._errors = null;
6685
- this._bindings = createReactiveBindings({
6686
- attribute: 'class.et-error--has-errors',
6687
- observable: this.errorText$.pipe(map((v) => !!v)),
6688
- }, {
6689
- attribute: 'class.cdk-visually-hidden',
6690
- observable: this._dynamicFormGroupOrField.hideErrorMessage$,
6685
+ this.hostClassBindings = signalHostClasses({
6686
+ 'et-error--has-errors': toSignal(this.errorText$),
6687
+ 'cdk-visually-hidden': toSignal(this._dynamicFormGroupOrField.hideErrorMessage$),
6691
6688
  });
6692
6689
  }
6693
6690
  get errors() {
@@ -6726,19 +6723,21 @@ const CHECKBOX_FIELD_TOKEN = new InjectionToken('ET_CHECKBOX_FIELD_DIRECTIVE_TOK
6726
6723
  class CheckboxFieldDirective {
6727
6724
  constructor() {
6728
6725
  this.inputState = inject(InputStateService);
6729
- this._bindings = createReactiveBindings();
6730
- }
6731
- ngAfterContentInit() {
6732
- if (!this._checkbox) {
6733
- return;
6734
- }
6735
- this._bindings.push({
6736
- attribute: 'class.et-checkbox-field--indeterminate',
6737
- observable: this._checkbox.changes.pipe(startWith(this._checkbox)).pipe(switchMap((checkboxes) => combineLatest(checkboxes.filter((cb) => !!cb).map((checkbox) => checkbox.indeterminate$))), map((checked) => checked.some((value) => value))),
6726
+ this._checkbox$ = new BehaviorSubject(null);
6727
+ this.hostClassBindings = signalHostClasses({
6728
+ 'et-checkbox-field--indeterminate': toSignal(this._checkbox$.pipe(switchQueryListChanges(), switchMap((checkboxes) => {
6729
+ if (!checkboxes?.length) {
6730
+ return of(null);
6731
+ }
6732
+ return combineLatest(checkboxes.map((checkbox) => checkbox.indeterminate$)).pipe(map((indeterminateStates) => indeterminateStates.some((isIndeterminate) => isIndeterminate)));
6733
+ }))),
6738
6734
  });
6739
6735
  }
6736
+ set checkbox(checkbox) {
6737
+ this._checkbox$.next(checkbox);
6738
+ }
6740
6739
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: CheckboxFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
6741
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: CheckboxFieldDirective, isStandalone: true, providers: [{ provide: CHECKBOX_FIELD_TOKEN, useExisting: CheckboxFieldDirective }], queries: [{ propertyName: "_checkbox", predicate: i0.forwardRef(function () { return CHECKBOX_TOKEN; }), descendants: true }], exportAs: ["etCheckboxGroup"], ngImport: i0 }); }
6740
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: CheckboxFieldDirective, isStandalone: true, providers: [{ provide: CHECKBOX_FIELD_TOKEN, useExisting: CheckboxFieldDirective }], queries: [{ propertyName: "checkbox", predicate: i0.forwardRef(function () { return CHECKBOX_TOKEN; }), descendants: true }], exportAs: ["etCheckboxGroup"], ngImport: i0 }); }
6742
6741
  }
6743
6742
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: CheckboxFieldDirective, decorators: [{
6744
6743
  type: Directive,
@@ -6747,7 +6746,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
6747
6746
  providers: [{ provide: CHECKBOX_FIELD_TOKEN, useExisting: CheckboxFieldDirective }],
6748
6747
  exportAs: 'etCheckboxGroup',
6749
6748
  }]
6750
- }], propDecorators: { _checkbox: [{
6749
+ }], propDecorators: { checkbox: [{
6751
6750
  type: ContentChildren,
6752
6751
  args: [forwardRef(() => CHECKBOX_TOKEN), { descendants: true }]
6753
6752
  }] } });
@@ -6758,15 +6757,10 @@ class CheckboxDirective {
6758
6757
  this.input = inject(INPUT_TOKEN);
6759
6758
  this.checked$ = this.input.value$.pipe(map((value) => !!value));
6760
6759
  this.indeterminate$ = new BehaviorSubject(false);
6761
- this._bindings = createReactiveBindings({
6762
- attribute: ['class.et-checkbox--checked'],
6763
- observable: this.checked$,
6764
- }, {
6765
- attribute: ['class.et-checkbox--disabled'],
6766
- observable: this.input.disabled$,
6767
- }, {
6768
- attribute: ['class.et-checkbox--indeterminate'],
6769
- observable: combineLatest([this.checked$, this.indeterminate$]).pipe(map(([checked, indeterminate]) => !checked && indeterminate)),
6760
+ this.hostClassBindings = signalHostClasses({
6761
+ 'et-checkbox--checked': toSignal(this.checked$),
6762
+ 'et-checkbox--disabled': toSignal(this.input.disabled$),
6763
+ 'et-checkbox--indeterminate': toSignal(combineLatest([this.checked$, this.indeterminate$]).pipe(map(([checked, indeterminate]) => !checked && indeterminate))),
6770
6764
  });
6771
6765
  }
6772
6766
  _onInputInteraction(event) {
@@ -6874,16 +6868,8 @@ class CheckboxGroupControlDirective {
6874
6868
  this.checkbox = inject(CHECKBOX_TOKEN);
6875
6869
  this.input = inject(INPUT_TOKEN);
6876
6870
  this.group = inject(CHECKBOX_GROUP_TOKEN);
6877
- this._bindings = createReactiveBindings();
6878
- }
6879
- ngAfterContentInit() {
6880
- this._bindings.push({
6881
- attribute: ['aria-controls'],
6882
- elementRef: this.input.nativeInputRef?.element,
6883
- observable: this.group.checkboxesWithoutGroupCtrl$.pipe(map((checkboxes) => ({
6884
- render: true,
6885
- value: checkboxes.map((checkbox) => checkbox.input.id).join(' '),
6886
- }))) ?? of(false),
6871
+ this.inputAttributeBindings = signalAttributes(this.input.nativeInputRef$.pipe(map((el) => el?.element)), {
6872
+ 'aria-controls': toSignal(this.group.checkboxesWithoutGroupCtrl$.pipe(map((checkboxes) => checkboxes.map((checkbox) => checkbox.input.id).join(' ')))),
6887
6873
  });
6888
6874
  }
6889
6875
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: CheckboxGroupControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
@@ -6947,12 +6933,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
6947
6933
  class DecoratedFormFieldBase {
6948
6934
  constructor() {
6949
6935
  this._formFieldStateService = inject(FormFieldStateService);
6950
- this._bindings = createReactiveBindings({
6951
- attribute: 'class.et-form-field--has-prefix',
6952
- observable: this._formFieldStateService.hasPrefix$,
6953
- }, {
6954
- attribute: 'class.et-form-field--has-suffix',
6955
- observable: this._formFieldStateService.hasSuffix$,
6936
+ this.hostClassBindings = signalHostClasses({
6937
+ 'et-form-field--has-prefix': this._formFieldStateService.hasPrefix,
6938
+ 'et-form-field--has-suffix': this._formFieldStateService.hasSuffix,
6956
6939
  });
6957
6940
  }
6958
6941
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: DecoratedFormFieldBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
@@ -6980,35 +6963,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
6980
6963
  }] } });
6981
6964
 
6982
6965
  class DecoratedInputBase extends InputBase {
6966
+ set inputPrefix(inputPrefix) {
6967
+ this.inputPrefix$.next(inputPrefix);
6968
+ }
6969
+ set inputSuffix(inputSuffix) {
6970
+ this.inputSuffix$.next(inputSuffix);
6971
+ }
6983
6972
  constructor() {
6984
- super(...arguments);
6973
+ super();
6985
6974
  this._formFieldStateService = inject(FormFieldStateService);
6986
6975
  this._destroy$ = createDestroy();
6987
- this._bindings = createReactiveBindings({
6988
- attribute: 'class.et-input--has-prefix',
6989
- observable: this._formFieldStateService.hasPrefix$,
6990
- }, {
6991
- attribute: 'class.et-input--has-suffix',
6992
- observable: this._formFieldStateService.hasSuffix$,
6976
+ this.inputPrefix$ = new BehaviorSubject(null);
6977
+ this.inputSuffix$ = new BehaviorSubject(null);
6978
+ this.hasPrefix$ = this.inputPrefix$.pipe(switchQueryListChanges(), map((list) => !!list && list?.length > 0));
6979
+ this.hasSuffix$ = this.inputSuffix$.pipe(switchQueryListChanges(), map((list) => !!list && list?.length > 0));
6980
+ this.hostClassBindings = signalHostClasses({
6981
+ 'et-input--has-prefix': toSignal(this.hasPrefix$),
6982
+ 'et-input--has-suffix': toSignal(this.hasSuffix$),
6993
6983
  });
6984
+ this.hasPrefix$
6985
+ .pipe(takeUntilDestroyed(), tap((hasPrefix) => this._formFieldStateService.hasPrefix$.next(hasPrefix)))
6986
+ .subscribe();
6987
+ this.hasSuffix$
6988
+ .pipe(takeUntilDestroyed(), tap((hasSuffix) => this._formFieldStateService.hasSuffix$.next(hasSuffix)))
6989
+ .subscribe();
6994
6990
  }
6995
- ngAfterContentInit() {
6996
- if (!this.inputPrefix || !this.inputSuffix) {
6997
- return;
6998
- }
6999
- this.inputPrefix.changes
7000
- .pipe(takeUntil(this._destroy$), startWith(this.inputPrefix), map((list) => list.length > 0))
7001
- .subscribe(this._formFieldStateService.hasPrefix$);
7002
- this.inputSuffix.changes
7003
- .pipe(takeUntil(this._destroy$), startWith(this.inputSuffix), map((list) => list.length > 0))
7004
- .subscribe(this._formFieldStateService.hasSuffix$);
7005
- }
7006
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: DecoratedInputBase, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
6991
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: DecoratedInputBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
7007
6992
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: DecoratedInputBase, queries: [{ propertyName: "inputPrefix", predicate: INPUT_PREFIX_TOKEN }, { propertyName: "inputSuffix", predicate: INPUT_SUFFIX_TOKEN }], usesInheritance: true, ngImport: i0 }); }
7008
6993
  }
7009
6994
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: DecoratedInputBase, decorators: [{
7010
6995
  type: Directive
7011
- }], propDecorators: { inputPrefix: [{
6996
+ }], ctorParameters: function () { return []; }, propDecorators: { inputPrefix: [{
7012
6997
  type: ContentChildren,
7013
6998
  args: [INPUT_PREFIX_TOKEN]
7014
6999
  }], inputSuffix: [{
@@ -7639,12 +7624,9 @@ class RadioDirective {
7639
7624
  this._disabled$ = new BehaviorSubject(false);
7640
7625
  this.checked$ = combineLatest([this.input.value$, this._value$]).pipe(map(([inputValue, value]) => inputValue === value));
7641
7626
  this.disabled$ = combineLatest([this.input.disabled$, this._disabled$]).pipe(map(([inputDisabled, disabled]) => inputDisabled || disabled));
7642
- this._bindings = createReactiveBindings({
7643
- attribute: ['class.et-radio--checked'],
7644
- observable: this.checked$,
7645
- }, {
7646
- attribute: ['class.et-radio--disabled'],
7647
- observable: this.disabled$,
7627
+ this.hostClassBindings = signalHostClasses({
7628
+ 'et-radio--checked': toSignal(this.disabled$),
7629
+ 'et-radio--disabled': toSignal(this.disabled$),
7648
7630
  });
7649
7631
  }
7650
7632
  get value() {
@@ -7692,23 +7674,18 @@ const RADIO_FIELD_TOKEN = new InjectionToken('ET_RADIO_FIELD_DIRECTIVE_TOKEN');
7692
7674
  class RadioFieldDirective {
7693
7675
  constructor() {
7694
7676
  this.inputState = inject(InputStateService);
7695
- this._bindings = createReactiveBindings();
7696
- }
7697
- ngAfterContentInit() {
7698
- if (!this._radio) {
7699
- return;
7700
- }
7701
- this._bindings.push({
7702
- attribute: 'class.et-radio-field--checked',
7703
- observable: this._radio.changes.pipe(startWith(this._radio)).pipe(switchMap((radios) => combineLatest(radios.filter((radio) => !!radio).map((radio) => radio.checked$))), map((checked) => checked.some((value) => value))),
7704
- });
7705
- this._bindings.push({
7706
- attribute: 'class.et-radio-field--disabled',
7707
- observable: this._radio.changes.pipe(startWith(this._radio)).pipe(switchMap((radios) => combineLatest(radios.filter((radio) => !!radio).map((radio) => radio.disabled$))), map((disabled) => disabled.some((value) => value))),
7677
+ this._radio$ = new BehaviorSubject(null);
7678
+ this.radioQueryList$ = this._radio$.pipe(switchQueryListChanges());
7679
+ this.hostClassBindings = signalHostClasses({
7680
+ 'et-radio-field--checked': toSignal(this.radioQueryList$.pipe(switchMap((radios) => (radios?.length ? combineLatest(radios.map((radio) => radio.disabled$)) : of([]))), map((checked) => checked.some((value) => value)))),
7681
+ 'et-radio-field--disabled': toSignal(this.radioQueryList$.pipe(switchMap((radios) => (radios?.length ? combineLatest(radios.map((radio) => radio.disabled$)) : of([]))), map((disabled) => disabled.some((value) => value)))),
7708
7682
  });
7709
7683
  }
7684
+ set radio(radio) {
7685
+ this._radio$.next(radio);
7686
+ }
7710
7687
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: RadioFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
7711
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: RadioFieldDirective, isStandalone: true, providers: [{ provide: RADIO_FIELD_TOKEN, useExisting: RadioFieldDirective }], queries: [{ propertyName: "_radio", predicate: i0.forwardRef(function () { return RADIO_TOKEN; }), descendants: true }], exportAs: ["etRadioField"], ngImport: i0 }); }
7688
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: RadioFieldDirective, isStandalone: true, providers: [{ provide: RADIO_FIELD_TOKEN, useExisting: RadioFieldDirective }], queries: [{ propertyName: "radio", predicate: i0.forwardRef(function () { return RADIO_TOKEN; }), descendants: true }], exportAs: ["etRadioField"], ngImport: i0 }); }
7712
7689
  }
7713
7690
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: RadioFieldDirective, decorators: [{
7714
7691
  type: Directive,
@@ -7717,7 +7694,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
7717
7694
  providers: [{ provide: RADIO_FIELD_TOKEN, useExisting: RadioFieldDirective }],
7718
7695
  exportAs: 'etRadioField',
7719
7696
  }]
7720
- }], propDecorators: { _radio: [{
7697
+ }], propDecorators: { radio: [{
7721
7698
  type: ContentChildren,
7722
7699
  args: [forwardRef(() => RADIO_TOKEN), { descendants: true }]
7723
7700
  }] } });
@@ -7728,14 +7705,8 @@ class RadioGroupDirective {
7728
7705
  constructor() {
7729
7706
  this._formGroupStateService = inject(FormGroupStateService);
7730
7707
  this.name = `et-radio-group-${++nextUniqueId$3}`;
7731
- this._bindings = createReactiveBindings({
7732
- attribute: 'aria-labelledby',
7733
- observable: this._formGroupStateService.describedBy$.pipe(map((describedBy) => {
7734
- return {
7735
- render: !!describedBy,
7736
- value: `${describedBy}`,
7737
- };
7738
- })),
7708
+ this.hostAttributeBindings = signalHostAttributes({
7709
+ 'aria-labelledby': toSignal(this._formGroupStateService.describedBy$),
7739
7710
  });
7740
7711
  }
7741
7712
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: RadioGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
@@ -7836,12 +7807,9 @@ class SegmentedButtonDirective {
7836
7807
  this._disabled$ = new BehaviorSubject(false);
7837
7808
  this.checked$ = combineLatest([this.input.value$, this._value$]).pipe(map(([inputValue, value]) => inputValue === value));
7838
7809
  this.disabled$ = combineLatest([this.input.disabled$, this._disabled$]).pipe(map(([inputDisabled, disabled]) => inputDisabled || disabled));
7839
- this._bindings = createReactiveBindings({
7840
- attribute: ['class.et-segmented-button--checked'],
7841
- observable: this.checked$,
7842
- }, {
7843
- attribute: ['class.et-segmented-button--disabled'],
7844
- observable: this.disabled$,
7810
+ this.hostClassBindings = signalHostClasses({
7811
+ 'et-segmented-button--checked': toSignal(this.checked$),
7812
+ 'et-segmented-button--disabled': toSignal(this.disabled$),
7845
7813
  });
7846
7814
  }
7847
7815
  get value() {
@@ -7898,23 +7866,18 @@ const SEGMENTED_BUTTON_FIELD_TOKEN = new InjectionToken('ET_SEGMENTED_BUTTON_FIE
7898
7866
  class SegmentedButtonFieldDirective {
7899
7867
  constructor() {
7900
7868
  this.inputState = inject(InputStateService);
7901
- this._bindings = createReactiveBindings();
7902
- }
7903
- ngAfterContentInit() {
7904
- if (!this._segmentedButton) {
7905
- return;
7906
- }
7907
- this._bindings.push({
7908
- attribute: 'class.et-segmented-button-field--checked',
7909
- observable: this._segmentedButton.changes.pipe(startWith(this._segmentedButton)).pipe(switchMap((buttons) => combineLatest(buttons.filter((radio) => !!radio).map((button) => button.checked$))), map((checked) => checked.some((value) => value))),
7910
- });
7911
- this._bindings.push({
7912
- attribute: 'class.et-segmented-button-field--disabled',
7913
- observable: this._segmentedButton.changes.pipe(startWith(this._segmentedButton)).pipe(switchMap((buttons) => combineLatest(buttons.filter((radio) => !!radio).map((button) => button.disabled$))), map((disabled) => disabled.some((value) => value))),
7869
+ this._segmentedButton$ = new BehaviorSubject(null);
7870
+ this.segmentedButtonQueryList$ = this._segmentedButton$.pipe(switchQueryListChanges());
7871
+ this.hostClassBindings = signalHostClasses({
7872
+ 'et-segmented-button-field--checked': toSignal(this.segmentedButtonQueryList$.pipe(switchMap((buttons) => (buttons?.length ? combineLatest(buttons.map((radio) => radio.disabled$)) : of([]))), map((checked) => checked.some((value) => value)))),
7873
+ 'et-segmented-button-field--disabled': toSignal(this.segmentedButtonQueryList$.pipe(switchMap((buttons) => (buttons?.length ? combineLatest(buttons.map((radio) => radio.disabled$)) : of([]))), map((disabled) => disabled.some((value) => value)))),
7914
7874
  });
7915
7875
  }
7876
+ set segmentedButton(segmentedButton) {
7877
+ this._segmentedButton$.next(segmentedButton);
7878
+ }
7916
7879
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: SegmentedButtonFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
7917
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: SegmentedButtonFieldDirective, isStandalone: true, providers: [{ provide: SEGMENTED_BUTTON_FIELD_TOKEN, useExisting: SegmentedButtonFieldDirective }], queries: [{ propertyName: "_segmentedButton", predicate: i0.forwardRef(function () { return SEGMENTED_BUTTON_TOKEN; }), descendants: true }], exportAs: ["etSegmentedButtonField"], ngImport: i0 }); }
7880
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: SegmentedButtonFieldDirective, isStandalone: true, providers: [{ provide: SEGMENTED_BUTTON_FIELD_TOKEN, useExisting: SegmentedButtonFieldDirective }], queries: [{ propertyName: "segmentedButton", predicate: i0.forwardRef(function () { return SEGMENTED_BUTTON_TOKEN; }), descendants: true }], exportAs: ["etSegmentedButtonField"], ngImport: i0 }); }
7918
7881
  }
7919
7882
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: SegmentedButtonFieldDirective, decorators: [{
7920
7883
  type: Directive,
@@ -7923,7 +7886,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
7923
7886
  providers: [{ provide: SEGMENTED_BUTTON_FIELD_TOKEN, useExisting: SegmentedButtonFieldDirective }],
7924
7887
  exportAs: 'etSegmentedButtonField',
7925
7888
  }]
7926
- }], propDecorators: { _segmentedButton: [{
7889
+ }], propDecorators: { segmentedButton: [{
7927
7890
  type: ContentChildren,
7928
7891
  args: [forwardRef(() => SEGMENTED_BUTTON_TOKEN), { descendants: true }]
7929
7892
  }] } });
@@ -7936,14 +7899,8 @@ class SegmentedButtonGroupDirective {
7936
7899
  this._inputStateService = inject(InputStateService);
7937
7900
  this._destroy$ = createDestroy();
7938
7901
  this.name = `et-segmented-button-group-${++nextUniqueId$2}`;
7939
- this._bindings = createReactiveBindings({
7940
- attribute: 'aria-labelledby',
7941
- observable: this._formGroupStateService.describedBy$.pipe(map((describedBy) => {
7942
- return {
7943
- render: !!describedBy,
7944
- value: `${describedBy}`,
7945
- };
7946
- })),
7902
+ this.hostAttributeBindings = signalHostAttributes({
7903
+ 'aria-labelledby': toSignal(this._formGroupStateService.describedBy$),
7947
7904
  });
7948
7905
  }
7949
7906
  ngAfterContentInit() {
@@ -8078,7 +8035,7 @@ const SegmentedButtonImports = [
8078
8035
  const SELECT_FIELD_TOKEN = new InjectionToken('ET_SELECT_FIELD_DIRECTIVE_TOKEN');
8079
8036
  class SelectFieldDirective {
8080
8037
  constructor() {
8081
- this._bindings = createReactiveBindings();
8038
+ this.elementRef = inject(ElementRef);
8082
8039
  }
8083
8040
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: SelectFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
8084
8041
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: SelectFieldDirective, isStandalone: true, providers: [{ provide: SELECT_FIELD_TOKEN, useExisting: SelectFieldDirective }], exportAs: ["etSelectField"], ngImport: i0 }); }
@@ -8501,6 +8458,7 @@ class ComboboxDirective {
8501
8458
  this._selectField = inject(SELECT_FIELD_TOKEN);
8502
8459
  this._animatedOverlay = inject(AnimatedOverlayDirective);
8503
8460
  this._comboboxConfig = inject(COMBOBOX_CONFIG_TOKEN, { optional: true });
8461
+ this._themeProvider = inject(THEME_PROVIDER, { optional: true });
8504
8462
  this._initialValue$ = new BehaviorSubject(null);
8505
8463
  this._filterInternal$ = new BehaviorSubject(false);
8506
8464
  this._loading$ = new BehaviorSubject(false);
@@ -8526,6 +8484,7 @@ class ComboboxDirective {
8526
8484
  this.activeOptionId$ = new BehaviorSubject(null);
8527
8485
  this._currentFilter$ = new BehaviorSubject('');
8528
8486
  this.isOpen$ = this._animatedOverlay.isMounted$;
8487
+ this.isOpen = toSignal(this.isOpen$);
8529
8488
  this._selectionModel = new SelectionModel();
8530
8489
  this._activeSelectionModel = new ActiveSelectionModel();
8531
8490
  this._backspaceKeyPressManager = new KeyPressManager(BACKSPACE);
@@ -8540,21 +8499,16 @@ class ComboboxDirective {
8540
8499
  this._bodyErrorTemplate$ = new BehaviorSubject(null);
8541
8500
  this._bodyEmptyTemplate$ = new BehaviorSubject(null);
8542
8501
  this._bodyMoreItemsHintTemplate$ = new BehaviorSubject(null);
8543
- this._bindings = createReactiveBindings({
8544
- attribute: 'class.et-combobox--loading',
8545
- observable: this._loading$,
8546
- }, {
8547
- attribute: 'class.et-combobox--error',
8548
- observable: this._error$.pipe(map((v) => !!v)),
8549
- }, {
8550
- attribute: 'class.et-combobox--open',
8551
- observable: this.isOpen$,
8552
- }, {
8553
- attribute: 'class.et-select-field--multiple',
8554
- observable: this.multiple$,
8555
- }, {
8556
- attribute: 'class.et-select-field--open',
8557
- observable: this.isOpen$,
8502
+ this.hostClassBindings = signalHostClasses({
8503
+ 'et-combobox--loading': toSignal(this._loading$),
8504
+ 'et-combobox--error': toSignal(this._error$.pipe(map((v) => !!v))),
8505
+ 'et-combobox--open': toSignal(this.isOpen$),
8506
+ 'et-select-field--multiple': toSignal(this.multiple$),
8507
+ 'et-select-field--open': this.isOpen,
8508
+ });
8509
+ this.fieldHostClassBindings = signalClasses(this._selectField.elementRef, {
8510
+ 'et-select-field--open': toSignal(this.isOpen$),
8511
+ 'et-select-field--multiple': toSignal(this.multiple$),
8558
8512
  });
8559
8513
  this._comboboxBodyComponent = null;
8560
8514
  //#endregion
@@ -8576,14 +8530,7 @@ class ComboboxDirective {
8576
8530
  this._animatedOverlay.placement = 'bottom';
8577
8531
  this._animatedOverlay.fallbackPlacements = ['bottom', 'top'];
8578
8532
  this._animatedOverlay.autoResize = true;
8579
- this._selectField._bindings.push({
8580
- attribute: 'class.et-select-field--open',
8581
- observable: this.isOpen$,
8582
- });
8583
- this._selectField._bindings.push({
8584
- attribute: 'class.et-select-field--multiple',
8585
- observable: this.multiple$,
8586
- });
8533
+ this._input._setEmptyHelper(this._currentFilter$);
8587
8534
  }
8588
8535
  ngOnInit() {
8589
8536
  this._initDispatchFilterChanges();
@@ -8623,6 +8570,7 @@ class ComboboxDirective {
8623
8570
  const bodyRef = this._animatedOverlay.mount({
8624
8571
  component: this._comboboxBodyComponent,
8625
8572
  mirrorWidth: true,
8573
+ themeProvider: this._themeProvider,
8626
8574
  });
8627
8575
  if (!bodyRef)
8628
8576
  return;
@@ -9026,27 +8974,14 @@ class ComboboxOptionComponent {
9026
8974
  this.disabled$ = this._option$.pipe(map((opt) => isOptionDisabled(opt)));
9027
8975
  this.selected$ = this._option$.pipe(switchMap((opt) => this.combobox.isOptionSelected(opt)));
9028
8976
  this.active$ = this._option$.pipe(switchMap((opt) => this.combobox.isOptionActive(opt)));
9029
- this._bindings = createReactiveBindings({
9030
- attribute: 'class.et-combobox-option--selected',
9031
- observable: this.selected$,
9032
- }, {
9033
- attribute: 'class.et-combobox-option--disabled',
9034
- observable: this.disabled$,
9035
- }, {
9036
- attribute: 'class.et-combobox-option--active',
9037
- observable: this.active$,
9038
- }, {
9039
- attribute: 'aria-selected',
9040
- observable: this.selected$.pipe(map((selected) => ({
9041
- render: true,
9042
- value: selected,
9043
- }))),
9044
- }, {
9045
- attribute: 'aria-diabled',
9046
- observable: this.disabled$.pipe(map((selected) => ({
9047
- render: true,
9048
- value: selected,
9049
- }))),
8977
+ this.hostClassBindings = signalHostClasses({
8978
+ 'et-combobox-option--selected': toSignal(this.selected$),
8979
+ 'et-combobox-option--disabled': toSignal(this.disabled$),
8980
+ 'et-combobox-option--active': toSignal(this.active$),
8981
+ });
8982
+ this.hostAttributeBindings = signalHostAttributes({
8983
+ 'aria-selected': toSignal(this.selected$),
8984
+ 'aria-disabled': toSignal(this.disabled$),
9050
8985
  });
9051
8986
  }
9052
8987
  get option() {
@@ -9099,26 +9034,16 @@ class ComboboxBodyComponent {
9099
9034
  this.id = `et-combobox-body-${_uniqueId++}`;
9100
9035
  this._destroy$ = createDestroy();
9101
9036
  this._clickOutside = inject(ClickOutsideDirective);
9037
+ this._themeProvider = inject(THEME_PROVIDER);
9102
9038
  this.combobox = inject(COMBOBOX_TOKEN);
9103
9039
  this._options$ = new BehaviorSubject(null);
9104
- this._bindings = createReactiveBindings({
9105
- attribute: 'class.et-combobox-body--loading',
9106
- observable: this.combobox.loading$,
9107
- }, {
9108
- attribute: 'class.et-combobox-body--multiple',
9109
- observable: this.combobox.multiple$,
9110
- }, {
9111
- attribute: 'aria-multiselectable',
9112
- observable: this.combobox.multiple$.pipe(map((multiple) => ({
9113
- render: true,
9114
- value: multiple,
9115
- }))),
9116
- }, {
9117
- attribute: 'aria-labelledby',
9118
- observable: this.combobox._input.labelId$.pipe(map((labelId) => ({
9119
- render: !!labelId,
9120
- value: labelId,
9121
- }))),
9040
+ this.hostClassBindings = signalHostClasses({
9041
+ 'et-combobox-body--loading': toSignal(this.combobox.loading$),
9042
+ 'et-combobox-body--multiple': toSignal(this.combobox.multiple$),
9043
+ });
9044
+ this.hostAttributeBindings = signalHostAttributes({
9045
+ 'aria-multiselectable': toSignal(this.combobox.multiple$),
9046
+ 'aria-labelledby': toSignal(this.combobox._input.labelId$),
9122
9047
  });
9123
9048
  this._bodyTemplate = null;
9124
9049
  this.trackByFn = (index, item) => this.combobox._selectionModel.getKey(item);
@@ -9131,13 +9056,16 @@ class ComboboxBodyComponent {
9131
9056
  .pipe(takeUntil(this._destroy$), tap(() => this.combobox.close()))
9132
9057
  .subscribe();
9133
9058
  }
9059
+ _setThemeFromProvider(provider) {
9060
+ this._themeProvider.syncWithProvider(provider);
9061
+ }
9134
9062
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: ComboboxBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9135
9063
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: ComboboxBodyComponent, isStandalone: true, selector: "et-combobox-body", host: { attributes: { "tabindex": "-1", "role": "listbox" }, properties: { "attr.id": "id" }, classAttribute: "et-combobox-body et-with-default-animation" }, providers: [
9136
9064
  {
9137
9065
  provide: COMBOBOX_BODY_TOKEN,
9138
9066
  useExisting: ComboboxBodyComponent,
9139
9067
  },
9140
- ], viewQueries: [{ propertyName: "_containerElementRef", first: true, predicate: ["containerElement"], descendants: true, read: ElementRef, static: true }, { propertyName: "_animatedLifecycle", first: true, predicate: ANIMATED_LIFECYCLE_TOKEN, descendants: true, static: true }, { propertyName: "_options", predicate: ComboboxOptionComponent, descendants: true }], hostDirectives: [{ directive: i1$2.ClickOutsideDirective }], ngImport: i0, template: "<div #containerElement class=\"et-combobox-body-container\" etAnimatedLifecycle>\n <ng-container *etLet=\"combobox.options$ | async as options\">\n <ng-container *ngIf=\"!options?.length && !combobox.error && !combobox.loading\">\n <ng-container *ngIf=\"combobox.customBodyEmptyTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyEmptyComponent$ | async as comp; else default\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n <ng-template #default>\n <p class=\"et-combobox-body--empty\">{{ combobox._tempEmptyText }}</p>\n </ng-template>\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"combobox.error && !combobox.loading\">\n <ng-container *ngIf=\"combobox.customBodyErrorTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl; context: { error: combobox.error }\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyErrorComponent$ | async as comp\">\n <ng-container *ngComponentOutlet=\"comp; inputs: { error: combobox.error }\" />\n </ng-container>\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"combobox.loading\">\n <ng-container *ngIf=\"combobox.customBodyLoadingTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyLoadingComponent$ | async as comp\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n </ng-template>\n </ng-container>\n\n <et-combobox-option *ngFor=\"let option of options; trackBy: trackByFn\" [option]=\"option\" />\n\n <ng-container *ngIf=\"options?.length && combobox.showBodyMoreItemsHint\">\n <ng-container *ngIf=\"combobox.customBodyMoreItemsHintTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyMoreItemsHintComponent$ | async as comp; else default\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n <ng-template #default>\n <p *ngIf=\"combobox.bodyMoreItemsHintText\" class=\"et-combobox-body--more-items-hint\">\n {{ combobox.bodyMoreItemsHintText }}\n </p>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ComboboxOptionComponent, selector: "et-combobox-option", inputs: ["option"] }, { kind: "directive", type: LetDirective, selector: "[etLet]", inputs: ["etLet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: AnimatedLifecycleDirective, selector: "[etAnimatedLifecycle]", exportAs: ["etAnimatedLifecycle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9068
+ ], viewQueries: [{ propertyName: "_containerElementRef", first: true, predicate: ["containerElement"], descendants: true, read: ElementRef, static: true }, { propertyName: "_animatedLifecycle", first: true, predicate: ANIMATED_LIFECYCLE_TOKEN, descendants: true, static: true }, { propertyName: "_options", predicate: ComboboxOptionComponent, descendants: true }], hostDirectives: [{ directive: i1$2.ClickOutsideDirective }, { directive: i2$1.ProvideThemeDirective }], ngImport: i0, template: "<div #containerElement class=\"et-combobox-body-container\" etAnimatedLifecycle>\n <ng-container *etLet=\"combobox.options$ | async as options\">\n <ng-container *ngIf=\"!options?.length && !combobox.error && !combobox.loading\">\n <ng-container *ngIf=\"combobox.customBodyEmptyTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyEmptyComponent$ | async as comp; else default\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n <ng-template #default>\n <p class=\"et-combobox-body--empty\">{{ combobox._tempEmptyText }}</p>\n </ng-template>\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"combobox.error && !combobox.loading\">\n <ng-container *ngIf=\"combobox.customBodyErrorTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl; context: { error: combobox.error }\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyErrorComponent$ | async as comp\">\n <ng-container *ngComponentOutlet=\"comp; inputs: { error: combobox.error }\" />\n </ng-container>\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"combobox.loading$ | async\">\n <ng-container *ngIf=\"combobox.customBodyLoadingTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyLoadingComponent$ | async as comp\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n </ng-template>\n </ng-container>\n\n <et-combobox-option *ngFor=\"let option of options; trackBy: trackByFn\" [option]=\"option\" />\n\n <ng-container *ngIf=\"options?.length && combobox.showBodyMoreItemsHint\">\n <ng-container *ngIf=\"combobox.customBodyMoreItemsHintTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyMoreItemsHintComponent$ | async as comp; else default\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n <ng-template #default>\n <p *ngIf=\"combobox.bodyMoreItemsHintText\" class=\"et-combobox-body--more-items-hint\">\n {{ combobox.bodyMoreItemsHintText }}\n </p>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ComboboxOptionComponent, selector: "et-combobox-option", inputs: ["option"] }, { kind: "directive", type: LetDirective, selector: "[etLet]", inputs: ["etLet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: AnimatedLifecycleDirective, selector: "[etAnimatedLifecycle]", exportAs: ["etAnimatedLifecycle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9141
9069
  }
9142
9070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: ComboboxBodyComponent, decorators: [{
9143
9071
  type: Component,
@@ -9155,12 +9083,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
9155
9083
  AsyncPipe,
9156
9084
  AnimatedLifecycleDirective,
9157
9085
  NgIf,
9158
- ], hostDirectives: [ClickOutsideDirective], providers: [
9086
+ ], hostDirectives: [ClickOutsideDirective, ProvideThemeDirective], providers: [
9159
9087
  {
9160
9088
  provide: COMBOBOX_BODY_TOKEN,
9161
9089
  useExisting: ComboboxBodyComponent,
9162
9090
  },
9163
- ], template: "<div #containerElement class=\"et-combobox-body-container\" etAnimatedLifecycle>\n <ng-container *etLet=\"combobox.options$ | async as options\">\n <ng-container *ngIf=\"!options?.length && !combobox.error && !combobox.loading\">\n <ng-container *ngIf=\"combobox.customBodyEmptyTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyEmptyComponent$ | async as comp; else default\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n <ng-template #default>\n <p class=\"et-combobox-body--empty\">{{ combobox._tempEmptyText }}</p>\n </ng-template>\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"combobox.error && !combobox.loading\">\n <ng-container *ngIf=\"combobox.customBodyErrorTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl; context: { error: combobox.error }\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyErrorComponent$ | async as comp\">\n <ng-container *ngComponentOutlet=\"comp; inputs: { error: combobox.error }\" />\n </ng-container>\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"combobox.loading\">\n <ng-container *ngIf=\"combobox.customBodyLoadingTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyLoadingComponent$ | async as comp\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n </ng-template>\n </ng-container>\n\n <et-combobox-option *ngFor=\"let option of options; trackBy: trackByFn\" [option]=\"option\" />\n\n <ng-container *ngIf=\"options?.length && combobox.showBodyMoreItemsHint\">\n <ng-container *ngIf=\"combobox.customBodyMoreItemsHintTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyMoreItemsHintComponent$ | async as comp; else default\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n <ng-template #default>\n <p *ngIf=\"combobox.bodyMoreItemsHintText\" class=\"et-combobox-body--more-items-hint\">\n {{ combobox.bodyMoreItemsHintText }}\n </p>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n</div>\n" }]
9091
+ ], template: "<div #containerElement class=\"et-combobox-body-container\" etAnimatedLifecycle>\n <ng-container *etLet=\"combobox.options$ | async as options\">\n <ng-container *ngIf=\"!options?.length && !combobox.error && !combobox.loading\">\n <ng-container *ngIf=\"combobox.customBodyEmptyTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyEmptyComponent$ | async as comp; else default\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n <ng-template #default>\n <p class=\"et-combobox-body--empty\">{{ combobox._tempEmptyText }}</p>\n </ng-template>\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"combobox.error && !combobox.loading\">\n <ng-container *ngIf=\"combobox.customBodyErrorTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl; context: { error: combobox.error }\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyErrorComponent$ | async as comp\">\n <ng-container *ngComponentOutlet=\"comp; inputs: { error: combobox.error }\" />\n </ng-container>\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"combobox.loading$ | async\">\n <ng-container *ngIf=\"combobox.customBodyLoadingTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyLoadingComponent$ | async as comp\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n </ng-template>\n </ng-container>\n\n <et-combobox-option *ngFor=\"let option of options; trackBy: trackByFn\" [option]=\"option\" />\n\n <ng-container *ngIf=\"options?.length && combobox.showBodyMoreItemsHint\">\n <ng-container *ngIf=\"combobox.customBodyMoreItemsHintTpl$ | async as tpl; else componentOrNone\">\n <ng-container *ngTemplateOutlet=\"tpl\" />\n </ng-container>\n <ng-template #componentOrNone>\n <ng-container *ngIf=\"combobox.customBodyMoreItemsHintComponent$ | async as comp; else default\">\n <ng-container *ngComponentOutlet=\"comp\" />\n </ng-container>\n <ng-template #default>\n <p *ngIf=\"combobox.bodyMoreItemsHintText\" class=\"et-combobox-body--more-items-hint\">\n {{ combobox.bodyMoreItemsHintText }}\n </p>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n</div>\n" }]
9164
9092
  }], propDecorators: { _containerElementRef: [{
9165
9093
  type: ViewChild,
9166
9094
  args: ['containerElement', { static: true, read: ElementRef }]
@@ -9406,21 +9334,16 @@ class SelectOptionDirective {
9406
9334
  }
9407
9335
  return selectValue === optionValue;
9408
9336
  }));
9337
+ this.isSelected = toSignal(this.isSelected$);
9409
9338
  this.viewValue$ = this._viewValue$.asObservable();
9410
9339
  this.disabled$ = this._disabled$.asObservable();
9411
9340
  this.isActive$ = this._isActive$.asObservable();
9412
- this._bindings = createReactiveBindings({
9413
- attribute: 'class.et-select-option--selected',
9414
- observable: this.isSelected$,
9415
- }, {
9416
- attribute: 'class.et-select-option--active',
9417
- observable: this._isActive$,
9418
- }, {
9419
- attribute: 'aria-selected',
9420
- observable: this.isSelected$.pipe(map((selected) => ({
9421
- render: true,
9422
- value: selected,
9423
- }))),
9341
+ this.hostClassBindings = signalHostClasses({
9342
+ 'et-select-option--selected': this.isSelected,
9343
+ 'et-select-option--active': toSignal(this._isActive$),
9344
+ });
9345
+ this.hostAttributeBindings = signalHostAttributes({
9346
+ 'aria-selected': this.isSelected,
9424
9347
  });
9425
9348
  }
9426
9349
  get value() {
@@ -9435,6 +9358,9 @@ class SelectOptionDirective {
9435
9358
  set disabled(value) {
9436
9359
  this._disabled$.next(booleanAttribute(value));
9437
9360
  }
9361
+ get viewValue() {
9362
+ return this._viewValue$.value;
9363
+ }
9438
9364
  ngAfterContentInit() {
9439
9365
  this._updateViewValue();
9440
9366
  }
@@ -9522,17 +9448,19 @@ class SelectDirective {
9522
9448
  this._destroy$ = createDestroy();
9523
9449
  this._liveAnnouncer = inject(LiveAnnouncer);
9524
9450
  this._selectField = inject(SELECT_FIELD_TOKEN);
9451
+ this._themeProvider = inject(THEME_PROVIDER, { optional: true });
9525
9452
  this.input = inject(INPUT_TOKEN);
9526
9453
  this._selectBodyId$ = new BehaviorSubject(null);
9527
9454
  this._isOpen$ = new BehaviorSubject(false);
9455
+ this.elementRef = inject(ElementRef);
9456
+ this._selectionModel = new SelectionModel();
9457
+ this._activeSelectionModel = new ActiveSelectionModel();
9528
9458
  this._multiple$ = new BehaviorSubject(false);
9529
9459
  this._selectOptionsQueryList$ = new BehaviorSubject(null);
9530
- this.selectOptions$ = this._selectOptionsQueryList$.pipe(switchMap((queryList) => queryList?.changes.pipe(startWith(queryList)) ?? of(null)), switchMap((queryList) => {
9460
+ this.selectOptions$ = this._selectOptionsQueryList$.pipe(switchQueryListChanges(), switchMap((queryList) => {
9531
9461
  if (!queryList)
9532
9462
  return of(null);
9533
- const items = queryList
9534
- .filter((i) => !!i)
9535
- .map((opt) => combineLatest([opt.isSelected$, opt.isActive$]).pipe(map(([selected, active]) => ({ opt, selected, active }))));
9463
+ const items = queryList.map((opt) => combineLatest([opt.isSelected$, opt.isActive$]).pipe(map(([selected, active]) => ({ opt, selected, active }))));
9536
9464
  return combineLatest(items ?? of(null));
9537
9465
  }));
9538
9466
  this.activeOption$ = this.selectOptions$.pipe(map((options) => {
@@ -9559,6 +9487,7 @@ class SelectDirective {
9559
9487
  this.selectedOption$ = this.selectedOptions$.pipe(map((options) => options?.[0] ?? null));
9560
9488
  this.selectBodyId$ = this._selectBodyId$.asObservable();
9561
9489
  this.isOpen$ = this._isOpen$.asObservable();
9490
+ this.isOpen = toSignal(this.isOpen$);
9562
9491
  this.multiple$ = this._multiple$.asObservable();
9563
9492
  this.selectCurrentValueId = `et-select-current-value-${uniqueId$1++}`;
9564
9493
  this.ariaViewValue$ = this.selectedOptions$.pipe(switchMap((options) => {
@@ -9586,25 +9515,26 @@ class SelectDirective {
9586
9515
  const ids = [labelId, this.selectCurrentValueId];
9587
9516
  return ids.filter((id) => !!id).join(' ');
9588
9517
  }));
9589
- this._bindings = createReactiveBindings({
9590
- attribute: 'class.et-select--is-open',
9591
- observable: this.isOpen$,
9592
- }, {
9593
- attribute: 'class.et-select--disabled',
9594
- observable: this.input.disabled$,
9518
+ this.hostClassBindings = signalHostClasses({
9519
+ 'et-select--is-open': this.isOpen,
9520
+ 'et-select--disabled': toSignal(this.input.disabled$),
9521
+ });
9522
+ this.fieldHostClassBindings = signalClasses(this._selectField.elementRef, {
9523
+ 'et-select-field--open': this.isOpen,
9524
+ 'et-select-field--multiple': toSignal(this.multiple$),
9595
9525
  });
9596
9526
  this.trackByFn = (_, item) => item.id;
9597
9527
  this._animatedOverlay.placement = 'bottom';
9598
9528
  this._animatedOverlay.fallbackPlacements = ['bottom', 'top'];
9599
9529
  this._animatedOverlay.autoResize = true;
9600
- this._selectField._bindings.push({
9601
- attribute: 'class.et-select-field--open',
9602
- observable: this._isOpen$,
9603
- });
9604
- this._selectField._bindings.push({
9605
- attribute: 'class.et-select-field--multiple',
9606
- observable: this.multiple$,
9607
- });
9530
+ this.input._setEmptyHelper(this.ariaViewValue$);
9531
+ this._selectionModel
9532
+ .setOptionsFromQueryList$(this._selectOptionsQueryList$)
9533
+ .setLabelBinding((v) => v.viewValue)
9534
+ .setValueBinding((v) => v.value)
9535
+ .setDisabledBinding((v) => v.disabled);
9536
+ this._activeSelectionModel.setSelectionModel(this._selectionModel);
9537
+ //TODO: TO BE CONTINUED...
9608
9538
  }
9609
9539
  ngOnInit() {
9610
9540
  this._unmountSelectBodyOnDisable();
@@ -9622,6 +9552,7 @@ class SelectDirective {
9622
9552
  const instance = this._animatedOverlay.mount({
9623
9553
  component: this._selectBodyConfig.component,
9624
9554
  mirrorWidth: true,
9555
+ themeProvider: this._themeProvider,
9625
9556
  data: { _bodyTemplate: this._selectBodyConfig.template },
9626
9557
  });
9627
9558
  if (!instance)
@@ -9960,18 +9891,9 @@ class SelectBodyDirective {
9960
9891
  this._select = inject(SELECT_TOKEN);
9961
9892
  this._clickOutside = inject(ClickOutsideDirective);
9962
9893
  this.id = `et-select-body-${uniqueId++}`;
9963
- this._bindings = createReactiveBindings({
9964
- attribute: 'aria-multiselectable',
9965
- observable: this._select.multiple$.pipe(map((multiple) => ({
9966
- render: true,
9967
- value: multiple,
9968
- }))),
9969
- }, {
9970
- attribute: 'aria-labelledby',
9971
- observable: this._select.input.labelId$.pipe(map((labelId) => ({
9972
- render: !!labelId,
9973
- value: labelId,
9974
- }))),
9894
+ this.hostAttributeBindings = signalHostAttributes({
9895
+ 'aria-multiselectable': toSignal(this._select.multiple$),
9896
+ 'aria-labelledby': toSignal(this._select.input.labelId$),
9975
9897
  });
9976
9898
  }
9977
9899
  ngOnInit() {
@@ -10009,10 +9931,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
10009
9931
  class SelectBodyComponent {
10010
9932
  constructor() {
10011
9933
  this.selectBody = inject(SELECT_BODY_TOKEN);
9934
+ this._themeProvider = inject(THEME_PROVIDER);
10012
9935
  this._bodyTemplate = null;
10013
9936
  }
9937
+ _setThemeFromProvider(provider) {
9938
+ this._themeProvider.syncWithProvider(provider);
9939
+ }
10014
9940
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: SelectBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10015
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: SelectBodyComponent, isStandalone: true, selector: "et-select-body", host: { classAttribute: "et-select-body et-with-default-animation" }, viewQueries: [{ propertyName: "_animatedLifecycle", first: true, predicate: ANIMATED_LIFECYCLE_TOKEN, descendants: true, static: true }], hostDirectives: [{ directive: SelectBodyDirective }], ngImport: i0, template: `
9941
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: SelectBodyComponent, isStandalone: true, selector: "et-select-body", host: { classAttribute: "et-select-body et-with-default-animation" }, viewQueries: [{ propertyName: "_animatedLifecycle", first: true, predicate: ANIMATED_LIFECYCLE_TOKEN, descendants: true, static: true }], hostDirectives: [{ directive: SelectBodyDirective }, { directive: i2$1.ProvideThemeDirective }], ngImport: i0, template: `
10016
9942
  <div class="et-select-body-container" etAnimatedLifecycle>
10017
9943
  <ng-container [ngTemplateOutlet]="_bodyTemplate" />
10018
9944
  </div>
@@ -10026,7 +9952,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
10026
9952
  </div>
10027
9953
  `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
10028
9954
  class: 'et-select-body et-with-default-animation',
10029
- }, imports: [AnimatedLifecycleDirective, NgTemplateOutlet], hostDirectives: [SelectBodyDirective], styles: [".et-select-body.et-with-default-animation .et-select-body-container.et-animation-enter-from,.et-select-body.et-with-default-animation .et-select-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-select-body.et-with-default-animation .et-select-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-select-body.et-with-default-animation .et-select-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-select-body.et-with-default-animation[et-floating-placement^=top] .et-select-body-container{transform-origin:bottom}.et-select-body.et-with-default-animation[et-floating-placement^=bottom] .et-select-body-container{transform-origin:top}.et-select-body{transform:var(--et-floating-translate);will-change:transform}.et-select-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:min(200px,var(--et-floating-max-height, 200px));overflow:auto}@supports (overflow: overlay){.et-select-body-container{overflow:overlay}}.et-select-body{width:100%;display:grid}\n"] }]
9955
+ }, imports: [AnimatedLifecycleDirective, NgTemplateOutlet], hostDirectives: [SelectBodyDirective, ProvideThemeDirective], styles: [".et-select-body.et-with-default-animation .et-select-body-container.et-animation-enter-from,.et-select-body.et-with-default-animation .et-select-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-select-body.et-with-default-animation .et-select-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-select-body.et-with-default-animation .et-select-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-select-body.et-with-default-animation[et-floating-placement^=top] .et-select-body-container{transform-origin:bottom}.et-select-body.et-with-default-animation[et-floating-placement^=bottom] .et-select-body-container{transform-origin:top}.et-select-body{transform:var(--et-floating-translate);will-change:transform}.et-select-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:min(200px,var(--et-floating-max-height, 200px));overflow:auto}@supports (overflow: overlay){.et-select-body-container{overflow:overlay}}.et-select-body{width:100%;display:grid}\n"] }]
10030
9956
  }], propDecorators: { _animatedLifecycle: [{
10031
9957
  type: ViewChild,
10032
9958
  args: [ANIMATED_LIFECYCLE_TOKEN, { static: true }]
@@ -10414,12 +10340,9 @@ class SlideToggleDirective {
10414
10340
  constructor() {
10415
10341
  this.input = inject(INPUT_TOKEN);
10416
10342
  this.checked$ = this.input.value$.pipe(map((value) => !!value));
10417
- this._bindings = createReactiveBindings({
10418
- attribute: ['class.et-slide-toggle--checked'],
10419
- observable: this.checked$,
10420
- }, {
10421
- attribute: ['class.et-slide-toggle--disabled'],
10422
- observable: this.input.disabled$,
10343
+ this.hostClassBindings = signalHostClasses({
10344
+ 'et-slide-toggle--checked': toSignal(this.checked$),
10345
+ 'et-slide-toggle--disabled': toSignal(this.input.disabled$),
10423
10346
  });
10424
10347
  }
10425
10348
  _onInputInteraction(event) {
@@ -10604,45 +10527,21 @@ class SliderComponent {
10604
10527
  this.disableAnimations$ = new BehaviorSubject(false);
10605
10528
  this.touchId$ = new BehaviorSubject(null);
10606
10529
  this.lastPointerEvent$ = new BehaviorSubject(null);
10607
- this._bindings = createReactiveBindings({
10608
- attribute: 'aria-orientation',
10609
- observable: this._vertical$.pipe(map((vertical) => ({
10610
- render: true,
10611
- value: vertical ? 'vertical' : 'horizontal',
10612
- }))),
10613
- }, {
10614
- attribute: 'aria-disabled',
10615
- observable: this._input.disabled$,
10616
- }, {
10617
- attribute: 'aria-valuenow',
10618
- observable: this._value$.pipe(map((value) => ({ render: true, value }))),
10619
- }, {
10620
- attribute: 'aria-valuemin',
10621
- observable: this._min$.pipe(map((value) => ({ render: true, value }))),
10622
- }, {
10623
- attribute: 'aria-valuemax',
10624
- observable: this._max$.pipe(map((value) => ({ render: true, value }))),
10625
- }, {
10626
- attribute: 'aria-valuetext',
10627
- observable: this.valueText$.pipe(map((value) => ({ render: true, value }))),
10628
- }, {
10629
- attribute: 'tabindex',
10630
- observable: this._input.disabled$.pipe(map((disabled) => ({ render: true, value: disabled ? -1 : 0 }))),
10631
- }, {
10632
- attribute: 'class.et-slider--is-sliding',
10633
- observable: this.isSlidingVia$.pipe(map((isSlidingVia) => !!isSlidingVia)),
10634
- }, {
10635
- attribute: 'class.et-slider--inverted',
10636
- observable: this._inverted$,
10637
- }, {
10638
- attribute: 'class.et-slider--disable-animations',
10639
- observable: this.disableAnimations$,
10640
- }, {
10641
- attribute: 'aria-labeledby',
10642
- observable: this._formFieldStateService.labelId$.pipe(map((labelId) => ({ render: !!labelId, value: labelId ?? '' }))),
10643
- }, {
10644
- attribute: 'aria-describedby',
10645
- observable: this._formFieldStateService.describedBy$.pipe(map((describedBy) => ({ render: !!describedBy, value: describedBy ?? '' }))),
10530
+ this.hostClassBindings = signalHostClasses({
10531
+ 'et-slider--is-sliding': toSignal(this.isSlidingVia$),
10532
+ 'et-slider--inverted': toSignal(this._inverted$),
10533
+ 'et-slider--disable-animations': toSignal(this.disableAnimations$),
10534
+ });
10535
+ this.hostAttributeBindings = signalHostAttributes({
10536
+ 'aria-orientation': toSignal(this._vertical$.pipe(map((vertical) => (vertical ? 'vertical' : 'horizontal')))),
10537
+ 'aria-disabled': toSignal(this._input.disabled$),
10538
+ 'aria-valuenow': toSignal(this._value$),
10539
+ 'aria-valuemin': toSignal(this._min$),
10540
+ 'aria-valuemax': toSignal(this._max$),
10541
+ 'aria-valuetext': toSignal(this.valueText$),
10542
+ tabindex: toSignal(this._input.disabled$.pipe(map((disabled) => (disabled ? -1 : 0)))),
10543
+ 'aria-labeledby': this._formFieldStateService.labelId,
10544
+ 'aria-describedby': this._formFieldStateService.describedBy,
10646
10545
  });
10647
10546
  this._updateValueFromPosition = (pos, sliderDimensions, shouldInvertMouseCoords) => {
10648
10547
  const offset = this.vertical ? sliderDimensions.top : sliderDimensions.left;
@@ -10932,12 +10831,9 @@ class MasonryComponent {
10932
10831
  this._didResize$ = new BehaviorSubject(false);
10933
10832
  this._didInitialize$ = new BehaviorSubject(false);
10934
10833
  this._hideOverflow$ = new BehaviorSubject(false);
10935
- this._bindings = createReactiveBindings({
10936
- attribute: 'class.et-masonry--initialized',
10937
- observable: this._didInitialize$,
10938
- }, {
10939
- attribute: 'class.et-masonry--hide-overflow',
10940
- observable: this._hideOverflow$,
10834
+ this.hostClassBindings = signalHostClasses({
10835
+ 'et-masonry--initialized': toSignal(this._didInitialize$),
10836
+ 'et-masonry--hide-overflow': toSignal(this._hideOverflow$),
10941
10837
  });
10942
10838
  this._state = {
10943
10839
  preferredColumnWidth: 0,
@@ -11483,6 +11379,9 @@ class PictureComponent {
11483
11379
  this.trackBySrc = (_, item) => item.srcset;
11484
11380
  }
11485
11381
  combineWithConfig(src) {
11382
+ if (isDevMode() && src.type === '') {
11383
+ console.warn(`The type attribute is missing for the following source`, src.srcset, this);
11384
+ }
11486
11385
  if (!this.config?.baseUrl || src.srcset.startsWith('http')) {
11487
11386
  return src;
11488
11387
  }
@@ -11493,7 +11392,7 @@ class PictureComponent {
11493
11392
  };
11494
11393
  }
11495
11394
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: PictureComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11496
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: PictureComponent, isStandalone: true, selector: "et-picture", inputs: { sources: "sources" }, host: { classAttribute: "et-picture" }, hostDirectives: [{ directive: PictureDataDirective, inputs: ["imgClass", "imgClass", "hasPriority", "hasPriority", "figureClass", "figureClass", "pictureClass", "pictureClass", "figcaptionClass", "figcaptionClass", "defaultSrc", "defaultSrc", "alt", "alt", "figcaption", "figcaption", "width", "width", "height", "height", "sizes", "sizes"] }], ngImport: i0, template: "<figure [ngClass]=\"pictureData.figureClass\" class=\"et-picture-figure\">\n <picture [ngClass]=\"pictureData.pictureClass\" class=\"et-picture-picture\">\n <ng-container *ngFor=\"let source of sources; trackBy: trackBySrc\">\n <source\n *etLet=\"combineWithConfig(source) as s\"\n [type]=\"s.type\"\n [attr.srcset]=\"s.srcset\"\n [attr.sizes]=\"pictureData.sizes\"\n />\n </ng-container>\n\n <ng-container *ngIf=\"pictureData.defaultSrc as source\">\n <img\n *etLet=\"combineWithConfig(source) as s\"\n [attr.loading]=\"pictureData.hasPriority ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"pictureData.hasPriority ? 'high' : 'auto'\"\n [ngClass]=\"pictureData.imgClass\"\n [src]=\"s.srcset\"\n [attr.type]=\"s.type\"\n [attr.alt]=\"pictureData.alt\"\n [attr.width]=\"pictureData.width\"\n [attr.height]=\"pictureData.height\"\n [attr.sizes]=\"pictureData.sizes\"\n class=\"et-picture-img\"\n />\n </ng-container>\n </picture>\n\n <figcaption *ngIf=\"pictureData.figcaption\" [ngClass]=\"pictureData.figcaptionClass\" class=\"et-picture-figcaption\">\n {{ pictureData.figcaption }}\n </figcaption>\n</figure>\n", dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: LetDirective, selector: "[etLet]", inputs: ["etLet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
11395
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: PictureComponent, isStandalone: true, selector: "et-picture", inputs: { sources: "sources" }, host: { classAttribute: "et-picture" }, hostDirectives: [{ directive: PictureDataDirective, inputs: ["imgClass", "imgClass", "hasPriority", "hasPriority", "figureClass", "figureClass", "pictureClass", "pictureClass", "figcaptionClass", "figcaptionClass", "defaultSrc", "defaultSrc", "alt", "alt", "figcaption", "figcaption", "width", "width", "height", "height", "sizes", "sizes"] }], ngImport: i0, template: "<figure [ngClass]=\"pictureData.figureClass\" class=\"et-picture-figure\">\n <picture [ngClass]=\"pictureData.pictureClass\" class=\"et-picture-picture\">\n <ng-container *ngFor=\"let source of sources; trackBy: trackBySrc\">\n <source\n *etLet=\"combineWithConfig(source) as s\"\n [type]=\"s.type\"\n [attr.srcset]=\"s.srcset\"\n [attr.sizes]=\"pictureData.sizes\"\n />\n </ng-container>\n\n <ng-container *ngIf=\"pictureData.defaultSrc as source\">\n <img\n *etLet=\"combineWithConfig(source) as s\"\n [attr.loading]=\"pictureData.hasPriority ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"pictureData.hasPriority ? 'high' : 'auto'\"\n [ngClass]=\"pictureData.imgClass\"\n [attr.srcset]=\"s.srcset\"\n [attr.type]=\"s.type\"\n [attr.alt]=\"pictureData.alt\"\n [attr.width]=\"pictureData.width\"\n [attr.height]=\"pictureData.height\"\n [attr.sizes]=\"pictureData.sizes\"\n class=\"et-picture-img\"\n />\n </ng-container>\n </picture>\n\n <figcaption *ngIf=\"pictureData.figcaption\" [ngClass]=\"pictureData.figcaptionClass\" class=\"et-picture-figcaption\">\n {{ pictureData.figcaption }}\n </figcaption>\n</figure>\n", dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: LetDirective, selector: "[etLet]", inputs: ["etLet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
11497
11396
  }
11498
11397
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: PictureComponent, decorators: [{
11499
11398
  type: Component,
@@ -11516,7 +11415,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
11516
11415
  'sizes',
11517
11416
  ],
11518
11417
  },
11519
- ], template: "<figure [ngClass]=\"pictureData.figureClass\" class=\"et-picture-figure\">\n <picture [ngClass]=\"pictureData.pictureClass\" class=\"et-picture-picture\">\n <ng-container *ngFor=\"let source of sources; trackBy: trackBySrc\">\n <source\n *etLet=\"combineWithConfig(source) as s\"\n [type]=\"s.type\"\n [attr.srcset]=\"s.srcset\"\n [attr.sizes]=\"pictureData.sizes\"\n />\n </ng-container>\n\n <ng-container *ngIf=\"pictureData.defaultSrc as source\">\n <img\n *etLet=\"combineWithConfig(source) as s\"\n [attr.loading]=\"pictureData.hasPriority ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"pictureData.hasPriority ? 'high' : 'auto'\"\n [ngClass]=\"pictureData.imgClass\"\n [src]=\"s.srcset\"\n [attr.type]=\"s.type\"\n [attr.alt]=\"pictureData.alt\"\n [attr.width]=\"pictureData.width\"\n [attr.height]=\"pictureData.height\"\n [attr.sizes]=\"pictureData.sizes\"\n class=\"et-picture-img\"\n />\n </ng-container>\n </picture>\n\n <figcaption *ngIf=\"pictureData.figcaption\" [ngClass]=\"pictureData.figcaptionClass\" class=\"et-picture-figcaption\">\n {{ pictureData.figcaption }}\n </figcaption>\n</figure>\n" }]
11418
+ ], template: "<figure [ngClass]=\"pictureData.figureClass\" class=\"et-picture-figure\">\n <picture [ngClass]=\"pictureData.pictureClass\" class=\"et-picture-picture\">\n <ng-container *ngFor=\"let source of sources; trackBy: trackBySrc\">\n <source\n *etLet=\"combineWithConfig(source) as s\"\n [type]=\"s.type\"\n [attr.srcset]=\"s.srcset\"\n [attr.sizes]=\"pictureData.sizes\"\n />\n </ng-container>\n\n <ng-container *ngIf=\"pictureData.defaultSrc as source\">\n <img\n *etLet=\"combineWithConfig(source) as s\"\n [attr.loading]=\"pictureData.hasPriority ? 'eager' : 'lazy'\"\n [attr.fetchpriority]=\"pictureData.hasPriority ? 'high' : 'auto'\"\n [ngClass]=\"pictureData.imgClass\"\n [attr.srcset]=\"s.srcset\"\n [attr.type]=\"s.type\"\n [attr.alt]=\"pictureData.alt\"\n [attr.width]=\"pictureData.width\"\n [attr.height]=\"pictureData.height\"\n [attr.sizes]=\"pictureData.sizes\"\n class=\"et-picture-img\"\n />\n </ng-container>\n </picture>\n\n <figcaption *ngIf=\"pictureData.figcaption\" [ngClass]=\"pictureData.figcaptionClass\" class=\"et-picture-figcaption\">\n {{ pictureData.figcaption }}\n </figcaption>\n</figure>\n" }]
11520
11419
  }], propDecorators: { sources: [{
11521
11420
  type: Input
11522
11421
  }] } });
@@ -12616,7 +12515,7 @@ class TableComponent extends CdkTable {
12616
12515
  this._isShowingTableBusy = shouldShow;
12617
12516
  this._cdr.markForCheck();
12618
12517
  }
12619
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: TableComponent, deps: [{ token: i0.IterableDiffers }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: 'role', attribute: true }, { token: i1$4.Directionality, optional: true }, { token: DOCUMENT }, { token: i2$1.Platform }, { token: _VIEW_REPEATER_STRATEGY }, { token: _COALESCED_STYLE_SCHEDULER }, { token: i3.ViewportRuler }, { token: STICKY_POSITIONING_LISTENER, optional: true, skipSelf: true }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
12518
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: TableComponent, deps: [{ token: i0.IterableDiffers }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: 'role', attribute: true }, { token: i1$4.Directionality, optional: true }, { token: DOCUMENT }, { token: i2$2.Platform }, { token: _VIEW_REPEATER_STRATEGY }, { token: _COALESCED_STYLE_SCHEDULER }, { token: i3.ViewportRuler }, { token: STICKY_POSITIONING_LISTENER, optional: true, skipSelf: true }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
12620
12519
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: TableComponent, isStandalone: true, selector: "et-table, table[et-table]", inputs: { busy: "busy" }, host: { properties: { "class.et-table-fixed-layout": "fixedLayout", "attr.aria-busy": "this._attrAriaBusy" }, classAttribute: "et-table et-data-table__table" }, providers: [
12621
12520
  { provide: CdkTable, useExisting: TableComponent },
12622
12521
  { provide: CDK_TABLE, useExisting: TableComponent },
@@ -12665,7 +12564,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
12665
12564
  }] }, { type: Document, decorators: [{
12666
12565
  type: Inject,
12667
12566
  args: [DOCUMENT]
12668
- }] }, { type: i2$1.Platform }, { type: undefined, decorators: [{
12567
+ }] }, { type: i2$2.Platform }, { type: undefined, decorators: [{
12669
12568
  type: Inject,
12670
12569
  args: [_VIEW_REPEATER_STRATEGY]
12671
12570
  }] }, { type: i1$3._CoalescedStyleScheduler, decorators: [{