@ethlete/cdk 2.8.1 → 2.9.1

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 (53) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/esm2022/lib/components/forms/components/checkbox/components/checkbox-group/checkbox-group.component.mjs +3 -3
  3. package/esm2022/lib/components/forms/components/input/components/input-field/input-field.component.mjs +3 -7
  4. package/esm2022/lib/components/forms/components/radio/components/radio-group/radio-group.component.mjs +3 -3
  5. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-field/segmented-button-field.component.mjs +3 -3
  6. package/esm2022/lib/components/forms/components/segmented-button/components/segmented-button-group/segmented-button-group.component.mjs +3 -3
  7. package/esm2022/lib/components/overlay/components/menu/context-menu-trigger.mjs +163 -0
  8. package/esm2022/lib/components/overlay/components/menu/menu-aim.mjs +140 -0
  9. package/esm2022/lib/components/overlay/components/menu/menu-bar.mjs +113 -0
  10. package/esm2022/lib/components/overlay/components/menu/menu-base.mjs +154 -0
  11. package/esm2022/lib/components/overlay/components/menu/menu-errors.mjs +7 -0
  12. package/esm2022/lib/components/overlay/components/menu/menu-group.mjs +26 -0
  13. package/esm2022/lib/components/overlay/components/menu/menu-interface.mjs +3 -0
  14. package/esm2022/lib/components/overlay/components/menu/menu-item-checkbox.mjs +39 -0
  15. package/esm2022/lib/components/overlay/components/menu/menu-item-radio.mjs +56 -0
  16. package/esm2022/lib/components/overlay/components/menu/menu-item-selectable.mjs +32 -0
  17. package/esm2022/lib/components/overlay/components/menu/menu-item.mjs +210 -0
  18. package/esm2022/lib/components/overlay/components/menu/menu-module.mjs +52 -0
  19. package/esm2022/lib/components/overlay/components/menu/menu-stack.mjs +101 -0
  20. package/esm2022/lib/components/overlay/components/menu/menu-trigger-base.mjs +77 -0
  21. package/esm2022/lib/components/overlay/components/menu/menu-trigger.mjs +240 -0
  22. package/esm2022/lib/components/overlay/components/menu/menu.mjs +116 -0
  23. package/esm2022/lib/components/overlay/components/menu/pointer-focus-tracker.mjs +26 -0
  24. package/esm2022/lib/components/overlay/components/menu/public-api.mjs +17 -0
  25. package/esm2022/lib/components/overlay/components/public-api.mjs +2 -1
  26. package/esm2022/lib/components/scrollable/components/scrollable/scrollable.component.mjs +5 -5
  27. package/fesm2022/ethlete-cdk.mjs +1580 -180
  28. package/fesm2022/ethlete-cdk.mjs.map +1 -1
  29. package/lib/components/forms/components/checkbox/components/checkbox-group/checkbox-group.component.d.ts +1 -1
  30. package/lib/components/forms/components/input/components/input-field/input-field.component.d.ts +1 -1
  31. package/lib/components/forms/components/radio/components/radio-group/radio-group.component.d.ts +1 -1
  32. package/lib/components/forms/components/segmented-button/components/segmented-button-field/segmented-button-field.component.d.ts +1 -1
  33. package/lib/components/forms/components/segmented-button/components/segmented-button-group/segmented-button-group.component.d.ts +1 -1
  34. package/lib/components/overlay/components/menu/context-menu-trigger.d.ts +33 -0
  35. package/lib/components/overlay/components/menu/menu-aim.d.ts +34 -0
  36. package/lib/components/overlay/components/menu/menu-bar.d.ts +13 -0
  37. package/lib/components/overlay/components/menu/menu-base.d.ts +41 -0
  38. package/lib/components/overlay/components/menu/menu-errors.d.ts +2 -0
  39. package/lib/components/overlay/components/menu/menu-group.d.ts +5 -0
  40. package/lib/components/overlay/components/menu/menu-interface.d.ts +11 -0
  41. package/lib/components/overlay/components/menu/menu-item-checkbox.d.ts +9 -0
  42. package/lib/components/overlay/components/menu/menu-item-radio.d.ts +16 -0
  43. package/lib/components/overlay/components/menu/menu-item-selectable.d.ts +11 -0
  44. package/lib/components/overlay/components/menu/menu-item.d.ts +52 -0
  45. package/lib/components/overlay/components/menu/menu-module.d.ts +16 -0
  46. package/lib/components/overlay/components/menu/menu-stack.d.ts +54 -0
  47. package/lib/components/overlay/components/menu/menu-trigger-base.d.ts +33 -0
  48. package/lib/components/overlay/components/menu/menu-trigger.d.ts +34 -0
  49. package/lib/components/overlay/components/menu/menu.d.ts +17 -0
  50. package/lib/components/overlay/components/menu/pointer-focus-tracker.d.ts +17 -0
  51. package/lib/components/overlay/components/menu/public-api.d.ts +16 -0
  52. package/lib/components/overlay/components/public-api.d.ts +1 -0
  53. package/package.json +2 -2
@@ -1,16 +1,16 @@
1
1
  import * as i1 from '@angular/cdk/portal';
2
- import { CdkPortal, PortalModule, ComponentPortal, CdkPortalOutlet, TemplatePortal } from '@angular/cdk/portal';
2
+ import { CdkPortal, PortalModule, ComponentPortal, TemplatePortal, CdkPortalOutlet } from '@angular/cdk/portal';
3
3
  import { AsyncPipe, NgIf, NgClass, NgTemplateOutlet, NgForOf, JsonPipe, NgFor, DOCUMENT } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { Component, ViewEncapsulation, ChangeDetectionStrategy, Directive, InjectionToken, booleanAttribute, Input, ContentChild, ContentChildren, inject, ElementRef, Injector, HostBinding, isDevMode, Injectable, TemplateRef, ViewContainerRef, forwardRef, ViewChild, numberAttribute, EventEmitter, Output, Optional, Inject, SkipSelf, HostListener, ChangeDetectorRef, Renderer2, Attribute, NgZone } from '@angular/core';
5
+ import { Component, ViewEncapsulation, ChangeDetectionStrategy, Directive, InjectionToken, booleanAttribute, Input, ContentChild, ContentChildren, inject, ElementRef, Injector, HostBinding, isDevMode, Injectable, TemplateRef, ViewContainerRef, forwardRef, ViewChild, numberAttribute, EventEmitter, Output, Optional, Inject, SkipSelf, HostListener, NgZone, NgModule, ChangeDetectorRef, Renderer2, Attribute } from '@angular/core';
6
6
  import * as i1$1 from '@ethlete/core';
7
7
  import { LetDirective, createDestroy, ScrollObserverFirstElementDirective, ScrollObserverLastElementDirective, Memo, createReactiveBindings, IS_EMAIL, MUST_MATCH, IS_ARRAY_NOT_EMPTY, equal, ResizeObserverService, createFlipAnimation, ClickOutsideDirective, ANIMATED_LIFECYCLE_TOKEN, AnimatedLifecycleDirective, RuntimeError, AnimatedOverlayDirective, SelectionModel, ActiveSelectionModel, ObserveContentDirective, clamp, nextFrame, DELAYABLE_TOKEN, ObserveResizeDirective, SmartBlockScrollStrategy, RouterStateService, ClickObserverService, FocusVisibleService, ViewportService, scrollToElement, 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, debounceTime, filter, distinctUntilChanged, withLatestFrom, skipWhile, catchError, throwError, firstValueFrom, fromEvent, merge, take, timer, skipUntil, defer, Subscription, Observable } from 'rxjs';
8
+ import { BehaviorSubject, startWith, map, switchMap, combineLatest, pairwise, tap, takeUntil, skip, of, Subject, debounceTime, filter, distinctUntilChanged, withLatestFrom, skipWhile, catchError, throwError, firstValueFrom, fromEvent, merge, take, timer, skipUntil, defer, partition, Subscription, Observable } from 'rxjs';
9
9
  import { trigger, state, style, transition, animate } from '@angular/animations';
10
10
  import { __decorate, __metadata } from 'tslib';
11
11
  import { extractQuery, isQueryStateLoading, isQueryStateSuccess, isQueryStateFailure, QueryDirective } from '@ethlete/query';
12
12
  import * as i1$2 from '@angular/cdk/a11y';
13
- import { FocusMonitor, LiveAnnouncer, AriaDescriber, FocusKeyManager, A11yModule } from '@angular/cdk/a11y';
13
+ import { FocusMonitor, LiveAnnouncer, InputModalityDetector, FocusKeyManager, AriaDescriber, A11yModule } from '@angular/cdk/a11y';
14
14
  import { AutofillMonitor } from '@angular/cdk/text-field';
15
15
  import { FormControl, NgControl, Validators, NG_VALUE_ACCESSOR } from '@angular/forms';
16
16
  import { ENTER, ESCAPE, TAB as TAB$1, A, DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW, SPACE, hasModifierKey, PAGE_DOWN, PAGE_UP, END, HOME } from '@angular/cdk/keycodes';
@@ -18,17 +18,18 @@ import * as i1$4 from '@angular/cdk/bidi';
18
18
  import { Directionality } from '@angular/cdk/bidi';
19
19
  import { CdkDialogContainer, Dialog, DialogConfig, DIALOG_SCROLL_STRATEGY_PROVIDER as DIALOG_SCROLL_STRATEGY_PROVIDER$1 } from '@angular/cdk/dialog';
20
20
  import * as i2 from '@angular/cdk/overlay';
21
- import { ViewportRuler } from '@angular/cdk/overlay';
21
+ import { ViewportRuler, STANDARD_DROPDOWN_BELOW_POSITIONS, Overlay, OverlayConfig, STANDARD_DROPDOWN_ADJACENT_POSITIONS, OverlayModule } from '@angular/cdk/overlay';
22
+ import { coerceBooleanProperty, _isNumberValue } from '@angular/cdk/coercion';
23
+ import * as i2$1 from '@angular/cdk/platform';
24
+ import { _getEventTarget } from '@angular/cdk/platform';
25
+ import { startWith as startWith$1, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, 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';
26
+ import { UniqueSelectionDispatcher, _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, _DisposeViewRepeaterStrategy, DataSource } from '@angular/cdk/collections';
22
27
  import { Meta, Title } from '@angular/platform-browser';
23
28
  import { Router, NavigationEnd, RouterLink, RouterLinkActive } from '@angular/router';
24
- import { _VIEW_REPEATER_STRATEGY, _RecycleViewRepeaterStrategy, _DisposeViewRepeaterStrategy, DataSource } from '@angular/cdk/collections';
25
- import * as i2$1 from '@angular/cdk/platform';
26
29
  import * as i3 from '@angular/cdk/scrolling';
27
30
  import { CdkScrollableModule, ViewportRuler as ViewportRuler$1 } from '@angular/cdk/scrolling';
28
31
  import * as i1$3 from '@angular/cdk/table';
29
32
  import { CdkCell, CdkCellDef, CdkColumnDef, CDK_TABLE, CdkFooterCell, CdkFooterCellDef, CdkHeaderCell, CdkHeaderCellDef, CdkTextColumn, TEXT_COLUMN_OPTIONS, CdkFooterRow, CdkTableModule, CDK_ROW_TEMPLATE, CdkFooterRowDef, CdkHeaderRow, CdkHeaderRowDef, CdkNoDataRow, CdkRow, CdkRowDef, CdkTable, _COALESCED_STYLE_SCHEDULER, STICKY_POSITIONING_LISTENER, _CoalescedStyleScheduler } from '@angular/cdk/table';
30
- import { _isNumberValue } from '@angular/cdk/coercion';
31
- import { takeUntil as takeUntil$1, take as take$1 } from 'rxjs/operators';
32
33
 
33
34
  class ChevronIconComponent {
34
35
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ChevronIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -2308,11 +2309,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
2308
2309
 
2309
2310
  class CheckboxGroupComponent {
2310
2311
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CheckboxGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2311
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: CheckboxGroupComponent, isStandalone: true, selector: "et-checkbox-group", host: { classAttribute: "et-form-group et-checkbox-group" }, hostDirectives: [{ directive: CheckboxGroupDirective }, { directive: StaticFormGroupDirective }], ngImport: i0, template: ` <ng-content select="et-checkbox-field" /> `, isInline: true, styles: [":where(.et-checkbox-group){display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2312
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: CheckboxGroupComponent, isStandalone: true, selector: "et-checkbox-group", host: { classAttribute: "et-form-group et-checkbox-group" }, hostDirectives: [{ directive: CheckboxGroupDirective }, { directive: StaticFormGroupDirective }], ngImport: i0, template: ` <ng-content /> `, isInline: true, styles: [":where(.et-checkbox-group){display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2312
2313
  }
2313
2314
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CheckboxGroupComponent, decorators: [{
2314
2315
  type: Component,
2315
- args: [{ selector: 'et-checkbox-group', template: ` <ng-content select="et-checkbox-field" /> `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
2316
+ args: [{ selector: 'et-checkbox-group', template: ` <ng-content /> `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
2316
2317
  class: 'et-form-group et-checkbox-group',
2317
2318
  }, hostDirectives: [CheckboxGroupDirective, StaticFormGroupDirective], styles: [":where(.et-checkbox-group){display:block}\n"] }]
2318
2319
  }] });
@@ -2761,9 +2762,7 @@ class InputFieldComponent extends DecoratedFormFieldBase {
2761
2762
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: InputFieldComponent, isStandalone: true, selector: "et-input-field", host: { classAttribute: "et-form-field et-input-field" }, usesInheritance: true, hostDirectives: [{ directive: StaticFormFieldDirective }, { directive: WriteableInputDirective }, { directive: i0.forwardRef(function () { return DynamicFormFieldDirective; }), inputs: ["hideErrorMessage", "hideErrorMessage"] }], ngImport: i0, template: `
2762
2763
  <ng-content select="et-label" />
2763
2764
  <div class="et-input-field-input">
2764
- <ng-content
2765
- select="et-number-input, et-text-input, et-email-input, et-password-input, et-search-input, et-textarea-input"
2766
- />
2765
+ <ng-content />
2767
2766
  </div>
2768
2767
  <et-error [errors]="inputState.errors$ | async" />
2769
2768
  `, isInline: true, dependencies: [{ kind: "component", type: ErrorComponent, selector: "et-error", inputs: ["errors"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
@@ -2775,9 +2774,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
2775
2774
  template: `
2776
2775
  <ng-content select="et-label" />
2777
2776
  <div class="et-input-field-input">
2778
- <ng-content
2779
- select="et-number-input, et-text-input, et-email-input, et-password-input, et-search-input, et-textarea-input"
2780
- />
2777
+ <ng-content />
2781
2778
  </div>
2782
2779
  <et-error [errors]="inputState.errors$ | async" />
2783
2780
  `,
@@ -3091,7 +3088,7 @@ class RadioGroupComponent {
3091
3088
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: RadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3092
3089
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: RadioGroupComponent, isStandalone: true, selector: "et-radio-group", host: { classAttribute: "et-form-group et-radio-group" }, hostDirectives: [{ directive: StaticFormGroupDirective }, { directive: WriteableInputDirective }, { directive: i0.forwardRef(function () { return DynamicFormGroupDirective; }), inputs: ["hideErrorMessage", "hideErrorMessage"] }, { directive: RadioGroupDirective }], ngImport: i0, template: `
3093
3090
  <div class="et-radio-group-container">
3094
- <ng-content select="et-radio-field" />
3091
+ <ng-content />
3095
3092
  </div>
3096
3093
  <et-error [errors]="inputState.errors$ | async" />
3097
3094
  `, isInline: true, styles: [":where(.et-radio-group){display:block}\n"], dependencies: [{ kind: "component", type: ErrorComponent, selector: "et-error", inputs: ["errors"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
@@ -3100,7 +3097,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
3100
3097
  type: Component,
3101
3098
  args: [{ selector: 'et-radio-group', template: `
3102
3099
  <div class="et-radio-group-container">
3103
- <ng-content select="et-radio-field" />
3100
+ <ng-content />
3104
3101
  </div>
3105
3102
  <et-error [errors]="inputState.errors$ | async" />
3106
3103
  `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
@@ -3332,7 +3329,7 @@ class SegmentedButtonFieldComponent {
3332
3329
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: SegmentedButtonFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3333
3330
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: SegmentedButtonFieldComponent, isStandalone: true, selector: "et-segmented-button-field", host: { classAttribute: "et-form-field et-segmented-button-field" }, hostDirectives: [{ directive: StaticFormFieldDirective }, { directive: SegmentedButtonFieldDirective }], ngImport: i0, template: `
3334
3331
  <div class="et-segmented-button-field-container">
3335
- <ng-content select="et-segmented-button" />
3332
+ <ng-content />
3336
3333
  </div>
3337
3334
  `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
3338
3335
  }
@@ -3340,7 +3337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
3340
3337
  type: Component,
3341
3338
  args: [{ selector: 'et-segmented-button-field', template: `
3342
3339
  <div class="et-segmented-button-field-container">
3343
- <ng-content select="et-segmented-button" />
3340
+ <ng-content />
3344
3341
  </div>
3345
3342
  `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
3346
3343
  class: 'et-form-field et-segmented-button-field',
@@ -3354,7 +3351,7 @@ class SegmentedButtonGroupComponent {
3354
3351
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: SegmentedButtonGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3355
3352
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: SegmentedButtonGroupComponent, isStandalone: true, selector: "et-segmented-button-group", host: { classAttribute: "et-form-group et-segmented-button-group" }, hostDirectives: [{ directive: StaticFormGroupDirective }, { directive: WriteableInputDirective }, { directive: i0.forwardRef(function () { return DynamicFormGroupDirective; }), inputs: ["hideErrorMessage", "hideErrorMessage"] }, { directive: SegmentedButtonGroupDirective }], ngImport: i0, template: `
3356
3353
  <div class="et-segmented-button-group-container">
3357
- <ng-content select="et-segmented-button-field" />
3354
+ <ng-content />
3358
3355
  </div>
3359
3356
  <et-error [errors]="inputState.errors$ | async" />
3360
3357
  `, isInline: true, styles: [":where(.et-segmented-button-group){--et-segmented-button-group-gap: 1rem}.et-segmented-button-group-container{display:flex;gap:var(--et-segmented-button-group-gap)}\n"], dependencies: [{ kind: "component", type: ErrorComponent, selector: "et-error", inputs: ["errors"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
@@ -3363,7 +3360,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
3363
3360
  type: Component,
3364
3361
  args: [{ selector: 'et-segmented-button-group', template: `
3365
3362
  <div class="et-segmented-button-group-container">
3366
- <ng-content select="et-segmented-button-field" />
3363
+ <ng-content />
3367
3364
  </div>
3368
3365
  <et-error [errors]="inputState.errors$ | async" />
3369
3366
  `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
@@ -6718,193 +6715,1596 @@ const provideDialog = () => {
6718
6715
  return [DialogService, DIALOG_SCROLL_STRATEGY_PROVIDER, Dialog, DIALOG_SCROLL_STRATEGY_PROVIDER$1];
6719
6716
  };
6720
6717
 
6721
- const TOGGLETIP_CONFIG = new InjectionToken('ToggletipConfig');
6722
- const TOGGLETIP_TEXT = new InjectionToken('ToggletipText');
6723
- const TOGGLETIP_TEMPLATE = new InjectionToken('ToggletipTemplate');
6724
- const TOGGLETIP_DEFAULT_CONFIG = {
6725
- placement: 'auto',
6726
- offset: [0, 8],
6727
- arrowPadding: 4,
6728
- customAnimated: false,
6718
+ /* eslint-disable @angular-eslint/directive-class-suffix */
6719
+ const MENU_STACK = new InjectionToken('cdk-menu-stack');
6720
+ const PARENT_OR_NEW_MENU_STACK_PROVIDER = {
6721
+ provide: MENU_STACK,
6722
+ deps: [[new Optional(), new SkipSelf(), new Inject(MENU_STACK)]],
6723
+ useFactory: (parentMenuStack) => parentMenuStack || new MenuStack(),
6729
6724
  };
6730
-
6731
- const createToggletipConfig = (config = {}) => ({
6732
- ...TOGGLETIP_DEFAULT_CONFIG,
6733
- ...(config || {}),
6725
+ const PARENT_OR_NEW_INLINE_MENU_STACK_PROVIDER = (orientation) => ({
6726
+ provide: MENU_STACK,
6727
+ deps: [[new Optional(), new SkipSelf(), new Inject(MENU_STACK)]],
6728
+ useFactory: (parentMenuStack) => parentMenuStack || MenuStack.inline(orientation),
6734
6729
  });
6730
+ let nextId$3 = 0;
6731
+ class MenuStack {
6732
+ constructor() {
6733
+ this.id = `${nextId$3++}`;
6734
+ this._elements = [];
6735
+ this._close = new Subject();
6736
+ this._empty = new Subject();
6737
+ this._hasFocus = new Subject();
6738
+ this.closed = this._close;
6739
+ this.hasFocus = this._hasFocus.pipe(startWith$1(false), debounceTime$1(0), distinctUntilChanged$1());
6740
+ this.emptied = this._empty;
6741
+ this._inlineMenuOrientation = null;
6742
+ }
6743
+ static inline(orientation) {
6744
+ const stack = new MenuStack();
6745
+ stack._inlineMenuOrientation = orientation;
6746
+ return stack;
6747
+ }
6748
+ push(menu) {
6749
+ this._elements.push(menu);
6750
+ }
6751
+ close(lastItem, options) {
6752
+ const { focusNextOnEmpty, focusParentTrigger } = { ...options };
6753
+ if (this._elements.indexOf(lastItem) >= 0) {
6754
+ let poppedElement;
6755
+ do {
6756
+ poppedElement = this._elements.pop();
6757
+ this._close.next({ item: poppedElement, focusParentTrigger });
6758
+ } while (poppedElement !== lastItem);
6759
+ if (this.isEmpty()) {
6760
+ this._empty.next(focusNextOnEmpty);
6761
+ }
6762
+ }
6763
+ }
6764
+ closeSubMenuOf(lastItem) {
6765
+ let removed = false;
6766
+ if (this._elements.indexOf(lastItem) >= 0) {
6767
+ removed = this.peek() !== lastItem;
6768
+ while (this.peek() !== lastItem) {
6769
+ this._close.next({ item: this._elements.pop() });
6770
+ }
6771
+ }
6772
+ return removed;
6773
+ }
6774
+ closeAll(options) {
6775
+ const { focusNextOnEmpty, focusParentTrigger } = { ...options };
6776
+ if (!this.isEmpty()) {
6777
+ while (!this.isEmpty()) {
6778
+ const menuStackItem = this._elements.pop();
6779
+ if (menuStackItem) {
6780
+ this._close.next({ item: menuStackItem, focusParentTrigger });
6781
+ }
6782
+ }
6783
+ this._empty.next(focusNextOnEmpty);
6784
+ }
6785
+ }
6786
+ isEmpty() {
6787
+ return !this._elements.length;
6788
+ }
6789
+ length() {
6790
+ return this._elements.length;
6791
+ }
6792
+ peek() {
6793
+ return this._elements[this._elements.length - 1];
6794
+ }
6795
+ hasInlineMenu() {
6796
+ return this._inlineMenuOrientation != null;
6797
+ }
6798
+ inlineMenuOrientation() {
6799
+ return this._inlineMenuOrientation;
6800
+ }
6801
+ setHasFocus(hasFocus) {
6802
+ this._hasFocus.next(hasFocus);
6803
+ }
6804
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MenuStack, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6805
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MenuStack }); }
6806
+ }
6807
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MenuStack, decorators: [{
6808
+ type: Injectable
6809
+ }] });
6735
6810
 
6736
- const provideToggletipConfig = (config = {}) => {
6737
- return { provide: TOGGLETIP_CONFIG, useValue: createToggletipConfig(config) };
6738
- };
6739
-
6740
- const TOGGLETIP_DIRECTIVE = new InjectionToken('TOGGLETIP_DIRECTIVE');
6741
- class ToggletipDirective {
6742
- get toggletip() {
6743
- return this._toggletip;
6811
+ const MENU_TRIGGER = new InjectionToken('cdk-menu-trigger');
6812
+ class CdkMenuTriggerBase {
6813
+ constructor() {
6814
+ this.injector = inject(Injector);
6815
+ this.viewContainerRef = inject(ViewContainerRef);
6816
+ this.menuStack = inject(MENU_STACK);
6817
+ this.menuPosition = null;
6818
+ this.opened = new EventEmitter();
6819
+ this.closed = new EventEmitter();
6820
+ this.menuTemplateRef = null;
6821
+ this.overlayRef = null;
6822
+ this.destroyed = new Subject();
6823
+ this.stopOutsideClicksListener = merge(this.closed, this.destroyed);
6824
+ this._menuPortal = null;
6744
6825
  }
6745
- set toggletip(v) {
6746
- this._toggletip = v;
6826
+ ngOnDestroy() {
6827
+ this._destroyOverlay();
6828
+ this.destroyed.next();
6829
+ this.destroyed.complete();
6747
6830
  }
6748
- get showToggletip() {
6749
- return this._showToggletip;
6831
+ isOpen() {
6832
+ return !!this.overlayRef?.hasAttached();
6750
6833
  }
6751
- set showToggletip(value) {
6752
- this._showToggletip = booleanAttribute(value);
6753
- if (this._showToggletip && !this._animatedOverlay.isMounted) {
6754
- nextFrame(() => {
6755
- this._mountToggletip();
6756
- this._addListeners();
6757
- });
6834
+ registerChildMenu(child) {
6835
+ this.childMenu = child;
6836
+ }
6837
+ getMenuContentPortal() {
6838
+ const hasMenuContentChanged = this.menuTemplateRef !== this._menuPortal?.templateRef;
6839
+ if (this.menuTemplateRef && (!this._menuPortal || hasMenuContentChanged)) {
6840
+ this._menuPortal = new TemplatePortal(this.menuTemplateRef, this.viewContainerRef, this.menuData, this._getChildMenuInjector());
6758
6841
  }
6759
- else if (!this._showToggletip && this._animatedOverlay.isMounted) {
6760
- this._animatedOverlay.unmount();
6761
- this._removeListeners();
6842
+ return this._menuPortal;
6843
+ }
6844
+ isElementInsideMenuStack(element) {
6845
+ for (let el = element; el; el = el?.parentElement ?? null) {
6846
+ if (el.getAttribute('data-cdk-menu-stack-id') === this.menuStack.id) {
6847
+ return true;
6848
+ }
6849
+ }
6850
+ return false;
6851
+ }
6852
+ _destroyOverlay() {
6853
+ if (this.overlayRef) {
6854
+ this.overlayRef.dispose();
6855
+ this.overlayRef = null;
6856
+ }
6857
+ }
6858
+ _getChildMenuInjector() {
6859
+ this._childMenuInjector =
6860
+ this._childMenuInjector ||
6861
+ Injector.create({
6862
+ providers: [
6863
+ { provide: MENU_TRIGGER, useValue: this },
6864
+ { provide: MENU_STACK, useValue: this.menuStack },
6865
+ ],
6866
+ parent: this.injector,
6867
+ });
6868
+ return this._childMenuInjector;
6869
+ }
6870
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuTriggerBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
6871
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkMenuTriggerBase, host: { properties: { "attr.aria-controls": "childMenu?.id", "attr.data-cdk-menu-stack-id": "menuStack.id" } }, ngImport: i0 }); }
6872
+ }
6873
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuTriggerBase, decorators: [{
6874
+ type: Directive,
6875
+ args: [{
6876
+ host: {
6877
+ '[attr.aria-controls]': 'childMenu?.id',
6878
+ '[attr.data-cdk-menu-stack-id]': 'menuStack.id',
6879
+ },
6880
+ }]
6881
+ }] });
6882
+
6883
+ /* eslint-disable @angular-eslint/directive-class-suffix */
6884
+ const CONTEXT_MENU_POSITIONS = STANDARD_DROPDOWN_BELOW_POSITIONS.map((position) => {
6885
+ const offsetX = position.overlayX === 'start' ? 2 : -2;
6886
+ const offsetY = position.overlayY === 'top' ? 2 : -2;
6887
+ return { ...position, offsetX, offsetY };
6888
+ });
6889
+ class ContextMenuTracker {
6890
+ update(trigger) {
6891
+ if (ContextMenuTracker._openContextMenuTrigger !== trigger) {
6892
+ ContextMenuTracker._openContextMenuTrigger?.close();
6893
+ ContextMenuTracker._openContextMenuTrigger = trigger;
6762
6894
  }
6763
6895
  }
6896
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ContextMenuTracker, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6897
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ContextMenuTracker, providedIn: 'root' }); }
6898
+ }
6899
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ContextMenuTracker, decorators: [{
6900
+ type: Injectable,
6901
+ args: [{ providedIn: 'root' }]
6902
+ }] });
6903
+ class CdkContextMenuTrigger extends CdkMenuTriggerBase {
6904
+ get disabled() {
6905
+ return this._disabled;
6906
+ }
6907
+ set disabled(value) {
6908
+ this._disabled = coerceBooleanProperty(value);
6909
+ }
6764
6910
  constructor() {
6765
- this._destroy$ = createDestroy();
6766
- this._defaultConfig = inject(TOGGLETIP_CONFIG, { optional: true }) ?? createToggletipConfig();
6767
- this._animatedOverlay = inject(AnimatedOverlayDirective);
6768
- this._toggletip = null;
6769
- this._showToggletip = false;
6770
- this.toggletipClose = new EventEmitter();
6771
- this._clickObserverService = inject(ClickObserverService);
6772
- this._listenerSubscriptions = [];
6773
- this._animatedOverlay.placement = this._defaultConfig.placement;
6774
- this._animatedOverlay.offset = this._defaultConfig.offset;
6775
- this._animatedOverlay.arrowPadding = this._defaultConfig.arrowPadding;
6911
+ super();
6912
+ this._overlay = inject(Overlay);
6913
+ this._directionality = inject(Directionality, { optional: true });
6914
+ this._contextMenuTracker = inject(ContextMenuTracker);
6915
+ this._disabled = false;
6916
+ this._setMenuStackCloseListener();
6776
6917
  }
6777
- ngOnInit() {
6778
- this._animatedOverlay
6779
- .afterClosed()
6780
- .pipe(tap(() => {
6781
- this._removeListeners();
6782
- this.toggletipClose.emit();
6783
- }), takeUntil(this._destroy$))
6784
- .subscribe();
6918
+ open(coordinates) {
6919
+ this._open(coordinates, false);
6785
6920
  }
6786
- ngOnDestroy() {
6787
- this._animatedOverlay._destroy();
6788
- this._removeListeners();
6921
+ close() {
6922
+ this.menuStack.closeAll();
6789
6923
  }
6790
- _addListeners() {
6791
- const keyupEscSub = fromEvent(document, 'keyup')
6792
- .pipe(filter((e) => e.key === 'Escape'), tap(() => this._animatedOverlay.unmount()))
6793
- .subscribe();
6794
- const clickOutsideSub = this._clickObserverService
6795
- .observe(this._animatedOverlay.componentRef?.location.nativeElement)
6796
- .subscribe((e) => {
6797
- const targetElement = e.target;
6798
- const isInside = this._animatedOverlay.componentRef?.location.nativeElement.contains(targetElement);
6799
- if (!isInside) {
6800
- this._animatedOverlay.unmount();
6924
+ _openOnContextMenu(event) {
6925
+ if (!this.disabled) {
6926
+ event.preventDefault();
6927
+ event.stopPropagation();
6928
+ this._contextMenuTracker.update(this);
6929
+ this._open({ x: event.clientX, y: event.clientY }, true);
6930
+ if (event.button === 2) {
6931
+ this.childMenu?.focusFirstItem('mouse');
6932
+ }
6933
+ else if (event.button === 0) {
6934
+ this.childMenu?.focusFirstItem('keyboard');
6935
+ }
6936
+ else {
6937
+ this.childMenu?.focusFirstItem('program');
6801
6938
  }
6939
+ }
6940
+ }
6941
+ _getOverlayConfig(coordinates) {
6942
+ return new OverlayConfig({
6943
+ positionStrategy: this._getOverlayPositionStrategy(coordinates),
6944
+ scrollStrategy: this._overlay.scrollStrategies.reposition(),
6945
+ direction: this._directionality || undefined,
6802
6946
  });
6803
- this._listenerSubscriptions.push(keyupEscSub, clickOutsideSub);
6804
6947
  }
6805
- _removeListeners() {
6806
- this._listenerSubscriptions.forEach((s) => s.unsubscribe());
6807
- this._listenerSubscriptions.length = 0;
6948
+ _getOverlayPositionStrategy(coordinates) {
6949
+ return this._overlay
6950
+ .position()
6951
+ .flexibleConnectedTo(coordinates)
6952
+ .withLockedPosition()
6953
+ .withGrowAfterOpen()
6954
+ .withPositions(this.menuPosition ?? CONTEXT_MENU_POSITIONS);
6808
6955
  }
6809
- _mountToggletip() {
6810
- this._animatedOverlay.mount({
6811
- component: ToggletipComponent,
6812
- providers: [
6813
- {
6814
- provide: TOGGLETIP_CONFIG,
6815
- useValue: this._defaultConfig,
6816
- },
6817
- ...[
6818
- typeof this.toggletip === 'string'
6819
- ? {
6820
- provide: TOGGLETIP_TEXT,
6821
- useValue: this.toggletip,
6822
- }
6823
- : {
6824
- provide: TOGGLETIP_TEMPLATE,
6825
- useValue: this.toggletip,
6826
- },
6827
- ],
6828
- ],
6956
+ _setMenuStackCloseListener() {
6957
+ this.menuStack.closed.pipe(takeUntil$1(this.destroyed)).subscribe(({ item }) => {
6958
+ if (item === this.childMenu && this.isOpen()) {
6959
+ this.closed.next();
6960
+ this.overlayRef.detach();
6961
+ }
6829
6962
  });
6830
6963
  }
6831
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ToggletipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
6832
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: ToggletipDirective, isStandalone: true, selector: "[etToggletip]", inputs: { toggletip: ["etToggletip", "toggletip"], showToggletip: "showToggletip" }, outputs: { toggletipClose: "toggletipClose" }, providers: [
6833
- {
6834
- provide: TOGGLETIP_DIRECTIVE,
6835
- useExisting: ToggletipDirective,
6836
- },
6837
- ], hostDirectives: [{ directive: i1$1.AnimatedOverlayDirective, inputs: ["placement", "placement"] }], ngImport: i0 }); }
6964
+ _subscribeToOutsideClicks(ignoreFirstAuxClick) {
6965
+ if (this.overlayRef) {
6966
+ let outsideClicks = this.overlayRef.outsidePointerEvents();
6967
+ if (ignoreFirstAuxClick) {
6968
+ const [auxClicks, nonAuxClicks] = partition(outsideClicks, ({ type }) => type === 'auxclick');
6969
+ outsideClicks = merge(nonAuxClicks, auxClicks.pipe(skip$1(1)));
6970
+ }
6971
+ outsideClicks.pipe(takeUntil$1(this.stopOutsideClicksListener)).subscribe((event) => {
6972
+ if (!this.isElementInsideMenuStack(_getEventTarget(event))) {
6973
+ this.menuStack.closeAll();
6974
+ }
6975
+ });
6976
+ }
6977
+ }
6978
+ _open(coordinates, ignoreFirstOutsideAuxClick) {
6979
+ if (this.disabled) {
6980
+ return;
6981
+ }
6982
+ if (this.isOpen()) {
6983
+ this.menuStack.closeSubMenuOf(this.childMenu);
6984
+ this.overlayRef.getConfig().positionStrategy.setOrigin(coordinates);
6985
+ this.overlayRef.updatePosition();
6986
+ }
6987
+ else {
6988
+ this.opened.next();
6989
+ if (this.overlayRef) {
6990
+ this.overlayRef.getConfig().positionStrategy.setOrigin(coordinates);
6991
+ this.overlayRef.updatePosition();
6992
+ }
6993
+ else {
6994
+ this.overlayRef = this._overlay.create(this._getOverlayConfig(coordinates));
6995
+ }
6996
+ this.overlayRef.attach(this.getMenuContentPortal());
6997
+ this._subscribeToOutsideClicks(ignoreFirstOutsideAuxClick);
6998
+ }
6999
+ }
7000
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkContextMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
7001
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkContextMenuTrigger, isStandalone: true, selector: "[cdkContextMenuTriggerFor]", inputs: { menuTemplateRef: ["cdkContextMenuTriggerFor", "menuTemplateRef"], menuPosition: ["cdkContextMenuPosition", "menuPosition"], menuData: ["cdkContextMenuTriggerData", "menuData"], disabled: ["cdkContextMenuDisabled", "disabled"] }, outputs: { opened: "cdkContextMenuOpened", closed: "cdkContextMenuClosed" }, host: { listeners: { "contextmenu": "_openOnContextMenu($event)" }, properties: { "attr.data-cdk-menu-stack-id": "null" } }, providers: [
7002
+ { provide: MENU_TRIGGER, useExisting: CdkContextMenuTrigger },
7003
+ { provide: MENU_STACK, useClass: MenuStack },
7004
+ ], exportAs: ["cdkContextMenuTriggerFor"], usesInheritance: true, ngImport: i0 }); }
6838
7005
  }
6839
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ToggletipDirective, decorators: [{
7006
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkContextMenuTrigger, decorators: [{
6840
7007
  type: Directive,
6841
7008
  args: [{
6842
- selector: '[etToggletip]',
7009
+ selector: '[cdkContextMenuTriggerFor]',
7010
+ exportAs: 'cdkContextMenuTriggerFor',
6843
7011
  standalone: true,
7012
+ host: {
7013
+ '[attr.data-cdk-menu-stack-id]': 'null',
7014
+ '(contextmenu)': '_openOnContextMenu($event)',
7015
+ },
7016
+ inputs: [
7017
+ 'menuTemplateRef: cdkContextMenuTriggerFor',
7018
+ 'menuPosition: cdkContextMenuPosition',
7019
+ 'menuData: cdkContextMenuTriggerData',
7020
+ ],
7021
+ outputs: ['opened: cdkContextMenuOpened', 'closed: cdkContextMenuClosed'],
6844
7022
  providers: [
6845
- {
6846
- provide: TOGGLETIP_DIRECTIVE,
6847
- useExisting: ToggletipDirective,
6848
- },
7023
+ { provide: MENU_TRIGGER, useExisting: CdkContextMenuTrigger },
7024
+ { provide: MENU_STACK, useClass: MenuStack },
6849
7025
  ],
6850
- hostDirectives: [{ directive: AnimatedOverlayDirective, inputs: ['placement'] }],
6851
7026
  }]
6852
- }], ctorParameters: function () { return []; }, propDecorators: { toggletip: [{
7027
+ }], ctorParameters: function () { return []; }, propDecorators: { disabled: [{
6853
7028
  type: Input,
6854
- args: ['etToggletip']
6855
- }], showToggletip: [{
6856
- type: Input
6857
- }], toggletipClose: [{
6858
- type: Output
7029
+ args: ['cdkContextMenuDisabled']
6859
7030
  }] } });
6860
7031
 
6861
- const TOGGLETIP = new InjectionToken('Toggletip');
6862
- // TODO(TRB): The focus should get trapped inside the toggletip.
6863
- // The toggletip trigger should get a aria-haspopup="true" and aria-expanded="true" attribute.
6864
- class ToggletipComponent {
7032
+ function throwMissingPointerFocusTracker() {
7033
+ throw Error('expected an instance of PointerFocusTracker to be provided');
7034
+ }
7035
+ function throwMissingMenuReference() {
7036
+ throw Error('expected a reference to the parent menu');
7037
+ }
7038
+
7039
+ /* eslint-disable @angular-eslint/directive-class-suffix */
7040
+ const MENU_AIM = new InjectionToken('cdk-menu-aim');
7041
+ const MOUSE_MOVE_SAMPLE_FREQUENCY = 3;
7042
+ const NUM_POINTS = 5;
7043
+ const CLOSE_DELAY = 300;
7044
+ function getSlope(a, b) {
7045
+ return (b.y - a.y) / (b.x - a.x);
7046
+ }
7047
+ function getYIntercept(point, slope) {
7048
+ return point.y - slope * point.x;
7049
+ }
7050
+ function isWithinSubmenu(submenuPoints, m, b) {
7051
+ const { left, right, top, bottom } = submenuPoints;
7052
+ return ((m * left + b >= top && m * left + b <= bottom) ||
7053
+ (m * right + b >= top && m * right + b <= bottom) ||
7054
+ ((top - b) / m >= left && (top - b) / m <= right) ||
7055
+ ((bottom - b) / m >= left && (bottom - b) / m <= right));
7056
+ }
7057
+ class TargetMenuAim {
6865
7058
  constructor() {
6866
- this._config = inject(TOGGLETIP_CONFIG);
6867
- this.toggletipText = inject(TOGGLETIP_TEXT, { optional: true });
6868
- this.toggletipTemplate = inject(TOGGLETIP_TEMPLATE, { optional: true });
6869
- this.injector = inject(Injector);
6870
- this._cdr = inject(ChangeDetectorRef);
6871
- this._trigger = inject(TOGGLETIP_DIRECTIVE);
7059
+ this._ngZone = inject(NgZone);
7060
+ this._points = [];
7061
+ this._menu = null;
7062
+ this._pointerTracker = null;
7063
+ this._timeoutId = null;
7064
+ this._destroyed = new Subject();
6872
7065
  }
6873
- get attrAriaHidden() {
6874
- return true;
7066
+ ngOnDestroy() {
7067
+ this._destroyed.next();
7068
+ this._destroyed.complete();
6875
7069
  }
6876
- get usesDefaultAnimation() {
6877
- return !this._config.customAnimated;
7070
+ initialize(menu, pointerTracker) {
7071
+ this._menu = menu;
7072
+ this._pointerTracker = pointerTracker;
7073
+ this._subscribeToMouseMoves();
6878
7074
  }
6879
- get containerClass() {
6880
- return this._config.containerClass;
7075
+ toggle(doToggle) {
7076
+ if (!this._menu)
7077
+ return;
7078
+ if (this._menu.orientation === 'horizontal') {
7079
+ doToggle();
7080
+ }
7081
+ this._checkConfigured();
7082
+ const siblingItemIsWaiting = !!this._timeoutId;
7083
+ const hasPoints = this._points.length > 1;
7084
+ if (hasPoints && !siblingItemIsWaiting) {
7085
+ if (this._isMovingToSubmenu()) {
7086
+ this._startTimeout(doToggle);
7087
+ }
7088
+ else {
7089
+ doToggle();
7090
+ }
7091
+ }
7092
+ else if (!siblingItemIsWaiting) {
7093
+ doToggle();
7094
+ }
6881
7095
  }
6882
- _markForCheck() {
6883
- this._cdr.markForCheck();
7096
+ _startTimeout(doToggle) {
7097
+ const timeoutId = window.setTimeout(() => {
7098
+ if (!this._pointerTracker)
7099
+ return;
7100
+ if (this._pointerTracker.activeElement && timeoutId === this._timeoutId) {
7101
+ doToggle();
7102
+ }
7103
+ this._timeoutId = null;
7104
+ }, CLOSE_DELAY);
7105
+ this._timeoutId = timeoutId;
6884
7106
  }
6885
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ToggletipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6886
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", 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: [
6887
- {
6888
- provide: TOGGLETIP,
6889
- useExisting: ToggletipComponent,
6890
- },
6891
- ], 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\" data-popper-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[data-popper-placement^=top] .toggletip-arrow{bottom:-4px}.et-toggletip[data-popper-placement^=right] .toggletip-arrow{left:-4px}.et-toggletip[data-popper-placement^=bottom] .toggletip-arrow{top:-4px}.et-toggletip[data-popper-placement^=left] .toggletip-arrow{right:-4px}.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)}.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{inline-size:var(--arrow-size);block-size:var(--arrow-size);position:absolute;z-index:-1}.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[data-popper-placement^=top] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=top] .et-toggletip-container.et-animation-leave-to{transform:translateY(5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=right] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=right] .et-toggletip-container.et-animation-leave-to{transform:translate(-5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=bottom] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=bottom] .et-toggletip-container.et-animation-leave-to{transform:translateY(-5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=left] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-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 }); }
6892
- }
6893
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ToggletipComponent, decorators: [{
6894
- type: Component,
6895
- args: [{ selector: 'et-toggletip', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgIf, NgTemplateOutlet, AnimatedLifecycleDirective], host: {
6896
- class: 'et-toggletip',
6897
- }, providers: [
6898
- {
6899
- provide: TOGGLETIP,
6900
- useExisting: ToggletipComponent,
6901
- },
6902
- ], 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\" data-popper-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[data-popper-placement^=top] .toggletip-arrow{bottom:-4px}.et-toggletip[data-popper-placement^=right] .toggletip-arrow{left:-4px}.et-toggletip[data-popper-placement^=bottom] .toggletip-arrow{top:-4px}.et-toggletip[data-popper-placement^=left] .toggletip-arrow{right:-4px}.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)}.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{inline-size:var(--arrow-size);block-size:var(--arrow-size);position:absolute;z-index:-1}.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[data-popper-placement^=top] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=top] .et-toggletip-container.et-animation-leave-to{transform:translateY(5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=right] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=right] .et-toggletip-container.et-animation-leave-to{transform:translate(-5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=bottom] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=bottom] .et-toggletip-container.et-animation-leave-to{transform:translateY(-5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=left] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=left] .et-toggletip-container.et-animation-leave-to{transform:translate(5px)}\n"] }]
6903
- }], propDecorators: { _animatedLifecycle: [{
6904
- type: ViewChild,
6905
- args: [ANIMATED_LIFECYCLE_TOKEN, { static: true }]
6906
- }], attrAriaHidden: [{
6907
- type: HostBinding,
7107
+ _isMovingToSubmenu() {
7108
+ const submenuPoints = this._getSubmenuBounds();
7109
+ if (!submenuPoints) {
7110
+ return false;
7111
+ }
7112
+ let numMoving = 0;
7113
+ const currPoint = this._points[this._points.length - 1];
7114
+ for (let i = this._points.length - 2; i >= 0; i--) {
7115
+ const previous = this._points[i];
7116
+ const slope = getSlope(currPoint, previous);
7117
+ if (isWithinSubmenu(submenuPoints, slope, getYIntercept(currPoint, slope))) {
7118
+ numMoving++;
7119
+ }
7120
+ }
7121
+ return numMoving >= Math.floor(NUM_POINTS / 2);
7122
+ }
7123
+ _getSubmenuBounds() {
7124
+ return this._pointerTracker?.previousElement?.getMenu()?.nativeElement.getBoundingClientRect();
7125
+ }
7126
+ _checkConfigured() {
7127
+ if (isDevMode()) {
7128
+ if (!this._pointerTracker) {
7129
+ throwMissingPointerFocusTracker();
7130
+ }
7131
+ if (!this._menu) {
7132
+ throwMissingMenuReference();
7133
+ }
7134
+ }
7135
+ }
7136
+ _subscribeToMouseMoves() {
7137
+ this._ngZone.runOutsideAngular(() => {
7138
+ if (!this._menu)
7139
+ return;
7140
+ fromEvent(this._menu.nativeElement, 'mousemove')
7141
+ .pipe(filter$1((_, index) => index % MOUSE_MOVE_SAMPLE_FREQUENCY === 0), takeUntil$1(this._destroyed))
7142
+ .subscribe((event) => {
7143
+ this._points.push({ x: event.clientX, y: event.clientY });
7144
+ if (this._points.length > NUM_POINTS) {
7145
+ this._points.shift();
7146
+ }
7147
+ });
7148
+ });
7149
+ }
7150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: TargetMenuAim, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7151
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: TargetMenuAim }); }
7152
+ }
7153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: TargetMenuAim, decorators: [{
7154
+ type: Injectable
7155
+ }] });
7156
+ class CdkTargetMenuAim {
7157
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkTargetMenuAim, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
7158
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkTargetMenuAim, isStandalone: true, selector: "[cdkTargetMenuAim]", providers: [{ provide: MENU_AIM, useClass: TargetMenuAim }], exportAs: ["cdkTargetMenuAim"], ngImport: i0 }); }
7159
+ }
7160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkTargetMenuAim, decorators: [{
7161
+ type: Directive,
7162
+ args: [{
7163
+ selector: '[cdkTargetMenuAim]',
7164
+ exportAs: 'cdkTargetMenuAim',
7165
+ standalone: true,
7166
+ providers: [{ provide: MENU_AIM, useClass: TargetMenuAim }],
7167
+ }]
7168
+ }] });
7169
+
7170
+ /* eslint-disable @angular-eslint/directive-class-suffix */
7171
+ class CdkMenuGroup {
7172
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
7173
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkMenuGroup, isStandalone: true, selector: "[cdkMenuGroup]", host: { attributes: { "role": "group" }, classAttribute: "cdk-menu-group" }, providers: [{ provide: UniqueSelectionDispatcher, useClass: UniqueSelectionDispatcher }], exportAs: ["cdkMenuGroup"], ngImport: i0 }); }
7174
+ }
7175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuGroup, decorators: [{
7176
+ type: Directive,
7177
+ args: [{
7178
+ selector: '[cdkMenuGroup]',
7179
+ exportAs: 'cdkMenuGroup',
7180
+ standalone: true,
7181
+ host: {
7182
+ role: 'group',
7183
+ class: 'cdk-menu-group',
7184
+ },
7185
+ providers: [{ provide: UniqueSelectionDispatcher, useClass: UniqueSelectionDispatcher }],
7186
+ }]
7187
+ }] });
7188
+
7189
+ const CDK_MENU = new InjectionToken('cdk-menu');
7190
+
7191
+ /* eslint-disable @angular-eslint/directive-class-suffix */
7192
+ class CdkMenuTrigger extends CdkMenuTriggerBase {
7193
+ constructor() {
7194
+ super();
7195
+ this._elementRef = inject(ElementRef);
7196
+ this._overlay = inject(Overlay);
7197
+ this._ngZone = inject(NgZone);
7198
+ this._directionality = inject(Directionality, { optional: true });
7199
+ this._inputModalityDetector = inject(InputModalityDetector);
7200
+ this._parentMenu = inject(CDK_MENU, { optional: true });
7201
+ this._menuAim = inject(MENU_AIM, { optional: true });
7202
+ this._setRole();
7203
+ this._registerCloseHandler();
7204
+ this._subscribeToMenuStackClosed();
7205
+ this._subscribeToMouseEnter();
7206
+ this._subscribeToMenuStackHasFocus();
7207
+ this._setType();
7208
+ }
7209
+ toggle() {
7210
+ this.isOpen() ? this.close() : this.open();
7211
+ }
7212
+ open() {
7213
+ if (!this.isOpen() && this.menuTemplateRef != null) {
7214
+ this.opened.next();
7215
+ this.overlayRef = this.overlayRef || this._overlay.create(this._getOverlayConfig());
7216
+ this.overlayRef.attach(this.getMenuContentPortal());
7217
+ this._subscribeToOutsideClicks();
7218
+ }
7219
+ }
7220
+ close() {
7221
+ if (this.isOpen()) {
7222
+ this.closed.next();
7223
+ this.overlayRef.detach();
7224
+ }
7225
+ this._closeSiblingTriggers();
7226
+ }
7227
+ getMenu() {
7228
+ return this.childMenu;
7229
+ }
7230
+ _toggleOnKeydown(event) {
7231
+ const isParentVertical = this._parentMenu?.orientation === 'vertical';
7232
+ switch (event.keyCode) {
7233
+ case SPACE:
7234
+ case ENTER:
7235
+ if (!hasModifierKey(event)) {
7236
+ this.toggle();
7237
+ this.childMenu?.focusFirstItem('keyboard');
7238
+ }
7239
+ break;
7240
+ case RIGHT_ARROW:
7241
+ if (!hasModifierKey(event)) {
7242
+ if (this._parentMenu && isParentVertical && this._directionality?.value !== 'rtl') {
7243
+ event.preventDefault();
7244
+ this.open();
7245
+ this.childMenu?.focusFirstItem('keyboard');
7246
+ }
7247
+ }
7248
+ break;
7249
+ case LEFT_ARROW:
7250
+ if (!hasModifierKey(event)) {
7251
+ if (this._parentMenu && isParentVertical && this._directionality?.value === 'rtl') {
7252
+ event.preventDefault();
7253
+ this.open();
7254
+ this.childMenu?.focusFirstItem('keyboard');
7255
+ }
7256
+ }
7257
+ break;
7258
+ case DOWN_ARROW:
7259
+ case UP_ARROW:
7260
+ if (!hasModifierKey(event)) {
7261
+ if (!isParentVertical) {
7262
+ event.preventDefault();
7263
+ this.open();
7264
+ event.keyCode === DOWN_ARROW
7265
+ ? this.childMenu?.focusFirstItem('keyboard')
7266
+ : this.childMenu?.focusLastItem('keyboard');
7267
+ }
7268
+ }
7269
+ break;
7270
+ }
7271
+ }
7272
+ _handleClick() {
7273
+ if (this._inputModalityDetector.mostRecentModality !== 'keyboard') {
7274
+ this.toggle();
7275
+ this.childMenu?.focusFirstItem('mouse');
7276
+ }
7277
+ }
7278
+ _setHasFocus(hasFocus) {
7279
+ if (!this._parentMenu) {
7280
+ this.menuStack.setHasFocus(hasFocus);
7281
+ }
7282
+ }
7283
+ _subscribeToMouseEnter() {
7284
+ this._ngZone.runOutsideAngular(() => {
7285
+ fromEvent(this._elementRef.nativeElement, 'mouseenter')
7286
+ .pipe(filter$1(() => !this.menuStack.isEmpty() && !this.isOpen()), takeUntil$1(this.destroyed))
7287
+ .subscribe(() => {
7288
+ const toggleMenus = () => this._ngZone.run(() => {
7289
+ this._closeSiblingTriggers();
7290
+ this.open();
7291
+ });
7292
+ if (this._menuAim) {
7293
+ this._menuAim.toggle(toggleMenus);
7294
+ }
7295
+ else {
7296
+ toggleMenus();
7297
+ }
7298
+ });
7299
+ });
7300
+ }
7301
+ _closeSiblingTriggers() {
7302
+ if (this._parentMenu) {
7303
+ const isParentMenuBar = !this.menuStack.closeSubMenuOf(this._parentMenu) && this.menuStack.peek() !== this._parentMenu;
7304
+ if (isParentMenuBar) {
7305
+ this.menuStack.closeAll();
7306
+ }
7307
+ }
7308
+ else {
7309
+ this.menuStack.closeAll();
7310
+ }
7311
+ }
7312
+ _getOverlayConfig() {
7313
+ return new OverlayConfig({
7314
+ positionStrategy: this._getOverlayPositionStrategy(),
7315
+ scrollStrategy: this._overlay.scrollStrategies.reposition(),
7316
+ direction: this._directionality || undefined,
7317
+ });
7318
+ }
7319
+ _getOverlayPositionStrategy() {
7320
+ return this._overlay
7321
+ .position()
7322
+ .flexibleConnectedTo(this._elementRef)
7323
+ .withLockedPosition()
7324
+ .withGrowAfterOpen()
7325
+ .withPositions(this._getOverlayPositions());
7326
+ }
7327
+ _getOverlayPositions() {
7328
+ return (this.menuPosition ??
7329
+ (!this._parentMenu || this._parentMenu.orientation === 'horizontal'
7330
+ ? STANDARD_DROPDOWN_BELOW_POSITIONS
7331
+ : STANDARD_DROPDOWN_ADJACENT_POSITIONS));
7332
+ }
7333
+ _registerCloseHandler() {
7334
+ if (!this._parentMenu) {
7335
+ this.menuStack.closed.pipe(takeUntil$1(this.destroyed)).subscribe(({ item }) => {
7336
+ if (item === this.childMenu) {
7337
+ this.close();
7338
+ }
7339
+ });
7340
+ }
7341
+ }
7342
+ _subscribeToOutsideClicks() {
7343
+ if (this.overlayRef) {
7344
+ this.overlayRef
7345
+ .outsidePointerEvents()
7346
+ .pipe(takeUntil$1(this.stopOutsideClicksListener))
7347
+ .subscribe((event) => {
7348
+ const target = _getEventTarget(event);
7349
+ const element = this._elementRef.nativeElement;
7350
+ if (target !== element && !element.contains(target)) {
7351
+ if (!this.isElementInsideMenuStack(target)) {
7352
+ this.menuStack.closeAll();
7353
+ }
7354
+ else {
7355
+ this._closeSiblingTriggers();
7356
+ }
7357
+ }
7358
+ });
7359
+ }
7360
+ }
7361
+ _subscribeToMenuStackHasFocus() {
7362
+ if (!this._parentMenu) {
7363
+ this.menuStack.hasFocus.pipe(takeUntil$1(this.destroyed)).subscribe((hasFocus) => {
7364
+ if (!hasFocus) {
7365
+ this.menuStack.closeAll();
7366
+ }
7367
+ });
7368
+ }
7369
+ }
7370
+ _subscribeToMenuStackClosed() {
7371
+ if (!this._parentMenu) {
7372
+ this.menuStack.closed.subscribe(({ focusParentTrigger }) => {
7373
+ if (focusParentTrigger && !this.menuStack.length()) {
7374
+ this._elementRef.nativeElement.focus();
7375
+ }
7376
+ });
7377
+ }
7378
+ }
7379
+ _setRole() {
7380
+ if (!this._parentMenu) {
7381
+ this._elementRef.nativeElement.setAttribute('role', 'button');
7382
+ }
7383
+ }
7384
+ _setType() {
7385
+ const element = this._elementRef.nativeElement;
7386
+ if (element.nodeName === 'BUTTON' && !element.getAttribute('type')) {
7387
+ element.setAttribute('type', 'button');
7388
+ }
7389
+ }
7390
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
7391
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkMenuTrigger, isStandalone: true, selector: "[cdkMenuTriggerFor]", inputs: { menuTemplateRef: ["cdkMenuTriggerFor", "menuTemplateRef"], menuPosition: ["cdkMenuPosition", "menuPosition"], menuData: ["cdkMenuTriggerData", "menuData"] }, outputs: { opened: "cdkMenuOpened", closed: "cdkMenuClosed" }, host: { listeners: { "focusin": "_setHasFocus(true)", "focusout": "_setHasFocus(false)", "keydown": "_toggleOnKeydown($event)", "click": "_handleClick()" }, properties: { "attr.aria-haspopup": "menuTemplateRef ? \"menu\" : null", "attr.aria-expanded": "menuTemplateRef == null ? null : isOpen()" }, classAttribute: "cdk-menu-trigger" }, providers: [{ provide: MENU_TRIGGER, useExisting: CdkMenuTrigger }, PARENT_OR_NEW_MENU_STACK_PROVIDER], exportAs: ["cdkMenuTriggerFor"], usesInheritance: true, ngImport: i0 }); }
7392
+ }
7393
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuTrigger, decorators: [{
7394
+ type: Directive,
7395
+ args: [{
7396
+ selector: '[cdkMenuTriggerFor]',
7397
+ exportAs: 'cdkMenuTriggerFor',
7398
+ standalone: true,
7399
+ host: {
7400
+ class: 'cdk-menu-trigger',
7401
+ '[attr.aria-haspopup]': 'menuTemplateRef ? "menu" : null',
7402
+ '[attr.aria-expanded]': 'menuTemplateRef == null ? null : isOpen()',
7403
+ '(focusin)': '_setHasFocus(true)',
7404
+ '(focusout)': '_setHasFocus(false)',
7405
+ '(keydown)': '_toggleOnKeydown($event)',
7406
+ '(click)': '_handleClick()',
7407
+ },
7408
+ inputs: ['menuTemplateRef: cdkMenuTriggerFor', 'menuPosition: cdkMenuPosition', 'menuData: cdkMenuTriggerData'],
7409
+ outputs: ['opened: cdkMenuOpened', 'closed: cdkMenuClosed'],
7410
+ providers: [{ provide: MENU_TRIGGER, useExisting: CdkMenuTrigger }, PARENT_OR_NEW_MENU_STACK_PROVIDER],
7411
+ }]
7412
+ }], ctorParameters: function () { return []; } });
7413
+
7414
+ /* eslint-disable @angular-eslint/directive-class-suffix */
7415
+ class CdkMenuItem {
7416
+ get disabled() {
7417
+ return this._disabled;
7418
+ }
7419
+ set disabled(value) {
7420
+ this._disabled = coerceBooleanProperty(value);
7421
+ }
7422
+ get hasMenu() {
7423
+ return this._menuTrigger?.menuTemplateRef != null;
7424
+ }
7425
+ constructor() {
7426
+ this._dir = inject(Directionality, { optional: true });
7427
+ this._inputModalityDetector = inject(InputModalityDetector);
7428
+ this._elementRef = inject(ElementRef);
7429
+ this._ngZone = inject(NgZone);
7430
+ this._menuAim = inject(MENU_AIM, { optional: true });
7431
+ this._menuStack = inject(MENU_STACK);
7432
+ this._parentMenu = inject(CDK_MENU, { optional: true });
7433
+ this._menuTrigger = inject(CdkMenuTrigger, { optional: true, self: true });
7434
+ this._disabled = false;
7435
+ this.typeaheadLabel = null;
7436
+ this.triggered = new EventEmitter();
7437
+ this._tabindex = -1;
7438
+ this.closeOnSpacebarTrigger = true;
7439
+ this.destroyed = new Subject();
7440
+ this._setupMouseEnter();
7441
+ this._setType();
7442
+ if (this._isStandaloneItem()) {
7443
+ this._tabindex = 0;
7444
+ }
7445
+ }
7446
+ ngOnDestroy() {
7447
+ this.destroyed.next();
7448
+ this.destroyed.complete();
7449
+ }
7450
+ focus() {
7451
+ this._elementRef.nativeElement.focus();
7452
+ }
7453
+ trigger(options) {
7454
+ const { keepOpen } = { ...options };
7455
+ if (!this.disabled && !this.hasMenu) {
7456
+ this.triggered.next();
7457
+ if (!keepOpen) {
7458
+ this._menuStack.closeAll({ focusParentTrigger: true });
7459
+ }
7460
+ }
7461
+ }
7462
+ isMenuOpen() {
7463
+ return !!this._menuTrigger?.isOpen();
7464
+ }
7465
+ getMenu() {
7466
+ return this._menuTrigger?.getMenu();
7467
+ }
7468
+ getMenuTrigger() {
7469
+ return this._menuTrigger;
7470
+ }
7471
+ getLabel() {
7472
+ return this.typeaheadLabel || this._elementRef.nativeElement.textContent?.trim() || '';
7473
+ }
7474
+ _resetTabIndex() {
7475
+ if (!this._isStandaloneItem()) {
7476
+ this._tabindex = -1;
7477
+ }
7478
+ }
7479
+ _setTabIndex(event) {
7480
+ if (this.disabled) {
7481
+ return;
7482
+ }
7483
+ if (!event || !this._menuStack.isEmpty()) {
7484
+ this._tabindex = 0;
7485
+ }
7486
+ }
7487
+ _onKeydown(event) {
7488
+ switch (event.keyCode) {
7489
+ case SPACE:
7490
+ case ENTER:
7491
+ if (!hasModifierKey(event)) {
7492
+ this.trigger({ keepOpen: event.keyCode === SPACE && !this.closeOnSpacebarTrigger });
7493
+ }
7494
+ break;
7495
+ case RIGHT_ARROW:
7496
+ if (!hasModifierKey(event)) {
7497
+ if (this._parentMenu && this._isParentVertical()) {
7498
+ if (this._dir?.value !== 'rtl') {
7499
+ this._forwardArrowPressed(event);
7500
+ }
7501
+ else {
7502
+ this._backArrowPressed(event);
7503
+ }
7504
+ }
7505
+ }
7506
+ break;
7507
+ case LEFT_ARROW:
7508
+ if (!hasModifierKey(event)) {
7509
+ if (this._parentMenu && this._isParentVertical()) {
7510
+ if (this._dir?.value !== 'rtl') {
7511
+ this._backArrowPressed(event);
7512
+ }
7513
+ else {
7514
+ this._forwardArrowPressed(event);
7515
+ }
7516
+ }
7517
+ }
7518
+ break;
7519
+ }
7520
+ }
7521
+ _handleClick() {
7522
+ if (this._inputModalityDetector.mostRecentModality !== 'keyboard') {
7523
+ this.trigger();
7524
+ }
7525
+ }
7526
+ _handleMousedown(event) {
7527
+ event.preventDefault();
7528
+ event.stopPropagation();
7529
+ }
7530
+ _isStandaloneItem() {
7531
+ return !this._parentMenu;
7532
+ }
7533
+ _backArrowPressed(event) {
7534
+ const parentMenu = this._parentMenu;
7535
+ if (this._menuStack.hasInlineMenu() || this._menuStack.length() > 1) {
7536
+ event.preventDefault();
7537
+ this._menuStack.close(parentMenu, {
7538
+ focusNextOnEmpty: this._menuStack.inlineMenuOrientation() === 'horizontal' ? 1 /* FocusNext.previousItem */ : 2 /* FocusNext.currentItem */,
7539
+ focusParentTrigger: true,
7540
+ });
7541
+ }
7542
+ }
7543
+ _forwardArrowPressed(event) {
7544
+ if (!this.hasMenu && this._menuStack.inlineMenuOrientation() === 'horizontal') {
7545
+ event.preventDefault();
7546
+ this._menuStack.closeAll({
7547
+ focusNextOnEmpty: 0 /* FocusNext.nextItem */,
7548
+ focusParentTrigger: true,
7549
+ });
7550
+ }
7551
+ }
7552
+ _setupMouseEnter() {
7553
+ if (!this._isStandaloneItem()) {
7554
+ const closeOpenSiblings = () => this._ngZone.run(() => this._menuStack.closeSubMenuOf(this._parentMenu));
7555
+ this._ngZone.runOutsideAngular(() => fromEvent(this._elementRef.nativeElement, 'mouseenter')
7556
+ .pipe(filter$1(() => !this._menuStack.isEmpty() && !this.hasMenu), takeUntil$1(this.destroyed))
7557
+ .subscribe(() => {
7558
+ if (this._menuAim) {
7559
+ this._menuAim.toggle(closeOpenSiblings);
7560
+ }
7561
+ else {
7562
+ closeOpenSiblings();
7563
+ }
7564
+ }));
7565
+ }
7566
+ }
7567
+ _isParentVertical() {
7568
+ return this._parentMenu?.orientation === 'vertical';
7569
+ }
7570
+ _setType() {
7571
+ const element = this._elementRef.nativeElement;
7572
+ if (element.nodeName === 'BUTTON' && !element.getAttribute('type')) {
7573
+ element.setAttribute('type', 'button');
7574
+ }
7575
+ }
7576
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
7577
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkMenuItem, isStandalone: true, selector: "[cdkMenuItem]", inputs: { disabled: ["cdkMenuItemDisabled", "disabled"], typeaheadLabel: ["cdkMenuitemTypeaheadLabel", "typeaheadLabel"] }, outputs: { triggered: "cdkMenuItemTriggered" }, host: { attributes: { "role": "menuitem" }, listeners: { "blur": "_resetTabIndex()", "focus": "_setTabIndex()", "click": "_handleClick()", "mousedown": "_handleMousedown($event)", "keydown": "_onKeydown($event)" }, properties: { "tabindex": "_tabindex", "attr.aria-disabled": "disabled || null" }, classAttribute: "cdk-menu-item" }, exportAs: ["cdkMenuItem"], ngImport: i0 }); }
7578
+ }
7579
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuItem, decorators: [{
7580
+ type: Directive,
7581
+ args: [{
7582
+ selector: '[cdkMenuItem]',
7583
+ exportAs: 'cdkMenuItem',
7584
+ standalone: true,
7585
+ host: {
7586
+ role: 'menuitem',
7587
+ class: 'cdk-menu-item',
7588
+ '[tabindex]': '_tabindex',
7589
+ '[attr.aria-disabled]': 'disabled || null',
7590
+ '(blur)': '_resetTabIndex()',
7591
+ '(focus)': '_setTabIndex()',
7592
+ '(click)': '_handleClick()',
7593
+ '(mousedown)': '_handleMousedown($event)',
7594
+ '(keydown)': '_onKeydown($event)',
7595
+ },
7596
+ }]
7597
+ }], ctorParameters: function () { return []; }, propDecorators: { disabled: [{
7598
+ type: Input,
7599
+ args: ['cdkMenuItemDisabled']
7600
+ }], typeaheadLabel: [{
7601
+ type: Input,
7602
+ args: ['cdkMenuitemTypeaheadLabel']
7603
+ }], triggered: [{
7604
+ type: Output,
7605
+ args: ['cdkMenuItemTriggered']
7606
+ }] } });
7607
+
7608
+ class PointerFocusTracker {
7609
+ constructor(_items) {
7610
+ this._items = _items;
7611
+ this.entered = this._getItemPointerEntries();
7612
+ this.exited = this._getItemPointerExits();
7613
+ this._destroyed = new Subject();
7614
+ this.entered.subscribe((element) => (this.activeElement = element));
7615
+ this.exited.subscribe(() => {
7616
+ this.previousElement = this.activeElement;
7617
+ this.activeElement = undefined;
7618
+ });
7619
+ }
7620
+ destroy() {
7621
+ this._destroyed.next();
7622
+ this._destroyed.complete();
7623
+ }
7624
+ _getItemPointerEntries() {
7625
+ return defer(() => this._items.changes.pipe(startWith$1(this._items), mergeMap((list) => list.map((element) => fromEvent(element._elementRef.nativeElement, 'mouseenter').pipe(mapTo(element), takeUntil$1(this._items.changes)))), mergeAll()));
7626
+ }
7627
+ _getItemPointerExits() {
7628
+ return defer(() => this._items.changes.pipe(startWith$1(this._items), mergeMap((list) => list.map((element) => fromEvent(element._elementRef.nativeElement, 'mouseout').pipe(mapTo(element), takeUntil$1(this._items.changes)))), mergeAll()));
7629
+ }
7630
+ }
7631
+
7632
+ /* eslint-disable @angular-eslint/directive-class-suffix */
7633
+ let nextId$2 = 0;
7634
+ class CdkMenuBase extends CdkMenuGroup {
7635
+ constructor() {
7636
+ super(...arguments);
7637
+ this.nativeElement = inject(ElementRef).nativeElement;
7638
+ this.ngZone = inject(NgZone);
7639
+ this.menuStack = inject(MENU_STACK);
7640
+ this.menuAim = inject(MENU_AIM, { optional: true, self: true });
7641
+ this.dir = inject(Directionality, { optional: true });
7642
+ this.id = `cdk-menu-${nextId$2++}`;
7643
+ this.items = null;
7644
+ this.orientation = 'vertical';
7645
+ this.isInline = false;
7646
+ this.keyManager = null;
7647
+ this.destroyed = new Subject();
7648
+ this._menuStackHasFocus = false;
7649
+ }
7650
+ ngAfterContentInit() {
7651
+ if (!this.isInline) {
7652
+ this.menuStack.push(this);
7653
+ }
7654
+ this._setKeyManager();
7655
+ this._subscribeToMenuStackHasFocus();
7656
+ this._subscribeToMenuOpen();
7657
+ this._subscribeToMenuStackClosed();
7658
+ this._setUpPointerTracker();
7659
+ }
7660
+ ngOnDestroy() {
7661
+ this.keyManager?.destroy();
7662
+ this.destroyed.next();
7663
+ this.destroyed.complete();
7664
+ this.pointerTracker?.destroy();
7665
+ }
7666
+ focusFirstItem(focusOrigin = 'program') {
7667
+ if (!this.keyManager)
7668
+ return;
7669
+ this.keyManager.setFocusOrigin(focusOrigin);
7670
+ this.keyManager.setFirstItemActive();
7671
+ }
7672
+ focusLastItem(focusOrigin = 'program') {
7673
+ if (!this.keyManager)
7674
+ return;
7675
+ this.keyManager.setFocusOrigin(focusOrigin);
7676
+ this.keyManager.setLastItemActive();
7677
+ }
7678
+ _getTabIndex() {
7679
+ const tabindexIfInline = this._menuStackHasFocus ? -1 : 0;
7680
+ return this.isInline ? tabindexIfInline : null;
7681
+ }
7682
+ closeOpenMenu(menu, options) {
7683
+ const { focusParentTrigger } = { ...options };
7684
+ const keyManager = this.keyManager;
7685
+ const trigger = this.triggerItem;
7686
+ if (menu === trigger?.getMenuTrigger()?.getMenu()) {
7687
+ trigger?.getMenuTrigger()?.close();
7688
+ if (focusParentTrigger) {
7689
+ if (!keyManager)
7690
+ return;
7691
+ if (trigger) {
7692
+ keyManager.setActiveItem(trigger);
7693
+ }
7694
+ else {
7695
+ keyManager.setFirstItemActive();
7696
+ }
7697
+ }
7698
+ }
7699
+ }
7700
+ _setKeyManager() {
7701
+ if (!this.items)
7702
+ return;
7703
+ this.keyManager = new FocusKeyManager(this.items).withWrap().withTypeAhead().withHomeAndEnd();
7704
+ if (this.orientation === 'horizontal') {
7705
+ this.keyManager.withHorizontalOrientation(this.dir?.value || 'ltr');
7706
+ }
7707
+ else {
7708
+ this.keyManager.withVerticalOrientation();
7709
+ }
7710
+ }
7711
+ _subscribeToMenuOpen() {
7712
+ if (!this.items)
7713
+ return;
7714
+ const exitCondition = merge(this.items.changes, this.destroyed);
7715
+ this.items.changes
7716
+ .pipe(startWith$1(this.items), mergeMap((list) => list
7717
+ .filter((item) => item.hasMenu)
7718
+ .map((item) => item.getMenuTrigger().opened.pipe(mapTo(item), takeUntil$1(exitCondition)))), mergeAll(), switchMap$1((item) => {
7719
+ this.triggerItem = item;
7720
+ return item.getMenuTrigger().closed;
7721
+ }), takeUntil$1(this.destroyed))
7722
+ .subscribe(() => (this.triggerItem = undefined));
7723
+ }
7724
+ _subscribeToMenuStackClosed() {
7725
+ this.menuStack.closed
7726
+ .pipe(takeUntil$1(this.destroyed))
7727
+ .subscribe(({ item, focusParentTrigger }) => this.closeOpenMenu(item, { focusParentTrigger }));
7728
+ }
7729
+ _subscribeToMenuStackHasFocus() {
7730
+ if (this.isInline) {
7731
+ this.menuStack.hasFocus.pipe(takeUntil$1(this.destroyed)).subscribe((hasFocus) => {
7732
+ this._menuStackHasFocus = hasFocus;
7733
+ });
7734
+ }
7735
+ }
7736
+ _setUpPointerTracker() {
7737
+ if (this.menuAim) {
7738
+ this.ngZone.runOutsideAngular(() => {
7739
+ if (!this.items)
7740
+ return;
7741
+ this.pointerTracker = new PointerFocusTracker(this.items);
7742
+ });
7743
+ this.menuAim.initialize(this, this.pointerTracker);
7744
+ }
7745
+ }
7746
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuBase, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
7747
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkMenuBase, inputs: { id: "id" }, host: { attributes: { "role": "menu" }, listeners: { "focus": "focusFirstItem()", "focusin": "menuStack.setHasFocus(true)", "focusout": "menuStack.setHasFocus(false)" }, properties: { "tabindex": "_getTabIndex()", "id": "id", "attr.aria-orientation": "orientation", "attr.data-cdk-menu-stack-id": "menuStack.id" } }, queries: [{ propertyName: "items", predicate: CdkMenuItem, descendants: true }], usesInheritance: true, ngImport: i0 }); }
7748
+ }
7749
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuBase, decorators: [{
7750
+ type: Directive,
7751
+ args: [{
7752
+ host: {
7753
+ role: 'menu',
7754
+ class: '',
7755
+ '[tabindex]': '_getTabIndex()',
7756
+ '[id]': 'id',
7757
+ '[attr.aria-orientation]': 'orientation',
7758
+ '[attr.data-cdk-menu-stack-id]': 'menuStack.id',
7759
+ '(focus)': 'focusFirstItem()',
7760
+ '(focusin)': 'menuStack.setHasFocus(true)',
7761
+ '(focusout)': 'menuStack.setHasFocus(false)',
7762
+ },
7763
+ }]
7764
+ }], propDecorators: { id: [{
7765
+ type: Input
7766
+ }], items: [{
7767
+ type: ContentChildren,
7768
+ args: [CdkMenuItem, { descendants: true }]
7769
+ }] } });
7770
+
7771
+ /* eslint-disable @angular-eslint/directive-class-suffix */
7772
+ class CdkMenu extends CdkMenuBase {
7773
+ constructor() {
7774
+ super();
7775
+ this._parentTrigger = inject(MENU_TRIGGER, { optional: true });
7776
+ this.closed = new EventEmitter();
7777
+ this.orientation = 'vertical';
7778
+ this.isInline = !this._parentTrigger;
7779
+ this.destroyed.subscribe(this.closed);
7780
+ this._parentTrigger?.registerChildMenu(this);
7781
+ }
7782
+ ngAfterContentInit() {
7783
+ super.ngAfterContentInit();
7784
+ this._subscribeToMenuStackEmptied();
7785
+ }
7786
+ ngOnDestroy() {
7787
+ super.ngOnDestroy();
7788
+ this.closed.complete();
7789
+ }
7790
+ _handleKeyEvent(event) {
7791
+ const keyManager = this.keyManager;
7792
+ if (!keyManager)
7793
+ return;
7794
+ switch (event.keyCode) {
7795
+ case LEFT_ARROW:
7796
+ case RIGHT_ARROW:
7797
+ if (!hasModifierKey(event)) {
7798
+ event.preventDefault();
7799
+ keyManager.setFocusOrigin('keyboard');
7800
+ keyManager.onKeydown(event);
7801
+ }
7802
+ break;
7803
+ case ESCAPE:
7804
+ if (!hasModifierKey(event)) {
7805
+ event.preventDefault();
7806
+ this.menuStack.close(this, {
7807
+ focusNextOnEmpty: 2 /* FocusNext.currentItem */,
7808
+ focusParentTrigger: true,
7809
+ });
7810
+ }
7811
+ break;
7812
+ case TAB$1:
7813
+ if (!hasModifierKey(event, 'altKey', 'metaKey', 'ctrlKey')) {
7814
+ this.menuStack.closeAll({ focusParentTrigger: true });
7815
+ }
7816
+ break;
7817
+ default:
7818
+ keyManager.onKeydown(event);
7819
+ }
7820
+ }
7821
+ _toggleMenuFocus(focusNext) {
7822
+ const keyManager = this.keyManager;
7823
+ if (!keyManager)
7824
+ return;
7825
+ switch (focusNext) {
7826
+ case 0 /* FocusNext.nextItem */:
7827
+ keyManager.setFocusOrigin('keyboard');
7828
+ keyManager.setNextItemActive();
7829
+ break;
7830
+ case 1 /* FocusNext.previousItem */:
7831
+ keyManager.setFocusOrigin('keyboard');
7832
+ keyManager.setPreviousItemActive();
7833
+ break;
7834
+ case 2 /* FocusNext.currentItem */:
7835
+ if (keyManager.activeItem) {
7836
+ keyManager.setFocusOrigin('keyboard');
7837
+ keyManager.setActiveItem(keyManager.activeItem);
7838
+ }
7839
+ break;
7840
+ }
7841
+ }
7842
+ _subscribeToMenuStackEmptied() {
7843
+ this.menuStack.emptied.pipe(takeUntil$1(this.destroyed)).subscribe((event) => this._toggleMenuFocus(event));
7844
+ }
7845
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
7846
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkMenu, isStandalone: true, selector: "[cdkMenu]", outputs: { closed: "closed" }, host: { attributes: { "role": "menu" }, listeners: { "keydown": "_handleKeyEvent($event)" }, properties: { "class.cdk-menu-inline": "isInline" }, classAttribute: "cdk-menu" }, providers: [
7847
+ { provide: CdkMenuGroup, useExisting: CdkMenu },
7848
+ { provide: CDK_MENU, useExisting: CdkMenu },
7849
+ PARENT_OR_NEW_INLINE_MENU_STACK_PROVIDER('vertical'),
7850
+ ], exportAs: ["cdkMenu"], usesInheritance: true, ngImport: i0 }); }
7851
+ }
7852
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenu, decorators: [{
7853
+ type: Directive,
7854
+ args: [{
7855
+ selector: '[cdkMenu]',
7856
+ exportAs: 'cdkMenu',
7857
+ standalone: true,
7858
+ host: {
7859
+ role: 'menu',
7860
+ class: 'cdk-menu',
7861
+ '[class.cdk-menu-inline]': 'isInline',
7862
+ '(keydown)': '_handleKeyEvent($event)',
7863
+ },
7864
+ providers: [
7865
+ { provide: CdkMenuGroup, useExisting: CdkMenu },
7866
+ { provide: CDK_MENU, useExisting: CdkMenu },
7867
+ PARENT_OR_NEW_INLINE_MENU_STACK_PROVIDER('vertical'),
7868
+ ],
7869
+ }]
7870
+ }], ctorParameters: function () { return []; }, propDecorators: { closed: [{
7871
+ type: Output
7872
+ }] } });
7873
+
7874
+ /* eslint-disable @angular-eslint/directive-class-suffix */
7875
+ class CdkMenuBar extends CdkMenuBase {
7876
+ constructor() {
7877
+ super(...arguments);
7878
+ this.orientation = 'horizontal';
7879
+ this.isInline = true;
7880
+ }
7881
+ ngAfterContentInit() {
7882
+ super.ngAfterContentInit();
7883
+ this._subscribeToMenuStackEmptied();
7884
+ }
7885
+ _handleKeyEvent(event) {
7886
+ const keyManager = this.keyManager;
7887
+ if (!keyManager)
7888
+ return;
7889
+ switch (event.keyCode) {
7890
+ case UP_ARROW:
7891
+ case DOWN_ARROW:
7892
+ case LEFT_ARROW:
7893
+ case RIGHT_ARROW:
7894
+ if (!hasModifierKey(event)) {
7895
+ const horizontalArrows = event.keyCode === LEFT_ARROW || event.keyCode === RIGHT_ARROW;
7896
+ if (horizontalArrows) {
7897
+ event.preventDefault();
7898
+ const prevIsOpen = keyManager.activeItem?.isMenuOpen();
7899
+ keyManager.activeItem?.getMenuTrigger()?.close();
7900
+ keyManager.setFocusOrigin('keyboard');
7901
+ keyManager.onKeydown(event);
7902
+ if (prevIsOpen) {
7903
+ keyManager.activeItem?.getMenuTrigger()?.open();
7904
+ }
7905
+ }
7906
+ }
7907
+ break;
7908
+ case ESCAPE:
7909
+ if (!hasModifierKey(event)) {
7910
+ event.preventDefault();
7911
+ keyManager.activeItem?.getMenuTrigger()?.close();
7912
+ }
7913
+ break;
7914
+ case TAB$1:
7915
+ if (!hasModifierKey(event, 'altKey', 'metaKey', 'ctrlKey')) {
7916
+ keyManager.activeItem?.getMenuTrigger()?.close();
7917
+ }
7918
+ break;
7919
+ default:
7920
+ keyManager.onKeydown(event);
7921
+ }
7922
+ }
7923
+ _toggleOpenMenu(focusNext) {
7924
+ const keyManager = this.keyManager;
7925
+ if (!keyManager)
7926
+ return;
7927
+ switch (focusNext) {
7928
+ case 0 /* FocusNext.nextItem */:
7929
+ keyManager.setFocusOrigin('keyboard');
7930
+ keyManager.setNextItemActive();
7931
+ keyManager.activeItem?.getMenuTrigger()?.open();
7932
+ break;
7933
+ case 1 /* FocusNext.previousItem */:
7934
+ keyManager.setFocusOrigin('keyboard');
7935
+ keyManager.setPreviousItemActive();
7936
+ keyManager.activeItem?.getMenuTrigger()?.open();
7937
+ break;
7938
+ case 2 /* FocusNext.currentItem */:
7939
+ if (keyManager.activeItem) {
7940
+ keyManager.setFocusOrigin('keyboard');
7941
+ keyManager.setActiveItem(keyManager.activeItem);
7942
+ }
7943
+ break;
7944
+ }
7945
+ }
7946
+ _subscribeToMenuStackEmptied() {
7947
+ this.menuStack?.emptied.pipe(takeUntil$1(this.destroyed)).subscribe((event) => this._toggleOpenMenu(event));
7948
+ }
7949
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuBar, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
7950
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkMenuBar, isStandalone: true, selector: "[cdkMenuBar]", host: { attributes: { "role": "menubar" }, listeners: { "keydown": "_handleKeyEvent($event)" }, classAttribute: "cdk-menu-bar" }, providers: [
7951
+ { provide: CdkMenuGroup, useExisting: CdkMenuBar },
7952
+ { provide: CDK_MENU, useExisting: CdkMenuBar },
7953
+ { provide: MENU_STACK, useFactory: () => MenuStack.inline('horizontal') },
7954
+ ], exportAs: ["cdkMenuBar"], usesInheritance: true, ngImport: i0 }); }
7955
+ }
7956
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuBar, decorators: [{
7957
+ type: Directive,
7958
+ args: [{
7959
+ selector: '[cdkMenuBar]',
7960
+ exportAs: 'cdkMenuBar',
7961
+ standalone: true,
7962
+ host: {
7963
+ role: 'menubar',
7964
+ class: 'cdk-menu-bar',
7965
+ '(keydown)': '_handleKeyEvent($event)',
7966
+ },
7967
+ providers: [
7968
+ { provide: CdkMenuGroup, useExisting: CdkMenuBar },
7969
+ { provide: CDK_MENU, useExisting: CdkMenuBar },
7970
+ { provide: MENU_STACK, useFactory: () => MenuStack.inline('horizontal') },
7971
+ ],
7972
+ }]
7973
+ }] });
7974
+
7975
+ class CdkMenuItemSelectable extends CdkMenuItem {
7976
+ constructor() {
7977
+ super(...arguments);
7978
+ this._checked = false;
7979
+ this.closeOnSpacebarTrigger = false;
7980
+ }
7981
+ get checked() {
7982
+ return this._checked;
7983
+ }
7984
+ set checked(value) {
7985
+ this._checked = coerceBooleanProperty(value);
7986
+ }
7987
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuItemSelectable, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
7988
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkMenuItemSelectable, inputs: { checked: ["cdkMenuItemChecked", "checked"] }, host: { properties: { "attr.aria-checked": "!!checked", "attr.aria-disabled": "disabled || null" } }, usesInheritance: true, ngImport: i0 }); }
7989
+ }
7990
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuItemSelectable, decorators: [{
7991
+ type: Directive,
7992
+ args: [{
7993
+ host: {
7994
+ '[attr.aria-checked]': '!!checked',
7995
+ '[attr.aria-disabled]': 'disabled || null',
7996
+ },
7997
+ }]
7998
+ }], propDecorators: { checked: [{
7999
+ type: Input,
8000
+ args: ['cdkMenuItemChecked']
8001
+ }] } });
8002
+
8003
+ /* eslint-disable @angular-eslint/directive-class-suffix */
8004
+ class CdkMenuItemCheckbox extends CdkMenuItemSelectable {
8005
+ trigger(options) {
8006
+ super.trigger(options);
8007
+ if (!this.disabled) {
8008
+ this.checked = !this.checked;
8009
+ }
8010
+ }
8011
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuItemCheckbox, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
8012
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkMenuItemCheckbox, isStandalone: true, selector: "[cdkMenuItemCheckbox]", host: { attributes: { "role": "menuitemcheckbox" }, properties: { "class.cdk-menu-item-checkbox": "true" } }, providers: [
8013
+ { provide: CdkMenuItemSelectable, useExisting: CdkMenuItemCheckbox },
8014
+ { provide: CdkMenuItem, useExisting: CdkMenuItemSelectable },
8015
+ ], exportAs: ["cdkMenuItemCheckbox"], usesInheritance: true, ngImport: i0 }); }
8016
+ }
8017
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuItemCheckbox, decorators: [{
8018
+ type: Directive,
8019
+ args: [{
8020
+ selector: '[cdkMenuItemCheckbox]',
8021
+ exportAs: 'cdkMenuItemCheckbox',
8022
+ standalone: true,
8023
+ host: {
8024
+ role: 'menuitemcheckbox',
8025
+ '[class.cdk-menu-item-checkbox]': 'true',
8026
+ },
8027
+ providers: [
8028
+ { provide: CdkMenuItemSelectable, useExisting: CdkMenuItemCheckbox },
8029
+ { provide: CdkMenuItem, useExisting: CdkMenuItemSelectable },
8030
+ ],
8031
+ }]
8032
+ }] });
8033
+
8034
+ /* eslint-disable @angular-eslint/directive-class-suffix */
8035
+ let nextId$1 = 0;
8036
+ class CdkMenuItemRadio extends CdkMenuItemSelectable {
8037
+ constructor() {
8038
+ super();
8039
+ this._selectionDispatcher = inject(UniqueSelectionDispatcher);
8040
+ this._id = `${nextId$1++}`;
8041
+ this._registerDispatcherListener();
8042
+ }
8043
+ ngOnDestroy() {
8044
+ super.ngOnDestroy();
8045
+ this._removeDispatcherListener?.();
8046
+ }
8047
+ trigger(options) {
8048
+ super.trigger(options);
8049
+ if (!this.disabled) {
8050
+ this._selectionDispatcher.notify(this._id, '');
8051
+ }
8052
+ }
8053
+ _registerDispatcherListener() {
8054
+ this._removeDispatcherListener = this._selectionDispatcher.listen((id) => {
8055
+ this.checked = this._id === id;
8056
+ });
8057
+ }
8058
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuItemRadio, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
8059
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: CdkMenuItemRadio, isStandalone: true, selector: "[cdkMenuItemRadio]", host: { attributes: { "role": "menuitemradio" }, properties: { "class.cdk-menu-item-radio": "true" } }, providers: [
8060
+ { provide: CdkMenuItemSelectable, useExisting: CdkMenuItemRadio },
8061
+ { provide: CdkMenuItem, useExisting: CdkMenuItemSelectable },
8062
+ ], exportAs: ["cdkMenuItemRadio"], usesInheritance: true, ngImport: i0 }); }
8063
+ }
8064
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuItemRadio, decorators: [{
8065
+ type: Directive,
8066
+ args: [{
8067
+ selector: '[cdkMenuItemRadio]',
8068
+ exportAs: 'cdkMenuItemRadio',
8069
+ standalone: true,
8070
+ host: {
8071
+ role: 'menuitemradio',
8072
+ '[class.cdk-menu-item-radio]': 'true',
8073
+ },
8074
+ providers: [
8075
+ { provide: CdkMenuItemSelectable, useExisting: CdkMenuItemRadio },
8076
+ { provide: CdkMenuItem, useExisting: CdkMenuItemSelectable },
8077
+ ],
8078
+ }]
8079
+ }], ctorParameters: function () { return []; } });
8080
+
8081
+ const MENU_DIRECTIVES = [
8082
+ CdkMenuBar,
8083
+ CdkMenu,
8084
+ CdkMenuItem,
8085
+ CdkMenuItemRadio,
8086
+ CdkMenuItemCheckbox,
8087
+ CdkMenuTrigger,
8088
+ CdkMenuGroup,
8089
+ CdkContextMenuTrigger,
8090
+ CdkTargetMenuAim,
8091
+ ];
8092
+ class CdkMenuModule {
8093
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8094
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuModule, imports: [OverlayModule, CdkMenuBar,
8095
+ CdkMenu,
8096
+ CdkMenuItem,
8097
+ CdkMenuItemRadio,
8098
+ CdkMenuItemCheckbox,
8099
+ CdkMenuTrigger,
8100
+ CdkMenuGroup,
8101
+ CdkContextMenuTrigger,
8102
+ CdkTargetMenuAim], exports: [CdkMenuBar,
8103
+ CdkMenu,
8104
+ CdkMenuItem,
8105
+ CdkMenuItemRadio,
8106
+ CdkMenuItemCheckbox,
8107
+ CdkMenuTrigger,
8108
+ CdkMenuGroup,
8109
+ CdkContextMenuTrigger,
8110
+ CdkTargetMenuAim] }); }
8111
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuModule, imports: [OverlayModule] }); }
8112
+ }
8113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: CdkMenuModule, decorators: [{
8114
+ type: NgModule,
8115
+ args: [{
8116
+ imports: [OverlayModule, ...MENU_DIRECTIVES],
8117
+ exports: MENU_DIRECTIVES,
8118
+ }]
8119
+ }] });
8120
+
8121
+ const TOGGLETIP_CONFIG = new InjectionToken('ToggletipConfig');
8122
+ const TOGGLETIP_TEXT = new InjectionToken('ToggletipText');
8123
+ const TOGGLETIP_TEMPLATE = new InjectionToken('ToggletipTemplate');
8124
+ const TOGGLETIP_DEFAULT_CONFIG = {
8125
+ placement: 'auto',
8126
+ offset: [0, 8],
8127
+ arrowPadding: 4,
8128
+ customAnimated: false,
8129
+ };
8130
+
8131
+ const createToggletipConfig = (config = {}) => ({
8132
+ ...TOGGLETIP_DEFAULT_CONFIG,
8133
+ ...(config || {}),
8134
+ });
8135
+
8136
+ const provideToggletipConfig = (config = {}) => {
8137
+ return { provide: TOGGLETIP_CONFIG, useValue: createToggletipConfig(config) };
8138
+ };
8139
+
8140
+ const TOGGLETIP_DIRECTIVE = new InjectionToken('TOGGLETIP_DIRECTIVE');
8141
+ class ToggletipDirective {
8142
+ get toggletip() {
8143
+ return this._toggletip;
8144
+ }
8145
+ set toggletip(v) {
8146
+ this._toggletip = v;
8147
+ }
8148
+ get showToggletip() {
8149
+ return this._showToggletip;
8150
+ }
8151
+ set showToggletip(value) {
8152
+ this._showToggletip = booleanAttribute(value);
8153
+ if (this._showToggletip && !this._animatedOverlay.isMounted) {
8154
+ nextFrame(() => {
8155
+ this._mountToggletip();
8156
+ this._addListeners();
8157
+ });
8158
+ }
8159
+ else if (!this._showToggletip && this._animatedOverlay.isMounted) {
8160
+ this._animatedOverlay.unmount();
8161
+ this._removeListeners();
8162
+ }
8163
+ }
8164
+ constructor() {
8165
+ this._destroy$ = createDestroy();
8166
+ this._defaultConfig = inject(TOGGLETIP_CONFIG, { optional: true }) ?? createToggletipConfig();
8167
+ this._animatedOverlay = inject(AnimatedOverlayDirective);
8168
+ this._toggletip = null;
8169
+ this._showToggletip = false;
8170
+ this.toggletipClose = new EventEmitter();
8171
+ this._clickObserverService = inject(ClickObserverService);
8172
+ this._listenerSubscriptions = [];
8173
+ this._animatedOverlay.placement = this._defaultConfig.placement;
8174
+ this._animatedOverlay.offset = this._defaultConfig.offset;
8175
+ this._animatedOverlay.arrowPadding = this._defaultConfig.arrowPadding;
8176
+ }
8177
+ ngOnInit() {
8178
+ this._animatedOverlay
8179
+ .afterClosed()
8180
+ .pipe(tap(() => {
8181
+ this._removeListeners();
8182
+ this.toggletipClose.emit();
8183
+ }), takeUntil(this._destroy$))
8184
+ .subscribe();
8185
+ }
8186
+ ngOnDestroy() {
8187
+ this._animatedOverlay._destroy();
8188
+ this._removeListeners();
8189
+ }
8190
+ _addListeners() {
8191
+ const keyupEscSub = fromEvent(document, 'keyup')
8192
+ .pipe(filter((e) => e.key === 'Escape'), tap(() => this._animatedOverlay.unmount()))
8193
+ .subscribe();
8194
+ const clickOutsideSub = this._clickObserverService
8195
+ .observe(this._animatedOverlay.componentRef?.location.nativeElement)
8196
+ .subscribe((e) => {
8197
+ const targetElement = e.target;
8198
+ const isInside = this._animatedOverlay.componentRef?.location.nativeElement.contains(targetElement);
8199
+ if (!isInside) {
8200
+ this._animatedOverlay.unmount();
8201
+ }
8202
+ });
8203
+ this._listenerSubscriptions.push(keyupEscSub, clickOutsideSub);
8204
+ }
8205
+ _removeListeners() {
8206
+ this._listenerSubscriptions.forEach((s) => s.unsubscribe());
8207
+ this._listenerSubscriptions.length = 0;
8208
+ }
8209
+ _mountToggletip() {
8210
+ this._animatedOverlay.mount({
8211
+ component: ToggletipComponent,
8212
+ providers: [
8213
+ {
8214
+ provide: TOGGLETIP_CONFIG,
8215
+ useValue: this._defaultConfig,
8216
+ },
8217
+ ...[
8218
+ typeof this.toggletip === 'string'
8219
+ ? {
8220
+ provide: TOGGLETIP_TEXT,
8221
+ useValue: this.toggletip,
8222
+ }
8223
+ : {
8224
+ provide: TOGGLETIP_TEMPLATE,
8225
+ useValue: this.toggletip,
8226
+ },
8227
+ ],
8228
+ ],
8229
+ });
8230
+ }
8231
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ToggletipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
8232
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: ToggletipDirective, isStandalone: true, selector: "[etToggletip]", inputs: { toggletip: ["etToggletip", "toggletip"], showToggletip: "showToggletip" }, outputs: { toggletipClose: "toggletipClose" }, providers: [
8233
+ {
8234
+ provide: TOGGLETIP_DIRECTIVE,
8235
+ useExisting: ToggletipDirective,
8236
+ },
8237
+ ], hostDirectives: [{ directive: i1$1.AnimatedOverlayDirective, inputs: ["placement", "placement"] }], ngImport: i0 }); }
8238
+ }
8239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ToggletipDirective, decorators: [{
8240
+ type: Directive,
8241
+ args: [{
8242
+ selector: '[etToggletip]',
8243
+ standalone: true,
8244
+ providers: [
8245
+ {
8246
+ provide: TOGGLETIP_DIRECTIVE,
8247
+ useExisting: ToggletipDirective,
8248
+ },
8249
+ ],
8250
+ hostDirectives: [{ directive: AnimatedOverlayDirective, inputs: ['placement'] }],
8251
+ }]
8252
+ }], ctorParameters: function () { return []; }, propDecorators: { toggletip: [{
8253
+ type: Input,
8254
+ args: ['etToggletip']
8255
+ }], showToggletip: [{
8256
+ type: Input
8257
+ }], toggletipClose: [{
8258
+ type: Output
8259
+ }] } });
8260
+
8261
+ const TOGGLETIP = new InjectionToken('Toggletip');
8262
+ // TODO(TRB): The focus should get trapped inside the toggletip.
8263
+ // The toggletip trigger should get a aria-haspopup="true" and aria-expanded="true" attribute.
8264
+ class ToggletipComponent {
8265
+ constructor() {
8266
+ this._config = inject(TOGGLETIP_CONFIG);
8267
+ this.toggletipText = inject(TOGGLETIP_TEXT, { optional: true });
8268
+ this.toggletipTemplate = inject(TOGGLETIP_TEMPLATE, { optional: true });
8269
+ this.injector = inject(Injector);
8270
+ this._cdr = inject(ChangeDetectorRef);
8271
+ this._trigger = inject(TOGGLETIP_DIRECTIVE);
8272
+ }
8273
+ get attrAriaHidden() {
8274
+ return true;
8275
+ }
8276
+ get usesDefaultAnimation() {
8277
+ return !this._config.customAnimated;
8278
+ }
8279
+ get containerClass() {
8280
+ return this._config.containerClass;
8281
+ }
8282
+ _markForCheck() {
8283
+ this._cdr.markForCheck();
8284
+ }
8285
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ToggletipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8286
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", 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: [
8287
+ {
8288
+ provide: TOGGLETIP,
8289
+ useExisting: ToggletipComponent,
8290
+ },
8291
+ ], 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\" data-popper-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[data-popper-placement^=top] .toggletip-arrow{bottom:-4px}.et-toggletip[data-popper-placement^=right] .toggletip-arrow{left:-4px}.et-toggletip[data-popper-placement^=bottom] .toggletip-arrow{top:-4px}.et-toggletip[data-popper-placement^=left] .toggletip-arrow{right:-4px}.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)}.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{inline-size:var(--arrow-size);block-size:var(--arrow-size);position:absolute;z-index:-1}.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[data-popper-placement^=top] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=top] .et-toggletip-container.et-animation-leave-to{transform:translateY(5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=right] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=right] .et-toggletip-container.et-animation-leave-to{transform:translate(-5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=bottom] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=bottom] .et-toggletip-container.et-animation-leave-to{transform:translateY(-5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=left] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-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 }); }
8292
+ }
8293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ToggletipComponent, decorators: [{
8294
+ type: Component,
8295
+ args: [{ selector: 'et-toggletip', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgIf, NgTemplateOutlet, AnimatedLifecycleDirective], host: {
8296
+ class: 'et-toggletip',
8297
+ }, providers: [
8298
+ {
8299
+ provide: TOGGLETIP,
8300
+ useExisting: ToggletipComponent,
8301
+ },
8302
+ ], 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\" data-popper-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[data-popper-placement^=top] .toggletip-arrow{bottom:-4px}.et-toggletip[data-popper-placement^=right] .toggletip-arrow{left:-4px}.et-toggletip[data-popper-placement^=bottom] .toggletip-arrow{top:-4px}.et-toggletip[data-popper-placement^=left] .toggletip-arrow{right:-4px}.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)}.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{inline-size:var(--arrow-size);block-size:var(--arrow-size);position:absolute;z-index:-1}.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[data-popper-placement^=top] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=top] .et-toggletip-container.et-animation-leave-to{transform:translateY(5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=right] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=right] .et-toggletip-container.et-animation-leave-to{transform:translate(-5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=bottom] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=bottom] .et-toggletip-container.et-animation-leave-to{transform:translateY(-5px)}.et-toggletip.et-with-default-animation[data-popper-placement^=left] .et-toggletip-container.et-animation-enter-from,.et-toggletip.et-with-default-animation[data-popper-placement^=left] .et-toggletip-container.et-animation-leave-to{transform:translate(5px)}\n"] }]
8303
+ }], propDecorators: { _animatedLifecycle: [{
8304
+ type: ViewChild,
8305
+ args: [ANIMATED_LIFECYCLE_TOKEN, { static: true }]
8306
+ }], attrAriaHidden: [{
8307
+ type: HostBinding,
6908
8308
  args: ['attr.aria-hidden']
6909
8309
  }], usesDefaultAnimation: [{
6910
8310
  type: HostBinding,
@@ -7687,7 +9087,6 @@ class ScrollableComponent {
7687
9087
  this._renderer.setAttribute(element, 'can-scroll', state.canScroll.toString());
7688
9088
  }), takeUntil(this._destroy$))
7689
9089
  .subscribe();
7690
- this._setupScrollListening();
7691
9090
  }
7692
9091
  ngAfterContentInit() {
7693
9092
  if (!this.activeElements || !this.elements) {
@@ -7713,6 +9112,7 @@ class ScrollableComponent {
7713
9112
  });
7714
9113
  }), takeUntil(this._destroy$))
7715
9114
  .subscribe();
9115
+ this._setupScrollListening();
7716
9116
  }
7717
9117
  scrollOneContainerSize(direction) {
7718
9118
  const scrollElement = this.scrollable.nativeElement;
@@ -7809,7 +9209,7 @@ class ScrollableComponent {
7809
9209
  isSnapping = false;
7810
9210
  }))
7811
9211
  .subscribe();
7812
- merge(fromEvent(scrollElement, 'scroll'), this._isCursorDragging$, of(true))
9212
+ merge(fromEvent(scrollElement, 'scroll'), this._isCursorDragging$, this.elements?.changes.pipe(startWith(this.elements)) ?? of(null))
7813
9213
  .pipe(debounceTime(300), takeUntil(this._destroy$), tap(() => {
7814
9214
  const elements = this.elements
7815
9215
  ?.toArray()
@@ -7878,13 +9278,13 @@ class ScrollableComponent {
7878
9278
  .subscribe();
7879
9279
  }
7880
9280
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ScrollableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7881
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { itemSize: "itemSize", direction: "direction", scrollableRole: "scrollableRole", scrollableClass: "scrollableClass", renderMasks: ["renderMasks", "renderMasks", booleanAttribute], renderButtons: ["renderButtons", "renderButtons", booleanAttribute], renderScrollbars: ["renderScrollbars", "renderScrollbars", booleanAttribute], stickyButtons: ["stickyButtons", "stickyButtons", booleanAttribute], cursorDragScroll: ["cursorDragScroll", "cursorDragScroll", booleanAttribute], disableActiveElementScrolling: ["disableActiveElementScrolling", "disableActiveElementScrolling", booleanAttribute], scrollMode: "scrollMode", snap: ["snap", "snap", booleanAttribute], scrollMargin: ["scrollMargin", "scrollMargin", numberAttribute] }, outputs: { scrollStateChange: "scrollStateChange", intersectionChange: "intersectionChange" }, host: { properties: { "attr.item-size": "this.itemSize", "attr.direction": "this.direction", "attr.render-scrollbars": "this.renderScrollbars", "attr.sticky-buttons": "this.stickyButtons" }, classAttribute: "et-scrollable" }, queries: [{ propertyName: "activeElements", predicate: IS_ACTIVE_ELEMENT, descendants: true }, { propertyName: "elements", predicate: IS_ELEMENT, descendants: true }], viewQueries: [{ propertyName: "scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }], ngImport: i0, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole ?? undefined\"\n [ngClass]=\"scrollableClass\"\n [etCursorDragScroll]=\"cursorDragScroll\"\n [allowedDirection]=\"direction\"\n (etObserveScrollState)=\"_scrollStateChanged($event)\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container\"\n>\n <ng-content />\n</div>\n\n<div *ngIf=\"renderMasks\" class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n</div>\n\n<div *ngIf=\"renderButtons\" class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</div>\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--auto-size: 1fr}.et-scrollable[item-size=full]{--auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size);overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size);overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[at-start=false] .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable[at-start=false] .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable[at-start=false] .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable[at-end=false] .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable[at-end=false] .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable[at-end=false] .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);overflow:auto;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0;transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}\n"], dependencies: [{ kind: "directive", type: CursorDragScrollDirective, selector: "[etCursorDragScroll]", inputs: ["etCursorDragScroll", "allowedDirection"], outputs: ["cursorDragStart", "cursorDragMove", "cursorDragEnd"], exportAs: ["etCursorDragScroll"] }, { kind: "directive", type: ObserveScrollStateDirective, selector: "[etObserveScrollState]", inputs: ["rootMargin", "observerThreshold"], outputs: ["etObserveScrollState"], exportAs: ["etObserveScrollState"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9281
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { itemSize: "itemSize", direction: "direction", scrollableRole: "scrollableRole", scrollableClass: "scrollableClass", renderMasks: ["renderMasks", "renderMasks", booleanAttribute], renderButtons: ["renderButtons", "renderButtons", booleanAttribute], renderScrollbars: ["renderScrollbars", "renderScrollbars", booleanAttribute], stickyButtons: ["stickyButtons", "stickyButtons", booleanAttribute], cursorDragScroll: ["cursorDragScroll", "cursorDragScroll", booleanAttribute], disableActiveElementScrolling: ["disableActiveElementScrolling", "disableActiveElementScrolling", booleanAttribute], scrollMode: "scrollMode", snap: ["snap", "snap", booleanAttribute], scrollMargin: ["scrollMargin", "scrollMargin", numberAttribute] }, outputs: { scrollStateChange: "scrollStateChange", intersectionChange: "intersectionChange" }, host: { properties: { "attr.item-size": "this.itemSize", "attr.direction": "this.direction", "attr.render-scrollbars": "this.renderScrollbars", "attr.sticky-buttons": "this.stickyButtons" }, classAttribute: "et-scrollable" }, queries: [{ propertyName: "activeElements", predicate: IS_ACTIVE_ELEMENT, descendants: true }, { propertyName: "elements", predicate: IS_ELEMENT, descendants: true }], viewQueries: [{ propertyName: "scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }], ngImport: i0, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll\"\n [allowedDirection]=\"direction\"\n (etObserveScrollState)=\"_scrollStateChanged($event)\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n>\n <div class=\"et-scroll-observer-first-element\"></div>\n <div [ngClass]=\"scrollableClass\" class=\"et-scrollable-container\">\n <ng-content />\n </div>\n <div class=\"et-scroll-observer-last-element\"></div>\n</div>\n\n<div *ngIf=\"renderMasks\" class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n</div>\n\n<div *ngIf=\"renderButtons\" class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</div>\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--auto-size: 1fr}.et-scrollable[item-size=full]{--auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden;grid-template-columns:auto 1fr auto}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto;grid-template-rows:auto 1fr auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[at-start=false] .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable[at-start=false] .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable[at-start=false] .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable[at-end=false] .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable[at-end=false] .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable[at-end=false] .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow)}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0;transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}\n"], dependencies: [{ kind: "directive", type: CursorDragScrollDirective, selector: "[etCursorDragScroll]", inputs: ["etCursorDragScroll", "allowedDirection"], outputs: ["cursorDragStart", "cursorDragMove", "cursorDragEnd"], exportAs: ["etCursorDragScroll"] }, { kind: "directive", type: ObserveScrollStateDirective, selector: "[etObserveScrollState]", inputs: ["rootMargin", "observerThreshold"], outputs: ["etObserveScrollState"], exportAs: ["etObserveScrollState"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7882
9282
  }
7883
9283
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: ScrollableComponent, decorators: [{
7884
9284
  type: Component,
7885
9285
  args: [{ selector: 'et-scrollable', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CursorDragScrollDirective, ObserveScrollStateDirective, NgClass, NgIf, LetDirective, ChevronIconComponent], host: {
7886
9286
  class: 'et-scrollable',
7887
- }, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole ?? undefined\"\n [ngClass]=\"scrollableClass\"\n [etCursorDragScroll]=\"cursorDragScroll\"\n [allowedDirection]=\"direction\"\n (etObserveScrollState)=\"_scrollStateChanged($event)\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container\"\n>\n <ng-content />\n</div>\n\n<div *ngIf=\"renderMasks\" class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n</div>\n\n<div *ngIf=\"renderButtons\" class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</div>\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--auto-size: 1fr}.et-scrollable[item-size=full]{--auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size);overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size);overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[at-start=false] .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable[at-start=false] .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable[at-start=false] .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable[at-end=false] .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable[at-end=false] .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable[at-end=false] .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);overflow:auto;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0;transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}\n"] }]
9287
+ }, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll\"\n [allowedDirection]=\"direction\"\n (etObserveScrollState)=\"_scrollStateChanged($event)\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n>\n <div class=\"et-scroll-observer-first-element\"></div>\n <div [ngClass]=\"scrollableClass\" class=\"et-scrollable-container\">\n <ng-content />\n </div>\n <div class=\"et-scroll-observer-last-element\"></div>\n</div>\n\n<div *ngIf=\"renderMasks\" class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n</div>\n\n<div *ngIf=\"renderButtons\" class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n</div>\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--auto-size: 1fr}.et-scrollable[item-size=full]{--auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden;grid-template-columns:auto 1fr auto}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto;grid-template-rows:auto 1fr auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[at-start=false] .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable[at-start=false] .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable[at-start=false] .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable[at-end=false] .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable[at-end=false] .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable[at-end=false] .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow)}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0;transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}\n"] }]
7888
9288
  }], propDecorators: { itemSize: [{
7889
9289
  type: Input
7890
9290
  }, {
@@ -10290,5 +11690,5 @@ const TABS_CONFIG = new InjectionToken('TABS_CONFIG');
10290
11690
  * Generated bundle index. Do not edit.
10291
11691
  */
10292
11692
 
10293
- export { ACCORDION_COMPONENT, ACCORDION_HINT_WRAPPER_DIRECTIVE, ACCORDION_LABEL_WRAPPER_DIRECTIVE, AccordionComponent, AccordionGroupComponent, AccordionHintDirective, AccordionHintWrapperDirective, AccordionImports, AccordionLabelDirective, AccordionLabelWrapperDirective, ActiveTabUnderlineBarManager, ActiveTabUnderlineDirective, AutosizeTextareaDirective, BOTTOM_SHEET_CONFIG, BOTTOM_SHEET_DATA, BOTTOM_SHEET_DEFAULT_CONFIG, BOTTOM_SHEET_DEFAULT_OPTIONS, BOTTOM_SHEET_MIN_SWIPE_TO_CLOSE_LENGTH, BOTTOM_SHEET_MIN_VELOCITY_TO_CLOSE, BOTTOM_SHEET_SCROLL_STRATEGY, BOTTOM_SHEET_SCROLL_STRATEGY_PROVIDER, BOTTOM_SHEET_SCROLL_STRATEGY_PROVIDER_FACTORY, BRACKET_CONFIG_TOKEN, BRACKET_DEFAULT_CONFIG, BRACKET_MATCH_ID_TOKEN, BRACKET_ROUND_ID_TOKEN, BRACKET_TOKEN, BottomSheetContainerBaseComponent, BottomSheetContainerComponent, BottomSheetDragHandleComponent, BottomSheetImports, BottomSheetRef, BottomSheetService, BottomSheetServiceBase, BottomSheetSwipeHandlerService, BottomSheetTitleDirective, Bracket, BracketComponent, BracketImports, BracketMatchComponent, BracketMatchDirective, BracketRoundDirective, BracketRoundHeaderComponent, ButtonComponent, ButtonDirective, ButtonImports, CHECKBOX_FIELD_TOKEN, CHECKBOX_GROUP_CONTROL_TOKEN, CHECKBOX_GROUP_TOKEN, CHECKBOX_TOKEN, COMBOBOX_DIR_TOKEN, COMBOBOX_TOKEN, CellDefDirective, CellDirective, CheckboxComponent, CheckboxDirective, CheckboxFieldComponent, CheckboxFieldDirective, CheckboxGroupComponent, CheckboxGroupControlDirective, CheckboxGroupDirective, CheckboxImports, ChevronIconComponent, ColumnDefDirective, ComboboxComponent, ComboboxDirective, ComboboxImports, DIALOG_CONFIG, DIALOG_DATA, DIALOG_DEFAULT_CONFIG, DIALOG_DEFAULT_OPTIONS, DIALOG_SCROLL_STRATEGY, DIALOG_SCROLL_STRATEGY_PROVIDER, DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, DYNAMIC_FORM_FIELD_TOKEN, DYNAMIC_FORM_GROUP_TOKEN, DecoratedFormFieldBase, DecoratedInputBase, DefaultValidatorErrorsService, DialogCloseDirective, DialogContainerBaseComponent, DialogContainerComponent, DialogImports, DialogRef, DialogService, DialogServiceBase, DialogTitleDirective, DynamicFormFieldDirective, DynamicFormGroupDirective, DynamicOverlayService, EMAIL_INPUT_TOKEN, EmailInputComponent, EmailInputDirective, ErrorComponent, FooterCellDefDirective, FooterCellDirective, FooterRowComponent, FooterRowDefDirective, FormFieldStateService, FormGroupStateService, HeaderCellDefDirective, HeaderCellDirective, HeaderRowComponent, HeaderRowDefDirective, INPUT_PREFIX_TOKEN, INPUT_SUFFIX_TOKEN, INPUT_TOKEN, IconImports, IfInputEmptyDirective, IfInputFilledDirective, InlineTabBodyComponent, InlineTabBodyHostDirective, InlineTabChangeEvent, InlineTabComponent, InlineTabContentDirective, InlineTabHeaderComponent, InlineTabLabelDirective, InlineTabLabelWrapperDirective, InlineTabsComponent, InputBase, InputDirective, InputFieldComponent, InputImports, InputPrefixDirective, InputStateService, InputSuffixDirective, LABEL_TOKEN, LabelComponent, LabelImports, LabelSuffixDirective, MASONRY_ITEM_TOKEN, MAX_SAFE_INTEGER, MasonryComponent, MasonryImports, MasonryItemComponent, NATIVE_INPUT_REF_TOKEN, NATIVE_SELECT_INPUT_TOKEN, NATIVE_SELECT_OPTION_TOKEN, NUMBER_INPUT_TOKEN, NativeInputRefDirective, NativeSelectImports, NativeSelectInputComponent, NativeSelectInputDirective, NativeSelectOptionComponent, NativeSelectOptionDirective, NavTabLinkComponent, NavTabsComponent, NavTabsOutletComponent, NoDataRowDirective, NumberInputComponent, NumberInputDirective, PASSWORD_INPUT_TOKEN, PROGRESS_SPINNER_DEFAULT_OPTIONS, PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY, PaginatedTabHeaderDirective, PaginationComponent, PaginationImports, PasswordInputComponent, PasswordInputDirective, PasswordInputToggleComponent, PictureComponent, PictureDataDirective, ProgressSpinnerComponent, QueryButtonComponent, QueryButtonDirective, RADIO_FIELD_TOKEN, RADIO_GROUP_TOKEN, RADIO_TOKEN, RadioComponent, RadioDirective, RadioFieldComponent, RadioFieldDirective, RadioGroupComponent, RadioGroupDirective, RadioImports, RecycleRowsDirective, RowComponent, RowDefDirective, SEARCH_INPUT_TOKEN, SEGMENTED_BUTTON_FIELD_TOKEN, SEGMENTED_BUTTON_GROUP_TOKEN, SEGMENTED_BUTTON_TOKEN, SELECT_BODY_TOKEN, SELECT_FIELD_TOKEN, SELECT_OPTION_TOKEN, SELECT_TOKEN, SLIDE_TOGGLE_TOKEN, SORT_DEFAULT_OPTIONS, SORT_HEADER_COLUMN_DEF, SORT_HEADER_INTL_PROVIDER, SORT_HEADER_INTL_PROVIDER_FACTORY, STATIC_FORM_FIELD_TOKEN, STATIC_FORM_GROUP_TOKEN, ScrollableComponent, ScrollableImports, SearchInputClearComponent, SearchInputComponent, SearchInputDirective, SegmentedButtonComponent, SegmentedButtonDirective, SegmentedButtonFieldComponent, SegmentedButtonFieldDirective, SegmentedButtonGroupComponent, SegmentedButtonGroupDirective, SegmentedButtonImports, SelectBodyComponent, SelectBodyDirective, SelectComponent, SelectDirective, SelectFieldComponent, SelectFieldDirective, SelectImports, SelectOptionComponent, SelectOptionDirective, SkeletonComponent, SkeletonImports, SkeletonItemComponent, SlideToggleComponent, SlideToggleDirective, SlideToggleFieldComponent, SlideToggleImports, SliderComponent, SliderFieldComponent, SliderImports, SortDirective, SortHeaderComponent, SortHeaderIntl, SortImports, StaticFormFieldDirective, StaticFormGroupDirective, SwipeHandlerService, TAB, TABS_CONFIG, TAB_CONTENT, TAB_GROUP, TAB_LABEL, TEXTAREA_INPUT_TOKEN, TEXT_INPUT_TOKEN, TOGGLETIP, TOGGLETIP_CONFIG, TOGGLETIP_DEFAULT_CONFIG, TOGGLETIP_DIRECTIVE, TOGGLETIP_TEMPLATE, TOGGLETIP_TEXT, TOOLTIP, TOOLTIP_CONFIG, TOOLTIP_DEFAULT_CONFIG, TOOLTIP_DIRECTIVE, TOOLTIP_TEMPLATE, TOOLTIP_TEXT, TabImports, TableBusyDirective, TableBusyOutletDirective, TableComponent, TableDataSource, TableImports, TextColumnComponent, TextInputComponent, TextInputDirective, TextareaInputComponent, TextareaInputDirective, ToggletipComponent, ToggletipDirective, ToggletipImports, TooltipComponent, TooltipDirective, TooltipImports, VALIDATOR_ERROR_SERVICE_TOKEN, WRITEABLE_INPUT_TOKEN, WRITEABLE_INPUT_VALUE_ACCESSOR, WriteableInputDirective, _MAT_INK_BAR_POSITIONER, _MAT_INK_BAR_POSITIONER_FACTORY, accordionAnimations, createBottomSheetConfig, createBracketConfig, createDialogConfig, createToggletipConfig, createTooltipConfig, getClosestBottomSheet, getClosestDialog, isOptionDisabled, isUpperBracketMatch, normalizeRoundType, orderRounds, orderRoundsByRoundNumber, paginate, provideBottomSheet, provideBottomSheetDefaultConfig, provideBracketConfig, provideDialog, provideDialogDefaultConfig, provideSort, provideToggletipConfig, provideTooltipConfig, provideValidatorErrorsService, tabAnimations };
11693
+ export { ACCORDION_COMPONENT, ACCORDION_HINT_WRAPPER_DIRECTIVE, ACCORDION_LABEL_WRAPPER_DIRECTIVE, AccordionComponent, AccordionGroupComponent, AccordionHintDirective, AccordionHintWrapperDirective, AccordionImports, AccordionLabelDirective, AccordionLabelWrapperDirective, ActiveTabUnderlineBarManager, ActiveTabUnderlineDirective, AutosizeTextareaDirective, BOTTOM_SHEET_CONFIG, BOTTOM_SHEET_DATA, BOTTOM_SHEET_DEFAULT_CONFIG, BOTTOM_SHEET_DEFAULT_OPTIONS, BOTTOM_SHEET_MIN_SWIPE_TO_CLOSE_LENGTH, BOTTOM_SHEET_MIN_VELOCITY_TO_CLOSE, BOTTOM_SHEET_SCROLL_STRATEGY, BOTTOM_SHEET_SCROLL_STRATEGY_PROVIDER, BOTTOM_SHEET_SCROLL_STRATEGY_PROVIDER_FACTORY, BRACKET_CONFIG_TOKEN, BRACKET_DEFAULT_CONFIG, BRACKET_MATCH_ID_TOKEN, BRACKET_ROUND_ID_TOKEN, BRACKET_TOKEN, BottomSheetContainerBaseComponent, BottomSheetContainerComponent, BottomSheetDragHandleComponent, BottomSheetImports, BottomSheetRef, BottomSheetService, BottomSheetServiceBase, BottomSheetSwipeHandlerService, BottomSheetTitleDirective, Bracket, BracketComponent, BracketImports, BracketMatchComponent, BracketMatchDirective, BracketRoundDirective, BracketRoundHeaderComponent, ButtonComponent, ButtonDirective, ButtonImports, CDK_MENU, CHECKBOX_FIELD_TOKEN, CHECKBOX_GROUP_CONTROL_TOKEN, CHECKBOX_GROUP_TOKEN, CHECKBOX_TOKEN, COMBOBOX_DIR_TOKEN, COMBOBOX_TOKEN, CdkContextMenuTrigger, CdkMenu, CdkMenuBar, CdkMenuBase, CdkMenuGroup, CdkMenuItem, CdkMenuItemCheckbox, CdkMenuItemRadio, CdkMenuItemSelectable, CdkMenuModule, CdkMenuTrigger, CdkMenuTriggerBase, CdkTargetMenuAim, CellDefDirective, CellDirective, CheckboxComponent, CheckboxDirective, CheckboxFieldComponent, CheckboxFieldDirective, CheckboxGroupComponent, CheckboxGroupControlDirective, CheckboxGroupDirective, CheckboxImports, ChevronIconComponent, ColumnDefDirective, ComboboxComponent, ComboboxDirective, ComboboxImports, ContextMenuTracker, DIALOG_CONFIG, DIALOG_DATA, DIALOG_DEFAULT_CONFIG, DIALOG_DEFAULT_OPTIONS, DIALOG_SCROLL_STRATEGY, DIALOG_SCROLL_STRATEGY_PROVIDER, DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, DYNAMIC_FORM_FIELD_TOKEN, DYNAMIC_FORM_GROUP_TOKEN, DecoratedFormFieldBase, DecoratedInputBase, DefaultValidatorErrorsService, DialogCloseDirective, DialogContainerBaseComponent, DialogContainerComponent, DialogImports, DialogRef, DialogService, DialogServiceBase, DialogTitleDirective, DynamicFormFieldDirective, DynamicFormGroupDirective, DynamicOverlayService, EMAIL_INPUT_TOKEN, EmailInputComponent, EmailInputDirective, ErrorComponent, FooterCellDefDirective, FooterCellDirective, FooterRowComponent, FooterRowDefDirective, FormFieldStateService, FormGroupStateService, HeaderCellDefDirective, HeaderCellDirective, HeaderRowComponent, HeaderRowDefDirective, INPUT_PREFIX_TOKEN, INPUT_SUFFIX_TOKEN, INPUT_TOKEN, IconImports, IfInputEmptyDirective, IfInputFilledDirective, InlineTabBodyComponent, InlineTabBodyHostDirective, InlineTabChangeEvent, InlineTabComponent, InlineTabContentDirective, InlineTabHeaderComponent, InlineTabLabelDirective, InlineTabLabelWrapperDirective, InlineTabsComponent, InputBase, InputDirective, InputFieldComponent, InputImports, InputPrefixDirective, InputStateService, InputSuffixDirective, LABEL_TOKEN, LabelComponent, LabelImports, LabelSuffixDirective, MASONRY_ITEM_TOKEN, MAX_SAFE_INTEGER, MENU_AIM, MENU_STACK, MENU_TRIGGER, MasonryComponent, MasonryImports, MasonryItemComponent, MenuStack, NATIVE_INPUT_REF_TOKEN, NATIVE_SELECT_INPUT_TOKEN, NATIVE_SELECT_OPTION_TOKEN, NUMBER_INPUT_TOKEN, NativeInputRefDirective, NativeSelectImports, NativeSelectInputComponent, NativeSelectInputDirective, NativeSelectOptionComponent, NativeSelectOptionDirective, NavTabLinkComponent, NavTabsComponent, NavTabsOutletComponent, NoDataRowDirective, NumberInputComponent, NumberInputDirective, PARENT_OR_NEW_INLINE_MENU_STACK_PROVIDER, PARENT_OR_NEW_MENU_STACK_PROVIDER, PASSWORD_INPUT_TOKEN, PROGRESS_SPINNER_DEFAULT_OPTIONS, PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY, PaginatedTabHeaderDirective, PaginationComponent, PaginationImports, PasswordInputComponent, PasswordInputDirective, PasswordInputToggleComponent, PictureComponent, PictureDataDirective, PointerFocusTracker, ProgressSpinnerComponent, QueryButtonComponent, QueryButtonDirective, RADIO_FIELD_TOKEN, RADIO_GROUP_TOKEN, RADIO_TOKEN, RadioComponent, RadioDirective, RadioFieldComponent, RadioFieldDirective, RadioGroupComponent, RadioGroupDirective, RadioImports, RecycleRowsDirective, RowComponent, RowDefDirective, SEARCH_INPUT_TOKEN, SEGMENTED_BUTTON_FIELD_TOKEN, SEGMENTED_BUTTON_GROUP_TOKEN, SEGMENTED_BUTTON_TOKEN, SELECT_BODY_TOKEN, SELECT_FIELD_TOKEN, SELECT_OPTION_TOKEN, SELECT_TOKEN, SLIDE_TOGGLE_TOKEN, SORT_DEFAULT_OPTIONS, SORT_HEADER_COLUMN_DEF, SORT_HEADER_INTL_PROVIDER, SORT_HEADER_INTL_PROVIDER_FACTORY, STATIC_FORM_FIELD_TOKEN, STATIC_FORM_GROUP_TOKEN, ScrollableComponent, ScrollableImports, SearchInputClearComponent, SearchInputComponent, SearchInputDirective, SegmentedButtonComponent, SegmentedButtonDirective, SegmentedButtonFieldComponent, SegmentedButtonFieldDirective, SegmentedButtonGroupComponent, SegmentedButtonGroupDirective, SegmentedButtonImports, SelectBodyComponent, SelectBodyDirective, SelectComponent, SelectDirective, SelectFieldComponent, SelectFieldDirective, SelectImports, SelectOptionComponent, SelectOptionDirective, SkeletonComponent, SkeletonImports, SkeletonItemComponent, SlideToggleComponent, SlideToggleDirective, SlideToggleFieldComponent, SlideToggleImports, SliderComponent, SliderFieldComponent, SliderImports, SortDirective, SortHeaderComponent, SortHeaderIntl, SortImports, StaticFormFieldDirective, StaticFormGroupDirective, SwipeHandlerService, TAB, TABS_CONFIG, TAB_CONTENT, TAB_GROUP, TAB_LABEL, TEXTAREA_INPUT_TOKEN, TEXT_INPUT_TOKEN, TOGGLETIP, TOGGLETIP_CONFIG, TOGGLETIP_DEFAULT_CONFIG, TOGGLETIP_DIRECTIVE, TOGGLETIP_TEMPLATE, TOGGLETIP_TEXT, TOOLTIP, TOOLTIP_CONFIG, TOOLTIP_DEFAULT_CONFIG, TOOLTIP_DIRECTIVE, TOOLTIP_TEMPLATE, TOOLTIP_TEXT, TabImports, TableBusyDirective, TableBusyOutletDirective, TableComponent, TableDataSource, TableImports, TargetMenuAim, TextColumnComponent, TextInputComponent, TextInputDirective, TextareaInputComponent, TextareaInputDirective, ToggletipComponent, ToggletipDirective, ToggletipImports, TooltipComponent, TooltipDirective, TooltipImports, VALIDATOR_ERROR_SERVICE_TOKEN, WRITEABLE_INPUT_TOKEN, WRITEABLE_INPUT_VALUE_ACCESSOR, WriteableInputDirective, _MAT_INK_BAR_POSITIONER, _MAT_INK_BAR_POSITIONER_FACTORY, accordionAnimations, createBottomSheetConfig, createBracketConfig, createDialogConfig, createToggletipConfig, createTooltipConfig, getClosestBottomSheet, getClosestDialog, isOptionDisabled, isUpperBracketMatch, normalizeRoundType, orderRounds, orderRoundsByRoundNumber, paginate, provideBottomSheet, provideBottomSheetDefaultConfig, provideBracketConfig, provideDialog, provideDialogDefaultConfig, provideSort, provideToggletipConfig, provideTooltipConfig, provideValidatorErrorsService, tabAnimations };
10294
11694
  //# sourceMappingURL=ethlete-cdk.mjs.map